summaryrefslogtreecommitdiff
path: root/npc/craft/price.txt
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2022-05-15 18:13:59 -0300
committerJesusaves <cpntb1@ymail.com>2022-05-15 18:13:59 -0300
commit46361d4055beb2443ed33c6eb765427f71048189 (patch)
tree07b5473a06f69e2b693ea2111cf417758260cae0 /npc/craft/price.txt
parent36e607842a42977c0da539911a579004712c6091 (diff)
downloadserverdata-46361d4055beb2443ed33c6eb765427f71048189.tar.gz
serverdata-46361d4055beb2443ed33c6eb765427f71048189.tar.bz2
serverdata-46361d4055beb2443ed33c6eb765427f71048189.tar.xz
serverdata-46361d4055beb2443ed33c6eb765427f71048189.zip
Price for some recipes is now automatically generated.
This means you'll sell items by the total cost of their materials. It also makes possible to buy the items in theory. And dismantling them is no longer a profitable "cheat"
Diffstat (limited to 'npc/craft/price.txt')
-rw-r--r--npc/craft/price.txt158
1 files changed, 158 insertions, 0 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;
+}
+