Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

un coup de main pour un script

Par rincevent le 18/10/2002 à 11:27:20 (#2356569)

c bon je suis dans le bon forum??
je m'explique:
g un feu de camp, et lorsque un pc clic dessus il lance un dialogue lui proposant de se reposer, quand le pc repond oui j'aimerai forcer le repos:
en gros je voudrai le script metant un pc au repos si quelqu'un peu m'aidé ça serai cool merci

Par eMRaistlin le 18/10/2002 à 11:58:52 (#2356673)

c bon je suis dans le bon forum??


Vi.. desole de t'avoir un peu embete sur ca, mais c'est vrai que si tout le monde poste dans le general, ca va devenir le boon's ^^

en gros je voudrai le script metant un pc au repos si quelqu'un peu m'aidé ça serai cool merci


pour ca, il y a void
ActionRest();


donc, tu fais ceci (a inclure dans ton dialogue... je pars du prncipe que tu a lance une conversation. Si tu utilise autre chose, oublie pas de changer le GetPc...)


void main()
{
object oPC = GetPCSpeaker();

AssignCommand(oPC, ActionRest());
}


Ca devrait marcher assez bien... bien entendu, tu peut rajouter autant d'effet que tu veux dans ce petit bout de script pour declencher tout les effets que tu souhaite...

merci beaucoup!!!

Par rincevent le 18/10/2002 à 13:27:18 (#2357107)

mais g oublier de préciser que ma zone est en interdiction de repos, y'a po un moyen d'enlever cette interdiction juste pour cet action et de la remetre apres?
si tu sais comment fair je t'en serai vraiment reconnaissant.
mais de toute façon merci pske ça marche super!

Par eMRaistlin le 18/10/2002 à 13:37:39 (#2357174)

De rien...


pour l'interdiction de repos, je vais regarder, et j'edite mon post si je trouve...

(PS : Le assign command ne force pas cette interdiction ? Je le note, ca peut servir ^^)

Par rincevent le 18/10/2002 à 13:49:30 (#2357234)

ben non le assigne commande ne force pas, merci de regardé j'attend ta réponce avec impatience.
merci encore

Par Symphonik le 18/10/2002 à 13:59:36 (#2357294)

EDIT - question sans interêt -

Par eMRaistlin le 18/10/2002 à 14:10:45 (#2357347)

Arff, j'ai pas reussi a trouver...

Donc, de 2 choses l'une :

- tu garde l'area en No rest, et tu fait un truc du genre ApplyEffect(ANIMATION_LOOPING_SIT_CROSS ) pour donner au PC l'illusion du rest (Le pc va s'assoir, et si tu rajoute un heal, il sera a fond en PV))

Le pb de cette solution : Les lanceurs de sorts ne recuperront pas leurs sorts... C'est un peu nul...


- Tu enleve le No-Rest, et tu affecte dans le script OnRest du module (verifie, mais je crois pas qu'il y ai de onRest dans l'area... si il y en a, utilise plutot celle de l'area) un truc qui utilise ca :

GetLastPCRested() pour avoir le dernier PC repose.

Comme ca, tu lui applique un truc pour le reveiller, ou pour spawner une creature a cote, ce qui va le reveiller (et l'attaquer, par la même occasion...)


Voila tout ce que je vois pour le moment...

Si tu decrivais un peu plus ce que tu veux, je pourrais eventuellement completer...

Par rincevent le 18/10/2002 à 14:23:07 (#2357419)

en fait ce que je veu c que les pc ne puissent se reposer que quand je l'ai décidé (donc au endroit prévu pour ça)
parce que le fait de pouvoir se reposer n'importe où je trouve ça un peu nul (c trop facile, entre chaque combat tu te repose et te voila frai et dispo pour passer l'angle du couloire) c un peu trop simple. voila j'esper avoir été claire dans mes explications.

Par eMRaistlin le 18/10/2002 à 14:28:26 (#2357449)

Un peu comme les saves point de FinalFantasy ^^

Bon, je m'y remet, puis je réédite au besoin...

Par eMRaistlin le 18/10/2002 à 14:47:59 (#2357551)

Suis-je bete...

il te suffit de faire ceci :

OnRest :


void main()
{
//la, je declare les variables.
object oPC = GetLastPCRested();
object oFireCamp = GetObjectByTag("TAG_A_REMPLIR ")


//la, je dis que si le joueur est a plus de 2 metres d'un
//feu de camp dont le tag est TAG A REMPLIR, alors, pas de repos
if (GetDistanceBetween(oPC,oFireCamp)> 2.0f)
{
ClearAllActions();
FloatingTextStringOnCreature(oPC,"Impossible de se reposer si loin du feu de camps...",TRUE);
}
}


Je trouve que cette solution sera surement la plus elegante...

Par Thungril le 18/10/2002 à 14:50:44 (#2357565)

Ca me semble pas mal ça...pour ce que tu veux faire.
http://nwvault.ign.com/Files/scripts/data/1034739964250.shtml

Par eMRaistlin le 18/10/2002 à 14:56:54 (#2357599)

aussi oui ^^

Par rincevent le 18/10/2002 à 15:01:52 (#2357624)

merci beaucoup je teste ça tout de suite

Par rincevent le 18/10/2002 à 15:09:24 (#2357666)

quand j'essai de le compiler voila la réponce:
ERREUR : PARSING VARIABLE LIST
kes ça veu dir?

Par eMRaistlin le 18/10/2002 à 15:12:50 (#2357682)


void main()
{
//la, je declare les variables.
object oPC = GetLastPCRested();
object oFireCamp = GetObjectByTag("TAG_A_REMPLIR ");


//la, je dis que si le joueur est a plus de 2 metres d'un
//feu de camp dont le tag est TAG A REMPLIR, alors, pas de repos
if (GetDistanceBetween(oPC,oFireCamp)> 2.0f)
{
ClearAllActions();
FloatingTextStringOnCreature(oPC,"Impossible de se reposer si loin du feu de camps...",TRUE);
}
}


Desole, j'ai forget la virgule... desole...

Par rincevent le 18/10/2002 à 15:21:03 (#2357722)

je sais je suis chiant mais ça marche tjour po!!
sans ça, c vrailment sympat de m'aider dit le si t'en a mare!

Par eMRaistlin le 18/10/2002 à 15:27:37 (#2357759)

je sais je suis chiant mais ça marche tjour po!!


Comment ca ? un probleme de compilation, ou bien un probleme dans le jeu ?


PS : tu as bien pensé a remplacer le "TAG_A_REMPLIR " par le Tag de ton feu de camp ?

sans ça, c vrailment sympat de m'aider dit le si t'en a mare!


t'inquiete pas pour ca ^^

Par rincevent le 18/10/2002 à 15:35:53 (#2357777)

c un blem de compilation,
ça me dit:
ERREUR : UNKNOWN STATE IN COMPILER
sur les deux déclaration de variable
si tu veus voila mon mail comme ça ça évite d'encombr de forum:
rincevent01@wanadoo.fr
merci encore

Par Symphonik le 18/10/2002 à 16:03:16 (#2357922)

y'a pas une erreur ici ? :
FloatingTextStringOnCreature(oPC,"Impossible de se reposer si loin du feu de camps...",TRUE);

il me semble que la syntaxe correcte doit être :
FloatingTextStringOnCreature("Impossible de se reposer si loin du feu de camps...",oPC,TRUE);

Par eMRaistlin le 18/10/2002 à 16:08:08 (#2357954)

J'etais justement en train de taper...

mince, grille sur le fil ^^


bon, je recapitule pour ceux qui lisent pas les post au debut :

OnRest du module :


void main()
{
object oPC = GetLastPCRested();
object oFireCamp = GetObjectByTag("TAG_A_REMPLIR");
float fDistance = GetDistanceBetween(oPC,oFireCamp);

if (fDistance > 2.0f)
{
AssignCommand(oPC, ClearAllActions());
FloatingTextStringOnCreature("Impossible de se reposer si loin du feu de camps...", oPC,TRUE);
}
}



[Edit : Clear AllActions => AssignCommand(oPC, ClearAllActions())]

Par rincevent le 18/10/2002 à 16:55:20 (#2358167)

c terrible ça marche bien merci beaucoup,
je te doit une fiere chandelle

Par eMRaistlin le 18/10/2002 à 17:00:40 (#2358199)

Surprenant. Essaye avec des string de debug.


void main()
{
object oPC = GetLastPCRested();
object oFireCamp = GetObjectByTag(" TAG_A_REMPLIR ");
float fDistance = GetDistanceBetween(oPC,oFireCamp);

if (fDistance > 2.0f)
{
AssignCommand(oPC, ClearAllActions());
FloatingTextStringOnCreature(" Impossible de se reposer si loin du feu de camps... ", oPC,TRUE);
SendMessageToPC(oPC,"Ca fonctionne pourtant") ;
}
else { SendMessageToPC(oPC, "La distance entre le pc et le feu de camp est : "+FloatToString(fDistance)) ;}
}

Par ruru666 le 24/10/2002 à 15:19:23 (#2397606)

moi je voudrais un truc dans le style mais plus simple : un repos par jour SVP (la nuit si possible).

Merci d avance...

Par eMRaistlin le 24/10/2002 à 15:58:10 (#2397881)

moi je voudrais un truc dans le style mais plus simple : un repos par jour SVP (la nuit si possible).



Euh, je veux bien, mais en fait, c'est terriblement pas plus simple ^^;

Par contre : Repos que la nuit ? ou Que la nuit en Exterieur, ou juste : une fois par jour, quelle que soit l'heure...?

J'ai besoin de renseignement, pasque si tu me dis 1 fois par jour, et que la nuit, un pC qui veut faire la grasse mat ne pourra pas du tout...

Par ruru666 le 24/10/2002 à 23:29:44 (#2401047)

oui repos une fois par jour ou ke ce soit, et si possible la nuit, (mais j en demande pas tps)

Par eMRaistlin le 25/10/2002 à 1:06:35 (#2401540)

bon, moi, je vois que ca :

dans le OnPlayerRest :


void main()
{
object oPC = GetLastPCRested();
int nDejaDodo = GetLocalInt(oPC,"dodo");

if (nDejaDodo==0)
{
if (GetIsNight())
{
SetLocalInt(oPC,"dodo",1);
}
else
{
AssignCommand(oPC,ClearAllActions());
FloatingTextStringOnCreature("Il n'est possible de dormir que la nuit",oPC,FALSE);
}
}
else
{
AssignCommand(oPC,ClearAllActions());
FloatingTextStringOnCreature("Il n'est possible de dormir qu'une seule fois par jour",oPC,FALSE);
}
}


Puis, tu met ca dans le OnHeartBeat du module :


void main()
{
object oPC = GetFirstPC();

if (GetTimeHour()==19)
{
while (oPC != OBJECT_INVALID)
{
SetLocalInt(oPC,"dodo",0);
oPC = GetNextPC();
}
}
}


Avec l'heure de reset de la permission de Dodo a 19heure. Tu peut le modifier facilement (y'a qu'un 19 dans mon script... c'est le bon ^^)


Attention : non-testé... Eventuellement, je veux bien que tu me dise si c'est pas trop lourd (a cause du OnHeartBeat) ou si ca marche pas comme desiré...

Par ruru666 le 25/10/2002 à 8:41:28 (#2402201)

ca a l air de le faire merci bcp !

Par ruru666 le 25/10/2002 à 9:31:16 (#2402427)

bon ben ca marche pa, je pe me reposer des ke tombe la nuit et autant de fois ke je veux... :(

Par eMRaistlin le 25/10/2002 à 10:01:32 (#2402600)

Euh.. ces scripts utilisent getFirstPC. Je sais pas si ca marche en mode solo.

Essaye la meme chose, mais en chargeant un serveur avec ce module, et en te connectant a toi même.

Par ruru666 le 25/10/2002 à 10:26:34 (#2402767)

bien g tester plusieur combo, en tps ke maitre de jeu ou joueur, donc il en resulte ke l on peut dormir entre 2 et 3 fois par nuit, voila ce kil ce passe :

la journee impossible de dormir

des ke l heure arrive on pe dormir, et si on ve redormir un otre fois il me dis impossible une seul fois pa jour, apres cette interdiction il me laisse me reposer environ 3 fois avec un nivo 1 et 2 fois avec mon perso maitre de jeu nivo 20

j en conclus (car je ne suis pa programateur) kil me laisse dormir un laps de tps pendant la nuit autant de fois ke je ve, mais peutetre ais je tord...

Par mobidique le 25/10/2002 à 11:25:27 (#2403199)

Il doit être possible d'eviter de passer par le OnHeartBeat en enregistrant l'heure à laquelle le dernier repos a été réalisé et en interdisant le repos jusqu'au landemain 19H ... C'est à dire interdire le repos pour une durée variable et calculée plutôt qu'une durée constante et déterminée, du coup, kkpart retour au code du HCR qui lui est dans ce dernier cas.

Par eMRaistlin le 25/10/2002 à 11:44:04 (#2403353)

des ke l heure arrive on pe dormir, et si on ve redormir un otre fois il me dis impossible une seul fois pa jour, apres cette interdiction il me laisse me reposer environ 3 fois avec un nivo 1 et 2 fois avec mon perso maitre de jeu nivo 20


Et la nuit d'apres ? Il te bloque a nouveaux une fois ? ou pas du tout ?

Sinon, je pense que ca vient du OnHeartBeat.

ma gestion des repos

Par Symphonik le 25/10/2002 à 14:19:45 (#2404699)

En rapport surtout avec le debut du post (sans rapport immédiat avec la gestion des repos suivant la nuit)

Je mets ici ma façon de gérer les repos à titre d'information
c'est simpliste mais bon ca marche

Création d'un dialogue d_repos

Voulez-vous vous reposer ?
Oui -> execute le script s_repos_ok
Non -> quitte le dialogue sans rien faire

Script s_repos_ok (a n'attacher à rien de spécial, appelé par le dialogue d_repos)

void main()
{
object oPC=GetLastUsedBy();
SetLocalInt(oPC,"dodo",1);
AssignCommand(oPC,ActionRest());
}

Script s_repos (à mettre dans le OnUsed d'un objet, feu de camp, lit , etc)

void main()
{
BeginConversation("d_repos",GetLastUsedBy());
}

Script s_test_rest (à mettre dans le OnPlayerRest du module)

void main()
{
object oPC = GetLastPCRested();
int nDodo = GetLocalInt(oPC,"dodo");
int nDbltext= GetLocalInt(oPC,"evite_double_text");
if(nDbltext==1)
{
SetLocalInt(oPC,"evite_double_text",0);
return;
}
if(nDodo==1)
{
SetLocalInt(oPC,"dodo",0);
SetLocalInt(oPC,"evite_double_text",1);
}
else
{
AssignCommand(oPC,ClearAllActions());
FloatingTextStringOnCreature("Vous devez etre proximite d'un feu de camps",oPC,FALSE);
SetLocalInt(oPC,"evite_double_text",1);
}
}

En gros le perso ne peut se reposer que si il utilise un objet (feu de camp, lit, ce que vous voulez)
je pense que c'est le but de Rincevent je crois...

Par ruru666 le 25/10/2002 à 18:59:24 (#2407303)

bon tout cela ma lair bien sympa mais bon trop de boulo pour tester, n verra plus tard ARGGG vivement c putains de vacances !............

Re: ma gestion des repos

Par rincevent le 26/10/2002 à 10:18:07 (#2410971)

Provient du message de Symphonik
En gros le perso ne peut se reposer que si il utilise un objet (feu de camp, lit, ce que vous voulez)
je pense que c'est le but de Rincevent je crois...


ben oui mais le script qu'il m'a donné marche tres bien pour fair ça... a moin que je me goure et que je ne l'ai pas assé testé??

JOL Archives 1.0.1
@ JOL / JeuxOnLine