La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
FAQ
Rechercher
Liste des Membres
Groupes d'utilisateurs
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
La date/heure actuelle est 12/11/2024 01:31:50
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
Voir le sujet précédent ¤ Voir le sujet suivant | |
---|---|
Auteur | Message |
Bella Lugosi Novice Messages: 17 |
Posté le : 20/03/2004 12:01:40 Sujet du message : Comment limiter l'ecart de lvl dans un groupe de pj?
Etant donné que HoU va sortir, et que les lvl vont aller de 1 à 40, je voudrais savoir comment faire pour que des pj de niveaux trop éloignés (par exemple avec 20 lvl d'écart ou plus) ne puissent pas grouper ensembles.
Je ne sais pas du tout comment m'y prendre alors si quelqu'un peut m'aider... |
Revenir en haut | |
ttsolo Chevalier Messages: 78 Localisation: Brest, où il fait beau toute l année |
J ai vu un système qui donnait un bonus d exp aux membres d un groupe de meme lvl, associé à un malus si les niveaux des pjs étaient trop différents.
Du genre : +30% si les pjs sont de meme lvl puis, -5% par lvl d écart par exemple. Par contre, me demande pas comment ca se scripte, je voudrais bien le savoir moi meme . _________________ Tagazock mon frère [http] |
Revenir en haut | |
EVIl Novice Messages: 13 |
NWScript :
// -> verifie la coherence d'un groupe, et ejecte (ou detruit si NPC) ceux qui s'eloignent d'au moins 5 niveaux void FireAMember(object oAVirer, object oLeader) { string report; if (GetIsPC(oAVirer)) SendMessageToPC(oAVirer,"Votre niveau ne vous permet pas d'appartenir a ce groupe"); SendMessageToPC(oLeader,GetName(oAVirer)+" doit quitter le groupe"); if (GetIsPC(oAVirer)) { report="[PARTY] "+GetName(oAVirer)+ " a ete ejecte du groupe !"; RemoveFromParty(oAVirer); effect eVisualEffect=EffectVisualEffect(VFX_FNF_IMPLOSION); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVisualEffect, oAVirer, 4.0); } else { effect eDeath=EffectDeath(TRUE, TRUE); // Mort spectaculaire report="[PARTY] "+GetName(oAVirer)+ " a donc ete desintegre !"; ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oAVirer); } WriteTimestampedLogEntry(report); SendMessageToAllDMs(report); } void PCLoop() { object oPC = OBJECT_SELF; object oLeader = GetFactionLeader(oPC); int iDelay; if (oPC == oLeader) // Desormais, traitement effectue seulement sur les leaders (evite de retraiter souvent les gros groupes) { object oMinFaction = GetFactionWeakestMember(oPC, FALSE); object oMaxFaction = GetFactionStrongestMember(oPC, FALSE); if (oMinFaction!=oMaxFaction && GetIsObjectValid(oMinFaction) && GetIsObjectValid(oMaxFaction)) // PC seul ou erreur -> aucun traitement { int iLvMin = GetHitDice(oMinFaction); int iLvMax = GetHitDice(oMaxFaction); int iMinPCLevel = iLvMax-2-iLvMax/4; //lv5: lv 2 mini - lv10: 6 mini - lv15: 10 mini - lv20: 13 mini int iMinNPCLevel = iLvMax-5-iLvMax/3; //lv5: lv 1 mini - lv10: 2 mini - lv15: 5 mini - lv20: 9 mini if (iLvMin < iMinPCLevel) // Il y a peut-etre des membres a virer (sauf si animaux) { // Il faut virer le membre le plus faible string report="[PARTY] Groupe illegal: "+GetName(oMinFaction)+ " est lv"+IntToString(iLvMin)+", "+GetName(oMaxFaction)+" est lv"+IntToString(iLvMax); int bFound = FALSE; if (GetHitDice(oLeader)<iMinPCLevel) { WriteTimestampedLogEntry(report); FireAMember(oMaxFaction, oLeader); bFound = TRUE; // DelayCommand(2.0, PCLoop()); // Loop again // return; } else { object oCurrentMember = GetFirstFactionMember(oLeader,FALSE); while (GetIsObjectValid(oCurrentMember) && !bFound) // On en vire un seul a la fois au maximum { int iHD = GetHitDice(oCurrentMember); if (GetIsPC(oCurrentMember) && GetIsPlayableRacialType(oCurrentMember)) // PC ( distinguer d'un familiar, pour lequel GetIsPC est... TRUE ! { if (iHD<iMinPCLevel) { // if (!bFound) // { bFound = TRUE; WriteTimestampedLogEntry(report); // } FireAMember(oCurrentMember, oLeader); } } else // NPC { if (iHD<iMinNPCLevel) { // if (!bFound) // { bFound = TRUE; WriteTimestampedLogEntry(report); // } FireAMember(oCurrentMember, oLeader); } } if (!bFound) oCurrentMember = GetNextFactionMember(oCurrentMember, FALSE); // Inutile si le membre est deja detruit } } if (bFound) iDelay = 4; // Leader groupe en infraction -> on recommence rapidement else iDelay = 12; // Leader groupe avec plus de 4 lv mais OK -> groupe a surveiller } else iDelay = 20; // Leader groupe OK (4 lv au plus) -> surveillance relachee } else // joueur seul ou erreur iDelay = 10; // Pas trop long, car convocation bestioles a surveiller } else // Pas un leader (membre d'un groupe non leader) iDelay = 60; // Surveillance tres relachee DelayCommand(iDelay/2.0+Random(iDelay),PCLoop()); // On boucle entre iDelay/2 et iDelay*3/2 secondes plus tard (limiter le lag + eviter d'etre trop previsible) } void main() { if (GetIsDM(OBJECT_SELF)) { // Rien faire dans le cas d'un DM /* if (GetLocalObject(GetModule(), "No_Sanction")==1) // Sanctions actives if (GetLocalObject(GetModule(), "No_Sanction")!=1) // Sanctions actives { object item = GetObjectByTag("bm_nosanc tion",0); if (GetIsObjectValid(item)) { SetLocalObject(GetModule(), "No_Sanction_Item", item); SetLocalObject(GetModule(), "No_Sanction", 1); } }*/ } else // Player Loop - introduction delai variable - execute seulement la premire fois if (GetIsPC(OBJECT_SELF)) DelayCommand(10.0+Random(300)/10.0,PCLoop()); } a mettre dans proprieté module dans oncliententer |
Revenir en haut | |
Bella Lugosi Novice Messages: 17 |
Ah merci ca faisait longtemps que je desesperais!! je vais essayer ca, merci beaucoup.
|
Revenir en haut | |
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
Page 1 sur 1 ¤
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum