Un exploit bien ennuyant, il suffit de déconnecter et se reconnecter pour récupérer ses sorts et capacités.
Un correctif est pourtant simple.
1ere étape: active le SpellHooking.
Derrière ce nom barbare un concept simple: on configure le module pour lancer un script a chaque lancement de sort.
C'est dans le script sur le chargement du module que l'on met ca
SetLocalString(GetModule(), "X2_S_UD_SPELLSCRIPT", "spell_hook_it");
2eme étape: coder le script de Hooking
Il faut créer un nouveau script appelé "spell_hook_it" (ou un nom que vous lui avez donné dans la commande précédente).
//:: Hook des sorts
//:: spell_hook_it
//:://////////////////////////////////////////////
/*
Ce script est lancé par défaut lorsque l'on utilise les sorts.
Sa fonction première est de mémoriser les sorts lancés
*/
//:://////////////////////////////////////////////
//:: Created By: Léa Andersteen
//:: Created On: 25/06/2015
//:: Last Update: 25/06/2015
//:://////////////////////////////////////////////
#include "x2_inc_switches"
#include "lib_spell_manage"
void main()
{
int nSpell=GetSpellId();
int nSpellDC=GetSpellSaveDC();
int nCastLevel=GetCasterLevel(OBJECT_SELF);
SaveSpell(OBJECT_SELF, nSpell);
}
Vous noterez que j''ai créé une librairie appelée "lib_spell_manage"pour gérer tout ça! C'est plus propre et après, on retrouve plus facilement ses petits.
3ème étape: mettre en place la librairie avec les commandes SaveSpell (entre autres).
//::///////////////////////////////////////////////
//:: Librairie - Gestion des Sorts
//:: LIB_SPELL_MANAGE
//:://////////////////////////////////////////////
/*
Cette librairie contient toutes les fonctions utiles pour la gestion des sorts
*/
//:://////////////////////////////////////////////
//:: Created By: Léa Andersteen
//:://////////////////////////////////////////////
#include "lib_log_manage"
const int ConstNbSorts = 850;
void SaveSpell(object oPC, int nSpellID);
void ResetSpells(object oPC);
void chargementSortsPJ(object oPC);
void SaveSpell(object oPC, int nSpellID)
{
if(GetIsPC(oPC)==TRUE)
{
int nRemainingSpells = GetHasSpell(nSpellID,oPC);
if (nRemainingSpells == 0)
nRemainingSpells = -1;
SetLocalInt(oPC,"SPELL"+IntToString(nSpellID),nRemainingSpells);
sendMessageAuPJ(oPC,1,"Lancement du sort ["+IntToString(nSpellID)+"] en memoire pour"+GetName(oPC)+".");
}
}
void chargementSortsPJ(object oPC)
{
if (GetIsPC(oPC))
{
sendMessageAuPJ(oPC,0,"Ouverture du livre de sort de "+GetName(oPC)+".");
int n = 0;
for(n ; n <=ConstNbSorts ; n++)
{
int iSpellTimes = GetLocalInt(oPC,"SPELL"+IntToString(n));
// Attention si on a 0 c que la variable locale n'existe pas donc rien a faire
if (iSpellTimes!=0)
{
if(iSpellTimes==-1)
iSpellTimes = 0;
while(GetHasSpell(n,oPC)>iSpellTimes)
{
DecrementRemainingSpellUses(oPC,n);
}
}
}
}
}
void ResetSpells(object oPC)
{
int n;
for(n ; n <=ConstNbSorts ; n++)
{
DeleteLocalInt(oPC,"SPELL"+IntToString(n));
}
sendMessageAuPJ(oPC,0,"Relecture du livre de sort de "+GetName(oPC)+".");
}
4me et dernière étape: executer la commande qui charge les sorts mémorisés au démarrage.
Ca se met dans le script de l'évennement ON PC Enter
Il faut bien entendu mettre un include de la librairie.
#include "lib_spell_manage"