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 20:13:40
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 |
omega Grand Chevalier Messages: 116 |
salut
j'ai un petit probleme, et je voudrais de l'aide; si c'est possible ! Voila, j'ai des malins qui se connecte, font des combats, meurent, se deco, se reco, et reviennent avec tous leurs points de vie (grrr les tricheurs) ! Voila, je sais que l'on peut mettre un objets aux joueurs, une sorte de carte de mort, qui si ils connectent apres leur mort, ben ils sont toujours morts. Et qui s'enleve quand ils respaunw, et quand on les ressusitent. Mais je sais pas faire !!!!!!!!!!! Merci de votre aide !!!!!! |
Revenir en haut | |
Bloutiouf Chevalier Messages: 70 |
peut etre que dans les regles de mort et de respawn, on pourrait definir une variable locale qui indique si l'on est mort ou pas, et quand on rentre dans le module, si cette variable continent 1 ( 0 si on est pas mort ) ben ça tue le gars, ou lui applique directement les regles de ( et quand l'on respawn, faut pas oublier de remettre 0 à la variable )
|
Revenir en haut | |
slider Novice Messages: 6 |
salut a tous j ai le meme probleme des rigolo ce connect vont directement aux gros mechant se font tuer deco et reco et recupere tous leur pv et je ne sais pas comment me prendre pour le script si quelqu un peux m aider
|
Revenir en haut | |
Archéops Ecuyer Messages: 55 |
Salut...
Comme le dit Bloutiouf, tu peux définir une variable local attachée au module tel que le nom de la variable se réfère à un joueur et que la variable elle même indique le nombre de PV (par exemple). A chaque fois qu'un joueur déco, on stocke dans la variable le nombre de PV qu'avait le joueur, et quand le joueur se reconnecte, on réajuste son nombre de points de vie grâce à la variable (en lui infligeant des dégâts magiques par exemple). |
Revenir en haut | |
finipe Grand Sage du Conseil Messages: 519 Localisation: Nantes |
La solution de donner un objet marqueur de la mort est préférable, dans la mesure où la variable locale disparaît si le module reboot. Ou alors il faut un système de persistance des variables via une BDD
_________________ » Le Tref & l'Aucube : Histoire, misanthropie & zoologie léonine » 1626, le Gant & l'Epée : intrigues & duels sous le règne de Louis XIII |
Revenir en haut | |
omega Grand Chevalier Messages: 116 |
salut
C'est moi qui est poste le message en premier, et je crois que j'ai mal expliqué ce que je voudrais : Voila : quand la personne meurt, dans son inventaire apparait un objet du nom XXX. Si cette personne ce deconecte et se reconecte, le module verifie si elle possede cet objet, si elle l'a, elle apparait morte. Et quand on la rez, ou qu'elle respaunw, cet objet lui est enlevé. Mais, je ne sais pas comment on fait ! Merci de votre aide a tous ! Omega |
Revenir en haut | |
Starkanas Grand Chevalier Messages: 110 |
Tu rajoute dans le onDeath :
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. Dans le onRespawn : 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. Dans le onEnter du module : NWScript :
object oPC = GetEnteringObject(); object oCarte = GetItemPossessedBy(oPC, "cartedemort"); if(oCarte != OBJECT_INVALID) { ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(), oPC, 1.0); } Je crois que c'est ça , je suis pas sûr du script dans le onEnter .. |
Revenir en haut | |
Archéops Ecuyer Messages: 55 |
C'est ça sauf qu'il y a une petit modification à apporter.... Dans le OnDeath, il faut mettre une condition pour donner l'objet..
Je m'explique, quand un joueur va mourrir, on lui donnera bien l'objet qui signale sa mort, mais imaginons qu'il déco.. Quand il revient sur le serveur il est quelques centièmes de seconde à nouveau en vie, grâce au script du OnEnter on le tue, et alors on lui donne un autre objet qui signale la mort. Quand il respawn un seul des deux objets est détruit. Donc à sa prochaine reco le joueur va mourrir, et tout recommence.. Donc il faut mettre dans le OnDeath ceci : NWScript :
if (GetIsObjectValid(GetItemPossessedBy(oPlayer,"cartemort"))) { } else { CreateItemOnObject("cartemort",oPlayer,1); } Voilà |
Revenir en haut | |
Archéops Ecuyer Messages: 55 |
Au fait pour le OnEnter je mettrais :
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. comme test à la place de ce qu'a mis Starkanas, juste parceque j'ai toujours faic comme çà... |
Revenir en haut | |
Starkanas Grand Chevalier Messages: 110 |
lol , oui j'avais pas pensé aux 2 cartes ...
|
Revenir en haut | |
slider Novice Messages: 6 |
Merci a tous car je voulais la meme chose que omega car pour les variables je ne savais pas comment faire mais plus par rapport a un objet mis dans l inventaire donc merci pour le script comme ca les petits rigolo vont arreter de deco reco lol
|
Revenir en haut | |
Banjin Mugaï Novice Messages: 7 |
Merci pour ça...
Comment faire pour supprimer la carte de mort quand le pnj est ressucité ? |
Revenir en haut | |
vivi Novice Messages: 7 |
Pourquoi ne pas tout simplement mettre dans le OnClientLeave du module :
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 devrait sauvegarder son personnage du côté serveur, donc quand il reviendra : il sera mort. Pas sûr de ce que j'avance. |
Revenir en haut | |
Semcatala Grand Sage du Conseil Messages: 951 |
Voila la solution de mon mod qui a l'avantage de ne pas encombrer l'inventaire du pj avec des " cartes de mort " encombrantes et inutiles.
Il suffit de " mémoriser " sur le pj lui même si il est mort ou vivant a l'aide d'une mémorisation en " dur " , ça marche même aprés un reboot. Si le pj quitte vivant il revient vivant. Si il quitte en étant mort , il revient en étant mort. Rajouter ceci dans le " oncliententer " NWScript :
void main() { object oPC = GetEnteringObject(); ////////////////////////////// ////////////////////////////// ///////////// /// sert a recuperer l'info pour savoir si le pj est mort ou vivant /// int BALISE_MORT = GetCampaignInt("NOM_DE_TON_MOD","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); //// } //// ////////////////////////////// ////////////////////////////// ///////////// } mettre ceci dans le " onplayerdeath " : NWScript :
void main() { object oPlayer = GetLastPlayerDied(); //---------------------------- ------------------------------ -------------// // 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("NOM_DE_TON_MOD","balise_mort",TRUE,oPlayer); //---------------------------- ------------------------------ -----------// } et pour finir , sur le " onplayerrespawn " : NWScript :
void main() { object oRespawner = GetLastRespawnButtonPresser(); //---------------------------- ----------------------------// // Positionement des balises a " FALSE " // //---------------------------- ----------------------------// SetCampaignInt("NOM_DE_TON_MOD","balise_mort",FALSE,oRespawner); } Bon , bien sûr il faut intégrer ces scripts proprement pour ne pas perdre le bénéfice de tous les autres scripts qu'il y a déja a ces emplacements , mais une fois que c'est fait ça fonctionne trés bien. Une chose , les infos sont mémorisées dans le dossier " database "sous forme de fichiers texte , si jamais tout le mod doit être transféré par le net a une autre personne pour hébergement , il ne faut pas oublier de transmettre le mod et le servervault , mais AUSSI les fichiers " database ". _________________ " La ruse doit être employée pour faire croire que l'on est où l'on est pas, que l'on veut ce qu'on ne veut pas. " CdG " La véritable école du Commandement est la culture générale. " CdG " Une société prête à sacrifier un peu de liberté contre un peu de sécurité ne mérite ni l'une ni l'autre et finit par perdre les deux. " B.F " La gloire se donne seulement à ceux qui l'ont toujours rêvée. " CdG " La fin de l'espoir est le commencement de la mort. " CdG |
Revenir en haut | |
Banjin Mugaï Novice Messages: 7 |
Vous êtes géniaux les mecs !
Mais et ma question ?^^ ça marche aussi pour le rez ? on sait jamais yaura ptet des pretres un jour dans mon mod^^. |
Revenir en haut | |
Semcatala Grand Sage du Conseil Messages: 951 |
aaahhh
excuse moi j'ai oublié de te filer les scripts pour les rez !!! Sinon , si un mec se fait rezu sans le bon script , au reboot il va revenir en étant mort ! pense a remplacer "NOM_DE_TON_MOD" dans le script par le nom de ton mod , ça fera plus propre ! voila : sauvegarder les 2 scripts suivant pour la rezu partielle et la rezu totale Le suivant sous le nom "nw_s0_raisdead" : NWScript :
//:///////////////////////// ///////////////////// //:: [Raise Dead] //:: [NW_S0_RaisDead.nss] //:: Copyright (c) 2000 Bioware Corp. //:///////////////////////// //////////////////// //:: Brings a character back to life with 1 HP. //:///////////////////////// //////////////////// //:: Created By: Preston Watamaniuk //:: Created On: Jan 31, 2001 //:///////////////////////// //////////////////// //:: Last Updated By: Preston Watamaniuk, On: April 11, 2001 //:: VFX Pass By: Preston W, On: June 22, 2001 void main() { //AdjustAlignment( OBJECT_SELF, ALIGNMENT_GOOD, 2); //Declare major variables object oCaster = OBJECT_SELF; object oTarget = GetSpellTargetObject(); effect eRaise = EffectResurrection(); effect eVis = EffectVisualEffect(VFX_IMP_RAISE_DEAD); ////////////////////////////// ////////////////////////////// //////////// //---------------------------- ----------------------------// // Positionement de la balise de mort a " FALSE " // //---------------------------- ----------------------------// int BALISE_MORT = GetCampaignInt("NOM_DE_TON_MOD","balise_mort",oTarget); SetCampaignInt("NOM_DE_TON_MOD","balise_mort",FALSE,oTarget); ////////////////////////////// ////////////////////////////// //////////// if(GetIsDead(oTarget)) { //Fire cast spell at event for the specified target SignalEvent(oTarget, EventSpellCastAt(oCaster, SPELL_RAISE_DEAD, FALSE)); //Apply raise dead effect and VFX impact ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetLocation(oTarget)); ApplyEffectToObject(DURATION_TYPE_INSTANT, eRaise, oTarget); SetLocalInt(GetModule(),GetName(oTarget)+GetPCPublicCDKey(oTarget)+"Damages",0); if (GetIsPC(oCaster) && GetIsPC(oTarget)) WriteTimestampedLogEntry("[PK]"+GetName(oCaster)+" casted raised dead on "+GetName(oTarget)); } } et sauvegarder le script suivant sous le nom "nw_s0_resserec" : NWScript : //:///////////////////////// ///////////////////// //:: [Ressurection] //:: [NW_S0_Ressurec.nss] //:: Copyright (c) 2000 Bioware Corp. //:///////////////////////// //////////////////// //:: Brings a character back to life with full //:: health. //:///////////////////////// //////////////////// //:: Created By: Preston Watamaniuk //:: Created On: Jan 31, 2001 //:///////////////////////// //////////////////// //:: Last Updated By: Preston Watamaniuk, On: April 11, 2001 //:: VFX Pass By: Preston W, On: June 22, 2001 void main() { //AdjustAlignment( OBJECT_SELF, ALIGNMENT_GOOD, 3); //Get the spell target object oTarget = GetSpellTargetObject(); object oCaster = OBJECT_SELF; //Check to make sure the target is dead first //---------------------------- ------------------------------ ----------------// // Positionement de la balise de mort a " FALSE " // //---------------------------- ------------------------------ ----------------// int BALISE_MORT = GetCampaignInt("NOM_DE_TON_MOD","balise_mort",oTarget); SetCampaignInt("NOM_DE_TON_MOD","balise_mort",FALSE,oTarget); //---------------------------- ------------------------------ ----------------// if (GetIsDead(oTarget)) { //Fire cast spell at event for the specified target SignalEvent(oTarget, EventSpellCastAt(oCaster, SPELL_RESURRECTION, FALSE)); //Declare major variables int nHealed = GetMaxHitPoints(oTarget); effect eRaise = EffectResurrection(); effect eHeal = EffectHeal(nHealed + 10); effect eVis = EffectVisualEffect(VFX_IMP_RAISE_DEAD); //Apply the heal, raise dead and VFX impact effect ApplyEffectToObject(DURATION_TYPE_INSTANT, eRaise, oTarget); ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget); ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetLocation(oTarget)); SetLocalInt(GetModule(),GetName(oTarget)+GetPCPublicCDKey(oTarget)+"Damages",0); if (GetIsPC(oCaster) && GetIsPC(oTarget)) WriteTimestampedLogEntry("[PK]"+GetName(oCaster)+" casted resurrection on "+GetName(oTarget)); } } _________________ " La ruse doit être employée pour faire croire que l'on est où l'on est pas, que l'on veut ce qu'on ne veut pas. " CdG " La véritable école du Commandement est la culture générale. " CdG " Une société prête à sacrifier un peu de liberté contre un peu de sécurité ne mérite ni l'une ni l'autre et finit par perdre les deux. " B.F " La gloire se donne seulement à ceux qui l'ont toujours rêvée. " CdG " La fin de l'espoir est le commencement de la mort. " CdG |
Revenir en haut | |
lylver Héros Messages: 274 |
Citation : Voila, j'ai des malins qui se connecte, font des combats, meurent, se deco, se reco, et reviennent avec tous leurs points de vie (grrr les tricheurs) ! A mettre sur le OnClientEnter du module : un classique contre les petits malins qui déco/reco pour récupérer talents et sorts, ca fait nettement baisser le lag aussi lorsque cette population n'y trouve plus d'intérêt.
Pour ce qui est des PVs, il faut les mémoriser AVANT la déconnexion sur des évênements pertinents (repos, traversée de zones, timer... que sais-je) Certaines informations ne sont déjà plus disponibles sur l'avatar joueur au moment ou l'évênement OnClientExit est déclenché. NWScript : void anti_deco(object oPC) { if (!GetIsDM (oPC)) { // don't let players to cheat deco/reco talent tFeat, tSpell; int nIndex, i, nTalentID; for (nIndex=1; nIndex<1000; nIndex++) { tFeat = TalentFeat (nIndex); tSpell = TalentSpell(nIndex); if (GetIsTalentValid(tFeat)) { nTalentID = GetIdFromTalent(tFeat); for (i=1; i<40; i++) { DecrementRemainingFeatUses(oPC, nTalentID); if (!GetHasFeat(nTalentID, oPC)) i = 40; } } if (GetIsTalentValid(tSpell)) { nTalentID = GetIdFromTalent(tSpell); for (i=1; i<40; i++) { DecrementRemainingSpellUses(oPC, nTalentID); if (!GetHasSpell(nTalentID, oPC)) i = 40; } } } SendMessageToPC(oPC, "Sorts et Dons desactives : vous devez vous reposez pour recuperer." ) ; // end cheating section } } |
Revenir en haut | |
BenGorre Légende vivante Messages: 301 |
|
Revenir en haut | |
Ailesnoires Grand Chevalier Messages: 110 Localisation: Vendée |
Citation : A mettre sur le OnClientEnter du module |
Revenir en haut | |
lojic Novice Messages: 16 |
euh semcatala ou il faut mettre les scripts pour le rez ?
et merci pour le reste ! |
Revenir en haut | |
felou Novice Messages: 17 |
[quote="vivi"]
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. Est-ce qu'il marche ce script ? si c'est le cas, ça résoudrai tout ce stock de script... |
Revenir en haut | |
Semcatala Grand Sage du Conseil Messages: 951 |
lojic> les scripts pour la rez , tu ne les mets nul part , tu te contente de les sauvegarder sous les noms que je t'ai dit et ensuite ils prendront automatiquement le pas sur les scripts de rez originaux , et voili voila !
_________________ " La ruse doit être employée pour faire croire que l'on est où l'on est pas, que l'on veut ce qu'on ne veut pas. " CdG " La véritable école du Commandement est la culture générale. " CdG " Une société prête à sacrifier un peu de liberté contre un peu de sécurité ne mérite ni l'une ni l'autre et finit par perdre les deux. " B.F " La gloire se donne seulement à ceux qui l'ont toujours rêvée. " CdG " La fin de l'espoir est le commencement de la mort. " CdG |
Revenir en haut | |
lojic Novice Messages: 16 |
Ok ! Merci V le tester
|
Revenir en haut | |
lojic Novice Messages: 16 |
SA MARCHE MERCI !!!
|
Revenir en haut | |
Fantome Ecuyer Messages: 63 |
Qu'est ce qui est le plus intéressant en terme de performance : l'objet sur le mort ou la variable ?
_________________ Arcantia |
Revenir en haut | |
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
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