//:://///////////////////////////////////////////// //:: Name x2_def_spawn //:: Copyright © 2001 Bioware Corp. //::////////////////////////////////////////////// /* Default On Spawn script
2003-07-28: Georg Zoeller: If you set a ninteger on the creature named "X2_USERDEFINED_ONSPAWN_EVENTS" The creature will fire a pre and a post-spawn event on itself, depending on the value of that variable 1 - Fire Userdefined Event 1510 (pre spawn) 2 - Fire Userdefined Event 1511 (post spawn) 3 - Fire both events */ //::////////////////////////////////////////////// //:: Created By: Keith Warner, Georg Zoeller //:: Created On: June 11/03 //:://////////////////////////////////////////////
const int EVENT_USER_DEFINED_PRESPAWN = 1510; const int EVENT_USER_DEFINED_POSTSPAWN = 1511; #include "x0_i0_anims" #include "x0_i0_treasure" #include "x2_inc_switches" void main() { // User defined OnSpawn event requested? int nSpecEvent = GetLocalInt(OBJECT_SELF,"X2_USERDEFINED_ONSPAWN_EVENTS"); // Pre Spawn Event requested if (nSpecEvent == 1 || nSpecEvent == 3 ) { SignalEvent(OBJECT_SELF,EventUserDefined(EVENT_USER_DEFINED_PRESPAWN )); } /* Fix for the new golems to reduce their number of attacks */ int nNumber = GetLocalInt(OBJECT_SELF,CREATURE_VAR_NUMBER_OF_ATTACKS); if (nNumber >0 ) { SetBaseAttackBonus(nNumber); } //::====================== Add By Aiwan / WRG! Team / ========================== //::////////////////////////////////////////////// //:: OnSpawn am_csp_common //:: Copyright © 2005 WRG! //::////////////////////////////////////////////// /* Добавляем стандартные свойства НПС, модифицируя скрипт NW_C2_DEFAULT9.
КОММЕНТАРИИ
Каждому свойству принадлежит локальная переменная, которую необходимо установить на НПС в редакторе. Все они начинаются на "FLAG_+Спавн_Свойство_НПС" Далее...
* Если на модуль повесить LocalInt "X2_SWITCH_CROSSAREA_WALKWAYPOINTS" равную TRUE; то все НПС ходят по вейпам из локации в локацию. В противном случае только по вейпоинтам в одной локации.
* Если повесить на дневной пост POST_ или ночной пост NIGHT_ локальную переменную LocalInt "X2_L_WAYPOINT_SETFACING" равную TRUE, то НПС становится лицом в сторну вепоинта. И возвращется в ту сторону даже после диалога/боя.
*/ //::////////////////////////////////////////////// //:: Created By: Aiwan //:: Original idea By: DBColl //:: Created On: 06.07.2005 //::////////////////////////////////////////////// //============================================================================== // Стандартные еванты скрипта NW_C2_DEFAULT9 //============================================================================== if (GetCreatureFlag(OBJECT_SELF, CREATURE_VAR_USE_SPAWN_STEALTH) == TRUE) {SetSpawnInCondition(NW_FLAG_STEALTH);} if (GetCreatureFlag(OBJECT_SELF, CREATURE_VAR_USE_SPAWN_SEARCH) == TRUE) {SetSpawnInCondition(NW_FLAG_SEARCH);} if (GetCreatureFlag(OBJECT_SELF, CREATURE_VAR_USE_SPAWN_AMBIENT_IMMOBILE) == TRUE) {SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS);} if (GetCreatureFlag(OBJECT_SELF, CREATURE_VAR_USE_SPAWN_AMBIENT) == TRUE) {SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS);} //-------------------------------------------------------------------------- // НПС ходит скрытно, когда выполняется WalkWaypoints(). Хорошо для убийц. //-------------------------------------------------------------------------- if (GetLocalInt(OBJECT_SELF, "FLAG_STEALTH") == TRUE) {SetSpawnInCondition(NW_FLAG_STEALTH);} //-------------------------------------------------------------------------- // То же самое, только в режиме поиска. Хорошо для стражи. //-------------------------------------------------------------------------- if (GetLocalInt(OBJECT_SELF, "FLAG_SEARCH") == TRUE) {SetSpawnInCondition(NW_FLAG_SEARCH);} //-------------------------------------------------------------------------- // НПС появится используя "EffectAppear", т.е. Свалится с неба. //-------------------------------------------------------------------------- if (GetLocalInt(OBJECT_SELF, "FLAG_APPEAR_ANIMATION") == TRUE) {SetSpawnInCondition(NW_FLAG_APPEAR_SPAWN_IN_ANIMATION);} //-------------------------------------------------------------------------- // НПС будет постоянно воспроизводить анимацию, даже если игрок уйдет из его // поля зрения. //-------------------------------------------------------------------------- if (GetLocalInt(OBJECT_SELF, "FLAG_CONSTANT") == TRUE) {SetSpawnInCondition(NW_ANIM_FLAG_CONSTANT);} //-------------------------------------------------------------------------- // Цивилизованные творения взаимодействуют с placeables в их области, что // имеют таг "NW_INTERACTIVE" //-------------------------------------------------------------------------- if (GetLocalInt(OBJECT_SELF, "FLAG_CIVILIZED") == TRUE) {SetAnimationCondition(NW_ANIM_FLAG_IS_CIVILIZED);} //-------------------------------------------------------------------------- // НПС с бродячей анимацией ходят бродят по городу часто возвращаясь в свой // SPAWN пункт, арену в которой они спавнятся (желательно внутреннюю) и // которая содержит один из тагов: "NW_HOME", "NW_TAVERN", "NW_SHOP" //-------------------------------------------------------------------------- if (GetLocalInt(OBJECT_SELF, "FLAG_CLOSE_RANGE") == TRUE) {SetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE);} //-------------------------------------------------------------------------- // При наступлении ночи, запускает скрипт сна на НПС. Имя скрипта вешается // на модуль, как LocalString "X2_S_SLEEP_AT_NIGHT_SCRIPT" равное имени // скрипта "имя_скрипта_на_ночь". //-------------------------------------------------------------------------- if (GetLocalInt(OBJECT_SELF, "FLAG_SLEEPING_AT_NIGHTT") == TRUE) {SetSpawnInCondition(NW_FLAG_SLEEPING_AT_NIGHT);} //-------------------------------------------------------------------------- // НПС поднимает тревогу, сообщит при атаке всем не враждебным НПС. //-------------------------------------------------------------------------- if (GetLocalInt(OBJECT_SELF, "FLAG_WARNINGS") == TRUE) {SetSpawnInCondition(NW_FLAG_SET_WARNINGS);} //-------------------------------------------------------------------------- // Ходит на ночные/дневные поинты. Днем ходит по стандартным поинтам, ночью // "WN_" + NPC Tag + "_##. Ночной пост - "NIGHT_" + NPC tag. //-------------------------------------------------------------------------- if (GetLocalInt(OBJECT_SELF, "FLAG_DAY_NIGHT_POSTING") == TRUE) {SetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING);} //-------------------------------------------------------------------------- // НПС болтает с дружественными НПС, воспроизводит анимацию, эмитирует // оживление и активность. //-------------------------------------------------------------------------- if (GetLocalInt(OBJECT_SELF, "FLAG_IMMOBILE_ANIMATIONS") == TRUE) {SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS);} //-------------------------------------------------------------------------- // Почти то же что и выше, за исключением того, что НПС бродит по округе. //-------------------------------------------------------------------------- if (GetLocalInt(OBJECT_SELF, "FLAG_AMBIENT_ANIMATIONS") == TRUE) {SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS);}
//============================================================================== // Атакующие свойства НПС - устанавливается ТОЛЬКО ОДНО ИЗ НИХ! //============================================================================== //-------------------------------------------------------------------------- // Старается атаковать издали, дальнобойным оружием. //-------------------------------------------------------------------------- if (GetLocalInt(OBJECT_SELF, "FLAG_RANGED") == TRUE) {SetCombatCondition(X0_COMBAT_FLAG_RANGED);} //-------------------------------------------------------------------------- // Использует защитные фиты и паррирование //-------------------------------------------------------------------------- if (GetLocalInt(OBJECT_SELF, "FLAG_DEFENSIVE") == TRUE) {SetCombatCondition(X0_COMBAT_FLAG_DEFENSIVE);} //-------------------------------------------------------------------------- // Будет невидимым и попытается атаковать, выйдет из невидимости и снова // будет пытаться атаковать. //-------------------------------------------------------------------------- if (GetLocalInt(OBJECT_SELF, "FLAG_AMBUSHER") == TRUE) {SetCombatCondition(X0_COMBAT_FLAG_AMBUSHER);} //-------------------------------------------------------------------------- // При атаке убегает //-------------------------------------------------------------------------- if (GetLocalInt(OBJECT_SELF, "FLAG_COWARDLY") == TRUE) {SetCombatCondition(X0_COMBAT_FLAG_COWARDLY);} //============================================================================== // Защитныеые свойства НПС - устанавливается ТОЛЬКО ОДНО ИЗ НИХ! //============================================================================== //-------------------------------------------------------------------------- // НПС Убегает в точку и возвращается через короткое время позже. //-------------------------------------------------------------------------- if (GetLocalInt(OBJECT_SELF, "FLAG_ESCAPE_RETURN") == TRUE) {SetSpawnInCondition(NW_FLAG_ESCAPE_RETURN);} //-------------------------------------------------------------------------- // Убегает в точку и не возвращается. //-------------------------------------------------------------------------- if (GetLocalInt(OBJECT_SELF, "FLAG_ESCAPE_LEAVE") == TRUE) {SetSpawnInCondition(NW_FLAG_ESCAPE_LEAVE);} //-------------------------------------------------------------------------- // Телепортируется в безопасность и не возвращается. //-------------------------------------------------------------------------- if (GetLocalInt(OBJECT_SELF, "FLAG_TELEPORT_LEAVE") == TRUE) {SetSpawnInCondition(NW_FLAG_TELEPORT_LEAVE);} //-------------------------------------------------------------------------- // Телепортируется в безопасность и возвращается через короткое время. //-------------------------------------------------------------------------- if (GetLocalInt(OBJECT_SELF, "FLAG_TELEPORT_RETURN") == TRUE) {SetSpawnInCondition(NW_FLAG_TELEPORT_RETURN);} //============================================================================== // Добавляем свои настройки для персональных нужд. //============================================================================== //-------------------------------------------------------------------------- // Присваиваем НПС координаты, что бы он стоял лицом в одном направлении. //-------------------------------------------------------------------------- if (GetLocalFloat(OBJECT_SELF,"initFacing") == 0.0) { location loc = GetLocation(OBJECT_SELF); SetLocalFloat(OBJECT_SELF, "initFacing", GetFacingFromLocation(loc)); SetLocalLocation(OBJECT_SELF, "initLoc", loc); } //============================================================================== // Запускаем стандартные еванты на НПС //============================================================================== //-------------------------------------------------------------------------- // Если вы присвоите локальную переменную "FLAG_USER_DEFINED_EVENT" равную // TRUE, то все еванты присвоятся сразу. В противном случае присваивайте // По одному для каждого события. //-------------------------------------------------------------------------- int iUserDef = GetLocalInt(OBJECT_SELF, "FLAG_USER_DEFINED_EVENT");
// * Fire User Defined Event 1001 in the OnHeartbeat if (iUserDef==TRUE || GetLocalInt(OBJECT_SELF, "FLAG_HEARTBEAT") == TRUE) {SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT);}
// * Fire User Defined Event 1002 if (iUserDef==TRUE || GetLocalInt(OBJECT_SELF, "FLAG_PERCIEVE") == TRUE) {SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT);}
// * Fire User Defined Event 1003 if (iUserDef==TRUE || GetLocalInt(OBJECT_SELF, "FLAG_END_COMBAT_ROUND") == TRUE) {SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT);}
// * Fire User Defined Event 1004 if (iUserDef==TRUE || GetLocalInt(OBJECT_SELF, "FLAG_ON_DIALOGUE") == TRUE) {SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT);}
// * Fire User Defined Event 1005 if (iUserDef==TRUE || GetLocalInt(OBJECT_SELF, "FLAG_ATTACK") == TRUE) {SetSpawnInCondition(NW_FLAG_ATTACK_EVENT);}
// * Fire User Defined Event 1006 if (iUserDef==TRUE || GetLocalInt(OBJECT_SELF, "FLAG_DAMAGED") == TRUE) {SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT);}
// * Fire User Defined Event 1007 (Считается ненадежным BioWare) if (iUserDef==TRUE || GetLocalInt(OBJECT_SELF, "FLAG_DEATH") == TRUE) {SetSpawnInCondition(NW_FLAG_DEATH_EVENT);}
// * Fire User Defined Event 1008 if (iUserDef==TRUE || GetLocalInt(OBJECT_SELF, "FLAG_DISTURBED") == TRUE) {SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT);}
// * Fire User Defined Event if (iUserDef==TRUE || GetLocalInt(OBJECT_SELF, "FLAG_SPELL_CAST_AT") == TRUE) {SetSpawnInCondition(NW_FLAG_SPELL_CAST_AT_EVENT);} //-------------------------------------------------------------------------- // Создает небольшую сумму сокровища в инвентаре //-------------------------------------------------------------------------- if ((GetLocalInt(GetModule(), "X2_L_NOTREASURE") == FALSE) && (GetLocalInt(OBJECT_SELF, "X2_L_NOTREASURE") == FALSE) ) { CTG_GenerateNPCTreasure(TREASURE_TYPE_MONSTER, OBJECT_SELF); } //-------------------------------------------------------------------------- SetListeningPatterns(); //-------------------------------------------------------------------------- // nRun - если нужно что бы стражник бегал или ждал на поинтах больше чем по // умолчанию, то присвойте нужные значения на OBJECT_SELF. // LocalInt "FLAG_WALK_RUN" - равная TRUE, заставит НПС бегать по точкам. // LocalFloat "FLAG_WALK_PAUSE" - время паузы на поинтах. По умолчанию f1.0 // Для верной работы надо править еще эту функцию на HertBeat скрипте и в // после завершения диалога с НПС. Иначе все настройки будут по умолчанию // после первого боя или диалога. //-------------------------------------------------------------------------- int nRun = GetLocalInt(OBJECT_SELF, "FLAG_WALK_RUN"); float fPause = GetLocalFloat(OBJECT_SELF, "FLAG_WALK_PAUSE"); if (fPause == 0.0f) { fPause = 1.0f; } WalkWayPoints(nRun, fPause); //=========================== End Aiwan's Edition ============================== //Post Spawn event requeste if (nSpecEvent == 2 || nSpecEvent == 3) { SignalEvent(OBJECT_SELF,EventUserDefined(EVENT_USER_DEFINED_POSTSPAWN)); } } |