Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > petit souci
petit souci
Par Blam le 27/8/2002 à 17:16:06 (#2038890)
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)
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)
(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)
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)
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
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.
Mais en plus j'arrive pas a comprendre ce type de logique ( ce qui est plus grave)
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)
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)
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)
ca ne marche pas
Par Blam le 30/8/2002 à 11:44:41 (#2059743)
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)
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)
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