[Système] Mémorisation des sorts pour éviter leur récupération par une déco/reco

Répondre
Partager Rechercher
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
Code:
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).
Code:
//:: 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).
Code:
//::///////////////////////////////////////////////
//:: 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
Code:
chargementSortsPJ(oPC);
Il faut bien entendu mettre un include de la librairie.
Code:
#include "lib_spell_manage"
J'étais persuadé que c'était lié à NWNX.

Mais effectivement, depuis la 1.69, c'est dans nwnplayer.ini

Code:
Restore Spell Uses On Login =1
J'ai vu récemment un serveur vieux de 10 ans découvrir le truc il y a une semaine, du coup, j'étais persuadé que c'était un vieux script a faire. Bon, ce vieux script, j'avais du le faire avant la 1.69 xD

Et je viens de tester, ça fonctionne.

Pufffff Boooooooooon. J'vais retourner sur mon générateur de loot et trouver après d'autres systèmes de base à écrire

Ceci dit , il y a bien des gens vivant par ici!
Répondre

Connectés sur ce fil

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