La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 26/04/2024 15:04:28


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Raudgers
Ecuyer
Inscrit le: 08 Aoû 2005
Messages: 46
Localisation: En furtif à coter de toi...
Répondre en citant
Posté le : 19/10/2010 06:07:28 Sujet du message : Punir le team kill

Bonjour à tous !

voila voila, j'ai un petit soucis, qui pour certains experts qui passeront lire cela ne sera certainement qu'une boutade.

J'ai passé mon module en full pvp (jusque là, ça va...) La répartition des équipes est faite selon l'alignement. Depuis le passage en full pvp, les sorts de zone touche évidement sa propre équipe, et sans script anti team kill, les magos continuent de balancer leurs sorts à travers l'équipe ne se souciant pas de tuer ou non les co-equipiers, et le probleme est : que je n'arrive pas a appliqué une sanction sur les "team kill" voici mon OnPlayerDeath original:

NWScript :
#include "dem_color_text"
void main()
{
    object oPlayer = GetLastPlayerDied();
    object oKiller = GetLastAttacker(oPlayer);
    string sName = GetName(oPlayer);
    string sName2 = GetName(oKiller);
    string sPCName = GetPCPlayerName(oPlayer);
    string sPKName = GetPCPlayerName(oKiller);
    object oMaster = GetMaster(oKiller);

string sDodo = GetLocalString(oPlayer, "dodo");
if (sDodo == "ok")
  {
      int nHeal = GetMaxHitPoints(oPlayer);
      effect eHeal = EffectHeal(nHeal);
      effect eRez = EffectResurrection();
      ApplyEffectToObject(DURATION_TYPE_INSTANT, eRez, oPlayer);
      ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oPlayer);
      int nDam = (GetCurrentHitPoints(oPlayer) - 1);
      effect eDam = EffectDamage(nDam);
      ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oPlayer);
      DeleteLocalString(oPlayer, "dodo");
      AssignCommand(oPlayer, ActionRest());
      return;
  }

    object oAmuMort = GetItemPossessedBy(oPlayer, "BIEN");
                if (!GetIsObjectValid(oAmuMort))
                    {oAmuMort = GetItemPossessedBy(oPlayer, "MAL");}

        while (GetIsObjectValid(oMaster))
        {
            if (GetIsPC(oMaster) &&
              !GetIsDM(oMaster) &&
              !GetIsDMPossessed(oMaster))
            {
                sPKName = GetPCPlayerName(oMaster);
                oKiller = oMaster;
                break;
            }
            oMaster = GetMaster(oMaster);
        }
        // Si ont a un PC valide et le killer n'est pas du
        // players faction, alors ont insert le PK.
        if (sPKName != "" && !GetFactionEqual(oPlayer, oKiller))
        {
          object oPCbeta = GetFirstFactionMember(oKiller);
          object oMyAreaBeta = GetArea(oPlayer);
          int iHDPlayer = GetHitDice(oPlayer);
          int iGoldpk = (GetHitDice(oPlayer))*2;
          int iAligPlayer = GetAlignmentGoodEvil(oPlayer);
          int iXPpk;
          int iBoMa;
          int iBplus;
          int iHDPK;
          int iMul;
          object oAmu;
          int iKill;
          int iKillPts;
          string sMouru;
          while (GetIsObjectValid(oPCbeta))
                {
                if (!GetIsDM(oPCbeta) && oMyAreaBeta == GetArea(oPCbeta))
                    {
                oAmu = GetItemPossessedBy(oPCbeta, "BIEN");
                if (!GetIsObjectValid(oAmu))
                    {oAmu = GetItemPossessedBy(oPCbeta, "MAL");}
                iKill = GetLocalInt(oAmu, "nkill");
                iKillPts = GetLocalInt(oAmu, "nkillpts");
                sMouru = GetLocalString(oAmu, "etatmort");

                int iAligPCbeta = GetAlignmentGoodEvil(oPCbeta);
                if ((iAligPCbeta == ALIGNMENT_GOOD && iAligPlayer == ALIGNMENT_EVIL) || (iAligPCbeta == ALIGNMENT_EVIL && iAligPlayer == ALIGNMENT_GOOD) || sMouru != "mort")
                    {
                    iHDPK = GetHitDice(oPCbeta);
                    iBoMa = iHDPlayer-iHDPK;
                    iBplus = abs(iBoMa)*2;
                    if (iHDPlayer < iHDPK)iMul = 38+iBplus;
                    if (iHDPlayer > iHDPK)iMul = 29+iBplus;
//                    if (iBoMa &lt;= -5) {iBoMa = -10; iMul = 20;};
                    if (iBoMa > 7) iBoMa = 7;
                    if (iBoMa > -8) {SetLocalInt(oAmu, "nkillpts", iKillPts+1);};
                    iBoMa = iBoMa*iMul;
                    iXPpk = 650+iBoMa;
                        AssignCommand(OBJECT_SELF, SpeakString(ColorText("** "+sName+" a ete acheve par "+sName2+" **","m"), TALKVOLUME_SHOUT));
                    SetLocalInt(oAmu, "nkill", iKill+1);
                    GiveXPToCreature(oPCbeta,iXPpk);
                    GiveGoldToCreature(oPCbeta,iGoldpk);
                    // mettre valeur a 100 kill //
                    if (iKillPts > 99 && GetItemPossessedBy(oPCbeta, "MAL")!= OBJECT_INVALID)
                      {
                      DeleteLocalInt(oAmu, "nkillpts");
                      CreateItemOnObject("ptsmal", oPCbeta, 3);
                      SendMessageToPC(oPCbeta, "Vous avez atteind 100 Kills Valables, votre Seigneur vous recompence");
                      }
                    if (iKillPts > 99 && GetItemPossessedBy(oPCbeta, "BIEN")!= OBJECT_INVALID)
                      {
                      DeleteLocalInt(oAmu, "nkillpts");
                      CreateItemOnObject("ptsbien", oPCbeta, 3);
                      SendMessageToPC(oPCbeta, "Vous avez atteind 100 Kills Valables, votre Seigneur vous recompence");
                      }
                    }
                  }
                oPCbeta = GetNextFactionMember(oKiller);
                }
        }
    // Enlever les Henchmen.
    int nNth = 1;
    object oHench = GetHenchman(oPlayer, nNth);
    while (GetIsObjectValid(oHench))
    {
        RemoveHenchman(oPlayer, oHench);
        nNth++;
    }

    SetLocalString(oAmuMort, "etatmort", "mort");
    PopUpDeathGUIPanel(oPlayer, TRUE, TRUE, 0, "Vous pouvez quitter, mais votre statut restera celui de mort, revenir a la vie avec une penalite de temps, ou attendre une resurection.");
}
//:Confused///////////////////////// ////////////////////////////// ////////////////////

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.


Auquel j'ai tenté d'inserer :
NWScript :
if (((iAligPCbeta == ALIGNMENT_GOOD) == (iAligPlayer == ALIGNMENT_GOOD)) || ((iAligPCbeta == ALIGNMENT_EVIL) == (iAligPlayer == ALIGNMENT_EVIL)))
                    {
                    DelayCommand(0.1, ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectCutsceneImmobilize(),oKiller,120.0));
                    DelayCommand(0.1, ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectPetrify(),oKiller,120.0));
                    SendMessageToPC(oKiller, "Penalite de 1000 po et 2 mn pour votre erreure stupide.");
                    TakeGoldFromCreature(1000, oKiller);
                    AssignCommand(OBJECT_SELF, SpeakString(ColorText("** "+sName2+" a team kill "+sName+" **","m"), TALKVOLUME_SHOUT));
                    }
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 un moment j'avais un resultat, mais l'opposé ce l'effet voulut, si un evil tuais un good ou inversement, il etais sanctionné Confused Au lieu de sanctionné un kill d'evil sur un autre evil, ou good sur un autre good.

Je souhaitais aussi rajouter une pénalitée d'xp mais je n'arrive pas a utiliser la fonction GetXP...

J'esper trouver une personne qui pourrai m'expliquer mes erreures.

Merci a toutes et à tous.
_________________
I need your help.Give light to me please.
J'ai besoin de votre aide. Donnez-moi la lumière s'il vous plaît.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
La Rose Noire
Novice
Inscrit le: 02 Fév 2010
Messages: 17
Répondre en citant
Posté le : 17/01/2011 17:26:08 Sujet du message :

De mémoire, il suffit de modifier une variable de OnModuleLoad pour empêcher les sorts d'AOE de blesser les créatures neutral (donc les autres joueurs qui ne vous ont pas agressé.

Cherche dans cette direction là.
_________________
Cyntraën - Renaissance
Notre Blog
Neverwinter Script
Blog sur le scriptage
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Ivellios
Légende vivante
Inscrit le: 25 Jan 2005
Messages: 447
Localisation: Poitiers
Répondre en citant
Posté le : 17/01/2011 18:04:18 Sujet du message :

Tu peu faire comme l'a dit La Rose Noir c'est à dire désactiver le Friendly Fire.
Si dans un autre cas tu veux laisser ça actif pour rendre le jeu plus réaliste (et funky accessoirement) ton bout de code n'est pas si mauvais, par contre il faudrait savoir où tu l'as placé dans un premier temps, et dans un second temps corriger ton test :

NWScript :
if (((iAligPCbeta == ALIGNMENT_GOOD) == (iAligPlayer == ALIGNMENT_GOOD)) || ((iAligPCbeta == ALIGNMENT_EVIL) == (iAligPlayer == ALIGNMENT_EVIL)))
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.


Ici tu places un == entre les comparaisons d'alignement, il serait plus judicieux de mettre des && ici (SI "Alignement de A == Bon" ET "Alignement de B == Bon").

Donc en gros :
NWScript :
if (((iAligPCbeta == ALIGNMENT_GOOD) && (iAligPlayer == ALIGNMENT_GOOD)) || ((iAligPCbeta == ALIGNMENT_EVIL) && (iAligPlayer == ALIGNMENT_EVIL)))
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.


Comme je le disais tout dépend d'où tu le places car les variables n'ont pas forcement la même signification, bonne chance.
_________________
Scripts, systèmes, fonctions,... c'est par ici...
Pyjama pour castor, une vocation, un avenir sûr
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger 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 45.595ms