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

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

[Script] Modifier les règles de changement de niveau

Par Daynos le 14/10/2002 à 15:06:44 (#2333540)

Posté par Kemay :

Script modifiant les règles de changement de niveau

1. Nom du script: Conditions sur le passage de niveau

2. Qu'est-ce ça fait: Si un personnage ne remplit pas les conditions necessaires, après être passé de niveau il est "renvoyé" aux Classes/Niveaux précédant le passage de niveau.

ATTENTION: Si un personnage essaie de changer de commencer une nouvelle classe alors qu'il ne remplit pas les conditions définies, son personnage deviendra niveau 0 dans la nouvelle classe, ce qui peut rendre le personnage totalement inutilisable car le jeu considère les personnages niveau 0 comme corrompus. Si vous utilisez un script de ce genre, prévenez vos joueurs que s'ils essaient de commencer une nouvelle classe sans suivre l'entraînment correspondant, il risquent tout simplement de foutre en l'air leur perso

3. Notes: Le script lui même est un include. c'est à dire que pour utiliser les fonctions qu'il contient dans un script, ce dernier doit commencer par : #include "nom_donné_au_script_inclus"

4. Le script

/*-----------------------------------------------------------------------------
Conditions sur le Passage de Niveau
------------------------------------------------------------------------------*/
///////////////////////////////////////////////////////////////////////////////
//Interface
///////////////////////////////////////////////////////////////////////////////

//A placer dans l'event onLevelUp du module
//Verifie si un joueur qui vient de passer de niveau etait autorise
//a gagner un niveau dans la classe ou il est passe
//Si ce n'est pas le cas, annule le passage de niveau ;
//Si c'est le cas reinitialise les variables pour le prochain niveau
//sMessage sera envoye au joueur s'il passe de niveau dans une
//classe non autorisee
void CheckClassLevelled (string sMessage = "Vous n'avez pas
ete forme pour passer de niveau dans cette classe.");

//Autorise oPC a passer de niveau dans une classe CLASS_TYPE
//sMessage est envoye au joueur pour le prevenir
void EnableLevelling (int CLASS_TYPE, object oPC, string sMessage = "Vous pouvez maintenant passer de niveau dans la
classe pour laquelle vous avez ete forme");

//Empeche oPC de passer de niveau dans une classe CLAS_TYPE
void DisableLevelling (int CLASS_TYPE, object oPC, string sMessage = ");

//Retourne le nombre d'xp necessaire pour atteindre le niveau Level
int GetNextLevelExp(int Level);

//Retourne le niveau global de oPC (cumul de toutes ses classes)
int GetTotalLevel(object oPC);

//Verifie si oPC a assez d'xp pour passer de niveau
//retourne TRUE si c'est vrai, FALSE si c'est faux
int CheckXP(object oPC);

//Verifie si oPC a assez d'xp pour passer de niveau
//Si oui, sMessage est envoye a oPC pour l'informer des
//conditions de passage de niveau
void OptionCheckXP(object oPC,string sMessage="Avant de pouvoir passer de niveau,
vous devez suivre l'entrainement approprie");

///////////////////////////////////////////////////////////////////////////////
// Les Nouvelles fonctions
///////////////////////////////////////////////////////////////////////////////

void CheckClassLevelled (string sMessage){
//definir oPC comme etant le joueur qui vient de passer de niveau
object oPC = GetPCLevellingUp();
//Verifier que le joueur soit passe de niveau dans une classe pour
//laquelle il remplit les conditions
int iClass = 0;
while (iClass < 11) {
//Si il est passe de niveau dans une classe non autorisee
if ( GetLocalInt(oPC,"OldClass"+IntToString(iClass)) < GetLevelByClass(iClass,oPC)
&& GetLocalInt(oPC,"Class"+IntToString(iClass)+"Allowed")==0 ){
//Retenir le total de points d'experience de oPC au moment
//du passage de niveau
int StoredXP = GetXP(oPC);
//le ramener au niveau/classe precedant le passage de niveau
SetXP(oPC,GetNextLevelExp(GetTotalLevel(oPC)-1)-1);
//l'informer qu'il n'est pas passe de niveau dans la bonne classe
SendMessageToPC(oPC,sMessage);
AssignCommand(oPC,ClearAllActions());
SetXP(oPC,StoredXP);}
//Si tout se passe bien reinitialiser les conditions pour le prochain niveau
else DisableLevelling (iClass,oPC);
iClass++; }
}


void EnableLevelling (int CLASS_TYPE, object oPC,string sMessage){
//Retenir les niveaux de oPC dans chaque classe
int iClass = 0;
while (iClass < 11) {
SetLocalInt(oPC,"OldClass"+IntToString(iClass),GetLevelByClass(iClass,oPC));
iClass++; }
//Autoriser le passage de niveaux dans la classe CLASS_TYPE
SetLocalInt(oPC,"Class"+IntToString(CLASS_TYPE)+"Allowed",1);
//Informer le joueur
SendMessageToPC(oPC,sMessage); }

void DisableLevelling (int CLASS_TYPE, object oPC,string sMessage){
//Empecher le passage de niveaux dans la classe CLASS_TYPE
SetLocalInt (oPC,"Class"+IntToString(CLASS_TYPE)+"Allowed",0);
SendMessageToPC(oPC,sMessage); }


int GetNextLevelExp(int Level) {
int Exp = 0;
int i = 1;
while (i Exp ) {
SendMessageToPC(oPartyMember,sMessage); }
oPartyMember = GetNextFactionMember(oPC, TRUE); }
}

int CheckXP(object oPC){
int TotalLevel = GetTotalLevel(oPC);
int Exp = GetNextLevelExp(TotalLevel);
if ( GetXP(oPC) > Exp ) return TRUE;
return FALSE; }



Utilisation: Pour utiliser les fonctions de ce script dans un module :

1) Créer un nouveau module avec le ToolSet ou en ouvrir un existant pour le modifier.

2) Ouvrir le Script Editor (Rubrique Tools de la barre d'outil).

3) Recopier le script ci-dessus et enregistrer le sous le nom de votre choix (préférablement facile a retenir, genre :levelup_include)

4) Dans les proprietes du modules (Rubrique Edit de la barre d'outil), onglet Events, éditer le OnLevelUp event :
#include "levelup_include"
void main()
{
CheckClassLeveled("Message que vous voulez envoyer au joueur quand il essaie
de passer de niveau dans une classe pour laquelle il ne remplit pas les conditions");
}


Note: Par defaut le joueur ne peut passer de niveau dans aucune classe.

5 ) Pour autoriser un joueur a passer de niveau dans une classe, il suffit d'utiliser la fonction EnableLevelling (int CLASS_TYPE, object oPC, string sMessage)
Par exemple pour autoriser un personnage a passer un niveau de guerrier après avoir parler à Gunther le Maître d'Arme du coin, il suffit de placer dans l'onglet ActionTaken
du noeud de la conversation où vous voulez que ça se passe :
#include "levelup_include"
void main()
{
EnableLevelling(CLASS_TYPE_FIGHTER, GetPCSpeaker(), "Vous pouvez progresser dans la classe de guerrier!");
}


6) Pour empêcher un joueur a passer de niveau dans une classe, il suffit d'utiliser la fonction DisableLevelling (int CLASS_TYPE, object oPC, string sMessage)
Par exemple, dans le module tout le monde peut passer de niveau comme il veut. Mais si un PC paladin tue Lili la gentille petite fille du coin, il ne pourra plus gagner de niveau de paladin. Il suffirait de placer dans le onDeath event de Lili :
#include "levelup_include"
void main()
{
DisableLevelling (CLASS_TYPE_PALADIN, GetLastKiller(), "Après un telle ignominie, n'espérez plus pouvoir
continuer dans la voie du paladin!");
}


7) CheckXP(object oPC) Pour vérifier si le joueur a assez de points d'experience pour passer de niveau avant de lui offrir la possibilité de remplir les conditions nécessaires au passage de niveau... hmm ce sera plus clair avec un exemple
Gunther (notre fameux maître d'arme de tout à l'heure) ne propose au joueur de l'entraîner que si le joueur a assez de points d'experience pour gagner un niveau. Dans l'onglet Starting Conditional du noeud de la conversation où Gunther propose l'entraînement :
#include "levelup_include"
void main()
{
CheckXP(GetPCSpeaker());
}


8) Optionnel et non testé: prévenir le joueur des conditions générales de passage de niveau du module lorsqu'il atteint le nombre d'xp nécessaire pour passer au niveau supérieur.
Ajouter a tous les onDeath script (le plus simple est de l'ajouter au script par défaut du module) tout en haut du script (avant void main() ) #include levelup_include
et tout en bas du script (juste avant la derniere } ) OptionCheckXP(GetLastKiller(),"message que vous souhaitez envoyer au joueur"); Puis dans le reste du module à chaque fois que vous utilisez l'une des fonctions GiveXPToCreature ou SetXP, ajoutez tout en haut du script #include levelup_include et ajoutez OptionCheckExp(objet_dont_les_xp_ont_ete_modifiés) la ligne suivant celle ou ont été modifiés les xp.

JOL Archives 1.0.1
@ JOL / JeuxOnLine