348 lines
18 KiB
JavaScript
348 lines
18 KiB
JavaScript
function maps() {}
|
||
maps.prototype.init = function() {}
|
||
|
||
maps.prototype.loadFloor = function (floorId, map) {
|
||
var floor = core.floors[floorId];
|
||
var content = {};
|
||
content['floorId'] = floor.floorId;
|
||
content['name'] = floor.name;
|
||
content['title'] = floor.title;
|
||
content['canFlyTo'] = floor.canFlyTo;
|
||
if (!core.isset(map)) map=floor.map;
|
||
var blocks = [];
|
||
for (var i = 0; i < 13; i++) {
|
||
for (var j = 0; j < 13; j++) {
|
||
var block = this.getBlock(j, i, map[i][j]);
|
||
if (block.event != undefined) {
|
||
if (block.event.cls == 'enemys' && block.event.trigger==undefined) {
|
||
block.event.trigger = 'battle';
|
||
}
|
||
if (block.event.cls == 'items' && block.event.trigger==undefined) {
|
||
block.event.trigger = 'getItem';
|
||
}
|
||
if (block.event.noPass == undefined) {
|
||
if (block.event.cls=='enemys' || block.event.cls=='terrains' || block.event.cls=='npcs') {
|
||
block.event.noPass = true;
|
||
}
|
||
}
|
||
if (block.event.animate == undefined) {
|
||
if (block.event.cls=='enemys' || block.event.cls=='npcs') {
|
||
block.event.animate = 2;
|
||
}
|
||
if (block.event.cls == 'animates') {
|
||
block.event.animate = 4;
|
||
}
|
||
}
|
||
}
|
||
this.addEvent(block,j,i,floor.events[j+","+i],floor.defaultGround || "ground")
|
||
this.addChangeFloor(block,j,i,floor.changeFloor[j+","+i]);
|
||
if (core.isset(block.event)) blocks.push(block);
|
||
}
|
||
}
|
||
// 事件处理
|
||
content['blocks'] = blocks;
|
||
return content;
|
||
}
|
||
|
||
maps.prototype.getBlock = function (x, y, id) {
|
||
var enable=null;
|
||
id = ""+id;
|
||
if (id.length>2) {
|
||
if (id.indexOf(":f")==id.length-2) {
|
||
id = id.substring(0, id.length - 2);
|
||
enable = false;
|
||
}
|
||
else if (id.indexOf(":t")==id.length-2) {
|
||
id = id.substring(0, id.length - 2);
|
||
enable = true;
|
||
}
|
||
}
|
||
id=parseInt(id);
|
||
var tmp = {'x': x, 'y': y, 'id': id};
|
||
if (enable!=null) tmp.enable = enable;
|
||
|
||
////////////////////////// 地形部分 //////////////////////////
|
||
|
||
// 0-20 地形
|
||
if (id == 1) tmp.event = {'cls': 'terrains', 'id': 'yellowWall'}; // 黄墙
|
||
if (id == 2) tmp.event = {'cls': 'terrains', 'id': 'whiteWall'}; // 白墙
|
||
if (id == 3) tmp.event = {'cls': 'terrains', 'id': 'blueWall'}; // 白墙
|
||
if (id == 4) tmp.event = {'cls': 'animates', 'id': 'star', 'noPass': true}; // 星空
|
||
if (id == 5) tmp.event = {'cls': 'animates', 'id': 'lava', 'noPass': true}; // 岩浆
|
||
if (id == 6) tmp.event = {'cls': 'terrains', 'id': 'ice'}; // 岩浆
|
||
if (id == 7) tmp.event = {'cls': 'terrains', 'id': 'blueShop-left'}; // 蓝色商店左
|
||
if (id == 8) tmp.event = {'cls': 'terrains', 'id': 'blueShop-right'}; // 蓝色商店右
|
||
if (id == 9) tmp.event = {'cls': 'terrains', 'id': 'pinkShop-left'}; // 粉色商店左
|
||
if (id == 10) tmp.event = {'cls': 'terrains', 'id': 'pinkShop-right'}; // 粉色商店左
|
||
if (id == 11) tmp.event = {'cls': 'animates', 'id': 'lavaNet', 'noPass': false, 'trigger': 'passNet'}; // 血网
|
||
if (id == 12) tmp.event = {'cls': 'animates', 'id': 'poisonNet', 'noPass': false, 'trigger': 'passNet'}; // 毒网
|
||
if (id == 13) tmp.event = {'cls': 'animates', 'id': 'weakNet', 'noPass': false, 'trigger': 'passNet'}; // 衰网
|
||
if (id == 14) tmp.event = {'cls': 'animates', 'id': 'curseNet', 'noPass': false, 'trigger': 'passNet'}; // 咒网
|
||
if (id == 15) tmp.event = {'cls': 'animates', 'id': 'water', 'noPass': true}; // 水
|
||
// 在这里添加更多地形
|
||
// 如果空地不足,可以从180以后开始继续放,只要不和现有的数字冲突即可
|
||
|
||
// Autotile
|
||
if (id == 20) tmp.event = {'cls': 'autotile', 'id': 'autotile', 'noPass': true}; // autotile
|
||
// 更多的autotile从151到160,只要不和现有的数字冲突即可
|
||
if (id == 151) tmp.event = {'cls': 'autotile', 'id': 'autotile1', 'noPass': true};
|
||
if (id == 152) tmp.event = {'cls': 'autotile', 'id': 'autotile2', 'noPass': true};
|
||
if (id == 153) tmp.event = {'cls': 'autotile', 'id': 'autotile3', 'noPass': true};
|
||
|
||
|
||
////////////////////////// 物品部分 //////////////////////////
|
||
|
||
// 21-80 物品
|
||
if (id == 21) tmp.event = {'cls': 'items', 'id': 'yellowKey'}; // 黄钥匙
|
||
if (id == 22) tmp.event = {'cls': 'items', 'id': 'blueKey'}; // 蓝钥匙
|
||
if (id == 23) tmp.event = {'cls': 'items', 'id': 'redKey'}; // 红钥匙
|
||
if (id == 24) tmp.event = {'cls': 'items', 'id': 'greenKey'}; // 绿钥匙
|
||
if (id == 25) tmp.event = {'cls': 'items', 'id': 'steelKey'}; // 铁门钥匙
|
||
if (id == 26) tmp.event = {'cls': 'items', 'id': 'bigKey'}; // 大黄门钥匙(钥匙盒)
|
||
if (id == 27) tmp.event = {'cls': 'items', 'id': 'redJewel'}; // 红宝石
|
||
if (id == 28) tmp.event = {'cls': 'items', 'id': 'blueJewel'}; // 蓝宝石
|
||
if (id == 29) tmp.event = {'cls': 'items', 'id': 'greenJewel'}; // 绿宝石
|
||
if (id == 30) tmp.event = {'cls': 'items', 'id': 'yellowJewel'}; // 黄宝石
|
||
if (id == 31) tmp.event = {'cls': 'items', 'id': 'redPotion'}; // 红血瓶
|
||
if (id == 32) tmp.event = {'cls': 'items', 'id': 'bluePotion'}; // 蓝血瓶
|
||
if (id == 33) tmp.event = {'cls': 'items', 'id': 'greenPotion'}; // 绿血瓶
|
||
if (id == 34) tmp.event = {'cls': 'items', 'id': 'yellowPotion'}; // 黄血瓶
|
||
if (id == 35) tmp.event = {'cls': 'items', 'id': 'sword1'}; // 铁剑
|
||
if (id == 36) tmp.event = {'cls': 'items', 'id': 'shield1'}; // 铁盾
|
||
if (id == 37) tmp.event = {'cls': 'items', 'id': 'sword2'}; // 银剑
|
||
if (id == 38) tmp.event = {'cls': 'items', 'id': 'shield2'}; // 银盾
|
||
if (id == 39) tmp.event = {'cls': 'items', 'id': 'sword3'}; // 骑士剑
|
||
if (id == 40) tmp.event = {'cls': 'items', 'id': 'shield3'}; // 骑士盾
|
||
if (id == 41) tmp.event = {'cls': 'items', 'id': 'sword4'}; // 圣剑
|
||
if (id == 42) tmp.event = {'cls': 'items', 'id': 'shield4'}; // 圣盾
|
||
if (id == 43) tmp.event = {'cls': 'items', 'id': 'sword5'}; // 神圣剑
|
||
if (id == 44) tmp.event = {'cls': 'items', 'id': 'shield5'}; // 神圣盾
|
||
if (id == 45) tmp.event = {'cls': 'items', 'id': 'book'}; // 怪物手册
|
||
if (id == 46) tmp.event = {'cls': 'items', 'id': 'fly'}; // 楼层传送器
|
||
if (id == 47) tmp.event = {'cls': 'items', 'id': 'pickaxe'}; // 破墙镐
|
||
if (id == 48) tmp.event = {'cls': 'items', 'id': 'icePickaxe'}; // 破冰镐
|
||
if (id == 49) tmp.event = {'cls': 'items', 'id': 'bomb'}; // 炸弹
|
||
if (id == 50) tmp.event = {'cls': 'items', 'id': 'centerFly'}; // 中心对称
|
||
if (id == 51) tmp.event = {'cls': 'items', 'id': 'upFly'}; // 上楼器
|
||
if (id == 52) tmp.event = {'cls': 'items', 'id': 'downFly'}; // 下楼器
|
||
if (id == 53) tmp.event = {'cls': 'items', 'id': 'coin'}; // 幸运金币
|
||
if (id == 54) tmp.event = {'cls': 'items', 'id': 'snow'}; // 冰冻徽章
|
||
if (id == 55) tmp.event = {'cls': 'items', 'id': 'cross'}; // 十字架
|
||
if (id == 56) tmp.event = {'cls': 'items', 'id': 'superPotion'}; // 圣水
|
||
if (id == 57) tmp.event = {'cls': 'items', 'id': 'earthquake'} // 地震卷轴
|
||
if (id == 58) tmp.event = {'cls': 'items', 'id': 'poisonWine'} // 解毒药水
|
||
if (id == 59) tmp.event = {'cls': 'items', 'id': 'weakWine'} // 解衰药水
|
||
if (id == 60) tmp.event = {'cls': 'items', 'id': 'curseWine'} // 解咒药水
|
||
if (id == 61) tmp.event = {'cls': 'items', 'id': 'superWine'} // 万能药水
|
||
if (id == 62) tmp.event = {'cls': 'items', 'id': 'knife'} // 屠龙匕首
|
||
if (id == 63) tmp.event = {'cls': 'items', 'id': 'moneyPocket'} // 金钱袋
|
||
if (id == 64) tmp.event = {'cls': 'items', 'id': 'shoes'} // 绿鞋
|
||
if (id == 65) tmp.event = {'cls': 'items', 'id': 'hammer'} // 圣锤
|
||
|
||
|
||
////////////////////////// 门、楼梯、传送点部分 //////////////////////////
|
||
|
||
// 81-100 门
|
||
if (id == 81) tmp.event = {'cls': 'terrains', 'id': 'yellowDoor', 'trigger': 'openDoor'}; // 黄门
|
||
if (id == 82) tmp.event = {'cls': 'terrains', 'id': 'blueDoor', 'trigger': 'openDoor'}; // 蓝门
|
||
if (id == 83) tmp.event = {'cls': 'terrains', 'id': 'redDoor', 'trigger': 'openDoor'}; // 红门
|
||
if (id == 84) tmp.event = {'cls': 'terrains', 'id': 'greenDoor', 'trigger': 'openDoor'}; // 绿门
|
||
if (id == 85) tmp.event = {'cls': 'terrains', 'id': 'specialDoor', 'trigger': 'openDoor'}; // 机关门左
|
||
if (id == 86) tmp.event = {'cls': 'terrains', 'id': 'steelDoor', 'trigger': 'openDoor'}; // 铁门
|
||
if (id == 87) tmp.event = {'cls': 'terrains', 'id': 'upFloor', 'noPass': false}; // 上楼梯
|
||
if (id == 88) tmp.event = {'cls': 'terrains', 'id': 'downFloor', 'noPass': false}; // 下楼梯
|
||
if (id == 89) tmp.event = {'cls': 'animates', 'id': 'portal', 'noPass': false}; // 传送门
|
||
if (id == 90) tmp.event = {'cls': 'animates', 'id': 'starPortal', 'noPass': false}; // 星空传送门
|
||
if (id == 91) tmp.event = {'cls': 'animates', 'id': 'upPortal', 'noPass': false}; // 上箭头
|
||
if (id == 92) tmp.event = {'cls': 'animates', 'id': 'leftPortal', 'noPass': false}; // 左箭头
|
||
if (id == 93) tmp.event = {'cls': 'animates', 'id': 'downPortal', 'noPass': false}; // 下箭头
|
||
if (id == 94) tmp.event = {'cls': 'animates', 'id': 'rightPortal', 'noPass': false}; // 右箭头
|
||
|
||
|
||
////////////////////////// NPC部分 //////////////////////////
|
||
|
||
// 121-150 NPC
|
||
if (id == 121) tmp.event = {'cls': 'npcs', 'id': 'man'};
|
||
if (id == 122) tmp.event = {'cls': 'npcs', 'id': 'woman'};
|
||
if (id == 123) tmp.event = {'cls': 'npcs', 'id': 'thief'};
|
||
if (id == 124) tmp.event = {'cls': 'npcs', 'id': 'fairy'};
|
||
if (id == 125) tmp.event = {'cls': 'npcs', 'id': 'magician'};
|
||
if (id == 126) tmp.event = {'cls': 'npcs', 'id': 'womanMagician'};
|
||
if (id == 127) tmp.event = {'cls': 'npcs', 'id': 'oldMan'};
|
||
if (id == 128) tmp.event = {'cls': 'npcs', 'id': 'child'};
|
||
if (id == 129) tmp.event = {'cls': 'npcs', 'id': 'wood'};
|
||
if (id == 130) tmp.event = {'cls': 'npcs', 'id': 'pinkShop'};
|
||
if (id == 131) tmp.event = {'cls': 'npcs', 'id': 'blueShop'};
|
||
if (id == 132) tmp.event = {'cls': 'npcs', 'id': 'princess'};
|
||
|
||
////////////////////////// 其他部分 //////////////////////////
|
||
|
||
// 161-200 其他(单向箭头、灯、箱子等等)
|
||
if (id == 161) tmp.event = {'cls': 'terrains', 'id': 'arrowUp', 'noPass': false}; // 单向上箭头
|
||
if (id == 162) tmp.event = {'cls': 'terrains', 'id': 'arrowDown', 'noPass': false}; // 单向下箭头
|
||
if (id == 163) tmp.event = {'cls': 'terrains', 'id': 'arrowLeft', 'noPass': false}; // 单向左箭头
|
||
if (id == 164) tmp.event = {'cls': 'terrains', 'id': 'arrowRight', 'noPass': false}; // 单向右箭头
|
||
if (id == 165) tmp.event = {'cls': 'terrains', 'id': 'light', 'trigger': 'changeLight', 'noPass': false}; // 灯
|
||
if (id == 166) tmp.event = {'cls': 'terrains', 'id': 'darkLight', 'noPass': true}; // 暗灯
|
||
|
||
|
||
////////////////////////// 怪物部分 //////////////////////////
|
||
|
||
// 201-300 怪物
|
||
if (id == 201) tmp.event = {'cls': 'enemys', 'id': 'greenSlime'};
|
||
if (id == 202) tmp.event = {'cls': 'enemys', 'id': 'redSlime'};
|
||
if (id == 203) tmp.event = {'cls': 'enemys', 'id': 'blackSlime'};
|
||
if (id == 204) tmp.event = {'cls': 'enemys', 'id': 'slimelord'};
|
||
if (id == 205) tmp.event = {'cls': 'enemys', 'id': 'bat'};
|
||
if (id == 206) tmp.event = {'cls': 'enemys', 'id': 'bigBat'};
|
||
if (id == 207) tmp.event = {'cls': 'enemys', 'id': 'redBat'};
|
||
if (id == 208) tmp.event = {'cls': 'enemys', 'id': 'vampire'};
|
||
if (id == 209) tmp.event = {'cls': 'enemys', 'id': 'skeleton'};
|
||
if (id == 210) tmp.event = {'cls': 'enemys', 'id': 'skeletonSoilder'};
|
||
if (id == 211) tmp.event = {'cls': 'enemys', 'id': 'skeletonCaptain'};
|
||
if (id == 212) tmp.event = {'cls': 'enemys', 'id': 'ghostSkeleton'};
|
||
if (id == 213) tmp.event = {'cls': 'enemys', 'id': 'zombie'};
|
||
if (id == 214) tmp.event = {'cls': 'enemys', 'id': 'zombieKnight'};
|
||
if (id == 215) tmp.event = {'cls': 'enemys', 'id': 'rock'};
|
||
if (id == 216) tmp.event = {'cls': 'enemys', 'id': 'slimeMan'};
|
||
if (id == 217) tmp.event = {'cls': 'enemys', 'id': 'bluePriest'};
|
||
if (id == 218) tmp.event = {'cls': 'enemys', 'id': 'redPriest'};
|
||
if (id == 219) tmp.event = {'cls': 'enemys', 'id': 'brownWizard'};
|
||
if (id == 220) tmp.event = {'cls': 'enemys', 'id': 'redWizard'};
|
||
if (id == 221) tmp.event = {'cls': 'enemys', 'id': 'yellowGuard'};
|
||
if (id == 222) tmp.event = {'cls': 'enemys', 'id': 'blueGuard'};
|
||
if (id == 223) tmp.event = {'cls': 'enemys', 'id': 'redGuard'};
|
||
if (id == 224) tmp.event = {'cls': 'enemys', 'id': 'swordsman'};
|
||
if (id == 225) tmp.event = {'cls': 'enemys', 'id': 'soldier'};
|
||
if (id == 226) tmp.event = {'cls': 'enemys', 'id': 'yellowKnight'};
|
||
if (id == 227) tmp.event = {'cls': 'enemys', 'id': 'redKnight'};
|
||
if (id == 228) tmp.event = {'cls': 'enemys', 'id': 'darkKnight'};
|
||
if (id == 229) tmp.event = {'cls': 'enemys', 'id': 'blackKing'};
|
||
if (id == 230) tmp.event = {'cls': 'enemys', 'id': 'yellowKing'};
|
||
if (id == 231) tmp.event = {'cls': 'enemys', 'id': 'greenKing'};
|
||
if (id == 232) tmp.event = {'cls': 'enemys', 'id': 'blueKnight'};
|
||
if (id == 233) tmp.event = {'cls': 'enemys', 'id': 'goldSlime'};
|
||
if (id == 234) tmp.event = {'cls': 'enemys', 'id': 'poisonSkeleton'};
|
||
if (id == 235) tmp.event = {'cls': 'enemys', 'id': 'poisonBat'};
|
||
if (id == 236) tmp.event = {'cls': 'enemys', 'id': 'steelRock'};
|
||
if (id == 237) tmp.event = {'cls': 'enemys', 'id': 'skeletonPriest'};
|
||
if (id == 238) tmp.event = {'cls': 'enemys', 'id': 'skeletonKing'};
|
||
if (id == 239) tmp.event = {'cls': 'enemys', 'id': 'skeletonWizard'};
|
||
if (id == 240) tmp.event = {'cls': 'enemys', 'id': 'redSkeletonCaption'};
|
||
if (id == 241) tmp.event = {'cls': 'enemys', 'id': 'badHero'};
|
||
if (id == 242) tmp.event = {'cls': 'enemys', 'id': 'demon'};
|
||
if (id == 243) tmp.event = {'cls': 'enemys', 'id': 'demonPriest'};
|
||
if (id == 244) tmp.event = {'cls': 'enemys', 'id': 'goldHornSlime'};
|
||
if (id == 245) tmp.event = {'cls': 'enemys', 'id': 'redKing'};
|
||
if (id == 246) tmp.event = {'cls': 'enemys', 'id': 'whiteKing'};
|
||
if (id == 247) tmp.event = {'cls': 'enemys', 'id': 'blackMagician'};
|
||
if (id == 248) tmp.event = {'cls': 'enemys', 'id': 'silverSlime'};
|
||
if (id == 249) tmp.event = {'cls': 'enemys', 'id': 'swordEmperor'};
|
||
if (id == 250) tmp.event = {'cls': 'enemys', 'id': 'whiteHornSlime'};
|
||
if (id == 251) tmp.event = {'cls': 'enemys', 'id': 'badPrincess'};
|
||
if (id == 252) tmp.event = {'cls': 'enemys', 'id': 'badFairy'};
|
||
if (id == 253) tmp.event = {'cls': 'enemys', 'id': 'grayPriest'};
|
||
if (id == 254) tmp.event = {'cls': 'enemys', 'id': 'redSwordsman'};
|
||
if (id == 255) tmp.event = {'cls': 'enemys', 'id': 'whiteGhost'};
|
||
if (id == 256) tmp.event = {'cls': 'enemys', 'id': 'poisonZombie'};
|
||
if (id == 257) tmp.event = {'cls': 'enemys', 'id': 'magicDragon'};
|
||
if (id == 258) tmp.event = {'cls': 'enemys', 'id': 'octopus'};
|
||
if (id == 259) tmp.event = {'cls': 'enemys', 'id': 'darkFairy'};
|
||
if (id == 260) tmp.event = {'cls': 'enemys', 'id': 'greenKnight'};
|
||
|
||
////////////////////////// 待定... //////////////////////////
|
||
// 目前ID暂时不要超过400
|
||
|
||
return tmp;
|
||
}
|
||
|
||
maps.prototype.addEvent = function (block, x, y, event, ground) {
|
||
if (!core.isset(event)) return;
|
||
if (!core.isset(block.event)) { // 本身是空地?
|
||
block.event = {'cls': 'terrains', 'id': ground, 'noPass': false};
|
||
}
|
||
// event是字符串或数组?
|
||
if (typeof event == "string") {
|
||
event = {"data": [event]};
|
||
}
|
||
else if (event instanceof Array) {
|
||
event = {"data": event};
|
||
}
|
||
if (!core.isset(event.data))
|
||
event.data = [];
|
||
|
||
// 覆盖enable
|
||
if (!core.isset(block.enable) && core.isset(event.enable)) {
|
||
block.enable=event.enable;
|
||
}
|
||
// 覆盖trigger
|
||
if (!core.isset(block.event.trigger)) {
|
||
if (core.isset(event.trigger)) block.event.trigger=event.trigger;
|
||
else block.event.trigger='action';
|
||
}
|
||
else if (core.isset(event.trigger) && event.trigger!='checkBlock') {
|
||
block.event.trigger=event.trigger;
|
||
}
|
||
// 覆盖其他属性
|
||
for (var key in event) {
|
||
if (key!="enable" && key!="trigger") {
|
||
block.event[key]=core.clone(event[key]);
|
||
}
|
||
}
|
||
}
|
||
|
||
maps.prototype.addChangeFloor = function (block, x, y, event, ground) {
|
||
if (!core.isset(event)) return;
|
||
this.addEvent(block, x, y, {"trigger": "changeFloor", "data": event}, ground);
|
||
}
|
||
|
||
maps.prototype.initMaps = function (floorIds) {
|
||
var maps = {};
|
||
for (var i=0;i<floorIds.length;i++) {
|
||
var floorId = floorIds[i];
|
||
maps[floorId] = this.loadFloor(floorId);
|
||
}
|
||
return maps;
|
||
}
|
||
|
||
maps.prototype.save = function(maps, floorId) {
|
||
if (!core.isset(floorId)) {
|
||
var map = {};
|
||
for (var id in maps) {
|
||
map[id] = this.save(maps, id);
|
||
// map.push(this.save(maps, id));
|
||
}
|
||
return map;
|
||
}
|
||
|
||
var thisFloor = maps[floorId];
|
||
|
||
var blocks = [];
|
||
for (var x=0;x<13;x++) {
|
||
blocks[x]=[];
|
||
for (var y=0;y<13;y++) {
|
||
blocks[x].push(0);
|
||
}
|
||
}
|
||
thisFloor.blocks.forEach(function (block) {
|
||
if (core.isset(block.enable)) {
|
||
if (block.enable) blocks[block.y][block.x] = block.id+":t";
|
||
else blocks[block.y][block.x] = block.id+":f";
|
||
}
|
||
else blocks[block.y][block.x] = block.id;
|
||
});
|
||
return blocks;
|
||
}
|
||
|
||
maps.prototype.load = function (data, floorId) {
|
||
if (floorId == undefined) {
|
||
var map = {};
|
||
for (var id in data) {
|
||
map[id] = this.load(data, id);
|
||
}
|
||
return map;
|
||
}
|
||
return this.loadFloor(floorId, data[floorId]);
|
||
}
|
||
|
||
main.instance.maps = new maps(); |