Это не бага, это фича, тонкости, баги и прочее |
Здравствуйте, гость ( Вход | Регистрация )
Это не бага, это фича, тонкости, баги и прочее |
Jun 24 2004, 17:14
Сообщение
#1
|
|
Level 9 Класс: Волшебник Характер: Chaotic Good Раса: Дракон NWN: Скриптинг [PW] |
В этой теме предлагаю постить "странности" скриптов, различные тонкости эвентов, функций и т.п.
Локальные переменные на итемах из инвентаря игрока сохраняются в файле Для меня это было откровением и нашел я это случайно. Если выставить локальную переменную на итем - она сохраняется в .bic файле игрока, что иногда очень удобно (особенно вместе с настоящими nodrop-итемами, многие вещи так делать гораздо проще, чем юзать БД) Событие модуля OnAcquireItem вызывается при _входе_ игрока на шард для _каждой_ вещи из его инвентаря Тоже самое и с событием OnPlayerEquipItem - оно вызывается при входе игрока на шард для каждой одетой на персонажа вещи В событие OnClientLeave не работают некоторые функции для работы с объектом игрока GetPlayername, GetPCIPAddress и некоторые другие. Но локальные переменные читать можно, так что если вам нужны эти данные - занесите их в переменные при входе игрока на шард Событие OnUnAcquireItem вызывается при _попытке_ продажи итема в магазин, даже если эта вещь не покупается Если нет денег у НПС-покупателся, возможно и на plot\stolen то же самое будет. Вероятно что и OnAcquireItem будет вызываться. Бага функции TakeGoldFromCreature() Надо дополнительно проверять текущее действие, if (GetCurrentAction(oPC) == ACTION_DROPITEM) {чит} Т.е. можно задать действие "выложить деньги на землю", некоторое время сервер будет считать, что все деньги по прежнему у вас. если сервер в это время отнимает деньги у игрока функцией TakeGoldFromCreature() - при небольшом навыке на землю упадет _вся_ сумма, не учитывая те, что забрали функцией. Баг особо опасен для банков (IMG:style_emoticons/kolobok_light/smile.gif) (так делались первые миллионы на Эксизе, когда только появился первый банк) Сообщение отредактировал _kaa_ - Jun 24 2004, 17:51 |
Sep 26 2005, 13:12
Сообщение
#2
|
|||
Level 9 Класс: Волшебник Характер: Chaotic Good Раса: Дракон NWN: Скриптинг [PW] |
С этим есть большая проблема, выпадение лута игрока. Обычный механизм работы скрипта с выпадением лута: 1. пройтись по всему инвентарю 2. скопировать все, что должно упасть туда, куда должно упасть (copyitem с сохранением локальных переменных если нужно) 3. удалить все, что скопировали ... Если вещей много, сервер нагружен, а игрок злобный читер или просто не повезло - вполне может быть ситуация, когда при выходе игрока в этот момент происходить дублирование вещей. Т.е. вещи скопировались, пометились на удаление, но скрипт до конца не успел дойти, игрок уже вышел. Возникает вопрос - как с этим бороться? :) Можно вместе с удалением вешать на вещь локальную переменную, при входе игрока такие помеченные вещи просто удалять. Можно попробовать копирование\удаление одной вещи вынести в отдельный скрипт и вызывать его, возможно тогда будет корректно удаляться (надо проверять, только сложно). Может кто боролся с этим и может что посоветовать? ps. Хотя я сам полностью за те варианты, где лут не выпадает при смерти от моба и т.п. Что само по себе не исключает смерть от рук ДМ-а в квесте с полной потерей персонажа и вещей :) |
||
Текстовая версия | Сейчас: 26th May 2024 - 16:03 |