Compare commits
	
		
			3 Commits
		
	
	
		
			3bd0b2eec9
			...
			67d75b4ef3
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 67d75b4ef3 | |||
| ee336525b2 | |||
| 3ddb5b876c | 
| @ -417,6 +417,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = | ||||
| 			"baofa", | ||||
| 			"daizhi", | ||||
| 			"daji", | ||||
| 			"daji_bai", | ||||
| 			"dajian", | ||||
| 			"daluoleitian", | ||||
| 			"daluoleitianhong", | ||||
|  | ||||
| @ -55,15 +55,8 @@ main.floors.MT9= | ||||
|                         "function": "function(){\ncore.Confirmskip_On();\n}" | ||||
|                     }, | ||||
|                     { | ||||
|                         "type": "move", | ||||
|                         "loc": [ | ||||
|                             9, | ||||
|                             3 | ||||
|                         ], | ||||
|                         "time": 500, | ||||
|                         "steps": [ | ||||
|                             "right:3" | ||||
|                         ] | ||||
|                         "type": "function", | ||||
|                         "function": "function(){\ncore.moveHidingBlock(9,3,[\"right:3\"],500,0);\n}" | ||||
|                     }, | ||||
|                     { | ||||
|                         "type": "showImage2", | ||||
| @ -142,7 +135,7 @@ main.floors.MT9= | ||||
|                     }, | ||||
|                     { | ||||
|                         "type": "animate", | ||||
|                         "name": "hanyou", | ||||
|                         "name": "han", | ||||
|                         "loc": [ | ||||
|                             8, | ||||
|                             3 | ||||
| @ -185,15 +178,8 @@ main.floors.MT9= | ||||
|                         "time": 500 | ||||
|                     }, | ||||
|                     { | ||||
|                         "type": "move", | ||||
|                         "loc": [ | ||||
|                             8, | ||||
|                             3 | ||||
|                         ], | ||||
|                         "time": 500, | ||||
|                         "steps": [ | ||||
|                             "right:4" | ||||
|                         ] | ||||
|                         "type": "function", | ||||
|                         "function": "function(){\ncore.moveHidingBlock(8,3,[\"right:4\"],500,0);\n}" | ||||
|                     }, | ||||
|                     { | ||||
|                         "type": "function", | ||||
|  | ||||
| @ -75,8 +75,8 @@ main.floors.QISHI= | ||||
|                 ], | ||||
|                 "text": [ | ||||
|                     255, | ||||
|                     0, | ||||
|                     244, | ||||
|                     128, | ||||
|                     255, | ||||
|                     1 | ||||
|                 ], | ||||
|                 "background": "winskin.png", | ||||
|  | ||||
| @ -257,74 +257,74 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = | ||||
| 			return true; | ||||
| 		}, | ||||
|         "afterBattle": function (enemyId, x, y) { | ||||
| 			// 战斗结束后触发的事件
 | ||||
| 	// 战斗结束后触发的事件
 | ||||
| 
 | ||||
| 			var enemy = core.material.enemys[enemyId]; | ||||
| 			var special = enemy.special; | ||||
| 	var enemy = core.material.enemys[enemyId]; | ||||
| 	var special = enemy.special; | ||||
| 
 | ||||
| 			// 播放战斗音效和动画
 | ||||
| 			// 默认播放的动画;你也可以使用
 | ||||
| 			var animate = 'hand'; // 默认动画
 | ||||
| 			// 检查当前装备是否存在攻击动画
 | ||||
| 			var equipId = core.getEquip(0); | ||||
| 			if (equipId && (core.material.items[equipId].equip || {}).animate) | ||||
| 				animate = core.material.items[equipId].equip.animate; | ||||
| 			// 你也可以在这里根据自己的需要,比如enemyId或special或flag来修改播放的动画效果
 | ||||
| 			// if (enemyId == '...') animate = '...';
 | ||||
| 	// 播放战斗音效和动画
 | ||||
| 	// 默认播放的动画;你也可以使用
 | ||||
| 	var animate = 'daji_bai'; // 默认动画
 | ||||
| 	// 检查当前装备是否存在攻击动画
 | ||||
| 	var equipId = core.getEquip(0); | ||||
| 	if (equipId && (core.material.items[equipId].equip || {}).animate) | ||||
| 		animate = core.material.items[equipId].equip.animate; | ||||
| 	// 你也可以在这里根据自己的需要,比如enemyId或special或flag来修改播放的动画效果
 | ||||
| 	// if (enemyId == '...') animate = '...';
 | ||||
| 
 | ||||
| 			// 检查该动画是否存在SE,如果不存在则使用默认音效
 | ||||
| 			if (!(core.material.animates[animate] || {}).se) | ||||
| 				core.playSound('attack.mp3'); | ||||
| 	// 检查该动画是否存在SE,如果不存在则使用默认音效
 | ||||
| 	if (!(core.material.animates[animate] || {}).se) | ||||
| 		core.playSound('attack.mp3'); | ||||
| 
 | ||||
| 			// 播放动画;如果不存在坐标(强制战斗)则播放到勇士自身
 | ||||
| 			if (x != null && y != null) | ||||
| 				core.drawAnimate(animate, x, y); | ||||
| 			else | ||||
| 				core.drawHeroAnimate(animate); | ||||
| 	// 播放动画;如果不存在坐标(强制战斗)则播放到勇士自身
 | ||||
| 	if (x != null && y != null) | ||||
| 		core.drawAnimate(animate, x, y); | ||||
| 	else | ||||
| 		core.drawHeroAnimate(animate); | ||||
| 
 | ||||
| 			// 获得战斗伤害信息
 | ||||
| 			var damageInfo = core.getDamageInfo(enemyId, null, x, y) || {}; | ||||
| 			// 战斗伤害
 | ||||
| 			var damage = damageInfo.damage; | ||||
| 			// 当前战斗回合数,可用于战后所需的判定
 | ||||
| 			var turn = damageInfo.turn; | ||||
| 			// 判定是否致死
 | ||||
| 			if (damage == null || damage >= core.status.hero.hp) { | ||||
| 				core.status.hero.hp = 0; | ||||
| 				core.updateStatusBar(false, true); | ||||
| 				core.events.lose('战斗失败'); | ||||
| 				return; | ||||
| 			} | ||||
| 	// 获得战斗伤害信息
 | ||||
| 	var damageInfo = core.getDamageInfo(enemyId, null, x, y) || {}; | ||||
| 	// 战斗伤害
 | ||||
| 	var damage = damageInfo.damage; | ||||
| 	// 当前战斗回合数,可用于战后所需的判定
 | ||||
| 	var turn = damageInfo.turn; | ||||
| 	// 判定是否致死
 | ||||
| 	if (damage == null || damage >= core.status.hero.hp) { | ||||
| 		core.status.hero.hp = 0; | ||||
| 		core.updateStatusBar(false, true); | ||||
| 		core.events.lose('战斗失败'); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 			// 扣减体力值并记录统计数据
 | ||||
| 			core.status.hero.hp -= damage; | ||||
| 			core.status.hero.statistics.battleDamage += damage; | ||||
| 			core.status.hero.statistics.battle++; | ||||
| 	// 扣减体力值并记录统计数据
 | ||||
| 	core.status.hero.hp -= damage; | ||||
| 	core.status.hero.statistics.battleDamage += damage; | ||||
| 	core.status.hero.statistics.battle++; | ||||
| 
 | ||||
| 			// 计算当前怪物的支援怪物
 | ||||
| 			var guards = []; | ||||
| 			if (x != null && y != null) { | ||||
| 				guards = core.getFlag("__guards__" + x + "_" + y, []); | ||||
| 				core.removeFlag("__guards__" + x + "_" + y); | ||||
| 			} | ||||
| 	// 计算当前怪物的支援怪物
 | ||||
| 	var guards = []; | ||||
| 	if (x != null && y != null) { | ||||
| 		guards = core.getFlag("__guards__" + x + "_" + y, []); | ||||
| 		core.removeFlag("__guards__" + x + "_" + y); | ||||
| 	} | ||||
| 
 | ||||
| 			core.status.hero.mdef += [20, 3, 2, 1, 0, 20][core.getFlag('hard', 0)]; | ||||
| 			// 获得金币
 | ||||
| 			var money = guards.reduce(function (curr, g) { | ||||
| 				return curr + core.material.enemys[g[2]].money; | ||||
| 			}, core.getEnemyValue(enemy, "money", x, y)); | ||||
| 			if (core.hasItem('coin')) money *= 2; // 幸运金币:双倍
 | ||||
| 			if (core.hasFlag('curse')) money = 0; // 诅咒效果
 | ||||
| 			core.status.hero.money += money; | ||||
| 			core.status.hero.statistics.money += money; | ||||
| 	core.status.hero.mdef += [20, 3, 2, 1, 0, 20][core.getFlag('hard', 0)]; | ||||
| 	// 获得金币
 | ||||
| 	var money = guards.reduce(function (curr, g) { | ||||
| 		return curr + core.material.enemys[g[2]].money; | ||||
| 	}, core.getEnemyValue(enemy, "money", x, y)); | ||||
| 	if (core.hasItem('coin')) money *= 2; // 幸运金币:双倍
 | ||||
| 	if (core.hasFlag('curse')) money = 0; // 诅咒效果
 | ||||
| 	core.status.hero.money += money; | ||||
| 	core.status.hero.statistics.money += money; | ||||
| 
 | ||||
| 			// 获得经验
 | ||||
| 			var exp = guards.reduce(function (curr, g) { | ||||
| 				return curr + core.material.enemys[g[2]].exp; | ||||
| 			}, core.getEnemyValue(enemy, "exp", x, y)); | ||||
| 			if (core.hasFlag('curse')) exp = 0; | ||||
| 			core.status.hero.exp += exp; | ||||
| 			core.status.hero.statistics.exp += exp; | ||||
| 	// 获得经验
 | ||||
| 	var exp = guards.reduce(function (curr, g) { | ||||
| 		return curr + core.material.enemys[g[2]].exp; | ||||
| 	}, core.getEnemyValue(enemy, "exp", x, y)); | ||||
| 	if (core.hasFlag('curse')) exp = 0; | ||||
| 	core.status.hero.exp += exp; | ||||
| 	core.status.hero.statistics.exp += exp; | ||||
| 
 | ||||
| 			var hint = "打败 " + core.getEnemyValue(enemy, "name", x, y); | ||||
| 			if (core.flags.statusBarItems.indexOf('enableMoney') >= 0) | ||||
| @ -333,101 +333,101 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = | ||||
| 				hint += ',' + core.getStatusLabel('exp') + '+' + exp; // hint += ",经验+" + exp;
 | ||||
| 			if (!core.getFlag("isNoTip")) core.drawTip(hint, enemy.id); | ||||
| 
 | ||||
| 			// 中毒
 | ||||
| 			if (core.enemys.hasSpecial(special, 12)) { | ||||
| 				core.triggerDebuff('get', 'poison'); | ||||
| 			} | ||||
| 			// 衰弱
 | ||||
| 			if (core.enemys.hasSpecial(special, 13)) { | ||||
| 				core.triggerDebuff('get', 'weak'); | ||||
| 			} | ||||
| 			// 诅咒
 | ||||
| 			if (core.enemys.hasSpecial(special, 14)) { | ||||
| 				core.triggerDebuff('get', 'curse'); | ||||
| 			} | ||||
| 			// 仇恨怪物将仇恨值减半
 | ||||
| 			if (core.enemys.hasSpecial(special, 17)) { | ||||
| 				core.setFlag('hatred', Math.floor(core.getFlag('hatred', 0) / 2)); | ||||
| 			} | ||||
| 			// 自爆
 | ||||
| 			if (core.enemys.hasSpecial(special, 19)) { | ||||
| 				core.status.hero.statistics.battleDamage += core.status.hero.hp - 1; | ||||
| 				core.status.hero.hp = 1; | ||||
| 			} | ||||
| 			// 退化
 | ||||
| 			if (core.enemys.hasSpecial(special, 21)) { | ||||
| 				core.status.hero.atk -= (enemy.atkValue || 0); | ||||
| 				core.status.hero.def -= (enemy.defValue || 0); | ||||
| 				if (core.status.hero.atk < 0) core.status.hero.atk = 0; | ||||
| 				if (core.status.hero.def < 0) core.status.hero.def = 0; | ||||
| 			} | ||||
| 			// 增加仇恨值
 | ||||
| 			core.setFlag('hatred', core.getFlag('hatred', 0) + core.values.hatred); | ||||
| 	// 中毒
 | ||||
| 	if (core.enemys.hasSpecial(special, 12)) { | ||||
| 		core.triggerDebuff('get', 'poison'); | ||||
| 	} | ||||
| 	// 衰弱
 | ||||
| 	if (core.enemys.hasSpecial(special, 13)) { | ||||
| 		core.triggerDebuff('get', 'weak'); | ||||
| 	} | ||||
| 	// 诅咒
 | ||||
| 	if (core.enemys.hasSpecial(special, 14)) { | ||||
| 		core.triggerDebuff('get', 'curse'); | ||||
| 	} | ||||
| 	// 仇恨怪物将仇恨值减半
 | ||||
| 	if (core.enemys.hasSpecial(special, 17)) { | ||||
| 		core.setFlag('hatred', Math.floor(core.getFlag('hatred', 0) / 2)); | ||||
| 	} | ||||
| 	// 自爆
 | ||||
| 	if (core.enemys.hasSpecial(special, 19)) { | ||||
| 		core.status.hero.statistics.battleDamage += core.status.hero.hp - 1; | ||||
| 		core.status.hero.hp = 1; | ||||
| 	} | ||||
| 	// 退化
 | ||||
| 	if (core.enemys.hasSpecial(special, 21)) { | ||||
| 		core.status.hero.atk -= (enemy.atkValue || 0); | ||||
| 		core.status.hero.def -= (enemy.defValue || 0); | ||||
| 		if (core.status.hero.atk < 0) core.status.hero.atk = 0; | ||||
| 		if (core.status.hero.def < 0) core.status.hero.def = 0; | ||||
| 	} | ||||
| 	// 增加仇恨值
 | ||||
| 	core.setFlag('hatred', core.getFlag('hatred', 0) + core.values.hatred); | ||||
| 
 | ||||
| 			// 战后的技能处理,比如扣除魔力值
 | ||||
| 			if (core.flags.statusBarItems.indexOf('enableSkill') >= 0) { | ||||
| 				// 检测当前开启的技能类型
 | ||||
| 				var skill = core.getFlag('skill', 0); | ||||
| 				if (skill == 1) { // 技能1:二倍斩
 | ||||
| 					core.status.hero.mana -= 5; // 扣除5点魔力值
 | ||||
| 				} | ||||
| 				// 关闭技能
 | ||||
| 				core.setFlag('skill', 0); | ||||
| 				core.setFlag('skillName', '无'); | ||||
| 			} | ||||
| 	// 战后的技能处理,比如扣除魔力值
 | ||||
| 	if (core.flags.statusBarItems.indexOf('enableSkill') >= 0) { | ||||
| 		// 检测当前开启的技能类型
 | ||||
| 		var skill = core.getFlag('skill', 0); | ||||
| 		if (skill == 1) { // 技能1:二倍斩
 | ||||
| 			core.status.hero.mana -= 5; // 扣除5点魔力值
 | ||||
| 		} | ||||
| 		// 关闭技能
 | ||||
| 		core.setFlag('skill', 0); | ||||
| 		core.setFlag('skillName', '无'); | ||||
| 	} | ||||
| 	core.addPop(x * 32, y * 32, core.getBlockId(x, y)); | ||||
| 
 | ||||
| 	// 事件的处理
 | ||||
| 	var todo = []; | ||||
| 
 | ||||
| 			// 事件的处理
 | ||||
| 			var todo = []; | ||||
| 	// 加点事件
 | ||||
| 	var point = guards.reduce(function (curr, g) { | ||||
| 		return curr + core.material.enemys[g[2]].point; | ||||
| 	}, core.getEnemyValue(enemy, "point", x, y)) || 0; | ||||
| 	if (core.flags.enableAddPoint && point > 0) { | ||||
| 		core.push(todo, [{ "type": "insert", "name": "加点事件", "args": [point] }]); | ||||
| 	} | ||||
| 
 | ||||
| 			// 加点事件
 | ||||
| 			var point = guards.reduce(function (curr, g) { | ||||
| 				return curr + core.material.enemys[g[2]].point; | ||||
| 			}, core.getEnemyValue(enemy, "point", x, y)) || 0; | ||||
| 			if (core.flags.enableAddPoint && point > 0) { | ||||
| 				core.push(todo, [{ "type": "insert", "name": "加点事件", "args": [point] }]); | ||||
| 			} | ||||
| 	// 战后事件
 | ||||
| 	if (core.status.floorId != null) { | ||||
| 		core.push(todo, core.floors[core.status.floorId].afterBattle[x + "," + y]); | ||||
| 	} | ||||
| 	core.push(todo, enemy.afterBattle); | ||||
| 
 | ||||
| 			// 战后事件
 | ||||
| 			if (core.status.floorId != null) { | ||||
| 				core.push(todo, core.floors[core.status.floorId].afterBattle[x + "," + y]); | ||||
| 			} | ||||
| 			core.push(todo, enemy.afterBattle); | ||||
| 	// 在这里增加其他的自定义事件需求
 | ||||
| 	/* | ||||
| 	if (enemyId=='xxx') { | ||||
| 		core.push(todo, [ | ||||
| 			{"type": "...", ...}, | ||||
| 		]); | ||||
| 	} | ||||
| 	*/ | ||||
| 
 | ||||
| 			// 在这里增加其他的自定义事件需求
 | ||||
| 			/* | ||||
| 			if (enemyId=='xxx') { | ||||
| 				core.push(todo, [ | ||||
| 					{"type": "...", ...}, | ||||
| 				]); | ||||
| 			} | ||||
| 			*/ | ||||
| 	// 如果事件不为空,将其插入
 | ||||
| 	if (todo.length > 0) core.insertAction(todo, x, y); | ||||
| 
 | ||||
| 			// 如果事件不为空,将其插入
 | ||||
| 			if (todo.length > 0) core.insertAction(todo, x, y); | ||||
| 	// 删除该点设置的怪物信息
 | ||||
| 	delete((flags.enemyOnPoint || {})[core.status.floorId] || {})[x + "," + y]; | ||||
| 
 | ||||
| 			// 删除该点设置的怪物信息
 | ||||
| 			delete ((flags.enemyOnPoint || {})[core.status.floorId] || {})[x + "," + y]; | ||||
| 	// 因为removeBlock和hideBlock都会刷新状态栏,因此将删除部分移动到这里并保证刷新只执行一次,以提升效率
 | ||||
| 	if (core.getBlock(x, y) != null) { | ||||
| 		// 检查是否是重生怪物;如果是则仅隐藏不删除
 | ||||
| 		if (core.hasSpecial(enemy.special, 23)) { | ||||
| 			core.hideBlock(x, y); | ||||
| 		} else { | ||||
| 			core.removeBlock(x, y); | ||||
| 		} | ||||
| 	} else { | ||||
| 		core.updateStatusBar(); | ||||
| 	} | ||||
| 
 | ||||
| 			// 因为removeBlock和hideBlock都会刷新状态栏,因此将删除部分移动到这里并保证刷新只执行一次,以提升效率
 | ||||
| 			if (core.getBlock(x, y) != null) { | ||||
| 				// 检查是否是重生怪物;如果是则仅隐藏不删除
 | ||||
| 				if (core.hasSpecial(enemy.special, 23)) { | ||||
| 					core.hideBlock(x, y); | ||||
| 				} else { | ||||
| 					core.removeBlock(x, y); | ||||
| 				} | ||||
| 			} else { | ||||
| 				core.updateStatusBar(); | ||||
| 			} | ||||
| 	// 如果已有事件正在处理中
 | ||||
| 	if (core.status.event.id == null) | ||||
| 		core.continueAutomaticRoute(); | ||||
| 	else | ||||
| 		core.clearContinueAutomaticRoute(); | ||||
| 
 | ||||
| 			// 如果已有事件正在处理中
 | ||||
| 			if (core.status.event.id == null) | ||||
| 				core.continueAutomaticRoute(); | ||||
| 			else | ||||
| 				core.clearContinueAutomaticRoute(); | ||||
| 
 | ||||
| 		}, | ||||
| }, | ||||
|         "afterOpenDoor": function (doorId, x, y) { | ||||
| 			// 开一个门后触发的事件
 | ||||
| 
 | ||||
| @ -450,27 +450,29 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = | ||||
| 				core.clearContinueAutomaticRoute(); | ||||
| 		}, | ||||
|         "afterGetItem": function (itemId, x, y, isGentleClick) { | ||||
| 			// 获得一个道具后触发的事件
 | ||||
| 			// itemId:获得的道具ID;x和y是该道具所在的坐标
 | ||||
| 			// isGentleClick:是否是轻按触发的
 | ||||
| 			if (itemId.endsWith('Potion') && core.material.items[itemId].cls == 'items') | ||||
| 				core.playSound('回血'); | ||||
| 			else if (itemId.endsWith('Gem') && core.material.items[itemId].cls == 'items') | ||||
| 				core.playSound('宝石') | ||||
| 			else | ||||
| 				core.playSound('获得道具'); | ||||
| 	// 获得一个道具后触发的事件
 | ||||
| 	// itemId:获得的道具ID;x和y是该道具所在的坐标
 | ||||
| 	// isGentleClick:是否是轻按触发的
 | ||||
| 	if (itemId.endsWith('Potion') && core.material.items[itemId].cls == 'items') | ||||
| 		core.playSound('回血'); | ||||
| 	else if (itemId.endsWith('Gem') && core.material.items[itemId].cls == 'items') | ||||
| 		core.playSound('宝石') | ||||
| 	else | ||||
| 		core.playSound('获得道具'); | ||||
| 
 | ||||
| 			var todo = []; | ||||
| 			// 检查该点的获得道具后事件。
 | ||||
| 			if (core.status.floorId == null) return; | ||||
| 			var event = core.floors[core.status.floorId].afterGetItem[x + "," + y]; | ||||
| 			if (event && (event instanceof Array || !isGentleClick || !event.disableOnGentleClick)) { | ||||
| 				if (event.data) event = event.data; | ||||
| 				core.unshift(todo, event); | ||||
| 			} | ||||
| 
 | ||||
| 			if (todo.length > 0) core.insertAction(todo, x, y); | ||||
| 		}, | ||||
| 
 | ||||
| 	var todo = []; | ||||
| 	// 检查该点的获得道具后事件。
 | ||||
| 	if (core.status.floorId == null) return; | ||||
| 	var event = core.floors[core.status.floorId].afterGetItem[x + "," + y]; | ||||
| 	if (event && (event instanceof Array || !isGentleClick || !event.disableOnGentleClick)) { | ||||
| 		if (event.data) event = event.data; | ||||
| 		core.unshift(todo, event); | ||||
| 	} | ||||
| 
 | ||||
| 	if (todo.length > 0) core.insertAction(todo, x, y); | ||||
| }, | ||||
|         "afterPushBox": function () { | ||||
| 			// 推箱子后的事件
 | ||||
| 			if (core.searchBlock('box').length == 0) { | ||||
| @ -1653,7 +1655,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = | ||||
| 			core.ui.fillText(ctx, text, x, y, style); | ||||
| 		}, | ||||
| 		fill1 = function (text, x, y, style) { | ||||
| 			core.ui.setFont(ctx, '10px fzchyjw'); | ||||
| 			core.ui.setFont(ctx, '14px fzchyjw'); | ||||
| 			core.ui.fillText(ctx, text, x, y, style); | ||||
| 		}; | ||||
| 
 | ||||
| @ -1709,7 +1711,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = | ||||
| 			fill(core.formatBigNumber(core.status.hero.money), 107, 91 + 35 + 36 + 34 + 32, '#000000'); | ||||
| 			fill(core.getFlag("juqing", 0), 107, 91 + 35 + 36 + 34 + 32 + 32, '#FF0000'); | ||||
| 			ctx.textAlign = 'left'; | ||||
| 			if (flags.hard - 4) fill1('[' + core.formatBigNumber(core.getRealStatus('mdef')) + ']', 76, 174, '#FF1495'); | ||||
| 			if (flags.hard - 4) fill1('[' + core.formatBigNumber(core.getRealStatus('mdef')) + ']', 72, 176, '#c800c8'); | ||||
| 			if (core.status.event.id !== 'book' && core.status.event.id !== 'book-detail' && core.status.event.id !== 'toolbox') { | ||||
| 				core.drawImage(ctx, core.material.images.items, 0, 0, 32, 128, 13, 300, 28, 112); | ||||
| 				fill('黄钥匙', 50, 320, '#FFFF80'); | ||||
| @ -1743,7 +1745,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = | ||||
| 				//else
 | ||||
| 				fill(hour + ':' + minutes + ':' + seconds, 140, 360, "#ffffff"); | ||||
| 				fill(step, 140, 455, '#ffffff'); | ||||
| 				setTimeout(function(){core.ui.drawStatusBar();}, 100); | ||||
| 				setTimeout(function () { core.ui.drawStatusBar(); }, 100); | ||||
| 			} | ||||
| 			if (core.status.floorId == "nandu") { | ||||
| 				core.dom.statusCanvas.width *= 1; | ||||
|  | ||||
| @ -144,9 +144,9 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = | ||||
| 		"itemEffectTip": ",攻击+0" | ||||
| 	}, | ||||
| 	"sword1": { | ||||
| 		"cls": "items", | ||||
| 		"cls": "equips", | ||||
| 		"name": "铁剑", | ||||
| 		"text": "一把很普通的铁剑", | ||||
| 		"text": "得到铁剑,攻击力+10", | ||||
| 		"equip": { | ||||
| 			"type": 0, | ||||
| 			"animate": "sword", | ||||
|  | ||||
| @ -380,94 +380,12 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = | ||||
| 		// 立刻移动
 | ||||
| 		core.setAutoHeroMove(); | ||||
| 	} | ||||
| 	////// 绘制一个对话框 //////
 | ||||
| 	/*core.ui.drawTextBox = function (content, config) { | ||||
| 		config = config || {}; | ||||
| 
 | ||||
| 		this.clearUI(); | ||||
| 		content = core.replaceText(content); | ||||
| 
 | ||||
| 		let ctx = core.getContextByName(config.ctx || 'ui'); | ||||
| 		if (ctx && main.mode == 'play') { | ||||
| 			core.createCanvas(ctx, 0, 0, core._PX_, core._PY_, 141); | ||||
| 			ctx = core.getContextByName(ctx); | ||||
| 		} | ||||
| 
 | ||||
| 		// Step 1: 获得标题信息和位置信息
 | ||||
| 		var textAttribute = core.status.textAttribute; | ||||
| 		var titleInfo = this._getTitleAndIcon(content); | ||||
| 		var posInfo = this._getPosition(titleInfo.content); | ||||
| 		if (posInfo.position != 'up' && posInfo.position != 'down') posInfo.px = posInfo.py = null; | ||||
| 		if (!posInfo.position) posInfo.position = textAttribute.position; | ||||
| 		content = this._drawTextBox_drawImages(posInfo.content, config.ctx); | ||||
| 		if (config.pos) { | ||||
| 			delete posInfo.px; | ||||
| 			delete posInfo.py; | ||||
| 			posInfo.pos = config.pos; | ||||
| 		} | ||||
| 		posInfo.ctx = ctx; | ||||
| 
 | ||||
| 		// Step 2: 计算对话框的矩形位置
 | ||||
| 		var hPos = this._drawTextBox_getHorizontalPosition(content, titleInfo, posInfo); | ||||
| 		var vPos = this._drawTextBox_getVerticalPosition(content, titleInfo, posInfo, hPos.validWidth); | ||||
| 		posInfo.xoffset = hPos.xoffset; | ||||
| 		posInfo.yoffset = vPos.yoffset - 4; | ||||
| 
 | ||||
| 		if (ctx && main.mode == 'play') { | ||||
| 			ctx.canvas.setAttribute('_text_left', hPos.left); | ||||
| 			ctx.canvas.setAttribute('_text_top', vPos.top); | ||||
| 		} | ||||
| 
 | ||||
| 		// Step 3: 绘制背景图
 | ||||
| 		var isWindowSkin = this.drawBackground(hPos.left, vPos.top, hPos.right, vPos.bottom, posInfo); | ||||
| 
 | ||||
| 		if (titleInfo.title) { | ||||
| 			let titlefont = core.status.textAttribute.titlefont, | ||||
| 				titleStyle = core.arrayToRGBA(core.status.textAttribute.title); | ||||
| 			let tf = this._buildFont(titlefont, false), | ||||
| 				width = this.calWidth(ctx, titleInfo.title, tf); | ||||
| 			this.drawBackground(hPos.left, vPos.top - titlefont - 12 - 10, hPos.left + width + 30, vPos.top, posInfo); | ||||
| 			ctx.save(); | ||||
| 			ctx.textAlign = 'center'; | ||||
| 			ctx.textBaseline = 'middle'; | ||||
| 			core.fillText(ctx, titleInfo.title, hPos.left + (width + 30) / 2 - 5, vPos.top - (titlefont + 12) / 2 - 5, titleStyle, tf); | ||||
| 			ctx.restore(); | ||||
| 		} | ||||
| 		titleInfo.title = null; | ||||
| 
 | ||||
| 		var alpha = isWindowSkin ? this._drawWindowSkin_getOpacity() : textAttribute.background[3]; | ||||
| 
 | ||||
| 		// Step 4: 绘制标题、头像、动画
 | ||||
| 		var content_top = this._drawTextBox_drawTitleAndIcon(titleInfo, hPos, vPos, alpha, config.ctx); | ||||
| 
 | ||||
| 		// Step 5: 绘制正文
 | ||||
| 		var config = this.drawTextContent(config.ctx || 'ui', content, { | ||||
| 			left: hPos.content_left, | ||||
| 			top: content_top, | ||||
| 			maxWidth: hPos.validWidth, | ||||
| 			lineHeight: vPos.lineHeight, | ||||
| 			time: (config.showAll || config.async || textAttribute.time <= 0 || core.status.event.id != 'action') ? 0 : textAttribute.time | ||||
| 		}); | ||||
| 
 | ||||
| 		// Step 6: 绘制光标
 | ||||
| 		if (main.mode == 'play') { | ||||
| 			main.dom.next.style.display = 'block'; | ||||
| 			main.dom.next.style.borderRightColor = main.dom.next.style.borderBottomColor = core.arrayToRGB(textAttribute.text); | ||||
| 			main.dom.next.style.top = (vPos.bottom - 20) * core.domStyle.scale + "px"; | ||||
| 			var left = (hPos.left + hPos.right) / 2; | ||||
| 			if (posInfo.position == 'up' && !posInfo.noPeak && posInfo.px != null && Math.abs(posInfo.px * 32 + 16 - left) < 50) | ||||
| 				left = hPos.right - 64; | ||||
| 			main.dom.next.style.left = left * core.domStyle.scale + "px"; | ||||
| 		} | ||||
| 		return config; | ||||
| 	} | ||||
| 
 | ||||
| */ | ||||
| 	ui.prototype._drawChoices_drawChoices = function (choices, isWindowSkin, hPos, vPos, ctx) { | ||||
| 		var hasCtx = ctx != null; | ||||
| 		ctx = ctx || 'ui'; | ||||
| 		// 选项
 | ||||
| 		core.setTextAlign(ctx, 'left'); | ||||
| 		core.setTextAlign(ctx, 'center'); | ||||
| 		core.setFont(ctx, this._buildFont(17, true)); | ||||
| 		for (var i = 0; i < choices.length; i++) { | ||||
| 			var color = core.arrayToRGBA(choices[i].color || core.status.textAttribute.text); | ||||
| @ -484,7 +402,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = | ||||
| 					offset += 14; | ||||
| 				} | ||||
| 			} | ||||
| 			core.fillText(ctx, choices[i].text, offset - 70, vPos.choice_top + 32 * i, color, ui.prototype._buildFont(22, false)); | ||||
| 			core.fillText(ctx, choices[i].text, core.status.event.id != 'action' ? offset : offset - 55, vPos.choice_top + 32 * i, color, ui.prototype._buildFont(22, false)); | ||||
| 		} | ||||
| 
 | ||||
| 		if (choices.length > 0 && core.status.event.selection != 'none') { | ||||
| @ -498,7 +416,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = | ||||
| 						len + 10, 28, core._PX_ / 2 - len / 2 - 5, vPos.choice_top + 32 * core.status.event.selection - 20); | ||||
| 				} else { | ||||
| 					this._drawWindowSelector(core.status.textAttribute.background, | ||||
| 						core._PX_ / 2 - len / 2 - 5 - 60, vPos.choice_top + 32 * core.status.event.selection - 20, len + 10, 28); | ||||
| 						core.status.event.id != 'action' ? (core._PX_ / 2 - len / 2 - 5 - 20) : (core._PX_ / 2 - len / 2 - 5 - 60), vPos.choice_top + 32 * core.status.event.selection - 20, core.status.event.id != 'action' ? (len + 10 + 30) : (len + 10 + 30), 28); | ||||
| 				} | ||||
| 			} else | ||||
| 				core.strokeRoundRect(ctx, core._PX_ / 2 - len / 2 - 5, vPos.choice_top + 32 * core.status.event.selection - 20, | ||||
| @ -684,51 +602,51 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = | ||||
| 			return true; | ||||
| 		} | ||||
| 		switch (core.status.event.id) { | ||||
| 			case 'action': | ||||
| 				this._keyDownAction(keyCode); | ||||
| 				break; | ||||
| 			case 'book': | ||||
| 				this._keyDownBook(keyCode); | ||||
| 				break; | ||||
| 			case 'fly': | ||||
| 				this._keyDownFly(keyCode); | ||||
| 				break; | ||||
| 			case 'viewMaps': | ||||
| 				this._keyDownViewMaps(keyCode); | ||||
| 				break; | ||||
| 			case 'equipbox': | ||||
| 				this._keyDownEquipbox(keyCode); | ||||
| 				break; | ||||
| 			case 'toolbox': | ||||
| 				this._keyDownToolbox(keyCode); | ||||
| 				break; | ||||
| 			case 'save': | ||||
| 			case 'load': | ||||
| 			case 'replayLoad': | ||||
| 			case 'replayRemain': | ||||
| 			case 'replaySince': | ||||
| 				this._keyDownSL(keyCode); | ||||
| 				break; | ||||
| 			case 'selectShop': | ||||
| 			case 'switchs': | ||||
| 			case 'switchs-sounds': | ||||
| 			case 'switchs-display': | ||||
| 			case 'switchs-action': | ||||
| 			case 'notes': | ||||
| 			case 'settings': | ||||
| 			case 'syncSave': | ||||
| 			case 'syncSelect': | ||||
| 			case 'localSaveSelect': | ||||
| 			case 'storageRemove': | ||||
| 			case 'replay': | ||||
| 			case 'gameInfo': | ||||
| 			case 'shuangta': | ||||
| 			case 'rm': | ||||
| 				this._keyDownChoices(keyCode); | ||||
| 				break; | ||||
| 			case 'cursor': | ||||
| 				this._keyDownCursor(keyCode); | ||||
| 				break; | ||||
| 		case 'action': | ||||
| 			this._keyDownAction(keyCode); | ||||
| 			break; | ||||
| 		case 'book': | ||||
| 			this._keyDownBook(keyCode); | ||||
| 			break; | ||||
| 		case 'fly': | ||||
| 			this._keyDownFly(keyCode); | ||||
| 			break; | ||||
| 		case 'viewMaps': | ||||
| 			this._keyDownViewMaps(keyCode); | ||||
| 			break; | ||||
| 		case 'equipbox': | ||||
| 			this._keyDownEquipbox(keyCode); | ||||
| 			break; | ||||
| 		case 'toolbox': | ||||
| 			this._keyDownToolbox(keyCode); | ||||
| 			break; | ||||
| 		case 'save': | ||||
| 		case 'load': | ||||
| 		case 'replayLoad': | ||||
| 		case 'replayRemain': | ||||
| 		case 'replaySince': | ||||
| 			this._keyDownSL(keyCode); | ||||
| 			break; | ||||
| 		case 'selectShop': | ||||
| 		case 'switchs': | ||||
| 		case 'switchs-sounds': | ||||
| 		case 'switchs-display': | ||||
| 		case 'switchs-action': | ||||
| 		case 'notes': | ||||
| 		case 'settings': | ||||
| 		case 'syncSave': | ||||
| 		case 'syncSelect': | ||||
| 		case 'localSaveSelect': | ||||
| 		case 'storageRemove': | ||||
| 		case 'replay': | ||||
| 		case 'gameInfo': | ||||
| 		case 'shuangta': | ||||
| 		case 'rm': | ||||
| 			this._keyDownChoices(keyCode); | ||||
| 			break; | ||||
| 		case 'cursor': | ||||
| 			this._keyDownCursor(keyCode); | ||||
| 			break; | ||||
| 		} | ||||
| 		return true; | ||||
| 	} | ||||
| @ -741,100 +659,100 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = | ||||
| 
 | ||||
| 		core.status.holdingKeys = []; | ||||
| 		switch (core.status.event.id) { | ||||
| 			case 'text': | ||||
| 				ok() && core.drawText(); | ||||
| 				break; | ||||
| 			case 'confirmBox': | ||||
| 				this._keyUpConfirmBox(keyCode); | ||||
| 				break; | ||||
| 			case 'action': | ||||
| 				this._keyUpAction(keyCode); | ||||
| 				break; | ||||
| 			case 'about': | ||||
| 				ok() && core.closePanel(); | ||||
| 				break; | ||||
| 			case 'help': | ||||
| 				ok() && core.closePanel(); | ||||
| 				break; | ||||
| 			case 'book': | ||||
| 				this._keyUpBook(keyCode); | ||||
| 				break; | ||||
| 			case 'book-detail': | ||||
| 				ok() && this._clickBookDetail(); | ||||
| 				break; | ||||
| 			case 'fly': | ||||
| 				this._keyUpFly(keyCode); | ||||
| 				break; | ||||
| 			case 'viewMaps': | ||||
| 				this._keyUpViewMaps(keyCode); | ||||
| 				break; | ||||
| 			case 'selectShop': | ||||
| 				this._keyUpQuickShop(keyCode); | ||||
| 				break; | ||||
| 			case 'toolbox': | ||||
| 				this._keyUpToolbox(keyCode); | ||||
| 				break; | ||||
| 			case 'equipbox': | ||||
| 				this._keyUpEquipbox(keyCode, altKey); | ||||
| 				break; | ||||
| 			case 'save': | ||||
| 			case 'load': | ||||
| 			case 'replayLoad': | ||||
| 			case 'replayRemain': | ||||
| 			case 'replaySince': | ||||
| 				this._keyUpSL(keyCode); | ||||
| 				break; | ||||
| 			case 'keyBoard': | ||||
| 				ok() && core.closePanel(); | ||||
| 				break; | ||||
| 			case 'switchs': | ||||
| 				this._keyUpSwitchs(keyCode); | ||||
| 				break; | ||||
| 			case 'switchs-sounds': | ||||
| 				this._keyUpSwitchs_sounds(keyCode); | ||||
| 				break; | ||||
| 			case 'switchs-display': | ||||
| 				this._keyUpSwitchs_display(keyCode); | ||||
| 				break; | ||||
| 			case 'switchs-action': | ||||
| 				this._keyUpSwitchs_action(keyCode); | ||||
| 				break; | ||||
| 			case 'settings': | ||||
| 				this._keyUpSettings(keyCode); | ||||
| 				break; | ||||
| 			case 'notes': | ||||
| 				this._keyUpNotes(keyCode); | ||||
| 				break; | ||||
| 			case 'syncSave': | ||||
| 				this._keyUpSyncSave(keyCode); | ||||
| 				break; | ||||
| 			case 'syncSelect': | ||||
| 				this._keyUpSyncSelect(keyCode); | ||||
| 				break; | ||||
| 			case 'localSaveSelect': | ||||
| 				this._keyUpLocalSaveSelect(keyCode); | ||||
| 				break; | ||||
| 			case 'storageRemove': | ||||
| 				this._keyUpStorageRemove(keyCode); | ||||
| 				break; | ||||
| 			case 'cursor': | ||||
| 				this._keyUpCursor(keyCode); | ||||
| 				break; | ||||
| 			case 'replay': | ||||
| 				this._keyUpReplay(keyCode); | ||||
| 				break; | ||||
| 			case 'gameInfo': | ||||
| 				this._keyUpGameInfo(keyCode); | ||||
| 				break; | ||||
| 			case 'shuangta': | ||||
| 				this._keyUpShuangta(keyCode); | ||||
| 				break; | ||||
| 			case 'rm': | ||||
| 				this._keyUpRM(keyCode); | ||||
| 				break; | ||||
| 			case 'centerFly': | ||||
| 				this._keyUpCenterFly(keyCode); | ||||
| 				break; | ||||
| 		case 'text': | ||||
| 			ok() && core.drawText(); | ||||
| 			break; | ||||
| 		case 'confirmBox': | ||||
| 			this._keyUpConfirmBox(keyCode); | ||||
| 			break; | ||||
| 		case 'action': | ||||
| 			this._keyUpAction(keyCode); | ||||
| 			break; | ||||
| 		case 'about': | ||||
| 			ok() && core.closePanel(); | ||||
| 			break; | ||||
| 		case 'help': | ||||
| 			ok() && core.closePanel(); | ||||
| 			break; | ||||
| 		case 'book': | ||||
| 			this._keyUpBook(keyCode); | ||||
| 			break; | ||||
| 		case 'book-detail': | ||||
| 			ok() && this._clickBookDetail(); | ||||
| 			break; | ||||
| 		case 'fly': | ||||
| 			this._keyUpFly(keyCode); | ||||
| 			break; | ||||
| 		case 'viewMaps': | ||||
| 			this._keyUpViewMaps(keyCode); | ||||
| 			break; | ||||
| 		case 'selectShop': | ||||
| 			this._keyUpQuickShop(keyCode); | ||||
| 			break; | ||||
| 		case 'toolbox': | ||||
| 			this._keyUpToolbox(keyCode); | ||||
| 			break; | ||||
| 		case 'equipbox': | ||||
| 			this._keyUpEquipbox(keyCode, altKey); | ||||
| 			break; | ||||
| 		case 'save': | ||||
| 		case 'load': | ||||
| 		case 'replayLoad': | ||||
| 		case 'replayRemain': | ||||
| 		case 'replaySince': | ||||
| 			this._keyUpSL(keyCode); | ||||
| 			break; | ||||
| 		case 'keyBoard': | ||||
| 			ok() && core.closePanel(); | ||||
| 			break; | ||||
| 		case 'switchs': | ||||
| 			this._keyUpSwitchs(keyCode); | ||||
| 			break; | ||||
| 		case 'switchs-sounds': | ||||
| 			this._keyUpSwitchs_sounds(keyCode); | ||||
| 			break; | ||||
| 		case 'switchs-display': | ||||
| 			this._keyUpSwitchs_display(keyCode); | ||||
| 			break; | ||||
| 		case 'switchs-action': | ||||
| 			this._keyUpSwitchs_action(keyCode); | ||||
| 			break; | ||||
| 		case 'settings': | ||||
| 			this._keyUpSettings(keyCode); | ||||
| 			break; | ||||
| 		case 'notes': | ||||
| 			this._keyUpNotes(keyCode); | ||||
| 			break; | ||||
| 		case 'syncSave': | ||||
| 			this._keyUpSyncSave(keyCode); | ||||
| 			break; | ||||
| 		case 'syncSelect': | ||||
| 			this._keyUpSyncSelect(keyCode); | ||||
| 			break; | ||||
| 		case 'localSaveSelect': | ||||
| 			this._keyUpLocalSaveSelect(keyCode); | ||||
| 			break; | ||||
| 		case 'storageRemove': | ||||
| 			this._keyUpStorageRemove(keyCode); | ||||
| 			break; | ||||
| 		case 'cursor': | ||||
| 			this._keyUpCursor(keyCode); | ||||
| 			break; | ||||
| 		case 'replay': | ||||
| 			this._keyUpReplay(keyCode); | ||||
| 			break; | ||||
| 		case 'gameInfo': | ||||
| 			this._keyUpGameInfo(keyCode); | ||||
| 			break; | ||||
| 		case 'shuangta': | ||||
| 			this._keyUpShuangta(keyCode); | ||||
| 			break; | ||||
| 		case 'rm': | ||||
| 			this._keyUpRM(keyCode); | ||||
| 			break; | ||||
| 		case 'centerFly': | ||||
| 			this._keyUpCenterFly(keyCode); | ||||
| 			break; | ||||
| 		} | ||||
| 		return true; | ||||
| 	} | ||||
| @ -842,98 +760,98 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = | ||||
| 		if (core.status.played && !core.status.lockControl) return false; | ||||
| 
 | ||||
| 		switch (core.status.event.id) { | ||||
| 			case 'centerFly': | ||||
| 				this._clickCenterFly(x, y, px, py); | ||||
| 				break; | ||||
| 			case 'book': | ||||
| 				this._clickBook(x, y, px, py); | ||||
| 				break; | ||||
| 			case 'book-detail': | ||||
| 				this._clickBookDetail(x, y, px, py); | ||||
| 				break; | ||||
| 			case 'fly': | ||||
| 				this._clickFly(x, y, px, py); | ||||
| 				break; | ||||
| 			case 'viewMaps': | ||||
| 				this._clickViewMaps(x, y, px, py); | ||||
| 				break; | ||||
| 			case 'switchs': | ||||
| 				this._clickSwitchs(x, y, px, py); | ||||
| 				break; | ||||
| 			case 'switchs-sounds': | ||||
| 				this._clickSwitchs_sounds(x, y, px, py); | ||||
| 				break; | ||||
| 			case 'switchs-display': | ||||
| 				this._clickSwitchs_display(x, y, px, py); | ||||
| 				break; | ||||
| 			case 'switchs-action': | ||||
| 				this._clickSwitchs_action(x, y, px, py); | ||||
| 				break; | ||||
| 			case 'settings': | ||||
| 				this._clickSettings(x, y, px, py); | ||||
| 				break; | ||||
| 			case 'selectShop': | ||||
| 				this._clickQuickShop(x, y, px, py); | ||||
| 				break; | ||||
| 			case 'equipbox': | ||||
| 				this._clickEquipbox(x, y, px, py); | ||||
| 				break; | ||||
| 			case 'toolbox': | ||||
| 				this._clickToolbox(x, y, px, py); | ||||
| 				break; | ||||
| 			case 'save': | ||||
| 			case 'load': | ||||
| 			case 'replayLoad': | ||||
| 			case 'replayRemain': | ||||
| 			case 'replaySince': | ||||
| 				this._clickSL(x, y, px, py); | ||||
| 				break; | ||||
| 			case 'confirmBox': | ||||
| 				this._clickConfirmBox(x, y, px, py); | ||||
| 				break; | ||||
| 			case 'keyBoard': | ||||
| 				this._clickKeyBoard(x, y, px, py); | ||||
| 				break; | ||||
| 			case 'action': | ||||
| 				this._clickAction(x, y, px, py); | ||||
| 				break; | ||||
| 			case 'text': | ||||
| 				core.drawText(); | ||||
| 				break; | ||||
| 			case 'notes': | ||||
| 				this._clickNotes(x, y, px, py); | ||||
| 				break; | ||||
| 			case 'syncSave': | ||||
| 				this._clickSyncSave(x, y, px, py); | ||||
| 				break; | ||||
| 			case 'syncSelect': | ||||
| 				this._clickSyncSelect(x, y, px, py); | ||||
| 				break; | ||||
| 			case 'localSaveSelect': | ||||
| 				this._clickLocalSaveSelect(x, y, px, py); | ||||
| 				break; | ||||
| 			case 'storageRemove': | ||||
| 				this._clickStorageRemove(x, y, px, py); | ||||
| 				break; | ||||
| 			case 'cursor': | ||||
| 				this._clickCursor(x, y, px, py); | ||||
| 				break; | ||||
| 			case 'replay': | ||||
| 				this._clickReplay(x, y, px, py); | ||||
| 				break; | ||||
| 			case 'gameInfo': | ||||
| 				this._clickGameInfo(x, y, px, py); | ||||
| 				break; | ||||
| 			case 'shuangta': | ||||
| 				this._clickShuangta(x, y, px, py); | ||||
| 				break; | ||||
| 			case 'RM': | ||||
| 				this._clickRM(x, y, px, py); | ||||
| 				break; | ||||
| 			case 'about': | ||||
| 			case 'help': | ||||
| 				core.ui.closePanel(); | ||||
| 				break; | ||||
| 		case 'centerFly': | ||||
| 			this._clickCenterFly(x, y, px, py); | ||||
| 			break; | ||||
| 		case 'book': | ||||
| 			this._clickBook(x, y, px, py); | ||||
| 			break; | ||||
| 		case 'book-detail': | ||||
| 			this._clickBookDetail(x, y, px, py); | ||||
| 			break; | ||||
| 		case 'fly': | ||||
| 			this._clickFly(x, y, px, py); | ||||
| 			break; | ||||
| 		case 'viewMaps': | ||||
| 			this._clickViewMaps(x, y, px, py); | ||||
| 			break; | ||||
| 		case 'switchs': | ||||
| 			this._clickSwitchs(x, y, px, py); | ||||
| 			break; | ||||
| 		case 'switchs-sounds': | ||||
| 			this._clickSwitchs_sounds(x, y, px, py); | ||||
| 			break; | ||||
| 		case 'switchs-display': | ||||
| 			this._clickSwitchs_display(x, y, px, py); | ||||
| 			break; | ||||
| 		case 'switchs-action': | ||||
| 			this._clickSwitchs_action(x, y, px, py); | ||||
| 			break; | ||||
| 		case 'settings': | ||||
| 			this._clickSettings(x, y, px, py); | ||||
| 			break; | ||||
| 		case 'selectShop': | ||||
| 			this._clickQuickShop(x, y, px, py); | ||||
| 			break; | ||||
| 		case 'equipbox': | ||||
| 			this._clickEquipbox(x, y, px, py); | ||||
| 			break; | ||||
| 		case 'toolbox': | ||||
| 			this._clickToolbox(x, y, px, py); | ||||
| 			break; | ||||
| 		case 'save': | ||||
| 		case 'load': | ||||
| 		case 'replayLoad': | ||||
| 		case 'replayRemain': | ||||
| 		case 'replaySince': | ||||
| 			this._clickSL(x, y, px, py); | ||||
| 			break; | ||||
| 		case 'confirmBox': | ||||
| 			this._clickConfirmBox(x, y, px, py); | ||||
| 			break; | ||||
| 		case 'keyBoard': | ||||
| 			this._clickKeyBoard(x, y, px, py); | ||||
| 			break; | ||||
| 		case 'action': | ||||
| 			this._clickAction(x, y, px, py); | ||||
| 			break; | ||||
| 		case 'text': | ||||
| 			core.drawText(); | ||||
| 			break; | ||||
| 		case 'notes': | ||||
| 			this._clickNotes(x, y, px, py); | ||||
| 			break; | ||||
| 		case 'syncSave': | ||||
| 			this._clickSyncSave(x, y, px, py); | ||||
| 			break; | ||||
| 		case 'syncSelect': | ||||
| 			this._clickSyncSelect(x, y, px, py); | ||||
| 			break; | ||||
| 		case 'localSaveSelect': | ||||
| 			this._clickLocalSaveSelect(x, y, px, py); | ||||
| 			break; | ||||
| 		case 'storageRemove': | ||||
| 			this._clickStorageRemove(x, y, px, py); | ||||
| 			break; | ||||
| 		case 'cursor': | ||||
| 			this._clickCursor(x, y, px, py); | ||||
| 			break; | ||||
| 		case 'replay': | ||||
| 			this._clickReplay(x, y, px, py); | ||||
| 			break; | ||||
| 		case 'gameInfo': | ||||
| 			this._clickGameInfo(x, y, px, py); | ||||
| 			break; | ||||
| 		case 'shuangta': | ||||
| 			this._clickShuangta(x, y, px, py); | ||||
| 			break; | ||||
| 		case 'rm': | ||||
| 			this._clickRM(x, y, px, py); | ||||
| 			break; | ||||
| 		case 'about': | ||||
| 		case 'help': | ||||
| 			core.ui.closePanel(); | ||||
| 			break; | ||||
| 		} | ||||
| 
 | ||||
| 		// --- 长按判定
 | ||||
| @ -955,38 +873,38 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = | ||||
| 		if (!core.status.lockControl) return false; | ||||
| 
 | ||||
| 		switch (core.status.event.id) { | ||||
| 			case 'action': | ||||
| 				if (core.status.event.data.type == 'choices') { | ||||
| 					this._onMoveChoices(x, y); | ||||
| 					return true; | ||||
| 				} | ||||
| 				if (core.status.event.data.type == 'confirm') { | ||||
| 					this._onMoveConfirmBox(x, y, px, py); | ||||
| 					return true; | ||||
| 				} | ||||
| 				break; | ||||
| 			case 'selectShop': | ||||
| 			case 'switchs': | ||||
| 			case 'switchs-sounds': | ||||
| 			case 'switchs-display': | ||||
| 			case 'switchs-action': | ||||
| 			case 'notes': | ||||
| 			case 'settings': | ||||
| 			case 'syncSave': | ||||
| 			case 'syncSelect': | ||||
| 			case 'localSaveSelect': | ||||
| 			case 'storageRemove': | ||||
| 			case 'replay': | ||||
| 			case 'gameInfo': | ||||
| 			case 'shuangta': | ||||
| 			case 'rm': | ||||
| 		case 'action': | ||||
| 			if (core.status.event.data.type == 'choices') { | ||||
| 				this._onMoveChoices(x, y); | ||||
| 				return true; | ||||
| 			case 'confirmBox': | ||||
| 			} | ||||
| 			if (core.status.event.data.type == 'confirm') { | ||||
| 				this._onMoveConfirmBox(x, y, px, py); | ||||
| 				return true; | ||||
| 			default: | ||||
| 				break; | ||||
| 			} | ||||
| 			break; | ||||
| 		case 'selectShop': | ||||
| 		case 'switchs': | ||||
| 		case 'switchs-sounds': | ||||
| 		case 'switchs-display': | ||||
| 		case 'switchs-action': | ||||
| 		case 'notes': | ||||
| 		case 'settings': | ||||
| 		case 'syncSave': | ||||
| 		case 'syncSelect': | ||||
| 		case 'localSaveSelect': | ||||
| 		case 'storageRemove': | ||||
| 		case 'replay': | ||||
| 		case 'gameInfo': | ||||
| 		case 'shuangta': | ||||
| 		case 'rm': | ||||
| 			this._onMoveChoices(x, y); | ||||
| 			return true; | ||||
| 		case 'confirmBox': | ||||
| 			this._onMoveConfirmBox(x, y, px, py); | ||||
| 			return true; | ||||
| 		default: | ||||
| 			break; | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| @ -1008,23 +926,23 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = | ||||
| 			var selection = y - topIndex; | ||||
| 			core.status.event.selection = selection; | ||||
| 			switch (selection) { | ||||
| 				case 0:  | ||||
| 					core.setFlag("itemDetail", !core.getFlag("itemDetail")); | ||||
| 					core.ui._drawShuangta(); | ||||
| 					break; | ||||
| 				case 1: | ||||
| 					core.setFlag("__autoGetItem__", !core.getFlag("__autoGetItem__")); | ||||
| 					core.ui._drawShuangta(); | ||||
| 					break; | ||||
| 				case 2: | ||||
| 					core.setFlag("__autoBattle__", !core.getFlag("__autoBattle__")); | ||||
| 					core.ui._drawShuangta(); | ||||
| 					break; | ||||
| 				case 3: | ||||
| 					core.status.event.selection = 8; | ||||
| 					core.playSound('取消'); | ||||
| 					core.ui._drawSettings(); | ||||
| 					break; | ||||
| 			case 0: | ||||
| 				core.setFlag("itemDetail", !core.getFlag("itemDetail")); | ||||
| 				core.ui._drawShuangta(); | ||||
| 				break; | ||||
| 			case 1: | ||||
| 				core.setFlag("__autoGetItem__", !core.getFlag("__autoGetItem__")); | ||||
| 				core.ui._drawShuangta(); | ||||
| 				break; | ||||
| 			case 2: | ||||
| 				core.setFlag("__autoBattle__", !core.getFlag("__autoBattle__")); | ||||
| 				core.ui._drawShuangta(); | ||||
| 				break; | ||||
| 			case 3: | ||||
| 				core.status.event.selection = 8; | ||||
| 				core.playSound('取消'); | ||||
| 				core.ui._drawSettings(); | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| @ -1046,33 +964,33 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = | ||||
| 			var selection = y - topIndex; | ||||
| 			core.status.event.selection = selection; | ||||
| 			switch (selection) { | ||||
| 				case 0:  | ||||
| 					core.setFlag("isRmFly", !core.getFlag("isRmFly")); | ||||
| 					core.ui._drawRM(); | ||||
| 					break; | ||||
| 				case 1: | ||||
| 					core.setFlag("isDamageRight", !core.getFlag("isDamageRight")); | ||||
| 					core.updateStatusBar(); | ||||
| 					core.ui._drawRM(); | ||||
| 					break; | ||||
| 				case 2: | ||||
| 					core.setFlag("isZeroWhite", !core.getFlag("isZeroWhite")); | ||||
| 					core.updateStatusBar(); | ||||
| 					core.ui._drawRM(); | ||||
| 					break; | ||||
| 				case 3: | ||||
| 					core.setFlag("isNoTip", !core.getFlag("isNoTip")); | ||||
| 					core.ui._drawRM(); | ||||
| 					break; | ||||
| 				case 4: | ||||
| 					core.setFlag("isCommon", !core.getFlag("isCommon")); | ||||
| 					core.ui._drawRM(); | ||||
| 					break; | ||||
| 				case 5: | ||||
| 					core.status.event.selection = 9; | ||||
| 					core.playSound('取消'); | ||||
| 					core.ui._drawSettings(); | ||||
| 					break; | ||||
| 			case 0: | ||||
| 				core.setFlag("isRmFly", !core.getFlag("isRmFly")); | ||||
| 				core.ui._drawRM(); | ||||
| 				break; | ||||
| 			case 1: | ||||
| 				core.setFlag("isDamageRight", !core.getFlag("isDamageRight")); | ||||
| 				core.updateStatusBar(); | ||||
| 				core.ui._drawRM(); | ||||
| 				break; | ||||
| 			case 2: | ||||
| 				core.setFlag("isZeroWhite", !core.getFlag("isZeroWhite")); | ||||
| 				core.updateStatusBar(); | ||||
| 				core.ui._drawRM(); | ||||
| 				break; | ||||
| 			case 3: | ||||
| 				core.setFlag("isNoTip", !core.getFlag("isNoTip")); | ||||
| 				core.ui._drawRM(); | ||||
| 				break; | ||||
| 			case 4: | ||||
| 				core.setFlag("isCommon", !core.getFlag("isCommon")); | ||||
| 				core.ui._drawRM(); | ||||
| 				break; | ||||
| 			case 5: | ||||
| 				core.status.event.selection = 9; | ||||
| 				core.playSound('取消'); | ||||
| 				core.ui._drawSettings(); | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| @ -1189,8 +1107,8 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = | ||||
| 				top + 28, '#ffffff', this._buildFont(enemy.name.length >= 5 ? 18 : 20, false), width); /////修改怪物名字颜色,取消加粗
 | ||||
| 			switch (enemy.specialText.length) { | ||||
| 			case 1: | ||||
| 				core.fillText('ui', ((!core.getFlag('isCommon') || (2 != enemy.specialText[0].length)) | ||||
| 					? enemy.specialText[0] : enemy.specialText[0][0] + ' ' + enemy.specialText[0][1]), | ||||
| 				core.fillText('ui', ((!core.getFlag('isCommon') || (2 != enemy.specialText[0].length)) ? | ||||
| 						enemy.specialText[0] : enemy.specialText[0][0] + ' ' + enemy.specialText[0][1]), | ||||
| 					left + width / 2, ////单属性两个字中间空一格
 | ||||
| 					top + 50, core.arrayToRGBA((enemy.specialColor || [])[0] || '#FF6A6A'), | ||||
| 					this._buildFont(20, false), width); ////调大怪物字号,取消加粗
 | ||||
| @ -1409,7 +1327,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = | ||||
| 		this.drawPagination(info.constantsPage, info.constantsTotalPage); | ||||
| 
 | ||||
| 		core.setTextAlign('ui', 'center'); | ||||
| 		core.fillText('ui', '[装备栏]', core._PX_ - 46, 25, '#DDDDDD', this._buildFont(15, true)); | ||||
| 		//core.fillText('ui', '[装备栏]', core._PX_ - 46, 25, '#DDDDDD', this._buildFont(15, true));
 | ||||
| 		core.fillText('ui', '返回游戏', core._PX_ - 46, core._PY_ - 13); | ||||
| 	} | ||||
| 
 | ||||
| @ -1489,6 +1407,137 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = | ||||
| 		if (callback) callback(); | ||||
| 	} | ||||
| 
 | ||||
| 	////// “即捡即用类”道具的使用效果 //////
 | ||||
| 	items.prototype.getItemEffect = function (itemId, itemNum) { | ||||
| 		var itemCls = core.material.items[itemId].cls; | ||||
| 		// 消耗品
 | ||||
| 		if (itemCls === 'items' || itemCls === "equips") { | ||||
| 			var curr_hp = core.status.hero.hp; | ||||
| 			var itemEffect = core.material.items[itemId].itemEffect; | ||||
| 			if (itemEffect) { | ||||
| 				try { | ||||
| 					for (var i = 0; i < itemNum; ++i) | ||||
| 						eval(itemEffect); | ||||
| 				} catch (e) { | ||||
| 					console.error(e); | ||||
| 				} | ||||
| 			} | ||||
| 			core.status.hero.statistics.hp += core.status.hero.hp - curr_hp; | ||||
| 
 | ||||
| 			var useItemEvent = core.material.items[itemId].useItemEvent; | ||||
| 			if (useItemEvent) { | ||||
| 				try { | ||||
| 					core.insertAction(useItemEvent); | ||||
| 				} catch (e) { | ||||
| 					console.error(e); | ||||
| 				} | ||||
| 			} | ||||
| 			core.updateStatusBar(false, true); | ||||
| 		} else { | ||||
| 			core.addItem(itemId, itemNum); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	/////屏蔽装备栏
 | ||||
| 	////// 点击装备栏时的打开操作 //////
 | ||||
| 	events.prototype.openEquipbox = function (fromUserAction) { | ||||
| 		if (core.isReplaying() || true) return; ////直接返回
 | ||||
| 		if (!this._checkStatus('equipbox', fromUserAction)) return; | ||||
| 		core.playSound('打开界面'); | ||||
| 		core.ui._drawEquipbox(); | ||||
| 	} | ||||
| 	////// 工具栏界面时的点击操作 //////
 | ||||
| 	actions.prototype._clickToolbox = function (x, y) { | ||||
| 		var tools = core.getToolboxItems('tools'), | ||||
| 			constants = core.getToolboxItems('constants'); | ||||
| 
 | ||||
| 		// 装备栏
 | ||||
| 		//  if (x >= this.LAST - 2 && y == 0) {
 | ||||
| 		//    core.ui.closePanel();
 | ||||
| 		//   if (core.isReplaying())
 | ||||
| 		//       core.control._replay_equipbox();
 | ||||
| 		//    else
 | ||||
| 		//        core.openEquipbox();
 | ||||
| 		//    return;
 | ||||
| 		// }
 | ||||
| 		if (x >= this.LAST - 2 && y === core._HEIGHT_ - 1) { | ||||
| 			core.playSound('取消'); | ||||
| 			core.ui.closePanel(); | ||||
| 			var last = core.status.route[core.status.route.length - 1] || ''; | ||||
| 			if (last.startsWith('equip:') || last.startsWith('unEquip:')) { | ||||
| 				core.status.route.push('no'); | ||||
| 			} | ||||
| 			core.checkAutoEvents(); | ||||
| 			return; | ||||
| 		} | ||||
| 
 | ||||
| 		var toolsPage = core.status.event.data.toolsPage; | ||||
| 		var constantsPage = core.status.event.data.constantsPage; | ||||
| 		// 上一页
 | ||||
| 		if (x == this._HX_ - 2 || x == this._HX_ - 3) { | ||||
| 			if (y === core._HEIGHT_ - 1 - 5 && toolsPage > 1) { | ||||
| 				core.status.event.data.toolsPage--; | ||||
| 				core.playSound('光标移动'); | ||||
| 				core.ui._drawToolbox(core.status.event.selection); | ||||
| 			} | ||||
| 			if (y === core._HEIGHT_ - 1 && constantsPage > 1) { | ||||
| 				core.status.event.data.constantsPage--; | ||||
| 				core.playSound('光标移动'); | ||||
| 				core.ui._drawToolbox(core.status.event.selection); | ||||
| 			} | ||||
| 		} | ||||
| 		// 下一页
 | ||||
| 		if (x == this._HX_ + 2 || x == this._HX_ + 3) { | ||||
| 			if (y === core._HEIGHT_ - 1 - 5 && toolsPage < Math.ceil(tools.length / this.LAST)) { | ||||
| 				core.status.event.data.toolsPage++; | ||||
| 				core.playSound('光标移动'); | ||||
| 				core.ui._drawToolbox(core.status.event.selection); | ||||
| 			} | ||||
| 			if (y === core._HEIGHT_ - 1 && constantsPage < Math.ceil(constants.length / this.LAST)) { | ||||
| 				core.status.event.data.constantsPage++; | ||||
| 				core.playSound('光标移动'); | ||||
| 				core.ui._drawToolbox(core.status.event.selection); | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		var index = parseInt(x / 2); | ||||
| 		if (y === core._HEIGHT_ - 1 - 8) index += 0; | ||||
| 		else if (y === core._HEIGHT_ - 1 - 6) index += this._HX_; | ||||
| 		else if (y === core._HEIGHT_ - 1 - 3) index += this.LAST; | ||||
| 		else if (y === core._HEIGHT_ - 1 - 1) index += this.LAST + this._HX_; | ||||
| 		else index = -1; | ||||
| 		if (index >= 0) | ||||
| 			this._clickToolboxIndex(index); | ||||
| 	} | ||||
| 	////// 工具栏界面时,放开某个键的操作 //////
 | ||||
| 	actions.prototype._keyUpToolbox = function (keycode) { | ||||
| 		//  if (keycode == 81) {
 | ||||
| 		//    core.playSound('确定');
 | ||||
| 		//    core.ui.closePanel();
 | ||||
| 		//    if (core.isReplaying())
 | ||||
| 		//        core.control._replay_equipbox();
 | ||||
| 		//     else
 | ||||
| 		//        core.openEquipbox();
 | ||||
| 		//     return;
 | ||||
| 		//}
 | ||||
| 		if (keycode == 84 || keycode == 27 || keycode == 88) { | ||||
| 			core.playSound('取消'); | ||||
| 			core.ui.closePanel(); | ||||
| 			var last = core.status.route[core.status.route.length - 1] || ''; | ||||
| 			if (last.startsWith('equip:') || last.startsWith('unEquip:')) { | ||||
| 				core.status.route.push('no'); | ||||
| 			} | ||||
| 			core.checkAutoEvents(); | ||||
| 			return; | ||||
| 		} | ||||
| 		if (core.status.event.data == null) return; | ||||
| 
 | ||||
| 		if (keycode == 13 || keycode == 32 || keycode == 67) { | ||||
| 			this._clickToolboxIndex(core.status.event.selection); | ||||
| 			return; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| }, | ||||
|     "drawLight": function () { | ||||
| @ -4175,7 +4224,10 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = | ||||
| 	var _my_useS_PASS = function (keycode) { ////放开某个键
 | ||||
| 		if (!core.getFlag('useS_PASS')) return false; | ||||
| 		if (keycode == 83) { ////按下S时
 | ||||
| 			core.Confirmskip(); | ||||
| 			if (core.hasAsync()) | ||||
| 				core.drawTip('请等待事件结束'); | ||||
| 			else | ||||
| 				core.Confirmskip(); | ||||
| 		} | ||||
| 	}; | ||||
| 	core.registerAction('keyUp', 'useS_PASS', _my_useS_PASS, 100); | ||||
| @ -4184,7 +4236,10 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = | ||||
| 		if (!core.getFlag('useS_PASS')) return false; | ||||
| 
 | ||||
| 		if (x >= 7 && y <= 2) { | ||||
| 			core.Confirmskip(); | ||||
| 			if (core.hasAsync()) | ||||
| 				core.drawTip('请等待事件结束'); | ||||
| 			else | ||||
| 				core.Confirmskip(); | ||||
| 		} | ||||
| 
 | ||||
| 	}, 100); | ||||
| @ -4477,5 +4532,47 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = | ||||
| 		core.relocateCanvas('ui', 0, 0); | ||||
| 		_doa.call(core.events); | ||||
| 	} | ||||
| }, | ||||
|     "怪物受击发亮": function () { | ||||
| 	// 在此增加新插件
 | ||||
| 	// 在此增加新插件
 | ||||
| 
 | ||||
| 
 | ||||
| 	function pop() { | ||||
| 		var ctx = core.getContextByName('pop'); | ||||
| 		if (!ctx) ctx = core.createCanvas('pop', 0, 0, core.__PIXELS__, core.__PIXELS__, 90); | ||||
| 		core.clearMap(ctx); | ||||
| 
 | ||||
| 		if (core.status.replay.speed <= 3) { | ||||
| 			var list = core.status.pop || []; | ||||
| 			var count = 0; | ||||
| 			list.forEach(function (one) { | ||||
| 
 | ||||
| 				one.frame++; | ||||
| 				// 绘制
 | ||||
| 
 | ||||
| 				core.setFilter(ctx, 'brightness(' + (220 - 6 * one.frame) + '%)'); | ||||
| 
 | ||||
| 
 | ||||
| 				core.drawIcon(ctx, one.value, one.px, one.py, 32, 32); | ||||
| 
 | ||||
| 				if (one.frame >= 20) count++; | ||||
| 			}); | ||||
| 			if (count > 0) list.splice(0, count); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if (!main.replayChecking) { | ||||
| 		core.registerAnimationFrame('pop', true, pop); | ||||
| 	} | ||||
| 	/** 添加弹出内容 */ | ||||
| 	this.addPop = function (px, py, value, frame) { | ||||
| 		var data = { px: px, py: py, value: value, frame: frame || 0 }; | ||||
| 		if (core.status.replay.speed <= 3) { | ||||
| 			if (!core.status.pop) core.status.pop = [data]; | ||||
| 			else core.status.pop.push(data); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user