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_puggsypasscheck.json b/bin/json/game_puggsypasscheck.json
new file mode 100644
index 000000000..fcd36683c
--- /dev/null
+++ b/bin/json/game_puggsypasscheck.json
@@ -0,0 +1,212 @@
+[
+ {
+ "id": 10001,
+ "pay_id": "passcheck_1",
+ "parameter": 5,
+ "unlock_text": {
+ "key": "passcheck_passcheck_unlock_text_10001",
+ "text": "{0}个地格"
+ },
+ "free_reward": {
+ "a": "attr",
+ "t": "diamond",
+ "n": 30
+ },
+ "pay_reward": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 300
+ }
+ ]
+ },
+ {
+ "id": 10002,
+ "pay_id": "passcheck_1",
+ "parameter": 10,
+ "unlock_text": {
+ "key": "passcheck_passcheck_unlock_text_10002",
+ "text": "{0}个地格"
+ },
+ "free_reward": {
+ "a": "attr",
+ "t": "diamond",
+ "n": 30
+ },
+ "pay_reward": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 300
+ }
+ ]
+ },
+ {
+ "id": 10003,
+ "pay_id": "passcheck_1",
+ "parameter": 15,
+ "unlock_text": {
+ "key": "passcheck_passcheck_unlock_text_10003",
+ "text": "{0}个地格"
+ },
+ "free_reward": {
+ "a": "attr",
+ "t": "diamond",
+ "n": 30
+ },
+ "pay_reward": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 300
+ }
+ ]
+ },
+ {
+ "id": 10004,
+ "pay_id": "passcheck_1",
+ "parameter": 20,
+ "unlock_text": {
+ "key": "passcheck_passcheck_unlock_text_10004",
+ "text": "{0}个地格"
+ },
+ "free_reward": {
+ "a": "attr",
+ "t": "diamond",
+ "n": 30
+ },
+ "pay_reward": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 300
+ }
+ ]
+ },
+ {
+ "id": 10005,
+ "pay_id": "passcheck_1",
+ "parameter": 25,
+ "unlock_text": {
+ "key": "passcheck_passcheck_unlock_text_10005",
+ "text": "{0}个地格"
+ },
+ "free_reward": {
+ "a": "attr",
+ "t": "diamond",
+ "n": 30
+ },
+ "pay_reward": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 300
+ }
+ ]
+ },
+ {
+ "id": 10006,
+ "pay_id": "passcheck_1",
+ "parameter": 30,
+ "unlock_text": {
+ "key": "passcheck_passcheck_unlock_text_10006",
+ "text": "{0}个地格"
+ },
+ "free_reward": {
+ "a": "attr",
+ "t": "diamond",
+ "n": 30
+ },
+ "pay_reward": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 300
+ }
+ ]
+ },
+ {
+ "id": 10007,
+ "pay_id": "passcheck_1",
+ "parameter": 35,
+ "unlock_text": {
+ "key": "passcheck_passcheck_unlock_text_10007",
+ "text": "{0}个地格"
+ },
+ "free_reward": {
+ "a": "attr",
+ "t": "diamond",
+ "n": 30
+ },
+ "pay_reward": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 300
+ }
+ ]
+ },
+ {
+ "id": 10008,
+ "pay_id": "passcheck_1",
+ "parameter": 40,
+ "unlock_text": {
+ "key": "passcheck_passcheck_unlock_text_10008",
+ "text": "{0}个地格"
+ },
+ "free_reward": {
+ "a": "attr",
+ "t": "diamond",
+ "n": 30
+ },
+ "pay_reward": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 300
+ }
+ ]
+ },
+ {
+ "id": 10009,
+ "pay_id": "passcheck_1",
+ "parameter": 45,
+ "unlock_text": {
+ "key": "passcheck_passcheck_unlock_text_10009",
+ "text": "{0}个地格"
+ },
+ "free_reward": {
+ "a": "attr",
+ "t": "diamond",
+ "n": 30
+ },
+ "pay_reward": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 300
+ }
+ ]
+ },
+ {
+ "id": 10010,
+ "pay_id": "passcheck_1",
+ "parameter": 50,
+ "unlock_text": {
+ "key": "passcheck_passcheck_unlock_text_10010",
+ "text": "{0}个地格"
+ },
+ "free_reward": {
+ "a": "attr",
+ "t": "diamond",
+ "n": 30
+ },
+ "pay_reward": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 300
+ }
+ ]
+ }
+]
\ 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/api_receive.go b/modules/island/api_receive.go
new file mode 100644
index 000000000..92e857443
--- /dev/null
+++ b/modules/island/api_receive.go
@@ -0,0 +1,72 @@
+package island
+
+import (
+ "go_dreamfactory/comm"
+ "go_dreamfactory/pb"
+ cfg "go_dreamfactory/sys/configure/structs"
+)
+
+// 参数校验
+func (this *apiComp) ReceiveCheck(session comm.IUserSession, req *pb.IsLandReceiveReq) (errdata *pb.ErrorData) {
+
+ return
+}
+
+// /获取系统公告
+func (this *apiComp) Receive(session comm.IUserSession, req *pb.IsLandReceiveReq) (errdata *pb.ErrorData) {
+ var (
+ info *pb.DBIsland
+ warorder *pb.Warorder
+ confs []*cfg.GamePuggsyPasscheckData
+ awards []*cfg.Gameatn
+ award []*pb.UserAtno
+ err error
+ )
+ if errdata = this.ReceiveCheck(session, req); errdata != nil {
+ return
+ }
+ if info, err = this.module.model.getmodel(session.GetUserId()); err != nil {
+ errdata = &pb.ErrorData{
+ Code: pb.ErrorCode_DBError,
+ Title: pb.ErrorCode_DBError.ToString(),
+ Message: err.Error(),
+ }
+ return
+ }
+ if confs, err = this.module.configure.getGamePuggsyPasscheckData(); err != nil {
+ errdata = &pb.ErrorData{
+ Code: pb.ErrorCode_ConfigNoFound,
+ Title: pb.ErrorCode_ConfigNoFound.ToString(),
+ Message: err.Error(),
+ }
+ return
+ }
+
+ awards = make([]*cfg.Gameatn, 0)
+ for _, v := range confs {
+ if v.Parameter <= int32(len(info.Nodes)) {
+ if warorder.Freeprogress < v.Parameter {
+ awards = append(awards, v.FreeReward)
+ }
+ if warorder.Vip {
+ if warorder.Payprogress < v.Parameter {
+ awards = append(awards, v.PayReward...)
+ }
+ }
+ }
+ }
+ warorder.Freeprogress = int32(len(info.Nodes))
+ if warorder.Vip {
+ warorder.Payprogress = int32(len(info.Nodes))
+ }
+
+ if errdata, award = this.module.DispenseAtno(session, awards, true); errdata != nil {
+ return
+ }
+ this.module.model.Change(session.GetUserId(), map[string]interface{}{
+ "freeprogress": info.Freeprogress,
+ "payprogress": info.Payprogress,
+ })
+ session.SendMsg(string(this.module.GetType()), "receive", &pb.IsLandReceiveResp{Info: info, Award: award})
+ return
+}
diff --git a/modules/island/api_upgrade.go b/modules/island/api_upgrade.go
new file mode 100644
index 000000000..e2a9a73bc
--- /dev/null
+++ b/modules/island/api_upgrade.go
@@ -0,0 +1,60 @@
+package island
+
+import (
+ "fmt"
+ "go_dreamfactory/comm"
+ "go_dreamfactory/pb"
+ cfg "go_dreamfactory/sys/configure/structs"
+)
+
+// 参数校验
+func (this *apiComp) UpgradeCheck(session comm.IUserSession, req *pb.IsLandUpgradeReq) (errdata *pb.ErrorData) {
+
+ return
+}
+
+// /获取自己的排行榜信息
+func (this *apiComp) Upgrade(session comm.IUserSession, req *pb.IsLandUpgradeReq) (errdata *pb.ErrorData) {
+ var (
+ info *pb.DBIsland
+ conf *cfg.GamePuggsySkillData
+ ok bool
+ err error
+ )
+ if errdata = this.UpgradeCheck(session, req); errdata != nil {
+ return
+ }
+ if info, err = this.module.model.getmodel(session.GetUserId()); err != nil {
+ errdata = &pb.ErrorData{
+ Code: pb.ErrorCode_DBError,
+ Title: pb.ErrorCode_DBError.ToString(),
+ Message: err.Error(),
+ }
+ return
+ }
+ if conf, err = this.module.configure.getGamePuggsySkillData(req.Nid); err != nil {
+ errdata = &pb.ErrorData{
+ Code: pb.ErrorCode_ConfigNoFound,
+ Title: pb.ErrorCode_ConfigNoFound.ToString(),
+ Message: err.Error(),
+ }
+ return
+ }
+ if _, ok = info.Nodes[conf.Id]; ok {
+ errdata = &pb.ErrorData{
+ Code: pb.ErrorCode_ReqParameterError,
+ Title: pb.ErrorCode_ReqParameterError.ToString(),
+ Message: fmt.Sprintf("%d Unlocked!", conf.Id),
+ }
+ return
+ }
+ if errdata = this.module.ConsumeRes(session, conf.CostItem, true); errdata != nil {
+ return
+ }
+ info.Nodes[conf.Id] = 1
+ this.module.model.Change(session.GetUserId(), map[string]interface{}{
+ "nodes": info.Nodes,
+ })
+ session.SendMsg(string(this.module.GetType()), "upgrade", &pb.IsLandUpgradeReq{Nid: conf.NodeId})
+ return
+}
diff --git a/modules/island/configure.go b/modules/island/configure.go
index fc6bfc042..3696f2d08 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,11 @@ 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"
+ game_puggsypasscheck = "game_puggsypasscheck.json"
)
// /背包配置管理组件
@@ -26,22 +27,25 @@ 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)
+ err = this.LoadConfigure(game_puggsypasscheck, cfg.NewGamePuggsyPasscheck)
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 +53,75 @@ 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
+}
+
+// 获取伤害对应的评分组
+func (this *ConfigureComp) getGamePuggsyPasscheckData() (results []*cfg.GamePuggsyPasscheckData, err error) {
+ var (
+ v interface{}
+ )
+ if v, err = this.GetConfigure(game_puggsyscore); err != nil {
+ return
+ } else {
+ results = v.(*cfg.GamePuggsyPasscheck).GetDataList()
+ }
+ return
+}
diff --git a/modules/island/model.go b/modules/island/model.go
index 1a1897db6..70d23988e 100644
--- a/modules/island/model.go
+++ b/modules/island/model.go
@@ -38,6 +38,7 @@ func (this *modelComp) getmodel(uid string) (result *pb.DBIsland, err error) {
Id: primitive.NewObjectID().Hex(),
Uid: uid,
Islands: make(map[int32]*pb.DBIslandItem),
+ Nodes: make(map[int32]int32),
}
if err = this.Add(uid, result); err != nil {
this.module.Errorln(err)
diff --git a/modules/island/module.go b/modules/island/module.go
index cba5fc0f8..abf3f2938 100644
--- a/modules/island/module.go
+++ b/modules/island/module.go
@@ -28,7 +28,7 @@ type IsLand struct {
}
func (this *IsLand) GetType() core.M_Modules {
- return comm.ModuleGameInvite
+ return comm.ModuleIsLand
}
func (this *IsLand) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) {
diff --git a/pb/island_db.pb.go b/pb/island_db.pb.go
index d7e733240..140825a2a 100644
--- a/pb/island_db.pb.go
+++ b/pb/island_db.pb.go
@@ -25,9 +25,13 @@ type DBIsland struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id" bson:"_id"`
- Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid"`
- Islands map[int32]*DBIslandItem `protobuf:"bytes,4,rep,name=islands,proto3" json:"islands" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` //岛屿
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id" bson:"_id"`
+ Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid"`
+ Islands map[int32]*DBIslandItem `protobuf:"bytes,4,rep,name=islands,proto3" json:"islands" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` //岛屿
+ Nodes map[int32]int32 `protobuf:"bytes,5,rep,name=nodes,proto3" json:"nodes" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` //养成节点
+ Freeprogress int32 `protobuf:"varint,6,opt,name=freeprogress,proto3" json:"freeprogress"` //已领取天数
+ Payprogress int32 `protobuf:"varint,7,opt,name=payprogress,proto3" json:"payprogress"`
+ Vip bool `protobuf:"varint,8,opt,name=vip,proto3" json:"vip"`
}
func (x *DBIsland) Reset() {
@@ -83,6 +87,34 @@ func (x *DBIsland) GetIslands() map[int32]*DBIslandItem {
return nil
}
+func (x *DBIsland) GetNodes() map[int32]int32 {
+ if x != nil {
+ return x.Nodes
+ }
+ return nil
+}
+
+func (x *DBIsland) GetFreeprogress() int32 {
+ if x != nil {
+ return x.Freeprogress
+ }
+ return 0
+}
+
+func (x *DBIsland) GetPayprogress() int32 {
+ if x != nil {
+ return x.Payprogress
+ }
+ return 0
+}
+
+func (x *DBIsland) GetVip() bool {
+ if x != nil {
+ return x.Vip
+ }
+ return false
+}
+
//海岛地图
type DBIslandItem struct {
state protoimpl.MessageState
@@ -143,27 +175,39 @@ var File_island_island_db_proto protoreflect.FileDescriptor
var file_island_island_db_proto_rawDesc = []byte{
0x0a, 0x16, 0x69, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x2f, 0x69, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x5f,
- 0x64, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa9, 0x01, 0x0a, 0x08, 0x44, 0x42, 0x49,
+ 0x64, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe7, 0x02, 0x0a, 0x08, 0x44, 0x42, 0x49,
0x73, 0x6c, 0x61, 0x6e, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01,
0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x30, 0x0a, 0x07, 0x69, 0x73, 0x6c, 0x61, 0x6e,
0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x44, 0x42, 0x49, 0x73, 0x6c,
0x61, 0x6e, 0x64, 0x2e, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
- 0x52, 0x07, 0x69, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x1a, 0x49, 0x0a, 0x0c, 0x49, 0x73, 0x6c,
- 0x61, 0x6e, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x05, 0x76,
- 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x44, 0x42, 0x49,
- 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
- 0x3a, 0x02, 0x38, 0x01, 0x22, 0x88, 0x01, 0x0a, 0x0c, 0x44, 0x42, 0x49, 0x73, 0x6c, 0x61, 0x6e,
- 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2e, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02,
- 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x44, 0x42, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x49,
- 0x74, 0x65, 0x6d, 0x2e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05,
- 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x1a, 0x38, 0x0a, 0x0a, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x45, 0x6e,
- 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
- 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42,
- 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x52, 0x07, 0x69, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x6e, 0x6f, 0x64,
+ 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x44, 0x42, 0x49, 0x73, 0x6c,
+ 0x61, 0x6e, 0x64, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05,
+ 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x66, 0x72, 0x65, 0x65, 0x70, 0x72, 0x6f,
+ 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x66, 0x72, 0x65,
+ 0x65, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x61, 0x79,
+ 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b,
+ 0x70, 0x61, 0x79, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x76,
+ 0x69, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x76, 0x69, 0x70, 0x1a, 0x49, 0x0a,
+ 0x0c, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
+ 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
+ 0x23, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d,
+ 0x2e, 0x44, 0x42, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x38, 0x0a, 0x0a, 0x4e, 0x6f, 0x64, 0x65,
+ 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,
+ 0x38, 0x01, 0x22, 0x88, 0x01, 0x0a, 0x0c, 0x44, 0x42, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x49,
+ 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
+ 0x02, 0x69, 0x64, 0x12, 0x2e, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x44, 0x42, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x49, 0x74, 0x65,
+ 0x6d, 0x2e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x6c, 0x65,
+ 0x76, 0x65, 0x6c, 0x1a, 0x38, 0x0a, 0x0a, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x45, 0x6e, 0x74, 0x72,
+ 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03,
+ 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x06, 0x5a,
+ 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -178,22 +222,24 @@ func file_island_island_db_proto_rawDescGZIP() []byte {
return file_island_island_db_proto_rawDescData
}
-var file_island_island_db_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
+var file_island_island_db_proto_msgTypes = make([]protoimpl.MessageInfo, 5)
var file_island_island_db_proto_goTypes = []interface{}{
(*DBIsland)(nil), // 0: DBIsland
(*DBIslandItem)(nil), // 1: DBIslandItem
nil, // 2: DBIsland.IslandsEntry
- nil, // 3: DBIslandItem.LevelEntry
+ nil, // 3: DBIsland.NodesEntry
+ nil, // 4: DBIslandItem.LevelEntry
}
var file_island_island_db_proto_depIdxs = []int32{
2, // 0: DBIsland.islands:type_name -> DBIsland.IslandsEntry
- 3, // 1: DBIslandItem.level:type_name -> DBIslandItem.LevelEntry
- 1, // 2: DBIsland.IslandsEntry.value:type_name -> DBIslandItem
- 3, // [3:3] is the sub-list for method output_type
- 3, // [3:3] is the sub-list for method input_type
- 3, // [3:3] is the sub-list for extension type_name
- 3, // [3:3] is the sub-list for extension extendee
- 0, // [0:3] is the sub-list for field type_name
+ 3, // 1: DBIsland.nodes:type_name -> DBIsland.NodesEntry
+ 4, // 2: DBIslandItem.level:type_name -> DBIslandItem.LevelEntry
+ 1, // 3: DBIsland.IslandsEntry.value:type_name -> DBIslandItem
+ 4, // [4:4] is the sub-list for method output_type
+ 4, // [4:4] is the sub-list for method input_type
+ 4, // [4:4] is the sub-list for extension type_name
+ 4, // [4:4] is the sub-list for extension extendee
+ 0, // [0:4] is the sub-list for field type_name
}
func init() { file_island_island_db_proto_init() }
@@ -233,7 +279,7 @@ func file_island_island_db_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_island_island_db_proto_rawDesc,
NumEnums: 0,
- NumMessages: 4,
+ NumMessages: 5,
NumExtensions: 0,
NumServices: 0,
},
diff --git a/pb/island_msg.pb.go b/pb/island_msg.pb.go
index e17d5c1e2..4466eee06 100644
--- a/pb/island_msg.pb.go
+++ b/pb/island_msg.pb.go
@@ -354,6 +354,204 @@ func (x *IsLandCompleteResp) GetAward() []*UserAtno {
return nil
}
+//升级节点
+type IsLandUpgradeReq struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Nid int32 `protobuf:"varint,1,opt,name=nid,proto3" json:"nid"` //配置文件里的Id 升级的目标数据
+}
+
+func (x *IsLandUpgradeReq) Reset() {
+ *x = IsLandUpgradeReq{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_island_island_msg_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *IsLandUpgradeReq) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IsLandUpgradeReq) ProtoMessage() {}
+
+func (x *IsLandUpgradeReq) ProtoReflect() protoreflect.Message {
+ mi := &file_island_island_msg_proto_msgTypes[6]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use IsLandUpgradeReq.ProtoReflect.Descriptor instead.
+func (*IsLandUpgradeReq) Descriptor() ([]byte, []int) {
+ return file_island_island_msg_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *IsLandUpgradeReq) GetNid() int32 {
+ if x != nil {
+ return x.Nid
+ }
+ return 0
+}
+
+//升级节点
+type IsLandUpgradeResp struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Nid int32 `protobuf:"varint,1,opt,name=nid,proto3" json:"nid"` //成长线id 配置文件里面的 节点 字段
+ Lv int32 `protobuf:"varint,2,opt,name=lv,proto3" json:"lv"`
+}
+
+func (x *IsLandUpgradeResp) Reset() {
+ *x = IsLandUpgradeResp{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_island_island_msg_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *IsLandUpgradeResp) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IsLandUpgradeResp) ProtoMessage() {}
+
+func (x *IsLandUpgradeResp) ProtoReflect() protoreflect.Message {
+ mi := &file_island_island_msg_proto_msgTypes[7]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use IsLandUpgradeResp.ProtoReflect.Descriptor instead.
+func (*IsLandUpgradeResp) Descriptor() ([]byte, []int) {
+ return file_island_island_msg_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *IsLandUpgradeResp) GetNid() int32 {
+ if x != nil {
+ return x.Nid
+ }
+ return 0
+}
+
+func (x *IsLandUpgradeResp) GetLv() int32 {
+ if x != nil {
+ return x.Lv
+ }
+ return 0
+}
+
+// 战令奖励领取
+type IsLandReceiveReq struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *IsLandReceiveReq) Reset() {
+ *x = IsLandReceiveReq{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_island_island_msg_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *IsLandReceiveReq) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IsLandReceiveReq) ProtoMessage() {}
+
+func (x *IsLandReceiveReq) ProtoReflect() protoreflect.Message {
+ mi := &file_island_island_msg_proto_msgTypes[8]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use IsLandReceiveReq.ProtoReflect.Descriptor instead.
+func (*IsLandReceiveReq) Descriptor() ([]byte, []int) {
+ return file_island_island_msg_proto_rawDescGZIP(), []int{8}
+}
+
+type IsLandReceiveResp struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Info *DBIsland `protobuf:"bytes,1,opt,name=info,proto3" json:"info"`
+ Award []*UserAtno `protobuf:"bytes,4,rep,name=award,proto3" json:"award"` //奖励
+}
+
+func (x *IsLandReceiveResp) Reset() {
+ *x = IsLandReceiveResp{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_island_island_msg_proto_msgTypes[9]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *IsLandReceiveResp) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IsLandReceiveResp) ProtoMessage() {}
+
+func (x *IsLandReceiveResp) ProtoReflect() protoreflect.Message {
+ mi := &file_island_island_msg_proto_msgTypes[9]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use IsLandReceiveResp.ProtoReflect.Descriptor instead.
+func (*IsLandReceiveResp) Descriptor() ([]byte, []int) {
+ return file_island_island_msg_proto_rawDescGZIP(), []int{9}
+}
+
+func (x *IsLandReceiveResp) GetInfo() *DBIsland {
+ if x != nil {
+ return x.Info
+ }
+ return nil
+}
+
+func (x *IsLandReceiveResp) GetAward() []*UserAtno {
+ if x != nil {
+ return x.Award
+ }
+ return nil
+}
+
var File_island_island_msg_proto protoreflect.FileDescriptor
var file_island_island_msg_proto_rawDesc = []byte{
@@ -392,8 +590,20 @@ var file_island_island_msg_proto_rawDesc = []byte{
0x05, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x74,
0x6f, 0x72, 0x79, 0x12, 0x1f, 0x0a, 0x05, 0x61, 0x77, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x03,
0x28, 0x0b, 0x32, 0x09, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x41, 0x74, 0x6e, 0x6f, 0x52, 0x05, 0x61,
- 0x77, 0x61, 0x72, 0x64, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72,
- 0x6f, 0x74, 0x6f, 0x33,
+ 0x77, 0x61, 0x72, 0x64, 0x22, 0x24, 0x0a, 0x10, 0x49, 0x73, 0x4c, 0x61, 0x6e, 0x64, 0x55, 0x70,
+ 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x69, 0x64, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6e, 0x69, 0x64, 0x22, 0x35, 0x0a, 0x11, 0x49, 0x73,
+ 0x4c, 0x61, 0x6e, 0x64, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12,
+ 0x10, 0x0a, 0x03, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6e, 0x69,
+ 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x6c, 0x76, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x6c,
+ 0x76, 0x22, 0x12, 0x0a, 0x10, 0x49, 0x73, 0x4c, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69,
+ 0x76, 0x65, 0x52, 0x65, 0x71, 0x22, 0x53, 0x0a, 0x11, 0x49, 0x73, 0x4c, 0x61, 0x6e, 0x64, 0x52,
+ 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1d, 0x0a, 0x04, 0x69, 0x6e,
+ 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x44, 0x42, 0x49, 0x73, 0x6c,
+ 0x61, 0x6e, 0x64, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x1f, 0x0a, 0x05, 0x61, 0x77, 0x61,
+ 0x72, 0x64, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x41,
+ 0x74, 0x6e, 0x6f, 0x52, 0x05, 0x61, 0x77, 0x61, 0x72, 0x64, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b,
+ 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -408,7 +618,7 @@ func file_island_island_msg_proto_rawDescGZIP() []byte {
return file_island_island_msg_proto_rawDescData
}
-var file_island_island_msg_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
+var file_island_island_msg_proto_msgTypes = make([]protoimpl.MessageInfo, 10)
var file_island_island_msg_proto_goTypes = []interface{}{
(*IsLandInfoReq)(nil), // 0: IsLandInfoReq
(*IsLandInfoResp)(nil), // 1: IsLandInfoResp
@@ -416,25 +626,31 @@ var file_island_island_msg_proto_goTypes = []interface{}{
(*IsLandBattleResp)(nil), // 3: IsLandBattleResp
(*IsLandCompleteReq)(nil), // 4: IsLandCompleteReq
(*IsLandCompleteResp)(nil), // 5: IsLandCompleteResp
- (*DBIsland)(nil), // 6: DBIsland
- (*DBHero)(nil), // 7: DBHero
- (*BattleFormation)(nil), // 8: BattleFormation
- (*BattleInfo)(nil), // 9: BattleInfo
- (*BattleReport)(nil), // 10: BattleReport
- (*UserAtno)(nil), // 11: UserAtno
+ (*IsLandUpgradeReq)(nil), // 6: IsLandUpgradeReq
+ (*IsLandUpgradeResp)(nil), // 7: IsLandUpgradeResp
+ (*IsLandReceiveReq)(nil), // 8: IsLandReceiveReq
+ (*IsLandReceiveResp)(nil), // 9: IsLandReceiveResp
+ (*DBIsland)(nil), // 10: DBIsland
+ (*DBHero)(nil), // 11: DBHero
+ (*BattleFormation)(nil), // 12: BattleFormation
+ (*BattleInfo)(nil), // 13: BattleInfo
+ (*BattleReport)(nil), // 14: BattleReport
+ (*UserAtno)(nil), // 15: UserAtno
}
var file_island_island_msg_proto_depIdxs = []int32{
- 6, // 0: IsLandInfoResp.info:type_name -> DBIsland
- 7, // 1: IsLandInfoResp.heros:type_name -> DBHero
- 8, // 2: IsLandBattleReq.battle:type_name -> BattleFormation
- 9, // 3: IsLandBattleResp.info:type_name -> BattleInfo
- 10, // 4: IsLandCompleteReq.report:type_name -> BattleReport
- 11, // 5: IsLandCompleteResp.award:type_name -> UserAtno
- 6, // [6:6] is the sub-list for method output_type
- 6, // [6:6] is the sub-list for method input_type
- 6, // [6:6] is the sub-list for extension type_name
- 6, // [6:6] is the sub-list for extension extendee
- 0, // [0:6] is the sub-list for field type_name
+ 10, // 0: IsLandInfoResp.info:type_name -> DBIsland
+ 11, // 1: IsLandInfoResp.heros:type_name -> DBHero
+ 12, // 2: IsLandBattleReq.battle:type_name -> BattleFormation
+ 13, // 3: IsLandBattleResp.info:type_name -> BattleInfo
+ 14, // 4: IsLandCompleteReq.report:type_name -> BattleReport
+ 15, // 5: IsLandCompleteResp.award:type_name -> UserAtno
+ 10, // 6: IsLandReceiveResp.info:type_name -> DBIsland
+ 15, // 7: IsLandReceiveResp.award:type_name -> UserAtno
+ 8, // [8:8] is the sub-list for method output_type
+ 8, // [8:8] is the sub-list for method input_type
+ 8, // [8:8] is the sub-list for extension type_name
+ 8, // [8:8] is the sub-list for extension extendee
+ 0, // [0:8] is the sub-list for field type_name
}
func init() { file_island_island_msg_proto_init() }
@@ -519,6 +735,54 @@ func file_island_island_msg_proto_init() {
return nil
}
}
+ file_island_island_msg_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*IsLandUpgradeReq); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_island_island_msg_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*IsLandUpgradeResp); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_island_island_msg_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*IsLandReceiveReq); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_island_island_msg_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*IsLandReceiveResp); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
}
type x struct{}
out := protoimpl.TypeBuilder{
@@ -526,7 +790,7 @@ func file_island_island_msg_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_island_island_msg_proto_rawDesc,
NumEnums: 0,
- NumMessages: 6,
+ NumMessages: 10,
NumExtensions: 0,
NumServices: 0,
},
diff --git a/services/worker/main.go b/services/worker/main.go
index fea7f9c3a..9b738acb9 100644
--- a/services/worker/main.go
+++ b/services/worker/main.go
@@ -36,6 +36,7 @@ import (
"go_dreamfactory/modules/herotask"
"go_dreamfactory/modules/horoscope"
"go_dreamfactory/modules/hunting"
+ "go_dreamfactory/modules/island"
"go_dreamfactory/modules/items"
"go_dreamfactory/modules/jielong"
"go_dreamfactory/modules/kftask"
@@ -180,6 +181,7 @@ func main() {
treasuremap.NewModule(),
gameinvite.NewModule(),
caninerabbit.NewModule(),
+ island.NewModule(),
)
}
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.PuggsyPasscheck.go b/sys/configure/structs/Game.PuggsyPasscheck.go
new file mode 100644
index 000000000..b657b1448
--- /dev/null
+++ b/sys/configure/structs/Game.PuggsyPasscheck.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 GamePuggsyPasscheck struct {
+ _dataMap map[int32]*GamePuggsyPasscheckData
+ _dataList []*GamePuggsyPasscheckData
+}
+
+func NewGamePuggsyPasscheck(_buf []map[string]interface{}) (*GamePuggsyPasscheck, error) {
+ _dataList := make([]*GamePuggsyPasscheckData, 0, len(_buf))
+ dataMap := make(map[int32]*GamePuggsyPasscheckData)
+ for _, _ele_ := range _buf {
+ if _v, err2 := DeserializeGamePuggsyPasscheckData(_ele_); err2 != nil {
+ return nil, err2
+ } else {
+ _dataList = append(_dataList, _v)
+ dataMap[_v.Id] = _v
+ }
+ }
+ return &GamePuggsyPasscheck{_dataList:_dataList, _dataMap:dataMap}, nil
+}
+
+func (table *GamePuggsyPasscheck) GetDataMap() map[int32]*GamePuggsyPasscheckData {
+ return table._dataMap
+}
+
+func (table *GamePuggsyPasscheck) GetDataList() []*GamePuggsyPasscheckData {
+ return table._dataList
+}
+
+func (table *GamePuggsyPasscheck) Get(key int32) *GamePuggsyPasscheckData {
+ return table._dataMap[key]
+}
+
+
diff --git a/sys/configure/structs/Game.PuggsyPasscheckData.go b/sys/configure/structs/Game.PuggsyPasscheckData.go
new file mode 100644
index 000000000..9f98f1965
--- /dev/null
+++ b/sys/configure/structs/Game.PuggsyPasscheckData.go
@@ -0,0 +1,58 @@
+//------------------------------------------------------------------------------
+//
+// 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 GamePuggsyPasscheckData struct {
+ Id int32
+ PayId string
+ Parameter int32
+ UnlockText string
+ FreeReward *Gameatn
+ PayReward []*Gameatn
+}
+
+const TypeId_GamePuggsyPasscheckData = 2074500826
+
+func (*GamePuggsyPasscheckData) GetTypeId() int32 {
+ return 2074500826
+}
+
+func (_v *GamePuggsyPasscheckData)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; if _v.PayId, _ok_ = _buf["pay_id"].(string); !_ok_ { err = errors.New("pay_id error"); return } }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["parameter"].(float64); !_ok_ { err = errors.New("parameter error"); return }; _v.Parameter = int32(_tempNum_) }
+ {var _ok_ bool; var __json_text__ map[string]interface{}; if __json_text__, _ok_ = _buf["unlock_text"].(map[string]interface{}) ; !_ok_ { err = errors.New("_v.UnlockText error"); return }; { var _ok_ bool; if _, _ok_ = __json_text__["key"].(string); !_ok_ { err = errors.New("key error"); return } }; { var _ok_ bool; if _v.UnlockText, _ok_ = __json_text__["text"].(string); !_ok_ { err = errors.New("text error"); return } } }
+ { var _ok_ bool; var _x_ map[string]interface{}; if _x_, _ok_ = _buf["free_reward"].(map[string]interface{}); !_ok_ { err = errors.New("free_reward error"); return }; if _v.FreeReward, err = DeserializeGameatn(_x_); err != nil { return } }
+ {
+ var _arr_ []interface{}
+ var _ok_ bool
+ if _arr_, _ok_ = _buf["pay_reward"].([]interface{}); !_ok_ { err = errors.New("pay_reward error"); return }
+
+ _v.PayReward = 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.PayReward = append(_v.PayReward, _list_v_)
+ }
+ }
+
+ return
+}
+
+func DeserializeGamePuggsyPasscheckData(_buf map[string]interface{}) (*GamePuggsyPasscheckData, error) {
+ v := &GamePuggsyPasscheckData{}
+ 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..9c33551de 100644
--- a/sys/configure/structs/Tables.go
+++ b/sys/configure/structs/Tables.go
@@ -283,6 +283,12 @@ type Tables struct {
RepeatAll *GameRepeatAll
TDMonster *GameTDMonster
TDMonsterAppear *GameTDMonsterAppear
+ PuggsyIsLand *GamePuggsyIsLand
+ PuggsyEvent *GamePuggsyEvent
+ PuggsyFight *GamePuggsyFight
+ PuggsyScore *GamePuggsyScore
+ PuggsySkill *GamePuggsySkill
+ PuggsyPasscheck *GamePuggsyPasscheck
}
func NewTables(loader JsonLoader) (*Tables, error) {
@@ -1922,5 +1928,41 @@ 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
+ }
+ if buf, err = loader("game_puggsypasscheck") ; err != nil {
+ return nil, err
+ }
+ if tables.PuggsyPasscheck, err = NewGamePuggsyPasscheck(buf) ; err != nil {
+ return nil, err
+ }
return tables, nil
}