[Demande d'aide] Scripts de mort

Répondre
Partager Rechercher
Salut à tous,

Pour ceux qui ne me connaissent pas, je suis JB, co-gérant actuel du module Lyncya

Je suis parvenu à développer un PvP très intéressant opposant deux factions, mais bien évidemment c'est quand tout devient intense que les problèmes surviennent.

Ainsi, j'aurais besoin de votre aide pour me pondre quelques scripts.

L'idéal serait bien sûr un gros script qui incluerait toutes les demandes, mais je ne veux pas abuser de votre gentillesse, vous qui prenez de votre temps pour m'aider!

Alors voici ce dont j'aurais besoin:

-Script qui met l'effet hébété (possibilité de marcher mais rien d'autre je crois -> A vérifier) pendant 2 minutes à tout PJ après un rez.

-Script qui met l'effet hébété (même remarque) à toute personne Agonisante (ou qui a moins que 10% de sa vie totale par exemple)


-Script qui met un "countdown" lors d'un kill, et que l'on retire 4000xp au personnage à chaque nouveau rez qui intervient moins de 2 minutes après un premier rez, et ce afin d'éviter les "chain rez / chain kills".

-Script qui permet d'ajouter une option dans l'ui clic droit: "Tuer RP" ce déposerait tout l'inventaire du mort près de son cadavre et enverrait un message sur le Canal MD: "X a été tué RP par Y, dans la zone Z".



Je sais que je vous en demande beaucoup, mais si vous pouviez me filer un coup de main ça serait super!

Merci d'avance,

JB
Petite précision pour affiner un peu ton plan :
Citation :
-Script qui met l'effet hébété (même remarque) à toute personne Agonisante (ou qui a moins que 10% de sa vie totale par exemple)
Pour les dégâts, il n'existe pas d'évènement de base qui réagisse lorsqu'un joueur reçoit un coup. On ne peut pas savoir ce qui se passe au niveau des dégâts, au moment où un joueur en subit. A moins que NWNX puisse le détecter (chose que j'ignore aussi), mais ça impliquerait l'utilisation de NWNX. En prenant en compte également qu'il faudrait modifier tous les sorts de soins, s'ils remontent les points de vie au delà de ces 10%.

Citation :
-Script qui permet d'ajouter une option dans l'ui clic droit: "Tuer RP" ce déposerait tout l'inventaire du mort près de son cadavre et enverrait un message sur le Canal MD: "X a été tué RP par Y, dans la zone Z".
Ceci impliquera non-seulement plusieurs scripts, mais aussi une modification du menu contextuel. Ca représente aussi beaucoup de travail.

Citation :
-Script qui met un "countdown" lors d'un kill, et que l'on retire 4000xp au personnage à chaque nouveau rez qui intervient moins de 2 minutes après un premier rez, et ce afin d'éviter les "chain rez / chain kills".
Ca, c'est déjà un peu moins compliqué, mais un joueur pourra facilement perdre deux niveaux, s'il a déjà un niveau peu élevé.

Citation :
-Script qui met l'effet hébété (possibilité de marcher mais rien d'autre je crois -> A vérifier) pendant 2 minutes à tout PJ après un rez.
Ca c'est facile : Mettre l'effet hébété dans le script de respawn lorsque le joueur clique sur le bouton respawn. Si tu as un scripteur dans ton équipe, il pourra facilement intégrer ce genre de chose dans le script concerné :
Code PHP:

ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectDazed(),oPlayer,120.0); 

Citation :
Citation :
-Script qui met un "countdown" lors d'un kill, et que l'on retire 4000xp au personnage à chaque nouveau rez qui intervient moins de 2 minutes après un premier rez, et ce afin d'éviter les "chain rez / chain kills".
Ca, c'est déjà un peu moins compliqué, mais un joueur pourra facilement perdre deux niveaux, s'il a déjà un niveau peu élevé.
Pour le chain death, il faut utiliser l'évènement onPlayerDeath, pour le chain rez le onPlayerRespawn, le fonctionnement est quasiment le même.
La gestion de time assume l'utilisation du plugin nwnx xp_util, vous l'avez sûrement déjà.
Code PHP:

#include "inc_lib"
// onDeath
void main()
{
   
// le tueur
   
object p GetLastHostileActor(p);

   
// temps actuel
   
int now NWNXGetInt("UTIL""TM"""0);
   
// dernier temps
   
int last GetLocalInt(p"depoc");

   
// punir si ça fait moins de deux minutes
   
if ((nowlast) < 120)
      
punish(p);

   
// stocke le temps actuel comme dernier temps
   
SetLocalInt(p"depoc"now);

Code PHP:

#include "inc_lib"
// onRes
void main()
{
   
// pareil
   
object p GetLastRespawnButtonPresser();
   
int now NWNXGetInt("UTIL""TM"""0);
   if ((
now GetLocalInt(p"repoc")) < 120)
       
punish(p);
   
SetLocalInt(p"repoc"now);

Code PHP:

// Librairie inc_lib
// retire 4000 xp à o, verrou sur le niveau actuel de o
void punish(object o);
// récupére les points d'xp nécessaires pour être au niveau l
int _getXP(int l);
// récupére le niveau (ecl inclus) de o
int _getECLLevel(object o);

void punish(object o)
{
   
// xp nécessaire pour lock le delevel
   
int pxp _getXP(_getECLLevel(o));

   
// xp actuel moins la pénalité
   
int cxp GetXP(o) - 4000;

   
// affecte la pénalité avec verrou sur le niveau actuel
   
SetXP(o, (cxp pxp) ? cxp pxp);
}

int _getXP(int l)
{
   return ((((
1) * l) / 2) * 1000);
}
int _getECLLevel(object o)
{
    return 
GetHitDice(o) + StringToInt(Get2DAString("raciasubtypes""ECL"GetSubRace(o)));

C'est pas dit que ça compile, j'ai fait ça comme ça, mais tu vois le principe.
Citation :
onPlayerRespawn
Cet évènement n'est plus actif. Il est resté dans NWN2 pour des raisons de compatibilité avec les scripts de NWN1.

Il faut modifier les scripts "gui_death_respawn" et "gui_death_respawn_self". Il me semble que l'un des deux fonctionne en multi-joueur et l'autre pas. Dans le doute, mieux vaut modifier les deux.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés