SVP Comment je fais pour vérifier qu'un oPC se trouve bien dans une zone de mon choix par l'intermédiaire d'un tag par exemple
Pour ce script
qui fonctionne je voudrais ajouter des conditions de ce genre afin de :
(il est appliqué sur le OnEnter de ttes les zones concernées!)
if si je suis dans LES zones que je veux
{
setAreaTemperature(oEntering, -30.0f, 600.0f);
}
else if si je suis dans celles la
{
setAreaTemperature(oEntering, -15.0f, 600.0f);
}
else if et dans celles ci
{
setAreaTemperature(oEntering, -5.0f, 600.0f);
}
ensuite pareil ici pour ne pas redonner de points de vie lorsque oPC arrive dans une zone énuméré ci dessus
else
{
if oPC se trouve dans les zones que je veux
{
// Sinon on regenere les HP perdu de 1d6 HP par fRecheck seconde
int nRegen = d6();
float fRecheckMod = fRecheck;
fRecheckMod = fRecheck - 599;
// 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(fRecheckMod, 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");
}
}
ici le script en entier tel qu'il fonctionne actuellement
void setAreaTemperature(object oPC, float fTemperature, float fRecheck = 600.0f, int bFirst = TRUE) {
//if(!GetIsPC(oPC)) return; Modification: Retirer les // pour rendre le script effectif uniquement sur un joueur
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);
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"))
{
float fRecheckMod = fRecheck;
int nDamage = 0;
if(fTemperature <= -30.0f)
{ // Si la temperature est inferieure ou egale a -30 degres
nDamage = d6(1); // 3D6 de dommage
fRecheckMod = fRecheck - 590;
}
else if(fTemperature <= -15.0f)
{ // Si la temperature est inferieure ou egale a -15 degres
nDamage = d6(1); // 2D6 de dommage
fRecheckMod = fRecheck - 500;
}
else if(fTemperature <= 5.0f)
{ // Si la temperature est inferieure ou egale a 5 degres
nDamage = d6(); // 1D6 de dommage
fRecheckMod = fRecheck;
}
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...
if(!(nSave >= 1))
{
SendMessageToPC(oPC, "Vous êtes victime du froid, il fait " + FloatToString(fTemperature, 18, 0) + "°C." + FloatToString(fRecheckMod, 18, 0) + FloatToString(fRecheck, 18, 0));
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDamage, DAMAGE_TYPE_COLD), oPC);
SetLocalInt(oPC, "nTemperatureDamaged", nDamage + GetLocalInt(oPC, "nTemperatureDamaged"));
}
DelayCommand(fRecheckMod, setAreaTemperature(oPC, fTemperature, fRecheck, FALSE));
}
else
{
// Sinon on regenere les HP perdu de 1d6 HP par fRecheck seconde
int nRegen = d6();
float fRecheckMod = fRecheck;
fRecheckMod = fRecheck - 599;
// 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(fRecheckMod, 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();
setAreaTemperature(oEntering, -30.0f, 600.0f);
}
NB: oui bon c le meme que dans boucle mais le sujet est différent et ouis avec un o peu de chance je vais pouvoir le finir de grrr de script

.
apres ca champagne! beurk pas bon apres ca wiskey