WB [Modding] Petites questions simples .

正在查看此主题的用户

Pardon de uper  :oops:

Mais c'est pour pas que tu le rate AlphA-FR
...

J'ai au moin la soluc pour la map "mer"  :razz:

prend la scene du port du multi
renome la
assigne la dans le ms a la place de ta ville ou tu edite la mer
detruit tout ce qu'il y a sur la carte
refait/renome les entry points et passages avec les id comme sur la carte precedante
construit ton port/et ai mesh/autant mettre le paquet de bateaux en mer et acostés...atelier de construction de bateaux ...

:razz:

ce sera Marsseille en ce qui me concerne  :twisted:

ce post es pour répondre a alpha_fr pas pour lancer une discution  :wink:



Edit; sinon je te propose un truc alpha-fr  :razz:

fesons la a deux,je fais la déco et tu fais l'ai-mesh et partageons la !  :wink:

il se peut que j'ai des mesh sur la carte que tu n'as pas,soit je te les files,soit je me les met au dernier moment...(ensseignes/maisons modifiées/les modèles d'ai_mansur je les met au dernier moment...).
 
J'ai pas tout compris ton projet que tu compte faire mais pour qu'il n'y est pas de surprises personnelement moi je compte faire une map avec un coté qui part sur la mer , un Bourg moyen age avec un beau port , cela sera la map du bourg quand l'on faire se promener dans les rues mais aussi a map de siege . Donc la villes aura des remparts de l'autres coté du port .
Si tu veux me joindre prend mon steam je suis dispo cette semaine : The_Killer2a
Skype :  alpha-minecraft
 
:mrgreen:

ben voila,je te donne mon astuce plus haut :

c'est de prendre une des carte du multi (sais plus son ID) et de la mettre via le MS en liens dans ta partie...elle es ouverte sur la mer et on peut construire son bazard dérière (port/ruelles).

la carte du multi ou on se bat en passant d'un bateau a l'autre et sur le pont d'embarcation...on marche dans l'eau en bas du ponton...celle la.
 
faudra voir sa plus précisément , tu m'a ajouté sr steam pour prendre un moment t voir sa ?
 
Non je ne suis pas trop sur steam en fait...juste quand je suis obligé d'enregistrer un jeux ,pas un bon client  :mrgreen:

Ben si tu veux,quand je ferais moi meme les réglages pour inclure cette map,je te les reporterais par mp ou ici  :eek:

C'est vrais que ca fera bien classe une ville portuaire!
 
Bon, je squatte le topic.
Que sont les ":cur", ":merchant", etc... (j'ai une idée assez vague, mais bon)
Et surtout, dans quel fichier header sont-ils définis ? après tout, on en voit dans les scripts, les triggers (je crois), les dialogues, ...
 
":cur" et ":merchant" sont des variables, locales étant donné leur premier caractère :

Et donc elles sont définies dans le script même, ou la partie du code concernée, à l'opposé des variables globales (avec un $) qui peuvent être déclarées n'importe ou, et réutilisés plus tard ailleurs.
Pour assigner une variable il faut utiliser l'opération (assign, ":variable", 0), pour assigner à variable la valeur 0 (aucun besoin de déclarer les variables, elles sont déclarées toutes seule). On peut aussi utiliser les opération store_xxx (comme store_add, store_sub, store_mod ...) ou tout autre opération qui retourne une valeur.
 
Se sont des variables, dans ce cas des variables locales:
":merchant" est une variable locale, c'est a dire que elle est assigné dans un code/script est peut avoir différente valeurs d'un script a l'autre. Utile pour établir des conditions
Ex:

      (assign, ":merchant", trp_merchant_1), #PNJ merchant_1 est un marchand

"$g_talk_troop" et "$current_town" sont des variable globale, une fois assigné elle est valable dans tout les codes et tout les fichier modifiables

# Edit:
bOuYA_k-hlO a été plus rapide que moi, j'espère ne pas avoir écrit de bêtises
 
Je savais pour les variables globales, mais pas locales  :oops: :oops: (je m'attendais pas à ce qu'il y ait deux types de variables)

Pour reprendre ton exemple (celui de SnD pour être précis), si je mets
(assign, ":merchant", trp_merchant_1)
(assign, ":merchant", trp_merchant_2)

:merchant désignera les deux marchands ou seulement le 2e ?
Idem pour les variables globales ?

EDIT :
[anyone ,"start", [(store_conversation_troop,reg(1)),(ge,reg(1),tavernkeepers_begin),(lt,reg(1),tavernkeepers_end)],
  "Good day dear {sir/madam}. How can I help you?", "tavernkeeper_talk",
  [
# code en commentaire que je viens de supprimer ici pour la lisibilité
    ]],

Si j'ai bien compris, c'est une ligne qui a un role de "si l'interlocuteur est tavernier, lui faire dire bonjour et passer au menu tavernkeeper_talk", juste ?
Mais au niveau des conditions, honnêtement : pige rien :sad:


EDIT 2 :
Pour les dialogues avec les maitres de guilde, je vois dans les conditions "mayor_begin" et "mayor_end" (idem pour les taverniers, voir édition précédente :p)
Comment savoir et définir si une unité est entre "mayor_begin" et "mayor_end" ? Je peux savoir que 3 est entre 1 et 10, mais j'ai du mal à savoir si "trp_mongugusperso" est entre "mayor_begin" et "mayor_end"  :lol: :shock:
 
bon,j'es pas le courage de répondre,mais bon :???:...Il faut bien séparer les divers élléments...


fonctionement d'une ligne /bloc de dialogue:

quand on cause a un pnj (dialog windows ouverte) le moteur scane les phrases/blocs de converssation,et il lance pour le pnj courant le premier bloc qui remplit toutes les conditions,la plus importante es l'id du pnj,pour savoir si cette phrase es pour lui,voila d'abord le shema d'un bloc de dialogue

#rencontre ton_gugus persso (precedé de # qui désactive cette ligne a la lecture du jeux mais permet des notes et de retrouver rapidement la ligne ,tu peut en fesan :find/ton_gugus persso.

regarde ce qui es ecris entre les "  "  et  [  ] c'est la description des fonction,a remplacer par leur équivalent


[anyone,"start", > au debut de chaques blocs de dialogues

  [anyone ,> au tour du pnj de parler
  [anyone|plyr ,>au tour du joueur avec camera sur lui (sauf si il y a un choix de reponsses



dilogue au debut > [anyone,"start", "...topic en cours ,topic 1...", [  ..conditions* ],".......dialogue.......", "...topic suivant,on va l'appeller topic 2**...", [....resultat***.......],

* la condition 1ere es d'etre que cette phrase es pour ce pnj ,voila ce qu'on ecrit entre les premieres paranthèses de la phrase: (eq, "$g_talk_troop", "trp_ton_gugus persso"),

** ici le topic qui va suivre apres celui la,et te donera d'autres dialogues,la suite quois...

*** le resultat (result script) peut etre :
ajouter de l'honneur
(val_add, "$player_honor", 10),
ou retirer /donner de l'argent,ect...





donc,on reprend a la fin de la premiere pharse en haut,eon en etait a envoyer au topic 2 (c'est au joueur de parler)

  [anyone|plyr ,"topic 2", [],  "dialogue.", "topic suivant...topic 3", []],
  [anyone|plyr ,"topic 2", [],  "dialogue.", "topic suivant...topic 4", []],>>> si tu as deux topics 2 (que pour le joueur,ca represente les choix a faire,tu peut monter a 5000 choix possibles  :mrgreen:
si tu choisis le premier tu sera dirigé vers le topic 3 et le suivant vers le topic 4...

un "close_window" (entre les dernieres paranthèses) ferme la discution,a ne pas oublier !!!!! dans un circuit de dialogue,sinon seul un alt+tab t'en sort,couillon hein  :lol:

bon,j'es bien assez tapé d'aide et j'ai toujours mal a la tete . :mrgreen: les autres t'expliquerons plus de trucs avec les conditions ,tout ca.....


voila un de mes dialogues pour comparer un truc finis:



  [anyone,"start", [(eq, "$g_talk_troop", "trp_campement_troupe_1"), ],"Bon sang,quel froid ! En plus c'est plein de loups par ici...", "dial_camp_base_1", []],
 

  [anyone|plyr ,"dial_camp_base_1", [],  "Jouons quelques écus...", "jeu_pile_face_generique_1", []], 
  [anyone|plyr ,"dial_camp_base_1", [],  "Si vous avez froid,un peut d'entrainement vous rechaufera.", "entrainement_refus", []], 
  [anyone ,"entrainement_refus", [],"Ben,tous comptes faits capitaine,fais pas si froid que ca.", "close_window", []],
  [anyone|plyr ,"dial_camp_base_1", [],  "Restez sur vos gardes...", "close_window", []],

 
bisthebis25 说:
Pour reprendre ton exemple (celui de SnD pour être précis), si je mets
(assign, ":merchant", trp_merchant_1)
(assign, ":merchant", trp_merchant_2)

:merchant désignera les deux marchands ou seulement le 2e ?
Idem pour les variables globales ?

Il désignera seulement le second marchand, il n'y a pas de moyen de faire des tableau avec le module_system
Et ça fonctionne de la même façon pour les variables globales, ce qui signifie prudence ! Si une variable global est déclaré quelque part, et qu'elle est redéclarée plus tard a un autre endroit, la première valeur ne sera plus dans la variable, donc cela peut provoquer des erreurs (pour y remédier il faut éviter les nom trop court et trop génériques, à part si l'effet est désiré).


bisthebis25 说:
EDIT 2 :
Pour les dialogues avec les maitres de guilde, je vois dans les conditions "mayor_begin" et "mayor_end" (idem pour les taverniers, voir édition précédente :p)
Comment savoir et définir si une unité est entre "mayor_begin" et "mayor_end" ? Je peux savoir que 3 est entre 1 et 10, mais j'ai du mal à savoir si "trp_mongugusperso" est entre "mayor_begin" et "mayor_end"  :lol: :shock:

Je continu par cette question car la réponse va t'aider par la suite.
En fait les troupes, les party, les items et autres sont tous des nombres, donc pour savoir si un troupe est 'supérieure' à une autre, il faut voir dans quel place elle est par rapport à l'autre, entre autre, on peut voir le numéro associé à chaque troupe dans ID_troops (pour les troupes bien sur), donc dire qu'une troupe est supérieure à une autre se résume à comparer son numéro (qui est généré automatiquement lors de la compilation, c'est pourquoi ajouter une troupe au milieu du ficher provoque des sauvegardes ... incohérentes).

Donc en fait pour ton exemple,
mayors_begin = "trp_town_1_mayor" = 667
mayors_end    = "trp_village_1_elder" = 689
Ta condition n'est donc remplie que si mongugusperso est compris entre 667 et 689


bisthebis25 说:
EDIT :
[anyone ,"start", [(store_conversation_troop,reg(1)),(ge,reg(1),tavernkeepers_begin),(lt,reg(1),tavernkeepers_end)],
  "Good day dear {sir/madam}. How can I help you?", "tavernkeeper_talk",
  [
# code en commentaire que je viens de supprimer ici pour la lisibilité
    ]],

Si j'ai bien compris, c'est une ligne qui a un role de "si l'interlocuteur est tavernier, lui faire dire bonjour et passer au menu tavernkeeper_talk", juste ?
Mais au niveau des conditions, honnêtement : pige rien :sad:

A ce niveau la c'est surement la méthode utilisé qui pose problème, entre autres l'utilisation des registres reg(1) qui fonctionnent comme des variables globales, mais dont le nom est fixe (dans le sens ou il n'y en a qu'un certain nombre déjà nommés, de 0 a 65 sauf 64)
Elles ont l'avantage de pouvoir être affichés dans un texte, où elle sera remplacé par sa valeur (donc bien penser que les troupes sont des nombres ici) et bien sur d'être globales.
Donc du coup, les conditions ne sont plus très compliqués :
(store_conversation_troop,reg(1)) stocke la troupe à laquelle le joueur parle lors d'un dialogue dans reg1 (ont peut écrire les registres des deux façons)

(ge,reg(1),tavernkeepers_begin),(lt,reg(1),tavernkeepers_end) vérifie que cette troupe que l'on a stocké dans le registre est bien entre les constantes tavernkeepers_begin et tavernkeepers_end
(ge signifiant greater_or_equal, lt lesser_than)

Il aurai été plus lisible dans ce cas d'utiliser (is_between, reg1, tavernkeepers_begin, tavernkeepers_end),

Voila sinon FantasyWarrior m'a grillé la place cette fois (on peut pas être rapide tout le temps :mrgreen:)
 
Tu as bien plus aidé que moi,et j'ai en partit apris avec tes réponsses  :lol: :lol:

(grosses notions en modding d'autres jeux quand meme,faut pas déconer) :mrgreen:
 
插入代码块:
[(try_for_range, ":town_no", towns_begin, towns_end),
       (party_set_slot, ":town_no", slot_center_tavern_bookseller, 0),
     (try_end),
   

C'est une partie du script "update_booksellers".
1) Ici, try_for_range permet de faire une boucle ? dans la ville 1, bouger le marchand de livres si il y en a un, dans la ville 2, bouger le marchand de livres si il y en a un, etc... ?
2) Comment fonctionnent les slots ?
3) si je mets un try_begin, suivi de 3 lignes, puis d'un try_end, ça veut dire "si la première ligne est une condition remplie, faire ce qui est avant le try_end" ?

'erci d'avance
 
Oui try_for_range permet de faire une boucle, qui boucle sur toutes les villes, mais ce bloc ne permet pas de bouger le marchant si il y en a un, il permet d'enlever le marchand de livre, qu'il y soit ou pas.

Les slots sont un peu des variables liées à quelque chose, par exemple à une troupe. Donc chaque troupe a ses propres slots.

Pour si tu as déjà fait de la programmation un try_begin correspondrai a un if sans condition a l’intérieur.

En fait un try_begin permet de 'décaler' le code, donc un opération qui échoue fera sauter tout ce qui est après, jusqu'au prochain try_end ou else_try. Donc la condition peut être situé n'importe ou après le try_begin, et si elle échoue on passe a la suite, donc si on trouve un else_try on passe dedans, si on trouve un try_end on continue avec le niveau supérieur.

插入代码块:
(assign, ":value", 1),
(try_begin),
  (eq, ":value", 1),
  (val_add, ":value", 1),
  (eq, ":value", 1),
  (assign, ":value", 3),
(else_try),
  (eq, ":value", 2),
  (assign, ":value", 0),
(try_end),
Voila par exemple ici, on met value a 1, puis on rentre dans le try, on teste si value égale 1, ce qui est vrai, donc on continue, on ajoute a value 1, qui vaut 2. Ensuite on teste si value egale 1, ce qui est faux, on saute donc tout ce qui est au même 'niveau' jusqu'à un else_try ou un try_end

Comme la on a un else_try on passe dedans, même si on est déjà passé dans la première partie du try_begin, si la dernière opération échoue dans un try_begin on passe quand même à la suivante. Du coup dans ce cas value vaudra 0, puisqu'elle est assigné a cette valeur dans le else.

J'espère avoir été compréhensible vu que ça fait plusieurs jours que je dors pas trop et qu'il est tard aujourd'hui aussi :mrgreen:. En tout cas si c'est pas le cas tu peux toujours me demander des clarifications.
 
Merci :smile:
Au niveau des slots, je peux en créer ? Ils sont définis quelques part ?
Dans le cas des marchands de livre, si la ville X possède le slot qui dit qu'elle doit avoir le marchand de livres 1, quel est le fichier qui s'en sert de condition (si c'est bien ça) pour le placer dans la taverne ?
 
Les slot sont définis dans module_constants et donc tu peux en définir de nouveaux dedans, mais il n'est pas possible d'en créer de nouveaux, car chaque slot correspond à un numéro, un slot peut donc avoir le même numéro qu'un autre, mais dans ce cas on ne peut pas utiliser les deux slot sur la même troupe (ou item) pour cause de conflit (les deux slot modifiant la même 'variable').

Et dans le cas des marchand de livres, l'endroit qui dit quel marchant elle a est juste en dessous de ce que tu a posté, c'est a dire :
插入代码块:
(try_for_range, ":troop_no", tavern_booksellers_begin, tavern_booksellers_end),
  (store_random_in_range, ":town_no", towns_begin, towns_end),
  (party_set_slot, ":town_no", slot_center_tavern_bookseller, ":troop_no"),
(try_end),
Qui prend une ville aléatoire pour chaque marchand, et met le marchand dans cette ville.
 
Ca j'avais compris, mais ce code à lui seul mettra le marchand de livres dans la taverne ? aucun autre fichier ?
 
Ah oui ... il y a un autre fichier, dans module_game_menus

插入代码块:
(try_begin),
  (party_get_slot, ":tavern_bookseller", "$current_town", slot_center_tavern_bookseller),
  (gt, ":tavern_bookseller", 0),
  (set_visitor, ":cur_entry", ":tavern_bookseller"),
  (val_add, ":cur_entry", 1),
(try_end),

Tu peux le trouver en recherchant slot_center_tavern_bookseller, il n'apparait qu'une seule fois.
Qui regarde si la ville courante a un marchant de livre, et si elle en as un l'ajoute dans la scène.
 
J'ai défini une nouvelle constante :
插入代码块:
slot_center_tavern_henry          = 567
(j'ai pris au hasard un chiffre pour etre sur qu'il est pas pris :grin:)

ensuite, je l'utilise avec un set_slot, et...
插入代码块:
NameError: name 'slot_center_tavern_henry' is not defined

Qu'est-ce qui cloche ??? oO
 
后退
顶部 底部