Voir le sujet précédent ¤
Voir le sujet suivant
|
Auteur |
Message |
chevalier blanc
Grand Chevalier
Inscrit le: 28 Mar 2005
Messages: 117
Localisation: Sur les Côtes d'Opaline |
Posté le : 07/07/2007 16:58:22 Sujet du message : Transformation style Escaflowne
Hello à tous !
Pour le trip, je cherche à faire un petit script mais j'ai du mal un peu je dois dire...
C'est au sujet des changements d'apparence et autres fonctions polymorph.
Je m'explique.
- Le PJ a sur lui un objet.
- Grâce à cet objet il ouvre un dialogue avec un golem de fer PNJ.
- Au choix il aura soit de ne rien faire, soit de "monter dans le golem".
- "Monter dans le golem" (un golem de fer par exemple" s'accompagnera d'éventuels effets visuels et surtout, que le PJ n'ait plus la possibilité de lancer des sorts et d'utiliser les objets de son inventaire.
- La transformation s'accompagnera de l'apparition d'une épée à deux mains dans les mains du PJ (sous forme de golem donc).
- De plus, il faut que le golem de fer PNJ disparaisse une fois que le PJ s'est transformé.
- Enfin, le golem de fer PNJ réapparaît une fois que le PJ désire descendre de sa machine (par n'importe quel moyen, je n'ai pas trouver de trigger approprié), et donc qu'il puisse y descendre et y remonter à loisir tant que la machine est en état de marche (il faudrait donc mémoriser l'état du golem avant que le PJ en descende...).
- Pour le fun, j'aimerais ajouter le fait que une fois "mort" en étant transformé, le PJ se relève indemne à côté de sa machine détruite (un golem de fer PNJ mort) et peut être avec des malus aux carac ou à ses points de vie...
Voilà... c'est super compliqué, moi je n'arrive même pas à le transformer dans les deux sens.
J'ai essayé avec EffectPolymorph mais le résultats est moyen, d'autant que je n'arrive pas à faire apparaître (ou disparaître) de golem PNJ quand le PJ monte (ou descend) de celui ci.
Je ne maîtrise pas très bien la fonction SetAppearanceType pour rendre au PJ son apparence normale non plus...
Voilà j'ai tout dit, j'espère que vous pourrez m'aider.
|
|
Revenir en haut |
|
|
chevalier blanc
Grand Chevalier
Inscrit le: 28 Mar 2005
Messages: 117
Localisation: Sur les Côtes d'Opaline |
Posté le : 17/07/2007 18:11:18 Sujet du message :
Désolé de upper le message, mais je ne progresse pas d'un iota et j'aimerais savoir si le script que je recherche est faisable ou non.
|
|
Revenir en haut |
|
|
Kamu d'Ishtar
Héros
Inscrit le: 07 Jan 2005
Messages: 281
Localisation: Citée des lumières d'Ishtar, Montagnes de Niork. |
Posté le : 26/07/2007 17:05:58 Sujet du message :
Hello, sinon ce que tu peux faire c'est de te créer un bâton (ou un autre objet), te permettant de lancer un sort pourvoir unique sur soi uniquement.
Avec un script pour te transformer en golem de fer.
Cherche sur le forum j'ai posé cette question "se tranformer en animal avec un bâton", et tu changer dans le script le apprence_type_raven par le apparence_type_xxx du golem de fer voilà.
En espérant que ça marche.
@+ _________________ "Je vais où le vent porte mes ailes, je suis celui qui porte les messages aux dieux. Je suis Kamu, prince de la citée des lumières d'Ishtar."
|
|
Revenir en haut |
|
|
chevalier blanc
Grand Chevalier
Inscrit le: 28 Mar 2005
Messages: 117
Localisation: Sur les Côtes d'Opaline |
Posté le : 26/07/2007 17:12:53 Sujet du message :
Oui j'ai essayé cette solution. Mettre un script dans le OnItemActivate et la bonne apparence dans le script, mais y'a certains problemes :
- Les objets de l'inventaire sont toujours utilisables
- On peut toujours lancer des sorts
- C'est compliqué de changer toutes les caracs physiques du pj
- Et le golem pnj est toujours là
Du coup j'ai essayé la fonction Polymorph, ça arrange les trois premiers problemes. Mais du coup on peut arreter la transformation quand on veut et le rendu de "descendre du golem" est pas super... puisque du coup on n'a plus besoin de golem pnj (oui bon je sais j'ai un peu du mal a expliquer )
En fait ce que je voudrais c'est un objet à pouvoir utiliser sur le golem pnj pour pouvoir monter dedans a la limite. Mais la on sort un peu de mon savoir faire !
|
|
Revenir en haut |
|
|
Kamu d'Ishtar
Héros
Inscrit le: 07 Jan 2005
Messages: 281
Localisation: Citée des lumières d'Ishtar, Montagnes de Niork. |
Posté le : 26/07/2007 21:38:38 Sujet du message :
A la limite ce qu'il te faudrai ça serai un script qui ferai disparaître ton PJ et pouvoir utiliser le Golem, comme si tu le possédait...
Et vice-versa...
Mais je me demande si c'est possible.
Sinon il te faudrai un script, pour bloquer ton inventaire (comme avec les compagnons d'armes), et un second pour bloquer tes sorts... Faut voir...
Sinon utilise le script là :
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.
En rajoutant un ligne te permettant de faire disparaitre ton Golem PNJ.
Enfin c'est ce que j'en pense, essai toujours ça peux peut-être marcher.
@+ _________________ "Je vais où le vent porte mes ailes, je suis celui qui porte les messages aux dieux. Je suis Kamu, prince de la citée des lumières d'Ishtar."
Dernière édition par Kamu d'Ishtar le 26/07/2007 21:42:04; édité 1 fois
|
|
Revenir en haut |
|
|
chevalier blanc
Grand Chevalier
Inscrit le: 28 Mar 2005
Messages: 117
Localisation: Sur les Côtes d'Opaline |
Posté le : 26/07/2007 21:41:51 Sujet du message :
Moui je sais pas non plus si c'est possible.
J'étais parti comme idée de départ de faire disparaitre le PNJ golem a la suite du dialogue et ensuite de changer l'apparence du PJ.
Mais j'arrive pas a faire disparaitre ce satané golem.
Et bien sur a le faire réapparaitre une fois redevenu a l'apparence normale du PJ.
|
|
Revenir en haut |
|
|
Kamu d'Ishtar
Héros
Inscrit le: 07 Jan 2005
Messages: 281
Localisation: Citée des lumières d'Ishtar, Montagnes de Niork. |
Posté le : 26/07/2007 21:44:40 Sujet du message :
Pour le faire disparaître, tu peux utiliser ce script :
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.
ou sinon si tu le veux version superman met ça (ensuite un golem qui fait de la magie...)
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. _________________ "Je vais où le vent porte mes ailes, je suis celui qui porte les messages aux dieux. Je suis Kamu, prince de la citée des lumières d'Ishtar."
|
|
Revenir en haut |
|
|
chevalier blanc
Grand Chevalier
Inscrit le: 28 Mar 2005
Messages: 117
Localisation: Sur les Côtes d'Opaline |
Posté le : 26/07/2007 21:46:38 Sujet du message :
Ok j'essaierai ça ce week end faute de pc...
Déjà merci du coup de main et je te tiens au courant Kamu.
|
|
Revenir en haut |
|
|
Kamu d'Ishtar
Héros
Inscrit le: 07 Jan 2005
Messages: 281
Localisation: Citée des lumières d'Ishtar, Montagnes de Niork. |
Posté le : 26/07/2007 21:50:31 Sujet du message :
De rien, entre joueurs on doit se serrer les coudes non ? _________________ "Je vais où le vent porte mes ailes, je suis celui qui porte les messages aux dieux. Je suis Kamu, prince de la citée des lumières d'Ishtar."
|
|
Revenir en haut |
|
|
chevalier blanc
Grand Chevalier
Inscrit le: 28 Mar 2005
Messages: 117
Localisation: Sur les Côtes d'Opaline |
Posté le : 27/07/2007 12:46:00 Sujet du message :
Bon j'ai bien avancé mais y'a encore un petit pépin.
Voilà les scripts :
OnClientEnter(récupéré sur ton script de baton de transfo, Kamu)
Ce message est un spoiler, et risque de vous informer de choses que vous auriez dû apprendre par vous même (fin d'un jeu, film, etc). À vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.Spoiler :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.
Et OnActivateItem
Ce message est un spoiler, et risque de vous informer de choses que vous auriez dû apprendre par vous même (fin d'un jeu, film, etc). À vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.Spoiler :NWScript :#include "zep_inc_phenos"#include "x2_inc_switches"void main() { object oItem = GetItemActivated(); object oPC = GetItemActivator(); object oTarget = GetItemActivatedTarget(); effect eMagicFail = EffectSpellFailure( 100, SPELL_SCHOOL_GENERAL); effect eCarracAAugmenter= EffectAbilityIncrease ( ABILITY_STRENGTH, 50); effect eCarracAAugmenter1= EffectAbilityIncrease ( ABILITY_CONSTITUTION, 50); effect eCarracAAugmenter2= EffectAbilityIncrease ( ABILITY_DEXTERITY, 50); effect eCarracAAugmenter3= EffectTemporaryHitpoints ( 500); if( GetTag( oItem) == "PierreEscaflowne") { int iTronche = GetAppearanceType( oPC); int iAppearance = GetLocalInt( oPC, "apparence"); if ( GetTag( oTarget)== "Escaflowne") if( iTronche== iAppearance) { ApplyEffectToObject( DURATION_TYPE_PERMANENT, eCarracAAugmenter, oPC); ApplyEffectToObject( DURATION_TYPE_PERMANENT, eCarracAAugmenter1, oPC); ApplyEffectToObject( DURATION_TYPE_PERMANENT, eCarracAAugmenter2, oPC); ApplyEffectToObject( DURATION_TYPE_PERMANENT, eCarracAAugmenter3, oPC); effect explosion= EffectVisualEffect ( VFX_FNF_FIREBALL); ApplyEffectToObject( DURATION_TYPE_INSTANT, explosion, oPC); effect explosion1= EffectVisualEffect ( VFX_FNF_MYSTICAL_EXPLOSION); ApplyEffectToObject( DURATION_TYPE_INSTANT, explosion1, oPC); object oPeau = CreateItemOnObject ( "peaugolem", oPC, 1); object oEpee = CreateItemOnObject ( "nw_wswgs001", oPC, 1); AssignCommand( oPC, ActionEquipItem( oPeau, INVENTORY_SLOT_CARMOUR)); AssignCommand( oPC, ActionEquipItem( oEpee, INVENTORY_SLOT_RIGHTHAND)); SetCreatureAppearanceType( oPC, APPEARANCE_TYPE_GOLEM_IRON); AssignCommand( oTarget, JumpToObject( GetObjectByTag( "WP_golem1"))); FloatingTextStringOnCreature( "La carapace du Golem se verrouille, vous voici prisonnier a l'interieur jusqu'a la fin de son utilisation", oPC); ApplyEffectToObject( DURATION_TYPE_PERMANENT, eMagicFail, oPC); } if( oTarget== oPC) if( iTronche== APPEARANCE_TYPE_GOLEM_IRON) { AssignCommand( GetObjectByTag( "Escaflowne"), JumpToObject( oPC)); SetCreatureAppearanceType( oPC, iAppearance); object oPeau = GetItemInSlot( INVENTORY_SLOT_CARMOUR, oPC); object oEpee = GetItemInSlot( INVENTORY_SLOT_RIGHTHAND, oPC); DestroyObject( oEpee); DestroyObject( oPeau); FloatingTextStringOnCreature( "La carapace du Golem se reouvre, vous permettant de vous reposer", oPC); RemoveEffect( oPC, eCarracAAugmenter); RemoveEffect( oPC, eCarracAAugmenter1); RemoveEffect( oPC, eCarracAAugmenter2); RemoveEffect( oPC, eCarracAAugmenter3); RemoveEffect( oPC, eMagicFail); } } } 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.
Voilà mes problèmes :
- Les objets de l'inventaire sont toujours utilisables meme en etant transformé
- Les carac (Force, Dex, Consti, PV sup) ne s'en vont pas après etre redevnu normal...
J'ai tout retourné mais je trouve pas la solution.
|
|
Revenir en haut |
|
|
Kamu d'Ishtar
Héros
Inscrit le: 07 Jan 2005
Messages: 281
Localisation: Citée des lumières d'Ishtar, Montagnes de Niork. |
Posté le : 27/07/2007 17:05:49 Sujet du message :
hum... hum... Il te faudrai un script pour changer les capacitées et un second pour l'inventaire...
A voir... je vais essayer de regarder ça !
Tiens je savais bien que j'avais déjà demandé un truc dans le genre va là :
http://www.bbnwn.eu/phpbb2/viewtopic.php?t=7961&highlight=
Voilà ti !
Et met ton coffre vers le golem où arrange toi pour faire le script dans l'autre sens mais là tu as du courage, car il te faudra récupérer TOUS les tags des objets de ton inventaire, pour le faire dans l'autre sens !!! _________________ "Je vais où le vent porte mes ailes, je suis celui qui porte les messages aux dieux. Je suis Kamu, prince de la citée des lumières d'Ishtar."
|
|
Revenir en haut |
|
|
chevalier blanc
Grand Chevalier
Inscrit le: 28 Mar 2005
Messages: 117
Localisation: Sur les Côtes d'Opaline |
Posté le : 28/07/2007 14:34:45 Sujet du message :
Bon... j'ai déjà essayé de m'attaquer au problème des caracs et ça n'avance... pas !
Voilà le script modifié :
Ce message est un spoiler, et risque de vous informer de choses que vous auriez dû apprendre par vous même (fin d'un jeu, film, etc). À vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.Spoiler :NWScript :void main() { object oItem = GetItemActivated(); object oPC = GetItemActivator(); object oTarget = GetItemActivatedTarget(); if( GetTag( oItem) == "PierreEscaflowne") { int iTronche = GetAppearanceType( oPC); int iAppearance = GetLocalInt( oPC, "apparence"); if ( GetTag( oTarget)== "Escaflowne") if( iTronche== iAppearance) { effect explosion= EffectVisualEffect ( VFX_FNF_FIREBALL); ApplyEffectToObject( DURATION_TYPE_INSTANT, explosion, oPC); effect explosion1= EffectVisualEffect ( VFX_FNF_MYSTICAL_EXPLOSION); ApplyEffectToObject( DURATION_TYPE_INSTANT, explosion1, oPC); object oPeau = CreateItemOnObject ( "peaugolem", oPC, 1); object oEpee = CreateItemOnObject ( "nw_wswgs001", oPC, 1); AssignCommand( oPC, ActionEquipItem( oPeau, INVENTORY_SLOT_CARMOUR)); AssignCommand( oPC, ActionEquipItem( oEpee, INVENTORY_SLOT_RIGHTHAND)); SetCreatureAppearanceType( oPC, APPEARANCE_TYPE_GOLEM_IRON); AssignCommand( oTarget, JumpToObject( GetObjectByTag( "WP_golem1"))); FloatingTextStringOnCreature( "La carapace du Golem se verrouille, vous voici prisonnier a l'interieur jusqu'a la fin de son utilisation", oPC); SetLocalInt( oPC, "Escaflowne", 1); ExecuteScript( "sc_caracgolem", oPC); } if( oTarget== oPC) if( iTronche== APPEARANCE_TYPE_GOLEM_IRON) { AssignCommand( GetObjectByTag( "Escaflowne"), JumpToObject( oPC)); SetCreatureAppearanceType( oPC, iAppearance); object oPeau = GetItemInSlot( INVENTORY_SLOT_CARMOUR, oPC); object oEpee = GetItemInSlot( INVENTORY_SLOT_RIGHTHAND, oPC); DestroyObject( oEpee); DestroyObject( oPeau); FloatingTextStringOnCreature( "La carapace du Golem se reouvre, vous permettant de vous reposer", oPC); SetLocalInt( oPC, "Escaflowne", 0); ExecuteScript( "sc_caracgolem", oPC); } } } 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.
Et voilà le script appelé (sc_caracgolem)
Ce message est un spoiler, et risque de vous informer de choses que vous auriez dû apprendre par vous même (fin d'un jeu, film, etc). À vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.Spoiler :NWScript :void main() { object oPC = OBJECT_SELF; effect eMagicFail = EffectSpellFailure( 100 , SPELL_SCHOOL_GENERAL); effect eFOR = EffectAbilityIncrease ( ABILITY_STRENGTH, 10); effect eCON = EffectAbilityIncrease ( ABILITY_CONSTITUTION, 10); effect eDEX = EffectAbilityIncrease ( ABILITY_DEXTERITY, 10); effect ePV = EffectTemporaryHitpoints ( 500); if( GetLocalInt( OBJECT_SELF, "Escaflowne")== 1) { ApplyEffectToObject( DURATION_TYPE_PERMANENT, eFOR, oPC); ApplyEffectToObject( DURATION_TYPE_PERMANENT, eCON, oPC); ApplyEffectToObject( DURATION_TYPE_PERMANENT, eDEX, oPC); ApplyEffectToObject( DURATION_TYPE_PERMANENT, ePV, oPC); ApplyEffectToObject( DURATION_TYPE_PERMANENT, eMagicFail, oPC); } else if( GetLocalInt( OBJECT_SELF, "Escaflowne")== 0) { RemoveEffect( oPC, eFOR); RemoveEffect( oPC, eCON); RemoveEffect( oPC, eDEX); RemoveEffect( oPC, ePV); RemoveEffect( oPC, eMagicFail); } } 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.
Je comprend pas où est ce que j'ai pu merder si je puis dire... puisque quelle que soit le type de durée (DURATION_TYPE_*) séléctionné (INSTANT, TEMPORARY, PERMANENT) quand je définis les effect (eFOR, eDEX...) je n'arrive pas à les enlever après...
Est ce que j'emploie mal la fonction RemoveEffect ?
|
|
Revenir en haut |
|
|
Kamu d'Ishtar
Héros
Inscrit le: 07 Jan 2005
Messages: 281
Localisation: Citée des lumières d'Ishtar, Montagnes de Niork. |
Posté le : 28/07/2007 15:11:54 Sujet du message :
Renvoi ton message avec [nwscript][/nwscript] pour tes scripts ils apparaissent en spoilers !!! _________________ "Je vais où le vent porte mes ailes, je suis celui qui porte les messages aux dieux. Je suis Kamu, prince de la citée des lumières d'Ishtar."
|
|
Revenir en haut |
|
|
Black Knight
Grand Maître Chanteur du Conseil
Inscrit le: 27 Oct 2005
Messages: 1031
Localisation: Fin fond du trou du cul du monde |
Posté le : 28/07/2007 16:31:50 Sujet du message :
Il les met surement en spoiler pour éviter de prendre énormement de place _________________ [http]
|
|
Revenir en haut |
|
|
Damz
Grand Chevalier
Inscrit le: 01 Mar 2007
Messages: 102
|
Posté le : 28/07/2007 16:32:54 Sujet du message :
un test pour mieux centré le bug.
Remplace tes removeeffect par des apparitions d'effet visuels.
Si elles ont lieux ça veux dire que y a un problème avec les removeeffect sinon que on entre pas du tout dans le if.
Ou tout simplement en rajoutant à certain endroit de ton code
SendMessageToPC(OBJECT_SELF, "test à la ligne X.");
|
|
Revenir en haut |
|
|
chevalier blanc
Grand Chevalier
Inscrit le: 28 Mar 2005
Messages: 117
Localisation: Sur les Côtes d'Opaline |
Posté le : 28/07/2007 17:12:41 Sujet du message :
Oui comme dit Black Knight c'est pour éviter de trop surcharger la page que je met les scripts en spoilers.
Pour Damz : J'ai déjà testé des textes flottants, aucun soucis ils se déclenchent à chaque ligne donc cela ne vient pas de la condition if qui déconne... Mais bien du RemoveEffect, ou de la DURATION_TYPE_* appliquée.
|
|
Revenir en haut |
|
|
Damz
Grand Chevalier
Inscrit le: 01 Mar 2007
Messages: 102
|
Posté le : 28/07/2007 17:41:23 Sujet du message :
hum je pense avoir compris l'erreur.
Citation :A common mistake with this function is to use the following approach to remove, say, a sleep effect:
effect eSleep=EffectSleep();
RemoveEffect(oPC, eSleep);
This doesn't work, because calling EffectSleep creates a new effect. It is thus not the sleep effect that is currently on oPC, but a different sleep effect. En fait quand tu réalise le code pour supprimer les effets de ton personnage tu crée juste avant des effets et c'est ceux-ci que tu essaye de lui supprimer.
Alors il y a deux solutions
soit tu fait quelque chose dans ce genre là :
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.
ou alors tu utilise RemoveSpecificEffect
|
|
Revenir en haut |
|
|
chevalier blanc
Grand Chevalier
Inscrit le: 28 Mar 2005
Messages: 117
Localisation: Sur les Côtes d'Opaline |
Posté le : 28/07/2007 18:17:55 Sujet du message :
Merci beaucoup Damz tu m'as bien aidé avec ta fonction RemoveSpecificEffect.
J'ai modifié mon script sc_caracgolem qui fonctionne qui donne maintenant ceci :
Ce message est un spoiler, et risque de vous informer de choses que vous auriez dû apprendre par vous même (fin d'un jeu, film, etc). À vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.Spoiler :NWScript :#include "nw_i0_spells"void main() { object oPC = OBJECT_SELF; if( GetLocalInt( OBJECT_SELF, "Escaflowne")== 1) { effect eMagicFail = EffectSpellFailure( 100 , SPELL_SCHOOL_GENERAL); effect eFOR = EffectAbilityIncrease ( ABILITY_STRENGTH, 10); effect eCON = EffectAbilityIncrease ( ABILITY_CONSTITUTION, 10); effect eDEX = EffectAbilityIncrease ( ABILITY_DEXTERITY, 10); effect ePV = EffectTemporaryHitpoints ( 500); ApplyEffectToObject( DURATION_TYPE_PERMANENT, eFOR, oPC); ApplyEffectToObject( DURATION_TYPE_PERMANENT, eCON, oPC); ApplyEffectToObject( DURATION_TYPE_PERMANENT, eDEX, oPC); ApplyEffectToObject( DURATION_TYPE_PERMANENT, ePV, oPC); ApplyEffectToObject( DURATION_TYPE_PERMANENT, eMagicFail, oPC); } else if( GetLocalInt( OBJECT_SELF, "Escaflowne")== 0) { RemoveSpecificEffect( EFFECT_TYPE_ABILITY_INCREASE, oPC); RemoveSpecificEffect( EFFECT_TYPE_TEMPORARY_HITPOINTS, oPC); RemoveSpecificEffect( EFFECT_TYPE_SPELL_FAILURE, oPC); } } 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.
Il me reste maintenant le problème de l'inventaire à résoudre.
Je pense que je vais créer et mettre des objets inenlevables pour remplacer les objets de l'inventaire du PJ (pour éviter que le PJ profite des bonus que lui procure tous ses objets) via le OnUnEquipItem avec la fonction ActionEquipItem. Le script avec le coffre me paraît un peu trop compliqué. A moins que quelqu'un ait plus simple ?
|
|
Revenir en haut |
|
|
chevalier blanc
Grand Chevalier
Inscrit le: 28 Mar 2005
Messages: 117
Localisation: Sur les Côtes d'Opaline |
Posté le : 28/07/2007 21:43:20 Sujet du message :
Bon voilà j'ai fini quelque chose de potable :
sc_caracgolem :
Ce message est un spoiler, et risque de vous informer de choses que vous auriez dû apprendre par vous même (fin d'un jeu, film, etc). À vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.Spoiler :NWScript :#include "nw_i0_spells"void main() { object oPC = OBJECT_SELF; if( GetLocalInt( OBJECT_SELF, "Escaflowne")== 1) { effect eMagicFail = EffectSpellFailure( 100 , SPELL_SCHOOL_GENERAL); effect eFOR = EffectAbilityIncrease ( ABILITY_STRENGTH, 10); effect eCON = EffectAbilityIncrease ( ABILITY_CONSTITUTION, 10); effect eDEX = EffectAbilityIncrease ( ABILITY_DEXTERITY, 10); effect ePV = EffectTemporaryHitpoints ( 500); ApplyEffectToObject( DURATION_TYPE_PERMANENT, eFOR, oPC); ApplyEffectToObject( DURATION_TYPE_PERMANENT, eCON, oPC); ApplyEffectToObject( DURATION_TYPE_PERMANENT, eDEX, oPC); ApplyEffectToObject( DURATION_TYPE_PERMANENT, ePV, oPC); ApplyEffectToObject( DURATION_TYPE_PERMANENT, eMagicFail, oPC); } else if( GetLocalInt( OBJECT_SELF, "Escaflowne")== 0) { RemoveSpecificEffect( EFFECT_TYPE_ABILITY_INCREASE, oPC); RemoveSpecificEffect( EFFECT_TYPE_TEMPORARY_HITPOINTS, oPC); RemoveSpecificEffect( EFFECT_TYPE_SPELL_FAILURE, oPC); } } 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.
OnActivateItem :
Ce message est un spoiler, et risque de vous informer de choses que vous auriez dû apprendre par vous même (fin d'un jeu, film, etc). À vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.Spoiler :NWScript :#include "zep_inc_phenos"#include "x2_inc_switches"#include "NW_I0_GENERIC"#include "nw_i0_spells"void main() { if( GetTag( oItem) == "PierreEscaflowne") { int iTronche = GetAppearanceType( oPC); int iAppearance = GetLocalInt( oPC, "apparence"); if ( GetTag( oTarget)== "Escaflowne") if( iTronche== iAppearance) { effect explosion1= EffectVisualEffect ( VFX_IMP_DEATH_WARD); ApplyEffectToObject( DURATION_TYPE_INSTANT, explosion1, oPC); object oPeau = CreateItemOnObject ( "peaugolem", oPC, 1); object oEpee = CreateItemOnObject ( "epee", oPC, 1); object oArmure = CreateItemOnObject ( "armure", oPC, 1); object oAmulette = CreateItemOnObject ( "amulette", oPC, 1); object oAnneauR = CreateItemOnObject ( "anneaur", oPC, 1); object oAnneauL = CreateItemOnObject ( "anneaul", oPC, 1); object oBottes = CreateItemOnObject ( "bottes", oPC, 1); object oBracelets = CreateItemOnObject ( "bracelets", oPC, 1); object oCape = CreateItemOnObject ( "cape", oPC, 1); object oCasque = CreateItemOnObject ( "casque", oPC, 1); object oCeinture = CreateItemOnObject ( "ceinture", oPC, 1); AssignCommand( oPC, ActionEquipItem( oPeau, INVENTORY_SLOT_CARMOUR)); AssignCommand( oPC, ActionEquipItem( oEpee, INVENTORY_SLOT_RIGHTHAND)); AssignCommand( oPC, ActionEquipItem( oArmure, INVENTORY_SLOT_CHEST)); AssignCommand( oPC, ActionEquipItem( oAmulette, INVENTORY_SLOT_NECK)); AssignCommand( oPC, ActionEquipItem( oAnneauR, INVENTORY_SLOT_LEFTRING)); AssignCommand( oPC, ActionEquipItem( oAnneauL, INVENTORY_SLOT_RIGHTRING)); AssignCommand( oPC, ActionEquipItem( oBottes, INVENTORY_SLOT_BOOTS)); AssignCommand( oPC, ActionEquipItem( oBracelets, INVENTORY_SLOT_ARMS)); AssignCommand( oPC, ActionEquipItem( oCape, INVENTORY_SLOT_CLOAK)); AssignCommand( oPC, ActionEquipItem( oCasque, INVENTORY_SLOT_HEAD)); AssignCommand( oPC, ActionEquipItem( oCeinture, INVENTORY_SLOT_BELT)); ApplyEffectToObject( DURATION_TYPE_INSTANT, EffectDispelMagicAll( 60), oPC); SetCreatureAppearanceType( oPC, APPEARANCE_TYPE_GOLEM_IRON); AssignCommand( oTarget, JumpToObject( GetObjectByTag( "WP_golem1"))); FloatingTextStringOnCreature( "La carapace du Golem se verrouille, vous voici prisonnier a l'interieur jusqu'a la fin de son utilisation", oPC); SetLocalInt( oPC, "Escaflowne", 1); ExecuteScript( "sc_caracgolem", oPC); } if( oTarget== oPC) if( iTronche== APPEARANCE_TYPE_GOLEM_IRON) { AssignCommand( GetObjectByTag( "Escaflowne"), JumpToObject( oPC)); SetCreatureAppearanceType( oPC, iAppearance); object oPeau = GetItemInSlot( INVENTORY_SLOT_CARMOUR, oPC); object oEpee = GetItemInSlot( INVENTORY_SLOT_RIGHTHAND, oPC); object oArmure = GetItemInSlot( INVENTORY_SLOT_CHEST, oPC); object oAmulette = GetItemInSlot( INVENTORY_SLOT_NECK, oPC); object oAnneauR = GetItemInSlot( INVENTORY_SLOT_RIGHTRING, oPC); object oAnneauL = GetItemInSlot( INVENTORY_SLOT_LEFTRING, oPC); object oBottes = GetItemInSlot( INVENTORY_SLOT_BOOTS, oPC); object oBracelets = GetItemInSlot( INVENTORY_SLOT_ARMS, oPC); object oCape = GetItemInSlot( INVENTORY_SLOT_CLOAK, oPC); object oCasque = GetItemInSlot( INVENTORY_SLOT_HEAD, oPC); object oCeinture = GetItemInSlot( INVENTORY_SLOT_BELT, oPC); DestroyObject( oEpee); DestroyObject( oPeau); DestroyObject( oArmure); DestroyObject( oAmulette); DestroyObject( oAnneauR); DestroyObject( oAnneauL); DestroyObject( oBottes); DestroyObject( oBracelets); DestroyObject( oCape); DestroyObject( oCasque); DestroyObject( oCeinture); FloatingTextStringOnCreature( "La carapace du Golem se reouvre, vous permettant de vous reposer", oPC); SetLocalInt( oPC, "Escaflowne", 0); ExecuteScript( "sc_caracgolem", oPC); object oLoop= GetFirstItemInInventory( oPC); while ( GetIsObjectValid( oLoop)) { if ( GetBaseItemType( oLoop)== BASE_ITEM_ARMOR) AssignCommand( oPC, ActionEquipItem( oLoop, INVENTORY_SLOT_CHEST)); oLoop= GetNextItemInInventory( oPC); } } } } 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.
OnPlayerUnequipItem :
Ce message est un spoiler, et risque de vous informer de choses que vous auriez dû apprendre par vous même (fin d'un jeu, film, etc). À vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.Spoiler :NWScript :#include "x2_inc_switches"#include "x2_inc_intweapon"void main() { object oItem = GetPCItemLastUnequipped(); object oPC = GetPCItemLastUnequippedBy(); if ( GetTag( oItem)== "amulette") AssignCommand( oPC, ActionEquipItem( oItem, INVENTORY_SLOT_NECK)); if ( GetTag( oItem)== "anneaul") AssignCommand( oPC, ActionEquipItem( oItem, INVENTORY_SLOT_LEFTRING)); if ( GetTag( oItem)== "anneaur") AssignCommand( oPC, ActionEquipItem( oItem, INVENTORY_SLOT_RIGHTRING)); if ( GetTag( oItem)== "armure") AssignCommand( oPC, ActionEquipItem( oItem, INVENTORY_SLOT_CHEST)); if ( GetTag( oItem)== "bottes") AssignCommand( oPC, ActionEquipItem( oItem, INVENTORY_SLOT_BOOTS)); if ( GetTag( oItem)== "bracelets") AssignCommand( oPC, ActionEquipItem( oItem, INVENTORY_SLOT_ARMS)); if ( GetTag( oItem)== "cape") AssignCommand( oPC, ActionEquipItem( oItem, INVENTORY_SLOT_CLOAK)); if ( GetTag( oItem)== "casque") AssignCommand( oPC, ActionEquipItem( oItem, INVENTORY_SLOT_HEAD)); if ( GetTag( oItem)== "ceinture") AssignCommand( oPC, ActionEquipItem( oItem, INVENTORY_SLOT_BELT)); if ( GetTag( oItem)== "epee") AssignCommand( oPC, ActionEquipItem( oItem, INVENTORY_SLOT_RIGHTHAND)); } 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.
En créant bien sur une epee avec le tag "epee", une armure avec le tag "armure" etc...
Tout à l'air de fonctionner...
Reste une chose que j'ai vraiment la flemme de faire ce soir, c'est à la mort du PJ, quand il est dans le golem, j'aimerais qu'il revienne sous forme normale avec tous ses PV, et que le golem PNJ téléporté sur le WP_golem1 précédemment revienne à coté du PJ mais mort (EffectDeath probablement)...
Je suppose qu'il faut mettre tout ça dans le OnPlayerDeath ou dans le OnPlayerRespawn du module (voire dans les deux ?)... mais j'ai pas trop d'idées...
|
|
Revenir en haut |
|
|
chevalier blanc
Grand Chevalier
Inscrit le: 28 Mar 2005
Messages: 117
Localisation: Sur les Côtes d'Opaline |
Posté le : 30/07/2007 21:48:37 Sujet du message :
Je relance le topic parce que la dernière condition je n'arrive pas à la remplir...
Je connais pas trop la marche à suivre sur les scripts OnPlayerDeath ou OnPlayerRespawn.
J'ai scripté un peu pour voir mais je n'arrive pas à remettre l'apparence du PJ à la normale, et de retéléporter le golem PNJ mort à côté du PJ.
J'ai juste réussi à faire en sorte de le rez mais la fenetre de rez normal (avec charger partie, respawn ou quitter partie en boutons) apparait et oblige le joueur a re-respawner...
Donc pas évident le truc...
Y'a personne qui a une idée de la marche à suivre ?
|
|
Revenir en haut |
|
|
Macadam
Grand Chevalier
Inscrit le: 07 Avr 2006
Messages: 132
|
Posté le : 08/08/2007 20:25:50 Sujet du message :
Tout ce que je peux te dire pour les histoires d'apparence c'est que c'est un casse tête en multi.
Notre systême de navigation qui transforme pour l'instant le PJ en bateau (provisoire car ce sera via UI ensuite) a du mal à fonctionner parfois pour le retour à une apparence normale et même en sauvegardant son apparence d'origine sur un objet.
Pour la mort, faudrait que tu téléportes le PJ mort dans une zone neutre avant de le renvoyer sur place avec tout ses PVs, dans la zone neutre tu lui rend son apparence de base, en espérant que ça marche car ça a tendance à buguer pour les mêmes raisons innexpliquées. Parfois l'apparence est stockée, parfois non.
Limite le pied serait de rendre ton PJ invisible et de controler le golem avec une nouvelle UI (c un peu ce qu'on voudrait arriver à faire pour la navigation)
La maitrise des UIs c'est un peu comme celle des scripts, on fini par s'y faire ^^
Bon courage en tout cas
Quelques idées :
le golem mort te suffirait d'un placeable invisible "golem mort" et de faire un CopyObject, à la mort du PJ puis un ApparenceDead sur l'objet copié (un peu comme notre systême de cadavre)
Pour la REZ ça doit venir du onplayer respawn, me rappelle plus trop là, faudrait que je regarde un systême que j'ai pas revu depuis 6 mois lol _________________ http://mowlvp.free.fr
|
|
Revenir en haut |
|
|
Macadam
Grand Chevalier
Inscrit le: 07 Avr 2006
Messages: 132
|
Posté le : 08/08/2007 20:26:27 Sujet du message :
Tout ce que je peux te dire pour les histoires d'apparence c'est que c'est un casse tête en multi.
Notre systême de navigation qui transforme pour l'instant le PJ en bateau (provisoire car ce sera via UI ensuite) a du mal à fonctionner parfois pour le retour à une apparence normale et même en sauvegardant son apparence d'origine sur un objet.
Pour la mort, faudrait que tu téléportes le PJ mort dans une zone neutre avant de le renvoyer sur place avec tout ses PVs, dans la zone neutre tu lui rend son apparence de base, en espérant que ça marche car ça a tendance à buguer pour les mêmes raisons innexpliquées. Parfois l'apparence est stockée, parfois non.
Limite le pied serait de rendre ton PJ invisible et de controler le golem avec une nouvelle UI (c un peu ce qu'on voudrait arriver à faire pour la navigation)
La maitrise des UIs c'est un peu comme celle des scripts, on fini par s'y faire ^^
Bon courage en tout cas
Quelques idées :
le golem mort te suffirait d'un placeable invisible "golem mort" et de faire un CopyObject, à la mort du PJ puis un ApparenceDead sur l'objet copié (un peu comme notre systême de cadavre)
Pour la REZ ça doit venir du onplayer respawn, me rappelle plus trop là, faudrait que je regarde un systême que j'ai pas revu depuis 6 mois lol _________________ http://mowlvp.free.fr
|
|
Revenir en haut |
|
|
chevalier blanc
Grand Chevalier
Inscrit le: 28 Mar 2005
Messages: 117
Localisation: Sur les Côtes d'Opaline |
Posté le : 17/08/2007 08:10:25 Sujet du message :
Ben merci Macadam... Je vais voir ce que je peux faire et je te tiens au courant.
|
|
Revenir en haut |
|
|
|