Город Мастеров
IPB

Здравствуйте, гость ( Вход | Регистрация )

 Правила этого форума ПРАВИЛА РАЗДЕЛА
 
Ответить в эту темуОткрыть новую тему
> Проблема с полиморфом друида
DM Dwarf
сообщение Oct 12 2006, 09:19
Сообщение #1


Level 2
*

Класс: Воин
Характер: True Neutral
Раса: Дварф



Сразу извинюсь, если эта тема уже была, но..
У нас небольшая проблема с полиморфом друида.
Ситуация такая:
Преа:
В локациях идет постоянное сохранение игровых персов. 1 раз в 1 раунд для каждого перса в локе. Т.е если в локе 5 персов, то первый раунд сохраняется 1-й перс, во второй раунд - 2-й и т.д., таким образом каждый перс сохраняется 1раз в 5 раундов. Если перс один в локе, то он сохраняется каждый раунд.
Амбула:
Друид в мультиклассе с воинскими классами, в полиморфе дракона обновляет полиморф каждое сохранение. Естественно, атака и прочие показатели падают. Если он один в локе, то обновление полиморфа идут один за одним и сражаться он практически не может.
У друида-шифтера такой проблемы нет, полиморф не обновляется.

Сталкивался ли кто с такой проблемой, и если да, то как помочь бедным зверушкам?

Сообщение отредактировал DM Dwarf - Oct 12 2006, 09:21
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
virusman
сообщение Oct 12 2006, 09:33
Сообщение #2


Level 17
Иконки Групп

Класс: Волшебник
Характер: Neutral Good
Раса: Человек
NWN: Скриптинг [PW]
Axistown SR 1.9
NWNX



Никак. Сохранять реже.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
mamuc
сообщение Oct 12 2006, 11:13
Сообщение #3


Лорд AxisTown'a
Иконки Групп

Класс: Монах
Характер: Lawful Good
Раса: Дварф
NWN: Маппинг



QUOTE
Сразу извинюсь, если эта тема уже была, но..
У нас небольшая проблема с полиморфом друида.
Ситуация такая:
Преа:
В локациях идет постоянное сохранение игровых персов. 1 раз в 1 раунд для каждого перса в локе. Т.е если в локе 5 персов, то первый раунд сохраняется 1-й перс, во второй раунд - 2-й и т.д., таким образом каждый перс сохраняется 1раз в 5 раундов. Если перс один в локе, то он сохраняется каждый раунд.
Амбула:
Друид в мультиклассе с воинскими классами, в полиморфе дракона обновляет полиморф каждое сохранение. Естественно, атака и прочие показатели падают. Если он один в локе, то обновление полиморфа идут один за одним и сражаться он практически не может.
У друида-шифтера такой проблемы нет, полиморф не обновляется.

а чем вызвана такое частое сохранение?
...это же жутко жрет ресурсы( очевидно этот скритп на Хертбите висит)..причем, если, я правильно понял, идет не только сохранение, но и взятие сохраненного и "обновление" чара каждый раунд по сохраненному( где и нечетко работает обновление полиморфа друида), так?

Сообщение отредактировал mamuc - Oct 12 2006, 11:17
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Oct 12 2006, 19:18
Сообщение #4


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



У нас вообще чары в полиморфе не сейвятся.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
2_advanced
сообщение Oct 13 2006, 11:03
Сообщение #5


Level 9
Иконки Групп

Класс: Вор
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [PW]



а если сервак копыта отдает, а чел 5 часов качалсо? (IMG:style_emoticons/kolobok_light/smile.gif) (IMG:style_emoticons/kolobok_light/ph34r.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
kreon
сообщение Oct 13 2006, 21:21
Сообщение #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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
DM Dwarf
сообщение Oct 14 2006, 06:53
Сообщение #7


Level 2
*

Класс: Воин
Характер: True Neutral
Раса: Дварф



Исключить из сохранения это самый очевидный вариант, но хотелось бы понять, почему такой глюк только у друидов, ведь друиды/шифтеры нормально проходят автосохранение, не переполиморфясь.
Что шитер менят в билде, и чего не хватает чистому друиду...
Ибо:
QUOTE
а если сервак копыта отдает, а чел 5 часов качалсо?

Такие ситуации могут возникать часто, и каждого не проверишь, провда ли он набил свои честные 10к и рарную шапку или нагло врет в глаза ДМу.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
kreon
сообщение Oct 14 2006, 07:55
Сообщение #8


Level 8
Иконки Групп

Класс: Некромант
Характер: Chaotic Evil
Раса: Дракон
NWN: Скриптинг [PW]



Шифтеры не сохраняются в форме. (см. описание ExportSingleCharacterFix(oPC))
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Oct 14 2006, 18:22
Сообщение #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)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zirrex
сообщение Oct 14 2006, 19:06
Сообщение #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);
            }
        }
    }
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
2_advanced
сообщение Oct 14 2006, 23:21
Сообщение #11


Level 9
Иконки Групп

Класс: Вор
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [PW]



QUOTE
onHeart модуля

дайте креону мастера синглмода =)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
kreon
сообщение Oct 15 2006, 00:23
Сообщение #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 человек.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 19th January 2020 - 06:06