Voici un script que j'ai créé pour simuler un "frappage" de porte.
A mettre dans le "OnPhysicalAttack" de la porte sur laquelle on va toquer (vous l'aurez compris: on toque en forçant la porte  )
Ce code va en fait avertir tous les PJ se trouvant dans la zone de la cible de la porte qui est toquée (je me fais bien comprendre?  ) ainsi que le NPC le plus proche de la cible et se trouvant dans la même zone qu'elle (s'il y en a un) et celui-ci va aller ouvrir la porte... sauf si celle-ci est verrouillée et qu'il n'a pas la bonne clé... alors là, il va râler
Voici le code:
// Frappe a la porte
void frapper(object porte);
void main()
{
object oPC = GetLastAttacker();
AssignCommand(oPC, ClearAllActions());
frapper(OBJECT_SELF);
}
void frapper(object porte){
object porte2 = GetTransitionTarget(porte);
int i;
for(i=0; i<3; i++){
AssignCommand(porte2, PlaySound("fs_wood_soft3"));
ActionWait(0.3);
}
object oPC = GetFirstPC();
object oNPC = GetNearestCreatureToLocation(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_NOT_PC, GetLocation(porte2));
while(oPC != OBJECT_INVALID){
if(GetArea(oPC) == GetArea(porte2)){
SendMessageToPC(oPC, "On frappe à la porte.");
}
oPC = GetNextPC();
}
if((oNPC != OBJECT_INVALID) && (GetArea(oNPC) == GetArea(porte2))){
if(GetLocked(porte2)){
string tagCle = GetLockKeyTag(porte2);
object cle = GetItemPossessedBy(oNPC, tagCle);
if(cle == OBJECT_INVALID){
AssignCommand(oNPC,ActionSpeakString("Satané porte, je n'ai pas la bonne clé!"));
AssignCommand(oNPC,ActionPlayAnimation(ANIMATION_LOOPING_TALK_FORCEFUL,1.0,3.0));
}else{
AssignCommand(oNPC,ActionUnlockObject(porte2));
AssignCommand(oNPC,ActionOpenDoor(porte2));
}
}else{
AssignCommand(oNPC,ActionOpenDoor(porte2));
}
}
}
|