diff --git a/bin/json/game_puggsyevent.json b/bin/json/game_puggsyevent.json
new file mode 100644
index 000000000..74efb5bc0
--- /dev/null
+++ b/bin/json/game_puggsyevent.json
@@ -0,0 +1,120 @@
+[
+ {
+ "event": 1001,
+ "node_id": 1,
+ "type": 1,
+ "value": 0,
+ "reward": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ]
+ },
+ {
+ "event": 1002,
+ "node_id": 1,
+ "type": 2,
+ "value": 0,
+ "reward": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ]
+ },
+ {
+ "event": 1003,
+ "node_id": 1,
+ "type": 2,
+ "value": 0,
+ "reward": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ]
+ },
+ {
+ "event": 1004,
+ "node_id": 1,
+ "type": 3,
+ "value": 0,
+ "reward": []
+ },
+ {
+ "event": 1005,
+ "node_id": 1,
+ "type": 4,
+ "value": 0,
+ "reward": []
+ },
+ {
+ "event": 1006,
+ "node_id": 1,
+ "type": 1,
+ "value": 0,
+ "reward": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ]
+ },
+ {
+ "event": 1007,
+ "node_id": 1,
+ "type": 2,
+ "value": 0,
+ "reward": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ]
+ },
+ {
+ "event": 1008,
+ "node_id": 1,
+ "type": 2,
+ "value": 0,
+ "reward": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ]
+ },
+ {
+ "event": 1009,
+ "node_id": 1,
+ "type": 3,
+ "value": 0,
+ "reward": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ]
+ },
+ {
+ "event": 1010,
+ "node_id": 1,
+ "type": 4,
+ "value": 0,
+ "reward": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/bin/json/game_puggsyfight.json b/bin/json/game_puggsyfight.json
new file mode 100644
index 000000000..88661b006
--- /dev/null
+++ b/bin/json/game_puggsyfight.json
@@ -0,0 +1,127 @@
+[
+ {
+ "boss_id": 810301,
+ "boss_name": {
+ "key": "guild_guild_boss_boss_name_1",
+ "text": "胡德先生"
+ },
+ "boss_text": {
+ "key": "guild_guild_boss_boss_name_1",
+ "text": "他是一名懦弱的战士"
+ },
+ "BattleReadyID": 11706001,
+ "heroId": "33003",
+ "skill": [
+ 155005111,
+ 155005211,
+ 155005311
+ ],
+ "boss": [
+ 810301
+ ]
+ },
+ {
+ "boss_id": 810302,
+ "boss_name": {
+ "key": "guild_guild_boss_boss_name_2",
+ "text": "胡德先生"
+ },
+ "boss_text": {
+ "key": "guild_guild_boss_boss_name_2",
+ "text": "他是一名懦弱的战士"
+ },
+ "BattleReadyID": 11706001,
+ "heroId": "33003",
+ "skill": [
+ 155007111,
+ 155007211,
+ 155007311
+ ],
+ "boss": [
+ 810302
+ ]
+ },
+ {
+ "boss_id": 810303,
+ "boss_name": {
+ "key": "guild_guild_boss_boss_name_3",
+ "text": "胡德先生"
+ },
+ "boss_text": {
+ "key": "guild_guild_boss_boss_name_3",
+ "text": "他是一名懦弱的战士"
+ },
+ "BattleReadyID": 11706001,
+ "heroId": "33003",
+ "skill": [
+ 155006111,
+ 155006211,
+ 155006311
+ ],
+ "boss": [
+ 810303
+ ]
+ },
+ {
+ "boss_id": 810304,
+ "boss_name": {
+ "key": "guild_guild_boss_boss_name_4",
+ "text": "胡德先生"
+ },
+ "boss_text": {
+ "key": "guild_guild_boss_boss_name_4",
+ "text": "他是一名懦弱的战士"
+ },
+ "BattleReadyID": 11706001,
+ "heroId": "33003",
+ "skill": [
+ 155005111,
+ 155005211,
+ 155005311
+ ],
+ "boss": [
+ 810304
+ ]
+ },
+ {
+ "boss_id": 810305,
+ "boss_name": {
+ "key": "guild_guild_boss_boss_name_5",
+ "text": "胡德先生"
+ },
+ "boss_text": {
+ "key": "guild_guild_boss_boss_name_5",
+ "text": "他是一名懦弱的战士"
+ },
+ "BattleReadyID": 11706001,
+ "heroId": "33003",
+ "skill": [
+ 155005111,
+ 155005211,
+ 155005311
+ ],
+ "boss": [
+ 810305
+ ]
+ },
+ {
+ "boss_id": 810306,
+ "boss_name": {
+ "key": "guild_guild_boss_boss_name_6",
+ "text": "胡德先生"
+ },
+ "boss_text": {
+ "key": "guild_guild_boss_boss_name_6",
+ "text": "他是一名懦弱的战士"
+ },
+ "BattleReadyID": 11706001,
+ "heroId": "33003",
+ "skill": [
+ 125001111,
+ 125001211
+ ],
+ "boss": [
+ 810306
+ ]
+ }
+]
\ No newline at end of file
diff --git a/bin/json/game_puggsyisland.json b/bin/json/game_puggsyisland.json
new file mode 100644
index 000000000..169275263
--- /dev/null
+++ b/bin/json/game_puggsyisland.json
@@ -0,0 +1,200 @@
+[
+ {
+ "node_id": 1,
+ "puggsy_name": {
+ "key": "guild_guild_boss_boss_name_1",
+ "text": "伯克岛"
+ },
+ "time": [
+ 0
+ ],
+ "unlock": {
+ "key": "guild_guild_boss_boss_name_1",
+ "text": "{0}可航行至伯克岛"
+ },
+ "introduce": {
+ "key": "guild_guild_boss_boss_name_1",
+ "text": "航行抵达伯克岛"
+ }
+ },
+ {
+ "node_id": 2,
+ "puggsy_name": {
+ "key": "guild_guild_boss_boss_name_2",
+ "text": "伯克岛"
+ },
+ "time": [
+ 0
+ ],
+ "unlock": {
+ "key": "guild_guild_boss_boss_name_2",
+ "text": "{0}可航行至伯克岛"
+ },
+ "introduce": {
+ "key": "guild_guild_boss_boss_name_2",
+ "text": "航行抵达伯克岛"
+ }
+ },
+ {
+ "node_id": 3,
+ "puggsy_name": {
+ "key": "guild_guild_boss_boss_name_3",
+ "text": "伯克岛"
+ },
+ "time": [
+ 0
+ ],
+ "unlock": {
+ "key": "guild_guild_boss_boss_name_3",
+ "text": "{0}可航行至伯克岛"
+ },
+ "introduce": {
+ "key": "guild_guild_boss_boss_name_3",
+ "text": "航行抵达伯克岛"
+ }
+ },
+ {
+ "node_id": 4,
+ "puggsy_name": {
+ "key": "guild_guild_boss_boss_name_4",
+ "text": "伯克岛"
+ },
+ "time": [
+ 0
+ ],
+ "unlock": {
+ "key": "guild_guild_boss_boss_name_4",
+ "text": "{0}可航行至伯克岛"
+ },
+ "introduce": {
+ "key": "guild_guild_boss_boss_name_4",
+ "text": "航行抵达伯克岛"
+ }
+ },
+ {
+ "node_id": 5,
+ "puggsy_name": {
+ "key": "guild_guild_boss_boss_name_5",
+ "text": "伯克岛"
+ },
+ "time": [
+ 0
+ ],
+ "unlock": {
+ "key": "guild_guild_boss_boss_name_5",
+ "text": "{0}可航行至伯克岛"
+ },
+ "introduce": {
+ "key": "guild_guild_boss_boss_name_5",
+ "text": "航行抵达伯克岛"
+ }
+ },
+ {
+ "node_id": 6,
+ "puggsy_name": {
+ "key": "guild_guild_boss_boss_name_6",
+ "text": "战栗海岸"
+ },
+ "time": [
+ 3
+ ],
+ "unlock": {
+ "key": "guild_guild_boss_boss_name_6",
+ "text": "{0}可航行至战栗海岸"
+ },
+ "introduce": {
+ "key": "guild_guild_boss_boss_name_6",
+ "text": "航行抵达战栗海岸"
+ }
+ },
+ {
+ "node_id": 7,
+ "puggsy_name": {
+ "key": "guild_guild_boss_boss_name_7",
+ "text": "战栗海岸"
+ },
+ "time": [
+ 3
+ ],
+ "unlock": {
+ "key": "guild_guild_boss_boss_name_7",
+ "text": "{0}可航行至战栗海岸"
+ },
+ "introduce": {
+ "key": "guild_guild_boss_boss_name_7",
+ "text": "航行抵达战栗海岸"
+ }
+ },
+ {
+ "node_id": 8,
+ "puggsy_name": {
+ "key": "guild_guild_boss_boss_name_8",
+ "text": "战栗海岸"
+ },
+ "time": [
+ 3
+ ],
+ "unlock": {
+ "key": "guild_guild_boss_boss_name_8",
+ "text": "{0}可航行至战栗海岸"
+ },
+ "introduce": {
+ "key": "guild_guild_boss_boss_name_8",
+ "text": "航行抵达战栗海岸"
+ }
+ },
+ {
+ "node_id": 9,
+ "puggsy_name": {
+ "key": "guild_guild_boss_boss_name_9",
+ "text": "维京海峡"
+ },
+ "time": [
+ 6
+ ],
+ "unlock": {
+ "key": "guild_guild_boss_boss_name_9",
+ "text": "{0}可航行至维京海峡"
+ },
+ "introduce": {
+ "key": "guild_guild_boss_boss_name_9",
+ "text": "航行抵达维京海峡"
+ }
+ },
+ {
+ "node_id": 10,
+ "puggsy_name": {
+ "key": "guild_guild_boss_boss_name_10",
+ "text": "维京海峡"
+ },
+ "time": [
+ 6
+ ],
+ "unlock": {
+ "key": "guild_guild_boss_boss_name_10",
+ "text": "{0}可航行至维京海峡"
+ },
+ "introduce": {
+ "key": "guild_guild_boss_boss_name_10",
+ "text": "航行抵达维京海峡"
+ }
+ },
+ {
+ "node_id": 11,
+ "puggsy_name": {
+ "key": "guild_guild_boss_boss_name_11",
+ "text": "维京海峡"
+ },
+ "time": [
+ 6
+ ],
+ "unlock": {
+ "key": "guild_guild_boss_boss_name_11",
+ "text": "{0}可航行至维京海峡"
+ },
+ "introduce": {
+ "key": "guild_guild_boss_boss_name_11",
+ "text": "航行抵达维京海峡"
+ }
+ }
+]
\ No newline at end of file
diff --git a/bin/json/game_puggsyscore.json b/bin/json/game_puggsyscore.json
new file mode 100644
index 000000000..a29d88d45
--- /dev/null
+++ b/bin/json/game_puggsyscore.json
@@ -0,0 +1,223 @@
+[
+ {
+ "id": 1,
+ "boss_id": 810301,
+ "rank_low": 0,
+ "rank_up": 19999,
+ "reward": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ]
+ },
+ {
+ "id": 2,
+ "boss_id": 810301,
+ "rank_low": 20000,
+ "rank_up": 49999,
+ "reward": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ]
+ },
+ {
+ "id": 3,
+ "boss_id": 810301,
+ "rank_low": 50000,
+ "rank_up": 79999,
+ "reward": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ]
+ },
+ {
+ "id": 4,
+ "boss_id": 810301,
+ "rank_low": 80000,
+ "rank_up": 99999,
+ "reward": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ]
+ },
+ {
+ "id": 5,
+ "boss_id": 810301,
+ "rank_low": 100000,
+ "rank_up": 149999,
+ "reward": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ]
+ },
+ {
+ "id": 6,
+ "boss_id": 810301,
+ "rank_low": 150000,
+ "rank_up": 199999,
+ "reward": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ]
+ },
+ {
+ "id": 7,
+ "boss_id": 810301,
+ "rank_low": 200000,
+ "rank_up": 249999,
+ "reward": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ]
+ },
+ {
+ "id": 8,
+ "boss_id": 810301,
+ "rank_low": 250000,
+ "rank_up": 319999,
+ "reward": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ]
+ },
+ {
+ "id": 9,
+ "boss_id": 810301,
+ "rank_low": 320000,
+ "rank_up": 399999,
+ "reward": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ]
+ },
+ {
+ "id": 10,
+ "boss_id": 810301,
+ "rank_low": 400000,
+ "rank_up": 499999,
+ "reward": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ]
+ },
+ {
+ "id": 11,
+ "boss_id": 810301,
+ "rank_low": 500000,
+ "rank_up": 599999,
+ "reward": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ]
+ },
+ {
+ "id": 12,
+ "boss_id": 810301,
+ "rank_low": 600000,
+ "rank_up": 699999,
+ "reward": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ]
+ },
+ {
+ "id": 13,
+ "boss_id": 810301,
+ "rank_low": 700000,
+ "rank_up": 999999,
+ "reward": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ]
+ },
+ {
+ "id": 14,
+ "boss_id": 810301,
+ "rank_low": 1000000,
+ "rank_up": 1199999,
+ "reward": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ]
+ },
+ {
+ "id": 15,
+ "boss_id": 810301,
+ "rank_low": 1200000,
+ "rank_up": 1599999,
+ "reward": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ]
+ },
+ {
+ "id": 16,
+ "boss_id": 810301,
+ "rank_low": 1600000,
+ "rank_up": 3799999,
+ "reward": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ]
+ },
+ {
+ "id": 17,
+ "boss_id": 810301,
+ "rank_low": 3800000,
+ "rank_up": -1,
+ "reward": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/bin/json/game_puggsyskill.json b/bin/json/game_puggsyskill.json
new file mode 100644
index 000000000..4d798ad6e
--- /dev/null
+++ b/bin/json/game_puggsyskill.json
@@ -0,0 +1,2700 @@
+[
+ {
+ "id": 100101,
+ "node_id": 1001,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 0,
+ "node_direction": 0,
+ "node_long": 0,
+ "name": {
+ "key": "horoscope_horoscope_name_1",
+ "text": "全体属性生命提升"
+ },
+ "comicon": "Life",
+ "lv": 0,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "hp",
+ "n": 0
+ }
+ ]
+ },
+ {
+ "id": 100102,
+ "node_id": 1001,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 0,
+ "node_direction": 0,
+ "node_long": 0,
+ "name": {
+ "key": "horoscope_horoscope_name_2",
+ "text": "全体属性生命提升"
+ },
+ "comicon": "Life",
+ "lv": 1,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "hp",
+ "n": 75
+ }
+ ]
+ },
+ {
+ "id": 100103,
+ "node_id": 1001,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 0,
+ "node_direction": 0,
+ "node_long": 0,
+ "name": {
+ "key": "horoscope_horoscope_name_3",
+ "text": "全体属性生命提升"
+ },
+ "comicon": "Life",
+ "lv": 2,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "hp",
+ "n": 150
+ }
+ ]
+ },
+ {
+ "id": 100104,
+ "node_id": 1001,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 0,
+ "node_direction": 0,
+ "node_long": 0,
+ "name": {
+ "key": "horoscope_horoscope_name_4",
+ "text": "全体属性生命提升"
+ },
+ "comicon": "Life",
+ "lv": 3,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "hp",
+ "n": 225
+ }
+ ]
+ },
+ {
+ "id": 100105,
+ "node_id": 1001,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 0,
+ "node_direction": 0,
+ "node_long": 0,
+ "name": {
+ "key": "horoscope_horoscope_name_5",
+ "text": "全体属性生命提升"
+ },
+ "comicon": "Life",
+ "lv": 4,
+ "cost_item": [],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "hp",
+ "n": 300
+ }
+ ]
+ },
+ {
+ "id": 100201,
+ "node_id": 1002,
+ "front": [
+ 100105
+ ],
+ "node_type": 1,
+ "pre_node": 1001,
+ "node_direction": 90,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_6",
+ "text": "热情之火属性攻击提升"
+ },
+ "comicon": "Attack",
+ "lv": 0,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 1,
+ "upgrade": [
+ {
+ "a": "atk",
+ "n": 0
+ }
+ ]
+ },
+ {
+ "id": 100202,
+ "node_id": 1002,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1001,
+ "node_direction": 90,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_7",
+ "text": "热情之火属性攻击提升"
+ },
+ "comicon": "Attack",
+ "lv": 1,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 1,
+ "upgrade": [
+ {
+ "a": "atk",
+ "n": 20
+ }
+ ]
+ },
+ {
+ "id": 100203,
+ "node_id": 1002,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1001,
+ "node_direction": 90,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_8",
+ "text": "热情之火属性攻击提升"
+ },
+ "comicon": "Attack",
+ "lv": 2,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 1,
+ "upgrade": [
+ {
+ "a": "atk",
+ "n": 40
+ }
+ ]
+ },
+ {
+ "id": 100204,
+ "node_id": 1002,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1001,
+ "node_direction": 90,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_9",
+ "text": "热情之火属性攻击提升"
+ },
+ "comicon": "Attack",
+ "lv": 3,
+ "cost_item": [],
+ "AddGroup": 2,
+ "AddClassify": 1,
+ "upgrade": [
+ {
+ "a": "atk",
+ "n": 60
+ }
+ ]
+ },
+ {
+ "id": 100301,
+ "node_id": 1003,
+ "front": [
+ 100204
+ ],
+ "node_type": 1,
+ "pre_node": 1002,
+ "node_direction": 90,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_10",
+ "text": "热情之火属性防御提升"
+ },
+ "comicon": "Defense",
+ "lv": 0,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 1,
+ "upgrade": [
+ {
+ "a": "def",
+ "n": 0
+ }
+ ]
+ },
+ {
+ "id": 100302,
+ "node_id": 1003,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1002,
+ "node_direction": 90,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_11",
+ "text": "热情之火属性防御提升"
+ },
+ "comicon": "Defense",
+ "lv": 1,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 1,
+ "upgrade": [
+ {
+ "a": "def",
+ "n": 15
+ }
+ ]
+ },
+ {
+ "id": 100303,
+ "node_id": 1003,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1002,
+ "node_direction": 90,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_12",
+ "text": "热情之火属性防御提升"
+ },
+ "comicon": "Defense",
+ "lv": 2,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 1,
+ "upgrade": [
+ {
+ "a": "def",
+ "n": 30
+ }
+ ]
+ },
+ {
+ "id": 100304,
+ "node_id": 1003,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1002,
+ "node_direction": 90,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_13",
+ "text": "热情之火属性防御提升"
+ },
+ "comicon": "Defense",
+ "lv": 3,
+ "cost_item": [],
+ "AddGroup": 2,
+ "AddClassify": 1,
+ "upgrade": [
+ {
+ "a": "def",
+ "n": 45
+ }
+ ]
+ },
+ {
+ "id": 100401,
+ "node_id": 1004,
+ "front": [
+ 100304
+ ],
+ "node_type": 1,
+ "pre_node": 1003,
+ "node_direction": 90,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_14",
+ "text": "热情之火属性生命提升"
+ },
+ "comicon": "Life",
+ "lv": 0,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 1,
+ "upgrade": [
+ {
+ "a": "hp",
+ "n": 0
+ }
+ ]
+ },
+ {
+ "id": 100402,
+ "node_id": 1004,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1003,
+ "node_direction": 90,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_15",
+ "text": "热情之火属性生命提升"
+ },
+ "comicon": "Life",
+ "lv": 1,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 1,
+ "upgrade": [
+ {
+ "a": "hp",
+ "n": 200
+ }
+ ]
+ },
+ {
+ "id": 100403,
+ "node_id": 1004,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1003,
+ "node_direction": 90,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_16",
+ "text": "热情之火属性生命提升"
+ },
+ "comicon": "Life",
+ "lv": 2,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 1,
+ "upgrade": [
+ {
+ "a": "hp",
+ "n": 400
+ }
+ ]
+ },
+ {
+ "id": 100404,
+ "node_id": 1004,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1003,
+ "node_direction": 90,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_17",
+ "text": "热情之火属性生命提升"
+ },
+ "comicon": "Life",
+ "lv": 3,
+ "cost_item": [],
+ "AddGroup": 2,
+ "AddClassify": 1,
+ "upgrade": [
+ {
+ "a": "hp",
+ "n": 600
+ }
+ ]
+ },
+ {
+ "id": 100501,
+ "node_id": 1005,
+ "front": [
+ 100404
+ ],
+ "node_type": 1,
+ "pre_node": 1004,
+ "node_direction": 90,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_18",
+ "text": "全体属性攻击百分比提升"
+ },
+ "comicon": "js_icon_sx5",
+ "lv": 0,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "atkpro",
+ "n": 0
+ }
+ ]
+ },
+ {
+ "id": 100502,
+ "node_id": 1005,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1004,
+ "node_direction": 90,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_19",
+ "text": "全体属性攻击百分比提升"
+ },
+ "comicon": "js_icon_sx5",
+ "lv": 1,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "atkpro",
+ "n": 20
+ }
+ ]
+ },
+ {
+ "id": 100503,
+ "node_id": 1005,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1004,
+ "node_direction": 90,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_20",
+ "text": "全体属性攻击百分比提升"
+ },
+ "comicon": "js_icon_sx5",
+ "lv": 2,
+ "cost_item": [],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "atkpro",
+ "n": 40
+ }
+ ]
+ },
+ {
+ "id": 100601,
+ "node_id": 1006,
+ "front": [
+ 100404
+ ],
+ "node_type": 1,
+ "pre_node": 1004,
+ "node_direction": 0,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_21",
+ "text": "全体属性防御百分比提升"
+ },
+ "comicon": "js_icon_sx9",
+ "lv": 0,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "defpro",
+ "n": 0
+ }
+ ]
+ },
+ {
+ "id": 100602,
+ "node_id": 1006,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1004,
+ "node_direction": 0,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_22",
+ "text": "全体属性防御百分比提升"
+ },
+ "comicon": "js_icon_sx9",
+ "lv": 1,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "defpro",
+ "n": 20
+ }
+ ]
+ },
+ {
+ "id": 100603,
+ "node_id": 1006,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1004,
+ "node_direction": 0,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_23",
+ "text": "全体属性防御百分比提升"
+ },
+ "comicon": "js_icon_sx9",
+ "lv": 2,
+ "cost_item": [],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "defpro",
+ "n": 40
+ }
+ ]
+ },
+ {
+ "id": 100701,
+ "node_id": 1007,
+ "front": [
+ 100404
+ ],
+ "node_type": 1,
+ "pre_node": 1004,
+ "node_direction": 180,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_24",
+ "text": "全体属性生命百分比提升"
+ },
+ "comicon": "js_icon_sx10",
+ "lv": 0,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "hppro",
+ "n": 0
+ }
+ ]
+ },
+ {
+ "id": 100702,
+ "node_id": 1007,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1004,
+ "node_direction": 180,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_25",
+ "text": "全体属性生命百分比提升"
+ },
+ "comicon": "js_icon_sx10",
+ "lv": 1,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "hppro",
+ "n": 20
+ }
+ ]
+ },
+ {
+ "id": 100703,
+ "node_id": 1007,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1004,
+ "node_direction": 180,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_26",
+ "text": "全体属性生命百分比提升"
+ },
+ "comicon": "js_icon_sx10",
+ "lv": 2,
+ "cost_item": [],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "hppro",
+ "n": 40
+ }
+ ]
+ },
+ {
+ "id": 100801,
+ "node_id": 1008,
+ "front": [
+ 100104
+ ],
+ "node_type": 1,
+ "pre_node": 1001,
+ "node_direction": 180,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_27",
+ "text": "感观之林属性攻击提升"
+ },
+ "comicon": "Attack",
+ "lv": 0,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 2,
+ "upgrade": [
+ {
+ "a": "atk",
+ "n": 0
+ }
+ ]
+ },
+ {
+ "id": 100802,
+ "node_id": 1008,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1001,
+ "node_direction": 180,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_28",
+ "text": "感观之林属性攻击提升"
+ },
+ "comicon": "Attack",
+ "lv": 1,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 2,
+ "upgrade": [
+ {
+ "a": "atk",
+ "n": 20
+ }
+ ]
+ },
+ {
+ "id": 100803,
+ "node_id": 1008,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1001,
+ "node_direction": 180,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_29",
+ "text": "感观之林属性攻击提升"
+ },
+ "comicon": "Attack",
+ "lv": 2,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 2,
+ "upgrade": [
+ {
+ "a": "atk",
+ "n": 40
+ }
+ ]
+ },
+ {
+ "id": 100804,
+ "node_id": 1008,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1001,
+ "node_direction": 180,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_30",
+ "text": "感观之林属性攻击提升"
+ },
+ "comicon": "Attack",
+ "lv": 3,
+ "cost_item": [],
+ "AddGroup": 2,
+ "AddClassify": 2,
+ "upgrade": [
+ {
+ "a": "atk",
+ "n": 60
+ }
+ ]
+ },
+ {
+ "id": 100901,
+ "node_id": 1009,
+ "front": [
+ 100804
+ ],
+ "node_type": 1,
+ "pre_node": 1008,
+ "node_direction": 180,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_31",
+ "text": "感观之林属性防御提升"
+ },
+ "comicon": "Defense",
+ "lv": 0,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 2,
+ "upgrade": [
+ {
+ "a": "def",
+ "n": 0
+ }
+ ]
+ },
+ {
+ "id": 100902,
+ "node_id": 1009,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1008,
+ "node_direction": 180,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_32",
+ "text": "感观之林属性防御提升"
+ },
+ "comicon": "Defense",
+ "lv": 1,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 2,
+ "upgrade": [
+ {
+ "a": "def",
+ "n": 15
+ }
+ ]
+ },
+ {
+ "id": 100903,
+ "node_id": 1009,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1008,
+ "node_direction": 180,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_33",
+ "text": "感观之林属性防御提升"
+ },
+ "comicon": "Defense",
+ "lv": 2,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 2,
+ "upgrade": [
+ {
+ "a": "def",
+ "n": 30
+ }
+ ]
+ },
+ {
+ "id": 100904,
+ "node_id": 1009,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1008,
+ "node_direction": 180,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_34",
+ "text": "感观之林属性防御提升"
+ },
+ "comicon": "Defense",
+ "lv": 3,
+ "cost_item": [],
+ "AddGroup": 2,
+ "AddClassify": 2,
+ "upgrade": [
+ {
+ "a": "def",
+ "n": 45
+ }
+ ]
+ },
+ {
+ "id": 101001,
+ "node_id": 1010,
+ "front": [
+ 100904
+ ],
+ "node_type": 1,
+ "pre_node": 1009,
+ "node_direction": 180,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_35",
+ "text": "感观之林属性生命提升"
+ },
+ "comicon": "Life",
+ "lv": 0,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 2,
+ "upgrade": [
+ {
+ "a": "hp",
+ "n": 0
+ }
+ ]
+ },
+ {
+ "id": 101002,
+ "node_id": 1010,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1009,
+ "node_direction": 180,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_36",
+ "text": "感观之林属性生命提升"
+ },
+ "comicon": "Life",
+ "lv": 1,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 2,
+ "upgrade": [
+ {
+ "a": "hp",
+ "n": 200
+ }
+ ]
+ },
+ {
+ "id": 101003,
+ "node_id": 1010,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1009,
+ "node_direction": 180,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_37",
+ "text": "感观之林属性生命提升"
+ },
+ "comicon": "Life",
+ "lv": 2,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 2,
+ "upgrade": [
+ {
+ "a": "hp",
+ "n": 400
+ }
+ ]
+ },
+ {
+ "id": 101004,
+ "node_id": 1010,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1009,
+ "node_direction": 180,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_38",
+ "text": "感观之林属性生命提升"
+ },
+ "comicon": "Life",
+ "lv": 3,
+ "cost_item": [],
+ "AddGroup": 2,
+ "AddClassify": 2,
+ "upgrade": [
+ {
+ "a": "hp",
+ "n": 600
+ }
+ ]
+ },
+ {
+ "id": 101101,
+ "node_id": 1011,
+ "front": [
+ 101004
+ ],
+ "node_type": 1,
+ "pre_node": 1010,
+ "node_direction": 180,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_39",
+ "text": "全体属性攻击百分比提升"
+ },
+ "comicon": "js_icon_sx5",
+ "lv": 0,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "atkpro",
+ "n": 0
+ }
+ ]
+ },
+ {
+ "id": 101102,
+ "node_id": 1011,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1010,
+ "node_direction": 180,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_40",
+ "text": "全体属性攻击百分比提升"
+ },
+ "comicon": "js_icon_sx5",
+ "lv": 1,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "atkpro",
+ "n": 20
+ }
+ ]
+ },
+ {
+ "id": 101103,
+ "node_id": 1011,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1010,
+ "node_direction": 180,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_41",
+ "text": "全体属性攻击百分比提升"
+ },
+ "comicon": "js_icon_sx5",
+ "lv": 2,
+ "cost_item": [],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "atkpro",
+ "n": 40
+ }
+ ]
+ },
+ {
+ "id": 101201,
+ "node_id": 1012,
+ "front": [
+ 101004
+ ],
+ "node_type": 1,
+ "pre_node": 1010,
+ "node_direction": 90,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_42",
+ "text": "全体属性防御百分比提升"
+ },
+ "comicon": "js_icon_sx9",
+ "lv": 0,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "defpro",
+ "n": 0
+ }
+ ]
+ },
+ {
+ "id": 101202,
+ "node_id": 1012,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1010,
+ "node_direction": 90,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_43",
+ "text": "全体属性防御百分比提升"
+ },
+ "comicon": "js_icon_sx9",
+ "lv": 1,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "defpro",
+ "n": 20
+ }
+ ]
+ },
+ {
+ "id": 101203,
+ "node_id": 1012,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1010,
+ "node_direction": 90,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_44",
+ "text": "全体属性防御百分比提升"
+ },
+ "comicon": "js_icon_sx9",
+ "lv": 2,
+ "cost_item": [],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "defpro",
+ "n": 40
+ }
+ ]
+ },
+ {
+ "id": 101301,
+ "node_id": 1013,
+ "front": [
+ 101004
+ ],
+ "node_type": 1,
+ "pre_node": 1010,
+ "node_direction": 270,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_45",
+ "text": "全体属性生命百分比提升"
+ },
+ "comicon": "js_icon_sx10",
+ "lv": 0,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "hppro",
+ "n": 0
+ }
+ ]
+ },
+ {
+ "id": 101302,
+ "node_id": 1013,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1010,
+ "node_direction": 270,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_46",
+ "text": "全体属性生命百分比提升"
+ },
+ "comicon": "js_icon_sx10",
+ "lv": 1,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "hppro",
+ "n": 20
+ }
+ ]
+ },
+ {
+ "id": 101303,
+ "node_id": 1013,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1010,
+ "node_direction": 270,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_47",
+ "text": "全体属性生命百分比提升"
+ },
+ "comicon": "js_icon_sx10",
+ "lv": 2,
+ "cost_item": [],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "hppro",
+ "n": 40
+ }
+ ]
+ },
+ {
+ "id": 101401,
+ "node_id": 1014,
+ "front": [
+ 100104
+ ],
+ "node_type": 1,
+ "pre_node": 1001,
+ "node_direction": 270,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_48",
+ "text": "包容之水属性攻击提升"
+ },
+ "comicon": "Attack",
+ "lv": 0,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 3,
+ "upgrade": [
+ {
+ "a": "atk",
+ "n": 0
+ }
+ ]
+ },
+ {
+ "id": 101402,
+ "node_id": 1014,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1001,
+ "node_direction": 270,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_49",
+ "text": "包容之水属性攻击提升"
+ },
+ "comicon": "Attack",
+ "lv": 1,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 3,
+ "upgrade": [
+ {
+ "a": "atk",
+ "n": 20
+ }
+ ]
+ },
+ {
+ "id": 101403,
+ "node_id": 1014,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1001,
+ "node_direction": 270,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_50",
+ "text": "包容之水属性攻击提升"
+ },
+ "comicon": "Attack",
+ "lv": 2,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 3,
+ "upgrade": [
+ {
+ "a": "atk",
+ "n": 40
+ }
+ ]
+ },
+ {
+ "id": 101404,
+ "node_id": 1014,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1001,
+ "node_direction": 270,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_51",
+ "text": "包容之水属性攻击提升"
+ },
+ "comicon": "Attack",
+ "lv": 3,
+ "cost_item": [],
+ "AddGroup": 2,
+ "AddClassify": 3,
+ "upgrade": [
+ {
+ "a": "atk",
+ "n": 60
+ }
+ ]
+ },
+ {
+ "id": 101501,
+ "node_id": 1015,
+ "front": [
+ 101404
+ ],
+ "node_type": 1,
+ "pre_node": 1014,
+ "node_direction": 270,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_52",
+ "text": "包容之水属性防御提升"
+ },
+ "comicon": "Defense",
+ "lv": 0,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 3,
+ "upgrade": [
+ {
+ "a": "def",
+ "n": 0
+ }
+ ]
+ },
+ {
+ "id": 101502,
+ "node_id": 1015,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1014,
+ "node_direction": 270,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_53",
+ "text": "包容之水属性防御提升"
+ },
+ "comicon": "Defense",
+ "lv": 1,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 3,
+ "upgrade": [
+ {
+ "a": "def",
+ "n": 15
+ }
+ ]
+ },
+ {
+ "id": 101503,
+ "node_id": 1015,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1014,
+ "node_direction": 270,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_54",
+ "text": "包容之水属性防御提升"
+ },
+ "comicon": "Defense",
+ "lv": 2,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 3,
+ "upgrade": [
+ {
+ "a": "def",
+ "n": 30
+ }
+ ]
+ },
+ {
+ "id": 101504,
+ "node_id": 1015,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1014,
+ "node_direction": 270,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_55",
+ "text": "包容之水属性防御提升"
+ },
+ "comicon": "Defense",
+ "lv": 3,
+ "cost_item": [],
+ "AddGroup": 2,
+ "AddClassify": 3,
+ "upgrade": [
+ {
+ "a": "def",
+ "n": 45
+ }
+ ]
+ },
+ {
+ "id": 101601,
+ "node_id": 1016,
+ "front": [
+ 101504
+ ],
+ "node_type": 1,
+ "pre_node": 1015,
+ "node_direction": 270,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_56",
+ "text": "包容之水属性生命提升"
+ },
+ "comicon": "Life",
+ "lv": 0,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 3,
+ "upgrade": [
+ {
+ "a": "hp",
+ "n": 0
+ }
+ ]
+ },
+ {
+ "id": 101602,
+ "node_id": 1016,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1015,
+ "node_direction": 270,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_57",
+ "text": "包容之水属性生命提升"
+ },
+ "comicon": "Life",
+ "lv": 1,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 3,
+ "upgrade": [
+ {
+ "a": "hp",
+ "n": 200
+ }
+ ]
+ },
+ {
+ "id": 101603,
+ "node_id": 1016,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1015,
+ "node_direction": 270,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_58",
+ "text": "包容之水属性生命提升"
+ },
+ "comicon": "Life",
+ "lv": 2,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 3,
+ "upgrade": [
+ {
+ "a": "hp",
+ "n": 400
+ }
+ ]
+ },
+ {
+ "id": 101604,
+ "node_id": 1016,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1015,
+ "node_direction": 270,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_59",
+ "text": "包容之水属性生命提升"
+ },
+ "comicon": "Life",
+ "lv": 3,
+ "cost_item": [],
+ "AddGroup": 2,
+ "AddClassify": 3,
+ "upgrade": [
+ {
+ "a": "hp",
+ "n": 600
+ }
+ ]
+ },
+ {
+ "id": 101701,
+ "node_id": 1017,
+ "front": [
+ 101604
+ ],
+ "node_type": 1,
+ "pre_node": 1016,
+ "node_direction": 270,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_60",
+ "text": "全体属性攻击百分比提升"
+ },
+ "comicon": "js_icon_sx5",
+ "lv": 0,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "atkpro",
+ "n": 0
+ }
+ ]
+ },
+ {
+ "id": 101702,
+ "node_id": 1017,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1016,
+ "node_direction": 270,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_61",
+ "text": "全体属性攻击百分比提升"
+ },
+ "comicon": "js_icon_sx5",
+ "lv": 1,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "atkpro",
+ "n": 20
+ }
+ ]
+ },
+ {
+ "id": 101703,
+ "node_id": 1017,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1016,
+ "node_direction": 270,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_62",
+ "text": "全体属性攻击百分比提升"
+ },
+ "comicon": "js_icon_sx5",
+ "lv": 2,
+ "cost_item": [],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "atkpro",
+ "n": 40
+ }
+ ]
+ },
+ {
+ "id": 101801,
+ "node_id": 1018,
+ "front": [
+ 101604
+ ],
+ "node_type": 1,
+ "pre_node": 1016,
+ "node_direction": 0,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_63",
+ "text": "全体属性防御百分比提升"
+ },
+ "comicon": "js_icon_sx9",
+ "lv": 0,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "defpro",
+ "n": 0
+ }
+ ]
+ },
+ {
+ "id": 101802,
+ "node_id": 1018,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1016,
+ "node_direction": 0,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_64",
+ "text": "全体属性防御百分比提升"
+ },
+ "comicon": "js_icon_sx9",
+ "lv": 1,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "defpro",
+ "n": 20
+ }
+ ]
+ },
+ {
+ "id": 101803,
+ "node_id": 1018,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1016,
+ "node_direction": 0,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_65",
+ "text": "全体属性防御百分比提升"
+ },
+ "comicon": "js_icon_sx9",
+ "lv": 2,
+ "cost_item": [],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "defpro",
+ "n": 40
+ }
+ ]
+ },
+ {
+ "id": 101901,
+ "node_id": 1019,
+ "front": [
+ 101604
+ ],
+ "node_type": 1,
+ "pre_node": 1016,
+ "node_direction": 180,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_66",
+ "text": "全体属性生命百分比提升"
+ },
+ "comicon": "js_icon_sx10",
+ "lv": 0,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "hppro",
+ "n": 0
+ }
+ ]
+ },
+ {
+ "id": 101902,
+ "node_id": 1019,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1016,
+ "node_direction": 180,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_67",
+ "text": "全体属性生命百分比提升"
+ },
+ "comicon": "js_icon_sx10",
+ "lv": 1,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "hppro",
+ "n": 20
+ }
+ ]
+ },
+ {
+ "id": 101903,
+ "node_id": 1019,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1016,
+ "node_direction": 180,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_68",
+ "text": "全体属性生命百分比提升"
+ },
+ "comicon": "js_icon_sx10",
+ "lv": 2,
+ "cost_item": [],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "hppro",
+ "n": 40
+ }
+ ]
+ },
+ {
+ "id": 102001,
+ "node_id": 1020,
+ "front": [
+ 100104
+ ],
+ "node_type": 1,
+ "pre_node": 1001,
+ "node_direction": 0,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_69",
+ "text": "荣耀之光属性攻击提升"
+ },
+ "comicon": "Attack",
+ "lv": 0,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 4,
+ "upgrade": [
+ {
+ "a": "atk",
+ "n": 0
+ }
+ ]
+ },
+ {
+ "id": 102002,
+ "node_id": 1020,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1001,
+ "node_direction": 0,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_70",
+ "text": "荣耀之光属性攻击提升"
+ },
+ "comicon": "Attack",
+ "lv": 1,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 4,
+ "upgrade": [
+ {
+ "a": "atk",
+ "n": 20
+ }
+ ]
+ },
+ {
+ "id": 102003,
+ "node_id": 1020,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1001,
+ "node_direction": 0,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_71",
+ "text": "荣耀之光属性攻击提升"
+ },
+ "comicon": "Attack",
+ "lv": 2,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 4,
+ "upgrade": [
+ {
+ "a": "atk",
+ "n": 40
+ }
+ ]
+ },
+ {
+ "id": 102004,
+ "node_id": 1020,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1001,
+ "node_direction": 0,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_72",
+ "text": "荣耀之光属性攻击提升"
+ },
+ "comicon": "Attack",
+ "lv": 3,
+ "cost_item": [],
+ "AddGroup": 2,
+ "AddClassify": 4,
+ "upgrade": [
+ {
+ "a": "atk",
+ "n": 60
+ }
+ ]
+ },
+ {
+ "id": 102101,
+ "node_id": 1021,
+ "front": [
+ 102004
+ ],
+ "node_type": 1,
+ "pre_node": 1020,
+ "node_direction": 0,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_73",
+ "text": "荣耀之光属性防御提升"
+ },
+ "comicon": "Defense",
+ "lv": 0,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 4,
+ "upgrade": [
+ {
+ "a": "def",
+ "n": 0
+ }
+ ]
+ },
+ {
+ "id": 102102,
+ "node_id": 1021,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1020,
+ "node_direction": 0,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_74",
+ "text": "荣耀之光属性防御提升"
+ },
+ "comicon": "Defense",
+ "lv": 1,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 4,
+ "upgrade": [
+ {
+ "a": "def",
+ "n": 15
+ }
+ ]
+ },
+ {
+ "id": 102103,
+ "node_id": 1021,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1020,
+ "node_direction": 0,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_75",
+ "text": "荣耀之光属性防御提升"
+ },
+ "comicon": "Defense",
+ "lv": 2,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 4,
+ "upgrade": [
+ {
+ "a": "def",
+ "n": 30
+ }
+ ]
+ },
+ {
+ "id": 102104,
+ "node_id": 1021,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1020,
+ "node_direction": 0,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_76",
+ "text": "荣耀之光属性防御提升"
+ },
+ "comicon": "Defense",
+ "lv": 3,
+ "cost_item": [],
+ "AddGroup": 2,
+ "AddClassify": 4,
+ "upgrade": [
+ {
+ "a": "def",
+ "n": 45
+ }
+ ]
+ },
+ {
+ "id": 102201,
+ "node_id": 1022,
+ "front": [
+ 102104
+ ],
+ "node_type": 1,
+ "pre_node": 1021,
+ "node_direction": 0,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_77",
+ "text": "荣耀之光属性生命提升"
+ },
+ "comicon": "Life",
+ "lv": 0,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 4,
+ "upgrade": [
+ {
+ "a": "hp",
+ "n": 0
+ }
+ ]
+ },
+ {
+ "id": 102202,
+ "node_id": 1022,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1021,
+ "node_direction": 0,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_78",
+ "text": "荣耀之光属性生命提升"
+ },
+ "comicon": "Life",
+ "lv": 1,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 4,
+ "upgrade": [
+ {
+ "a": "hp",
+ "n": 200
+ }
+ ]
+ },
+ {
+ "id": 102203,
+ "node_id": 1022,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1021,
+ "node_direction": 0,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_79",
+ "text": "荣耀之光属性生命提升"
+ },
+ "comicon": "Life",
+ "lv": 2,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 2,
+ "AddClassify": 4,
+ "upgrade": [
+ {
+ "a": "hp",
+ "n": 400
+ }
+ ]
+ },
+ {
+ "id": 102204,
+ "node_id": 1022,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1021,
+ "node_direction": 0,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_80",
+ "text": "荣耀之光属性生命提升"
+ },
+ "comicon": "Life",
+ "lv": 3,
+ "cost_item": [],
+ "AddGroup": 2,
+ "AddClassify": 4,
+ "upgrade": [
+ {
+ "a": "hp",
+ "n": 600
+ }
+ ]
+ },
+ {
+ "id": 102301,
+ "node_id": 1023,
+ "front": [
+ 102204
+ ],
+ "node_type": 1,
+ "pre_node": 1022,
+ "node_direction": 0,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_81",
+ "text": "全体属性攻击百分比提升"
+ },
+ "comicon": "js_icon_sx5",
+ "lv": 0,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "atkpro",
+ "n": 0
+ }
+ ]
+ },
+ {
+ "id": 102302,
+ "node_id": 1023,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1022,
+ "node_direction": 0,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_82",
+ "text": "全体属性攻击百分比提升"
+ },
+ "comicon": "js_icon_sx5",
+ "lv": 1,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "atkpro",
+ "n": 20
+ }
+ ]
+ },
+ {
+ "id": 102303,
+ "node_id": 1023,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1022,
+ "node_direction": 0,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_83",
+ "text": "全体属性攻击百分比提升"
+ },
+ "comicon": "js_icon_sx5",
+ "lv": 2,
+ "cost_item": [],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "atkpro",
+ "n": 40
+ }
+ ]
+ },
+ {
+ "id": 102401,
+ "node_id": 1024,
+ "front": [
+ 102204
+ ],
+ "node_type": 1,
+ "pre_node": 1022,
+ "node_direction": 90,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_84",
+ "text": "全体属性防御百分比提升"
+ },
+ "comicon": "js_icon_sx9",
+ "lv": 0,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "defpro",
+ "n": 0
+ }
+ ]
+ },
+ {
+ "id": 102402,
+ "node_id": 1024,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1022,
+ "node_direction": 90,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_85",
+ "text": "全体属性防御百分比提升"
+ },
+ "comicon": "js_icon_sx9",
+ "lv": 1,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "defpro",
+ "n": 20
+ }
+ ]
+ },
+ {
+ "id": 102403,
+ "node_id": 1024,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1022,
+ "node_direction": 90,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_86",
+ "text": "全体属性防御百分比提升"
+ },
+ "comicon": "js_icon_sx9",
+ "lv": 2,
+ "cost_item": [],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "defpro",
+ "n": 40
+ }
+ ]
+ },
+ {
+ "id": 102501,
+ "node_id": 1025,
+ "front": [
+ 102204
+ ],
+ "node_type": 1,
+ "pre_node": 1022,
+ "node_direction": 270,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_87",
+ "text": "全体属性生命百分比提升"
+ },
+ "comicon": "js_icon_sx10",
+ "lv": 0,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "hppro",
+ "n": 0
+ }
+ ]
+ },
+ {
+ "id": 102502,
+ "node_id": 1025,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1022,
+ "node_direction": 270,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_88",
+ "text": "全体属性生命百分比提升"
+ },
+ "comicon": "js_icon_sx10",
+ "lv": 1,
+ "cost_item": [
+ {
+ "a": "attr",
+ "t": "starcoin",
+ "n": 1
+ }
+ ],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "hppro",
+ "n": 20
+ }
+ ]
+ },
+ {
+ "id": 102503,
+ "node_id": 1025,
+ "front": [
+ 0
+ ],
+ "node_type": 1,
+ "pre_node": 1022,
+ "node_direction": 270,
+ "node_long": 120,
+ "name": {
+ "key": "horoscope_horoscope_name_89",
+ "text": "全体属性生命百分比提升"
+ },
+ "comicon": "js_icon_sx10",
+ "lv": 2,
+ "cost_item": [],
+ "AddGroup": 1,
+ "AddClassify": 0,
+ "upgrade": [
+ {
+ "a": "hppro",
+ "n": 40
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/modules/island/api_battle.go b/modules/island/api_battle.go
index 8df5ac3e6..9f0aeb818 100644
--- a/modules/island/api_battle.go
+++ b/modules/island/api_battle.go
@@ -26,15 +26,15 @@ func (this *apiComp) BattleCheck(session comm.IUserSession, req *pb.IsLandBattle
// /获取系统公告
func (this *apiComp) Battle(session comm.IUserSession, req *pb.IsLandBattleReq) (errdata *pb.ErrorData) {
var (
- conf *cfg.GameHeroupstoryChapterData
- bconf *cfg.GameHeroupstoryBattleData
+ conf *cfg.GamePuggsyEventData
+ bconf *cfg.GamePuggsyFightData
record *pb.DBBattleRecord
err error
)
if errdata = this.BattleCheck(session, req); errdata != nil {
return
}
- if conf, err = this.module.configure.getGameHeroupstoryChapter(req.Level); err != nil {
+ if conf, err = this.module.configure.getGamePuggsyEventData(req.Level); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_DBError,
Title: pb.ErrorCode_DBError.ToString(),
@@ -42,7 +42,7 @@ func (this *apiComp) Battle(session comm.IUserSession, req *pb.IsLandBattleReq)
}
return
}
- if bconf, err = this.module.configure.getGameHeroupstoryBattle(conf.Battle); err != nil {
+ if bconf, err = this.module.configure.getGamePuggsyFightData(conf.Value); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_DBError,
Title: pb.ErrorCode_DBError.ToString(),
@@ -54,7 +54,7 @@ func (this *apiComp) Battle(session comm.IUserSession, req *pb.IsLandBattleReq)
Rulesid: bconf.BattleReadyID,
Ptype: pb.PlayType_rtask,
Format: req.Battle,
- Mformat: bconf.FormatList,
+ Mformat: bconf.Boss,
}); err != nil {
return
}
diff --git a/modules/island/api_complete.go b/modules/island/api_complete.go
index 7ab386d0a..a5c5b1d52 100644
--- a/modules/island/api_complete.go
+++ b/modules/island/api_complete.go
@@ -4,7 +4,7 @@ import (
"fmt"
"go_dreamfactory/comm"
"go_dreamfactory/pb"
- "go_dreamfactory/sys/configure"
+ cfg "go_dreamfactory/sys/configure/structs"
)
// 参数校验
@@ -16,19 +16,19 @@ func (this *apiComp) CompleteCheck(session comm.IUserSession, req *pb.IsLandComp
// /获取自己的排行榜信息
func (this *apiComp) Complete(session comm.IUserSession, req *pb.IsLandCompleteReq) (errdata *pb.ErrorData) {
var (
- info *pb.DBIsland
- item *pb.DBIslandItem
- award []*pb.UserAtno
- ok bool
- iswin bool
- isfish bool
- err error
+ info *pb.DBIsland
+ conf *cfg.GamePuggsyEventData
+ sconf *cfg.GamePuggsyScoreData
+ item *pb.DBIslandItem
+ award []*pb.UserAtno
+ ok bool
+ err error
)
if errdata = this.CompleteCheck(session, req); errdata != nil {
return
}
- if conf, err = this.module.configure.getGameHeroupstoryChapter(req.Level); err != nil {
+ if conf, err = this.module.configure.getGamePuggsyEventData(req.Level); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_DBError,
Title: pb.ErrorCode_DBError.ToString(),
@@ -46,110 +46,50 @@ func (this *apiComp) Complete(session comm.IUserSession, req *pb.IsLandCompleteR
return
}
- if item, ok = info.Item[conf.Hero]; !ok {
+ if item, ok = info.Islands[conf.NodeId]; !ok {
+ item = &pb.DBIslandItem{
+ Id: conf.NodeId,
+ Level: make(map[int32]int32),
+ }
+ info.Islands[conf.NodeId] = item
+ return
+ }
+
+ if _, ok = item.Level[req.Level]; ok {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ReqParameterError,
Title: pb.ErrorCode_ReqParameterError.ToString(),
- Message: fmt.Sprintf("no activation hero:%d", conf.Hero),
- }
- return
- }
- //前置判断
- if conf.Onlevel != 0 && item.Level[conf.Onlevel] == 0 {
- errdata = &pb.ErrorData{
- Code: pb.ErrorCode_ReqParameterError,
- Title: pb.ErrorCode_ReqParameterError.ToString(),
- Message: fmt.Sprintf("%d onlevel no Complete", req.Level),
+ Message: fmt.Sprintf("level:%d done!", req.Level),
}
return
}
- //前置判断
- if len(conf.Onlevelstory) == 2 && item.Level[conf.Onlevelstory[0]] == conf.Onlevelstory[1] {
- errdata = &pb.ErrorData{
- Code: pb.ErrorCode_ReqParameterError,
- Title: pb.ErrorCode_ReqParameterError.ToString(),
- Message: fmt.Sprintf("%d onlevel no Complete", req.Level),
- }
- return
- }
-
- if conf.Leveltype != 1 && item.Level[req.Level] != 0 {
- errdata = &pb.ErrorData{
- Code: pb.ErrorCode_ReqParameterError,
- Title: pb.ErrorCode_ReqParameterError.ToString(),
- Message: fmt.Sprintf("%d received", req.Level),
- }
- return
- }
-
- if item.Level[req.Level] != 0 {
- isfish = true
- }
-
- if chapterconf, err = this.module.configure.getGameHeroupstoryChaptertxt(conf.Chapter); err != nil {
- errdata = &pb.ErrorData{
- Code: pb.ErrorCode_ConfigNoFound,
- Title: pb.ErrorCode_ConfigNoFound.ToString(),
- Message: err.Error(),
- }
- return
- }
-
- if conf.Leveltype == 1 { //剧情关卡
- item.Level[req.Level] = req.Story
- } else if conf.Leveltype == 2 { //战斗管卡
- if errdata, iswin = this.module.battle.CheckBattleReport(session, req.Report); errdata != nil {
+ if conf.Type == 2 { //战斗管卡
+ if errdata, _ = this.module.battle.CheckBattleReport(session, req.Report); errdata != nil {
return
}
- if !iswin {
+ if sconf, err = this.module.configure.getGamePuggsyScoreData(req.Report.Harm); err != nil {
errdata = &pb.ErrorData{
- Code: pb.ErrorCode_ReqParameterError,
- Title: pb.ErrorCode_ReqParameterError.ToString(),
- Message: "battle no win!",
+ Code: pb.ErrorCode_ConfigNoFound,
+ Title: pb.ErrorCode_ConfigNoFound.ToString(),
+ Message: err.Error(),
}
return
}
item.Level[req.Level] = 1
- } else if conf.Leveltype == 4 {
- item.Level[req.Level] = 1
- item.Chapter[conf.Chapter] = configure.Now().Unix()
- } else if conf.Leveltype == 5 {
- if req.Report != nil {
- if errdata, iswin = this.module.battle.CheckBattleReport(session, req.Report); errdata != nil {
- return
- }
- if !iswin {
- errdata = &pb.ErrorData{
- Code: pb.ErrorCode_ReqParameterError,
- Title: pb.ErrorCode_ReqParameterError.ToString(),
- Message: "battle no win!",
- }
- return
- }
+ if errdata, award = this.module.DispenseAtno(session, sconf.Reward, true); errdata != nil {
+ return
}
- item.Level[req.Level] = 1
} else {
item.Level[req.Level] = 1
- }
-
- if !isfish {
- if errdata = this.module.DispenseRes(session, conf.Reward, true); errdata != nil {
+ if errdata, award = this.module.DispenseAtno(session, conf.Reward, true); errdata != nil {
return
}
- award = make([]*pb.UserAssets, 0)
- for _, v := range conf.Reward {
- award = append(award, &pb.UserAssets{
- A: v.A,
- T: v.T,
- N: v.N,
- })
- }
}
this.module.model.Change(session.GetUserId(), map[string]interface{}{
"islands": info.Islands,
})
- session.SendMsg(string(this.module.GetType()), "complete", &pb.StorylineCompleteResp{Level: req.Level, Story: req.Story, Award: award})
+ session.SendMsg(string(this.module.GetType()), "complete", &pb.IsLandCompleteResp{Level: req.Level, Award: award})
return
}
diff --git a/modules/island/configure.go b/modules/island/configure.go
index fc6bfc042..d5914c632 100644
--- a/modules/island/configure.go
+++ b/modules/island/configure.go
@@ -2,6 +2,7 @@ package island
import (
"fmt"
+ "go_dreamfactory/comm"
"go_dreamfactory/modules"
cfg "go_dreamfactory/sys/configure/structs"
@@ -9,11 +10,10 @@ import (
)
const (
- game_item = "game_item.json"
- game_potions = "game_potions.json"
-
- // game_propsgroup = "game_propsgroup.json"
- // game_propsgrouplist = "game_propsgrouplist.json"
+ game_puggsyevent = "game_puggsyevent.json"
+ game_puggsyskill = "game_puggsyskill.json"
+ game_puggsyfight = "game_puggsyfight.json"
+ game_puggsyscore = "game_puggsyscore.json"
)
// /背包配置管理组件
@@ -26,22 +26,24 @@ type ConfigureComp struct {
func (this *ConfigureComp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
this.MCompConfigure.Init(service, module, comp, options)
this.module = module.(*IsLand)
- err = this.LoadConfigure(game_item, cfg.NewGameItem)
- err = this.LoadConfigure(game_potions, cfg.NewGamePotions)
+ err = this.LoadConfigure(game_puggsyevent, cfg.NewGamePuggsyEvent)
+ err = this.LoadConfigure(game_puggsyskill, cfg.NewGamePuggsySkill)
+ err = this.LoadConfigure(game_puggsyfight, cfg.NewGamePuggsyFight)
+ err = this.LoadConfigure(game_puggsyscore, cfg.NewGamePuggsyScore)
return
}
-// 读取物品配置
-func (this *ConfigureComp) GetMaterialConfigure(id int32) (configure *cfg.GamePotionsData, err error) {
+//关卡
+func (this *ConfigureComp) getGamePuggsyEventData(id int32) (configure *cfg.GamePuggsyEventData, err error) {
var (
v interface{}
ok bool
)
- if v, err = this.GetConfigure(game_potions); err != nil {
+ if v, err = this.GetConfigure(game_puggsyevent); err != nil {
this.module.Errorf("err:%v", err)
return
} else {
- if configure, ok = v.(*cfg.GamePotions).GetDataMap()[id]; !ok {
+ if configure, ok = v.(*cfg.GamePuggsyEvent).GetDataMap()[id]; !ok {
err = fmt.Errorf("no found Material:%d configure", id)
this.module.Errorf("err:%v", err)
return
@@ -49,3 +51,62 @@ func (this *ConfigureComp) GetMaterialConfigure(id int32) (configure *cfg.GamePo
}
return
}
+
+//战斗表
+func (this *ConfigureComp) getGamePuggsyFightData(id int32) (configure *cfg.GamePuggsyFightData, err error) {
+ var (
+ v interface{}
+ ok bool
+ )
+ if v, err = this.GetConfigure(game_puggsyfight); err != nil {
+ this.module.Errorf("err:%v", err)
+ return
+ } else {
+ if configure, ok = v.(*cfg.GamePuggsyFight).GetDataMap()[id]; !ok {
+ err = fmt.Errorf("no found Material:%d configure", id)
+ this.module.Errorf("err:%v", err)
+ return
+ }
+ }
+ return
+}
+
+//技能节点
+func (this *ConfigureComp) getGamePuggsySkillData(id int32) (configure *cfg.GamePuggsySkillData, err error) {
+ var (
+ v interface{}
+ ok bool
+ )
+ if v, err = this.GetConfigure(game_puggsyskill); err != nil {
+ this.module.Errorf("err:%v", err)
+ return
+ } else {
+ if configure, ok = v.(*cfg.GamePuggsySkill).GetDataMap()[id]; !ok {
+ err = fmt.Errorf("no found Material:%d configure", id)
+ this.module.Errorf("err:%v", err)
+ return
+ }
+ }
+ return
+}
+
+// 获取伤害对应的评分组
+func (this *ConfigureComp) getGamePuggsyScoreData(harm int32) (results *cfg.GamePuggsyScoreData, err error) {
+ var (
+ v interface{}
+ )
+
+ if v, err = this.GetConfigure(game_puggsyscore); err != nil {
+ return
+ } else {
+ for _, v := range v.(*cfg.GamePuggsyScore).GetDataList() {
+ if harm >= v.RankLow && (harm <= v.RankUp || v.RankUp == -1) {
+ results = v
+ return
+ }
+ }
+ err = comm.NewNotFoundConfErr(string(this.module.GetType()), game_puggsyscore, fmt.Sprintf(" harm%d", harm))
+ this.module.Errorf("err:%v", err)
+ }
+ return
+}
diff --git a/sys/configure/structs/Game.PuggsyEvent.go b/sys/configure/structs/Game.PuggsyEvent.go
new file mode 100644
index 000000000..1acad76f3
--- /dev/null
+++ b/sys/configure/structs/Game.PuggsyEvent.go
@@ -0,0 +1,42 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+package cfg
+
+type GamePuggsyEvent struct {
+ _dataMap map[int32]*GamePuggsyEventData
+ _dataList []*GamePuggsyEventData
+}
+
+func NewGamePuggsyEvent(_buf []map[string]interface{}) (*GamePuggsyEvent, error) {
+ _dataList := make([]*GamePuggsyEventData, 0, len(_buf))
+ dataMap := make(map[int32]*GamePuggsyEventData)
+ for _, _ele_ := range _buf {
+ if _v, err2 := DeserializeGamePuggsyEventData(_ele_); err2 != nil {
+ return nil, err2
+ } else {
+ _dataList = append(_dataList, _v)
+ dataMap[_v.Event] = _v
+ }
+ }
+ return &GamePuggsyEvent{_dataList:_dataList, _dataMap:dataMap}, nil
+}
+
+func (table *GamePuggsyEvent) GetDataMap() map[int32]*GamePuggsyEventData {
+ return table._dataMap
+}
+
+func (table *GamePuggsyEvent) GetDataList() []*GamePuggsyEventData {
+ return table._dataList
+}
+
+func (table *GamePuggsyEvent) Get(key int32) *GamePuggsyEventData {
+ return table._dataMap[key]
+}
+
+
diff --git a/sys/configure/structs/Game.PuggsyEventData.go b/sys/configure/structs/Game.PuggsyEventData.go
new file mode 100644
index 000000000..25f609671
--- /dev/null
+++ b/sys/configure/structs/Game.PuggsyEventData.go
@@ -0,0 +1,56 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+package cfg
+
+import "errors"
+
+type GamePuggsyEventData struct {
+ Event int32
+ NodeId int32
+ Type int32
+ Value int32
+ Reward []*Gameatn
+}
+
+const TypeId_GamePuggsyEventData = 1772460253
+
+func (*GamePuggsyEventData) GetTypeId() int32 {
+ return 1772460253
+}
+
+func (_v *GamePuggsyEventData)Deserialize(_buf map[string]interface{}) (err error) {
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["event"].(float64); !_ok_ { err = errors.New("event error"); return }; _v.Event = int32(_tempNum_) }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["node_id"].(float64); !_ok_ { err = errors.New("node_id error"); return }; _v.NodeId = int32(_tempNum_) }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["type"].(float64); !_ok_ { err = errors.New("type error"); return }; _v.Type = int32(_tempNum_) }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["value"].(float64); !_ok_ { err = errors.New("value error"); return }; _v.Value = int32(_tempNum_) }
+ {
+ var _arr_ []interface{}
+ var _ok_ bool
+ if _arr_, _ok_ = _buf["reward"].([]interface{}); !_ok_ { err = errors.New("reward error"); return }
+
+ _v.Reward = make([]*Gameatn, 0, len(_arr_))
+
+ for _, _e_ := range _arr_ {
+ var _list_v_ *Gameatn
+ { var _ok_ bool; var _x_ map[string]interface{}; if _x_, _ok_ = _e_.(map[string]interface{}); !_ok_ { err = errors.New("_list_v_ error"); return }; if _list_v_, err = DeserializeGameatn(_x_); err != nil { return } }
+ _v.Reward = append(_v.Reward, _list_v_)
+ }
+ }
+
+ return
+}
+
+func DeserializeGamePuggsyEventData(_buf map[string]interface{}) (*GamePuggsyEventData, error) {
+ v := &GamePuggsyEventData{}
+ if err := v.Deserialize(_buf); err == nil {
+ return v, nil
+ } else {
+ return nil, err
+ }
+}
diff --git a/sys/configure/structs/Game.PuggsyFight.go b/sys/configure/structs/Game.PuggsyFight.go
new file mode 100644
index 000000000..937ec9508
--- /dev/null
+++ b/sys/configure/structs/Game.PuggsyFight.go
@@ -0,0 +1,42 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+package cfg
+
+type GamePuggsyFight struct {
+ _dataMap map[int32]*GamePuggsyFightData
+ _dataList []*GamePuggsyFightData
+}
+
+func NewGamePuggsyFight(_buf []map[string]interface{}) (*GamePuggsyFight, error) {
+ _dataList := make([]*GamePuggsyFightData, 0, len(_buf))
+ dataMap := make(map[int32]*GamePuggsyFightData)
+ for _, _ele_ := range _buf {
+ if _v, err2 := DeserializeGamePuggsyFightData(_ele_); err2 != nil {
+ return nil, err2
+ } else {
+ _dataList = append(_dataList, _v)
+ dataMap[_v.BossId] = _v
+ }
+ }
+ return &GamePuggsyFight{_dataList:_dataList, _dataMap:dataMap}, nil
+}
+
+func (table *GamePuggsyFight) GetDataMap() map[int32]*GamePuggsyFightData {
+ return table._dataMap
+}
+
+func (table *GamePuggsyFight) GetDataList() []*GamePuggsyFightData {
+ return table._dataList
+}
+
+func (table *GamePuggsyFight) Get(key int32) *GamePuggsyFightData {
+ return table._dataMap[key]
+}
+
+
diff --git a/sys/configure/structs/Game.PuggsyFightData.go b/sys/configure/structs/Game.PuggsyFightData.go
new file mode 100644
index 000000000..8a136e3f1
--- /dev/null
+++ b/sys/configure/structs/Game.PuggsyFightData.go
@@ -0,0 +1,73 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+package cfg
+
+import "errors"
+
+type GamePuggsyFightData struct {
+ BossId int32
+ BossName string
+ BossText string
+ BattleReadyID int32
+ HeroId string
+ Skill []int32
+ Boss []int32
+}
+
+const TypeId_GamePuggsyFightData = 386540371
+
+func (*GamePuggsyFightData) GetTypeId() int32 {
+ return 386540371
+}
+
+func (_v *GamePuggsyFightData)Deserialize(_buf map[string]interface{}) (err error) {
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["boss_id"].(float64); !_ok_ { err = errors.New("boss_id error"); return }; _v.BossId = int32(_tempNum_) }
+ {var _ok_ bool; var __json_text__ map[string]interface{}; if __json_text__, _ok_ = _buf["boss_name"].(map[string]interface{}) ; !_ok_ { err = errors.New("_v.BossName error"); return }; { var _ok_ bool; if _, _ok_ = __json_text__["key"].(string); !_ok_ { err = errors.New("key error"); return } }; { var _ok_ bool; if _v.BossName, _ok_ = __json_text__["text"].(string); !_ok_ { err = errors.New("text error"); return } } }
+ {var _ok_ bool; var __json_text__ map[string]interface{}; if __json_text__, _ok_ = _buf["boss_text"].(map[string]interface{}) ; !_ok_ { err = errors.New("_v.BossText error"); return }; { var _ok_ bool; if _, _ok_ = __json_text__["key"].(string); !_ok_ { err = errors.New("key error"); return } }; { var _ok_ bool; if _v.BossText, _ok_ = __json_text__["text"].(string); !_ok_ { err = errors.New("text error"); return } } }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["BattleReadyID"].(float64); !_ok_ { err = errors.New("BattleReadyID error"); return }; _v.BattleReadyID = int32(_tempNum_) }
+ { var _ok_ bool; if _v.HeroId, _ok_ = _buf["heroId"].(string); !_ok_ { err = errors.New("heroId error"); return } }
+ {
+ var _arr_ []interface{}
+ var _ok_ bool
+ if _arr_, _ok_ = _buf["skill"].([]interface{}); !_ok_ { err = errors.New("skill error"); return }
+
+ _v.Skill = make([]int32, 0, len(_arr_))
+
+ for _, _e_ := range _arr_ {
+ var _list_v_ int32
+ { var _ok_ bool; var _x_ float64; if _x_, _ok_ = _e_.(float64); !_ok_ { err = errors.New("_list_v_ error"); return }; _list_v_ = int32(_x_) }
+ _v.Skill = append(_v.Skill, _list_v_)
+ }
+ }
+
+ {
+ var _arr_ []interface{}
+ var _ok_ bool
+ if _arr_, _ok_ = _buf["boss"].([]interface{}); !_ok_ { err = errors.New("boss error"); return }
+
+ _v.Boss = make([]int32, 0, len(_arr_))
+
+ for _, _e_ := range _arr_ {
+ var _list_v_ int32
+ { var _ok_ bool; var _x_ float64; if _x_, _ok_ = _e_.(float64); !_ok_ { err = errors.New("_list_v_ error"); return }; _list_v_ = int32(_x_) }
+ _v.Boss = append(_v.Boss, _list_v_)
+ }
+ }
+
+ return
+}
+
+func DeserializeGamePuggsyFightData(_buf map[string]interface{}) (*GamePuggsyFightData, error) {
+ v := &GamePuggsyFightData{}
+ if err := v.Deserialize(_buf); err == nil {
+ return v, nil
+ } else {
+ return nil, err
+ }
+}
diff --git a/sys/configure/structs/Game.PuggsyIsLand.go b/sys/configure/structs/Game.PuggsyIsLand.go
new file mode 100644
index 000000000..82f74c7a6
--- /dev/null
+++ b/sys/configure/structs/Game.PuggsyIsLand.go
@@ -0,0 +1,42 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+package cfg
+
+type GamePuggsyIsLand struct {
+ _dataMap map[int32]*GamePuggsyIsLandData
+ _dataList []*GamePuggsyIsLandData
+}
+
+func NewGamePuggsyIsLand(_buf []map[string]interface{}) (*GamePuggsyIsLand, error) {
+ _dataList := make([]*GamePuggsyIsLandData, 0, len(_buf))
+ dataMap := make(map[int32]*GamePuggsyIsLandData)
+ for _, _ele_ := range _buf {
+ if _v, err2 := DeserializeGamePuggsyIsLandData(_ele_); err2 != nil {
+ return nil, err2
+ } else {
+ _dataList = append(_dataList, _v)
+ dataMap[_v.NodeId] = _v
+ }
+ }
+ return &GamePuggsyIsLand{_dataList:_dataList, _dataMap:dataMap}, nil
+}
+
+func (table *GamePuggsyIsLand) GetDataMap() map[int32]*GamePuggsyIsLandData {
+ return table._dataMap
+}
+
+func (table *GamePuggsyIsLand) GetDataList() []*GamePuggsyIsLandData {
+ return table._dataList
+}
+
+func (table *GamePuggsyIsLand) Get(key int32) *GamePuggsyIsLandData {
+ return table._dataMap[key]
+}
+
+
diff --git a/sys/configure/structs/Game.PuggsyIsLandData.go b/sys/configure/structs/Game.PuggsyIsLandData.go
new file mode 100644
index 000000000..498a47672
--- /dev/null
+++ b/sys/configure/structs/Game.PuggsyIsLandData.go
@@ -0,0 +1,56 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+package cfg
+
+import "errors"
+
+type GamePuggsyIsLandData struct {
+ NodeId int32
+ PuggsyName string
+ Time []int32
+ Unlock string
+ Introduce string
+}
+
+const TypeId_GamePuggsyIsLandData = 36699942
+
+func (*GamePuggsyIsLandData) GetTypeId() int32 {
+ return 36699942
+}
+
+func (_v *GamePuggsyIsLandData)Deserialize(_buf map[string]interface{}) (err error) {
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["node_id"].(float64); !_ok_ { err = errors.New("node_id error"); return }; _v.NodeId = int32(_tempNum_) }
+ {var _ok_ bool; var __json_text__ map[string]interface{}; if __json_text__, _ok_ = _buf["puggsy_name"].(map[string]interface{}) ; !_ok_ { err = errors.New("_v.PuggsyName error"); return }; { var _ok_ bool; if _, _ok_ = __json_text__["key"].(string); !_ok_ { err = errors.New("key error"); return } }; { var _ok_ bool; if _v.PuggsyName, _ok_ = __json_text__["text"].(string); !_ok_ { err = errors.New("text error"); return } } }
+ {
+ var _arr_ []interface{}
+ var _ok_ bool
+ if _arr_, _ok_ = _buf["time"].([]interface{}); !_ok_ { err = errors.New("time error"); return }
+
+ _v.Time = make([]int32, 0, len(_arr_))
+
+ for _, _e_ := range _arr_ {
+ var _list_v_ int32
+ { var _ok_ bool; var _x_ float64; if _x_, _ok_ = _e_.(float64); !_ok_ { err = errors.New("_list_v_ error"); return }; _list_v_ = int32(_x_) }
+ _v.Time = append(_v.Time, _list_v_)
+ }
+ }
+
+ {var _ok_ bool; var __json_text__ map[string]interface{}; if __json_text__, _ok_ = _buf["unlock"].(map[string]interface{}) ; !_ok_ { err = errors.New("_v.Unlock error"); return }; { var _ok_ bool; if _, _ok_ = __json_text__["key"].(string); !_ok_ { err = errors.New("key error"); return } }; { var _ok_ bool; if _v.Unlock, _ok_ = __json_text__["text"].(string); !_ok_ { err = errors.New("text error"); return } } }
+ {var _ok_ bool; var __json_text__ map[string]interface{}; if __json_text__, _ok_ = _buf["introduce"].(map[string]interface{}) ; !_ok_ { err = errors.New("_v.Introduce error"); return }; { var _ok_ bool; if _, _ok_ = __json_text__["key"].(string); !_ok_ { err = errors.New("key error"); return } }; { var _ok_ bool; if _v.Introduce, _ok_ = __json_text__["text"].(string); !_ok_ { err = errors.New("text error"); return } } }
+ return
+}
+
+func DeserializeGamePuggsyIsLandData(_buf map[string]interface{}) (*GamePuggsyIsLandData, error) {
+ v := &GamePuggsyIsLandData{}
+ if err := v.Deserialize(_buf); err == nil {
+ return v, nil
+ } else {
+ return nil, err
+ }
+}
diff --git a/sys/configure/structs/Game.PuggsyScore.go b/sys/configure/structs/Game.PuggsyScore.go
new file mode 100644
index 000000000..4af45642d
--- /dev/null
+++ b/sys/configure/structs/Game.PuggsyScore.go
@@ -0,0 +1,42 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+package cfg
+
+type GamePuggsyScore struct {
+ _dataMap map[int32]*GamePuggsyScoreData
+ _dataList []*GamePuggsyScoreData
+}
+
+func NewGamePuggsyScore(_buf []map[string]interface{}) (*GamePuggsyScore, error) {
+ _dataList := make([]*GamePuggsyScoreData, 0, len(_buf))
+ dataMap := make(map[int32]*GamePuggsyScoreData)
+ for _, _ele_ := range _buf {
+ if _v, err2 := DeserializeGamePuggsyScoreData(_ele_); err2 != nil {
+ return nil, err2
+ } else {
+ _dataList = append(_dataList, _v)
+ dataMap[_v.Id] = _v
+ }
+ }
+ return &GamePuggsyScore{_dataList:_dataList, _dataMap:dataMap}, nil
+}
+
+func (table *GamePuggsyScore) GetDataMap() map[int32]*GamePuggsyScoreData {
+ return table._dataMap
+}
+
+func (table *GamePuggsyScore) GetDataList() []*GamePuggsyScoreData {
+ return table._dataList
+}
+
+func (table *GamePuggsyScore) Get(key int32) *GamePuggsyScoreData {
+ return table._dataMap[key]
+}
+
+
diff --git a/sys/configure/structs/Game.PuggsyScoreData.go b/sys/configure/structs/Game.PuggsyScoreData.go
new file mode 100644
index 000000000..e2cdffb0c
--- /dev/null
+++ b/sys/configure/structs/Game.PuggsyScoreData.go
@@ -0,0 +1,56 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+package cfg
+
+import "errors"
+
+type GamePuggsyScoreData struct {
+ Id int32
+ BossId int32
+ RankLow int32
+ RankUp int32
+ Reward []*Gameatn
+}
+
+const TypeId_GamePuggsyScoreData = -424957739
+
+func (*GamePuggsyScoreData) GetTypeId() int32 {
+ return -424957739
+}
+
+func (_v *GamePuggsyScoreData)Deserialize(_buf map[string]interface{}) (err error) {
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["id"].(float64); !_ok_ { err = errors.New("id error"); return }; _v.Id = int32(_tempNum_) }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["boss_id"].(float64); !_ok_ { err = errors.New("boss_id error"); return }; _v.BossId = int32(_tempNum_) }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["rank_low"].(float64); !_ok_ { err = errors.New("rank_low error"); return }; _v.RankLow = int32(_tempNum_) }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["rank_up"].(float64); !_ok_ { err = errors.New("rank_up error"); return }; _v.RankUp = int32(_tempNum_) }
+ {
+ var _arr_ []interface{}
+ var _ok_ bool
+ if _arr_, _ok_ = _buf["reward"].([]interface{}); !_ok_ { err = errors.New("reward error"); return }
+
+ _v.Reward = make([]*Gameatn, 0, len(_arr_))
+
+ for _, _e_ := range _arr_ {
+ var _list_v_ *Gameatn
+ { var _ok_ bool; var _x_ map[string]interface{}; if _x_, _ok_ = _e_.(map[string]interface{}); !_ok_ { err = errors.New("_list_v_ error"); return }; if _list_v_, err = DeserializeGameatn(_x_); err != nil { return } }
+ _v.Reward = append(_v.Reward, _list_v_)
+ }
+ }
+
+ return
+}
+
+func DeserializeGamePuggsyScoreData(_buf map[string]interface{}) (*GamePuggsyScoreData, error) {
+ v := &GamePuggsyScoreData{}
+ if err := v.Deserialize(_buf); err == nil {
+ return v, nil
+ } else {
+ return nil, err
+ }
+}
diff --git a/sys/configure/structs/Game.PuggsySkill.go b/sys/configure/structs/Game.PuggsySkill.go
new file mode 100644
index 000000000..c6bc24567
--- /dev/null
+++ b/sys/configure/structs/Game.PuggsySkill.go
@@ -0,0 +1,42 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+package cfg
+
+type GamePuggsySkill struct {
+ _dataMap map[int32]*GamePuggsySkillData
+ _dataList []*GamePuggsySkillData
+}
+
+func NewGamePuggsySkill(_buf []map[string]interface{}) (*GamePuggsySkill, error) {
+ _dataList := make([]*GamePuggsySkillData, 0, len(_buf))
+ dataMap := make(map[int32]*GamePuggsySkillData)
+ for _, _ele_ := range _buf {
+ if _v, err2 := DeserializeGamePuggsySkillData(_ele_); err2 != nil {
+ return nil, err2
+ } else {
+ _dataList = append(_dataList, _v)
+ dataMap[_v.Id] = _v
+ }
+ }
+ return &GamePuggsySkill{_dataList:_dataList, _dataMap:dataMap}, nil
+}
+
+func (table *GamePuggsySkill) GetDataMap() map[int32]*GamePuggsySkillData {
+ return table._dataMap
+}
+
+func (table *GamePuggsySkill) GetDataList() []*GamePuggsySkillData {
+ return table._dataList
+}
+
+func (table *GamePuggsySkill) Get(key int32) *GamePuggsySkillData {
+ return table._dataMap[key]
+}
+
+
diff --git a/sys/configure/structs/Game.PuggsySkillData.go b/sys/configure/structs/Game.PuggsySkillData.go
new file mode 100644
index 000000000..c953b4172
--- /dev/null
+++ b/sys/configure/structs/Game.PuggsySkillData.go
@@ -0,0 +1,100 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+package cfg
+
+import "errors"
+
+type GamePuggsySkillData struct {
+ Id int32
+ NodeId int32
+ Front []int32
+ NodeType int32
+ PreNode int32
+ NodeDirection int32
+ NodeLong int32
+ Name string
+ Comicon string
+ Lv int32
+ CostItem []*Gameatn
+ AddGroup int32
+ AddClassify int32
+ Upgrade []*Gameatr
+}
+
+const TypeId_GamePuggsySkillData = -562741996
+
+func (*GamePuggsySkillData) GetTypeId() int32 {
+ return -562741996
+}
+
+func (_v *GamePuggsySkillData)Deserialize(_buf map[string]interface{}) (err error) {
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["id"].(float64); !_ok_ { err = errors.New("id error"); return }; _v.Id = int32(_tempNum_) }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["node_id"].(float64); !_ok_ { err = errors.New("node_id error"); return }; _v.NodeId = int32(_tempNum_) }
+ {
+ var _arr_ []interface{}
+ var _ok_ bool
+ if _arr_, _ok_ = _buf["front"].([]interface{}); !_ok_ { err = errors.New("front error"); return }
+
+ _v.Front = make([]int32, 0, len(_arr_))
+
+ for _, _e_ := range _arr_ {
+ var _list_v_ int32
+ { var _ok_ bool; var _x_ float64; if _x_, _ok_ = _e_.(float64); !_ok_ { err = errors.New("_list_v_ error"); return }; _list_v_ = int32(_x_) }
+ _v.Front = append(_v.Front, _list_v_)
+ }
+ }
+
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["node_type"].(float64); !_ok_ { err = errors.New("node_type error"); return }; _v.NodeType = int32(_tempNum_) }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["pre_node"].(float64); !_ok_ { err = errors.New("pre_node error"); return }; _v.PreNode = int32(_tempNum_) }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["node_direction"].(float64); !_ok_ { err = errors.New("node_direction error"); return }; _v.NodeDirection = int32(_tempNum_) }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["node_long"].(float64); !_ok_ { err = errors.New("node_long error"); return }; _v.NodeLong = int32(_tempNum_) }
+ {var _ok_ bool; var __json_text__ map[string]interface{}; if __json_text__, _ok_ = _buf["name"].(map[string]interface{}) ; !_ok_ { err = errors.New("_v.Name error"); return }; { var _ok_ bool; if _, _ok_ = __json_text__["key"].(string); !_ok_ { err = errors.New("key error"); return } }; { var _ok_ bool; if _v.Name, _ok_ = __json_text__["text"].(string); !_ok_ { err = errors.New("text error"); return } } }
+ { var _ok_ bool; if _v.Comicon, _ok_ = _buf["comicon"].(string); !_ok_ { err = errors.New("comicon error"); return } }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["lv"].(float64); !_ok_ { err = errors.New("lv error"); return }; _v.Lv = int32(_tempNum_) }
+ {
+ var _arr_ []interface{}
+ var _ok_ bool
+ if _arr_, _ok_ = _buf["cost_item"].([]interface{}); !_ok_ { err = errors.New("cost_item error"); return }
+
+ _v.CostItem = make([]*Gameatn, 0, len(_arr_))
+
+ for _, _e_ := range _arr_ {
+ var _list_v_ *Gameatn
+ { var _ok_ bool; var _x_ map[string]interface{}; if _x_, _ok_ = _e_.(map[string]interface{}); !_ok_ { err = errors.New("_list_v_ error"); return }; if _list_v_, err = DeserializeGameatn(_x_); err != nil { return } }
+ _v.CostItem = append(_v.CostItem, _list_v_)
+ }
+ }
+
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["AddGroup"].(float64); !_ok_ { err = errors.New("AddGroup error"); return }; _v.AddGroup = int32(_tempNum_) }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["AddClassify"].(float64); !_ok_ { err = errors.New("AddClassify error"); return }; _v.AddClassify = int32(_tempNum_) }
+ {
+ var _arr_ []interface{}
+ var _ok_ bool
+ if _arr_, _ok_ = _buf["upgrade"].([]interface{}); !_ok_ { err = errors.New("upgrade error"); return }
+
+ _v.Upgrade = make([]*Gameatr, 0, len(_arr_))
+
+ for _, _e_ := range _arr_ {
+ var _list_v_ *Gameatr
+ { var _ok_ bool; var _x_ map[string]interface{}; if _x_, _ok_ = _e_.(map[string]interface{}); !_ok_ { err = errors.New("_list_v_ error"); return }; if _list_v_, err = DeserializeGameatr(_x_); err != nil { return } }
+ _v.Upgrade = append(_v.Upgrade, _list_v_)
+ }
+ }
+
+ return
+}
+
+func DeserializeGamePuggsySkillData(_buf map[string]interface{}) (*GamePuggsySkillData, error) {
+ v := &GamePuggsySkillData{}
+ if err := v.Deserialize(_buf); err == nil {
+ return v, nil
+ } else {
+ return nil, err
+ }
+}
diff --git a/sys/configure/structs/Tables.go b/sys/configure/structs/Tables.go
index 3189299f9..b2d206427 100644
--- a/sys/configure/structs/Tables.go
+++ b/sys/configure/structs/Tables.go
@@ -283,6 +283,11 @@ type Tables struct {
RepeatAll *GameRepeatAll
TDMonster *GameTDMonster
TDMonsterAppear *GameTDMonsterAppear
+ PuggsyIsLand *GamePuggsyIsLand
+ PuggsyEvent *GamePuggsyEvent
+ PuggsyFight *GamePuggsyFight
+ PuggsyScore *GamePuggsyScore
+ PuggsySkill *GamePuggsySkill
}
func NewTables(loader JsonLoader) (*Tables, error) {
@@ -1922,5 +1927,35 @@ func NewTables(loader JsonLoader) (*Tables, error) {
if tables.TDMonsterAppear, err = NewGameTDMonsterAppear(buf) ; err != nil {
return nil, err
}
+ if buf, err = loader("game_puggsyisland") ; err != nil {
+ return nil, err
+ }
+ if tables.PuggsyIsLand, err = NewGamePuggsyIsLand(buf) ; err != nil {
+ return nil, err
+ }
+ if buf, err = loader("game_puggsyevent") ; err != nil {
+ return nil, err
+ }
+ if tables.PuggsyEvent, err = NewGamePuggsyEvent(buf) ; err != nil {
+ return nil, err
+ }
+ if buf, err = loader("game_puggsyfight") ; err != nil {
+ return nil, err
+ }
+ if tables.PuggsyFight, err = NewGamePuggsyFight(buf) ; err != nil {
+ return nil, err
+ }
+ if buf, err = loader("game_puggsyscore") ; err != nil {
+ return nil, err
+ }
+ if tables.PuggsyScore, err = NewGamePuggsyScore(buf) ; err != nil {
+ return nil, err
+ }
+ if buf, err = loader("game_puggsyskill") ; err != nil {
+ return nil, err
+ }
+ if tables.PuggsySkill, err = NewGamePuggsySkill(buf) ; err != nil {
+ return nil, err
+ }
return tables, nil
}