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 23/11/2024 15:40:37
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 |
Raudgers Ecuyer Messages: 46 Localisation: En furtif à coter de toi... |
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 <= -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."); } //:///////////////////////// ////////////////////////////// //////////////////// 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)); } 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é 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 | |
La Rose Noire Novice Messages: 17 |
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 | |
Ivellios Légende vivante Messages: 447 Localisation: Poitiers |
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))) 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))) 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 | |
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