![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]()
Сообщение
#1
|
|
Level 2 ![]() Класс: Воин Характер: True Neutral Раса: Дварф ![]() |
Сразу извинюсь, если эта тема уже была, но..
У нас небольшая проблема с полиморфом друида. Ситуация такая: Преа: В локациях идет постоянное сохранение игровых персов. 1 раз в 1 раунд для каждого перса в локе. Т.е если в локе 5 персов, то первый раунд сохраняется 1-й перс, во второй раунд - 2-й и т.д., таким образом каждый перс сохраняется 1раз в 5 раундов. Если перс один в локе, то он сохраняется каждый раунд. Амбула: Друид в мультиклассе с воинскими классами, в полиморфе дракона обновляет полиморф каждое сохранение. Естественно, атака и прочие показатели падают. Если он один в локе, то обновление полиморфа идут один за одним и сражаться он практически не может. У друида-шифтера такой проблемы нет, полиморф не обновляется. Сталкивался ли кто с такой проблемой, и если да, то как помочь бедным зверушкам? Сообщение отредактировал DM Dwarf - Oct 12 2006, 09:21 |
![]() |
![]()
Сообщение
#2
|
|
Level 8 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Дракон NWN: Скриптинг [PW] ![]() |
Вот то самое сохранение...
onHeart модуля NSS void main() { // сохряняем время object oMod = GetModule(); int nCurTimeUpdateNum = GetLocalInt(oMod, "CurTimeUpdateNum"); if(!nCurTimeUpdateNum) { SaveModuleTime(); SetLocalInt(oMod, "CurTimeUpdateNum", 50); // время сохраняется раз в 50 хеартбитов } else SetLocalInt(oMod, "CurTimeUpdateNum", nCurTimeUpdateNum-1); int nNumPlayers = PlayerCount(); object oPC = GetFirstPC(); while(GetIsObjectValid(oPC)) { object oToken = GetLocalObject(oPC, "TokenofPersistence"); int nUpdate = GetLocalInt(oPC, "NumUpdate"); if(nUpdate < 5) { // по 5 штук за раунд (если попали в число пяти, то(IMG:style_emoticons/kolobok_light/smile.gif) // сохранение локации if(!GetIsObjectValid(GetArea(oPC))) { // если в переходе локаций - не сохраняем SetLocalInt(oPC, "NumUpdate", nUpdate-1); } else { if(!GetLocalInt(GetArea(oPC), "fuga")) { // если _не_ на фуге - сохраняем SaveLoc(oPC); SetLocalInt(oToken, "HP", GetCurrentHitPoints(oPC)); } else { SetLocalInt(oToken, "HP", 0); // иначе ставим } nUpdate = nNumPlayers; SetLocalInt(oPC, "NumUpdate", nUpdate); // ставим номер в число плееров ExportSingleCharacterFix(oPC); // сохраняем } } else { nUpdate -= 1; // уменьшаем счетчик SetLocalInt(oPC, "NumUpdate", nUpdate); } // далее специфичные вещи Мистленда } ExportSingleCharacterFix(oPC) - стандартная либа сохранения с проверкой на шифтера Как исправить - добавить проверку на эффект полиморфа. Например так: NSS int GetIsPolyMorfedFix(object oPC) { (в полиморфе сохраняться не будет)
effect eEff = GetFirstEffect(oPC); while(GetIsEffectValid(eEff)) { if(GetEffectType(eEff) == EFFECT_TYPE_POLYMORFED) return 1; eEff = GetNextEffect(oPC); } return 0; } Сообщение отредактировал kreon - Oct 13 2006, 21:24 |
![]() ![]() |
Текстовая версия | Сейчас: 30th April 2025 - 12:46 |