diff options
Diffstat (limited to 'npc/craft')
-rw-r--r-- | npc/craft/price.txt | 158 | ||||
-rw-r--r-- | npc/craft/recipes.txt | 4 |
2 files changed, 160 insertions, 2 deletions
diff --git a/npc/craft/price.txt b/npc/craft/price.txt new file mode 100644 index 000000000..88e90f5ce --- /dev/null +++ b/npc/craft/price.txt @@ -0,0 +1,158 @@ +// 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) { + consoleinfo("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)); + } + } + debugmes "\n\n-------------------------------------------------------"; + return; +} + +function script fix_cPrice { + // In some cases, we don't care + if (debug) return; + + // Otherwise... + // 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); + 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 last + sleep(750); + fix_cPrice(); + end; +} + diff --git a/npc/craft/recipes.txt b/npc/craft/recipes.txt index 4dd2cbcfc..7f49114d6 100644 --- a/npc/craft/recipes.txt +++ b/npc/craft/recipes.txt @@ -138,9 +138,9 @@ function readAlchemy { mesc "----------"+l("General Boosts")+"----------", 2; showRecipe(HastePotion, StrengthPotion, - StatusResetPotion, + StatusResetPotion, // BROKEN HomunResetPotion, - MoveSpeedPotion, + MoveSpeedPotion, // BROKEN PrecisionPotion, DodgePotion, SacredLifePotion, |