Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

petit souci

Par Blam le 27/8/2002 à 17:16:06 (#2038890)

j'ai plusieurs "Recall Portal" un par temple pour que, le joueur mort qui respown grace a un script (deja defini) dans un temple correspndant a son alignement.
Le problème est que le joueur qui ne meur pas et veux se servir de sa pierre de rappel (stone of recall) pour se teleporter, ne se teleporte pas dans le "recall Portal" de son temple mais dans celui le plus proche........
Car il se teleporte au plus proche.
Serait il possible de lier ca en fonction de l'alignement.
De facon a ce que le joueur, qu'il meure ou se teleporte, arrive dans la zone correspondante a son alignement.

Si je ne suis pas clair, dites le...

Par Azrael07 le 29/8/2002 à 0:25:09 (#2049645)

tu peut trouver la reponse en exploitant le tut de Théranthil sur ce site (le tut "créer des objets uniques)

Ensuite tu reprogramme avec ton propre script (je crois qu'il y en a qui font ca dans la liste de scripts)

Si tu y arrive tjrs pas dit le moi je verrrais ce que je peux faire

Par Théranthil le 29/8/2002 à 7:52:56 (#2050785)

A mon avis, tu devrais te mettre aux scripts car vu le nombre de sujets que tu post, ca irais beaucoup plus vite. ;)
(On n'est jamais mieux servi que par soit même.)

C'est mon problème...

Par Blam le 29/8/2002 à 10:50:56 (#2051409)

Hé oui, non seulement je suis nul en script, j'en ai jamais fait, ma scolarité s'étant arreté en 1976 (les pc n'existaient pas).
Mais en plus j'arrive pas a comprendre ce type de logique ( ce qui est plus grave)
Je me suis muni d'un c+ pour les nuls...............c'est de l'hebreu pour moi.
Donnez moi un pc a monter mais pas un programme a faire.

Si vous conaissez des sites clairs, faciles, traitant de ca, je suis preneur (meme le tutorial je patine).

Par mobidique le 29/8/2002 à 11:05:44 (#2051524)

Peut être plus simple qu'un bouquin quelconque sur le C++ glané dans le commerce, j'imagine une de ce espèce de bible prétentieuse de 500 pages imbuvable, je te conseille de te procurer "Le Langage C" de Kernighan et Ritchie chez masson je crois. C'est un petit livre de 130 150 pages, tu dois pas avoir besoin de lire plus de la moitié et surtout, il expose dans sa première partie les idées simples de l'algorithmique et de la construction d'un code en programation strucuturée.

Ceci dit faut pas s'attendre à un miracle sans bosser le truc sérieusement ... Perso j'ai essayé de me mettre au java et au C++ en dehors de mes heures de boulot et je suis pas programmeur, ben j'ai laché, d'autant que j'ai jamais rien eu de concret à faire avec. Et là c'est un peu le même pb pour toi. Tu vas bosser du C ou du C++ pour au final comprendre les scripts NWN, donc pas d'appli directe du cours ... c'est pas fastoche ...

Courage ;)

Mob'.

Re: C'est mon problème...

Par Kemay le 29/8/2002 à 11:30:19 (#2051666)

Provient du message de Blam
Mais en plus j'arrive pas a comprendre ce type de logique ( ce qui est plus grave)
Vi effectivement, tu peux lire tous les livres et les tutoriaux qui existent, si tu as du mal avec ce type de logique, tu n'y arriveras pas :( En programmation, le langage n'a pas une grande importance, il s'agit plutôt d'une façon d'analyser un problème et de le fragmenter en plus petits problèmes facilement résolvable.

Si vraiment tu patauges, le mieux c'est d'essayer de trouver quelqu'un qui peut s'occuper de la partie script de ton module. On ne peut pas savoir tout faire ;) Certains sont de très bons scripteurs, d'autres savent écrire de très bons scenarios, etc... NWN devient intéressant quand ils bossent tous ensemble :)

Par Azrael07 le 29/8/2002 à 13:04:34 (#2052429)

La je suis tt a fait d'accord, la prog, on l'a ou on l'a pas.

Je pense que le mieux pour toi, si tu bosse sur un sujet interessant, c'est de prendre un scripteur dans ton équipe(desolé moi j'ai deja du boulot jusque la)

comme t'a été sage, je vais qd meme te faire ton scipt

Dans le OnActivate du Module :


void main()
{
object oItem = GetItemActivated();
object oUser = GetItemActivator();
if (oItem == GetObjectByTag("LE_TAG_DE_LA_PIERRE"))
{
int nAlignementGE = GetAlignmentGoodEvil(oUser);
int nAlignementLC = GetAlignmentLawChaos(oUser);
object oPortail;
if (nAlignementGE == ALIGNMENT_EVIL && nAlignementLC == ALIGNMENT_CHAOTIC)
oPortail = GetObjectByTag("TAG_DU_RESPAWN_CHAOTIC_ELVIL");
else if (nAlignementGE == ALIGNMENT_EVIL && nAlignementLC == ALIGNMENT_NEUTRAL)
oPortail = GetObjectByTag("TAG_DU_RESPAWN_NEUTRAL_ELVIL");
else if (nAlignementGE == ALIGNMENT_EVIL && nAlignementLC == ALIGNMENT_LAWFUL)
oPortail = GetObjectByTag("TAG_DU_RESPAWN_LAWFUL_ELVIL");
else if (nAlignementGE == ALIGNMENT_NEUTRAL && nAlignementLC == ALIGNMENT_CHAOTIC)
oPortail = GetObjectByTag("TAG_DU_RESPAWN_CHAOTIC_NEUTRAL");
else if (nAlignementGE == ALIGNMENT_NEUTRAL && nAlignementLC == ALIGNMENT_NEUTRAL)
oPortail = GetObjectByTag("TAG_DU_RESPAWN_TRUE_NEUTRAL");
else if (nAlignementGE == ALIGNMENT_NEUTRAL && nAlignementLC == ALIGNMENT_LAWFUL)
oPortail = GetObjectByTag("TAG_DU_RESPAWN_LAWFUL_NEUTRAL");
else if (nAlignementGE == ALIGNMENT_GOOD && nAlignementLC == ALIGNMENT_CHAOTIC)
oPortail = GetObjectByTag("TAG_DU_RESPAWN_CHAOTIC_GOOD");
else if (nAlignementGE == ALIGNMENT_GOOD && nAlignementLC == ALIGNMENT_NEUTRAL)
oPortail = GetObjectByTag("TAG_DU_RESPAWN_NEUTRAL_GOOD");
else if (nAlignementGE == ALIGNMENT_GOOD && nAlignementLC == ALIGNMENT_LAWFUL)
oPortail = GetObjectByTag("TAG_DU_RESPAWN_LAWFUL_GOOD");
AssignCommand(oUser, ClearAllActions());
AssignCommand(oUser, ActionJumpToObject(oPortail));
}
}

Voila c compilé mais pas testé, le problème c que la téléportation de base de la pierre va entrer en interaction avec celle-ci, il faut tester, si ca marche pas dit le moi je le readapterais en consequent

Merci les gars

Par Blam le 30/8/2002 à 9:59:48 (#2059035)

hélas votre analyse de mon probleme, pour la comprension des bases du script, rejoint la mienne.
Je suis donc obligé de m'y mettre serieusement (merci pour le titre et auteur du bouquin) ou de faire de bricolages sur les scénars (choses que je n'aime pas)
merci a tous donc.

je vais tester le script d'azrael des que j'ai un peu de temps.

;) et hop c'est reparti !

Par Théranthil le 30/8/2002 à 10:42:35 (#2059263)

PS:petit conseil entre débutants: TOUJOURS PENSER AU POINT VIRGULE :hardos: :hardos:

ca ne marche pas

Par Blam le 30/8/2002 à 11:44:41 (#2059743)

surement un interraction comme le disait si bien Azrael07

voila ce qui se passe.

Des q'un perso meurt il respawn dans un temple de son alignement.(ca ca marche parfaitement)

Des q'un perso se téléporte (via la pierre de rappel) il se retrouve au wp correspondant a son alignement (placé Systematiquement a coté d'un portail de retour)
Mais le portail de retour ne fonctionne pas

si je rajoute la ligne le portail de retour fonctionne parfaitement, mais c'est la téléportation en fonction de l'alignement qui ne marche plus (quel que soit l'alignement le teleport se fait vers le portail ou point le plus pres)

voila le script:

void main()
{
object oItem = GetItemActivated();
object oUser = GetItemActivator();
if (oItem == GetObjectByTag("NW_IT_RECALL"))
{
int nAlignementGE = GetAlignmentGoodEvil(oUser);
int nAlignementLC = GetAlignmentLawChaos(oUser);
object oPortail;
if (nAlignementGE == ALIGNMENT_EVIL && nAlignementLC == ALIGNMENT_CHAOTIC)
oPortail = GetObjectByTag("WP_RECALL_CE");
else if (nAlignementGE == ALIGNMENT_EVIL && nAlignementLC == ALIGNMENT_NEUTRAL)
oPortail = GetObjectByTag("WP_RECALL_NE");
else if (nAlignementGE == ALIGNMENT_EVIL && nAlignementLC == ALIGNMENT_LAWFUL)
oPortail = GetObjectByTag("WP_RECALL_LE");
else if (nAlignementGE == ALIGNMENT_NEUTRAL && nAlignementLC == ALIGNMENT_CHAOTIC)
oPortail = GetObjectByTag("WP_RECALL_CN");
else if (nAlignementGE == ALIGNMENT_NEUTRAL && nAlignementLC == ALIGNMENT_NEUTRAL)
oPortail = GetObjectByTag("WP_RECALL_N");
else if (nAlignementGE == ALIGNMENT_NEUTRAL && nAlignementLC == ALIGNMENT_LAWFUL)
oPortail = GetObjectByTag("WP_RECALL_LN");
else if (nAlignementGE == ALIGNMENT_GOOD && nAlignementLC == ALIGNMENT_CHAOTIC)
oPortail = GetObjectByTag("WP_RECALL_CG");
else if (nAlignementGE == ALIGNMENT_GOOD && nAlignementLC == ALIGNMENT_NEUTRAL)
oPortail = GetObjectByTag("WP_RECALL_NG");
else if (nAlignementGE == ALIGNMENT_GOOD && nAlignementLC == ALIGNMENT_LAWFUL)
oPortail = GetObjectByTag("WP_RECALL_LB");
AssignCommand(oUser, ClearAllActions());
AssignCommand(oUser, ActionJumpToObject(oPortail));

}
//la téléportation fonctionne mais pas le retour. Si j'enleve les"//"
//de ce qui suit, la téléportation va vers l'endroit le plus pres
//{

//IsRecall();

//}
}

ca ne marche pas

Par Blam le 30/8/2002 à 11:44:47 (#2059744)

surement un interraction comme le disait si bien Azrael07

voila ce qui se passe.

Des q'un perso meurt il respawn dans un temple de son alignement.(ca ca marche parfaitement)

Des q'un perso se téléporte (via la pierre de rappel) il se retrouve au wp correspondant a son alignement (placé Systematiquement a coté d'un portail de retour)
Mais le portail de retour ne fonctionne pas

si je rajoute la ligne le portail de retour fonctionne parfaitement, mais c'est la téléportation en fonction de l'alignement qui ne marche plus (quel que soit l'alignement le teleport se fait vers le portail ou point le plus pres)

voila le script:

void main()
{
object oItem = GetItemActivated();
object oUser = GetItemActivator();
if (oItem == GetObjectByTag("NW_IT_RECALL"))
{
int nAlignementGE = GetAlignmentGoodEvil(oUser);
int nAlignementLC = GetAlignmentLawChaos(oUser);
object oPortail;
if (nAlignementGE == ALIGNMENT_EVIL && nAlignementLC == ALIGNMENT_CHAOTIC)
oPortail = GetObjectByTag("WP_RECALL_CE");
else if (nAlignementGE == ALIGNMENT_EVIL && nAlignementLC == ALIGNMENT_NEUTRAL)
oPortail = GetObjectByTag("WP_RECALL_NE");
else if (nAlignementGE == ALIGNMENT_EVIL && nAlignementLC == ALIGNMENT_LAWFUL)
oPortail = GetObjectByTag("WP_RECALL_LE");
else if (nAlignementGE == ALIGNMENT_NEUTRAL && nAlignementLC == ALIGNMENT_CHAOTIC)
oPortail = GetObjectByTag("WP_RECALL_CN");
else if (nAlignementGE == ALIGNMENT_NEUTRAL && nAlignementLC == ALIGNMENT_NEUTRAL)
oPortail = GetObjectByTag("WP_RECALL_N");
else if (nAlignementGE == ALIGNMENT_NEUTRAL && nAlignementLC == ALIGNMENT_LAWFUL)
oPortail = GetObjectByTag("WP_RECALL_LN");
else if (nAlignementGE == ALIGNMENT_GOOD && nAlignementLC == ALIGNMENT_CHAOTIC)
oPortail = GetObjectByTag("WP_RECALL_CG");
else if (nAlignementGE == ALIGNMENT_GOOD && nAlignementLC == ALIGNMENT_NEUTRAL)
oPortail = GetObjectByTag("WP_RECALL_NG");
else if (nAlignementGE == ALIGNMENT_GOOD && nAlignementLC == ALIGNMENT_LAWFUL)
oPortail = GetObjectByTag("WP_RECALL_LB");
AssignCommand(oUser, ClearAllActions());
AssignCommand(oUser, ActionJumpToObject(oPortail));

}
//la téléportation fonctionne mais pas le retour. Si j'enleve les"//"
//de ce qui suit, la téléportation va vers l'endroit le plus pres
//{

//IsRecall();

//}
}

Par Azrael07 le 30/8/2002 à 16:12:28 (#2061780)

Oups desole j'avais pas pense au retour...:D :D :D

Bon donc on reprend le script + haut avec une petite modification


void main()
{
object oItem = GetItemActivated();
object oUser = GetItemActivator();
location lLocation = GetLocation(oUser);
SetLocalLocation(oUser, "Position", lLocation);
if (oItem == GetObjectByTag("LE_TAG_DE_LA_PIERRE"))
{
int nAlignementGE = GetAlignmentGoodEvil(oUser);
int nAlignementLC = GetAlignmentLawChaos(oUser);
object oPortail;
if (nAlignementGE == ALIGNMENT_EVIL && nAlignementLC == ALIGNMENT_CHAOTIC)
oPortail = GetObjectByTag("TAG_DU_RESPAWN_CHAOTIC_ELVIL");
else if (nAlignementGE == ALIGNMENT_EVIL && nAlignementLC == ALIGNMENT_NEUTRAL)
oPortail = GetObjectByTag("TAG_DU_RESPAWN_NEUTRAL_ELVIL");
else if (nAlignementGE == ALIGNMENT_EVIL && nAlignementLC == ALIGNMENT_LAWFUL)
oPortail = GetObjectByTag("TAG_DU_RESPAWN_LAWFUL_ELVIL");
else if (nAlignementGE == ALIGNMENT_NEUTRAL && nAlignementLC == ALIGNMENT_CHAOTIC)
oPortail = GetObjectByTag("TAG_DU_RESPAWN_CHAOTIC_NEUTRAL");
else if (nAlignementGE == ALIGNMENT_NEUTRAL && nAlignementLC == ALIGNMENT_NEUTRAL)
oPortail = GetObjectByTag("TAG_DU_RESPAWN_TRUE_NEUTRAL");
else if (nAlignementGE == ALIGNMENT_NEUTRAL && nAlignementLC == ALIGNMENT_LAWFUL)
oPortail = GetObjectByTag("TAG_DU_RESPAWN_LAWFUL_NEUTRAL");
else if (nAlignementGE == ALIGNMENT_GOOD && nAlignementLC == ALIGNMENT_CHAOTIC)
oPortail = GetObjectByTag("TAG_DU_RESPAWN_CHAOTIC_GOOD");
else if (nAlignementGE == ALIGNMENT_GOOD && nAlignementLC == ALIGNMENT_NEUTRAL)
oPortail = GetObjectByTag("TAG_DU_RESPAWN_NEUTRAL_GOOD");
else if (nAlignementGE == ALIGNMENT_GOOD && nAlignementLC == ALIGNMENT_LAWFUL)
oPortail = GetObjectByTag("TAG_DU_RESPAWN_LAWFUL_GOOD");
AssignCommand(oUser, ClearAllActions());
AssignCommand(oUser, ActionJumpToObject(oPortail));
}
}



voila après tu va dans la convesation de ton recall portal, et pis au script qui est ici :
Enter Portal. Pay 150 gold.
dans le action taken tu remplace le script par celui ci


#include "nw_i0_plot"

int CanAffordIt()
{
string sTag = GetTag(GetModule());
int nCost = 0;
if (sTag == "Chapter1" || sTag =="ENDMODULE1")
{
nCost = 50;
}
else
if (sTag == "Chapter2" || sTag =="ENDMODULE2")
{
nCost = 150;
}
else
if (sTag == "Chapter3" || sTag =="ENDMODULE3")
{
nCost = 400;
}
// * remove the gold from the player
// * I'm having the player remove it from himself
// * but since I'm also destroying it, this will work
if (GetGold(GetPCSpeaker()) >= nCost)
{
TakeGold(nCost, GetPCSpeaker());
return TRUE;
}
return FALSE;
}

void main()
{
CanAffordIt();
location lLoc = GetLocalLocation(GetPCSpeaker(), "Position");
// * Portal stores last location to jump to for future players
SetLocalInt(OBJECT_SELF, "NW_L_LOC_EVERUSED", 1);
SetLocalLocation(OBJECT_SELF, "NW_L_LOC_LAST_RECALL", lLoc);
ApplyEffectAtLocation(DURATION_TYPE_PERMANENT, EffectVisualEffect(VFX_IMP_UNSUMMON), lLoc);
AssignCommand(GetPCSpeaker(), JumpToLocation(lLoc));
}


c'est le script original, j'ai juste change la provenance de la location
bon c pas teste mais on va dire que ca dervrait marcher

PS : quand tu met du code sur un post, tu peut mettre php entre crochet et /php entre crochets qd ton scipt est finis, il apparaitra avec les zoli couleurs(g comme l'impression que c pas clair se que je dit, regarde en haut le bouton php dans une fenetre de reponse, met n'importe quoi et regarde ce qui s'affiche

JOL Archives 1.0.1
@ JOL / JeuxOnLine