5
« dnia: 2011-05-22, 10:42 »
Witam. Podczas tworzenia kowalstwa pojawił mi się problem z zwracaniem zmiennych. Mianowicie, kiedy hero ulepszy przy kowadle broń to posiada jej pierwotne właściwości. Efekt jest jedynie widoczny przy wywołaniu za pomocą kodu żądanej broni. Próbowałem użyć funkcji B_GiveInvItems(); i AI_RemoveInvItems(); ale niestety podczas kucia broni wywalało mnie wtedy z gry ;/
wszelkie oparacje jakie podjąłem przy pisaniu skryptu:
//****************************
// PC_Smithabit
//****************************
func void Smith (var int wybor)
{
const string ulepszyles_itm ="Ulepszyłeś przedmiot!";
const string brak_itm="Aktualnie nie nosisz tego typu przedmiotu!";
const string brak_skl="Brak składników!";
AI_StopProcessInfos(self);
self.aivar[AIV_INVINCIBLE]=FALSE;
var C_ITEM weap_zwarcie; weap_zwarcie = Npc_GetEquippedMeleeWeapon(hero);
var c_item weap_dystans; weap_dystans = Npc_GetEquippedRangedWeapon(hero);
var c_item armor; armor = Npc_GetEquippedArmor(hero);
if(kowalstwo == true) {
if(wybor == 1) {
if((Npc_HasEquippedMeleeWeapon(hero)) && (Npc_HasItems(hero, ItMiNugget) >= 150) && (Npc_HasItems(hero, ItAt_Teeth_01) >= 2)) {
AI_EquipBestMeleeWeapon (hero);
PrintScreen(ulepszyles_itm,-1,50,"font_old_10_white.tga",3);
obrazenia = weap_zwarcie.damageTotal + 10;
wymagania = weap_zwarcie.cond_value[2] + 5;
koszt = weap_zwarcie.value + 20;
B_GiveInvItems (hero,NULL, ItMiNugget, 150);
B_GiveInvItems (hero,NULL, ItAt_Teeth_01, 2);
CreateInvItem (hero,weap_zwarcie);
// B_GiveInvItems (NULL,hero, weap_zwarcie, 1); // kiedy wyrzucę komentarz podczas kucia mnie wywali
// Npc_RemoveInvItem (hero,weap_zwarcie);
}
else if ((Npc_HasItems(hero, ItMiNugget) < 150) && (Npc_HasItems(hero, ItAt_Teeth_01) < 2)) {
PrintScreen(brak_skl,-1,50,"font_old_10_white.tga",3);
}
else {
PrintScreen(brak_itm,-1,50,"font_old_10_white.tga",3);
};
};
if (wybor == 2) {
if((Npc_HasEquippedRangedWeapon(hero)) && (Npc_HasItems(hero, ItMiNugget) >= 250) && (Npc_HasItems(hero, ItAt_Bloodfly_02) >= 4))
{
AI_EquipBestRangedWeapon (hero);
PrintScreen(ulepszyles_itm,-1,50,"font_old_10_white.tga",3);
obrazenia = weap_dystans.damageTotal + 10;
wymagania = weap_dystans.cond_value[2] + 5;
koszt = weap_dystans.value + 20;
B_GiveInvItems (hero,NULL, ItMiNugget, 150);
B_GiveInvItems (hero,NULL, ItAt_Teeth_01, 2);
CreateInvItem (hero,weap_dystans);
// B_GiveInvItems (NULL,hero, weap_dystans, 1); // kiedy wyrzucę komentarz podczas kucia mnie wywali
Npc_RemoveInvItem (hero,weap_dystans);
}
else if ((Npc_HasItems(hero, ItMiNugget) < 250) && (Npc_HasItems(hero, ItAt_Bloodfly_02) < 4)) {
PrintScreen(brak_skl,-1,50,"font_old_10_white.tga",3);
}
else {
PrintScreen(brak_itm,-1,50,"font_old_10_white.tga",3);
};
};
if(wybor == 3) {
if((Npc_HasEquippedArmor(hero)) && (Npc_HasItems(hero, ItMiNugget) >= 500) && (Npc_HasItems(hero, ItAt_Swampshark_01) >= 1)) {
AI_EquipBestArmor (hero);
PrintScreen(ulepszyles_itm,-1,50,"font_old_10_white.tga",3);
obrona_bron_ostra = armor.protection [PROT_EDGE] + 5;
obrona_bron_nieostra = armor.protection [PROT_BLUNT] + 5;
obrona_pociski = armor.protection [PROT_POINT] + 2;
obrona_ogien = armor.protection [PROT_FIRE] + 1;
obrona_magia = armor.protection [PROT_MAGIC] + 1;
koszt = armor.value + 50;
B_GiveInvItems (hero,NULL, ItMiNugget, 150);
B_GiveInvItems (hero,NULL, ItAt_Teeth_01, 2);
CreateInvItem (hero,armor);
// B_GiveInvItems (NULL,hero, armor, 1); // kiedy wyrzucę komentarz podczas kucia mnie wywali
Npc_RemoveInvItem (hero,armor);
}
else if ((Npc_HasItems(hero, ItMiNugget) < 500) && (Npc_HasItems(hero, ItAt_Swampshark_01) < 1)) {
PrintScreen(brak_skl,-1,50,"font_old_10_white.tga",3);
}
else {
PrintScreen(brak_itm,-1,50,"font_old_10_white.tga",3);
};
};
};
};
func void SMITHABIT_S1 ()
{
if(Npc_IsPlayer(self))
{
self.aivar[AIV_INVINCIBLE]=TRUE;
Ai_ProcessInfos (hero);
};
};
//-------------------- Odejdź od kowadła -------------------------
INSTANCE PC_NoSMITH (c_Info)
{
npc = PC_Hero;
nr = 999;
condition = PC_NoSMITH_Condition;
information = PC_NoSMITH_Info;
important = 0;
permanent = 1;
description = DIALOG_ENDE;
};
FUNC INT PC_NoSMITH_Condition()
{
return 1;
};
func VOID PC_NoSMITH_Info()
{
AI_StopProcessInfos (self);
self.aivar[AIV_INVINCIBLE]=FALSE;
};
//---------------------- Broń w zwarciu --------------------------------------
INSTANCE SMITH_SWORD (C_INFO)
{
npc = PC_Hero;
condition = SMITH_SWORD_Condition;
information = SMITH_SWORD_Info;
important = 0;
permanent = 1;
description = "Ulepsz broń do walki w zwarciu (150 bryłek rudy, 2x kły)";
};
FUNC INT SMITH_SWORD_Condition()
{
return 1;
};
func void SMITH_SWORD_Info ()
{
Smith (1);
};
//---------------------- Broń dystansowa --------------------------------------
INSTANCE SMITH_BOW (C_INFO)
{
npc = PC_Hero;
condition = SMITH_BOW_Condition;
information = SMITH_BOW_Info;
important = 0;
permanent = 1;
description = "Ulepsz broń dystansową (250 bryłek rudy, 4x żądła)";
};
FUNC INT SMITH_BOW_Condition()
{
return 1;
};
func void SMITH_BOW_Info ()
{
Smith (2);
};
//---------------------- Pancerze --------------------------------------
INSTANCE SMITH_ARMOR (C_INFO)
{
npc = PC_Hero;
condition = SMITH_ARMOR_Condition;
information = SMITH_ARMOR_Info;
important = 0;
permanent = 1;
description = "Ulepsz pancerz (500 bryłek rudy, 1x skóra błotnego węża)";
};
FUNC INT SMITH_ARMOR_Condition()
{
return 1;
};
func void SMITH_ARMOR_Info ()
{
Smith (3);
};
no i ofc deklaracje zmiennych w Stroy_Globals.
Tak krótko reasumując - chcę aby poprzez ten monolog ulepszało nam broń/pancerz który aktualnie mamy na sobie założony ;)
Ps. W jaki sposób zmienić warunek skorzystania z np. kowadła (aby zamiast rozgrzanej stali wymagałoby był np. tylko młot kowalski, bo nie mogłem tego nigdzie wyszukać.)