![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]()
Сообщение
#1
|
|
Level 2 ![]() Класс: Воин Характер: True Neutral Раса: Дварф ![]() |
Сразу извинюсь, если эта тема уже была, но..
У нас небольшая проблема с полиморфом друида. Ситуация такая: Преа: В локациях идет постоянное сохранение игровых персов. 1 раз в 1 раунд для каждого перса в локе. Т.е если в локе 5 персов, то первый раунд сохраняется 1-й перс, во второй раунд - 2-й и т.д., таким образом каждый перс сохраняется 1раз в 5 раундов. Если перс один в локе, то он сохраняется каждый раунд. Амбула: Друид в мультиклассе с воинскими классами, в полиморфе дракона обновляет полиморф каждое сохранение. Естественно, атака и прочие показатели падают. Если он один в локе, то обновление полиморфа идут один за одним и сражаться он практически не может. У друида-шифтера такой проблемы нет, полиморф не обновляется. Сталкивался ли кто с такой проблемой, и если да, то как помочь бедным зверушкам? Сообщение отредактировал DM Dwarf - Oct 12 2006, 09:21 |
![]() |
![]()
Сообщение
#2
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
DM Dwarf, не совсем понятно, зачем так часто сохранять? В моем модуле сохранение происходит через каждые 30 секунд, и это более чем достаточно. Потом, в момент сохранения происходит сохранение всех персонажей сразу, а не по отдельности индивидуально для каждого.
Сам скрипт (а также сохранение жизни полиморфа, чтобы он не был богом). В конец скрипта "nw_s0_shapechg" добавляется строчка: NSS DelayCommand(1.1, SetLocalInt(OBJECT_SELF, "PolyHP", GetCurrentHitPoints(OBJECT_SELF))); Сохранение персонажей через 30 секунд и восстановление жизни у полиморфа: NSS void RestoreHP(object oPC)
{ if (oPC != OBJECT_INVALID) { int nPolyHP = GetLocalInt(oPC, "PolyHP"); int nCurrentHP = GetCurrentHitPoints(oPC); if (nPolyHP > 0) { if (nCurrentHP > nPolyHP) { ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nCurrentHP - nPolyHP), oPC); } } } } void main() { object oMod = GetModule(); object oPC = OBJECT_INVALID; int nAutosave, nPolyHP; object oPlayer = GetFirstPC(); while (GetIsObjectValid(oPlayer)) { nPolyHP = GetLocalInt(oPlayer, "PolyHP"); if (nPolyHP > 0) { oPC = oPlayer; SetLocalInt(oPC, "PolyHP", GetCurrentHitPoints(oPC)); } oPlayer = GetNextPC(); } // Автосохранение всех персонажей каждые 30 секунд if (oMod != OBJECT_INVALID) { nAutosave = GetLocalInt(oMod, "autosave"); // Если переменной нет, то присвоить ей 1 if (nAutosave == 0) { SetLocalInt(oMod, "autosave", 1); } else { // Если переменная равна 5, то сохранить всех персонажей if (nAutosave == 5) { ExportAllCharacters(); DelayCommand(0.1, RestoreHP(oPC)); // Переменную сбросить в 0 SetLocalInt(oMod, "autosave", FALSE); } else { // Через 6 секунд изменить переменную, прибавив к ней 1 SetLocalInt(oMod, "autosave", ++nAutosave); } } } } |
![]() ![]() |
Текстовая версия | Сейчас: 18th June 2025 - 02:05 |