Версия для печати темы
Город Мастеров _ Neverwinter Nights Aurora Toolset _ Проблема с полиморфом друида
Автор: DM Dwarf Oct 12 2006, 09:19
Сразу извинюсь, если эта тема уже была, но..
У нас небольшая проблема с полиморфом друида.
Ситуация такая:
Преа:
В локациях идет постоянное сохранение игровых персов. 1 раз в 1 раунд для каждого перса в локе. Т.е если в локе 5 персов, то первый раунд сохраняется 1-й перс, во второй раунд - 2-й и т.д., таким образом каждый перс сохраняется 1раз в 5 раундов. Если перс один в локе, то он сохраняется каждый раунд.
Амбула:
Друид в мультиклассе с воинскими классами, в полиморфе дракона обновляет полиморф каждое сохранение. Естественно, атака и прочие показатели падают. Если он один в локе, то обновление полиморфа идут один за одним и сражаться он практически не может.
У друида-шифтера такой проблемы нет, полиморф не обновляется.
Сталкивался ли кто с такой проблемой, и если да, то как помочь бедным зверушкам?
Автор: virusman Oct 12 2006, 09:33
Никак. Сохранять реже.
Автор: mamuc Oct 12 2006, 11:13
QUOTE
Сразу извинюсь, если эта тема уже была, но..
У нас небольшая проблема с полиморфом друида.
Ситуация такая:
Преа:
В локациях идет постоянное сохранение игровых персов. 1 раз в 1 раунд для каждого перса в локе. Т.е если в локе 5 персов, то первый раунд сохраняется 1-й перс, во второй раунд - 2-й и т.д., таким образом каждый перс сохраняется 1раз в 5 раундов. Если перс один в локе, то он сохраняется каждый раунд.
Амбула:
Друид в мультиклассе с воинскими классами, в полиморфе дракона обновляет полиморф каждое сохранение. Естественно, атака и прочие показатели падают. Если он один в локе, то обновление полиморфа идут один за одним и сражаться он практически не может.
У друида-шифтера такой проблемы нет, полиморф не обновляется.
а чем вызвана такое частое сохранение?
...это же жутко жрет ресурсы( очевидно этот скритп на Хертбите висит)..причем, если, я правильно понял, идет не только сохранение, но и взятие сохраненного и "обновление" чара каждый раунд по сохраненному( где и нечетко работает обновление полиморфа друида), так?
Автор: denis0k Oct 12 2006, 19:18
У нас вообще чары в полиморфе не сейвятся.
Автор: 2_advanced Oct 13 2006, 11:03
а если сервак копыта отдает, а чел 5 часов качалсо?
Автор: kreon Oct 13 2006, 21:21
Вот то самое сохранение...
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 штук за раунд (если попали в число пяти, то // сохранение локации 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;
}
(в полиморфе сохраняться не будет)
Автор: DM Dwarf Oct 14 2006, 06:53
Исключить из сохранения это самый очевидный вариант, но хотелось бы понять, почему такой глюк только у друидов, ведь друиды/шифтеры нормально проходят автосохранение, не переполиморфясь.
Что шитер менят в билде, и чего не хватает чистому друиду...
Ибо:
QUOTE
а если сервак копыта отдает, а чел 5 часов качалсо?
Такие ситуации могут возникать часто, и каждого не проверишь, провда ли он набил свои честные 10к и рарную шапку или нагло врет в глаза ДМу.
Автор: kreon Oct 14 2006, 07:55
Шифтеры не сохраняются в форме. (см. описание ExportSingleCharacterFix(oPC))
Автор: denis0k Oct 14 2006, 18:22
5 часов подряд в форме качаться никто не будет Иногда приходится спать, вот там и сейв
Автор: Zirrex Oct 14 2006, 19:06
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);
}
}
}
}
Автор: 2_advanced Oct 14 2006, 23:21
QUOTE
onHeart модуля
дайте креону мастера синглмода =)
Автор: kreon Oct 15 2006, 00:23
QUOTE(2_advanced @ Oct 15 2006, 00:21) [snapback]94810[/snapback]
дайте креону мастера синглмода =)
Нет уж, извините
лучше адванцеду
P.S. Данная система ресурсов как ни странно не жрет, т.к. не приходится сохранять сразу 30-40 человек.
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)