Demande aide pour un script

Forum destiné aux discutions autour de l'editeur

Modérateur: Zénithale

Demande aide pour un script

Messagepar Spazz » Jeu 22 Nov 2007, 16:50

Voil?, je recherche deux fonctions pour une multipalyer de ToE

Une pour savoir quels joueurs sont Humains ou IA.

L'autre pour savoir le nombre de slots de cr?atures disponible sur un h?ros SUR LA CARTE AVENTURE !
Modifié en dernier par Spazz le Ven 23 Nov 2007, 13:11, modifié 1 fois.
Spazz
Novice
Novice
 
Messages: 8
Enregistré le: Mer 3 Jan 2007, 14:36

Messagepar The Shadow of Death » Jeu 22 Nov 2007, 17:04

Si ta carte n'est pas une single mission (voir dans lessous dossiers du .h5m de ta carte), le script est d?sactiv?. Il est utilis? uniquement pour les cartes singlemission... Donc pas de multiplayer avec un script, quel qu'il soit (? moins qu' un patch ait chang? sa ^^)...
Inutile de vous lamenter, votre code ne marchera jamais. En effet, il n'a jamais reçu la capacité de se déplacer.
Avatar de l’utilisateur
The Shadow of Death
Maître
Maître
 
Messages: 722
Enregistré le: Mer 5 Juil 2006, 15:18
Localisation: Dans son Caveau Royal

Messagepar Spazz » Jeu 22 Nov 2007, 17:53

Eh bien je t'annonce que les scrits sont maintenant disponible en mode multijoueur gr?ce ? la derni?re extension Tribes of the East. :icon_razz:
Spazz
Novice
Novice
 
Messages: 8
Enregistré le: Mer 3 Jan 2007, 14:36

Messagepar sfidanza » Ven 23 Nov 2007, 10:56

Pour le nombre de slots disponibles, je doute que ce soit possible. Mais conna?tre le nombre de cr?atures diff?rentes dans l'arm?e (ce qui est je pense finalement le but), on doit pouvoir utiliser
GetHeroCreaturesTypes(heroname)

Par contre, contrairement ? l'exemple donn? dans le pdf, j'ai l'impression qu'il renvoie une liste, pas un tableau, avec 7 ?l?ments, qui valent nil s'il n'y a pas de cr?atures. A tester...
count = 0
t1, t2, t3, t4, t5, t6, t7 = GetHeroCreaturesTypes(heroname)
if t1 ~= nil then count = count+1
if t2 ~= nil then count = count+1
...
Bien s?r, j'esp?re qu'on peut condenser tout ?a...
Avatar de l’utilisateur
sfidanza
Initié
Initié
 
Messages: 107
Enregistré le: Mar 6 Juin 2006, 19:15
Localisation: Reims, France

Messagepar Spazz » Ven 23 Nov 2007, 11:46

Justement, cette fonction ne me convient pas, car je voudrais faire des "AddHeroCreatures" en ?tant s?r que le H?ros a un slot de libre. Et le probl?me avec ta proposition, c'est que si le joueur d?double ses stacks de cr?atures ( par exemple 2 stacks de 10 vampires), la fonction renverra 20 vampires en une seul valeur et je n'arrive pas ? trouver une solution...

Je viens de v?rifier, ton code marche bien, mais il ne renvoit pas "nil" mais "0" si il n'y a pas de r?f?rence, et ensuite, il regroupe les cr?atures ayant le m?me identifiant en un seul stack ... donc ?a ne permet pas de conna?tre le nombre de slot disponible.
Spazz
Novice
Novice
 
Messages: 8
Enregistré le: Mer 3 Jan 2007, 14:36

Messagepar sfidanza » Ven 23 Nov 2007, 12:21

Dans ce cas, la fonction fera apparaitre la boite qui permet au joueur de r?organiser ses troupes pour int?grer le nouveau stack. Je ne sais pas ce que ?a donne avec un h?ros AI (j'imagine qu'il se d?brouille), mais avec un humain ?a me semble pas mal.

Cela dit, je me suis d?j? fait cette r?flexion (mais comment fait-on pour le nombre de peloton?!), et je n'ai pas mieux...

Sur HC, Maurice a list? beaucoup de fonctions qui ne sont pas dans le pdf, peut-?tre aura-t-il une id?e:
http://heroescommunity.com/viewthread.php3?TID=23668
Avatar de l’utilisateur
sfidanza
Initié
Initié
 
Messages: 107
Enregistré le: Mar 6 Juin 2006, 19:15
Localisation: Reims, France

Messagepar Spazz » Ven 23 Nov 2007, 12:34

Je savais pas que AddHeroCreatures pouvait faire appara?tre la boite permettant de r?organiser ses troupes, c'est toujours bon ? savoir, et ?a me r?sout l'un des deux probl?mes. Merci ;)

Malheureusement, je crains qu'il n'y ai pas de solution pour ma seconde question...
Spazz
Novice
Novice
 
Messages: 8
Enregistré le: Mer 3 Jan 2007, 14:36

Messagepar sfidanza » Ven 23 Nov 2007, 15:59

?a m'?tonnerait qu'il n'y ait pas une fonction d?di?e, mais j'ai beau chercher, je ne trouve pas.
Il y a bien une solution tr?s pedestre, mais elle est loin d'?tre id?ale:
EnableHeroAI(heroName, enable) g?n?re une erreur si elle est invoqu?e sur un joueur humain, donc

Code: Tout sélectionner
player_type = {}; -- 1=human ; 2=AI
last_player_checked = 0;

for p=PLAYER_1, PLAYER_8 do -- initialise ? 0 pour les joueurs actifs
   if GetPlayerState(p) == PLAYER_ACTIVE then
      player_type[p] = 0;
   else
      player_type[p] = -1;
      print("Player "..p.." is inactive");
   end;
end;

function isComputer(player)
   EnableHeroAI(GetPlayerHeroes(player)[0], true);
   player_type[player] = 2;
   print("Player "..player.." is AI");
   return not nil;
end;

function getPlayerTypes()
   if last_player_checked > 0 then
      player_type[last_player_checked] = 1;
      print("Player "..last_player_checked.." is human");
   end;
   for p=PLAYER_1, PLAYER_8 do
      if player_type[p] == 0 then
         print("Checking player "..p);
         last_player_checked = p;
         isComputer(p);
      end;
   end;
   last_player_checked = -1;
   -- Probl?me: la boucle va s'arr?ter d?s qu'elle rencontre un joueur humain
end;

Trigger(NEW_DAY_TRIGGER , "check_player_types");

function check_player_types()
   print("New day trigger...");
   if last_player_checked > -1 then getPlayerTypes(); end;
end;

-- ? mettre en fin de fichier: l'erreur bloquera la suite du script...
getPlayerTypes(); -- NEW_DAY_TRIGGER ne fonctionne pas en jour 1 (?)


(j'ai laiss? les infos de d?buggage pour tester le script)
Bilan: il faudra autant de jours qu'il y a de joueurs humains avant d'avoir toute la liste. Mais ? n'importe quel moment, on peut savoir:
- si la liste est compl?te (all_player_types_checked)
- si un joueur donn? est inactif (-1), pas v?rifi? (0), Humain (1), AI (2)

Attention, sur un joueur humain, le script sort du new_day_trigger sur une erreur, donc il faut placer le code en fin de trigger.
Avatar de l’utilisateur
sfidanza
Initié
Initié
 
Messages: 107
Enregistré le: Mar 6 Juin 2006, 19:15
Localisation: Reims, France


Retourner vers Editeur



Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités