Город Мастеров
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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
 
Открыть новую тему
Ответов
kreon
сообщение Oct 13 2006, 21:21
Сообщение #2


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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

Сообщений в этой теме


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

 



Текстовая версия Сейчас: 30th April 2025 - 12:46