Questions pour une arène

Répondre
Partager Rechercher
Voili voilou ce que je voudrais faire :

je voudrais créer une arene (pas de prob pour ca) mais il me faudrait un petit script pour le "gardien" de cette arene.

l'action que je voudrait qu'il exécute c'est que des qu'un combat est fini, il se dirige vers le mort pour le rezu (comme ca, pas de perte d'xp ou po.
Post
A tester
A mettre dans le OnPlayerDeath, événement du module :

Code PHP:

//::///////////////////////////////////////////////
//:: Name on player death
//:: FileName on_playerdeath
//:://////////////////////////////////////////////
//:: Created By: Elvorfirimathrel
//:: Created On: 19 Juin 2003
//:://////////////////////////////////////////////

void main()
{
 
// declaration des variables
 
object oPcoGardien;

 
// affectation de valeurs aux variable
 
oPc GetLastPlayerDying();
 
oGardien GetObjectByTag("Gardien");

 
// assignation de l'action 
 
AssignCommand(oGardienActionCastSpellAtObject(SPELL_RESURRECTIONoPcMETAMAGIC_NONETRUE) );

Comme le dit le titre, à tester
Code PHP:

// OnPlayerDeath //

void main()
{
//
int nArena;
object oPC,oGardien;
//
oPC GetLastPlayerDied();
oGardien GetObjectByTag("tag_de_ton_gardien");
nArena GetLocalInt(oPC,"is_in_arena");
//
if(nArena==TRUE)
 {
 
AssignCommand(oGardien,ActionCastSpellAtObject(SPELL_RESURRECTION,oPC,METAMAGIC_ANY,TRUE));
 }
//
else if ((nArena!=TRUE)&&(nArena!=FALSE))
 {
SendMessageToPC(oPC,"Problme de script OnDeath, veuillez contacter le Develloppeur");}
else if (
nArena==FALSE)

 {
/*** Tu mets ton script de OnDeath normal ici. ***/}


Et tu crée une variable à l'entrée et à la sortie de ton arène qui vaut 1 quand le player est dedans et 0 quand il n'y est pas. Et voilà
Sauf que ton script ne tiens pas compte du fait que le dernier joueur mort n'est pas forcément dans l'arène...

Et en plus il y a des fautes : METAMAGIC_NONE n'existe pas. Bon, ça revient au même, mais il vaut mieux, pour le même prix, écrire METAMAGIC_ANY, non ?
Bon, ca ne fonctionne pas!
je m'explique : j'utilise le "nw_o0_death" dans le onplayerdeath du mod lors de le mort des mes persos. donc je suis pas si je dois
mettre l'autre script (pour rezu dans l'arene) avant ou apres (apparemment c'est avant si j'ai bien compris): a la fin du script de ange il y a

Citation :
Provient du message de Ange Musicien

{/*** Tu mets ton script de OnDeath normal ici. ***/}
Malgré tout, j'ai essayé les deux scripts donnés et ca ne marche pas.
Autre chose
je ne sais pas comment on fait une variable à l'entrée de l'arene (est-ce que la variable se met sur une porte? car à l'arene, il y a pas de porte!)

Citation :
Provient du message de Ange Musicien

Et tu crée une variable à l'entrée et à la sortie de ton arène qui vaut 1 quand le player est dedans et 0 quand il n'y est pas. Et voilà
si vous pouviez encore m'aider un peu svp

autre info : le tag de mon gardien, c'est "vost"

merci d'avance
Salut, tu peux mettre une valeur de cette sorte
a placer sur tes zones de transistion

Code PHP:

Void Main ()
{
  
SetLocalInt(GetPCSpeaker(),"entre_sort",1);
  
// là ça te met la variable entre_sort à 1

ensuite tu test si "entre_sort" =1 ou 0 pour savoir si le perso est dedans ou dehors

je debute mais ce doit être juste (j'espere)

Mon arene c'est l'arene présente dans la section "groupe" de l'onglet "peindre le terrain" de l'éditeur (arene 3x3). Ce qui fait que je ne sais pas y mettre de porte (pour une zone de transition). Donc, je pense pas que mon arene aie un tag!



et puis meme si je savais en mettre une, je suis tellement nul que je sais pas où mettre une variable

donc voila, si vous avez une idée pour m'aider! (je pensais à un truc du genre : mettre un script juste sur mon gardien que dès qu'il voit un mort dans un certain rayon, il aille le rezu. comme ca, il rezu le mort dans cette portion de zone et je m'embete plus avec le onheartbeat ou autre chose du module. Ca doit etre possible ca, non?)
Autre méthode:
Tu pose un waypoint au milieu de l'arène et tu vérifie la distance entre le PJ et ce waypoint. L'arène est un groupe de tuile de 3x3, elle a donc un rayon de 15 mètres.

Code PHP:

object oPC GetLastPlayerDied();
object oWay GetWaypointByTag"WAY_Arene");
float fDistance GetDistanceBetweenoPCoWay);

if (
fDistance <= 15) { //blablabla 
Franchement, utiliser l'évènement OnPlayerDeath me semble être la meilleure option et je ne dois pô être le seul à le penser
et il se met où ce petit script? (et le blabla ca correspond à quoi?)

moi je veux bien utiliser le onplayerdeath. mais tout le monde ne s'y connait pas vraiment. si quelqu'un pouvait me pondre exactement le script à mettre dedans avec explications pas à pas, ça ne me dérangerai pas du tout!

Bon ca va peut-etre en faire rire beaucoup, mais j'ai essayé (je dis bien essayé) de faire un script.
Voila ce que je veux : le gardien voit un PJ mort, il va vers lui et le rezu
Voila ce que ca donne à peu pres

Code PHP:


void main
()
{
//
object oPC,oGardien;
//
oPC GetLastPlayerDied();
oGardien GetObjectByTag("vost");
float fDuree=1.0;

if(
PJmort)// je sais pas quel ligne il faut mettre pour l'action PJ mort!
{
if(
GetDistanceToPC(oPC))<=20.0)//
{

AssignCommand(oGardien,ActionCastSpellAtObject(SPELL_RESURRECTION,oPC,METAMAGIC_ANY,TRUE));

Certains vont surement se dire que ca ressemble à rien. en plus, il met met erreur : à la ligne 14 (if(GetDistanceToPC...)) ERREUR NO RIGHT BRACKET ON EXPRESSION

je sais pas du tout ce que ca veut dire. Mais bon, ca doit pas etre compliqué de faire un mini script "le gardien voit un mort et va le rezu dans la seconde"!
Citation :
Provient du message de xelone
et il se met où ce petit script? (et le blabla ca correspond à quoi?)

moi je veux bien utiliser le onplayerdeath. mais tout le monde ne s'y connait pas vraiment. si quelqu'un pouvait me pondre exactement le script à mettre dedans avec explications pas à pas, ça ne me dérangerai pas du tout!

Bon ca va peut-etre en faire rire beaucoup, mais j'ai essayé (je dis bien essayé) de faire un script.
Voila ce que je veux : le gardien voit un PJ mort, il va vers lui et le rezu
Voila ce que ca donne à peu pres

Code PHP:


void main
()
{
//
object oPC,oGardien;
//
oPC GetLastPlayerDied();
oGardien GetObjectByTag("vost");
float fDuree=1.0;

if(
PJmort)// je sais pas quel ligne il faut mettre pour l'action PJ mort!
{
if(
GetDistanceToPC(oPC))<=20.0)//
{

AssignCommand(oGardien,ActionCastSpellAtObject(SPELL_RESURRECTION,oPC,METAMAGIC_ANY,TRUE));

Certains vont surement se dire que ca ressemble à rien. en plus, il met met erreur : à la ligne 14 (if(GetDistanceToPC...)) ERREUR NO RIGHT BRACKET ON EXPRESSION

je sais pas du tout ce que ca veut dire. Mais bon, ca doit pas etre compliqué de faire un mini script "le gardien voit un mort et va le rezu dans la seconde"!

Hummm c'est qu'en fait, il a une parenthèse de trop .

Code PHP:


void main
()
{
//
object oPC,oGardien;
//
oPC GetLastPlayerDied();
oGardien GetObjectByTag("vost");
float fDuree=1.0;

if(
PJmort)// je sais pas quel ligne il faut mettre pour l'action PJ mort!
{
if(
GetDistanceToPC(oPC)<=20.0)//
{

AssignCommand(oGardien,ActionCastSpellAtObject(SPELL_RESURRECTION,oPC,METAMAGIC_ANY,TRUE));

heuuu si cela venait aussi de là...
Mais as tu rajouté les "}" qui manquent???

Code PHP:

void main()
{
//
object oPC,oGardien;
//
oPC GetLastPlayerDied();
oGardien GetObjectByTag("vost");
float fDuree=1.0;
// déclare au moins ton PJmort
int PJmort;


if(
PJmort)// je sais pas quel ligne il faut mettre pour l'action PJ mort!
{
if(
GetDistanceToPC(oPC)<=20.0)//
{

AssignCommand(oGardien,ActionCastSpellAtObject(SPELL_RESURRECTION,oPC,METAMAGIC_ANY,TRUE));
}

}


Vi lol si la fonction n'existe pas c'est pas facile pour faire marcher le script . Et moi qui ne vérifie même pas dans la liste des fonctions ^^ Honte à moi
bon on avance. c'est bon pour cette ligne.

mais c'est pas tout : j'ai mis "PJ mort" mais je suppose que c'est pas cette ligne qu'il faut mettre

et puis, si quelqu'un pouvait me dire si ce que j'ai fait ressemble un peu à quelque chose. parce que j'ai fait ce script en m'inspirant de plusieurs autres. donc je sais meme pas si toutes les lignes vont me servir!!

et puis je dois le mettre dans quel script? dans le "On HeartBeat"?
Voilà le script corrigé
Code PHP:

//://///////////////////////////
//:// Instructions & Script ////
//://   By Ange Musicien    ////
//://      For Xelone       ////
//://///////////////////////////

/*
    Instructions :
   1- Copier le script OnDeath existant sans le void main()
      et sans les { } au debut et a la fin.
   2- Supprimer dans ce script la phrase

          /*** Tu mets ton script de OnDeath normal ici. ***/
                                                                      /*
      et coller le script OnDeath a la place.
   3- Placer un waypoint de tag "WP_center_arena" au centre de l'arene.
   4- Placer ce script dans le OnDeath.
   5- Créer un gardien de tag "vost"
*/

//://///////////////////////////
//:// Script OnPlayerDeath  ////
//://///////////////////////////

void main()
{
//
int nArena;
object oPC,oGardien,oWP;
location lLoc;
float fDistance;
//
oPC GetLastPlayerDied();
oGardien GetObjectByTag("vost");
SetLocalLocation(oGardien,"location_de_depart",GetLocation(oGardien));
oWP GetWaypointByTag("WP_center_arena");
fDistanceGetDistanceBetween(oWP,oPC);
//
if(fDistance <= 15.0)
 {
 
AssignCommand(oGardien,ActionMoveToLocation (GetLocation(oPC),FALSE) );
 
AssignCommand(oGardien,ActionCastSpellAtObject(SPELL_RESURRECTION,oPC,METAMAGIC_ANY,TRUE));
 
AssignCommand(oGardien,ActionMoveToLocation (GetLocalLocation(oGardien,"location_de_depart"),FALSE) );
 }
//
else
 {
/*** Tu mets ton script de OnDeath normal ici. ***/}

Si tu y arrives pas avec ça, tu es manchot

Ange

PS : il est possible que j'ai oublié des phases dans les instructions ou dans le script... Dites-le moi
je vais essayer ca mais...

ça marche :

j'ai mis dans le OnHeartBeat du npc ceci

Code PHP:

void main()
{
//
object oPC,oGardien;
//
oPC GetLastPlayerDied();
oGardien GetObjectByTag("vost");

AssignCommand(oGardien,ActionCastSpellAtObject(SPELL_RESURRECTION,oPC,METAMAGIC_ANY,TRUE));

y a juste un petit problème : une fois qu'il m'a ressucité, il continue à me suivre et à me essayer de me rezu.
je suppose qu'il faut rajouter une petite ligne mais quoi?


edit : c'est nickel ! merci ange, ca fonctionne tres bien! je vais garder ca, mais si quelqu'un pouvait me dire la ligne qu'il manque dans mon script! juste pour savoir.

merci à tous
Répondre

Connectés sur ce fil

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