AGFC
Страница 2 из 8 12 345678

AGFC (http://agfc.ru/index.php)
-   AGFC: Valley of Gothic (http://agfc.ru/forumdisplay.php?f=46)
-   -   М: Уроки скриптологии (http://agfc.ru/showthread.php?t=1098161614)

09.11.2004 23:14

Re: Уроки скриптологии
 
2TycoooN:<br>
Цитата:

Что конкретно значат эти отношения?
<br>Если расположить в порядке агрессивности:<br>ATT_FRIENDLY, ATT_NEUTRAL, ATT_ANGRY, ATT_HOSTILE - то будет<br>1 - дружеские<br>2 - нейтральные<br>3 - сердитые<br>4 - враждебные<br>Это отношение одного NPC или PC к другому. А что под отношением подразумевать - задается скриптами.<br>

10.11.2004 10:52

Re: Уроки скриптологии
 
2Mitrich:<br>
Цитата:

это нужно прописывать для каждого НПС индивидуально или можно задать для всех членов гильдии?
<br>Можно и так и эдак, только нужно использовать разные функции.<br>Например: между гильдиями волков и падальщиков можно установить определенные отношения, а для конкретного (индивидуального) волка можно задать свои отношения.<br><br><br>int Wld_GetDay(); - получить текущий день, отсчет дней идет от дня старта (Gamestart) *= 0.<br>int Wld_IsTime(int hour1,int min1,int hour2,int min2); - возвращает 1, если текущее время находится между границами (hour1, min1 – нижняя граница, hour2, min2 – верхняя граница в часах и минутах), иначе возвращает 0.<br>void Wld_SetTime(int hour,int min); - установить текущее время в часах hour и минутах min. ***<br>void Wld_InsertNpc(int npcInstance,string spawnPoint); - разместить в мире одного NSC, где npcInstance – ссылка на NSC, spawnPoint – имя точки размещения (может быть как WP, так и FP).<br>void Wld_InsertNpcAndRespawn(int instance,string spawnPoint,int spawnDelay); - выполняется аналогично предыдущей функции, только *NSC после смерти будет оживлен в заданной точке через spawnDelay секунд. ***<br>void Wld_SpawnNpcRange(c_npc self,int npcInstance,int number,float time); - npc self около себя создает NSC (ссылка на него npcInstance) количеством number на время жизни time. Используется в заклинаниях вызова. ***<br>void Wld_RemoveNpc(int npcInstance); - удалить из мира NSC (ссылке на него npcInstance). ***<br><br>Продолжение следует.<br>

11.11.2004 12:05

Re: Уроки скриптологии
 
void Wld_InsertItem(int itemInstance,string spawnPoint); - разместить в мире один предмет, где itemInstance – ссылка на предмет, spawnPoint – имя точки размещения (может быть как WP, так и FP). В примечании к функции написано: «Осторожно, не функционирует! Предмет будет вставлен в центр мира.» В скриптах данная функция используется, осталось выяснить, как она работает.<br>int Wld_RemoveItem(c_item item); - удалить из мира предмет по item ссылке на него, возвращает 1 – успешное удаление, иначе – 0.<br>void Wld_InsertObject(string name,string point); - разместить в мире визуальный объект name в точке с именем point (может быть как WP, так и FP). ***<br>void Wld_SetObjectRoutine(int hour1,int min1,string objName,int state); - объект с именем objName (VOB объект) перейдет в состояние state в момент времени hour1, min1 (часы и минуты).<br>void Wld_SetMobRoutine(int hour1,int min1,string objName,int state); - выполняется как и предыдущая функция, только для MOB объекта.<br>void Wld_SendTrigger(string name); - активировать функцию VOB объекта с именем name. (Я не знаю где где прописаны эти функции). ***<br>void Wld_SendUntrigger(string name); - деактивировать функцию VOB объекта с именем name. ***<br>void Wld_ExchangeGuildAttitudes(string name); - установить взаимоотношения между гильдиями, где name – имя таблицы заданных отношений.<br><br>Продолжение следует.<br>

12.11.2004 12:18

Re: Уроки скриптологии
 
void Wld_AssignRoomToGuild(string s0,int guild); - размещает гильдию guild на пространстве s0.<br>void Wld_AssignRoomToNpc(string s0,c_npc roomowner); - размещает npc roomowner на пространстве s0.<br>c_npc Wld_GetPlayerPortalOwner();<br>int Wld_GetPlayerPortalGuild();<br>c_npc Wld_GetFormerPlayerPortalOwner();<br>int Wld_GetFormerPlayerPortalGuild();<br>Какие-то четыре функции, определяющие положение SC в пространстве, большего сказать, увы, не могу. *:(<br>void Wld_PlayEffect(string ???,instance ???,instance ???,int ???,int ???,int ???,int ???); - данная функция абсолютно нигде не применяется и не описана, поэтому ее действие и аргументы мне не известны. *** *:(<br>

Killer-XXX 12.11.2004 21:15

Re: Уроки скриптологии
 
2Vam: <br>Читаю, все отлично!<br>void Wld_PlayEffect(string ???,instance ???,instance ???,int ???,int ???,int ???,int ???);<br>Значит так, на примере, можно хотя бы наполовину понять, какие аргументы.<br>Wld_PlayEffect(&quot;spellFX_LIGHTST AR_RED&quot;, &nbsp;self, self, 0, 0, 0, FALSE );<br>1. Имя &quot;скрипта&quot; визуализации<br>2 и 3. Не совсем представляю, но что то для себя :)<br>4, 5, 6 это помоему координаты где играть эфект, здесь, т.е. прямо в &quot;центре&quot; ГГ, т.к. по X, Y, Z стоят &nbsp;0<br>7.Пока тоже в завесе тайны...

13.11.2004 19:07

Re: Уроки скриптологии
 
2finch:<br>2TycoooN:<br>Все понял! Ваши примеры из Готики 2. Я же, чтобы не мешать одно с другим, рассматриваю пока только Готику 1. Потом хотел просмотреть и выдать отличия и по Г2.<br>Учту ваши замечания.<br><br>14. Функции работы с NPC.<br><br>int Npc_GetTrueGuild(c_npc npc); - возвращает номер гильдии, к которой принадлежит npc.<br>int Npc_SetTrueGuild(c_npc npc,int guildID); - установить принадлежность npc к гильдии guildID.<br>void Npc_SetAttitude * * *(c_npc self,int att); - установить постояноое отношение att npc self ко всем остальным npc.<br>void Npc_SetTempAttitude(c_npc self,int att); - установить временное отношение att npc self ко всем остальным npc.<br>int Npc_GetAttitude(c_npc self,c_npc other); - получить любое отношение npc self к npc other.<br>int Npc_GetPermAttitude(c_npc self,c_npc other); - получить постоянное отношение npc self к npc other.<br>int Npc_GetGuildAttitude(c_npc self,c_npc other); - получить отношение npc self к npc other, как отношение между гильдиями, а не личностями.<br><br>Продолжение следует.<br>

14.11.2004 12:57

Re: Уроки скриптологии
 
void Npc_SetKnowsPlayer(c_npc self,c_npc player); - эта функция задает, что NSC self знаком с SC player (ГГ).<br>int Npc_KnowsPlayer(c_npc self,c_npc player); - проверить, знаком ли NSC self с SC player, возвращает True, если знаком, иначе False.<br>int Npc_OwnedByNpc(c_item item,c_npc npc); - проверить, принадлежит ли предмет item npc, возвращает 1, если принадлежит, иначе - 0.<br>int Npc_OwnedByGuild(c_item item,int guild); - - проверить, принадлежит ли предмет item гильдии guild, возвращает 1, если принадлежит, иначе - 0.<br>string Npc_GetNearestWP(c_npc self); - возвращает название WP, в которой расположен npc self.<br>string Npc_GetNextWP(c_npc self); - возвращает название соседней точки WP, рядом с которой расположен npc self.<br>int Npc_IsWayBlocked(c_npc self); - возвращает 1, если путь npc self прегражден препятствием, иначе – 0.<br>int Npc_IsOnFP(c_npc self,string name); - проверяет, находится ли npc self в точке FP с именем name, возвращает 1 – да, иначе – 0.<br><br>Продолжение следует.<br>

15.11.2004 04:34

Re: Уроки скриптологии
 
2Vam: Если ты &quot;шпрэхаешь&quot; по-немецки, хочу посоветовать тебе вот этот сайт! Очень много полезной инфы, но у меня &quot;языковой барьер&quot;... :( Так что дерзай!

15.11.2004 18:24

Re: Уроки скриптологии
 
2finch:<br>Спасибо за предложение, только у меня аналогичный барьер! &nbsp;:( <br><br>int Npc_IsDead(c_npc n0); - возвращает 1, если npc n0 мертв, иначе – 0.<br>int Npc_KnowsInfo(c_npc self,int infoInstance); - возвращает TRUE, если npc self уже получил информацию infoInstance, иначе FALSE.<br>int Npc_CheckInfo(c_npc npc,int important); - проверяет, имеет ли NSC npc действительную информацию для игрока, в этом случае возвращается 1 и начинается диалог, иначе 0, где important – важность информации (1 – важная, 0 – обычная).<br>int NPC_GiveInfo(c_npc npc,int important); - работает аналогично предыдущей функции, есть какое-то отличие, но яего не понял.<br>int Npc_CheckAvailableMission(c_npc npc,int missionState,int important); - проверяет, имеет ли npc миссию в состоянии missionState (AVAILABLE, RUNNING) с важностью important, возвращает 1, если имеет, иначе – 0.<br>int Npc_CheckRunningMission(c_npc npc,int important); - работает аналогично предыдущей функции, только проверяется миссия в состоянии текущего выполнения.<br>int Npc_CheckOfferMission(c_npc npc,int important); - работает аналогично предыдущей функции, только проверяется миссия в которой npc может что-то предложить игроку.<br><br>Продолжение следует.<br>

16.11.2004 16:53

Re: Уроки скриптологии
 
int Npc_GetStateTime(c_npc self); - возвращает кол-во секунд, которые npc self находится в текущем состоянии, заданном в &quot;Loop&quot; цикле.<br>void Npc_SetStateTime(c_npc self,int seconds); - установить кол-во секунд seconds, как долго npc self может находится в этом состоянии.<br>int Npc_GetBodyState(c_npc self); - возвращает состояние, в котором находится npc self (BS_ константы).<br>int Npc_HasBodyFlag(c_npc self,int bodyFlag); - проверяет, установлен ли у npc self флаг состояния bodyFlag, возвращает 1, если установлен, иначе – 0.<br>int Npc_IsPlayer(c_npc player); - возвращает 1, если проверяемый npc player является ГГ.<br>int Npc_HasDetectedNpc(c_npc self,c_npc other); - возвращает 1, если npc self чувствует (видит, сышит и т.д.) npc other, иначе – 0.<br>int Npc_IsInState(c_npc self,func state); - запрос на текущее состояние фигуры npc self, где state – функция состояния фигуры, возвращает True, если npc находится в этом состоянии, иначе – False.<br>int WasInState(c_npc self,func state); - аналогично предыдущей функции, только запрос на предыдущее состояние фигуры npc.<br>int Npc_IsInRoutine(c_npc self,func state); - проверяет, находится ли npc self в функции state, возвращает True если находится, иначе – Fаlse.<br>void Npc_ExchangeRoutine(c_npc self,string routineName); - поменять у npc self распорядок дня routineName.<br><br>Продолжение следует.<br>

17.11.2004 11:01

Re: Уроки скриптологии
 
int Npc_IsInCutscene(c_npc self); - возвращает 1, если npc self находится во время проигрывания Cutscene, иначе – 0.<br>int Npc_IsVoiceActive(c_npc self); - возвращает 1, если npc self разговаривает, иначе – 0. ***<br>void Npc_ClearAIQueue(c_npc self); - удаляет все команды для npc self из очереди AI_Queue.<br>void Npc_PlayAni(c_npc self,string file); - воспроизвести файл анимации file для npc self. ***<br>void Npc_SetRefuseTalk(c_npc self,int timeSec); - установить счетчик отказа от диалога для npc self на timeSec секунд.<br>int Npc_RefuseTalk(c_npc self); - проверить, истек ли счетчик отказа от диалога для npc self, возвращает True, если счетчик не истек, иначе – False.<br>int Npc_IsNear(c_npc self,c_npc other); - возвращает 1, если npc other находится на расстоянии не менее 3 метров от npc self, иначе – 0.<br>int Npc_GetDistToNpc(c_npc npc1,c_npc npc2); - возвращает расстояние в см. между npc1 и npc2.<br>int Npc_GetDistToWP(c_npc self,string wpName); - возвращает расстояние в см. между npc self и WP wpName.<br>int Npc_GetDistToItem(c_npc self,c_item item); - возвращает расстояние в см. между npc self и предметом item.<br>int Npc_GetDistToPlayer(c_npc npc1); - возвращает расстояние в см. между npc1 и ГГ.<br><br>Продолжение следует.<br>

18.11.2004 11:35

Re: Уроки скриптологии
 
void Npc_MemoryEntry(c_npc self,int source,c_npc offender,int newsid,c_npc victim); - данная функция записывает для npc self новости, где source – источник новостей (определено два источника: NEWS_SOURCE_WITNESS – есть свидетель произошедшего, NEWS_SOURCE_GOSSIP – сплетня), newsid – идентификатор новости (определены новости: NEWS_MURDER * * *- убийство, NEWS_ATTACK – атака, NEWS_THEFT – воровство, NEWS_DEFEAT – поражение, NEWS_NERVE – переживание, *NEWS_INTERFERE – вмешательство, NEWS_HASDEFEATED – победа), offender – npc преступник, victim – npc жертва.<br>void * * *Npc_MemoryEntryGuild(c_npc self,int source,c_npc offender,int newsid,c_npc victimguild); - работает аналогично предыдущей функции, только жертвой является вся гильдия.<br>int Npc_HasNews(c_npc self,int newsID,c_npc offender,c_npc victim); - эта функция проверяет, имеет ли npc self новость с идентификатором newsID о жертве victim и преступнике offender, возвращает 1, если имеет, иначе – 0. (Вместо ненужных параметров можно *записать 0).<br>int Npc_IsNewsGossip(c_npc self,int newsNumber); - возвращает 1, если новость для npc self является сплетней, иначе – 0.<br>c_npc Npc_GetNewsWitness(c_npc self,int newsNumber); - возвращает ссылку на свидетеля в новости newsNumber для npc self.<br>c_npc Npc_GetNewsVictim(c_npc self,int newsNumber); - возвращает ссылку на жертву в новости newsNumber для npc self.<br>c_npc Npc_GetNewsOffender(c_npc self,int newsNumber); - возвращает ссылку на преступника в новости newsNumber для npc self.<br>int Npc_DeleteNews(c_npc self,int newsNumber); - удаляет новость newsNumber для npc self, возвращает 1, исли удаление успешно, иначе – 0. ***<br><br>Продолжение следует.<br>

19.11.2004 16:29

Re: Уроки скриптологии
 
void Npc_ChangeAttribute(c_npc self,int atr,int value); - изменяет значение атрибута atr на кол-во единиц value для npc self.<br>void Npc_CreateSpell(c_npc self,int spellnr); - *npc self создает заклинание spellnr, оно становится активным, но еще не применяется.<br>void Npc_LearnSpell(c_npc self,int spellnr); - npc self выучил заклинание spellnr и может его использовать.<br>int Npc_GetActiveSpell(c_npc self); - возвращает номер заклинания, которое имеет активным npc self, иначе - -1.<br>int Npc_GetActiveSpellCat(c_npc self); - возвращает номер категории активного заклинания у npc self. Существуют три категории заклинаний: SPELL_GOOD, SPELL_NEUTRAL, SPELL_BAD.<br>int Npc_SetActiveSpellInfo(c_npc npc,int i1); - задает любое значение i1 для активного заклинания у npc, это значение может использоваться в скриптах, экзешник на него не реагирует. Возвращаемое значение неизвестно.<br>int Npc_GetActiveSpellLevel(c_npc self); - возвращает уровень активного заклинания у npc self.<br>int Npc_HasSpell(c_npc self,int spellID); - возвращает 1, если npc self может использовать заклинание spellID, иначе – 0.<br><br>Продолжение следует.<br>

20.11.2004 10:35

Re: Уроки скриптологии
 
void Npc_PercEnable(c_npc self,int percID,func function); *- функция активации восприятия percID у npc self, где function – функция обработки восприятия.<br>void Npc_PercDisable(c_npc self,int percID); - функция деактивации восприятия percID у npc self.<br>void Npc_SetPercTime(c_npc self,float seconds); - установка времени реакции в секундах seconds npc self на событие для активного восприятия.<br>void Npc_SendPassivePerc(c_npc npc1,int Perc_type,c_npc npc2,c_npc npc3); - функция посылки пассивного восприятия Perc_type от npc1, где npc2 – жертва, npc3 – преступник.<br>void Npc_SendSinglePerc(c_npc self,c_npc target,int percID); - функция посылки восприятия *percID от npc self к npc target.<br>void Npc_PerceiveAll(c_npc self); - разрешает npc self воспринимать все объекты в зоне действия восприятия, затем можно использовать функции Wld_DetectNpc и Wld_DetectItem.<br>string Npc_GetDetectedMob(c_npc self); - возвращает имя MOB (Move Object) объекта, который распознал npc self. Например: если имя MOB объекта &quot;DOOR_OCR_135&quot;, то функция возвратит &quot;DOOR&quot;.<br>int Npc_CanSeeNpc(c_npc npc1,c_npc npc2); - возвращает True, если npc1 может видеть npc2, иначе – False.<br>int Npc_CanSeeNpcFreeLOS(c_npc self,c_npc other); - возвращает True, если npc self может видеть npc other по прямой, без учета угла обзора, иначе – False.<br>int Npc_CanSeeItem(c_npc npc1,c_item item); - возвращает True, если npc1 может видеть предмет item, иначе – False.<br>int Npc_CanSeeSource(c_npc self); - возвращает True, если npc self может видеть источник звука, иначе – False.<br><br>Продолжение следует.<br>

21.11.2004 11:41

Re: Уроки скриптологии
 
int Npc_IsPlayerInMyRoom(c_npc npc); - возвращает True, если npc находится в своем помещении или в помещении своей гильдии, иначе – False.<br>int Npc_WasPlayerInMyRoom(c_npc npc); - возвращает True, если npc находился в своем помещении или в помещении своей гильдии перед изменением своего положения, иначе – False.<br>int Npc_GetComrades(c_npc npc); - возвращает 1, если npc имеет друзей, иначе – 0. ***<br>int Npc_IsDetectedMobOwnedByNpc(c_npc user,c_npc owner); - возвращает значение &gt; 0, если npc owner является владельцем MOBа, который использует npc user.<br>int Npc_IsDetectedMobOwnedByGuild(c_npc user,int ownerguild); - возвращает значение &gt; 0, если гильдия ownerguild является владельцем MOBа, который использует npc user.<br>void Npc_GiveItem(c_npc self,c_item item,c_npc other); - npc self получает предмет item от npc other.<br>int Npc_StartItemReactModules(c_npc self,c_npc other,c_item item); - проверяет все модули ItemReact реакции на предмет item, полученный npc self от npc other, запускает соответствующую функцию Reaction и возвращает True, если находит модуль, иначе – False.<br>int Npc_HasOffered(c_npc self,c_npc other,int itemInstance); - проверяет, имеет ли npc other предмет itemInstance для передачи npc self, возвращает True, если предмет имеется, иначе – False.<br><br>Продолжение следует.<br>

22.11.2004 15:01

Re: Уроки скриптологии
 
c_item Npc_GetInvItem(c_npc self,int itemInstance); - получить ссылку на предмет, который имеет npc self с номером itemInstance.<br>int Npc_HasItems(c_npc n0,int itemInstance); - возвращает количетво предметов itemInstance у НПС n0.<br>int Npc_GetInvItemBySlot(c_npc self,int category,int slotNr); - возвращает кол-во предметов, которые находятся у npc self, где category – категория инвентаря (INV_WEAPON, INV_ARMOR, INV_RUNE, INV_MAGIC, INV_FOOD, INV_POTION, INV_DOC, INV_MISC), slotNr – номер слота предмета.<br>void Npc_RemoveInvItem(c_npc owner,int itemInstance); - предмет itemInstance удаляется из инвентаря npc owner и из игры.<br>void Npc_RemoveInvItems(c_npc owner,int itemInstance,int amount); - указанное кол-во amount предметов itemInstance удаляется из инвентаря npc owner и из игры.<br>с_item Npc_GetEquippedMeleeWeapon(c_npc n0); - возвращает оружие ближнего радиуса поражения, которым экипирован npc n0.<br>c_item Npc_GetEquippedRangedWeapon(c_npc n0); - возвращает оружие дальнего радиуса поражения, которым экипирован npc n0.<br>c_item Npc_GetEquippedArmor(c_npc n0); - возвращает доспехи, которыми экипирован npc n0.<br>int Npc_HasEquippedWeapon(c_npc self); - возвращает 1, если npc self экипирован оружием, иначе - 0.<br>int Npc_HasEquippedMeleeWeapon(c_npc self); - возвращает 1, если npc self экипирован оружием ближнего радиуса поражения, иначе - 0.<br>int Npc_HasEquippedRangedWeapon(c_npc self); - возвращает 1, если npc self экипирован оружием дальнего радиуса поражения, иначе - 0.<br>int Npc_HasEquippedArmor(c_npc self); - возвращает 1, если npc self экипирован доспехами, иначе - 0.<br><br>Продолжение следует.<br>

23.11.2004 11:54

Re: Уроки скриптологии
 
void Npc_SetToFistMode(c_npc self); - ставит npc self в режим кулачного боя.<br>void Npc_SetToFightMode(c_npc self,int weapon); - ставит npc self в режим боя с соответствующим оружием weapon.<br>int Npc_IsInFightMode(c_npc self,int fmode); - возвращает 1, если npc self находится в боевом режиме fmode, иначе - 0. Заданы следующие боевые режимы: FMODE_NONE – небоевой режим, FMODE_FIST – режим кулачного боя, FMODE_MELEE – боевой режим с оружием ближнего радиуса поражения, FMODE_FAR - боевой режим с оружием дальнего радиуса поражения, FMODE_MAGIC – боевой режим с магией.<br>c_item Npc_GetReadiedWeapon(c_npc n0); - возвращает ссылку на оружие, которое npc n0 держит в руке.<br>int Npc_HasReadiedWeapon(c_npc self); - возвращает 1, если npc self держит любое оружие в руке, иначе - 0.<br>int Npc_HasReadiedMeleeWeapon(c_npc self); - возвращает 1, если npc self держит в руке оружие ближнего радиуса поражения, иначе - 0.<br>int Npc_HasReadiedRangedWeapon(c_npc self); - возвращает 1, если npc self держит в руке оружие дальнего радиуса поражения, иначе - 0.<br>int Npc_HasRangedWeaponWithAmmo(c_npc npc); - возвращает 1, если npc self держит в руке или имеет в инвентаре оружие дальнего радиуса поражения с боеприпасами, иначе - 0.<br><br>Продолжение следует.<br>

24.11.2004 15:08

Re: Уроки скриптологии
 
int Npc_GetTarget(c_npc self); - возвращает True, если npc self имеет цель для поражения (в качестве цели выступает npc other), иначе – False.<br>int Npc_GetNextTarget(c_npc self); - выполняется активный поиск цели для npc self. Если цель находится, то она становится внутренней целью и записывается в переменную <br>other, если цель не найдена, то внутренняя цель удаляется и other становится недействительным. Критерий поиска цели - в качестве цели возмется враждебный противник, который не мертв или находится не в бессознательном состоянии. Возвращает True, если цель найдена, иначе – False. Внимание: Поиск основывается на активном восприятии npc self, поэтому, если активное восприятие не установлено, то сначала следует применять функцию Npc_PerceiveAll(). <br>int Npc_IsNextTargetAvailable(c_npc self); - работает аналогично предыдущей функции, только ни внутренняя цель, ни переменная other не инициализируются.<br>void Npc_SetTarget(c_npc self,c_npc other); - устанавливает для npc self в качестве внутренней цели для поражения npc other.<br>int Npc_AreWeStronger(c_npc self,c_npc other); - выявляет более сильного npc среди self и other по следующему алгоритму: если сумма уровней всех npc (людей и монстров), которые враждебны к self и дружелюбны к other, более чем в два раза превышает сумму уровней всех npc (людей и монстров), которые дружелюбны к self и враждебны к other, то other сльнее и возвращается False, иначе сильнее self и возвращается True. Замечания: 1. npc, которые враждебны к обоим, не учитываются. 2. npc, который враждебен к одному и дружелюбен к другому, будет участвовать в подсчете два раза.<br>int Npc_IsAiming(c_npc self,c_npc other); - возвращает 1, если npc other целится в npc self из оружия дальнего радиуса поражения или магией, иначе – 0.<br><br>Продолжение следует.<br>

26.11.2004 18:22

Re: Уроки скриптологии
 
int Npc_GetTalentSkill(c_npc self,int talent); - возвращает уровень навыка talent, который имеет npc self. *** Определены следующие способности: NPC_TALENT_1H – владение одноручником, NPC_TALENT_2H – владение двуручником, NPC_TALENT_BOW – владение луком, NPC_TALENT_CROSSBOW – владение арбалетом, NPC_TALENT_PICKLOCK – умение вскрывать замки, NPC_TALENT_PICKPOCKET – карманная кража, NPC_TALENT_MAGE – владение магией, NPC_TALENT_SNEAK – умение подкрадываться, NPC_TALENT_REGENERATE – способность восстанавливать здоровье, NPC_TALENT_FIREMASTER – способность мастерски обращаться с огнем, NPC_TALENT_ACROBAT – акробатика.<br>int Npc_GetTalentValue(c_npc self,int talent); - возвращает кол-во единиц навыка talent, которые имеет npc self. ***<br>void Npc_SetTalentSkill(c_npc self,int talent,int level); - установить уровень level навыка talent, которым владеет npc self. ***<br>void Npc_SetTalentValue(c_npc self,int talent,int value); - установить кол-во единиц value навыка talent, которым владеет npc self. ***<br><br>Вот мы и закончили рассмотрение большого раздела – функции работы с NPC. &nbsp;:)<br>

27.11.2004 21:36

Re: Уроки скриптологии
 
15. Функции искусственного интелекта (AI_ функции).<br><br>void AI_Wait(c_npc n0,float n1); - npc n0 переводится на n1 секунд в состояние ожидания, в этом состоянии он не делает ничего, но наносимый ущерб регистрируется и работает пассивное восприятие.<br>void AI_PlayAni(c_npc n0,string s0); - для npc n0 проигрывается файл анимации s0 (имя файла s0 обязательно пишется заглавными буквами).<br>void AI_StandUp(c_npc self); - если npc self находится в состоянии анимации, то проигрывается соответствующее движение, если npc self находится на MOBSI объекте (стул, кровать и т.д.), то он встает.<br>void AI_StandUpQuick(c_npc self); - в отличии от предыдущей функции никаких движений не проигрывается, npc self сразу переводится в стоячее состояние.<br>void AI_QuickLook(c_npc self,c_npc other); - npc self быстро бросает взгляд на npc other. Выполняется только движение головой в течение 2 секунд.<br>void AI_LookAt(c_npc self,string name); - npc self смотрит на определенную точку на местности или на объект, где *name – имя точки местности или имя VOB объекта.<br>void AI_LookAtNpc(c_npc self,c_npc other); - npc self смотрит на npc other.<br>void AI_StopLookAt(c_npc self); - npc self снова смотрит прямо перед собой.<br>void AI_PointAt(c_npc self,string name); - npc self указывает на определенную точку на местности или на объект, где *name – имя точки местности или имя VOB объекта.<br>void AI_PointAtNpc(c_npc self,c_npc other); - npc self указывает на npc other.<br>void AI_StopPointAt(c_npc self); - npc self прекращает указывать на что-нибудь или кого-нибудь.<br><br>Продолжение следует.<br>

28.11.2004 12:21

Re: Уроки скриптологии
 
void AI_TakeItem(c_npc self,c_item item); - npc self берет (принимает) предмет item.<br>void AI_DropItem(c_npc self,int itemid); - npc self выбрасывает на землю или на пол предмет itemid.<br>void AI_UseItem(c_npc self,int itemInstance); - npc self использует предмет itemInstance.<br>void AI_UseItemToState(c_npc self,int itemInstance,int state); - npc self использует предмет itemInstance до указанного состояния state (-1 – используется полностью).<br>void AI_TakeMob(c_npc self,string name); - npc self берет (принимает) MOB (рюкзак, корзину и т.д.) с именем name. ***<br>void AI_DropMob(c_npc self); - npc self выбрасывает на землю или на пол имеющийся MOB. ***<br>int AI_UseMob(c_npc self,string schemeName,int targetState); - npc self использует MOB с именем schemeName до указанного состояния targetState. Если указанное состояние у MOBа уже имеется, npc self приближается к нему, но ничего не делает.<br>void AI_Waitms(c_npc self,int msec); - npc self переводится на msec миллисекунд в состояние ожидания, в этом состоянии он не делает ничего, но наносимый ущерб регистрируется и работает пассивное восприятие. ***<br>void AI_CanSeeNpc(c_npc self,c_npc other,func see); - npc self может увидеть npc other, где see – какая-то функция (описания не нашел). ***<br><br>Продолжение следует.<br>

29.11.2004 10:41

Re: Уроки скриптологии
 
void AI_SetWalkmode(c_npc n,int n0); - установить режим передвижения n0 для npc n. Определены следующие режимы: NPC_RUN – бег, NPC_WALK – ходьба шагом, NPC_SNEAK – подкрадывание, NPC_RUN_WEAPON – бег с оружием, NPC_WALK_WEAPON – ходьба с оружием, NPC_SNEAK_WEAPON – подкрадывание с оружием.<br>void AI_GotoWP(c_npc n0,string s0); - npc n0 перемещается в указанную WP s0.<br>void AI_GotoFP(c_npc self,string fpName); - npc n0 перемещается в указанную FP fpName, расположенную в пределах 20 метров. Критерий поиска FP аналогичен используемому в функции Wld_IsFPAvailable.<br>void AI_GotoNextFP(c_npc self,string fpName); - работает аналогично предыдущей функции, только критерий поиска FP аналогичен используемому в функции Wld_IsNextFPAvailable.<br>void AI_GotoNpc(c_npc self,c_npc other); - npc self перемещается к npc other.<br>void AI_GotoItem(c_npc self,c_item item); - npc self перемещается к предмету item.<br>void AI_GotoSound(c_npc n0); - npc self перемещается к источнику звука.<br>void AI_Teleport(c_npc self,string waypoint); - телепортирует npc self в новую локацию waypoint.<br><br>Продолжение следует.<br>

30.11.2004 11:42

Re: Уроки скриптологии
 
void AI_TurnToNpc(c_npc n0,c_npc n1); - npc n0 поварачивается к npc n1 лицом.<br>void AI_TurnAway(c_npc n0,c_npc n1); - npc n0 поварачивается к npc n1 спиной.<br>void AI_WhirlAround(c_npc self,c_npc other); - npc self быстро поварачивается к npc other лицом. (Делает оборот).<br>void AI_WhirlAroundToSource(c_npc self); - npc self быстро поварачивается лицом к какому-то источнику. *** (Описания не нашел).<br>void AI_TurnToSound(c_npc self); - npc self поварачивается лицом к источнику звука.<br>void AI_AlignToWP(c_npc self); - npc self выравнивается в WP точке по направлению стрелки, заданной в Spacer.<br>void AI_AlignToFP(c_npc self); - npc self выравнивается в FP точке по направлению стрелки, заданной в Spacer. ***<br>void AI_Dodge(c_npc npc); - npc отклоняется назад. (Способ защиты при атаке противника).<br>void AI_PlayAniBS(c_npc npc,string aniname,int bodystate); - для npc проигрывается файл анимации aniname для определенного состояния тела bodystate. <br>void AI_PlayCutscene(c_npc self,string csName); - для npc self проигрывается Cutscene с именем csName, заданная в скриптах.<br><br>Продолжение следует.<br>

01.12.2004 11:36

Re: Уроки скриптологии
 
void AI_DrawWeapon(c_npc n0); - npc n0 вытаскивает оружие, которым экипирован.<br>void AI_RemoveWeapon(c_npc n0); - npc n0 прячет оружие.<br>void AI_ReadyMeleeWeapon(c_npc self); - npc self готовит оружие ближнего радиуса поражения к бою.<br>void AI_ReadyRangedWeapon(c_npc self); - npc self готовит оружие дальнего радиуса поражения к бою.<br>void AI_Attack(c_npc self); - npc self начинает сражение (эта функция должна вызываться внутри ZS_Attack_Loop). Атакуется внутренняя цель, которая была задана функцией Npc_SetTarget или Npc_GetNextTarget.<br>void AI_FinishingMove(c_npc self, c_npc other); - логическое завершение операции приближения (поворота) npc self к npc other.<br>void AI_Defend(c_npc self); - npc self парирует удар противника (защищается). Выполняется только во время атаки противника.<br>void AI_Flee(c_npc self); - npc self убегает от противника (эта функция должна вызываться внутри ZS_Loop). Предварительно функцией Npc_SetTarget должна быть установлена внутренняя цель, от которой npc self должен убежать.<br>void AI_AimAt(c_npc attacker, c_npc target); - npc attacker целится из оружия дальнего радиуса поражения в npc target.<br>void AI_StopAim(c_npc attacker); - npc attacker прекращает целиться из оружия дальнего радиуса поражения.<br>void AI_ShootAt(c_npc attacker, c_npc target); - npc attacker стреляет из оружия дальнего радиуса поражения в npc target.<br>void AI_CombatReactToDamage(c_npc self); - реакция npc self на повреждение во время боя. ***<br><br>Продолжение следует.<br>

02.12.2004 10:18

Re: Уроки скриптологии
 
void AI_LookForItem(c_npc self,int instance); - функция показывает определенный предмет instance, который имеется у npc self. (Например: золотой меч разрушения).<br>void AI_EquipBestMeleeWeapon(c_npc self); - в инвентаре npc self ищется самое лучшее оружие ближнего радиуса поражения и вешается на пояс.<br>void AI_EquipBestRangedWeapon(c_npc self); - в инвентаре npc self ищется самое лучшее оружие дальнего радиуса поражения и вешается на спину.<br>void AI_EquipBestArmor(c_npc self); - в инвентаре npc self ищутся и одеваются самые лучшие доспехи.<br>void AI_UnequipWeapons(c_npc self); - все экипированное оружие npc self убирается в инвентарь.<br>void AI_UnequipArmor(c_npc self); - одетые доспехи npc self убираются в инвентарь.<br>void AI_EquipArmor(c_npc self,int armor); - npc self одевает доспехи armor, которые должны находиться в его инвентаре. ***<br>void AI_ReadySpell(c_npc self,int spellID,int investMana); - npc self берет в руку заклинание spellID со стоимостью маны investMana.<br>void AI_UnreadySpell(c_npc self); - npc self прячет в инвентарь заклинание, которое имеет в руке.<br><br>Продолжение следует.<br>

03.12.2004 10:47

Re: Уроки скриптологии
 
void AI_Output(c_npc self, c_npc target,string outputName); - данная функция реализует диалог, npc self говорит фразу outputName для npc target. Текст фразы должен располагаться в скриптах в виде комментария к функции. (например: AI_Output() //текст фразы).<br>void AI_OutputSVM(c_npc self, c_npc target,string svmname); - данная функция реализует SVM (Standart Voice Module) диалог, npc self говорит фразу svmname для npc target. Текст фразы должен располагаться в скриптах в файле svm.d (в одном из соответствующих SVM_ модулей) в виде комментария к строке с именем svmname. (например: StopMagic = svmname; //текст фразы).<br>void AI_OutputSVM_Overlay(c_npc self, c_npc target,string svmname); - выполняется аналогично предыдущей функции, фраза выдается быстро, нет ожидания при разговоре следующей AI_ команды. Используется для комментариев перед сражением и во время сражения.<br>void AI_WaitTillEnd(c_npc self, c_npc other); - npc self ждет от npc other ответа на свою фразу. (Не выполняется перед функцией AI_OutputSVM_Overlay).<br>void AI_Ask(c_npc self,func anserYes,func answerNo); - определяет, как npc self будет отвечать на сказанную фразу, при выборе ответа «Да» - выполняется функция anserYes, иначе – функция answerNo. Эти функции должны быть описаны заранее.<br>void AI_AskText(c_npc self,func funcYes,func funcNo,string strYes,string strNo); - работает аналогично предыдущей функции, только для вариантов ответов (кроме функций) могут быть заданы фразы ответов strYes, strNo.<br>void AI_WaitForQuestion(c_npc self,func scriptFunc); - npc self ждет ответа или вопроса в течение 20 секунд, если в это время он поступает, то выполняется функция scriptFunc.<br><br>Продолжение следует.<br>

04.12.2004 14:30

Re: Уроки скриптологии
 
void AI_ProcessInfos(c_npc self); - эта функция запускает диалог для npc self с возможностью выбора вариантов ответов/вопросов. ***<br>void AI_StopProcessInfos(c_npc npc); - режим диалога npc npc, начатый предыдущей функцией, заканчивается.<br>void AI_StartState(c_npc self,func what,int stateBehaviour,string wpName); - переводит npc self в соответствующее состояние, описанное функцией what, где stateBehaviour = 0 – выполняется последовательность состояний, 1 – выполняется только функция конечного состояния, wpName – имя WP точки (если «», то состояние изменяется на месте расположения npc).<br>void AI_SetNpcsToState(c_npc self,func aiStateFunc,int radius); - переводит всех npc, находящихся от npc self на расстоянии radius сантиметров, в соответствующее состояние, описанное функцией aiStateFunc.<br>void AI_ContinueRoutine(c_npc self); - продолжает выполнение распорядка дня npc self.<br><br>Вот и всё, мы рассмотрели все базовые функции Готики1.<br>Если хотите еще что-нибудь «изучить» в скриптах, постараюсь в этом помочь. &nbsp;;)<br>

16.12.2004 11:28

Re: Уроки скриптологии
 
Тема седьмая: Встроенные функции Готики 2.<br><br>В основном в Готике 2 используются функции Готики 1, но есть несколько дополнительных функций, их мы и рассмотрим.<br><br>int AI_PrintScreen(string msg,int posx,int posy,string font,int timeSec); - выводит на экран строку текста msg (имя шрифта – font) с координатами posx, posy (диапазон от 0 до 99% размера экрана, -1 означает вывод по центру соответствующей оси экрана) на время timeSec (в секундах).<br>void AI_Snd_Play(c_npc self,string s0); - воспроизвести звуковой файл с именем s0 для npc self. <br>void AI_Snd_Play3D(c_npc self,c_npc n0,string s0); - воспроизвести звуковой файл с именем s0 для npc self. <br>void AI_PlayFX(c_npc self,c_npc n0,string s0); - воспроизвести видео-файл с именем s0 для npc self. <br>void AI_StopFX(c_npc self,string s0); - остановить воспроизведение видео-файла с именем s0 для npc self. <br>int PlayVideoEx(string video,int aa,int bb); - показать видео файл video (c расширением BIK), возвращает 1, если видео показано, 0 – в случае ошибки. Трактование параметров aa и bb не знаю, в скриптах они имеют значение TRUE и FALSE.<br>void ExitSession() – используется вместо функции ExitGame(), хотя она тоже сохранена.<br>int GameInitGerman() – просто всегда возвращает 1.<br>В английской версии экзешника еще есть функции - *int GameInitEnglish() и int GameInitEngintl(), их назначение мне неизвестно.<br><br>Продолжение следует.<br>

17.12.2004 12:58

Re: Уроки скриптологии
 
int Wld_DetectNpcExAtt(c_npc self,int instance,func aiState,int guild,int detectPlayer, int xxx); - эта функция инициализирует глобальную переменную скриптов other, отличную от NSC self, где instance – производная от класса c_npc, которая должна быть найдена и проинициализирована (-1 – любая производная), guild – гильдия, членом которой должен быть искомый npc (-1 – любая гильдия), aiState – функция AI состояния, в котором должен находится искомый npc (NOFUNC – любое AI состояние). Функция возвращает 1 в случае успешного завершения (other инициализирован найденным npc), 0 – неудача (other не определен), параметр detectPlayer указывает, исключить ли игрока (ГГ) из поиска (0 – исключить, 1 – нет). В этой функции, по сравнению с Wld_DetectNpcEx, добавлен параметр ххх, к сожалению мне про него ничего не известно (возможно это какой-нибудь атрибут).<br>int Wld_IsRaining(); – возвращает 1, если идет дождь, иначе – 0.<br>void Wld_StopEffect(string name); - останавливает проигрывание эффекта с именем name, запущенного функцией Wld_PlayEffect.<br>void Doc_SetLevelCoords(int Document,int Left,int Top,int Right,int Bottom); - устанавливает границы области, отображаемой на карте (границы задаются в абсолютных координатах уровня), где: * Document – обрабатываемый документ, Left, Top, Right и Bottom – задаваемые границы.<br>int Npc_GetLastHitSpellID(c_npc self); - возвращает номер заклинания, которое npc self применил последним.<br>int Npc_GetLastHitSpellCat(c_npc self); - возвращает категорию заклинания, которое npc self применил последним.<br>int Npc_GetActiveSpellIsScroll(c_npc self); - проверяет, является ли активное заклинание у npc self свитком, если да – возвращает 1, иначе – 0.<br>void Npc_ClearInventory(c_npc self); - очищает весь инвентарь у npc self.<br>int Npc_GetHeightToNpc(c_npc npc1,c_npc npc2); - возвращает расстояние в см. по высоте между npc1 и npc2.<br>int Npc_GetHeightToItem(c_npc self,c_item item); - возвращает расстояние в см. по высоте между npc self и предметом item.<br><br>Продолжение следует.<br>

20.12.2004 10:19

Re: Уроки скриптологии
 
c_npc Npc_GetLookAtTarget(c_npc self); - инициализирует глобальную переменную target ссылкой на npc, на которого смотрит *npc self.<br>void Npc_StopAni(c_npc self,string name); - остановить проигрывание файла анимации с именем *name для npc self.<br>int Npc_IsDrawingWeapon(c_npc self); - возвращает номер оружия, которое npc self держит в руках, иначе – 0.<br>int Npc_IsDrawingSpell(c_npc self); - возвращает номер заклинания, которое применяет npc self , иначе – 0.<br>int Npc_IsInPlayersRoom(c_npc self); - возвращает 1, если npc self находится в помещении, которое принадлежит ГГ, иначе – 0.<br>c_npc Npc_GetPortalOwner(c_npc self); - возвращает npc владельца помещения (области), в котором находится npc self.<br>int Npc_GetPortal Guild (c_npc self); - возвращает номер гильдии владельца помещения (области), в котором находится npc self.<br><br>Вот и все дополнительные функции, которые используются в Готике2.<br>

TycoooN 17.01.2005 19:50

Re: Уроки скриптологии
 
2Vam: <br>Я обеими руками &quot;за&quot;! :pivo: ;D<br>Имхо, было бы неплохо выкладывать здесь скрипты Готкик с собственными комментариями, объясняющими, что даннная строка скрипта значит. Было бы наглядно. у меня есть пример: <br><br>Функция ZS_Stand_WP - отвечает за выполнение TA_Stand_WP<br><br>func void ZS_Stand_WP() *//Функция подготовки к выполнению TA_Stand_WP<br>{<br> * Perception_Set_Normal();<br> * B_ResetAll(self);<br> * AI_SetWalkMode(self,NPC_WALK);<br> * AI_GotoWP(self,self.wp);<br> * AI_AlignToWP(self);<br> * self.aivar[AIV_TAPOSITION] = NOTINPOS;<br>};<br><br>func int ZS_Stand_WP_loop() *//Это функция выполняется циклически, пока НПС выполняет TA_Stand_WP<br>{<br> * var int random;<br> * if(self.aivar[AIV_TAPOSITION] == NOTINPOS) *//Блок для случая, если НПС не в &quot;ISINPOS&quot; (только в первый раз)<br> * {<br> * * *AI_PlayAni(self,&quot;T_STAND_2_LGUARD&quot;); *//Проигрывается анимация &quot;T_STAND_2_LGUARD&quot; (НПС примет &quot;стойку&quot;)<br> * * *self.aivar[AIV_TAPOSITION] = ISINPOS;<br> * };<br> * if((Npc_GetStateTime(self) &gt; 5) &amp;&amp; (self.aivar[AIV_TAPOSITION] == ISINPOS)) *//После того, как НПС становится в &quot;ISINPOS&quot;, каждые 5 секунд выполняется блок<br> * {<br> * * *random = Hlp_Random(10); *//Берется случайное число от 0 до 9<br> * * *if(random == 0) *//Если число было 0, проигрывается анимация &quot;T_LGUARD_SCRATCH&quot; (НПС &quot;потянется&quot;)<br> * * *{<br> * * * * AI_PlayAni(self,&quot;T_LGUARD_SCRATCH&quot;);<br> * * *}<br> * * *else if(random == 1) *//Если число было 1, проигрывается та же анимация, что и при 0<br> * * *{<br> * * * * AI_PlayAni(self,&quot;T_LGUARD_STRETCH&quot;);<br> * * *}<br> * * *else if(random == 2) *//Если число было 2, проигрывается анимация &quot;T_LGUARD_CHANGELEG&quot; (НПС &quot;меняет ногу&quot;)<br> * * *{<br> * * * * AI_PlayAni(self,&quot;T_LGUARD_CHANGELEG&quot;);<b r> * * *};<br> * * *Npc_SetStateTime(self,0); *//Время обнуляется, т.е. начинаются следующие 5 секунд<br> * }; *//Т.е. шанс, что НПС произведет какое-то действие раз в пять секунд - 3\10<br> * return LOOP_CONTINUE; *//Цикл замыкается, и функция &quot;ZS_Stand_WP_loop&quot; будет выполнена снова, и так будет пока НПС не получит команды прекритить выполнение &quot;TA_Stand_WP&quot;<br>};<br><br>func void ZS_Stand_WP_end() &nbsp;//Функция завершения TA_Stand_WP<br>{<br> * AI_PlayAni(self,&quot;T_LGUARD_2_STAND&quot;); *//При получении НПС команды прекратить выполнение &quot;TA_Stand_WP&quot;, проигрывается анимация &quot;T_STAND_2_LGUARD&quot; (НПС выйдет из &quot;стойки&quot;)<br>};<br>

17.01.2005 22:35

Re: Уроки скриптологии
 
Тема первая: Глобальные константы.<br><br>Практически все глобальные константы описаны в файле ..\_intern\constants.d<br><br>// Шрифты для функции PrintScreen<br>const string FONT_Screen * * * * * *= &quot;FONT_OLD_20_WHITE.TGA&quot;; * * *//обычный экранный шрифт<br>const string FONT_ScreenSmall * * *= &quot;FONT_OLD_10_WHITE.TGA&quot;; * * *//мелкий экранный шрифт<br>const string FONT_Book * * * * * * * * *= &quot;FONT_10_BOOK.TGA&quot;; * * * * * *//шрифт текста документов<br>const string FONT_BookHeadline * * *= &quot;FONT_20_BOOK.TGA&quot;; * * * * * *//шрифт заголовков документов<br><br>// Стоимость маны для всех свитков заклинаний<br>const int SPL_Cost_Scroll * * * * * *= 5;<br><br>// Индексы атрибутов НПС<br>const int ATR_HITPOINTS * * * * * * * * *= 0; //Текущая жизнь<br>const int ATR_HITPOINTS_MAX * * * * * *= 1; //Макс. жизнь<br>const int ATR_MANA * * * * * * * * * * * *= 2; //Текущая мана<br>const int ATR_MANA_MAX * * * * * * * * *= 3; //Макс. мана<br>const int ATR_STRENGTH * * * * * * * * *= 4; //Сила<br>const int ATR_DEXTERITY * * * * * * * * *= 5; //Ловкость<br>const int ATR_REGENERATEHP * * * * * *= 6; //Регенерация жизни в секунду<br>const int ATR_REGENERATEMANA * * *= 7; //Регенерация маны в секунду<br><br>const int ATR_INDEX_MAX * * * * * * * * *= 8; //Макс. размерность массива атрибутов НПС<br><br>// Флаги НПС<br>const int NPC_FLAG_FRIEND * * * * * *= 1 &lt;&lt; 0; //Друг (не используется, заменен на aivar[])<br>const int NPC_FLAG_IMMORTAL * * * * * *= 1 &lt;&lt; 1; //Неуязвимый<br>const int NPC_FLAG_GHOST * * * * * *= 1 &lt;&lt; 2; //Полупрозрачный (эквивалентен флагу 'GhostAlpha' в Gothic.ini секция [INTERNAL])<br><br>// Режимы борьбы<br>const int FMODE_NONE * * * * * * * * *= 0; //Выключен<br>const int FMODE_FIST * * * * * * * * *= 1; //Кулачный бой<br>const int FMODE_MELEE * * * * * * * * *= 2; //Оружие ближнего радиуса поражения<br>const int FMODE_FAR * * * * * * * * * * * *= 5; //Оружие дальнего радиуса поражения<br>const int FMODE_MAGIC * * * * * * * * *= 7; //Магия<br><br>// Режимы передвижения<br>const int NPC_RUN * * * * * * * * * * * *= 0; * * * * * *//Бег<br>const int NPC_WALK * * * * * * * * * * * *= 1; * * * * * *//Ходьба<br>const int NPC_SNEAK * * * * * * * * * * * *= 2; * * * * * *//Подкрадывание<br>const int NPC_RUN_WEAPON * * * * * *= 0 + 128; * * *//Бег с оружием<br>const int NPC_WALK_WEAPON * * * * * *= 1 + 128; * * *//Ходьба с оружием<br>const int NPC_SNEAK_WEAPON * * * * * *= 2 + 128; * * *//Подкрадывание с оружием<br><br>// Флаги брони<br>const int WEAR_TORSO * * * * * * * * *= *1; //Верхняя часть туловища (Доспехи)<br>const int WEAR_HEAD * * * * * * * * * * * *= *2; //Голова (Шлем)<br>const int WEAR_EFFECT * * * * * * * * *= 16; //Оказывает эффект при ношении<br><br>// Категории инвентаря<br>const int INV_WEAPON * * * * * * * * *= *1; //Оружие<br>const int INV_ARMOR * * * * * * * * * * * *= *2; //Броня<br>const int INV_RUNE * * * * * * * * * * * *= *3; //Руны<br>const int INV_MAGIC * * * * * * * * * * * *= *4; //Магия<br>const int INV_FOOD * * * * * * * * * * * *= *5; //Продукты питания<br>const int INV_POTION * * * * * * * * *= *6; //Напитки<br>const int INV_DOC * * * * * * * * * * * *= *7; //Документы<br>const int INV_MISC * * * * * * * * * * * *= *8; //Разное<br>const int INV_CAT_MAX * * * * * * * * *= *9; //Макс. размерность категорий инвентаря<br><br>// Вместимость инвентаря (программой игнорируется, инвентарь неограниченный!)<br>const int INV_MAX_WEAPONS * * * * * *= * *6;<br>const int INV_MAX_ARMORS * * * * * * = * *2;<br>const int INV_MAX_RUNES * * * * * * * * *= 1000;<br>const int INV_MAX_FOOD * * * * * * * * *= * 15;<br>const int INV_MAX_DOCS * * * * * * * * *= 1000;<br>const int INV_MAX_POTIONS * * * * * *= 1000;<br>const int INV_MAX_MAGIC * * * * * * * * *= 1000;<br>const int INV_MAX_MISC * * * * * * * * *= 1000;<br><br>// Кол-во строк текста описания предметов<br>const int ITM_TEXT_MAX * * * * * * * * *= 6;<br><br>// Флаги предметов<br>// (категории)<br>const int ITEM_KAT_NONE * * * * * *= 1 &lt;&lt; *0; //Прочее<br>const int ITEM_KAT_NF * * * * * *= 1 &lt;&lt; *1; //Оружие ближнего радиуса поражения<br>const int ITEM_KAT_FF * * * * * *= 1 &lt;&lt; *2; //Оружие дальнего радиуса поражения<br>const int ITEM_KAT_MUN * * * * * *= 1 &lt;&lt; *3; //Боеприпасы (мульти)<br>const int ITEM_KAT_ARMOR * * *= 1 &lt;&lt; *4; //Броня<br>const int ITEM_KAT_FOOD * * * * * *= 1 &lt;&lt; *5; //Продукты питания (мульти)<br>const int ITEM_KAT_DOCS * * * * * *= 1 &lt;&lt; *6; //Документы<br>const int ITEM_KAT_POTIONS * * *= 1 &lt;&lt; *7; //Напитки<br>const int ITEM_KAT_LIGHT * * *= 1 &lt;&lt; *8; //Источники света<br>const int ITEM_KAT_RUNE * * * * * *= 1 &lt;&lt; *9; //Руны/Свитки заклинаний<br>const int ITEM_KAT_MAGIC * * *= 1 &lt;&lt; 31; //Кольца/Амулеты/Пояса<br>const int ITEM_KAT_KEYS * * * * * *= ITEM_KAT_NONE; //Ключи<br>// (типы оружия)<br>const int ITEM_DAG * * * * * * * * *= 1 &lt;&lt; 13; //Клинок (не используется)<br>const int ITEM_SWD * * * * * * * * *= 1 &lt;&lt; 14; //Меч<br>const int ITEM_AXE * * * * * * * * *= 1 &lt;&lt; 15; //Топор<br>const int ITEM_2HD_SWD * * * * * *= 1 &lt;&lt; 16; //Друручный меч<br>const int ITEM_2HD_AXE * * * * * *= 1 &lt;&lt; 17; //Двуручный топор<br>const int ITEM_SHIELD * * * * * *= 1 &lt;&lt; 18; //Щит (не используется)<br>const int ITEM_BOW * * * * * * * * *= 1 &lt;&lt; 19; //Лук<br>const int ITEM_CROSSBOW * * * * * *= 1 &lt;&lt; 20; //Арбалет<br>// (типы магических предметов)<br>const int ITEM_RING * * * * * * * * *= 1 &lt;&lt; 11; //Кольцо<br>const int ITEM_AMULET * * * * * *= 1 &lt;&lt; 22; //Амулет<br>const int ITEM_BELT * * * * * * * * *= 1 &lt;&lt; 24; //Пояс<br>// (атрибуты предметов)<br>const int ITEM_DROPPED * * * * * * = 1 &lt;&lt; 10; //Выброшенный предмет (внутренний флаг!)<br>const int ITEM_MISSION * * * * * * = 1 &lt;&lt; 12; //Предмет миссии<br>const int ITEM_MULTI * * * * * *= 1 &lt;&lt; 21; //Складываемый по несколько штук<br>const int ITEM_NFOCUS * * * * * *= 1 &lt;&lt; 23; //Не в фокусе (внутренний флаг!)<br>const int ITEM_CREATEAMMO * * *= 1 &lt;&lt; 25; //Боеприпасы производятся сами (магически)<br>const int ITEM_NSPLIT * * * * * *= 1 &lt;&lt; 26; //Неделимый предмет<br>const int ITEM_DRINK * * * * * *= 1 &lt;&lt; 27; //Можно пить (не используется)<br>const int ITEM_TORCH * * * * * *= 1 &lt;&lt; 28; //Факел<br>const int ITEM_THROW * * * * * *= 1 &lt;&lt; 29; //Можно бросить (не используется)<br>const int ITEM_ACTIVE * * * * * *= 1 &lt;&lt; 30; //Активный (внутренний флаг!)<br><br>В таком виде информация устроит?<br>

18.01.2005 14:49

Re: Уроки скриптологии
 
Продолжение...<br><br>// Типы наносимых повреждений<br>const int DAM_INVALID * * * * * *= 0 * * * * * * * * * * * * * * *; * * *//(применения не нашел)<br>const int DAM_BARRIER * * * * * *= 1 * * * * * * * * * * * * * * *; * * *//(применения не нашел)<br>const int DAM_BLUNT * * * * * * * * *= DAM_BARRIER * * *&lt;&lt; 1; * * *//Повреждение тупым оружием (молоты, дубины, кулаки)<br>const int DAM_EDGE * * * * * * * * *= DAM_BLUNT * * * * * *&lt;&lt; 1; * * *//Повреждение острым оружием (мечи, шпаги, топоры)<br>const int DAM_FIRE * * * * * * * * *= DAM_EDGE * * * * * *&lt;&lt; 1; * * *//Повреждение огнем<br>const int DAM_FLY * * * * * * * * *= DAM_FIRE * * * * * *&lt;&lt; 1; * * *//Повреждение нокаутом (после удара НПС отлетает и падает)<br>const int DAM_MAGIC * * * * * * * * *= DAM_FLY * * * * * *&lt;&lt; 1; * * *//Повреждение магией<br>const int DAM_POINT * * * * * * * * *= DAM_MAGIC * * * * * *&lt;&lt; 1; * * *//Точечное повреждение (луки, арбалеты)<br>const int DAM_FALL * * * * * * * * *= DAM_POINT * * * * * *&lt;&lt; 1; * * *//Повреждение от падения<br><br>// Индексы значений массива наносимых повреждений (имена индексов соответствуют именам типов)<br>const int DAM_INDEX_BARRIER * * *= 0 * * * * * * * * * * * * * * * * ;<br>const int DAM_INDEX_BLUNT * * *= DAM_INDEX_BARRIER + 1;<br>const int DAM_INDEX_EDGE * * *= DAM_INDEX_BLUNT * * *+ 1;<br>const int DAM_INDEX_FIRE * * *= DAM_INDEX_EDGE * * *+ 1;<br>const int DAM_INDEX_FLY * * * * * *= DAM_INDEX_FIRE * * *+ 1;<br>const int DAM_INDEX_MAGIC * * *= DAM_INDEX_FLY * * * * * *+ 1;<br>const int DAM_INDEX_POINT * * *= DAM_INDEX_MAGIC * * *+ 1;<br>const int DAM_INDEX_FALL * * *= DAM_INDEX_POINT * * *+ 1;<br>const int DAM_INDEX_MAX * * * * * *= DAM_INDEX_FALL * * *+ 1; * * *//Макс. размерность массива наносимых повреждений<br><br>// Другие константы наносимых повреждений<br>const int NPC_ATTACK_FINISH_DISTANCE * * * * * * * * *= 180; * * *//???<br>const int NPC_BURN_TICKS_PER_DAMAGE_POINT * * * * * *= 1000; //???<br>const int NPC_BURN_DAMAGE_POINTS_PER_INTERVALL * * *= 50; * * *//???<br>const int DAM_CRITICAL_MULTIPLIER * * * * * * * * * * * *= 2; * * *//Коэффициент умножения для критического повреждения (не употребляется)<br><br>const int BLOOD_SIZE_DIVISOR * * * * * * * * * * * * * * *= 1000; * * *//???<br>const int BLOOD_DAMAGE_MAX * * * * * * * * * * * * * * * * * *= 200; * * *//???<br><br>const int DAMAGE_FLY_CM_MAX * * * * * * * * * * * * * * * * * *= 2000; * * *//???<br>const int DAMAGE_FLY_CM_MIN * * * * * * * * * * * * *= 300; * * *//???<br>const int DAMAGE_FLY_CM_PER_POINT * * * * * * * * * * * *= 5; * * *//???<br><br>const int NPC_DAM_DIVE_TIME * * * * * * * * * * * * * * * * * *= 100; * * *//???<br><br>const int IMMUNE * * * * * * * * * * * * * * * * * * * * * * * *= -1; * * *//Иммунитет к повреждению<br><br>// На каком расстоянии НПС перестают сражаться<br>// Коэффициент к дистанции (BASE + дистанция поражения оружием)<br>const float NPC_COLLISION_CORRECTION_SCALER * * * * * *= 0.75;<br><br>// * * *Типы защиты (имена соответствуют типам наносимых повреждений)<br>const int PROT_BARRIER * * * * * * * * *= DAM_INDEX_BARRIER;<br>const int PROT_BLUNT * * * * * * * * *= DAM_INDEX_BLUNT;<br>const int PROT_EDGE * * * * * * * * * * * *= DAM_INDEX_EDGE;<br>const int PROT_FIRE * * * * * * * * * * * *= DAM_INDEX_FIRE;<br>const int PROT_FLY * * * * * * * * * * * *= DAM_INDEX_FLY;<br>const int PROT_MAGIC * * * * * * * * *= DAM_INDEX_MAGIC;<br>const int PROT_POINT * * * * * * * * *= DAM_INDEX_POINT;<br>const int PROT_FALL * * * * * * * * * * * *= DAM_INDEX_FALL;<br>const int PROT_INDEX_MAX * * * * * *= DAM_INDEX_MAX; * * *//Макс. размерность массива защиты<br><br>// Активные восприятия<br>const int PERC_ASSESSPLAYER * * * * * *= 1; * * *//Восприятие ГГ<br>const int PERC_ASSESSENEMY * * * * * *= 2; * * *//Восприятие врага<br>const int PERC_ASSESSFIGHTER * * *= 3; * * *//Восприятие в сражении<br>const int PERC_ASSESSBODY * * * * * *= 4; * * *//Восприятие тела<br>const int PERC_ASSESSITEM * * * * * *= 5; * * *//Восприятие предмета<br><br>// Чувства<br>const int SENSE_SEE * * * * * * * * * * * *= 1 &lt;&lt; 0; * * *//Зрение<br>const int SENSE_HEAR * * * * * * * * *= 1 &lt;&lt; 1; * * *//Слух<br>const int SENSE_SMELL * * * * * * * * *= 1 &lt;&lt; 2; * * *//Обоняние<br><br>// Пассивные восприятия<br>const int PERC_ASSESSMURDER * * * * * * * * *= * * *6; * * *//Восприятие убийства<br>const int PERC_ASSESSDEFEAT * * * * * * * * *= * * *7; * * *//Восприятие поражения<br>const int PERC_ASSESSDAMAGE * * * * * * * * *= * * *8; * * *//Восприятие повреждения<br>const int PERC_ASSESSOTHERSDAMAGE * * *= * * *9; * * *//Восприятие других повреждений<br>const int PERC_ASSESSTHREAT * * * * * * * * *= *10; * * *//Восприятие угрозы<br>const int PERC_ASSESSREMOVEWEAPON * * *= *11; * * *//Восприятие от &quot;зачехления&quot; оружия<br>const int PERC_OBSERVEINTRUDER * * * * * *= *12; * * *//Восприятие наблюдения злоумышленника<br>const int PERC_ASSESSFIGHTSOUND * * * * * *= *13; * * *//Восприятие звука сражения<br>const int PERC_ASSESSQUIETSOUND * * * * * *= *14; * * *//Восприятие тихих звуков<br>const int PERC_ASSESSWARN * * * * * * * * *= *15; * * *//Восприятие предупреждения<br>const int PERC_CATCHTHIEF * * * * * * * * *= *16; * * *//Восприятие выгоды воровства<br>const int PERC_ASSESSTHEFT * * * * * * * * *= *17; * * *//Восприятие воровства<br>const int PERC_ASSESSCALL * * * * * * * * *= *18; * * *//Восприятие обращения (речь)<br>const int PERC_ASSESSTALK * * * * * * * * *= *19; * * *//Восприятие разговора<br>const int PERC_ASSESSGIVENITEM * * * * * *= *20; * * *//Восприятие торговли<br>const int PERC_ASSESSFAKEGUILD * * * * * *= *21; * * *//Восприятие &quot;поддельной гильдии&quot; (посылается при превращении НПС)<br>const int PERC_MOVEMOB * * * * * * * * * * * *= *22; * * *//Восприятие передвижения объекта (не НПС)<br>const int PERC_MOVENPC * * * * * * * * * * * *= *23; * * *//Восприятие передвижения НПС<br>const int PERC_DRAWWEAPON * * * * * * * * *= *24; * * *//Восприятие вытаскивания оружия<br>const int PERC_OBSERVESUSPECT * * * * * *= *25; * * *//Восприятие наблюдения подозреваемого<br>const int PERC_NPCCOMMAND * * * * * * * * *= *26; * * *//Восприятие команды НПС<br>const int PERC_ASSESSMAGIC * * * * * * * * *= *27; * * *//Восприятие магии<br>const int PERC_ASSESSSTOPMAGIC * * * * * *= *28; * * *//Восприятие прекращения колдовства<br>const int PERC_ASSESSCASTER * * * * * * * * *= *29; * * *//Восприятие колдующего (посылается при изменении маны)<br>const int PERC_ASSESSSURPRISE * * * * * *= *30; * * *//Восприятие неожиданности<br>const int PERC_ASSESSENTERROOM * * * * * *= *31; * * *//Восприятие входа в помещение (область)<br>const int PERC_ASSESSUSEMOB * * * * * * * * *= *32; * * *//Восприятие использования объекта (открытие двери, сундука)<br><br>// Способы распространения новостей<br>const int NEWS_DONT_SPREAD * * * * * * * * * * * * * * * * * * * * *= 0; * * *//Новости не распространяются<br>const int NEWS_SPREAD_NPC_FRIENDLY_TOWARDS_VICTIM * * *= 1; * * *//Друзьями жертвы<br>const int NEWS_SPREAD_NPC_FRIENDLY_TOWARDS_WITNESS * * *= 2; * * *//Друзьями свидетеля<br>const int NEWS_SPREAD_NPC_FRIENDLY_TOWARDS_OFFENDER * * *= 3; * * *//Друзьями обидчика<br>const int NEWS_SPREAD_NPC_SAME_GUILD_VICTIM * * * * * * * * *= 4; * * *//Гильдией жертвы<br><br>// Константы новостей<br>const int IMPORTANT * * * * * * * * *= 1; * * *//Важная новость<br><br>// Статусы информации<br>const int INF_TELL * * * * * * * * *= 0; * * *//Сказанная информация<br>const int INF_UNKNOWN * * * * * *= 2; * * *//Источник информации неизвестен<br><br>// Статусы миссий<br>const int LOG_RUNNING * * * * * *= 1; * * *//Миссия выполняется<br>const int LOG_SUCCESS * * * * * *= 2; * * *//Миссия успешно завершена<br>const int LOG_FAILED * * * * * *= 3; * * *//Миссия провалена<br>const int LOG_OBSOLETE * * * * * *= 4; * * *//Миссия завершена в другом направлении (был выбор вариантов завершения)<br><br>// Отношения<br>const int ATT_FRIENDLY * * * * * *= 3; * * *//Друг<br>const int ATT_NEUTRAL * * * * * *= 2; * * *//Нейтральный<br>const int ATT_ANGRY * * * * * * * * *= 1; * * *//Сердитый, злой<br>const int ATT_HOSTILE * * * * * *= 0; * * *//Враг<br><br><br>Может кто-нибудь подсказать, как сделать чтобы текст выводился ровными столбиками, а не прыгал туда-сюда? *:(

19.01.2005 11:40

Re: Уроки скриптологии
 
Продолжение...<br><br><br>// Гильдии<br>const int GIL_NONE * * * * * * * * * * * * * * * * * *= 0; * * *//Отсутствует<br>const int GIL_HUMAN * * * * * * * * * * * * * * * * * *= 1; * * *//Люди (специальная гильдия, набор констант для этой гильдии описан в файле Species.d)<br>const int GIL_PAL * * * * * * * * * * * * * * * * * *= 1; * * *//Паладины<br>const int GIL_MIL * * * * * * * * * * * * * * * * * *= 2; * * *//Милиционеры<br>const int GIL_VLK * * * * * * * * * * * * * * * * * *= 3; * * *//Горожане<br>const int GIL_KDF * * * * * * * * * * * * * * * * * *= 4; * * *//Маги огня<br>const int GIL_NOV * * * * * * * * * * * * * * * * * *= 5; * * *//Маги послушники<br>const int GIL_DJG * * * * * * * * * * * * * * * * * *= 6; * * *//Охотники на драконов<br>const int GIL_SLD * * * * * * * * * * * * * * * * * *= 7; * * *//Ополчение<br>const int GIL_BAU * * * * * * * * * * * * * * * * * *= 8; * * *//Крестьяне<br>const int GIL_BDT * * * * * * * * * * * * * * * * * *= 9; * * *//Бандиты<br>const int GIL_STRF * * * * * * * * * * * * * * * * * *= 10; ** * *//Заключенные<br>const int GIL_DMT * * * * * * * * * * * * * * * * * *= 11; * * *//Черные маги<br>const int GIL_OUT * * * * * * * * * * * * * * * * * *= 12; ** * *//Чужеземцы<br>const int GIL_PIR * * * * * * * * * * * * * * * * * *= 13; * * *//Пираты<br>const int GIL_KDW * * * * * * * * * * * * * * * * * *= 14; * * *//Маги воды<br>const int GIL_EMPTY_D * * * * * * * * * * * * * * *= 15; * * *//(пусто)<br>//-----------------------------------------------<br>const int GIL_PUBLIC * * * * * * * * * * * * * * *= 15; ** * *//Публичная гильдия<br>//-----------------------------------------------<br><br>const int GIL_SEPERATOR_HUM * * * * * * * * * * * *= 16; * * *//Разделитель между людьми и животными<br><br>const int GIL_MEATBUG * * * * * * * * * * * * * * *= 17; * * *//Мясной жук<br>const int GIL_SHEEP * * * * * * * * * * * * * * * * * *= 18; * * *//Овца<br>const int GIL_GOBBO * * * * * * * * * * * * * * * * * *= 19; ** * *//Гоблин / Черный гоблин<br>const int GIL_GOBBO_SKELETON * * * * * * * * *= 20; * * *//Скелет гоблина<br>const int GIL_SUMMONED_GOBBO_SKELETON * * *= 21; * * *//Вызванный Скелет гоблина<br>const int GIL_SCAVENGER * * * * * * * * * * * * * * *= 22; ** * *//Падальщик / Зубастик<br>const int GIL_GIANT_RAT * * * * * * * * * * * * * * *= 23; * * *//Крыса<br>const int GIL_GIANT_BUG * * * * * * * * * * * * * * *= 24; * * *//Полевой жук<br>const int GIL_BLOODFLY * * * * * * * * * * * * * * *= 25; * * *//Кровяной шершень<br>const int GIL_WARAN * * * * * * * * * * * * * * * * * *= 26; ** * *//Ящерица / Огненная ящерица<br>const int GIL_WOLF * * * * * * * * * * * * * * * * * *= 27; ** * *//Волк / Варг<br>const int GIL_SUMMONED_WOLF * * * * * * * * * * * *= 28; * * *//Вызванный Волк<br>const int GIL_MINECRAWLER * * * * * * * * * * * *= 29; ** * *//Ползун / Воин ползунов<br>const int GIL_LURKER * * * * * * * * * * * * * * *= 30; * * *//Шныг<br>const int GIL_SKELETON * * * * * * * * * * * * * * *= 31; * * *//Скелет<br>const int GIL_SUMMONED_SKELETON * * * * * * * * *= 32; * * *//Вызванный Скелет<br>const int GIL_SKELETON_MAGE * * * * * * * * * * * *= 33; * * *//Маг скелетов<br>const int GIL_ZOMBIE * * * * * * * * * * * * * * *= 34; * * *//Зомби<br>const int GIL_SNAPPER * * * * * * * * * * * * * * *= 35; ** * *//Глорх / Остер / Расчленитель<br>const int GIL_SHADOWBEAST * * * * * * * * * * * *= 36; * * *//Мракорис<br>const int GIL_SHADOWBEAST_SKELETON * * * * * *= 37; * * *//Скелет мракориса<br>const int GIL_HARPY * * * * * * * * * * * * * * * * * *= 38; * * *//Гарпия<br>const int GIL_STONEGOLEM * * * * * * * * * * * *= 39; * * *//Каменный голем<br>const int GIL_FIREGOLEM * * * * * * * * * * * * * * *= 40; * * *//Огненный голем<br>const int GIL_ICEGOLEM * * * * * * * * * * * * * * *= 41; * * *//Ледяной голем<br>const int GIL_SUMMONED_GOLEM * * * * * * * * *= 42; * * *//Вызванный Голем<br>const int GIL_DEMON * * * * * * * * * * * * * * * * * *= 43; * * *//Демон / Лорд демонов<br>const int GIL_SUMMONED_DEMON * * * * * * * * *= 44; * * *//Вызванный Демон<br>const int GIL_TROLL * * * * * * * * * * * * * * * * * *= 45; ** * *//Троль / Черный троль<br>const int GIL_SWAMPSHARK * * * * * * * * * * * *= 46; ** * *//Болотожор<br>const int GIL_DRAGON * * * * * * * * * * * * * * *= 47; ** * *//Дракон<br>const int GIL_MOLERAT * * * * * * * * * * * * * * *= 48; ** * *//Кротокрыс<br><br>const int GIL_ALLIGATOR * * * * * * * * * * * * * * *= 49; * * *//Алигатор<br>const int GIL_SWAMPGOLEM * * * * * * * * * * * *= 50; * * *//Болотный голем<br>const int GIL_Stoneguardian * * * * * * * * * * * *= 51; * * *//Каменный сторож<br>const int GIL_Gargoyle * * * * * * * * * * * * * * *= 52; * * *//Пантера / Огненный дух мракориса<br>const int GIL_Empty_A * * * * * * * * * * * * * * *= 53; * * *//(пусто)<br>const int GIL_SummonedGuardian * * * * * * * * *= 54; * * *//Вызванный Каменный сторож<br>const int GIL_SummonedZombie * * * * * * * * *= 55; * * *//Вызванный Зомби<br>const int GIL_EMPTY_B * * * * * * * * * * * * * * *= 56; * * *//(пусто)<br>const int GIL_EMPTY_C * * * * * * * * * * * * * * *= 57; * * *//(пусто)<br><br>const int GIL_SEPERATOR_ORC * * * * * * * * * * * *= 58; * * *//Разделитель животных от орков<br><br>const int GIL_ORC * * * * * * * * * * * * * * * * * *= 59; * * *//Орк / Шаман орков / Воин орков<br>const int GIL_FRIENDLY_ORC * * * * * * * * * * * *= 60; * * *//Ур-Шак<br>const int GIL_UNDEADORC * * * * * * * * * * * * * * *= 61; * * *//Орк нежить<br>const int GIL_DRACONIAN * * * * * * * * * * * * * * *= 62; * * *//Ящер<br><br>const int GIL_EMPTY_X * * * * * * * * * * * * * * *= 63; * * *//(пусто)<br>const int GIL_EMPTY_Y * * * * * * * * * * * * * * *= 64; * * *//(пусто)<br>const int GIL_EMPTY_Z * * * * * * * * * * * * * * *= 65; * * *//(пусто)<br><br>const int GIL_MAX * * * * * * * * * * * * * * * * * *= 66; * * *//Макс. количество гильдий<br><br>// Класс описания гильдий<br>CLASS C_GILVALUES<br>{<br> * * *var int * * * * * *WATER_DEPTH_KNEE * * * * * *[GIL_MAX]; * * *//Глубина воды до колена<br> * * *var int * * * * * *WATER_DEPTH_CHEST * * * * * *[GIL_MAX]; * * *//Глубина воды до груди<br> * * *var int * * * * * *JUMPUP_HEIGHT * * * * * * * * *[GIL_MAX]; * * *//Высота прыжка<br>// * * *var int * * * * * *JUMPUP_FORCE * * * * * * * * *[GIL_MAX];<br> * * *var int * * * * * *SWIM_TIME * * * * * * * * * * * *[GIL_MAX]; * * *//Время плавания<br> * * *var int * * * * * *DIVE_TIME * * * * * * * * * * * *[GIL_MAX]; * * *//Время пребывания под водой<br> * * *var int * * * * * *STEP_HEIGHT * * * * * * * * * * * *[GIL_MAX]; * * *//Ширина шага<br> * * *var int * * * * * *JUMPLOW_HEIGHT * * * * * * * * *[GIL_MAX]; * * *//Высота низкого прыжка<br> * * *var int * * * * * *JUMPMID_HEIGHT * * * * * * * * *[GIL_MAX]; * * *//Высота среднего прыжка<br> * * *var int * * * * * *SLIDE_ANGLE * * * * * * * * * * * *[GIL_MAX]; * * *//Угол начала скольжения на наклонной плоскости<br> * * *var int * * * * * *SLIDE_ANGLE2 * * * * * * * * *[GIL_MAX]; * * *//???<br> * * *var int * * * * * *DISABLE_AUTOROLL * * * * * *[GIL_MAX]; * * *//???<br> * * *var int * * * * * *SURFACE_ALIGN * * * * * * * * *[GIL_MAX]; * * *//???<br> * * *var int * * * * * *CLIMB_HEADING_ANGLE * * * * * *[GIL_MAX]; * * *//Какие-то углы подъема<br> * * *var int * * * * * *CLIMB_HORIZ_ANGLE * * * * * *[GIL_MAX]; * * *//<br> * * *var int * * * * * *CLIMB_GROUND_ANGLE * * * * * *[GIL_MAX]; * * *//<br> * * *var int * * * * * *FIGHT_RANGE_BASE * * * * * *[GIL_MAX]; * * *//Какие-то диапазоны борьбы<br> * * *var int * * * * * *FIGHT_RANGE_FIST * * * * * *[GIL_MAX]; * * *//<br> * * *var INT ** * *FIGHT_RANGE_G * * * * * * * * *[GIL_MAX]; * * *//<br> * * *var int * * * * * *FIGHT_RANGE_1HS * * * * * * * * *[GIL_MAX]; * * *//<br> * * *var int * * * * * *FIGHT_RANGE_1HA * * * * * * * * *[GIL_MAX]; * * *//<br> * * *var int * * * * * *FIGHT_RANGE_2HS * * * * * * * * *[GIL_MAX]; * * *//<br> * * *var int * * * * * *FIGHT_RANGE_2HA * * * * * * * * *[GIL_MAX]; * * *//<br> * * *var int * * * * * *FALLDOWN_HEIGHT * * * * * * * * *[GIL_MAX]; * * *//Высота падения без повреждения<br> * * *var int * * * * * *FALLDOWN_DAMAGE * * * * * * * * *[GIL_MAX]; * * *//Повреждение от падения с высоты<br> * * *var int * * * * * *BLOOD_DISABLED * * * * * * * * *[GIL_MAX]; * * *//Уровень показа крови<br> * * *var int * * * * * *BLOOD_MAX_DISTANCE * * * * * *[GIL_MAX]; * * *//Макс. радиус брызг крови в см.<br> * * *var int * * * * * *BLOOD_AMOUNT * * * * * * * * *[GIL_MAX]; * * *//Количество крови<br> * * *var int * * * * * *BLOOD_FLOW * * * * * * * * * * * *[GIL_MAX]; * * *//???<br> * * *var string *BLOOD_EMITTER * * * * * * * * *[GIL_MAX]; * * *//Источник крови<br> * * *var string *BLOOD_TEXTURE * * * * * * * * *[GIL_MAX]; * * *//Текстура крови<br> * * *var int ** * *TURN_SPEED * * * * * * * * * * * *[GIL_MAX]; * * *//Скорость разворота<br>};<br><br>// Типы звуков<br>const int NPC_SOUND_DROPTAKE * * * * * * * * *= 1; * * *//Звук капель<br>const int NPC_SOUND_SPEAK * * * * * * * * * * * *= 3; * * *//Звук разговора<br>const int NPC_SOUND_STEPS * * * * * * * * * * * *= 4; * * *//Звук шагов<br>const int NPC_SOUND_THROWCOLL * * * * * * * * *= 5; * * *//Звук летящей стрелы, болта<br>const int NPC_SOUND_DRAWWEAPON * * * * * * * * *= 6; * * *//Звук доставаемого оружия<br>const int NPC_SOUND_SCREAM * * * * * * * * * * * *= 7; * * *//Звук крика<br>const int NPC_SOUND_FIGHT * * * * * * * * * * * *= 8; * * *//Звук сражения<br><br>// Типы материалов<br>const int MAT_WOOD * * * * * * * * * * * * * * * * * *= 0; * * *//Деревянный<br>const int MAT_STONE * * * * * * * * * * * * * * * * * *= 1; * * *//Каменный<br>const int MAT_METAL * * * * * * * * * * * * * * * * * *= 2; * * *//Металлический<br>const int MAT_LEATHER * * * * * * * * * * * * * * *= 3; * * *//Кожаный<br>const int MAT_CLAY * * * * * * * * * * * * * * * * * *= 4; * * *//Глиняный<br>const int MAT_GLAS * * * * * * * * * * * * * * * * * *= 5; * * *//Стеклянный<br><br>// Записи дневника<br>const int LOG_MISSION * * * * * * * * * * * * * * *= 0; * * *//Миссии<br>const int LOG_NOTE * * * * * * * * * * * * * * * * * *= 1; * * *//Заметки<br><br>// Другие константы<br>const int TIME_INFINITE * * * * * * * * * * * * * * *= -1000000 / 1000; *//Бесконечное время ???<br>const int NPC_VOICE_VARIATION_MAX * * * * * *= 10; * * * * * * * //Макс. кол-во голосов НПС<br><br>const float * * * TRADE_VALUE_MULTIPLIER * * * * * *= 0.15; * * * * * * * * *//Коэффициент стоимости предмета, которую платит торговец<br>const string TRADE_CURRENCY_INSTANCE * * *= &quot;ITMI_GOLD&quot;; * * *//Имя валюты для расчетов<br><br><br>DimaD<br>Тэг [code] не катит, меняет только шрифт и больше ничего. *:(<br>

20.01.2005 10:07

Re: Уроки скриптологии
 
Продолжение...<br><br>//************************************<br>// Заклинания<br>//************************************<br><br>// Константы категорий<br>const int SPELL_GOOD * * * * * *= 0; * *//Хорошее<br>const int SPELL_NEUTRAL * * * * = 1; * *//Нейтральное<br>const int SPELL_BAD * * * * * * = 2; * *//Плохое<br><br>// Константы управления<br>const int SPL_DONTINVEST * * * * * * * * * *= 0; * *//Дальнейшее инвестирование маны на зарядку заклинания невозможно (мало или нет маны)<br>const int SPL_RECEIVEINVEST * * * * * * * * = 1; * *//Нужное количество маны израсходовано на зарядку (заклинание готово к действию)<br>const int SPL_SENDCAST * * * * * * * * * * *= 2; * *//Старт заклинания с действием<br>const int SPL_SENDSTOP * * * * * * * * * * *= 3; * *//Заклинание заканчивается без эффекта (мало маны)<br>const int SPL_NEXTLEVEL * * * * * * * * * * = 4; * *//Переход на следующий уровень зарядки заклинания<br>const int SPL_STATUS_CANINVEST_NO_MANADEC * = 8; * *//Инвестированного количества маны недостаточно для перехода на следующий уровень<br>const int SPL_FORCEINVEST * * * * * * = 1 &lt;&lt; 16; * *//Какой-то флаг управляющий инвестированием маны ???<br><br>// Константы цели<br>const int TARGET_COLLECT_NONE * * * * * * * * * = 0; * *//Цель определяется самим заклинанием<br>const int TARGET_COLLECT_CASTER * * * * * * * * = 1; * *//Цель - кастующий<br>const int TARGET_COLLECT_FOCUS * * * * * * * * *= 2; * *//Цель - визуальный объект в фокусе<br>const int TARGET_COLLECT_ALL * * * * * * * * * *= 3; * *//Цель - все объекты в радиусе поражения<br>const int TARGET_COLLECT_FOCUS_FALLBACK_NONE * *= 4; * *//Цель - визуальный объект в фокусе, при потере фокуса траектория устанавливается заклинанием<br>const int TARGET_COLLECT_FOCUS_FALLBACK_CASTER *= 5; * *//Цель - визуальный объект в фокусе, при потере фокуса целью становится кастующий<br>const int TARGET_COLLECT_ALL_FALLBACK_NONE * * *= 6; * *//Цель - все объекты в радиусе поражения, если объектов нет траектория устанавливается заклинанием<br>const int TARGET_COLLECT_ALL_FALLBACK_CASTER * *= 7; * *//Цель - все объекты в радиусе поражения, если объектов нет целью становится кастующий<br><br>const int TARGET_TYPE_ALL * * * = 1; * *//Цель - все и всё<br>const int TARGET_TYPE_ITEMS * * = 2; * *//Цель - предмет<br>const int TARGET_TYPE_NPCS * * *= 4; * *//Цель - НПС<br>const int TARGET_TYPE_ORCS * * *= 8; * *//Цель - орк<br>const int TARGET_TYPE_HUMANS * *= 16; * //Цель - человек<br>const int TARGET_TYPE_UNDEAD * *= 32; * //Цель - неуязвимый<br><br>// Идентификаторы заклинаний (ID)<br>// Руны Паладинов<br>const int SPL_PalLight * * * * * * *= 0; * *//Святой свет<br>const int SPL_PalLightHeal * * * * *= 1; * *//Малое лечение<br>const int SPL_PalHolyBolt * * * * * = 2; * *//Святая стрела<br>const int SPL_PalMediumHeal * * * * = 3; * *//Среднее лечение<br>const int SPL_PalRepelEvil * * * * *= 4; * *//Разогнать дьяволов<br>const int SPL_PalFullHeal * * * * * = 5; * *//Сильное лечение<br>const int SPL_PalDestroyEvil * * * *= 6; * *//Уничтожить дьяволов<br><br>// Руны Телепортации<br>const int SPL_PalTeleportSecret * * = 7; * *//Телепорт<br>const int SPL_TeleportSeaport * * * = 8; * *//Телепорт в гавань<br>const int SPL_TeleportMonastery * * = 9; * *//Телепорт к монастырю<br>const int SPL_TeleportFarm * * * * *= 10; * //Телепорт к помещику<br>const int SPL_TeleportXardas * * * *= 11; * //Телепорт к Ксардасу<br>const int SPL_TeleportPassNW * * * *= 12; * //Телепорт к проходу в Хоринисе<br>const int SPL_TeleportPassOW * * * *= 13; * //Телепорт к проходу в рудниковой долине<br>const int SPL_TeleportOC * * * * * *= 14; * //Телепорт в замок<br>const int SPL_TeleportOWDemonTower *= 15; * //Телепорт в старую башню демонов<br>const int SPL_TeleportTaverne * * * = 16; * //Телепорт к таверне<br>const int SPL_Teleport_3 * * * * * *= 17; * //(не используется)<br><br>// Круг 1<br>const int SPL_Light * * * * * * * * = 18; * //Свет<br>const int SPL_Firebolt * * * * * * *= 19; * //Огненная стрела<br>const int SPL_LightHeal * * * * * * = 21; * //Лечить легкое ранение<br>const int SPL_SummonGoblinSkeleton *= 22; * //Вызвать скелет гоблина<br>const int SPL_Zap * * * * * * * * * = 24; * //Молния<br><br>// Круг 2<br>const int SPL_Icebolt * * * * * * * = 20; * //Ледяная стрела<br>const int SPL_InstantFireball * * * = 23; * //Огненный шар<br>const int SPL_SummonWolf * * * * * *= 25; * //Вызвать волка<br>const int SPL_WindFist * * * * * * *= 26; * //Порыв ветра<br>const int SPL_Sleep * * * * * * * * = 27; * //Сон<br><br>// Круг 3<br>const int SPL_MediumHeal * * * * * *= 28; * //Лечить среднее ранение<br>const int SPL_LightningFlash * * * *= 29; * //Удар молнии<br>const int SPL_ChargeFireball * * * *= 30; * //Большой огненный шар<br>const int SPL_SummonSkeleton * * * *= 31; * //Вызвать скелет<br>const int SPL_Fear * * * * * * * * *= 32; * //Страх<br>const int SPL_IceCube * * * * * * * = 33; * //Ледяная глыба<br><br>// Круг 4<br>const int SPL_ChargeZap * * * * * * = 34; * //Шаровая молния<br>const int SPL_SummonGolem * * * * * = 35; * //Вызвать голема<br>const int SPL_DestroyUndead * * * * = 36; * //Уничтожить нежить<br>const int SPL_Pyrokinesis * * * * * = 37; * //Большая огненная буря (ошибка перевода ???)<br><br>// Круг 5<br>const int SPL_Firestorm * * * * * * = 38; * //Малая огненная буря (ошибка перевода ???)<br>const int SPL_IceWave * * * * * * * = 39; * //Ледяная волна<br>const int SPL_SummonDemon * * * * * = 40; * //Вызвать демона<br>const int SPL_FullHeal * * * * * * *= 41; * //Лечить сильное ранение<br><br>// Kreis 6<br>const int SPL_Firerain * * * * * * *= 42; * //Огненный дождь<br>const int SPL_BreathOfDeath * * * * = 43; * //Дым смерти<br>const int SPL_MassDeath * * * * * * = 44; * //Волна смерти<br>const int SPL_ArmyOfDarkness * * * *= 45; * //Армия мрака<br>const int SPL_Shrink * * * * * * * *= 46; * //Уменьшить монстра<br><br>// Свитки<br>const int SPL_TrfSheep * * * * * * *= 47; * //Превращение в овцу<br>const int SPL_TrfScavenger * * * * *= 48; * //Превращение в падальщика<br>const int SPL_TrfGiantRat * * * * * = 49; * //Превращение в крысу<br>const int SPL_TrfGiantBug * * * * * = 50; * //Превращение в полевого жука<br>const int SPL_TrfWolf * * * * * * * = 51; * //Превращение в волка<br>const int SPL_TrfWaran * * * * * * *= 52; * //Превращение в ящерицу<br>const int SPL_TrfSnapper * * * * * *= 53; * //Превращение в глорха<br>const int SPL_TrfWarg * * * * * * * = 54; * //Превращение в варга<br>const int SPL_TrfFireWaran * * * * *= 55; * //Превращение в огненную ящерицу<br>const int SPL_TrfLurker * * * * * * = 56; * //Превращение в шныга<br>const int SPL_TrfShadowbeast * * * *= 57; * //Превращение в мракориса<br>const int SPL_TrfDragonSnapper * * *= 58; * //Превращение в остера<br>const int SPL_Charm * * * * * * * * = 59; * //Забыть<br><br>// Круг 5<br>const int SPL_MasterOfDisaster * * *= 60; * //Святой удар<br><br>// ???<br>const int SPL_Deathbolt * * * * * * = 61; * //Стрела смерти<br>const int SPL_Deathball * * * * * * = 62; * //Шар смерти<br>const int SPL_ConcussionBolt * * * *= 63; * //Стрела сотрясения<br>const int SPL_Reserved_64 * * * * * = 64; * //<br>const int SPL_Reserved_65 * * * * * = 65; * //<br>const int SPL_Reserved_66 * * * * * = 66; * //<br>const int SPL_Reserved_67 * * * * * = 67; * //<br>const int SPL_Reserved_68 * * * * * = 68; * //<br>const int SPL_Reserved_69 * * * * * = 69; * //<br><br>// Заклинания магов воды<br>const int SPL_Thunderstorm * * * * *= 70; * //Шторм<br>const int SPL_Whirlwind * * * * * * = 71; * //Смерч<br>const int SPL_WaterFist * * * * * * = 72; * //Кулак воды<br>const int SPL_IceLance * * * * * * *= 73; * //Ледяное копье<br>const int SPL_Inflate * * * * * * * = 74; * //Раздуть<br>const int SPL_Geyser * * * * * * * *= 75; * //Гейзер<br>const int SPL_Waterwall * * * * * * = 76; * //Водяная стена<br>const int SPL_Reserved_77 * * * * * = 77;<br>const int SPL_Reserved_78 * * * * * = 78;<br>const int SPL_Reserved_79 * * * * * = 79;<br><br>// Заклинания Майя<br>const int SPL_Plague * * * * * * * *= 80; * //Чума<br>const int SPL_Swarm * * * * * * * * = 81; * //Рой<br>const int SPL_GreenTentacle * * * * = 82; * //Зеленые щупальца<br>const int SPL_Earthquake * * * * * *= 83; * //Землетрясение<br>const int SPL_SummonGuardian * * * *= 84; * //Создать стража<br>const int SPL_Energyball * * * * * *= 85; * //Шар энергии<br>const int SPL_SuckEnergy * * * * * *= 86; * //Украсть энергию<br>const int SPL_Skull * * * * * * * * = 87; * //Крик мертвых<br>const int SPL_SummonZombie * * * * *= 88; * //Создать зомби<br>const int SPL_SummonMud * * * * * * = 89; * //Вызвать Муда<br><br>// ...<br>const int SPL_Reserved_90 * * * * * = 90;<br>const int SPL_Reserved_91 * * * * * = 91;<br>const int SPL_Reserved_92 * * * * * = 92;<br>const int SPL_Reserved_93 * * * * * = 93;<br>const int SPL_Reserved_94 * * * * * = 94;<br>const int SPL_Reserved_95 * * * * * = 95;<br>const int SPL_Reserved_96 * * * * * = 96;<br>const int SPL_Reserved_97 * * * * * = 97;<br>const int SPL_Reserved_98 * * * * * = 98;<br>const int SPL_Reserved_99 * * * * * = 99;<br><br>const int MAX_SPELL * * * * * * * * = 100; * //59 (Gothic),68 (Gothic2),100 (G2Addon)<br><br>// *Массив имен классов заклинаний<br>const string spellFxInstanceNames[MAX_SPELL] =<br>{<br> * *&quot;PalLight&quot;, * * * * * * // 0 * *SPL_PalLight<br> * *&quot;PalHeal&quot;, * * * * * * *// 1 * *SPL_PalLightHeal<br> * *&quot;PalHolyBolt&quot;, * * * * *// 2 * *SPL_PalHolyBolt<br> * *&quot;PalHeal&quot;, * * * * * * *// 3 * *SPL_PalMediumHeal<br> * *&quot;PalRepelEvil&quot;, * * * * // 4 * *SPL_PalRepelEvil<br> * *&quot;PalHeal&quot;, * * * * * * *// 5 * *SPL_PalFullHeal<br> * *&quot;PalDestroyEvil&quot;, * * * // 6 * *SPL_PalDestroyEvil<br> * *&quot;Teleport&quot;, * * * * * * // 7 * *SPL_PalTeleportSecret<br> * *&quot;Teleport&quot;, * * * * * * // 8 * *SPL_TeleportSeaport<br> * *&quot;Teleport&quot;, * * * * * * // 9 * *SPL_TeleportMonastery<br> * *&quot;Teleport&quot;, * * * * * * // 10 * SPL_TeleportFarm<br> * *&quot;Teleport&quot;, * * * * * * // 11 * SPL_TeleportXardas<br> * *&quot;Teleport&quot;, * * * * * * // 12 * SPL_TeleportPassNW<br> * *&quot;Teleport&quot;, * * * * * * // 13 * SPL_TeleportPassOW<br> * *&quot;Teleport&quot;, * * * * * * // 14 * SPL_TeleportOC<br> * *&quot;Teleport&quot;, * * * * * * // 15 * SPL_TeleportOWDemonTower<br> * *&quot;Teleport&quot;, * * * * * * // 16 * SPL_TeleportTaverne<br> * *&quot;Teleport&quot;, * * * * * * // 17 * SPL_Teleport_3<br> * *&quot;Light&quot;, * * * * * * * *// 18 * SPL_Light<br> * *&quot;Firebolt&quot;, * * * * * * // 19 * SPL_Firebolt<br> * *&quot;Icebolt&quot;, * * * * * * *// 20 * SPL_Icebolt<br> * *&quot;Heal&quot;, * * * * * * * * // 21 * SPL_LightHeal<br> * *&quot;SummonGoblinSkeleton&quot;, // 22 * SPL_SummonGoblinSkeleton<br> * *&quot;InstantFireball&quot;, * * *// 23 * SPL_InstantFireball<br> * *&quot;Zap&quot;, * * * * * * * * *// 24 * SPL_Zap<br> * *&quot;SummonWolf&quot;, * * * * * // 25 * SPL_SummonWolf<br> * *&quot;WindFist&quot;, * * * * * * // 26 * SPL_WindFist<br> * *&quot;Sleep&quot;, * * * * * * * *// 27 * SPL_Sleep<br> * *&quot;Heal&quot;, * * * * * * * * // 28 * SPL_MediumHeal<br> * *&quot;LightningFlash&quot;, * * * // 29 * SPL_LightningFlash<br> * *&quot;ChargeFireball&quot;, * * * // 30 * SPL_ChargeFireball<br> * *&quot;SummonSkeleton&quot;, * * * // 31 * SPL_SummonSkeleton<br> * *&quot;Fear&quot;, * * * * * * * * // 32 * SPL_Fear<br> * *&quot;Icecube&quot;, * * * * * * *// 33 * SPL_IceCube<br> * *&quot;ChargeZap&quot;, * * * * * *// 34 * SPL_ChargeZap<br> * *&quot;SummonGolem&quot;, * * * * *// 53 * SPL_SummonGolem<br> * *&quot;DestroyUndead&quot;, * * * *// 36 * SPL_DestroyUndead<br> * *&quot;Pyrokinesis&quot;, * * * * *// 37 * SPL_Pyrokinesis<br> * *&quot;Firestorm&quot;, * * * * * *// 38 * SPL_Firestorm<br> * *&quot;Icewave&quot;, * * * * * * *// 39 * SPL_IceWave<br> * *&quot;SummonDemon&quot;, * * * * *// 40 * SPL_SummonDemon<br> * *&quot;Heal&quot;, * * * * * * * * // 41 * SPL_FullHeal<br> * *&quot;Firerain&quot;, * * * * * * // 42 * SPL_Firerain<br> * *&quot;BreathOfDeath&quot;, * * * *// 43 * SPL_BreathOfDeath<br> * *&quot;MassDeath&quot;, * * * * * *// 44 * SPL_MassDeath<br> * *&quot;ArmyOfDarkness&quot;, * * * // 45 * SPL_ArmyOfDarkness<br> * *&quot;Shrink&quot;, * * * * * * * // 46 * SPL_Shrink<br> * *&quot;Transform&quot;, * * * * * *// 47 * SPL_TrfSheep<br> * *&quot;Transform&quot;, * * * * * *// 48 * SPL_TrfScavenger<br> * *&quot;Transform&quot;, * * * * * *// 49 * SPL_TrfGiantRat<br> * *&quot;Transform&quot;, * * * * * *// 50 * SPL_TrfGiantBug<br> * *&quot;Transform&quot;, * * * * * *// 51 * SPL_TrfWolf<br> * *&quot;Transform&quot;, * * * * * *// 52 * SPL_TrfWaran<br> * *&quot;Transform&quot;, * * * * * *// 53 * SPL_TrfSnapper<br> * *&quot;Transform&quot;, * * * * * *// 54 * SPL_TrfWarg<br> * *&quot;Transform&quot;, * * * * * *// 55 * SPL_TrfFireWaran<br> * *&quot;Transform&quot;, * * * * * *// 56 * SPL_TrfLurker<br> * *&quot;Transform&quot;, * * * * * *// 57 * SPL_TrfShadowbeast<br> * *&quot;Transform&quot;, * * * * * *// 58 * SPL_TrfDragonSnapper<br> * *&quot;Charm&quot;, * * * * * * * *// 59 * SPL_Charm<br> * *&quot;MasterOfDisaster&quot;, * * // 60 * SPL_MasterOfDisaster<br> * *&quot;Deathbolt&quot;, * * * * * *// 61 * SPL_Deathbolt<br> * *&quot;Deathball&quot;, * * * * * *// 62 * SPL_Deathball<br> * *&quot;Concussionbolt&quot;, * * * // 63 * SPL_Concussionbolt<br> * *&quot;Light&quot;, * * * * * * * *// 64 * SPL_Reserved_64<br> * *&quot;Light&quot;, * * * * * * * *// 65 * SPL_Reserved_65<br> * *&quot;Light&quot;, * * * * * * * *// 66 * SPL_Reserved_66<br> * *&quot;Light&quot;, * * * * * * * *// 67 * SPL_Reserved_67<br> * *&quot;Light&quot;, * * * * * * * *// 68 * SPL_Reserved_68<br> * *&quot;Light&quot;, * * * * * * * *// 69 * SPL_Reserved_69<br> * *&quot;Thunderstorm&quot;, * * * * // 70 * SPL_Thunderstorm<br> * *&quot;Whirlwind&quot;, * * * * * *// 71 * SPL_Whirlwind<br> * *&quot;Waterfist&quot;, * * * * * *// 72 * SPL_WaterFist<br> * *&quot;IceLance&quot;, * * * * * * // 73 * SPL_IceLance<br> * *&quot;Sleep&quot;, * * * * * * * *// 74 * SPL_Inflate<br> * *&quot;Geyser&quot;, * * * * * * * // 75 * SPL_Geyser<br> * *&quot;Firerain&quot;, * * * * * * // 76 * SPL_Waterwall<br> * *&quot;Light&quot;, * * * * * * * *// 77 * SPL_Reserved_77<br> * *&quot;Light&quot;, * * * * * * * *// 78 * SPL_Reserved_78<br> * *&quot;Light&quot;, * * * * * * * *// 79 * SPL_Reserved_79<br> * *&quot;Fear&quot;, * * * * * * * * // 80 * SPL_Plague<br> * *&quot;Swarm&quot;, * * * * * * * *// 81 * SPL_Swarm<br> * *&quot;Greententacle&quot;, * * * *// 82 * SPL_GreenTentacle<br> * *&quot;Firerain&quot;, * * * * * * // 83 * SPL_Earthquake<br> * *&quot;SummonGuardian&quot;, * * * // 84 * SPL_SummonGuardian<br> * *&quot;Energyball&quot;, * * * * * // 85 * SPL_Energyball<br> * *&quot;SuckEnergy&quot;, * * * * * // 86 * SPL_SuckEnergy<br> * *&quot;Skull&quot;, * * * * * * * *// 87 * SPL_Skull<br> * *&quot;SummonZombie&quot;, * * * * // 88 * SPL_SummonZombie<br> * *&quot;SummonMud&quot;, * * * * * *// 89 * SPL_SummonMud<br> * *&quot;Light&quot;, * * * * * * * *// 90 * SPL_Reserved_90<br> * *&quot;Light&quot;, * * * * * * * *// 91 * SPL_Reserved_91<br> * *&quot;Light&quot;, * * * * * * * *// 92 * SPL_Reserved_92<br> * *&quot;Light&quot;, * * * * * * * *// 93 * SPL_Reserved_93<br> * *&quot;Light&quot;, * * * * * * * *// 94 * SPL_Reserved_94<br> * *&quot;Light&quot;, * * * * * * * *// 95 * SPL_Reserved_95<br> * *&quot;Light&quot;, * * * * * * * *// 96 * SPL_Reserved_96<br> * *&quot;Light&quot;, * * * * * * * *// 97 * SPL_Reserved_97<br> * *&quot;Light&quot;, * * * * * * * *// 98 * SPL_Reserved_98<br> * *&quot;Light&quot; * * * * * * * * // 99 * SPL_Reserved_99<br>};<br><br>// Массив имен анимаций заклинаний<br>const string spellFxAniLetters[MAX_SPELL] =<br>{<br> * *&quot;SLE&quot;, * * * * * * * * *// 0 * * SPL_PalLight<br> * *&quot;HEA&quot;, * * * * * * * * *// 1 * * SPL_PalLightHeal<br> * *&quot;FBT&quot;, * * * * * * * * *// 2 * * SPL_PalHolyBolt<br> * *&quot;HEA&quot;, * * * * * * * * *// 3 * * SPL_PalMediumHeal<br> * *&quot;FBT&quot;, * * * * * * * * *// 4 * * SPL_PalRepelEvil<br> * *&quot;HEA&quot;, * * * * * * * * *// 5 * * SPL_PalFullHeal<br> * *&quot;FIB&quot;, * * * * * * * * *// 6 * * SPL_PalDestroyEvil<br> * *&quot;HEA&quot;, * * * * * * * * *// 7 * *SPL_PalTeleportSecret<br> * *&quot;HEA&quot;, * * * * * * * * *// 8 * *SPL_TeleportSeaport<br> * *&quot;HEA&quot;, * * * * * * * * *// 9 * *SPL_TeleportMonastery<br> * *&quot;HEA&quot;, * * * * * * * * *// 10 * SPL_TeleportFarm<br> * *&quot;HEA&quot;, * * * * * * * * *// 11 * SPL_TeleportXardas<br> * *&quot;HEA&quot;, * * * * * * * * *// 12 * SPL_TeleportPassNW<br> * *&quot;HEA&quot;, * * * * * * * * *// 13 * SPL_TeleportPassOW<br> * *&quot;HEA&quot;, * * * * * * * * *// 14 * SPL_TeleportOC<br> * *&quot;HEA&quot;, * * * * * * * * *// 15 * SPL_TeleportOWDemonTower<br> * *&quot;HEA&quot;, * * * * * * * * *// 16 * SPL_TeleportTaverne<br> * *&quot;HEA&quot;, * * * * * * * * *// 17 * SPL_Teleport_3<br> * *&quot;SLE&quot;, * * * * * * * * *// 18 * SPL_Light<br> * *&quot;FBT&quot;, * * * * * * * * *// 19 * SPL_Firebolt<br> * *&quot;FBT&quot;, * * * * * * * * *// 20 * SPL_Icebolt<br> * *&quot;HEA&quot;, * * * * * * * * *// 21 * SPL_LightHeal<br> * *&quot;SUM&quot;, * * * * * * * * *// 22 * SPL_SummonGoblinSkeleton<br> * *&quot;FBT&quot;, * * * * * * * * *// 23 * SPL_InstantFireball<br> * *&quot;FBT&quot;, * * * * * * * * *// 24 * SPL_Zap<br> * *&quot;SUM&quot;, * * * * * * * * *// 25 * SPL_SummonWolf<br> * *&quot;WND&quot;, * * * * * * * * *// 26 * SPL_WindFist<br> * *&quot;SLE&quot;, * * * * * * * * *// 27 * SPL_Sleep<br> * *&quot;HEA&quot;, * * * * * * * * *// 28 * SPL_MediumHeal<br> * *&quot;WND&quot;, * * * * * * * * *// 29 * SPL_LightningFlash<br> * *&quot;FIB&quot;, * * * * * * * * *// 30 * SPL_ChargeFireball<br> * *&quot;SUM&quot;, * * * * * * * * *// 31 * SPL_SummonSkeleton<br> * *&quot;FEA&quot;, * * * * * * * * *// 32 * SPL_Fear<br> * *&quot;FRZ&quot;, * * * * * * * * *// 33 * SPL_IceCube<br> * *&quot;FIB&quot;, * * * * * * * * *// 34 * SPL_ChargeZap<br> * *&quot;SUM&quot;, * * * * * * * * *// 35 * SPL_SummonGolem<br> * *&quot;FIB&quot;, * * * * * * * * *// 36 * SPL_DestroyUndead<br> * *&quot;FIB&quot;, * * * * * * * * *// 37 * SPL_Pyrokinesis<br> * *&quot;FIB&quot;, * * * * * * * * *// 38 * SPL_Firestorm<br> * *&quot;FEA&quot;, * * * * * * * * *// 39 * SPL_IceWave<br> * *&quot;SUM&quot;, * * * * * * * * *// 40 * SPL_SummonDemon<br> * *&quot;HEA&quot;, * * * * * * * * *// 41 * SPL_FullHeal<br> * *&quot;FEA&quot;, * * * * * * * * *// 42 * SPL_Firerain<br> * *&quot;FIB&quot;, * * * * * * * * *// 43 * SPL_BreathOfDeath<br> * *&quot;MSD&quot;, * * * * * * * * *// 44 * SPL_MassDeath<br> * *&quot;SUM&quot;, * * * * * * * * *// 45 * SPL_ArmyOfDarkness<br> * *&quot;SLE&quot;, * * * * * * * * *// 46 * SPL_Shrink<br> * *&quot;TRF&quot;, * * * * * * * * *// 47 * SPL_TrfSheep<br> * *&quot;TRF&quot;, * * * * * * * * *// 48 * SPL_TrfScavenger<br> * *&quot;TRF&quot;, * * * * * * * * *// 49 * SPL_TrfGiantRat<br> * *&quot;TRF&quot;, * * * * * * * * *// 50 * SPL_TrfGiantBug<br> * *&quot;TRF&quot;, * * * * * * * * *// 51 * SPL_TrfWolf<br> * *&quot;TRF&quot;, * * * * * * * * *// 52 * SPL_TrfWaran<br> * *&quot;TRF&quot;, * * * * * * * * *// 53 * SPL_TrfSnapper<br> * *&quot;TRF&quot;, * * * * * * * * *// 54 * SPL_TrfWarg<br> * *&quot;TRF&quot;, * * * * * * * * *// 55 * SPL_TrfFireWaran<br> * *&quot;TRF&quot;, * * * * * * * * *// 56 * SPL_TrfLurker<br> * *&quot;TRF&quot;, * * * * * * * * *// 57 * SPL_TrfShadowbeast<br> * *&quot;TRF&quot;, * * * * * * * * *// 58 * SPL_TrfDragonSnapper<br> * *&quot;FIB&quot;, * * * * * * * * *// 59 * SPL_Charm<br> * *&quot;FIB&quot;, * * * * * * * * *// 60 * SPL_MasterOfDisaster<br> * *&quot;FBT&quot;, * * * * * * * * *// 61 * SPL_Deathbolt<br> * *&quot;FBT&quot;, * * * * * * * * *// 62 * SPL_Deathball<br> * *&quot;FBT&quot;, * * * * * * * * *// 63 * SPL_Concussionbolt<br> * *&quot;XXX&quot;, * * * * * * * * *// 64 * SPL_Reserved_64<br> * *&quot;XXX&quot;, * * * * * * * * *// 65 * SPL_Reserved_65<br> * *&quot;XXX&quot;, * * * * * * * * *// 66 * SPL_Reserved_66<br> * *&quot;XXX&quot;, * * * * * * * * *// 67 * SPL_Reserved_67<br> * *&quot;XXX&quot;, * * * * * * * * *// 68 * SPL_Reserved_68<br> * *&quot;XXX&quot;, * * * * * * * * *// 69 * SPL_Reserved_69<br> * *&quot;STM&quot;, * * * * * * * * *// 70 * SPL_Thunderstorm<br> * *&quot;WHI&quot;, * * * * * * * * *// 71 * SPL_Whirlwind * * * <br> * *&quot;WND&quot;, * * * * * * * * *// 72 * SPL_WaterFist<br> * *&quot;FBT&quot;, * * * * * * * * *// 73 * SPL_IceLance<br> * *&quot;SLE&quot;, * * * * * * * * *// 74 * SPL_Inflate * * * * <br> * *&quot;WND&quot;, * * * * * * * * *// 75 * SPL_Geyser * * * * *<br> * *&quot;FEA&quot;, * * * * * * * * *// 76 * SPL_Waterwall<br> * *&quot;XXX&quot;, * * * * * * * * *// 77 * SPL_Reserved_77<br> * *&quot;XXX&quot;, * * * * * * * * *// 78 * SPL_Reserved_78<br> * *&quot;XXX&quot;, * * * * * * * * *// 79 * SPL_Reserved_79<br> * *&quot;FBT&quot;, * * * * * * * * *// 80 * SPL_Plague<br> * *&quot;FBT&quot;, * * * * * * * * *// 81 * SPL_Swarm * * * * * <br> * *&quot;FRZ&quot;, * * * * * * * * *// 82 * SPL_GreenTentacle<br> * *&quot;FEA&quot;, * * * * * * * * *// 83 * SPL_Earthquake<br> * *&quot;SUM&quot;, * * * * * * * * *// 84 * SPL_SummonGuardian<br> * *&quot;WND&quot;, * * * * * * * * *// 85 * SPL_Energyball<br> * *&quot;WND&quot;, * * * * * * * * *// 86 * SPL_SuckEnergy<br> * *&quot;WND&quot;, * * * * * * * * *// 87 * SPL_Skull<br> * *&quot;SUM&quot;, * * * * * * * * *// 88 * SPL_SummonZombie * *<br> * *&quot;SUM&quot;, * * * * * * * * *// 89 * SPL_SummonMud<br> * *&quot;XXX&quot;, * * * * * * * * *// 90 * SPL_Reserved_90<br> * *&quot;XXX&quot;, * * * * * * * * *// 91 * SPL_Reserved_91<br> * *&quot;XXX&quot;, * * * * * * * * *// 92 * SPL_Reserved_92<br> * *&quot;XXX&quot;, * * * * * * * * *// 93 * SPL_Reserved_93<br> * *&quot;XXX&quot;, * * * * * * * * *// 94 * SPL_Reserved_94<br> * *&quot;XXX&quot;, * * * * * * * * *// 95 * SPL_Reserved_95<br> * *&quot;XXX&quot;, * * * * * * * * *// 96 * SPL_Reserved_96<br> * *&quot;XXX&quot;, * * * * * * * * *// 97 * SPL_Reserved_97<br> * *&quot;XXX&quot;, * * * * * * * * *// 98 * SPL_Reserved_98<br> * *&quot;XXX&quot; * * * * * * * * * // 99 * SPL_Reserved_99<br>};<br><br>

21.01.2005 10:00

Re: Уроки скриптологии
 
Продолжение...<br><br>// Таланты<br>const int NPC_TALENT_UNKNOWN * * * * * *= 0; * *//Отсутствует<br>const int NPC_TALENT_1H * * * * * * * * = 1; * *//Владение одноручным оружием<br>const int NPC_TALENT_2H * * * * * * * * = 2; * *//Владение двуручным оружием<br>const int NPC_TALENT_BOW * * * * * * * *= 3; * *//Владение луком<br>const int NPC_TALENT_CROSSBOW * * * * * = 4; * *//Владение арбалетом<br>const int NPC_TALENT_PICKLOCK * * * * * = 5; * *//Умение вскрывать замки<br>//const int NPC_TALENT_PICKPOCKET * * * = 6; * *//Карманная кража (из Готики 1, не используется)<br>const int NPC_TALENT_MAGE * * * * * * * = 7; * *//Маг<br>const int NPC_TALENT_SNEAK * * * * * * *= 8; * *//Подкрадывание<br>const int NPC_TALENT_REGENERATE * * * * = 9; * *//Регенерация<br>const int NPC_TALENT_FIREMASTER * * * * = 10; * //Владение огнем<br>const int NPC_TALENT_ACROBAT * * * * * *= 11; * //Акробатика<br>const int NPC_TALENT_PICKPOCKET * * * * = 12; * //Карманная кража<br>const int NPC_TALENT_SMITH * * * * * * *= 13; * //Кузнечное дело<br>const int NPC_TALENT_RUNES * * * * * * *= 14; * //Изготовление рун<br>const int NPC_TALENT_ALCHEMY * * * * * *= 15; * //Алхимия<br>const int NPC_TALENT_TAKEANIMALTROPHY * = 16; * //Разделка животных<br>const int NPC_TALENT_FOREIGNLANGUAGE * *= 17; * //Изучение иностранных языков<br>const int NPC_TALENT_WISPDETECTOR * * * = 18; * //Поиск предметов<br>const int NPC_TALENT_C * * * * * * * * *= 19; * //(пусто)<br>const int NPC_TALENT_D * * * * * * * * *= 20; * //(пусто)<br>const int NPC_TALENT_E * * * * * * * * *= 21; * //(пусто)<br><br>const int NPC_TALENT_MAX * * * * * * * *= 22; * //Макс. число талантов<br><br>// Массив талантов изготовления рун<br>var int PLAYER_TALENT_RUNES[MAX_SPELL];<br><br>// Уровни знаний иностранных языков<br>const int LANGUAGE_1 * * * *= 0;<br>const int LANGUAGE_2 * * * *= 1;<br>const int LANGUAGE_3 * * * *= 2;<br><br>const int MAX_LANGUAGE * * *= 3;<br><br>var int PLAYER_TALENT_FOREIGNLANGUAGE[MAX_LANGUAGE];<br><br>// Уровни поиска предметов<br>const int WISPSKILL_NF * * * * * * *= 0; * *//Поиск оружия ближнего радиуса поражения<br>const int WISPSKILL_FF * * * * * * *= 1; * *//Поиск оружия дальнего радиуса поражения<br>const int WISPSKILL_NONE * * * * * *= 2; * *//Поиск денег, ключей, предметов обихода<br>const int WISPSKILL_RUNE * * * * * *= 3; * *//Поиск рун и свитков<br>const int WISPSKILL_MAGIC * * * * * = 4; * *//Поиск колец и амулетов<br>const int WISPSKILL_FOOD * * * * * *= 5; * *//Поиск питания и растений<br>const int WISPSKILL_POTIONS * * * * = 6; * *//Поиск напитков всех видов<br><br>const int MAX_WISPSKILL * * * * * * = 7; * *//Макс. количество уровней поиска<br><br>var int PLAYER_TALENT_WISPDETECTOR [MAX_WISPSKILL];<br><br>// Режимы поиска предметов<br>var int WispSearching;<br>const int WispSearch_Follow * * * * = 1; * *//Огонек следует за вами<br>const int WispSearch_ALL * * * * * *= 2; * *//Ищет все, что может найти<br>const int WispSearch_POTIONS * * * *= 3; * *//Ищет напитки<br>const int WispSearch_MAGIC * * * * *= 4; * *//Ищет магические предметы<br>const int WispSearch_FOOD * * * * * = 5; * *//Ищет питание<br>const int WispSearch_NF * * * * * * = 6; * *//Ищет оружия ближнего радиуса поражения<br>const int WispSearch_FF * * * * * * = 7; * *//Ищет оружия дальнего радиуса поражения<br>const int WispSearch_NONE * * * * * = 8; * *//Ищет деньги<br>const int WispSearch_RUNE * * * * * = 9; * *//Ищет руны<br><br>// Алхимия<br>const int POTION_Health_01 * * * * *= 0; * *//Лечебная эссенция<br>const int POTION_Health_02 * * * * *= 1; * *//Лечебный экстракт<br>const int POTION_Health_03 * * * * *= 2; * *//Лечебный эликсир<br>const int POTION_Mana_01 * * * * * *= 3; * *//Эссенция маны<br>const int POTION_Mana_02 * * * * * *= 4; * *//Экстракт маны<br>const int POTION_Mana_03 * * * * * *= 5; * *//Эликсир маны<br>const int POTION_Speed * * * * * * *= 6; * *//Напиток ускорения<br>const int POTION_Perm_STR * * * * * = 7; * *//Эликсир силы<br>const int POTION_Perm_DEX * * * * * = 8; * *//Эликсир ловкости<br>const int POTION_Perm_Mana * * * * *= 9; * *//Постоянный напиток маны<br>const int POTION_Perm_Health * * * *= 10; * //Постоянный лечебный напиток<br>const int POTION_MegaDrink * * * * *= 11; * //Эмбарла Фиргасто<br>const int CHARGE_Innoseye * * * * * = 12; * //Зарядить Глаз<br>const int POTION_Mana_04 * * * * * *= 13; * //Чистая мана<br>const int POTION_Health_04 * * * * *= 14; * //Чистая жизненная энергия<br><br>const int MAX_POTION * * * * * * * *= 15; * //Макс. количество видов алхимии<br><br>var int PLAYER_TALENT_ALCHEMY[MAX_POTION];<br><br>// Кузнечное дело<br>const int WEAPON_Common * * * * * * = 0; * *//Простой самокованный меч<br><br>const int WEAPON_1H_Special_01 * * *= 1; * *//Рудный длинный клинок<br>const int WEAPON_2H_Special_01 * * *= 2; * *//Рудный двуручник<br>const int WEAPON_1H_Special_02 * * *= 3; * *//Рудный клинок чудовища<br>const int WEAPON_2H_Special_02 * * *= 4; * *//Тяжелый рудный двуручник<br>const int WEAPON_1H_Special_03 * * *= 5; * *//Рудный боевой клинок<br>const int WEAPON_2H_Special_03 * * *= 6; * *//Тяжелый рудный боевой клинок<br>const int WEAPON_1H_Special_04 * * *= 7; * *//Рудный потрошитель драконов<br>const int WEAPON_2H_Special_04 * * *= 8; * *//Большой рудный потрошитель драконов<br><br>const int WEAPON_1H_Harad_01 * * * *= 9; * *//Благородный меч<br>const int WEAPON_1H_Harad_02 * * * *= 10; * //Благородный длинный меч<br>const int WEAPON_1H_Harad_03 * * * *= 11; * //Рубиновый клинок<br>const int WEAPON_1H_Harad_04 * * * *= 12; * //Благородный меч чудовища<br><br>const int MAX_WEAPONS * * * * * * * = 13; * //Макс. количество видов создаваемого оружия<br><br>var int PLAYER_TALENT_SMITH[MAX_WEAPONS];<br><br>// Разделка животных<br>const int TROPHY_Teeth * * * * * * *= 0; * *//Взять зубы<br>const int TROPHY_Claws * * * * * * *= 1; * *//Взять когти<br>const int TROPHY_Fur * * * * * * * *= 2; * *//Взять шкуру<br>const int TROPHY_Heart * * * * * * *= 3; * *//Взять сердце<br>const int TROPHY_ShadowHorn * * * * = 4; * *//Взять рог мракориса<br>const int TROPHY_FireTongue * * * * = 5; * *//Взять огненный язык<br>const int TROPHY_BFWing * * * * * * = 6; * *//Взять крылья кровяного шершня<br>const int TROPHY_BFSting * * * * * *= 7; * *//Взять жало кровяного шершня<br>const int TROPHY_Mandibles * * * * *= 8; * *//Взять жвало<br>const int TROPHY_CrawlerPlate * * * = 9; * *//Взять панцирь ползуна<br>const int TROPHY_DrgSnapperHorn * * = 10; * //Взять рог остера<br>const int TROPHY_DragonScale * * * *= 11; * //Взять чешую дракона<br>const int TROPHY_DragonBlood * * * *= 12; * //Взять кровь дракона<br>const int TROPHY_ReptileSkin * * * *= 13; * //Взять кожу рептилии<br><br>const int MAX_TROPHIES * * * * * * *= 14; * //Макс. количество трофеев<br><br>var int PLAYER_TALENT_TAKEANIMALTROPHY[MAX_TROPHIES];<br><br>// ****************************************<br>// Шрифты для движка<br>// ****************************************<br>const string TEXT_FONT_20 * * * * * = &quot;Font_old_20_white.tga&quot;;<br>const string TEXT_FONT_10 * * * * * = &quot;Font_old_10_white.tga&quot;;<br>const string TEXT_FONT_DEFAULT * * *= &quot;Font_old_10_white.tga&quot;;<br>const string TEXT_FONT_Inventory * *= &quot;Font_old_10_white.tga&quot;;<br><br>// ****************************************<br>// Задержка текста при выводе в режиме диалога в мс на символ<br>// ****************************************<br>const float VIEW_TIME_PER_CHAR * * *= 550;<br><br>// ****************************************<br>// *Области игрового мира<br>// ****************************************<br>const int NEWWORLD_ZEN * * * * * * * * *= 1; * *//Хоринис с окрестностями<br>const int OLDWORLD_ZEN * * * * * * * * *= 2; * *//Весь Миненталь<br>const int DRAGONISLAND_ZEN * * * * * * *= 3; * *//Остров Драконов<br>const int ADDONWORLD_ZEN * * * * * * * *= 4; * *//Яркендар<br><br>// ****************************************<br>// Параметры камеры для показа предметов инвентаря<br>// ****************************************<br>const int INVCAM_ENTF_RING_STANDARD * * = 400;<br>const int INVCAM_ENTF_AMULETTE_STANDARD = 150;<br>const int INVCAM_ENTF_MISC_STANDARD * * = 200;<br>const int INVCAM_ENTF_MISC2_STANDARD * *= 250;<br>const int INVCAM_ENTF_MISC3_STANDARD * *= 500;<br>const int INVCAM_ENTF_MISC4_STANDARD * *= 650;<br>const int INVCAM_ENTF_MISC5_STANDARD * *= 850;<br>const int INVCAM_X_RING_STANDARD * * * *= 25;<br>const int INVCAM_Z_RING_STANDARD * * * *= 45;<br><br>

TycoooN 21.01.2005 23:27

Re: Уроки скриптологии
 
2All: <br>Вот-с, собрал воедино все уроки Vam'a на этот момент, привел всё к общему знаменателю, так сказать, отредактировал кое-что, кое-где подправил. <br>HTML файл в архиве можно скачать тут<br>Разумеется, все права принадлежат Vam'у, а нелегальное копирование преследуется по закону :D :D :D

22.01.2005 16:31

Re: Уроки скриптологии
 
Тема вторая: Классы.<br>Предварительное рассмотрение классов было в начале уроков. Сейчас мы рассмотрим классы подробно.<br>Все классы описаны в файле ..\_intern\Classes.d<br><br>const int MAX_CHAPTER * *= 5; * //Макс. количество глав в игре (не используется)<br>const int MAX_MISSIONS * = 5; * //Макс. количество одновременно выполняемых миссий<br>const int MAX_HITCHANCE *= 5; * //Макс. размерность массива способностей владения видами оружия<br><br>// Класс параметров НПС<br>CLASS C_NPC <br>{<br> * *var int * * id; * * * * * * * * * * * * //Однозначный идентификатор, связывающий конкретного НПС с его параметрами<br> * *var string *name[5]; * * * * * * * * * *//Имя НПС, оно появляется на экране, если НПС находится в фокусе<br> * *var string *slot; * * * * * * * * * * * //(не используется) Можно использовать для хранения какой-нибудь строки текста!<br> * *var string *effect; * * * * * * * * * * //Имя визуального эффекта, привязанного к НПС<br> * *var int * * npcType; * * * * * * * * * *//Тип НПС (описывается в файле ..AI\AI_Intern\AI_Constants.d)<br> * *var int * * flags; * * * * * * * * * * *//Флаги НПС (NPC_FLAG_IMMORTAL, NPC_FLAG_GHOST)<br> * *var int * * attribute[ATR_INDEX_MAX]; * //Массив значений атрибутов (ATR_HITPOINTS, ATR_MANA, ATR_STRENGTH и т.д.)<br> * *var int * * HitChance[MAX_HITCHANCE]; * //Способность владения НПС определенным оружием<br> * *var int * * protection[PROT_INDEX_MAX]; //Массив значений защиты от определенных повреждений<br> * *var int * * damage[DAM_INDEX_MAX]; * * *//Массив значений наносимых повреждений<br> * *var int * * damagetype; * * * * * * * * //Тип повреждения (НПС наносит в данный момент)<br> * *var int * * guild; * * * * * * * * * * *//Принадлежность к гильдии<br> * *var int * * level; * * * * * * * * * * *//Уровень НПС<br> * *var func * *mission[MAX_MISSIONS]; * * *//(не используется)<br> * *var int * * fight_tactic; * * * * * * * //Тактика сражения (описывается в файле ..AI\AI_Intern\AI_Constants.d)<br> * *var int * * weapon; * * * * * * * * * * //(не используется)<br> * *var int * * voice; * * * * * * * * * * *//Номер голоса в диалогах<br> * *var int * * voicePitch; * * * * * * * * //Тональность голоса<br> * *var int * * bodymass; * * * * * * * * * //(не используется)<br> * *var func * *daily_routine; * * * * * * *//Функция распорядка дня<br> * *var func * *start_aistate; * * * * * * *//Функция начального AI состояния (ZS_ функции) <br> * *var string *spawnPoint; * * * * * * * * //Имя Waypoint, в котором рождается НПС<br> * *var int * * spawnDelay; * * * * * * * * //Задержка в секундах между смертью и возрождением НПС<br> * *var int * * senses; * * * * * * * * * * //Чувства (зрение, слух, обоняние)<br> * *var int * * senses_range; * * * * * * * //Диапазон чувств в см.<br> * *var int * * aivar[100]; * * * * * * * * //Массив значений AI переменных (описывается в файле ..AI\AI_Intern\AI_Constants.d), неиспользуемые индуксы могут использоваться для собственных целей.<br> * *var string *wp; * * * * * * * * * * * * //Текущий Waypoint, в котором находится НПС (отслеживается Gothic.exe)<br> * *var int * * exp; * * * * * * * * * * * *//Количество полученной экспы (только для ГГ)<br> * *var int * * exp_next; * * * * * * * * * //Количество экспы оставшееся до следующего уровня (только для ГГ)<br> * *var int * * lp; * * * * * * * * * * * * //Свободные очки обучения (только для ГГ)<br> * *var int * * bodyStateInterruptableOverride; //Флаг возможности прерывания действия НПС (если TRUE - НПС прервать нельзя)<br> * *var int * * noFocus; * * * * * * * * * *//Флаг, отвечающий за фокус (если TRUE и НПС находится в фокусе, то у НПС не показывается имя и количество жизни)<br>}; * * * * * * * * * * * * * * * * * * * * * * * * * * * * *<br><br>// Класс Миссий (не используется) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * <br>CLASS C_Mission * * * * * * * * * * * * * * * * * * * * * * <br>{ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * <br> * *var string *name;<br> * *var string *description;<br> * *var int * * duration;<br> * *var int * * important;<br> * *var func * *offerConditions;<br> * *var func * *offer;<br> * *var func * *successConditions;<br> * *var func * *success;<br> * *var func * *failureConditions;<br> * *var func * *failure;<br> * *var func * *obsoleteConditions;<br> * *var func * *obsolete;<br> * *var func * *running;<br>}; * * * * * * * * * * * * * * * * * * * * * * *<br><br>// Класс параметров предмета<br>CLASS C_Item <br>{<br> * *var int * * id; * * * * * * * * * * * * //Однозначный идентификатор, связывающий конкретный предмет с его параметрами<br> * *var string *name; * * * * * * * * * * * //Имя предмета, оно появляется на экране, если предмет находится в фокусе<br> * *var string *nameID; * * * * * * * * * * //(не используется) Можно использовать для хранения какой-нибудь строки текста!<br> * *var int * * hp,hp_max; * * * * * * * * *//???<br> * *var int * * mainflag; * * * * * * * * * //Флаги категории предмета<br> * *var int * * flags; * * * * * * * * * * *//Остальные флаги предметов<br> * *var int * * weight,value; * * * * * * * //Вес и стоимость предмета<br> * *var int * * damageType; * * * * * * * * //Тип наносимого повреждения (используется для оружия)<br> * *var int * * damageTotal; * * * * * * * *//Суммарное повреждение (используется для оружия)<br> * *var int * * damage[DAM_INDEX_MAX]; * * *//Величина ущерба по типам повреждений (используется для оружия)<br> * *var int * * wear; * * * * * * * * * * * //Флаги ношения предмета<br> * *var int * * protection[PROT_INDEX_MAX]; //Величина защиты от конкретных повреждений (используется для брони)<br> * *var int * * nutrition; * * * * * * * * *//(не используется)<br> * *var int * * cond_atr[3]; * * * * * * * *//Массив атрибутов, требуемых для применения<br> * *var int * * cond_value[3]; * * * * * * *//Массив значений атрибутов, требуемых для применения<br> * *var int * * change_atr[3]; * * * * * * *//(не используется)<br> * *var int * * change_value[3]; * * * * * *//(не используется)<br> * *var func * *magic; * * * * * * * * * * *//(не используется)<br> * *var func * *on_equip; * * * * * * * * * //Функция вызываемая при экипировке<br> * *var func * *on_unequip; * * * * * * * * //Функция вызывается, когда предмет снимается или убирается в инвентарь<br> * *var func * *on_state[4]; * * * * * * * *//Функции вызываемые при использовании предмета по видам состояний (видов состояний не обнаружил ???)<br> * *var func * *owner; * * * * * * * * * * *//Владелец предмета, записывается ID НПС (не понятен тип переменной FUNC ???)<br> * *var int * * ownerGuild; * * * * * * * * //Какой гильдии принадлежит предмет<br> * *var int * * disguiseGuild; * * * * * * *//(не используется)<br> * *var string *visual; * * * * * * * * * * //Имя .3DS файла текстур предмета<br> * *var string *visual_change; * * * * * * *//Имя .ASC файла визуальных эффектов при получении этого предмета <br> * *var string *effect; * * * * * * * * * * //Имя визуального эффекта, привязанного к предмету<br> * *var int * * visual_skin; * * * * * * * *//Вариация текстуры для .3DS файла текстур предмета<br> * *var string *scemeName; * * * * * * * * *//Внутреннее имя предмета<br> * *var int * * material; * * * * * * * * * //Материал предмета<br> * *var int * * munition; * * * * * * * * * //Тип заряда для оружия дальнего радиуса поражения<br> * *var int * * spell; * * * * * * * * * * *//Номер заклинания, которое вызывает данный предмет<br> * *var int * * range; * * * * * * * * * * *//Радиус поражения оружием ближнего боя<br> * *var int * * mag_circle; * * * * * * * * //Круг магии, к которому принадлежит предмет<br> * *var string *description; * * * * * * * *//Название предмета в инвентаре<br> * *var string *text[ITM_TEXT_MAX]; * * * * //Массив строк описания предмета в инвентаре<br> * *var int * * count[ITM_TEXT_MAX]; * * * *//Массив значений характеристик предмета в инвентаре (соответствует определенной текстовой строке)<br> * *// Характеристики изображения предмета в инвентаре<br> * *var int * * inv_zbias; * * * * * * * * *//Масштаб предмета в инвентаре<br> * *var int * * inv_rotx; * * * * * * * * * //Поворот предмета в инвентаре относительно оси X<br> * *var int * * inv_roty; * * * * * * * * * //Поворот предмета в инвентаре относительно оси Y<br> * *var int * * inv_rotz; * * * * * * * * * //Поворот предмета в инвентаре относительно оси Z<br> * *var int * * inv_animate; * * * * * * * *//Вращение предмета в инвентаре<br>}; * * * * * * * * * * * * * * * * * * * * * * * * * * * * *<br> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *<br>// Класс параметров фокуса<br>CLASS C_Focus * * * * * * * * * * * * * * * * * * * * * * * <br>{ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * <br> * *// для НПС * * * * * * * * * * * * * * * * * * * * *<br> * *var float * npc_longrange; * * * * * * *//Ширина<br> * *var float * npc_range1,npc_range2; * * *//Диапазон дальности<br> * *var float * npc_azi; * * * * * * * * * *//Азимут<br> * *var float * npc_elevdo,npc_elevup; * * *//Тангаж<br> * *var int * * npc_prio; * * * * * * * * * //Приоритет<br> * *// для предметов * * * * * * * * * * * * * * * * * * * * * *<br> * *var float * item_range1,item_range2; * *//Диапазон дальности<br> * *var float * item_azi; * * * * * * * * * //Азимут<br> * *var float * item_elevdo,item_elevup; * *//Тангаж<br> * *var int * * item_prio; * * * * * * * * *//Приоритет<br> * *// для MOB's * * * * * * * * * * * * * * * * * * * * * *<br> * *var float * mob_range1,mob_range2; * * *//Диапазон дальности<br> * *var float * mob_azi; * * * * * * * * * *//Азимут<br> * *var float * mob_elevdo,mob_elevup; * * *//Тангаж<br> * *var int * * mob_prio; * * * * * * * * * //Приоритет<br>};<br><br>// Класс параметров диалогов<br>CLASS C_INFO <br>{<br> * *var int * * npc; * * * * * * * * * * * *//ID НПС, которому принадлежит диалог<br> * *var int * * nr; * * * * * * * * * * * * //???<br> * *var int * * important; * * * * * * * * *//Флаг начала диалога (TRUE - диалог начинаешь ты, FALSE - с тобой)<br> * *var func * *condition; * * * * * * * * *//Функция проверки условий начала диалога (пока функция не возвратит TRUE, диалог не начнется)<br> * *var func * *information; * * * * * * * *//Функция управления диалогом<br> * *var string *description; * * * * * * * *//Строка, которая выводится в окно выбора вариантов ответов<br> * *var int * * trade; * * * * * * * * * * *//Возможность торговли (TRUE - возможно торговать, FALSE - нет)<br> * *var int * * permanent; * * * * * * * * *//Постоянность диалога (TRUE - диалог повторяется при каждом обращении, FALSE - однократный)<br>};<br><br>// Класс реакций на предметы (не используется)<br>CLASS C_ITEMREACT<br>{<br> * *var int * * npc;<br> * *var int * * trade_item;<br> * *var int * * trade_amount;<br> * *var int * * requested_cat;<br> * *var int * * requested_item;<br> * *var int * * requested_amount;<br> * *var func * *reaction;<br>};<br><br>// Класс параметров заклинаний<br>CLASS C_Spell <br>{<br> * *var float * time_per_mana; * * * * * * *//Время в мс, требуемое для инвестирования маны на один уровень<br> * *var int * * damage_per_level; * * * * * //Наносимый урон за уровень заклинания<br> * *var int * * damageType; * * * * * * * * //Тип повреждения<br> * *var int * * spellType; * * * * * * * * *//Категория заклинания<br> * *var int * * canTurnDuringInvest; * * * *//Возможность поворота во время инвестирования маны (TRUE - возможно)<br> * *var int * * canChangeTargetDuringInvest; * *//Возможность выбора цели во время инвестирования маны (TRUE - возможно)<br> * *var int * * isMultiEffect; * * * * * * *//Возможность мультиэффектов заклинания (множественные цели и др.)<br> * *var int * * targetCollectAlgo; * * * * *//Константа описания цели<br> * *var int * * targetCollectType; * * * * *//Тип цели заклинания<br> * *var int * * targetCollectRange; * * * * //Дальность действия<br> * *var int * * targetCollectAzi; * * * * * //Угол азимута<br> * *var int * * targetCollectElev; * * * * *//Угол тангажа<br>};<br><br>// ************************************************** **********<br>// Глобальные ссылки на классы<br>// ************************************************** **********<br><br>// Сам НПС и Другой НПС<br>INSTANCE self,other(C_NPC);<br><br>// НПС - жертва определенного действия (3ий в действии)<br>INSTANCE victim(C_NPC);<br><br>// Сам предмет<br>INSTANCE item(C_Item);<br><br>// Сам ГГ (игрок)<br>INSTANCE hero(C_NPC);<br><br>

TycoooN 22.01.2005 16:46

Re: Уроки скриптологии
 
2Vam: <br>
Цитата:

var int * * nr; * * * * * * * * * * * * //???
<br><br>Я в своей мини-редакции написал что это:<br><br>var int nr; * * * //опция диалога с большим nr будет отображаться в списке ниже<br><br>

23.01.2005 13:53

Re: Уроки скриптологии
 
Тема третья: Искусственный интеллект.<br><br>Все функции, константы и переменные искусственного интелекта находятся в папке ..\AI<br><br>1. Константы AI.<br>Они описаны в файле ..\AI_Intern\AI_Constants.d<br><br>// **************************<br>// AIVAR - Константы для людей<br>// **************************<br><br>// ------ Новости и память ---------------------<br><br>const int * AIV_LastFightAgainstPlayer * * *= 0; * *//Параметры последнего сражения с ГГ<br>const int * * * FIGHT_NONE * * * * * * *= 0; * * * *//Сражения с ГГ не было<br>const int * * * FIGHT_LOST * * * * * * *= 1; * * * *//Сражение проиграно (победа ГГ)<br>const int * * * FIGHT_WON * * * * * * * = 2; * * * *//Сражение выиграно (победа НПС)<br>const int * * * FIGHT_CANCEL * * * * * *= 3; * * * *//Сражение прервано<br><br>const int * AIV_NpcSawPlayerCommit * * * * *= 1; * *//НПС видел какой криминал совершил ГГ<br>const int * * * CRIME_NONE * * * * * * *= 0; * * * *//Криминала не было<br>const int * * * CRIME_SHEEPKILLER * * * = 1; * * * *//ГГ убил овцу<br>const int * * * CRIME_ATTACK * * * * * *= 2; * * * *//ГГ сражался с НПС (параметры в AIV_LastFightAgainstPlayer)<br>const int * * * CRIME_THEFT * * * * * * = 3; * * * *//ГГ занимался воровством<br>const int * * * CRIME_MURDER * * * * * *= 4; * * * *//ГГ совершил убийство<br><br>const int * AIV_NpcSawPlayerCommitDay * * * = 2; * *//День, когда ГГ совершил криминал<br><br>// ------ Восприятие диалога -------------------<br>const int * AIV_NpcStartedTalk * * * * * * *= 3; * *//Устанавливается в TRUE, если НПС с важной информацией обращается к другому НПС<br><br>// ------ Диалог -------------------------------<br>const int * AIV_INVINCIBLE * * * * * * * * *= 4; * *//Устанавливается в TRUE в начале диалога для обоих НПС<br>const int * AIV_TalkedToPlayer * * * * * * *= 5; * *//Устанавливается в TRUE, если НПС уже разговаривал с ГГ<br><br>// ------ Карманная кража ----------------------<br>const int * AIV_PlayerHasPickedMyPocket * * = 6; * *//Устанавливается в TRUE, если ГГ залезал в карман НПС<br><br>// ------ Сражение -----------------------------<br>const int * AIV_LASTTARGET * * * * * * * * *= 7; * *//Ссылка на последнего атакованного НПС<br>const int * AIV_PursuitEnd * * * * * * * * *= 8; * *//Устанавливается в TRUE, если НПС закончил преследование<br><br>// ------ Причина нападения ------------<br>const int * AIV_ATTACKREASON * * * * * * * *= 9; * *//Причина нападения (по приоритетам)<br>const int * * * AR_NONE * * * * * * * * = 0; * * * *//Причины нет<br>const int * * * AR_LeftPortalRoom * * * = 1; * * * *//ГГ находится в помещении с ограниченным доступом<br>const int * * * AR_ClearRoom * * * * * *= 2; * * * *//ГГ находится в помещении другого НПС<br>const int * * * AR_GuardCalledToRoom * *= 3; * * * *//Вызвана охрана для защиты помещения<br>const int * * * AR_MonsterVsHuman * * * = 4; * * * *//Монстр сражается с человеком, ГГ помогает человеку<br>const int * * * AR_MonsterMurderedHuman = 5; * * * *//Монстр убил человека<br>const int * * * AR_SheepKiller * * * * *= 6; * * * *//Овца была атакована и убита (человеком или монстром)<br>const int * * * AR_Theft * * * * * * * *= 7; * * * *//ГГ что-то украл<br>const int * * * AR_UseMob * * * * * * * = 8; * * * *//ГГ использовал МОВ с флагом принадлежности другому НПС<br>const int * * * AR_GuardCalledToThief * = 9; * * * *//Вызвана стража по факту воровства ГГ<br>const int * * * AR_ReactToWeapon * * * *= 10; * * * //Преступник не убрал оружие после двукратного пердупреждения или пустился в бега<br>const int * * * AR_ReactToDamage * * * *= 11; * * * //Преступник ранил НПС<br>const int * * * AR_GuardStopsFight * * *= 12; * * * //Охрана прекращает атаковать преступника<br>const int * * * AR_GuardCalledToKill * *= 13; * * * //Вызвана охрана по факту убийства<br>const int * * * AR_GuildEnemy * * * * * = 14; * * * //НПС является врагом гильдии (человек или монстр)<br>const int * * * AR_HumanMurderedHuman * = 15; * * * //Человек убил человека<br>const int * * * AR_MonsterCloseToGate * = 16; * * * //Охрана ворот атакует враждебного монстра<br>const int * * * AR_GuardStopsIntruder * = 17; * * * //Охрана ворот атакует незваного гостя<br>const int * * * AR_SuddenEnemyInferno * = 18; * * * //Немедленная атака противника (невзирая на блокировку)<br>const int * * * AR_KILL * * * * * * * * = 19; * * * //ГГ убил НПС<br><br>// ------ Обыскивание трупов --------------------<br>const int * AIV_RANSACKED * * * * * * * * * = 10; * //Устанавливается TRUE, если труп обыскивается<br><br>// ------ Смерть --------------------------------<br>const int * AIV_DeathInvGiven * * * * * * * = 11; * //Устанавливается TRUE, если труп обыскан<br><br>// ------ Охрана --------------------------------<br>const int * AIV_Guardpassage_Status * * * * = 12; * //Статус предупреждений охраны<br>const int * * * GP_NONE * * * * * * * * = 0; * * * *//Нет предупреждений<br>const int * * * GP_FirstWarnGiven * * * = 1; * * * *//НПС получил первое предупреждение<br>const int * * * GP_SecondWarnGiven * * *= 2; * * * *//НПС получил второе предупреждение<br>const int * AIV_LastDistToWP * * * * * * * *= 13; * //Расстояние от WP охраны до точки, в которой НПС получил предупреждение<br>const int * AIV_PASSGATE * * * * * * * * * *= 14; * //TRUE - проход возможен, FALSE - проход запрещен<br><br>// ------ Предоставление экспы ------------------<br>const int * AIV_PARTYMEMBER * * * * * * * * = 15; * //Если TRUE, то экспа за убитых монстров сопровождавшим идет ГГ.<br>const int * AIV_VictoryXPGiven * * * * * * *= 16; * //Устанавливается TRUE, когда экспа за победу начислена<br><br>// ------ Пол -----------------------------------<br>const int AIV_Gender * * * * * * * * * * * *= 17; * //Пол НПС<br>const int * * * MALE * * * * * * * * * *= 0; * * * *//Мужской<br>const int * * * FEMALE * * * * * * * * *= 1; * * * *//Женский<br><br>// ------ Пища ----------------------------------<br>const int AIV_Food * * * * * * * * * * * * *= 18; * //Употребляемая пища<br>const int * * * FOOD_Apple * * * * * * *= 0; * * * *//Яблоко<br>const int * * * FOOD_Cheese * * * * * * = 1; * * * *//Сыр<br>const int * * * FOOD_Bacon * * * * * * *= 2; * * * *//Бекон<br>const int * * * FOOD_Bread * * * * * * *= 3; * * * *//Хлеб<br><br>// ------ Вспомогательные параметры для ТА ------<br>const int AIV_TAPOSITION * * * * * * * * * *= 19; * //Позиции выполненния ТА<br>const int * * * ISINPOS * * * * * * * * = 0; * * * *//НПС в позиции выполнения ТА<br>const int * * * NOTINPOS * * * * * * * *= 1; * * * *//НПС не в позиции выполнения ТА<br>const int * * * NOTINPOS_WALK * * * * * = 2; * * * *//НПС идет к точке выполнения ТА<br><br>// ------ Выбор заклинания ----------------------<br>const int AIV_SelectSpell * * * * * * * * * = 20; * //Случайное число, соответствующее заклинанию, выбранному НПС<br><br>// ------ Наблюдение ----------------------------<br>const int AIV_SeenLeftRoom * * * * * * * * *= 21; * //TRUE, если НПС наблюдает за своим помещением<br><br>//////////////////////////////////// * * * * * * * *//Переменные использующиеся при комментариях действий ГГ<br>var int Player_SneakerComment; * * * * * * * * * * *//ГГ крадется<br>var int Player_LeftRoomComment; * * * * * * * * * * //ГГ зашел в чужое помещение<br>var int Player_DrawWeaponComment; * * * * * * * * * //ГГ вытащил оружие<br>var int Player_GetOutOfMyBedComment; * * * * * * * *//ГГ лег на чужую кровать<br>////////////////////////////////////<br><br>// ------ Сражение со вторым противником --------<br>const int AIV_HitByOtherNpc * * * * * * * * = 22; * //Расстояние до другого НПС<br>const int AIV_WaitBeforeAttack * * * * * * *= 23; * //Если != 0, то вводится задержка перед атакой<br>const int AIV_LastAbsolutionLevel * * * * * = 24; * //Репутация ГГ для конкретной локации<br><br>// ----------------------------------------------<br>const int AIV_ToughGuyNewsOverride * * * * *= 25; * //НПС не имеет новостей о &quot;жестком парне&quot; (ГГ)<br><br>


Текущее время: 10:20. Часовой пояс GMT +4.
Страница 2 из 8 12 345678

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot

AGFC: Valley of Gothic © 2004-2022