ce que tu dit sur les dialogue est somme toute logique car on ne peut finir un dialogue que par une phrase de PC (tant bien que cela soit comme dans les toolset de NWN).
dans DA d'ailleur beaucoup de fin de dialogue se finisse par "continuez"...
bref.
pour ta quete déjà c'est bien que tu prévoit cette action comme une étape de la quête

le tout va se faire par script tu t'en doute et il peut y avoir 150 façon de faire possible, le tout dépendra de ta quête, de sa conception et de ce que tu veut précisémement.
la mort du monstre se trouve dans le script aposer au monstre !
void main()
{
...
[color=#0000ff"> ]switch[/color](nEventType)
{
case EVENT_TYPE_AREALOAD_SPECIAL:
{
// code propre à l'événement
break;
}
case EVENT_TYPE_ ...
{
// code propre à l'événement
}
}
}
c'est grosso modo la structure d'un script avec DA donc à chaque case EVENT_TYPE_.....
on déclare au jeu de faire suivant l'événement voulu (case event_type_..) le code entre crochet {} juste en desous du CASE correspondant !
si on regarde du plus pret l'exemple que j'ai copier/coller du wiki on voit que le script prévoit du code si l''événement
EVENT_TYPE_AREALOAD_SPECIAL est déclencher bref ce type d'événement nous sera util dans un script d'AERA plus particulièrement.
pour la mort d'une créature tu a à 2 événement possible d'aprés le WIKI :
[*]
EVENT_TYPE_DYING - a creature received the killing blow.
[*]
EVENT_TYPE_DEATH - creature or placeable have the death effect applied (regardless of hitpoints)
donc tu pourra dans le script de ta créature soit chercher si les case EVENT-TYPE existe déjà dans le script, soit les créer pour faire ce que tu souhaite faire à la mort de ton monstre.
ensuite reste à savoir comment va tu mettre à jours ta quêtes, et la faut que tu en dise plus suivant ce que tu à déjà fait.
par exemple on va souvent se servir de variable aposer au joueur qui définissent à quelle étapes de la quête le joueur en est !
on imagine donc les étapes de la quêtes et c'est pourquoi je dit plus haut que c'est très bien déjà le fait que tu imagine ta quête en étape.
par exemple on peut définir ca comme ca :
- quand ma variable = 0 cela veut dire que le joueur n'a pas prit la quete
- quand ma variable = 1 le joueur à prit la quete
- quand ma variable = 2 le joueur à éffectuer l'objectif N°1 de la quete.. etc
avec un peut de jugote on arrivera à ce genre de pseudo code dans le case EVENT_TYPE_DYING du monstre a tuer
DEBUT
oPC = le caractere qui a tuer le monstre (une fonction existe pour retrouver le killer)
Si oPC possede ma variable de quete et qu'elle est égale à 1 ALORS
la variable de quete d' oPC passe à 2
FIN SI
FIN
techniquement il suffira d'ajouter cette portion de script au script existant de la créature à tuer, puis sauver le script (sous un autre nom peut etre) et vérifié qu'il soit bien séléctionner dans la propriété script prévu à cette effet.
à ca je rajouterai que pour toute quete il faut savoir sauvegarder l'état de la quete et que pour cela il existe des variables locales spécial qui seront sauver avec le personnage lors de la sauvegarde et qui se définisse par :
SetLocal...
SetLocalInt
SetLocalFloat
SetLocalObject
SetLocalString
SetLocalResource
toutes ses variable locale sont sauvgarder sur le personnage, pour une quete à étape SetLocalInt nous suffira et permet de définir un entier comme variable.
void SetLocalInt(
object oObject,
string sVarName,
int nValue
);
oObject sera l'objet sur lequel on pose la varaible ( cela va de soit qu'il faut choisir le PlayerCaracter comme objet si on veut qu'elle soit sauvegarder mais on peut de cette manière aposer des variables à tous les objet de l'éditeur)
sVarName sera le nom de ma varaible on va dire "Ma1ereQuete" c'est une chaine de caractere d'ou les "..." quand on définira donc le nom de notre variable
et enfin nValue sera la valeur de ma variable qui va nous servir pour définir les étapes de la quete.
ainsi on peut imaginer le script suivant dans le case EVENT_TYPE_DYING du monstre
object oPC = GetPlayerKiller(); //(une fonction semblable doit surement exister avec DA, la ca vient de mes souvenir avec NWN )
if (GetLocalInt(oPC,"Ma1ereQuete") == 1 )
{
SetLocalInt(oPC,"Ma1ereQuete",2) ;
}
en gros 3 ligne à rajouter suffise pour faire ce que tu demande tant bien que les étape de ta quête soit défini avec le meme nom de variable local.
on voit ici GetLocalInt qui sert à renvoyer la valeur de ma variable de quete)
SetlocalInt défini cette valeur, si rien est défini la valeur renvoyer = 0
cette variable va servir aussi à faire aparaitre ou pas le dialogue de quete suivant que le personnage joueur à déjà prit ou pas la quete (et aussi suivant ce que l'on veut faire en terme de possibilité.. quete répétable ?)
dans la condition d'aparition de ta ligne de dialogue tu peut imaginer facilement le script suivant :
IntStartingConditional() {
object oPC = GetPCSpeaker();
if (GetLocalInt(oPC,"Ma1ereQuete") < 1 )
{
return true; }
else
{
return false; }
}
le pnj porposera cette ligne de dialogue donc que si le joueur à sa variable de quete < à 1 et on sais que si on ne lui pas encore défini cette variable local elle reverra 0 par défaut, donc si il n'a jamais prit la quete ca renvoi 0 donc < 1 et la phrase du pnj aparaitra
dans les actions conséquentes de ta ligne de dialogue ou le joueur accepte la quete tu peut imaginer le script suivant !
voidmain() {
object oPC = GetPCSpeaker();
SetLocalInt(oPC,"Ma1ereQuete",1) ;
}
le joueur à accepter la quête, on lui apose la variable Ma1ereQuete avec comme valeur 1.....
bon tout cela n'est qu'une solution parmis tant d'autres, il y a X solution et toutes ses solution vont dépendre des critère de ta quete, si tu veut qu'elle soit répétable ou pas ? qu'elle soit unique etc..
faut savoir d'abords dans quel condition tu veut que ta quête se déclenche, ensuite connaitre les étapes quelle comporte et le tour est jouer.
bien souvent mettre une seul variable local de type SetLocalInt suffit à dérouler les étapes de quête de A à Z tant qu'on appose ses variable sur le PC !!!
une autre solution serait aussi de sauver ses variables de quetes dans une base de donnée vu que DA en propose (je n'ais pas regardé cet aspect encore).
je dirais que tout va dépendre de la taille du module qu'on veut créer, car on voit vite l'utilité et la faiclité de poser des variable sur le joueurs sachant que ces varaibles seront sauver faut penser aussi qu'on pourra pas mettre indéfiniment des variables comme ca sur notre joueurs... à un moment ou à un autre suivant la taille de notre module faudra se diriger vers la sauvegarde de ses données via une BDD(base de donnée).
dans la pratique ca restera aussi simple et il n'y aurra pas plus de ligne de code..
PS: désoler pour les fautes d'orthographe, je sais que j'en fait beaucoup.
Modifié par ItchOther, 28 décembre 2009 - 07:11 .