La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 23/11/2024 13:22:13


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Bella Lugosi
Novice
Inscrit le: 12 Mar 2004
Messages: 17
Répondre en citant
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... Confused
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
ttsolo
Chevalier
Inscrit le: 23 Mar 2004
Messages: 78
Localisation: Brest, où il fait beau toute l année
Répondre en citant
Posté le : 31/03/2004 11:41:11 Sujet du message :

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 Very Happy .
_________________
Tagazock mon frère
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
EVIl
Novice
Inscrit le: 08 Mar 2004
Messages: 13
Répondre en citant
Posté le : 01/04/2004 02:21:47 Sujet du message :

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 -&gt; on recommence rapidement
                    else
                        iDelay = 12; // Leader groupe avec plus de 4 lv mais OK -&gt; groupe a surveiller
                    }
                else
                    iDelay = 20; // Leader groupe OK (4 lv au plus) -&gt; 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());

}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


a mettre dans proprieté module dans oncliententer
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Bella Lugosi
Novice
Inscrit le: 12 Mar 2004
Messages: 17
Répondre en citant
Posté le : 01/04/2004 17:38:25 Sujet du message :

Ah merci ca faisait longtemps que je desesperais!! je vais essayer ca, merci beaucoup.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Montrer les messages depuis :
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


Sauter vers:
FAQ | Rechercher | Liste des Membres | Groupes d'utilisateurs | S'enregistrer | Profil | Se connecter pour vérifier ses messages privés | Connexion
Powered by phpBB 2.* [m] © 2001, 2002 phpBB Group
Theme rewritten in beautiful XHTML code by Baldurien.
Thème "La Bibliothèque de Neverwinter" crée par Kruger
Traduction par : phpBB-fr.com
Page generated in 49.145ms