// TMW-2 Script
// Author:
// Jesusalva
// Description:
// Nivalis shopkeeper & forge master. He deals with the equipment which Nicholas,
// Silversmith and Nahred doesn't works with.
020-5,31,25,0 script Bracco NPC_M_SHOPKEEPER,{
goto L_Start;
// Meltdown( item, price, {id1, amount1}, {id2, amount2}... )
function Meltdown {
if (getargcount() < 2 || getargcount() % 2 != 0)
return Exception("Faulty learning Meltdown command invoked - error");
.@index=getarg(0);
.@price=getarg(1);
mesn;
mesc l("Really melt down your @@? It'll cost you @@ GP. This action cannot be undone!", getinvindexlink(.@index), .@price), 1;
next;
if (askyesno() == ASK_NO || Zeny < .@price)
return;
failedremovecardsindex .@index, 0;
Zeny-=.@price;
// TODO: Inventoryplace
// Add Items (if inventory is full, your fault and not mine)
for (.@i=2;.@i < getargcount(); .@i++) {
if (getarg(.@i+1)) // It may be zero
getitem getarg(.@i), getarg(.@i+1);
.@i++;
}
return;
}
// blacksmith_create( BaseItem1, Amount, BaseItem2, Amount, PrizeItem, Price )
function blacksmith_create {
.@base1=getarg(0);
.@amon1=getarg(1);
.@base2=getarg(2);
.@amon2=getarg(3);
.@prize=getarg(4);
.@price=getarg(5);
mesn;
mesq l("Do you want to craft @@? For that I will need:", getitemlink(.@prize));
mesc l("@@/@@ @@", countitem(.@base1), .@amon1, getitemlink(.@base1));
mesc l("@@/@@ @@", countitem(.@base2), .@amon2, getitemlink(.@base2));
mesc l("@@/@@ GP", format_number(Zeny), format_number(.@price));
select
l("Yes"),
l("No");
if (@menu == 2)
return;
if (countitem(.@base1) >= .@amon1 &&
countitem(.@base2) >= .@amon2 &&
Zeny >= .@price) {
inventoryplace .@prize, 1;
delitem .@base1, .@amon1;
delitem .@base2, .@amon2;
Zeny = Zeny - .@price;
getitem .@prize, 1;
.@xp=getiteminfo(.@base1, ITEMINFO_SELLPRICE)*.@amon1+getiteminfo(.@base2, ITEMINFO_SELLPRICE)*.@amon2;
.@xp=.@xp*2/3;
getexp .@xp, rand(1,10);
mes "";
mesn;
mesq l("Many thanks! Come back soon.");
} else {
speech S_FIRST_BLANK_LINE,// | S_LAST_NEXT,
l("You don't have enough material, sorry.");
}
return;
}
// Start
L_Start:
mesn;
mesq l("Welcome to my fine establishment!");
mes "";
select
l("Trade"),
l("I'm actually looking for an item forged!"),
l("I would like an item melted!"),
l("Leave");
mes "";
if (@menu == 2)
goto L_Forge;
if (@menu == 3)
goto L_Meltdown;
closedialog;
if (@menu == 1)
shop .name$;
goodbye;
close;
// Note: the prices are absurd atm, but hey hey, every single one of them are cap items currently
L_Forge:
mesn;
mesq l("Well, if you want warrior craft, perhaps you should look for @@ or @@.", l("Nicholas"), l("Nahrec"));
mes "";
select
l("Nothing, sorry!"),
l("I want leather armbands!"),
l("I want copper armbands!"),
l("I want iron armbands!");
mes "";
switch (@menu) {
case 1:
close; break;
case 2:
blacksmith_create(LeatherPatch, 50, TitaniumIngot, 1, Armbands, 6500);
break;
case 3:
blacksmith_create(CopperIngot, 30, Coal, 40, CopperArmbands, 11000);
break;
case 4:
blacksmith_create(IronIngot, 90, Coal, 80, IronArmbands, 21000);
break;
}
goto L_Forge;
L_Meltdown:
mesn;
mesc l("What item do you want to melt down? This is irreversible, and may return some ingots to you, but there is no way to tell how many you'll receive!"), 1;
mesc l("Each item have it's own tax.");
.@it=requestitemindex();
delinventorylist();
getinventorylist();
.@id=@inventorylist_id[.@it];
mes "";
// Returns 50~70% of invested ingots, rounded down. Never returns Coal.
switch (.@id) {
case RustyKnife:
Meltdown(.@it, 15, IronOre, any(0, 0, 0, 0, 1)); // Exception
break;
case Knife:
Meltdown(.@it, 25, IronOre, any(0, 0, 0, 1)); // Exception
break;
case SharpKnife:
Meltdown(.@it, 50, IronOre, any(0, 0, 1)); // Exception
break;
case Dagger:
Meltdown(.@it, 100, IronOre, rand2(0,1)); // Exception
break;
case WoodenSword:
Meltdown(.@it, 500, WoodenLog, rand2(5,10)); // Exception: 25~50% returned
break;
case BugSlayer:
Meltdown(.@it, 1000, IronIngot, rand2(4,5));
break;
case ShortGladius:
Meltdown(.@it, 1500, IronIngot, rand2(6,8));
break;
case Backsword:
Meltdown(.@it, 2000, IronIngot, rand2(9,12), TinIngot, rand2(1,2));
break;
case ShortSword:
Meltdown(.@it, 2500, IronIngot, rand2(12,16), TinIngot, rand2(2,3));
break;
case MiereCleaver:
Meltdown(.@it, 2000, SilverIngot, rand2(6,8));
break;
case Broadsword:
Meltdown(.@it, 2000, SilverIngot, rand2(13,18));
break;
// Wands have much worse rates and are more expensive because they are sold
case TrainingWand:
Meltdown(.@it, 12000, WoodenLog, rand2(1,14), ManaPiouFeathers, rand2(0, 21), FluoPowder, rand2(0,3));
break;
case NoviceWand:
Meltdown(.@it, 12000, WoodenLog, rand2(2,28), ManaPiouFeathers, rand2(1, 42), FluoPowder, rand2(0,5));
break;
case ApprenticeWand:
Meltdown(.@it, 12000, WoodenLog, rand2(3,42), ManaPiouFeathers, rand2(2, 63), FluoPowder, rand2(0,8));
break;
case LeaderWand:
Meltdown(.@it, 12000, WoodenLog, rand2(5,70), ManaPiouFeathers, rand2(3, 84), FluoPowder, rand2(2,10), GemPowder, rand2(0,2));
break;
case LegendaryWand:
Meltdown(.@it, 12000, WoodenLog, rand2(7,77), GoldenApple, rand2(0, 1), FluoPowder, rand2(4,14), GemPowder, rand2(1,3));
break;
// Shields - same rule (except leather shield)
case RoundLeatherShield:
Meltdown(.@it, 500, LeatherPatch, rand2(0,1));
break;
case LeatherShield:
Meltdown(.@it, 500, LeatherPatch, rand2(1,3));
break;
case WoodenShield:
Meltdown(.@it, 1500, WoodenLog, rand2(20,28), LeatherPatch, 1);
break;
case BladeShield:
Meltdown(.@it, 1500, IronIngot, rand2(7,9), TitaniumIngot, 1);
break;
// Etc
case GoldenRing:
Meltdown(.@it, 1500, GoldPieces, rand2(2,3));
break;
default:
mesn;
mesq l("I cannot melt this. I only melt down equipment, and not everything I know how to!");
next;
break;
}
goto L_Meltdown;
OnInit:
.@npcId = getnpcid(.name$);
setunitdata(.@npcId, UDT_HEADTOP, NPCEyes);
setunitdata(.@npcId, UDT_HEADMIDDLE, TneckSweater);
setunitdata(.@npcId, UDT_HEADBOTTOM, RaidTrousers);
setunitdata(.@npcId, UDT_WEAPON, FurBoots);
setunitdata(.@npcId, UDT_HAIRSTYLE, 26);
setunitdata(.@npcId, UDT_HAIRCOLOR, 2);
tradertype(NST_MARKET);
sellitem LeatherShirt, 15000, 1;
sellitem LeatherShield, 5000, 1;
sellitem ShortBow, 11200, 1;
sellitem ArrowAmmoBox,-1,rand(8,12);
sellitem IronAmmoBox,-1,rand(3,5);
npcsit;
.sex = G_MALE;
.distance = 5;
end;
OnWed0000:
OnThu0400:
OnFri0800:
OnSat1200:
OnSun1600:
OnMon2000:
restoreshopitem LeatherShirt, 15000, 1;
restoreshopitem LeatherShield, 5000, 1;
restoreshopitem ShortBow, 11200, 1;
restoreshopitem ArrowAmmoBox,rand(8,12);
restoreshopitem IronAmmoBox,rand(3,5);
end;
}