Re
Je crée pas mal de combats un peu dans le style de la bataille contre l'armée de Yaga Shura : quand un ennemi meurt , un autre apparaît.
Le truc c'est qu'il est important de donner aux créatures ennemis qui spawnent un script qui leur ordonne de se déplaçer vers le joueur 1 dans le cas ou la créature ennemi ne verrait aucun membre de notre groupe. C'est important car la créature ennemi est généré à l'autre bout de l'écran et n'a donc en général aucun membre de notre groupe dans son champ de vision. (CreateCreatureOffScreen("D9ELAR0X",S) // Squelette archer)
J'utilise donc le script suivant que je met dans dans l'emplacement "override script" :
IF
Allegiance(Myself,ENEMY)
!Detect(NearestEnemyOf(Myself))
!Detect(Player1)
!Detect(Player2)
!Detect(Player3)
!Detect(Player4)
!Detect(Player5)
!Detect(Player6)
THEN
RESPONSE #100
MoveToObject(Player1)
END
Suivant les créatures à qui je met ce script, il y a 2 comportements différents :
-la créature ne vois pas d'ennemis, elle se dirige donc vers le joueur 1 mais si elle rencontre un membre de notre groupe sur sa route (ou un allié convoqué), elle s’arrêtera pour l'attaquer : c'est le comportement idéal que je recherche.
-la créature ne vois pas d'ennemis, elle se dirige donc vers le joueur 1 mais elle continuera sa course jusqu'au joueur 1 même si elle rencontre des membres de notre groupe sur son passage :comportement bidon qui fout un peu tout en l'air.
Comment expliquer ces 2 attitudes différentes ? J'avoue que je jette un peu une bouteille à la mer car c'est incompréhensible qu'un script s’exécute différemment et j'ai testé sur beaucoup de créatures.
Et sinon comment faire pour avoir à coup sur un script qui permettent d'avoir le comportement idéal ?
|SCRIPT] Un script qui s'exécute différemment selon les créatures
- deratiseur
- Rakshasa
- Messages : 3772
- Enregistré le : mer. 05 déc. 2007, 18:35
- Localisation : Gap, Hautes alpes
- Statut : Hors ligne
.
Et pourquoi pas, tout simplement :
IF
Allegiance(Myself,ENEMY)
!Detect(NearestEnemyOf(Myself))
!Detect(Player1)
!Detect(Player2)
!Detect(Player3)
!Detect(Player4)
!Detect(Player5)
!Detect(Player6)
THEN
RESPONSE #100
SetGlobal("Move","LOCALS",1)
MoveToObject(Player1)
END
IF
Global("Move","LOCALS",1)
OR(7)
Detect(NearestEnemyOf(Myself))
Detect(Player1)
Detect(Player2)
Detect(Player3)
Detect(Player4)
Detect(Player5)
Detect(Player6)
THEN
RESPONSE #100
Attack(NearestEnemyOf(Myself))
SetGlobal("Move","LOCALS",0)
END
?
IF
Allegiance(Myself,ENEMY)
!Detect(NearestEnemyOf(Myself))
!Detect(Player1)
!Detect(Player2)
!Detect(Player3)
!Detect(Player4)
!Detect(Player5)
!Detect(Player6)
THEN
RESPONSE #100
SetGlobal("Move","LOCALS",1)
MoveToObject(Player1)
END
IF
Global("Move","LOCALS",1)
OR(7)
Detect(NearestEnemyOf(Myself))
Detect(Player1)
Detect(Player2)
Detect(Player3)
Detect(Player4)
Detect(Player5)
Detect(Player6)
THEN
RESPONSE #100
Attack(NearestEnemyOf(Myself))
SetGlobal("Move","LOCALS",0)
END
?
- DrAzTiK
- Araignée éclipsante
- Messages : 1231
- Enregistré le : ven. 19 sept. 2003, 03:20
- Localisation : Bordeaux
- Contact :
- Statut : Hors ligne
.
Alors j'ai testé ton script mais il se passe ce que je craignais.
En fait il faudrait aussi que la créature utilise son script suivant ( WTASIGH ou son script de mage ou de prête). Parce que là avec ton script, la créature se contente simplement d'attaquer basiquement.
Mais on touche au but je sens ! C'est peut être un truc tout bête à modifier.
Edit : j'ai trouvé, en fait avec ce script ça a l'air de marcher :
IF
Allegiance(Myself,ENEMY)
!Detect(NearestEnemyOf(Myself))
!Detect(Player1)
!Detect(Player2)
!Detect(Player3)
!Detect(Player4)
!Detect(Player5)
!Detect(Player6)
THEN
RESPONSE #100
SetGlobal("Move","LOCALS",1)
MoveToObject(Player1)
END
IF
Global("Move","LOCALS",1)
OR(7)
Detect(NearestEnemyOf(Myself))
Detect(Player1)
Detect(Player2)
Detect(Player3)
Detect(Player4)
Detect(Player5)
Detect(Player6)
THEN
RESPONSE #100
NoAction()
SetGlobal("Move","LOCALS",0)
END
Je te confirmerai quand même .
Merçi !
En fait il faudrait aussi que la créature utilise son script suivant ( WTASIGH ou son script de mage ou de prête). Parce que là avec ton script, la créature se contente simplement d'attaquer basiquement.
Mais on touche au but je sens ! C'est peut être un truc tout bête à modifier.
Edit : j'ai trouvé, en fait avec ce script ça a l'air de marcher :
IF
Allegiance(Myself,ENEMY)
!Detect(NearestEnemyOf(Myself))
!Detect(Player1)
!Detect(Player2)
!Detect(Player3)
!Detect(Player4)
!Detect(Player5)
!Detect(Player6)
THEN
RESPONSE #100
SetGlobal("Move","LOCALS",1)
MoveToObject(Player1)
END
IF
Global("Move","LOCALS",1)
OR(7)
Detect(NearestEnemyOf(Myself))
Detect(Player1)
Detect(Player2)
Detect(Player3)
Detect(Player4)
Detect(Player5)
Detect(Player6)
THEN
RESPONSE #100
NoAction()
SetGlobal("Move","LOCALS",0)
END
Je te confirmerai quand même .
Merçi !
-
- Adepte de Grondemarteau
- Ogre mage
- Messages : 1328
- Enregistré le : dim. 21 mars 2010, 12:03
- Localisation : Paris
- Contact :
- Statut : Hors ligne
.
salut,
j'ai eu le même problème dans un autre contexte. Comment arrêter "MoveToObject()" au bon moment?
Effectivement il faut "casser" la recherche pour la réinitialiser ou faire autre chose. De mémoire, j'ai mit un code dans un autre fichier script pour déclencher un autre évènement. soit deux fichiers à mettre sur la créature:
Script de recherche
Script de combat si le groupe est détecté.
Si ton code ne marche pas, je regarderai en détail comment j'ai traité ce point.
Question au passage:
Différence entre DETECT et SEE?
Cocrane
j'ai eu le même problème dans un autre contexte. Comment arrêter "MoveToObject()" au bon moment?
Effectivement il faut "casser" la recherche pour la réinitialiser ou faire autre chose. De mémoire, j'ai mit un code dans un autre fichier script pour déclencher un autre évènement. soit deux fichiers à mettre sur la créature:
Script de recherche
Script de combat si le groupe est détecté.
Si ton code ne marche pas, je regarderai en détail comment j'ai traité ce point.
Question au passage:
Différence entre DETECT et SEE?
Cocrane
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 0 invité