Page 2 sur 4

Re: [Dans l'atelier] Kurosaï le combineur

Posté : dim. 28 avr. 2024, 22:52
par JohnBob
Soit tu set le Lore à 0 lors de l'installation : WRITE_SHORT 0x42 ~0~

Code : Tout sélectionner

//Dagues
COPY_EXISTING	~dagg24.itm~		~override/pxkdagg4.itm~	SAY NAME2 @1148	SAY DESC @1149
WRITE_ASCII 0x3a ~pxkdagg4~ #8	WRITE_ASCII 0x76 ~pxkdagg4~ #8	WRITE_BYTE 0x60 4	WRITE_BYTE 0x86 4	WRITE_BYTE 0x8c 4	WRITE_SHORT 0x34 8000
WRITE_SHORT 0x42 ~0~
COPY_EXISTING	~dagg24.itm~		~override/pxkdagg5.itm~	SAY NAME2 @1158	SAY DESC @1159
WRITE_ASCII 0x3a ~pxkdagg5~ #8	WRITE_ASCII 0x76 ~pxkdagg5~ #8	WRITE_BYTE 0x60 5	WRITE_BYTE 0x86 5	WRITE_BYTE 0x8c 5	WRITE_SHORT 0x34 10000
WRITE_SHORT 0x42 ~0~
COPY_EXISTING	~dagg24.itm~		~override/pxkdagg6.itm~	SAY NAME2 @1168	SAY DESC @1169
WRITE_ASCII 0x3a ~pxkdagg6~ #8	WRITE_ASCII 0x76 ~pxkdagg6~ #8	WRITE_BYTE 0x60 6	WRITE_BYTE 0x86 6	WRITE_BYTE 0x8c 6	WRITE_SHORT 0x34 12000
WRITE_SHORT 0x42 ~0~
Soit tu l'identifie dans ton .d au moment de le donner au PC : ActionOverride(LastTalkedToBy,SetItemFlags("dagg24",IDENTIFIED,TRUE))

Code : Tout sélectionner

IF ~NumItemsPartyGT("dagg15",1) NumItemsParty("dagg03",1) PartyGoldGT(8999)~ THEN  REPLY @1131
      DO ~TakePartyGold(9000) DestroyGold(9000)
	  TakePartyItemNum("dagg15",2) DestroyItem("dagg15")
	  TakePartyItemNum("dagg03",1) DestroyItem("dagg03")
	  GiveItemCreate("dagg24",Player1,1,1,1)
	  ActionOverride(LastTalkedToBy,SetItemFlags("dagg24",IDENTIFIED,TRUE))
	  CreateVisualEffectObject("spccmdsi",myself)~	GOTO Finish
Il y a peut-être un autre moyen...



PS : Pour le mod Artemus de Prof Errata, on avait discuté avec Rivvers de DestroyItem(), il est possible qu'il soit préférable de mettre plusieurs DestroyItem() quand on retire plusieurs fois le même objet. Donc comme on prend deux dagg15, doubler les DestroyItem("dagg15") DestroyItem("dagg15") pourrait bien être utile.

Code : Tout sélectionner

IF ~NumItemsPartyGT("dagg15",1) NumItemsParty("dagg03",1) PartyGoldGT(8999)~ THEN  REPLY @1131
      DO ~TakePartyGold(9000) DestroyGold(9000)
	  TakePartyItemNum("dagg15",2) DestroyItem("dagg15") DestroyItem("dagg15")
	  TakePartyItemNum("dagg03",1) DestroyItem("dagg03")
	  GiveItemCreate("dagg24",Player1,1,1,1)
	  ActionOverride(LastTalkedToBy,SetItemFlags("dagg24",IDENTIFIED,TRUE))
	  CreateVisualEffectObject("spccmdsi",myself)~	GOTO Finish
Tu auras surement l'occasion de vérifier dans tes tests si le forgeron se retrouve avec plein d'armes dans son inventaire...

Mais IESDP dit ceci : This action removes a single instance of the specified item from the active creature, unless the item exists in a stack, in which case the entire stack is removed.

Comme les armes ne s'empilent pas, seule l'une d'entre elles devrait être supprimée.

Re: [Dans l'atelier] Kurosaï le combineur

Posté : lun. 29 avr. 2024, 03:27
par deratiseur
Ok, pour les objets que je crée "WRITE_SHORT 0x42 ~0~" ça fonctione. Merci :) Par contre pour les objets vanilla (quand on donne trois +1 pour avoir un +2) ceux là restent non-identifiés et "ActionOverride(LastTalkedToBy,SetItemFlags("dagg24",IDENTIFIED,TRUE))" ne marche pas :/

Re: [Dans l'atelier] Kurosaï le combineur

Posté : lun. 29 avr. 2024, 06:10
par JohnBob
En faisant un test sur la version que tu as publier plus haut ça marche.

Tu as bien changé "dagg24" en "dagg15" ?

Par contre si le personnage dispose déjà d'une dague similaire dans son inventaire alors la seconde ne sera pas identifiée...

Du coup voici une alternative qui fonctionne tout le temps : (Attention à la syntaxe...)

Code : Tout sélectionner

IF ~NumItemsPartyGT("dagg02",2) PartyGoldGT(3999)~ THEN  REPLY @112
      DO ~TakePartyGold(4000) DestroyGold(4000)
	  TakePartyItemNum("dagg02",3) DestroyItem("dagg02") DestroyItem("dagg02") DestroyItem("dagg02") // ON DÉTRUIT TOUS LES ITEMS / INGRÉDIENTS
	  CreateItem("dagg15",0,0,0) //  ON PLACE L'ITEM CRÉE DANS L'INVENTAIRE DE KUROSAN
	  CreateVisualEffectObject("spccmdsi",Myself)
	  SetItemFlags("dagg15",IDENTIFIED,TRUE)  //  ON IDENTIFIE L'ITEM CRÉE DANS L'INVENTAIRE DE KUROSAN COMME ÇA PAS DE RISQUE QU’UN MÊME OBJET SOIT DÉJÀ PRESENT
	  GiveItem("dagg15",LastTalkedToBy)~ //  KUROSAN TRANSMET L'ITEM AU PERSONNAGE
	  

Au passage après vérification Kurosan conserve bien le autre dagues dans son inventaire, il faut vraiment utiliser plusieurs fois DestroyItem().

Re: [Dans l'atelier] Kurosaï le combineur

Posté : lun. 29 avr. 2024, 10:37
par deratiseur
Comme tu as confirmée que ça marchait avec ActionOverride(LastTalkedToBy,SetItemFlags("dagg24",IDENTIFIED,TRUE))
j'ai essayé ça

Code : Tout sélectionner

	IF ~NumItemsPartyGT("ring06",2) PartyGoldGT(3999)~ THEN  REPLY @1302
      DO ~TakePartyGold(4000) DestroyGold(4000)
	  TakePartyItemNum("ring06",3)	DestroyItem("ring06")	DestroyItem("ring06")	DestroyItem("ring06")
	  GiveItemCreate("ring07",Player1,1,1,1)
	  ActionOverride(LastTalkedToBy,SetItemFlags("ring07",IDENTIFIED,TRUE)
	  CreateVisualEffectObject("icccmdsi",myself)~	GOTO Finish
	IF ~NumItemsPartyGT("ring06",1) NumItemsParty("ring25",1) PartyGoldGT(3999)~ THEN REPLY @13021
      DO ~TakePartyGold(4000) DestroyGold(4000)
	  TakePartyItemNum("ring06",2) DestroyItem("ring06")	DestroyItem("ring06")
	  TakePartyItemNum("ring25",1) DestroyItem("ring25")
	  GiveItemCreate("ring07",Player1,1,1,1)
	  ActionOverride(LastTalkedToBy,SetItemFlags("ring07",IDENTIFIED,TRUE)
	  CreateVisualEffectObject("icccmdsi",myself)~ GOTO Finish
et fais des tests plus poussés :
En fait je charge une partie ou j'ai 5 anneaux +1 et l'anneau de koveras. Si je demande d'abord 3x+1 pour +2, l'anneau est identifié. Puis je demande 2x+1 et koveras pour un +2, l'anneau n'est pas identifié. Je retente cette fois en demandant d'abord 2x+1 et koveras pour un +2, l'anneau et identifié. Puis je demande 3x+1 pour +2, l'anneau n'est pas identifié. Il semble que ça marche pour la première demande, mais pas pour les suivantes.

Au passage, ok pour les destroy multiples, c'est corrigé, j'ai 3 destroy par recette. (testé aussi en tuant kurosaï, précédemment à la correction il avait plain d'anneaux sur lui)

Et merci pour ton dernier code, je vais faire ça. Multiplié par 212 recettes (comment on fait le smiley "pleure" ?)

Re: [Dans l'atelier] Kurosaï le combineur

Posté : lun. 29 avr. 2024, 16:52
par JohnBob
Ouais autant de chance d'avoir un typo après la modification...

Le dernier code me parait aussi le plus fiable, vu que l'on ne peut pas avoir de certitude sur le contenu d'inventaire des joueurs.

Mais du coup il faut vraiment pas oublier de DestroyItem() sinon le problème d'identification risque d'arriver aussi si Kurosan possède déjà un objet similaire dans son inventaire.



Au sujet de la présence de Kurosan dans différents chapitre du jeu, pourquoi ne pas effectivement ajouter Kurosan dans BG1, BG2, ToB et même SoD, en ajoutant quelques variables dans ton DLG, une partie des armes ne pourrait être accessible que dans un chapitre précis.


Bon je sais pas où tu en es dans ta réflexion à propos de l'accessibilité de Kurosan et c'est juste des exemples tant pour la puissance des armes que pour les zones.
- Pour les armes uniquement accessible dans ToB (Arme +6) : ~GlobalGT("Chapter","GLOBAL","%bg2_chapter_7%") ~ ou utiliser la zone de rencontre ~OR(2) AreaCheck("AR5000") AreaCheck("AR6400")~ // Saradush ou/et Vallée de la forêt, (Téthyr, Rivière)

- Pour les armes accessible dans BG2 après Ombre-Terre (Arme +5) : ~GlobalGT("Chapter","GLOBAL","%bg2_chapter_5%")~

- Pour les armes accessible dans BG2 après avoir résolu les problème de Franc-Marché (Arme +4) : ~GlobalGT("Chapter","GLOBAL","%bg2_chapter_1%") AreaCheck("AR2000")~ ou ~AreaCheck("AR2000") Global("geniesgone","GLOBAL",1)~ // Franc-Marché

- Pour les armes accessible dans SoD (Arme +3) : ~GlobalGT("Chapter","GLOBAL","%bg2_chapter_7%") ~ ou utiliser la zone de rencontre ~OR(2) AreaCheck("BD3000") AreaCheck("BD1000")~ // Camp de la coalition ou/et Pont de la Voie Côtière si Kurosan suit la coalition

- Pour les armes accessible dans BG1 (Arme +1/+2) : Besoin de rien.

Il est aussi possible de laisser le joueur choisir à l'installation. Pour le mod de Prof Errata Irstore plusieurs propositions :

Code : Tout sélectionner

@0	= ~Installer "IRStore Original"~
@2	= ~Installer "IRStore Delayed" certains items ne seront disponible qu'apres votre retour d'Ombre-Terre~
@3	= ~Installer "IRStore Delayed" et "IRStore ToB"~
@4	= ~Installer "IRStore ToB Only", le magasin de Nathan ne sera disponible que dans Throne of Bhaal~
@5	= ~Installer "IRStore Original" et "IRStore ToB"~
@6	= ~Installer "Item Errata" modification de l'arc de fer et de la longue dague de Lydek en une fronde et un baton aux pouvoirs equivalents par PROF ERRATA~

Re: [Dans l'atelier] Kurosaï le combineur

Posté : lun. 29 avr. 2024, 17:24
par Selphira
deratiseur a écrit : lun. 29 avr. 2024, 10:37 Et merci pour ton dernier code, je vais faire ça. Multiplié par 212 recettes (comment on fait le smiley "pleure" ?)
Pour ce genre de cas, tu peux faire en sorte de générer le contenu de ton fichier .d grâce à des boucles et des variables.
Cela te permet de gérer tes recettes simplement en modifiant ton tableau, le reste du code ne bougera pas.

Code : Tout sélectionner

PATCH_DEFINE_ASSOCIATIVE_ARRAY ~recettes~ BEGIN
	// [Objet à fusionner], [Nombre d'objets requis], [prix], [référence de la chaîne du fichier tra] => [Objet fusionné]
	"clck01", 3, 4000, 1322 => "clck02"
	"clck02", 3, 9000, 1323 => "pxkcape3"
	"pxkcape3", 3, 16000, 1324 => "pxkcape4"
END

SPRINT CONTENU_FICHIER_D ~~

PATCH_PHP_EACH ~recettes~ AS recette=> objetFusionne BEGIN
   SPRINT objetSource ~%recette_0%~
   SET nombreRequis = ~%recette_1%~
   SET nombreRequisGT = nombreRequis - 1
   SET prix = ~%recette_2%~
   SET prixGT = prix - 1
   SET referenceTra = ~%recette_3%~
   
   SPRINT CONTENU_FICHIER_D ~%CONTENU_FICHIER_D %	IF ~NumItemsPartyGT("%objetSource %",%nombreRequisGT%) PartyGoldGT(%prixGT%)~ THEN  REPLY @%referenceTra%
      DO ~TakePartyGold(%prix%) DestroyGold(%prix%)
	  TakePartyItemNum("%objetSource%",%nombreRequis%) DestroyItem("%objetSource%") DestroyItem("%objetSource%") DestroyItem("%objetSource%")
	  GiveItemCreate("%objetFusionne%",Player1,1,1,1)
	  CreateVisualEffectObject("spccmdsi",myself)~	GOTO Finish~
END

COMPILE ~Derats_Combino/Divers/pxkcombi.d~

Dans ton fichier .d, tu aurais un code qui se résumerait à quelque chose comme ceci

Code : Tout sélectionner

BEGIN pxkCombi

IF ~Global("pxkcombi","GLOBAL",0)~ THEN BEGIN welcome1 SAY @2
	IF ~~ THEN REPLY @3	DO ~SetGlobal("pxkcombi","GLOBAL",1)~ GOTO welcome2
END

IF ~~ THEN BEGIN welcome2 SAY @4

	IF ~~ THEN REPLY @5 GOTO welcome3
END

IF ~~ THEN BEGIN welcome3 SAY @6
	IF ~~ THEN REPLY @7 GOTO welcome4
END

IF ~~ THEN BEGIN welcome4 SAY @8
	IF ~~ THEN REPLY @9 EXIT
	IF ~~ THEN REPLY @10 GOTO welcome5
END

IF ~~ THEN BEGIN welcome5 SAY @11
	IF ~~ THEN REPLY @12 EXIT
END
	
IF ~Global("pxkcombi","GLOBAL",1)~ THEN BEGIN welcomet
    SAY @2
%CONTENU_FICHIER_D%
	IF ~~ THEN REPLY @14 EXIT
END

IF ~~ THEN BEGIN Finish
    SAY @13
	IF ~~ THEN EXIT
END
C'est une version simple que je n'ai évidemment pas testé, tu devrais même adapter le nombre de DestroyItem() en fonction du nombre d'objets désirés.
C'est pour te donner l'idée, en faisant comme cela, tu pourras ajouter ou modifier des recettes très facilement !

Vu qu'il te suffit d'écrire le code du fichier .d une seule fois, tu peux ainsi faire plein de tests différents très facilement.
Tu peux par exemple imaginer d'ajouter ou non d'autres données à ton tableau pour par exemple, calculer le prix au lieu de le laisser fixe dans le tableau, gérer des chances d'échec, ou que sais-je encore ?

Re: [Dans l'atelier] Kurosaï le combineur

Posté : lun. 29 avr. 2024, 19:42
par deratiseur
Merci. :) Mais mon fichiers d est déjà modifié, à grand coup de ctrl+v ^^ (d’ailleurs j'ai déjà du changer mon clavier une fois, touche v éclatée ^^)
Le module est "prêt", ce qui le retarde c'est à présent 2 composants optionnels pas prévus au début : "Ajouter une occurrence +1 de chaque objet dans différents contenants et magasins (lister les endroits en restant rp, sauf si je trouve un système pour random)" et "les recette nécessitent des gemmes" (construction d'un autre fichier D)

Note : tu es sure de ton exemple ?

Re: [Dans l'atelier] Kurosaï le combineur

Posté : lun. 29 avr. 2024, 19:58
par deratiseur
Si un composant proposait d'ajouter une gemme requise pour les recettes , est ce que :
une Esseulite pour du +6
une Larme de roi pour du +5
un Saphir étoilé pour du +4
une Émeraude pour du +3
un Diamant pour du +2
vous parait trop compliqué ?

Re: [Dans l'atelier] Kurosaï le combineur

Posté : lun. 29 avr. 2024, 20:09
par Mornagest
Non, au contraire, ça oblige à faire des choix car ces gemmes ne sont pas monnaie courante, enfin, pas trop.

Par contre, j'intervertirais émeraude en +2 et diamant en +3 ?

Re: [Dans l'atelier] Kurosaï le combineur

Posté : lun. 29 avr. 2024, 20:12
par deratiseur
ok. je les ai classé par prix, mais si tu penses que l’émeraude est plus commune que le diamant, tu connais surement mieux le jeu que moi, alors je prend.

En même temps vu que +2 c'est quand même un peu pourri, je peux aussi proposer perle pour +2, opale noire pour +3, émeraude pour +4, diamant pour +5 et Saphir étoilé pour +6 (l'esseulite étant quand même pas mal utilisée par d'autres "forgerons" de divers sources et la larme de roi très rare)

Re: [Spécial] Kurosaï le combineur

Posté : lun. 29 avr. 2024, 20:47
par deratiseur
Bon, comme les gemmes ça va me prendre quand même pas mal de temps, je le remet pour plus tard. et le composant "Ajouter une occurrence +1 de chaque objet dans différents contenants et magasins" est finalement naze, sur 35 objets ça fait au moins 20 +1 "gratuits", ça ne me plait pas.

Alors voilà donc la v1 en ligne (lien dans le 1er message). Ce qui change par rapport à la v0.5 wip :
Mise à jour de l'animation de forge et de kurosaî.
Correction de quelques erreurs de typo.
Ajout de la langue anglaise.
Ajout d'une apparition dans TOB (Saradush).
Ajout d'une option pour le faire apparaitre aussi à Amkethran (avec ça les +6 deviendront facilement accessibles, je classe donc ce composant comme "cheat".
Aide de @JohnBob et correction du bug qui faisait que Kurosaï gardait sur lui certains éléments des formules.
Aide de @JohnBob et correction du bug qui faisait que les objets vanilla étaient donnés non-identifiés.
Demande de @Selphira, ajout des targes et des objets ajoutés par Rogue Rebalancing.


Malheureusement les modifications de formules m'obligent à changer le dialogue associé à Kurosaï, cad que chaque changement est exclusif. Je ne peux pas proposer d'option pour baisser le prix des recettes, elle serait incompatible avec "les recettes demandent des gemmes". C'est l'une ou l'autre, et je trouve la proposition de @Mornagest plus intéressante.

Spécial : je n'ai pas rajouté dans les formules les objets "simplement + mais avec un nom uniques" des autres modules (sauf RR), pour 2 raisons :
- Si je les trouves dans NI, il ne m'est pas possible de savoir si elle sont obtenables par le joueur (ou réservé à un monstre et non droppable)
- Je ne vois par pourquoi un moddeur mettrait en jeu sa propre version d'un objet "simplement +", dans 99% des cas les objets de mods ont des effets spéciaux.
En conséquence de quoi je vous laisse me le signaler si vous trouvez un objet simplement + que Kurosaï ne prend pas en compte.

Re: [Forgeron] Kurosaï le combineur

Posté : mar. 30 avr. 2024, 20:23
par deratiseur
Bon, finalement l'ajout des gemmes m'aura pris moins de temps que prévu, alors voilà la V2, qui ajoute le composant "les recettes coutent moins cher mais nécessitent des gemmes rares".

Re: [Forgeron] Kurosaï le combineur

Posté : mar. 30 avr. 2024, 21:02
par Mornagest
Cool, bravo pour ce travail de fourmi ! :)

Re: [Forgeron] Kurosaï le combineur

Posté : jeu. 02 mai 2024, 09:50
par deratiseur
Je ne m'imaginais pas que ce "petit" mod dans lequel je m’étais lancé pour changer du temps lourdingue passé sur le Défi Insurmontable me demanderait "autant" de boulot. J'ai posté une v2 pour répondre aux attentes de plusieurs personnes, une v3 se prépare pour les mêmes raisons. Mais je me vois aussi forcé de traduire un module parce qu'il propose du +1 que du coup je vais rajouter dans les formules.....

Re: [Dans l'atelier] Kurosaï le combineur

Posté : sam. 04 mai 2024, 10:30
par deratiseur
Selphira a écrit : lun. 29 avr. 2024, 17:24
deratiseur a écrit : lun. 29 avr. 2024, 10:37 Et merci pour ton dernier code, je vais faire ça. Multiplié par 212 recettes (comment on fait le smiley "pleure" ?)
Pour ce genre de cas, tu peux faire en sorte de générer le contenu de ton fichier .d grâce à des boucles et des variables.
Cela te permet de gérer tes recettes simplement en modifiant ton tableau, le reste du code ne bougera pas.

Code : Tout sélectionner

PATCH_DEFINE_ASSOCIATIVE_ARRAY ~recettes~ BEGIN
	// [Objet à fusionner], [Nombre d'objets requis], [prix], [référence de la chaîne du fichier tra] => [Objet fusionné]
	"clck01", 3, 4000, 1322 => "clck02"
	"clck02", 3, 9000, 1323 => "pxkcape3"
	"pxkcape3", 3, 16000, 1324 => "pxkcape4"
END

SPRINT CONTENU_FICHIER_D ~~

PATCH_PHP_EACH ~recettes~ AS recette=> objetFusionne BEGIN
   SPRINT objetSource ~%recette_0%~
   SET nombreRequis = ~%recette_1%~
   SET nombreRequisGT = nombreRequis - 1
   SET prix = ~%recette_2%~
   SET prixGT = prix - 1
   SET referenceTra = ~%recette_3%~
   
   SPRINT CONTENU_FICHIER_D ~%CONTENU_FICHIER_D %	IF ~NumItemsPartyGT("%objetSource %",%nombreRequisGT%) PartyGoldGT(%prixGT%)~ THEN  REPLY @%referenceTra%
      DO ~TakePartyGold(%prix%) DestroyGold(%prix%)
	  TakePartyItemNum("%objetSource%",%nombreRequis%) DestroyItem("%objetSource%") DestroyItem("%objetSource%") DestroyItem("%objetSource%")
	  GiveItemCreate("%objetFusionne%",Player1,1,1,1)
	  CreateVisualEffectObject("spccmdsi",myself)~	GOTO Finish~
END

COMPILE ~Derats_Combino/Divers/pxkcombi.d~

Dans ton fichier .d, tu aurais un code qui se résumerait à quelque chose comme ceci

Code : Tout sélectionner

BEGIN pxkCombi

IF ~Global("pxkcombi","GLOBAL",0)~ THEN BEGIN welcome1 SAY @2
	IF ~~ THEN REPLY @3	DO ~SetGlobal("pxkcombi","GLOBAL",1)~ GOTO welcome2
END

IF ~~ THEN BEGIN welcome2 SAY @4

	IF ~~ THEN REPLY @5 GOTO welcome3
END

IF ~~ THEN BEGIN welcome3 SAY @6
	IF ~~ THEN REPLY @7 GOTO welcome4
END

IF ~~ THEN BEGIN welcome4 SAY @8
	IF ~~ THEN REPLY @9 EXIT
	IF ~~ THEN REPLY @10 GOTO welcome5
END

IF ~~ THEN BEGIN welcome5 SAY @11
	IF ~~ THEN REPLY @12 EXIT
END
	
IF ~Global("pxkcombi","GLOBAL",1)~ THEN BEGIN welcomet
    SAY @2
%CONTENU_FICHIER_D%
	IF ~~ THEN REPLY @14 EXIT
END

IF ~~ THEN BEGIN Finish
    SAY @13
	IF ~~ THEN EXIT
END
C'est une version simple que je n'ai évidemment pas testé, tu devrais même adapter le nombre de DestroyItem() en fonction du nombre d'objets désirés.
C'est pour te donner l'idée, en faisant comme cela, tu pourras ajouter ou modifier des recettes très facilement !

Vu qu'il te suffit d'écrire le code du fichier .d une seule fois, tu peux ainsi faire plein de tests différents très facilement.
Tu peux par exemple imaginer d'ajouter ou non d'autres données à ton tableau pour par exemple, calculer le prix au lieu de le laisser fixe dans le tableau, gérer des chances d'échec, ou que sais-je encore ?
Heu, ouais, mais pour chaque recette je dois quand même écrire "x unités de Z", "y unités de W", ceci multiplié 240 fois, même avec ton tableau, non ?

Re: [Dans l'atelier] Kurosaï le combineur

Posté : sam. 04 mai 2024, 11:21
par Selphira
deratiseur a écrit : sam. 04 mai 2024, 10:30 Heu, ouais, mais pour chaque recette je dois quand même écrire "x unités de Z", "y unités de W", ceci multiplié 240 fois, même avec ton tableau, non ?
Pas forcément, ton tableau pourrait se résumer à simplement ceci

Code : Tout sélectionner

PATCH_DEFINE_ASSOCIATIVE_ARRAY ~recettes~ BEGIN
	// [Objet à fusionner] => [Objet fusionné]
	"clck01"=> "clck02"
	"clck02" => "pxkcape3"
	"pxkcape3" => "pxkcape4"
END
Le code pourrait ensuite lire la valeur de l'enchantement de l'objet à fusionner (+1, +2, +3, etc..) pour déterminer automatiquement le nombre d'objet requis ainsi que le prix selon une formule que tu inventerais.
Tu devrais alors aussi générer dynamiquement la chaîne de dialogue pour chaque objet, en lisant directement le name de l'objet et en l'intégrant dans une chaîne générique qui pourrait ressembler à ceci. Où
- nombreRequis -> Le nombre d'objet nécessaire converti en mot (2 => deux, 3 => trois, etc.)
- nomObjetAFusionner -> Le nom de de l'objet à fusionner
- nomObjetFusionne -> Le nom de l'objet fusionné
- nomTypeDeLObjet -> Le nom du type de l'objet en fonction de la valeur Item Type.

Code : Tout sélectionner

~Je voudrais changer %nombreRequis% %nomObjetAFusionner% pour un %nomObjetFusionne%. Voilà les %nomTypeDeLObjet%, et l'or.~
Fini de devoir créer xx chaînes pour chaque formules !
C'est un peu plus compliqué à mettre en place, mais rendre cela générique va te faire gagner beaucoup de temps pour la suite.

Re: [Forgeron] Kurosaï le combineur

Posté : sam. 04 mai 2024, 12:03
par deratiseur
Oups, double post.

Re: [Forgeron] Kurosaï le combineur

Posté : sam. 04 mai 2024, 12:51
par Selphira
Oui, c'est tout à fait possible, bien que là on est dans une complexité différente du départ.
Peux-tu simplement me montrer à quoi va ressembler 1 entrée dans le fichier .d pour gérer tous les cas que tu décris ?

Re: [Forgeron] Kurosaï le combineur

Posté : sam. 04 mai 2024, 16:53
par deratiseur
Bon, voilà avec 3 alternatives. Et tu as raison, il faut trouver un truc plus simple, parce qu'il suffirait que je trouve une au deux autres alternative pour que ce soit démultiplié. Et encore, je ne suis pas sur de ne pas en avoir oublié.
texte :
► Afficher le texte
Dialogue :
► Afficher le texte

Re: [Forgeron] Kurosaï le combineur

Posté : sam. 04 mai 2024, 17:38
par Selphira
Effectivement, les possibilités sont exponentielles... à partir de 4 objets différents en guise de source, cela va devenir extrêmement compliqué de le maintenir manuellement.
Et même de manière automatique, cela va générer un nombre énorme d'entrées, est-ce que le jeu ne va pas ramer en discutant avec Kurosaï si plusieurs centaines voir milliers de possibilités sont présentes ?

Je vais réfléchir pour te proposer un algorithme qui gèrera entre 1 et X objets sources, mais je pense qu'il faudra limiter leur nombre pour éviter que Kurosaï n'aie des milliers de choix de dialogue.

Re: [Forgeron] Kurosaï le combineur

Posté : sam. 04 mai 2024, 18:14
par deratiseur
Je suis en train de préparer une v3 avec quelques options supplémentaires, et je me demandais : pourrait t'on considérer les bracelet de CA comme des "+", et donner 3 CA 8 pour un CA7, par exemple ?

Re: [Forgeron] Kurosaï le combineur

Posté : sam. 04 mai 2024, 18:16
par Le Marquis
Selon moi oui, les bracelets restent assez rares dans le jeu de base (pour les mods je ne sais pas).

Re: [Forgeron] Kurosaï le combineur

Posté : sam. 04 mai 2024, 20:01
par loupgris
Ou alors limiter à 2 bracelets pour l'upgrade.

Re: [Forgeron] Kurosaï le combineur

Posté : dim. 05 mai 2024, 10:06
par Selphira
@deratiseur J'ai un peu avancé sur l'algorithme, actuellement il est écrit en PHP, et je dois le convertir en WEIDU.

Pour information, voici le nombre de combinaisons possibles en fonction du nombre d'objets sources différents :

Code : Tout sélectionner

1 -> 1
2 -> 3
3 -> 10
4 -> 35
5 -> 126
6 -> 462
7 -> 1716
On voit que déjà à partir de 5, les chiffres s'envolent. Tu devras sans doute te limiter à un certain nombre d'objets source (4 ou 5 ?) par recette pour éviter les ralentissements en jeu.

Re: [Forgeron] Kurosaï le combineur

Posté : dim. 05 mai 2024, 13:06
par deratiseur
Je vais faire plus simple que ça. Incruster RR ne m'a couté qu'un bloc, les arcs court composites. Ajouter Wares of the planes à beaucoup compliqué le bloc des dagues, mais je m'en suis sorti (par contre je ne pense pas q'il supporte l'ajout d'une autre dague +1 alternative), a rajouté une deux entrées pour les haches (négligeable) et à rajouté quelques entrées pour les anneaux et les bracelets de Défenses (formules nouvelles venues).
En fait a part les dagues, rien de bien compliqué. Donc je vais vérifier une bonne partie des modules qui rajoutent des objets (je ne connais pas tous les mods anglais), et je les intègreraient s'ils ne rajoutent pas grand choses. S'il rajoute des dagues, je les ignorerais. Voilà.

Et ton calcul est faux : pour 2 objets ce n'est pas trois mais quatre. Soit X et Y, il en faut trois en tout pour le resultat :
XXX
YYY
YXX
XXY

Et pour 3 objets, soit X, Y et Z, je valide.
XXX
YYY
ZZZ
XXY
XXZ
XYY
XZZ
YYZ
YZZ
XYZ

Par contre pour 4 objets, soit 35, ça me fait peur parce que je n'ai pas 35 formules pour les dagues +1. Mais il faut aussi prendre en compte que la dague de Charname n'est qu'en 1 exemplaire et les dagues de wares of the planes en 2 exemplaires chacune. Donc pas de YYY, ZZZ et CCC (dague de charname), et pas non plus de XCC, ni YCC, ni ZCC. Bah, j'en perd mon latin. Normalement j'ai tout vérifié, punaises colorées à l'appui ^^, le listing que j'ai donné plus haut devrais être bon. Mais je comprend que je me suis lancé dans un truc potentiellement monstrueux. Enfin, parce que je suis perfectionniste. Je pourrais aussi ne PAS prendre en compte les autres mods et ne pas me casser autant la tête.

Re: [Forgeron] Kurosaï le combineur

Posté : dim. 05 mai 2024, 14:47
par deratiseur
Bon, voilà la V3 que j'avais en tête depuis un moment. Ajouts de 2 composants, Ajout de la prise en charge du module Wares of the Planes (ça vous fait une belle jambe, c'est un mod en anglais^^) par Argent77, Ajout de formules pour combiner les bracelets de défenses, et gros changement pour éviter les bugs/conflits : les objets ne sont plus patchés, ils sont copiés.
Voilà, je vais pouvoir passer à autre chose. Pour le moment ^^

Re: [Forgeron] Kurosaï le combineur

Posté : dim. 05 mai 2024, 18:07
par Selphira
J'avais une erreur dans mon algorithme !
Voici les possibilités corrigées, elles ne s'envolent plus aussi rapidement ! Par contre, cela ne tient pas compte que certains objets ne peuvent être trouvés qu'en un seul exemplaire. Même pour eux, le script génèrera les possibilités où ils seraient échangés plusieurs fois.

Code : Tout sélectionner

1 => 1
2 => 4
3 => 10
4 => 20
5 => 35
6 => 56
7 => 84
8 => 120
Pour le coup, j'ai du revoir l'algorithme, et il sera un peu plus simple à traduire en WEIDU.

Re: [Forgeron] Kurosaï le combineur

Posté : lun. 06 mai 2024, 08:27
par loupgris
Au passage, Thalanthir avec un mod peut avec deux bracelets identiques en faire un d'un cran supérieur. :read: (je m'en suis rendu compte hier).

Re: [Forgeron] Kurosaï le combineur

Posté : lun. 06 mai 2024, 09:14
par deratiseur
yes, ça m'a permit d'arriver à sod suréquipé, principalement grâce à ce mod. Mention spéciale a la formule pour réunir les 3 ceintures contondant/perçant/tranchant. mais c'est du trollisme dans mon propre sujet ^^

Re: [Forgeron] Kurosaï le combineur

Posté : lun. 06 mai 2024, 09:38
par loupgris
Oui dératiseur, j'ai vu pour la ceinture.
Le truc, c'est que là, je suis sur BG1 à Baldur et que je me vois mal cramer mes trois ceintures pour une seule (j'ai 3 CaC). ;)