
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.







La date/heure actuelle est 27/04/2025 19:55:18
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 |
Flumby Chevalier ![]() Messages: 71 |
![]() Bonjour,
J'ai créé un script me permettant de suicider des pnj, sois le pnj part en flamme, soit le pnj meurt et la version non vivante vient a la place. Je passe par des variables locale pour définir la porter du pj avant suicide du pnj, le tag de la version zombie et le type de suicide. Je me suis dis que si je jouais avec le onPerceive, ça serait bien mieux que du heartbeat. Bref je me lance et stupéfaction ça semble marcher. ![]() Mon pnj meurt mais pas a l'écran du client. Il suffit de quitter de zone et revenir pour voir qu'il est bien mort. Enfin ce bug est assez aléatoire et parfois ca marche nickel (ce genre de bug je les hais) Donc voici le bout de code réduit a son extrême (bug aussi chez moi ![]() si quelqu'un pouvait me dire ou se situe le probleme ? NWScript : void ActionCreate(string sCreature, location lLoc) { CreateObject(OBJECT_TYPE_CREATURE, sCreature, lLoc); } void main() { // SpawnScriptDebugger(); // ExecuteScript("nw_c2_defa ult2",OBJECT_SELF); object oPercep = GetLastPerceived(); // Distance de percpetion du PJ float fDistance = GetLocalFloat(OBJECT_SELF, "Distance"); // Drapeau pour eviter une execution double des cration de pnj int nDejaPasse = GetLocalInt(OBJECT_SELF,"DejaPasse"); // Choix si le Pj part en fumee ou animee energie necro string sTypeMort=GetLocalString(OBJECT_SELF,"TypeMort"); // Tag de la version necro du vivant string sCreature = GetLocalString(OBJECT_SELF, "CORPS_MV"); effect eMortPNJ = EffectDeath(TRUE,FALSE); effect eRappel = EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD); effect eMortVisuel2 = EffectVisualEffect(VFX_IMP_FLAME_M); location lLoc = GetLocation(OBJECT_SELF); if (nDejaPasse == FALSE && GetIsPC(oPercep) == TRUE && GetDistanceToObject(oPercep) <= fDistance) { SetLocalInt(OBJECT_SELF,"DejaPasse",TRUE); if(sTypeMort == "Zombie") { ApplyEffectToObject(DURATION_TYPE_INSTANT,eMortPNJ,OBJECT_SELF); ApplyEffectToObject(DURATION_TYPE_INSTANT,eRappel,OBJECT_SELF); ActionCreate(sCreature,lLoc); } else { ApplyEffectToObject(DURATION_TYPE_INSTANT,eMortVisuel2,OBJECT_SELF); ApplyEffectToObject(DURATION_TYPE_INSTANT,eMortPNJ,OBJECT_SELF); } DestroyObject(OBJECT_SELF,2.0f); } } _________________ Premier DM a avoir inauguré la chute d'auberge sur Joueur rebel Preuve ![]() |
Revenir en haut | ![]() ![]() ![]() |
Flumby Chevalier ![]() Messages: 71 |
*gros soupir*
Bon ben j'ai résolu mon probleme en mettant le script sur le onHeartBeat (enfin modifié) le seul soucis, c'est que la détection se fait toutes les tranches de 6 secondes ![]() _________________ Premier DM a avoir inauguré la chute d'auberge sur Joueur rebel Preuve ![]() |
Revenir en haut | ![]() ![]() ![]() |
Black Knight Grand Maître Chanteur du Conseil ![]() Messages: 1031 Localisation: Fin fond du trou du cul du monde |
Tu fais en sorte que ce soit un void main, tu le mets en une fonction, exemple :
NWScript :
void ActionCreate(string sCreature, location lLoc) { CreateObject(OBJECT_TYPE_CREATURE, sCreature, lLoc); } void FONCTION(object oPercep) { // SpawnScriptDebugger(); // ExecuteScript("nw_c2_defa ult2",OBJECT_SELF); // Distance de percpetion du PJ float fDistance = GetLocalFloat(OBJECT_SELF, "Distance"); // Drapeau pour eviter une execution double des cration de pnj int nDejaPasse = GetLocalInt(OBJECT_SELF,"DejaPasse"); // Choix si le Pj part en fumee ou animee energie necro string sTypeMort=GetLocalString(OBJECT_SELF,"TypeMort"); // Tag de la version necro du vivant string sCreature = GetLocalString(OBJECT_SELF, "CORPS_MV"); effect eMortPNJ = EffectDeath(TRUE,FALSE); effect eRappel = EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD); effect eMortVisuel2 = EffectVisualEffect(VFX_IMP_FLAME_M); location lLoc = GetLocation(OBJECT_SELF); if (nDejaPasse == FALSE && GetIsPC(oPercep) == TRUE && GetDistanceToObject(oPercep) <= fDistance) { SetLocalInt(OBJECT_SELF,"DejaPasse",TRUE); if(sTypeMort == "Zombie") { ApplyEffectToObject(DURATION_TYPE_INSTANT,eMortPNJ,OBJECT_SELF); ApplyEffectToObject(DURATION_TYPE_INSTANT,eRappel,OBJECT_SELF); ActionCreate(sCreature,lLoc); } else { ApplyEffectToObject(DURATION_TYPE_INSTANT,eMortVisuel2,OBJECT_SELF); ApplyEffectToObject(DURATION_TYPE_INSTANT,eMortPNJ,OBJECT_SELF); } DestroyObject(OBJECT_SELF,2.0f); } } void main() { object oPercep = GetLastPerceived(); FONCTION(oPercep); DelayCommand(1,0, FONCTION(oPercep)); DelayCommand(2,0, FONCTION(oPercep)); DelayCommand(3,0, FONCTION(oPercep)); DelayCommand(4,0, FONCTION(oPercep)); DelayCommand(5,0, FONCTION(oPercep)); } Fait assez rapidement, donc verifie tout. _________________ [http] |
Revenir en haut | ![]() ![]() ![]() |


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