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 14:53:54
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 |
PsyCalimero Ecuyer Messages: 44 |
Bonjour tout le monde, j'ai visité le forum et j'y ai trouvé des instruction pour le script anti deco reco respawn... Seulement voilà, dans le OnRespawn, le personnage ne perd pas son objet (tag cartemort)... Pire, il en obtient un autre...
De l'aide svp:D j'aimerai que tout objet de tag cartemort soit supprimé de l'inventaire au respawn ! merci bcp ! Voici mon script NWScript :
#include "nw_i0_plot"
Le code a colorer syntaxiquement est trop long (plus de 10240 caractères) et risque de ne pas s'afficher du tout. Vous pouvez le voir en version colorée ici.void ApplyPenalty(object oDead) { int Mort; Mort = 0; SetLocalInt(oDead, "campe_mort", Mort); int nXP = GetXP(oDead); int nPenalty; int nHD = GetHitDice(oDead); if (nHD < 11) { nPenalty = 20 * GetHitDice(oDead); } if ((nHD >= 11) && (nHD < 16)) { nPenalty = 40 * GetHitDice(oDead); } if (nHD >= 16) { nPenalty = 80 * GetHitDice(oDead); } // * You can not lose a level with this respawning int nMin = ((nHD * (nHD - 1)) / 2) * 1000; int nNewXP = nXP - nPenalty; if (nNewXP < nMin) nNewXP = nMin; SetXP(oDead, nNewXP); int nGoldToTake; if (nHD < 11 ) { nGoldToTake = FloatToInt(0.05 * GetGold(oDead)); } if (( nHD >= 11) && (nHD < 16)) { nGoldToTake = FloatToInt(0.10 * GetGold(oDead)); } if (nHD >= 16) { nGoldToTake = FloatToInt(0.20 * GetGold(oDead)); } /* object oGear; int Pif; if (nHD < 10) { Pif = 20; } if ((nHD >= 10) && (nHD < 16)) { Pif = Random(75); } if (nHD > 16) { Pif = Random(50); } if (Pif == 0) { oGear = GetItemInSlot(INVENTORY_SLOT_ARMS, oDead); if(GetIsObjectValid(oGear)) DestroyObject(oGear); } if (Pif == 1) { oGear = GetItemInSlot(INVENTORY_SLOT_ARROWS, oDead); if(GetIsObjectValid(oGear)) DestroyObject(oGear); } if (Pif == 2) { oGear = GetItemInSlot(INVENTORY_SLOT_BELT, oDead); if(GetIsObjectValid(oGear)) DestroyObject(oGear); } if (Pif == 3) { oGear = GetItemInSlot(INVENTORY_SLOT_BOLTS, oDead); if(GetIsObjectValid(oGear)) DestroyObject(oGear); } if (Pif == 4) { oGear = GetItemInSlot(INVENTORY_SLOT_BOOTS, oDead); if(GetIsObjectValid(oGear)) DestroyObject(oGear); } if (Pif == 5) { oGear = GetItemInSlot(INVENTORY_SLOT_BULLETS, oDead); if(GetIsObjectValid(oGear)) DestroyObject(oGear); } if (Pif == 6) { oGear = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oDead); if(GetIsObjectValid(oGear)) DestroyObject(oGear); } if (Pif == 7) { oGear = GetItemInSlot(INVENTORY_SLOT_CHEST, oDead); if(GetIsObjectValid(oGear)) DestroyObject(oGear); } if (Pif == { oGear = GetItemInSlot(INVENTORY_SLOT_CLOAK, oDead); if(GetIsObjectValid(oGear)) DestroyObject(oGear); } if (Pif == 9) { oGear = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oDead); if(GetIsObjectValid(oGear)) DestroyObject(oGear); } if (Pif == 10) { oGear = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oDead); if(GetIsObjectValid(oGear)) DestroyObject(oGear); } if (Pif == 11) { oGear = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oDead); if(GetIsObjectValid(oGear)) DestroyObject(oGear); } if (Pif == 12) { oGear = GetItemInSlot(INVENTORY_SLOT_HEAD, oDead); if(GetIsObjectValid(oGear)) DestroyObject(oGear); } if (Pif == 13) { oGear = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oDead); if(GetIsObjectValid(oGear)) DestroyObject(oGear); } if (Pif == 14) { oGear = GetItemInSlot(INVENTORY_SLOT_LEFTRING, oDead); if(GetIsObjectValid(oGear)) DestroyObject(oGear); } if (Pif == 15) { oGear = GetItemInSlot(INVENTORY_SLOT_NECK, oDead); if(GetIsObjectValid(oGear)) DestroyObject(oGear); } if (Pif == 16) { oGear = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oDead); if(GetIsObjectValid(oGear)) DestroyObject(oGear); } if (Pif == 17) { oGear = GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oDead); if(GetIsObjectValid(oGear)) DestroyObject(oGear); } */ // * a cap of 10 000gp taken from you //if (nGoldToTake > 10000) //{ // nGoldToTake = 10000; //} AssignCommand(oDead, TakeGoldFromCreature(nGoldToTake, oDead, TRUE)); DelayCommand(4.0, FloatingTextStrRefOnCreature(58299, oDead, FALSE)); DelayCommand(4.8, FloatingTextStrRefOnCreature(58300, oDead, FALSE)); } /////////////////////////////////////////////////////////////////////// // this function resets variabls and clears the arenas in the fighter // 'gauntlet' subplot in chapter one /////////////////////////////////////////////////////////////////////// void ClearArena(object oPC,string sArena) { if(sArena == "Map_M1S4C") { DestroyObject(GetObjectByTag("M1S04CHRUSK02")); DestroyObject(GetObjectByTag("M1S4CBeast")); SetLocalInt(GetObjectByTag(sArena),"NW_A_M1S4HruskDef",0); } else if(sArena == "Map_M1S4D") { DestroyObject(GetObjectByTag("M1S04CFASHI02")); DestroyObject(GetObjectByTag("M1S4DBeast")); SetLocalInt(GetObjectByTag(sArena),"NW_A_M1S4FashiDef",0); CreateItemOnObject("M1S04IBADGELVL01",oPC); } else if(sArena == "Map_M1S4E") { DestroyObject(GetObjectByTag("M1S04CAGAR02")); DestroyObject(GetObjectByTag("M1S4EBeast")); SetLocalInt(GetObjectByTag(sArena),"NW_A_M1S4AgarDef",0); CreateItemOnObject("M1S04IBADGELVL02",oPC); } else if(sArena == "Map_M1S4F") { DestroyObject(GetObjectByTag("M1S04CCLAUDUS02")); DestroyObject(GetObjectByTag("M1S4FBeast",0)); DestroyObject(GetObjectByTag("M1S4FBeast",1)); SetLocalInt(GetObjectByTag(sArena),"NW_A_M1S4ClaudusDef",0); CreateItemOnObject("M1S04IBADGELVL03",oPC); } SetLocalInt(oPC,"NW_L_M1S4Won",FALSE); SetLocalInt(GetModule(),"NW_G_" + sArena + "_Occupied",FALSE); } ////////////////////////////////////////////////////////////////////////////// void main() { object oPC = GetLastRespawnButtonPresser(); object oRespawner = GetLastRespawnButtonPresser(); ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oRespawner); ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oRespawner)), oRespawner); RemoveEffects(oRespawner); //* Return PC to temple string sDestTag = "NW_DEATH_TEMPLE"; string sArea = GetTag(GetArea(oRespawner)); /* CHAPTER 1 SPECIAL CASE */ if (sArea == "MAP_M1S3B") { sDestTag = "M1_WIZSPAWN"; } else if (sArea == "Map_M1S4E" || sArea == "Map_M1S4C" || sArea == "Map_M1S4D" || sArea == "Map_M1S4F") { sDestTag = "M1_FIGSPAWN"; ClearArena(oRespawner,sArea); } else /* CHAPTER 2 SPECIAL CASE */ /* if (sArea == "MAP_M2Q2F2" && GetDistanceBetweenLocations(GetLocation(GetObjectByTag("M2Q2F2_M2Q2G")), GetLocation(oRespawner)) < 5.0 && GetLocalInt(GetModule(),"NW_M2Q2E_WoodsFreed") == 0) { sDestTag = "WP_M2Q2GtoM2Q2F"; } else */ // * Druid Match if (sArea == "MAP_M2Q2E2") { sDestTag = "WP_M2Q2E_ENDDCC"; DestroyObject(GetObjectByTag("M2Q2EWELCARFT")); DestroyObject(GetObjectByTag("M2Q2EHENNAFT")); DestroyObject(GetObjectByTag("M2Q2EJANKENFT")); DestroyObject(GetObjectByTag("M2Q2EELGARFT")); // * June 2002: Destroy pets as well DestroyObject(GetObjectByTag("M2Q2EWELCARFTPET")); DestroyObject(GetObjectByTag("M2Q2EHENNAFTPET")); DestroyObject(GetObjectByTag("M2Q2EJANKENFTPET")); DestroyObject(GetObjectByTag("M2Q2EELGARFTPET")); SetLocalInt(GetObjectByTag("M2Q2EJAER"),"NW_M2Q2E_LFIGHT",FALSE); } /* CHAPTER 3 SPECIAL CASE */ else // * time travel dungeon past - Dungeon if (sArea == "M3Q2G") { sDestTag = "WP_ALTERNATE_SPWN"; } // * time travel dungeon past - Grove else if (sArea == "M3Q2I") { sDestTag = "WP_ALTERNATE_SPWN"; } //***** Respawn dasn l'arene sans penalites ! ***** if (sArea == "Arene") { sDestTag = "NW_DEATH_ARENE"; } if (sArea == "ZONEHRP") { sDestTag = "NW_DEATH_HRP"; } if (GetIsObjectValid(GetObjectByTag(sDestTag))) { if (sDestTag == "NW_DEATH_TEMPLE") { object oPriest = GetObjectByTag("NW_DEATH_CLERIC"); //SetLocalInt(oPriest, "NW_L_SAYONELINER", 10); //AssignCommand(oPriest, DelayCommand(3.0,ActionStartConversation(oRespawner))); AssignCommand(oPriest, DelayCommand(2.1, PlayVoiceChat(VOICE_CHAT_TALKTOME, oPriest))); SetLocalLocation(oRespawner, "NW_L_I_DIED_HERE", GetLocation(GetLastRespawnButtonPresser())); SetLocalInt(oRespawner, "NW_L_I_DIED", 1); SetLocalObject(oPriest, "NW_L_LASTDIED", GetLastRespawnButtonPresser()); // * April 2002: Moved penalty here, only when going back to the death temple ApplyPenalty(oRespawner); } object oSpawnPoint = GetObjectByTag(sDestTag); AssignCommand(oRespawner,JumpToLocation(GetLocation(oSpawnPoint))); // * mak } else { object oPC = GetLastRespawnButtonPresser(); if (!GetIsPC(oPC)) return; ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oPC)), oPC); RemoveEffects(oPC); object oCarte = GetItemPossessedBy(oRespawner, "cartemort"); DestroyObject(oCarte); object oItemToTake; oItemToTake = GetItemPossessedBy(GetLastRespawnButtonPresser(), "cartemort"); if(GetIsObjectValid(oItemToTake) != 0) DestroyObject(oItemToTake); } } Voilà c'est le script, un peu long, mais il n'y a pas une enorme retouche a faire je crois merci ^^ |
Revenir en haut | |
-MeteZ- Seigneur Messages: 205 Localisation: Région Parisienne (95) |
Remplace cette ligne
NWScript :
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. Par: NWScript :
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. Ca marche ? _________________ "Ne dit pas affronter les ténèbres celui qui n'a jamais connu la tombée de la nuit." |
Revenir en haut | |
PsyCalimero Ecuyer Messages: 44 |
Non ca marche toujours pas
|
Revenir en haut | |
Sith Vicious Grand Sage du Conseil Messages: 693 |
NWScript :
///.../// // else /////Vire ce else { object oPC = GetLastRespawnButtonPresser(); if (!GetIsPC(oPC)) return; ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oPC)), oPC); RemoveEffects(oPC); object oCarte = GetItemPossessedBy(oPC, "cartemort"); DestroyObject(oCarte); /*object oItemToTake; oItemToTake = GetItemPossessedBy(GetLastResp awnButtonPresser(), "cartemort"); if(GetIsObjectValid(oItemToTak e) != 0) DestroyObject(oItemToTake); */ } }/* suspect block end found !*/ Remplace la fin du script par ça pour voir (vire le else surtout). Mais je vois pas ou il peut regagner une autre carte dans ce script (en même temps il y a beaucoup de lettres, j'ai pas tout lu ). |
Revenir en haut | |
PsyCalimero Ecuyer Messages: 44 |
Oui c'est bien ca merci mais le probleme restant est que lors du respawn, il a peut etre plusieurs "cartemort" dans linventaire, qu'est-ce que je dois faire pour qu'il n'y en at plus du tout svp?? merci bcp
Sinon cest bien ca merci ^^ |
Revenir en haut | |
Sith Vicious Grand Sage du Conseil Messages: 693 |
Le mieux serait de t'arranger pour qu'il n'y en ait qu'une. Mais sinon tu peux faire ça. Remplace à la fin (même endroit que tatalheure) par
NWScript : //..// object oPC = GetLastRespawnButtonPresser(); if (!GetIsPC(oPC)) return; ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oPC)), oPC); RemoveEffects(oPC); object oItem = GetFirstItemInInventory(oPC); while (oItem != OBJECT_INVALID) { if (GetTag(oItem) == "cartemort") DestroyObject(oItem); object oItem = GetNextItemInInventory(oPC); } }/* suspect block end found !*/ }/* suspect block end found !*/ |
Revenir en haut | |
PsyCalimero Ecuyer Messages: 44 |
On m'anonce un ERROR TOO MANY INSTRUCTION et les autres piques de mort restent , à quoi est-ce du svp ??
|
Revenir en haut | |
Sith Vicious Grand Sage du Conseil Messages: 693 |
J'en sais rien.... Le while à l'air correct... (too many machin c'est quand il fait une boucle infinie, comme si il avançait pas dans le while) T'as bien recopié (question bête...) a tout hasard (mais ça a aucun rapport normalement) : remplace while(oItem!=OBJECT_INVALID) par while(GetIsObjectValid(oItem)) et DestroyObject(oItem); par DestroyObject(oItem,0.1); Mais bon vraiment ça devrait rien changer, je sais pas d'ou ça vient. |
Revenir en haut | |
PsyCalimero Ecuyer Messages: 44 |
J'ai remplacé comme tu me l'as suggéré, et le resultat est le meme
(note : le respawn est bien plus long que d'habitude, mais c'est depuis le remplacement du début, pas depuis celui la) Niveau erreur en recopiant, c'est possible (ou du moins en insérant) Voilà le script : (enfin la fin, qui nous interesse) NWScript : // ce qui a avant ne nous interesse pas // if (sDestTag == "NW_DEATH_TEMPLE") { object oPriest = GetObjectByTag("NW_DEATH_CLERIC"); //SetLocalInt(oPriest, "NW_L_SAYONELINER", 10); //AssignCommand(oPriest, DelayCommand(3.0,ActionStartCo nversation(oRespawner))); AssignCommand(oPriest, DelayCommand(2.1, PlayVoiceChat(VOICE_CHAT_TALKTOME, oPriest))); SetLocalLocation(oRespawner, "NW_L_I_DIED_HERE", GetLocation(GetLastRespawnButtonPresser())); SetLocalInt(oRespawner, "NW_L_I_DIED", 1); SetLocalObject(oPriest, "NW_L_LASTDIED", GetLastRespawnButtonPresser()); // * April 2002: Moved penalty here, only when going back to the death temple ApplyPenalty(oRespawner); } object oSpawnPoint = GetObjectByTag(sDestTag); AssignCommand(oRespawner,JumpToLocation(GetLocation(oSpawnPoint))); // * mak }/* suspect block end found !*/ { object oPC = GetLastRespawnButtonPresser(); if (!GetIsPC(oPC)) return; ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oPC)), oPC); RemoveEffects(oPC); object oItem = GetFirstItemInInventory(oPC); while(GetIsObjectValid(oItem)) { if (GetTag(oItem) == "cartemort") DestroyObject(oItem,0.1); object oItem = GetNextItemInInventory(oPC); } } }/* suspect block end found !*/ |
Revenir en haut | |
Sith Vicious Grand Sage du Conseil Messages: 693 |
Arf je suis trop bete !
vire le object dans la boucle.... (mais c'est bizare qu'il compile le script ^^) |
Revenir en haut | |
PsyCalimero Ecuyer Messages: 44 |
Oui c'était bien ca merci beaucoup pour ta précieuse aide Sith, ca fera des tricheurs en moins sur le module
|
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