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);
}
}
}
}