Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Script marchand défend ses coffres
Script marchand défend ses coffres
Par judgeju le 3/7/2002 Ã 11:28:33 (#1749654)
Deux choses:
1. Mon marchand attaque pas??? Bah pquoi? Faut lui mettre une arme? Il a une dague en inventaire, mais rien en main.
2. Je voudrais que la première fois, le marchand prévienne les PJs. Style, si je vous revois faire çà , çà va barder. Et la seconde qu'il attaque. Comment faire aussi pour qu'après le marchand ne veuille plus rien vendre à ce PJ? Est ce que la réputation joue?
Merci d'avance.
void main()
{
// Initialize Objects
object oChest = OBJECT_SELF;
object oPlayer = GetLastDisturbed();
object oMerchant = GetNearestObjectByTag("MERCHANT");
// Get the skill checks to see if the Merchant spotted the theft.
int iPPSkillCheck = d20(1) + 1 + GetSkillRank(SKILL_PICK_POCKET, oPlayer);
// The Merchant has a +2 circumstance bonus to spot.
int iSpotCheck = d20(1) + 3 + GetSkillRank(SKILL_SPOT, oMerchant);
// Make a text string to display to the Player.
string sSkillCheck = "Pick Pocket " + IntToString(iPPSkillCheck) + " vs Spot " + IntToString(iSpotCheck);
if (iPPSkillCheck > iSpotCheck)
{
// Theft not spotted.
FloatingTextStringOnCreature(sSkillCheck + " - Success!", oPlayer);
// Slightly worsen the rep with Merchants
AdjustReputation(oPlayer, oChest, -5);
return;
}
else
{
// Theft was spotted.
FloatingTextStringOnCreature(sSkillCheck + " - Failed!", oPlayer);
// Give the Player a bad rep with Merchants
// and instruct the Merchant to attack the player.
AdjustReputation(oPlayer, oChest, -20);
AssignCommand(oMerchant, ActionAttack(oPlayer));
}
}
Par ZeDuckMaster le 3/7/2002 Ã 12:46:25 (#1750070)
- est-ce que le marchand a le bon tag ?
- est-ce que t'as un success ou un failed quand tu crochete le coffre ? pasque si t'as un success c'est normal qu'il t'attaque pas
Par judgeju le 3/7/2002 Ã 13:23:32 (#1750292)
Par contre, maintenant, il s'enfuit dès qu'il prend des dommages??? On peut pas lui dire de continuer à se battre?
Par ZeDuckMaster le 3/7/2002 Ã 13:31:37 (#1750347)
le fait qu'il s'enfuit doit etre directement defini dans son comportement de marchand (bin vi, un marchand c'est pas un warrior, donc quand il se prend des coups, il se casse ;) ) donc dans les scripts par defaut du marchand.
donc la faut aller bidouiller dans les scripts par defaut du marchand et donc eviter qu'il s'enfuit. Ca doit se trouver dans le script de l'evenement OnAttacked (ou un truc du genre), mais pas sur (je l'ai pas sous les yeux, la ....).
Par judgeju le 3/7/2002 Ã 14:01:49 (#1750535)
Je veux utiliser une variable pour faire changer la réaction du marchand. Pb, ben il rentre pas dans ma boucle if avec come test Reac_Marchand == 0. J'ai mal déclaré?
En plus, je subodore que çà marchera pas vu que ma variable sera réinitialisée à 0 à chaque fois. Donc comment la déclarer englobal, et même mieux, l'affecter à un PJ donné?
void main()
{
// Initialize Objects
int Reac_Marchand = 0;
object oChest = OBJECT_SELF;
object oPlayer = GetLastDisturbed();
object oMerchant = GetNearestObjectByTag("MERCHANT");
// Get the skill checks to see if the Merchant spotted the theft.
int iPPSkillCheck = d20(1) + 1 + GetSkillRank(SKILL_PICK_POCKET, oPlayer);
// The Merchant has a +2 circumstance bonus to spot.
int iSpotCheck = d20(1) + 3 + GetSkillRank(SKILL_SPOT, oMerchant);
// Make a text string to display to the Player.
string sSkillCheck = "Pick Pocket " + IntToString(iPPSkillCheck) + " vs Spot " + IntToString(iSpotCheck);
if (iPPSkillCheck > iSpotCheck)
{
// Theft not spotted.
FloatingTextStringOnCreature(sSkillCheck + " - Succes!", oPlayer);
// Slightly worsen the rep with Merchants
AdjustReputation(oPlayer, oChest, -5);
return;
}
else
{
// Theft was spotted.
FloatingTextStringOnCreature(sSkillCheck + " - Echec!", oPlayer);
// Give the Player a bad rep with Merchants
// and instruct the Merchant to attack the player.
AdjustReputation(oPlayer, oChest, -20);
//Premire fois avertissement, deuxime attaque
if (Reac_Marchand == 0)
{
AssignCommand(oMerchant,ActionSpeakString("He la! Que je ne vous y reprenne pas!"));
Reac_Marchand=Reac_Marchand+1;
return;
}
else
{
AssignCommand(oMerchant,ActionEquipMostDamagingMelee());
AssignCommand(oMerchant, ActionAttack(oPlayer));
}
}
}
Par ZeDuckMaster le 3/7/2002 Ã 14:34:54 (#1750720)
sinon tu fais directement ton getlocalint en test dans ta fonction (par defaut si la variable n'existe pas ca te renvoit 0) et pis tu la crée apres au cas ou elle existe pas, mais elle n'existera pas tant que tu n'auras pas lancer ton script au moins une fois.
Par judgeju le 3/7/2002 Ã 15:03:23 (#1750890)
Je met mon oMerchant en variable du GetLocalInt?
GetLocalInt me renvoie la valeur de la variable. Comment la modifier?
Par ZeDuckMaster le 3/7/2002 Ã 15:12:51 (#1750959)
.........
//Premire fois avertissement, deuxime attaque
if(GetLocalInt(OBJECT_SELF,"Reac_Marchand") == 0)
{
AssignCommand(oMerchant,ActionSpeakString("He la! Que je ne vous y reprenne pas!"));
SetLocalInt(OBJECT_SELF,"Reac_Marchand",1);
return; //<- le return ne sert a rien la ....
}
else
{
AssignCommand(oMerchant,ActionEquipMostDamagingMelee());
AssignCommand(oMerchant, ActionAttack(oPlayer));
}
........
voila :) normalement ca devrait marcher (sauf si j'ai fait une faute :D )
Par judgeju le 3/7/2002 Ã 15:44:21 (#1751148)
Merci monsieur! :ange:
Bon, j'améliore un peu tout çà et je le posterai en script qui marche. En fait, c'est sympa, on peut l'affecter à toutes les armoires, coffres... pour que leur proprio réagisse quand on les fouillent. Cool.
JOL Archives 1.0.1
@ JOL / JeuxOnLine