BIND, le PJ réapparaît près du relais qu'il a choisis.

Répondre
Partager Rechercher
J'ai vu sur un serveur persistant (Mersifall) une sorte de tombe se trouvant au centre de la ville. Il y en a à chaque ville en fait, faisant office de relais ; je m'explique : Si vous engagez la conversation avec cette pierre, elle vous proposera de vous "lier" avec, vous permettant ainsi, après votre mort, de réapparaître tout prêt. Vous avez donc le choix de réapparaître où vous voulez en somme. Je crois que cette tombe s'appelle "Bind". Vous savez où je pourrais trouver ça ?
Citation :
Vous savez où je pourrais trouver ça ?
Ouaip, dans Dark Age of Camelot


Plus sérieusement, je dirais que ce bidule doit être facilement scriptable. Non pô que ce script est introuvable, c'est juste que le faire doit être intéressant et pô trop prise de tête pour une personne ayant fait tous les tutorios de not'forum

1- Le PJ clique sur la pierre de bind. Dans le OnUsed, on stocke une variable location grâce à SetLocalLocation.

2- Dans le OnDeath du module, on récupére la valeur stocké sur le PJ et on lui fait faire un JumpToLocation.

À noter qu'on peut même ajouter le système de récupération des pt d'xp grâce à sa tombe. P'tet un peu plus compliqué à faire car il faut utiliser des tokens custom pour le nom du plaçable
Non je ne sais pas ou tu peux le trouver mais ça n'est pas compliqué.
Si c'est pour un monde persistant, le problème c'est que je ne sais pas quel sont tes fonctions pour gérer les variables persistantes ...
En ignorant ce facteur donc, au moment ou le PJ se lie à la pierre:
SetLocalLocation(oPC, "Respawn_loc", GetLocation(OBJECT_SELF));
Je t'avais prévenu , j'ignore délibérément le problème

Et dans le script de respawn tu fais:
location lRespawnLoc = ?? GetLocalLocation(oPC, "Respawn_Loc");
AsssignCommand(oPC, JumpToLocation(lRespawnLoc));
Re: BIND, le PJ réapparaît près du relais qu'il a choisis.
Citation :
Provient du message de Mel Ethybem
J'ai vu sur un serveur persistant (Mersifall)
Si il sont sympas, pas trop avares sur les scripts et un forum, tu peux leur demander gentillment qu'il te file ça non ?
Oui,... heu... C'est peut-être des chiens !! Et puis de toute façon, le serveur est souvent désert pour ce qui est des MD, donc... merci quand même je vais tenter d'en faire une moi même je pense !
Urf... Pour la ville de dépard du PJ tu as une LocalLocation? Si oui quel est son nom?
Sinon, par hasard, le problème ce ne serait pas que tu appelle le JumpToLocation alors que le PJ est mort? Il me semble que ça ne marche pas, il faut le faire après l' EffectResurection().
Ecoute, pour parler franchement, je suis une 'pine' en script... donc, je peux juste te donner le nom d'un waypoint qu'est WP_Pronaos ..... je sais si ça te suffit. Le module n'est pas très concret ; il a juste été ouvert pour faire cet exercice donc si tu veux tu peux inventé tout ce que tu veux ! Et encore merci !
Bon, alors tu commence par aller chercher le script nw_o0_respawn (le script de Respawn).

Tu enlèves tout ce qu'il y a dans le main() (Attention seulement dans le main! pas les fonctions définies au-dessus) et tu le remplaces par ça:
Note Il n'y aura pas de pénalité de respawn, je n'ai pas le script d'origine sous les yeux...

Code PHP:

void main()
{
    
object oRespawner GetLastRespawnButtonPresser();
    
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oRespawner);
    
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oRespawner)), oRespawner);
    
RemoveEffects(oRespawner);
    
// GetLocalLocation "n'a pas de valeur de retour par defaut" (lexicon)
    // (je me demande ce que cela veut dire), donc on utilise une autre variable si le PJ
    // est lie a une pierre.
    
if(GetLocalInt(oRespawner"LINKED"))
        
AssignCommand(oRespawnerJumpToLocation(GetLocalLocation(OBJECT_SELF"Respawn_Loc")));
    else
        
AssignCommand(oRespawnerJumpToObject(GetWaypointByTag("WP_Pronaos")));

Ensuite tu crées le script suivant, appelons le "link":
Code PHP:

void main()
{
    
object oPC  GetPCSpeaker();
    
SetLocalInt(oPC,"LINKED",1);
    
SetLocalLocation(oPC,"RESP_LOC",GetLocation(OBJECT_SELF));

Tu crées la conversation, et dans le ActionTaken de la réponse "oui" (l'action a effectuer... je sais plus en français) tu met le script "link".

Maintenant tu crées tes blueprints de pierres en leur assignant cette conversation (propriétés avancées).
Voilà, si tu as un problème, ou que tu ne comprends pas quelque chose dans un des scripts, n'hésites pas.
Citation :
Provient du message de Sire Pom-pom
Bon, alors tu commence par aller chercher le script nw_o0_respawn (le script de Respawn).

Ou se trouve le script de respawn ? je vexu dire ou je dois le taper ?? (le premier script que tu m'as donné ) ??
Deux solutions: tu ouvres l'éditeur de script, tu presses "ouvrir un fichier", tu coche "afficher toutes les ressources", tu écris nw_o0_resp, et tu vas le voir.
Tu passes par les propriétés du module->événements et tu cliques "éditer" sur le OnPlayerRespawn.

Je te conseille d'aller faire un tour du côté des tutoriaux...
Oui, mais j'ai l'ipression qu'el lisant tes scripts, ça ne marchera que si ya qu'un seule pierre (WP_Pronaos) vu que ce script je dois le taper dans le Module Properties...

T sur que ça marche quand il y a plusieur pierre ?
Citation :
Provient du message de Mel Ethybem
Oui, mais j'ai l'ipression qu'el lisant tes scripts, ça ne marchera que si ya qu'un seule pierre (WP_Pronaos) vu que ce script je dois le taper dans le Module Properties...

T sur que ça marche quand il y a plusieur pierre ?
Il est très bien ce script.
Tu ne vois pas les références aux autres pierres, car elles sont utilisée en OBJECT_SELF.
Seule la pierre par défaut a besoin d'un WP (auquel on fait référence par son nom).

Il te faut créer une conversation que tu assignera a toutes les pierres et qui déclenche le script "link" si le PJ accepte.
Je crois que l'on peu utiliser la même conversation pour toutes les pierres (autant que tu veux en fait)
Pour la pierre, j'ai effectivement zappé une étape :

Faction de la pierre: marchand
cocher utilisable.

Dans le on used:
ActionStartConversation(GetLastUsedBy());

Sinon avec le PNJ je comprend pas. Il est gros ton module?
Verifie que dans nw_o0_respawn le 2e 0 est bien un zéro, et le 1er un o minuscule.

Puis ajoute la phrase (vérifie juste l'orthographe de la fonction, je n'ai pas aurora sous les yeux):

SendMessageToPC(oRespawner,"ca marche !");

Juste avant le "if" du script principal. Compile, va te binder, et fait toi tuer.
Si tu vois a ta mort afficher le message "ca marche !" mais que tu ne respawn pas, c'est que le problème viens du script "link" ou de la conversation.
Si tu ne vois pas le "ca marche !" c'est que le problème viens du script principal (nom ou positionnement probablement)
Citation :
Provient du message de Iridian
Verifie que dans nw_o0_respawn le 2e 0 est bien un zéro, et le 1er un o minuscule.

Puis ajoute la phrase (vérifie juste l'orthographe de la fonction, je n'ai pas aurora sous les yeux):

SendMessageToPC(oRespawner,"ca marche !");

Juste avant le "if" du script principal. Compile, va te binder, et fait toi tuer.
Si tu vois a ta mort afficher le message "ca marche !" mais que tu ne respawn pas, c'est que le problème viens du script "link" ou de la conversation.
Si tu ne vois pas le "ca marche !" c'est que le problème viens du script principal (nom ou positionnement probablement)
Mais, j'ai changé le nom du script moi... donc ya plus ces 0o ou o0... et puis pour l reste... pfiou ! compliqué

Ouais non... ya pas de message qui s'affiche !
Hum... je crois que je comprend merci Iridian
Tu as changé le nom du script, mais dans les propriétés du module c'est toujours nw_o0_respawn qui est sélectionné, non? Si c'est le cas met ton script à la place. C'est ça qui compte pour savoir quel script est lancé...
Répondre

Connectés sur ce fil

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