// 目标1:给刘备所在部队扩展“自爆”指令,爆炸后,对周边2格范围造成1000点士兵伤害,500点耐久伤害
// 声明一个变量保存刘备的武将id
var liubei_id = 636;
var handle = {
ModifyArmyMenu:ModifyArmyMenu,
};
RegGameHandler(handle); //注册回调函数
// 检查某个武将是否在某个部队里
function IsHeroInArmy(heroid, army){
for (var i=0;i<army.heroids.length;i++){
//console.log(army.heroids[i]);
if (heroid == army.heroids[i]){
return true;
}
}
return false;
}
// 控制台打印系统菜单
var level = 0;
function PrintMenu(menu){
level++;
for (var i=0; i<menu.length; i++){
var item = menu[i];
console.log("l="+level + ",id="+item.id+","+item.name + ",i=" + item.interactable,",a="+item.active);
if (item.children != null){
PrintMenu(item.children);
level--;
}
}
}
function ModifyArmyMenu(armyid, menu){
//PrintMenu(menu);
// 根据回调函数传入的部队id查询部队对象
var army = Story.GetArmy(armyid);
// 如果目标武将在部队里,执行菜单的扩展。
// 因为只有刘备支持,所以只在操作刘备部队时,执行扩展菜单的操作
if (IsHeroInArmy(liubei_id, army)){
// 在顶层菜单最后追加“自爆”
menu.push({
name:"自爆(2)",
interactable:true, // 表示菜单按钮是否可点击
active:true, // 表示菜单按钮是否可见
callback:cmd_zibao, // 点击该菜单按钮时的处理函数回调
});
// 返回true表示本函数修改过menu菜单。
return true;
}
// 返回false表示本函数没有修改过menu菜单。
return false;
}
function cmd_zibao(destarmyid){
// 查询操作的部队对象
var my_army = Story.GetArmy(destarmyid);
// 以my_army.xy为中心,搜索范围
var xyrange = MAP.GetRange({
from:my_army.xy,
max_radius:2,
min_radius:1,
});
// 遍历搜索出来的范围个每一个格子
for (var i=0; i<xyrange.length; i++){
var destxy = xyrange[i];
// 检查当前格子上是否有部队
var destarmy = MAP.GetArmy(destxy);
// destarmy不为空表示有部队
if (destarmy != null){
// 减少1000士兵
destarmy.soldier -= 1000;
// 减少40气力
destarmy.mp -= 40;
// 弹出士兵减少文字
MAP.BubbleText(destarmy.xy, "士兵-1000");
// 弹出气力减少文字
MAP.BubbleText(destarmy.xy, "气力-40");
// 如果部队士兵为0,解散部队
if (destarmy.soldier <= 0){
Story.DoArmyDie(destarmy.id);
}
// continue表示本次循环不继续执行,直接跳到下一次循环
continue;
}
// 查询当前格子上是否有设施
var destfacility = MAP.GetFacility(destxy);
if (destfacility != null){
// 弹出耐久减少文字
MAP.BubbleText(destarmy.xy, "耐久-500");
// 减少设施耐久500
destfacility.hp -= 500;
// TODO:为了简化,就算耐久变成0,也不爆炸。
}
}
// 执行自爆部队的临终遗言
UI.Talk(my_army.heroids[0], "啊...");
// 自己部队解散
Story.DoArmyDie(my_army.id);
// 返回true表示本指令执行完成
return true;
}