// 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, 30); // 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, 18); _fix_cPrice(NoviceWand, 22); _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, 50); // 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, 50); // 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); _fix_cPrice(SaviorArmor, 50); // 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, 37); _fix_cPrice(LeatherGloves, 37); _fix_cPrice(BromenalGloves, 37); _fix_cPrice(ManaGloves, 37); _fix_cPrice(WarlordGloves, 37); _fix_cPrice(AssassinGloves, 37); // 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); _fix_cPrice(SaviorHelmet); // Footwear _fix_cPrice(LeatherBoots); _fix_cPrice(DeepBlackBoots); _fix_cPrice(BromenalBoots); _fix_cPrice(WarlordBoots); _fix_cPrice(AssassinBoots); _fix_cPrice(SaviorBoots, 50); // 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; }