diff --git a/bin/json/game_huntingboss.json b/bin/json/game_huntingboss.json
new file mode 100644
index 000000000..da77c8eb7
--- /dev/null
+++ b/bin/json/game_huntingboss.json
@@ -0,0 +1,3022 @@
+[
+ {
+ "id": 1001,
+ "type": 1,
+ "name": {
+ "key": "hunting_boss_1001",
+ "text": "功夫狩猎"
+ },
+ "difficulty": 1,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ }
+ ],
+ "drop": 1001,
+ "bossmodel": 25001,
+ "npcid1": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc1lv": 10,
+ "npc1hp": 0.5,
+ "npc1atk": 0.5,
+ "npc1def": 0.5,
+ "npcid2": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc2lv": 10,
+ "npc2hp": 0.5,
+ "npc2atk": 0.5,
+ "npc2def": 0.5,
+ "npcid3": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc3lv": 10,
+ "npc3hp": 0.5,
+ "npc3atk": 0.5,
+ "npc3def": 0.5,
+ "bosslv": 10,
+ "bosshp": 0.5,
+ "bossatk": 0.5,
+ "bossdef": 0.5
+ },
+ {
+ "id": 1002,
+ "type": 1,
+ "name": {
+ "key": "hunting_boss_1001",
+ "text": "功夫狩猎"
+ },
+ "difficulty": 2,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ }
+ ],
+ "drop": 1002,
+ "bossmodel": 25001,
+ "npcid1": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc1lv": 20,
+ "npc1hp": 0.6,
+ "npc1atk": 0.6,
+ "npc1def": 0.6,
+ "npcid2": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc2lv": 20,
+ "npc2hp": 0.6,
+ "npc2atk": 0.6,
+ "npc2def": 0.6,
+ "npcid3": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc3lv": 20,
+ "npc3hp": 0.6,
+ "npc3atk": 0.6,
+ "npc3def": 0.6,
+ "bosslv": 20,
+ "bosshp": 0.6,
+ "bossatk": 0.6,
+ "bossdef": 0.6
+ },
+ {
+ "id": 1003,
+ "type": 1,
+ "name": {
+ "key": "hunting_boss_1001",
+ "text": "功夫狩猎"
+ },
+ "difficulty": 3,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1003,
+ "bossmodel": 25001,
+ "npcid1": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc1lv": 30,
+ "npc1hp": 0.7,
+ "npc1atk": 0.7,
+ "npc1def": 0.7,
+ "npcid2": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc2lv": 30,
+ "npc2hp": 0.7,
+ "npc2atk": 0.7,
+ "npc2def": 0.7,
+ "npcid3": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc3lv": 30,
+ "npc3hp": 0.7,
+ "npc3atk": 0.7,
+ "npc3def": 0.7,
+ "bosslv": 30,
+ "bosshp": 0.7,
+ "bossatk": 0.7,
+ "bossdef": 0.7
+ },
+ {
+ "id": 1004,
+ "type": 1,
+ "name": {
+ "key": "hunting_boss_1001",
+ "text": "功夫狩猎"
+ },
+ "difficulty": 4,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1004,
+ "bossmodel": 25001,
+ "npcid1": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc1lv": 40,
+ "npc1hp": 0.8,
+ "npc1atk": 0.8,
+ "npc1def": 0.8,
+ "npcid2": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc2lv": 40,
+ "npc2hp": 0.8,
+ "npc2atk": 0.8,
+ "npc2def": 0.8,
+ "npcid3": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc3lv": 40,
+ "npc3hp": 0.8,
+ "npc3atk": 0.8,
+ "npc3def": 0.8,
+ "bosslv": 40,
+ "bosshp": 0.8,
+ "bossatk": 0.8,
+ "bossdef": 0.8
+ },
+ {
+ "id": 1005,
+ "type": 1,
+ "name": {
+ "key": "hunting_boss_1001",
+ "text": "功夫狩猎"
+ },
+ "difficulty": 5,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1005,
+ "bossmodel": 25001,
+ "npcid1": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc1lv": 50,
+ "npc1hp": 0.9,
+ "npc1atk": 0.9,
+ "npc1def": 0.9,
+ "npcid2": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc2lv": 50,
+ "npc2hp": 0.9,
+ "npc2atk": 0.9,
+ "npc2def": 0.9,
+ "npcid3": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc3lv": 50,
+ "npc3hp": 0.9,
+ "npc3atk": 0.9,
+ "npc3def": 0.9,
+ "bosslv": 50,
+ "bosshp": 0.9,
+ "bossatk": 0.9,
+ "bossdef": 0.9
+ },
+ {
+ "id": 1006,
+ "type": 1,
+ "name": {
+ "key": "hunting_boss_1001",
+ "text": "功夫狩猎"
+ },
+ "difficulty": 6,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1006,
+ "bossmodel": 25001,
+ "npcid1": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc1lv": 60,
+ "npc1hp": 1,
+ "npc1atk": 1,
+ "npc1def": 1,
+ "npcid2": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc2lv": 60,
+ "npc2hp": 1,
+ "npc2atk": 1,
+ "npc2def": 1,
+ "npcid3": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc3lv": 60,
+ "npc3hp": 1,
+ "npc3atk": 1,
+ "npc3def": 1,
+ "bosslv": 60,
+ "bosshp": 1,
+ "bossatk": 1,
+ "bossdef": 1
+ },
+ {
+ "id": 1007,
+ "type": 1,
+ "name": {
+ "key": "hunting_boss_1001",
+ "text": "功夫狩猎"
+ },
+ "difficulty": 7,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1007,
+ "bossmodel": 25001,
+ "npcid1": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc1lv": 70,
+ "npc1hp": 1.1,
+ "npc1atk": 1.1,
+ "npc1def": 1.1,
+ "npcid2": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc2lv": 70,
+ "npc2hp": 1.1,
+ "npc2atk": 1.1,
+ "npc2def": 1.1,
+ "npcid3": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc3lv": 70,
+ "npc3hp": 1.1,
+ "npc3atk": 1.1,
+ "npc3def": 1.1,
+ "bosslv": 70,
+ "bosshp": 1.1,
+ "bossatk": 1.1,
+ "bossdef": 1.1
+ },
+ {
+ "id": 1008,
+ "type": 1,
+ "name": {
+ "key": "hunting_boss_1001",
+ "text": "功夫狩猎"
+ },
+ "difficulty": 8,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1008,
+ "bossmodel": 25001,
+ "npcid1": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc1lv": 80,
+ "npc1hp": 1.2,
+ "npc1atk": 1.2,
+ "npc1def": 1.2,
+ "npcid2": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc2lv": 80,
+ "npc2hp": 1.2,
+ "npc2atk": 1.2,
+ "npc2def": 1.2,
+ "npcid3": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc3lv": 80,
+ "npc3hp": 1.2,
+ "npc3atk": 1.2,
+ "npc3def": 1.2,
+ "bosslv": 80,
+ "bosshp": 1.2,
+ "bossatk": 1.2,
+ "bossdef": 1.2
+ },
+ {
+ "id": 1009,
+ "type": 1,
+ "name": {
+ "key": "hunting_boss_1001",
+ "text": "功夫狩猎"
+ },
+ "difficulty": 9,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1009,
+ "bossmodel": 25001,
+ "npcid1": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc1lv": 90,
+ "npc1hp": 1.3,
+ "npc1atk": 1.3,
+ "npc1def": 1.3,
+ "npcid2": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc2lv": 90,
+ "npc2hp": 1.3,
+ "npc2atk": 1.3,
+ "npc2def": 1.3,
+ "npcid3": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc3lv": 90,
+ "npc3hp": 1.3,
+ "npc3atk": 1.3,
+ "npc3def": 1.3,
+ "bosslv": 90,
+ "bosshp": 1.3,
+ "bossatk": 1.3,
+ "bossdef": 1.3
+ },
+ {
+ "id": 1010,
+ "type": 1,
+ "name": {
+ "key": "hunting_boss_1001",
+ "text": "功夫狩猎"
+ },
+ "difficulty": 10,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1010,
+ "bossmodel": 25001,
+ "npcid1": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc1lv": 100,
+ "npc1hp": 1.4,
+ "npc1atk": 1.4,
+ "npc1def": 1.4,
+ "npcid2": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc2lv": 100,
+ "npc2hp": 1.4,
+ "npc2atk": 1.4,
+ "npc2def": 1.4,
+ "npcid3": [
+ 250011,
+ 250011,
+ 250011
+ ],
+ "npc3lv": 100,
+ "npc3hp": 1.4,
+ "npc3atk": 1.4,
+ "npc3def": 1.4,
+ "bosslv": 100,
+ "bosshp": 1.4,
+ "bossatk": 1.4,
+ "bossdef": 1.4
+ },
+ {
+ "id": 2001,
+ "type": 2,
+ "name": {
+ "key": "hunting_boss_1002",
+ "text": "魔法狩猎"
+ },
+ "difficulty": 1,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ }
+ ],
+ "drop": 1011,
+ "bossmodel": 25004,
+ "npcid1": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc1lv": 10,
+ "npc1hp": 0.5,
+ "npc1atk": 0.5,
+ "npc1def": 0.5,
+ "npcid2": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc2lv": 10,
+ "npc2hp": 0.5,
+ "npc2atk": 0.5,
+ "npc2def": 0.5,
+ "npcid3": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc3lv": 10,
+ "npc3hp": 0.5,
+ "npc3atk": 0.5,
+ "npc3def": 0.5,
+ "bosslv": 10,
+ "bosshp": 0.5,
+ "bossatk": 0.5,
+ "bossdef": 0.5
+ },
+ {
+ "id": 2002,
+ "type": 2,
+ "name": {
+ "key": "hunting_boss_1002",
+ "text": "魔法狩猎"
+ },
+ "difficulty": 2,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ }
+ ],
+ "drop": 1012,
+ "bossmodel": 25004,
+ "npcid1": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc1lv": 20,
+ "npc1hp": 0.6,
+ "npc1atk": 0.6,
+ "npc1def": 0.6,
+ "npcid2": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc2lv": 20,
+ "npc2hp": 0.6,
+ "npc2atk": 0.6,
+ "npc2def": 0.6,
+ "npcid3": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc3lv": 20,
+ "npc3hp": 0.6,
+ "npc3atk": 0.6,
+ "npc3def": 0.6,
+ "bosslv": 20,
+ "bosshp": 0.6,
+ "bossatk": 0.6,
+ "bossdef": 0.6
+ },
+ {
+ "id": 2003,
+ "type": 2,
+ "name": {
+ "key": "hunting_boss_1002",
+ "text": "魔法狩猎"
+ },
+ "difficulty": 3,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1013,
+ "bossmodel": 25004,
+ "npcid1": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc1lv": 30,
+ "npc1hp": 0.7,
+ "npc1atk": 0.7,
+ "npc1def": 0.7,
+ "npcid2": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc2lv": 30,
+ "npc2hp": 0.7,
+ "npc2atk": 0.7,
+ "npc2def": 0.7,
+ "npcid3": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc3lv": 30,
+ "npc3hp": 0.7,
+ "npc3atk": 0.7,
+ "npc3def": 0.7,
+ "bosslv": 30,
+ "bosshp": 0.7,
+ "bossatk": 0.7,
+ "bossdef": 0.7
+ },
+ {
+ "id": 2004,
+ "type": 2,
+ "name": {
+ "key": "hunting_boss_1002",
+ "text": "魔法狩猎"
+ },
+ "difficulty": 4,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1014,
+ "bossmodel": 25004,
+ "npcid1": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc1lv": 40,
+ "npc1hp": 0.8,
+ "npc1atk": 0.8,
+ "npc1def": 0.8,
+ "npcid2": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc2lv": 40,
+ "npc2hp": 0.8,
+ "npc2atk": 0.8,
+ "npc2def": 0.8,
+ "npcid3": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc3lv": 40,
+ "npc3hp": 0.8,
+ "npc3atk": 0.8,
+ "npc3def": 0.8,
+ "bosslv": 40,
+ "bosshp": 0.8,
+ "bossatk": 0.8,
+ "bossdef": 0.8
+ },
+ {
+ "id": 2005,
+ "type": 2,
+ "name": {
+ "key": "hunting_boss_1002",
+ "text": "魔法狩猎"
+ },
+ "difficulty": 5,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1015,
+ "bossmodel": 25004,
+ "npcid1": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc1lv": 50,
+ "npc1hp": 0.9,
+ "npc1atk": 0.9,
+ "npc1def": 0.9,
+ "npcid2": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc2lv": 50,
+ "npc2hp": 0.9,
+ "npc2atk": 0.9,
+ "npc2def": 0.9,
+ "npcid3": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc3lv": 50,
+ "npc3hp": 0.9,
+ "npc3atk": 0.9,
+ "npc3def": 0.9,
+ "bosslv": 50,
+ "bosshp": 0.9,
+ "bossatk": 0.9,
+ "bossdef": 0.9
+ },
+ {
+ "id": 2006,
+ "type": 2,
+ "name": {
+ "key": "hunting_boss_1002",
+ "text": "魔法狩猎"
+ },
+ "difficulty": 6,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1016,
+ "bossmodel": 25004,
+ "npcid1": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc1lv": 60,
+ "npc1hp": 1,
+ "npc1atk": 1,
+ "npc1def": 1,
+ "npcid2": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc2lv": 60,
+ "npc2hp": 1,
+ "npc2atk": 1,
+ "npc2def": 1,
+ "npcid3": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc3lv": 60,
+ "npc3hp": 1,
+ "npc3atk": 1,
+ "npc3def": 1,
+ "bosslv": 60,
+ "bosshp": 1,
+ "bossatk": 1,
+ "bossdef": 1
+ },
+ {
+ "id": 2007,
+ "type": 2,
+ "name": {
+ "key": "hunting_boss_1002",
+ "text": "魔法狩猎"
+ },
+ "difficulty": 7,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1017,
+ "bossmodel": 25004,
+ "npcid1": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc1lv": 70,
+ "npc1hp": 1.1,
+ "npc1atk": 1.1,
+ "npc1def": 1.1,
+ "npcid2": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc2lv": 70,
+ "npc2hp": 1.1,
+ "npc2atk": 1.1,
+ "npc2def": 1.1,
+ "npcid3": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc3lv": 70,
+ "npc3hp": 1.1,
+ "npc3atk": 1.1,
+ "npc3def": 1.1,
+ "bosslv": 70,
+ "bosshp": 1.1,
+ "bossatk": 1.1,
+ "bossdef": 1.1
+ },
+ {
+ "id": 2008,
+ "type": 2,
+ "name": {
+ "key": "hunting_boss_1002",
+ "text": "魔法狩猎"
+ },
+ "difficulty": 8,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1018,
+ "bossmodel": 25004,
+ "npcid1": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc1lv": 80,
+ "npc1hp": 1.2,
+ "npc1atk": 1.2,
+ "npc1def": 1.2,
+ "npcid2": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc2lv": 80,
+ "npc2hp": 1.2,
+ "npc2atk": 1.2,
+ "npc2def": 1.2,
+ "npcid3": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc3lv": 80,
+ "npc3hp": 1.2,
+ "npc3atk": 1.2,
+ "npc3def": 1.2,
+ "bosslv": 80,
+ "bosshp": 1.2,
+ "bossatk": 1.2,
+ "bossdef": 1.2
+ },
+ {
+ "id": 2009,
+ "type": 2,
+ "name": {
+ "key": "hunting_boss_1002",
+ "text": "魔法狩猎"
+ },
+ "difficulty": 9,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1019,
+ "bossmodel": 25004,
+ "npcid1": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc1lv": 90,
+ "npc1hp": 1.3,
+ "npc1atk": 1.3,
+ "npc1def": 1.3,
+ "npcid2": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc2lv": 90,
+ "npc2hp": 1.3,
+ "npc2atk": 1.3,
+ "npc2def": 1.3,
+ "npcid3": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc3lv": 90,
+ "npc3hp": 1.3,
+ "npc3atk": 1.3,
+ "npc3def": 1.3,
+ "bosslv": 90,
+ "bosshp": 1.3,
+ "bossatk": 1.3,
+ "bossdef": 1.3
+ },
+ {
+ "id": 2010,
+ "type": 2,
+ "name": {
+ "key": "hunting_boss_1002",
+ "text": "魔法狩猎"
+ },
+ "difficulty": 10,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1020,
+ "bossmodel": 25004,
+ "npcid1": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc1lv": 100,
+ "npc1hp": 1.4,
+ "npc1atk": 1.4,
+ "npc1def": 1.4,
+ "npcid2": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc2lv": 100,
+ "npc2hp": 1.4,
+ "npc2atk": 1.4,
+ "npc2def": 1.4,
+ "npcid3": [
+ 240031,
+ 240031,
+ 240031
+ ],
+ "npc3lv": 100,
+ "npc3hp": 1.4,
+ "npc3atk": 1.4,
+ "npc3def": 1.4,
+ "bosslv": 100,
+ "bosshp": 1.4,
+ "bossatk": 1.4,
+ "bossdef": 1.4
+ },
+ {
+ "id": 3001,
+ "type": 3,
+ "name": {
+ "key": "hunting_boss_1003",
+ "text": "科技狩猎"
+ },
+ "difficulty": 1,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ }
+ ],
+ "drop": 1021,
+ "bossmodel": 34006,
+ "npcid1": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc1lv": 10,
+ "npc1hp": 0.5,
+ "npc1atk": 0.5,
+ "npc1def": 0.5,
+ "npcid2": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc2lv": 10,
+ "npc2hp": 0.5,
+ "npc2atk": 0.5,
+ "npc2def": 0.5,
+ "npcid3": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc3lv": 10,
+ "npc3hp": 0.5,
+ "npc3atk": 0.5,
+ "npc3def": 0.5,
+ "bosslv": 10,
+ "bosshp": 0.5,
+ "bossatk": 0.5,
+ "bossdef": 0.5
+ },
+ {
+ "id": 3002,
+ "type": 3,
+ "name": {
+ "key": "hunting_boss_1003",
+ "text": "科技狩猎"
+ },
+ "difficulty": 2,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ }
+ ],
+ "drop": 1022,
+ "bossmodel": 34006,
+ "npcid1": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc1lv": 20,
+ "npc1hp": 0.6,
+ "npc1atk": 0.6,
+ "npc1def": 0.6,
+ "npcid2": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc2lv": 20,
+ "npc2hp": 0.6,
+ "npc2atk": 0.6,
+ "npc2def": 0.6,
+ "npcid3": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc3lv": 20,
+ "npc3hp": 0.6,
+ "npc3atk": 0.6,
+ "npc3def": 0.6,
+ "bosslv": 20,
+ "bosshp": 0.6,
+ "bossatk": 0.6,
+ "bossdef": 0.6
+ },
+ {
+ "id": 3003,
+ "type": 3,
+ "name": {
+ "key": "hunting_boss_1003",
+ "text": "科技狩猎"
+ },
+ "difficulty": 3,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1023,
+ "bossmodel": 34006,
+ "npcid1": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc1lv": 30,
+ "npc1hp": 0.7,
+ "npc1atk": 0.7,
+ "npc1def": 0.7,
+ "npcid2": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc2lv": 30,
+ "npc2hp": 0.7,
+ "npc2atk": 0.7,
+ "npc2def": 0.7,
+ "npcid3": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc3lv": 30,
+ "npc3hp": 0.7,
+ "npc3atk": 0.7,
+ "npc3def": 0.7,
+ "bosslv": 30,
+ "bosshp": 0.7,
+ "bossatk": 0.7,
+ "bossdef": 0.7
+ },
+ {
+ "id": 3004,
+ "type": 3,
+ "name": {
+ "key": "hunting_boss_1003",
+ "text": "科技狩猎"
+ },
+ "difficulty": 4,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1024,
+ "bossmodel": 34006,
+ "npcid1": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc1lv": 40,
+ "npc1hp": 0.8,
+ "npc1atk": 0.8,
+ "npc1def": 0.8,
+ "npcid2": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc2lv": 40,
+ "npc2hp": 0.8,
+ "npc2atk": 0.8,
+ "npc2def": 0.8,
+ "npcid3": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc3lv": 40,
+ "npc3hp": 0.8,
+ "npc3atk": 0.8,
+ "npc3def": 0.8,
+ "bosslv": 40,
+ "bosshp": 0.8,
+ "bossatk": 0.8,
+ "bossdef": 0.8
+ },
+ {
+ "id": 3005,
+ "type": 3,
+ "name": {
+ "key": "hunting_boss_1003",
+ "text": "科技狩猎"
+ },
+ "difficulty": 5,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1025,
+ "bossmodel": 34006,
+ "npcid1": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc1lv": 50,
+ "npc1hp": 0.9,
+ "npc1atk": 0.9,
+ "npc1def": 0.9,
+ "npcid2": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc2lv": 50,
+ "npc2hp": 0.9,
+ "npc2atk": 0.9,
+ "npc2def": 0.9,
+ "npcid3": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc3lv": 50,
+ "npc3hp": 0.9,
+ "npc3atk": 0.9,
+ "npc3def": 0.9,
+ "bosslv": 50,
+ "bosshp": 0.9,
+ "bossatk": 0.9,
+ "bossdef": 0.9
+ },
+ {
+ "id": 3006,
+ "type": 3,
+ "name": {
+ "key": "hunting_boss_1003",
+ "text": "科技狩猎"
+ },
+ "difficulty": 6,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1026,
+ "bossmodel": 34006,
+ "npcid1": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc1lv": 60,
+ "npc1hp": 1,
+ "npc1atk": 1,
+ "npc1def": 1,
+ "npcid2": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc2lv": 60,
+ "npc2hp": 1,
+ "npc2atk": 1,
+ "npc2def": 1,
+ "npcid3": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc3lv": 60,
+ "npc3hp": 1,
+ "npc3atk": 1,
+ "npc3def": 1,
+ "bosslv": 60,
+ "bosshp": 1,
+ "bossatk": 1,
+ "bossdef": 1
+ },
+ {
+ "id": 3007,
+ "type": 3,
+ "name": {
+ "key": "hunting_boss_1003",
+ "text": "科技狩猎"
+ },
+ "difficulty": 7,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1027,
+ "bossmodel": 34006,
+ "npcid1": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc1lv": 70,
+ "npc1hp": 1.1,
+ "npc1atk": 1.1,
+ "npc1def": 1.1,
+ "npcid2": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc2lv": 70,
+ "npc2hp": 1.1,
+ "npc2atk": 1.1,
+ "npc2def": 1.1,
+ "npcid3": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc3lv": 70,
+ "npc3hp": 1.1,
+ "npc3atk": 1.1,
+ "npc3def": 1.1,
+ "bosslv": 70,
+ "bosshp": 1.1,
+ "bossatk": 1.1,
+ "bossdef": 1.1
+ },
+ {
+ "id": 3008,
+ "type": 3,
+ "name": {
+ "key": "hunting_boss_1003",
+ "text": "科技狩猎"
+ },
+ "difficulty": 8,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1028,
+ "bossmodel": 34006,
+ "npcid1": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc1lv": 80,
+ "npc1hp": 1.2,
+ "npc1atk": 1.2,
+ "npc1def": 1.2,
+ "npcid2": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc2lv": 80,
+ "npc2hp": 1.2,
+ "npc2atk": 1.2,
+ "npc2def": 1.2,
+ "npcid3": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc3lv": 80,
+ "npc3hp": 1.2,
+ "npc3atk": 1.2,
+ "npc3def": 1.2,
+ "bosslv": 80,
+ "bosshp": 1.2,
+ "bossatk": 1.2,
+ "bossdef": 1.2
+ },
+ {
+ "id": 3009,
+ "type": 3,
+ "name": {
+ "key": "hunting_boss_1003",
+ "text": "科技狩猎"
+ },
+ "difficulty": 9,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1029,
+ "bossmodel": 34006,
+ "npcid1": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc1lv": 90,
+ "npc1hp": 1.3,
+ "npc1atk": 1.3,
+ "npc1def": 1.3,
+ "npcid2": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc2lv": 90,
+ "npc2hp": 1.3,
+ "npc2atk": 1.3,
+ "npc2def": 1.3,
+ "npcid3": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc3lv": 90,
+ "npc3hp": 1.3,
+ "npc3atk": 1.3,
+ "npc3def": 1.3,
+ "bosslv": 90,
+ "bosshp": 1.3,
+ "bossatk": 1.3,
+ "bossdef": 1.3
+ },
+ {
+ "id": 3010,
+ "type": 3,
+ "name": {
+ "key": "hunting_boss_1003",
+ "text": "科技狩猎"
+ },
+ "difficulty": 10,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1030,
+ "bossmodel": 34006,
+ "npcid1": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc1lv": 100,
+ "npc1hp": 1.4,
+ "npc1atk": 1.4,
+ "npc1def": 1.4,
+ "npcid2": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc2lv": 100,
+ "npc2hp": 1.4,
+ "npc2atk": 1.4,
+ "npc2def": 1.4,
+ "npcid3": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc3lv": 100,
+ "npc3hp": 1.4,
+ "npc3atk": 1.4,
+ "npc3def": 1.4,
+ "bosslv": 100,
+ "bosshp": 1.4,
+ "bossatk": 1.4,
+ "bossdef": 1.4
+ },
+ {
+ "id": 4001,
+ "type": 4,
+ "name": {
+ "key": "hunting_boss_1004",
+ "text": "月能狩猎"
+ },
+ "difficulty": 1,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ }
+ ],
+ "drop": 1021,
+ "bossmodel": 34006,
+ "npcid1": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc1lv": 10,
+ "npc1hp": 0.5,
+ "npc1atk": 0.5,
+ "npc1def": 0.5,
+ "npcid2": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc2lv": 10,
+ "npc2hp": 0.5,
+ "npc2atk": 0.5,
+ "npc2def": 0.5,
+ "npcid3": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc3lv": 10,
+ "npc3hp": 0.5,
+ "npc3atk": 0.5,
+ "npc3def": 0.5,
+ "bosslv": 10,
+ "bosshp": 0.5,
+ "bossatk": 0.5,
+ "bossdef": 0.5
+ },
+ {
+ "id": 4002,
+ "type": 4,
+ "name": {
+ "key": "hunting_boss_1004",
+ "text": "月能狩猎"
+ },
+ "difficulty": 2,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ }
+ ],
+ "drop": 1022,
+ "bossmodel": 34006,
+ "npcid1": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc1lv": 20,
+ "npc1hp": 0.6,
+ "npc1atk": 0.6,
+ "npc1def": 0.6,
+ "npcid2": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc2lv": 20,
+ "npc2hp": 0.6,
+ "npc2atk": 0.6,
+ "npc2def": 0.6,
+ "npcid3": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc3lv": 20,
+ "npc3hp": 0.6,
+ "npc3atk": 0.6,
+ "npc3def": 0.6,
+ "bosslv": 20,
+ "bosshp": 0.6,
+ "bossatk": 0.6,
+ "bossdef": 0.6
+ },
+ {
+ "id": 4003,
+ "type": 4,
+ "name": {
+ "key": "hunting_boss_1004",
+ "text": "月能狩猎"
+ },
+ "difficulty": 3,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1023,
+ "bossmodel": 34006,
+ "npcid1": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc1lv": 30,
+ "npc1hp": 0.7,
+ "npc1atk": 0.7,
+ "npc1def": 0.7,
+ "npcid2": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc2lv": 30,
+ "npc2hp": 0.7,
+ "npc2atk": 0.7,
+ "npc2def": 0.7,
+ "npcid3": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc3lv": 30,
+ "npc3hp": 0.7,
+ "npc3atk": 0.7,
+ "npc3def": 0.7,
+ "bosslv": 30,
+ "bosshp": 0.7,
+ "bossatk": 0.7,
+ "bossdef": 0.7
+ },
+ {
+ "id": 4004,
+ "type": 4,
+ "name": {
+ "key": "hunting_boss_1004",
+ "text": "月能狩猎"
+ },
+ "difficulty": 4,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1024,
+ "bossmodel": 34006,
+ "npcid1": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc1lv": 40,
+ "npc1hp": 0.8,
+ "npc1atk": 0.8,
+ "npc1def": 0.8,
+ "npcid2": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc2lv": 40,
+ "npc2hp": 0.8,
+ "npc2atk": 0.8,
+ "npc2def": 0.8,
+ "npcid3": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc3lv": 40,
+ "npc3hp": 0.8,
+ "npc3atk": 0.8,
+ "npc3def": 0.8,
+ "bosslv": 40,
+ "bosshp": 0.8,
+ "bossatk": 0.8,
+ "bossdef": 0.8
+ },
+ {
+ "id": 4005,
+ "type": 4,
+ "name": {
+ "key": "hunting_boss_1004",
+ "text": "月能狩猎"
+ },
+ "difficulty": 5,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1025,
+ "bossmodel": 34006,
+ "npcid1": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc1lv": 50,
+ "npc1hp": 0.9,
+ "npc1atk": 0.9,
+ "npc1def": 0.9,
+ "npcid2": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc2lv": 50,
+ "npc2hp": 0.9,
+ "npc2atk": 0.9,
+ "npc2def": 0.9,
+ "npcid3": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc3lv": 50,
+ "npc3hp": 0.9,
+ "npc3atk": 0.9,
+ "npc3def": 0.9,
+ "bosslv": 50,
+ "bosshp": 0.9,
+ "bossatk": 0.9,
+ "bossdef": 0.9
+ },
+ {
+ "id": 4006,
+ "type": 4,
+ "name": {
+ "key": "hunting_boss_1004",
+ "text": "月能狩猎"
+ },
+ "difficulty": 6,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1026,
+ "bossmodel": 34006,
+ "npcid1": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc1lv": 60,
+ "npc1hp": 1,
+ "npc1atk": 1,
+ "npc1def": 1,
+ "npcid2": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc2lv": 60,
+ "npc2hp": 1,
+ "npc2atk": 1,
+ "npc2def": 1,
+ "npcid3": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc3lv": 60,
+ "npc3hp": 1,
+ "npc3atk": 1,
+ "npc3def": 1,
+ "bosslv": 60,
+ "bosshp": 1,
+ "bossatk": 1,
+ "bossdef": 1
+ },
+ {
+ "id": 4007,
+ "type": 4,
+ "name": {
+ "key": "hunting_boss_1004",
+ "text": "月能狩猎"
+ },
+ "difficulty": 7,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1027,
+ "bossmodel": 34006,
+ "npcid1": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc1lv": 70,
+ "npc1hp": 1.1,
+ "npc1atk": 1.1,
+ "npc1def": 1.1,
+ "npcid2": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc2lv": 70,
+ "npc2hp": 1.1,
+ "npc2atk": 1.1,
+ "npc2def": 1.1,
+ "npcid3": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc3lv": 70,
+ "npc3hp": 1.1,
+ "npc3atk": 1.1,
+ "npc3def": 1.1,
+ "bosslv": 70,
+ "bosshp": 1.1,
+ "bossatk": 1.1,
+ "bossdef": 1.1
+ },
+ {
+ "id": 4008,
+ "type": 4,
+ "name": {
+ "key": "hunting_boss_1004",
+ "text": "月能狩猎"
+ },
+ "difficulty": 8,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1028,
+ "bossmodel": 34006,
+ "npcid1": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc1lv": 80,
+ "npc1hp": 1.2,
+ "npc1atk": 1.2,
+ "npc1def": 1.2,
+ "npcid2": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc2lv": 80,
+ "npc2hp": 1.2,
+ "npc2atk": 1.2,
+ "npc2def": 1.2,
+ "npcid3": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc3lv": 80,
+ "npc3hp": 1.2,
+ "npc3atk": 1.2,
+ "npc3def": 1.2,
+ "bosslv": 80,
+ "bosshp": 1.2,
+ "bossatk": 1.2,
+ "bossdef": 1.2
+ },
+ {
+ "id": 4009,
+ "type": 4,
+ "name": {
+ "key": "hunting_boss_1004",
+ "text": "月能狩猎"
+ },
+ "difficulty": 9,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1029,
+ "bossmodel": 34006,
+ "npcid1": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc1lv": 90,
+ "npc1hp": 1.3,
+ "npc1atk": 1.3,
+ "npc1def": 1.3,
+ "npcid2": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc2lv": 90,
+ "npc2hp": 1.3,
+ "npc2atk": 1.3,
+ "npc2def": 1.3,
+ "npcid3": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc3lv": 90,
+ "npc3hp": 1.3,
+ "npc3atk": 1.3,
+ "npc3def": 1.3,
+ "bosslv": 90,
+ "bosshp": 1.3,
+ "bossatk": 1.3,
+ "bossdef": 1.3
+ },
+ {
+ "id": 4010,
+ "type": 4,
+ "name": {
+ "key": "hunting_boss_1004",
+ "text": "月能狩猎"
+ },
+ "difficulty": 10,
+ "captionrecommend": [
+ 25001,
+ 25004,
+ 34006,
+ 11017
+ ],
+ "firstprize": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ],
+ "dropshow": [
+ {
+ "a": "item",
+ "t": "10001",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10002",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10003",
+ "n": 1
+ },
+ {
+ "a": "item",
+ "t": "10004",
+ "n": 1
+ }
+ ],
+ "drop": 1030,
+ "bossmodel": 34006,
+ "npcid1": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc1lv": 100,
+ "npc1hp": 1.4,
+ "npc1atk": 1.4,
+ "npc1def": 1.4,
+ "npcid2": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc2lv": 100,
+ "npc2hp": 1.4,
+ "npc2atk": 1.4,
+ "npc2def": 1.4,
+ "npcid3": [
+ 350021,
+ 350021,
+ 350021
+ ],
+ "npc3lv": 100,
+ "npc3hp": 1.4,
+ "npc3atk": 1.4,
+ "npc3def": 1.4,
+ "bosslv": 100,
+ "bosshp": 1.4,
+ "bossatk": 1.4,
+ "bossdef": 1.4
+ }
+]
\ No newline at end of file
diff --git a/bin/json/game_huntingchallenge.json b/bin/json/game_huntingchallenge.json
new file mode 100644
index 000000000..b66be6731
--- /dev/null
+++ b/bin/json/game_huntingchallenge.json
@@ -0,0 +1,102 @@
+[
+ {
+ "buynum": 1,
+ "need": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 10
+ }
+ ]
+ },
+ {
+ "buynum": 2,
+ "need": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 20
+ }
+ ]
+ },
+ {
+ "buynum": 3,
+ "need": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 30
+ }
+ ]
+ },
+ {
+ "buynum": 4,
+ "need": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 40
+ }
+ ]
+ },
+ {
+ "buynum": 5,
+ "need": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 50
+ }
+ ]
+ },
+ {
+ "buynum": 6,
+ "need": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 60
+ }
+ ]
+ },
+ {
+ "buynum": 7,
+ "need": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 70
+ }
+ ]
+ },
+ {
+ "buynum": 8,
+ "need": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 80
+ }
+ ]
+ },
+ {
+ "buynum": 9,
+ "need": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 90
+ }
+ ]
+ },
+ {
+ "buynum": 10,
+ "need": [
+ {
+ "a": "attr",
+ "t": "diamond",
+ "n": 100
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/bin/json/game_huntingopentime.json b/bin/json/game_huntingopentime.json
new file mode 100644
index 000000000..214398210
--- /dev/null
+++ b/bin/json/game_huntingopentime.json
@@ -0,0 +1,30 @@
+[
+ {
+ "type": 1,
+ "opentime": [
+ 1,
+ 2
+ ]
+ },
+ {
+ "type": 2,
+ "opentime": [
+ 3,
+ 4
+ ]
+ },
+ {
+ "type": 3,
+ "opentime": [
+ 5,
+ 6
+ ]
+ },
+ {
+ "type": 4,
+ "opentime": [
+ 1,
+ 7
+ ]
+ }
+]
\ No newline at end of file
diff --git a/comm/const.go b/comm/const.go
index adb02d39e..6c01a0204 100644
--- a/comm/const.go
+++ b/comm/const.go
@@ -57,6 +57,7 @@ const (
ModuleTimer core.M_Modules = "timer" //定时任务模块
ModuleViking core.M_Modules = "viking" //维京远征
ModuleMoonfantasy core.M_Modules = "moonfantasy" //月之秘境模块
+ ModuleHunting core.M_Modules = "hunting" //狩猎
)
//数据表名定义处
@@ -120,6 +121,11 @@ const (
//月之秘境
TableMoonfantasy = "moonfantasy"
+
+ //
+ TableHunting = "hunting"
+ // 维京远征排行榜
+ TableHuntingRank = "huntingrank"
)
//RPC服务接口定义处
diff --git a/modules/hunting/api.go b/modules/hunting/api.go
new file mode 100644
index 000000000..838208ce0
--- /dev/null
+++ b/modules/hunting/api.go
@@ -0,0 +1,37 @@
+package hunting
+
+import (
+ "go_dreamfactory/lego/core"
+ "go_dreamfactory/modules"
+)
+
+const (
+ HuntingGetListResp = "getlist"
+ HuntingChallengeResp = "challenge"
+ HuntingSkillLvResp = "skilllv"
+ HuntingGetRewardResp = "getreward"
+ HuntingBuyResp = "buy"
+ HuntingRankListResp = "ranklist"
+)
+
+type apiComp struct {
+ modules.MCompGate
+ service core.IService
+ configure *configureComp
+ module *Hunting
+}
+
+//组件初始化接口
+func (this *apiComp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
+ err = this.MCompGate.Init(service, module, comp, options)
+ this.module = module.(*Hunting)
+
+ this.service = service
+ return
+}
+
+func (this *apiComp) Start() (err error) {
+ err = this.MCompGate.Start()
+
+ return
+}
diff --git a/modules/hunting/api_buy.go b/modules/hunting/api_buy.go
new file mode 100644
index 000000000..33333ca89
--- /dev/null
+++ b/modules/hunting/api_buy.go
@@ -0,0 +1,74 @@
+package hunting
+
+import (
+ "go_dreamfactory/comm"
+ "go_dreamfactory/pb"
+ cfg "go_dreamfactory/sys/configure/structs"
+ "go_dreamfactory/utils"
+ "time"
+
+ "google.golang.org/protobuf/proto"
+)
+
+//参数校验
+func (this *apiComp) BuyCheck(session comm.IUserSession, req *pb.HuntingBuyReq) (code pb.ErrorCode) {
+ if req.Count <= 0 {
+ code = pb.ErrorCode_ReqParameterError
+ return
+ }
+ return
+}
+
+func (this *apiComp) Buy(session comm.IUserSession, req *pb.HuntingBuyReq) (code pb.ErrorCode, data proto.Message) {
+ var (
+ curByCount int32
+ costRes []*cfg.Gameatn
+ mapData map[string]interface{}
+ )
+ code = this.BuyCheck(session, req)
+ if code != pb.ErrorCode_Success {
+ return // 参数校验失败直接返回
+ }
+ list, err := this.module.modelHunting.getHuntingList(session.GetUserId())
+ if err != nil {
+ code = pb.ErrorCode_DBError
+ return
+ }
+
+ // 校验是不是今天
+ if !utils.IsToday(list.CTime) {
+ list.CTime = time.Now().Unix()
+ list.BuyCount = 0
+ list.ChallengeCount = 0
+
+ mapData["cTime"] = list.CTime
+ mapData["buyCount"] = list.BuyCount
+ mapData["challengeCount"] = list.ChallengeCount
+ } else {
+ curByCount = list.BuyCount
+ }
+ curByCount += req.Count // 当前需要购买的数量
+ //
+ for i := list.BuyCount + 1; i <= curByCount; i++ {
+ _cfg := this.configure.GetBuyChallengeCount(i)
+ if _cfg == nil {
+ code = pb.ErrorCode_VikingBuyMaxCount
+ return
+ }
+ costRes = append(costRes, _cfg.Need...)
+ }
+ // 消耗校验
+ if code = this.module.CheckRes(session, costRes); code != pb.ErrorCode_Success {
+ return
+ }
+
+ //消耗
+ if code = this.module.ConsumeRes(session, costRes, true); code != pb.ErrorCode_Success {
+ return
+ }
+ list.BuyCount = curByCount
+ mapData["buyCount"] = curByCount
+ code = this.module.ModifyHuntingData(session.GetUserId(), mapData)
+ session.SendMsg(string(this.module.GetType()), HuntingBuyResp, &pb.HuntingBuyResp{Data: list})
+ return
+}
diff --git a/modules/hunting/api_challenge.go b/modules/hunting/api_challenge.go
new file mode 100644
index 000000000..5dd7eb7ca
--- /dev/null
+++ b/modules/hunting/api_challenge.go
@@ -0,0 +1,79 @@
+package hunting
+
+import (
+ "go_dreamfactory/comm"
+ "go_dreamfactory/pb"
+ cfg "go_dreamfactory/sys/configure/structs"
+
+ "google.golang.org/protobuf/proto"
+)
+
+//参数校验
+func (this *apiComp) ChallengeCheck(session comm.IUserSession, req *pb.HuntingChallengeReq) (code pb.ErrorCode) {
+ if req.BossType <= 0 && req.Difficulty != 0 {
+ code = pb.ErrorCode_ReqParameterError
+ return
+ }
+ return
+}
+
+///挑战主线关卡
+func (this *apiComp) Challenge(session comm.IUserSession, req *pb.HuntingChallengeReq) (code pb.ErrorCode, data proto.Message) {
+ var (
+ mapData map[string]interface{}
+ newChallenge bool // 新的关卡
+ reward []*cfg.Gameatn
+ )
+ mapData = make(map[string]interface{}, 0)
+ reward = make([]*cfg.Gameatn, 0)
+ code = this.ChallengeCheck(session, req)
+ if code != pb.ErrorCode_Success {
+ return // 参数校验失败直接返回
+ }
+
+ hunting, err := this.module.modelHunting.getHuntingList(session.GetUserId())
+ if err != nil {
+ code = pb.ErrorCode_PagodaNotFound
+ return
+ }
+ cfg := this.module.configure.GetHuntingBossConfigData(req.BossType, req.Difficulty)
+ if cfg != nil {
+ code = pb.ErrorCode_ConfigNoFound
+ return
+ }
+ if value, ok := hunting.Boos[req.BossType]; !ok { // 类型校验
+ code = pb.ErrorCode_VikingBoosType
+ return
+ } else {
+ if value < req.Difficulty {
+ if value+1 != req.Difficulty {
+ code = pb.ErrorCode_VikingLvErr
+ return
+ }
+ newChallenge = true
+ } else { // 挑战历史
+ newChallenge = false
+ }
+ }
+
+ if newChallenge { // 新关卡挑战通过 发放首通奖励
+ if code = this.module.DispenseRes(session, cfg.Firstprize, true); code != pb.ErrorCode_Success {
+ return
+ }
+ hunting.Boos[req.BossType] += 1
+ mapData["boos"] = hunting.Boos
+ hunting.ChallengeTime[req.BossType<<16+req.Difficulty] = 0 // todo 耗时
+ mapData["challengeTime"] = hunting.ChallengeTime
+
+ }
+ // 耗时校验 当前战斗胜利时间消耗小于之前刷新数据
+ hunting.ChallengeTime[req.BossType<<16+req.Difficulty] = 0
+ code = this.module.ModifyHuntingData(session.GetUserId(), mapData)
+ // 发放通关随机奖励
+ this.module.configure.GetDropReward(cfg.Drop, reward) // 获取掉落奖励
+ if code = this.module.DispenseRes(session, reward, true); code != pb.ErrorCode_Success {
+ return
+ }
+ session.SendMsg(string(this.module.GetType()), HuntingChallengeResp, &pb.HuntingChallengeResp{Data: hunting})
+ return
+}
diff --git a/modules/hunting/api_getlist.go b/modules/hunting/api_getlist.go
new file mode 100644
index 000000000..71cc8b800
--- /dev/null
+++ b/modules/hunting/api_getlist.go
@@ -0,0 +1,53 @@
+package hunting
+
+import (
+ "go_dreamfactory/comm"
+ "go_dreamfactory/pb"
+ "go_dreamfactory/utils"
+ "time"
+
+ "go.mongodb.org/mongo-driver/bson/primitive"
+ "google.golang.org/protobuf/proto"
+)
+
+//参数校验
+func (this *apiComp) GetListCheck(session comm.IUserSession, req *pb.HuntingGetListReq) (code pb.ErrorCode) {
+
+ return
+}
+
+func (this *apiComp) GetList(session comm.IUserSession, req *pb.HuntingGetListReq) (code pb.ErrorCode, data proto.Message) {
+
+ code = this.GetListCheck(session, req)
+ if code != pb.ErrorCode_Success {
+ return // 参数校验失败直接返回
+ }
+ list, err := this.module.modelHunting.getHuntingList(session.GetUserId())
+ if err != nil {
+ code = pb.ErrorCode_DBError
+ return
+ }
+ if list == nil {
+ list.Id = primitive.NewObjectID().Hex()
+ list.Uid = session.GetUserId()
+ list.Boos = make(map[int32]int32)
+ _mapType := this.configure.GetHuntingBossTypeConfigData()
+ for k := range _mapType {
+ list.Boos[k] = 0 // 默认难度0
+ }
+ this.module.modelHunting.Add(session.GetUserId(), list) // 写缓存
+ }
+ // 校验 是不是当天
+ if !utils.IsToday(list.CTime) {
+ list.CTime = time.Now().Unix()
+ list.BuyCount = 0
+ list.ChallengeCount = 0
+ mapData := make(map[string]interface{}, 0)
+ mapData["cTime"] = list.CTime
+ mapData["buyCount"] = list.BuyCount
+ mapData["challengeCount"] = list.ChallengeCount
+ code = this.module.ModifyHuntingData(session.GetUserId(), mapData) //修改内存信息
+ }
+ session.SendMsg(string(this.module.GetType()), HuntingGetListResp, &pb.HuntingGetListResp{Data: list})
+ return
+}
diff --git a/modules/hunting/api_ranklist.go b/modules/hunting/api_ranklist.go
new file mode 100644
index 000000000..3c98c529c
--- /dev/null
+++ b/modules/hunting/api_ranklist.go
@@ -0,0 +1,28 @@
+package hunting
+
+import (
+ "go_dreamfactory/comm"
+ "go_dreamfactory/pb"
+
+ "google.golang.org/protobuf/proto"
+)
+
+//参数校验
+func (this *apiComp) RankListCheck(session comm.IUserSession, req *pb.HuntingRankListReq) (code pb.ErrorCode) {
+
+ return
+}
+
+func (this *apiComp) RankList(session comm.IUserSession, req *pb.HuntingRankListReq) (code pb.ErrorCode, data proto.Message) {
+
+ code = this.RankListCheck(session, req)
+ if code != pb.ErrorCode_Success {
+ return // 参数校验失败直接返回
+ }
+ szRank, err := this.module.modulerank.GetRankData()
+ if err != nil {
+ code = pb.ErrorCode_DBError
+ }
+ session.SendMsg(string(this.module.GetType()), HuntingRankListResp, &pb.HuntingRankListResp{Ranks: szRank})
+ return
+}
diff --git a/modules/hunting/comp_configure.go b/modules/hunting/comp_configure.go
new file mode 100644
index 000000000..530b4d122
--- /dev/null
+++ b/modules/hunting/comp_configure.go
@@ -0,0 +1,105 @@
+package hunting
+
+import (
+ "go_dreamfactory/lego/core"
+ "go_dreamfactory/lego/core/cbase"
+ "go_dreamfactory/lego/sys/log"
+ "go_dreamfactory/modules"
+ "go_dreamfactory/sys/configure"
+ cfg "go_dreamfactory/sys/configure/structs"
+ "sync"
+)
+
+const (
+ game_vikingboss = "game_vikingboss.json"
+ game_challenge = "game_vikingchallenge.json"
+)
+
+///配置管理基础组件
+type configureComp struct {
+ cbase.ModuleCompBase
+ hlock sync.RWMutex
+ modules.MCompConfigure
+ _vikingMap map[int64]*cfg.GameHuntingBossData
+}
+
+//组件初始化接口
+func (this *configureComp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
+ err = this.ModuleCompBase.Init(service, module, comp, options)
+
+ this._vikingMap = make(map[int64]*cfg.GameHuntingBossData, 0)
+ configure.RegisterConfigure(game_vikingboss, cfg.NewGameHuntingBoss, func() {
+ if v, err := this.GetConfigure(game_vikingboss); err == nil {
+ if configure, ok := v.(*cfg.GameHuntingBoss); ok {
+ this.hlock.Lock()
+ defer this.hlock.Unlock()
+ for _, value := range configure.GetDataList() {
+ this._vikingMap[int64(value.Type<<16)+int64(value.Difficulty)] = value
+ }
+ return
+ }
+ }
+ log.Errorf("get game_viking conf err:%v", err)
+ return
+ })
+ err = this.LoadConfigure(game_challenge, cfg.NewGameHuntingChallenge)
+
+ // _data := this.GetBuyChallengeCount(1)
+ // log.Debugf("%v", _data)
+ return
+}
+
+// 参数: boss类型 难度
+func (this *configureComp) GetHuntingBossConfigData(bossType int32, difficulty int32) (data *cfg.GameHuntingBossData) {
+
+ return this._vikingMap[int64(bossType<<16)+int64(difficulty)]
+}
+
+//加载多个配置文件
+func (this *configureComp) LoadMultiConfigure(confs map[string]interface{}) (err error) {
+ for k, v := range confs {
+ err = configure.RegisterConfigure(k, v, nil)
+ if err != nil {
+ log.Errorf("配置文件:%s解析失败!", k)
+ break
+ }
+ }
+ return
+}
+
+//读取配置数据
+func (this *configureComp) GetConfigure(name string) (v interface{}, err error) {
+ return configure.GetConfigure(name)
+}
+
+// get boss Type
+func (this *configureComp) GetHuntingBossTypeConfigData() (mapType map[int32]struct{}) {
+
+ mapType = make(map[int32]struct{}, 0)
+ if v, err := this.GetConfigure(game_vikingboss); err == nil {
+ if configure, ok := v.(*cfg.GameHuntingBoss); ok {
+ this.hlock.Lock()
+ defer this.hlock.Unlock()
+ for _, value := range configure.GetDataList() {
+ if _, ok := mapType[value.Type]; !ok {
+ mapType[value.Type] = struct{}{}
+ }
+ }
+
+ }
+ }
+ return
+}
+
+func (this *configureComp) GetBuyChallengeCount(index int32) (data *cfg.GameHuntingChallengeData) {
+ if v, err := this.GetConfigure(game_challenge); err == nil {
+ if configure, ok := v.(*cfg.GameHuntingChallenge); ok {
+ data = configure.Get(index)
+ return
+ }
+ } else {
+ log.Errorf("get game_challenge conf err:%v", err)
+ }
+
+ return
+}
diff --git a/modules/hunting/model_rank.go b/modules/hunting/model_rank.go
new file mode 100644
index 000000000..b5301b65c
--- /dev/null
+++ b/modules/hunting/model_rank.go
@@ -0,0 +1,62 @@
+package hunting
+
+import (
+ "go_dreamfactory/comm"
+ "go_dreamfactory/lego/core"
+ "go_dreamfactory/lego/sys/redis"
+ "go_dreamfactory/modules"
+ "go_dreamfactory/pb"
+)
+
+type ModelRank struct {
+ modules.MCompModel
+ moduleUser *Hunting
+}
+
+func (this *ModelRank) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
+ this.TableName = comm.TableHuntingRank
+ err = this.MCompModel.Init(service, module, comp, options)
+ this.moduleUser = module.(*Hunting)
+ return
+}
+
+//获取用户
+func (this *ModelRank) getUserSession(uid string) (cuser *pb.CacheUser) {
+ cuser = &pb.CacheUser{}
+ if err := this.Get(uid, cuser); err != nil {
+ this.moduleUser.Errorf("GetUserSession err:%v", err)
+ return
+ }
+ return
+}
+
+func (this *ModelRank) AddRank(uId string, data *pb.DBHuntingRank) (err error) {
+ if err = this.Add(uId, data); err != nil {
+ return
+ }
+ return nil
+}
+
+func (this *ModelRank) GetUserRandData(uid string) (result *pb.DBHuntingRank, err error) {
+ result = &pb.DBHuntingRank{}
+ if err = this.Get(uid, result); err != nil && redis.RedisNil != err {
+ return
+ }
+ err = nil
+ return result, err
+}
+
+// 更新排行榜数据
+func (this *ModelRank) ChangeUserRank(uid string, value map[string]interface{}) (err error) {
+ if len(value) == 0 {
+ return nil
+ }
+ return this.Change(uid, value)
+}
+
+func (this *ModelRank) GetRankData() (data []*pb.DBHuntingRank, err error) {
+ data = make([]*pb.DBHuntingRank, 0)
+ err = this.Redis.LRange(comm.TableHuntingRank, 0, -1, &data)
+
+ return
+}
diff --git a/modules/hunting/model_viking.go b/modules/hunting/model_viking.go
new file mode 100644
index 000000000..9f0405fe3
--- /dev/null
+++ b/modules/hunting/model_viking.go
@@ -0,0 +1,41 @@
+package hunting
+
+import (
+ "go_dreamfactory/comm"
+ "go_dreamfactory/lego/core"
+ "go_dreamfactory/lego/sys/redis"
+ "go_dreamfactory/modules"
+ "go_dreamfactory/pb"
+
+ "go.mongodb.org/mongo-driver/mongo"
+ "go.mongodb.org/mongo-driver/x/bsonx"
+)
+
+type modelHunting struct {
+ modules.MCompModel
+ module *Hunting
+}
+
+func (this *modelHunting) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
+ this.TableName = string(comm.TableHunting)
+ err = this.MCompModel.Init(service, module, comp, options)
+ this.module = module.(*Hunting)
+ // uid 创建索引
+ this.DB.CreateIndex(core.SqlTable(this.TableName), mongo.IndexModel{
+ Keys: bsonx.Doc{{Key: "uid", Value: bsonx.Int32(1)}},
+ })
+ return
+}
+
+func (this *modelHunting) getHuntingList(uid string) (result *pb.DBHunting, err error) {
+ result = &pb.DBHunting{}
+ if err = this.Get(uid, result); err != nil && redis.RedisNil != err {
+ return
+ }
+ err = nil
+ return result, err
+}
+
+func (this *modelHunting) modifyHuntingDataByObjId(uid string, data map[string]interface{}) error {
+ return this.Change(uid, data)
+}
diff --git a/modules/hunting/module.go b/modules/hunting/module.go
new file mode 100644
index 000000000..b9a21de97
--- /dev/null
+++ b/modules/hunting/module.go
@@ -0,0 +1,47 @@
+package hunting
+
+import (
+ "go_dreamfactory/comm"
+ "go_dreamfactory/lego/core"
+ "go_dreamfactory/modules"
+ "go_dreamfactory/pb"
+)
+
+type Hunting struct {
+ modules.ModuleBase
+ modelHunting *modelHunting
+ api *apiComp
+ configure *configureComp
+ modulerank *ModelRank
+}
+
+func NewModule() core.IModule {
+ return &Hunting{}
+}
+
+func (this *Hunting) GetType() core.M_Modules {
+ return comm.ModuleHunting
+}
+
+func (this *Hunting) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) {
+ err = this.ModuleBase.Init(service, module, options)
+
+ return
+}
+
+func (this *Hunting) OnInstallComp() {
+ this.ModuleBase.OnInstallComp()
+ this.api = this.RegisterComp(new(apiComp)).(*apiComp)
+ this.modelHunting = this.RegisterComp(new(modelHunting)).(*modelHunting)
+ this.modulerank = this.RegisterComp(new(ModelRank)).(*ModelRank)
+ this.configure = this.RegisterComp(new(configureComp)).(*configureComp)
+}
+
+// 接口信息
+func (this *Hunting) ModifyHuntingData(uid string, data map[string]interface{}) (code pb.ErrorCode) {
+ err := this.modelHunting.modifyHuntingDataByObjId(uid, data)
+ if err != nil {
+ code = pb.ErrorCode_DBError
+ }
+ return
+}
diff --git a/modules/smithy/api.go b/modules/smithy/api.go
index a633bd6de..7a0b8715f 100644
--- a/modules/smithy/api.go
+++ b/modules/smithy/api.go
@@ -16,9 +16,8 @@ const (
type apiComp struct {
modules.MCompGate
- service core.IService
- configure *configureComp
- module *Smithy
+ service core.IService
+ module *Smithy
}
//组件初始化接口
diff --git a/modules/smithy/api_createorder.go b/modules/smithy/api_createorder.go
index 289c8120e..67e32f26c 100644
--- a/modules/smithy/api_createorder.go
+++ b/modules/smithy/api_createorder.go
@@ -43,12 +43,13 @@ func (this *apiComp) CreateOrder(session comm.IUserSession, req *pb.SmithyCreate
}
costTime += needTime * order.Count
}
+ if _smithy.Ctime == 0 {
+ _smithy.Ctime = time.Now().Unix()
+ }
_smithy.Orders = append(_smithy.Orders, req.Order...) // 直接追加订单数据
-
+ _smithy.OrderCostTime += costTime
if _smithy.Clang == nil || (_smithy.Clang != nil && _smithy.Clang.ETime == 0) {
- if _smithy.Ctime == 0 {
- _smithy.Ctime = time.Now().Unix()
- }
+
if !utils.IsToday(_smithy.Ctime) {
_smithy.Ctime = time.Now().Unix()
_smithy.OrderCostTime = 0
@@ -91,6 +92,13 @@ func (this *apiComp) CreateOrder(session comm.IUserSession, req *pb.SmithyCreate
// 校验通过 写数据
mapData := make(map[string]interface{}, 0)
+ sz := make([]*pb.OrderClang, 0)
+ for _, v := range _smithy.Orders {
+ if v.Count != 0 {
+ sz = append(sz, v)
+ }
+ }
+ _smithy.Orders = sz
mapData["orders"] = _smithy.Orders
mapData["orderCostTime"] = _smithy.OrderCostTime
mapData["clang"] = _smithy.Clang // 正在做的
diff --git a/modules/smithy/api_deskskilllv.go b/modules/smithy/api_deskskilllv.go
index 53fb8e5f3..0cd464d70 100644
--- a/modules/smithy/api_deskskilllv.go
+++ b/modules/smithy/api_deskskilllv.go
@@ -37,10 +37,10 @@ func (this *apiComp) DeskSkillLv(session comm.IUserSession, req *pb.SmithyDeskSk
if k == req.DeskType {
bFindSkill = true
// 查询配置文件
- curSkillCfg = this.configure.GetSmithyConfigData(k, v)
+ curSkillCfg = this.module.configure.GetSmithyConfigData(k, v)
if curSkillCfg != nil && curSkillCfg.Starupneed != nil {
//获取下一级
- NextSkillCfg := this.configure.GetSmithyConfigData(k, v+1)
+ NextSkillCfg := this.module.configure.GetSmithyConfigData(k, v+1)
if NextSkillCfg == nil {
code = pb.ErrorCode_GourmetSkillMaxLv
return
diff --git a/modules/smithy/api_stoveskilllv.go b/modules/smithy/api_stoveskilllv.go
index 9fc36f2a7..e4f3fcd0c 100644
--- a/modules/smithy/api_stoveskilllv.go
+++ b/modules/smithy/api_stoveskilllv.go
@@ -26,12 +26,12 @@ func (this *apiComp) StoveSkillLv(session comm.IUserSession, req *pb.SmithyStove
code = pb.ErrorCode_DBError
return
}
- curLvData := this.configure.GetSmithyStoveConfigData(_smithy.StoveLv)
+ curLvData := this.module.configure.GetSmithyStoveConfigData(_smithy.StoveLv)
if curLvData == nil {
code = pb.ErrorCode_GourmetSkillMaxLv
return
}
- nextLvData := this.configure.GetSmithyStoveConfigData(_smithy.StoveLv + 1)
+ nextLvData := this.module.configure.GetSmithyStoveConfigData(_smithy.StoveLv + 1)
if nextLvData == nil {
code = pb.ErrorCode_GourmetSkillMaxLv
return
diff --git a/pb/hunting_db.pb.go b/pb/hunting_db.pb.go
new file mode 100644
index 000000000..d26605ccf
--- /dev/null
+++ b/pb/hunting_db.pb.go
@@ -0,0 +1,344 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.28.0
+// protoc v3.20.0
+// source: hunting/hunting_db.proto
+
+package pb
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type DBHunting struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id" bson:"_id"` //ID
+ Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid" bson:"uid"` //用户ID
+ ChallengeCount int32 `protobuf:"varint,3,opt,name=challengeCount,proto3" json:"challengeCount" bson:"challengeCount"` //挑战次数
+ Boos map[int32]int32 `protobuf:"bytes,4,rep,name=boos,proto3" json:"boos" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // key boos 类型 value 难度
+ BuyCount int32 `protobuf:"varint,5,opt,name=buyCount,proto3" json:"buyCount" bson:"buyCount"` //购买次数
+ CTime int64 `protobuf:"varint,6,opt,name=cTime,proto3" json:"cTime" bson:"cTime"` //修改时间
+ ChallengeTime map[int32]int32 `protobuf:"bytes,7,rep,name=challengeTime,proto3" json:"challengeTime" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3" bson:"challengeTime"` //每个难度通关时间
+}
+
+func (x *DBHunting) Reset() {
+ *x = DBHunting{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_hunting_hunting_db_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *DBHunting) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DBHunting) ProtoMessage() {}
+
+func (x *DBHunting) ProtoReflect() protoreflect.Message {
+ mi := &file_hunting_hunting_db_proto_msgTypes[0]
+ 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 DBHunting.ProtoReflect.Descriptor instead.
+func (*DBHunting) Descriptor() ([]byte, []int) {
+ return file_hunting_hunting_db_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *DBHunting) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+func (x *DBHunting) GetUid() string {
+ if x != nil {
+ return x.Uid
+ }
+ return ""
+}
+
+func (x *DBHunting) GetChallengeCount() int32 {
+ if x != nil {
+ return x.ChallengeCount
+ }
+ return 0
+}
+
+func (x *DBHunting) GetBoos() map[int32]int32 {
+ if x != nil {
+ return x.Boos
+ }
+ return nil
+}
+
+func (x *DBHunting) GetBuyCount() int32 {
+ if x != nil {
+ return x.BuyCount
+ }
+ return 0
+}
+
+func (x *DBHunting) GetCTime() int64 {
+ if x != nil {
+ return x.CTime
+ }
+ return 0
+}
+
+func (x *DBHunting) GetChallengeTime() map[int32]int32 {
+ if x != nil {
+ return x.ChallengeTime
+ }
+ return nil
+}
+
+// 维京远征排行榜
+type DBHuntingRank struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id" bson:"_id"` //ID
+ Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid" bson:"uid"` //用户ID
+ Difficulty int32 `protobuf:"varint,3,opt,name=difficulty,proto3" json:"difficulty"` // 难度
+ Bosstype int32 `protobuf:"varint,4,opt,name=bosstype,proto3" json:"bosstype"` // boss类型塔类型
+ Nickname string `protobuf:"bytes,5,opt,name=nickname,proto3" json:"nickname"` // 昵称
+ Icon string `protobuf:"bytes,6,opt,name=icon,proto3" json:"icon"` // 玩家头像
+ Lv int32 `protobuf:"varint,7,opt,name=lv,proto3" json:"lv"` // 玩家等级
+ CostTime int32 `protobuf:"varint,8,opt,name=costTime,proto3" json:"costTime" bson:"costTime"` //闯关耗时 单位s
+}
+
+func (x *DBHuntingRank) Reset() {
+ *x = DBHuntingRank{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_hunting_hunting_db_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *DBHuntingRank) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DBHuntingRank) ProtoMessage() {}
+
+func (x *DBHuntingRank) ProtoReflect() protoreflect.Message {
+ mi := &file_hunting_hunting_db_proto_msgTypes[1]
+ 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 DBHuntingRank.ProtoReflect.Descriptor instead.
+func (*DBHuntingRank) Descriptor() ([]byte, []int) {
+ return file_hunting_hunting_db_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *DBHuntingRank) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+func (x *DBHuntingRank) GetUid() string {
+ if x != nil {
+ return x.Uid
+ }
+ return ""
+}
+
+func (x *DBHuntingRank) GetDifficulty() int32 {
+ if x != nil {
+ return x.Difficulty
+ }
+ return 0
+}
+
+func (x *DBHuntingRank) GetBosstype() int32 {
+ if x != nil {
+ return x.Bosstype
+ }
+ return 0
+}
+
+func (x *DBHuntingRank) GetNickname() string {
+ if x != nil {
+ return x.Nickname
+ }
+ return ""
+}
+
+func (x *DBHuntingRank) GetIcon() string {
+ if x != nil {
+ return x.Icon
+ }
+ return ""
+}
+
+func (x *DBHuntingRank) GetLv() int32 {
+ if x != nil {
+ return x.Lv
+ }
+ return 0
+}
+
+func (x *DBHuntingRank) GetCostTime() int32 {
+ if x != nil {
+ return x.CostTime
+ }
+ return 0
+}
+
+var File_hunting_hunting_db_proto protoreflect.FileDescriptor
+
+var file_hunting_hunting_db_proto_rawDesc = []byte{
+ 0x0a, 0x18, 0x68, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x68, 0x75, 0x6e, 0x74, 0x69, 0x6e,
+ 0x67, 0x5f, 0x64, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf1, 0x02, 0x0a, 0x09, 0x44,
+ 0x42, 0x48, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 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, 0x26, 0x0a, 0x0e, 0x63, 0x68,
+ 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01,
+ 0x28, 0x05, 0x52, 0x0e, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x75,
+ 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b,
+ 0x32, 0x14, 0x2e, 0x44, 0x42, 0x48, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x42, 0x6f, 0x6f,
+ 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x73, 0x12, 0x1a, 0x0a, 0x08,
+ 0x62, 0x75, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08,
+ 0x62, 0x75, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x54, 0x69, 0x6d,
+ 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x43,
+ 0x0a, 0x0d, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18,
+ 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x44, 0x42, 0x48, 0x75, 0x6e, 0x74, 0x69, 0x6e,
+ 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x45,
+ 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x54,
+ 0x69, 0x6d, 0x65, 0x1a, 0x37, 0x0a, 0x09, 0x42, 0x6f, 0x6f, 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, 0x1a, 0x40, 0x0a, 0x12,
+ 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x54, 0x69, 0x6d, 0x65, 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, 0xc9,
+ 0x01, 0x0a, 0x0d, 0x44, 0x42, 0x48, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x61, 0x6e, 0x6b,
+ 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, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c,
+ 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x6f, 0x73, 0x73, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04,
+ 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x62, 0x6f, 0x73, 0x73, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a,
+ 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63,
+ 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x0e,
+ 0x0a, 0x02, 0x6c, 0x76, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x6c, 0x76, 0x12, 0x1a,
+ 0x0a, 0x08, 0x63, 0x6f, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05,
+ 0x52, 0x08, 0x63, 0x6f, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b,
+ 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_hunting_hunting_db_proto_rawDescOnce sync.Once
+ file_hunting_hunting_db_proto_rawDescData = file_hunting_hunting_db_proto_rawDesc
+)
+
+func file_hunting_hunting_db_proto_rawDescGZIP() []byte {
+ file_hunting_hunting_db_proto_rawDescOnce.Do(func() {
+ file_hunting_hunting_db_proto_rawDescData = protoimpl.X.CompressGZIP(file_hunting_hunting_db_proto_rawDescData)
+ })
+ return file_hunting_hunting_db_proto_rawDescData
+}
+
+var file_hunting_hunting_db_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
+var file_hunting_hunting_db_proto_goTypes = []interface{}{
+ (*DBHunting)(nil), // 0: DBHunting
+ (*DBHuntingRank)(nil), // 1: DBHuntingRank
+ nil, // 2: DBHunting.BoosEntry
+ nil, // 3: DBHunting.ChallengeTimeEntry
+}
+var file_hunting_hunting_db_proto_depIdxs = []int32{
+ 2, // 0: DBHunting.boos:type_name -> DBHunting.BoosEntry
+ 3, // 1: DBHunting.challengeTime:type_name -> DBHunting.ChallengeTimeEntry
+ 2, // [2:2] is the sub-list for method output_type
+ 2, // [2:2] is the sub-list for method input_type
+ 2, // [2:2] is the sub-list for extension type_name
+ 2, // [2:2] is the sub-list for extension extendee
+ 0, // [0:2] is the sub-list for field type_name
+}
+
+func init() { file_hunting_hunting_db_proto_init() }
+func file_hunting_hunting_db_proto_init() {
+ if File_hunting_hunting_db_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_hunting_hunting_db_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*DBHunting); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_hunting_hunting_db_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*DBHuntingRank); 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{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_hunting_hunting_db_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 4,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_hunting_hunting_db_proto_goTypes,
+ DependencyIndexes: file_hunting_hunting_db_proto_depIdxs,
+ MessageInfos: file_hunting_hunting_db_proto_msgTypes,
+ }.Build()
+ File_hunting_hunting_db_proto = out.File
+ file_hunting_hunting_db_proto_rawDesc = nil
+ file_hunting_hunting_db_proto_goTypes = nil
+ file_hunting_hunting_db_proto_depIdxs = nil
+}
diff --git a/pb/hunting_msg.pb.go b/pb/hunting_msg.pb.go
new file mode 100644
index 000000000..8933626bc
--- /dev/null
+++ b/pb/hunting_msg.pb.go
@@ -0,0 +1,585 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.28.0
+// protoc v3.20.0
+// source: hunting/hunting_msg.proto
+
+package pb
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type HuntingGetListReq struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *HuntingGetListReq) Reset() {
+ *x = HuntingGetListReq{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_hunting_hunting_msg_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *HuntingGetListReq) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HuntingGetListReq) ProtoMessage() {}
+
+func (x *HuntingGetListReq) ProtoReflect() protoreflect.Message {
+ mi := &file_hunting_hunting_msg_proto_msgTypes[0]
+ 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 HuntingGetListReq.ProtoReflect.Descriptor instead.
+func (*HuntingGetListReq) Descriptor() ([]byte, []int) {
+ return file_hunting_hunting_msg_proto_rawDescGZIP(), []int{0}
+}
+
+type HuntingGetListResp struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Data *DBHunting `protobuf:"bytes,1,opt,name=data,proto3" json:"data"`
+}
+
+func (x *HuntingGetListResp) Reset() {
+ *x = HuntingGetListResp{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_hunting_hunting_msg_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *HuntingGetListResp) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HuntingGetListResp) ProtoMessage() {}
+
+func (x *HuntingGetListResp) ProtoReflect() protoreflect.Message {
+ mi := &file_hunting_hunting_msg_proto_msgTypes[1]
+ 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 HuntingGetListResp.ProtoReflect.Descriptor instead.
+func (*HuntingGetListResp) Descriptor() ([]byte, []int) {
+ return file_hunting_hunting_msg_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *HuntingGetListResp) GetData() *DBHunting {
+ if x != nil {
+ return x.Data
+ }
+ return nil
+}
+
+// 挑战
+type HuntingChallengeReq struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ BossType int32 `protobuf:"varint,1,opt,name=bossType,proto3" json:"bossType"` // boos 类型
+ Difficulty int32 `protobuf:"varint,2,opt,name=difficulty,proto3" json:"difficulty"` // 难度
+}
+
+func (x *HuntingChallengeReq) Reset() {
+ *x = HuntingChallengeReq{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_hunting_hunting_msg_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *HuntingChallengeReq) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HuntingChallengeReq) ProtoMessage() {}
+
+func (x *HuntingChallengeReq) ProtoReflect() protoreflect.Message {
+ mi := &file_hunting_hunting_msg_proto_msgTypes[2]
+ 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 HuntingChallengeReq.ProtoReflect.Descriptor instead.
+func (*HuntingChallengeReq) Descriptor() ([]byte, []int) {
+ return file_hunting_hunting_msg_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *HuntingChallengeReq) GetBossType() int32 {
+ if x != nil {
+ return x.BossType
+ }
+ return 0
+}
+
+func (x *HuntingChallengeReq) GetDifficulty() int32 {
+ if x != nil {
+ return x.Difficulty
+ }
+ return 0
+}
+
+type HuntingChallengeResp struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Data *DBHunting `protobuf:"bytes,1,opt,name=data,proto3" json:"data"`
+}
+
+func (x *HuntingChallengeResp) Reset() {
+ *x = HuntingChallengeResp{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_hunting_hunting_msg_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *HuntingChallengeResp) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HuntingChallengeResp) ProtoMessage() {}
+
+func (x *HuntingChallengeResp) ProtoReflect() protoreflect.Message {
+ mi := &file_hunting_hunting_msg_proto_msgTypes[3]
+ 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 HuntingChallengeResp.ProtoReflect.Descriptor instead.
+func (*HuntingChallengeResp) Descriptor() ([]byte, []int) {
+ return file_hunting_hunting_msg_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *HuntingChallengeResp) GetData() *DBHunting {
+ if x != nil {
+ return x.Data
+ }
+ return nil
+}
+
+// 购买
+type HuntingBuyReq struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Count int32 `protobuf:"varint,1,opt,name=count,proto3" json:"count"` // 购买次数
+}
+
+func (x *HuntingBuyReq) Reset() {
+ *x = HuntingBuyReq{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_hunting_hunting_msg_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *HuntingBuyReq) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HuntingBuyReq) ProtoMessage() {}
+
+func (x *HuntingBuyReq) ProtoReflect() protoreflect.Message {
+ mi := &file_hunting_hunting_msg_proto_msgTypes[4]
+ 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 HuntingBuyReq.ProtoReflect.Descriptor instead.
+func (*HuntingBuyReq) Descriptor() ([]byte, []int) {
+ return file_hunting_hunting_msg_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *HuntingBuyReq) GetCount() int32 {
+ if x != nil {
+ return x.Count
+ }
+ return 0
+}
+
+type HuntingBuyResp struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Data *DBHunting `protobuf:"bytes,1,opt,name=data,proto3" json:"data"`
+}
+
+func (x *HuntingBuyResp) Reset() {
+ *x = HuntingBuyResp{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_hunting_hunting_msg_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *HuntingBuyResp) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HuntingBuyResp) ProtoMessage() {}
+
+func (x *HuntingBuyResp) ProtoReflect() protoreflect.Message {
+ mi := &file_hunting_hunting_msg_proto_msgTypes[5]
+ 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 HuntingBuyResp.ProtoReflect.Descriptor instead.
+func (*HuntingBuyResp) Descriptor() ([]byte, []int) {
+ return file_hunting_hunting_msg_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *HuntingBuyResp) GetData() *DBHunting {
+ if x != nil {
+ return x.Data
+ }
+ return nil
+}
+
+// 排行榜
+type HuntingRankListReq struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *HuntingRankListReq) Reset() {
+ *x = HuntingRankListReq{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_hunting_hunting_msg_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *HuntingRankListReq) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HuntingRankListReq) ProtoMessage() {}
+
+func (x *HuntingRankListReq) ProtoReflect() protoreflect.Message {
+ mi := &file_hunting_hunting_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 HuntingRankListReq.ProtoReflect.Descriptor instead.
+func (*HuntingRankListReq) Descriptor() ([]byte, []int) {
+ return file_hunting_hunting_msg_proto_rawDescGZIP(), []int{6}
+}
+
+type HuntingRankListResp struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Ranks []*DBHuntingRank `protobuf:"bytes,1,rep,name=ranks,proto3" json:"ranks"` // 排行数据 有序的 注意boss类型
+}
+
+func (x *HuntingRankListResp) Reset() {
+ *x = HuntingRankListResp{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_hunting_hunting_msg_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *HuntingRankListResp) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HuntingRankListResp) ProtoMessage() {}
+
+func (x *HuntingRankListResp) ProtoReflect() protoreflect.Message {
+ mi := &file_hunting_hunting_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 HuntingRankListResp.ProtoReflect.Descriptor instead.
+func (*HuntingRankListResp) Descriptor() ([]byte, []int) {
+ return file_hunting_hunting_msg_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *HuntingRankListResp) GetRanks() []*DBHuntingRank {
+ if x != nil {
+ return x.Ranks
+ }
+ return nil
+}
+
+var File_hunting_hunting_msg_proto protoreflect.FileDescriptor
+
+var file_hunting_hunting_msg_proto_rawDesc = []byte{
+ 0x0a, 0x19, 0x68, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x68, 0x75, 0x6e, 0x74, 0x69, 0x6e,
+ 0x67, 0x5f, 0x6d, 0x73, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x68, 0x75, 0x6e,
+ 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x68, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x62, 0x2e,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x13, 0x0a, 0x11, 0x48, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67,
+ 0x47, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x22, 0x34, 0x0a, 0x12, 0x48, 0x75,
+ 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70,
+ 0x12, 0x1e, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a,
+ 0x2e, 0x44, 0x42, 0x48, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61,
+ 0x22, 0x51, 0x0a, 0x13, 0x48, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6c, 0x6c,
+ 0x65, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x6f, 0x73, 0x73, 0x54,
+ 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x62, 0x6f, 0x73, 0x73, 0x54,
+ 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74,
+ 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75,
+ 0x6c, 0x74, 0x79, 0x22, 0x36, 0x0a, 0x14, 0x48, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x68,
+ 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1e, 0x0a, 0x04, 0x64,
+ 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x44, 0x42, 0x48, 0x75,
+ 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x25, 0x0a, 0x0d, 0x48,
+ 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x75, 0x79, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05,
+ 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75,
+ 0x6e, 0x74, 0x22, 0x30, 0x0a, 0x0e, 0x48, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x75, 0x79,
+ 0x52, 0x65, 0x73, 0x70, 0x12, 0x1e, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x44, 0x42, 0x48, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x04,
+ 0x64, 0x61, 0x74, 0x61, 0x22, 0x14, 0x0a, 0x12, 0x48, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x52,
+ 0x61, 0x6e, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x22, 0x3b, 0x0a, 0x13, 0x48, 0x75,
+ 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73,
+ 0x70, 0x12, 0x24, 0x0a, 0x05, 0x72, 0x61, 0x6e, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
+ 0x32, 0x0e, 0x2e, 0x44, 0x42, 0x48, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x61, 0x6e, 0x6b,
+ 0x52, 0x05, 0x72, 0x61, 0x6e, 0x6b, 0x73, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62,
+ 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_hunting_hunting_msg_proto_rawDescOnce sync.Once
+ file_hunting_hunting_msg_proto_rawDescData = file_hunting_hunting_msg_proto_rawDesc
+)
+
+func file_hunting_hunting_msg_proto_rawDescGZIP() []byte {
+ file_hunting_hunting_msg_proto_rawDescOnce.Do(func() {
+ file_hunting_hunting_msg_proto_rawDescData = protoimpl.X.CompressGZIP(file_hunting_hunting_msg_proto_rawDescData)
+ })
+ return file_hunting_hunting_msg_proto_rawDescData
+}
+
+var file_hunting_hunting_msg_proto_msgTypes = make([]protoimpl.MessageInfo, 8)
+var file_hunting_hunting_msg_proto_goTypes = []interface{}{
+ (*HuntingGetListReq)(nil), // 0: HuntingGetListReq
+ (*HuntingGetListResp)(nil), // 1: HuntingGetListResp
+ (*HuntingChallengeReq)(nil), // 2: HuntingChallengeReq
+ (*HuntingChallengeResp)(nil), // 3: HuntingChallengeResp
+ (*HuntingBuyReq)(nil), // 4: HuntingBuyReq
+ (*HuntingBuyResp)(nil), // 5: HuntingBuyResp
+ (*HuntingRankListReq)(nil), // 6: HuntingRankListReq
+ (*HuntingRankListResp)(nil), // 7: HuntingRankListResp
+ (*DBHunting)(nil), // 8: DBHunting
+ (*DBHuntingRank)(nil), // 9: DBHuntingRank
+}
+var file_hunting_hunting_msg_proto_depIdxs = []int32{
+ 8, // 0: HuntingGetListResp.data:type_name -> DBHunting
+ 8, // 1: HuntingChallengeResp.data:type_name -> DBHunting
+ 8, // 2: HuntingBuyResp.data:type_name -> DBHunting
+ 9, // 3: HuntingRankListResp.ranks:type_name -> DBHuntingRank
+ 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_hunting_hunting_msg_proto_init() }
+func file_hunting_hunting_msg_proto_init() {
+ if File_hunting_hunting_msg_proto != nil {
+ return
+ }
+ file_hunting_hunting_db_proto_init()
+ if !protoimpl.UnsafeEnabled {
+ file_hunting_hunting_msg_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*HuntingGetListReq); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_hunting_hunting_msg_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*HuntingGetListResp); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_hunting_hunting_msg_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*HuntingChallengeReq); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_hunting_hunting_msg_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*HuntingChallengeResp); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_hunting_hunting_msg_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*HuntingBuyReq); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_hunting_hunting_msg_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*HuntingBuyResp); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_hunting_hunting_msg_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*HuntingRankListReq); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_hunting_hunting_msg_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*HuntingRankListResp); 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{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_hunting_hunting_msg_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 8,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_hunting_hunting_msg_proto_goTypes,
+ DependencyIndexes: file_hunting_hunting_msg_proto_depIdxs,
+ MessageInfos: file_hunting_hunting_msg_proto_msgTypes,
+ }.Build()
+ File_hunting_hunting_msg_proto = out.File
+ file_hunting_hunting_msg_proto_rawDesc = nil
+ file_hunting_hunting_msg_proto_goTypes = nil
+ file_hunting_hunting_msg_proto_depIdxs = nil
+}
diff --git a/sys/configure/structs/Game.HuntingBoss.go b/sys/configure/structs/Game.HuntingBoss.go
new file mode 100644
index 000000000..08a506ae5
--- /dev/null
+++ b/sys/configure/structs/Game.HuntingBoss.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 GameHuntingBoss struct {
+ _dataMap map[int32]*GameHuntingBossData
+ _dataList []*GameHuntingBossData
+}
+
+func NewGameHuntingBoss(_buf []map[string]interface{}) (*GameHuntingBoss, error) {
+ _dataList := make([]*GameHuntingBossData, 0, len(_buf))
+ dataMap := make(map[int32]*GameHuntingBossData)
+ for _, _ele_ := range _buf {
+ if _v, err2 := DeserializeGameHuntingBossData(_ele_); err2 != nil {
+ return nil, err2
+ } else {
+ _dataList = append(_dataList, _v)
+ dataMap[_v.Id] = _v
+ }
+ }
+ return &GameHuntingBoss{_dataList:_dataList, _dataMap:dataMap}, nil
+}
+
+func (table *GameHuntingBoss) GetDataMap() map[int32]*GameHuntingBossData {
+ return table._dataMap
+}
+
+func (table *GameHuntingBoss) GetDataList() []*GameHuntingBossData {
+ return table._dataList
+}
+
+func (table *GameHuntingBoss) Get(key int32) *GameHuntingBossData {
+ return table._dataMap[key]
+}
+
+
diff --git a/sys/configure/structs/Game.HuntingBossData.go b/sys/configure/structs/Game.HuntingBossData.go
new file mode 100644
index 000000000..105d45556
--- /dev/null
+++ b/sys/configure/structs/Game.HuntingBossData.go
@@ -0,0 +1,167 @@
+//------------------------------------------------------------------------------
+//
+// 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 GameHuntingBossData struct {
+ Id int32
+ Type int32
+ Name string
+ Difficulty int32
+ Captionrecommend []int32
+ Firstprize []*Gameatn
+ Dropshow []*Gameatn
+ Drop int32
+ Bossmodel int32
+ Npcid1 []int32
+ Npc1lv int32
+ Npc1hp float32
+ Npc1atk float32
+ Npc1def float32
+ Npcid2 []int32
+ Npc2lv int32
+ Npc2hp float32
+ Npc2atk float32
+ Npc2def float32
+ Npcid3 []int32
+ Npc3lv int32
+ Npc3hp float32
+ Npc3atk float32
+ Npc3def float32
+ Bosslv int32
+ Bosshp float32
+ Bossatk float32
+ Bossdef float32
+}
+
+const TypeId_GameHuntingBossData = -450881718
+
+func (*GameHuntingBossData) GetTypeId() int32 {
+ return -450881718
+}
+
+func (_v *GameHuntingBossData)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["type"].(float64); !_ok_ { err = errors.New("type error"); return }; _v.Type = 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; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["difficulty"].(float64); !_ok_ { err = errors.New("difficulty error"); return }; _v.Difficulty = int32(_tempNum_) }
+ {
+ var _arr_ []interface{}
+ var _ok_ bool
+ if _arr_, _ok_ = _buf["captionrecommend"].([]interface{}); !_ok_ { err = errors.New("captionrecommend error"); return }
+
+ _v.Captionrecommend = 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.Captionrecommend = append(_v.Captionrecommend, _list_v_)
+ }
+ }
+
+ {
+ var _arr_ []interface{}
+ var _ok_ bool
+ if _arr_, _ok_ = _buf["firstprize"].([]interface{}); !_ok_ { err = errors.New("firstprize error"); return }
+
+ _v.Firstprize = 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.Firstprize = append(_v.Firstprize, _list_v_)
+ }
+ }
+
+ {
+ var _arr_ []interface{}
+ var _ok_ bool
+ if _arr_, _ok_ = _buf["dropshow"].([]interface{}); !_ok_ { err = errors.New("dropshow error"); return }
+
+ _v.Dropshow = 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.Dropshow = append(_v.Dropshow, _list_v_)
+ }
+ }
+
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["drop"].(float64); !_ok_ { err = errors.New("drop error"); return }; _v.Drop = int32(_tempNum_) }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["bossmodel"].(float64); !_ok_ { err = errors.New("bossmodel error"); return }; _v.Bossmodel = int32(_tempNum_) }
+ {
+ var _arr_ []interface{}
+ var _ok_ bool
+ if _arr_, _ok_ = _buf["npcid1"].([]interface{}); !_ok_ { err = errors.New("npcid1 error"); return }
+
+ _v.Npcid1 = 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.Npcid1 = append(_v.Npcid1, _list_v_)
+ }
+ }
+
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["npc1lv"].(float64); !_ok_ { err = errors.New("npc1lv error"); return }; _v.Npc1lv = int32(_tempNum_) }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["npc1hp"].(float64); !_ok_ { err = errors.New("npc1hp error"); return }; _v.Npc1hp = float32(_tempNum_) }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["npc1atk"].(float64); !_ok_ { err = errors.New("npc1atk error"); return }; _v.Npc1atk = float32(_tempNum_) }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["npc1def"].(float64); !_ok_ { err = errors.New("npc1def error"); return }; _v.Npc1def = float32(_tempNum_) }
+ {
+ var _arr_ []interface{}
+ var _ok_ bool
+ if _arr_, _ok_ = _buf["npcid2"].([]interface{}); !_ok_ { err = errors.New("npcid2 error"); return }
+
+ _v.Npcid2 = 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.Npcid2 = append(_v.Npcid2, _list_v_)
+ }
+ }
+
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["npc2lv"].(float64); !_ok_ { err = errors.New("npc2lv error"); return }; _v.Npc2lv = int32(_tempNum_) }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["npc2hp"].(float64); !_ok_ { err = errors.New("npc2hp error"); return }; _v.Npc2hp = float32(_tempNum_) }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["npc2atk"].(float64); !_ok_ { err = errors.New("npc2atk error"); return }; _v.Npc2atk = float32(_tempNum_) }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["npc2def"].(float64); !_ok_ { err = errors.New("npc2def error"); return }; _v.Npc2def = float32(_tempNum_) }
+ {
+ var _arr_ []interface{}
+ var _ok_ bool
+ if _arr_, _ok_ = _buf["npcid3"].([]interface{}); !_ok_ { err = errors.New("npcid3 error"); return }
+
+ _v.Npcid3 = 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.Npcid3 = append(_v.Npcid3, _list_v_)
+ }
+ }
+
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["npc3lv"].(float64); !_ok_ { err = errors.New("npc3lv error"); return }; _v.Npc3lv = int32(_tempNum_) }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["npc3hp"].(float64); !_ok_ { err = errors.New("npc3hp error"); return }; _v.Npc3hp = float32(_tempNum_) }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["npc3atk"].(float64); !_ok_ { err = errors.New("npc3atk error"); return }; _v.Npc3atk = float32(_tempNum_) }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["npc3def"].(float64); !_ok_ { err = errors.New("npc3def error"); return }; _v.Npc3def = float32(_tempNum_) }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["bosslv"].(float64); !_ok_ { err = errors.New("bosslv error"); return }; _v.Bosslv = int32(_tempNum_) }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["bosshp"].(float64); !_ok_ { err = errors.New("bosshp error"); return }; _v.Bosshp = float32(_tempNum_) }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["bossatk"].(float64); !_ok_ { err = errors.New("bossatk error"); return }; _v.Bossatk = float32(_tempNum_) }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["bossdef"].(float64); !_ok_ { err = errors.New("bossdef error"); return }; _v.Bossdef = float32(_tempNum_) }
+ return
+}
+
+func DeserializeGameHuntingBossData(_buf map[string]interface{}) (*GameHuntingBossData, error) {
+ v := &GameHuntingBossData{}
+ if err := v.Deserialize(_buf); err == nil {
+ return v, nil
+ } else {
+ return nil, err
+ }
+}
diff --git a/sys/configure/structs/Game.HuntingChallenge.go b/sys/configure/structs/Game.HuntingChallenge.go
new file mode 100644
index 000000000..4cc4ec234
--- /dev/null
+++ b/sys/configure/structs/Game.HuntingChallenge.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 GameHuntingChallenge struct {
+ _dataMap map[int32]*GameHuntingChallengeData
+ _dataList []*GameHuntingChallengeData
+}
+
+func NewGameHuntingChallenge(_buf []map[string]interface{}) (*GameHuntingChallenge, error) {
+ _dataList := make([]*GameHuntingChallengeData, 0, len(_buf))
+ dataMap := make(map[int32]*GameHuntingChallengeData)
+ for _, _ele_ := range _buf {
+ if _v, err2 := DeserializeGameHuntingChallengeData(_ele_); err2 != nil {
+ return nil, err2
+ } else {
+ _dataList = append(_dataList, _v)
+ dataMap[_v.Buynum] = _v
+ }
+ }
+ return &GameHuntingChallenge{_dataList:_dataList, _dataMap:dataMap}, nil
+}
+
+func (table *GameHuntingChallenge) GetDataMap() map[int32]*GameHuntingChallengeData {
+ return table._dataMap
+}
+
+func (table *GameHuntingChallenge) GetDataList() []*GameHuntingChallengeData {
+ return table._dataList
+}
+
+func (table *GameHuntingChallenge) Get(key int32) *GameHuntingChallengeData {
+ return table._dataMap[key]
+}
+
+
diff --git a/sys/configure/structs/Game.HuntingChallengeData.go b/sys/configure/structs/Game.HuntingChallengeData.go
new file mode 100644
index 000000000..1a8b803cf
--- /dev/null
+++ b/sys/configure/structs/Game.HuntingChallengeData.go
@@ -0,0 +1,50 @@
+//------------------------------------------------------------------------------
+//
+// 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 GameHuntingChallengeData struct {
+ Buynum int32
+ Need []*Gameatn
+}
+
+const TypeId_GameHuntingChallengeData = 1005265914
+
+func (*GameHuntingChallengeData) GetTypeId() int32 {
+ return 1005265914
+}
+
+func (_v *GameHuntingChallengeData)Deserialize(_buf map[string]interface{}) (err error) {
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["buynum"].(float64); !_ok_ { err = errors.New("buynum error"); return }; _v.Buynum = int32(_tempNum_) }
+ {
+ var _arr_ []interface{}
+ var _ok_ bool
+ if _arr_, _ok_ = _buf["need"].([]interface{}); !_ok_ { err = errors.New("need error"); return }
+
+ _v.Need = 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.Need = append(_v.Need, _list_v_)
+ }
+ }
+
+ return
+}
+
+func DeserializeGameHuntingChallengeData(_buf map[string]interface{}) (*GameHuntingChallengeData, error) {
+ v := &GameHuntingChallengeData{}
+ if err := v.Deserialize(_buf); err == nil {
+ return v, nil
+ } else {
+ return nil, err
+ }
+}
diff --git a/sys/configure/structs/Game.HuntingOpenTime.go b/sys/configure/structs/Game.HuntingOpenTime.go
new file mode 100644
index 000000000..b7b176af7
--- /dev/null
+++ b/sys/configure/structs/Game.HuntingOpenTime.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 GameHuntingOpenTime struct {
+ _dataMap map[int32]*GameHuntingOpenTimeData
+ _dataList []*GameHuntingOpenTimeData
+}
+
+func NewGameHuntingOpenTime(_buf []map[string]interface{}) (*GameHuntingOpenTime, error) {
+ _dataList := make([]*GameHuntingOpenTimeData, 0, len(_buf))
+ dataMap := make(map[int32]*GameHuntingOpenTimeData)
+ for _, _ele_ := range _buf {
+ if _v, err2 := DeserializeGameHuntingOpenTimeData(_ele_); err2 != nil {
+ return nil, err2
+ } else {
+ _dataList = append(_dataList, _v)
+ dataMap[_v.Type] = _v
+ }
+ }
+ return &GameHuntingOpenTime{_dataList:_dataList, _dataMap:dataMap}, nil
+}
+
+func (table *GameHuntingOpenTime) GetDataMap() map[int32]*GameHuntingOpenTimeData {
+ return table._dataMap
+}
+
+func (table *GameHuntingOpenTime) GetDataList() []*GameHuntingOpenTimeData {
+ return table._dataList
+}
+
+func (table *GameHuntingOpenTime) Get(key int32) *GameHuntingOpenTimeData {
+ return table._dataMap[key]
+}
+
+
diff --git a/sys/configure/structs/Game.HuntingOpenTimeData.go b/sys/configure/structs/Game.HuntingOpenTimeData.go
new file mode 100644
index 000000000..0fc3d8702
--- /dev/null
+++ b/sys/configure/structs/Game.HuntingOpenTimeData.go
@@ -0,0 +1,50 @@
+//------------------------------------------------------------------------------
+//
+// 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 GameHuntingOpenTimeData struct {
+ Type int32
+ Opentime []int32
+}
+
+const TypeId_GameHuntingOpenTimeData = 1854578068
+
+func (*GameHuntingOpenTimeData) GetTypeId() int32 {
+ return 1854578068
+}
+
+func (_v *GameHuntingOpenTimeData)Deserialize(_buf map[string]interface{}) (err error) {
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["type"].(float64); !_ok_ { err = errors.New("type error"); return }; _v.Type = int32(_tempNum_) }
+ {
+ var _arr_ []interface{}
+ var _ok_ bool
+ if _arr_, _ok_ = _buf["opentime"].([]interface{}); !_ok_ { err = errors.New("opentime error"); return }
+
+ _v.Opentime = 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.Opentime = append(_v.Opentime, _list_v_)
+ }
+ }
+
+ return
+}
+
+func DeserializeGameHuntingOpenTimeData(_buf map[string]interface{}) (*GameHuntingOpenTimeData, error) {
+ v := &GameHuntingOpenTimeData{}
+ if err := v.Deserialize(_buf); err == nil {
+ return v, nil
+ } else {
+ return nil, err
+ }
+}