|
Publié par Ido
if(fTemperature <= -30.0f) { // Si la temperature est inferieure ou egale a -30 degres nDamage = d6(3); // 3D6 de dommage SendMessageToPC(oPC, "Vous êtes victime du froid -30."); ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDamage, DAMAGE_TYPE_COLD), oPC); DelayCommand(fRecheck/60, setAreaTemperature(oPC, fTemperature, fRecheck, FALSE)); SetLocalInt(oPC, "nTemperatureDamaged", nDamage); } else if(fTemperature <= -15.0f) { // Si la temperature est inferieure ou egale a -15 degres nDamage = d6(2); // 2D6 de dommage SendMessageToPC(oPC, "Vous êtes victime du froid -15."); DelayCommand(fRecheck/6, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDamage, DAMAGE_TYPE_COLD), oPC)); DelayCommand(fRecheck/6, setAreaTemperature(oPC, fTemperature, fRecheck, FALSE)); SetLocalInt(oPC, "nTemperatureDamaged", nDamage); } else if(fTemperature <= 5.0f) { // Si la temperature est inferieure ou egale a 5 degres nDamage = d6(); // 1D6 de dommage SendMessageToPC(oPC, "Vous êtes victime du froid. -5"); ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDamage, DAMAGE_TYPE_COLD), oPC); DelayCommand(fRecheck, setAreaTemperature(oPC, fTemperature, fRecheck, FALSE)); SetLocalInt(oPC, "nTemperatureDamaged", nDamage); }
Je ne comprand pas des que j'écris ca comme ca ca marche plus pourtant si je retire le delay command devant ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDamage, DAMAGE_TYPE_COLD), oPC) il applique les dégats mais ne relance pas l'execution de la fonction.
Ben d'apres ces observation je dirais que le prob vient du delay mais euh je vois pas pourquoi......??,,
Relit plus.
Script corrigé:
void setAreaTemperature(object oPC, float fTemperature, float fRecheck = 600.0f, int bFirst = TRUE) { // Si oPC n'est pas un joueur, on arrete de suite. //if(!GetIsPC(oPC)) return; Modification: On rend le script effectif sur toutes les créatures // Si c'est le premier passage sur cette fonction if(bFirst) { // On enregistre dans la variable locale fTemperature la temperature du // joueur, au cas ou, pour une utilisation hors de cette fonction. SetLocalFloat(oPC, "fTemperature", fTemperature); // On sauvegarde la zone ou le joueur se trouvait, pour pouvoir lui // rendre ses points de vie une fois qu'il en aura change. SetLocalString(oPC, "sTemperatureArea", GetName(GetArea(oPC))); // On fait effectuer au joueur le jet de vigueur contre le froid, avec // pour DD 15 + nombre de fois que le joueur a fait un jet de vigueur // pour des raisons de temperature. } // Si on est toujours dans la meme zone froide if(GetName(GetArea(oPC)) == GetLocalString(oPC, "sTemperatureArea")) { int nSave = FortitudeSave(oPC, GetLocalInt(oPC, "nTemperatureShooted") + 15, SAVING_THROW_TYPE_COLD); // On sauve que le joueur a fait un jet de vigueur pour les prochaines fois SetLocalInt(oPC, "nTemperatureShooted", GetLocalInt(oPC, "nTemperatureShooted") + 1); // On verifie si le joueur a reussi son jet (ou s'il est immunise aux degats // de froid), dans ce cas on ne fait pas de dommages. Sinon... float fRecheckMod = fRecheck; if(!(nSave >= 1)) { int nDamage = 0; if(fTemperature <= -30.0f) { // Si la temperature est inferieure ou egale a -30 degres nDamage = d6(3); // 3D6 de dommage fRecheckMod = fRecheck / 60; } else if(fTemperature <= -15.0f) { // Si la temperature est inferieure ou egale a -15 degres nDamage = d6(2); // 2D6 de dommage fRecheckMod = fRecheck / 6; } else if(fTemperature <= 5.0f) { // Si la temperature est inferieure ou egale a 5 degres nDamage = d6(); // 1D6 de dommage fRecheckMod = fRecheck / 60; } SendMessageToPC(oPC, "Vous êtes victime du froid, il fait " + FloatToString(fTemperature, 18, 0) + "°C."); ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDamage, DAMAGE_TYPE_COLD), oPC); // On sauvegarde les degats effectues SetLocalInt(oPC, "nTemperatureDamaged", nDamage); } //On relance l'execution de la fonction //Modification: Si la température est inférieure ou égale à -30.0f, on relance le script // dix fois plus vite. DelayCommand(fRecheckMod, setAreaTemperature(oPC, fTemperature, fRecheck, FALSE)); } else { // Sinon on regenere les HP perdu de 1d6 HP par fRecheck seconde int nRegen = d6(); // Au cas ou on aurai rendu tous ses HP au joueur, on stop le script if(nRegen > GetLocalInt(oPC, "nTemperatureDamaged")) nRegen = GetLocalInt(oPC, "nTemperatureDamaged"); SendMessageToPC(oPC, "De retour à une température normale, votre corps se réchauffe."); ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(nRegen), oPC); int nNewDamaged = GetLocalInt(oPC, "nTemperatureDamaged") - nRegen; if(nNewDamaged > 0 && GetMaxHitPoints(oPC) > GetCurrentHitPoints(oPC)) { SetLocalInt(oPC, "nTemperatureDamaged", nNewDamaged); DelayCommand(fRecheck, setAreaTemperature(oPC, fTemperature, fRecheck, FALSE)); } else { SendMessageToPC(oPC, "Votre corps a retrouvé une température normale."); // On libere la memoire DeleteLocalInt(oPC, "nTemperatureDamaged"); DeleteLocalInt(oPC, "nTemperatureShooted"); DeleteLocalString(oPC, "sTemperatureArea"); DeleteLocalFloat(oPC, "fTemperature"); } } }
void main() { // On recupere l'objet entrant object oEntering = GetEnteringObject(); // On defini la temperature de oEntering a -40 degres, et // reverification chaque 5 secondes setAreaTemperature(oEntering, -40.0f, 5.0f); }
PS: N'oublie pas les balises [PHP][/PHP]
|