📄 auto_upgrade.c
字号:
// Written by ywygpz
//
// 功能:自动升级武器
//
// 武器,首饰及全身装备均特修
// 黑铁从高到低从库中取出
// 自动判断首饰是否全新,否则丢弃
// 使用前请配置炼制内容、元素、仓库密码、准备地点、各级的首饰和黑铁
// 是否能够升级根据打怪后有否返回武器经验判断,为了保险,连续3次以上没有经验判定为武器可以升级
////////////////////////////////////////////////////////////
// 你必须修改以下内容以选择合适自己的炼制 //
////////////////////////////////////////////////////////////
// 设置炼制内容:魔法、破坏、元素
#define FORGE_TYPE "元素"
// 设置元素:火、冰、雷、风、神圣、暗黑、幻影
#define FORGE_ATOM "火"
// 设置仓库密码
#define PASSWORD "000000"
// 设置炼制时使用的材料
array ar_materials=allocate_array(15);
mapping mp_material;
// 1 -> 2 级别的材料
ar_materials[0] = ([
"jewelrys" : ({ "六绝星环", "六绝星环", "六绝星环", "六绝星环", "六绝星环" }),
"irons" : ({ 3, 4, 5 })
]);
// 2 -> 3 级别的材料
ar_materials[1] = ([
"jewelrys" : ({ "六绝星环", "六绝星环", "六绝星环", "六绝星环", "六绝星环" }),
"irons" : ({ 4, 5, 6 })
]);
// 3 -> 4 级别的材料
ar_materials[2] = ([
"jewelrys" : ({ "六绝星环", "六绝星环", "六绝星环", "六绝星环", "六绝星环" }),
"irons" : ({ 5, 6, 7 })
]);
// 4 -> 5 级别的材料
ar_materials[3] = ([
"jewelrys" : ({ "六绝星环", "六绝星环", "六绝星环", "六绝星环", "六绝星环" }),
"irons" : ({ 6, 7, 8 })
]);
// 5 -> 6 级别的材料
ar_materials[4] = ([
"jewelrys" : ({ "六绝星环", "六绝星环", "六绝星环", "六绝星环", "六绝星环" }),
"irons" : ({ 7, 8, 9 })
]);
// 6 -> 7 级别的材料
ar_materials[5] = ([
"jewelrys" : ({ "六绝星环", "六绝星环", "六绝星环", "六绝星环", "六绝星环" }),
"irons" : ({ 8, 9, 10 })
]);
// 7 -> 8 级别的材料
ar_materials[6] = ([
"jewelrys" : ({ "六绝星环", "六绝星环", "六绝星环", "六绝星环", "六绝星环" }),
"irons" : ({ 9, 10, 11 })
]);
// 8 -> 9 级别的材料
ar_materials[7] = ([
"jewelrys" : ({ "六绝星环", "六绝星环", "六绝星环", "六绝星环", "六绝星环" }),
"irons" : ({ 10, 11, 12 })
]);
// 9 -> 10 级别的材料
ar_materials[8] = ([
"jewelrys" : ({ "六绝星环", "六绝星环", "六绝星环", "六绝星环", "六绝星环" }),
"irons" : ({ 11, 12, 13 })
]);
// 10 -> 11 级别的材料
ar_materials[9] = ([
"jewelrys" : ({ "六绝星环", "六绝星环", "六绝星环", "六绝星环", "六绝星环" }),
"irons" : ({ 12, 13, 14 })
]);
// 11 -> 12 级别的材料
ar_materials[10] = ([
"jewelrys" : ({ "六绝星环", "六绝星环", "六绝星环", "六绝星环", "六绝星环" }),
"irons" : ({ 13, 14, 15 })
]);
// 12 -> 13 级别的材料
ar_materials[11] = ([
"jewelrys" : ({ "六绝星环", "六绝星环", "六绝星环", "六绝星环", "六绝星环" }),
"irons" : ({ 14, 15, 16 })
]);
// 13 -> 14 级别的材料
ar_materials[12] = ([
"jewelrys" : ({ "六绝星环", "六绝星环", "六绝星环", "六绝星环", "六绝星环" }),
"irons" : ({ 15, 16, 17 })
]);
// 14 -> 15 级别的材料
ar_materials[13] = ([
"jewelrys" : ({ "六绝星环", "六绝星环", "六绝星环", "六绝星环", "六绝星环" }),
"irons" : ({ 16, 17, 18 })
]);
// 15 -> 16 级别的材料
ar_materials[14] = ([
"jewelrys" : ({ "六绝星环", "六绝星环", "六绝星环", "六绝星环", "六绝星环" }),
"irons" : ({ 17, 18, 19 })
]);
////////////////////////////////////////////////////////////
// 配置内容到此结束 //
////////////////////////////////////////////////////////////
// 系统设置 - 一般情况下不需要修改
#define FORGE_NPC_NAME "啊翔"
#define WEAPON_NPC_NAME "老胡"
#define PREPARE_CITY "银杏山谷"
#define FORGE_CITY "沙巴克城"
#define IRON_NAME "黑铁"
#define HIT_NPC_NAME "多多"
// 快速卖掉物品
#define QUICKLY 1
#define GET_QUAL(x) (((x) + 500) / 1000)
// 不能保存的物品
array excluded_items = ({ "金创药(中)", "金创药(大)", "魔法药(中)",
"回城卷", "随机传送卷", "金创药(特)"});
mapping forge_cmd=([]);
forge_cmd["破坏"]="@Refine_DC";
forge_cmd["元素"]="@Refine_Atom";
forge_cmd["魔法"]="@Refine_MC";
forge_cmd["火"]="@Refine_Fire";
forge_cmd["冰"]="@Refine_Ice";
forge_cmd["雷"]="@Refine_Light";
forge_cmd["风"]="@Refine_Wind";
forge_cmd["神圣"]="@Refine_Holy";
forge_cmd["暗黑"]="@Refine_Dark";
forge_cmd["幻影"]="@Refine_Pantom";
mapping hit_npc=([]);
hit_npc["多多"]=({211, 183});
hit_npc["老胡"]=({195, 183});
hit_npc["俞公"]=({203, 197});
hit_npc["晶晶"]=({204, 196});
hit_npc["惠莲"]=({214, 128});
hit_npc["双喜"]=({229, 150});
hit_npc["园老板"]=({229, 168});
int weapon_id; //升级武器的ID
int L_weapon_up=0; //武器是否可以升级全局变量,末升级=0,能升级=1
int smart_prepare_jewelrys()
{
mapping mp_npc;
int i,j;
int weapon_level=(int)(me()["equip"][1]["weapon_level"]-1.2);
int jewelrys_amount = sizeof(ar_materials[weapon_level]["jewelrys"]);
string jewelry;
int count = 0;
int jewelry_id;
tell_user("炼制武器:开始购买首饰!");
if(close_to_npc("jewelry", &mp_npc))
{
sell_item(({ ITEM_RING, ITEM_WRIST, ITEM_NECKLACE }), mp_npc, 0, 1);
talk_to(mp_npc);
talk_to(mp_npc, "@buy");
for(i = 0; i < jewelrys_amount; i++)
{
jewelry = ar_materials[weapon_level]["jewelrys"][i];
show_inv(jewelry, 0);
count = current_npc_inv_page["count"];
if(!count)
{
tell_user("炼制武器:没有合适的首饰");
return 0;
}
jewelry_id=current_npc_inv_page[0]["id"];
tell_user(sprintf("炼制武器:购买首饰%O",jewelry));
if(!buy(jewelry, 1, mp_npc))
{
tell_user("炼制武器:购买首饰出错");
return 0;
}
for(j=sizeof(me()["carry"])-1;j>0;j--)
{
if(me()["carry"][j]["id"]==jewelry_id)
{
if(me()["carry"][j]["max_durability"]<me()["carry"][j]["org_durability"])
{
tell_user("炼制武器:首饰持久不足,丢弃");
drop(me()["carry"][j]["id"]);
i--;
break;
}
}
}
}
return 1;
}
return 0;
}
int take_irons()
{
mapping mp_npc;
mapping ob;
int i,j;
int iron_amount;
int iron_quality;
int temp_quality;
int takeout=0;
int weapon_level=(int)(me()["equip"][1]["weapon_level"]-1.2);
tell_user("炼制武器:开始取黑铁!");
if(!close_to_npc("storer", &mp_npc))
{
tell_user("炼制武器:不能到达仓库!");
return 0;
}
iron_amount = sizeof(ar_materials[weapon_level]["irons"]);
for(j=iron_amount-1;j>=0;j--)
{
iron_quality = ar_materials[weapon_level]["irons"][j];
get_storage_info(mp_npc,PASSWORD);
if (! is_array(my_storage_info))
my_storage_info = ({ });
for ( i =sizeof(my_storage_info)-1 ; i >=0 ; i--)
{
if (!is_mapping(ob = my_storage_info[i]))
continue;
if (ob["name"] == IRON_NAME)
{
temp_quality = (int)(GET_QUAL(ob["quality"]));
if(iron_quality == temp_quality)
{
tell_user(sprintf("炼制武器:取出品质为%d的黑铁(%O)\n",iron_quality,ob["id"]));
if(!take(ob["id"], 1, mp_npc))
{
tell_user("炼制武器:取出黑铁失败");
return 0;
}
else
{
takeout++;
break;
}
}
}
if(iron_amount == takeout)
return 1;
}
}
if(iron_amount > takeout)
{
tell_user("炼制武器:没有足够的黑铁");
return 0;
}
return 1;
}
// 返回身上首饰的 ID,特修完毕以后将重新佩戴这些物品
int get_jewelry_id(string part)
{
mapping item;
if (is_mapping(item = me()["equip"][EQUIP_POS(part)]))
return item["id"];
return 0;
}
// 修理所有的首饰
int repare_jewelrys()
{
mixed id1 = get_jewelry_id("项链");
mixed id2 = get_jewelry_id("左手镯");
mixed id3 = get_jewelry_id("右戒指");
int i;
mapping mycarry=me()["carry"];
if(!goto_city_ex("银杏山谷",243,234,6))
{
tell_user("炼制武器:不能到达银杏山谷");
return 0;
}
tell_user("炼制武器:开始特修首饰");
// 修理身上装备
talk_to("光秀");
talk_to("光秀","头盔");
talk_to("光秀","现在修理");
talk_to("光秀","前一步");
talk_to("光秀","项链");
talk_to("光秀","现在修理");
talk_to("光秀","前一步");
talk_to("光秀","衣服");
talk_to("光秀","现在修理");
talk_to("光秀","前一步");
talk_to("光秀","手镯(左)");
talk_to("光秀","现在修理");
talk_to("光秀","前一步");
talk_to("光秀","手镯(右)");
talk_to("光秀","现在修理");
talk_to("光秀","前一步");
talk_to("光秀","戒指(右)");
talk_to("光秀","现在修理");
talk_to("光秀","前一步");
talk_to("光秀","鞋子");
talk_to("光秀","现在修理");
talk_to("光秀","前一步");
// 特修所有的首饰
for(i=0;i<sizeof(mycarry);i++)
{
if(mycarry[i]["item_class"]==20||mycarry[i]["item_class"]==22||mycarry[i]["item_class"]==26)
{
printf("%O",mycarry[i]["id"]);
// 佩戴首饰到合适的位置上以便特修(注意:不能试图佩戴到左戒指,
// 该位置可能是婚戒)
if(mycarry[i]["item_class"]==20)
{
equip(mycarry[i]["id"], EQUIP_POS("项链"));
talk_to("光秀","项链");
} else
if(mycarry[i]["item_class"]==26)
{
equip(mycarry[i]["id"], EQUIP_POS("左手镯"));
talk_to("光秀","手镯(左)");
} else
if(mycarry[i]["item_class"]==22)
{
equip(mycarry[i]["id"], EQUIP_POS("右戒指"));
talk_to("光秀","戒指(右)");
}
talk_to("光秀","现在修理");
talk_to("光秀","前一步");
}
}
talk_to("光秀","不修理");
// 将特修时取下的身上的装备重新佩戴回去
equip(id1, EQUIP_POS("项链"));
equip(id2, EQUIP_POS("左手镯"));
equip(id3, EQUIP_POS("右戒指"));
return 1;
}
int close_to_forge_npc()
{
mapping npc;
if(!goto_city_ex(FORGE_CITY, 0, 0, 6))
{
tell_user("炼制武器:不能到达攻城战地域");
return 0;
}
if(!close_to_npc("weapon", &npc))
{
tell_user("炼制武器:不能到达老胡旁边\n");
return 0;
}
return 1;
}
void forge()
{
tell_user("炼制武器:开始炼制武器");
talk_to(FORGE_NPC_NAME);
talk_to(FORGE_NPC_NAME, "@Refine_Cmd");
talk_to(FORGE_NPC_NAME, forge_cmd[FORGE_TYPE]);
if(FORGE_TYPE=="元素")
talk_to(FORGE_NPC_NAME, forge_cmd[FORGE_ATOM]);
tell_user("炼制武器:取回武器");
talk_to(FORGE_NPC_NAME);
talk_to(FORGE_NPC_NAME, "@GetBack_Cmd");
}
int forge_hit()
{
mapping npc;
//close_to_npc("jewelry", &npc);
unride();
walk_close_to(hit_npc[HIT_NPC_NAME][0], hit_npc[HIT_NPC_NAME][1], 1);
hit(HIT_NPC_NAME);
return 1;
}
int auto_forge()
{
tell_user("炼制武器:开始练刀!");
weapon_id=me()["equip"][1]["id"];
if(!goto_city(PREPARE_CITY,0,0))
{
tell_user("炼制武器:不能到达银杏山谷");
return 0;
}
if(!take_irons())
{
tell_user("炼制武器:没有取到合适的黑铁");
return 0;
}
if(!smart_prepare_jewelrys())
{
tell_user("炼制武器:没有买到合适的首饰");
return 0;
}
if(!repare_jewelrys() )
{
tell_user("炼制武器:特修首饰出错");
return 0;
}
if(!close_to_forge_npc())
{
tell_user("炼制武器:不能到达练刀师傅身旁");
return 0;
}
forge();
L_weapon_up=0;
equip(weapon_id);
forge_hit();
return 1;
}
int is_need_forge()
{
if(me()["equip"][1]["weapon_level"] <= 16.1 &&
L_weapon_up>2)
return 1;
return 0;
}
void on_acquire_exp(int got_exp, int weapon_exp)
{
if(got_exp>10&&weapon_exp==0)
{
if(L_weapon_up<10)
{
if(L_weapon_up==3)
{
tell_user("可以炼制武器了");
}
L_weapon_up++;
}
}
else
{
if(L_weapon_up)
L_weapon_up=0;
}
}
int on_prepare_for_quest()
{
if(is_need_forge())
{
// 本次准备设置包裹空余数量为 100 以便升级武器
keep_bag_spare = 100;
printf("设置包裹空余数量为 100");
}
// 采用缺省流程整备
return 0;
}
void on_post_prepare_for_quest()
{
if(is_need_forge())
{
auto_forge();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -