⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prepare2.c

📁 百宝箱3.27传奇3GQ外挂.支持私服.
💻 C
字号:
// Written by BBX workgroup
// Release: 2004/5/28

// 功能:自定义准备
// 流程:
// 1. 前往仓库处理物品,保存所有有价值的物品
// 2. 前往材料商
// 3. 前往武器店
// 4. 前往装备商
// 5. 前往首饰店
// 6. 前往鞋店
// 7. 前往杂货商
// 8. 前往药店
// 该版本为简化版本,去掉大部分判断

// 准备物品的数量
string life_potion_1 = "金创药(中)";
int    life_num_1 = 300;
string life_potion_2 = "金创药(大)";
int    life_num_2 = 10;
string mana_potion_1 = "魔法药(中)";
int    mana_num_1 = 300;
string talisman_item_1 = "护身符(小)";
int    talisman_num_1 = 10;

// 不能保存的物品
array excluded_items = ({ life_potion_1, life_potion_2, mana_potion_1,
                          "回城卷", "随机传送卷", "行会回城卷",
                          talisman_item_1 });

// 快速卖掉物品
#define QUICKLY         1

// 如果道具耐久低于一定程度(<=durability),就修理道具
void repair_item(string part, mixed npc, int durability);

// 准备
// 如果失败了,返回 -1 终止
int on_prepare_for_quest()
{
    mapping my = me();
    mapping mc;
    mapping item;
    string  item_name;
    mixed   npc;
    int     i;
    int     n;

    tell_user("TIP: 前往仓库处理物品");
    close_to_npc("storer", &npc);

    // 保存所有有价值物品
    // 取身上包裹
    mc = my["carry"];

    // 注意:循环从到大小是因为,身上第 n 号物品保存进入仓库
    // 以后,n + 1 号到最后一个物品会自动前移。
    for (i = sizeof(mc) - 1; i >= 0; i--)
    {
        // 取包裹中第 i 个物品
        item = mc[i];

        // 取物品的名字
        item_name = item["name"];

        if (is_excluded_item(item))
            // 特殊物品,忽略,主要是针对主备用武器而言, 这
            // 两个道具都应该被略过,不能存入仓库。 当备用武
            // 器升级以后,会自动取消特殊待遇。
            continue;

        if (item["item_class"] == ITEM_MINE)
        {
            // 矿物,判断处理方法
            if (get_mine_treatment(item) == ITEM_STORED)
            {
                printf("保存:%s(%d)\n", item["name"], item["id"]);
                store(-i, npc);
            }

            continue;                
        }
        
        if (is_good_item(item) ||
            get_item_treatment(item_name) == ITEM_STORED ||
            get_item_treatment(item_name) == ITEM_AUTO_APPLY)
        {
            // 保存物品
            if (member_array(item_name, excluded_items) != -1)
                // 不保存这些物品
                continue;

            printf("保存:%s(%d)\n", item["name"], item["id"]);
            store(-i, npc);
            continue;
        }
    }

    // 前往材料商
    tell_user("TIP: 前往材料商出售材料");
    close_to_npc("material", &npc);
    sell_item(({ ITEM_MATERIAL }), npc, 0, QUICKLY);

    // 前往武器店
    tell_user("TIP: 前往武器店修理装备,处理物品");
    talk_to(npc);
    talk_to(npc, "特殊修理");
    talk_to(npc, "现在修理");
    sell_item(({ ITEM_WEAPON, ITEM_MINE }), npc, 0, QUICKLY);

    // 前往装备商
    tell_user("TIP: 前往服装店修理装备,处理物品");
    close_to_npc("armor", &npc);
    sell_item(({ ITEM_HELMET, ITEM_ARMOR, ITEM_ARMOR_WOMAN }), npc, 0, QUICKLY);
    repair_item("衣服", npc, 10000);

    // 前往首饰店
    tell_user("TIP: 前往首饰店修理首饰,处理物品");
    close_to_npc("jewelry", &npc);
    sell_item(({ ITEM_RING, ITEM_WRIST, ITEM_NECKLACE }), npc, 0, QUICKLY);
    repair_item("项链",   npc, 2000);
    repair_item("左手镯", npc, 2000);
    repair_item("右手镯", npc, 2000);
    repair_item("左戒指", npc, 2000);
    repair_item("右戒指", npc, 2000);

    // 丢弃身上多余的不重要的鞋子
    drop_item(({ ITEM_BOOT }));

    // 丢弃耐久较低的符具(<5)
    clear_talisman();

    // 前往杂货店
    tell_user("TIP: 前往杂货店处购买道具,处理物品");
    close_to_npc("item", &npc);
    sell_item(({ ITEM_ITEM, ITEM_TOOL, ITEM_TALISMAN }), npc,
              excluded_items, QUICKLY);
    if (get_item_treatment("回城卷") != ITEM_DONT_CARE &&
        (n = get_item_amount("回城卷") - 6) > 0)
    {
        printf("卖掉回城卷x%d", n);
        sell("回城卷", n, npc, 0, QUICKLY);
    }
    if (! buy_item("回城卷", 6, npc))
        buy_item("地牢逃脱卷", 1, npc);
    buy_item(talisman_item_1, talisman_num_1, npc);

    // 前往药店
    tell_user("TIP: 前往药店处购买道具,处理物品");
    close_to_npc("potion", &npc);
    sell_item(({ ITEM_POTION }), npc, excluded_items, QUICKLY);
    buy_item(life_potion_1, life_num_1 / 4, npc);
    buy_item(life_potion_1, life_num_1 / 3, npc);
    buy_item(life_potion_1, life_num_1 / 2, npc);
    buy_item(life_potion_1, life_num_1 * 2 / 3, npc);
    buy_item(life_potion_1, life_num_1, npc);
    buy_item(life_potion_2, life_num_1 / 4, npc);
    buy_item(life_potion_2, life_num_1 / 3, npc);
    buy_item(life_potion_2, life_num_1 / 2, npc);
    buy_item(life_potion_2, life_num_1 * 2 / 3, npc);
    buy_item(life_potion_2, life_num_1, npc);
    buy_item(mana_potion_1, mana_num_1 / 4, npc);
    buy_item(mana_potion_1, mana_num_1 / 3, npc);
    buy_item(mana_potion_1, mana_num_1 / 2, npc);
    buy_item(mana_potion_1, mana_num_1 * 2 / 3, npc);
    buy_item(mana_potion_1, mana_num_1, npc);

    // 准备完毕,返回 1 表示成功
    return 1;
}

// 如果道具耐久低于一定程度,就修理道具
void repair_item(string part, mixed npc, int durability)
{
    mapping item;
    int     pos;

    pos = get_equip_item_index(part);
    if (pos == -1)
        // 没有装备,无法修理
        return;

    // 取装备信息
    item = me()["equip"][pos];

    // 判断耐久度
    if (item["durability"] > durability)
        // 不需要修理
        return;

    // 卸下道具,修理,然后再装备
    unequip(item["id"]);
    repair(item["id"], npc);
    equip(item["id"]);

    /* Return OK */
    return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -