[SYSTEME] Le PUMA!

Répondre
Partager Rechercher
Si tu parles du PUMA en lui même, je viens de tester et l'archive fonctionne correctement avec winrar.
Par contre je sais que power-archiver met parfois des erreurs d'intégrité la ou il n'y en as pas ... vérifie aussi que tu as bien la dernière version de winrar (avant j'avais une 2.x et j'avais plein de problèmes du genre)
Et il faut bien se rappeler qu'un fichier en rar peut être décompresser surtout qu'en rar, ou en ace. Winzip même pas la peine, et power archiver comme dit Iri, cela marche pas tout le temps.
bon j'ai une petite question, j'ai introduis dans mon module le systeme de save puma. normalement si j'ai bien compris sa save tous en permanent, mais la je suis confronté a un probleme dont je viens juste d'en trouvé la cause. j'ai aussi le systeme de la banque pour deposé de l'or et grace a puma ca doit sauvé les compte et l'argent des joueur en permanence. mais voila c'est apres plusieur essais, pour trouvé la cause de mon désarois, je me suis rendu compte , que quand le module plante sauvagement et que je doit relancé mon ordinateur au redemarage du module il ne prend pas en compte les save de puma les compte de la banque sont perdus avec l'argent le module redemare au depart du jeu , il y a que les perso qui sont sauvegardé. pourkoi ??? est ce normal????
oui oui dailleur sa marche bien tans que l'ordinateur ne plante pas et que je soit pas obligé de l'éteindre sauvagement. pourkoi ne va t il pas rechecher la derniere save de puma avec les compte dessus et la derniere position du joueur??
Peut-être que si le plantage est vraiment trop sauvage, le fichier log reste bloqué ouvert et ne peu donc pas être parser ...

En fait toute la question est la : y a t-il des lignes dans le log correspondant aux comptes en banques ??? (si oui alors je ne vois vraiment pas ce qui se passe...)
oui ca marche j'ai detruis les save d'avant le crash du serveur seul pb j'etais bloqué dans le salle du coffre sans la clef je me suis suicidé , j'ai respawn , suis retourné voir le banquier et il me dit bien que mon compte de cet apres midi existe
Me revoila je voudrait d'abort remercier les grands genies qui mon aidé a resoudre mes petit probleme d'utilisation de puma , car je manipulait tres mal leur systeme qui marche tres tres bien en faite. j'ai une petite question technique peux ton augmenter le frequance de save de puma pendant le jeu ???merci a JAHA ET RAT pour leur aide et leur travaille
Bonjour et merci bien a vous pour ce programme
je suis un noob la dedans et j'avoue avoir eu un peu de mal a le mettre en place mais le problème était pas évident à détecter...
ça marche très bien maintenant ..

J'aurais une question technique , voila j'utilise "siegecraft" ,qui est en fait un artisanat comme ATS et qui permet la fabrication d'armes de sieges ..
mais le soucis est que la progression n'est pas sauvegardée après un reboot .. j'ai mailer le concepteur et voila ce qu'il me dit

Citation :
If you use NWNX/2 for persistance, just change those SetLocalInt(...) function calls that raise the siegecraft level to read SetPersistentInt(...) and everything is saved.
J'aimerai savoir si pour PUMA c'est pareil ou sinon comment faire ?

merci


Voila le script modifié avec les "persistent" a la place de "local" mais évidemment ça marche pas ...

Code PHP:

#include "hc_inc_pwdb_func"

int GZ_SKILL_CFG_MSGONINCREASE TRUE// send a message on skill increase?
int GZ_SKILL_CFG_DEBUG FALSE// Show debug output?
int GZ_SKILL_CFG_LEARNCOST 500// how much gp costs it to initially learn a skill?
int GZ_SKILL_MAX 500//


// do not change from here!
int GZ_SKILL_UNDEFINED =0;
int GZ_SKILL_SIEGECRAFT 50;

int GZ_SKILLDC_EASY 90;
int GZ_SKILLDC_MEDIUM 50;
int GZ_SKILLDC_HARD =25;
int GZ_SKILLDC_VERYHARD 10;
int GZ_SKILLDC_IMPOSSIBLE 0;

string GZ_SKILLNAME_SIEGECRAFT "GZ_SKILL_SIEGECRAFT";
string GZ_SKILLFNAME_SIEGECRAFT "Siegecraft";

string GZ_MASTERSKILL_VARNAME ="GZ_SKILLORDER_NAME";

string GZGetSkillFriendlyName(int iSkill)
{
    switch (
iSkill)
    {
        case 
50:
            return 
GZ_SKILLFNAME_SIEGECRAFT;
            break;
    }
    return 
"Not existant Skill";
}

string GZGetSkillByID(int iSkill)
{
    switch (
iSkill)
    {
        case 
50:
            return 
GZ_SKILLNAME_SIEGECRAFT;
            break;
    }
    return 
"GZ_SKILL_INVALID";

}

int GZSkillGetLevel(object oPCint iSkill)
{
    
string sSkill GZGetSkillByID(iSkill);
    return 
GetPersistentInt(oPC,sSkill);
}

int GZGetMasterSkill(object oPC)
{
    return 
GetPersistentInt(oPC,GZ_MASTERSKILL_VARNAME);
}

int GZGetMasterSkillLevel(object oPC)
{
    return 
GZSkillGetLevel(oPC,GetPersistentInt(oPC,GZ_MASTERSKILL_VARNAME));
}

void GZSetMasterSkill(object oPCint iSkill)
{
    
SetPersistentInt(oPC,GZ_MASTERSKILL_VARNAME,iSkill);
    
SendMessageToPC(oPC,"You have chosen the "+GZGetSkillFriendlyName(iSkill)+ " skill as your primary skill. You will never be able to advance in any skill above your primary skill value!");
}


void GZSkillSetSkill(object oPC,int iSkill,int iNewValint bLearn=FALSE)
{
    
string sSkill GZGetSkillByID(iSkill);
    
SetPersistentInt(oPC,sSkill,iNewVal);

    if (
bLearn==TRUE)
        
SendMessageToPC(oPC,"You have learned the "+GZGetSkillFriendlyName(iSkill)+ " skill. Your skillevel is now "+IntToString(iNewVal));
    else
        
SendMessageToPC(oPC,"Your "+GZGetSkillFriendlyName(iSkill)+ " skillevel has changed to "+IntToString(iNewVal));

    if (
GZGetMasterSkill(oPC) == GZ_SKILL_UNDEFINED)
    {
        
GZSetMasterSkill(oPCiSkill);
    }


}

int GZSkillCheck(object oPC,int iSkill,int iDiffint iBaseLevel=100)
{
    
string sSkill GZGetSkillByID(iSkill);

    if (
iDiff<=100 && GZSkillGetLevel(oPC,iSkill)>0)
    {
        
int iOldVal GetPersistentInt(oPCsSkill);
        
// check if we make the check...
        
int iRand = (iOldVal)+ Random(FloatToInt(iBaseLevel*1.05)+1);
        
int iChanceF = (iBaseLevel*iDiff/100)+Random(FloatToInt(iBaseLevel*0.50));
        if ((
iRand) >= (iChanceF))
        {
            if (
GZ_SKILL_CFG_DEBUGSendMessageToPC(oPC,"DEBUG: (Skill Check) Number to beat was: " +IntToString(iChanceF) + " Result was " IntToString(iRand) + " Baselevel " IntToString(iBaseLevel) + " Difficulty was: "+IntToString(iDiff) );
            return 
TRUE;
        }
            else
         if (
GZ_SKILL_CFG_DEBUGSendMessageToPC(oPC,"DEBUG: (Skill Check) Number to beat was: " +IntToString(iChanceF) + " Result was " IntToString(iRand) + " Baselevel " IntToString(iBaseLevel) + " Difficulty was: "+IntToString(iDiff) );
    }
return 
FALSE;
}


int GZSkillCheckIncrease(object oPC,int iSkill,int iDiffint iBaseLevel=100)
{
    
string sSkill GZGetSkillByID(iSkill);
    
// we only advance a level if:
    // * the chance is above 0 %
    // * the Skill Level is above 0 (learned!)
    // * the master skill (primary skill) is above the current skill level
    
if ((GZSkillCheck(oPC,iSkill,iDiff,iBaseLevel) != FALSE))
    {
        if (((
GZGetMasterSkillLevel(oPC)> GZSkillGetLevel(oPC,iSkill)) || iSkill == GZGetMasterSkill(oPC)))
        {
            
//now we check for increase....
            
float fInc 1.0;
            
int iOldVal GetPersistentInt(oPCsSkill);
            if (
fInc 1.0 || iOldVal>=iBaseLevel fInc 0.0;


            
iOldVal += FloatToInt(fInc);

            if (
iOldVal GZSkillGetLevel(oPC,iSkill))
            {
                
SetPersistentInt(oPC,sSkill,iOldVal);
                if (
GZ_SKILL_CFG_DEBUGSendMessageToPC(oPC,"DEBUG: (Skill Increase) by " FloatToString(fInc) );
                if (
iSkill == GZGetMasterSkill(oPC))
                    if (
GZ_SKILL_CFG_MSGONINCREASESendMessageToPC(oPC,"Your level in "+GZGetSkillFriendlyName(iSkill)+ " (primary skill) has increased to "+IntToString(iOldVal));
                else
                    if (
GZ_SKILL_CFG_MSGONINCREASESendMessageToPC(oPC,"Your level in "+GZGetSkillFriendlyName(iSkill)+ " has increased to "+IntToString(iOldVal));
            }
        }
        return 
TRUE;
    }
return 
FALSE;

C'est le même topo mais avec des SetPWUMInt, SetPWUMString, GetPWUMString ...
Y'a que le nom de la fonction qui change, sont utilité reste la même mais par contre il va falloir que tu modifie tout le système pour l'adapter.
De plus, a ta place, je me presserais pas trop car la persistance made in bioware va bientôt arriver (la beta commence demain), alors ça sert à rien de faire deux fois le boulot.

Jaha Effect
Ba tu parles de quoi de position ??? exactement?

si c'est la location des personnages alors , il faut que tu mettes en commentaire ResumePCLocation(...)
qui est dans le onenter du module
Désolé de pas avoir été assez clair ..

En fait le probleme du systeme de localisation est qu'il ne sauvegarde pas a la deco des joueurs et ce qui m'interesse dans ce programme c'est la persistance des coffres donc je voulais savoir si je peux l'utiliser QUE pour les coffres et désactiver la sauvegarde de localisation des joueurs (qui nous cause des soucis en fait avec le HCR)

voila voila
Citation :
Provient du message de N'kälhäash
Désolé de pas avoir été assez clair ..

En fait le probleme du systeme de localisation est qu'il ne sauvegarde pas a la deco des joueurs et ce qui m'interesse dans ce programme c'est la persistance des coffres donc je voulais savoir si je peux l'utiliser QUE pour les coffres et désactiver la sauvegarde de localisation des joueurs (qui nous cause des soucis en fait avec le HCR)

voila voila
Ba Moi j'arrive très bien à sauvegarder justement on en discutait l'autre fois avec les scripteurs de Jol .
Mais bon donc oui normalement tu peux , en retirant le ResumePCLocation donc dans le trigger onenter si je me trompe pas.

Et normalement cela ne changera en rien le reste
voilà
Dans le onModuleLoad, tu dois avoir un script qui contient cette ligne, normalement :
InitializeUniversalMind(a, b, c);

Peu importe les valeurs de b et de c, il faut que tu mettes 0.0 à la place du "a". C'est la fréquence en secondes à laquelle la location est sauvée, en sachant qu'un 0.0 correspond à "pas de sauvegarde". Sinon tu peux faire comme dit Ratounet, mais c'est un peu moins propre : les positions seront toujours sauvegardées (avec balayage de la liste des PJ toutes les 5 min et création d'autant de variables persistantes à chaque fois), mais pas rappelées (donc ça ne se verra pas, effectivement ).

Sinon, pour éviter le fonctionnement douteux du ResumePCLocation, moi j'utilise ça dans le onClientEnter de mon module : (à la place du ResumePCLocation de base)
Code PHP:

   if (GetLocalInt(GetModule(), GetName(oPlayer) + "LocationSaved") == FALSE)
   {
     
ResumePCLocation(oPlayer);
     
SetLocalInt(GetModule(), GetName(oPlayer) + "LocationSaved"TRUE);
   } 
(Ca évite les timewarps incessants )
Gadjio > j'ai essayé de compilé en remplaçant par ce que tu me dis et ça me donne une erreur al ligne :


if (GetLocalInt(GetModule(), GetName(oPlayer) + "LocationSaved") == FALSE)

ERREUR : VARIABLE DEFINED WITHOUT TYPE
Bin en fait, c'est ce qui est expliqué un peu plus haut sur le thread, c'est pour ça que je n'avais pas redonné de précisions.
En gros, le jeu sait restaurer la position du joueur quand il déco/reco, SAUF lorsqu'il y a un reboot entre la déco et la reco (ça, tout le monde l'a constaté sur les mod qui n'utilisent pas de système de persistance). Le Puma ici nous permet de sauvegarder l'emplacement de tous les PJ en jeu, toutes les cinq minutes et le ResumePCLocation te renvoie à cette position sauvegardée (qui n'est pas forcément très à jour, un peu comme l'autosave des jeux solo : il peut y avoir un time-warp, ou retour en arrière).

Par défaut, le ResumePCLocation est exécuté à chaque reco, ce qui crée le timewarp systématiquement... Or, comme le jeu sait restaurer la position entre une déco et une reco, il vaut mieux qu'il le gère lui-même, et que la sauvegarde du Puma ne soit utilisée qu'en cas de reboot.

On prend donc un boolean spécifique au joueur qui reco, si c'est la première fois que ce perso appelle onClientEnter, le boolean sera FALSE et on utilise le ResumePCLocation du Puma (en passant le boolean à TRUE). Si le perso déco/reco, le boolean est maintenant à TRUE et le perso n'est pas téléporté par ResumePCLocation (donc il reste à la position où l'a remis le jeu, c'est à dire la bonne ).

Sinon, ton script bug parce que tu n'as pas défini le oPlayer. Faut que tu rajoutes un :
object oPlayer = GetLastEnteringObject(); avant
merci pour ta réponse

Bon ça me donne une autre erreur : parsing variable list

En fait j'ai déja un object oPlayer= ... en début de script

faut dire c'est un peu le bazar ce script ...

Bon je le mets ce sera plus simple .. les commandes que tu m'as donné sont tout en bas ,pour le "ResumePCLocation()" simple, je le mettais tout en bas pour que ça marche bien dans le module (que les autres actions s'effectuent avant en fait)

Code PHP:

//Hardcore Client Entering
//Archaegeo 2002 Jun 24

// This script goes in OnClientEnter in Module Properties - Events
// It checks to see if they have a Death Amulet on them, and if so
// It sets thier player state to Dead and rekills them.
#include "pwum_functions"
#include "hc_inc"
#include "hc_inc_on_enter"
#include "hc_text_enter"
#include "hc_inc_remeff"
#include "hc_inc_rezpen"
#include "hc_inc_htf"

#include "i_tagtests"
#include "anph_persist_inc"

void HCRBoot(object oPCstring sReason)
{
    
SendMessageToPC(oPC,sReason);
    
DelayCommand(3.0,BootPC(oPC));
}

void main()
{

    
object oPC;
    
oPC GetEnteringObject();
    if(!
preEvent()) return;
    
int nPKT GetLocalInt(oMod,"PKTRACKER");
    
int nDM GetIsDM(oPC);
    
string sCDK GetPCPublicCDKey(oPC);
    
string sName GetName(oPC);
    
int iStripItems FALSE;
    
int iLvl;

    if(
GetLocalInt(oMod,"DMRESERVE"))
    {
        
int nC;
        
object oPlayers=GetFirstPC();
        if(!
nDM)
        {
            while(
GetIsObjectValid(oPlayers))
            {
                if(!
GetIsDM(oPlayers)) nC++;
                
oPlayers=GetNextPC();
            }
        }
        if(
nC GetLocalInt(oMod,"DMRESERVE") && nDM==FALSE)
        {
            
HCRBoot(oPC,DMRES);
            
postEvent();
            return;
        }
    }




    if (
GetIsPC (oPC) && !GetXP (oPC) && !GetIsDM (oPC))
        
iStripItems TRUE;


    if (
iStripItems)
    {
        
int iGold GetGold (oPC);
        
AssignCommand (oPCTakeGoldFromCreature (iGoldoPCTRUE));

        
iLvl AnphGetPlayerLevel (oPC);
        
int STARTING_GOLD iLvl iLvl 60 100;


        
GiveGoldToCreature(oPCSTARTING_GOLD);

        
object oGear GetItemInSlot(INVENTORY_SLOT_ARMSoPC);
        if(
GetIsObjectValid(oGear))
            
DestroyObject(oGear);
        
oGear GetItemInSlot(INVENTORY_SLOT_BELToPC);
        if(
GetIsObjectValid(oGear))
            
DestroyObject(oGear);

        
oGear GetItemInSlot(INVENTORY_SLOT_BOLTSoPC);
        if(
GetIsObjectValid(oGear))
            
DestroyObject(oGear);

        
oGear GetItemInSlot(INVENTORY_SLOT_BOOTSoPC);
        if(
GetIsObjectValid(oGear))
            
DestroyObject(oGear);
        
//oGear = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC);
        //if(GetIsObjectValid(oGear))
        //    DestroyObject(oGear);
        
oGear GetItemInSlot(INVENTORY_SLOT_CLOAKoPC);
        if(
GetIsObjectValid(oGear))
            
DestroyObject(oGear);

        
oGear GetItemInSlot(INVENTORY_SLOT_HEADoPC);
        if(
GetIsObjectValid(oGear))
            
DestroyObject(oGear);

        
oGear GetItemInSlot(INVENTORY_SLOT_LEFTHANDoPC);
        if(
GetIsObjectValid(oGear))
            
DestroyObject(oGear);

        
oGear GetItemInSlot(INVENTORY_SLOT_LEFTRINGoPC);
        if(
GetIsObjectValid(oGear) && !GetIsNoDrop(oGear))
            
DestroyObject(oGear);

        
oGear GetItemInSlot(INVENTORY_SLOT_NECKoPC);
        if(
GetIsObjectValid(oGear))
            
DestroyObject(oGear);

        
oGear GetItemInSlot(INVENTORY_SLOT_RIGHTHANDoPC);
        if(
GetIsObjectValid(oGear))
            
DestroyObject(oGear);

        
oGear GetItemInSlot(INVENTORY_SLOT_RIGHTRINGoPC);
        if(
GetIsObjectValid(oGear) && !GetIsNoDrop(oGear))
            
DestroyObject(oGear);

        
oGear GetItemInSlot(INVENTORY_SLOT_ARROWSoPC);
        if(
GetIsObjectValid(oGear))
            
DestroyObject(oGear);

        
oGear GetItemInSlot(INVENTORY_SLOT_BOLTSoPC);
        if(
GetIsObjectValid(oGear))
            
DestroyObject(oGear);

        
oGear GetItemInSlot(INVENTORY_SLOT_BULLETSoPC);
        if(
GetIsObjectValid(oGear))
            
DestroyObject(oGear);

// Removing PC's inventory.

        
object oStuff GetFirstItemInInventory(oPC);
        while(
GetIsObjectValid(oStuff))
        {
            if (!
GetIsNoDrop(oStuff))
            {
                
DestroyObject(oStuff);
            }
            
oStuff GetNextItemInInventory(oPC);
        }




// Greet PC.

        
DelayCommand(3.0SendMessageToPC(oPCNOGOLD IntToString(STARTING_GOLD) + " gp."));
// Give new PC's some food.
        
if(GetLocalInt(oMod,"FOODSYSTEM") || GetLocalInt(oMod,"HUNGERSYSTEM"))
        {
            if(!
GetXP(oPC) && !nDM)
                
CreateItemOnObject("FoodRation"oPC);
        }
// Give new PC's a bedroll for the rest system
        
if(GetLocalInt(oMod,"BEDROLLSYSTEM"))
        {
            if(!
GetXP(oPC) && !nDM)
                if(
GetIsObjectValid(GetItemPossessedBy(oPC,"bedroll"))==FALSE)
                    
CreateItemOnObject("bedroll"oPC);
        }

// Give new PC's the server info book.
        
if(GetIsObjectValid(GetItemPossessedBy(oPC,"AnphilliaInformation"))==FALSE)
            
CreateItemOnObject("AnphilliaInformation"oPC);

        if(
GetIsObjectValid(GetItemPossessedBy(oPC,"AmuletOfLife"))==FALSE)
            
CreateItemOnObject("amuletoflife"oPC);
        if (!
GetIsObjectValid(GetItemPossessedBy(oPC,"AnphilliaRuleBook")))
            
CreateItemOnObject("anphilliaruleboo"oPC);
// Give PC's an EmoteWand if using the DMHelper set.
        
if(!GetIsObjectValid(GetItemPossessedBy(oPC,"EmoteWand")))
            
CreateItemOnObject("emotewand"oPC);
    }

// Check for tensers sword.

    
object oGear GetItemPossessedBy (oPC"NW_WSWMLS013");
    if (
GetIsObjectValid (oGear))
    {
        
SendMessageToPC (oPC"Tensors sword crumbles to dust..");
        
DestroyObject (oGear);
    }

// Remember Factions.
    
if (GetAnphInt (AnphPCID (oPC) + "LamirFaction") == 1)
    {
        
object oLamirFaction GetObjectByTag ("LamirFaction");
        
AdjustReputation (oPCoLamirFaction1);
    }

    if (
GetAnphInt (AnphPCID (oPC) + "RanzingtonFaction") == 1)
    {
        
object oRanzingtonFaction GetObjectByTag ("RanzingtonFaction");
        
AdjustReputation (oPCoRanzingtonFaction1);
    }

    
Subraces_InitSubraceGetEnteringObject() );
    if (
nDM || (sCDK!="" && sCDK==GetPersistentString(oMod,"PLAYERDM")))
    {
        
effect eImmune EffectImmunity(IMMUNITY_TYPE_TRAP);
        
ApplyEffectToObject(DURATION_TYPE_PERMANENTeImmuneoPC);
    }

    
int nComingBack GetLocalInt (oModsName sCDK "HaveBeenHere");
    if (
nComingBack == 1)
    {
        
int nHitPoints GetLocalInt (oModsName sCDK "CurrentHitPoints");
        
int nCurHitPoints GetCurrentHitPoints (oPC);
        
int nDam nCurHitPoints nHitPoints;
        if (
nDam 0)
        {
            
effect eDam EffectDamage (nDam);
            
DelayCommand (3.0ApplyEffectToObject (DURATION_TYPE_INSTANTeDamoPC));
        }
    }
    
SetLocalInt (oModsName sCDK "HaveBeenHere"1);




    if(
GetLevelByClass(CLASS_TYPE_RANGER,oPC) &&
        
GetIsObjectValid(GetItemPossessedBy(oPC,"TrackerTool"))==FALSE)
           
CreateItemOnObject("trackertool"oPC);
// Give Paladins their tools that simulate missing abilities
    
if(GetLevelByClass(CLASS_TYPE_PALADIN,oPC)>&&
        
GetIsObjectValid(GetItemPossessedBy(oPC,"hc_palbadgecour"))==FALSE)
           
CreateItemOnObject("paladinsbadgeofc"oPC);
    if(
GetLevelByClass(CLASS_TYPE_PALADIN,oPC) &&
        
GetIsObjectValid(GetItemPossessedBy(oPC,"hc_paladinsymb"))==FALSE)
           
CreateItemOnObject("paladinsholysymb"oPC);
// Give PC's a Trap Tool in inventory
    
if(GetLocalInt(oMod,"HCRTRAPS") && GetIsObjectValid(GetItemPossessedBy
        
(oPC,"searchtool"))==FALSE)
           
CreateItemOnObject("searchtool"oPC);
// Give PC's the ball of saving.
//    if(!GetIsObjectValid(GetItemPossessedBy(oPC,"ballofsaving")))
//         CreateItemOnObject("ballofsaving", oPC);
// Give PC DM's a wand version of the HCR helper
    
if(sCDK != "" && sCDK==GetPersistentString(oMod,"PLAYERDM"))
    {
        if(
GetIsObjectValid(GetItemPossessedBy(oPC,"HCRHelpwand"))==FALSE)
            
CreateItemOnObject("HCRHelpwand"oPC);
    }
    if (
nDM)
    {
        
// Give DM's a HCR Helper in inventory
        
if(GetIsObjectValid(GetItemPossessedBy(oPC,"HCRHelpwand"))==FALSE)
            
CreateItemOnObject("hcrhelpwand"oPC);
        if(
GetIsObjectValid(GetItemPossessedBy(oPC,"DMsHelper"))==FALSE)
           
CreateItemOnObject("DMsHelper"oPC);
        if(
GetIsObjectValid(GetItemPossessedBy(oPC,"WandOfFX"))==FALSE)
           
CreateItemOnObject("wandoffx"oPC);
        if(!
GetIsObjectValid(GetItemPossessedBy(oPC,"WandOfEnemies")))
           
CreateItemOnObject("wandoffriends003"oPC);
        if(!
GetIsObjectValid(GetItemPossessedBy(oPC,"WandOfFriends")))
           
CreateItemOnObject("wandoffriends004"oPC);
        if(!
GetIsObjectValid(GetItemPossessedBy(oPC,"WandOfAxfell")))
           
CreateItemOnObject("wandoffriends006"oPC);
        if(!
GetIsObjectValid(GetItemPossessedBy(oPC,"WandOfCleaven")))
           
CreateItemOnObject("wandoffriends005"oPC);
        if(!
GetIsObjectValid(GetItemPossessedBy(oPC,"XPWand")))
           
CreateItemOnObject("xpwand"oPC);
    }

    if (!
GetXP (oPC))
        
SetXP (oPC1);


    
WriteTimestampedLogEntry (" -- New Player " +
                              
GetName (oPC) +
                              
", handle " +
                              
GetPCPlayerName (oPC) +
                              
", CD KEY " +
                              
GetPCPublicCDKey (oPC));

    
// Send a login message to all players if one exists
    
if(GetLocalString(oMod,"LOGINMESSAGE") != "NONE")
        
SendMessageToPC(oPC,GetLocalString(oMod,"LOGINMESSAGE"));

    
postEvent();
    
object oPlayer GetLastEnteringObject();

    if (
GetLocalInt(GetModule(), GetName(oPlayer) + "LocationSaved") == FALSE)
   {
     
ResumePCLocation(oPlayer);
     
SetLocalInt(GetModule(), GetName(oPlayer) + "LocationSaved"TRUE);
   }

Répondre

Connectés sur ce fil

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