Помощь - Поиск - Пользователи - Календарь
Полная версия: Помошь -> способы дебага
Город Мастеров > РЕДАКТОРЫ > Neverwinter Nights Aurora Toolset
Tonakien
Просьба о помощи...
Кто как дебагит модуль если он здоровый, а нужно оказаться в определенном месте с определенными значениями на тебе и на мире? dntknw.gif
Aiwan
Ну, у меня есть пара итемов, а что мне надо от них я прописываю в скрипте. Заюзал - получи результат. А что именно тебя интересует? Просто вопрос некорректный. А вообще, у меня дебаг везеде. Каждый маловажнецкий актион мне отписывает НПС.
Zirrex
Tonakien тебе следует в скриптах дебаги прописывать везде, где выполняются наиболее важные и тяжелые скрипты, а потом либо логи смотреть, либо просматривать с помощью определенной опции, которая делает доступным просмотр дебага для определенного персонажа. Я сам еще не делал подобное в своем модуле, но все собираюсь.

Кстати, обратил внимание, что иногда скрипты визуально работают совершенно не так, как того ожидаешь, и простые дебаги позволяют это хорошо увидеть.
Aiwan
Если тебе поможет, вот моя инклюда.
Neverwinter Script Source
//::///////////////////////////////////////////////
//:: Name: am_inc_debug
//:: Copyright © 2005 WRG!
//:://////////////////////////////////////////////
/*
          БИБЛИОТЕКА ДЛЯ ОТЛАДКИ СКРИПТОВ
*/

//:://////////////////////////////////////////////
//:: Created By: Aiwan      Aiwan@e-mail.ru
//:: Created On: 30.05.2005
//:://////////////////////////////////////////////

// СООБЩЕНИЯ ДЛЯ ПРОВЕРКИ (ИСПОЛЬЗУЮТСЯ В СЛУЖЕБНЫХ ЦЕЛЯХ ДЛЯ ОТЛАДКИ КОДА СКРИПТОВ)
// А ТАК ЖЕ ДЛЯ ДМ-ов
// LocalInt - "DEBAG_PC" на модуле, отключит дебаг игрокам
// LocalInt - "DEBAG_DM" на модуле, отключит дебаг DM-ам
void Debug(string message);
// Выводит в Debug: TAG, ResRef и Name объекта.
void DebugObject(object oObject);

//------------------------------------------------------------------------------
void Debug(string message)
{
    object oPC = GetFirstPC();
    if (!GetLocalInt(GetModule(), "DEBAG_PC"))
    {
      SendMessageToPC(oPC, "Debag message: "+message);
    }
    if (!GetLocalInt(GetModule(), "DEBAG_DM"))
          {
            SendMessageToAllDMs("Debag message to DMs: "+message);
          }
}
void DebugObject(object oObject)
{
    string sTag = GetTag(oObject);
    string sResRef = GetResRef(oObject);
    string sName = GetName(oObject);
    Debug ("TAG = "+sTag+", ResRef = "+sResRef+",  Name = "+sName+".");
}
/*
void main(){}


В коде просто ставь проверки и мессаги. К примеру объект который взял итем или последний кто умер или сказал... Продебагь его. И часто оказывается что это не тот о ком ты думал. biggrin.gif Удачи!

ВНИЗУ ПРИМРЫ КАК Я ИСПОЛЬЗУЮ ЭТИ ФУНКЦИИ.

Neverwinter Script Source
//========================== HEARTBEAT EVENT  =================================
  if (nEvent == 1001// Стандартный сигнал
      {
      Debug("EVENT_HEARTBEAT");
      if (GetLocalInt(OBJECT_SELF, "START_CONVERSATION")==FALSE)
        {
          Debug("RETURN");
          return;
          }
      object oEnemy = OBJECT_SELF;
      object oPC = GetNearestPC(oEnemy);
      if (GetIsInCombat(oPC) || GetIsInCombat(oEnemy) || IsInConversation(oPC))
          {
          Debug("РС или НПС занят, что то мешает им поговорить.");
          return;
          }
          if (GetLocalInt(oEnemy, "START_CONVERSATION")==TRUE
              && GetLocalInt(oEnemy, "REPEAT")==TRUE)
              {
              AssignCommand(oEnemy, ClearAllActions());
              AssignCommand(oEnemy, ActionForceMoveToObject(oPC,TRUE, 2.0, 15.0));
              AssignCommand(oEnemy, ActionStartConversation(oPC));
              Debug("Если главарь не смог подойти и поговорить, напомним об этом");
              SetLocalInt(oEnemy, "REPEAT", FALSE);
              DelayCommand(15.0, SetLocalInt(oEnemy, "REPEAT", TRUE));
              }
      }


Neverwinter Script Source
//------------------------------------------------------------------------------
    if (GetHasInventory(oDestr) && GetTag(oDestr)=="BodyBag")
    {
      object oItem = GetFirstItemInInventory(oDestr);
      while (GetIsObjectValid(oItem))
      {
        string sTag = GetTag(oItem); // Debag message
        Debug("Destroy Item - "+sTag);
        DestroyObject(oItem);
        oItem = GetNextItemInInventory(oDestr);
      }
      string sTag = GetTag(oDestr); // Debag message
      string sResRef = GetResRef(oDestr);
      Debug("Destroy Object - "+sTag+" Resref-"+sResRef); // Debag message
      DestroyObject(oDestr);
    }
virusman
Надеюсь, хоть в НВН2 дебаг скриптов будет гораздо удобнее.
Я юзаю SendMessageToPC при тесте на живом шарде и пишу в лог при локальном тестировании.
RiPPeR
У меня в модуле система рычагов для отображения тех или иных событий smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.