// TMW-2 Script.
// Author:
// Jesusalva
// Description:
// Modifies the sell price for crafts
// Always run this when casting @reloaditemdb
function script _fix_cPrice {
.@const$ = data_to_string(getarg(0));
.@m = getarg(1, 35);
// Shady code by gumi
if (startswith(.@const$, "Craft")) {
// infer the item constant from the craft constant
.@recipe = getarg(0);
.@item = string_to_data(substr(.@const$, 5, getstrlen(.@const$) - 1));
} else {
// infer the craft constant from the item constant
.@recipe = string_to_data(sprintf("Craft%s", .@const$));
.@item = getarg(0);
}
if (.@item <= 0) {
// target item not found
consolebug("ERROR, INVALID ITEM ID DETECTED at _fix_cPrice");
return;
}
.@price = 0;
// More shady code by gumi
for (.@inv = 0; .@inv < 9; ++.@inv) {
.@size = getcraftrecipe(.@recipe, .@inv, .@qty[0], .@item_id[0]);
if (.@size < 0) {
if (.@size == -1) {
// recipe does not exist
break;
}
// inventory does not exist
break;
}
// More shady code to build new price
for (.@it = 0; .@it < .@size; ++.@it) {
.@recipe_item = .@item_id[.@it];
.@recipe_qty = .@qty[.@it];
if (.@recipe_item <= 0) {
break;
}
// Increase the final price
//debugmes("Price %d + %d GP (%dx %s)", .@price, getiteminfo(.@recipe_item, ITEMINFO_SELLPRICE),
// .@recipe_qty, getitemname(.@recipe_item));
.@price += getiteminfo(.@recipe_item, ITEMINFO_SELLPRICE) * .@recipe_qty;
//debugmes("New price: %d", .@price);
}
// Update the final price
if (.@price > 0) {
debugmes("Price for %s adjusted from %d (%d) to %d (%d) GP", getitemname(.@item), getiteminfo(.@item, ITEMINFO_BUYPRICE), getiteminfo(.@item, ITEMINFO_SELLPRICE), .@price * .@m / 10, .@price);
setiteminfo(.@item, ITEMINFO_BUYPRICE, .@price * .@m / 10);
setiteminfo(.@item, ITEMINFO_SELLPRICE, .@price);
//debugmes("New Price for %s is now %d (%d) GP", getitemname(.@item), getiteminfo(.@item, ITEMINFO_BUYPRICE), getiteminfo(.@item, ITEMINFO_SELLPRICE));
}
}
return;
}
function script fix_cPrice {
// In some cases, we don't care
if (debug) return;
// Otherwise...
freeloop(true);
// Fix potions prices
_fix_cPrice(AgiPotionA);
_fix_cPrice(AgiPotionB);
_fix_cPrice(AgiPotionC);
_fix_cPrice(VitPotionA);
_fix_cPrice(VitPotionB);
_fix_cPrice(VitPotionC);
_fix_cPrice(IntPotionA);
_fix_cPrice(IntPotionB);
_fix_cPrice(IntPotionC);
_fix_cPrice(DexPotionA);
_fix_cPrice(DexPotionB);
_fix_cPrice(DexPotionC);
_fix_cPrice(LukPotionA);
_fix_cPrice(LukPotionB);
_fix_cPrice(LukPotionC);
//_fix_cPrice(HastePotion); // 240 -> 75
//_fix_cPrice(StrengthPotion); // 240 -> 195
// TODO: Scrolls? Reagents?
// And reagents should happen before potions
// And weapons
_fix_cPrice(WoodenSword);
_fix_cPrice(BugSlayer);
_fix_cPrice(ShortGladius);
_fix_cPrice(Backsword);
_fix_cPrice(ShortSword);
_fix_cPrice(Kitana);
_fix_cPrice(BoneKnife);
_fix_cPrice(LongSword);
_fix_cPrice(RockKnife);
_fix_cPrice(DivineSword);
// And two hand weapons
_fix_cPrice(MiereCleaver);
_fix_cPrice(Broadsword);
_fix_cPrice(Halberd);
_fix_cPrice(ImmortalSword);
// And archery
_fix_cPrice(ShortBow);
_fix_cPrice(ForestBow);
_fix_cPrice(ElficBow);
_fix_cPrice(ChampionshipBow);
_fix_cPrice(BansheeBow);
// And magic
_fix_cPrice(TrainingWand, 22);
_fix_cPrice(NoviceWand, 27);
_fix_cPrice(ApprenticeWand);
_fix_cPrice(LeaderWand);
_fix_cPrice(MysticWand);
// And Firestaves
_fix_cPrice(PynRevolver);
_fix_cPrice(PynRifle);
_fix_cPrice(PynGatling);
_fix_cPrice(PynShotgun);
// And misc
_fix_cPrice(TerranitePants);
_fix_cPrice(TerraniteArmor);
_fix_cPrice(Skypiercer, 40);
// And shields
_fix_cPrice(WoodenShield);
_fix_cPrice(BladeShield);
_fix_cPrice(BraknarShield);
_fix_cPrice(BritShield);
_fix_cPrice(BromenalShield);
_fix_cPrice(BlueKnightShield);
_fix_cPrice(SteelShield);
_fix_cPrice(DragonShield);
_fix_cPrice(SaviorShield, 40);
// Chest Armor
_fix_cPrice(LeatherShirt);
_fix_cPrice(LieutenantArmor);
_fix_cPrice(Chainmail);
_fix_cPrice(CopperArmor);
_fix_cPrice(LightPlatemail);
_fix_cPrice(GoldenLightPlatemail);
_fix_cPrice(WarlordPlate);
_fix_cPrice(GoldenWarlordPlate);
_fix_cPrice(BromenalChest);
_fix_cPrice(AssassinChest);
// Pants
//_fix_cPrice(JeansShorts);
_fix_cPrice(RaidTrousers);
_fix_cPrice(LeatherTrousers);
_fix_cPrice(JeansChaps);
_fix_cPrice(SilkPants);
_fix_cPrice(ChainmailSkirt); // <= Pre-Fortress
_fix_cPrice(BromenalPants); // <= Fortress
_fix_cPrice(WarlordPants);
_fix_cPrice(AssassinPants);
// Gloves (more expensive due ASPD)
_fix_cPrice(SilkGloves, 40);
_fix_cPrice(LeatherGloves, 40);
_fix_cPrice(BromenalGloves, 40);
_fix_cPrice(ManaGloves, 40);
_fix_cPrice(WarlordGloves, 40);
_fix_cPrice(AssassinGloves, 40);
// Helmets
_fix_cPrice(InfantryHelmet);
_fix_cPrice(DesertHelmet);
_fix_cPrice(BromenalHelmet);
_fix_cPrice(CandleHelmet);
_fix_cPrice(CrusadeHelmet);
_fix_cPrice(WarlordHelmet);
_fix_cPrice(VikingHelmet);
_fix_cPrice(TerraniteHelmet); // Cheaper than the real cost due 2x Earth Powder
_fix_cPrice(CenturionHelmet);
_fix_cPrice(BullHelmet);
_fix_cPrice(DarkHelm);
_fix_cPrice(DarkKnightHelmet);
_fix_cPrice(SamuraiHelmet);
// We're done
freeloop(false);
// Manual fixes (handling _fix_cPrice shortcomings)
setiteminfo(DarkCrystal, ITEMINFO_SELLPRICE, rand2(150, 250));
return;
}
- script craft_price_fix -1,{
end;
OnCall:
atcommand("@reloaditemdb");
fix_cPrice();
end;
OnInit:
bindatcmd "reloaditemdb2", "craft_price_fix::OnCall", 99, 100, 1;
// This should be called after craft_db is loaded
sleep(750);
fix_cPrice();
end;
}