Ahouuu! besoin d'aide pour un script de loup-garou!

Répondre
Partager Rechercher
(je fais bien le loup-garou, hein?? allez je vous le refais AHOUUUUUUUUUUUUUUUUUUUUUUUU)

hem bon sérieusement j'vous explique j'aimerais bieng faire un village peuplé de loup-garous qui se transforment la nuit (mais sans devenir hostiles)

y'a 8 PNj répartis dans 4 zones quelqu'un à une idée?
Tu crée un blueprint de loup-garou avec une faction amicale (marchand ou autre), et a la nuit tu détruit ton PNJ et tu le remplace par ton garou.
Pour ce qui est du test jour/nuit, le problème c'est l'utilisation OnHeartBeat, si quelqu'un a une autre idée a pars le OnEnter de la zone...

Jaha Effect
Citation :
Provient du message de Jaha Effect
Pour ce qui est du test jour/nuit, le problème c'est l'utilisation OnHeartBeat, si quelqu'un a une autre idée a pars le OnEnter de la zone...
Bein, de toute facon, GetIsDay est une interogation, donc, il faut des demande reguliere pour ca. Or, un UDe n'est prevu que pour reagir a un evenement UD qui lui aura été envoyé, et non pas de facon dynamique a l'environnement. Normal que cela ne fonctionne pas.

J'ai bien peur que la solution ne soit dans le OnHeartbeat, ou dans des DelayCommand multiples.

Une autre solution : tu met sur tes PNJ une perception range maximum, afin qu'ils detectent le PJ avant que le PJ ne le detecte. Et c'est a ce moment la que tu fais un GetIsDay/Night...

Cette technique devrait fonctionner tres tres bien, et economiser ton CPU, mais aura un desavantage : si ton PJ et ton PNJ se poursuivent en courant toute la nuit, au lever du jour, il ne se retransformera pas... mais bon...


PS : A mon avis (sans pouvoir faire plus de test que ceux que j'ai put faire), il est bon d'economiser le OnHeartbeat, mais il ne faut pas le negliger non plus ... apres tout, un onheartBeat, et un DelayCommand(executeScript()) on la même charge CPU (enfin, normalement)...
ok alors votre avis:

c'est mieux de déclarer un onheartbeat dans celui du module pour qu'il envoie le signal au 8 lycanthropes?

ou de mettre un onheartbeat sur chaque lycanthrope?

(PS: niveau syntaxe si je pouvais avoir un tit n'exemple ça serait sympa aussi )
Citation :
ok alors votre avis:

c'est mieux de déclarer un onheartbeat dans celui du module pour qu'il envoie le signal au 8 lycanthropes?
ca depens...

Tu nettoie tes zones, derriere toi ?

Perso, je serait plutot pro- OnHeartbeat creature, avec une bouble tres simple, genre :

Code PHP:

void main()
{
if ((
GetTag(OBJECT_SELF)=="garou" && GetIsDay())
    {
    
UDE transfo en homme;
    return;
    }
if ((
GetTag(OBJECT_SELF)=="omo"/*lave plus blanc*/ && GetIsNight())
    {
    
UDE transfo en Tigrou;
    return;
    }

en gros... avec le OnheartBeat commun au deux formes, les tags qui vont bien, et le UDE qui va bien aussi ^^
EventUserDefined.....un truc dans le genre....

tu les defini dans le OnUserDefined
et les apelle dans ton script avec EventUserDefined(1001,1002,1003.........ect)
je pense que c'est ce qu'a voulu dire eMRaistlin avec ses : UDE
Citation :
apres tout, un onheartBeat, et un DelayCommand(executeScript()) on la même charge CPU (enfin, normalement)..
OK, mais uniquement dans le cas où on utilise des DelayCommand() courts, dans ce cas particulier, il n'y a pas de question à se poser : il faut utiliser un DelayCommand()

Sur le OnSpawn du garou :

Code PHP:

//spawn du garou

void main()
{
    if ( ! 
GetLocalInt(OBJECT_SELF"bDeja_spawne"))
    {
    
float fTime HoursToSeconds(GetTimeHour()) + GetTimeMinute()*60.0 GetTimeSecond();
    if(
0.0<fTime && fTime<HoursToSeconds(7))
    {
        
float fFirst HoursToSeconds(7) - fTime;
        
DelayCommand(fFirstSignalEvent(OBJECT_SELFEventUserDefined(666));
    }
    else
    {
        
float fFirst HoursToSeconds(24) - fTime;
        
object oHumain CreateObject(OBJECT_TYPE_CREATURE"res_de_l'homme"GetLocation(OBJECT_SELF));
        
AssignCommand(oHumainDelayCommand(fFirstSignalEvent(oHumainEventUserDefined(666)));
        
DestroyObject(OBJECT_SELF);
    }
    
SetLocalInt(OBJECT_SELF"bDeja_spawne"TRUE);
    }
    
    
//ici évidemment on peut mettre ce qu'on veut

Ensuite l'EventUserDefined du garou :

Code PHP:

//ude du garou

void main()
{
    switch(
GetUserDefinedEventNumber())
    {
        
//...
        
case 666 :
            
object oHumain CreateObject(OBJECT_TYPE_CREATURE"res_de_l'homme"GetLocation(OBJECT_SELF));
            
AssignCommand(oHumainDelayCommand(HoursToSecond(17), SignalEvent(oHumainEventUserDefined(666)));
            
DestroyObject(OBJECT_SELF);
            break;
        
//...
    
}

Et finalement l'EventUserDefined de l'humain :

Code PHP:

//ude de l'humain

void main
{
    switch(
GetUserDefinedEventNumber())
    {
        
//...
        
case 666 :
            
object oGarou CreateObject(OBJECT_TYPE_CREATURE"res_du_garou"GetLocation(OBJECT_SELF));
            
AssignCommand(oGarouDelayCommand(HoursToSecond(7), SignalEvent(oGarouEventUserDefined(666)));
            
DestroyObject(OBJECT_SELF);
            break;
        
//...
    
}

Nyaa [ Croise les doigts pour que ça marche ]

[ EDIT ] pour corriger une erreur grossière...
http://www.smilies.org/basesmilies3/CompDedDevil.gif

Je me permet de faire une remontée du post car à priori, personne n'a pensé à faire le test sus-cité, et moi, j'en ai grand besoin pour que ma princesse Fiona se transforme en ogresse la nuit...

Or donc, le premier script de Jedaï sur le OnSpawn du garou marche bien (à deux parenthèses près )

Le deuxième fonctionne aussi (au s de Seconds près )

mais pas le troisième (et là je trouve pas pourquoi )

Voici le script :

Code PHP:

//ude de l'humain

void main
{
    switch(
GetUserDefinedEventNumber());
    {
        
//...
        
case 666 :
            
object oGarou CreateObject(OBJECT_TYPE_CREATURE"princessefion003"GetLocation(OBJECT_SELF));
            
AssignCommand(oGarouDelayCommand(HoursToSecond(7), SignalEvent(oGarouEventUserDefined(666)));
            
DestroyObject(OBJECT_SELF);
            break;
        
//...
    
}

et voici ce que cela me donne comme message d'erreur :

Citation :
18/05/2003 14:49:22 : Erreur. 'sc_fionafemude' n’est pas compilé.
sc_fionafemude.nss(4): ERREUR : FUNCTION DEFINITION MISSING PARAMETER LIST
Une bonne âme pour trouver la faille ?
Exact ! j'avais même pô vu !

bon, après il manque encore le s de Seconds, puis une parenthèse, mais là :

Citation :
18/05/2003 15:24:36 : Erreur. 'sc_fionafemude' n’est pas compilé.
sc_fionafemude.nss(8): ERREUR : SKIPPING DECLARATION VIA "case" STATEMENT DISALLOWED.
C'est aussi un truc nouveau pour moi...
C'est parce qu'on a pas le droit de faire des déclaration dans un switch/case sans mettre un bloc autour (y a une question de gestion de la pile sans doute : les valeurs sont 'dépilés' à la fin d'un bloc, mais à la compilation, on ne sait pas quelle case vont être exécutés, donc si y a des déclarations dans ces cases, on ne sait pas combien de valeurs on doit dépiler), donc voici une version un tantipoil corrigée :
Code PHP:

//ude de l'humain

void main()
{
    switch(
GetUserDefinedEventNumber());
    {
        
//...
        
case 666 :
            {
                
object oGarou CreateObject(OBJECT_TYPE_CREATURE"princessefion003"GetLocation(OBJECT_SELF));
                
AssignCommand(oGarouDelayCommand(HoursToSeconds(7), SignalEvent(oGarouEventUserDefined(666))));
                
DestroyObject(OBJECT_SELF);
            }
            break;
        
//...
    
}

Et j'aime bien le princessefion003.
Citation :
Et j'aime bien le princessefion003
lolllll, c'est vrai, du fait que je l'ai modifié plusieurs fois en l'ajoutant à la palette, le a s'est transformé en 003. C'est pas trés fin comme nom

Edit : euh, sinon pour le script :

Citation :
18/05/2003 19:17:25 : Erreur. 'sc_fionafemude' n’est pas compilé.
sc_fionafemude.nss(8): ERREUR : SKIPPING DECLARATION VIA "case" STATEMENT DISALLOWED.


Arg ! Toute logique et cohérence a-t-elle quitté ce pauvre monde !

J'ai retapé le script, tel quel et ça compile.....

Mais avec un simple copier coller, on obtient bien l'erreur

Conclusion : retape le script au propre :bouffon:
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés