[Effet Polymorph] Encore un bug ?

Répondre
Partager Rechercher
Bon j'ouvre un fil sur le forum d'azmathiel, car je trouve qu'au delà de tous ce qu'on peut faire avec la technique et les scripts, même le module le mieux programmé au monde sans joueur est un module totalement inutile, et sa seule place est la poubelle. Autrement dit, ce sujet me tient particulièrement à coeur, ayant vécu cette expérience.

Donc ceux que ca intéresse, je serai très heureux de lire où vous en êtes, vous mêmes dans votre démarche vis à vis de la gestion d'un serveur, de toutes ses contraintes etc, etc...
Bon pour en revenir au sujet
Bon j'etais pas en etat de faire des tests hier soir apres le judo et l'aperitif, et ce amtin j'avais un pb d'electricite...

Donc je viens de tester et a priori a part le fait que mon PJ reprend son aspect normal et que j'ai toujours l'icone de metamorphose ainsi d'ailleurs que la ligne metamorphose lorsque qu'on regarde les proprietes de mon PJ tout le reste semble normal...
L'icone de metamorphose ainsi que la ligne visible dans la fiche du PJ disparaissent apres un repos.

Je te mets mes 2 codes... au cas ou tu verrais un truc fait de façon differente...
Alors a note que de toutes façons nous un PJ perd automatiquement 1 lvl (il se retrouve au milieux du lvl inferieur) donc est ce que le fait de lui faire perdre un lvl ne lui fait pas refaire un calcul des competences etc... des PJ.

Alors mon code c'est des modifs des hcr
En entree de la zone
Code PHP:

// HCR v3.2.0 -
//::////////////////////////////////////////////////////////////////////////////
//:: FileName:  HC_Fugue_Enter
//::////////////////////////////////////////////////////////////////////////////
/*
Modifie par Garrath le 28/07/04
*/
//::////////////////////////////////////////////////////////////////////////////

#include "HC_Inc_HTF"
//#include "HC_Inc"
//#include "HC_Inc_Strip"
//#include "HC_Inc_Transfer"
//::////////////////////////////////////////////////////////////////////////////
void main()
{
    
object oPC GetEnteringObject();


    
// If the object is a DM or not a PC, abort.
    
if (!GetIsPC(oPC) || GetIsDM(oPC) || GetIsDMPossessed(oPC))
       return;

//POLYMORPH_TYPE_ZOMBIE
//POLYMORPH_TYPE_SPECTRE

    
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(EFFECT_TYPE_POLYMORPH), oPC);

    
ApplyEffectToObject(DURATION_TYPE_PERMANENTEffectPolymorph(POLYMORPH_TYPE_SPECTRETRUE), oPC);
    
effect elink1 EffectLinkEffects(EffectCutsceneGhost(),EffectVisualEffect(VFX_DUR_GHOSTLY_VISAGE));
    
effect test SupernaturalEffect(EffectLinkEffects(elink1EffectPolymorph(POLYMORPH_TYPE_SPECTRETRUE)));
    
ApplyEffectToObject(DURATION_TYPE_PERMANENTtestoPC);

    
SetImmortal(oPCTRUE);

    
// Reset HTF settings.
    
if (GetLocalInt(oMod"HUNGERSYSTEM") || GetLocalInt(oMod"FATIGUESYSTEM"))
        
ResetHTFLevels(oPC);

    
// Clear the moving variable so the player may be raised.
    
DelayCommand(2.0DeleteLocalInt(oPC"MOVING"));
}
//:://////////////////////////////////////////////////////////////////////////// 
en sortie :
Code PHP:

// HCR v3.2.0 -
//::////////////////////////////////////////////////////////////////////////////
//:: FileName:  HC_Fugue_Exit
//::////////////////////////////////////////////////////////////////////////////
/*
Modifie par Garrath 28/07/04
*/
//::////////////////////////////////////////////////////////////////////////////
//#include "HC_Inc"
#include "HC_Inc_DCorpse"
//::////////////////////////////////////////////////////////////////////////////
void main()
{
    
object oMod GetModule();
    
object oPC GetExitingObject();
    
string sID GetLocalString(oPC"sID");

    
// If the object is a DM or not a PC, abort.
    
if (!GetIsPC(oPC) || GetIsDM(oPC) || GetIsDMPossessed(oPC))
        return;


    
effect ghost GetFirstEffect(oPC);
    while(
GetIsEffectValid(ghost))
    {
        if (
GetEffectCreator(ghost) == OBJECT_SELF)
            
RemoveEffect(oPCghost);
        
ghost GetNextEffect(oPC);
    }

    
// Clear Immortal and set the player state.
    
SetImmortal(oPCFALSE);
//    SPS(oPC, PWS_PLAYER_STATE_ALIVE);

    // Remove the "copied" corpse.
    
DelayCommand(0.5DestroyCorpse(oPC));

    
// Remove the PCT.
    
object oPCorpse GetLocalObject(oMod"PlayerCorpse" sID);
    
DestroyObject(oPCorpse);

    
// Remove the Death Corpse.
    
object oDC GetLocalObject(oMod"DeathCorpse" sID);
    
DelayCommand(0.6DestroyObject(oDC));
}
//:://////////////////////////////////////////////////////////////////////////// 
Merci Garrath.


La seule inconnue, c'est cette fonction : ResetHTFLevels(oPC)

Elle est sensée faire quoi ? Ou plutôt elle applique quel genre de choses qui pourraient être en relation avec le problème ? (si toutefois il y en a une )

Sinon, ça me laisse encore plus perplexe... J'utilise la même forme (Spectre), le même code (évidemment, y a pas 50 façons de faire)...
Et chez toi, les effets disparaissent

Bon, ça vient apparemment d'ailleurs...
Citation :
Publié par Azmathiel
Merci Garrath.


La seule inconnue, c'est cette fonction : ResetHTFLevels(oPC)

Elle est sensée faire quoi ? Ou plutôt elle applique quel genre de choses qui pourraient être en relation avec le problème ? (si toutefois il y en a une )
Oui ca a rien a voir avec le pb... c'est le system de faim, soif fatigue etc...




Citation :
Publié par Azmathiel
Sinon, ça me laisse encore plus perplexe... J'utilise la même forme (Spectre), le même code (évidemment, y a pas 50 façons de faire)...
Et chez toi, les effets disparaissent

Bon, ça vient apparemment d'ailleurs...
Peut-etre le fait de changer de lvl au PJ. Ca fait peut etre recalculer des trucs au moteur...
Et du coup il se remet bien.

Sinon le CEP150 ont relivre le appearance.2da mais bon j'ai regarde je vois rien la dedans qui pourrait t'embetter. (mais bon, suis pas forcement le mieux place pour le dire non plus... )
Par curisosite je viens de tester en supprimant la penalite d'XP, donc le PJ reste tj au meme lvl.
Ben pareil...
Mon PJ se retrouve correctement. Par contre l'icone de metamorphose ne reste pas tout le temps (ca on le savait deja ) mais qu'il soit la ou pas la ligne metamorphosé apparait tout le temps sur la feuille du PJ.
Et de mon côté, j'ai essayé le Greater Dispell. il en un seul effet : il supprimer l'icône de polymorphie qui reste en haut de l'écran, mais à part ça, nada...

Bon, je renonce, je vais me tourner vers SetAppearance()... Ca devient trop lourd là...

Merci à tous pour tout
A tout hasard, as-tu vérifié que la peau créée lors de la métamorphose a bien été supprimée lorsque tu supprimes l'EffectPolymorph ?

Si tel n'est pas le cas, alors les effets seront bien encore présents sur le personnage d'une part, et ne pourront être détruits si tu boucles sur les effets du personnage lui-même.
La peau ? D'où viendrait-elle cette peau ?
Non, je n'ai rien vérifié de tel parce que je ne soupçonnais pas la création d'une peau
J'aurais dû ? Bon, j'y vais... On ne pourra pas dire que je n'ai pas exploré toutes les pistes

Edit : J'en reviens, mes soupçons étaient fondés, tu as tenté de m'abuser vile créature du démon ! ()
Merci quand même. Reste plus qu'à tenter le bouche à bouche !!!
Azmathiel nous avons le meme problème que toi. C'est surement hardcodé donc à mon sens pas de solutions viables via scripts et bidouilles.

Wait for 1.65
Citation :
Publié par Garrath
T'en es ou?
J'en suis au point que j'ai recodé toute la partie "Limbes" et que j'utilise SetCreatureAppearance() maintenant. Tant pis pour l'inventaire . Mais ça a pris dix minutes. J'aurais mieux fait de le faire de suite sans chercher à comprendre
Au passage, tu noteras, si tu as fait comme moi avant (polymorph), un truc auquel je n'avais pas prêté attention :
Les spectres ont des dons spéciaux : invisibilité notamment.
En fin de compte, ce n'est pas plus mal avec le changement d'apparence et l'inventaire, si ça m'ennuyait vraiment en fin de compte, je l'effacerais pendant cette période pour le recréer en sortie.

Citation :
Publié par Garrath
Sauf que moi je l'ai pas le pb [img]jol/images/smilies/wink.gif[/img]
Donc doit y avoir un truc que vous faites comme Azmathiel...

Vous avez quoi comme code? [img]jol/images/smilies/wink.gif[/img]
Ou bien un truc que nous tous ne faisons pas comme toi. Je pencherais plutôt pour les hakpacks, les 2DA ou un truc du genre, qui interférerait avec le code d'origine de Bioware. Pour ma part, c'est simple, tout est d'origine, sauf les scripts. Aucun hak, aucune modif de 2DA. D'ailleurs, il reste à explorer la piste des Métamorphes, qui à mon avis, est la même que celle de ce bug.
comme code ? des milliers de lignes ^^

Par contre tous les scripts génériques concernant de prêt ou de loin ce pb n'ont pas été modifiées.

Cela ne m'étonnerais pas que le pb ne touche que le standalone server comme bon nombres de bug sur les précédentes version, et plus particulièrement ceux qui étaient liés uniquement aux binaires du Standalone server 1.30. A noter que ces fameux binaires (windows) sont quelques peu différents d'une install lambda.

Une autre possibilité serait un hakpak conflictuel, mais j'en doute.
non en fait ce que j'aurais voulu savoir c'est si le pb ne vient pas du fait que pour toi le createur est le PJ...
Moi j'utilise comme creator de l'effet la zone qui ne change donc pas alors que le creator, pour toi Azmathiel, etant l'objet PJ lui il a subi une modification, est-ce que par hasard il ne considererait pas que le PJ avant la modif (donc le creator) et celui apres la modif est differents?
C'est la question que je me pose, c'est pour cela que j'aurais bien aime savoir ce que fait Zyko... Juste pour etre sur
Citation :
Publié par Azmathiel
En fin de compte, ce n'est pas plus mal avec le changement d'apparence et l'inventaire, si ça m'ennuyait vraiment en fin de compte, je l'effacerais pendant cette période pour le recréer en sortie.
Moi c'est justement a cause de l'inventaire que j'ai recode toute le system de mort du hcr...
Car a chaque fois il te supprimait l'inventaire pour te le rendre au respawn. Du coup tous les raccourcis portant sur des items du PJ disparaissait... Je trouvais qu'au niveau du gameplay c'etait carrement moyen et super chiant surtout pour les classes sans sorts etc...
Citation :
Publié par Garrath
non en fait ce que j'aurais voulu savoir c'est si le pb ne vient pas du fait que pour toi le createur est le PJ...
Moi j'utilise comme creator de l'effet la zone qui ne change donc pas alors que le creator, pour toi Azmathiel, etant l'objet PJ lui il a subi une modification, est-ce que par hasard il ne considererait pas que le PJ avant la modif (donc le creator) et celui apres la modif est differents?
C'est la question que je me pose, c'est pour cela que j'aurais bien aime savoir ce que fait Zyko... Juste pour etre sur
Si tu regardes le petit code que j'ai mis au-dessus, tu remarqueras que, justement, j'ai vérifié ça. Je penchais pour un problème du type changement d'ID -objet. Or, dans le script ci-dessus, le créateur est bien identifié comme étant la zone où l'effet est appliqué.

Judicieuse remarque pour l'inventaire... Je n'y avais pas encore songé... Reste le OnEquipItem()....
Citation :
Publié par Azmathiel
Si tu regardes le petit code que j'ai mis au-dessus, tu remarqueras que, justement, j'ai vérifié ça. Je penchais pour un problème du type changement d'ID -objet. Or, dans le script ci-dessus, le créateur est bien identifié comme étant la zone où l'effet est appliqué.
Ben ca m'hallucine....
Pourquoi ca marche chez moi et pas chez toi? ca c'est le truc qui m'hallucine ...
dans un monde binaire on a reussit a faire un peut-être, entre le non et le oui

Dois bien y avoir une difference quand meme...
Si je trouve 5 min, j'essaierais mon code sur un module sans hak pour voir ce que ca donne...
Un solution consisterait à créer une nouvelle forme dans le polymorph.2da, sans propriété particulière de peau, ou juste celles dont tu as besoin. Puis d'utiliser cette métamorphose dans ton EffectPolymorph, ah oui... mais il faut un hak .

Quoique, à la réflexion, non, le polymorph.2da se met dans l'override, et il doit bien exister une peau de base qui te conviendrait, donc tu devrais pouvoir t'en sortir sans hak, ou même à la limite ne pas mettre de peau du tout .
Effectivement, le polymorph.2da fonctionne dans l'override du serveur.
J'avais essayé en rajoutant des formes, il y a des lustres. Mais, je ne comprends pas pourquoi tu t'entêtes à me parler de peaux... Les PJ polymorphés n'ont pas de peau particulière.

Tout ceci étant dit, pour moi, le problème est résolu : j'ai viré la polymorphie et je l'ai remplacée par un changement d'apparence. Mais quelque chose me dit que je retrouverai ce problème avec les métamorphes. À suivre...
Si si ils prennent une peau, celle qui est définie justement dans le polymorph.2da, ils prennent aussi les éventuelles armes naturelles de la forme.

Or les propriétés spéciales des PC polymorphées se trouvent où ? Sur la peau .

Donc justement, ce que je pensais c'est que la peau de tes PC n'était pas supprimée lorsque tu enlevais l'effet avec RemoveEffect. Il te suffit alors de faire un GetItemInSlot(INVENTORY_SLOT_CARMOUR, oPC) pour voir s'il y a bien une peau résiduelle mal nettoyée .

Les colonnes Merge, quant à elle, définissent si les propriétés des armes, armures, anneaux, etc... du PC sont conservées lors de la métamorphose... et donc transférées sur la ... peau .
Et oui, j'avais déjà exploré un peu pour mettre les données pj sur une peau mais justement à cause de celle des polymorphes j'ai abandonné ...
Ben comme quoi on en apprend tous les jours

Citation :
Publié par Sherazade
.... Il te suffit alors de faire un GetItemInSlot(INVENTORY_SLOT_CARMOUR, oPC) pour voir s'il y a bien une peau résiduelle mal nettoyée .

...
Je l'avais fait après ta précédente suggestion même en n'y croyant pas, mais ça n'a rien changé. J'avais oublié de faire un SetPlotFlag(FALSE) au cas où. Mais dans mes tests présentés ci-dessous, il s'avère que la peau et les griffes ne sont pas en PLOT.



Bon, puisque j'ai eu de nouveaux éléments que j'ignorais, j'ai replacé les scripts dans un module d'une seule zone, dans les mêmes conditions.

à savoir :
Polymorphie en spectre sur le OnEnter
et une batterie de leviers pour tester le dépolymorph, l'inventaire, les effets sur le perso etc

Tenez-vous bien, l'effet disparaît par une boucle. Impossible de reproduire le bug... Je vais retester dans les conditions initiales et je vous tiens au courant.

Oui, je sais, je suis têtu
J'ai remis les scripts dans leur contexte initial où j'avais trouvé ce bug et j'ai fait une série d'expérimentations que je vais détailler en essayant d'être le plus clair possible.

Situation :
- Le PJ entre dans une zone où il est polymorphé en spectre par la zone. (Createur de l'effet = zone).

- Il se rend ensuite à un endroit où il prie et là dessus apparaît un PNJ

- Ce PNJ, dans un dialogue, lui retire XP, Effets et rend les points de vie totaux puis téléporte le PJ au dernier point de sa mort ou au temple auquel il est affilié.
Tout ça fonctionnait nickel avant la 1.64. Depuis la mise en route du patch, les sous-effets/Bonus liés au spectre sur le PJ ne sont plus supprimés par contre, la métamorphose était bien retirée.
Notez au passage que j'ignorais que le PJ obtenait une peau.

J'ai donc fait dans un premier temps une batterie de tests sur les effets appliqués et rien ne fonctionnait. J'ai repris ici sur l'idée que c'était lié à la peau. J'ai donc procédé ainsi :

Au lieu de supprimer les effets sur le PJ, j'ai commencé par les supprimer sur la peau. Ne marche pas.
Au lieu d'utiliser RemoveEffect(), j'ai détruit la peau : ne marche pas
J'ai utilisé la dissipation suprême : ne marche pas.

Le problème est le suivant :
Le scripting ne détecte plus d'effet valide !!!
Donc, j'ai tenté une boucle bourrine :

Code PHP:

   void main()
   {
       
object oPC GetLastUsedBy();
       
effect eEffet GetFirstEffect(oPC);
   
       
// Retirer les effets mode feroce !!!
       
int i;
       for (
i=1i<=900i++)
       {
           
RemoveEffect(oPCeEffet);
           
eEffet GetNextEffect(oPC);
           
SendMessageToPC(oPC"Effet theorique numero " IntToString(i));
       }
   } 
Ne marche pas non plus...


Bon, là, les gars (zé les filles) j'abandonne... Démerdez-vous tous seuls
J'ai, à mon avis, tout essayé et rien ne marche. Donc, comme Zyzko, il ne reste qu'à attendre la 1.65. Mais comme personne ne parle de ce problème sur les forums, ça pue...
En attendant, je reste sur SetCreatureAppearance().

Bon courage et ne soyez pas trop écoeurés
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés