summaryrefslogblamecommitdiff
path: root/npc/craft/price.txt
blob: 72762a1e7b164aa032f6a547b61fd08ce140bfa8 (plain) (tree)



















































                                                                              
                                                                                                        
                                                             
                                                                                 
                                             



                                 
                                                                                                                                                                                                            

                                                                       
                                                                                                                                                                   

         







                                         

                   






























































                                                






























                                      

                                                   


                               






















                                                                                   
                 
                    


                                                                  












                                                                     
                                                     




                 
// 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;
}