Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > script baleze
script baleze
Par Nikles le 29/12/2002 à 15:28:51 (#2901362)
Je sais je sais vous vous dites mais qu'est ce qu'il nous veut encore ? :D
A vrai dire pour mon module j'avance a pas de geant mais j'ai encore un petit probleme :mdr:
Donc je vais vous expliquez, ce que j'aimerais c'esyt faire patrouiller des gardes dans mes villes jusque la aucun probleme .
C'est la que ca se corse j'aimerai que quand un P.J deverouille une porte un cofre etc..,vol ou tue un P.N.J (en bref lorsqu'il fait une action louche) les gardes patrouillant se dirigent vers le joueur et entame une sorte de dialogue(mais ce uniquement si quelqu'un a vu le P.J faire l'action unP.N.J ou un garde sinon rien)
Ce dialogue serait un peu comme dans morowind lorsqu'on se fait choper un truc genre paye le double du prix de l'objet voler,(ou une amende fixer par moi, tout depend de ce que le P.J a fait sauf s'il tue quelq'un au quel cars il n'y'aurait pas le choix de l'amende que les 2 choix decris apres)ou va en prison pendant un nombre de temps determiner suivant la graviter de l'action, dans ce cars le P.J serait teleporter direct en prison et en resortirez une fois sa peine terminer (il serait teleporter a l'entre principal) ou encore vous ne m'aurez jamais auquel cars l'attitude des gardes changerait et ils deviendraient agressifs .
ouf je crois que j'ai tout dis:D
Un peu complexe non ? :D j'attend vos reponse avec impatience merci
Par Azrael07 le 29/12/2002 à 17:41:55 (#2902168)
bon comme d'hab je vais pas donner une réponse claire, se serais faillir a ma reputation looooooool
bon ben pour l'action louche, yapa moyen faut mettre un script dans chaques evenements de chaques catégories (OnDeath, ect).
ensuite, tu peux faire un truc dans se script du genre
if( GetDistanceBetween(GetNearestObjectByTag("GARDE"), oPlayer)))
pof tu lance une conversation, avec deux choix, dans l'un des cas tu met une fonction TakeGold sur le joueur, dans l'autre tu adapte le script qui est dispo sur ce forum, dans le troisième ben tu demande aux gardes d'attaquer
bon si tu veux un peu plus de préscision sur un point tu n'as qu'a me demander d'approfondir.
bon courage
Par Nikles le 29/12/2002 à 20:01:58 (#2903128)
Tu m'a mis sur la voie et je t'en remercie azrael ;)
Par Azrael07 le 29/12/2002 à 21:08:47 (#2903552)
désolé
Par Nikles le 30/12/2002 à 17:26:50 (#2910057)
Je ne veut pas que quand un perso fais une action "louche" qu'il y'est automatiquement les gardes qui lui tombent dessus . J'aimerais que ceux ci abordent le P.J uniquement si celui ci a etait vu par un garde ou un P.N.J .
Ma question est ce possible ? Et si oui comment dois je m'y prendre ?
Merci d'avance :merci: :merci:
Par Azrael07 le 30/12/2002 à 20:33:30 (#2911359)
bon alors j'explique la ligne de code que j'ai donné
if( GetDistanceBetween(GetNearestObjectByTag("GARDE"), oPlayer <= fPerception && GetDistanceBetween(GetNearestObjectByTag("GARDE"), oPlayer != 0.0f)))
cette ligne permet de déduire si un garde se trouve pres du joueur lorsqu'il fait une action louche :
Le GetDistanceBetween revenvoie la distance entre le joueur et l'objet le plus proche de tag "garde". Si cette distance est plus petite que la distance necessaire a la perseption (qu'il faudra trouver grace a des test préalables), il y a un garde qui repère le joueur.
j'espère que g été un petit peu plus claire, mais comme je ne connais pas ton niveau je ne sais pas trop où il faut que je m'arrete dans mes expliquations
surtout je le répète n'hésite pas à me demander ;)
Par Ormus le 30/12/2002 à 21:42:34 (#2911714)
Dejà (comme l'a dit Azrael ;)) tu met une variable sur le criminel et sur l'objet du crime...puis quand le garde perçoit un objet, il récupère la variable et en déduit si il a affaire à un criminel ou non...si il a perçu le criminel, tu cherches si parmi dans un rayon de mettons 3 metres (le voleur doit être pris la main dans le sac) autour de lui (à l'aide d'une boucle, de GetNearestObject et de GetDistanceBetween) il y a un objet (un coffre ouvert et vide par exemple) qui possède LA variable du crime...et si il y'en a un le PJ se fait arrêter...
Arf...je viens de me rendre compte que ça ne marchera pas si le PJ commet le crime alors qu'il est deja dans le champ de perception du garde :mdr:
Bon je le poste quand même on sait jamais ça pourra peut-être servir à quelque chose ;)
P.S.: Ah, je viens de penser à autre chose : une boucle déclenchée dans le OnPerception du Garde qui teste constamment si la variable passe à la valeur qui indique le crime...non ? Ca va pas ? :D
Par eMRaistlin le 30/12/2002 à 21:58:38 (#2911814)
Le plus simple... et j'en remercie encore le procto, sans qui je n'aurait jamais compris les scripts obscurs de bioware, c'est d'utiliser les SILENT_HOUT et les SILENT_TALK avec des patterns :
Si ton PC fais une action que tu aura choisie comme etant incrimminant, alors tu lui demande de Faire un SpeakString("WARNING_CRIMINEL",TALKVOLUME_SILENT_TALK);
puis, dans le OnSpawn des guard, tu met :
void main(){
//Ce que tu veux avant...
SetListenPattern(OBJECT_SELF,"WARNING_CRIMINEL",9000);
//Ceque tu veux apres...
}
et enfin, sur le OnConversation :
void main(){//ce que tu veux avant...
object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC);
if(nMatch == 9000)
{
AssignCommand(OBJECT_SELF,BeginConversation("Hey_You"));
}
//ce que tu veux apres...
}
Il ne te reste plus qu'a créer un dialogue "Hey_You" qui va contenir les differents element pour permettre au Pj de se rendre ou de se battre, puis a regler la perception des Guardes pour qu'ils ne percoivent le SILENT_TALK que loin ou pres...
Je te conseille aussi, si possible, en fonction de tes besoins, de remplacer le GetNearestCreature par un couple de SetLocalObject sur l'appelant et de GetLocalObjet par les guardes... dans le cas d'un multijouer... en solo, ce script suffira amplement...
Par Nikles le 31/12/2002 à 4:59:40 (#2913642)
Je vais essayer et je vous tient au courant :merci: :merci:
JOL Archives 1.0.1
@ JOL / JeuxOnLine