![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#1
|
|
Level 2 ![]() Класс: Воин Характер: True Neutral Раса: Дварф ![]() |
Сразу извинюсь, если эта тема уже была, но..
У нас небольшая проблема с полиморфом друида. Ситуация такая: Преа: В локациях идет постоянное сохранение игровых персов. 1 раз в 1 раунд для каждого перса в локе. Т.е если в локе 5 персов, то первый раунд сохраняется 1-й перс, во второй раунд - 2-й и т.д., таким образом каждый перс сохраняется 1раз в 5 раундов. Если перс один в локе, то он сохраняется каждый раунд. Амбула: Друид в мультиклассе с воинскими классами, в полиморфе дракона обновляет полиморф каждое сохранение. Естественно, атака и прочие показатели падают. Если он один в локе, то обновление полиморфа идут один за одним и сражаться он практически не может. У друида-шифтера такой проблемы нет, полиморф не обновляется. Сталкивался ли кто с такой проблемой, и если да, то как помочь бедным зверушкам? Сообщение отредактировал DM Dwarf - Oct 12 2006, 09:21 |
![]()
Сообщение
#2
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
Никак. Сохранять реже.
|
![]() ![]()
Сообщение
#3
|
|
Лорд AxisTown'a ![]() Класс: Монах Характер: Lawful Good Раса: Дварф NWN: Маппинг ![]() |
QUOTE Сразу извинюсь, если эта тема уже была, но.. У нас небольшая проблема с полиморфом друида. Ситуация такая: Преа: В локациях идет постоянное сохранение игровых персов. 1 раз в 1 раунд для каждого перса в локе. Т.е если в локе 5 персов, то первый раунд сохраняется 1-й перс, во второй раунд - 2-й и т.д., таким образом каждый перс сохраняется 1раз в 5 раундов. Если перс один в локе, то он сохраняется каждый раунд. Амбула: Друид в мультиклассе с воинскими классами, в полиморфе дракона обновляет полиморф каждое сохранение. Естественно, атака и прочие показатели падают. Если он один в локе, то обновление полиморфа идут один за одним и сражаться он практически не может. У друида-шифтера такой проблемы нет, полиморф не обновляется. а чем вызвана такое частое сохранение? ...это же жутко жрет ресурсы( очевидно этот скритп на Хертбите висит)..причем, если, я правильно понял, идет не только сохранение, но и взятие сохраненного и "обновление" чара каждый раунд по сохраненному( где и нечетко работает обновление полиморфа друида), так? Сообщение отредактировал mamuc - Oct 12 2006, 11:17 |
![]()
Сообщение
#4
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
У нас вообще чары в полиморфе не сейвятся.
|
![]()
Сообщение
#5
|
|
Level 9 ![]() Класс: Вор Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] ![]() |
а если сервак копыта отдает, а чел 5 часов качалсо? (IMG:style_emoticons/kolobok_light/smile.gif) (IMG:style_emoticons/kolobok_light/ph34r.gif)
|
![]()
Сообщение
#6
|
|
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 |
![]()
Сообщение
#7
|
|
Level 2 ![]() Класс: Воин Характер: True Neutral Раса: Дварф ![]() |
Исключить из сохранения это самый очевидный вариант, но хотелось бы понять, почему такой глюк только у друидов, ведь друиды/шифтеры нормально проходят автосохранение, не переполиморфясь.
Что шитер менят в билде, и чего не хватает чистому друиду... Ибо: QUOTE а если сервак копыта отдает, а чел 5 часов качалсо? Такие ситуации могут возникать часто, и каждого не проверишь, провда ли он набил свои честные 10к и рарную шапку или нагло врет в глаза ДМу. |
![]()
Сообщение
#8
|
|
Level 8 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Дракон NWN: Скриптинг [PW] ![]() |
Шифтеры не сохраняются в форме. (см. описание ExportSingleCharacterFix(oPC))
|
![]()
Сообщение
#9
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
5 часов подряд в форме качаться никто не будет (IMG:style_emoticons/kolobok_light/smile.gif) Иногда приходится спать, вот там и сейв (IMG:style_emoticons/kolobok_light/smile.gif)
|
![]()
Сообщение
#10
|
|
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); } } } } |
![]()
Сообщение
#11
|
|
Level 9 ![]() Класс: Вор Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] ![]() |
QUOTE onHeart модуля дайте креону мастера синглмода =) |
![]()
Сообщение
#12
|
|
Level 8 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Дракон NWN: Скриптинг [PW] ![]() |
QUOTE(2_advanced @ Oct 15 2006, 00:21) [snapback]94810[/snapback] дайте креону мастера синглмода =) Нет уж, извините (IMG:style_emoticons/kolobok_light/biggrin.gif) лучше адванцеду (IMG:style_emoticons/kolobok_light/smile.gif) P.S. Данная система ресурсов как ни странно не жрет, т.к. не приходится сохранять сразу 30-40 человек. |
![]() ![]() |
Текстовая версия | Сейчас: 30th April 2025 - 10:18 |