JeuxOnLineForumsPlusConnectés : 567 (sites) | 1163 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Les doubles sont betes à mourrir.... RSS
   
Répondre
Partager Outils Rechercher
JerrySevere
Roi / Reine
 

Les doubles sont betes à mourrir....

je crée un double d'un pj avec la commande Copy_Object , je le met en faction hostile.
le double est pour l'instant hors du vision du pj, il a été crée dans une autre piece...

bon le pj rejoins son double , et..
1) le double ne se defend pas
2) si le double est un jeteur de sorts , il n'utilisera pas de sorts
3) au bout de plusieurs coup dans la gueule , et si on tourne un peut autour de lui , il pensera a se defendre avec l'arme qu'il a dans la main , mais ne jettera pas de sorts si c'est un lanceur de sort...

Y'a pas moyen de lui activer l'ia ??
Lien direct vers le message - Vieux
Avatar de Reyan
Reyan [L.D.D]
Roi / Reine
 
Avatar de Reyan
 
le pb, c'est que y a pas d'event utilisable sur les copy
donc je suis presque étonné qu'il se defendent . . .
quoique...
bon sinon, tu peu essayer de voirce qu'a fait RAT sur ses doppelganger, où il utilise un copyobject, et où il controle le double grace au onpercecption du doppel, mais bon . . .
Lien direct vers le message - Vieux
Avatar de 'Az
'Az [P.H.]
Alpha & Oméga
 
Avatar de 'Az
 
peut être il y aurait moyen de faire un semblant d'ia avec une area of effect, on peut détecter quand un objet entre, sort, et aussi faire un OnHeartBeat assigné a l'effet, qui disparait donc lorsque le clone sera détruit

Ca nous fait déjà le OnPerceptio, le OnHeartBeat, puis d'autres en bricolant un peu. On peut aussi faire des trucs avec le OnHit qui a été bricolé.

Chui sur qu'on peut en faire quelque chose de ces copy ^^
Lien direct vers le message - Vieux
Avatar de Reyan
Reyan [L.D.D]
Roi / Reine
 
Avatar de Reyan
 
zavais pensé au area of effect (si si, ca fait 2 semaine que je suis plongé ds les effets mdr)
mais bon, c'est quoi l'avantage ?
si faut faire déjà une créature pour le onperception on a déjà un onheartbeat ...
alors y a bien les onenter etc. mais dans une ia, tu t'en sers pourquoi ? (c'est une question, une vraie, pas une question pour souligner mon propos )

pis pour le onhit, reste le pb des moines nan ? (je dis ca parce que dans le sujet dessus, y a Skanzo il me semble qui avait parlé d'un OnHitted, mais soulevé cette question )

je serais vraiment très curieux de voir comment tu ferais pour bricoler tt ca *gros clin d'oeil à la Al Bundy*

(non pas que je doute que t'y arriverais , en réalité le smiley c'est pour que tu le fasse , mais je serais vraiment curieux de voir comment )
Lien direct vers le message - Vieux
Avatar de 'Az
'Az [P.H.]
Alpha & Oméga
 
Avatar de 'Az
 
Citation:
(non pas que je doute que t'y arriverais , en réalité le smiley c'est pour que tu le fasse , mais je serais vraiment curieux de voir comment )
LOOOOOOOOOL !!!!!

bon, ca m'interesse pas du tout de développer ca, mais je vais essayer de pondre quelques trucs quand même ^^

Citation:
mais dans une ia, tu t'en sers pourquoi ?
euh.... tu veux vraiment que je réponde ?
Si je pouvais répondre a ca en trois ligne, ce forum n'aurait pas lieux d'être. Tu veux vraiment le savoir ? Tu prend le premier post du forum en partant de la fin, puis le suivant, puis le suivant, etc... jusqu'a celui la, et tu auras plein d'exemples

Bon, OnBlocker, ca pourrait ce bricoler avec une area of effect, mais la c'est un peu galère ^^

OnCombatEndRound ca ce fait avec un DelayCommand bien placé, mais j'admet que ca peut tendre au bug.

Pour le OnConversation, pas évident du tout par contre :/

OnDamaged, il peut toujours y avoir une fonction récurente qui compte les points de vie toute les demi secondes.

Pour le OnDeath, bien on a notre même fonction récurente

OnDisturbed, je vois pas trop

OnHeartBeat : no comment

Le OnPeception on l'a avec le OnEnter de l'area of effect, et un petit test pour vérifié s'il le voit / l'entend

OnPhysicalAttacked : le je vois pas

OnRested ca peut aussi se vérifier avec notre fonction

OnSpawn : no comment aussi ^^

OnSpellCastAt : bien, on peut toujours modifier la liste de sorts si on en a le courage :bouffon:

Si vous(tu) voulez des éclairsissements sur un/des points, allez y ^^
Sur les trucs que j'ai pas trouvé, je peux peut être y arriver en mega bidouillant.
Lien direct vers le message - Vieux
Sire Pom-pom
Roi
 
J'ai réussi à affecter les scripts de henchman a une copie -une copie de copie pour être plus exacte-sans pour autant qu'elle ne soit le henchman de qui que ce soit (ou dominée par qui que ce soit). Je dois préciser qu'un jour Bioware pourrait considérer que tout cela repose sur un bug... Le principe est que quand on fait la copie d'un objet, les effets ne sont pas correctement copiés, leur conséquence le sont parfois (Ability Decrease, Domination) mais pas toujours (lenteur), quant à leur références elles ne le sont jamais: la copie est amnésique, et intègre les modifications comme ses caractéristiques propre. J'utilise cela pour garder les scripts de henchman sur la copie de copie, quand bien même elle n'a plus aucune autre des caractéristiques d'une créature dominée (pour éliminer la gui des henchman, je réaffecte la copie deux comme henchman de la copie un, que je détruis ensuite). Voir aussi la note sur une implémentation possible des henchmen multiples.

Voilà le script, assez affreux car j'ai laissé les lignes de tests (je pense que ça peut être utile), et que je ne suis même pas mes propres conseils (optimisation des AssignCommand) . Il faut que je sorte, si il y a des choses pas clairs, j'essaierais d'affiner plus tard.

PS le script s'utilise tel quel dans un OnUsed.


Code PHP:
object oPlayer GetLastUsedBy();
object oTemp;
location lLoc GetLocation(OBJECT_SELF);
object oCopy CopyObject(oPlayerlLocOBJECT_INVALID"copy1");

void Dominate(object oTarget);

void CountPC();

void AlertEffects(object oTarget);

void CreateCopy2(object oCopylocation lLoc);

void main()
{
    
ChangeToStandardFaction(oCopy,STANDARD_FACTION_HOSTILE); // bon la c'est 
    // vraiment de la perversion d'effectuer le changement de faction sur la première
    // copie plutot que la deuxième, mais c'est juste pour montrer que ca marche.
    
ApplyEffectToObject(DURATION_TYPE_PERMANENTExtraordinaryEffect(EffectSlow()),oCopy) ;
    
ApplyEffectToObject(DURATION_TYPE_PERMANENTExtraordinaryEffect(EffectAbilityDecrease(ABILITY_STRENGTH,5)),oCopy);
    
SendMessageToPC(GetFirstPC(), GetTag(oCopy) + " Strength: " +IntToString(GetAbilityScore(oCopy,ABILITY_STRENGTH)));
    
AssignCommand(oPlayer,Dominate(oCopy)); // une petite explication 
   // s'impose: les dominations de PNJs  imposées par un PJ et par un PNJ  
   // marchent différement, dans le premier cas les scripts de 
   // henchman sont appliqués à la créature dominée, dans
   // l'autre seul un heartbeat est appliqué . C'est pour cela
   // que je fais appliquer l'effet par le PJ.
   // Si je me contentais d'appliquer cela, puis de supprimer
   // la domination par un moyen ou par un autre, les scripts
   // s'envoleraient du même coup, d'où le recours à une
   // copie de copie, qui a le bon goût d'être amnésique. 
    
AssignCommand(oPlayerAlertEffects(oCopy));
    
AssignCommand(oPlayerCreateCopy2(oCopylLoc)) ;
    
AssignCommand(oPlayer,CountPC()); // 1 seul PC , ouf!
    
AssignCommand(oPlayer,DestroyObject(oCopy));
}

void Dominate(object oTarget)
{
     
ApplyEffectToObject(DURATION_TYPE_PERMANENTExtraordinaryEffect(EffectCutsceneDominated()),oTarget);
}
void CreateCopy2(object oCopylocation lLoc)
{
    
object oCopy2 CopyObject(oCopylLocOBJECT_INVALID"copy2");
    
SendMessageToPC(GetFirstPC(), GetTag(oCopy2) + " Strength: " +IntToString(GetAbilityScore(oCopy,ABILITY_STRENGTH)));

    
AlertEffects(oCopy2);// oCopy2 n'a aucun effet d'appliqué, pourtant si la lenteur
    // n'est effectivement pas dupliquée, l'ajustement de force l'est bien ;
    // quant à la domination voir ci dessous. C'est cet oubli qui fait
    // que tout cela marche: les scripts de domination (a savoir ceux des henchman)
    // sont appliqués de facon permanente, quand bien meme on change le maître

    // RemoveHenchman(OBJECT_SELF, oCopy2); //ne marche pas.
    // note: Le maitre doit etre stocke comme un objet local sur la creature
    // dominée et donc etre dupliqué par CopyObject même si le statut de créature
    // dominée ne l'est pas officiellement.
    // On note que la GUI est néanmoins celle d'un henchman quand on clique sur copy2.
    // Tant que l'on a pas change son maître bien sur...
    // Ceci pourrait permettre d'implementer des henchmen multiples, sans besoin
    // de permutation, le seul defaut est que le petit portrait n'apparaît pas.

    // AddHenchman(oCopy2, oCopy2); // fait crasher le programe. Dommage, ca aurait
    // procuré un bon test pour reconnaître ces copies dans les scripts d'henchmen,
    // GetMaster() == OBJECT_SELF, ni dieu ni maitre "les anarchiiiiistes"
    //  (pour les fans de Leo Féré).
    
AddHenchman(oCopyoCopy2);//NB: GetMaster == OBJECT_INVALID n'est PAS un bon
    // test, car tous les henchman désoeuvrés sont dans cette configuration donc pour
    // faire des sections specifiques dans les scripts d'henchman, il faudra utiliser
    // le tag.
    // OBJECT_INVALID, car souvenez vous nous detruisons la premiere copie a la
    // fin du main(), donc des son spawn la copie 2 n'aura plus de maitre, vous
    // pouvez verifier.

    // ChangeToStandardFaction(oCopy2,STANDARD_FACTION_HOSTILE);
}
void AlertEffects(object oTarget)
{
    
effect eTemp GetFirstEffect(oTarget);
    while (
GetIsEffectValid(eTemp))
    {
        if( 
GetEffectType(eTemp) == EFFECT_TYPE_DOMINATED )
        {
            
SendMessageToPC(GetFirstPC(),GetTag(oTarget) + " Dominated");
        }
        else 
SendMessageToPC(GetFirstPC(),GetTag(oTarget) + " effect: " IntToString(GetEffectType(eTemp)));
        
eTemp GetNextEffect(oTarget) ;
    }
}

void CountPC()
{
    
object oTemp GetFirstPC();
    
int i 0;
    while (
GetIsObjectValid(oTemp))
    {
        
i++;
        
oTemp  GetNextPC();
    }
    
SendMessageToPC(GetFirstPC(), IntToString(i));

Lien direct vers le message - Vieux
Sire Pom-pom
Roi
 
Bon je ne sais pas si cela intéresse qui que ce soit: mais voilà un tout petit module de démo (zip, 6ko , n'hésitez pas ).

Quand on active le levier copycat, quatre copies du joueur sont crées: deux deviennent des créatures pseudo-dominées (i.e. ont peut leur donner les ordres des henchman mais il n'y a pas de limite de nombre, et leur portrait n'apparait pas en dessous de celui du joueur), deux autres sont hostiles et vont immédiatement attaquer.
Pour une raison inconnue les deux alliés sont passifs au début il faut leur donner un ordre (ex: protégez moi, en se ruant à l'attaque) pour les réveiller.

Voilà, voilà ... Je crois que je suis en compétition avec Skanzo pour le prix du bidouillage le plus infâme maintenant...
Lien direct vers le message - Vieux
Avatar de eMRaistlin
eMRaistlin
Alpha & Oméga
 
Avatar de eMRaistlin
 
Et hop, je Dl, et je transforme en image mirroir ce truc la (vu que ma version de image mirroir avec les outils 1,27 marchait pas de masses
Lien direct vers le message - Vieux
Avatar de Le grognon
Le grognon
Alpha & Oméga
 
Avatar de Le grognon
 
moi, grand flemmard et exploiteur devant l'eternel... je me demandais si pom-pom pourrait pas pondre un petit module qui serait une variation du present...

un groupe de joueurs arrive dans une piece.. on tire un levier ou n'inporte quoi comme declancheur , et un groupe hostile identique est spawné dans une piece à coté et ils attendent gentiment que les joueurs ouvre la porte qui est marqué "ne pas ouvrir" .. mouahahah ...

l'ideal etant que si les doubles rencontre les orginaux, ils n'attaquent QUE leur original (le double-joueur1 attaque le joueur 1 , le double du joueur 2 attaque le joueur 2... etc etc) et ignorent les autres joueurs ...
la cerise etant que les doubles soient invulnerables aux attaques de tous les autres joueur sauf de son propre original (double 1 ne peut etre tuer que par joueur 1... etc etc)

prenez ça comme un defi, et je suis sur que ça peut finir dans un .erf sur nwnvault comme "piege tous fait" ... je suis meme pret à faire la doc et le readme en anglais si besoin...

je travaille sur des trucs equivalent , et le but final etant de faire une suite de piece-piege pret à etre incorporer dans un module par import... comme ça les DM peuvent rendre plus amusant un module sans se faire suer... voir preparer des modules types "couloirs de guildes d'assassins pour epreuves d'incorporation" sans se fouler...

qui releve le defi ?
Lien direct vers le message - Vieux
Sire Pom-pom
Roi
 
Juste un petit truc. Dans le script tu trouvera cette fonction:
Code PHP:
void CreateCopy2(object oCopylocation lLoc)
{
    
object oCopy2 CopyObject(oCopylLocOBJECT_INVALID"copy2");

    
AddHenchman(oCopyoCopy2);
    
    
RemoveHenchman(oCopyoCopy2);
    
ChangeToStandardFaction(oCopy2,STANDARD_FACTION_HOSTILE);

C'est celle qui crée les copies hostiles. oCopy est la première copie du PJ, détruite à la fin du script. Le RemoveHenchman n'est utile que si tu veux créer plusieurs copies: en effet chaque créature, PJ ou PNJ, ne peut avoir plus d'un henchman, donc si je n'enlevais pas son henchman à oCopy avant d'essayer de lui en filer un autre cela échouerait. Si tu ne veux qu'une copie en revanche, tu n'as pas besoin de RemoveHenchman du tout, le DestroyObject(oCopy) le fera automatiquement.
Lien direct vers le message - Vieux
Avatar de 'Az
'Az [P.H.]
Alpha & Oméga
 
Avatar de 'Az
 
vi, pas mal du tout, bien que tout cela repose sur un chateau de carte ^_^, enfin tant que ca marche, je ne critique pas, moi aussi je suis un bidouilleur fou

Citation:
Je crois que je suis en compétition avec Skanzo pour le prix du bidouillage le plus infâme maintenant...
Et ben accroche toi mon coco, t'as encore du boulot :bouffon:
Lien direct vers le message - Vieux
Sire Pom-pom
Roi
 
EDIT double message
Lien direct vers le message - Vieux
Sire Pom-pom
Roi
 
Oui c'est tout à fait possible, il y a juste un petit problème: les seuls scripts que je puisse affecter à la copie sont ceux des henchmen (nw_ch_ac*) donc pour faire du scripting spécifique ce sont ces scripts qu'il faut modifier, en rajoutant par exemple (un test sur GetMaster pourrait optimiser les choses si les gars de Bio n'avaient pas écris ces scripts comme des cochons):
Code PHP:
if(GetTag(OBJECT_SELF) == "copie")
{
     
//le code a éxécuter

Donc cela alourdit les scripts modifiés (qui servent aussi aux compagnons/créatures convoquées/dominées), pas terriblement: ce test est rapide étant donné qu'il ne fait référence qu'à OBJECT_SELF. Mais surtout si tu as un système d'henchmen particulier, qui a écrasé ces scripts c'est de ces versions là qu'il faudrait partir (s'ils sont enregistrés sous un autre nom, pas de problème en revanche, les scripts affectés sont les nw_ch_ac*, pas forcément ceux qu'utilisent les henchmen dans un module).

voilà, dis moi ce que tu en penses, modifier le CombatRoundEnd, le onDammaged, et peut-être l'onperception pourrait marcher pour faire ce que tu veux. Néanmoins je ne peux pas te promettre la cible unique, c'est plus compliqué que cela en a l'air (attaque opportuniste, sans parler des sorts à effets de zône...)

EDIT: en y réfléchissant, pour faire ce truc le plus proprement possible le mieux serait de rediriger les scripts de domination via un hakpack (en éditant statescripts.2da).
Lien direct vers le message - Vieux
Avatar de Le grognon
Le grognon
Alpha & Oméga
 
Avatar de Le grognon
 
partons sur l'hypothese qu'il n'y a pas de systeme de henchman particulier ... et pour ce qui est de l'invincibilité aux autres joueurs sauf son original, on oublie... .. on va juste essayer que la copie attaque SON original pour debuter le combat...
Lien direct vers le message - Vieux
Sire Pom-pom
Roi
 
Pour ça pas de problème, je n'ai besoin de modifier aucun script... je te fais une démo dès que je peux.
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Les doubles sont betes à mourrir....
   

Outils Rechercher
Rechercher:

Recherche avancée

Les vidéos de Neverwinter Nights RSS
  • Aucune vidéo pour le moment...
Thème visuel : Fuseau horaire GMT +1. Il est actuellement 11h28.
   

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Traitement des données personnelles - ! Signaler un contenu illicite