![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]()
Сообщение
#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 |
![]() |
![]()
Сообщение
#2
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Неприятная фича - добавленная в версии 1.69 функция SetDescription плохо работает в комбинации с CopyItem[AndModify]. Если сначала вызвать SetDescription(), а потом скопировать предмет - описание станет дефолтным для данного объекта, как будто мы вызвали SetDescription с пустой строкой. Для готового модуля я написал небольшой Java-класс, который заменяет все вхождения вызовов функций копирования во всех модульных скриптах на вызовы кастомных вида:
Neverwinter Script object FR_CopyItem(object oItem, object oTargetInventory=OBJECT_INVALID, int bCopyVars=FALSE) Если нужно, могу выложить исходник.
{ object oCopy = CopyItem(oItem, oTargetInventory, bCopyVars); SetDescription(oCopy, GetDescription(oItem)); return oCopy; } Сообщение отредактировал Ilerien - Apr 21 2011, 19:19 |
![]() ![]() |
Текстовая версия | Сейчас: 27th April 2025 - 05:24 |