From f2bfa7cd8414e40d420eb10d58f765637f33c43c Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Sat, 30 Dec 2017 17:25:39 +0800 Subject: [PATCH] Update Enemy Detail --- libs/enemys.js | 52 ++++++++++++++++++++++++--------------- libs/events.js | 27 +++++++++++++++++++-- libs/ui.js | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 123 insertions(+), 22 deletions(-) diff --git a/libs/enemys.js b/libs/enemys.js index a5c970fe..759b505a 100644 --- a/libs/enemys.js +++ b/libs/enemys.js @@ -109,27 +109,39 @@ enemys.prototype.getSpecialText = function (enemyId) { ////// 获得每个属性的文字提示 ////// enemys.prototype.getSpecialHint = function (enemy, special) { + if (!core.isset(special)) { + var hints = []; + for (var i=1;i<100;i++) { + if (this.hasSpecial(enemy.special, i)) { + var hint=this.getSpecialHint(enemy, i); + if (hint!='') + hints.push(hint); + } + } + return hints; + } + switch (special) { - case 1: return "怪物首先攻击"; - case 2: return "怪物无视勇士的魔防"; - case 3: return "勇士每回合最多只能对怪物造成1点伤害"; - case 4: return "怪物每回合攻击2次"; - case 5: return "怪物每回合攻击3次"; - case 6: return "怪物每回合攻击"+(enemy.n||4)+"次"; - case 7: return "战斗前,怪物附加角色防御的"+parseInt(100*core.values.breakArmor)+"%作为伤害"; - case 8: return "战斗时,怪物每回合附加角色攻击的"+parseInt(100*core.values.counterAttack)+"%作为伤害,无视角色防御"; - case 9: return "战斗前,怪物附加勇士魔防的"+core.values.purify+"倍作为伤害"; - case 10: return "怪物的攻防和勇士攻防相等"; - case 11: return "战斗前,怪物首先吸取角色的"+parseInt(100*enemy.value)+"%生命作为伤害"; - case 12: return "战斗后,勇士陷入中毒状态,每一步损失生命"+core.values.poisonDamage+"点"; - case 13: return "战斗后,勇士陷入衰弱状态,攻防暂时下降"+core.values.weakValue+"点"; - case 14: return "战斗后,勇士陷入诅咒状态,战斗无法获得金币和经验"; - case 15: return "经过怪物周围"+(enemy.range||1)+"格时自动减生命"+enemy.damage+"点"; - case 16: return "经过两只相同的怪物中间,勇士生命值变成一半"; - case 17: return "战斗前,怪物附加之前积累的仇恨值作为伤害;战斗后,释放一半的仇恨值。(每杀死一个怪物获得"+core.values.hatred+"点仇恨值)"; - case 18: return "经过怪物的十字领域时自动减生命"+enemy.value+"点,同时怪物后退一格"; - case 19: return "战斗后勇士的生命值变成1"; - case 20: return "勇士无法打败怪物,除非拥有十字架"; + case 1: return "先攻:怪物首先攻击"; + case 2: return "魔攻:怪物无视勇士的魔防"; + case 3: return "坚固:勇士每回合最多只能对怪物造成1点伤害"; + case 4: return "2连击:怪物每回合攻击2次"; + case 5: return "3连击:怪物每回合攻击3次"; + case 6: return (enemy.n||4)+"连击: 怪物每回合攻击"+(enemy.n||4)+"次"; + case 7: return "破甲:战斗前,怪物附加角色防御的"+parseInt(100*core.values.breakArmor)+"%作为伤害"; + case 8: return "反击:战斗时,怪物每回合附加角色攻击的"+parseInt(100*core.values.counterAttack)+"%作为伤害,无视角色防御"; + case 9: return "净化:战斗前,怪物附加勇士魔防的"+core.values.purify+"倍作为伤害"; + case 10: return "模仿:怪物的攻防和勇士攻防相等"; + case 11: return "吸血:战斗前,怪物首先吸取角色的"+parseInt(100*enemy.value)+"%生命作为伤害"; + case 12: return "中毒:战斗后,勇士陷入中毒状态,每一步损失生命"+core.values.poisonDamage+"点"; + case 13: return "衰弱:战斗后,勇士陷入衰弱状态,攻防暂时下降"+core.values.weakValue+"点"; + case 14: return "诅咒:战斗后,勇士陷入诅咒状态,战斗无法获得金币和经验"; + case 15: return "领域:经过怪物周围"+(enemy.range||1)+"格时自动减生命"+enemy.damage+"点"; + case 16: return "夹击:经过两只相同的怪物中间,勇士生命值变成一半"; + case 17: return "仇恨:战斗前,怪物附加之前积累的仇恨值作为伤害;战斗后,释放一半的仇恨值。(每杀死一个怪物获得"+core.values.hatred+"点仇恨值)"; + case 18: return "阻击:经过怪物的十字领域时自动减生命"+enemy.value+"点,同时怪物后退一格"; + case 19: return "自爆:战斗后勇士的生命值变成1"; + case 20: return "无敌:勇士无法打败怪物,除非拥有十字架"; default: break; } return "" diff --git a/libs/events.js b/libs/events.js index 452a4f1b..38cda26c 100644 --- a/libs/events.js +++ b/libs/events.js @@ -806,21 +806,37 @@ events.prototype.clickBook = function(x,y) { // 上一页 if ((x == 3 || x == 4) && y == 12) { core.ui.drawEnemyBook(core.status.event.data - 6); + return; } // 下一页 if ((x == 8 || x == 9) && y == 12) { core.ui.drawEnemyBook(core.status.event.data + 6); + return; } // 返回 if (x>=10 && x<=12 && y==12) { core.ui.closePanel(true); + return; + } + // 怪物信息 + // var index = parseInt(y/2); + var data = core.status.event.data; + if (core.isset(data) && y<12) { + var page=parseInt(data/6); + var index=6*page+parseInt(y/2); + core.ui.drawEnemyBook(index); + core.ui.drawEnemyDetail(index); } return; } events.prototype.keyDownBook = function (keycode) { - if (keycode==37 || keycode==38) core.ui.drawEnemyBook(core.status.event.data - 1); - else if (keycode==39 || keycode==40) core.ui.drawEnemyBook(core.status.event.data + 1); + if (keycode==37) core.ui.drawEnemyBook(core.status.event.data-6); + if (keycode==38) core.ui.drawEnemyBook(core.status.event.data-1); + if (keycode==39) core.ui.drawEnemyBook(core.status.event.data+6); + if (keycode==40) core.ui.drawEnemyBook(core.status.event.data+1); + if (keycode==33) core.ui.drawEnemyBook(core.status.event.data-6); + if (keycode==34) core.ui.drawEnemyBook(core.status.event.data+6); return; } @@ -829,6 +845,13 @@ events.prototype.keyUpBook = function (keycode) { core.ui.closePanel(true); return; } + if (keycode==13 || keycode==32 || keycode==67) { + var data=core.status.event.data; + if (core.isset(data)) { + this.clickBook(6, 2*(data%6)); + } + return; + } } events.prototype.clickFly = function(x,y) { diff --git a/libs/ui.js b/libs/ui.js index 4659a055..0c0e60b3 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -835,11 +835,77 @@ ui.prototype.drawEnemyBook = function (index) { core.fillText('ui', '1防', 335, 62 * i + 68, '#DDDDDD', '13px Verdana'); core.fillText('ui', enemy.defDamage, 365, 62 * i + 68, '#DDDDDD', 'bold 13px Verdana'); + if (index == start+i) { + core.strokeRect('ui', 10, 62 * i + 13, 416-10*2, 62, '#FFD700'); + } + } core.setBoxAnimate(); this.drawPagination(page, totalPage); } +ui.prototype.drawEnemyDetail = function (index) { + var enemys = core.enemys.getCurrentEnemys(); + if (enemys.length==0) return; + if (index<0) index=0; + if (index>=enemys.length) index=enemys.length-1; + + var enemy = enemys[index]; + var enemyId=enemy.id; + var hints=core.enemys.getSpecialHint(core.enemys.getEnemys(enemyId)); + + if (hints.length==0) { + core.drawTip("该怪物无特殊属性!"); + return; + } + var content=hints.join("\n"); + + core.status.event.id = 'book-detail'; + clearInterval(core.interval.tipAnimate); + + core.clearMap('data', 0, 0, 416, 416); + core.setOpacity('data', 1); + + var left=10, right=416-2*left; + var content_left = left + 25; + + var validWidth = right-(content_left-left)-13; + var contents = core.splitLines("data", content, validWidth, '16px Verdana'); + + var height = 416 - 10 - Math.min(416-24*(contents.length+1)-65, 250); + var top = (416-height)/2, bottom = height; + + // var left = 97, top = 64, right = 416 - 2 * left, bottom = 416 - 2 * top; + core.setAlpha('data', 0.9); + core.fillRect('data', left, top, right, bottom, '#000000'); + core.setAlpha('data', 1); + core.strokeRect('data', left - 1, top - 1, right + 1, bottom + 1, '#FFFFFF', 2); + + // 名称 + core.canvas.data.textAlign = "left"; + + core.fillText('data', enemy.name, content_left, top + 30, '#FFD700', 'bold 22px Verdana'); + var content_top = top + 57; + + for (var i=0;i=0) { + var x1 = text.substring(0, index+1); + core.fillText('data', x1, content_left, content_top, '#FF6A6A', 'bold 16px Verdana'); + var len=core.canvas.data.measureText(x1).width; + core.fillText('data', text.substring(index+1), content_left+len, content_top, '#FFFFFF', '16px Verdana'); + } + else { + core.fillText('data', contents[i], content_left, content_top, '#FFFFFF', '16px Verdana'); + } + content_top+=24; + } + + core.fillText('data', '<点击任意位置继续>', 270, top+height-13, '#CCCCCC', '13px Verdana'); +} + /** * 绘制楼传器 * @param page