Les Vaux Forum dédié au mod |
| | Gardes intelligents | |
| | Auteur | Message |
---|
Admin Cerbère
Nombre de messages : 156 Date d'inscription : 07/10/2006
| Sujet: Gardes intelligents Lun 16 Juin 2008 - 8:51 | |
| //::////////////////////////////////////////////// //:: Created By: David "The Shadowlord" Corrales //:: Created On: August 20 2002 //:://////////////////////////////////////////////
#include "NW_I0_GENERIC"
//VARIABLES START - EDIT AT OWN PLEASURE
string WARNING1 = "S'il vous plaît, Rangez votre arme!"; string WARNING2 = "Je vous ai dit de déposer vos armes!"; string WARNING3 = "Obéissez! Sinon vous serez abattu!"; //Move to Player string ATTACK_MSG = "Soit! Je vous avais prévenu!"; //Attack here string COMPLY_REPLY = "Bien, merci."; float WARN_DISTANCE = 20.0; //Distance in which to spot player float ANGER_DUR = 120.0; //Length of time (sec) that will remain angry at the pc
//END OF VARIABLES
object GetItem(object oPC) { object item=GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC);
//divers objets autorises
string Tag=GetTag(item); if( Tag=="NW_IT_TORCH001" || Tag=="ZEP_GUITAR" || Tag=="ZEP_HARP" || Tag=="ZEP_LUTE" || Tag=="ZEP_PIPES" || Tag=="ZEP_TAMBOURINE" || Tag=="ZEP_VIOLINF" || Tag=="ZEP_VIOLINM" || Tag=="ZEP_VIOLINBOW" || Tag=="ZZEP_BOOK" || Tag=="ZEP_UMBRELLA" || Tag=="ZEP_PAPOOSE" || Tag=="ZEP_FASHION" || Tag=="ZEP_FAN" || Tag=="ZEP_CRYSTALBALL" ) item= OBJECT_INVALID;
//autorise batons, sceptres et autres
int Type=GetBaseItemType(item); if( Type==BASE_ITEM_MAGICROD || Type==BASE_ITEM_MAGICSTAFF || Type==BASE_ITEM_MAGICWAND) item= OBJECT_INVALID;
//dispense speciale pour les gardes if(GetTag(GetItemInSlot(INVENTORY_SLOT_CHEST,oPC))=="EXE_ARMURE") item= OBJECT_INVALID;
return item; }
void main() { object oPC; object item;
oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF);
if(oPC != OBJECT_INVALID && (GetDistanceBetween(OBJECT_SELF,oPC) < WARN_DISTANCE) && GetObjectSeen(oPC) && !GetIsEnemy(oPC)) {
if((item = GetItem(oPC))!=OBJECT_INVALID) { if(GetLocalObject(OBJECT_SELF,"LastOffender")==oPC) { if(GetLocalInt(OBJECT_SELF,"OffenseCount")==2) { SpeakString(ATTACK_MSG); SetIsTemporaryEnemy(oPC,OBJECT_SELF,TRUE,ANGER_DUR); ActionAttack(oPC); } else if(GetLocalInt(OBJECT_SELF,"OffenseCount")==1) { ActionMoveToObject(oPC,TRUE); SetLocalInt(OBJECT_SELF,"OffenseCount",2); SpeakString(WARNING3); } else { SetLocalInt(OBJECT_SELF,"OffenseCount",1); SpeakString(WARNING2); } } else { SetLocalInt(OBJECT_SELF,"OffenseCount",0); SpeakString(WARNING1); SetLocalObject(OBJECT_SELF,"LastOffender",oPC); } } else { if( GetLocalObject(OBJECT_SELF,"LastOffender")!= OBJECT_INVALID) SpeakString(COMPLY_REPLY);
DeleteLocalObject(OBJECT_SELF,"LastOffender"); SetLocalInt(OBJECT_SELF,"OffenseCount",0); } }
if(GetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMY)) { if(TalentAdvancedBuff(40.0)) { SetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMY, FALSE); return; } }
if(GetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING)) { int nDay = FALSE; if(GetIsDay() || GetIsDawn()) { nDay = TRUE; } if(GetLocalInt(OBJECT_SELF, "NW_GENERIC_DAY_NIGHT") != nDay) { if(nDay == TRUE) { SetLocalInt(OBJECT_SELF, "NW_GENERIC_DAY_NIGHT", TRUE); } else { SetLocalInt(OBJECT_SELF, "NW_GENERIC_DAY_NIGHT", FALSE); } WalkWayPoints(); } }
if(!GetHasEffect(EFFECT_TYPE_SLEEP)) { if(!GetIsPostOrWalking()) { if(!GetIsObjectValid(GetAttemptedAttackTarget()) && !GetIsObjectValid(GetAttemptedSpellTarget())) { if(!GetIsObjectValid(GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN))) { if(!GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL) && !IsInConversation(OBJECT_SELF)) { if(GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS) || GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS_AVIAN)) { PlayMobileAmbientAnimations(); } else if(GetIsEncounterCreature() && !GetIsObjectValid(GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN))) { PlayMobileAmbientAnimations(); } else if(GetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS) && !GetIsObjectValid(GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN))) { PlayImmobileAmbientAnimations(); } } else { DetermineSpecialBehavior(); } } else { //DetermineCombatRound(); } } } } else { if(GetSpawnInCondition(NW_FLAG_SLEEPING_AT_NIGHT)) { effect eVis = EffectVisualEffect(VFX_IMP_SLEEP); if(d10() > 6) { ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF); } } }
if(GetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT)) { SignalEvent(OBJECT_SELF, EventUserDefined(1001)); } } | |
| | | CyberDomovoy paysan
Nombre de messages : 2 Date d'inscription : 10/02/2009
| Sujet: Re: Gardes intelligents Mar 10 Fév 2009 - 19:29 | |
| - Code:
-
//::////////////////////////////////////////////// //:: Created By: CyberDomovoy //:: Created On: 2009/02/10 //:://////////////////////////////////////////////
#include "NW_I0_GENERIC"
//VARIABLES START - EDIT AT OWN PLEASURE
string WARNING1 = "S'il vous plaît, Rangez votre arme!"; string WARNING2 = "Je vous ai dit de déposer vos armes!"; string WARNING3 = "Obéissez! Sinon vous serez abattu!"; //Move to Player string ATTACK_MSG = "Soit! Je vous avais prévenu!"; //Attack here string COMPLY_REPLY = "Bien, merci."; float WARN_DISTANCE = 20.0; //Distance in which to spot player float ANGER_DUR = 120.0; //Length of time (sec) that will remain angry at the pc
//END OF VARIABLES
object GetItem(object oPC) { object item=GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC);
//divers objets autorises
string Tag=GetTag(item); if( Tag=="NW_IT_TORCH001" || Tag=="ZEP_GUITAR" || Tag=="ZEP_HARP" || Tag=="ZEP_LUTE" || Tag=="ZEP_PIPES" || Tag=="ZEP_TAMBOURINE" || Tag=="ZEP_VIOLINF" || Tag=="ZEP_VIOLINM" || Tag=="ZEP_VIOLINBOW" || Tag=="ZZEP_BOOK" || Tag=="ZEP_UMBRELLA" || Tag=="ZEP_PAPOOSE" || Tag=="ZEP_FASHION" || Tag=="ZEP_FAN" || Tag=="ZEP_CRYSTALBALL" ) { return OBJECT_INVALID; }
//autorise batons, sceptres et autres
int Type = GetBaseItemType(item);
if( Type==BASE_ITEM_MAGICROD || Type==BASE_ITEM_MAGICSTAFF || Type==BASE_ITEM_MAGICWAND ) { return OBJECT_INVALID; }
//dispense speciale pour les gardes if(GetTag(GetItemInSlot(INVENTORY_SLOT_CHEST,oPC))=="EXE_ARMURE") { return OBJECT_INVALID; }
return item; }
void main() { object oPC; object item; int nbOffense; string sSpeach;
oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF); item;
// Si oPC est un objet valide, dans la distance d'avertissement, visible, non ennemi // et qu'il tient un objet valide et interdit if( oPC != OBJECT_INVALID && ( GetDistanceBetween(OBJECT_SELF,oPC) < WARN_DISTANCE ) && GetObjectSeen(oPC) && !GetIsEnemy(oPC) && ( item = GetItem(oPC) ) != OBJECT_INVALID ) { if( GetLocalObject(OBJECT_SELF, "LastOffender") != oPC ) { // si oPC n'est pas le meme chieur que le dernier SetLocalObject(OBJECT_SELF, "LastOffender", oPC); nbOffense = 1; } else { nbOffense = GetLocalInt(OBJECT_SELF,"OffenseCount") + 1; } // MAJ du nombre d'avertissements SetLocalInt(OBJECT_SELF, "OffenseCount", nbOffense);
// un switch c'est toujours plus beau qu'une succession de if/else ... switch( nbOffense ) { case 1: { // 1er avertissement sSpeach = WARNING1; break; } case 2: { // 2eme avertissement sSpeach = WARNING2; break; } case 3: { // 3eme avertissement ActionMoveToObject(oPC, TRUE); sSpeach = WARNING3; break; } case 4: { // attaque sSpeach = ATTACK_MSG; SetIsTemporaryEnemy(oPC, OBJECT_SELF, TRUE, ANGER_DUR); ActionAttack(oPC); break; } } SpeakString(sSpeach); } else { if( GetLocalObject(OBJECT_SELF,"LastOffender") != OBJECT_INVALID) { // Si on avait un chieur, on l'a plus... SpeakString(COMPLY_REPLY); DeleteLocalObject(OBJECT_SELF, "LastOffender"); SetLocalInt(OBJECT_SELF, "OffenseCount", 0); } }
// Partie que je capte pas trop... script d'origine du jeu? ca deal avec les conditions de spawn...
if(GetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMY)) { if(TalentAdvancedBuff(40.0)) { SetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMY, FALSE); return; } }
if(GetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING)) { // actions jour/nuit int nDay = FALSE; if(GetIsDay() || GetIsDawn()) { nDay = TRUE; }
if(GetLocalInt(OBJECT_SELF, "NW_GENERIC_DAY_NIGHT") != nDay) { if(nDay == TRUE) { SetLocalInt(OBJECT_SELF, "NW_GENERIC_DAY_NIGHT", TRUE); } else { SetLocalInt(OBJECT_SELF, "NW_GENERIC_DAY_NIGHT", FALSE); } WalkWayPoints(); } }
if( !GetHasEffect(EFFECT_TYPE_SLEEP) && !GetIsPostOrWalking() && !GetIsObjectValid(GetAttemptedAttackTarget()) && !GetIsObjectValid(GetAttemptedSpellTarget()) ) { // pas endormi, en train de surveiller ou se deplacer, d'attaquer, de lancer des sorts
if( !GetIsObjectValid( GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN) ) ) { // Aucun ennemi a l'horizon
if(!GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL) && !IsInConversation(OBJECT_SELF)) { // On est pas en train d'agir ou parler
if( GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS) || GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS_AVIAN) || GetIsEncounterCreature() ) { PlayMobileAmbientAnimations(); } else if( GetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS) ) { PlayImmobileAmbientAnimations(); } } else { DetermineSpecialBehavior(); } } else { //DetermineCombatRound(); } } else { if(GetSpawnInCondition(NW_FLAG_SLEEPING_AT_NIGHT)) { effect eVis = EffectVisualEffect(VFX_IMP_SLEEP); if(d10() > 6) { ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF); } } }
if(GetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT)) { SignalEvent(OBJECT_SELF, EventUserDefined(1001)); } }
| |
| | | CyberDomovoy paysan
Nombre de messages : 2 Date d'inscription : 10/02/2009
| Sujet: Re: Gardes intelligents Mar 10 Fév 2009 - 19:30 | |
| houla, faut revoir le style des balises de code ^^
bon sinon ca avance par la? | |
| | | Admin Cerbère
Nombre de messages : 156 Date d'inscription : 07/10/2006
| Sujet: Re: Gardes intelligents Dim 8 Mar 2009 - 1:44 | |
| ben je te laisserais un peu y regarder le forum, j'ai galéré déjà avec ce prefab^^ | |
| | | Contenu sponsorisé
| Sujet: Re: Gardes intelligents | |
| |
| | | | Gardes intelligents | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |
|