|
|
09.11.2004, 23:14
|
#41
|
|
Re: Уроки скриптологии
2TycoooN:
Что конкретно значат эти отношения?
|
Если расположить в порядке агрессивности: ATT_FRIENDLY, ATT_NEUTRAL, ATT_ANGRY, ATT_HOSTILE - то будет 1 - дружеские 2 - нейтральные 3 - сердитые 4 - враждебные Это отношение одного NPC или PC к другому. А что под отношением подразумевать - задается скриптами.
|
|
|
10.11.2004, 10:52
|
#42
|
|
Re: Уроки скриптологии
2Mitrich:
это нужно прописывать для каждого НПС индивидуально или можно задать для всех членов гильдии?
|
Можно и так и эдак, только нужно использовать разные функции. Например: между гильдиями волков и падальщиков можно установить определенные отношения, а для конкретного (индивидуального) волка можно задать свои отношения. int Wld_GetDay(); - получить текущий день, отсчет дней идет от дня старта (Gamestart) *= 0. int Wld_IsTime(int hour1,int min1,int hour2,int min2); - возвращает 1, если текущее время находится между границами (hour1, min1 – нижняя граница, hour2, min2 – верхняя граница в часах и минутах), иначе возвращает 0. void Wld_SetTime(int hour,int min); - установить текущее время в часах hour и минутах min. *** void Wld_InsertNpc(int npcInstance,string spawnPoint); - разместить в мире одного NSC, где npcInstance – ссылка на NSC, spawnPoint – имя точки размещения (может быть как WP, так и FP). void Wld_InsertNpcAndRespawn(int instance,string spawnPoint,int spawnDelay); - выполняется аналогично предыдущей функции, только *NSC после смерти будет оживлен в заданной точке через spawnDelay секунд. *** void Wld_SpawnNpcRange(c_npc self,int npcInstance,int number,float time); - npc self около себя создает NSC (ссылка на него npcInstance) количеством number на время жизни time. Используется в заклинаниях вызова. *** void Wld_RemoveNpc(int npcInstance); - удалить из мира NSC (ссылке на него npcInstance). *** Продолжение следует.
|
|
|
11.11.2004, 12:05
|
#43
|
|
Re: Уроки скриптологии
void Wld_InsertItem(int itemInstance,string spawnPoint); - разместить в мире один предмет, где itemInstance – ссылка на предмет, spawnPoint – имя точки размещения (может быть как WP, так и FP). В примечании к функции написано: «Осторожно, не функционирует! Предмет будет вставлен в центр мира.» В скриптах данная функция используется, осталось выяснить, как она работает. int Wld_RemoveItem(c_item item); - удалить из мира предмет по item ссылке на него, возвращает 1 – успешное удаление, иначе – 0. void Wld_InsertObject(string name,string point); - разместить в мире визуальный объект name в точке с именем point (может быть как WP, так и FP). *** void Wld_SetObjectRoutine(int hour1,int min1,string objName,int state); - объект с именем objName (VOB объект) перейдет в состояние state в момент времени hour1, min1 (часы и минуты). void Wld_SetMobRoutine(int hour1,int min1,string objName,int state); - выполняется как и предыдущая функция, только для MOB объекта. void Wld_SendTrigger(string name); - активировать функцию VOB объекта с именем name. (Я не знаю где где прописаны эти функции). *** void Wld_SendUntrigger(string name); - деактивировать функцию VOB объекта с именем name. *** void Wld_ExchangeGuildAttitudes(string name); - установить взаимоотношения между гильдиями, где name – имя таблицы заданных отношений.
Продолжение следует.
|
|
|
12.11.2004, 12:18
|
#44
|
|
Re: Уроки скриптологии
void Wld_AssignRoomToGuild(string s0,int guild); - размещает гильдию guild на пространстве s0. void Wld_AssignRoomToNpc(string s0,c_npc roomowner); - размещает npc roomowner на пространстве s0. c_npc Wld_GetPlayerPortalOwner(); int Wld_GetPlayerPortalGuild(); c_npc Wld_GetFormerPlayerPortalOwner(); int Wld_GetFormerPlayerPortalGuild(); Какие-то четыре функции, определяющие положение SC в пространстве, большего сказать, увы, не могу. *:( void Wld_PlayEffect(string ???,instance ???,instance ???,int ???,int ???,int ???,int ???); - данная функция абсолютно нигде не применяется и не описана, поэтому ее действие и аргументы мне не известны. *** *:(
|
|
|
12.11.2004, 21:15
|
#45
|
 |
|
 |
|
Регистрация: 19.06.2004
Адрес: г. Белая Калитва.
Сообщений: 204
|
|
 |
|
 |
|
Re: Уроки скриптологии
2Vam: Читаю, все отлично! void Wld_PlayEffect(string ???,instance ???,instance ???,int ???,int ???,int ???,int ???); Значит так, на примере, можно хотя бы наполовину понять, какие аргументы. Wld_PlayEffect("spellFX_LIGHTSTAR_RED", self, self, 0, 0, 0, FALSE ); 1. Имя "скрипта" визуализации 2 и 3. Не совсем представляю, но что то для себя :) 4, 5, 6 это помоему координаты где играть эфект, здесь, т.е. прямо в "центре" ГГ, т.к. по X, Y, Z стоят 0 7.Пока тоже в завесе тайны...
|
|
|
13.11.2004, 19:07
|
#46
|
|
Re: Уроки скриптологии
2finch: 2TycoooN: Все понял! Ваши примеры из Готики 2. Я же, чтобы не мешать одно с другим, рассматриваю пока только Готику 1. Потом хотел просмотреть и выдать отличия и по Г2. Учту ваши замечания.
14. Функции работы с NPC.
int Npc_GetTrueGuild(c_npc npc); - возвращает номер гильдии, к которой принадлежит npc. int Npc_SetTrueGuild(c_npc npc,int guildID); - установить принадлежность npc к гильдии guildID. void Npc_SetAttitude * * *(c_npc self,int att); - установить постояноое отношение att npc self ко всем остальным npc. void Npc_SetTempAttitude(c_npc self,int att); - установить временное отношение att npc self ко всем остальным npc. int Npc_GetAttitude(c_npc self,c_npc other); - получить любое отношение npc self к npc other. int Npc_GetPermAttitude(c_npc self,c_npc other); - получить постоянное отношение npc self к npc other. int Npc_GetGuildAttitude(c_npc self,c_npc other); - получить отношение npc self к npc other, как отношение между гильдиями, а не личностями.
Продолжение следует.
|
|
|
14.11.2004, 12:57
|
#47
|
|
Re: Уроки скриптологии
void Npc_SetKnowsPlayer(c_npc self,c_npc player); - эта функция задает, что NSC self знаком с SC player (ГГ). int Npc_KnowsPlayer(c_npc self,c_npc player); - проверить, знаком ли NSC self с SC player, возвращает True, если знаком, иначе False. int Npc_OwnedByNpc(c_item item,c_npc npc); - проверить, принадлежит ли предмет item npc, возвращает 1, если принадлежит, иначе - 0. int Npc_OwnedByGuild(c_item item,int guild); - - проверить, принадлежит ли предмет item гильдии guild, возвращает 1, если принадлежит, иначе - 0. string Npc_GetNearestWP(c_npc self); - возвращает название WP, в которой расположен npc self. string Npc_GetNextWP(c_npc self); - возвращает название соседней точки WP, рядом с которой расположен npc self. int Npc_IsWayBlocked(c_npc self); - возвращает 1, если путь npc self прегражден препятствием, иначе – 0. int Npc_IsOnFP(c_npc self,string name); - проверяет, находится ли npc self в точке FP с именем name, возвращает 1 – да, иначе – 0.
Продолжение следует.
|
|
|
15.11.2004, 04:34
|
#48
|
|
Re: Уроки скриптологии
2Vam: Если ты "шпрэхаешь" по-немецки, хочу посоветовать тебе вот этот сайт! Очень много полезной инфы, но у меня "языковой барьер"... :( Так что дерзай!
|
|
|
15.11.2004, 18:24
|
#49
|
|
Re: Уроки скриптологии
2finch: Спасибо за предложение, только у меня аналогичный барьер! :(
int Npc_IsDead(c_npc n0); - возвращает 1, если npc n0 мертв, иначе – 0. int Npc_KnowsInfo(c_npc self,int infoInstance); - возвращает TRUE, если npc self уже получил информацию infoInstance, иначе FALSE. int Npc_CheckInfo(c_npc npc,int important); - проверяет, имеет ли NSC npc действительную информацию для игрока, в этом случае возвращается 1 и начинается диалог, иначе 0, где important – важность информации (1 – важная, 0 – обычная). int NPC_GiveInfo(c_npc npc,int important); - работает аналогично предыдущей функции, есть какое-то отличие, но яего не понял. int Npc_CheckAvailableMission(c_npc npc,int missionState,int important); - проверяет, имеет ли npc миссию в состоянии missionState (AVAILABLE, RUNNING) с важностью important, возвращает 1, если имеет, иначе – 0. int Npc_CheckRunningMission(c_npc npc,int important); - работает аналогично предыдущей функции, только проверяется миссия в состоянии текущего выполнения. int Npc_CheckOfferMission(c_npc npc,int important); - работает аналогично предыдущей функции, только проверяется миссия в которой npc может что-то предложить игроку.
Продолжение следует.
|
|
|
16.11.2004, 16:53
|
#50
|
|
Re: Уроки скриптологии
int Npc_GetStateTime(c_npc self); - возвращает кол-во секунд, которые npc self находится в текущем состоянии, заданном в "Loop" цикле. void Npc_SetStateTime(c_npc self,int seconds); - установить кол-во секунд seconds, как долго npc self может находится в этом состоянии. int Npc_GetBodyState(c_npc self); - возвращает состояние, в котором находится npc self (BS_ константы). int Npc_HasBodyFlag(c_npc self,int bodyFlag); - проверяет, установлен ли у npc self флаг состояния bodyFlag, возвращает 1, если установлен, иначе – 0. int Npc_IsPlayer(c_npc player); - возвращает 1, если проверяемый npc player является ГГ. int Npc_HasDetectedNpc(c_npc self,c_npc other); - возвращает 1, если npc self чувствует (видит, сышит и т.д.) npc other, иначе – 0. int Npc_IsInState(c_npc self,func state); - запрос на текущее состояние фигуры npc self, где state – функция состояния фигуры, возвращает True, если npc находится в этом состоянии, иначе – False. int WasInState(c_npc self,func state); - аналогично предыдущей функции, только запрос на предыдущее состояние фигуры npc. int Npc_IsInRoutine(c_npc self,func state); - проверяет, находится ли npc self в функции state, возвращает True если находится, иначе – Fаlse. void Npc_ExchangeRoutine(c_npc self,string routineName); - поменять у npc self распорядок дня routineName.
Продолжение следует.
|
|
|
17.11.2004, 11:01
|
#51
|
|
Re: Уроки скриптологии
int Npc_IsInCutscene(c_npc self); - возвращает 1, если npc self находится во время проигрывания Cutscene, иначе – 0. int Npc_IsVoiceActive(c_npc self); - возвращает 1, если npc self разговаривает, иначе – 0. *** void Npc_ClearAIQueue(c_npc self); - удаляет все команды для npc self из очереди AI_Queue. void Npc_PlayAni(c_npc self,string file); - воспроизвести файл анимации file для npc self. *** void Npc_SetRefuseTalk(c_npc self,int timeSec); - установить счетчик отказа от диалога для npc self на timeSec секунд. int Npc_RefuseTalk(c_npc self); - проверить, истек ли счетчик отказа от диалога для npc self, возвращает True, если счетчик не истек, иначе – False. int Npc_IsNear(c_npc self,c_npc other); - возвращает 1, если npc other находится на расстоянии не менее 3 метров от npc self, иначе – 0. int Npc_GetDistToNpc(c_npc npc1,c_npc npc2); - возвращает расстояние в см. между npc1 и npc2. int Npc_GetDistToWP(c_npc self,string wpName); - возвращает расстояние в см. между npc self и WP wpName. int Npc_GetDistToItem(c_npc self,c_item item); - возвращает расстояние в см. между npc self и предметом item. int Npc_GetDistToPlayer(c_npc npc1); - возвращает расстояние в см. между npc1 и ГГ.
Продолжение следует.
|
|
|
18.11.2004, 11:35
|
#52
|
|
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 жертва. void * * *Npc_MemoryEntryGuild(c_npc self,int source,c_npc offender,int newsid,c_npc victimguild); - работает аналогично предыдущей функции, только жертвой является вся гильдия. int Npc_HasNews(c_npc self,int newsID,c_npc offender,c_npc victim); - эта функция проверяет, имеет ли npc self новость с идентификатором newsID о жертве victim и преступнике offender, возвращает 1, если имеет, иначе – 0. (Вместо ненужных параметров можно *записать 0). int Npc_IsNewsGossip(c_npc self,int newsNumber); - возвращает 1, если новость для npc self является сплетней, иначе – 0. c_npc Npc_GetNewsWitness(c_npc self,int newsNumber); - возвращает ссылку на свидетеля в новости newsNumber для npc self. c_npc Npc_GetNewsVictim(c_npc self,int newsNumber); - возвращает ссылку на жертву в новости newsNumber для npc self. c_npc Npc_GetNewsOffender(c_npc self,int newsNumber); - возвращает ссылку на преступника в новости newsNumber для npc self. int Npc_DeleteNews(c_npc self,int newsNumber); - удаляет новость newsNumber для npc self, возвращает 1, исли удаление успешно, иначе – 0. ***
Продолжение следует.
|
|
|
19.11.2004, 16:29
|
#53
|
|
Re: Уроки скриптологии
void Npc_ChangeAttribute(c_npc self,int atr,int value); - изменяет значение атрибута atr на кол-во единиц value для npc self. void Npc_CreateSpell(c_npc self,int spellnr); - *npc self создает заклинание spellnr, оно становится активным, но еще не применяется. void Npc_LearnSpell(c_npc self,int spellnr); - npc self выучил заклинание spellnr и может его использовать. int Npc_GetActiveSpell(c_npc self); - возвращает номер заклинания, которое имеет активным npc self, иначе - -1. int Npc_GetActiveSpellCat(c_npc self); - возвращает номер категории активного заклинания у npc self. Существуют три категории заклинаний: SPELL_GOOD, SPELL_NEUTRAL, SPELL_BAD. int Npc_SetActiveSpellInfo(c_npc npc,int i1); - задает любое значение i1 для активного заклинания у npc, это значение может использоваться в скриптах, экзешник на него не реагирует. Возвращаемое значение неизвестно. int Npc_GetActiveSpellLevel(c_npc self); - возвращает уровень активного заклинания у npc self. int Npc_HasSpell(c_npc self,int spellID); - возвращает 1, если npc self может использовать заклинание spellID, иначе – 0.
Продолжение следует.
|
|
|
20.11.2004, 10:35
|
#54
|
|
Re: Уроки скриптологии
void Npc_PercEnable(c_npc self,int percID,func function); *- функция активации восприятия percID у npc self, где function – функция обработки восприятия. void Npc_PercDisable(c_npc self,int percID); - функция деактивации восприятия percID у npc self. void Npc_SetPercTime(c_npc self,float seconds); - установка времени реакции в секундах seconds npc self на событие для активного восприятия. void Npc_SendPassivePerc(c_npc npc1,int Perc_type,c_npc npc2,c_npc npc3); - функция посылки пассивного восприятия Perc_type от npc1, где npc2 – жертва, npc3 – преступник. void Npc_SendSinglePerc(c_npc self,c_npc target,int percID); - функция посылки восприятия *percID от npc self к npc target. void Npc_PerceiveAll(c_npc self); - разрешает npc self воспринимать все объекты в зоне действия восприятия, затем можно использовать функции Wld_DetectNpc и Wld_DetectItem. string Npc_GetDetectedMob(c_npc self); - возвращает имя MOB (Move Object) объекта, который распознал npc self. Например: если имя MOB объекта "DOOR_OCR_135", то функция возвратит "DOOR". int Npc_CanSeeNpc(c_npc npc1,c_npc npc2); - возвращает True, если npc1 может видеть npc2, иначе – False. int Npc_CanSeeNpcFreeLOS(c_npc self,c_npc other); - возвращает True, если npc self может видеть npc other по прямой, без учета угла обзора, иначе – False. int Npc_CanSeeItem(c_npc npc1,c_item item); - возвращает True, если npc1 может видеть предмет item, иначе – False. int Npc_CanSeeSource(c_npc self); - возвращает True, если npc self может видеть источник звука, иначе – False.
Продолжение следует.
|
|
|
21.11.2004, 11:41
|
#55
|
|
Re: Уроки скриптологии
int Npc_IsPlayerInMyRoom(c_npc npc); - возвращает True, если npc находится в своем помещении или в помещении своей гильдии, иначе – False. int Npc_WasPlayerInMyRoom(c_npc npc); - возвращает True, если npc находился в своем помещении или в помещении своей гильдии перед изменением своего положения, иначе – False. int Npc_GetComrades(c_npc npc); - возвращает 1, если npc имеет друзей, иначе – 0. *** int Npc_IsDetectedMobOwnedByNpc(c_npc user,c_npc owner); - возвращает значение > 0, если npc owner является владельцем MOBа, который использует npc user. int Npc_IsDetectedMobOwnedByGuild(c_npc user,int ownerguild); - возвращает значение > 0, если гильдия ownerguild является владельцем MOBа, который использует npc user. void Npc_GiveItem(c_npc self,c_item item,c_npc other); - npc self получает предмет item от npc other. int Npc_StartItemReactModules(c_npc self,c_npc other,c_item item); - проверяет все модули ItemReact реакции на предмет item, полученный npc self от npc other, запускает соответствующую функцию Reaction и возвращает True, если находит модуль, иначе – False. int Npc_HasOffered(c_npc self,c_npc other,int itemInstance); - проверяет, имеет ли npc other предмет itemInstance для передачи npc self, возвращает True, если предмет имеется, иначе – False.
Продолжение следует.
|
|
|
22.11.2004, 15:01
|
#56
|
|
Re: Уроки скриптологии
c_item Npc_GetInvItem(c_npc self,int itemInstance); - получить ссылку на предмет, который имеет npc self с номером itemInstance. int Npc_HasItems(c_npc n0,int itemInstance); - возвращает количетво предметов itemInstance у НПС n0. 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 – номер слота предмета. void Npc_RemoveInvItem(c_npc owner,int itemInstance); - предмет itemInstance удаляется из инвентаря npc owner и из игры. void Npc_RemoveInvItems(c_npc owner,int itemInstance,int amount); - указанное кол-во amount предметов itemInstance удаляется из инвентаря npc owner и из игры. с_item Npc_GetEquippedMeleeWeapon(c_npc n0); - возвращает оружие ближнего радиуса поражения, которым экипирован npc n0. c_item Npc_GetEquippedRangedWeapon(c_npc n0); - возвращает оружие дальнего радиуса поражения, которым экипирован npc n0. c_item Npc_GetEquippedArmor(c_npc n0); - возвращает доспехи, которыми экипирован npc n0. int Npc_HasEquippedWeapon(c_npc self); - возвращает 1, если npc self экипирован оружием, иначе - 0. int Npc_HasEquippedMeleeWeapon(c_npc self); - возвращает 1, если npc self экипирован оружием ближнего радиуса поражения, иначе - 0. int Npc_HasEquippedRangedWeapon(c_npc self); - возвращает 1, если npc self экипирован оружием дальнего радиуса поражения, иначе - 0. int Npc_HasEquippedArmor(c_npc self); - возвращает 1, если npc self экипирован доспехами, иначе - 0.
Продолжение следует.
|
|
|
23.11.2004, 11:54
|
#57
|
|
Re: Уроки скриптологии
void Npc_SetToFistMode(c_npc self); - ставит npc self в режим кулачного боя. void Npc_SetToFightMode(c_npc self,int weapon); - ставит npc self в режим боя с соответствующим оружием weapon. int Npc_IsInFightMode(c_npc self,int fmode); - возвращает 1, если npc self находится в боевом режиме fmode, иначе - 0. Заданы следующие боевые режимы: FMODE_NONE – небоевой режим, FMODE_FIST – режим кулачного боя, FMODE_MELEE – боевой режим с оружием ближнего радиуса поражения, FMODE_FAR - боевой режим с оружием дальнего радиуса поражения, FMODE_MAGIC – боевой режим с магией. c_item Npc_GetReadiedWeapon(c_npc n0); - возвращает ссылку на оружие, которое npc n0 держит в руке. int Npc_HasReadiedWeapon(c_npc self); - возвращает 1, если npc self держит любое оружие в руке, иначе - 0. int Npc_HasReadiedMeleeWeapon(c_npc self); - возвращает 1, если npc self держит в руке оружие ближнего радиуса поражения, иначе - 0. int Npc_HasReadiedRangedWeapon(c_npc self); - возвращает 1, если npc self держит в руке оружие дальнего радиуса поражения, иначе - 0. int Npc_HasRangedWeaponWithAmmo(c_npc npc); - возвращает 1, если npc self держит в руке или имеет в инвентаре оружие дальнего радиуса поражения с боеприпасами, иначе - 0.
Продолжение следует.
|
|
|
24.11.2004, 15:08
|
#58
|
|
Re: Уроки скриптологии
int Npc_GetTarget(c_npc self); - возвращает True, если npc self имеет цель для поражения (в качестве цели выступает npc other), иначе – False. int Npc_GetNextTarget(c_npc self); - выполняется активный поиск цели для npc self. Если цель находится, то она становится внутренней целью и записывается в переменную other, если цель не найдена, то внутренняя цель удаляется и other становится недействительным. Критерий поиска цели - в качестве цели возмется враждебный противник, который не мертв или находится не в бессознательном состоянии. Возвращает True, если цель найдена, иначе – False. Внимание: Поиск основывается на активном восприятии npc self, поэтому, если активное восприятие не установлено, то сначала следует применять функцию Npc_PerceiveAll(). int Npc_IsNextTargetAvailable(c_npc self); - работает аналогично предыдущей функции, только ни внутренняя цель, ни переменная other не инициализируются. void Npc_SetTarget(c_npc self,c_npc other); - устанавливает для npc self в качестве внутренней цели для поражения npc other. 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, который враждебен к одному и дружелюбен к другому, будет участвовать в подсчете два раза. int Npc_IsAiming(c_npc self,c_npc other); - возвращает 1, если npc other целится в npc self из оружия дальнего радиуса поражения или магией, иначе – 0.
Продолжение следует.
|
|
|
26.11.2004, 18:22
|
#59
|
|
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 – акробатика. int Npc_GetTalentValue(c_npc self,int talent); - возвращает кол-во единиц навыка talent, которые имеет npc self. *** void Npc_SetTalentSkill(c_npc self,int talent,int level); - установить уровень level навыка talent, которым владеет npc self. *** void Npc_SetTalentValue(c_npc self,int talent,int value); - установить кол-во единиц value навыка talent, которым владеет npc self. ***
Вот мы и закончили рассмотрение большого раздела – функции работы с NPC. :)
|
|
|
27.11.2004, 21:36
|
#60
|
|
Re: Уроки скриптологии
15. Функции искусственного интелекта (AI_ функции).
void AI_Wait(c_npc n0,float n1); - npc n0 переводится на n1 секунд в состояние ожидания, в этом состоянии он не делает ничего, но наносимый ущерб регистрируется и работает пассивное восприятие. void AI_PlayAni(c_npc n0,string s0); - для npc n0 проигрывается файл анимации s0 (имя файла s0 обязательно пишется заглавными буквами). void AI_StandUp(c_npc self); - если npc self находится в состоянии анимации, то проигрывается соответствующее движение, если npc self находится на MOBSI объекте (стул, кровать и т.д.), то он встает. void AI_StandUpQuick(c_npc self); - в отличии от предыдущей функции никаких движений не проигрывается, npc self сразу переводится в стоячее состояние. void AI_QuickLook(c_npc self,c_npc other); - npc self быстро бросает взгляд на npc other. Выполняется только движение головой в течение 2 секунд. void AI_LookAt(c_npc self,string name); - npc self смотрит на определенную точку на местности или на объект, где *name – имя точки местности или имя VOB объекта. void AI_LookAtNpc(c_npc self,c_npc other); - npc self смотрит на npc other. void AI_StopLookAt(c_npc self); - npc self снова смотрит прямо перед собой. void AI_PointAt(c_npc self,string name); - npc self указывает на определенную точку на местности или на объект, где *name – имя точки местности или имя VOB объекта. void AI_PointAtNpc(c_npc self,c_npc other); - npc self указывает на npc other. void AI_StopPointAt(c_npc self); - npc self прекращает указывать на что-нибудь или кого-нибудь.
Продолжение следует.
|
|
|
28.11.2004, 12:21
|
#61
|
|
Re: Уроки скриптологии
void AI_TakeItem(c_npc self,c_item item); - npc self берет (принимает) предмет item. void AI_DropItem(c_npc self,int itemid); - npc self выбрасывает на землю или на пол предмет itemid. void AI_UseItem(c_npc self,int itemInstance); - npc self использует предмет itemInstance. void AI_UseItemToState(c_npc self,int itemInstance,int state); - npc self использует предмет itemInstance до указанного состояния state (-1 – используется полностью). void AI_TakeMob(c_npc self,string name); - npc self берет (принимает) MOB (рюкзак, корзину и т.д.) с именем name. *** void AI_DropMob(c_npc self); - npc self выбрасывает на землю или на пол имеющийся MOB. *** int AI_UseMob(c_npc self,string schemeName,int targetState); - npc self использует MOB с именем schemeName до указанного состояния targetState. Если указанное состояние у MOBа уже имеется, npc self приближается к нему, но ничего не делает. void AI_Waitms(c_npc self,int msec); - npc self переводится на msec миллисекунд в состояние ожидания, в этом состоянии он не делает ничего, но наносимый ущерб регистрируется и работает пассивное восприятие. *** void AI_CanSeeNpc(c_npc self,c_npc other,func see); - npc self может увидеть npc other, где see – какая-то функция (описания не нашел). ***
Продолжение следует.
|
|
|
29.11.2004, 10:41
|
#62
|
|
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 – подкрадывание с оружием. void AI_GotoWP(c_npc n0,string s0); - npc n0 перемещается в указанную WP s0. void AI_GotoFP(c_npc self,string fpName); - npc n0 перемещается в указанную FP fpName, расположенную в пределах 20 метров. Критерий поиска FP аналогичен используемому в функции Wld_IsFPAvailable. void AI_GotoNextFP(c_npc self,string fpName); - работает аналогично предыдущей функции, только критерий поиска FP аналогичен используемому в функции Wld_IsNextFPAvailable. void AI_GotoNpc(c_npc self,c_npc other); - npc self перемещается к npc other. void AI_GotoItem(c_npc self,c_item item); - npc self перемещается к предмету item. void AI_GotoSound(c_npc n0); - npc self перемещается к источнику звука. void AI_Teleport(c_npc self,string waypoint); - телепортирует npc self в новую локацию waypoint.
Продолжение следует.
|
|
|
30.11.2004, 11:42
|
#63
|
|
Re: Уроки скриптологии
void AI_TurnToNpc(c_npc n0,c_npc n1); - npc n0 поварачивается к npc n1 лицом. void AI_TurnAway(c_npc n0,c_npc n1); - npc n0 поварачивается к npc n1 спиной. void AI_WhirlAround(c_npc self,c_npc other); - npc self быстро поварачивается к npc other лицом. (Делает оборот). void AI_WhirlAroundToSource(c_npc self); - npc self быстро поварачивается лицом к какому-то источнику. *** (Описания не нашел). void AI_TurnToSound(c_npc self); - npc self поварачивается лицом к источнику звука. void AI_AlignToWP(c_npc self); - npc self выравнивается в WP точке по направлению стрелки, заданной в Spacer. void AI_AlignToFP(c_npc self); - npc self выравнивается в FP точке по направлению стрелки, заданной в Spacer. *** void AI_Dodge(c_npc npc); - npc отклоняется назад. (Способ защиты при атаке противника). void AI_PlayAniBS(c_npc npc,string aniname,int bodystate); - для npc проигрывается файл анимации aniname для определенного состояния тела bodystate. void AI_PlayCutscene(c_npc self,string csName); - для npc self проигрывается Cutscene с именем csName, заданная в скриптах.
Продолжение следует.
|
|
|
03.12.2004, 10:47
|
#66
|
|
Re: Уроки скриптологии
void AI_Output(c_npc self, c_npc target,string outputName); - данная функция реализует диалог, npc self говорит фразу outputName для npc target. Текст фразы должен располагаться в скриптах в виде комментария к функции. (например: AI_Output() //текст фразы). 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; //текст фразы). void AI_OutputSVM_Overlay(c_npc self, c_npc target,string svmname); - выполняется аналогично предыдущей функции, фраза выдается быстро, нет ожидания при разговоре следующей AI_ команды. Используется для комментариев перед сражением и во время сражения. void AI_WaitTillEnd(c_npc self, c_npc other); - npc self ждет от npc other ответа на свою фразу. (Не выполняется перед функцией AI_OutputSVM_Overlay). void AI_Ask(c_npc self,func anserYes,func answerNo); - определяет, как npc self будет отвечать на сказанную фразу, при выборе ответа «Да» - выполняется функция anserYes, иначе – функция answerNo. Эти функции должны быть описаны заранее. void AI_AskText(c_npc self,func funcYes,func funcNo,string strYes,string strNo); - работает аналогично предыдущей функции, только для вариантов ответов (кроме функций) могут быть заданы фразы ответов strYes, strNo. void AI_WaitForQuestion(c_npc self,func scriptFunc); - npc self ждет ответа или вопроса в течение 20 секунд, если в это время он поступает, то выполняется функция scriptFunc.
Продолжение следует.
|
|
|
04.12.2004, 14:30
|
#67
|
|
Re: Уроки скриптологии
void AI_ProcessInfos(c_npc self); - эта функция запускает диалог для npc self с возможностью выбора вариантов ответов/вопросов. *** void AI_StopProcessInfos(c_npc npc); - режим диалога npc npc, начатый предыдущей функцией, заканчивается. void AI_StartState(c_npc self,func what,int stateBehaviour,string wpName); - переводит npc self в соответствующее состояние, описанное функцией what, где stateBehaviour = 0 – выполняется последовательность состояний, 1 – выполняется только функция конечного состояния, wpName – имя WP точки (если «», то состояние изменяется на месте расположения npc). void AI_SetNpcsToState(c_npc self,func aiStateFunc,int radius); - переводит всех npc, находящихся от npc self на расстоянии radius сантиметров, в соответствующее состояние, описанное функцией aiStateFunc. void AI_ContinueRoutine(c_npc self); - продолжает выполнение распорядка дня npc self.
Вот и всё, мы рассмотрели все базовые функции Готики1. Если хотите еще что-нибудь «изучить» в скриптах, постараюсь в этом помочь. ;)
|
|
|
16.12.2004, 11:28
|
#68
|
|
Re: Уроки скриптологии
Тема седьмая: Встроенные функции Готики 2.
В основном в Готике 2 используются функции Готики 1, но есть несколько дополнительных функций, их мы и рассмотрим.
int AI_PrintScreen(string msg,int posx,int posy,string font,int timeSec); - выводит на экран строку текста msg (имя шрифта – font) с координатами posx, posy (диапазон от 0 до 99% размера экрана, -1 означает вывод по центру соответствующей оси экрана) на время timeSec (в секундах). void AI_Snd_Play(c_npc self,string s0); - воспроизвести звуковой файл с именем s0 для npc self. void AI_Snd_Play3D(c_npc self,c_npc n0,string s0); - воспроизвести звуковой файл с именем s0 для npc self. void AI_PlayFX(c_npc self,c_npc n0,string s0); - воспроизвести видео-файл с именем s0 для npc self. void AI_StopFX(c_npc self,string s0); - остановить воспроизведение видео-файла с именем s0 для npc self. int PlayVideoEx(string video,int aa,int bb); - показать видео файл video (c расширением BIK), возвращает 1, если видео показано, 0 – в случае ошибки. Трактование параметров aa и bb не знаю, в скриптах они имеют значение TRUE и FALSE. void ExitSession() – используется вместо функции ExitGame(), хотя она тоже сохранена. int GameInitGerman() – просто всегда возвращает 1. В английской версии экзешника еще есть функции - *int GameInitEnglish() и int GameInitEngintl(), их назначение мне неизвестно.
Продолжение следует.
|
|
|
17.12.2004, 12:58
|
#69
|
|
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, добавлен параметр ххх, к сожалению мне про него ничего не известно (возможно это какой-нибудь атрибут). int Wld_IsRaining(); – возвращает 1, если идет дождь, иначе – 0. void Wld_StopEffect(string name); - останавливает проигрывание эффекта с именем name, запущенного функцией Wld_PlayEffect. void Doc_SetLevelCoords(int Document,int Left,int Top,int Right,int Bottom); - устанавливает границы области, отображаемой на карте (границы задаются в абсолютных координатах уровня), где: * Document – обрабатываемый документ, Left, Top, Right и Bottom – задаваемые границы. int Npc_GetLastHitSpellID(c_npc self); - возвращает номер заклинания, которое npc self применил последним. int Npc_GetLastHitSpellCat(c_npc self); - возвращает категорию заклинания, которое npc self применил последним. int Npc_GetActiveSpellIsScroll(c_npc self); - проверяет, является ли активное заклинание у npc self свитком, если да – возвращает 1, иначе – 0. void Npc_ClearInventory(c_npc self); - очищает весь инвентарь у npc self. int Npc_GetHeightToNpc(c_npc npc1,c_npc npc2); - возвращает расстояние в см. по высоте между npc1 и npc2. int Npc_GetHeightToItem(c_npc self,c_item item); - возвращает расстояние в см. по высоте между npc self и предметом item.
Продолжение следует.
|
|
|
20.12.2004, 10:19
|
#70
|
|
Re: Уроки скриптологии
c_npc Npc_GetLookAtTarget(c_npc self); - инициализирует глобальную переменную target ссылкой на npc, на которого смотрит *npc self. void Npc_StopAni(c_npc self,string name); - остановить проигрывание файла анимации с именем *name для npc self. int Npc_IsDrawingWeapon(c_npc self); - возвращает номер оружия, которое npc self держит в руках, иначе – 0. int Npc_IsDrawingSpell(c_npc self); - возвращает номер заклинания, которое применяет npc self , иначе – 0. int Npc_IsInPlayersRoom(c_npc self); - возвращает 1, если npc self находится в помещении, которое принадлежит ГГ, иначе – 0. c_npc Npc_GetPortalOwner(c_npc self); - возвращает npc владельца помещения (области), в котором находится npc self. int Npc_GetPortal Guild (c_npc self); - возвращает номер гильдии владельца помещения (области), в котором находится npc self.
Вот и все дополнительные функции, которые используются в Готике2.
|
|
|
17.01.2005, 19:50
|
#71
|
 |
|
 |
|
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
|
|
 |
|
 |
|
Re: Уроки скриптологии
2Vam: Я обеими руками "за"! :pivo: ;D Имхо, было бы неплохо выкладывать здесь скрипты Готкик с собственными комментариями, объясняющими, что даннная строка скрипта значит. Было бы наглядно. у меня есть пример:
Функция ZS_Stand_WP - отвечает за выполнение TA_Stand_WP
func void ZS_Stand_WP() *//Функция подготовки к выполнению TA_Stand_WP { * Perception_Set_Normal(); * B_ResetAll(self); * AI_SetWalkMode(self,NPC_WALK); * AI_GotoWP(self,self.wp); * AI_AlignToWP(self); * self.aivar[AIV_TAPOSITION] = NOTINPOS; };
func int ZS_Stand_WP_loop() *//Это функция выполняется циклически, пока НПС выполняет TA_Stand_WP { * var int random; * if(self.aivar[AIV_TAPOSITION] == NOTINPOS) *//Блок для случая, если НПС не в "ISINPOS" (только в первый раз) * { * * *AI_PlayAni(self,"T_STAND_2_LGUARD"); *//Проигрывается анимация "T_STAND_2_LGUARD" (НПС примет "стойку") * * *self.aivar[AIV_TAPOSITION] = ISINPOS; * }; * if((Npc_GetStateTime(self) > 5) && (self.aivar[AIV_TAPOSITION] == ISINPOS)) *//После того, как НПС становится в "ISINPOS", каждые 5 секунд выполняется блок * { * * *random = Hlp_Random(10); *//Берется случайное число от 0 до 9 * * *if(random == 0) *//Если число было 0, проигрывается анимация "T_LGUARD_SCRATCH" (НПС "потянется") * * *{ * * * * AI_PlayAni(self,"T_LGUARD_SCRATCH"); * * *} * * *else if(random == 1) *//Если число было 1, проигрывается та же анимация, что и при 0 * * *{ * * * * AI_PlayAni(self,"T_LGUARD_STRETCH"); * * *} * * *else if(random == 2) *//Если число было 2, проигрывается анимация "T_LGUARD_CHANGELEG" (НПС "меняет ногу") * * *{ * * * * AI_PlayAni(self,"T_LGUARD_CHANGELEG"); * * *}; * * *Npc_SetStateTime(self,0); *//Время обнуляется, т.е. начинаются следующие 5 секунд * }; *//Т.е. шанс, что НПС произведет какое-то действие раз в пять секунд - 3\10 * return LOOP_CONTINUE; *//Цикл замыкается, и функция "ZS_Stand_WP_loop" будет выполнена снова, и так будет пока НПС не получит команды прекритить выполнение "TA_Stand_WP" };
func void ZS_Stand_WP_end() //Функция завершения TA_Stand_WP { * AI_PlayAni(self,"T_LGUARD_2_STAND"); *//При получении НПС команды прекратить выполнение "TA_Stand_WP", проигрывается анимация "T_STAND_2_LGUARD" (НПС выйдет из "стойки") };
|
|
|
18.01.2005, 14:49
|
#73
|
|
Re: Уроки скриптологии
Продолжение...
// Типы наносимых повреждений const int DAM_INVALID * * * * * *= 0 * * * * * * * * * * * * * * *; * * *//(применения не нашел) const int DAM_BARRIER * * * * * *= 1 * * * * * * * * * * * * * * *; * * *//(применения не нашел) const int DAM_BLUNT * * * * * * * * *= DAM_BARRIER * * *<< 1; * * *//Повреждение тупым оружием (молоты, дубины, кулаки) const int DAM_EDGE * * * * * * * * *= DAM_BLUNT * * * * * *<< 1; * * *//Повреждение острым оружием (мечи, шпаги, топоры) const int DAM_FIRE * * * * * * * * *= DAM_EDGE * * * * * *<< 1; * * *//Повреждение огнем const int DAM_FLY * * * * * * * * *= DAM_FIRE * * * * * *<< 1; * * *//Повреждение нокаутом (после удара НПС отлетает и падает) const int DAM_MAGIC * * * * * * * * *= DAM_FLY * * * * * *<< 1; * * *//Повреждение магией const int DAM_POINT * * * * * * * * *= DAM_MAGIC * * * * * *<< 1; * * *//Точечное повреждение (луки, арбалеты) const int DAM_FALL * * * * * * * * *= DAM_POINT * * * * * *<< 1; * * *//Повреждение от падения
// Индексы значений массива наносимых повреждений (имена индексов соответствуют именам типов) const int DAM_INDEX_BARRIER * * *= 0 * * * * * * * * * * * * * * * * ; const int DAM_INDEX_BLUNT * * *= DAM_INDEX_BARRIER + 1; const int DAM_INDEX_EDGE * * *= DAM_INDEX_BLUNT * * *+ 1; const int DAM_INDEX_FIRE * * *= DAM_INDEX_EDGE * * *+ 1; const int DAM_INDEX_FLY * * * * * *= DAM_INDEX_FIRE * * *+ 1; const int DAM_INDEX_MAGIC * * *= DAM_INDEX_FLY * * * * * *+ 1; const int DAM_INDEX_POINT * * *= DAM_INDEX_MAGIC * * *+ 1; const int DAM_INDEX_FALL * * *= DAM_INDEX_POINT * * *+ 1; const int DAM_INDEX_MAX * * * * * *= DAM_INDEX_FALL * * *+ 1; * * *//Макс. размерность массива наносимых повреждений
// Другие константы наносимых повреждений const int NPC_ATTACK_FINISH_DISTANCE * * * * * * * * *= 180; * * *//??? const int NPC_BURN_TICKS_PER_DAMAGE_POINT * * * * * *= 1000; //??? const int NPC_BURN_DAMAGE_POINTS_PER_INTERVALL * * *= 50; * * *//??? const int DAM_CRITICAL_MULTIPLIER * * * * * * * * * * * *= 2; * * *//Коэффициент умножения для критического повреждения (не употребляется)
const int BLOOD_SIZE_DIVISOR * * * * * * * * * * * * * * *= 1000; * * *//??? const int BLOOD_DAMAGE_MAX * * * * * * * * * * * * * * * * * *= 200; * * *//???
const int DAMAGE_FLY_CM_MAX * * * * * * * * * * * * * * * * * *= 2000; * * *//??? const int DAMAGE_FLY_CM_MIN * * * * * * * * * * * * *= 300; * * *//??? const int DAMAGE_FLY_CM_PER_POINT * * * * * * * * * * * *= 5; * * *//???
const int NPC_DAM_DIVE_TIME * * * * * * * * * * * * * * * * * *= 100; * * *//???
const int IMMUNE * * * * * * * * * * * * * * * * * * * * * * * *= -1; * * *//Иммунитет к повреждению
// На каком расстоянии НПС перестают сражаться // Коэффициент к дистанции (BASE + дистанция поражения оружием) const float NPC_COLLISION_CORRECTION_SCALER * * * * * *= 0.75;
// * * *Типы защиты (имена соответствуют типам наносимых повреждений) const int PROT_BARRIER * * * * * * * * *= DAM_INDEX_BARRIER; const int PROT_BLUNT * * * * * * * * *= DAM_INDEX_BLUNT; const int PROT_EDGE * * * * * * * * * * * *= DAM_INDEX_EDGE; const int PROT_FIRE * * * * * * * * * * * *= DAM_INDEX_FIRE; const int PROT_FLY * * * * * * * * * * * *= DAM_INDEX_FLY; const int PROT_MAGIC * * * * * * * * *= DAM_INDEX_MAGIC; const int PROT_POINT * * * * * * * * *= DAM_INDEX_POINT; const int PROT_FALL * * * * * * * * * * * *= DAM_INDEX_FALL; const int PROT_INDEX_MAX * * * * * *= DAM_INDEX_MAX; * * *//Макс. размерность массива защиты
// Активные восприятия const int PERC_ASSESSPLAYER * * * * * *= 1; * * *//Восприятие ГГ const int PERC_ASSESSENEMY * * * * * *= 2; * * *//Восприятие врага const int PERC_ASSESSFIGHTER * * *= 3; * * *//Восприятие в сражении const int PERC_ASSESSBODY * * * * * *= 4; * * *//Восприятие тела const int PERC_ASSESSITEM * * * * * *= 5; * * *//Восприятие предмета
// Чувства const int SENSE_SEE * * * * * * * * * * * *= 1 << 0; * * *//Зрение const int SENSE_HEAR * * * * * * * * *= 1 << 1; * * *//Слух const int SENSE_SMELL * * * * * * * * *= 1 << 2; * * *//Обоняние
// Пассивные восприятия const int PERC_ASSESSMURDER * * * * * * * * *= * * *6; * * *//Восприятие убийства const int PERC_ASSESSDEFEAT * * * * * * * * *= * * *7; * * *//Восприятие поражения const int PERC_ASSESSDAMAGE * * * * * * * * *= * * *8; * * *//Восприятие повреждения const int PERC_ASSESSOTHERSDAMAGE * * *= * * *9; * * *//Восприятие других повреждений const int PERC_ASSESSTHREAT * * * * * * * * *= *10; * * *//Восприятие угрозы const int PERC_ASSESSREMOVEWEAPON * * *= *11; * * *//Восприятие от "зачехления" оружия const int PERC_OBSERVEINTRUDER * * * * * *= *12; * * *//Восприятие наблюдения злоумышленника const int PERC_ASSESSFIGHTSOUND * * * * * *= *13; * * *//Восприятие звука сражения const int PERC_ASSESSQUIETSOUND * * * * * *= *14; * * *//Восприятие тихих звуков const int PERC_ASSESSWARN * * * * * * * * *= *15; * * *//Восприятие предупреждения const int PERC_CATCHTHIEF * * * * * * * * *= *16; * * *//Восприятие выгоды воровства const int PERC_ASSESSTHEFT * * * * * * * * *= *17; * * *//Восприятие воровства const int PERC_ASSESSCALL * * * * * * * * *= *18; * * *//Восприятие обращения (речь) const int PERC_ASSESSTALK * * * * * * * * *= *19; * * *//Восприятие разговора const int PERC_ASSESSGIVENITEM * * * * * *= *20; * * *//Восприятие торговли const int PERC_ASSESSFAKEGUILD * * * * * *= *21; * * *//Восприятие "поддельной гильдии" (посылается при превращении НПС) const int PERC_MOVEMOB * * * * * * * * * * * *= *22; * * *//Восприятие передвижения объекта (не НПС) const int PERC_MOVENPC * * * * * * * * * * * *= *23; * * *//Восприятие передвижения НПС const int PERC_DRAWWEAPON * * * * * * * * *= *24; * * *//Восприятие вытаскивания оружия const int PERC_OBSERVESUSPECT * * * * * *= *25; * * *//Восприятие наблюдения подозреваемого const int PERC_NPCCOMMAND * * * * * * * * *= *26; * * *//Восприятие команды НПС const int PERC_ASSESSMAGIC * * * * * * * * *= *27; * * *//Восприятие магии const int PERC_ASSESSSTOPMAGIC * * * * * *= *28; * * *//Восприятие прекращения колдовства const int PERC_ASSESSCASTER * * * * * * * * *= *29; * * *//Восприятие колдующего (посылается при изменении маны) const int PERC_ASSESSSURPRISE * * * * * *= *30; * * *//Восприятие неожиданности const int PERC_ASSESSENTERROOM * * * * * *= *31; * * *//Восприятие входа в помещение (область) const int PERC_ASSESSUSEMOB * * * * * * * * *= *32; * * *//Восприятие использования объекта (открытие двери, сундука)
// Способы распространения новостей const int NEWS_DONT_SPREAD * * * * * * * * * * * * * * * * * * * * *= 0; * * *//Новости не распространяются const int NEWS_SPREAD_NPC_FRIENDLY_TOWARDS_VICTIM * * *= 1; * * *//Друзьями жертвы const int NEWS_SPREAD_NPC_FRIENDLY_TOWARDS_WITNESS * * *= 2; * * *//Друзьями свидетеля const int NEWS_SPREAD_NPC_FRIENDLY_TOWARDS_OFFENDER * * *= 3; * * *//Друзьями обидчика const int NEWS_SPREAD_NPC_SAME_GUILD_VICTIM * * * * * * * * *= 4; * * *//Гильдией жертвы
// Константы новостей const int IMPORTANT * * * * * * * * *= 1; * * *//Важная новость
// Статусы информации const int INF_TELL * * * * * * * * *= 0; * * *//Сказанная информация const int INF_UNKNOWN * * * * * *= 2; * * *//Источник информации неизвестен
// Статусы миссий const int LOG_RUNNING * * * * * *= 1; * * *//Миссия выполняется const int LOG_SUCCESS * * * * * *= 2; * * *//Миссия успешно завершена const int LOG_FAILED * * * * * *= 3; * * *//Миссия провалена const int LOG_OBSOLETE * * * * * *= 4; * * *//Миссия завершена в другом направлении (был выбор вариантов завершения)
// Отношения const int ATT_FRIENDLY * * * * * *= 3; * * *//Друг const int ATT_NEUTRAL * * * * * *= 2; * * *//Нейтральный const int ATT_ANGRY * * * * * * * * *= 1; * * *//Сердитый, злой const int ATT_HOSTILE * * * * * *= 0; * * *//Враг
Может кто-нибудь подсказать, как сделать чтобы текст выводился ровными столбиками, а не прыгал туда-сюда? *:(
|
|
|
20.01.2005, 10:07
|
#75
|
|
Re: Уроки скриптологии
Продолжение...
//************************************ // Заклинания //************************************
// Константы категорий const int SPELL_GOOD * * * * * *= 0; * *//Хорошее const int SPELL_NEUTRAL * * * * = 1; * *//Нейтральное const int SPELL_BAD * * * * * * = 2; * *//Плохое
// Константы управления const int SPL_DONTINVEST * * * * * * * * * *= 0; * *//Дальнейшее инвестирование маны на зарядку заклинания невозможно (мало или нет маны) const int SPL_RECEIVEINVEST * * * * * * * * = 1; * *//Нужное количество маны израсходовано на зарядку (заклинание готово к действию) const int SPL_SENDCAST * * * * * * * * * * *= 2; * *//Старт заклинания с действием const int SPL_SENDSTOP * * * * * * * * * * *= 3; * *//Заклинание заканчивается без эффекта (мало маны) const int SPL_NEXTLEVEL * * * * * * * * * * = 4; * *//Переход на следующий уровень зарядки заклинания const int SPL_STATUS_CANINVEST_NO_MANADEC * = 8; * *//Инвестированного количества маны недостаточно для перехода на следующий уровень const int SPL_FORCEINVEST * * * * * * = 1 << 16; * *//Какой-то флаг управляющий инвестированием маны ???
// Константы цели const int TARGET_COLLECT_NONE * * * * * * * * * = 0; * *//Цель определяется самим заклинанием const int TARGET_COLLECT_CASTER * * * * * * * * = 1; * *//Цель - кастующий const int TARGET_COLLECT_FOCUS * * * * * * * * *= 2; * *//Цель - визуальный объект в фокусе const int TARGET_COLLECT_ALL * * * * * * * * * *= 3; * *//Цель - все объекты в радиусе поражения const int TARGET_COLLECT_FOCUS_FALLBACK_NONE * *= 4; * *//Цель - визуальный объект в фокусе, при потере фокуса траектория устанавливается заклинанием const int TARGET_COLLECT_FOCUS_FALLBACK_CASTER *= 5; * *//Цель - визуальный объект в фокусе, при потере фокуса целью становится кастующий const int TARGET_COLLECT_ALL_FALLBACK_NONE * * *= 6; * *//Цель - все объекты в радиусе поражения, если объектов нет траектория устанавливается заклинанием const int TARGET_COLLECT_ALL_FALLBACK_CASTER * *= 7; * *//Цель - все объекты в радиусе поражения, если объектов нет целью становится кастующий
const int TARGET_TYPE_ALL * * * = 1; * *//Цель - все и всё const int TARGET_TYPE_ITEMS * * = 2; * *//Цель - предмет const int TARGET_TYPE_NPCS * * *= 4; * *//Цель - НПС const int TARGET_TYPE_ORCS * * *= 8; * *//Цель - орк const int TARGET_TYPE_HUMANS * *= 16; * //Цель - человек const int TARGET_TYPE_UNDEAD * *= 32; * //Цель - неуязвимый
// Идентификаторы заклинаний (ID) // Руны Паладинов const int SPL_PalLight * * * * * * *= 0; * *//Святой свет const int SPL_PalLightHeal * * * * *= 1; * *//Малое лечение const int SPL_PalHolyBolt * * * * * = 2; * *//Святая стрела const int SPL_PalMediumHeal * * * * = 3; * *//Среднее лечение const int SPL_PalRepelEvil * * * * *= 4; * *//Разогнать дьяволов const int SPL_PalFullHeal * * * * * = 5; * *//Сильное лечение const int SPL_PalDestroyEvil * * * *= 6; * *//Уничтожить дьяволов
// Руны Телепортации const int SPL_PalTeleportSecret * * = 7; * *//Телепорт const int SPL_TeleportSeaport * * * = 8; * *//Телепорт в гавань const int SPL_TeleportMonastery * * = 9; * *//Телепорт к монастырю const int SPL_TeleportFarm * * * * *= 10; * //Телепорт к помещику const int SPL_TeleportXardas * * * *= 11; * //Телепорт к Ксардасу const int SPL_TeleportPassNW * * * *= 12; * //Телепорт к проходу в Хоринисе const int SPL_TeleportPassOW * * * *= 13; * //Телепорт к проходу в рудниковой долине const int SPL_TeleportOC * * * * * *= 14; * //Телепорт в замок const int SPL_TeleportOWDemonTower *= 15; * //Телепорт в старую башню демонов const int SPL_TeleportTaverne * * * = 16; * //Телепорт к таверне const int SPL_Teleport_3 * * * * * *= 17; * //(не используется)
// Круг 1 const int SPL_Light * * * * * * * * = 18; * //Свет const int SPL_Firebolt * * * * * * *= 19; * //Огненная стрела const int SPL_LightHeal * * * * * * = 21; * //Лечить легкое ранение const int SPL_SummonGoblinSkeleton *= 22; * //Вызвать скелет гоблина const int SPL_Zap * * * * * * * * * = 24; * //Молния
// Круг 2 const int SPL_Icebolt * * * * * * * = 20; * //Ледяная стрела const int SPL_InstantFireball * * * = 23; * //Огненный шар const int SPL_SummonWolf * * * * * *= 25; * //Вызвать волка const int SPL_WindFist * * * * * * *= 26; * //Порыв ветра const int SPL_Sleep * * * * * * * * = 27; * //Сон
// Круг 3 const int SPL_MediumHeal * * * * * *= 28; * //Лечить среднее ранение const int SPL_LightningFlash * * * *= 29; * //Удар молнии const int SPL_ChargeFireball * * * *= 30; * //Большой огненный шар const int SPL_SummonSkeleton * * * *= 31; * //Вызвать скелет const int SPL_Fear * * * * * * * * *= 32; * //Страх const int SPL_IceCube * * * * * * * = 33; * //Ледяная глыба
// Круг 4 const int SPL_ChargeZap * * * * * * = 34; * //Шаровая молния const int SPL_SummonGolem * * * * * = 35; * //Вызвать голема const int SPL_DestroyUndead * * * * = 36; * //Уничтожить нежить const int SPL_Pyrokinesis * * * * * = 37; * //Большая огненная буря (ошибка перевода ???)
// Круг 5 const int SPL_Firestorm * * * * * * = 38; * //Малая огненная буря (ошибка перевода ???) const int SPL_IceWave * * * * * * * = 39; * //Ледяная волна const int SPL_SummonDemon * * * * * = 40; * //Вызвать демона const int SPL_FullHeal * * * * * * *= 41; * //Лечить сильное ранение
// Kreis 6 const int SPL_Firerain * * * * * * *= 42; * //Огненный дождь const int SPL_BreathOfDeath * * * * = 43; * //Дым смерти const int SPL_MassDeath * * * * * * = 44; * //Волна смерти const int SPL_ArmyOfDarkness * * * *= 45; * //Армия мрака const int SPL_Shrink * * * * * * * *= 46; * //Уменьшить монстра
// Свитки const int SPL_TrfSheep * * * * * * *= 47; * //Превращение в овцу const int SPL_TrfScavenger * * * * *= 48; * //Превращение в падальщика const int SPL_TrfGiantRat * * * * * = 49; * //Превращение в крысу const int SPL_TrfGiantBug * * * * * = 50; * //Превращение в полевого жука const int SPL_TrfWolf * * * * * * * = 51; * //Превращение в волка const int SPL_TrfWaran * * * * * * *= 52; * //Превращение в ящерицу const int SPL_TrfSnapper * * * * * *= 53; * //Превращение в глорха const int SPL_TrfWarg * * * * * * * = 54; * //Превращение в варга const int SPL_TrfFireWaran * * * * *= 55; * //Превращение в огненную ящерицу const int SPL_TrfLurker * * * * * * = 56; * //Превращение в шныга const int SPL_TrfShadowbeast * * * *= 57; * //Превращение в мракориса const int SPL_TrfDragonSnapper * * *= 58; * //Превращение в остера const int SPL_Charm * * * * * * * * = 59; * //Забыть
// Круг 5 const int SPL_MasterOfDisaster * * *= 60; * //Святой удар
// ??? const int SPL_Deathbolt * * * * * * = 61; * //Стрела смерти const int SPL_Deathball * * * * * * = 62; * //Шар смерти const int SPL_ConcussionBolt * * * *= 63; * //Стрела сотрясения const int SPL_Reserved_64 * * * * * = 64; * // const int SPL_Reserved_65 * * * * * = 65; * // const int SPL_Reserved_66 * * * * * = 66; * // const int SPL_Reserved_67 * * * * * = 67; * // const int SPL_Reserved_68 * * * * * = 68; * // const int SPL_Reserved_69 * * * * * = 69; * //
// Заклинания магов воды const int SPL_Thunderstorm * * * * *= 70; * //Шторм const int SPL_Whirlwind * * * * * * = 71; * //Смерч const int SPL_WaterFist * * * * * * = 72; * //Кулак воды const int SPL_IceLance * * * * * * *= 73; * //Ледяное копье const int SPL_Inflate * * * * * * * = 74; * //Раздуть const int SPL_Geyser * * * * * * * *= 75; * //Гейзер const int SPL_Waterwall * * * * * * = 76; * //Водяная стена const int SPL_Reserved_77 * * * * * = 77; const int SPL_Reserved_78 * * * * * = 78; const int SPL_Reserved_79 * * * * * = 79;
// Заклинания Майя const int SPL_Plague * * * * * * * *= 80; * //Чума const int SPL_Swarm * * * * * * * * = 81; * //Рой const int SPL_GreenTentacle * * * * = 82; * //Зеленые щупальца const int SPL_Earthquake * * * * * *= 83; * //Землетрясение const int SPL_SummonGuardian * * * *= 84; * //Создать стража const int SPL_Energyball * * * * * *= 85; * //Шар энергии const int SPL_SuckEnergy * * * * * *= 86; * //Украсть энергию const int SPL_Skull * * * * * * * * = 87; * //Крик мертвых const int SPL_SummonZombie * * * * *= 88; * //Создать зомби const int SPL_SummonMud * * * * * * = 89; * //Вызвать Муда
// ... const int SPL_Reserved_90 * * * * * = 90; const int SPL_Reserved_91 * * * * * = 91; const int SPL_Reserved_92 * * * * * = 92; const int SPL_Reserved_93 * * * * * = 93; const int SPL_Reserved_94 * * * * * = 94; const int SPL_Reserved_95 * * * * * = 95; const int SPL_Reserved_96 * * * * * = 96; const int SPL_Reserved_97 * * * * * = 97; const int SPL_Reserved_98 * * * * * = 98; const int SPL_Reserved_99 * * * * * = 99;
const int MAX_SPELL * * * * * * * * = 100; * //59 (Gothic),68 (Gothic2),100 (G2Addon)
// *Массив имен классов заклинаний const string spellFxInstanceNames[MAX_SPELL] = { * *"PalLight", * * * * * * // 0 * *SPL_PalLight * *"PalHeal", * * * * * * *// 1 * *SPL_PalLightHeal * *"PalHolyBolt", * * * * *// 2 * *SPL_PalHolyBolt * *"PalHeal", * * * * * * *// 3 * *SPL_PalMediumHeal * *"PalRepelEvil", * * * * // 4 * *SPL_PalRepelEvil * *"PalHeal", * * * * * * *// 5 * *SPL_PalFullHeal * *"PalDestroyEvil", * * * // 6 * *SPL_PalDestroyEvil * *"Teleport", * * * * * * // 7 * *SPL_PalTeleportSecret * *"Teleport", * * * * * * // 8 * *SPL_TeleportSeaport * *"Teleport", * * * * * * // 9 * *SPL_TeleportMonastery * *"Teleport", * * * * * * // 10 * SPL_TeleportFarm * *"Teleport", * * * * * * // 11 * SPL_TeleportXardas * *"Teleport", * * * * * * // 12 * SPL_TeleportPassNW * *"Teleport", * * * * * * // 13 * SPL_TeleportPassOW * *"Teleport", * * * * * * // 14 * SPL_TeleportOC * *"Teleport", * * * * * * // 15 * SPL_TeleportOWDemonTower * *"Teleport", * * * * * * // 16 * SPL_TeleportTaverne * *"Teleport", * * * * * * // 17 * SPL_Teleport_3 * *"Light", * * * * * * * *// 18 * SPL_Light * *"Firebolt", * * * * * * // 19 * SPL_Firebolt * *"Icebolt", * * * * * * *// 20 * SPL_Icebolt * *"Heal", * * * * * * * * // 21 * SPL_LightHeal * *"SummonGoblinSkeleton", // 22 * SPL_SummonGoblinSkeleton * *"InstantFireball", * * *// 23 * SPL_InstantFireball * *"Zap", * * * * * * * * *// 24 * SPL_Zap * *"SummonWolf", * * * * * // 25 * SPL_SummonWolf * *"WindFist", * * * * * * // 26 * SPL_WindFist * *"Sleep", * * * * * * * *// 27 * SPL_Sleep * *"Heal", * * * * * * * * // 28 * SPL_MediumHeal * *"LightningFlash", * * * // 29 * SPL_LightningFlash * *"ChargeFireball", * * * // 30 * SPL_ChargeFireball * *"SummonSkeleton", * * * // 31 * SPL_SummonSkeleton * *"Fear", * * * * * * * * // 32 * SPL_Fear * *"Icecube", * * * * * * *// 33 * SPL_IceCube * *"ChargeZap", * * * * * *// 34 * SPL_ChargeZap * *"SummonGolem", * * * * *// 53 * SPL_SummonGolem * *"DestroyUndead", * * * *// 36 * SPL_DestroyUndead * *"Pyrokinesis", * * * * *// 37 * SPL_Pyrokinesis * *"Firestorm", * * * * * *// 38 * SPL_Firestorm * *"Icewave", * * * * * * *// 39 * SPL_IceWave * *"SummonDemon", * * * * *// 40 * SPL_SummonDemon * *"Heal", * * * * * * * * // 41 * SPL_FullHeal * *"Firerain", * * * * * * // 42 * SPL_Firerain * *"BreathOfDeath", * * * *// 43 * SPL_BreathOfDeath * *"MassDeath", * * * * * *// 44 * SPL_MassDeath * *"ArmyOfDarkness", * * * // 45 * SPL_ArmyOfDarkness * *"Shrink", * * * * * * * // 46 * SPL_Shrink * *"Transform", * * * * * *// 47 * SPL_TrfSheep * *"Transform", * * * * * *// 48 * SPL_TrfScavenger * *"Transform", * * * * * *// 49 * SPL_TrfGiantRat * *"Transform", * * * * * *// 50 * SPL_TrfGiantBug * *"Transform", * * * * * *// 51 * SPL_TrfWolf * *"Transform", * * * * * *// 52 * SPL_TrfWaran * *"Transform", * * * * * *// 53 * SPL_TrfSnapper * *"Transform", * * * * * *// 54 * SPL_TrfWarg * *"Transform", * * * * * *// 55 * SPL_TrfFireWaran * *"Transform", * * * * * *// 56 * SPL_TrfLurker * *"Transform", * * * * * *// 57 * SPL_TrfShadowbeast * *"Transform", * * * * * *// 58 * SPL_TrfDragonSnapper * *"Charm", * * * * * * * *// 59 * SPL_Charm * *"MasterOfDisaster", * * // 60 * SPL_MasterOfDisaster * *"Deathbolt", * * * * * *// 61 * SPL_Deathbolt * *"Deathball", * * * * * *// 62 * SPL_Deathball * *"Concussionbolt", * * * // 63 * SPL_Concussionbolt * *"Light", * * * * * * * *// 64 * SPL_Reserved_64 * *"Light", * * * * * * * *// 65 * SPL_Reserved_65 * *"Light", * * * * * * * *// 66 * SPL_Reserved_66 * *"Light", * * * * * * * *// 67 * SPL_Reserved_67 * *"Light", * * * * * * * *// 68 * SPL_Reserved_68 * *"Light", * * * * * * * *// 69 * SPL_Reserved_69 * *"Thunderstorm", * * * * // 70 * SPL_Thunderstorm * *"Whirlwind", * * * * * *// 71 * SPL_Whirlwind * *"Waterfist", * * * * * *// 72 * SPL_WaterFist * *"IceLance", * * * * * * // 73 * SPL_IceLance * *"Sleep", * * * * * * * *// 74 * SPL_Inflate * *"Geyser", * * * * * * * // 75 * SPL_Geyser * *"Firerain", * * * * * * // 76 * SPL_Waterwall * *"Light", * * * * * * * *// 77 * SPL_Reserved_77 * *"Light", * * * * * * * *// 78 * SPL_Reserved_78 * *"Light", * * * * * * * *// 79 * SPL_Reserved_79 * *"Fear", * * * * * * * * // 80 * SPL_Plague * *"Swarm", * * * * * * * *// 81 * SPL_Swarm * *"Greententacle", * * * *// 82 * SPL_GreenTentacle * *"Firerain", * * * * * * // 83 * SPL_Earthquake * *"SummonGuardian", * * * // 84 * SPL_SummonGuardian * *"Energyball", * * * * * // 85 * SPL_Energyball * *"SuckEnergy", * * * * * // 86 * SPL_SuckEnergy * *"Skull", * * * * * * * *// 87 * SPL_Skull * *"SummonZombie", * * * * // 88 * SPL_SummonZombie * *"SummonMud", * * * * * *// 89 * SPL_SummonMud * *"Light", * * * * * * * *// 90 * SPL_Reserved_90 * *"Light", * * * * * * * *// 91 * SPL_Reserved_91 * *"Light", * * * * * * * *// 92 * SPL_Reserved_92 * *"Light", * * * * * * * *// 93 * SPL_Reserved_93 * *"Light", * * * * * * * *// 94 * SPL_Reserved_94 * *"Light", * * * * * * * *// 95 * SPL_Reserved_95 * *"Light", * * * * * * * *// 96 * SPL_Reserved_96 * *"Light", * * * * * * * *// 97 * SPL_Reserved_97 * *"Light", * * * * * * * *// 98 * SPL_Reserved_98 * *"Light" * * * * * * * * // 99 * SPL_Reserved_99 };
// Массив имен анимаций заклинаний const string spellFxAniLetters[MAX_SPELL] = { * *"SLE", * * * * * * * * *// 0 * * SPL_PalLight * *"HEA", * * * * * * * * *// 1 * * SPL_PalLightHeal * *"FBT", * * * * * * * * *// 2 * * SPL_PalHolyBolt * *"HEA", * * * * * * * * *// 3 * * SPL_PalMediumHeal * *"FBT", * * * * * * * * *// 4 * * SPL_PalRepelEvil * *"HEA", * * * * * * * * *// 5 * * SPL_PalFullHeal * *"FIB", * * * * * * * * *// 6 * * SPL_PalDestroyEvil * *"HEA", * * * * * * * * *// 7 * *SPL_PalTeleportSecret * *"HEA", * * * * * * * * *// 8 * *SPL_TeleportSeaport * *"HEA", * * * * * * * * *// 9 * *SPL_TeleportMonastery * *"HEA", * * * * * * * * *// 10 * SPL_TeleportFarm * *"HEA", * * * * * * * * *// 11 * SPL_TeleportXardas * *"HEA", * * * * * * * * *// 12 * SPL_TeleportPassNW * *"HEA", * * * * * * * * *// 13 * SPL_TeleportPassOW * *"HEA", * * * * * * * * *// 14 * SPL_TeleportOC * *"HEA", * * * * * * * * *// 15 * SPL_TeleportOWDemonTower * *"HEA", * * * * * * * * *// 16 * SPL_TeleportTaverne * *"HEA", * * * * * * * * *// 17 * SPL_Teleport_3 * *"SLE", * * * * * * * * *// 18 * SPL_Light * *"FBT", * * * * * * * * *// 19 * SPL_Firebolt * *"FBT", * * * * * * * * *// 20 * SPL_Icebolt * *"HEA", * * * * * * * * *// 21 * SPL_LightHeal * *"SUM", * * * * * * * * *// 22 * SPL_SummonGoblinSkeleton * *"FBT", * * * * * * * * *// 23 * SPL_InstantFireball * *"FBT", * * * * * * * * *// 24 * SPL_Zap * *"SUM", * * * * * * * * *// 25 * SPL_SummonWolf * *"WND", * * * * * * * * *// 26 * SPL_WindFist * *"SLE", * * * * * * * * *// 27 * SPL_Sleep * *"HEA", * * * * * * * * *// 28 * SPL_MediumHeal * *"WND", * * * * * * * * *// 29 * SPL_LightningFlash * *"FIB", * * * * * * * * *// 30 * SPL_ChargeFireball * *"SUM", * * * * * * * * *// 31 * SPL_SummonSkeleton * *"FEA", * * * * * * * * *// 32 * SPL_Fear * *"FRZ", * * * * * * * * *// 33 * SPL_IceCube * *"FIB", * * * * * * * * *// 34 * SPL_ChargeZap * *"SUM", * * * * * * * * *// 35 * SPL_SummonGolem * *"FIB", * * * * * * * * *// 36 * SPL_DestroyUndead * *"FIB", * * * * * * * * *// 37 * SPL_Pyrokinesis * *"FIB", * * * * * * * * *// 38 * SPL_Firestorm * *"FEA", * * * * * * * * *// 39 * SPL_IceWave * *"SUM", * * * * * * * * *// 40 * SPL_SummonDemon * *"HEA", * * * * * * * * *// 41 * SPL_FullHeal * *"FEA", * * * * * * * * *// 42 * SPL_Firerain * *"FIB", * * * * * * * * *// 43 * SPL_BreathOfDeath * *"MSD", * * * * * * * * *// 44 * SPL_MassDeath * *"SUM", * * * * * * * * *// 45 * SPL_ArmyOfDarkness * *"SLE", * * * * * * * * *// 46 * SPL_Shrink * *"TRF", * * * * * * * * *// 47 * SPL_TrfSheep * *"TRF", * * * * * * * * *// 48 * SPL_TrfScavenger * *"TRF", * * * * * * * * *// 49 * SPL_TrfGiantRat * *"TRF", * * * * * * * * *// 50 * SPL_TrfGiantBug * *"TRF", * * * * * * * * *// 51 * SPL_TrfWolf * *"TRF", * * * * * * * * *// 52 * SPL_TrfWaran * *"TRF", * * * * * * * * *// 53 * SPL_TrfSnapper * *"TRF", * * * * * * * * *// 54 * SPL_TrfWarg * *"TRF", * * * * * * * * *// 55 * SPL_TrfFireWaran * *"TRF", * * * * * * * * *// 56 * SPL_TrfLurker * *"TRF", * * * * * * * * *// 57 * SPL_TrfShadowbeast * *"TRF", * * * * * * * * *// 58 * SPL_TrfDragonSnapper * *"FIB", * * * * * * * * *// 59 * SPL_Charm * *"FIB", * * * * * * * * *// 60 * SPL_MasterOfDisaster * *"FBT", * * * * * * * * *// 61 * SPL_Deathbolt * *"FBT", * * * * * * * * *// 62 * SPL_Deathball * *"FBT", * * * * * * * * *// 63 * SPL_Concussionbolt * *"XXX", * * * * * * * * *// 64 * SPL_Reserved_64 * *"XXX", * * * * * * * * *// 65 * SPL_Reserved_65 * *"XXX", * * * * * * * * *// 66 * SPL_Reserved_66 * *"XXX", * * * * * * * * *// 67 * SPL_Reserved_67 * *"XXX", * * * * * * * * *// 68 * SPL_Reserved_68 * *"XXX", * * * * * * * * *// 69 * SPL_Reserved_69 * *"STM", * * * * * * * * *// 70 * SPL_Thunderstorm * *"WHI", * * * * * * * * *// 71 * SPL_Whirlwind * * * * *"WND", * * * * * * * * *// 72 * SPL_WaterFist * *"FBT", * * * * * * * * *// 73 * SPL_IceLance * *"SLE", * * * * * * * * *// 74 * SPL_Inflate * * * * * *"WND", * * * * * * * * *// 75 * SPL_Geyser * * * * * * *"FEA", * * * * * * * * *// 76 * SPL_Waterwall * *"XXX", * * * * * * * * *// 77 * SPL_Reserved_77 * *"XXX", * * * * * * * * *// 78 * SPL_Reserved_78 * *"XXX", * * * * * * * * *// 79 * SPL_Reserved_79 * *"FBT", * * * * * * * * *// 80 * SPL_Plague * *"FBT", * * * * * * * * *// 81 * SPL_Swarm * * * * * * *"FRZ", * * * * * * * * *// 82 * SPL_GreenTentacle * *"FEA", * * * * * * * * *// 83 * SPL_Earthquake * *"SUM", * * * * * * * * *// 84 * SPL_SummonGuardian * *"WND", * * * * * * * * *// 85 * SPL_Energyball * *"WND", * * * * * * * * *// 86 * SPL_SuckEnergy * *"WND", * * * * * * * * *// 87 * SPL_Skull * *"SUM", * * * * * * * * *// 88 * SPL_SummonZombie * * * *"SUM", * * * * * * * * *// 89 * SPL_SummonMud * *"XXX", * * * * * * * * *// 90 * SPL_Reserved_90 * *"XXX", * * * * * * * * *// 91 * SPL_Reserved_91 * *"XXX", * * * * * * * * *// 92 * SPL_Reserved_92 * *"XXX", * * * * * * * * *// 93 * SPL_Reserved_93 * *"XXX", * * * * * * * * *// 94 * SPL_Reserved_94 * *"XXX", * * * * * * * * *// 95 * SPL_Reserved_95 * *"XXX", * * * * * * * * *// 96 * SPL_Reserved_96 * *"XXX", * * * * * * * * *// 97 * SPL_Reserved_97 * *"XXX", * * * * * * * * *// 98 * SPL_Reserved_98 * *"XXX" * * * * * * * * * // 99 * SPL_Reserved_99 };
|
|
|
21.01.2005, 23:27
|
#77
|
 |
|
 |
|
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
|
|
 |
|
 |
|
Re: Уроки скриптологии
2All: Вот-с, собрал воедино все уроки Vam'a на этот момент, привел всё к общему знаменателю, так сказать, отредактировал кое-что, кое-где подправил. HTML файл в архиве можно скачать тутРазумеется, все права принадлежат Vam'у, а нелегальное копирование преследуется по закону :D :D :D
|
|
|
22.01.2005, 16:31
|
#78
|
|
Re: Уроки скриптологии
Тема вторая: Классы. Предварительное рассмотрение классов было в начале уроков. Сейчас мы рассмотрим классы подробно. Все классы описаны в файле ..\_intern\Classes.d
const int MAX_CHAPTER * *= 5; * //Макс. количество глав в игре (не используется) const int MAX_MISSIONS * = 5; * //Макс. количество одновременно выполняемых миссий const int MAX_HITCHANCE *= 5; * //Макс. размерность массива способностей владения видами оружия
// Класс параметров НПС CLASS C_NPC { * *var int * * id; * * * * * * * * * * * * //Однозначный идентификатор, связывающий конкретного НПС с его параметрами * *var string *name[5]; * * * * * * * * * *//Имя НПС, оно появляется на экране, если НПС находится в фокусе * *var string *slot; * * * * * * * * * * * //(не используется) Можно использовать для хранения какой-нибудь строки текста! * *var string *effect; * * * * * * * * * * //Имя визуального эффекта, привязанного к НПС * *var int * * npcType; * * * * * * * * * *//Тип НПС (описывается в файле ..AI\AI_Intern\AI_Constants.d) * *var int * * flags; * * * * * * * * * * *//Флаги НПС (NPC_FLAG_IMMORTAL, NPC_FLAG_GHOST) * *var int * * attribute[ATR_INDEX_MAX]; * //Массив значений атрибутов (ATR_HITPOINTS, ATR_MANA, ATR_STRENGTH и т.д.) * *var int * * HitChance[MAX_HITCHANCE]; * //Способность владения НПС определенным оружием * *var int * * protection[PROT_INDEX_MAX]; //Массив значений защиты от определенных повреждений * *var int * * damage[DAM_INDEX_MAX]; * * *//Массив значений наносимых повреждений * *var int * * damagetype; * * * * * * * * //Тип повреждения (НПС наносит в данный момент) * *var int * * guild; * * * * * * * * * * *//Принадлежность к гильдии * *var int * * level; * * * * * * * * * * *//Уровень НПС * *var func * *mission[MAX_MISSIONS]; * * *//(не используется) * *var int * * fight_tactic; * * * * * * * //Тактика сражения (описывается в файле ..AI\AI_Intern\AI_Constants.d) * *var int * * weapon; * * * * * * * * * * //(не используется) * *var int * * voice; * * * * * * * * * * *//Номер голоса в диалогах * *var int * * voicePitch; * * * * * * * * //Тональность голоса * *var int * * bodymass; * * * * * * * * * //(не используется) * *var func * *daily_routine; * * * * * * *//Функция распорядка дня * *var func * *start_aistate; * * * * * * *//Функция начального AI состояния (ZS_ функции) * *var string *spawnPoint; * * * * * * * * //Имя Waypoint, в котором рождается НПС * *var int * * spawnDelay; * * * * * * * * //Задержка в секундах между смертью и возрождением НПС * *var int * * senses; * * * * * * * * * * //Чувства (зрение, слух, обоняние) * *var int * * senses_range; * * * * * * * //Диапазон чувств в см. * *var int * * aivar[100]; * * * * * * * * //Массив значений AI переменных (описывается в файле ..AI\AI_Intern\AI_Constants.d), неиспользуемые индуксы могут использоваться для собственных целей. * *var string *wp; * * * * * * * * * * * * //Текущий Waypoint, в котором находится НПС (отслеживается Gothic.exe) * *var int * * exp; * * * * * * * * * * * *//Количество полученной экспы (только для ГГ) * *var int * * exp_next; * * * * * * * * * //Количество экспы оставшееся до следующего уровня (только для ГГ) * *var int * * lp; * * * * * * * * * * * * //Свободные очки обучения (только для ГГ) * *var int * * bodyStateInterruptableOverride; //Флаг возможности прерывания действия НПС (если TRUE - НПС прервать нельзя) * *var int * * noFocus; * * * * * * * * * *//Флаг, отвечающий за фокус (если TRUE и НПС находится в фокусе, то у НПС не показывается имя и количество жизни) }; * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
// Класс Миссий (не используется) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * CLASS C_Mission * * * * * * * * * * * * * * * * * * * * * * { * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *var string *name; * *var string *description; * *var int * * duration; * *var int * * important; * *var func * *offerConditions; * *var func * *offer; * *var func * *successConditions; * *var func * *success; * *var func * *failureConditions; * *var func * *failure; * *var func * *obsoleteConditions; * *var func * *obsolete; * *var func * *running; }; * * * * * * * * * * * * * * * * * * * * * * *
// Класс параметров предмета CLASS C_Item { * *var int * * id; * * * * * * * * * * * * //Однозначный идентификатор, связывающий конкретный предмет с его параметрами * *var string *name; * * * * * * * * * * * //Имя предмета, оно появляется на экране, если предмет находится в фокусе * *var string *nameID; * * * * * * * * * * //(не используется) Можно использовать для хранения какой-нибудь строки текста! * *var int * * hp,hp_max; * * * * * * * * *//??? * *var int * * mainflag; * * * * * * * * * //Флаги категории предмета * *var int * * flags; * * * * * * * * * * *//Остальные флаги предметов * *var int * * weight,value; * * * * * * * //Вес и стоимость предмета * *var int * * damageType; * * * * * * * * //Тип наносимого повреждения (используется для оружия) * *var int * * damageTotal; * * * * * * * *//Суммарное повреждение (используется для оружия) * *var int * * damage[DAM_INDEX_MAX]; * * *//Величина ущерба по типам повреждений (используется для оружия) * *var int * * wear; * * * * * * * * * * * //Флаги ношения предмета * *var int * * protection[PROT_INDEX_MAX]; //Величина защиты от конкретных повреждений (используется для брони) * *var int * * nutrition; * * * * * * * * *//(не используется) * *var int * * cond_atr[3]; * * * * * * * *//Массив атрибутов, требуемых для применения * *var int * * cond_value[3]; * * * * * * *//Массив значений атрибутов, требуемых для применения * *var int * * change_atr[3]; * * * * * * *//(не используется) * *var int * * change_value[3]; * * * * * *//(не используется) * *var func * *magic; * * * * * * * * * * *//(не используется) * *var func * *on_equip; * * * * * * * * * //Функция вызываемая при экипировке * *var func * *on_unequip; * * * * * * * * //Функция вызывается, когда предмет снимается или убирается в инвентарь * *var func * *on_state[4]; * * * * * * * *//Функции вызываемые при использовании предмета по видам состояний (видов состояний не обнаружил ???) * *var func * *owner; * * * * * * * * * * *//Владелец предмета, записывается ID НПС (не понятен тип переменной FUNC ???) * *var int * * ownerGuild; * * * * * * * * //Какой гильдии принадлежит предмет * *var int * * disguiseGuild; * * * * * * *//(не используется) * *var string *visual; * * * * * * * * * * //Имя .3DS файла текстур предмета * *var string *visual_change; * * * * * * *//Имя .ASC файла визуальных эффектов при получении этого предмета * *var string *effect; * * * * * * * * * * //Имя визуального эффекта, привязанного к предмету * *var int * * visual_skin; * * * * * * * *//Вариация текстуры для .3DS файла текстур предмета * *var string *scemeName; * * * * * * * * *//Внутреннее имя предмета * *var int * * material; * * * * * * * * * //Материал предмета * *var int * * munition; * * * * * * * * * //Тип заряда для оружия дальнего радиуса поражения * *var int * * spell; * * * * * * * * * * *//Номер заклинания, которое вызывает данный предмет * *var int * * range; * * * * * * * * * * *//Радиус поражения оружием ближнего боя * *var int * * mag_circle; * * * * * * * * //Круг магии, к которому принадлежит предмет * *var string *description; * * * * * * * *//Название предмета в инвентаре * *var string *text[ITM_TEXT_MAX]; * * * * //Массив строк описания предмета в инвентаре * *var int * * count[ITM_TEXT_MAX]; * * * *//Массив значений характеристик предмета в инвентаре (соответствует определенной текстовой строке) * *// Характеристики изображения предмета в инвентаре * *var int * * inv_zbias; * * * * * * * * *//Масштаб предмета в инвентаре * *var int * * inv_rotx; * * * * * * * * * //Поворот предмета в инвентаре относительно оси X * *var int * * inv_roty; * * * * * * * * * //Поворот предмета в инвентаре относительно оси Y * *var int * * inv_rotz; * * * * * * * * * //Поворот предмета в инвентаре относительно оси Z * *var int * * inv_animate; * * * * * * * *//Вращение предмета в инвентаре }; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Класс параметров фокуса CLASS C_Focus * * * * * * * * * * * * * * * * * * * * * * * { * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *// для НПС * * * * * * * * * * * * * * * * * * * * * * *var float * npc_longrange; * * * * * * *//Ширина * *var float * npc_range1,npc_range2; * * *//Диапазон дальности * *var float * npc_azi; * * * * * * * * * *//Азимут * *var float * npc_elevdo,npc_elevup; * * *//Тангаж * *var int * * npc_prio; * * * * * * * * * //Приоритет * *// для предметов * * * * * * * * * * * * * * * * * * * * * * * *var float * item_range1,item_range2; * *//Диапазон дальности * *var float * item_azi; * * * * * * * * * //Азимут * *var float * item_elevdo,item_elevup; * *//Тангаж * *var int * * item_prio; * * * * * * * * *//Приоритет * *// для MOB's * * * * * * * * * * * * * * * * * * * * * * * *var float * mob_range1,mob_range2; * * *//Диапазон дальности * *var float * mob_azi; * * * * * * * * * *//Азимут * *var float * mob_elevdo,mob_elevup; * * *//Тангаж * *var int * * mob_prio; * * * * * * * * * //Приоритет };
// Класс параметров диалогов CLASS C_INFO { * *var int * * npc; * * * * * * * * * * * *//ID НПС, которому принадлежит диалог * *var int * * nr; * * * * * * * * * * * * //??? * *var int * * important; * * * * * * * * *//Флаг начала диалога (TRUE - диалог начинаешь ты, FALSE - с тобой) * *var func * *condition; * * * * * * * * *//Функция проверки условий начала диалога (пока функция не возвратит TRUE, диалог не начнется) * *var func * *information; * * * * * * * *//Функция управления диалогом * *var string *description; * * * * * * * *//Строка, которая выводится в окно выбора вариантов ответов * *var int * * trade; * * * * * * * * * * *//Возможность торговли (TRUE - возможно торговать, FALSE - нет) * *var int * * permanent; * * * * * * * * *//Постоянность диалога (TRUE - диалог повторяется при каждом обращении, FALSE - однократный) };
// Класс реакций на предметы (не используется) CLASS C_ITEMREACT { * *var int * * npc; * *var int * * trade_item; * *var int * * trade_amount; * *var int * * requested_cat; * *var int * * requested_item; * *var int * * requested_amount; * *var func * *reaction; };
// Класс параметров заклинаний CLASS C_Spell { * *var float * time_per_mana; * * * * * * *//Время в мс, требуемое для инвестирования маны на один уровень * *var int * * damage_per_level; * * * * * //Наносимый урон за уровень заклинания * *var int * * damageType; * * * * * * * * //Тип повреждения * *var int * * spellType; * * * * * * * * *//Категория заклинания * *var int * * canTurnDuringInvest; * * * *//Возможность поворота во время инвестирования маны (TRUE - возможно) * *var int * * canChangeTargetDuringInvest; * *//Возможность выбора цели во время инвестирования маны (TRUE - возможно) * *var int * * isMultiEffect; * * * * * * *//Возможность мультиэффектов заклинания (множественные цели и др.) * *var int * * targetCollectAlgo; * * * * *//Константа описания цели * *var int * * targetCollectType; * * * * *//Тип цели заклинания * *var int * * targetCollectRange; * * * * //Дальность действия * *var int * * targetCollectAzi; * * * * * //Угол азимута * *var int * * targetCollectElev; * * * * *//Угол тангажа };
// ************************************************** ********** // Глобальные ссылки на классы // ************************************************** **********
// Сам НПС и Другой НПС INSTANCE self,other(C_NPC);
// НПС - жертва определенного действия (3ий в действии) INSTANCE victim(C_NPC);
// Сам предмет INSTANCE item(C_Item);
// Сам ГГ (игрок) INSTANCE hero(C_NPC);
|
|
|
22.01.2005, 16:46
|
#79
|
 |
|
 |
|
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
|
|
 |
|
 |
|
Re: Уроки скриптологии
2Vam:
var int * * nr; * * * * * * * * * * * * //???
|
Я в своей мини-редакции написал что это: var int nr; * * * //опция диалога с большим nr будет отображаться в списке ниже
|
|
|
23.01.2005, 13:53
|
#80
|
|
Re: Уроки скриптологии
Тема третья: Искусственный интеллект.
Все функции, константы и переменные искусственного интелекта находятся в папке ..\AI
1. Константы AI. Они описаны в файле ..\AI_Intern\AI_Constants.d
// ************************** // AIVAR - Константы для людей // **************************
// ------ Новости и память ---------------------
const int * AIV_LastFightAgainstPlayer * * *= 0; * *//Параметры последнего сражения с ГГ const int * * * FIGHT_NONE * * * * * * *= 0; * * * *//Сражения с ГГ не было const int * * * FIGHT_LOST * * * * * * *= 1; * * * *//Сражение проиграно (победа ГГ) const int * * * FIGHT_WON * * * * * * * = 2; * * * *//Сражение выиграно (победа НПС) const int * * * FIGHT_CANCEL * * * * * *= 3; * * * *//Сражение прервано
const int * AIV_NpcSawPlayerCommit * * * * *= 1; * *//НПС видел какой криминал совершил ГГ const int * * * CRIME_NONE * * * * * * *= 0; * * * *//Криминала не было const int * * * CRIME_SHEEPKILLER * * * = 1; * * * *//ГГ убил овцу const int * * * CRIME_ATTACK * * * * * *= 2; * * * *//ГГ сражался с НПС (параметры в AIV_LastFightAgainstPlayer) const int * * * CRIME_THEFT * * * * * * = 3; * * * *//ГГ занимался воровством const int * * * CRIME_MURDER * * * * * *= 4; * * * *//ГГ совершил убийство
const int * AIV_NpcSawPlayerCommitDay * * * = 2; * *//День, когда ГГ совершил криминал
// ------ Восприятие диалога ------------------- const int * AIV_NpcStartedTalk * * * * * * *= 3; * *//Устанавливается в TRUE, если НПС с важной информацией обращается к другому НПС
// ------ Диалог ------------------------------- const int * AIV_INVINCIBLE * * * * * * * * *= 4; * *//Устанавливается в TRUE в начале диалога для обоих НПС const int * AIV_TalkedToPlayer * * * * * * *= 5; * *//Устанавливается в TRUE, если НПС уже разговаривал с ГГ
// ------ Карманная кража ---------------------- const int * AIV_PlayerHasPickedMyPocket * * = 6; * *//Устанавливается в TRUE, если ГГ залезал в карман НПС
// ------ Сражение ----------------------------- const int * AIV_LASTTARGET * * * * * * * * *= 7; * *//Ссылка на последнего атакованного НПС const int * AIV_PursuitEnd * * * * * * * * *= 8; * *//Устанавливается в TRUE, если НПС закончил преследование
// ------ Причина нападения ------------ const int * AIV_ATTACKREASON * * * * * * * *= 9; * *//Причина нападения (по приоритетам) const int * * * AR_NONE * * * * * * * * = 0; * * * *//Причины нет const int * * * AR_LeftPortalRoom * * * = 1; * * * *//ГГ находится в помещении с ограниченным доступом const int * * * AR_ClearRoom * * * * * *= 2; * * * *//ГГ находится в помещении другого НПС const int * * * AR_GuardCalledToRoom * *= 3; * * * *//Вызвана охрана для защиты помещения const int * * * AR_MonsterVsHuman * * * = 4; * * * *//Монстр сражается с человеком, ГГ помогает человеку const int * * * AR_MonsterMurderedHuman = 5; * * * *//Монстр убил человека const int * * * AR_SheepKiller * * * * *= 6; * * * *//Овца была атакована и убита (человеком или монстром) const int * * * AR_Theft * * * * * * * *= 7; * * * *//ГГ что-то украл const int * * * AR_UseMob * * * * * * * = 8; * * * *//ГГ использовал МОВ с флагом принадлежности другому НПС const int * * * AR_GuardCalledToThief * = 9; * * * *//Вызвана стража по факту воровства ГГ const int * * * AR_ReactToWeapon * * * *= 10; * * * //Преступник не убрал оружие после двукратного пердупреждения или пустился в бега const int * * * AR_ReactToDamage * * * *= 11; * * * //Преступник ранил НПС const int * * * AR_GuardStopsFight * * *= 12; * * * //Охрана прекращает атаковать преступника const int * * * AR_GuardCalledToKill * *= 13; * * * //Вызвана охрана по факту убийства const int * * * AR_GuildEnemy * * * * * = 14; * * * //НПС является врагом гильдии (человек или монстр) const int * * * AR_HumanMurderedHuman * = 15; * * * //Человек убил человека const int * * * AR_MonsterCloseToGate * = 16; * * * //Охрана ворот атакует враждебного монстра const int * * * AR_GuardStopsIntruder * = 17; * * * //Охрана ворот атакует незваного гостя const int * * * AR_SuddenEnemyInferno * = 18; * * * //Немедленная атака противника (невзирая на блокировку) const int * * * AR_KILL * * * * * * * * = 19; * * * //ГГ убил НПС
// ------ Обыскивание трупов -------------------- const int * AIV_RANSACKED * * * * * * * * * = 10; * //Устанавливается TRUE, если труп обыскивается
// ------ Смерть -------------------------------- const int * AIV_DeathInvGiven * * * * * * * = 11; * //Устанавливается TRUE, если труп обыскан
// ------ Охрана -------------------------------- const int * AIV_Guardpassage_Status * * * * = 12; * //Статус предупреждений охраны const int * * * GP_NONE * * * * * * * * = 0; * * * *//Нет предупреждений const int * * * GP_FirstWarnGiven * * * = 1; * * * *//НПС получил первое предупреждение const int * * * GP_SecondWarnGiven * * *= 2; * * * *//НПС получил второе предупреждение const int * AIV_LastDistToWP * * * * * * * *= 13; * //Расстояние от WP охраны до точки, в которой НПС получил предупреждение const int * AIV_PASSGATE * * * * * * * * * *= 14; * //TRUE - проход возможен, FALSE - проход запрещен
// ------ Предоставление экспы ------------------ const int * AIV_PARTYMEMBER * * * * * * * * = 15; * //Если TRUE, то экспа за убитых монстров сопровождавшим идет ГГ. const int * AIV_VictoryXPGiven * * * * * * *= 16; * //Устанавливается TRUE, когда экспа за победу начислена
// ------ Пол ----------------------------------- const int AIV_Gender * * * * * * * * * * * *= 17; * //Пол НПС const int * * * MALE * * * * * * * * * *= 0; * * * *//Мужской const int * * * FEMALE * * * * * * * * *= 1; * * * *//Женский
// ------ Пища ---------------------------------- const int AIV_Food * * * * * * * * * * * * *= 18; * //Употребляемая пища const int * * * FOOD_Apple * * * * * * *= 0; * * * *//Яблоко const int * * * FOOD_Cheese * * * * * * = 1; * * * *//Сыр const int * * * FOOD_Bacon * * * * * * *= 2; * * * *//Бекон const int * * * FOOD_Bread * * * * * * *= 3; * * * *//Хлеб
// ------ Вспомогательные параметры для ТА ------ const int AIV_TAPOSITION * * * * * * * * * *= 19; * //Позиции выполненния ТА const int * * * ISINPOS * * * * * * * * = 0; * * * *//НПС в позиции выполнения ТА const int * * * NOTINPOS * * * * * * * *= 1; * * * *//НПС не в позиции выполнения ТА const int * * * NOTINPOS_WALK * * * * * = 2; * * * *//НПС идет к точке выполнения ТА
// ------ Выбор заклинания ---------------------- const int AIV_SelectSpell * * * * * * * * * = 20; * //Случайное число, соответствующее заклинанию, выбранному НПС
// ------ Наблюдение ---------------------------- const int AIV_SeenLeftRoom * * * * * * * * *= 21; * //TRUE, если НПС наблюдает за своим помещением
//////////////////////////////////// * * * * * * * *//Переменные использующиеся при комментариях действий ГГ var int Player_SneakerComment; * * * * * * * * * * *//ГГ крадется var int Player_LeftRoomComment; * * * * * * * * * * //ГГ зашел в чужое помещение var int Player_DrawWeaponComment; * * * * * * * * * //ГГ вытащил оружие var int Player_GetOutOfMyBedComment; * * * * * * * *//ГГ лег на чужую кровать ////////////////////////////////////
// ------ Сражение со вторым противником -------- const int AIV_HitByOtherNpc * * * * * * * * = 22; * //Расстояние до другого НПС const int AIV_WaitBeforeAttack * * * * * * *= 23; * //Если != 0, то вводится задержка перед атакой const int AIV_LastAbsolutionLevel * * * * * = 24; * //Репутация ГГ для конкретной локации
// ---------------------------------------------- const int AIV_ToughGuyNewsOverride * * * * *= 25; * //НПС не имеет новостей о "жестком парне" (ГГ)
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
Опции темы |
Поиск в этой теме |
|
|
Ваши права в разделе
|
|
|
|
Текущее время: 05:00. Часовой пояс GMT +4.
|
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|