Показать сообщение отдельно
Старый 14.04.2008, 11:58   #2028
halogene

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2okin: ага, задумку понял. Если вы проверяете дистанцию между ГГ и вейпоинтом - проблем быть не должно. Т.е. если self - ГГ, то дистанция будет определяться независимо от положения ГГ в мире (если, конечно, он не перейдейт в другой мир, ZEN в плане  ;D). Если бы скриптовой язык готики имел больше функций обработки массивов, то можно было бы получить 6 дистанций, загнать их в массив, найти минимальное значение, вернуть ключ и вуаля.

А так прихдится писать разветвленную и громозкую систему условий. Возможно где-то в ней ошибки.  Например, я быстренько сделал вот такой скрипт (Г1), дистанция пишется в дневник вполне исправно.

Код:
instance MapRing(C_Item){      name = NAME_Ring;      mainflag = ITEM_KAT_MAGIC;      flags = ITEM_RING;      value = 0;      visual = "ItMi_Ring_01.3ds";      visual_skin = 0;      material = MAT_METAL;      on_equip = Equip_MapRing;      on_unequip = UnEquip_MapRing;      description = "Кольцо";      text[2] = "";      text[3] = "";      text[5] = NAME_Value;      count[5] = value;};func void Equip_MapRing(){      var int oc;      var int nc;            oc=Npc_GetDistToWP(self, "OCC_CENTER_1");      nc=Npc_GetDistToWP(self, "NC_DAM");            Log_CreateTopic("Дистанция",LOG_NOTE);      Log_CreateTopic("Старый Лагерь",LOG_NOTE);      Log_CreateTopic("Плотина",LOG_NOTE);            if (oc<nc)      {      B_LogEntry("Дистанция", "Старый Лагерь ближе плотины.");      }      else if (oc>nc)      {      B_LogEntry("Дистанция", "Плотина ближе Старого Лагеря");      }      else      {      B_LogEntry("Дистанция", "Расстояния одинаковы");            };                        B_LogEntry("Старый Лагерь", IntToString(oc));      B_LogEntry("Плотина", IntToString(nc));      };func void UnEquip_MapRing(){};
Если ГГ использует кольцо в любой точке мира oldworld.zen - информация выводится вполне корректно  ;)
Ответить с цитированием