scripts de repos et de mort

Répondre
Partager Rechercher
Si ca peux aider quelqu un je vous propose mes scripts de mort/saignement ainsi que mes scripts de repos.

Ces scripts de sont pas tous de moi, certain oui, d autre en partie bref c est une compile adaptée

Le principe :

1) Une dizaine de minute entre les repos et necessaire
2) Le perso tombe inconscient entre 0 et -10 pts de vie, ensuite il est mort. Dans ce cas perte de 50 pt d ex multiplié par le niveau du perso et perte de 10% de l or.
3) en cas de mort, on respawn au dernier endroit ou le perso c est reposé, une tombe apparait a son point de mort ( juste pour le fun).
4) en cas de reboot du serveur, le perso se retrouve teleporté a son dernier point de repos.

Les scripts :

A placer sur le onrest :

Code:
 
 //::////////////////////////////////////////////// 
 //:: Created By: Jonas Boberg aka. zimero 
 //:: Created On: 20021212 
 //:: Modified On: 20030107 
 //::////////////////////////////////////////////// 
 
 //USER ADJUSTABLE VARIABLES 
 //the number of hours the players must wait between full rests 
 //*
 int TIMEBETWEENRESTING=5; 
 //do you want to display the time until next rest in real world minutes? 
 //(default: game hours) 
 //*
 int REALTIMEMINUTES=1; 
 //END USER ADJUSTABLE VARIABLES 
 //*
 
 int CurrentTime(); 
 
 void main() 
 { 
 	//initiate the variables 
 //*
 	object oPC = GetLastPCRested(); 
 	int iCurrentTime, iLastRestTime, iTimeSinceRest, iTimeUntilRest; 
 	float fTimePenalty; 
 
 	switch (GetLastRestEventType()) 
 	{ 
 	case REST_EVENTTYPE_REST_STARTED: 
 		//get the current time 
 //*
 
 		iCurrentTime = CurrentTime(); 
 		//gets the last time the player rested 
 //*
 
 		iLastRestTime = GetLocalInt(oPC,"REST_HOUR"); 
 		//the time (in hours) since the last rest 
 //*
 		iTimeSinceRest = iCurrentTime-iLastRestTime; 
 
 		//stores the second the player begins to rest 
 //*
 
 		SetLocalInt(oPC, "REST_SECOND", GetTimeSecond()); 
 
 		//if the player has never rested before or if the 
 		//necessary time has passed, allow the player to rest 
 //*
 
 		if (iLastRestTime==0 || iTimeSinceRest >= TIMEBETWEENRESTING) 
 		{ 
 			SetLocalInt(oPC, "REST_ALLOWED", TRUE); 
 			
 //*
 //:://////////////////////////////////////////////
 //:: Created By: Brent Knowles
 //:: Created On: November 6, 2001
 //:://////////////////////////////////////////////
 //*
 #include "nw_i0_plot"
 #include "ginc_death"
 
 // Reset reputation
 //*
 void main()
 {
 	object oPlayer = GetLastPlayerDied();
 object oKiller = GetLastHostileActor(oPlayer);
 
 
 
 AssignCommand(oPlayer, ClearAllActions());
 	// * make friendly to Each of the 3 common factions
 //*
 
 	if (GetStandardFactionReputation(STANDARD_FACTION_COMMONER, oPlayer) <= 10)
 	{   SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad
 		SetStandardFactionReputation(STANDARD_FACTION_COMMONER, 80, oPlayer);
 	}
 	if (GetStandardFactionReputation(STANDARD_FACTION_MERCHANT, oPlayer) <= 10)
 	{   SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad
 		SetStandardFactionReputation(STANDARD_FACTION_MERCHANT, 80, oPlayer);
 	}
 	if (GetStandardFactionReputation(STANDARD_FACTION_DEFENDER, oPlayer) <= 10)
 	{   SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad
 		SetStandardFactionReputation(STANDARD_FACTION_DEFENDER, 80, oPlayer);
 	}
 
 
 	location oLoc = GetLocation(oPlayer);
 	object oTombe = CreateObject(OBJECT_TYPE_PLACEABLE,"tombe_joueur",oLoc);
 	
 	
 
 
 // affiche l ecran de respawn
 //*
 
 oPlayer = GetLastPlayerDied();
 				ShowDeathScreen(oPlayer, TRUE, TRUE, FALSE, TRUE);
 		SetIsDeathPopUpDisplayed(oPlayer, TRUE);
 }
Modifier le gui_death_respawn comme ceci :

Code:
 //::///////////////////////////////////////////////
 //:: Generic On Pressed Respawn Button
 //:: Copyright (c) 2001 Bioware Corp.
 //:://////////////////////////////////////////////
 
 //:://////////////////////////////////////////////
 //:: Created By:   Brent
 //:: Created On:   November
 //:://////////////////////////////////////////////
 #include "nw_i0_plot"
 #include "ginc_death"
 #include "ginc_behavior"
 // * Applies an XP and GP penalty
 // * to the player respawning
 //*
 
 void ApplyPenalty(object oDead)
 {
 	int nXP = GetXP(oDead);
 	int nPenalty = 50 * GetHitDice(oDead);
 	int nHD = GetHitDice(oDead);
 	// * 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(oDead, nNewXP);
 	int nGoldToTake =	FloatToInt(0.10 * GetGold(oDead));
 	// * a cap of 10 000gp taken from you
 //*
 
 	if (nGoldToTake > 10000)
 	{
 		nGoldToTake = 10000;
 	}
 	AssignCommand(oDead, TakeGoldFromCreature(nGoldToTake, oDead, TRUE));
 	DelayCommand(8.0, FloatingTextStrRefOnCreature(58299, oDead, FALSE));
 	DelayCommand(8.2, FloatingTextStrRefOnCreature(58300, oDead, FALSE));
 }
 
 void main()
 {
 	object oRespawner = OBJECT_SELF;
 	ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oRespawner);
 	ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oRespawner)), oRespawner);
 	RemoveEffects(oRespawner);
 	
 
 	ApplyPenalty(oRespawner);
 
 //*---------------------------------------------
 //* teleport au dernier point de rest
 //*----------------------------------------------
 object oPC =oRespawner;
 
 
 object oTarget;
 location lTarget;
 string name = GetName(oPC) ;
 
 oTarget = GetWaypointByTag(name);
 
 lTarget = GetLocation(oTarget);
 
 if (GetAreaFromLocation(lTarget)!=OBJECT_INVALID)
 {
 
 AssignCommand(oPC, ClearAllActions());
 
 AssignCommand(oPC, ActionJumpToLocation(lTarget));
 }
 
 //* fin teleport
 
 
 
 
 	RemoveDeathScreens( oRespawner );
 	effect eGroggy = EffectDazed();
 	DelayCommand(0.1,ApplyEffectToObject( DURATION_TYPE_TEMPORARY, eGroggy, oRespawner, RoundsToSeconds( 5 ) ));
 
 	oTarget = oRespawner;
 
 //Visual effects can't be applied to waypoints, so if it is a WP
 //the VFX will be applied to the WP's location instead
 int nInt;
 nInt = GetObjectType(oTarget);
 if (nInt != OBJECT_TYPE_WAYPOINT) 
 ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_UNSUMMON), oTarget);
 
 else ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_UNSUMMON), GetLocation(oTarget));
 }
A placer sur le client on enter

Code:
 void main ()
 {
 //*---------------------------------------------
 //* teleport au dernier point de rest
 //*----------------------------------------------
 object oPC =GetEnteringObject();
 
 
 object oTarget;
 location lTarget;
 string name = GetName(oPC) ;
 
 oTarget = GetWaypointByTag(name);
 
 lTarget = GetLocation(oTarget);
 
 if (GetAreaFromLocation(lTarget)!=OBJECT_INVALID)
 {
 
 
 
 DelayCommand(30.0,AssignCommand(oPC, ClearAllActions()));
 
 DelayCommand(31.0,AssignCommand(oPC, ActionJumpToLocation(lTarget)));
 
 //* fin teleport
 }
 }
Voili voilou, si ca peut aider
Oulah ! Mais completement merdé en ecrivant ce message, il manque un script et un autre et completement melangé.

J essaie de reposter les bons ce soir.
N'étant pas très bon ( voir nul^^) dans le script, je voudrai savoir c'est quoi "onrest" ? et le "client on enter" ? et comment on modifie gui_death_respawn ?
Et enfin y faut juste copier ces script ou y a des modif a faire dessus ou dans le module pour que sa marche. Si y a quelqu'un qui pourrai répondre a ses quelque question sa m'aiderai beaucoup svp
le Onrest c'est le script qu'il faut placé dans les propriétés du module (en l'occurence le script déclenché par le repos)

le On Enter Client, c'est celui déclenché par la connexion d'un client (idem dans propriétés du module)

Les seuls modifications à faire c'est d'enregistrer tes scripts, de les compiler et de les placé aux bons endroits dans les propriétés du module sauf pour le gui_death_respawn qui devra juste avoir ce nom, devra être compilé (c'est le script qui s'éxécute quand le joueur appuies sur respawn)
__________________
http://img91.imageshack.us/img91/9666/yingyangwm8jt3.gif
http://simaon.free.fr/
J'arrive pas a compiler le scripte qui va dans le onrest sa me marque :
" Scripte1.nss(63) : ERREUR : UNKNOWN STATE IN COMPILER
(pourtant en copiant les autre sa marche mais suis la sa marche pas^^)
normal car à partir de la ligne 60 environ c'est un script qu'il faut placé dans le OnDie du modul (script appelé par la mort )


(j'ai fermé ke script, la ligne avec ça, juste avant la 63 )
Code PHP:

 //:://////////////////////////////////////////////
    //:: Created By: Brent Knowles
//:: created on: November 6, 2001 
__________________
http://img91.imageshack.us/img91/9666/yingyangwm8jt3.gif
http://simaon.free.fr/
Sa ma déjà bien aider tes explication, j'ai toujours un problème avec le scripte qui va dans le onrest (j'ai bien séparer le scripte a la mort du PJ celui la y marche) maintenant j'ai se message :
" script1.nss(57) : ERREUR : UNEXPECTED END COMPOUND STATEMENT "

C'est chaud le scripte ^^
Citation :
Publié par malgane
Sa ma déjà bien aider tes explication, j'ai toujours un problème avec le scripte qui va dans le onrest (j'ai bien séparer le scripte a la mort du PJ celui la y marche) maintenant j'ai se message :
" script1.nss(57) : ERREUR : UNEXPECTED END COMPOUND STATEMENT "

C'est chaud le scripte ^^
ah oui c'est normal là le script est pas fini, il manque un break; et des }
Je regarde ça ce soir et je te dis ce qu'il manque

pour ce qui est du scriptage c'est difficile les premières semaines après tu t'en sors essaye de comprendre plus que de recopier, tu verras ça passe à force

par contre évite de t'attaquer à ce genre de script directement ils sont un peu imbuvables
__________________
http://img91.imageshack.us/img91/9666/yingyangwm8jt3.gif
http://simaon.free.fr/
Bon je t'ai fait le script comme je pense qu'il devrait être, il était incomplet en fait, et donc pleins de choses étaient inutiles en l'état

Il va fonctionné mais juste pour empêcher un PJ de se reposer avant 5 heures (heures de jeu)


bref tu vois, mais je ne l'utiliserai pas à ta place.. Faire quelque chose à moitié, c'est pas vraiment faire..

je t'ai mis pleins de commentaires pour t'expliquer le script. Je connais pas ton niveau donc j'ai repris la base

Code PHP:

 // j'ai tout refait.. à chaque reboot du serveur, le joueur pourra se reposer 
   //
   // l'heure à laquelle le PJ s'est reposée est sauvegardée. 
   // si le temps passé est de 5 heures au moins, le repos est autorisé
   // sinon le repos est interrompue 
   
  
void main() 
   { 
   
      
//TIMEBETWEENRESTING est la variable à modifier : c'est le temps pendant 
      // lequel un PJ doit attendre avant de se reposer
      
int TIMEBETWEENRESTING=5
      
// oPC est le dernier joueur qui a appuyé sur la touche REPOS
      // iCurrentTime, iLastRestTime, iTimeSinceRest, iTimeUntilRest sont des nombres entiers
       
object oPC GetLastPCRested(); 
      
int iCurrentTimeiLastRestTimeiTimeSinceRestiTimeUntilRest
  
       
// on rentre dans le vif du sujet : le script de repos s'exécute 4 fois 
      // au début, lorsquun repos est interrompu par le joueur, quand il est
      // interrompu par une créature extérieure, et quand il est fini
      // GetLastRestEventType()permet de savoir quel est l'évènement qui a appelé le 
      // script (en l'occurence REST_EVENTTYPE_REST_STARTED, c'est à dire le début
      
      
      // le switch c'est un peu comme une succession de "if".. dans ce cas là ça veut dire
      // if GetLastRestEventType == REST_EVENTTYPE_REST_STARTED alors tu exécutes ça.
      // à la fin de case XXXX : tu dois avoir break;
       
switch (GetLastRestEventType()) 
       { 
       case 
REST_EVENTTYPE_REST_STARTED
           
// on prend le temps du module en heure 
           
iCurrentTime GetTimeHour() + (GetCalendarDay()*24) + (GetCalendarMonth()*30*24); 
           
// on prend le nombre d'heures depuis le début de l'année 
          // (nombre d'heures) + (nombre de jour x 24) + (nombre de mois X 30 X 24)
        
           
iLastRestTime GetLocalInt(oPC,"REST_HOUR"); 
           
// on regarde si une variable de type nombre entier est sauvegardée sur le joueur
          // si elle n'est pas sauvegardée, la fonction renvoie 0
          
          
iTimeSinceRest iCurrentTime-iLastRestTime// calcul du laps de temps écoulé en heures
           // si la variable n'est pas 0, alors le PJ s'est reposé
          // si en plus le laps de temps est inférieur à 5 on lui interdit le repos
          // à voir si tu veux mettre plutôt "iTimeSinceRest <= TIMEBETWEENRESTING"
          // pour que le temps soit supérieur à 5 et non seulement supérieur OU EGAL à 5
          
if ((iLastRestTime != 0)&& (iTimeSinceRest TIMEBETWEENRESTING)) 
                  {
                  
AssignCommand (oPC    ClearAllActions () ) ;
                  
// Tu peux enlever les slashs pour envoyer un message dans les logs du PJ
                  //SendMessageToPC (oPC, "MESSAGE à envoyé, comme par exemple '' vous n'êtes pas encore fatigué'' ");
                   
}
          
// si tout est OK on sauvegarde le repos du PJ
           
else SetLocalInt (oPC"REST_HOUR"iCurrentTime);
  
      break;
      }
  } 
__________________
http://img91.imageshack.us/img91/9666/yingyangwm8jt3.gif
http://simaon.free.fr/
Jai mis tous bien les scripte ou il faut mais quand je meure ben je respawn pas a mon dernier point de repos, je respawn sur mon corps. Si c'est pour arrivée a sa a la fin sa vaux pas le coup ^^
ah bin oui je sais pas ce que tu voulais lol

dans le Onrest

Code PHP:

void main() 

     
int TIMEBETWEENRESTING=5
     
object oPC GetLastPCRested(); 
     
int iCurrentTimeiLastRestTimeiTimeSinceRestiTimeUntilRest
     
iCurrentTime GetTimeHour() + (GetCalendarDay()*24) + (GetCalendarMonth()*30*24); 
 
 
switch (
GetLastRestEventType()) 
    { 
    case 
REST_EVENTTYPE_REST_STARTED
     
iLastRestTime GetLocalInt(oPC,"REST_HOUR"); 
     
iTimeSinceRest iCurrentTime-LastRestTime;          if ((iLastRestTime != 0)&&(iTimeSinceRest TIMEBETWEENRESTIN))
             {
             
AssignCommand (oPC    ClearAllActions () ) ;
             
// Tu peux enlever les slashs pour envoyer un message dans les logs du PJ
             //SendMessageToPC (oPC, "MESSAGE à envoyé, comme par exemple '' vous n'êtes pas encore fatigué'' ");
             
}
 
     break;
 
         case 
REST_EVENTTYPE_REST_FINISHED :
SetLocalInt (oPC"REST_HOUR"iCurrentTime);
SetLocalLocation (oPC"Respawn"GetLocation (oPC) );
         break;

Dans le gui_death_respawn, après
Code PHP:

 //* teleport au dernier point de rest
//*---------------------------------------------- 
tu remplaces les lignes par celles ci jusqu'à
Code PHP:

//* fin teleport 


voici le code que tu dois mettre
Code PHP:

// modifié dans un post plus bas 


voilà maintenant dis nous ce que tu veux dès le départ et on y arrivera plus rapidement
Moi je vois pas ce que ça apporte, si tous les PJs d'un même groupe meurent, ils vont être téléporté à des endroits différents selon leur dernier repos.. Pas très pratique en terme de jeu mais c'est mon humble avis
__________________
http://img91.imageshack.us/img91/9666/yingyangwm8jt3.gif
http://simaon.free.fr/
tiens d'ailleurs si jamais ton PJ ne s'est pas reposer et qu'il meurt il réssucitera à sa propre place .. donc crée un WP avec comme TAG "WP_DEFAULT_RESPAWN" dans une zone et change la fin du code

Code PHP:

object oPC =oRespawner;
 
 
object oTarget;
location lTarget GetLocalLocation (oPC"Respawn"); 
if (
GetAreaFromLocation(lTarget)!=OBJECT_INVALID)
{
 
AssignCommand(oPCClearAllActions());
 
AssignCommand(oPCActionJumpToLocation(lTarget));
}
 
else 
{
 
AssignCommand(oPCClearAllActions());
 
AssignCommand(oPCActionJumpToLocation(GetLocation (GetWaypointByTag ("WP_DEFAULT_RESPAWN"))));
}
 
//* fin teleport 
__________________
http://img91.imageshack.us/img91/9666/yingyangwm8jt3.gif
http://simaon.free.fr/
Une petite question, gui_death_respawn il faut bien le mettre nul par parsque si c'est le cas ben sa marche toujours pas je rez sur mon corps

Pour un petit récapitulatif :
il faut mettre un script a la connection du client, un autre quand le PJ meure et un a son repos c'est bien sa?
C'est ça sauf que le On Client Enter j'ai pas refais donc va pas marcher

J'ai pas testé le script, et les petites erreurs de syntaxe m'adorent (j'ai pas vraiment le temps de le faire d'ailleurs, mon script de respawn est bon, et je suis sur d'autres scripts plus importants et plus compliqués depuis qu'ils ont refait le walkway... )

De plus pour respawner à un endroit particulier il faut d'abord s'être reposé (sinon la variable n'est pas sauvegardée).
__________________
http://img91.imageshack.us/img91/9666/yingyangwm8jt3.gif
http://simaon.free.fr/
Répondre

Connectés sur ce fil

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