[problème] Script de mort - respawn

Répondre
Partager Rechercher
Bonjour tout le monde (ou bonsoir plutôt )
dites j'ai un soucis avec mon script de mort... Je le mets sur le On_Death du module bien sûr

Quand on meurt pas de problème l'écran de mort s'affiche... Mais quand on appuie sur le bouton "respawn", le module n'éxécute pas le script qui est mis sur le OnRespawn Il éxécute un script obscure que je n'arrive toujours pas à trouver et qui fait que le joueur est réssucité (avec tous ses points de vie) et est seulement affecté par l'hébètement et une mobilité réduite...

Voilà mes scripts (enfin ce ne sont pas les miens je suis une vraie quiche )

Code:
#include "ginc_death"
 
 void main()
 {
 object oDead = GetLastPlayerDied ();
 ShowProperDeathScreen (oDead);
 }

ShowProperDeathScreen étant une fonction qui affiche l'écran de repawn (elle se trouve dans ginc_death) en fonction du jeu multi ou non... bon j'ai pas besoin de faire un jeu solo mais là n'est pas le problème

Code:
 // Show appropriate Death screen for Single & Multiplayer
 void ShowProperDeathScreen( object oPC=OBJECT_SELF )
 {
 	// Force PC into original character
 	oPC = SetOwnersControlledCompanion( oPC );
 
 	int bWaitForHelp = FALSE;
 	int bRespawn = FALSE;
 	int bLoadGame = FALSE;
 	int bMultiplayer = !GetIsSinglePlayer();
 	
 	// Wait For Help, Respawn options only available in MP
 	if ( bMultiplayer == TRUE )
 	{
 		bWaitForHelp = TRUE;
 		bRespawn = TRUE;
 		bLoadGame = GetIsPCHost(oPC);
 	}
 	else
 	{
 		bWaitForHelp = FALSE;
 		bRespawn = FALSE;
 		bLoadGame = TRUE;
 	}
 
 	ShowDeathScreen( oPC, TRUE, bRespawn, bLoadGame, bWaitForHelp );
 	SetIsDeathPopUpDisplayed( oPC, TRUE );
 }

Sur le OnRespawn du module je mets

Code:
void main ()
 {
 object oRespawn = GetLastRespawnButtonPresser();
 object oDest = GetObjectByTag ("KTXRespawn");
 
 
 ApplyPenalty (oRespawn);
 object oWaypoint = GetWaypointByTag("KTXRespawn");
 location ktxLocation = GetLocation(oWaypoint);
 AssignCommand (oRespawn,ActionJumpToLocation(ktxLocation));
 }
(applypenalty c'est pour enlever 50x(niveau du joueur) n points d'xp et 10% d'or avec un max de 10 000. Bon la fonction... fonctionne )



vous avez une idée ? HEEEEEEEEEEEEEEEEEEEELLLP
(nan parceque pendant ce temps les PJ se trimballe dans tout le module sans craindre la mort ... pas fous les pjs lol )
bon j'ai trouvé des trucs dans mes recherches
quand on appelle ce code (ci dessous) ça ouvre le pop up de mort

Code:
ShowDeathScreen( oPC, TRUE, bRespawn, bLoadGame, bWaitForHelp );
quand on clique sur respawn on active le script gui_death_respawn qui lui engendre la resurrection et l'effet hébété + déplacement réduit par défaut.

je n'arrive pas à modifier ce gui_death_respawn afin qu'il téléporte le joueur dans un endroit... comprend pô.. hier tout a foiré le pop up ne se lançait même pas

pourtant j'ai rajouter ces lignes de script dans le gui_death_respawn
Code:
object oPC = OBJECT_SELF ;
object WP_KtxRespawn = GetWaypointByTag ("ktx_respawn"); 
//// Ktx_respawn étant le TAG du waypoint vers lequel les pj doivent être téléportés
location l_Ktxrespawn = GetLocation (WP_KtxRespawn);
 
AssignCommand (oPC , ActionJumpToLocation (l_Ktxrespawn));
mais il ne fonctionne pas... pourtant il se compile bien.

question N°2 : quelle est l'utilité du gui_death_respawn_self ?
Citation :
Publié par nuanda
A tu essayer un DelayCommand sur ton action ?
Je me souviens qu'il y avait souvent ce genre de problèmes avec certaines actions.
oui j'ai essayé et ça ne marchait pas.
j'ai trouvé la solution

fallait mettre le Jumpto dans le gui_death_respawn... et non dans le script de respawn bizarre mais ça fonctionne très bien comme ça.

Donc voici mes script (merci Nek Cheitan je me suis appuyé sur ses script de ValProfond )


Dans le OnDeath du module



Code:
#include "ginc_death"
 
 void main()
 {
 	object oPlayer = GetLastPlayerDied();
 		ShowDeathScreen(oPlayer, TRUE, TRUE, FALSE, TRUE);
 	SetIsDeathPopUpDisplayed(oPlayer, TRUE); 
 }

Dans le OnRespawn


Code:
#include "nw_i0_plot"
 #include "ginc_death"
 
 ///// ******************************************************************************\\\\\\ 
 void ApplyPenalty(object oRespawner)
 ///// ******************************************************************************\\\\\\ 
 // un script qui enlève 10% de l'or avec un max à 10 000 PO et 50xp par niveau du joueur
 {
 
 	int nXP = GetXP(oRespawner);
 	int nPenalty = 50 * GetHitDice(oRespawner);
 	int nHD = GetHitDice(oRespawner);
 	// * You can not lose a level with this respawning
 	int nMin = ((nHD * (nHD - 1)) / 2) * 1000;
 
 	int nNewXP = nXP - nPenalty;
 	if (nNewXP < nMin)
 	   nNewXP = nMin;
 	SetXP(oRespawner, nNewXP);
 	int nGoldToTake =	FloatToInt(0.10 * GetGold(oRespawner));
 	// * a cap of 10 000gp taken from you
 	if (nGoldToTake > 10000)
 	{
 		nGoldToTake = 10000;
 	}
 	AssignCommand(oRespawner, TakeGoldFromCreature(nGoldToTake, oRespawner, TRUE));
 	DelayCommand(4.0, FloatingTextStrRefOnCreature(58299, oRespawner, FALSE));
 	DelayCommand(4.8, FloatingTextStrRefOnCreature(58300, oRespawner, FALSE));
 
 if(GetIsDeathPopUpDisplayed(oRespawner))
 {
 RemoveDeathScreens(oRespawner);
 }
 }
 
 ///// ******************************************************************************\\\\\\ 
 
 void main()
 {
 	object oRespawn = OBJECT_SELF;	//GetLastRespawnButtonPresser();
 
 	//Application des effets du respawn
 	if(GetIsDeathPopUpDisplayed(oRespawn))
 	{
 		RemoveDeathScreens(oRespawn);
 	}
 
 	ApplyPenalty(oRespawn);
 }

et un script qu'il faut nommer gui_death_respawn (c'est le script appelé par le pop up de mort quand on appuit sur "respawn"

Code:
// gui_death_respawn.nss
 
 #include "ginc_death"
 
 
 void main()
 {
 
 ///// au cas où, voici l'ancien script
 ///// ******************************************************************************\\\\\\
 		
 ///// ******************************************************************************\\\\\\
 
 	ExecuteScript("SCRIPT _DE_RESPAWN", OBJECT_SELF); 
 // mettre le nom du script utilisé dans le OnRespawn du module
 
 	object oUse = OBJECT_SELF ;
 	object oDest = GetObjectByTag ("TAG_DU_WAYPOINT_DE_RESPAWN");
 // mettre le TAG du waypointsur lequel les PJs vont être téléportés
 	object oWaypoint = GetWaypointByTag("TAG_DU_WAYPOINT_DE_RESPAWN");
 	location ktxLocation = GetLocation(oWaypoint);
 	AssignCommand (oUse, ActionJumpToLocation(ktxLocation));
 		ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oRespawn);
 		ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oRespawn)/5), oRespawn);
 	RemoveEffects(oRespawn);
 		
 }
oups scusez moi tellement content d'avoir trouvé la solution j'en ai oublié le plus important..


MERCI POUR VOTRE AIDE !

*s'en va se faire flageller pour cet innommable oubli*
Citation :
Publié par KorTeX


et un script qu'il faut nommer gui_death_respawn (c'est le script appelé par le pop up de mort quand on appuit sur "respawn"

Code:
// gui_death_respawn.nss
 
 #include "ginc_death"
 
 
 void main()
 {
 
 ///// au cas où, voici l'ancien script
 ///// ******************************************************************************\\\\\\
 
 ///// ******************************************************************************\\\\\\
 
     ExecuteScript("SCRIPT _DE_RESPAWN", OBJECT_SELF); 
 // mettre le nom du script utilisé dans le OnRespawn du module
 
     object oUse = OBJECT_SELF ;
     object oDest = GetObjectByTag ("TAG_DU_WAYPOINT_DE_RESPAWN");
 // mettre le TAG du waypointsur lequel les PJs vont être téléportés
     object oWaypoint = GetWaypointByTag("TAG_DU_WAYPOINT_DE_RESPAWN");
     location ktxLocation = GetLocation(oWaypoint);
     AssignCommand (oUse, ActionJumpToLocation(ktxLocation));
         ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oRespawn);
         ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oRespawn)/5), oRespawn);
     RemoveEffects(oRespawn);
 
 }
Humm ce script ne compile pas chez moi... variable non définit il me semble... j'ai raté quoi?
Citation :
Publié par KorTeX


et un script qu'il faut nommer gui_death_respawn (c'est le script appelé par le pop up de mort quand on appuit sur "respawn"

Code:
// gui_death_respawn.nss
 
 #include "ginc_death"
 
 
 void main()
 {
 
 ///// au cas où, voici l'ancien script
 ///// ******************************************************************************\\\\\\
 
 ///// ******************************************************************************\\\\\\
 
     ExecuteScript("SCRIPT _DE_RESPAWN", OBJECT_SELF); 
 // mettre le nom du script utilisé dans le OnRespawn du module
 
     object oUse = OBJECT_SELF ;
     object oDest = GetObjectByTag ("TAG_DU_WAYPOINT_DE_RESPAWN");
 // mettre le TAG du waypointsur lequel les PJs vont être téléportés
     object oWaypoint = GetWaypointByTag("TAG_DU_WAYPOINT_DE_RESPAWN");
     location ktxLocation = GetLocation(oWaypoint);
     AssignCommand (oUse, ActionJumpToLocation(ktxLocation));
         ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oRespawn);
         ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oRespawn)/5), oRespawn);
     RemoveEffects(oRespawn);
 
 }
Humm ce script ne compile pas chez moi... variable non définit il me semble... j'ai raté quoi?
Tu ne définis pas qui/quoi est oRespawn. Alors du coup, forcément si le script ne sait pas sur qui appliquer les effets, ça marche moins bien.
J'imagine que si tu remplaces ce oRespawn par oUse, ça devrait mieux fonctionner.
Répondre

Connectés sur ce fil

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