Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

[Script]Limiter la fréquence des repos

Par mobidique le 25/10/2002 à 13:31:51 (#2404267)

Trouvé ici dans la section scripting de Lyoness


Submitted by: Fistandantilus

This script limit how often a PC can rest.

A revised version of my resting script... the last one doesn't check for the last day rested, so if
you wait 24 hours before resting it will think it is the same day and disallow you.

This one also allows the DM of setting a variable in the module or on the PC to allow resting regardless
of the time.


// this script should limit PC's to resting only once every 8 hours
// only assumption which I'm unsure of is that every month in-game has
// 30 days. If that's not the case, then this script will have to be changed.
//
// I've also include the option for a DM to override the rest limit and either
// set a module "DMRestOK" global to 1 which will allow everyone to rest until
// it is set back to 0... or a PC-specific "DMRestOK" global which automatically
// gets set back to 0 when the PC uses it
void main(){
if (GetLastRestEventType() == REST_EVENTTYPE_REST_STARTED){
object oPC = GetLastPCRested();
int nLastRest = GetLocalInt(oPC, "LastRest");
int nLastDay = GetLocalInt(oPC, "LastDay");
int nHour = GetTimeHour();
int nDay = GetCalendarDay();

// check to see if this is the very first time resting
if (((nLastRest == 0) && (nLastDay == 0)) ||
(GetLocalInt(GetModule(),"DMRestOK") == 1) ||
(GetLocalInt(oPC,"DMRestOK") == 1)){
SetLocalInt(oPC, "LastRest", nHour);
SetLocalInt(oPC, "LastDay", nDay);
SetLocalInt(oPC, "DMRestOK", 0);
}

// check to see if it is the same day as the last rest
else if (nDay == nLastDay){
if ((nHour - nLastRest) < 8){
AssignCommand(oPC, ClearAllActions());
SendMessageToPC(oPC, "You cannot rest yet.");
}
}

// if not the same day, but it's just the next day
else if (((nDay - nLastDay) == 1) || ((nDay - nLastDay) == -29)){
if ((nLastRest - nHour) < 16){
AssignCommand(oPC, ClearAllActions());
SendMessageToPC(oPC, "You cannot rest yet.");
}
}
else{
SetLocalInt(oPC, "LastRest", nHour);
SetLocalInt(oPC, "LastDay", nDay);
SetLocalInt(oPC, "DMRestOK", 0);
}
}
}




A retravailler sans doute en particulier pour mettre l'interval minimum de temps entre deux repos en variable de maniére à changer cette durée plus facilement.

Par LeProctophantasmiste le 25/10/2002 à 15:09:43 (#2405143)


if((nLastRest - nHour) 16)
Plus nLastRest est grand plus l'heure correspondante est proche de nHour, non?

Par LeProctophantasmiste le 25/10/2002 à 15:35:26 (#2405385)

EDIT: script modifié pour prendre en compte que les mois ont en fait 28 jours

Si j'ai raison (message précédant), voilà la version avec la variable en tête, comme je suis faignant et fatigué (petite nuit et entretient pour un petit boulot ce matin... ah la vie est dure ;) ) je n'ai vraiment vérifié que ce qui m'intéressait pour faire la modif dans ce script. A priori tout de même il ne marche qu'à une heure près, puisqu'il ne tient pas compte des minutes. I devrait aussi y avoir un pbm si le joueur s'abstient de dormir pendant 1 mois, m'enfin bon...


// this script should limit PC's to resting only once every 8 hours
// only assumption which I'm unsure of is that every month in-game has
// 30 days. If that's not the case, then this script will have to be changed.
//
// I've also include the option for a DM to override the rest limit and either
// set a module "DMRestOK" global to 1 which will allow everyone to rest until
// it is set back to 0... or a PC-specific "DMRestOK" global which automatically
// gets set back to 0 when the PC uses it
void main(){
if (GetLastRestEventType() == REST_EVENTTYPE_REST_STARTED){
object oPC = GetLastPCRested();


////////////////////////////////////////////////////////////////////////
// modifier ici la durée de l'intervalle de temps pendant lequel il
// est interdit de se reposer. Attention, au dessus de 24 ça
// n'aura pas plus d'effet

int nIntervalleSansRepos = 8;
int nLastRest = GetLocalInt(oPC, "LastRest");
int nLastDay = GetLocalInt(oPC, "LastDay");
int nHour = GetTimeHour();
int nDay = GetCalendarDay();

// check to see if this is the very first time resting
if (((nLastRest == 0) && (nLastDay == 0)) ||
(GetLocalInt(GetModule(),"DMRestOK") == 1) ||
(GetLocalInt(oPC,"DMRestOK") == 1)){
SetLocalInt(oPC, "LastRest", nHour);
SetLocalInt(oPC, "LastDay", nDay);
SetLocalInt(oPC, "DMRestOK", 0);
}

// check to see if it is the same day as the last rest
else if (nDay == nLastDay){
if ((nHour - nLastRest) 24 - nIntervalleSansRepos){
AssignCommand(oPC, ClearAllActions());
SendMessageToPC(oPC, "You cannot rest yet.");
}
}
else{
SetLocalInt(oPC, "LastRest", nHour);
SetLocalInt(oPC, "LastDay", nDay);
SetLocalInt(oPC, "DMRestOK", 0);
}
}
}

Par mobidique le 25/10/2002 à 15:51:58 (#2405544)

J'en sais rien moué ... c'est pas moué qui l'ait pondu et j'ai même pas eut l'occasion de le tester ... aloreuuuuuuuh ... Application !

Repos le jour 0 à 20H00.
Tentative de nouveau repos le jour 1 à 2H00 du matin soit donc 6 heure aprés le précédent repos
20 - 2 = 18

Autrement dit,
sur une pendule classique comportant 24 heures,
autoriser les repos toute les 8 heures revient à autoriser le repos lorsque
HeureCourante - HeureDernierRepos - >= 8 (e.g. 17-8=9) ou bien lorsque
la valeur absolue du complémentaire de cette différence est superieur à 16, 16 étant lui même le complémentaire de 8 par rapport à 24 (e.g. |24-9| = 15)
soit
lorsque l'on considére 2 jours se suivants
24 + 2 - 20 = 6 (on ajoute 24 puisque l'heure courante est le lendemain) ou bien
24 - 6 = 18 = 20 - 2

CQFD

YOU WERRRRRRRRRRRRRRRRRRRE RIGHT !

EDIT : m'a fallu plus de temps pour rédiger un essplicatrion que toi pour modifier le script :( y a pas de justice !

Par LeProctophantasmiste le 25/10/2002 à 16:09:09 (#2405695)


J'en sais rien moué ... c'est pas moué qui l'ait pondu


Mobidique aka Fistandantilus, ça sonnaît pourtant bien. Avec un nom pareil ça doit être un cousin à moi.

Tenir compte des minutes ça vaut le coup, ou ça va comme ça? Moi j'aurais tendance à dire qu’on n’est pas à une heure près, mais je ne sais pas trop si c'est gênant pour le joueur...

Par mobidique le 25/10/2002 à 21:18:48 (#2408505)

pareil ... dans le doute abstiens toi, et le mieux est l'énemi du bien ;)

Par isteric le 28/10/2002 à 14:18:54 (#2424201)

c cool mais on le met où ce script ? (j'ai du mal à piger ...)
je cherche aussi un script pour créer un lieu de respawn après la mort d'un joueur (pour pas qu'il respawn là où il est mort)

Par mobidique le 28/10/2002 à 14:26:22 (#2424270)

Ca me semblait évident quand on s'est posé un peu la question de comment faire ça ... :doute: ... Sur le OnResting du module.

Par isteric le 28/10/2002 à 14:28:18 (#2424286)

Provient du message de mobidique
Ca me semblait évident quand on s'est posé un peu la question de comment faire ça ... :doute: ... Sur le OnResting du module.

j'suis supe rlong à la détente :D merci beaucoup:amour:

JOL Archives 1.0.1
@ JOL / JeuxOnLine