Oyez, oyez !

Les résultats du vote sur les meilleurs RPG de tous les temps sont désormais dévoilés dans ce message !

Merci à toutes et à tous pour votre participation !

N'hésitez pas à aller commenter, ajouter des jeux auxquels vous n'auriez pas pensé...

[SCRIPT] Divers problèmes rencontrés en créant un script

Verrouillé
Avatar du membre
Grenouillebleue
Loup effrayant
Messages : 723
Enregistré le : sam. 27 sept. 2003, 22:58
Localisation : Paris
Contact :
Statut : Hors ligne

[SCRIPT] Divers problèmes rencontrés en créant un script

.

Message par Grenouillebleue »

Voilà un script créé pour un ennemi, qui est supposé faire trois choses:

1. Transformer le gars en ennemi dès que son boss a fini son speech
2. Le faire ignorer tous les summons pour se concentrer sur les joueurs
3. Le faire boire une potion lorsqu'il tombe à moins de 50% de vie.

Les points 1. et 2. marchent sans souci, mais j'ai du mal avec le 3e... j'ai beau essayer, ça ne correspond pas. Porque ?

Code : Tout sélectionner

[b]// Passer ennemi[/b]

IF
  G("barbefight",1)
  !Allegiance(Myself,ENEMY)
THEN
  RESPONSE #100
    EquipMostDamagingMelee()
    Enemy()
    Continue()
END


[b]// Boire potion[/b]

IF
  !GlobalTimerNotExpired("time","LOCALS")
  HPPercentLT(Myself,50)
  HasItem("Potn52",Myself)
THEN
  RESPONSE #100
    UseItem("Potn52",Myself)
    SetGlobalTimer("time","LOCALS",8)
    Continue ()
END


[b]// Ignorer les summons[/b]

IF
  !Gender(SixthNearestEnemyOf(Myself),SUMMONED)
  See(SixthNearestEnemyOf(Myself))
  False()
THEN
  RESPONSE #100
END

IF
  !Gender(FifthNearestEnemyOf(Myself),SUMMONED)
  See(FifthNearestEnemyOf(Myself))
  False()
THEN
  RESPONSE #100
END

IF
  !Gender(FourthNearestEnemyOf(Myself),SUMMONED)
  See(FourthNearestEnemyOf(Myself))
  False()
THEN
  RESPONSE #100
END

IF
  !Gender(ThirdNearestEnemyOf(Myself),SUMMONED)
  See(ThirdNearestEnemyOf(Myself))
  False()
THEN
  RESPONSE #100
END

IF
  !Gender(SecondNearestEnemyOf(Myself),SUMMONED)
  See(SecondNearestEnemyOf(Myself))
  False()
THEN
  RESPONSE #100
END

IF
  !Gender(NearestEnemyOf(Myself),SUMMONED)
  See(NearestEnemyOf(Myself))
  False()
THEN
  RESPONSE #100
END

[b]// Attaquer la cible la plus proche non-summon[/b]

IF
  True()
THEN
  RESPONSE #100
    EquipMostDamagingMelee()
    AttackReevaluate(LastSeenBy(),30)
END
MOD KIM TERMINE
- Des centaines de dialogues et d'interactions
- De nombreuses quêtes
- De nouveaux objets magiques
- Une véritable romance

Roman d'Heroic Fantasy en feuilleton (un chapitre par jour)
Intro 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
Silk
Statut : Hors ligne
.

Message par Silk »

Tu ne peux pas utiliser de boucles avec bgscript ? :heu:
Avatar du membre
Grenouillebleue
Loup effrayant
Messages : 723
Enregistré le : sam. 27 sept. 2003, 22:58
Localisation : Paris
Contact :
Statut : Hors ligne
.

Message par Grenouillebleue »

Euh, utiliser quoi avec quoi ?
Qu'est-ce qu'une boucle ? Qu'est-ce que BGScript ? En quoi ça m'aiderait ? ;)

Pour l'instant, j'ai fait tous mes scripts sur le blocnotes
MOD KIM TERMINE
- Des centaines de dialogues et d'interactions
- De nombreuses quêtes
- De nouveaux objets magiques
- Une véritable romance

Roman d'Heroic Fantasy en feuilleton (un chapitre par jour)
Intro 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
Silk
Statut : Hors ligne
.

Message par Silk »

bgscript est le langage utilisé baldur's gate. Une boucle c'est une vérification. Exemple NWN :

// Ce script détruit tout objet dans la zone dont le nom est "albert"
void main()
{
object oA;
string sResA;

oA = GetFirstObjectInArea(OBJECT_SELF);
sResA=GetResRef(oA);
if(sResA=="albert")
{
DestroyObject(oA);
oA = GetNextObjectInArea(OBJECT_SELF);
}
}

C'est une boucle. Ca pourrait se traduire par tant que... alors... Ici, tu pourrais appliquer à : "tant que l'ennemi le plus proche est un summon, passer à l'ennemi suivant" jusqu'à ce qu'il tombe sur un non-summon, auquel cas il l'attaque. Dans ton cas, ça ne marche qu'avec les 6 premiers ennemis, mais si c'est 6 summons (non, ce n'est pas limité à 5 ;) )...
Avatar du membre
Grenouillebleue
Loup effrayant
Messages : 723
Enregistré le : sam. 27 sept. 2003, 22:58
Localisation : Paris
Contact :
Statut : Hors ligne
.

Message par Grenouillebleue »

Je ne crois pas qu'on ait ce genre de boucle dans BG2, vu les scripts que j'ai lu dans les mods Tashia, Chloe, Imoen ou Kelsey.

Quoi qu'il en soit, cette partie marche (et non, on ne peut avoir plus de cinq summons sans changer leur genre - et si on change leur genre, alors le script en tient compte :p ).

Ce qui ne marche pas, c'est le fait qu'il boit une potion.
POURQUOI CA NE MARCHE PÔ ?

En fait, je suppose que ma question, c'est: est-ce qu'il y a une commande qui fait recommencer le script au début ?

Tel que je vois les choses:
1. Le script dit au pirate de passer rouge, il le fait
2. Le script dit au pirate que s'il est blessé, il doit boire une potion; comme ce n'est pas le cas, ça passe à la suite
3. Le script dit au pirate d'attaquer la cible non-summon la plus proche. Il le fait

Et ? Est-ce que le script recommence de temps en temps (ce qui permettrait de déclencher la potion) ou est-ce qu'il s'arrête une fois arrivé en bas ? Si oui, comment le faire repartir ?
MOD KIM TERMINE
- Des centaines de dialogues et d'interactions
- De nombreuses quêtes
- De nouveaux objets magiques
- Une véritable romance

Roman d'Heroic Fantasy en feuilleton (un chapitre par jour)
Intro 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
Silk
Statut : Hors ligne
.

Message par Silk »

Je sais, mais je parle par exemple des dominés et des lapins du sort de souhait... Il va les attaquer...
Avatar du membre
Grenouillebleue
Loup effrayant
Messages : 723
Enregistré le : sam. 27 sept. 2003, 22:58
Localisation : Paris
Contact :
Statut : Hors ligne
.

Message par Grenouillebleue »

Pour les dominés, je vais mettre une condition supplémentaire. Ca aura en plus l'avantage d'éviter qu'ils s'attaquent les uns les autres si le PJ en domine quelques-uns.

Code : Tout sélectionner

IF
  !Gender(SixthNearestEnemyOf(Myself),SUMMONED)
  !StateCheck(SixthNearestEnemyOf(Myself),STATE_CHARMED)
  See(SixthNearestEnemyOf(Myself))
  False()
THEN
  RESPONSE #100
END
Et pour mon problème, il est réglé : il suffisait de remplacer "Attackreevaluate" par un "attack" tout simple. Visiblement, mon attackreevaluate bloquait le script

Enfin, si le perso utilise un sort de Wish pour avoir des lapins
1. Il est stupide
2. Il mérite bien que les pirates s'en prennent aux lapins :p
MOD KIM TERMINE
- Des centaines de dialogues et d'interactions
- De nombreuses quêtes
- De nouveaux objets magiques
- Une véritable romance

Roman d'Heroic Fantasy en feuilleton (un chapitre par jour)
Intro 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
Silk
Statut : Hors ligne
.

Message par Silk »

C'est bien ce que je pensais... Je me suis déjà fait une armée de 49 soldats avec le bâton de domination ;) rangés en 7*7...

La domination est une des techniques les plus puissantes existantes faces à des adversaires dominables (pas des adversaires épiques comme Irenicus)...
Avatar du membre
Isaya
Adepte de Grondemarteau
Planaire
Messages : 6990
Enregistré le : mar. 22 juil. 2003, 21:03
Localisation : Plaisir
Contact :
Statut : Hors ligne
.

Message par Isaya »

Originally posted by Grenouillebleue@dimanche 19 octobre 2003, 16:11
Je ne crois pas qu'on ait ce genre de boucle dans BG2, vu les scripts que j'ai lu dans les mods Tashia, Chloe, Imoen ou Kelsey.

En fait, je suppose que ma question, c'est: est-ce qu'il y a une commande qui fait recommencer le script au début ?

Et ? Est-ce que le script recommence de temps en temps (ce qui permettrait de déclencher la potion) ou est-ce qu'il s'arrête une fois arrivé en bas ? Si oui, comment le faire repartir ?
Non, il n'y a pas de boucle dans les scripts BG.
Les scripts tournent en permanence : le taux de rafraîchissement de l'IA définie dans le programme de config détermine le rythme de répétition (typiquement 30 fois par seconde).
Une itération du script s'arrête dès qu'elle trouve une condition de remplie. La fois suivante, l'évaluation des conditions reprendra normalement depuis le début. Je crois que la commande Continue() permet de continuer depuis le point atteint.
:!: Peu disponible
Guide d'installation (et FAQ) de Baldur's Gate, Baldur's Gate II, Baldur's Gate Trilogy (BGT), BG1Tutu, Widescreen, BGEE
Pensez à utiliser à la fonction Recherche pour trouver une réponse à votre question !
Silk
Statut : Hors ligne
.

Message par Silk »

Ca, c'est une remarque très intéressante :)
Avatar du membre
Grenouillebleue
Loup effrayant
Messages : 723
Enregistré le : sam. 27 sept. 2003, 22:58
Localisation : Paris
Contact :
Statut : Hors ligne
.

Message par Grenouillebleue »

Yup, voilà l'info dont j'avais besoin pour comprendre comment mettre mon script ;)

Merci m'siou !
MOD KIM TERMINE
- Des centaines de dialogues et d'interactions
- De nombreuses quêtes
- De nouveaux objets magiques
- Une véritable romance

Roman d'Heroic Fantasy en feuilleton (un chapitre par jour)
Intro 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
Avatar du membre
Elgaern
Élémentaire de feu
Messages : 2344
Enregistré le : mar. 05 nov. 2002, 16:47
Localisation : Grenoble (ou Riln ;) )
Contact :
Statut : Hors ligne
.

Message par Elgaern »

Question ayant trouvé sa réponse, sujet clos...
Verrouillé

Retourner vers « Scripts »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 0 invité