|
Re: Уроки скриптологии
// ************************************************** *********************** // Обработчик состояния комментирования подставной гильдии (переодетого ГГ) // ------------------------------------------------------------------------- // self - НПС источник информации, other - НПС приемник информации (обычно ГГ) // ************************************************** ***********************
func void ZS_CommentFakeGuild() { * *// разрешить минимальный набор восприятий * *Perception_Set_Minimal(); * *// НПС встает * *AI_StandUp(self); * *// если НПС не сидит * *if(!C_BodystateContains(self,BS_SIT)) * *{ * * * * *// НПС поворачивается к ГГ * * * *B_TurnToNpc(self,other); * *}; * *// если ГГ не сидит * *if(!C_BodystateContains(other,BS_SIT)) * *{ * * * * *// ГГ поворачивается к НПС * * * *B_TurnToNpc(other,self); * * * *// если расстояние между ГГ и НПС < 80 см * * * *if(Npc_GetDistToNpc(other,self) < 80) * * * *{ * * * * * *// ГГ делает шаг назад * * * * * *AI_Dodge(other); * * * *}; * *}; * *// если на ГГ одеты доспехи * *if(Npc_HasEquippedArmor(other) == TRUE) * *{ * * * *var C_Item itm; * * * *// получить ссылку на доспехи * * * *itm = Npc_GetEquippedArmor(other); * * * * *// если НПС милиционер или паладин * * * *if(self.guild == GIL_MIL ¦¦ self.guild == GIL_PAL) * * * *{ * * * * * *// НПС говорит ГГ (SVM фраза "Ты солдат! Одевайся соответственно.") * * * * * *B_Say (self,other, "$ADDON_WRONGARMOR_MIL"); * * * *} * * * *// иначе, если НПС маг послушник или маг огня * * * *else if(self.guild == GIL_NOV ¦¦ self.guild == GIL_KDF) * * * *{ * * * * * *// НПС говорит ГГ (SVM фраза "Эта одежда не соответствует нашему ордену. Переоденься.") * * * * * *B_Say(self,other,"$ADDON_WRONGARMOR_KDF"); * * * *} * * * *// иначе, если НПС наемник или охотник на драконов * * * *else if(self.guild == GIL_SLD ¦¦ self.guild == GIL_DJG) * * * *{ * * * * * *// НПС говорит ГГ (SVM фраза "В каком виде ты тут бродишь? Одень что-то приличное.") * * * * * *B_Say(self,other,"$ADDON_WRONGARMOR_SLD"); * * * *} * * * *else // иначе (другие гильдии) * * * *{ * * * * * *// НПС говорит ГГ (SVM фраза "Это не твоя одежда. Я с тобой не буду говорить.") * * * * * *B_Say(self,other,"$ADDON_WRONGARMOR"); * * * *}; * * *} * *else // иначе (ГГ без доспехов) * *{ * * * *// если НПС бандит * * * *if(self.guild == GIL_BDT) * * * *{ * * * * * *// НПС говорит ГГ (SVM фраза "Да на тебе даже кольчуги нет. Проваливай!") * * * * * *B_Say(self,other,"$ADDON_NOARMOR_BDT"); * * * *}; * *}; };
... иеще файл
// ************************************** // Функция подготовки НПС боеприпасов // **************************************
// ====================================== // Аргументы: // -------------------------------------- // slf - экипируемый НПС // ======================================
func void B_CreateAmmo(var C_NPC slf) { * *var C_ITEM rangedWeapon; * *// если НПС находится в боевом режиме с оружием дальнего радиуса поражения * *if(Npc_IsInFightMode(slf,FMODE_FAR)) * *{ * * * *// получить оружие, которое НПС держит в руках * * * *rangedWeapon = Npc_GetReadiedWeapon(slf); * *} * *// иначе, если НПС экипирован оружием дальнего радиуса поражения * *else if(Npc_HasEquippedRangedWeapon(slf)) * *{ * * * *// получить оружие дальнего радиуса поражения, которым экипирован НПС * * * *rangedWeapon = Npc_GetEquippedRangedWeapon(slf); * *} * *else // иначе * *{ * * * *return; * *}; * *// если боезапас - Стрела * *if(rangedWeapon.munition == ItRw_Arrow) * *{ * * * *// если у НПС < 10 стрел * * * *if(Npc_HasItems(slf,ItRw_Arrow) < 10) * * * *{ * * * * * *// создать в инвентаре НПС 10 стрел * * * * * *CreateInvItems(slf,ItRw_Arrow,10); * * * *}; * *} * *// иначе, если боезапас - Болт * *else if(rangedWeapon.munition == ItRw_Bolt) * *{ * * * *// если у НПС < 10 болтов * * * *if(Npc_HasItems(slf,ItRw_Bolt) < 10) * * * *{ * * * * * *// создать в инвентаре НПС 10 болтов * * * * * *CreateInvItems(slf,ItRw_Bolt,10); * * * *}; * *}; * };
... и еще
// ************************************** // Функция добивания НПС // **************************************
// ====================================== // Аргументы: // -------------------------------------- // slf *- НПС агрессор // oth *- НПС жертва // ======================================
func void B_FinishingMove(var C_NPC slf,var C_Npc oth) { * *// если агрессор не находится в режиме сражения с оружием ближнего радиуса поражения * *if(!Npc_IsInFightMode(slf,FMODE_MELEE)) * *{ * * * *// агрессор ставится в режим сражения с оружием Ржавый меч * * * *Npc_SetToFightMode(slf,ItMw_1h_MISC_Sword); * *}; * *// агрессор добивает жертву * *AI_FinishingMove (slf, oth); };
... и еще
// ******************************** // НПС перестает смотреть на цель // ********************************
// ================================ // Аргументы: // -------------------------------- // slf *- смотрящий НПС // ================================
func void B_StopLookAt(var C_NPC slf) { * *var C_NPC target; * *// получить цель, на которую смотрит НПС * *target = Npc_GetLookAtTarget(slf); * *// если цель существует * *if(Hlp_IsValidNpc(target)) * *{ * * * *// НПС перестает смотреть на цель * * * *AI_StopLookAt (slf); * *}; };
// *************************** // НПС смотрит на другого НПС // ***************************
// =========================== // Аргументы: // --------------------------- // slf *- смотрящий НПС // oth *- НПС цель // ===========================
func void B_LookAtNpc(var C_NPC slf,var C_NPC oth) { * *// НПС перестает смотреть на старую цель * *B_StopLookAt(slf); * *// НПС смотрит на новую цель * *AI_LookAtNpc(slf,oth); };
// ************************************** // НПС поворачивается к другому НПС // **************************************
// ====================================== // Аргументы: // -------------------------------------- // slf *- поворачивающийся НПС // oth *- НПС цель // ======================================
func void B_TurnToNpc(var C_NPC slf,var C_Npc oth) { * *// НПС поворачивается к цели * *AI_TurnToNpc(slf,oth); };
... и еще
// ********************************* // Перевод НПС в исходное состояние // *********************************
// ================================ // Аргументы: // -------------------------------- // slf *- НПС, переводимый в исходное состояние // ================================
func void B_ResetAll(var C_NPC slf) { * *// НПС перестает смотреть на цель * *B_StopLookAt(slf); * *// НПС прячет оружие * *AI_RemoveWeapon(slf); };
... и еще
// ******************************* // НПС говорит SVM фразу // *******************************
// =============================== // Аргументы: // ------------------------------- // slf *- говорящий НПС // oth *- слушающий НПС // text - имя переменной класса C_SVM, которая содержит произносимую фразу (должно начинаться с символа $) // ===============================
func void B_Say(var C_NPC slf,var C_Npc oth,var string text) { * *// НПС говорит другому НПС SVM (Standart Voice Module) фразу * *AI_OutputSVM(slf,oth,text); };
Функция B_RemoveWeapon нигде не вызывается и файл B_RemoveWeapon.d может быть удален.
|