Quiche a besion de vous noble scripteur

Répondre
Partager Rechercher
bonjour
voila mon problème, ça fait une semaine que j'essaie de scripter ce sujet :mon PJ doit effectuer plusieurs tâches a heure fixe exemple :aller chercher a un point a pour rapporter quelques chose a un point b .autre exemple:le PJ doit servir des clients de l'auberge a une heure bien précise, qui est celle de leurs arrivée .et ainsi de suite pour avoir un enchainement de quetes.comme c'est une auberge je voudrait qu'un groupe d'aventuriers arrivent a 13 heure le premier jour et commande a mangé par exple.et arriver au soir ,sans conversation ,le PJ doit avoir son journal mis à jour pour aller chercher une arme dans une chambre .je vous remercie d'avance pour vos réponses.
Salut

Si j'étais toi, j'utiliserais le OnHeartbeat du module pour gérer ça. Ca permettras de contrôler précisément à quel moment les quêtes apparaitront, et surtout d'éviter des DelayCommand tirés par les cheuveux.

La fonction AddJournalQuestEntry devrait te permettre de rajouter une quête dans le journal du joueur.

Le script sur le OnHeartbeat pourrait ressembler à ça :

Code PHP:

void main()
{
    
int nHour GetTimeHour();
    
object oPJ GetFirstPC();      //sous entendu : module solo

    
switch(nHour)               //le switch permettra de rajouter
                                // facilement des quetes
    
{
        case 
10 :               //Arrivee des clients le matin
            
AddJournalQuestEntry("Arrivée des clients"1oPJ);
                
//Remarque : si la quete est deja assignee, cette commande
                // n'aura aucun effet
        
break;
        case 
18 :               //On va chercher l'arme le soir
            
AddJournalQuestEntry("Prendre l'arme"1oPJ);
        break;
    }

Si tu veux que ce soit la même quête dans les 2 cas, mais que l'état de celle-ci évolue, remplace :
Code PHP:

AddJournalQuestEntry("Prendre l'arme"1oPJ); 

par :
Code PHP:

AddJournalQuestEntry("Arrivée des clients"2oPJ); 

je te remercie pour le script que tu m'a envoie .
mais comment je peux faire pour que des PNJ rentrent et sortent de l'auberge et arrivent a 16 heure un groupe d'aventuriers et commande au PJ un repas et une chambre pour y dormir
ps est-ce que je dois mettre un point de passage ou un tigger pour créer des PNJ ?
excuse -moi je suis quiche de chez quiche
Oula, oula, restons calme
Ce que tu demande, ça représente pas mal de scripts pas forcément très compliqués, mais longs

Là tout de suite, je n'ai ni le temps ni l'envie de passer 3 heures là-dessus, donc essaie de potasser un peu les guides et tutoriaux du forum.

Sans vouloir jouer le grognon ( ), je veux bien aider un peu mais bon y'a des limites à la bonne volonté
(et puis en plus les scripts de PNJ ça me donne des migraines )
Bon je suis moi même un débutant mais je sais qu'il faut pas trop utiliser le OnHeartBeat ( ça surcharge le processeur ! ), c'est pourquoi je pense qu'avec un peu de calcul, tu pourrais faire un truc pas mal, et peut-être plus simple...
En fait on connaît le rapport entre le temps réel et celui dans le jeu (ou tu peux le déterminer, je sais plus...), donc il suffit de faire un :
Code PHP:

//à placer dans le OnSpawn de la créature concernée...
Void main ()
{
AssignCommand(fait-ci ActionWait(X.0) , fait ca ActionWait(Y.0)...);

Enfin je le verrais comme ça, car avec un peu de calcul tu devrais pouvoir avoir un résultat juste...bon maintenant je ne suis qu'un débutant donc je suis pas sur de ce que je te dis...

Vala , mais je pense, enfin je suis sur, que la technique de Taern est plus sure ^_^

EDIT : J'avais pas vu c'est pour un PJ ? je sais pas si je suis à côté de la plaque ou pas ?
__________________
------------------
(Re)découvrez Baldur's Gate ICI
Bon, mettons encore une fois les choses au point à propos du onheartbeat : son seul "défaut" est qu'il se déclenche une fois toutes les 6 secondes (dans le cas du module).
Au pire, mettre un script bien compliqué fera simplement saccader le jeu un petit peu toutes les 6 secondes.
Evidemment c'est désagréable, mais dans ce cas le script est loin d'être compliqué. Il n'y a qu'un appel de fonction, et celui-ci est très probablement beaucoup moins gourmand en ressources que des fonctions comme CreateObject par exemple.

Je soutiens mordicus que le script que j'ai mis plus haut ne ferait même pas ramer un 200 MHz.

Bon, pour en revenir à la solution des ActionWait, eh bien à vrai dire utiliser la pile d'action d'un PNJ pour coordonner des évenements n'est pas d'après moi l'idéal. Ca pourrait sûrement marcher, mais c'est un peu plus hasardeux.
Cela dit, ça se tient
Citation :
Provient du message de Taern
Bon, pour en revenir à la solution des ActionWait, eh bien à vrai dire utiliser la pile d'action d'un PNJ pour coordonner des évenements n'est pas d'après moi l'idéal. Ca pourrait sûrement marcher, mais c'est un peu plus hasardeux.
Cela dit, ça se tient
Le problème peut venir des ClearAllActions() c'est ça ? Azrael07 a fait une biblio pour gérer ça
Enfin bon c'est vrai que dans ce cas là c'est peut-être pas la peine de l'utiliser
Citation :
Provient du message de Taern
Bon, mettons encore une fois les choses au point à propos du onheartbeat : son seul "défaut" est qu'il se déclenche une fois toutes les 6 secondes (dans le cas du module).
Au pire, mettre un script bien compliqué fera simplement saccader le jeu un petit peu toutes les 6 secondes.
Evidemment c'est désagréable, mais dans ce cas le script est loin d'être compliqué. Il n'y a qu'un appel de fonction, et celui-ci est très probablement beaucoup moins gourmand en ressources que des fonctions comme CreateObject par exemple.

Je soutiens mordicus que le script que j'ai mis plus haut ne ferait même pas ramer un 200 MHz.

Bon, pour en revenir à la solution des ActionWait, eh bien à vrai dire utiliser la pile d'action d'un PNJ pour coordonner des évenements n'est pas d'après moi l'idéal. Ca pourrait sûrement marcher, mais c'est un peu plus hasardeux.
Cela dit, ça se tient
heuu... oui ...si ton script est le seul à etre appelle dans un onheartbeat... Sans compter ce qui est deja geré d'origine par le onheartbeat par bioware, il ne faut pas oublier que ce n'est pas UN script qui sera lancé toutes les 6 secondes mais TOUS les scripts du module qui sont sur le onheartbeat ... et je te garantis que pour peu que tu est quelques dizaines de bestioles speciales dans ton module, quelques trucs genre "gestion des lumieres", "gestion des poubelles", "voleurs automatique" , NPC se baladant et une dizaine de joueurs qui s'agitent , lancent des sorts etc... tu arrives tres vite à saturer le onheartbeat.... et si le TOTAL des scripts OHB arrivent à ne pas etre lancer et FINIS en 6 secondes, je t'affirme qu'il va y avoir du sport dans ton module...

donc une solution qui utilise le OHB est à utiliser que si VRAIMENT on ne peux pas faire autrement...
Si bioware nous dit depuis le debut qu'utiliser le OHB c'est mALLLL ,c'est pas pour rien

c'est à utiliser avec parcimonie...
Oui il est sur que je parlais de l'amoncellement de script dans le OnHeartBeat, et pas d'un seul script
Maintenant, j'avoue que ce que je donne est hasardeux, car si la cible de la chaîne d'action, est par exemple attaquée...toute la chaîne d'action est effacé o_O !!!
Donc c'est sur que ma solution n'est pas la meilleure
Ah c'est sûr que vu comme ça ...
Pourtant il ne me semble pas que tous les OHB se déclenchent simultanément. Celui du module a la régularité d'une montre suisse, mais par exemple ceux des zones ont une fréquence qui varie selon la présence de joueur ou pas. De même, ceux des créatures se lancent à leur création, et donc ils ne sont pas forcément tous synchronisés.
Cela dit, oui c'est vrai que ça surcharge vite. Et il faut évidemment faire attention avec les fonctions bien gourmandes. Mais il est rare qu'un gros script se déclenche à chaque fois : souvent il se déclenche par exemple une fois sur 3 ou 4.
Le reste du temps, un return bien placé vient arrêter le script à temps.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés