Respawn
Tout d'abord merci à Jedaï et à Tyn' pour m'avoir grandement aidé sur ce #%£$*% de script !
Donc comme le titre l'indique c'est un script de respawn. Ben oui, je trouve pas ça très réaliste que le joueur fonce de le tas et meure 36 fois en réssucitant de suite pour avoir à l'usure le vilain méchant en face. Alors voilà ce que je propose dans mon module :
- le joueur est dans un Monastère et reçoit pour mission de retrouver une arme magique dans la forêt proche. Bon. Tant qu'il n'a pas trouvé l'arme, il peut crever autant de fois, à son respawn il est téléporté au temple du monastère avec 1PV et il doit aller voir le guerrisseur avant de repartir à l'assaut.
- une fois l'arme trouvée, le monastère est sensé être détruit, et donc le joueur ne peut plus être téléporté au temple. Et c'est là que ça devient intéressant niark.gif : si le joueur meurt et respawn, hop!, un pt de constit en moins. Et oui, carrément ! Ca a le mérite de faire réfléchir et à plus utiliser le bouton Save Game / Load Game que Respawn... (et ça colle plus à une règle de AD&D qui disait qu'on ne pouvait être réssucité qu'autant de fois qu'on avait de pts de constit).
Alors avant tout, créez 10 "objets de créature" de type "peau de créature" ayant chacun comme propriété une pénalité d'un pt de constit' et de blueprint "constit1" ; "constit2" ; "constit3" etc... (donc l'objet "constit1" avec une pénalité d'un point, l'objet "constit2" avec une pénalité de 2 pts etc...).
SURTOUT n'oubliez pas de cocher la case "Identifié", sinon ça ne marchera pas ! (on ne peut pas utiliser un objet non-identifié !)
Voici donc le script :
#include "nw_i0_plot"
void main()
{
object oRespawner = GetLastRespawnButtonPresser( );
ApplyEffectToObject( DURATION_TYPE_INSTANT,EffectResurrection( ),oRespawner );
if ( !GetLocalInt( GetModule( ), "get_armeMGK" ) == 0 )
{
string sDestTag = "RespawnPoint";
if ( GetIsObjectValid( GetObjectByTag( sDestTag ) ) )
{
if ( sDestTag == "RespawnPoint" )
{
object oPriest = GetObjectByTag( "NW_DEATH_CLERIC" );
AssignCommand( oPriest, DelayCommand( 2.1, PlayVoiceChat( VOICE_CHAT_TALKTOME, oPriest ) ) );
SetLocalLocation( oRespawner, "NW_L_I_DIED_HERE", GetLocation( GetLastRespawnButtonPresser( ) ) );
SetLocalInt( oRespawner, "NW_L_I_DIED", 1 );
SetLocalObject( oPriest, "NW_L_LASTDIED", GetLastRespawnButtonPresser( ) );
}
object oSpawnPoint = GetObjectByTag( sDestTag );
SetLocalInt ( oRespawner, "mort", 1 );
AssignCommand( oRespawner,JumpToLocation( GetLocation( oSpawnPoint ) ) );
}
}
else
{
object oRez = GetLastRespawnButtonPresser( );
ApplyEffectToObject( DURATION_TYPE_INSTANT,EffectHeal( GetMaxHitPoints( oRespawner ) ), oRespawner );
RemoveEffects( oRespawner );
int nNbRez = GetLocalInt( oRez, "nNbRez" );
nNbRez++;
if ( nNbRez <=10 )
{
DestroyObject( GetItemInSlot( INVENTORY_SLOT_CARMOUR, oRez ) );
object oPenRez = CreateItemOnObject( "constit"+IntToString( nNbRez ), oRez );
AssignCommand( oRez, ActionEquipItem( oPenRez, INVENTORY_SLOT_CARMOUR ) );
SetLocalInt( oRez, "nNbRez", nNbRez );
}
}
}
Donc pensez surtout à bien nommer les BLUEPRINTS (et pas les tags) de vos objets de constit correctement, ainsi que le WP du temple si vous en mettez un...
J'espère que ceci vous aidera et vous évitera d'y passer des jours comme moi !