Bonsoir à tous,
en utilisant un peu les fonctions bd et regardant leurs fonctionnement (désolé si je suis en retard...) j'ai eu une idée... On peu faire une bd contenant tout (ou de moins beaucoup) des éléments nécessaire pour créé un objet magique au moyen d'une forge... voici le code nécessaire pour initialiser le contenu de la bd... j'ai mis 4 entré dans la bd, on exécute une fois ce script et après on récupère les fichier de bd dans le dossier datebase pour le partager avec d'autre... ou le réutiliser dans nos module... Pour l'instant le sort lancé et l'élément principale donc le même sort ne peux pas créé deux objet différent et chacun des objet créé nécessite deux composantes...
void addForgeableItem(int spell, string component1, string component2, string result);
void main()
{
addForgeableItem(SPELL_CURE_MINOR_WOUNDS,"NW_IT_THNMISC001","NW_IT_THNMISC001","nw_it_mpotion001");
addForgeableItem(SPELL_HASTE,"NW_IT_MSMLMISC19","nw_it_mboots010","nw_it_mboots005");
addForgeableItem(SPELL_LIGHT,"NW_IT_GEM015","NW_IT_MRING023","nw_it_mring010");
addForgeableItem(SPELL_RAY_OF_FROST,"NW_WSWMLS002","NW_IT_GEM005","nw_wswmls007");
}
void addForgeableItem(int spell, string component1, string component2, string result)
{
int forgeableItem = GetCampaignInt("FORGE_PRINCIPALE","NBR_FORGEABLE_ITEM");
forgeableItem ++;
SetCampaignInt("FORGE_PRINCIPALE","SPELL_ITEM_" + IntToString(forgeableItem),spell);
SetCampaignString("FORGE_PRINCIPALE","COMPONENT1_ITEM_" + IntToString(forgeableItem),component1);
SetCampaignString("FORGE_PRINCIPALE","COMPONENT2_ITEM_" + IntToString(forgeableItem),component2);
SetCampaignString("FORGE_PRINCIPALE","RESULT_ITEM_" + IntToString(forgeableItem),result);
SetCampaignInt("FORGE_PRINCIPALE","NBR_FORGEABLE_ITEM",forgeableItem);
SendMessageToPC(GetFirstPC(),"NBR : " + IntToString(forgeableItem));
}
En suite dans l'objet que l'on veux se servir comme forge on utilise cette fonction :
void main()
{
int forgeableItem = GetCampaignInt("FORGE_PRINCIPALE","NBR_FORGEABLE_ITEM");
object component1 = GetFirstItemInInventory();
object component2 = GetNextItemInInventory();
int trouver;
if(GetNextItemInInventory() != OBJECT_INVALID)
return;
int i;
for(i = 1 ; i <= forgeableItem ; i++)
{
SendMessageToPC(GetFirstPC(),IntToString(i));
if(GetLastSpell() == GetCampaignInt("FORGE_PRINCIPALE","SPELL_ITEM_" + IntToString(i)))
{
if(GetTag(component1) != GetCampaignString("FORGE_PRINCIPALE","COMPONENT1_ITEM_" + IntToString(i)))
{
if(GetTag(component2) != GetCampaignString("FORGE_PRINCIPALE","COMPONENT1_ITEM_" + IntToString(i)))
return;
else if(GetTag(component1) == GetCampaignString("FORGE_PRINCIPALE","COMPONENT2_ITEM_" + IntToString(i)))
{trouver = i; i = forgeableItem+1;}
}else if(GetTag(component2) == GetCampaignString("FORGE_PRINCIPALE","COMPONENT2_ITEM_" + IntToString(i)))
{trouver = i; i = forgeableItem+1;}
}
}
if( trouver > forgeableItem)
return;
DestroyObject(component1);
DestroyObject(component2);
CreateItemOnObject(GetCampaignString("FORGE_PRINCIPALE","RESULT_ITEM_" + IntToString(trouver)));
}
Je sais qu'il y a déjà des script de forge... mais je trouve le miens simple à utiliser...
De plus si vous voulez vous créé des forges spécials (exemple la forge de telle clan de nain ne créé pas les mêmes objet) vous faites juste remplacé FORGE_PRINCIPALE par FORGE_DES_NAINS
vous refête une initialisation dans un module et vous vous resservé du main sur la forge. Faite attention au script d'initialisation a utilisé une seule fois car il ajoutera les entrées a chaque exécution...
J'espère que tout est clair...
En passant je vous donne un autre script que vous pouvez placé par exemple dans une fontaine qui remplirait des bouteilles vides de sont liquides pour en faire une potion... danc cette exemple elle transforme les bouteilles vide en potion de soins légers. À mettre dans le on close ou dans le on open
void main()
{
object oInInven = GetFirstItemInInventory();
while(oInInven != OBJECT_INVALID)
{
if(GetTag(oInInven) == "NW_IT_THNMISC001")
{
DestroyObject(oInInven);
CreateItemOnObject("nw_it_mpotion001");
return;
}
oInInven = GetNextItemInInventory();
}
}
Si vous avez des questions ne vous géner pas... si c'est pour me dire que je fait beacoup de faute de français, c'est pas nécessaire de me le dire...
je le sais, l'important pour l'instant c'est que mon code marche