第二章二区准备

This commit is contained in:
unanmed 2023-01-06 16:21:17 +08:00
parent 98123bede8
commit b84b1e6137
57 changed files with 1502 additions and 155 deletions

View File

@ -237,6 +237,30 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc = {
"_docs": "饥渴", "_docs": "饥渴",
"_data": "饥渴" "_data": "饥渴"
}, },
"ice": {
"_leaf": true,
"_type": "textarea",
"_docs": "霜冻",
"_data": "霜冻"
},
"iceHalo": {
"_leaf": true,
"_type": "textarea",
"_docs": "冰封光环",
"_data": "冰封光环"
},
"night": {
"_leaf": true,
"_type": "textarea",
"_docs": "永夜",
"_data": "永夜"
},
"day": {
"_leaf": true,
"_type": "textarea",
"_docs": "极昼",
"_data": "极昼"
},
"value": { "value": {
"_leaf": true, "_leaf": true,
"_type": "textarea", "_type": "textarea",

View File

@ -1705,6 +1705,7 @@ control.prototype.drawDamage = function (ctx) {
control.prototype._drawDamage_draw = function (ctx, onMap) { control.prototype._drawDamage_draw = function (ctx, onMap) {
if (!core.hasItem('book')) return; if (!core.hasItem('book')) return;
core.drawHalo(ctx, onMap);
core.setFont(ctx, "14px 'normal'"); core.setFont(ctx, "14px 'normal'");
core.setTextAlign(ctx, 'left'); core.setTextAlign(ctx, 'left');

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -40,7 +40,21 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"MT28", "MT28",
"MT29", "MT29",
"MT30", "MT30",
"MT31" "MT31",
"MT32",
"MT33",
"MT34",
"MT35",
"MT36",
"MT37",
"MT38",
"MT39",
"MT40",
"MT41",
"MT42",
"MT43",
"MT44",
"MT45"
], ],
"floorPartitions": [ "floorPartitions": [
[ [
@ -94,7 +108,8 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"004-Mountain01.png", "004-Mountain01.png",
"Map-Tower01.png", "Map-Tower01.png",
"Caverna1.png", "Caverna1.png",
"map-tower.png" "map-tower.png",
"winter1.png"
], ],
"animates": [ "animates": [
"amazed", "amazed",
@ -128,7 +143,8 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"grass.mp3", "grass.mp3",
"mount.mp3", "mount.mp3",
"night.mp3", "night.mp3",
"palace.mp3", "palaceNorth.mp3",
"palaceSouth.mp3",
"plot1.mp3", "plot1.mp3",
"road.mp3", "road.mp3",
"title.mp3", "title.mp3",
@ -136,7 +152,8 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"towerBoss.mp3", "towerBoss.mp3",
"towerBoss2.mp3", "towerBoss2.mp3",
"towerBoss3.mp3", "towerBoss3.mp3",
"winter.mp3" "winter.mp3",
"winterTown.mp3"
], ],
"sounds": [ "sounds": [
"008-System08.ogg", "008-System08.ogg",

View File

@ -41,7 +41,7 @@ var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 =
"elemental": {"name":"元素生物","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]}, "elemental": {"name":"元素生物","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"steelGuard": {"name":"铁守卫","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[18],"value":20}, "steelGuard": {"name":"铁守卫","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[18],"value":20},
"evilBat": {"name":"邪恶蝙蝠","hp":1000,"atk":800,"def":350,"money":1,"exp":40,"point":0,"special":[2]}, "evilBat": {"name":"邪恶蝙蝠","hp":1000,"atk":800,"def":350,"money":1,"exp":40,"point":0,"special":[2]},
"frozenSkeleton": {"name":"冻死骨","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]}, "frozenSkeleton": {"name":"冻死骨","hp":7500,"atk":2500,"def":1000,"money":2,"exp":90,"point":0,"special":[1,20],"crit":500,"ice":10},
"silverSlimelord": {"name":"银怪王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]}, "silverSlimelord": {"name":"银怪王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"goldSlimelord": {"name":"金怪王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]}, "goldSlimelord": {"name":"金怪王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"skeletonWarrior": {"name":"骷髅士兵","hp":500,"atk":100,"def":20,"money":0,"exp":12,"point":0,"special":[1],"crit":500}, "skeletonWarrior": {"name":"骷髅士兵","hp":500,"atk":100,"def":20,"money":0,"exp":12,"point":0,"special":[1],"crit":500},
@ -99,7 +99,7 @@ var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 =
"E511": {"name":"山野蝙蝠","hp":1500,"atk":300,"def":120,"money":1,"exp":37,"point":0,"special":[5]}, "E511": {"name":"山野蝙蝠","hp":1500,"atk":300,"def":120,"money":1,"exp":37,"point":0,"special":[5]},
"E512": {"name":"专业盗贼","hp":1800,"atk":400,"def":170,"money":1,"exp":40,"point":0,"special":[5]}, "E512": {"name":"专业盗贼","hp":1800,"atk":400,"def":170,"money":1,"exp":40,"point":0,"special":[5]},
"E513": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]}, "E513": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"E514": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]}, "E514": {"name":"雪原剑客","hp":10000,"atk":3000,"def":500,"money":2,"exp":110,"point":0,"special":[5,19]},
"E515": {"name":"勇气之剑","hp":2500,"atk":550,"def":270,"money":2,"exp":40,"point":0,"special":[5,10],"courage":500}, "E515": {"name":"勇气之剑","hp":2500,"atk":550,"def":270,"money":2,"exp":40,"point":0,"special":[5,10],"courage":500},
"E517": {"name":"勇气之盾","hp":4000,"atk":400,"def":350,"money":1,"exp":30,"point":0,"special":[9]}, "E517": {"name":"勇气之盾","hp":4000,"atk":400,"def":350,"money":1,"exp":30,"point":0,"special":[9]},
"E518": {"name":"勇气圣骑","hp":4000,"atk":1000,"def":400,"money":1,"exp":45,"point":0,"special":[11],"charge":600}, "E518": {"name":"勇气圣骑","hp":4000,"atk":1000,"def":400,"money":1,"exp":45,"point":0,"special":[11],"charge":600},
@ -138,5 +138,19 @@ var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 =
"E576": {"name":"智慧守卫","hp":7500,"atk":2500,"def":1250,"money":10,"exp":500,"point":0,"special":[1],"crit":250}, "E576": {"name":"智慧守卫","hp":7500,"atk":2500,"def":1250,"money":10,"exp":500,"point":0,"special":[1],"crit":250},
"E577": {"name":"智慧守护者","hp":15000,"atk":2500,"def":1200,"money":50,"exp":2500,"point":0,"special":[1],"crit":1000}, "E577": {"name":"智慧守护者","hp":15000,"atk":2500,"def":1200,"money":50,"exp":2500,"point":0,"special":[1],"crit":1000},
"E578": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]}, "E578": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"E579": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]} "E579": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"E590": {"name":"冰封史莱姆","hp":7500,"atk":1750,"def":1000,"money":2,"exp":75,"point":0,"special":[20],"ice":25},
"E591": {"name":"新敌人","hp":10000,"atk":2000,"def":1000,"money":0,"exp":0,"point":0,"special":[]},
"E592": {"name":"冰封巨兽","hp":10000,"atk":2000,"def":1000,"money":2,"exp":85,"point":0,"special":[20,21],"iceHalo":10,"ice":50},
"E593": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"E594": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"E595": {"name":"寒冰兽人","hp":12500,"atk":1800,"def":800,"money":2,"exp":100,"point":0,"special":[7],"hungry":25},
"E596": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"E597": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"E598": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"E599": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"E600": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"E601": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"E602": {"name":"永夜蝠","hp":6000,"atk":2000,"def":800,"money":1,"exp":65,"point":0,"special":[22],"night":100},
"E603": {"name":"极昼蝠","hp":8000,"atk":1750,"def":1000,"money":1,"exp":65,"point":0,"special":[23],"day":100}
} }

View File

@ -44,8 +44,8 @@ main.floors.MT27=
[143,143,143,143, 91,143,143,143,143,143,143,143,143,143,143], [143,143,143,143, 91,143,143,143,143,143,143,143,143,143,143],
[143,143,143,143, 0,143,143,420,143,143,143,143,143,143,143], [143,143,143,143, 0,143,143,420,143,143,143,143,143,143,143],
[ 92, 0, 0,482, 0,497,143,430,491,280,143,143,143,143,143], [ 92, 0, 0,482, 0,497,143,430,491,280,143,143,143,143,143],
[143,143,492,143,143,143,143,143,143, 0,143,143,143,143,143], [143,143,494,143,143,143,143,143,143, 0,143,143,143,143,143],
[143, 0, 0,492,491,492,390, 0,484, 0,143,143,143,143,143], [143, 0, 0,494,491,494,390, 0,484, 0,143,143,143,143,143],
[143, 0,143,143,143,143, 0,143,143,143,143,143,143,143,143], [143, 0,143,143,143,143, 0,143,143,143,143,143,143,143,143],
[143,441,143,390,482,143, 0,143,484,396,143,143,143,143,143], [143,441,143,390,482,143, 0,143,484,396,143,143,143,143,143],
[143, 33,500,482,396,143,403,568, 21,403,143,143,143,143,143], [143, 33,500,482,396,143,403,568, 21,403,143,143,143,143,143],

View File

@ -47,7 +47,101 @@ main.floors.MT31=
], ],
"eachArrive": [], "eachArrive": [],
"parallelDo": "", "parallelDo": "",
"events": {}, "events": {
"14,7": [
{
"type": "if",
"condition": "(!flag:inWinter)",
"true": [
{
"type": "setCurtain",
"color": [
0,
0,
0,
1
],
"time": 1500,
"keep": true
},
{
"type": "setText",
"text": [
0,
0,
0,
1
],
"background": "winskin3.png"
},
"人类简史——进化篇",
{
"type": "playSound",
"name": "paper.mp3"
},
"经过了漫长的行走,他感到真相越来越接近。",
{
"type": "playSound",
"name": "paper.mp3"
},
"前方,是会将凛冽渗入骨髓的冰封雪原。",
{
"type": "playSound",
"name": "paper.mp3"
},
"这里,他将寻找到所谓的真相。",
{
"type": "changeFloor",
"floorId": "MT32",
"loc": [
0,
7
]
},
{
"type": "setCurtain",
"time": 1000
},
{
"type": "setText",
"text": [
255,
255,
255,
1
],
"background": "winskin2.png"
},
"\t[初级智人]\b[up,hero]呼,好冷。",
"\t[初级智人]\b[up,hero]嗯?",
{
"type": "moveHero",
"time": 250,
"steps": [
"right:1"
]
},
"\t[初级智人]\b[up,hero]这是杰克给我留下的衣服吗?",
"\t[初级智人]\b[up,hero]先穿上吧,这里太冷了。",
{
"type": "setValue",
"name": "flag:inWinter",
"value": "true"
}
],
"false": [
{
"type": "changeFloor",
"floorId": "MT32",
"loc": [
0,
7
]
}
]
}
]
},
"changeFloor": { "changeFloor": {
"0,7": { "0,7": {
"floorId": "MT29", "floorId": "MT29",
@ -153,7 +247,7 @@ main.floors.MT31=
[143,143, 0, 0, 0, 0,143,491,491,468,468,466,466,143,143], [143,143, 0, 0, 0, 0,143,491,491,468,468,466,466,143,143],
[143,143, 0,491,491, 0,143, 85,143,143,143,143,143,143,143], [143,143, 0,491,491, 0,143, 85,143,143,143,143,143,143,143],
[143,143, 0, 0, 0, 0,143, 0, 0, 0, 0, 0, 0,143,143], [143,143, 0, 0, 0, 0,143, 0, 0, 0, 0, 0, 0,143,143],
[ 92, 0, 0, 23,123, 0,497, 0, 0, 0,577, 0, 0, 0, 0], [ 92, 0, 0, 23,123, 0,497, 0, 0, 0,577, 0, 0, 0, 94],
[143,143, 0, 0, 0, 0,143, 0, 0, 0, 0, 0, 0,143,143], [143,143, 0, 0, 0, 0,143, 0, 0, 0, 0, 0, 0,143,143],
[143,143, 0,491,491, 0,143, 85,143,143,143,143,143,143,143], [143,143, 0,491,491, 0,143, 85,143,143,143,143,143,143,143],
[143,143, 0, 0, 0, 0,143,491,491,468,468,467,467,143,143], [143,143, 0, 0, 0, 0,143,491,491,468,468,467,467,143,143],

View File

@ -0,0 +1,104 @@
main.floors.MT32=
{
"floorId": "MT32",
"title": "冰封雪原",
"name": "冰封雪原",
"width": 15,
"height": 15,
"canFlyTo": true,
"canFlyFrom": true,
"canUseQuickShop": true,
"cannotViewMap": false,
"images": [],
"ratio": 8,
"defaultGround": "T580",
"bgm": "winter.mp3",
"firstArrive": [],
"eachArrive": [],
"parallelDo": "",
"events": {
"0,7": [
{
"type": "changeFloor",
"floorId": "MT31",
"loc": [
14,
7
]
}
],
"1,6": [
"宝石血瓶的加成已提升至8倍"
],
"1,8": [
"衣服是个装备,记得穿上",
"光环会在地图上显示,如果不想要可以在背包里面的系统设置里面关闭",
"每张地图会保证极昼怪的数量与永夜怪的数量相同"
]
},
"changeFloor": {},
"beforeBattle": {},
"afterBattle": {},
"afterGetItem": {},
"afterOpenDoor": {},
"autoEvent": {},
"cannotMove": {},
"cannotMoveIn": {},
"map": [
[147,147,147,147,147,147,147,147,147,147,147,147,147,147,147],
[147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,147],
[147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,147],
[147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,147],
[147, 0, 0, 0, 0,514, 0, 0, 0, 0, 0, 0, 0, 0,147],
[147,147,147,147,147, 0,274, 0, 0, 0, 0, 0, 0, 0,147],
[147,129, 0, 21,147,590, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 92, 0,589, 0,492, 0,595, 0, 0, 0, 0, 0, 0, 0,147],
[147,129, 0, 22,147,602, 0, 0, 0, 0, 0, 0, 0, 0,147],
[147,147,147,147,147, 0,603, 0, 0, 0, 0, 0, 0, 0,147],
[147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,147],
[147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,592, 0, 0,147],
[147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,147],
[147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,147],
[147,147,147,147,147,147,147,147,147,147,147,147,147,147,147]
],
"bgmap": [
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,145,145,145,145],
[145,145,145,145,145,145,145,145,145,145,145,145, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
],
"fgmap": [
],
"bg2map": [
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0,146,146,146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0,146,146,146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0,146,146,146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
],
"fg2map": [
]
}

View File

@ -0,0 +1,45 @@
main.floors.MT33=
{
"floorId": "MT33",
"title": "冰封雪原",
"name": "冰封雪原",
"width": 15,
"height": 15,
"canFlyTo": true,
"canFlyFrom": true,
"canUseQuickShop": true,
"cannotViewMap": false,
"images": [],
"ratio": 8,
"defaultGround": "T580",
"bgm": "winter.mp3",
"firstArrive": [],
"eachArrive": [],
"parallelDo": "",
"events": {},
"changeFloor": {},
"beforeBattle": {},
"afterBattle": {},
"afterGetItem": {},
"afterOpenDoor": {},
"autoEvent": {},
"cannotMove": {},
"cannotMoveIn": {},
"map": [
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
],
}

View File

@ -0,0 +1,45 @@
main.floors.MT34=
{
"floorId": "MT34",
"title": "冰封雪原",
"name": "冰封雪原",
"width": 15,
"height": 15,
"canFlyTo": true,
"canFlyFrom": true,
"canUseQuickShop": true,
"cannotViewMap": false,
"images": [],
"ratio": 8,
"defaultGround": "T580",
"bgm": "winter.mp3",
"firstArrive": [],
"eachArrive": [],
"parallelDo": "",
"events": {},
"changeFloor": {},
"beforeBattle": {},
"afterBattle": {},
"afterGetItem": {},
"afterOpenDoor": {},
"autoEvent": {},
"cannotMove": {},
"cannotMoveIn": {},
"map": [
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
],
}

View File

@ -0,0 +1,45 @@
main.floors.MT35=
{
"floorId": "MT35",
"title": "冰封雪原",
"name": "冰封雪原",
"width": 15,
"height": 15,
"canFlyTo": true,
"canFlyFrom": true,
"canUseQuickShop": true,
"cannotViewMap": false,
"images": [],
"ratio": 8,
"defaultGround": "T580",
"bgm": "winter.mp3",
"firstArrive": [],
"eachArrive": [],
"parallelDo": "",
"events": {},
"changeFloor": {},
"beforeBattle": {},
"afterBattle": {},
"afterGetItem": {},
"afterOpenDoor": {},
"autoEvent": {},
"cannotMove": {},
"cannotMoveIn": {},
"map": [
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
],
}

View File

@ -0,0 +1,45 @@
main.floors.MT36=
{
"floorId": "MT36",
"title": "冰封雪原",
"name": "冰封雪原",
"width": 15,
"height": 15,
"canFlyTo": true,
"canFlyFrom": true,
"canUseQuickShop": true,
"cannotViewMap": false,
"images": [],
"ratio": 8,
"defaultGround": "T580",
"bgm": "winter.mp3",
"firstArrive": [],
"eachArrive": [],
"parallelDo": "",
"events": {},
"changeFloor": {},
"beforeBattle": {},
"afterBattle": {},
"afterGetItem": {},
"afterOpenDoor": {},
"autoEvent": {},
"cannotMove": {},
"cannotMoveIn": {},
"map": [
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
],
}

View File

@ -0,0 +1,45 @@
main.floors.MT37=
{
"floorId": "MT37",
"title": "冰封雪原",
"name": "冰封雪原",
"width": 15,
"height": 15,
"canFlyTo": true,
"canFlyFrom": true,
"canUseQuickShop": true,
"cannotViewMap": false,
"images": [],
"ratio": 8,
"defaultGround": "T580",
"bgm": "winter.mp3",
"firstArrive": [],
"eachArrive": [],
"parallelDo": "",
"events": {},
"changeFloor": {},
"beforeBattle": {},
"afterBattle": {},
"afterGetItem": {},
"afterOpenDoor": {},
"autoEvent": {},
"cannotMove": {},
"cannotMoveIn": {},
"map": [
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
],
}

View File

@ -0,0 +1,45 @@
main.floors.MT38=
{
"floorId": "MT38",
"title": "冰封雪原",
"name": "冰封雪原",
"width": 15,
"height": 15,
"canFlyTo": true,
"canFlyFrom": true,
"canUseQuickShop": true,
"cannotViewMap": false,
"images": [],
"ratio": 8,
"defaultGround": "T580",
"bgm": "winter.mp3",
"firstArrive": [],
"eachArrive": [],
"parallelDo": "",
"events": {},
"changeFloor": {},
"beforeBattle": {},
"afterBattle": {},
"afterGetItem": {},
"afterOpenDoor": {},
"autoEvent": {},
"cannotMove": {},
"cannotMoveIn": {},
"map": [
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
],
}

View File

@ -0,0 +1,45 @@
main.floors.MT39=
{
"floorId": "MT39",
"title": "冰封雪原",
"name": "冰封雪原",
"width": 15,
"height": 15,
"canFlyTo": true,
"canFlyFrom": true,
"canUseQuickShop": true,
"cannotViewMap": false,
"images": [],
"ratio": 8,
"defaultGround": "T580",
"bgm": "winter.mp3",
"firstArrive": [],
"eachArrive": [],
"parallelDo": "",
"events": {},
"changeFloor": {},
"beforeBattle": {},
"afterBattle": {},
"afterGetItem": {},
"afterOpenDoor": {},
"autoEvent": {},
"cannotMove": {},
"cannotMoveIn": {},
"map": [
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
],
}

View File

@ -0,0 +1,45 @@
main.floors.MT40=
{
"floorId": "MT40",
"title": "冰封雪原",
"name": "冰封雪原",
"width": 15,
"height": 15,
"canFlyTo": true,
"canFlyFrom": true,
"canUseQuickShop": true,
"cannotViewMap": false,
"images": [],
"ratio": 8,
"defaultGround": "T580",
"bgm": "winter.mp3",
"firstArrive": [],
"eachArrive": [],
"parallelDo": "",
"events": {},
"changeFloor": {},
"beforeBattle": {},
"afterBattle": {},
"afterGetItem": {},
"afterOpenDoor": {},
"autoEvent": {},
"cannotMove": {},
"cannotMoveIn": {},
"map": [
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
],
}

View File

@ -0,0 +1,45 @@
main.floors.MT41=
{
"floorId": "MT41",
"title": "冰封雪原",
"name": "冰封雪原",
"width": 15,
"height": 15,
"canFlyTo": true,
"canFlyFrom": true,
"canUseQuickShop": true,
"cannotViewMap": false,
"images": [],
"ratio": 8,
"defaultGround": "T580",
"bgm": "winter.mp3",
"firstArrive": [],
"eachArrive": [],
"parallelDo": "",
"events": {},
"changeFloor": {},
"beforeBattle": {},
"afterBattle": {},
"afterGetItem": {},
"afterOpenDoor": {},
"autoEvent": {},
"cannotMove": {},
"cannotMoveIn": {},
"map": [
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
],
}

View File

@ -0,0 +1,45 @@
main.floors.MT42=
{
"floorId": "MT42",
"title": "冰封雪原",
"name": "冰封雪原",
"width": 15,
"height": 15,
"canFlyTo": true,
"canFlyFrom": true,
"canUseQuickShop": true,
"cannotViewMap": false,
"images": [],
"ratio": 8,
"defaultGround": "T580",
"bgm": "winter.mp3",
"firstArrive": [],
"eachArrive": [],
"parallelDo": "",
"events": {},
"changeFloor": {},
"beforeBattle": {},
"afterBattle": {},
"afterGetItem": {},
"afterOpenDoor": {},
"autoEvent": {},
"cannotMove": {},
"cannotMoveIn": {},
"map": [
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
],
}

View File

@ -0,0 +1,45 @@
main.floors.MT43=
{
"floorId": "MT43",
"title": "冰封雪原",
"name": "冰封雪原",
"width": 15,
"height": 15,
"canFlyTo": true,
"canFlyFrom": true,
"canUseQuickShop": true,
"cannotViewMap": false,
"images": [],
"ratio": 8,
"defaultGround": "T580",
"bgm": "winter.mp3",
"firstArrive": [],
"eachArrive": [],
"parallelDo": "",
"events": {},
"changeFloor": {},
"beforeBattle": {},
"afterBattle": {},
"afterGetItem": {},
"afterOpenDoor": {},
"autoEvent": {},
"cannotMove": {},
"cannotMoveIn": {},
"map": [
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
],
}

View File

@ -0,0 +1,45 @@
main.floors.MT44=
{
"floorId": "MT44",
"title": "冰封雪原",
"name": "冰封雪原",
"width": 15,
"height": 15,
"canFlyTo": true,
"canFlyFrom": true,
"canUseQuickShop": true,
"cannotViewMap": false,
"images": [],
"ratio": 8,
"defaultGround": "T580",
"bgm": "winter.mp3",
"firstArrive": [],
"eachArrive": [],
"parallelDo": "",
"events": {},
"changeFloor": {},
"beforeBattle": {},
"afterBattle": {},
"afterGetItem": {},
"afterOpenDoor": {},
"autoEvent": {},
"cannotMove": {},
"cannotMoveIn": {},
"map": [
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
],
}

View File

@ -0,0 +1,45 @@
main.floors.MT45=
{
"floorId": "MT45",
"title": "冰封雪原",
"name": "冰封雪原",
"width": 15,
"height": 15,
"canFlyTo": true,
"canFlyFrom": true,
"canUseQuickShop": true,
"cannotViewMap": false,
"images": [],
"ratio": 8,
"defaultGround": "T580",
"bgm": "winter.mp3",
"firstArrive": [],
"eachArrive": [],
"parallelDo": "",
"events": {},
"changeFloor": {},
"beforeBattle": {},
"afterBattle": {},
"afterGetItem": {},
"afterOpenDoor": {},
"autoEvent": {},
"cannotMove": {},
"cannotMoveIn": {},
"map": [
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
],
}

View File

@ -378,6 +378,10 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = {
Math.ceil((core.status.hero.mdef / 10) * 0.3) * 10; Math.ceil((core.status.hero.mdef / 10) * 0.3) * 10;
} }
if (core.getSkillLevel(11) > 0) {
core.declineStudiedSkill();
}
// 计算当前怪物的支援怪物 // 计算当前怪物的支援怪物
var guards = []; var guards = [];
if (x != null && y != null) { if (x != null && y != null) {
@ -409,18 +413,6 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = {
hint += ',经验+' + exp; hint += ',经验+' + exp;
core.drawTip(hint, enemy.id); core.drawTip(hint, enemy.id);
// 战后的技能处理,比如扣除魔力值
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.getFlag('bladeOn') && core.getFlag('blade')) { if (core.getFlag('bladeOn') && core.getFlag('blade')) {
core.setFlag('blade', false); core.setFlag('blade', false);
} }
@ -575,7 +567,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = {
'%的伤害' '%的伤害'
); );
}, },
'#ffcc33' '#fc3'
], ],
[2, '恶毒', '怪物攻击无视勇士的防御', '#bbb0ff'], [2, '恶毒', '怪物攻击无视勇士的防御', '#bbb0ff'],
[3, '坚固', '怪物防御不小于勇士攻击-1', '#c0b088'], [3, '坚固', '怪物防御不小于勇士攻击-1', '#c0b088'],
@ -713,37 +705,34 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = {
',最后与该怪物战斗', ',最后与该怪物战斗',
'#ff6666' '#ff6666'
], ],
[20, '荆棘', '勇士无法打败怪物,除非拥有十字架', '#aaaaaa'], [
20,
'霜冻',
enemy =>
`怪物寒冷的攻击使勇士动作变慢,勇士每回合对怪物造成的伤害减少${enemy.ice}%。装备杰克的衣服后可以免疫。`,
'cyan'
],
[ [
21, 21,
'退化', '冰封光环',
function (enemy) { enemy =>
return ( `寒气逼人使勇士对该怪物周围7*7范围内的怪物伤害减少${enemy.iceHalo}%(线性叠加)`,
'战斗后勇士永久下降' + 'cyan',
(enemy.atkValue || 0) + 1
'点攻击和' +
(enemy.defValue || 0) +
'点防御'
);
}
], ],
[ [
22, 22,
'固伤', '永夜',
function (enemy) { enemy =>
return ( `战斗后,减少勇士${enemy.night}点攻防,加到本层所有怪物身上`,
'战斗前,怪物对勇士造成' + '#d8a'
(enemy.damage || 0) +
'点固定伤害,未开启负伤时无视勇士护盾。'
);
},
'#ff9977'
], ],
[ [
23, 23,
'重生', '极昼',
'怪物被击败后,角色转换楼层则怪物将再次出现', enemy =>
'#a0e0ff' `战斗后,减少本层所有怪物${enemy.day}点攻防,加到勇士身上`,
'#ffd'
], ],
[ [
24, 24,
@ -811,6 +800,8 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = {
mon_exp = core.getEnemyValue(enemy, 'exp', x, y, floorId), mon_exp = core.getEnemyValue(enemy, 'exp', x, y, floorId),
mon_point = core.getEnemyValue(enemy, 'point', x, y, floorId); mon_point = core.getEnemyValue(enemy, 'point', x, y, floorId);
let iceDecline = 0;
if (typeof enemy === 'number') if (typeof enemy === 'number')
core.getBlockByNumber(enemy).event.id; core.getBlockByNumber(enemy).event.id;
if (typeof enemy === 'string') enemy = core.material.enemys[enemy]; if (typeof enemy === 'string') enemy = core.material.enemys[enemy];
@ -851,56 +842,68 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = {
// 检查光环和支援的缓存 // 检查光环和支援的缓存
var index = var index =
x != null && y != null ? x + ',' + y : 'floor' + enemy.id; x != null && y != null ? x + ',' + y : 'floor' + enemy.id;
if (!core.status.checkBlock.cache) core.status.checkBlock.cache ??= {};
core.status.checkBlock.cache = {};
var cache = core.status.checkBlock.cache[index]; var cache = core.status.checkBlock.cache[index];
if (!cache) { if (!cache) {
// 没有该点的缓存,则遍历每个图块 // 没有该点的缓存,则遍历每个图块
core.extractBlocks(floorId); core.extractBlocks(floorId);
core.status.maps[floorId].blocks.forEach(function (block) { core.status.maps[floorId].blocks.forEach(function (block) {
if (!block.disable) { if (block.disable) return;
// 获得该图块的ID // 获得该图块的ID
var id = block.event.id, var id = block.event.id,
e = core.material.enemys[id]; e = core.material.enemys[id];
var dx = Math.abs(block.x - x), var dx = Math.abs(block.x - x),
dy = Math.abs(block.y - y); dy = Math.abs(block.y - y);
// 检查【支援】技能数字26 // 检查【支援】技能数字26
if ( if (
e && e &&
core.hasSpecial(e.special, 26) && core.hasSpecial(e.special, 26) &&
// 检查支援条件坐标存在距离为1且不能是自己 // 检查支援条件坐标存在距离为1且不能是自己
// 其他类型的支援怪,比如十字之类的话.... 看着做是一样的 // 其他类型的支援怪,比如十字之类的话.... 看着做是一样的
x != null && x != null &&
y != null && y != null &&
Math.abs(block.x - x) <= 1 && Math.abs(block.x - x) <= 1 &&
Math.abs(block.y - y) <= 1 && Math.abs(block.y - y) <= 1 &&
!(x == block.x && y == block.y) !(x == block.x && y == block.y)
) { ) {
// 记录怪物的x,yID // 记录怪物的x,yID
guards.push([block.x, block.y, id]); guards.push([block.x, block.y, id]);
}
// 抱团
if (
e &&
core.hasSpecial(mon_special, 8) &&
core.hasSpecial(e.special, 8) &&
!(dx == 0 && dy == 0) &&
dx < 3 &&
dy < 3
) {
atk_buff += enemy.together || 0;
def_buff += enemy.together || 0;
}
// TODO如果有其他类型光环怪物在这里仿照添加检查
// 注新增新的类光环属性需要遍历全图的需要在特殊属性定义那里的第五项写1参见光环和支援的特殊属性定义。
} }
// 抱团
if (
e &&
core.hasSpecial(mon_special, 8) &&
core.hasSpecial(e.special, 8) &&
!(dx == 0 && dy == 0) &&
dx < 3 &&
dy < 3
) {
atk_buff += enemy.together || 0;
def_buff += enemy.together || 0;
}
// 冰封光环
if (
e &&
core.hasSpecial(e.special, 21) &&
x != null &&
y != null &&
dx < 4 &&
dy < 4
) {
iceDecline += e.iceHalo;
}
// TODO如果有其他类型光环怪物在这里仿照添加检查
// 注新增新的类光环属性需要遍历全图的需要在特殊属性定义那里的第五项写1参见光环和支援的特殊属性定义。
}); });
core.status.checkBlock.cache[index] = { core.status.checkBlock.cache[index] = {
hp_buff: hp_buff, hp_buff: hp_buff,
atk_buff: atk_buff, atk_buff: atk_buff,
def_buff: def_buff, def_buff: def_buff,
guards: guards guards: guards,
iceHalo: iceDecline
}; };
} else { } else {
// 直接使用缓存数据 // 直接使用缓存数据
@ -908,6 +911,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = {
atk_buff = cache.atk_buff; atk_buff = cache.atk_buff;
def_buff = cache.def_buff; def_buff = cache.def_buff;
guards = cache.guards; guards = cache.guards;
iceDecline = cache.iceHalo;
} }
// 增加比例;如果要增加数值可以直接在这里修改 // 增加比例;如果要增加数值可以直接在这里修改
@ -931,7 +935,8 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = {
exp: Math.floor(mon_exp), exp: Math.floor(mon_exp),
point: Math.floor(mon_point), point: Math.floor(mon_point),
special: mon_special, special: mon_special,
guards: guards // 返回支援情况 guards: guards, // 返回支援情况
iceDecline
}; };
}, },
getDamageInfo: function (enemy, hero, x, y, floorId) { getDamageInfo: function (enemy, hero, x, y, floorId) {
@ -1011,12 +1016,12 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = {
if (core.hasSpecial(mon_special, 5)) per_damage *= 3; if (core.hasSpecial(mon_special, 5)) per_damage *= 3;
if (core.hasSpecial(mon_special, 6)) per_damage *= enemy.n || 4; if (core.hasSpecial(mon_special, 6)) per_damage *= enemy.n || 4;
// 勇士每回合对怪物造成的伤害 // 勇士每回合对怪物造成的伤害
let hero_per_damage = Math.max(hero_atk - mon_def, 0);
if (!core.hasSpecial(mon_special, 9)) { if (!core.hasSpecial(mon_special, 9)) {
var hero_per_damage = Math.max(hero_atk - mon_def, 0); hero_per_damage = Math.max(hero_atk - mon_def, 0);
if (hero_per_damage > 0) hero_per_damage += hero_extraAtk; if (hero_per_damage > 0) hero_per_damage += hero_extraAtk;
} } else {
if (core.hasSpecial(mon_special, 9)) { hero_per_damage = Math.max(
var hero_per_damage = Math.max(
hero_atk + hero_extraAtk - mon_def, hero_atk + hero_extraAtk - mon_def,
0 0
); );
@ -1025,6 +1030,15 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = {
// 如果没有破防,则不可战斗 // 如果没有破防,则不可战斗
if (hero_per_damage <= 0) return null; if (hero_per_damage <= 0) return null;
if (
core.hasSpecial(mon_special, 20) &&
!core.hasEquip('I589')
) {
hero_per_damage *= 1 - enemy.ice / 100;
}
hero_per_damage *= 1 - enemyInfo.iceDecline / 100;
// 勇士的攻击回合数;为怪物生命除以每回合伤害向上取整 // 勇士的攻击回合数;为怪物生命除以每回合伤害向上取整
let turn = Math.ceil(mon_hp / hero_per_damage); let turn = Math.ceil(mon_hp / hero_per_damage);
@ -1437,20 +1451,36 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = {
core.updateCheckBlock(); core.updateCheckBlock();
// 更新全地图显伤 // 更新全地图显伤
core.updateDamage(); core.updateDamage();
// 已学习的技能
if (
core.getSkillLevel(11) > 0 &&
(core.status.hero.special?.num ?? []).length > 0
) {
core.plugin.showStudiedSkill.value = true;
} else {
core.plugin.showStudiedSkill.value = false;
}
}, },
updateCheckBlock: function (floorId) { updateCheckBlock: function (floorId) {
// 领域、夹击、阻击等的伤害值计算 // 领域、夹击、阻击等的伤害值计算
floorId = floorId || core.status.floorId; floorId = floorId || core.status.floorId;
if (!floorId || !core.status.maps) return; if (!floorId || !core.status.maps) return;
const haloMap = {
21: 'square:7:cyan'
};
const haloEntry = Object.entries(haloMap);
var width = core.floors[floorId].width, var width = core.floors[floorId].width,
height = core.floors[floorId].height; height = core.floors[floorId].height;
var blocks = core.getMapBlocksObj(floorId); var blocks = core.getMapBlocksObj(floorId);
var damage = {}, // 每个点的伤害值 const damage = {}, // 每个点的伤害值
type = {}, // 每个点的伤害类型 type = {}, // 每个点的伤害类型
repulse = {}, // 每个点的阻击怪信息 repulse = {}, // 每个点的阻击怪信息
mockery = {}; // 电摇嘲讽 mockery = {}, // 电摇嘲讽
halo = {}; // 光环
var betweenAttackLocs = {}; // 所有可能的夹击点 var betweenAttackLocs = {}; // 所有可能的夹击点
var needCache = false; var needCache = false;
var canGoDeadZone = core.flags.canGoDeadZone; var canGoDeadZone = core.flags.canGoDeadZone;
@ -1680,6 +1710,16 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = {
) )
needCache = true; needCache = true;
if (specialFlag & 2) haveHunt = true; if (specialFlag & 2) haveHunt = true;
if (enemy) {
for (const [num, range] of haloEntry) {
const n = parseInt(num);
if (core.hasSpecial(enemy.special, n)) {
halo[loc] ??= [];
halo[loc].push(range);
}
}
}
} }
// 对每个可能的夹击点计算夹击伤害 // 对每个可能的夹击点计算夹击伤害
@ -1758,7 +1798,8 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = {
mockery, mockery,
needCache: needCache, needCache: needCache,
cache: {}, // clear cache cache: {}, // clear cache
haveHunt: haveHunt haveHunt: haveHunt,
halo
}; };
}, },
moveOneStep: function (callback) { moveOneStep: function (callback) {

View File

@ -112,7 +112,16 @@ var icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1 =
"T552": 52, "T552": 52,
"T553": 53, "T553": 53,
"T554": 54, "T554": 54,
"T555": 55 "T555": 55,
"T580": 56,
"T581": 57,
"T582": 58,
"T583": 59,
"T584": 60,
"T585": 61,
"T586": 62,
"T587": 63,
"T588": 64
}, },
"animates": { "animates": {
"star": 0, "star": 0,
@ -343,7 +352,21 @@ var icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1 =
"E576": 131, "E576": 131,
"E577": 132, "E577": 132,
"E578": 133, "E578": 133,
"E579": 134 "E579": 134,
"E590": 135,
"E591": 136,
"E592": 137,
"E593": 138,
"E594": 139,
"E595": 140,
"E596": 141,
"E597": 142,
"E598": 143,
"E599": 144,
"E600": 145,
"E601": 146,
"E602": 147,
"E603": 148
}, },
"enemy48": { "enemy48": {
"angel": 0, "angel": 0,
@ -536,7 +559,8 @@ var icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1 =
"I560": 97, "I560": 97,
"I565": 98, "I565": 98,
"I574": 99, "I574": 99,
"I575": 100 "I575": 100,
"I589": 101
}, },
"autotile": { "autotile": {
"autotile": 0, "autotile": 0,
@ -546,6 +570,9 @@ var icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1 =
"autotile4": 0, "autotile4": 0,
"autotile5": 0, "autotile5": 0,
"autotile6": 0, "autotile6": 0,
"autotile7": 0 "autotile7": 0,
"autotile8": 0,
"autotile9": 0,
"autotile10": 0
} }
} }

View File

@ -1326,5 +1326,18 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
"atk": 10 "atk": 10
} }
} }
},
"I589": {
"cls": "equips",
"name": "杰克的衣服",
"canUseItemEffect": "true",
"text": "杰克为主角留下的衣服,可以抵御寒冷。防御+25免疫怪物的霜冻属性。",
"equip": {
"type": "衣服",
"value": {
"def": 25
},
"percentage": {}
}
} }
} }

View File

@ -115,6 +115,9 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e =
"142": {"cls":"autotile","id":"autotile5"}, "142": {"cls":"autotile","id":"autotile5"},
"143": {"cls":"autotile","id":"autotile6"}, "143": {"cls":"autotile","id":"autotile6"},
"144": {"cls":"autotile","id":"autotile7"}, "144": {"cls":"autotile","id":"autotile7"},
"145": {"cls":"autotile","id":"autotile8"},
"146": {"cls":"autotile","id":"autotile9","canPass":true},
"147": {"cls":"autotile","id":"autotile10"},
"151": {"cls":"autotile","id":"autotile1"}, "151": {"cls":"autotile","id":"autotile1"},
"152": {"cls":"autotile","id":"autotile2"}, "152": {"cls":"autotile","id":"autotile2"},
"153": {"cls":"autotile","id":"autotile3"}, "153": {"cls":"autotile","id":"autotile3"},
@ -504,6 +507,30 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e =
"577": {"cls":"enemys","id":"E577"}, "577": {"cls":"enemys","id":"E577"},
"578": {"cls":"enemys","id":"E578"}, "578": {"cls":"enemys","id":"E578"},
"579": {"cls":"enemys","id":"E579"}, "579": {"cls":"enemys","id":"E579"},
"580": {"cls":"terrains","id":"T580","canPass":true},
"581": {"cls":"terrains","id":"T581"},
"582": {"cls":"terrains","id":"T582"},
"583": {"cls":"terrains","id":"T583"},
"584": {"cls":"terrains","id":"T584"},
"585": {"cls":"terrains","id":"T585"},
"586": {"cls":"terrains","id":"T586"},
"587": {"cls":"terrains","id":"T587"},
"588": {"cls":"terrains","id":"T588"},
"589": {"cls":"items","id":"I589"},
"590": {"cls":"enemys","id":"E590"},
"591": {"cls":"enemys","id":"E591"},
"592": {"cls":"enemys","id":"E592"},
"593": {"cls":"enemys","id":"E593"},
"594": {"cls":"enemys","id":"E594"},
"595": {"cls":"enemys","id":"E595"},
"596": {"cls":"enemys","id":"E596"},
"597": {"cls":"enemys","id":"E597"},
"598": {"cls":"enemys","id":"E598"},
"599": {"cls":"enemys","id":"E599"},
"600": {"cls":"enemys","id":"E600"},
"601": {"cls":"enemys","id":"E601"},
"602": {"cls":"enemys","id":"E602"},
"603": {"cls":"enemys","id":"E603"},
"20037": {"cls":"tileset","id":"X20037","cannotOut":["up","left"],"cannotIn":["up","left"]}, "20037": {"cls":"tileset","id":"X20037","cannotOut":["up","left"],"cannotIn":["up","left"]},
"20038": {"cls":"tileset","id":"X20038","cannotOut":["up"],"cannotIn":["up"]}, "20038": {"cls":"tileset","id":"X20038","cannotOut":["up"],"cannotIn":["up"]},
"20039": {"cls":"tileset","id":"X20039","cannotOut":["up","right"],"cannotIn":["up","right"]}, "20039": {"cls":"tileset","id":"X20039","cannotOut":["up","right"],"cannotIn":["up","right"]},

Binary file not shown.

Before

Width:  |  Height:  |  Size: 133 KiB

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 53 KiB

View File

@ -1640,7 +1640,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = {
false false
); );
if (!firstNoPass) return; if (!firstNoPass) return;
core.status.hero.hp -= 200 * flags.hard; if (flags.chapter <= 1) core.status.hero.hp -= 200 * flags.hard;
core.updateStatusBar(); core.updateStatusBar();
flags['jump_' + core.status.floorId]++; flags['jump_' + core.status.floorId]++;
if (core.status.hero.hp <= 0) { if (core.status.hero.hp <= 0) {
@ -4103,7 +4103,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = {
title: '学习', title: '学习',
desc: [ desc: [
'<span style="color: gold">主动技能</span>可以消耗500智慧学习一个怪物的技能', '<span style="color: gold">主动技能</span>可以消耗500智慧学习一个怪物的技能',
'持续5场战斗每学习一次消耗的智慧点增加200每次升级使持续的战斗次数增加3次。更多信息可在学习后在百科全书查看。' '持续5场战斗每学习一次消耗的智慧点增加250每次升级使持续的战斗次数增加3次。更多信息可在学习后在百科全书查看。'
], ],
consume: '2500 * level ** 2 + 2500', consume: '2500 * level ** 2 + 2500',
front: [ front: [
@ -4528,7 +4528,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = {
1: ['crit'], 1: ['crit'],
6: ['n'], 6: ['n'],
7: ['hungry'], 7: ['hungry'],
8: ['togrther'], 8: ['together'],
10: ['courage'], 10: ['courage'],
11: ['charge'] 11: ['charge']
}; };
@ -4536,10 +4536,10 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = {
const cannotStudy = [9, 12, 14, 15, 24]; const cannotStudy = [9, 12, 14, 15, 24];
this.canStudySkill = function (number) { this.canStudySkill = function (number) {
core.status.hero.special ??= { num: [] }; const s = (core.status.hero.special ??= { num: [], last: [] });
if (core.status.hero.special.num.length >= 1) { if (core.getSkillLevel(11) === 0) return false;
return false; if (s.num.length >= 1) return false;
} if (s.num.includes(number)) return false;
if (cannotStudy.includes(number)) return false; if (cannotStudy.includes(number)) return false;
return true; return true;
}; };
@ -4577,7 +4577,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = {
}; };
this.declineStudiedSkill = function () { this.declineStudiedSkill = function () {
const s = core.status.hero.special; const s = (core.status.hero.special ??= { num: [], last: [] });
s.last = s.last.map(v => v - 1); s.last = s.last.map(v => v - 1);
}; };
@ -4590,5 +4590,58 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = {
} }
} }
}; };
},
haloRange: function () {
/**
* 绘制光环范围
* @param {CanvasRenderingContext2D} ctx
* @param {boolean} onMap
*/
this.drawHalo = function (ctx, onMap) {
if (main.replayChecking) return;
if (!core.getLocalStorage('showHalo', true)) return;
const halo = core.status.checkBlock.halo;
ctx.save();
core.clearMap(ctx);
ctx.globalAlpha = 0.1;
ctx.globalCompositeOperation = 'source-over';
for (const [loc, range] of Object.entries(halo)) {
const [x, y] = loc.split(',').map(v => parseInt(v));
for (const r of range) {
const [type, value, color, border] = r.split(':');
if (type === 'square') {
// 正方形光环
const n = parseInt(value);
const r = Math.floor(n / 2);
let left = x - r,
right = x + r,
top = y - r,
bottom = y + r;
if (onMap && core.bigmap.v2) {
left -= core.bigmap.posX;
top -= core.bigmap.posY;
right -= core.bigmap.posX;
bottom -= core.bigmap.posY;
if (
right < -1 ||
left > core._PX_ / 32 + 1 ||
top < -1 ||
bottom > core._PY_ / 32 + 1
) {
continue;
}
}
ctx.fillStyle = color;
ctx.strokeStyle = border ?? color;
ctx.lineWidth = 1;
ctx.fillRect(left * 32, top * 32, n * 32, n * 32);
ctx.globalAlpha = 0.6;
ctx.strokeRect(left * 32, top * 32, n * 32, n * 32);
ctx.globalAlpha = 0.1;
}
}
}
ctx.restore();
};
} }
}; };

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 628 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

View File

@ -1,7 +1,10 @@
<template> <template>
<div id="non-ui"> <div id="non-ui">
<StatusBar v-if="showStatusBar"></StatusBar> <StatusBar v-if="showStatusBar"></StatusBar>
<MarkedEnemy v-if="showMarkedEnemy"></MarkedEnemy> <MarkedEnemy v-if="showMarkedEnemy && showStatusBar"></MarkedEnemy>
<Studied
v-if="showStudiedSkill && showStatusBar && showStudied"
></Studied>
<Chapter v-if="chapterShowed" :chapter="chapterContent"></Chapter> <Chapter v-if="chapterShowed" :chapter="chapterContent"></Chapter>
</div> </div>
</template> </template>
@ -9,11 +12,13 @@
<script lang="ts" setup> <script lang="ts" setup>
import { ref } from 'vue'; import { ref } from 'vue';
import StatusBar from './ui/statusBar.vue'; import StatusBar from './ui/statusBar.vue';
import { showStatusBar } from './plugin/uiController'; import { showStatusBar, showStudiedSkill } from './plugin/uiController';
import MarkedEnemy from './ui/markedEnemy.vue'; import MarkedEnemy from './ui/markedEnemy.vue';
import Chapter from './ui/chapter.vue'; import Chapter from './ui/chapter.vue';
import { chapterContent, chapterShowed } from './plugin/ui/chapter'; import { chapterContent, chapterShowed } from './plugin/ui/chapter';
import { showMarkedEnemy } from './plugin/mark'; import { showMarkedEnemy } from './plugin/mark';
import Studied from './ui/studied.vue';
import { showStudied } from './plugin/settings';
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>

View File

@ -3,7 +3,12 @@
<div :id="`box-main-${id}`" class="box-main" @click="click"> <div :id="`box-main-${id}`" class="box-main" @click="click">
<slot></slot> <slot></slot>
</div> </div>
<div :id="`box-move-${id}`" class="box-move" :selected="moveSelected"> <div
v-if="dragable"
:id="`box-move-${id}`"
class="box-move"
:selected="moveSelected"
>
<drag-outlined <drag-outlined
:id="`box-drag-${id}`" :id="`box-drag-${id}`"
class="box-drag" class="box-drag"
@ -14,21 +19,25 @@
class="border border-vertical border-left" class="border border-vertical border-left"
:id="`border-left-${id}`" :id="`border-left-${id}`"
:selected="moveSelected && resizable" :selected="moveSelected && resizable"
:selectable="resizable"
></div> ></div>
<div <div
class="border border-horizontal border-top" class="border border-horizontal border-top"
:id="`border-top-${id}`" :id="`border-top-${id}`"
:selected="moveSelected && resizable" :selected="moveSelected && resizable"
:selectable="resizable"
></div> ></div>
<div <div
class="border border-vertical border-right" class="border border-vertical border-right"
:id="`border-right-${id}`" :id="`border-right-${id}`"
:selected="moveSelected && resizable" :selected="moveSelected && resizable"
:selectable="resizable"
></div> ></div>
<div <div
class="border border-horizontal border-bottom" class="border border-horizontal border-bottom"
:id="`border-bottom-${id}`" :id="`border-bottom-${id}`"
:selected="moveSelected && resizable" :selected="moveSelected && resizable"
:selectable="resizable"
></div> ></div>
</div> </div>
</template> </template>
@ -41,6 +50,7 @@ import { has } from '../plugin/utils';
import { sleep } from 'mutate-animate'; import { sleep } from 'mutate-animate';
const props = defineProps<{ const props = defineProps<{
dragable?: boolean;
resizable?: boolean; resizable?: boolean;
left?: number; left?: number;
top?: number; top?: number;
@ -162,18 +172,20 @@ onMounted(async () => {
if (!main) return; if (!main) return;
useDrag( if (props.dragable) {
drag, useDrag(
dragFn, drag,
(x, y) => { dragFn,
lastX = x; (x, y) => {
lastY = y; lastX = x;
}, lastY = y;
() => { },
moveSelected.value = false; () => {
}, moveSelected.value = false;
true },
); true
);
}
if (props.resizable) { if (props.resizable) {
useDrag( useDrag(
@ -202,7 +214,7 @@ onMounted(async () => {
}); });
onUnmounted(() => { onUnmounted(() => {
cancelGlobalDrag(dragFn); if (props.dragable) cancelGlobalDrag(dragFn);
if (props.resizable) { if (props.resizable) {
cancelGlobalDrag(leftDrag); cancelGlobalDrag(leftDrag);
cancelGlobalDrag(topDrag); cancelGlobalDrag(topDrag);
@ -264,13 +276,13 @@ onUnmounted(() => {
left: 0px; left: 0px;
} }
.border-horizontal[selected='true'] { .border-horizontal[selected='true'][selectable='true'] {
transform: scaleY(300%); transform: scaleY(300%);
cursor: ns-resize; cursor: ns-resize;
} }
.border-horizontal:hover, .border-horizontal:hover[selectable='true'],
.border-horizontal:active { .border-horizontal:active[selectable='true'] {
transform: scaleY(500%); transform: scaleY(500%);
cursor: ns-resize; cursor: ns-resize;
} }
@ -281,13 +293,13 @@ onUnmounted(() => {
top: 0px; top: 0px;
} }
.border-vertical[selected='true'] { .border-vertical[selected='true'][selectable='true'] {
transform: scaleX(300%); transform: scaleX(300%);
cursor: ew-resize; cursor: ew-resize;
} }
.border-vertical:hover, .border-vertical:hover[selectable='true'],
.border-vertical:active { .border-vertical:active[selectable='true'] {
transform: scaleX(500%); transform: scaleX(500%);
cursor: ew-resize; cursor: ew-resize;
} }

View File

@ -10,16 +10,16 @@
"本百科全书字数很多,可以选择性地阅读。</span>", "本百科全书字数很多,可以选择性地阅读。</span>",
"<br>", "<br>",
"<br>", "<br>",
"2. 本塔中<span style=\"color: gold\">几乎所有 ui </span>都可以纵向滚动,如果发现显示不全,", "2. 本百科全书的内容会<span style=\"color: gold\">随着游戏的推进而增加新内容</span>",
"同时每次增加新内容时都会有提示。",
"<br>",
"<br>",
"3. 本塔中<span style=\"color: gold\">几乎所有 ui </span>都可以纵向滚动,如果发现显示不全,",
"可以尝试上下拖动,就像浏览网页一样。电脑端还可以使用滚轮上下滚动。", "可以尝试上下拖动,就像浏览网页一样。电脑端还可以使用滚轮上下滚动。",
"大部分可以纵向滚动的 ui 都会在右方有一个滚动条,也可以拖动它进行滚动,例如本百科全书的条目列表和", "大部分可以纵向滚动的 ui 都会在右方有一个滚动条,也可以拖动它进行滚动,例如本百科全书的条目列表和",
"条目说明都是可以通过上述方式滚动的。", "条目说明都是可以通过上述方式滚动的。",
"<br>", "<br>",
"<br>", "<br>",
"3. 本百科全书的内容会<span style=\"color: gold\">随着游戏的推进而增加新内容</span>",
"同时每次增加新内容时都会有提示。",
"<br>",
"<br>",
"4. 本塔主要面向电脑端设计,", "4. 本塔主要面向电脑端设计,",
"<span style=\"color: gold\">建议使用电脑游玩以获得更好的游戏体验</span>。但是手机依然可以游玩本塔,", "<span style=\"color: gold\">建议使用电脑游玩以获得更好的游戏体验</span>。但是手机依然可以游玩本塔,",
"但部分操作可能不是很方便ui 也可能不是很美观,不过依然可以完整体验本游戏。", "但部分操作可能不是很方便ui 也可能不是很美观,不过依然可以完整体验本游戏。",
@ -406,6 +406,46 @@
"这些技能一般需要尽早点出。" "这些技能一般需要尽早点出。"
] ]
}, },
"study": {
"text": "学习",
"condition": "core.getSkillLevel(11) > 0",
"desc": [
"本条目会详细说明学习的机制与所有可以被学习的技能被学习后的效果。当前已经学习的技能会以与状态栏类似的盒子展示出来。",
"<br>",
"<br>",
"首先学习技能消耗的智慧点会越来越多初始消耗的智慧点为500每学习一次增加250。",
"学习的技能可以持续5场战斗在技能树界面每升级一次增加3场",
"<span style=\"color: gold\">当前为${core.getSkillLevel(11) * 3 + 2}场</span>。",
"学习后对应属性的值,例如抱团怪增加的属性百分比,会与被学习的怪物相同。学习界面可以使用背包中的道具或点击状态栏打开。",
"<br>",
"<br>",
"下面会详细说明每一种可以被学习的技能被学习后的效果,没有列出的均不可学习。",
"<br>",
"<br>",
"<span style=\"color: #fc3\">1. 致命一击</span>勇士每5回合对怪物造成一次强力攻击。",
"<br>",
"<span style=\"color: #bbb0ff\">2. 恶毒</span>:勇士攻击无视怪物的防御。",
"<br>",
"<span style=\"color: #c0b088\">3. 坚固</span>:勇士防御不低于怪物的攻击-1。",
"<br>",
"<span style=\"color: #fe7\">4. n连击</span>勇士每回合攻击n次",
"<br>",
"<span style=\"color: #b30000\">5. 饥渴</span>:勇士在战前吸取怪物一定量的攻击加载自己身上,",
"同时减少怪物相应量的攻击,优先于怪物。",
"<br>",
"<span style=\"color: #fa4\">6. 抱团</span>:勇士周围每有一个拥有抱团属性的怪物,勇士的属性便增加一定值。",
"相应地,拥有抱团属性的怪物也会受到勇士的加成。",
"<br>",
"<span style=\"color: #b0c0dd\">7. 勇气之刃</span>:勇士第一回合造成一定量的伤害,之后正常。",
"<br>",
"<span style=\"color: #ff00d2\">8. 勇气冲锋</span>勇士首先发动冲锋造成一定量的伤害眩晕怪物5回合。",
"学习该技能后,勇士无条件先手。",
"<br>",
"<span style=\"color: #bbb0ff\">9. 魔攻</span>:勇士攻击无视怪物的防御。",
"<br>",
"<span style=\"color: #b0b666\">10. 先攻</span>:勇士无条件先手。"
]
},
"special1": { "special1": {
"text": "第一章怪物特技", "text": "第一章怪物特技",
"condition": "flags.chapter > 0", "condition": "flags.chapter > 0",

View File

@ -29,5 +29,15 @@
"<br>", "<br>",
"2. 如果缩放后游戏画面高度高于页面高度的95%,那么缩小一个缩放比例,否则保持最大比例" "2. 如果缩放后游戏画面高度高于页面高度的95%,那么缩小一个缩放比例,否则保持最大比例"
] ]
},
"showHalo": {
"text": "展示范围光环",
"desc": ["开启后,会在地图上显示范围光环。"]
},
"showStudied": {
"text": "展示已学习技能",
"desc": [
"开启后,会在画面内以类似状态栏的盒子的形式显示当前已学习的怪物技能。"
]
} }
} }

View File

@ -1,5 +1,4 @@
import { ref, watch } from 'vue'; import { ref, watch } from 'vue';
import { has } from './utils';
/** /**
* ui时是否展示动画 * ui时是否展示动画
@ -21,6 +20,16 @@ export const autoSkill = ref(true);
*/ */
export const autoScale = ref(true); export const autoScale = ref(true);
/**
*
*/
export const showHalo = ref(true);
/**
*
*/
export const showStudied = ref(true);
watch(transition, n => { watch(transition, n => {
core.plugin.transition.value = n; core.plugin.transition.value = n;
core.setLocalStorage('transition', n); core.setLocalStorage('transition', n);
@ -41,6 +50,14 @@ watch(autoScale, n => {
core.setLocalStorage('autoScale', n); core.setLocalStorage('autoScale', n);
}); });
watch(showStudied, n => {
core.setLocalStorage('showStudied', n);
});
watch(showHalo, n => {
core.setLocalStorage('showHalo', n);
});
/** /**
* localStorage读取即可 * localStorage读取即可
*/ */
@ -49,6 +66,8 @@ function reset() {
transition.value = t; transition.value = t;
core.plugin.transition.value = transition.value; core.plugin.transition.value = transition.value;
autoScale.value = core.getLocalStorage('autoScale', true); autoScale.value = core.getLocalStorage('autoScale', true);
showStudied.value = core.getLocalStorage('showStudied', true);
showHalo.value = core.getLocalStorage('showHalo', true);
} }
function resetFlag() { function resetFlag() {

View File

@ -21,11 +21,10 @@ export function getAddStatus(equip: Equip) {
return ( return (
<div class="equip-add-detail"> <div class="equip-add-detail">
{keys.map(v => { {keys.map(v => {
const value = const value = Math.floor(
(equip.value[v] ?? 0) + (equip.value[v] ?? 0) * core.getBuff(v) +
Math.floor(
(core.status.hero[v] * (equip.percentage[v] ?? 0)) / 100 (core.status.hero[v] * (equip.percentage[v] ?? 0)) / 100
); );
return ( return (
<span style="display: flex"> <span style="display: flex">
@ -72,7 +71,9 @@ export function getNowStatus(nowEquip?: Equip, onCol: boolean = false) {
let add = 0; let add = 0;
if (has(nowEquip)) { if (has(nowEquip)) {
add += nowEquip.value[v] ?? 0; add += Math.floor(
(nowEquip.value[v] ?? 0) * core.getBuff(v)
);
const per = Math.floor( const per = Math.floor(
(nowEquip.percentage[v] * core.getStatus(v)) / 100 (nowEquip.percentage[v] * core.getStatus(v)) / 100
); );

View File

@ -18,6 +18,7 @@ export const descOpened = ref(false);
export const skillOpened = ref(false); export const skillOpened = ref(false);
export const skillTreeOpened = ref(false); export const skillTreeOpened = ref(false);
export const flyOpened = ref(false); export const flyOpened = ref(false);
export const showStudiedSkill = ref(false);
export const transition = ref(true); export const transition = ref(true);
export const noClosePanel = ref(false); export const noClosePanel = ref(false);
@ -67,7 +68,8 @@ export default function init() {
descOpened, descOpened,
skillOpened, skillOpened,
skillTreeOpened, skillTreeOpened,
flyOpened flyOpened,
showStudiedSkill
}; };
} }

27
src/source/cls.d.ts vendored
View File

@ -114,6 +114,9 @@ interface IdToCls {
autotile5: 'autotile'; autotile5: 'autotile';
autotile6: 'autotile'; autotile6: 'autotile';
autotile7: 'autotile'; autotile7: 'autotile';
autotile8: 'autotile';
autotile9: 'autotile';
autotile10: 'autotile';
autotile1: 'autotile'; autotile1: 'autotile';
autotile2: 'autotile'; autotile2: 'autotile';
autotile3: 'autotile'; autotile3: 'autotile';
@ -503,6 +506,30 @@ interface IdToCls {
E577: 'enemys'; E577: 'enemys';
E578: 'enemys'; E578: 'enemys';
E579: 'enemys'; E579: 'enemys';
T580: 'terrains';
T581: 'terrains';
T582: 'terrains';
T583: 'terrains';
T584: 'terrains';
T585: 'terrains';
T586: 'terrains';
T587: 'terrains';
T588: 'terrains';
I589: 'items';
E590: 'enemys';
E591: 'enemys';
E592: 'enemys';
E593: 'enemys';
E594: 'enemys';
E595: 'enemys';
E596: 'enemys';
E597: 'enemys';
E598: 'enemys';
E599: 'enemys';
E600: 'enemys';
E601: 'enemys';
E602: 'enemys';
E603: 'enemys';
X20037: 'tileset'; X20037: 'tileset';
X20038: 'tileset'; X20038: 'tileset';
X20039: 'tileset'; X20039: 'tileset';

18
src/source/data.d.ts vendored
View File

@ -39,6 +39,20 @@ type FloorIds =
| 'MT29' | 'MT29'
| 'MT30' | 'MT30'
| 'MT31' | 'MT31'
| 'MT32'
| 'MT33'
| 'MT34'
| 'MT35'
| 'MT36'
| 'MT37'
| 'MT38'
| 'MT39'
| 'MT40'
| 'MT41'
| 'MT42'
| 'MT43'
| 'MT44'
| 'MT45'
type ImageIds = type ImageIds =
| 'IQ.png' | 'IQ.png'
@ -148,7 +162,8 @@ type BgmIds =
| 'grass.mp3' | 'grass.mp3'
| 'mount.mp3' | 'mount.mp3'
| 'night.mp3' | 'night.mp3'
| 'palace.mp3' | 'palaceNorth.mp3'
| 'palaceSouth.mp3'
| 'plot1.mp3' | 'plot1.mp3'
| 'road.mp3' | 'road.mp3'
| 'title.mp3' | 'title.mp3'
@ -157,6 +172,7 @@ type BgmIds =
| 'towerBoss2.mp3' | 'towerBoss2.mp3'
| 'towerBoss3.mp3' | 'towerBoss3.mp3'
| 'winter.mp3' | 'winter.mp3'
| 'winterTown.mp3'
type FontIds = type FontIds =
| 'normal' | 'normal'

View File

@ -184,4 +184,5 @@ interface ItemDeclaration {
I565: 'constants'; I565: 'constants';
I574: 'items'; I574: 'items';
I575: 'equips'; I575: 'equips';
I589: 'equips';
} }

54
src/source/maps.d.ts vendored
View File

@ -114,6 +114,9 @@ interface IdToNumber {
autotile5: 142; autotile5: 142;
autotile6: 143; autotile6: 143;
autotile7: 144; autotile7: 144;
autotile8: 145;
autotile9: 146;
autotile10: 147;
autotile1: 151; autotile1: 151;
autotile2: 152; autotile2: 152;
autotile3: 153; autotile3: 153;
@ -503,6 +506,30 @@ interface IdToNumber {
E577: 577; E577: 577;
E578: 578; E578: 578;
E579: 579; E579: 579;
T580: 580;
T581: 581;
T582: 582;
T583: 583;
T584: 584;
T585: 585;
T586: 586;
T587: 587;
T588: 588;
I589: 589;
E590: 590;
E591: 591;
E592: 592;
E593: 593;
E594: 594;
E595: 595;
E596: 596;
E597: 597;
E598: 598;
E599: 599;
E600: 600;
E601: 601;
E602: 602;
E603: 603;
X20037: 20037; X20037: 20037;
X20038: 20038; X20038: 20038;
X20039: 20039; X20039: 20039;
@ -651,6 +678,9 @@ interface NumberToId {
142: 'autotile5'; 142: 'autotile5';
143: 'autotile6'; 143: 'autotile6';
144: 'autotile7'; 144: 'autotile7';
145: 'autotile8';
146: 'autotile9';
147: 'autotile10';
151: 'autotile1'; 151: 'autotile1';
152: 'autotile2'; 152: 'autotile2';
153: 'autotile3'; 153: 'autotile3';
@ -1040,6 +1070,30 @@ interface NumberToId {
577: 'E577'; 577: 'E577';
578: 'E578'; 578: 'E578';
579: 'E579'; 579: 'E579';
580: 'T580';
581: 'T581';
582: 'T582';
583: 'T583';
584: 'T584';
585: 'T585';
586: 'T586';
587: 'T587';
588: 'T588';
589: 'I589';
590: 'E590';
591: 'E591';
592: 'E592';
593: 'E593';
594: 'E594';
595: 'E595';
596: 'E596';
597: 'E597';
598: 'E598';
599: 'E599';
600: 'E600';
601: 'E601';
602: 'E602';
603: 'E603';
20037: 'X20037'; 20037: 'X20037';
20038: 'X20038'; 20038: 'X20038';
20039: 'X20039'; 20039: 'X20039';

18
src/types/enemy.d.ts vendored
View File

@ -77,8 +77,8 @@ type Enemy<I extends EnemyIds = EnemyIds> = {
*/ */
type EnemySpecialDeclaration = [ type EnemySpecialDeclaration = [
id: number, id: number,
name: string | ((enemy: Enemy) => string), name: string | ((enemy: EnemySpecialBase) => string),
desc: string | ((enemy: Enemy) => string), desc: string | ((enemy: EnemySpecialBase) => string),
color: Color, color: Color,
extra?: number extra?: number
]; ];
@ -95,7 +95,14 @@ interface DamageString {
color: Color; color: Color;
} }
interface EnemyInfoBase { interface EnemySpecialBase {
/**
*
*/
special: number[];
}
interface EnemyInfoBase extends EnemySpecialBase {
/** /**
* *
*/ */
@ -125,11 +132,6 @@ interface EnemyInfoBase {
* *
*/ */
point: number; point: number;
/**
*
*/
special: number[];
} }
interface EnemyInfo extends EnemyInfoBase { interface EnemyInfo extends EnemyInfoBase {

View File

@ -175,6 +175,9 @@ interface PluginUis {
/** 是否展示标记的怪物 */ /** 是否展示标记的怪物 */
readonly showMarkedEnemy: Ref<boolean>; readonly showMarkedEnemy: Ref<boolean>;
/** 是否展示已学习的技能 */
readonly showStudiedSkill: Ref<boolean>;
/** ui栈 */ /** ui栈 */
readonly uiStack: Ref<Component[]>; readonly uiStack: Ref<Component[]>;

View File

@ -53,6 +53,11 @@ interface CheckBlockStatus {
* *
*/ */
cache: Record<string, DeepReadonly<EnemyBuffCache>>; cache: Record<string, DeepReadonly<EnemyBuffCache>>;
/**
*
*/
halo: Record<LocString, string[]>;
} }
interface DamageStatus { interface DamageStatus {

View File

@ -4,8 +4,9 @@
><div id="desc-list"> ><div id="desc-list">
<div <div
v-for="(data, k) in desc" v-for="(data, k) in desc"
class="selectable" class="selectable desc-item"
:selected="selected === k" :selected="selected === k"
:show="show(data.condition)"
@click="click(k)" @click="click(k)"
> >
<span v-if="show(data.condition)">{{ data.text }}</span> <span v-if="show(data.condition)">{{ data.text }}</span>
@ -31,7 +32,7 @@ function exit() {
} }
const content = computed(() => { const content = computed(() => {
return splitText(desc[selected.value].desc); return eval('`' + splitText(desc[selected.value].desc) + '`');
}); });
function click(key: DescKey) { function click(key: DescKey) {
@ -53,4 +54,9 @@ function show(condition: string) {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
.desc-item[show='false'] {
margin: 0;
padding: 0;
}
</style> </style>

View File

@ -9,6 +9,7 @@
v-model:width="getBoxPos(v).width" v-model:width="getBoxPos(v).width"
v-model:height="getBoxPos(v).height" v-model:height="getBoxPos(v).height"
:resizable="true" :resizable="true"
:dragable="true"
> >
<Scroll class="box-scroll" :no-scroll="true"> <Scroll class="box-scroll" :no-scroll="true">
<div class="marked-main"> <div class="marked-main">

View File

@ -34,6 +34,23 @@
autoScale ? 'ON' : 'OFF' autoScale ? 'ON' : 'OFF'
}}</span }}</span
> >
<span
class="selectable"
:selected="selected === 'showHalo'"
@click="click('showHalo')"
>展示范围光环:&nbsp;&nbsp;&nbsp;{{
showHalo ? 'ON' : 'OFF'
}}</span
>
<span
class="selectable"
:selected="selected === 'showStudied'"
v-if="core.getSkillLevel(11) > 0"
@click="click('showStudied')"
>展示已学习技能:&nbsp;&nbsp;&nbsp;{{
showStudied ? 'ON' : 'OFF'
}}</span
>
</div></template </div></template
> >
<template #right><span v-html="descText"></span></template <template #right><span v-html="descText"></span></template
@ -46,7 +63,9 @@ import {
transition, transition,
itemDetail, itemDetail,
autoSkill, autoSkill,
autoScale autoScale,
showStudied,
showHalo
} from '../plugin/settings'; } from '../plugin/settings';
import settingInfo from '../data/settings.json'; import settingInfo from '../data/settings.json';
import { has, splitText } from '../plugin/utils'; import { has, splitText } from '../plugin/utils';
@ -54,6 +73,8 @@ import Column from '../components/colomn.vue';
type Settings = typeof settingInfo; type Settings = typeof settingInfo;
const core = window.core;
const selected = ref<keyof Settings>('transition'); const selected = ref<keyof Settings>('transition');
const descText = computed(() => { const descText = computed(() => {
@ -77,6 +98,8 @@ function click(id: keyof Settings) {
autoSkill.value = !autoSkill.value; autoSkill.value = !autoSkill.value;
} else if (id === 'autoScale') { } else if (id === 'autoScale') {
autoScale.value = !autoScale.value; autoScale.value = !autoScale.value;
} else if (id === 'showHalo') {
showHalo.value = !showHalo.value;
} }
} }
</script> </script>

View File

@ -1,6 +1,11 @@
<template> <template>
<div id="status-bar"> <div id="status-bar">
<Box :resizable="true" v-model:width="width" v-model:height="height"> <Box
:resizable="true"
:dragable="true"
v-model:width="width"
v-model:height="height"
>
<Scroll <Scroll
id="status-main" id="status-main"
v-model:update="updateStatus" v-model:update="updateStatus"
@ -9,7 +14,7 @@
<div id="status-div"> <div id="status-div">
<span <span
id="status-floor" id="status-floor"
@click="viewMap" @click.stop="viewMap"
class="button-text" class="button-text"
>{{ floor }}</span >{{ floor }}</span
> >
@ -271,7 +276,7 @@ function openStudy() {}
.status-extra { .status-extra {
position: absolute; position: absolute;
right: 15%; right: 10%;
bottom: 0; bottom: 0;
font-size: 1.6vw; font-size: 1.6vw;
} }

115
src/ui/studied.vue Normal file
View File

@ -0,0 +1,115 @@
<template>
<div id="studied">
<Box
:resizable="true"
:dragable="true"
v-model:width="width"
v-model:height="height"
v-model:left="left"
v-model:top="top"
>
<Scroll :no-scroll="true" style="height: 100%">
<div id="studied-main">
<div v-for="(num, i) of studied" :key="i">
<div id="studied-rough">
<right-outlined
:folded="!!folded[i]"
@click="folded[i] = !folded[i]"
id="studied-fold"
/>
<span
>{{ i }}. {{ skills[i] }}剩余{{
last[i]
}}场战斗</span
>
</div>
<div id="studied-detail" v-if="!folded[i]">
{{ hint(num) }}
</div>
</div>
</div></Scroll
></Box
>
</div>
</template>
<script lang="ts" setup>
import { computed, onMounted, onUpdated, reactive, ref, watch } from 'vue';
import Box from '../components/box.vue';
import { status } from '../plugin/ui/statusBar';
import { RightOutlined } from '@ant-design/icons-vue';
import Scroll from '../components/scroll.vue';
watch(status, n => {});
let main: HTMLDivElement;
const width = ref(200);
const height = ref(0);
const left = ref(window.innerWidth - 300);
const top = ref(window.innerHeight - 300);
const folded = reactive<boolean[]>([]);
const studied = computed(() => {
status.value;
return core.status.hero.special?.num ?? [];
});
const last = computed(() => {
status.value;
return core.status.hero.special?.last ?? [];
});
const skills = computed(() => {
const specials = core.getSpecials();
return studied.value.map(v => {
const s = specials[v - 1][1];
// @ts-ignore
if (s instanceof Function) return s(core.status.hero.special);
else return s;
});
});
function hint(number: number) {
const specials = core.getSpecials();
const s = specials[number - 1][2];
// @ts-ignore
if (s instanceof Function) return s(core.status.hero.special);
else return s;
}
async function calHeight() {
await new Promise<void>(resolve => {
requestAnimationFrame(() => {
const style = getComputedStyle(main);
height.value = parseFloat(style.height);
resolve();
});
});
}
onUpdated(() => {
calHeight();
});
onMounted(() => {
main = document.getElementById('studied-main') as HTMLDivElement;
calHeight();
});
</script>
<style lang="less" scoped>
#studied {
font-family: 'normal';
font-size: 1vw;
}
#studied-fold {
transition: transform 0.2s ease-out;
}
#studied-fold[folded='true'] {
transform: rotate(90deg);
}
</style>