|
Voila, essaye ça.
Maintenant, si ca marche c'est bien, mais si ca marche pas, ton OnClientEnter est deja bien rempli, je serais toi, je mettrait le script de repos dans le onclientleave.
PS: n'oublies pas de sauvegarder ton script avant toute modification
// 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 "hc_inc" #include "hc_inc_on_enter" #include "hc_cdrop_on_ent" #include "hc_text_enter" #include "hc_inc_remeff" #include "hc_inc_rezpen" #include "hc_inc_htf" #include "hc_inc_timecheck" // hcr3 7/18/2003 #include "hc_id" // hcr3 7/27/2003 #include "hc_inc_persist" #include "i_tagtests" // hcr3.1 #include "crr_subrace_hc_i"
/******************************************* DEBUT MODIF REBOOT *******************************************/
//Aps_include pour NWNX #include "aps_include"
/////////////////////////////////////////////////////////// // Script de reboot serveur, Par Rhyghar // D'apres le script de de repos de Lucindrea ///////////////////////////////////////////////////////////
void broadcast(string texte) { object oPC = GetFirstPC(); while(oPC != OBJECT_INVALID){ SendMessageToPC(oPC, texte); oPC = GetNextPC(); } }
void Kick() { object oPC = GetFirstPC(); while(oPC != OBJECT_INVALID){ BootPC(oPC); oPC = GetNextPC(); } }
void rebootsequence() { broadcast("Reboot Serveur dans une minute !!!"); broadcast("Sauvegarde des Personnages..."); ExportAllCharacters(); DelayCommand(5.0f, broadcast("Personnages sauvegardes...")); DelayCommand(30.0f, broadcast("Reboot serveur dans 30 secondes...")); DelayCommand(50.0f, broadcast("Reboot serveur dans 10 secondes...")); DelayCommand(55.0f, broadcast("Reboot serveur dans 05 secondes...")); DelayCommand(60.0f, broadcast("Ejection des joueur...")); DelayCommand(62.0f, Kick()); DelayCommand(65.0f, broadcast("Reboot serveur...")); DelayCommand(70.0f, StartNewModule(GetModuleName()));
}
/******************************************* DEBUT MODIF REBOOT *******************************************/
// hcr3 if not restarted kill them. // 7/25/2003 fixed to kill to create raisable corpse even on restart for PW. // 8/3/2003 fix for entering while dying. void CheckFugue(object oPC){
if (GetTag(GetArea(oPC)) != "FuguePlane") { if (!GetLocalInt(oPC, "ENTERED")) { SetLocalInt(oPC, "GRAVEYARD", TRUE); } SetLocalInt(oPC,"LOGINDEATH",1); effect eDeath = EffectDeath(FALSE, FALSE); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oPC); } }
// hcr3 added new function based on hc_defaults setting. //Allows prcs if the player already has it. void prcunset(object oPC) { //Unset if PrC in second clot int nClass = GetClassByPosition(2, oPC); switch(nClass) { case(CLASS_TYPE_ASSASSIN): DeleteLocalInt(oPC, "X1_AllowAsasin"); break; case(CLASS_TYPE_ARCANE_ARCHER): DeleteLocalInt(oPC, "X1_AllowArcher"); break; case(CLASS_TYPE_BLACKGUARD): DeleteLocalInt(oPC, "X1_AllowBlkGrd"); break; case(CLASS_TYPE_HARPER): DeleteLocalInt(oPC, "X1_AllowHarper"); break; case(CLASS_TYPE_SHADOWDANCER): DeleteLocalInt(oPC, "X1_AllowShadow"); break; default: break; }//End switch(nClass) for 2nd slot //Unset if PrC in third clot nClass = GetClassByPosition(3, oPC); switch(nClass) { case(CLASS_TYPE_ASSASSIN): DeleteLocalInt(oPC, "X1_AllowAsasin"); break; case(CLASS_TYPE_ARCANE_ARCHER): DeleteLocalInt(oPC, "X1_AllowArcher"); break; case(CLASS_TYPE_BLACKGUARD): DeleteLocalInt(oPC, "X1_AllowBlkGrd"); break; case(CLASS_TYPE_HARPER): DeleteLocalInt(oPC, "X1_AllowHarper"); break; case(CLASS_TYPE_SHADOWDANCER): DeleteLocalInt(oPC, "X1_AllowShadow"); break; default: return; }//End switch(nClass) for third slot }//End void prcblock(object oPC)
void TakeHPs(object oTarget) { effect eDam=EffectDamage(GetCurrentHitPoints(oTarget)-1); ApplyEffectToObject(DURATION_TYPE_INSTANT ,eDam ,oTarget); }
void HCRBoot(object oPC, string sReason) { SendMessageToPC(oPC,sReason); DelayCommand(10.0,BootPC(oPC)); }
location GetSavedLocation(object oPC) { location lLoc = GetPersistentLocation(oPC, "PV_START_LOCATION");
if (GetAreaFromLocation(lLoc) == OBJECT_INVALID) SetLocalInt(oPC, "TMP_VALID_SPAWN", 0); else SetLocalInt(oPC, "TMP_VALID_SPAWN", 1);
return lLoc; }
// hcr3 deleted PWDB_placehchar function caused quirky behavior and didnt work correctly. void main() { /******************************************* DEBUT MODIF REBOOT *******************************************/
object oMod=GetModule(); string sModTag = GetTag(oMod);
int A = TRUE;
//First get the time last rested in yyyymmddhhmmss format string sSQL = "SELECT val FROM LastSlept WHERE tag='"+sModTag+"';"; SQLExecDirect(sSQL); SQLFirstRow(); string sTimeSlept = SQLGetData(1); //SendMessageToAllDMs("last slept as string" + sTimeSlept); if (sTimeSlept == "") { A = TRUE; SQLExecDirect("SELECT NOW() + 0"); SQLFirstRow(); string sTimeNow = SQLGetData(1); SetPersistentString(oMod,sModTag,sTimeNow,0,"LastSlept"); }
sSQL = "SELECT DateDiff('s', #"+sTimeSlept+"#, Now());";
SQLExecDirect(sSQL); SQLFirstRow(); string difference = SQLGetData(1);
int iDiff = StringToInt(difference);
// 24 heures = 24*3600 secondes = 86400 secondes if(abs(iDiff) > 86400)A = FALSE;
if (A) { return; }else{ SQLExecDirect("SELECT NOW() + 0"); SQLFirstRow(); string sTimeNow = SQLGetData(1); // dump current time into database called LastSlept SetPersistentString(oMod,sModTag,sTimeNow,0,"LastSlept"); WriteTimestampedLogEntry("reboot automatique serveur : "+ sTimeNow); rebootsequence();
}
/******************************************* FIN MODIF REBOOT *******************************************/
if(!preEvent()) return; dropCrpse(); object oPC = GetEnteringObject(); // hcr3.1 if (GetLocalInt(GetModule(), "SUBRACES")) crr_SubraceHCRenter( oPC ); // party rest code. SetLocalInt(oPC, "RestOption", 0); string sCDK=GetPCPlayerName(oPC); string sID=GetName(oPC)+GetPCPlayerName(oPC); // hcr3 7/21/2003 // set sID so it will always be available. SetLocalString(oPC, "sID", sID); SetPlotFlag(oPC,FALSE); int nPKT=GetLocalInt(oMod,"PKTRACKER"); int nDM=GetIsDM(oPC); // hcr3 check for allowed prestige classes if (!nDM) { //Prep all classes as in hc_defaults if (!GetLocalInt(oMod, "ASSASIN") && !GetPersistentInt(oMod, "ASSASIN"+sID)) SetLocalInt(oPC, "X1_AllowAsasin", 1); if (!GetLocalInt(oMod, "ARCHER") && !GetPersistentInt(oMod, "ARCHER"+sID)) SetLocalInt(oPC, "X1_AllowArcher", 1); if (!GetLocalInt(oMod, "BLKGUARD") && !GetPersistentInt(oMod, "BLKGUARD"+sID)) SetLocalInt(oPC, "X1_AllowBlkGrd", 1); if (!GetLocalInt(oMod, "HARPER") && !GetPersistentInt(oMod, "HARPER"+sID)) SetLocalInt(oPC, "X1_AllowHarper", 1); if (!GetLocalInt(oMod, "SHADOW") && !GetPersistentInt(oMod, "SHADOW"+sID)) SetLocalInt(oPC, "X1_AllowShadow", 1); prcunset(oPC); }
if(nPKT) { if(GetPersistentInt(oMod,"PKCOUNT"+sCDK)>nPKT) { SendMessageToAllDMs(sCDK+DMBOOTPK); HCRBoot(oPC,PCBOOTPK); postEvent(); return; } } // hcr3 8/5/2003 string sCDKey = GetPCPublicCDKey(oPC); if(GetLocalInt(oMod,"SINGLECHARACTER") && !nDM) { string sRegChar=GetPersistentString(oMod, "SINGLECHARACTER"+ sCDKey); if(sRegChar != "" && sRegChar != GetName(oPC)) { HCRBoot(oPC,SINGLEBOOT+sRegChar); postEvent(); return; } else { SetPersistentString(oMod, "SINGLECHARACTER"+ sCDKey, GetName(oPC)); SendMessageToPC(oPC,SINGLEREG); }
} // 5.5 added code to not count DMs as multichars else if (GetLocalInt(oMod, "MULTICHAR") > 0 && !nDM) { string sRegChar; int nCount =1; int nReg = FALSE; int nNum = GetLocalInt(oMod, "MULTICHAR"); for (nCount; nCount <= nNum; nCount++) { sRegChar=GetPersistentString(oMod, "MULTICHAR"+ IntToString(nCount)+ sCDKey); if (sRegChar == "") { SetPersistentString(oMod, "MULTICHAR"+ IntToString(nCount)+ sCDKey, GetName(oPC)); SendMessageToPC(oPC,SINGLEREG); nCount = nNum+1; nReg = TRUE; } else if (sRegChar == GetName(oPC)) { nReg = TRUE; nCount = nNum+1; } } if (!nReg) { HCRBoot(oPC,MULTIBOOT); postEvent(); return; } } if(GetPersistentInt(oMod,"BANNED"+sCDK)) { HCRBoot(oPC, BANNED); postEvent(); return; } if(GetLocalInt(oMod,"LOCKED") && !nDM) { HCRBoot(oPC,LOCKED); postEvent(); return; } 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(!GetLocalInt(oMod,"HCRREAD")) { SendMessageToPC(oPC,NOHCRENABLED); return; } int nGiveLevel=GetLocalInt(oMod,"GIVELEVEL"); if(GetLocalInt(oMod,"STORESYSTEM")) { if(GetIsPC(oPC) && !(GetXP(oPC)) && !nDM) { string STORE_NAME = "NewbieMerchant";
//If you want everyone to have the same amount of starting gold, modify the //lines below // int STARTING_GOLD = 150; int STARTING_GOLD=2000; int PLAYER_STRIPS = TRUE;
// Giving PC its starting gold. if(nGiveLevel > 1 && STARTING_GOLD==0) { switch (nGiveLevel) { case 2: STARTING_GOLD = 900; break; case 3: STARTING_GOLD = 2700; break; case 4: STARTING_GOLD = 5400; break; case 5: STARTING_GOLD = 9000; break; case 6: STARTING_GOLD = 13000; break; case 7: STARTING_GOLD = 19000; break; case 8: STARTING_GOLD = 27000; break; case 9: STARTING_GOLD = 36000; break; case 10: STARTING_GOLD = 49000; break; case 11: STARTING_GOLD = 66000; break; case 12: STARTING_GOLD = 88000; break; case 13: STARTING_GOLD = 110000; break; case 14: STARTING_GOLD = 150000; break; case 15: STARTING_GOLD = 200000; break; case 16: STARTING_GOLD = 260000 ; break; case 17: STARTING_GOLD = 340000; break; case 18: STARTING_GOLD = 440000; break; case 19: STARTING_GOLD = 580000; break; case 20: STARTING_GOLD = 760000; break; } } if(!STARTING_GOLD) { if(GetLevelByClass(CLASS_TYPE_BARBARIAN, oPC)) STARTING_GOLD=d4(4)*10; else if(GetLevelByClass(CLASS_TYPE_BARD, oPC)) STARTING_GOLD=d4(4)*10; else if(GetLevelByClass(CLASS_TYPE_CLERIC, oPC)) STARTING_GOLD=d4(5)*10; else if(GetLevelByClass(CLASS_TYPE_DRUID, oPC)) STARTING_GOLD=d4(2)*10; else if(GetLevelByClass(CLASS_TYPE_FIGHTER, oPC)) STARTING_GOLD=d4(6)*10; else if(GetLevelByClass(CLASS_TYPE_MONK, oPC)) STARTING_GOLD=d4(5); else if(GetLevelByClass(CLASS_TYPE_PALADIN, oPC)) STARTING_GOLD=d4(6)*10; else if(GetLevelByClass(CLASS_TYPE_RANGER, oPC)) STARTING_GOLD=d4(6)*10; else if(GetLevelByClass(CLASS_TYPE_ROGUE, oPC)) STARTING_GOLD=d4(5)*10; else if(GetLevelByClass(CLASS_TYPE_SORCERER, oPC)) STARTING_GOLD=d4(3)*10; else if(GetLevelByClass(CLASS_TYPE_WIZARD, oPC)) STARTING_GOLD=d4(3)*10; else STARTING_GOLD=d4(4)*10; } AssignCommand(oPC, TakeGoldFromCreature(GetGold(oPC), oPC, TRUE)); // hcr3.1 if( !crr_SubraceHCRstartGold( oPC ) || !GetLocalInt(GetModule(), "SUBRACES")) AssignCommand(oPC, DelayCommand(2.0, GiveGoldToCreature(oPC, STARTING_GOLD))); if (PLAYER_STRIPS) {
// Removing PC's equipment. // hcr3.1 added nodrop checking. object oGear = GetItemInSlot(INVENTORY_SLOT_ARMS, oPC); if(GetIsObjectValid(oGear) && !GetIsNoDrop(oGear)) DestroyObject(oGear); oGear = GetItemInSlot(INVENTORY_SLOT_BELT, oPC); if(GetIsObjectValid(oGear) && !GetIsNoDrop(oGear)) DestroyObject(oGear); oGear = GetItemInSlot(INVENTORY_SLOT_BOLTS, oPC); if(GetIsObjectValid(oGear) && !GetIsNoDrop(oGear)) DestroyObject(oGear); oGear = GetItemInSlot(INVENTORY_SLOT_BOOTS, oPC); if(GetIsObjectValid(oGear) && !GetIsNoDrop(oGear)) DestroyObject(oGear); //hcr3.1 took out stripping chest slot pcs get free set of clothes. //oGear = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC); //if(GetIsObjectValid(oGear) && !GetIsNoDrop(oGear)) //DestroyObject(oGear); oGear = GetItemInSlot(INVENTORY_SLOT_CLOAK, oPC); if(GetIsObjectValid(oGear) && !GetIsNoDrop(oGear)) DestroyObject(oGear); oGear = GetItemInSlot(INVENTORY_SLOT_HEAD, oPC); if(GetIsObjectValid(oGear) && !GetIsNoDrop(oGear)) DestroyObject(oGear); oGear = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC); if(GetIsObjectValid(oGear) && !GetIsNoDrop(oGear)) DestroyObject(oGear); oGear = GetItemInSlot(INVENTORY_SLOT_LEFTRING, oPC); if(GetIsObjectValid(oGear) && !GetIsNoDrop(oGear)) DestroyObject(oGear); oGear = GetItemInSlot(INVENTORY_SLOT_NECK, oPC); if(GetIsObjectValid(oGear) && !GetIsNoDrop(oGear)) DestroyObject(oGear); oGear = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC); if(GetIsObjectValid(oGear) && !GetIsNoDrop(oGear)) DestroyObject(oGear); oGear = GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oPC); if(GetIsObjectValid(oGear) && !GetIsNoDrop(oGear)) DestroyObject(oGear); oGear = GetItemInSlot(INVENTORY_SLOT_ARROWS, oPC); if(GetIsObjectValid(oGear) && !GetIsNoDrop(oGear)) DestroyObject(oGear); oGear = GetItemInSlot(INVENTORY_SLOT_BOLTS, oPC); if(GetIsObjectValid(oGear) && !GetIsNoDrop(oGear)) DestroyObject(oGear); oGear = GetItemInSlot(INVENTORY_SLOT_BULLETS, oPC); if(GetIsObjectValid(oGear) && !GetIsNoDrop(oGear)) DestroyObject(oGear); }
// Removing PC's inventory. // hcr3.1 added nodrop checking. object oStuff = GetFirstItemInInventory(oPC); while(GetIsObjectValid(oStuff) && !GetIsNoDrop(oStuff)) { DestroyObject(oStuff); oStuff = GetNextItemInInventory(oPC); }
// Greet PC.
DelayCommand(3.0, SendMessageToPC(oPC, NOGOLD + IntToString(STARTING_GOLD) + " gp.")); DelayCommand(3.0, SendMessageToPC(oPC, HCRINTRO));
// Taking PC shopping.
} } if (nDM || (sCDK!="" && sCDK==GetPersistentString(oMod,"PLAYERDM"))) { effect eImmune = EffectImmunity(IMMUNITY_TYPE_TRAP); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eImmune, oPC); }
if(GetHitDice(oPC)< nGiveLevel && nGiveLevel > 1) { SendMessageToPC(oPC, NEWLEVEL+ IntToString(nGiveLevel)); int nNewXP= (nGiveLevel * (nGiveLevel-1)) / 2 * 1000; DelayCommand(2.0,SetXP(oPC,nNewXP)); DelayCommand(2.1,SetPersistentInt(oPC,"ALLOWLEVEL",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)>1 && GetIsObjectValid(GetItemPossessedBy(oPC,"hc_palbadgecour"))==FALSE) CreateItemOnObject("paladinsbadgeofc", oPC); if(GetLevelByClass(CLASS_TYPE_PALADIN,oPC) && GetIsObjectValid(GetItemPossessedBy(oPC,"hc_paladinsymb"))==FALSE) CreateItemOnObject("paladinsholysymb", oPC); // hcr3 Give PC healing ability as per 3e. if(!GetIsObjectValid(GetItemPossessedBy(oPC,"HC_HEAL_NODROP"))) CreateItemOnObject("healability", oPC);
// hcr3 /*********** HCRHELPER WANDS *********/
/*** DM WANDS ***/ // 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); } // Give DM's a HCR Helper in inventory if(GetIsObjectValid(GetItemPossessedBy(oPC,"HCRHelper"))==FALSE && (nDM || (sCDK!="" && sCDK==GetPersistentString(oMod,"PLAYERDM")))) CreateItemOnObject("HCRHelper", oPC);
/*********** DMHELPER WANDS *********/
/*** PLAYER CHARACTER WANDS ***/ // Give PC's an EmoteWand if using the DMHelper set. if(!GetIsObjectValid(GetItemPossessedBy(oPC,"EmoteWand"))) CreateItemOnObject("emotewand", oPC); // set emote wand to plot 5.4.1(bug fix) object oItem = GetItemPossessedBy(oPC, "EmoteWand" ); if (GetIsObjectValid(oItem)) SetPlotFlag(oItem, TRUE); /*** DM WANDS ***/ // Give DM's a FXWand in inventory if(GetIsObjectValid(GetItemPossessedBy(oPC,"WandOfFX"))==FALSE && (nDM || (sCDK!="" && sCDK==GetPersistentString(oMod,"PLAYERDM")))) CreateItemOnObject("WandOfFX", oPC); // Give DM's a DMHelper in inventory if(GetIsObjectValid(GetItemPossessedBy(oPC,"DMsHelper"))==FALSE && (nDM || (sCDK!="" && sCDK==GetPersistentString(oMod,"PLAYERDM")))) CreateItemOnObject("DMsHelper", oPC);
/*********** NEW DMFI WAND PACKAGE 3.0 *********/
/*** PLAYER CHARACTER WANDS ***/ // Give PC's an EmoteWand if using the DMFIHelper set. if(!GetIsObjectValid(GetItemPossessedBy(oPC,"dmfi_pc_emote"))) CreateItemOnObject("dmfi_pc_emote", oPC); // Give PC's a Dicebag if using the DMFIHelper set. if(!GetIsObjectValid(GetItemPossessedBy(oPC,"dmfi_pc_dicebag"))) CreateItemOnObject("dmfi_pc_dicebag", oPC); // Give PC's a Follow wand if using the DMFIHelper set. if(!GetIsObjectValid(GetItemPossessedBy(oPC,"dmfi_pc_follow"))) CreateItemOnObject("dmfi_pc_follow", oPC);
/*** DM WANDS ***/ /* // hcr3 // remarked out because the onering does all this and creates less clutter. // if you want individual wands instead unremark the wands you want to use. // Give DM's a DMFI Wand in inventory if(GetIsObjectValid(GetItemPossessedBy(oPC,"dmfi_dmw"))==FALSE && (nDM || (sCDK!="" && sCDK==GetPersistentString(oMod,"PLAYERDM")))) CreateItemOnObject("dmfi_dmw", oPC); // Give DM's a DMFI FXWand in inventory if(GetIsObjectValid(GetItemPossessedBy(oPC,"dmfi_fx"))==FALSE && (nDM || (sCDK!="" && sCDK==GetPersistentString(oMod,"PLAYERDM")))) CreateItemOnObject("dmfi_fx", oPC); // Give DM's a DMFI SoundWand in inventory if(GetIsObjectValid(GetItemPossessedBy(oPC,"dmfi_sound"))==FALSE && (nDM || (sCDK!="" && sCDK==GetPersistentString(oMod,"PLAYERDM")))) CreateItemOnObject("dmfi_sound", oPC); // Give DM's a DMFI AfflictWand in inventory if(GetIsObjectValid(GetItemPossessedBy(oPC,"dmfi_afflict"))==FALSE && (nDM || (sCDK!="" && sCDK==GetPersistentString(oMod,"PLAYERDM")))) CreateItemOnObject("dmfi_afflict", oPC); // Give DM's a DMFI XPWand in inventory if(GetIsObjectValid(GetItemPossessedBy(oPC,"dmfi_xp"))==FALSE && (nDM || (sCDK!="" && sCDK==GetPersistentString(oMod,"PLAYERDM")))) CreateItemOnObject("dmfi_xp", oPC); // Give DM's a DMFI MusicWand in inventory if(GetIsObjectValid(GetItemPossessedBy(oPC,"dmfi_music"))==FALSE && (nDM || (sCDK!="" && sCDK==GetPersistentString(oMod,"PLAYERDM")))) CreateItemOnObject("dmfi_music", oPC); // Give DM's a DMFI NPC Control wand in inventory if(GetIsObjectValid(GetItemPossessedBy(oPC,"dmfi_faction"))==FALSE && (nDM || (sCDK!="" && sCDK==GetPersistentString(oMod,"PLAYERDM")))) CreateItemOnObject("dmfi_faction", oPC); */ // Give DM's a the one ring to be able to use all wand function in thier inventory if(GetIsObjectValid(GetItemPossessedBy(oPC,"dmfi_onering"))==FALSE && (nDM || (sCDK!="" && sCDK==GetPersistentString(oMod,"PLAYERDM")))) CreateItemOnObject("dmfi_onering", oPC);
/*********** END OF WAND PACKAGES *********/
// 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); } // Start of playerstate checking // hcr3 7/25/2003 // return if a dm. if (nDM) return; // hcr3 7/27/2003 // persistence code // strip player corpses on enter. // could happen if server restarts while carrying one. object oPcorpse = GetFirstItemInInventory(oPC); while (GetIsObjectValid(oPcorpse)) { if (GetResRef(oPcorpse) == "playercorpse") DestroyObject(oPcorpse); oPcorpse = GetNextItemInInventory(oPC); } int nPersist = GetLocalInt(oMod, "PERSIST"); // hcr3 only do if deathsystem is on. if (GetLocalInt(oMod, "DEATHSYSTEM")) { if (nPersist && !GetLocalInt(oPC, "ENTERED")) // hcr3 8/12/2003 HCLoadDB(sID, oPC);
int nCurState=GPS(oPC); //SendMessageToPC(oPC, "STATE"+IntToString(nCurState)); int nHP=GetPersistentInt(oMod,"LastHP"+GetName(oPC)+sCDK); int nCHP=GetCurrentHitPoints(oPC); // hcr3 8/12/2003 fix changed to limbo and not bleedsystem. if(GetLocalInt(oMod,"LIMBO")) { if (nCurState==PWS_PLAYER_STATE_RESURRECTED || nCurState==PWS_PLAYER_STATE_RESTRUE || nCurState==PWS_PLAYER_STATE_RAISEDEAD) { RemoveEffects(oPC); if(GetItemPossessedBy(oPC,"fuguerobe")!=OBJECT_INVALID) DestroyObject( GetItemPossessedBy(oPC,"fuguerobe")); if(nCurState!=PWS_PLAYER_STATE_RESTRUE && GetLocalInt(oMod,"REZPENALTY")) DelayCommand(1.0, hcRezPenalty(oPC)); // hcr3 7/27/2003 // if not entered then move to graveyard. if (!GetLocalInt(oPC, "ENTERED")) { location lGrave = GetLocation(GetObjectByTag("GraveYard")); DelayCommand(2.5, AssignCommand(oPC, JumpToLocation(lGrave))); } if(nCurState==PWS_PLAYER_STATE_RAISEDEAD) { if( GetLocalInt(oMod,"REZPENALTY") && GetIsPC(oPC)) DelayCommand(2.0, TakeHPs(oPC)); } SPS(oPC,PWS_PLAYER_STATE_ALIVE); location lWhere=GetPersistentLocation(oMod,"RESLOC"+GetName(oPC)+sCDK); DelayCommand(4.0,AssignCommand(oPC,JumpToLocation(lWhere))); //DeletePersistentLocation(oMod, "RESLOC"+GetName(oPC)+sCDK); } // changed if else logic to fix bug in persistent world death restart else if(GetItemPossessedBy(oPC,"fuguerobe")!=OBJECT_INVALID && nCurState==PWS_PLAYER_STATE_ALIVE) { DestroyObject(GetItemPossessedBy(oPC, "fuguerobe")); if(GetLocalInt(oMod,"DEATHOVERREBOOT") ) { //effect eDeath = EffectDeath(FALSE, FALSE); //hcr3 7/25/2003 took out delay // set location fix. // 8/12/2003 fix for fugue check. // hcr3.1 shortened delay a tad DelayCommand(4.5, CheckFugue(oPC)); }
} else if(nCurState==PWS_PLAYER_STATE_ALIVE) { if(nHP && nCHP>nHP) {
// 8/3/2003 fix for fugue check. SetLocalInt(oPC,"LOGINDEATH",1); effect eDam=EffectDamage(nCHP-nHP); DelayCommand(3.0,ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oPC)); GetPersistentLocation(oMod,"RESLOC"+GetName(oPC)+sCDK); } } // raised this if statement above the following one added robe code // hcr3 8/13/2003 fix for player not being killed on reenter from dying. else {
// hcr3.1 changed delay. if(GetLocalInt(oMod,"DEATHOVERREBOOT") ) { effect eDam=ExtraordinaryEffect(EffectParalyze()); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDam, oPC, 8.0); DelayCommand(8.5, CheckFugue(oPC)); } } } else if(GetLocalInt(oMod,"DEATHSYSTEM") ) { SetLocalInt(oPC,"LOGINDEATH",1); effect eDeath = EffectDeath(FALSE, FALSE); if(nCurState == PWS_PLAYER_STATE_DEAD) ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oPC); } // hcr3 7/25/2003 remarked out due to quirky behavior on enter. /*if(!GetLocalInt(oMod,"PRIORTHISREBOOT"+sCDK+GetName(oPC))) { if(nCurState!=PWS_PLAYER_STATE_DEAD) DelayCommand(5.0,PWDB_PlaceCharacter(oPC)); SetLocalInt(oMod,"PRIORTHISREBOOT"+sCDK+GetName(oPC),1); }*/ }// end if deathsystem
InitPCHTFLevels(oPC);
if(!(GetXP(oPC))) SetXP(oPC, 1); // Send a login message to all players if one exists if(GetLocalString(oMod,"LOGINMESSAGE") != "NONE") SendMessageToPC(oPC,GetLocalString(oMod,"LOGINMESSAGE")); // check to see if the pc has entered before. if so run strip talents. // hcr3 7/25/2003 // changed to local no longer need persistent var. if(GetLocalInt(oMod,"DECONENTER")) if (GetLocalInt(oPC, "ENTERED")) ExecuteScript( "hc_strip_talents", GetEnteringObject()); // hcr3.1 added delay. DelayCommand(10.0, SetLocalInt(oPC, "ENTERED", TRUE)); postEvent(); }
__________________
..:: Heavenlynet le net paradisiaque ::..
|