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 16:46:06
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 |
tempus Novice Messages: 15 |
bonjour a tous
Voila c'est mon tout premier post, j'espere ne pas me tromper d'endroit et demander correctement cette infos Tout dabord merci a semcatala qui avait psoter ce script! Donc je me suis remis a nwn, pour aider un amis, et je me derouillé sur les scripts. J'ai trouver un script qui m'a paru tres interressant, pour eviter que les joueurs utilise la deco/reco pour revivre, et pour evitez aussi d'avoir un item dans l'inventaire. Car avant j'utiliser le script qui fonctionne avec un "bobjet de mort", c'est pas tres efficace, pas mal d'erreur, plusieurs objets etc... Donc je tombe sur des variables donné par "Semcatala" sur ce topic: http://www.system-tek.com/nwinter/phpbb2/viewtopic.php?t=5158&postdays=0&postorder=asc&start=0 J'ajoute donc les parties du script de semcatala dans mes fichiers, " oncliententer " " onplayerrespawn " Apres avec l'editeur de script, je rajoute les partie de script pour quand on rez . Apres je test, et rien, comme si les variables n'avait rien enregistrer du status du perso, car en fesant deco /reco ( apres avoir ete tuer) je suis a nouveau en vie... Donc je sais que sa viens pas des 2 derniers script modifier : "nw_s0_raisdead" "nw_s0_resserec" Car ceci sont liée a la rezurection, hors je n'ai pas utilisé de rezu. Sa viens donc des 2 premiers : " oncliententer " et " onplayerdeath " J'ai du faire une erreur :s Voila le contenue de ces fichiers: " oncliententer " NWScript :
#include "ats_inc_init" #include "nw_i0_tool" void main() { ATS_InitializePlayer(GetEnteringObject()); //modif par Loup Artic le 27 Avril 2004, le 2 mai 2004 //string BroadcastThis="Welcome, "; object SendToPC = GetEnteringObject(); if (GetIsPC(SendToPC)) { string PCNameIs=GetName(SendToPC); string WelcomeBegin="Bienvenue, "; string WelcomeEnd=", sur mon monde ! Que ta presence mene ton Clan a la victoire !"; string HRP="(Ce serveur est semi Role Play)"; string HRP2="."; string HRP3=""; string BroadcastThis=WelcomeBegin + PCNameIs + WelcomeEnd + HRP + HRP2 +HRP3; SendMessageToPC(SendToPC, BroadcastThis); if (GetItemPossessedBy(SendToPC, "poubelledrop") != OBJECT_INVALID) { CreateItemOnObject("poubelledrop", SendToPC); } object oPC = GetEnteringObject(); ////////////////////////////// ////////////////////////////// ///////////// /// sert a recuperer l'info pour savoir si le pj est mort ou vivant /// int BALISE_MORT = GetCampaignInt("bddbvsm","balise_mort", oPC); ////////////////////////////// ////////////////////////////// ///////////// ////////////////////////////// ////////////////////////////// ///////////// // sert a detecter si le pj est mort ou vivant, et a le rendre mort //// // ou vivant a la conection sur le serveur. //// // //// if(BALISE_MORT == TRUE ) //// { //// effect eDeath = EffectDeath(FALSE, FALSE); //// ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oPC); //// } //// ////////////////////////////// ////////////////////////////// ///////////// } object oEntering = GetEnteringObject(); if(HasItem(oEntering, "pierredubien")) { SetLocalString(oEntering, "team", "good"); } if(HasItem(oEntering, "pierredumal")) { SetLocalString(oEntering, "team", "evil"); } //object oPlayer = GetEnteringObject(); //if (GetIsPC (oPlayer)) //{ // if(GetItemPossessedBy(oPlayer, "aide-dm") != OBJECT_INVALID) //{ //CreateItemOnObject("kic kpc", oPlayer); // CreateItemOnObject("zone- aide-dm", oPlayer); //CreateItemOnObject("pou belledrop", oPlayer); // } // } //} object oPlayer = GetEnteringObject(); if (GetIsDM(oPlayer) == TRUE) { if (GetItemPossessedBy(oPlayer, "kickpc") == OBJECT_INVALID) { CreateItemOnObject("kickpc",oPlayer); } } } /*object oPlayer = GetEnteringObject(); if (GetIsDM(oPlayer) == TRUE) { string sTag = "md"; object oTarget = GetObjectByTag(sTag); AssignCommand(oPlayer,JumpToObject(oTarget)); { } } }/* suspect block end found !*/ ET le " onplayerdeath ": NWScript :
//:///////////////////////// ///////////////////// //:: Death Script //:: NW_O0_DEATH.NSS //:: Copyright (c) 2001 Bioware Corp. //:///////////////////////// //////////////////// /* This script handles the default behavior that occurs when a player dies. */ //:///////////////////////// //////////////////// //:: Created By: Brent Knowles //:: Created On: November 6, 2001 //:///////////////////////// //////////////////// /* void ClearAllFactionMembers(object oMember, object oPlayer) { // AssignCommand(oMember, SpeakString("here")) ; AdjustReputation(oPlayer, oMember, 100); SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad&qu ot;, 10); // * Player bad object oClear = GetFirstFactionMember(oMember, FALSE); while (GetIsObjectValid(oClear) == TRUE) { ClearPersonalReputation(oPlaye r, oClear); oClear = GetNextFactionMember(oMember, FALSE); } } */ #include "nw_i0_plot" void dialomort(int dialo,object oPlayer) { //object oPlayer = GetLastPlayerDied(); if (GetIsDead(oPlayer)) { switch(dialo) {case 1: AssignCommand(oPlayer, SpeakString("A l'aide !"));break; case 2: AssignCommand(oPlayer, SpeakString(" Sauvez....moi !")); break; case 3: AssignCommand(oPlayer, SpeakString("Je souffre !")); break; case 4: AssignCommand(oPlayer, SpeakString("Ma vie va prendre fin..."));break; case 5: AssignCommand(oPlayer, SpeakString("Je me sens partir !")); break; } } } void mortoupas(object oPlayer) { //object oPlayer = GetLastPlayerDied(); int nXP = GetXP(oPlayer); int nPenalty = 50 * GetHitDice(oPlayer); int nHD = GetHitDice(oPlayer); // * 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; int nGoldToTake = FloatToInt(0.10 * GetGold(oPlayer)); // * a cap of 20 000gp taken from you if (nGoldToTake > 10000) { nGoldToTake = 10000; } if (GetIsDead(oPlayer)) { location lLoc = GetLocation(oPlayer ); if(HasItem(oPlayer, "pierredumal")) { //objet cree par terre CreateObject(OBJECT_TYPE_ITEM, "objetdumal", lLoc); } if(HasItem(oPlayer, "pierredubien")) { CreateObject(OBJECT_TYPE_ITEM, "objetdubien", lLoc); } // TakeGoldFromCreature (nGoldToTake, oPlayer, TRUE); AssignCommand(oPlayer, TakeGoldFromCreature(nGoldToTake, oPlayer, TRUE)); effect eVisual = EffectResurrection(); ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisual, oPlayer); AssignCommand(oPlayer, SpeakString("(Respawn Automatique !)")); SetXP(oPlayer, nNewXP); object oSpawnPoint = GetObjectByTag("NW_DEATH_TEMPLE"); AssignCommand(oPlayer,JumpToLocation(GetLocation(oSpawnPoint)) ); DestroyObject( GetItemPossessedBy(oPlayer,"mort")); //SetLocalInt(oPlayer, "activemort", 0); } } void Raise(object oPlayer) { effect eVisual = EffectVisualEffect(VFX_IMP_DESTRUCTION); //VFX_IMP_RESTORATION effect eBad = GetFirstEffect(oPlayer); ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oPlayer); ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oPlayer)), oPlayer); //Search for negative effects while(GetIsEffectValid(eBad)) { if (GetEffectType(eBad) == EFFECT_TYPE_ABILITY_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_AC_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_ATTACK_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_SAVING_THROW_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_SPELL_RESISTANCE_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_SKILL_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_BLINDNESS || GetEffectType(eBad) == EFFECT_TYPE_DEAF || GetEffectType(eBad) == EFFECT_TYPE_PARALYZE || GetEffectType(eBad) == EFFECT_TYPE_NEGATIVELEVEL) { //Remove effect if it is negative. RemoveEffect(oPlayer, eBad); } eBad = GetNextEffect(oPlayer); } //Fire cast spell at event for the specified target SignalEvent(oPlayer, EventSpellCastAt(OBJECT_SELF, SPELL_RESTORATION, FALSE)); ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisual, oPlayer); } void main() { object oPlayer = GetLastPlayerDied(); int iDied = GetLocalInt(oPlayer,"iDied"); //peut etre pas ++iDied; SetLocalInt(oPlayer,"iDied",iDied); object oDeadPlayer=GetLastPlayerDied(); //object oPlayer=GetLastPlayerDied(); string sDeadPlayer=GetName(oDeadPlayer); object oDeathArea=GetArea(oDeadPlayer); string sDeathArea=GetTag(oDeathArea); string sDeadOne=""; string sAreaName=GetName(oDeathArea); string sSayDeath=sDeadPlayer+sDeadOne+sAreaName; SendMessageToAllDMs(sSayDeath); object oKiller = GetLastKiller(); //a virer if (GetIsPC(oKiller) && GetIsPC(oPlayer)) { int iKilled = GetLocalInt(oPlayer,"iKilled"); //peut etre pas ++iKilled; SetLocalInt(oPlayer,"iKilled",iKilled); //string PKReport="PK report: "+GetName(oKiller)+" (Lv "+IntToString(GetHitDice( oKiller))+" -CD key="+GetPCPublicCDKey(oK iller)+") a tue "+GetName(oPlayer)+" (Lv "+IntToString(GetHitDice( oPlayer))+" - CD key="+GetPCPublicCDKey(oP layer)+")"; string PKReport="PK report: "+GetName(oKiller)+" (Lv "+IntToString(GetHitDice(oKiller))+" a tue "+GetName(oPlayer)+" (Lv "+IntToString(GetHitDice(oPlayer)); WriteTimestampedLogEntry(PKReport); SendMessageToAllDMs(PKReport); //---------------------------- ------------------------------ -------------// // On met une balise de mort au pj qui vient de mourir. // //---------------------------- ------------------------------ -------------// // sert a declarer une balise pour "marquer" le pj a la mort. SetCampaignInt("bddbvsm","balise_mort",TRUE,oPlayer); //---------------------------- ------------------------------ -----------// } /////////////////////////// //FAB : creation objet de mort ////////////////////////////// //object oPlayer = GetLastPlayerDied(); //CreateItemOnObject("mor t", oPlayer, 1); // cree objet mort ////////////////////////////// // string sArea = GetTag(GetArea(oPlayer)); // if (sArea == "M4Q1D2" || sArea == "M3Q3C" || sArea == "MAP_M1Q6A") // { //Raise(oPlayer); //string sDestTag = "M4QD07_ENTER"; //object oSpawnPoint = GetObjectByTag(sDestTag); // AssignCommand(oPlayer, DelayCommand(1.0, JumpToLocation(GetLocation(oSp awnPoint)))); // * MAY 2002: Just popup the YOU ARE DEAD panel at this point // DelayCommand(2.5, PopUpDeathGUIPanel(oPlayer,FAL SE, TRUE, 66487)); // return; // } AssignCommand(oPlayer, ClearAllActions()); // * Note: waiting for Sophia to make SetStandardFactionReptuation to clear all personal reputation if (GetStandardFactionReputation(STANDARD_FACTION_COMMONER, oPlayer) <= 10) { SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad SetStandardFactionReputation(STANDARD_FACTION_COMMONER, 80, oPlayer); } if (GetStandardFactionReputation(STANDARD_FACTION_MERCHANT, oPlayer) <= 10) { SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad SetStandardFactionReputation(STANDARD_FACTION_MERCHANT, 80, oPlayer); } if (GetStandardFactionReputation(STANDARD_FACTION_DEFENDER, oPlayer) <= 10) { SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad SetStandardFactionReputation(STANDARD_FACTION_DEFENDER, 80, oPlayer); } DelayCommand(2.5, PopUpGUIPanel(oPlayer,GUI_PANEL_PLAYER_DEATH)); DelayCommand(10.5, dialomort(1,oPlayer)); DelayCommand(50.5,dialomort(2,oPlayer)); DelayCommand(80.5,dialomort(3,oPlayer)); DelayCommand(120.5,dialomort(4,oPlayer)); DelayCommand(150.5,dialomort(5,oPlayer)); DelayCommand(180.5, mortoupas(oPlayer)); DelayCommand(200.5, DestroyObject( GetItemPossessedBy(oPlayer,"mort"))); } PS: Il y a beaucoups de repetitions, et c'est assez mal organisé ( beaucoups de commande inutile laisser en plan ^^ et des repet comme "object xxx = GetEnteringObject(); " qui aparait plusieurs fois ^^ Merci beaucoups d'avance Dernière édition par tempus le 19/07/2006 15:48:12; édité 1 fois
|
Revenir en haut | |
kiky.le.magnifique Homme très gay Messages: 907 Localisation: Camping de la nation martienne... |
Dans ton onplayerdeath tu as mis le :
SetCampaignInt("bddbvsm","balise_mort",TRUE,oPlayer); à l'intérieur de ta condition : if (GetIsPC(oKiller) && GetIsPC(oPlayer)) { //script } donc ton serveur n'enregistrera la mort que si elle est dû à un autre personnage joueur, et non pas par un monstre. Peut être que ça vient de là, si c'est le cas, suffit de mettre ce SetCampaign au tout début du main de ton script : NWScript : void main() { object oPlayer = GetLastPlayerDied(); SetCampaignInt("bddbvsm","balise_mort",TRUE,oPlayer); int iDied = GetLocalInt(oPlayer,"iDied"); //etc... } _________________ http://perso.wanadoo.fr/kikitor | Deviant Art | www.VistaEntraide.com | CCLLSELFV! | D-lire_K | Viendez rêver au Pays des fées... | Ne taquinez pas l'admin! |
Revenir en haut | |
tempus Novice Messages: 15 |
oula , ouep, en effet, c'etait pas volontaire, je pensai l'avoir mis juste sous void main :s
merci de m'avoir fait remarquer cette erreur, j'espere que sa vien de la ! EDIT: Aparament sa marche!!!! grand merci PS: je sais pas trop la procedure, je doit editer mon post pour ajouter resolu dans le titre? |
Revenir en haut | |
kiky.le.magnifique Homme très gay Messages: 907 Localisation: Camping de la nation martienne... |
Oui, ça serait bien, merci bien ^^
_________________ http://perso.wanadoo.fr/kikitor | Deviant Art | www.VistaEntraide.com | CCLLSELFV! | D-lire_K | Viendez rêver au Pays des fées... | Ne taquinez pas l'admin! |
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