Merge branch 'dev' of http://git.legu.cc/liwei_3d/go_dreamfactory into dev
This commit is contained in:
commit
096299c16e
@ -1,7 +1,6 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"key": 1,
|
"key": 1,
|
||||||
"id_tag": 2,
|
|
||||||
"active": 40,
|
"active": 40,
|
||||||
"reword": [
|
"reword": [
|
||||||
{
|
{
|
||||||
@ -15,7 +14,6 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": 2,
|
"key": 2,
|
||||||
"id_tag": 2,
|
|
||||||
"active": 80,
|
"active": 80,
|
||||||
"reword": [
|
"reword": [
|
||||||
{
|
{
|
||||||
@ -34,7 +32,6 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": 3,
|
"key": 3,
|
||||||
"id_tag": 2,
|
|
||||||
"active": 120,
|
"active": 120,
|
||||||
"reword": [
|
"reword": [
|
||||||
{
|
{
|
||||||
@ -53,7 +50,6 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": 4,
|
"key": 4,
|
||||||
"id_tag": 2,
|
|
||||||
"active": 160,
|
"active": 160,
|
||||||
"reword": [
|
"reword": [
|
||||||
{
|
{
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -4954,7 +4954,7 @@
|
|||||||
"passSkill": [],
|
"passSkill": [],
|
||||||
"Desc": {
|
"Desc": {
|
||||||
"key": "skill_skill_atk_Desc_115004211_1",
|
"key": "skill_skill_atk_Desc_115004211_1",
|
||||||
"text": "攻击敌方全体,伤害为自身攻击力350%,85%概率为目标附加1回合[color=#e5621b]眩晕[/color]。"
|
"text": "攻击敌方全体,伤害为自身攻击力350%,75%概率为目标附加1回合[color=#e5621b]眩晕[/color]。"
|
||||||
},
|
},
|
||||||
"buffid": [
|
"buffid": [
|
||||||
390001105
|
390001105
|
||||||
@ -7445,7 +7445,9 @@
|
|||||||
"key": "skill_skill_atk_Desc_151004111_1",
|
"key": "skill_skill_atk_Desc_151004111_1",
|
||||||
"text": "攻击一个目标,造成2次攻击力125%的伤害,20%概率添加1回合[color=#e5621b]防御下降[/color]。"
|
"text": "攻击一个目标,造成2次攻击力125%的伤害,20%概率添加1回合[color=#e5621b]防御下降[/color]。"
|
||||||
},
|
},
|
||||||
"buffid": [],
|
"buffid": [
|
||||||
|
390001007
|
||||||
|
],
|
||||||
"map": ""
|
"map": ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -7475,7 +7477,9 @@
|
|||||||
"key": "skill_skill_atk_Desc_151004211_1",
|
"key": "skill_skill_atk_Desc_151004211_1",
|
||||||
"text": "攻击一个目标,造成攻击力400%的伤害,添加2回合[color=#e5621b]攻击下降[/color] 。"
|
"text": "攻击一个目标,造成攻击力400%的伤害,添加2回合[color=#e5621b]攻击下降[/color] 。"
|
||||||
},
|
},
|
||||||
"buffid": [],
|
"buffid": [
|
||||||
|
390001006
|
||||||
|
],
|
||||||
"map": ""
|
"map": ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -7533,11 +7537,9 @@
|
|||||||
"passSkill": [],
|
"passSkill": [],
|
||||||
"Desc": {
|
"Desc": {
|
||||||
"key": "skill_skill_atk_Desc_151005211_1",
|
"key": "skill_skill_atk_Desc_151005211_1",
|
||||||
"text": "对敌方全体,造成2次攻击力200%的伤害并降低目标10%行动值"
|
"text": "对敌方全体造成合计攻击力400%的伤害并降低目标10%行动值"
|
||||||
},
|
},
|
||||||
"buffid": [
|
"buffid": [],
|
||||||
390001006
|
|
||||||
],
|
|
||||||
"map": ""
|
"map": ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -18399,7 +18401,9 @@
|
|||||||
"key": "skill_skill_atk_Desc_113005311_2",
|
"key": "skill_skill_atk_Desc_113005311_2",
|
||||||
"text": "技能冷却减少1回合。"
|
"text": "技能冷却减少1回合。"
|
||||||
},
|
},
|
||||||
"buffid": [],
|
"buffid": [
|
||||||
|
390001001
|
||||||
|
],
|
||||||
"map": ""
|
"map": ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -18430,7 +18434,9 @@
|
|||||||
"key": "skill_skill_atk_Desc_113005311_3",
|
"key": "skill_skill_atk_Desc_113005311_3",
|
||||||
"text": "技能冷却减少1回合。"
|
"text": "技能冷却减少1回合。"
|
||||||
},
|
},
|
||||||
"buffid": [],
|
"buffid": [
|
||||||
|
390001001
|
||||||
|
],
|
||||||
"map": ""
|
"map": ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -18489,7 +18495,7 @@
|
|||||||
"passSkill": [],
|
"passSkill": [],
|
||||||
"Desc": {
|
"Desc": {
|
||||||
"key": "skill_skill_atk_Desc_124009111_1",
|
"key": "skill_skill_atk_Desc_124009111_1",
|
||||||
"text": "云朵先生对敌方1个目标造成自身攻击力300%的伤害,若此次伤害触发了暴击,则使自身[color=#37d8a9]暴击提升至[/color]效果延长1回合。"
|
"text": "云朵先生对敌方1个目标造成自身攻击力300%的伤害,若此次伤害触发了暴击,则使自身[color=#37d8a9]暴击提升[/color]效果延长1回合。"
|
||||||
},
|
},
|
||||||
"buffid": [
|
"buffid": [
|
||||||
390001004
|
390001004
|
||||||
@ -18646,7 +18652,7 @@
|
|||||||
"passSkill": [],
|
"passSkill": [],
|
||||||
"Desc": {
|
"Desc": {
|
||||||
"key": "skill_skill_atk_Desc_124009211_1",
|
"key": "skill_skill_atk_Desc_124009211_1",
|
||||||
"text": "云朵先生对敌方1个目标造成3次自身攻击力135%的伤害,并有50%的概率降低目标15%的行动值。触发暴击时为目标额外附加2回合【速度下降】效果。"
|
"text": "云朵先生对敌方1个目标造成3次自身攻击力135%的伤害,并有50%的概率降低目标15%的行动值。触发暴击时为目标额外附加2回合[color=#e5621b]速度下降[/color]效果。"
|
||||||
},
|
},
|
||||||
"buffid": [
|
"buffid": [
|
||||||
390001008
|
390001008
|
||||||
@ -18804,7 +18810,7 @@
|
|||||||
"passSkill": [],
|
"passSkill": [],
|
||||||
"Desc": {
|
"Desc": {
|
||||||
"key": "skill_skill_atk_Desc_124009311_1",
|
"key": "skill_skill_atk_Desc_124009311_1",
|
||||||
"text": "云朵先生为自身附加2回合[color=#37d8a9]暴击提升至[/color]效果,之后对敌方目标造成3次自身攻击力150%的伤害,若此次伤害触发了暴击,则有40%的概率[color=#e5621b]冰冻[/color]目标,持续1回合。"
|
"text": "云朵先生为自身附加2回合[color=#37d8a9]暴击提升[/color]效果,之后对敌方目标造成3次自身攻击力150%的伤害,若此次伤害触发了暴击,则有40%的概率[color=#e5621b]冰冻[/color]目标,持续1回合。"
|
||||||
},
|
},
|
||||||
"buffid": [
|
"buffid": [
|
||||||
390001004,
|
390001004,
|
||||||
@ -19487,7 +19493,7 @@
|
|||||||
"passSkill": [],
|
"passSkill": [],
|
||||||
"Desc": {
|
"Desc": {
|
||||||
"key": "skill_skill_atk_Desc_151006211_1",
|
"key": "skill_skill_atk_Desc_151006211_1",
|
||||||
"text": "对敌方发起1次攻击,造成攻击力300%的伤害。"
|
"text": "对敌方发起3次攻击,造成攻击力300%的伤害。"
|
||||||
},
|
},
|
||||||
"buffid": [],
|
"buffid": [],
|
||||||
"map": ""
|
"map": ""
|
||||||
@ -20323,9 +20329,11 @@
|
|||||||
"passSkill": [],
|
"passSkill": [],
|
||||||
"Desc": {
|
"Desc": {
|
||||||
"key": "skill_skill_atk_Desc_155001111_1",
|
"key": "skill_skill_atk_Desc_155001111_1",
|
||||||
"text": "对敌方发起一次攻击,并造成1次伤害。"
|
"text": "对敌方发起一次攻击,并造成1次伤害,有80%概率附加3回合[color=#e5621b]流血[/color]状态。"
|
||||||
},
|
},
|
||||||
"buffid": [],
|
"buffid": [
|
||||||
|
390001404
|
||||||
|
],
|
||||||
"map": ""
|
"map": ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -20354,7 +20362,7 @@
|
|||||||
"passSkill": [],
|
"passSkill": [],
|
||||||
"Desc": {
|
"Desc": {
|
||||||
"key": "skill_skill_atk_Desc_155001211_1",
|
"key": "skill_skill_atk_Desc_155001211_1",
|
||||||
"text": "(被动)自身生命值越低,造成的伤害越高。"
|
"text": "(被动)若敌人死亡则立即获得回合。"
|
||||||
},
|
},
|
||||||
"buffid": [],
|
"buffid": [],
|
||||||
"map": ""
|
"map": ""
|
||||||
@ -20384,9 +20392,11 @@
|
|||||||
"passSkill": [],
|
"passSkill": [],
|
||||||
"Desc": {
|
"Desc": {
|
||||||
"key": "skill_skill_atk_Desc_155001311_1",
|
"key": "skill_skill_atk_Desc_155001311_1",
|
||||||
"text": "对敌方目标造成1次伤害。"
|
"text": "对敌方目标造成1次伤害,并附带1回合[color=#e5621b]眩晕[/color]。"
|
||||||
},
|
},
|
||||||
"buffid": [],
|
"buffid": [
|
||||||
|
390001401
|
||||||
|
],
|
||||||
"map": ""
|
"map": ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -20414,7 +20424,7 @@
|
|||||||
"passSkill": [],
|
"passSkill": [],
|
||||||
"Desc": {
|
"Desc": {
|
||||||
"key": "skill_skill_atk_Desc_155002111_1",
|
"key": "skill_skill_atk_Desc_155002111_1",
|
||||||
"text": "对敌方全体目标发起一次攻击。"
|
"text": "对敌方全体目标发起一次攻击,并附加2回合[color=#e5621b]攻击下降[/color]。"
|
||||||
},
|
},
|
||||||
"buffid": [],
|
"buffid": [],
|
||||||
"map": ""
|
"map": ""
|
||||||
@ -20440,7 +20450,6 @@
|
|||||||
"Id": [
|
"Id": [
|
||||||
255002211,
|
255002211,
|
||||||
255002212,
|
255002212,
|
||||||
255002213,
|
|
||||||
255002218
|
255002218
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -20477,7 +20486,7 @@
|
|||||||
"passSkill": [],
|
"passSkill": [],
|
||||||
"Desc": {
|
"Desc": {
|
||||||
"key": "skill_skill_atk_Desc_155002311_1",
|
"key": "skill_skill_atk_Desc_155002311_1",
|
||||||
"text": "对敌方造成1次伤害。"
|
"text": "对敌方造成1次伤害,有一定概率附加1回合[color=#e5621b]眩晕[/color]。"
|
||||||
},
|
},
|
||||||
"buffid": [],
|
"buffid": [],
|
||||||
"map": ""
|
"map": ""
|
||||||
@ -20832,7 +20841,7 @@
|
|||||||
"passSkill": [],
|
"passSkill": [],
|
||||||
"Desc": {
|
"Desc": {
|
||||||
"key": "skill_skill_atk_Desc_153003111_1",
|
"key": "skill_skill_atk_Desc_153003111_1",
|
||||||
"text": "对敌方1个目标发起两段攻击力10%的伤害,并有20%概率为自身附加2回合[color=#37d8a9]免疫[/color] 状态。"
|
"text": "对敌方1个目标发起两段攻击力150%的伤害,并有20%概率为自身附加2回合[color=#37d8a9]免疫[/color] 状态。"
|
||||||
},
|
},
|
||||||
"buffid": [
|
"buffid": [
|
||||||
390001111
|
390001111
|
||||||
@ -21305,7 +21314,7 @@
|
|||||||
{
|
{
|
||||||
"id": 114002111,
|
"id": 114002111,
|
||||||
"level": 1,
|
"level": 1,
|
||||||
"MaxLV": 1,
|
"MaxLV": 5,
|
||||||
"UnavailablePlayTypes": [],
|
"UnavailablePlayTypes": [],
|
||||||
"Name": {
|
"Name": {
|
||||||
"key": "skill_skill_atk_Name_114002111",
|
"key": "skill_skill_atk_Name_114002111",
|
||||||
@ -21327,7 +21336,7 @@
|
|||||||
"passSkill": [],
|
"passSkill": [],
|
||||||
"Desc": {
|
"Desc": {
|
||||||
"key": "skill_skill_atk_Desc_114002111_1",
|
"key": "skill_skill_atk_Desc_114002111_1",
|
||||||
"text": "大龙对敌方1个目标造成攻击力100%的伤害,追加自身最大生命值4.5%的伤害,并有50%概率附加1回合[color=#e5621b]挑衅[/color] 状态。"
|
"text": "大龙对敌方1个目标造成攻击力30%的伤害,追加自身最大生命值6%的伤害,并有50%概率附加1回合[color=#e5621b]挑衅[/color] 状态。"
|
||||||
},
|
},
|
||||||
"buffid": [
|
"buffid": [
|
||||||
390001110
|
390001110
|
||||||
@ -21392,7 +21401,129 @@
|
|||||||
"passSkill": [],
|
"passSkill": [],
|
||||||
"Desc": {
|
"Desc": {
|
||||||
"key": "skill_skill_atk_Desc_114002311_1",
|
"key": "skill_skill_atk_Desc_114002311_1",
|
||||||
"text": "攻击敌方,伤害为自身攻击力100%和自身已损失生命值15%,70%概率为目标附加2回合[color=#e5621b]攻击下降[/color]。"
|
"text": "攻击敌方,伤害为自身攻击力400%和自身已损失生命值15%,70%概率为目标附加2回合[color=#e5621b]攻击下降[/color]。"
|
||||||
|
},
|
||||||
|
"buffid": [
|
||||||
|
390001426
|
||||||
|
],
|
||||||
|
"map": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 114002311,
|
||||||
|
"level": 2,
|
||||||
|
"MaxLV": 5,
|
||||||
|
"UnavailablePlayTypes": [],
|
||||||
|
"Name": {
|
||||||
|
"key": "skill_skill_atk_Name_114002311",
|
||||||
|
"text": "弱肉强食"
|
||||||
|
},
|
||||||
|
"ico": "jn_14002_3",
|
||||||
|
"CorrectPos": 0,
|
||||||
|
"IsMelee": 1,
|
||||||
|
"act": "Skill_3",
|
||||||
|
"Type": 1,
|
||||||
|
"CD": 4,
|
||||||
|
"Where": [],
|
||||||
|
"Target": 2,
|
||||||
|
"ChildSkill": {
|
||||||
|
"Id": [
|
||||||
|
214002321
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"passSkill": [],
|
||||||
|
"Desc": {
|
||||||
|
"key": "skill_skill_atk_Desc_114002311_2",
|
||||||
|
"text": "伤害提升480%。"
|
||||||
|
},
|
||||||
|
"buffid": [],
|
||||||
|
"map": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 114002311,
|
||||||
|
"level": 3,
|
||||||
|
"MaxLV": 5,
|
||||||
|
"UnavailablePlayTypes": [],
|
||||||
|
"Name": {
|
||||||
|
"key": "skill_skill_atk_Name_114002311",
|
||||||
|
"text": "弱肉强食"
|
||||||
|
},
|
||||||
|
"ico": "jn_14002_3",
|
||||||
|
"CorrectPos": 0,
|
||||||
|
"IsMelee": 1,
|
||||||
|
"act": "Skill_3",
|
||||||
|
"Type": 1,
|
||||||
|
"CD": 4,
|
||||||
|
"Where": [],
|
||||||
|
"Target": 2,
|
||||||
|
"ChildSkill": {
|
||||||
|
"Id": [
|
||||||
|
214002331
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"passSkill": [],
|
||||||
|
"Desc": {
|
||||||
|
"key": "skill_skill_atk_Desc_114002311_3",
|
||||||
|
"text": "伤害提升560%。"
|
||||||
|
},
|
||||||
|
"buffid": [],
|
||||||
|
"map": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 114002311,
|
||||||
|
"level": 4,
|
||||||
|
"MaxLV": 5,
|
||||||
|
"UnavailablePlayTypes": [],
|
||||||
|
"Name": {
|
||||||
|
"key": "skill_skill_atk_Name_114002311",
|
||||||
|
"text": "弱肉强食"
|
||||||
|
},
|
||||||
|
"ico": "jn_14002_3",
|
||||||
|
"CorrectPos": 0,
|
||||||
|
"IsMelee": 1,
|
||||||
|
"act": "Skill_3",
|
||||||
|
"Type": 1,
|
||||||
|
"CD": 4,
|
||||||
|
"Where": [],
|
||||||
|
"Target": 2,
|
||||||
|
"ChildSkill": {
|
||||||
|
"Id": [
|
||||||
|
214002341
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"passSkill": [],
|
||||||
|
"Desc": {
|
||||||
|
"key": "skill_skill_atk_Desc_114002311_4",
|
||||||
|
"text": "伤害提升640%。"
|
||||||
|
},
|
||||||
|
"buffid": [],
|
||||||
|
"map": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 114002311,
|
||||||
|
"level": 5,
|
||||||
|
"MaxLV": 5,
|
||||||
|
"UnavailablePlayTypes": [],
|
||||||
|
"Name": {
|
||||||
|
"key": "skill_skill_atk_Name_114002311",
|
||||||
|
"text": "弱肉强食"
|
||||||
|
},
|
||||||
|
"ico": "jn_14002_3",
|
||||||
|
"CorrectPos": 0,
|
||||||
|
"IsMelee": 1,
|
||||||
|
"act": "Skill_3",
|
||||||
|
"Type": 1,
|
||||||
|
"CD": 4,
|
||||||
|
"Where": [],
|
||||||
|
"Target": 2,
|
||||||
|
"ChildSkill": {
|
||||||
|
"Id": [
|
||||||
|
214002351
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"passSkill": [],
|
||||||
|
"Desc": {
|
||||||
|
"key": "skill_skill_atk_Desc_114002311_5",
|
||||||
|
"text": "伤害提升720%。"
|
||||||
},
|
},
|
||||||
"buffid": [
|
"buffid": [
|
||||||
390001426
|
390001426
|
||||||
@ -22783,10 +22914,12 @@
|
|||||||
251010112
|
251010112
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"passSkill": [],
|
"passSkill": [
|
||||||
|
251010112
|
||||||
|
],
|
||||||
"Desc": {
|
"Desc": {
|
||||||
"key": "skill_skill_atk_Desc_151010111_1",
|
"key": "skill_skill_atk_Desc_151010111_1",
|
||||||
"text": "对敌方一个目标造成100%攻击力的伤害,触发暴击时位自身回复30%基于伤害的生命值。"
|
"text": "对敌方一个目标造成300%攻击力的伤害,触发暴击时为自身回复30%基于伤害的生命值。"
|
||||||
},
|
},
|
||||||
"buffid": [],
|
"buffid": [],
|
||||||
"map": ""
|
"map": ""
|
||||||
@ -22813,7 +22946,9 @@
|
|||||||
251010211
|
251010211
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"passSkill": [],
|
"passSkill": [
|
||||||
|
251010212
|
||||||
|
],
|
||||||
"Desc": {
|
"Desc": {
|
||||||
"key": "skill_skill_atk_Desc_151010211_1",
|
"key": "skill_skill_atk_Desc_151010211_1",
|
||||||
"text": "对敌方一个目标发起4段攻击,每段可造成攻击力100%的伤害,每段触发暴击时增加自身15%行动值。"
|
"text": "对敌方一个目标发起4段攻击,每段可造成攻击力100%的伤害,每段触发暴击时增加自身15%行动值。"
|
||||||
@ -25191,7 +25326,7 @@
|
|||||||
"passSkill": [],
|
"passSkill": [],
|
||||||
"Desc": {
|
"Desc": {
|
||||||
"key": "skill_skill_atk_Desc_153002111_1",
|
"key": "skill_skill_atk_Desc_153002111_1",
|
||||||
"text": "对敌方一个目标发起两段攻击120%的伤害,每段为自身回复5%最大生命值。"
|
"text": "对敌方一个目标发起两段攻击120%的伤害,回复造成伤害5%的最大生命值。"
|
||||||
},
|
},
|
||||||
"buffid": [],
|
"buffid": [],
|
||||||
"map": ""
|
"map": ""
|
||||||
@ -43757,5 +43892,464 @@
|
|||||||
},
|
},
|
||||||
"buffid": [],
|
"buffid": [],
|
||||||
"map": ""
|
"map": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 175001111,
|
||||||
|
"level": 1,
|
||||||
|
"MaxLV": 1,
|
||||||
|
"UnavailablePlayTypes": [],
|
||||||
|
"Name": {
|
||||||
|
"key": "skill_skill_atk_Name_175001111",
|
||||||
|
"text": ""
|
||||||
|
},
|
||||||
|
"ico": "jn_33003_1",
|
||||||
|
"CorrectPos": 0,
|
||||||
|
"IsMelee": 0,
|
||||||
|
"act": "Skill_1",
|
||||||
|
"Type": 1,
|
||||||
|
"CD": 0,
|
||||||
|
"Where": [],
|
||||||
|
"Target": 2,
|
||||||
|
"ChildSkill": {
|
||||||
|
"Id": [
|
||||||
|
275001111
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"passSkill": [],
|
||||||
|
"Desc": {
|
||||||
|
"key": "skill_skill_atk_Desc_175001111_1",
|
||||||
|
"text": "攻击1名敌人,附加2回合速度下降,并有30%概率附加1回合【眩晕】。"
|
||||||
|
},
|
||||||
|
"buffid": [],
|
||||||
|
"map": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 175001211,
|
||||||
|
"level": 1,
|
||||||
|
"MaxLV": 1,
|
||||||
|
"UnavailablePlayTypes": [],
|
||||||
|
"Name": {
|
||||||
|
"key": "skill_skill_atk_Name_175001211",
|
||||||
|
"text": ""
|
||||||
|
},
|
||||||
|
"ico": "jn_33003_2",
|
||||||
|
"CorrectPos": 0,
|
||||||
|
"IsMelee": 0,
|
||||||
|
"act": "Skill_2",
|
||||||
|
"Type": 1,
|
||||||
|
"CD": 4,
|
||||||
|
"Where": [],
|
||||||
|
"Target": 2,
|
||||||
|
"ChildSkill": {
|
||||||
|
"Id": [
|
||||||
|
275001211
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"passSkill": [],
|
||||||
|
"Desc": {
|
||||||
|
"key": "skill_skill_atk_Desc_175001211_1",
|
||||||
|
"text": "攻击全体敌人两次,各以50%概率附加2回合【命中下降】和【攻击下降】。"
|
||||||
|
},
|
||||||
|
"buffid": [],
|
||||||
|
"map": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 175001311,
|
||||||
|
"level": 1,
|
||||||
|
"MaxLV": 1,
|
||||||
|
"UnavailablePlayTypes": [],
|
||||||
|
"Name": {
|
||||||
|
"key": "skill_skill_atk_Name_175001311",
|
||||||
|
"text": ""
|
||||||
|
},
|
||||||
|
"ico": "jn_33003_3",
|
||||||
|
"CorrectPos": 0,
|
||||||
|
"IsMelee": 0,
|
||||||
|
"act": "Skill_3",
|
||||||
|
"Type": 2,
|
||||||
|
"CD": 0,
|
||||||
|
"Where": [],
|
||||||
|
"Target": 0,
|
||||||
|
"ChildSkill": {
|
||||||
|
"Id": [
|
||||||
|
275001311
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"passSkill": [],
|
||||||
|
"Desc": {
|
||||||
|
"key": "skill_skill_atk_Desc_175001311_1",
|
||||||
|
"text": "被动:从弱势属性英雄受到的伤害增加50%,给优势属性的英雄造成的伤害增加50%。"
|
||||||
|
},
|
||||||
|
"buffid": [],
|
||||||
|
"map": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 175002111,
|
||||||
|
"level": 1,
|
||||||
|
"MaxLV": 1,
|
||||||
|
"UnavailablePlayTypes": [],
|
||||||
|
"Name": {
|
||||||
|
"key": "skill_skill_atk_Name_175002111",
|
||||||
|
"text": ""
|
||||||
|
},
|
||||||
|
"ico": "jn_51005_1",
|
||||||
|
"CorrectPos": 0,
|
||||||
|
"IsMelee": 1,
|
||||||
|
"act": "Skill_1",
|
||||||
|
"Type": 1,
|
||||||
|
"CD": 0,
|
||||||
|
"Where": [],
|
||||||
|
"Target": 2,
|
||||||
|
"ChildSkill": {
|
||||||
|
"Id": [
|
||||||
|
275002111
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"passSkill": [],
|
||||||
|
"Desc": {
|
||||||
|
"key": "skill_skill_atk_Desc_175002111_1",
|
||||||
|
"text": "攻击1名敌人,附加2回合速度下降,并有30%概率附加1回合【忘却】。"
|
||||||
|
},
|
||||||
|
"buffid": [],
|
||||||
|
"map": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 175002211,
|
||||||
|
"level": 1,
|
||||||
|
"MaxLV": 1,
|
||||||
|
"UnavailablePlayTypes": [],
|
||||||
|
"Name": {
|
||||||
|
"key": "skill_skill_atk_Name_175002211",
|
||||||
|
"text": ""
|
||||||
|
},
|
||||||
|
"ico": "jn_51005_2",
|
||||||
|
"CorrectPos": 0,
|
||||||
|
"IsMelee": 1,
|
||||||
|
"act": "Skill_2",
|
||||||
|
"Type": 1,
|
||||||
|
"CD": 4,
|
||||||
|
"Where": [],
|
||||||
|
"Target": 2,
|
||||||
|
"ChildSkill": {
|
||||||
|
"Id": [
|
||||||
|
275002211
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"passSkill": [],
|
||||||
|
"Desc": {
|
||||||
|
"key": "skill_skill_atk_Desc_175002211_1",
|
||||||
|
"text": "攻击全体敌人两次,各以50%概率附加2回合【中毒】和【流血】。"
|
||||||
|
},
|
||||||
|
"buffid": [],
|
||||||
|
"map": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 175002311,
|
||||||
|
"level": 1,
|
||||||
|
"MaxLV": 1,
|
||||||
|
"UnavailablePlayTypes": [],
|
||||||
|
"Name": {
|
||||||
|
"key": "skill_skill_atk_Name_175002311",
|
||||||
|
"text": ""
|
||||||
|
},
|
||||||
|
"ico": "jn_51004_3",
|
||||||
|
"CorrectPos": 0,
|
||||||
|
"IsMelee": 0,
|
||||||
|
"act": "Skill_3",
|
||||||
|
"Type": 2,
|
||||||
|
"CD": 0,
|
||||||
|
"Where": [],
|
||||||
|
"Target": 0,
|
||||||
|
"ChildSkill": {
|
||||||
|
"Id": [
|
||||||
|
275002311,
|
||||||
|
275002312
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"passSkill": [],
|
||||||
|
"Desc": {
|
||||||
|
"key": "skill_skill_atk_Desc_175002311_1",
|
||||||
|
"text": "被动:自身免疫持续伤害,敌方受到持续伤害效果增加30%。"
|
||||||
|
},
|
||||||
|
"buffid": [],
|
||||||
|
"map": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 175003111,
|
||||||
|
"level": 1,
|
||||||
|
"MaxLV": 1,
|
||||||
|
"UnavailablePlayTypes": [],
|
||||||
|
"Name": {
|
||||||
|
"key": "skill_skill_atk_Name_175003111",
|
||||||
|
"text": ""
|
||||||
|
},
|
||||||
|
"ico": "jn_23004_1",
|
||||||
|
"CorrectPos": 0,
|
||||||
|
"IsMelee": 0,
|
||||||
|
"act": "Skill_2",
|
||||||
|
"Type": 1,
|
||||||
|
"CD": 0,
|
||||||
|
"Where": [],
|
||||||
|
"Target": 2,
|
||||||
|
"ChildSkill": {
|
||||||
|
"Id": [
|
||||||
|
275003111
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"passSkill": [],
|
||||||
|
"Desc": {
|
||||||
|
"key": "skill_skill_atk_Desc_175003111_1",
|
||||||
|
"text": "随机攻击3个敌方,无视目标20%的防御。"
|
||||||
|
},
|
||||||
|
"buffid": [],
|
||||||
|
"map": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 175003211,
|
||||||
|
"level": 1,
|
||||||
|
"MaxLV": 1,
|
||||||
|
"UnavailablePlayTypes": [],
|
||||||
|
"Name": {
|
||||||
|
"key": "skill_skill_atk_Name_175003211",
|
||||||
|
"text": ""
|
||||||
|
},
|
||||||
|
"ico": "jn_23004_2",
|
||||||
|
"CorrectPos": 0,
|
||||||
|
"IsMelee": 0,
|
||||||
|
"act": "Skill_1",
|
||||||
|
"Type": 2,
|
||||||
|
"CD": 0,
|
||||||
|
"Where": [],
|
||||||
|
"Target": 0,
|
||||||
|
"ChildSkill": {
|
||||||
|
"Id": [
|
||||||
|
275003211
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"passSkill": [],
|
||||||
|
"Desc": {
|
||||||
|
"key": "skill_skill_atk_Desc_175003211_1",
|
||||||
|
"text": "被动:受到攻击后为自身附加2回合【攻击提升】、【防御提升】、【护盾】"
|
||||||
|
},
|
||||||
|
"buffid": [],
|
||||||
|
"map": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 175003311,
|
||||||
|
"level": 1,
|
||||||
|
"MaxLV": 1,
|
||||||
|
"UnavailablePlayTypes": [],
|
||||||
|
"Name": {
|
||||||
|
"key": "skill_skill_atk_Name_175003311",
|
||||||
|
"text": ""
|
||||||
|
},
|
||||||
|
"ico": "jn_23004_3",
|
||||||
|
"CorrectPos": 0,
|
||||||
|
"IsMelee": 0,
|
||||||
|
"act": "Skill_3",
|
||||||
|
"Type": 1,
|
||||||
|
"CD": 4,
|
||||||
|
"Where": [],
|
||||||
|
"Target": 2,
|
||||||
|
"ChildSkill": {
|
||||||
|
"Id": [
|
||||||
|
275003311
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"passSkill": [],
|
||||||
|
"Desc": {
|
||||||
|
"key": "skill_skill_atk_Desc_175003311_1",
|
||||||
|
"text": "对敌方全体造成伤害,自身身上增益越多,伤害越高。"
|
||||||
|
},
|
||||||
|
"buffid": [],
|
||||||
|
"map": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 175004111,
|
||||||
|
"level": 1,
|
||||||
|
"MaxLV": 1,
|
||||||
|
"UnavailablePlayTypes": [],
|
||||||
|
"Name": {
|
||||||
|
"key": "skill_skill_atk_Name_175004111",
|
||||||
|
"text": ""
|
||||||
|
},
|
||||||
|
"ico": "jn_53001_1",
|
||||||
|
"CorrectPos": 0,
|
||||||
|
"IsMelee": 0,
|
||||||
|
"act": "Skill_1",
|
||||||
|
"Type": 1,
|
||||||
|
"CD": 0,
|
||||||
|
"Where": [],
|
||||||
|
"Target": 2,
|
||||||
|
"ChildSkill": {
|
||||||
|
"Id": [
|
||||||
|
275004111
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"passSkill": [],
|
||||||
|
"Desc": {
|
||||||
|
"key": "skill_skill_atk_Desc_175004111_1",
|
||||||
|
"text": "随机攻击3个敌方,有概率为目标附加2回合【失手率提升】。"
|
||||||
|
},
|
||||||
|
"buffid": [],
|
||||||
|
"map": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 175004211,
|
||||||
|
"level": 1,
|
||||||
|
"MaxLV": 1,
|
||||||
|
"UnavailablePlayTypes": [],
|
||||||
|
"Name": {
|
||||||
|
"key": "skill_skill_atk_Name_175004211",
|
||||||
|
"text": ""
|
||||||
|
},
|
||||||
|
"ico": "jn_53001_2",
|
||||||
|
"CorrectPos": 0,
|
||||||
|
"IsMelee": 1,
|
||||||
|
"act": "Skill_2",
|
||||||
|
"Type": 1,
|
||||||
|
"CD": 3,
|
||||||
|
"Where": [],
|
||||||
|
"Target": 2,
|
||||||
|
"ChildSkill": {
|
||||||
|
"Id": [
|
||||||
|
275003211
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"passSkill": [],
|
||||||
|
"Desc": {
|
||||||
|
"key": "skill_skill_atk_Desc_175004211_1",
|
||||||
|
"text": "攻击1个敌方,向目标转嫁自身1个减益。"
|
||||||
|
},
|
||||||
|
"buffid": [],
|
||||||
|
"map": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 175004311,
|
||||||
|
"level": 1,
|
||||||
|
"MaxLV": 1,
|
||||||
|
"UnavailablePlayTypes": [],
|
||||||
|
"Name": {
|
||||||
|
"key": "skill_skill_atk_Name_175004311",
|
||||||
|
"text": ""
|
||||||
|
},
|
||||||
|
"ico": "jn_53001_3",
|
||||||
|
"CorrectPos": 0,
|
||||||
|
"IsMelee": 1,
|
||||||
|
"act": "Skill_3",
|
||||||
|
"Type": 1,
|
||||||
|
"CD": 4,
|
||||||
|
"Where": [],
|
||||||
|
"Target": 2,
|
||||||
|
"ChildSkill": {
|
||||||
|
"Id": [
|
||||||
|
275004311,
|
||||||
|
275004312
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"passSkill": [],
|
||||||
|
"Desc": {
|
||||||
|
"key": "skill_skill_atk_Desc_175004311_1",
|
||||||
|
"text": "对敌方全体造成伤害,并净化自身所有减益效果,敌方身上减益越多,伤害越高。"
|
||||||
|
},
|
||||||
|
"buffid": [],
|
||||||
|
"map": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 175005111,
|
||||||
|
"level": 1,
|
||||||
|
"MaxLV": 1,
|
||||||
|
"UnavailablePlayTypes": [],
|
||||||
|
"Name": {
|
||||||
|
"key": "skill_skill_atk_Name_175005111",
|
||||||
|
"text": ""
|
||||||
|
},
|
||||||
|
"ico": "jn_14001_1",
|
||||||
|
"CorrectPos": 0,
|
||||||
|
"IsMelee": 1,
|
||||||
|
"act": "Skill_1",
|
||||||
|
"Type": 1,
|
||||||
|
"CD": 0,
|
||||||
|
"Where": [],
|
||||||
|
"Target": 2,
|
||||||
|
"ChildSkill": {
|
||||||
|
"Id": [
|
||||||
|
275005111
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"passSkill": [],
|
||||||
|
"Desc": {
|
||||||
|
"key": "skill_skill_atk_Desc_175005111_1",
|
||||||
|
"text": "对敌方单体目标造成2次伤害,每次向目标转嫁自身1个减益,并击退目标行动值。"
|
||||||
|
},
|
||||||
|
"buffid": [],
|
||||||
|
"map": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 175005211,
|
||||||
|
"level": 1,
|
||||||
|
"MaxLV": 1,
|
||||||
|
"UnavailablePlayTypes": [],
|
||||||
|
"Name": {
|
||||||
|
"key": "skill_skill_atk_Name_175005211",
|
||||||
|
"text": ""
|
||||||
|
},
|
||||||
|
"ico": "jn_14001_2",
|
||||||
|
"CorrectPos": 0,
|
||||||
|
"IsMelee": 1,
|
||||||
|
"act": "Skill_3",
|
||||||
|
"Type": 1,
|
||||||
|
"CD": 4,
|
||||||
|
"Where": [],
|
||||||
|
"Target": 2,
|
||||||
|
"ChildSkill": {
|
||||||
|
"Id": [
|
||||||
|
275005211,
|
||||||
|
275005212
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"passSkill": [],
|
||||||
|
"Desc": {
|
||||||
|
"key": "skill_skill_atk_Desc_175005211_1",
|
||||||
|
"text": "对敌方全体目标造成2次伤害,每次有概率为目标附加2回合【流血】。每次攻击每层【维京直觉】造成一定额外伤害。"
|
||||||
|
},
|
||||||
|
"buffid": [],
|
||||||
|
"map": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 175005311,
|
||||||
|
"level": 1,
|
||||||
|
"MaxLV": 1,
|
||||||
|
"UnavailablePlayTypes": [],
|
||||||
|
"Name": {
|
||||||
|
"key": "skill_skill_atk_Name_175005311",
|
||||||
|
"text": ""
|
||||||
|
},
|
||||||
|
"ico": "jn_14001_3",
|
||||||
|
"CorrectPos": 0,
|
||||||
|
"IsMelee": 0,
|
||||||
|
"act": "Skill_2",
|
||||||
|
"Type": 2,
|
||||||
|
"CD": 0,
|
||||||
|
"Where": [],
|
||||||
|
"Target": 0,
|
||||||
|
"ChildSkill": {
|
||||||
|
"Id": [
|
||||||
|
275005311,
|
||||||
|
275005312,
|
||||||
|
275005313
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"passSkill": [
|
||||||
|
275005311,
|
||||||
|
275005312,
|
||||||
|
275005313
|
||||||
|
],
|
||||||
|
"Desc": {
|
||||||
|
"key": "skill_skill_atk_Desc_175005311_1",
|
||||||
|
"text": "被动:战斗开始时,自身获得1层【维京直觉】,为当前防御最高的敌方附加【标记】,为敌方全体目标附加【维京之吼】。自身受到来自无【标记】目标的伤害大幅降低。每回合结束时,获得2层【维京直觉】。"
|
||||||
|
},
|
||||||
|
"buffid": [],
|
||||||
|
"map": ""
|
||||||
}
|
}
|
||||||
]
|
]
|
@ -2252,7 +2252,7 @@
|
|||||||
"When": 10,
|
"When": 10,
|
||||||
"FromCheck": "Target=3",
|
"FromCheck": "Target=3",
|
||||||
"TargetCheck": "3",
|
"TargetCheck": "3",
|
||||||
"MainSkillCheck": "",
|
"MainSkillCheck": "MainSkillID=151010111",
|
||||||
"AfterSkillCheck": "",
|
"AfterSkillCheck": "",
|
||||||
"BuffCheck": "",
|
"BuffCheck": "",
|
||||||
"AddCon": [],
|
"AddCon": [],
|
||||||
@ -2271,7 +2271,7 @@
|
|||||||
"When": 10,
|
"When": 10,
|
||||||
"FromCheck": "Target=3",
|
"FromCheck": "Target=3",
|
||||||
"TargetCheck": "3",
|
"TargetCheck": "3",
|
||||||
"MainSkillCheck": "",
|
"MainSkillCheck": "MainSkillID=151010211",
|
||||||
"AfterSkillCheck": "",
|
"AfterSkillCheck": "",
|
||||||
"BuffCheck": "",
|
"BuffCheck": "",
|
||||||
"AddCon": [],
|
"AddCon": [],
|
||||||
@ -2424,8 +2424,8 @@
|
|||||||
"Id": 444001113,
|
"Id": 444001113,
|
||||||
"When": 10,
|
"When": 10,
|
||||||
"FromCheck": "Target=3",
|
"FromCheck": "Target=3",
|
||||||
"TargetCheck": "3",
|
"TargetCheck": "Target=2",
|
||||||
"MainSkillCheck": "",
|
"MainSkillCheck": "MainSkillID=144001111",
|
||||||
"AfterSkillCheck": "",
|
"AfterSkillCheck": "",
|
||||||
"BuffCheck": "",
|
"BuffCheck": "",
|
||||||
"AddCon": [],
|
"AddCon": [],
|
||||||
@ -2443,8 +2443,8 @@
|
|||||||
"Id": 444001213,
|
"Id": 444001213,
|
||||||
"When": 10,
|
"When": 10,
|
||||||
"FromCheck": "Target=3",
|
"FromCheck": "Target=3",
|
||||||
"TargetCheck": "3",
|
"TargetCheck": "Target=2",
|
||||||
"MainSkillCheck": "",
|
"MainSkillCheck": "MainSkillID=144001211",
|
||||||
"AfterSkillCheck": "",
|
"AfterSkillCheck": "",
|
||||||
"BuffCheck": "",
|
"BuffCheck": "",
|
||||||
"AddCon": [],
|
"AddCon": [],
|
||||||
@ -2900,13 +2900,11 @@
|
|||||||
"Id": 455002213,
|
"Id": 455002213,
|
||||||
"When": 16,
|
"When": 16,
|
||||||
"FromCheck": "",
|
"FromCheck": "",
|
||||||
"TargetCheck": "Target=3",
|
"TargetCheck": "Target=3,Hpproless=300",
|
||||||
"MainSkillCheck": "",
|
"MainSkillCheck": "",
|
||||||
"AfterSkillCheck": "",
|
"AfterSkillCheck": "",
|
||||||
"BuffCheck": "",
|
"BuffCheck": "",
|
||||||
"AddCon": [
|
"AddCon": [],
|
||||||
"Hpproless=300"
|
|
||||||
],
|
|
||||||
"PasPr": 1000,
|
"PasPr": 1000,
|
||||||
"PasCorrection": 0,
|
"PasCorrection": 0,
|
||||||
"Type": "CallSkillPas",
|
"Type": "CallSkillPas",
|
||||||
@ -7610,5 +7608,45 @@
|
|||||||
"Callback": [
|
"Callback": [
|
||||||
234007216
|
234007216
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Id": 475003311,
|
||||||
|
"When": 16,
|
||||||
|
"FromCheck": "Target=2",
|
||||||
|
"TargetCheck": "Target=3",
|
||||||
|
"MainSkillCheck": "",
|
||||||
|
"AfterSkillCheck": "",
|
||||||
|
"BuffCheck": "",
|
||||||
|
"AddCon": [],
|
||||||
|
"PasPr": 1000,
|
||||||
|
"PasCorrection": 0,
|
||||||
|
"Type": "CallSkillPas",
|
||||||
|
"MaxEmitTimesInRoundByRole": 0,
|
||||||
|
"MaxEmitTimes": 0,
|
||||||
|
"MaxEmitTimesInRound": 1,
|
||||||
|
"Callback": [
|
||||||
|
275003212,
|
||||||
|
275003213,
|
||||||
|
275003214
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Id": 475005211,
|
||||||
|
"When": 16,
|
||||||
|
"FromCheck": "Target=3,HasBuff=390001211",
|
||||||
|
"TargetCheck": "",
|
||||||
|
"MainSkillCheck": "",
|
||||||
|
"AfterSkillCheck": "",
|
||||||
|
"BuffCheck": "",
|
||||||
|
"AddCon": [],
|
||||||
|
"PasPr": 1000,
|
||||||
|
"PasCorrection": 0,
|
||||||
|
"Type": "CallSkillPas",
|
||||||
|
"MaxEmitTimesInRoundByRole": 0,
|
||||||
|
"MaxEmitTimes": 0,
|
||||||
|
"MaxEmitTimesInRound": 1,
|
||||||
|
"Callback": [
|
||||||
|
275005213
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
@ -1,7 +1,6 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"key": 1,
|
"key": 1,
|
||||||
"id_tag": 2,
|
|
||||||
"active": 40,
|
"active": 40,
|
||||||
"reword": [
|
"reword": [
|
||||||
{
|
{
|
||||||
@ -15,7 +14,6 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": 2,
|
"key": 2,
|
||||||
"id_tag": 2,
|
|
||||||
"active": 80,
|
"active": 80,
|
||||||
"reword": [
|
"reword": [
|
||||||
{
|
{
|
||||||
@ -34,7 +32,6 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": 3,
|
"key": 3,
|
||||||
"id_tag": 2,
|
|
||||||
"active": 120,
|
"active": 120,
|
||||||
"reword": [
|
"reword": [
|
||||||
{
|
{
|
||||||
@ -53,7 +50,6 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": 4,
|
"key": 4,
|
||||||
"id_tag": 2,
|
|
||||||
"active": 160,
|
"active": 160,
|
||||||
"reword": [
|
"reword": [
|
||||||
{
|
{
|
||||||
|
@ -2,15 +2,16 @@
|
|||||||
{
|
{
|
||||||
"key": 20001,
|
"key": 20001,
|
||||||
"id_list": 1,
|
"id_list": 1,
|
||||||
"id_tag": 2,
|
|
||||||
"open": "",
|
"open": "",
|
||||||
|
"opentask": "arena",
|
||||||
|
"id_before": 0,
|
||||||
|
"Id_after": 0,
|
||||||
"task_display": {
|
"task_display": {
|
||||||
"key": "task_task_round_task_display_1",
|
"key": "task_task_round_task_display_1",
|
||||||
"text": "本周竞技场挑战10次"
|
"text": "本周竞技场挑战10次"
|
||||||
},
|
},
|
||||||
"type_id": 13000001,
|
"type_id": 13000001,
|
||||||
"active": 10,
|
"active": 10,
|
||||||
"id_after": 0,
|
|
||||||
"jump_interface": 156,
|
"jump_interface": 156,
|
||||||
"icon": "wp_icon_0001",
|
"icon": "wp_icon_0001",
|
||||||
"reword": [
|
"reword": [
|
||||||
@ -29,15 +30,16 @@
|
|||||||
{
|
{
|
||||||
"key": 20002,
|
"key": 20002,
|
||||||
"id_list": 2,
|
"id_list": 2,
|
||||||
"id_tag": 2,
|
|
||||||
"open": "",
|
"open": "",
|
||||||
|
"opentask": "",
|
||||||
|
"id_before": 20001,
|
||||||
|
"Id_after": 0,
|
||||||
"task_display": {
|
"task_display": {
|
||||||
"key": "task_task_round_task_display_2",
|
"key": "task_task_round_task_display_2",
|
||||||
"text": "本周竞技场挑战30次"
|
"text": "本周竞技场挑战30次"
|
||||||
},
|
},
|
||||||
"type_id": 13000002,
|
"type_id": 13000002,
|
||||||
"active": 10,
|
"active": 10,
|
||||||
"id_after": 0,
|
|
||||||
"jump_interface": 156,
|
"jump_interface": 156,
|
||||||
"icon": "wp_icon_0001",
|
"icon": "wp_icon_0001",
|
||||||
"reword": [
|
"reword": [
|
||||||
@ -56,15 +58,16 @@
|
|||||||
{
|
{
|
||||||
"key": 20003,
|
"key": 20003,
|
||||||
"id_list": 3,
|
"id_list": 3,
|
||||||
"id_tag": 2,
|
|
||||||
"open": "",
|
"open": "",
|
||||||
|
"opentask": "",
|
||||||
|
"id_before": 20002,
|
||||||
|
"Id_after": 0,
|
||||||
"task_display": {
|
"task_display": {
|
||||||
"key": "task_task_round_task_display_3",
|
"key": "task_task_round_task_display_3",
|
||||||
"text": "本周竞技场挑战50次"
|
"text": "本周竞技场挑战50次"
|
||||||
},
|
},
|
||||||
"type_id": 13000003,
|
"type_id": 13000003,
|
||||||
"active": 10,
|
"active": 10,
|
||||||
"id_after": 0,
|
|
||||||
"jump_interface": 156,
|
"jump_interface": 156,
|
||||||
"icon": "wp_icon_0001",
|
"icon": "wp_icon_0001",
|
||||||
"reword": [
|
"reword": [
|
||||||
@ -83,15 +86,16 @@
|
|||||||
{
|
{
|
||||||
"key": 20004,
|
"key": 20004,
|
||||||
"id_list": 4,
|
"id_list": 4,
|
||||||
"id_tag": 2,
|
|
||||||
"open": "",
|
"open": "",
|
||||||
|
"opentask": "arena",
|
||||||
|
"id_before": 0,
|
||||||
|
"Id_after": 0,
|
||||||
"task_display": {
|
"task_display": {
|
||||||
"key": "task_task_round_task_display_4",
|
"key": "task_task_round_task_display_4",
|
||||||
"text": "本周竞技场胜利10次"
|
"text": "本周竞技场胜利10次"
|
||||||
},
|
},
|
||||||
"type_id": 13000004,
|
"type_id": 13000004,
|
||||||
"active": 10,
|
"active": 10,
|
||||||
"id_after": 0,
|
|
||||||
"jump_interface": 156,
|
"jump_interface": 156,
|
||||||
"icon": "wp_icon_0001",
|
"icon": "wp_icon_0001",
|
||||||
"reword": [
|
"reword": [
|
||||||
@ -110,15 +114,16 @@
|
|||||||
{
|
{
|
||||||
"key": 20005,
|
"key": 20005,
|
||||||
"id_list": 5,
|
"id_list": 5,
|
||||||
"id_tag": 2,
|
|
||||||
"open": "",
|
"open": "",
|
||||||
|
"opentask": "",
|
||||||
|
"id_before": 20004,
|
||||||
|
"Id_after": 0,
|
||||||
"task_display": {
|
"task_display": {
|
||||||
"key": "task_task_round_task_display_5",
|
"key": "task_task_round_task_display_5",
|
||||||
"text": "本周竞技场胜利20次"
|
"text": "本周竞技场胜利20次"
|
||||||
},
|
},
|
||||||
"type_id": 13000005,
|
"type_id": 13000005,
|
||||||
"active": 10,
|
"active": 10,
|
||||||
"id_after": 0,
|
|
||||||
"jump_interface": 156,
|
"jump_interface": 156,
|
||||||
"icon": "wp_icon_0001",
|
"icon": "wp_icon_0001",
|
||||||
"reword": [
|
"reword": [
|
||||||
@ -137,15 +142,16 @@
|
|||||||
{
|
{
|
||||||
"key": 20006,
|
"key": 20006,
|
||||||
"id_list": 6,
|
"id_list": 6,
|
||||||
"id_tag": 2,
|
|
||||||
"open": "",
|
"open": "",
|
||||||
|
"opentask": "",
|
||||||
|
"id_before": 20005,
|
||||||
|
"Id_after": 0,
|
||||||
"task_display": {
|
"task_display": {
|
||||||
"key": "task_task_round_task_display_6",
|
"key": "task_task_round_task_display_6",
|
||||||
"text": "本周竞技场胜利30次"
|
"text": "本周竞技场胜利30次"
|
||||||
},
|
},
|
||||||
"type_id": 13000006,
|
"type_id": 13000006,
|
||||||
"active": 10,
|
"active": 10,
|
||||||
"id_after": 0,
|
|
||||||
"jump_interface": 156,
|
"jump_interface": 156,
|
||||||
"icon": "wp_icon_0001",
|
"icon": "wp_icon_0001",
|
||||||
"reword": [
|
"reword": [
|
||||||
@ -164,15 +170,16 @@
|
|||||||
{
|
{
|
||||||
"key": 20007,
|
"key": 20007,
|
||||||
"id_list": 7,
|
"id_list": 7,
|
||||||
"id_tag": 2,
|
|
||||||
"open": "",
|
"open": "",
|
||||||
|
"opentask": "vikingexpedition_experience",
|
||||||
|
"id_before": 0,
|
||||||
|
"Id_after": 0,
|
||||||
"task_display": {
|
"task_display": {
|
||||||
"key": "task_task_round_task_display_7",
|
"key": "task_task_round_task_display_7",
|
||||||
"text": "本周累计梦境回廊消耗300体力"
|
"text": "本周累计梦境回廊消耗300体力"
|
||||||
},
|
},
|
||||||
"type_id": 13000007,
|
"type_id": 13000007,
|
||||||
"active": 10,
|
"active": 10,
|
||||||
"id_after": 0,
|
|
||||||
"jump_interface": 11012,
|
"jump_interface": 11012,
|
||||||
"icon": "wp_icon_0001",
|
"icon": "wp_icon_0001",
|
||||||
"reword": [
|
"reword": [
|
||||||
@ -191,15 +198,16 @@
|
|||||||
{
|
{
|
||||||
"key": 20008,
|
"key": 20008,
|
||||||
"id_list": 8,
|
"id_list": 8,
|
||||||
"id_tag": 2,
|
|
||||||
"open": "",
|
"open": "",
|
||||||
|
"opentask": "",
|
||||||
|
"id_before": 20007,
|
||||||
|
"Id_after": 0,
|
||||||
"task_display": {
|
"task_display": {
|
||||||
"key": "task_task_round_task_display_8",
|
"key": "task_task_round_task_display_8",
|
||||||
"text": "本周累计梦境回廊消耗600体力"
|
"text": "本周累计梦境回廊消耗600体力"
|
||||||
},
|
},
|
||||||
"type_id": 13000008,
|
"type_id": 13000008,
|
||||||
"active": 10,
|
"active": 10,
|
||||||
"id_after": 0,
|
|
||||||
"jump_interface": 11012,
|
"jump_interface": 11012,
|
||||||
"icon": "wp_icon_0001",
|
"icon": "wp_icon_0001",
|
||||||
"reword": [
|
"reword": [
|
||||||
@ -218,15 +226,16 @@
|
|||||||
{
|
{
|
||||||
"key": 20009,
|
"key": 20009,
|
||||||
"id_list": 9,
|
"id_list": 9,
|
||||||
"id_tag": 2,
|
|
||||||
"open": "",
|
"open": "",
|
||||||
|
"opentask": "",
|
||||||
|
"id_before": 20008,
|
||||||
|
"Id_after": 0,
|
||||||
"task_display": {
|
"task_display": {
|
||||||
"key": "task_task_round_task_display_9",
|
"key": "task_task_round_task_display_9",
|
||||||
"text": "本周累计梦境回廊消耗1000体力"
|
"text": "本周累计梦境回廊消耗1000体力"
|
||||||
},
|
},
|
||||||
"type_id": 13000009,
|
"type_id": 13000009,
|
||||||
"active": 10,
|
"active": 10,
|
||||||
"id_after": 0,
|
|
||||||
"jump_interface": 11012,
|
"jump_interface": 11012,
|
||||||
"icon": "wp_icon_0002",
|
"icon": "wp_icon_0002",
|
||||||
"reword": [
|
"reword": [
|
||||||
@ -245,15 +254,16 @@
|
|||||||
{
|
{
|
||||||
"key": 20010,
|
"key": 20010,
|
||||||
"id_list": 10,
|
"id_list": 10,
|
||||||
"id_tag": 2,
|
|
||||||
"open": "",
|
"open": "",
|
||||||
|
"opentask": "",
|
||||||
|
"id_before": 0,
|
||||||
|
"Id_after": 0,
|
||||||
"task_display": {
|
"task_display": {
|
||||||
"key": "task_task_round_task_display_10",
|
"key": "task_task_round_task_display_10",
|
||||||
"text": "本周累计消耗3000000点金币"
|
"text": "本周累计消耗3000000点金币"
|
||||||
},
|
},
|
||||||
"type_id": 13000010,
|
"type_id": 13000010,
|
||||||
"active": 10,
|
"active": 10,
|
||||||
"id_after": 0,
|
|
||||||
"jump_interface": 122,
|
"jump_interface": 122,
|
||||||
"icon": "wp_icon_0003",
|
"icon": "wp_icon_0003",
|
||||||
"reword": [
|
"reword": [
|
||||||
@ -272,15 +282,16 @@
|
|||||||
{
|
{
|
||||||
"key": 20011,
|
"key": 20011,
|
||||||
"id_list": 11,
|
"id_list": 11,
|
||||||
"id_tag": 2,
|
|
||||||
"open": "",
|
"open": "",
|
||||||
|
"opentask": "",
|
||||||
|
"id_before": 20010,
|
||||||
|
"Id_after": 0,
|
||||||
"task_display": {
|
"task_display": {
|
||||||
"key": "task_task_round_task_display_11",
|
"key": "task_task_round_task_display_11",
|
||||||
"text": "本周累计消耗6000000点金币"
|
"text": "本周累计消耗6000000点金币"
|
||||||
},
|
},
|
||||||
"type_id": 13000011,
|
"type_id": 13000011,
|
||||||
"active": 10,
|
"active": 10,
|
||||||
"id_after": 0,
|
|
||||||
"jump_interface": 122,
|
"jump_interface": 122,
|
||||||
"icon": "wp_icon_0004",
|
"icon": "wp_icon_0004",
|
||||||
"reword": [
|
"reword": [
|
||||||
@ -299,15 +310,16 @@
|
|||||||
{
|
{
|
||||||
"key": 20012,
|
"key": 20012,
|
||||||
"id_list": 12,
|
"id_list": 12,
|
||||||
"id_tag": 2,
|
|
||||||
"open": "",
|
"open": "",
|
||||||
|
"opentask": "",
|
||||||
|
"id_before": 20011,
|
||||||
|
"Id_after": 0,
|
||||||
"task_display": {
|
"task_display": {
|
||||||
"key": "task_task_round_task_display_12",
|
"key": "task_task_round_task_display_12",
|
||||||
"text": "本周累计消耗10000000点金币"
|
"text": "本周累计消耗10000000点金币"
|
||||||
},
|
},
|
||||||
"type_id": 13000012,
|
"type_id": 13000012,
|
||||||
"active": 10,
|
"active": 10,
|
||||||
"id_after": 0,
|
|
||||||
"jump_interface": 122,
|
"jump_interface": 122,
|
||||||
"icon": "wp_icon_0005",
|
"icon": "wp_icon_0005",
|
||||||
"reword": [
|
"reword": [
|
||||||
@ -326,15 +338,16 @@
|
|||||||
{
|
{
|
||||||
"key": 20013,
|
"key": 20013,
|
||||||
"id_list": 13,
|
"id_list": 13,
|
||||||
"id_tag": 2,
|
|
||||||
"open": "",
|
"open": "",
|
||||||
|
"opentask": "vikingexpedition",
|
||||||
|
"id_before": 0,
|
||||||
|
"Id_after": 0,
|
||||||
"task_display": {
|
"task_display": {
|
||||||
"key": "task_task_round_task_display_13",
|
"key": "task_task_round_task_display_13",
|
||||||
"text": "本周累计维京远征消耗300体力"
|
"text": "本周累计维京远征消耗300体力"
|
||||||
},
|
},
|
||||||
"type_id": 13000013,
|
"type_id": 13000013,
|
||||||
"active": 10,
|
"active": 10,
|
||||||
"id_after": 0,
|
|
||||||
"jump_interface": 11012,
|
"jump_interface": 11012,
|
||||||
"icon": "wp_icon_0006",
|
"icon": "wp_icon_0006",
|
||||||
"reword": [
|
"reword": [
|
||||||
@ -353,15 +366,16 @@
|
|||||||
{
|
{
|
||||||
"key": 20014,
|
"key": 20014,
|
||||||
"id_list": 14,
|
"id_list": 14,
|
||||||
"id_tag": 2,
|
|
||||||
"open": "",
|
"open": "",
|
||||||
|
"opentask": "",
|
||||||
|
"id_before": 20013,
|
||||||
|
"Id_after": 0,
|
||||||
"task_display": {
|
"task_display": {
|
||||||
"key": "task_task_round_task_display_14",
|
"key": "task_task_round_task_display_14",
|
||||||
"text": "本周累计维京远征消耗600体力"
|
"text": "本周累计维京远征消耗600体力"
|
||||||
},
|
},
|
||||||
"type_id": 13000014,
|
"type_id": 13000014,
|
||||||
"active": 10,
|
"active": 10,
|
||||||
"id_after": 0,
|
|
||||||
"jump_interface": 11012,
|
"jump_interface": 11012,
|
||||||
"icon": "wp_icon_0007",
|
"icon": "wp_icon_0007",
|
||||||
"reword": [
|
"reword": [
|
||||||
@ -380,15 +394,16 @@
|
|||||||
{
|
{
|
||||||
"key": 20015,
|
"key": 20015,
|
||||||
"id_list": 15,
|
"id_list": 15,
|
||||||
"id_tag": 2,
|
|
||||||
"open": "",
|
"open": "",
|
||||||
|
"opentask": "",
|
||||||
|
"id_before": 20014,
|
||||||
|
"Id_after": 0,
|
||||||
"task_display": {
|
"task_display": {
|
||||||
"key": "task_task_round_task_display_15",
|
"key": "task_task_round_task_display_15",
|
||||||
"text": "本周累计维京远征消耗1000体力"
|
"text": "本周累计维京远征消耗1000体力"
|
||||||
},
|
},
|
||||||
"type_id": 13000015,
|
"type_id": 13000015,
|
||||||
"active": 10,
|
"active": 10,
|
||||||
"id_after": 0,
|
|
||||||
"jump_interface": 11012,
|
"jump_interface": 11012,
|
||||||
"icon": "wp_icon_0008",
|
"icon": "wp_icon_0008",
|
||||||
"reword": [
|
"reword": [
|
||||||
@ -407,15 +422,16 @@
|
|||||||
{
|
{
|
||||||
"key": 20016,
|
"key": 20016,
|
||||||
"id_list": 16,
|
"id_list": 16,
|
||||||
"id_tag": 2,
|
|
||||||
"open": "",
|
"open": "",
|
||||||
|
"opentask": "hunting",
|
||||||
|
"id_before": 0,
|
||||||
|
"Id_after": 0,
|
||||||
"task_display": {
|
"task_display": {
|
||||||
"key": "task_task_round_task_display_16",
|
"key": "task_task_round_task_display_16",
|
||||||
"text": "本周累计猎魂挑战消耗300体力"
|
"text": "本周累计猎魂挑战消耗300体力"
|
||||||
},
|
},
|
||||||
"type_id": 13000016,
|
"type_id": 13000016,
|
||||||
"active": 10,
|
"active": 10,
|
||||||
"id_after": 0,
|
|
||||||
"jump_interface": 168,
|
"jump_interface": 168,
|
||||||
"icon": "wp_icon_0009",
|
"icon": "wp_icon_0009",
|
||||||
"reword": [
|
"reword": [
|
||||||
@ -434,15 +450,16 @@
|
|||||||
{
|
{
|
||||||
"key": 20017,
|
"key": 20017,
|
||||||
"id_list": 17,
|
"id_list": 17,
|
||||||
"id_tag": 2,
|
|
||||||
"open": "",
|
"open": "",
|
||||||
|
"opentask": "",
|
||||||
|
"id_before": 20016,
|
||||||
|
"Id_after": 0,
|
||||||
"task_display": {
|
"task_display": {
|
||||||
"key": "task_task_round_task_display_17",
|
"key": "task_task_round_task_display_17",
|
||||||
"text": "本周累计猎魂挑战消耗600体力"
|
"text": "本周累计猎魂挑战消耗600体力"
|
||||||
},
|
},
|
||||||
"type_id": 13000017,
|
"type_id": 13000017,
|
||||||
"active": 10,
|
"active": 10,
|
||||||
"id_after": 0,
|
|
||||||
"jump_interface": 168,
|
"jump_interface": 168,
|
||||||
"icon": "wp_icon_0010",
|
"icon": "wp_icon_0010",
|
||||||
"reword": [
|
"reword": [
|
||||||
@ -461,15 +478,16 @@
|
|||||||
{
|
{
|
||||||
"key": 20018,
|
"key": 20018,
|
||||||
"id_list": 18,
|
"id_list": 18,
|
||||||
"id_tag": 2,
|
|
||||||
"open": "",
|
"open": "",
|
||||||
|
"opentask": "",
|
||||||
|
"id_before": 20017,
|
||||||
|
"Id_after": 0,
|
||||||
"task_display": {
|
"task_display": {
|
||||||
"key": "task_task_round_task_display_18",
|
"key": "task_task_round_task_display_18",
|
||||||
"text": "本周累计猎魂挑战消耗1000体力"
|
"text": "本周累计猎魂挑战消耗1000体力"
|
||||||
},
|
},
|
||||||
"type_id": 13000018,
|
"type_id": 13000018,
|
||||||
"active": 10,
|
"active": 10,
|
||||||
"id_after": 0,
|
|
||||||
"jump_interface": 168,
|
"jump_interface": 168,
|
||||||
"icon": "wp_icon_0011",
|
"icon": "wp_icon_0011",
|
||||||
"reword": [
|
"reword": [
|
||||||
|
@ -5049,15 +5049,15 @@
|
|||||||
"icon": "25001",
|
"icon": "25001",
|
||||||
"task_name": {
|
"task_name": {
|
||||||
"key": "worldtask_world_task_task_name_122",
|
"key": "worldtask_world_task_task_name_122",
|
||||||
"text": "商队任务1-任意1装备+3"
|
"text": "兄弟,带一程"
|
||||||
},
|
},
|
||||||
"task_details": {
|
"task_details": {
|
||||||
"key": "worldtask_world_task_task_details_122",
|
"key": "worldtask_world_task_task_details_122",
|
||||||
"text": "商队任务1-任意1装备+3"
|
"text": "途中偶遇的守护者,期望我们带他前往某个城市。"
|
||||||
},
|
},
|
||||||
"npctxt": {
|
"npctxt": {
|
||||||
"key": "worldtask_world_task_npctxt_122",
|
"key": "worldtask_world_task_npctxt_122",
|
||||||
"text": "商队任务1-任意1装备+3"
|
"text": "兄弟,带一程"
|
||||||
},
|
},
|
||||||
"get_item": [],
|
"get_item": [],
|
||||||
"trigger": 0,
|
"trigger": 0,
|
||||||
@ -5068,7 +5068,7 @@
|
|||||||
"deliver_npc": 50018,
|
"deliver_npc": 50018,
|
||||||
"taskend_removeitem": [],
|
"taskend_removeitem": [],
|
||||||
"auto_accept": 0,
|
"auto_accept": 0,
|
||||||
"tasktips": 1,
|
"tasktips": 0,
|
||||||
"lock_add": 1,
|
"lock_add": 1,
|
||||||
"reword": [
|
"reword": [
|
||||||
{
|
{
|
||||||
@ -5094,15 +5094,15 @@
|
|||||||
"icon": "25001",
|
"icon": "25001",
|
||||||
"task_name": {
|
"task_name": {
|
||||||
"key": "worldtask_world_task_task_name_123",
|
"key": "worldtask_world_task_task_name_123",
|
||||||
"text": "商队任务1-任意2装备+3"
|
"text": "特产不嫌多"
|
||||||
},
|
},
|
||||||
"task_details": {
|
"task_details": {
|
||||||
"key": "worldtask_world_task_task_details_123",
|
"key": "worldtask_world_task_task_details_123",
|
||||||
"text": "商队任务1-任意2装备+3"
|
"text": "一名守护者希望我们帮他购买一些特产,并承诺会用其他东西作为报酬。"
|
||||||
},
|
},
|
||||||
"npctxt": {
|
"npctxt": {
|
||||||
"key": "worldtask_world_task_npctxt_123",
|
"key": "worldtask_world_task_npctxt_123",
|
||||||
"text": "商队任务1-任意2装备+3"
|
"text": "特产不嫌多"
|
||||||
},
|
},
|
||||||
"get_item": [],
|
"get_item": [],
|
||||||
"trigger": 0,
|
"trigger": 0,
|
||||||
@ -5113,7 +5113,7 @@
|
|||||||
"deliver_npc": 50028,
|
"deliver_npc": 50028,
|
||||||
"taskend_removeitem": [],
|
"taskend_removeitem": [],
|
||||||
"auto_accept": 0,
|
"auto_accept": 0,
|
||||||
"tasktips": 1,
|
"tasktips": 0,
|
||||||
"lock_add": 1,
|
"lock_add": 1,
|
||||||
"reword": [
|
"reword": [
|
||||||
{
|
{
|
||||||
@ -5139,15 +5139,15 @@
|
|||||||
"icon": "25001",
|
"icon": "25001",
|
||||||
"task_name": {
|
"task_name": {
|
||||||
"key": "worldtask_world_task_task_name_124",
|
"key": "worldtask_world_task_task_name_124",
|
||||||
"text": "商队任务1-任意3装备+3"
|
"text": "资助城市"
|
||||||
},
|
},
|
||||||
"task_details": {
|
"task_details": {
|
||||||
"key": "worldtask_world_task_task_details_124",
|
"key": "worldtask_world_task_task_details_124",
|
||||||
"text": "商队任务1-任意3装备+3"
|
"text": "如今我们稍有资产,守护者希望我们能资助一些城市,当地人会给予一些报酬。"
|
||||||
},
|
},
|
||||||
"npctxt": {
|
"npctxt": {
|
||||||
"key": "worldtask_world_task_npctxt_124",
|
"key": "worldtask_world_task_npctxt_124",
|
||||||
"text": "商队任务1-任意3装备+3"
|
"text": "资助城市"
|
||||||
},
|
},
|
||||||
"get_item": [],
|
"get_item": [],
|
||||||
"trigger": 0,
|
"trigger": 0,
|
||||||
@ -5158,7 +5158,7 @@
|
|||||||
"deliver_npc": 50038,
|
"deliver_npc": 50038,
|
||||||
"taskend_removeitem": [],
|
"taskend_removeitem": [],
|
||||||
"auto_accept": 0,
|
"auto_accept": 0,
|
||||||
"tasktips": 1,
|
"tasktips": 0,
|
||||||
"lock_add": 1,
|
"lock_add": 1,
|
||||||
"reword": [
|
"reword": [
|
||||||
{
|
{
|
||||||
@ -5184,15 +5184,15 @@
|
|||||||
"icon": "25001",
|
"icon": "25001",
|
||||||
"task_name": {
|
"task_name": {
|
||||||
"key": "worldtask_world_task_task_name_125",
|
"key": "worldtask_world_task_task_name_125",
|
||||||
"text": "商队任务2-维京远征2次"
|
"text": "雪中送炭"
|
||||||
},
|
},
|
||||||
"task_details": {
|
"task_details": {
|
||||||
"key": "worldtask_world_task_task_details_125",
|
"key": "worldtask_world_task_task_details_125",
|
||||||
"text": "商队任务2-维京远征2次"
|
"text": "一些城市急需某些道具度过难关,我们或许应当帮助他们运转一下。"
|
||||||
},
|
},
|
||||||
"npctxt": {
|
"npctxt": {
|
||||||
"key": "worldtask_world_task_npctxt_125",
|
"key": "worldtask_world_task_npctxt_125",
|
||||||
"text": "商队任务2-维京远征2次"
|
"text": "雪中送炭"
|
||||||
},
|
},
|
||||||
"get_item": [],
|
"get_item": [],
|
||||||
"trigger": 0,
|
"trigger": 0,
|
||||||
@ -5203,7 +5203,7 @@
|
|||||||
"deliver_npc": 50048,
|
"deliver_npc": 50048,
|
||||||
"taskend_removeitem": [],
|
"taskend_removeitem": [],
|
||||||
"auto_accept": 0,
|
"auto_accept": 0,
|
||||||
"tasktips": 1,
|
"tasktips": 0,
|
||||||
"lock_add": 1,
|
"lock_add": 1,
|
||||||
"reword": [
|
"reword": [
|
||||||
{
|
{
|
||||||
|
@ -547,6 +547,8 @@ type (
|
|||||||
}
|
}
|
||||||
//埋点中心
|
//埋点中心
|
||||||
IBuried interface {
|
IBuried interface {
|
||||||
|
//完成任务埋点
|
||||||
|
CompleteCondition(uid string, condiId int32) (err error)
|
||||||
//埋点中心触发
|
//埋点中心触发
|
||||||
TriggerBuried(session IUserSession, burieds ...*pb.BuriedParam)
|
TriggerBuried(session IUserSession, burieds ...*pb.BuriedParam)
|
||||||
//校验条件是否达成 返回未完成列表
|
//校验条件是否达成 返回未完成列表
|
||||||
|
@ -86,6 +86,89 @@ func (this *Buried) Rpc_ModuleBuriedTrigger(ctx context.Context, req *pb.Rpc_Mod
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//完成任务
|
||||||
|
func (this *Buried) CompleteCondition(uid string, condiId int32) (err error) {
|
||||||
|
var (
|
||||||
|
model *buriedModel
|
||||||
|
bdatas *pb.DBBuried
|
||||||
|
bitem *pb.DBBuriedConItem
|
||||||
|
conf *cfg.GameBuriedCondiData
|
||||||
|
ok bool
|
||||||
|
bdata *pb.DBBuriedItem
|
||||||
|
)
|
||||||
|
|
||||||
|
if model, err = this.modelBuried.getburiedModel(uid); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if bdatas, err = model.getUserBurieds(uid); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
this.Debug("完成埋点!", log.Field{Key: "condiId", Value: condiId})
|
||||||
|
lock, _ := model.userlock(uid)
|
||||||
|
err = lock.Lock()
|
||||||
|
if err != nil {
|
||||||
|
this.Error("埋点分布式锁失效 err!", log.Field{Key: "uid", Value: uid}, log.Field{Key: "err", Value: err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer lock.Unlock()
|
||||||
|
if conf, err = this.configure.getburiedcondidata(condiId); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if bdata, ok = bdatas.Items[conf.Type]; ok {
|
||||||
|
ok = false
|
||||||
|
for _, v1 := range bdata.Condi {
|
||||||
|
if v1.Conid == condiId {
|
||||||
|
ok = true
|
||||||
|
if v1.Finish != pb.BuriedItemFinishState_buried_finish {
|
||||||
|
if conf.Ctype == ctype_once { //完成后自动锁定
|
||||||
|
v1.State = pb.BuriedItemState_Freeze
|
||||||
|
} else if conf.Ctype == ctype_repeat {
|
||||||
|
v1.State = pb.BuriedItemState_Sleep
|
||||||
|
} else if conf.Ctype == ctype_daily {
|
||||||
|
v1.State = pb.BuriedItemState_Sleep
|
||||||
|
} else if conf.Ctype == ctype_weekly {
|
||||||
|
v1.State = pb.BuriedItemState_Sleep
|
||||||
|
}
|
||||||
|
v1.Value = conf.Value
|
||||||
|
v1.Finish = pb.BuriedItemFinishState_buried_finish
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
bdata = &pb.DBBuriedItem{
|
||||||
|
Btype: conf.Type,
|
||||||
|
Condi: make([]*pb.DBBuriedConItem, 0),
|
||||||
|
}
|
||||||
|
bdatas.Items[conf.Type] = bdata
|
||||||
|
}
|
||||||
|
if !ok { //未找到 初始化一个
|
||||||
|
bitem = &pb.DBBuriedConItem{
|
||||||
|
Conid: condiId,
|
||||||
|
State: pb.BuriedItemState_Activated,
|
||||||
|
Value: conf.Value,
|
||||||
|
Statistics: make([]string, 0),
|
||||||
|
Timestamp: time.Now().Unix(),
|
||||||
|
Finish: pb.BuriedItemFinishState_buried_finish,
|
||||||
|
}
|
||||||
|
if conf.Ctype == ctype_once { //完成后自动锁定
|
||||||
|
bitem.State = pb.BuriedItemState_Freeze
|
||||||
|
} else if conf.Ctype == ctype_repeat {
|
||||||
|
bitem.State = pb.BuriedItemState_Sleep
|
||||||
|
} else if conf.Ctype == ctype_daily {
|
||||||
|
bitem.State = pb.BuriedItemState_Sleep
|
||||||
|
} else if conf.Ctype == ctype_weekly {
|
||||||
|
bitem.State = pb.BuriedItemState_Sleep
|
||||||
|
}
|
||||||
|
bdata.Condi = append(bdata.Condi, bitem)
|
||||||
|
}
|
||||||
|
if err = model.updateUserBurieds(uid, bdatas); err != nil {
|
||||||
|
this.Error("更新用户埋点数据错误!", log.Field{Key: "err", Value: err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// 激活数据采集点
|
// 激活数据采集点
|
||||||
func (this *Buried) ActiveCondition(uid string, condiIds ...int32) (errdata *pb.ErrorData) {
|
func (this *Buried) ActiveCondition(uid string, condiIds ...int32) (errdata *pb.ErrorData) {
|
||||||
var (
|
var (
|
||||||
|
@ -663,6 +663,30 @@ func (this *GM) CreateCmd(session comm.IUserSession, cmd string) (errdata *pb.Er
|
|||||||
}
|
}
|
||||||
module1.(comm.Imail).SendNewMail(mail, session.GetUserId())
|
module1.(comm.Imail).SendNewMail(mail, session.GetUserId())
|
||||||
|
|
||||||
|
this.Debug("使用bingo命令:uid = %s ",
|
||||||
|
log.Field{Key: "uid", Value: session.GetUserId()},
|
||||||
|
log.Field{Key: "0", Value: datas[0]},
|
||||||
|
)
|
||||||
|
} else if len(datas) == 2 && (datas[0] == "buried") {
|
||||||
|
var (
|
||||||
|
condiId int
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
condiId, err = strconv.Atoi(datas[1])
|
||||||
|
if err != nil {
|
||||||
|
errdata = &pb.ErrorData{
|
||||||
|
Code: pb.ErrorCode_ReqParameterError,
|
||||||
|
Title: pb.ErrorCode_ReqParameterError.ToString(),
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
module1, err := this.service.GetModule(comm.ModuleBuried)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
module1.(comm.IBuried).CompleteCondition(session.GetUserId(), int32(condiId))
|
||||||
|
|
||||||
this.Debug("使用bingo命令:uid = %s ",
|
this.Debug("使用bingo命令:uid = %s ",
|
||||||
log.Field{Key: "uid", Value: session.GetUserId()},
|
log.Field{Key: "uid", Value: session.GetUserId()},
|
||||||
log.Field{Key: "0", Value: datas[0]},
|
log.Field{Key: "0", Value: datas[0]},
|
||||||
|
@ -33,7 +33,6 @@ type ModuleBase struct {
|
|||||||
ModuleItems comm.IItems //道具背包模块
|
ModuleItems comm.IItems //道具背包模块
|
||||||
ModuleHero comm.IHero //英雄模块
|
ModuleHero comm.IHero //英雄模块
|
||||||
ModuleEquipment comm.IEquipment //装备模块
|
ModuleEquipment comm.IEquipment //装备模块
|
||||||
ModuleTask comm.ITask //任务
|
|
||||||
ModuleFriend comm.IFriend //好友
|
ModuleFriend comm.IFriend //好友
|
||||||
ModuleSociaty comm.ISociaty //公会
|
ModuleSociaty comm.ISociaty //公会
|
||||||
ModulePrivilege comm.IPrivilege // 月卡
|
ModulePrivilege comm.IPrivilege // 月卡
|
||||||
@ -92,11 +91,6 @@ func (this *ModuleBase) Start() (err error) {
|
|||||||
}
|
}
|
||||||
this.ModuleEquipment = module.(comm.IEquipment)
|
this.ModuleEquipment = module.(comm.IEquipment)
|
||||||
|
|
||||||
if module, err = this.service.GetModule(comm.ModuleTask); err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
this.ModuleTask = module.(comm.ITask)
|
|
||||||
|
|
||||||
if module, err = this.service.GetModule(comm.ModuleFriend); err != nil {
|
if module, err = this.service.GetModule(comm.ModuleFriend); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -23,10 +23,10 @@ func (this *apiComp) Get(session comm.IUserSession, req *pb.ReddotGetReq) (errda
|
|||||||
_rid := comm.ReddotType(rid)
|
_rid := comm.ReddotType(rid)
|
||||||
switch _rid {
|
switch _rid {
|
||||||
//任务
|
//任务
|
||||||
case comm.Reddot10101, comm.Reddot10102, comm.Reddot10103, comm.Reddot10201, comm.Reddot10301:
|
// case comm.Reddot10101, comm.Reddot10102, comm.Reddot10103, comm.Reddot10201, comm.Reddot10301:
|
||||||
for k, v := range this.module.ModuleTask.Reddot(session, _rid) {
|
// for k, v := range this.module.ModuleTask.Reddot(session, _rid) {
|
||||||
reddot[int32(k)] = v
|
// reddot[int32(k)] = v
|
||||||
}
|
// }
|
||||||
//主线
|
//主线
|
||||||
case comm.Reddot24101:
|
case comm.Reddot24101:
|
||||||
for k, v := range this.module.mline.Reddot(session, _rid) {
|
for k, v := range this.module.mline.Reddot(session, _rid) {
|
||||||
|
@ -20,14 +20,14 @@ func (this *apiComp) GetAll(session comm.IUserSession, req *pb.ReddotGetAllReq)
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
//任务系统
|
//任务系统
|
||||||
for k, v := range this.module.ModuleTask.Reddot(session,
|
// for k, v := range this.module.ModuleTask.Reddot(session,
|
||||||
comm.Reddot10101,
|
// comm.Reddot10101,
|
||||||
comm.Reddot10102,
|
// comm.Reddot10102,
|
||||||
comm.Reddot10103,
|
// comm.Reddot10103,
|
||||||
comm.Reddot10201,
|
// comm.Reddot10201,
|
||||||
comm.Reddot10301) {
|
// comm.Reddot10301) {
|
||||||
reddot[int32(k)] = v
|
// reddot[int32(k)] = v
|
||||||
}
|
// }
|
||||||
|
|
||||||
//每日任务
|
//每日任务
|
||||||
for k, v := range this.module.dailytask.Reddot(session,
|
for k, v := range this.module.dailytask.Reddot(session,
|
||||||
|
@ -1,37 +0,0 @@
|
|||||||
package task
|
|
||||||
|
|
||||||
import (
|
|
||||||
"go_dreamfactory/lego/core"
|
|
||||||
"go_dreamfactory/modules"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
TaskSubTypeList = "list" //任务列表
|
|
||||||
TaskSubTypeReceive = "receive" //领取
|
|
||||||
TaskSubTypeActiveList = "activelist" //活跃度列表
|
|
||||||
TaskSubTypeActiveReceive = "activereceive" //活跃度领取
|
|
||||||
TaskSubTypeStrategy = "strategy" //卡牌攻略
|
|
||||||
TaskSubTypeFinishedPush = "taskfinishedpush" //推送
|
|
||||||
TaskSubTypeGetrecord = "getrecord" //任务数据
|
|
||||||
TaskSubTypeSend = "send" //触发任务
|
|
||||||
)
|
|
||||||
|
|
||||||
type apiComp struct {
|
|
||||||
modules.MCompGate
|
|
||||||
service core.IService
|
|
||||||
module *ModuleTask
|
|
||||||
}
|
|
||||||
|
|
||||||
// 组件初始化接口
|
|
||||||
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.(*ModuleTask)
|
|
||||||
this.service = service
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *apiComp) Start() (err error) {
|
|
||||||
err = this.MCompGate.Start()
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
@ -1,53 +0,0 @@
|
|||||||
package task
|
|
||||||
|
|
||||||
import (
|
|
||||||
"go_dreamfactory/comm"
|
|
||||||
"go_dreamfactory/pb"
|
|
||||||
)
|
|
||||||
|
|
||||||
// 活跃度列表
|
|
||||||
func (this *apiComp) ActiveListCheck(session comm.IUserSession, req *pb.TaskActiveListReq) (errdata *pb.ErrorData) {
|
|
||||||
if req.TaskTag <= 0 || req.TaskTag > 2 {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_ReqParameterError,
|
|
||||||
Title: pb.ErrorCode_ReqParameterError.ToString(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *apiComp) ActiveList(session comm.IUserSession, req *pb.TaskActiveListReq) (errdata *pb.ErrorData) {
|
|
||||||
if errdata = this.ActiveListCheck(session, req); errdata != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
resp := &pb.TaskActiveListResp{}
|
|
||||||
defer func() {
|
|
||||||
session.SendMsg(string(this.module.GetType()), TaskSubTypeActiveList, resp)
|
|
||||||
}()
|
|
||||||
|
|
||||||
// 获取玩家活跃度
|
|
||||||
expand, err := this.module.ModuleUser.GetUserExpand(session.GetUserId())
|
|
||||||
if err != nil {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_DBError,
|
|
||||||
Title: pb.ErrorCode_DBError.ToString(),
|
|
||||||
Message: err.Error(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if expand != nil {
|
|
||||||
// 返回活跃度
|
|
||||||
if req.TaskTag == int32(comm.TASK_DAILY) {
|
|
||||||
resp.Active = expand.Activeday
|
|
||||||
} else if req.TaskTag == int32(comm.TASK_WEEKLY) {
|
|
||||||
resp.Active = expand.Activeweek
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//获取当前Tag的活跃度列表
|
|
||||||
resp.List = this.module.modelTaskActive.getActiveListByTag(session.GetUserId(), comm.TaskTag(req.TaskTag))
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
@ -1,143 +0,0 @@
|
|||||||
package task
|
|
||||||
|
|
||||||
import (
|
|
||||||
"go_dreamfactory/comm"
|
|
||||||
"go_dreamfactory/lego/sys/log"
|
|
||||||
"go_dreamfactory/pb"
|
|
||||||
cfg "go_dreamfactory/sys/configure/structs"
|
|
||||||
)
|
|
||||||
|
|
||||||
// 活跃度领取
|
|
||||||
func (this *apiComp) ActiveReceiveCheck(session comm.IUserSession, req *pb.TaskActiveReceiveReq) (errdata *pb.ErrorData) {
|
|
||||||
var code pb.ErrorCode
|
|
||||||
if req.Id == 0 {
|
|
||||||
code = pb.ErrorCode_TaskIdEmpty
|
|
||||||
} else if req.TaskTag <= 0 || req.TaskTag > 2 {
|
|
||||||
code = pb.ErrorCode_TaskTagEmpty
|
|
||||||
}
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: code,
|
|
||||||
Title: code.ToString(),
|
|
||||||
}
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *apiComp) ActiveReceive(session comm.IUserSession, req *pb.TaskActiveReceiveReq) (errdata *pb.ErrorData) {
|
|
||||||
var (
|
|
||||||
active *pb.DBActivity
|
|
||||||
err error
|
|
||||||
)
|
|
||||||
|
|
||||||
if errdata = this.ActiveReceiveCheck(session, req); errdata != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
uid := session.GetUserId()
|
|
||||||
|
|
||||||
ue, err := this.module.ModuleUser.GetUserExpand(uid)
|
|
||||||
if err != nil {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_DBError,
|
|
||||||
Title: pb.ErrorCode_DBError.ToString(),
|
|
||||||
Message: err.Error(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if ue == nil {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_UserExpandNull,
|
|
||||||
Title: pb.ErrorCode_UserExpandNull.ToString(),
|
|
||||||
Message: err.Error(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
var rewards []*cfg.Gameatn
|
|
||||||
var flag bool
|
|
||||||
update := map[string]interface{}{}
|
|
||||||
// 玩家的
|
|
||||||
if active, err = this.module.modelTaskActive.getActiveList(uid); err != nil {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_DBError,
|
|
||||||
Title: pb.ErrorCode_DBError.ToString(),
|
|
||||||
Message: err.Error(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
// var activityData *pb.ActivityData
|
|
||||||
for _, v := range active.ActivityList {
|
|
||||||
if v.TaskId == req.Id {
|
|
||||||
if v.Received != 1 {
|
|
||||||
conf := this.module.configure.getTaskActiveById(v.TaskId)
|
|
||||||
if conf == nil {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_ConfigNoFound,
|
|
||||||
Title: pb.ErrorCode_ConfigNoFound.ToString(),
|
|
||||||
Message: err.Error(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if req.TaskTag == int32(comm.TASK_DAILY) {
|
|
||||||
if ue.Activeday < conf.Active {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_TaskActiveNoenough,
|
|
||||||
Title: pb.ErrorCode_TaskActiveNoenough.ToString(),
|
|
||||||
Message: err.Error(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
} else if req.TaskTag == int32(comm.TASK_WEEKLY) {
|
|
||||||
if ue.Activeweek < conf.Active {
|
|
||||||
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_TaskActiveNoenough,
|
|
||||||
Title: pb.ErrorCode_TaskActiveNoenough.ToString(),
|
|
||||||
Message: err.Error(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
v.Received = 1
|
|
||||||
flag = true
|
|
||||||
rewards = append(rewards, conf.Reword...)
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if flag {
|
|
||||||
update["activityList"] = active.ActivityList
|
|
||||||
|
|
||||||
if err := this.module.modelTaskActive.Change(session.GetUserId(), update); err != nil {
|
|
||||||
this.module.Errorf("updateReceive err %v", err)
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_DBError,
|
|
||||||
Title: pb.ErrorCode_DBError.ToString(),
|
|
||||||
Message: err.Error(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(rewards) > 0 {
|
|
||||||
//派发奖励
|
|
||||||
if errdata = this.module.DispenseRes(session, rewards, true); errdata != nil {
|
|
||||||
this.module.Error("活跃度奖励",
|
|
||||||
log.Field{Key: "uid", Value: uid},
|
|
||||||
log.Field{Key: "rewards", Value: rewards},
|
|
||||||
)
|
|
||||||
}
|
|
||||||
go this.module.ModuleBuried.TriggerBuried(session.Clone(), comm.GetBuriedParam(comm.Rtype171, 1))
|
|
||||||
}
|
|
||||||
|
|
||||||
resp := &pb.TaskActiveReceiveResp{
|
|
||||||
TaskTag: req.TaskTag,
|
|
||||||
Id: req.Id,
|
|
||||||
}
|
|
||||||
|
|
||||||
session.SendMsg(string(this.module.GetType()), TaskSubTypeActiveReceive, resp)
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
@ -1,46 +0,0 @@
|
|||||||
package task
|
|
||||||
|
|
||||||
import (
|
|
||||||
"go_dreamfactory/comm"
|
|
||||||
"go_dreamfactory/pb"
|
|
||||||
)
|
|
||||||
|
|
||||||
// 任务列表
|
|
||||||
|
|
||||||
func (this *apiComp) ListCheck(session comm.IUserSession, req *pb.TaskListReq) (errdata *pb.ErrorData) {
|
|
||||||
if req.TaskTag <= 0 || req.TaskTag > 3 {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_ReqParameterError,
|
|
||||||
Title: pb.ErrorCode_ReqParameterError.ToString(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *apiComp) List(session comm.IUserSession, req *pb.TaskListReq) (errdata *pb.ErrorData) {
|
|
||||||
if errdata = this.ListCheck(session, req); errdata != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
rsp := &pb.TaskListResp{}
|
|
||||||
|
|
||||||
task := this.module.modelTask.getTaskListByTag(session.GetUserId(), comm.TaskTag(req.TaskTag))
|
|
||||||
if task == nil {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_TaskNotFound,
|
|
||||||
Title: pb.ErrorCode_TaskNotFound.ToString(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
switch req.TaskTag {
|
|
||||||
case int32(comm.TASK_DAILY):
|
|
||||||
rsp.List = task.DayList
|
|
||||||
case int32(comm.TASK_WEEKLY):
|
|
||||||
rsp.List = task.WeekList
|
|
||||||
case int32(comm.TASK_ACHIEVE):
|
|
||||||
rsp.List = task.AchieveList
|
|
||||||
}
|
|
||||||
|
|
||||||
session.SendMsg(string(this.module.GetType()), TaskSubTypeList, rsp)
|
|
||||||
return
|
|
||||||
}
|
|
@ -1,228 +0,0 @@
|
|||||||
package task
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"go_dreamfactory/comm"
|
|
||||||
"go_dreamfactory/lego/sys/log"
|
|
||||||
"go_dreamfactory/pb"
|
|
||||||
cfg "go_dreamfactory/sys/configure/structs"
|
|
||||||
)
|
|
||||||
|
|
||||||
//任务奖励领取
|
|
||||||
|
|
||||||
func (this *apiComp) ReceiveCheck(session comm.IUserSession, req *pb.TaskReceiveReq) (errdata *pb.ErrorData) {
|
|
||||||
var code pb.ErrorCode
|
|
||||||
if req.Id == 0 {
|
|
||||||
code = pb.ErrorCode_TaskIdEmpty
|
|
||||||
} else if req.TaskTag == 0 {
|
|
||||||
code = pb.ErrorCode_TaskTagEmpty
|
|
||||||
}
|
|
||||||
|
|
||||||
if code != 0 {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: code,
|
|
||||||
Title: code.ToString(),
|
|
||||||
Message: fmt.Sprintf("Id:%v tag:%v", req.Id, req.TaskTag),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *apiComp) Receive(session comm.IUserSession, req *pb.TaskReceiveReq) (errdata *pb.ErrorData) {
|
|
||||||
var (
|
|
||||||
userTask *pb.DBTask
|
|
||||||
taskDataList []*pb.TaskData
|
|
||||||
active *pb.DBActivity
|
|
||||||
err error
|
|
||||||
)
|
|
||||||
|
|
||||||
if errdata = this.ReceiveCheck(session, req); errdata != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
uid := session.GetUserId()
|
|
||||||
// 获取待领取的任务
|
|
||||||
if userTask, err = this.module.modelTask.getUserTask(uid); err != nil {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_TaskNotFound,
|
|
||||||
Title: pb.ErrorCode_TaskNotFound.ToString(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
switch req.TaskTag {
|
|
||||||
case int32(comm.TASK_DAILY):
|
|
||||||
taskDataList = userTask.DayList
|
|
||||||
case int32(comm.TASK_WEEKLY):
|
|
||||||
taskDataList = userTask.WeekList
|
|
||||||
case int32(comm.TASK_ACHIEVE):
|
|
||||||
taskDataList = userTask.AchieveList
|
|
||||||
}
|
|
||||||
|
|
||||||
var taskData *pb.TaskData
|
|
||||||
for _, v := range taskDataList {
|
|
||||||
if v.TaskId == req.Id {
|
|
||||||
taskData = v
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//判断是否完成
|
|
||||||
if taskData.Status == 0 {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_TaskNoFinished,
|
|
||||||
Title: pb.ErrorCode_TaskNoFinished.ToString(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
//判断任务是否领取
|
|
||||||
if taskData.Received == 1 {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_TaskReceived,
|
|
||||||
Title: pb.ErrorCode_TaskReceived.ToString(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 待领取的任务配置
|
|
||||||
conf := this.module.configure.getTaskById(taskData.TaskId)
|
|
||||||
if conf == nil {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_ConfigNoFound,
|
|
||||||
Title: pb.ErrorCode_ConfigNoFound.ToString(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 更新活跃度
|
|
||||||
if conf.Active > 0 {
|
|
||||||
//更新活跃度
|
|
||||||
ue, err := this.module.ModuleUser.GetUserExpand(session.GetUserId())
|
|
||||||
if err != nil {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_DBError,
|
|
||||||
Title: pb.ErrorCode_DBError.ToString(),
|
|
||||||
Message: err.Error(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
update := make(map[string]interface{})
|
|
||||||
if ue != nil {
|
|
||||||
if comm.TaskTag(req.TaskTag) == comm.TASK_DAILY {
|
|
||||||
ue.Activeday = ue.Activeday + conf.Active
|
|
||||||
update["activeday"] = ue.Activeday
|
|
||||||
}
|
|
||||||
if comm.TaskTag(req.TaskTag) == comm.TASK_WEEKLY {
|
|
||||||
ue.Activeweek = ue.Activeweek + conf.Active
|
|
||||||
update["activeweek"] = ue.Activeweek
|
|
||||||
}
|
|
||||||
// 周任务 自动领取奖励
|
|
||||||
if comm.TaskTag(req.TaskTag) == comm.TASK_WEEKLY {
|
|
||||||
TaskActive := make(map[string]interface{})
|
|
||||||
if active, err = this.module.modelTaskActive.getActiveList(uid); err != nil {
|
|
||||||
|
|
||||||
}
|
|
||||||
var rewards []*cfg.Gameatn
|
|
||||||
var maxTaskId int32
|
|
||||||
for _, v := range active.ActivityList {
|
|
||||||
if v.Received != 1 {
|
|
||||||
conf := this.module.configure.getTaskActiveById(v.TaskId)
|
|
||||||
if conf == nil {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_ConfigNoFound,
|
|
||||||
Title: pb.ErrorCode_ConfigNoFound.ToString(),
|
|
||||||
Message: err.Error(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if ue.Activeweek < conf.Active {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
v.Received = 1
|
|
||||||
rewards = append(rewards, conf.Reword...)
|
|
||||||
}
|
|
||||||
|
|
||||||
maxTaskId = v.TaskId
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(rewards) > 0 {
|
|
||||||
TaskActive["activityList"] = active.ActivityList
|
|
||||||
|
|
||||||
if err := this.module.modelTaskActive.Change(session.GetUserId(), TaskActive); err != nil {
|
|
||||||
this.module.Errorf("updateReceive err %v", err)
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_DBError,
|
|
||||||
Title: pb.ErrorCode_DBError.ToString(),
|
|
||||||
Message: err.Error(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
//派发奖励
|
|
||||||
if errdata = this.module.DispenseRes(session, rewards, true); errdata != nil {
|
|
||||||
this.module.Error("活跃度奖励",
|
|
||||||
log.Field{Key: "uid", Value: uid},
|
|
||||||
log.Field{Key: "rewards", Value: rewards},
|
|
||||||
)
|
|
||||||
}
|
|
||||||
go this.module.ModuleBuried.TriggerBuried(session.Clone(), comm.GetBuriedParam(comm.Rtype171, 1))
|
|
||||||
session.SendMsg(string(this.module.GetType()), "activereceive", &pb.TaskActiveReceivePush{
|
|
||||||
TaskTag: int32(comm.TASK_WEEKLY),
|
|
||||||
Id: maxTaskId,
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(update) > 0 {
|
|
||||||
if err = this.module.ModuleUser.ChangeUserExpand(session.GetUserId(), update); err != nil {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_DBError,
|
|
||||||
Title: pb.ErrorCode_DBError.ToString(),
|
|
||||||
Message: err.Error(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//奖励
|
|
||||||
if errdata = this.module.DispenseRes(session, conf.Reword, true); errdata != nil {
|
|
||||||
this.module.Error("发送奖励",
|
|
||||||
log.Field{Key: "uid", Value: uid},
|
|
||||||
log.Field{Key: "rewards", Value: conf.Reword},
|
|
||||||
log.Field{Key: "errdata", Value: errdata},
|
|
||||||
)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
//更新用户领取状态
|
|
||||||
for _, v := range taskDataList {
|
|
||||||
if v.TaskId == req.Id {
|
|
||||||
v.Received = 1
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
update := map[string]interface{}{}
|
|
||||||
switch req.TaskTag {
|
|
||||||
case int32(comm.TASK_DAILY):
|
|
||||||
update["dayList"] = taskDataList
|
|
||||||
case int32(comm.TASK_WEEKLY):
|
|
||||||
update["weekList"] = taskDataList
|
|
||||||
case int32(comm.TASK_ACHIEVE):
|
|
||||||
update["achieveList"] = taskDataList
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := this.module.modelTask.Change(session.GetUserId(), update); err != nil {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_DBError,
|
|
||||||
Title: pb.ErrorCode_DBError.ToString(),
|
|
||||||
Message: err.Error(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
session.SendMsg(string(this.module.GetType()), TaskSubTypeReceive, &pb.TaskReceiveResp{TaskId: taskData.TaskId})
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
@ -1,31 +0,0 @@
|
|||||||
package task
|
|
||||||
|
|
||||||
import (
|
|
||||||
"go_dreamfactory/comm"
|
|
||||||
"go_dreamfactory/pb"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (this *apiComp) SendCheck(session comm.IUserSession, req *pb.TaskSendReq) (errdata *pb.ErrorData) {
|
|
||||||
if len(req.Params) == 0 || req.TaskType == 0 {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_ReqParameterError,
|
|
||||||
Title: pb.ErrorCode_ReqParameterError.ToString(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *apiComp) Send(session comm.IUserSession, req *pb.TaskSendReq) (errdata *pb.ErrorData) {
|
|
||||||
// if imodule, err := this.service.GetModule(comm.ModuleRtask); err == nil {
|
|
||||||
// if itask, ok := imodule.(comm.IRtask); ok {
|
|
||||||
// itask.TriggerTask(session.GetUserId(), comm.GetTaskParam(comm.TaskType(req.TaskType), req.Params...))
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// this.module.ModuleBuried.TriggerBuried(session.Clone(),comm.GetBuriedParam(comm.TaskType(req.TaskType)))
|
|
||||||
rsp := &pb.TaskSendResp{
|
|
||||||
IsSucc: true,
|
|
||||||
}
|
|
||||||
session.SendMsg(string(this.module.GetType()), TaskSubTypeSend, rsp)
|
|
||||||
return
|
|
||||||
}
|
|
@ -1,201 +0,0 @@
|
|||||||
package task
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"go_dreamfactory/comm"
|
|
||||||
"go_dreamfactory/lego/core"
|
|
||||||
"go_dreamfactory/lego/sys/log"
|
|
||||||
"go_dreamfactory/modules"
|
|
||||||
cfg "go_dreamfactory/sys/configure/structs"
|
|
||||||
"sort"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
gameActiveReward = "game_taskactivereward.json"
|
|
||||||
gameTaskRound = "game_taskround.json"
|
|
||||||
)
|
|
||||||
|
|
||||||
type configureComp struct {
|
|
||||||
modules.MCompConfigure
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *configureComp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
|
|
||||||
err = this.MCompConfigure.Init(service, module, comp, options)
|
|
||||||
this.LoadMultiConfigure(map[string]interface{}{
|
|
||||||
gameTaskRound: cfg.NewGameTaskRound,
|
|
||||||
gameActiveReward: cfg.NewGameActiveReward,
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
//获取活跃度奖励配置
|
|
||||||
func (this *configureComp) getActiveRewardCfg() (data *cfg.GameActiveReward, err error) {
|
|
||||||
var (
|
|
||||||
v interface{}
|
|
||||||
ok bool
|
|
||||||
)
|
|
||||||
if v, err = this.GetConfigure(gameActiveReward); err != nil {
|
|
||||||
return
|
|
||||||
} else {
|
|
||||||
if data, ok = v.(*cfg.GameActiveReward); !ok {
|
|
||||||
err = fmt.Errorf("%T no is *cfg.Game_ActiveReward", v)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
//获取任务配置
|
|
||||||
func (this *configureComp) getTaskRoundCfg() (data *cfg.GameTaskRound, err error) {
|
|
||||||
var (
|
|
||||||
v interface{}
|
|
||||||
ok bool
|
|
||||||
)
|
|
||||||
if v, err = this.GetConfigure(gameTaskRound); err != nil {
|
|
||||||
return
|
|
||||||
} else {
|
|
||||||
if data, ok = v.(*cfg.GameTaskRound); !ok {
|
|
||||||
err = fmt.Errorf("%T no is *cfg.Game_taskRound", v)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
//根据taskId获取配置
|
|
||||||
func (this *configureComp) getTaskById(taskId int32) (data *cfg.GameTaskRoundData) {
|
|
||||||
cfg, err := this.getTaskRoundCfg()
|
|
||||||
if err != nil {
|
|
||||||
log.Errorf("%v", err)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
if cfg != nil {
|
|
||||||
data = cfg.GetDataMap()[taskId]
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
//是否第一个成就任务
|
|
||||||
func (this *configureComp) isFirstTask(taskId int32) bool {
|
|
||||||
data := this.getTaskByTag(int32(comm.TASK_ACHIEVE))
|
|
||||||
for _, v := range data {
|
|
||||||
if taskId == v.IdAfter {
|
|
||||||
return false
|
|
||||||
} else {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// 上一个任务
|
|
||||||
func (this *configureComp) getPreTask(preTaskId int32) *cfg.GameTaskRoundData {
|
|
||||||
data := this.getTaskByTag(int32(comm.TASK_ACHIEVE))
|
|
||||||
for _, v := range data {
|
|
||||||
if v.IdAfter == preTaskId {
|
|
||||||
return v
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
//获取任务配置列表
|
|
||||||
func (this *configureComp) getTaskList() (data []*cfg.GameTaskRoundData, err error) {
|
|
||||||
cfg, err := this.getTaskRoundCfg()
|
|
||||||
if err != nil {
|
|
||||||
log.Errorf("%v", err)
|
|
||||||
return data, err
|
|
||||||
}
|
|
||||||
if cfg != nil {
|
|
||||||
data = cfg.GetDataList()
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
//根据任务类型获取任务列表
|
|
||||||
func (this *configureComp) getTasks(taskType int32) (data []*cfg.GameTaskRoundData, err error) {
|
|
||||||
list, err := this.getTaskList()
|
|
||||||
if err != nil {
|
|
||||||
log.Errorf("%v", err)
|
|
||||||
return data, err
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, d := range list {
|
|
||||||
if d.TypeId == taskType {
|
|
||||||
data = append(data, d)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
//任务列表 正序
|
|
||||||
func (this *configureComp) getSortedTasks(taskType int32) (data []*cfg.GameTaskRoundData, err error) {
|
|
||||||
if data, err = this.getTasks(taskType); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
sort.SliceStable(data, func(i, j int) bool {
|
|
||||||
return data[i].IdList > data[j].IdList
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
//获取任务配置 条件 tasktag
|
|
||||||
func (this *configureComp) getTaskByTag(taskTag int32) (data []*cfg.GameTaskRoundData) {
|
|
||||||
list, err := this.getTaskList()
|
|
||||||
if err != nil {
|
|
||||||
log.Errorf("%v", err)
|
|
||||||
return data
|
|
||||||
}
|
|
||||||
for _, d := range list {
|
|
||||||
if d.IdTag == taskTag {
|
|
||||||
data = append(data, d)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *configureComp) getTaskActiveList() (data []*cfg.GameActiveRewardData) {
|
|
||||||
conf, err := this.getActiveRewardCfg()
|
|
||||||
if err != nil {
|
|
||||||
log.Errorf("get conf err:%v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if conf != nil {
|
|
||||||
data = conf.GetDataList()
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
//获取活跃度奖励list
|
|
||||||
func (this *configureComp) getTaskActiveByTag(taskTag int32) (data []*cfg.GameActiveRewardData) {
|
|
||||||
conf, err := this.getActiveRewardCfg()
|
|
||||||
if err != nil {
|
|
||||||
log.Errorf("get conf err:%v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if conf != nil {
|
|
||||||
for _, v := range conf.GetDataList() {
|
|
||||||
if v.IdTag == taskTag {
|
|
||||||
data = append(data, v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取活跃度配置map
|
|
||||||
func (this *configureComp) getTaskActiveById(id int32) (data *cfg.GameActiveRewardData) {
|
|
||||||
conf, err := this.getActiveRewardCfg()
|
|
||||||
if err != nil {
|
|
||||||
log.Errorf("get conf err:%v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if conf != nil {
|
|
||||||
if v, ok := conf.GetDataMap()[id]; ok {
|
|
||||||
return v
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
@ -1,147 +0,0 @@
|
|||||||
package task
|
|
||||||
|
|
||||||
import (
|
|
||||||
"go_dreamfactory/comm"
|
|
||||||
"go_dreamfactory/lego/core"
|
|
||||||
"go_dreamfactory/lego/sys/mgo"
|
|
||||||
"go_dreamfactory/modules"
|
|
||||||
"go_dreamfactory/pb"
|
|
||||||
|
|
||||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
||||||
"go.mongodb.org/mongo-driver/mongo"
|
|
||||||
"go.mongodb.org/mongo-driver/x/bsonx"
|
|
||||||
)
|
|
||||||
|
|
||||||
type ModelTaskActive struct {
|
|
||||||
modules.MCompModel
|
|
||||||
module *ModuleTask
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *ModelTaskActive) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
|
|
||||||
this.TableName = comm.TableTaskActive
|
|
||||||
err = this.MCompModel.Init(service, module, comp, options)
|
|
||||||
this.module = module.(*ModuleTask)
|
|
||||||
// 加索引
|
|
||||||
this.DB.CreateIndex(core.SqlTable(this.TableName), mongo.IndexModel{
|
|
||||||
Keys: bsonx.Doc{{Key: "uid", Value: bsonx.Int32(1)}},
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 初始化活跃度
|
|
||||||
func (this *ModelTaskActive) initActiveReward(active *pb.DBActivity, taskTag comm.TaskTag) {
|
|
||||||
data := this.module.configure.getTaskActiveByTag(int32(taskTag))
|
|
||||||
for _, conf := range data {
|
|
||||||
ta := &pb.ActivityData{
|
|
||||||
Tag: int32(taskTag),
|
|
||||||
TaskId: conf.Key,
|
|
||||||
}
|
|
||||||
active.ActivityList = append(active.ActivityList, ta)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *ModelTaskActive) getActiveList(uid string) (active *pb.DBActivity, err error) {
|
|
||||||
active = &pb.DBActivity{}
|
|
||||||
if err = this.Get(uid, active); err != nil && err != mgo.MongodbNil {
|
|
||||||
this.module.Errorf("getTaskList err %v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err == mongo.ErrNoDocuments {
|
|
||||||
objId := primitive.NewObjectID().Hex()
|
|
||||||
active = &pb.DBActivity{
|
|
||||||
Uid: uid,
|
|
||||||
Id: objId,
|
|
||||||
ActivityList: make([]*pb.ActivityData, 0),
|
|
||||||
}
|
|
||||||
err = this.Add(uid, active)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取玩家活跃度列表
|
|
||||||
func (this *ModelTaskActive) getActiveListByTag(uid string, taskTag comm.TaskTag) (list []*pb.ActivityData) {
|
|
||||||
task := &pb.DBActivity{}
|
|
||||||
if err := this.Get(uid, task); err != nil {
|
|
||||||
this.module.Errorf("getTaskList err %v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, v := range task.ActivityList {
|
|
||||||
if v.Tag == int32(taskTag) {
|
|
||||||
list = append(list, v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return list
|
|
||||||
}
|
|
||||||
|
|
||||||
// 查询完成的且未领取的任务 发现未领取返回true
|
|
||||||
func (this *ModelTaskActive) noReceiveTaskActive(user *pb.DBUserExpand, activityList []*pb.ActivityData, taskTag comm.TaskTag) (bool, error) {
|
|
||||||
|
|
||||||
for _, v := range activityList {
|
|
||||||
if v.Tag == int32(taskTag) && v.Received == 0 {
|
|
||||||
conf := this.module.configure.getTaskActiveById(v.TaskId)
|
|
||||||
if conf != nil && user != nil {
|
|
||||||
switch taskTag {
|
|
||||||
case comm.TASK_DAILY:
|
|
||||||
if user.Activeday >= conf.Active {
|
|
||||||
return true, nil
|
|
||||||
}
|
|
||||||
case comm.TASK_WEEKLY:
|
|
||||||
if user.Activeweek >= conf.Active {
|
|
||||||
return true, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取玩家活跃记录 id 唯一ID
|
|
||||||
func (this *ModelTaskActive) getUserActive(uid string, taskId int32, taskTag comm.TaskTag) *pb.ActivityData {
|
|
||||||
record := this.getActiveListByTag(uid, taskTag)
|
|
||||||
for _, v := range record {
|
|
||||||
if v.TaskId == taskId {
|
|
||||||
return v
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *ModelTaskActive) updateReceive(uid string, data map[string]interface{}) (err error) {
|
|
||||||
if len(data) == 0 {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
return this.module.modelTaskActive.Change(uid, data)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 清空活跃度任务
|
|
||||||
func (this *ModelTaskActive) clearTask(uid string, taskTag ...comm.TaskTag) {
|
|
||||||
if len(taskTag) == 0 {
|
|
||||||
this.module.Errorf("least one param for taskTag")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
var (
|
|
||||||
active *pb.DBActivity
|
|
||||||
err error
|
|
||||||
)
|
|
||||||
if active, err = this.getActiveList(uid); err != nil {
|
|
||||||
this.module.Errorln(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
for i := 0; i < len(active.ActivityList); i++ {
|
|
||||||
if active.ActivityList[i].Tag == int32(taskTag[0]) {
|
|
||||||
active.ActivityList = append(active.ActivityList[:i], active.ActivityList[i+1:]...)
|
|
||||||
i--
|
|
||||||
}
|
|
||||||
}
|
|
||||||
update := map[string]interface{}{
|
|
||||||
"activityList": active.ActivityList,
|
|
||||||
}
|
|
||||||
if err := this.module.modelTaskActive.Change(uid, update); err != nil {
|
|
||||||
this.module.Errorf("uid: %v err:%v", uid, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,371 +0,0 @@
|
|||||||
package task
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"go_dreamfactory/comm"
|
|
||||||
"go_dreamfactory/lego/core"
|
|
||||||
event_v2 "go_dreamfactory/lego/sys/event/v2"
|
|
||||||
"go_dreamfactory/lego/sys/log"
|
|
||||||
"go_dreamfactory/lego/sys/mgo"
|
|
||||||
"go_dreamfactory/modules"
|
|
||||||
"go_dreamfactory/pb"
|
|
||||||
"sort"
|
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
||||||
"go.mongodb.org/mongo-driver/mongo"
|
|
||||||
"go.mongodb.org/mongo-driver/x/bsonx"
|
|
||||||
)
|
|
||||||
|
|
||||||
type ModelTask struct {
|
|
||||||
modules.MCompModel
|
|
||||||
module *ModuleTask
|
|
||||||
EventApp *event_v2.App
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *ModelTask) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
|
|
||||||
this.TableName = comm.TableTask
|
|
||||||
err = this.MCompModel.Init(service, module, comp, options)
|
|
||||||
this.module = module.(*ModuleTask)
|
|
||||||
this.EventApp = event_v2.NewApp()
|
|
||||||
// this.EventApp.Listen(comm.EventTaskChanged, this.doTaskHandle)
|
|
||||||
this.DB.CreateIndex(core.SqlTable(this.TableName), mongo.IndexModel{
|
|
||||||
Keys: bsonx.Doc{{Key: "uid", Value: bsonx.Int32(1)}},
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 查询完成的且未领取的任务 发现未领取返回true
|
|
||||||
func (this *ModelTask) noReceiveTask(task *pb.DBTask, taskTag comm.TaskTag) (bool, error) {
|
|
||||||
if taskTag == comm.TASK_DAILY {
|
|
||||||
for _, v := range task.DayList {
|
|
||||||
if v.Received == 0 {
|
|
||||||
return true, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if taskTag == comm.TASK_WEEKLY {
|
|
||||||
for _, v := range task.WeekList {
|
|
||||||
if v.Received == 0 {
|
|
||||||
return true, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *ModelTask) checkTaskStatus(uid string, list []*pb.TaskData) []*pb.TaskData {
|
|
||||||
// 待校验的条件ID
|
|
||||||
condIds := []int32{}
|
|
||||||
for _, v := range list {
|
|
||||||
condIds = append(condIds, v.TypeId)
|
|
||||||
}
|
|
||||||
|
|
||||||
conds, err := this.module.ModuleBuried.CheckCondition(uid, condIds...)
|
|
||||||
if err != nil {
|
|
||||||
this.module.Error(err.Error())
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, v := range list {
|
|
||||||
for _, cond := range conds {
|
|
||||||
if v.TypeId == cond.Conid {
|
|
||||||
v.Cond = cond
|
|
||||||
if cond.State == pb.BuriedItemFinishState_buried_finish {
|
|
||||||
v.Status = 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return list
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取玩家任务列表
|
|
||||||
func (this *ModelTask) getTaskListByTag(uid string, taskTag comm.TaskTag) *pb.DBTask {
|
|
||||||
task := &pb.DBTask{}
|
|
||||||
if err := this.Get(uid, task); err != nil {
|
|
||||||
this.module.Errorf("getTaskList err %v", err)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if task == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// 排序
|
|
||||||
sort.SliceStable(task.DayList, func(i, j int) bool {
|
|
||||||
return task.DayList[i].Sort < task.DayList[j].Sort
|
|
||||||
})
|
|
||||||
sort.SliceStable(task.WeekList, func(i, j int) bool {
|
|
||||||
return task.WeekList[i].Sort < task.WeekList[j].Sort
|
|
||||||
})
|
|
||||||
|
|
||||||
update := map[string]interface{}{}
|
|
||||||
var dataList []*pb.TaskData
|
|
||||||
if taskTag == comm.TASK_DAILY {
|
|
||||||
dataList = task.DayList
|
|
||||||
} else if taskTag == comm.TASK_WEEKLY {
|
|
||||||
dataList = task.WeekList
|
|
||||||
}
|
|
||||||
|
|
||||||
dataList = this.checkTaskStatus(uid, dataList)
|
|
||||||
|
|
||||||
if taskTag == comm.TASK_DAILY {
|
|
||||||
update["dayList"] = dataList
|
|
||||||
} else if taskTag == comm.TASK_WEEKLY {
|
|
||||||
update["weekList"] = dataList
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := this.module.modelTask.Change(uid, update); err != nil {
|
|
||||||
this.module.Error("change err", log.Field{Key: "uid", Value: uid})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 当前玩家成就任务
|
|
||||||
getCurTask := func(taskId int32) *pb.TaskData {
|
|
||||||
for _, v := range task.AchieveList {
|
|
||||||
if v.TaskId == taskId {
|
|
||||||
return v
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// 判断上个成就任务领取了才显示最后一个任务
|
|
||||||
isReceived := func(taskId int32) bool {
|
|
||||||
if preCnf := this.module.configure.getPreTask(taskId); preCnf != nil {
|
|
||||||
if preTask := getCurTask(preCnf.Key); preTask != nil {
|
|
||||||
if preTask.Received == 1 {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// 成就列表
|
|
||||||
var achieveList []*pb.TaskData
|
|
||||||
|
|
||||||
if taskTag == comm.TASK_ACHIEVE {
|
|
||||||
for _, v := range task.AchieveList {
|
|
||||||
if curTask := this.module.configure.getTaskById(v.TaskId); curTask != nil {
|
|
||||||
if v.Received == 0 {
|
|
||||||
isFirst := this.module.configure.isFirstTask(curTask.Key)
|
|
||||||
if curTask.IdAfter == 0 && isFirst { //未领取和没有下个连续任务的
|
|
||||||
achieveList = append(achieveList, v)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if isFirst && curTask.IdAfter != 0 { //连续任务的第一个任务
|
|
||||||
next := this.module.configure.getTaskById(curTask.IdAfter)
|
|
||||||
if next != nil && v.Received == 0 {
|
|
||||||
achieveList = append(achieveList, v)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if isReceived(curTask.Key) {
|
|
||||||
achieveList = append(achieveList, v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
achieveList = this.checkTaskStatus(uid, achieveList)
|
|
||||||
|
|
||||||
update["achieveList"] = achieveList
|
|
||||||
if err := this.module.modelTask.Change(uid, update); err != nil {
|
|
||||||
log.Error("err", log.Field{Key: "uid", Value: uid})
|
|
||||||
}
|
|
||||||
|
|
||||||
task.AchieveList = achieveList
|
|
||||||
}
|
|
||||||
|
|
||||||
return task
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取用户任务
|
|
||||||
func (this *ModelTask) getTaskById(uid string, taskTag comm.TaskTag, taskId int32) *pb.DBTask {
|
|
||||||
task := &pb.DBTask{}
|
|
||||||
if err := this.Get(uid, task); err != nil {
|
|
||||||
this.module.Errorf("getTaskById err %v", err)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if task != nil {
|
|
||||||
if taskTag == comm.TASK_DAILY {
|
|
||||||
for _, v := range task.DayList {
|
|
||||||
if v.TaskId == taskId {
|
|
||||||
task.DayList = append(task.DayList, v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if taskTag == comm.TASK_WEEKLY {
|
|
||||||
for _, v := range task.WeekList {
|
|
||||||
if v.TaskId == taskId {
|
|
||||||
task.WeekList = append(task.WeekList, v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if taskTag == comm.TASK_ACHIEVE {
|
|
||||||
for _, v := range task.AchieveList {
|
|
||||||
if v.TaskId == taskId {
|
|
||||||
task.AchieveList = append(task.AchieveList, v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return task
|
|
||||||
}
|
|
||||||
|
|
||||||
// 初始化任务
|
|
||||||
func (this *ModelTask) initTask(opencond map[string]int32, task *pb.DBTask, taskTag comm.TaskTag) error {
|
|
||||||
data := this.module.configure.getTaskByTag(int32(taskTag))
|
|
||||||
for _, cnf := range data {
|
|
||||||
if unlock, ok := opencond[cnf.Open]; cnf.Open != "" && (!ok || unlock != 2) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
t := &pb.TaskData{
|
|
||||||
Tag: cnf.IdTag,
|
|
||||||
TypeId: cnf.TypeId,
|
|
||||||
TaskId: cnf.Key,
|
|
||||||
Active: cnf.Active,
|
|
||||||
Sort: cnf.IdList,
|
|
||||||
}
|
|
||||||
if taskTag == comm.TASK_DAILY {
|
|
||||||
task.DayList = append(task.DayList, t)
|
|
||||||
} else if taskTag == comm.TASK_WEEKLY {
|
|
||||||
task.WeekList = append(task.WeekList, t)
|
|
||||||
} else if taskTag == comm.TASK_ACHIEVE {
|
|
||||||
task.AchieveList = append(task.AchieveList, t)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// 查询用户任务
|
|
||||||
func (this *ModelTask) getUserTask(uid string) (task *pb.DBTask, err error) {
|
|
||||||
task = &pb.DBTask{}
|
|
||||||
if err = this.Get(uid, task); err != nil && err != mgo.MongodbNil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err == mongo.ErrNoDocuments {
|
|
||||||
objId := primitive.NewObjectID().Hex()
|
|
||||||
task = &pb.DBTask{
|
|
||||||
Uid: uid,
|
|
||||||
Id: objId,
|
|
||||||
}
|
|
||||||
if err = this.Add(uid, task); err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取待处理的(日、周)任务
|
|
||||||
func (this *ModelTask) getUnFinishTasks(uid string, taskId int32) (list []*pb.TaskData) {
|
|
||||||
task := &pb.DBTask{}
|
|
||||||
if err := this.Get(uid, task); err != nil {
|
|
||||||
this.module.Errorf("getTaskById err %v", err)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if task != nil {
|
|
||||||
for _, v := range task.DayList {
|
|
||||||
if v.TaskId == taskId && v.Status == 0 {
|
|
||||||
list = append(list, v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, v := range task.WeekList {
|
|
||||||
if v.TaskId == taskId && v.Status == 0 {
|
|
||||||
list = append(list, v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, v := range task.AchieveList {
|
|
||||||
if v.TaskId == taskId && v.Status == 0 {
|
|
||||||
list = append(list, v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 更改用户任务
|
|
||||||
// Deprecated
|
|
||||||
func (this *ModelTask) modifyUserTask(uid string, taskId int32, data map[string]interface{}) error {
|
|
||||||
var task *pb.DBTask
|
|
||||||
if err := this.GetList(uid, &task); err != nil {
|
|
||||||
this.module.Errorf("getTaskById err %v", err)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
var err error
|
|
||||||
for _, v := range task.DayList {
|
|
||||||
if v.TaskId == taskId {
|
|
||||||
// v.Progress = data["progress"].(int32)
|
|
||||||
v.Status = data["status"].(int32)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
day_update := map[string]interface{}{
|
|
||||||
"dayList": task.DayList,
|
|
||||||
}
|
|
||||||
err = this.Change(uid, day_update)
|
|
||||||
|
|
||||||
for _, v := range task.WeekList {
|
|
||||||
if v.TaskId == taskId {
|
|
||||||
// v.Progress = data["progress"].(int32)
|
|
||||||
v.Status = data["status"].(int32)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
week_update := map[string]interface{}{
|
|
||||||
"weekList": task.WeekList,
|
|
||||||
}
|
|
||||||
err = this.Change(uid, week_update)
|
|
||||||
|
|
||||||
for _, v := range task.AchieveList {
|
|
||||||
if v.TaskId == taskId {
|
|
||||||
// v.Progress = data["progress"].(int32)
|
|
||||||
v.Status = data["status"].(int32)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
achieve_update := map[string]interface{}{
|
|
||||||
"achieveList": task.AchieveList,
|
|
||||||
}
|
|
||||||
err = this.Change(uid, achieve_update)
|
|
||||||
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// 更新活跃度
|
|
||||||
func (this *ModelTask) updateActive(uid string, cfgId int32) error {
|
|
||||||
// 更新活跃度
|
|
||||||
de, err := this.module.ModuleUser.GetUserExpand(uid)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
conf := this.module.configure.getTaskById(cfgId)
|
|
||||||
if conf == nil {
|
|
||||||
return errors.New(fmt.Sprintf("%v config nil", cfgId))
|
|
||||||
}
|
|
||||||
|
|
||||||
switch conf.IdTag {
|
|
||||||
case int32(comm.TASK_DAILY):
|
|
||||||
de.Activeday += conf.Active
|
|
||||||
case int32(comm.TASK_WEEKLY):
|
|
||||||
de.Activeweek += conf.Active
|
|
||||||
}
|
|
||||||
|
|
||||||
update := map[string]interface{}{
|
|
||||||
"activeday": de.Activeday,
|
|
||||||
"activeweek": de.Activeweek,
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.module.ModuleUser.ChangeUserExpand(uid, update)
|
|
||||||
}
|
|
||||||
|
|
||||||
type TaskListen struct {
|
|
||||||
event_v2.Event
|
|
||||||
Uid string
|
|
||||||
TaskType comm.TaskType
|
|
||||||
}
|
|
@ -1,184 +0,0 @@
|
|||||||
// package
|
|
||||||
// 日/周常成就任务
|
|
||||||
// 赵长远
|
|
||||||
package task
|
|
||||||
|
|
||||||
import (
|
|
||||||
"go_dreamfactory/comm"
|
|
||||||
"go_dreamfactory/lego/core"
|
|
||||||
"go_dreamfactory/lego/sys/event"
|
|
||||||
event_v2 "go_dreamfactory/lego/sys/event/v2"
|
|
||||||
"go_dreamfactory/lego/sys/log"
|
|
||||||
"go_dreamfactory/modules"
|
|
||||||
"go_dreamfactory/pb"
|
|
||||||
)
|
|
||||||
|
|
||||||
var _ comm.ITask = (*ModuleTask)(nil)
|
|
||||||
|
|
||||||
type ModuleTask struct {
|
|
||||||
modules.ModuleBase
|
|
||||||
modelTask *ModelTask
|
|
||||||
modelTaskActive *ModelTaskActive
|
|
||||||
api *apiComp
|
|
||||||
configure *configureComp
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewModule() core.IModule {
|
|
||||||
return &ModuleTask{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *ModuleTask) GetType() core.M_Modules {
|
|
||||||
return comm.ModuleTask
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *ModuleTask) GetEventApp() *event_v2.App {
|
|
||||||
return this.modelTask.EventApp
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *ModuleTask) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) {
|
|
||||||
err = this.ModuleBase.Init(service, module, options)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *ModuleTask) OnInstallComp() {
|
|
||||||
this.ModuleBase.OnInstallComp()
|
|
||||||
this.api = this.RegisterComp(new(apiComp)).(*apiComp)
|
|
||||||
this.modelTask = this.RegisterComp(new(ModelTask)).(*ModelTask)
|
|
||||||
this.modelTaskActive = this.RegisterComp(new(ModelTaskActive)).(*ModelTaskActive)
|
|
||||||
this.configure = this.RegisterComp(new(configureComp)).(*configureComp)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 模块启动接口
|
|
||||||
func (this *ModuleTask) Start() (err error) {
|
|
||||||
err = this.ModuleBase.Start()
|
|
||||||
event.RegisterGO(comm.EventUserLogin, this.EventUserLogin)
|
|
||||||
event.RegisterGO(comm.EventUserOffline, this.CleanTask)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *ModuleTask) EventUserLogin(session comm.IUserSession) {
|
|
||||||
var (
|
|
||||||
opencond map[string]int32
|
|
||||||
errdata *pb.ErrorData
|
|
||||||
task *pb.DBTask
|
|
||||||
active *pb.DBActivity
|
|
||||||
err error
|
|
||||||
)
|
|
||||||
if opencond, errdata = this.ModuleSys.QueryOpenCondData(session.GetUserId()); errdata != nil {
|
|
||||||
this.Errorf("getTaskList err %v", errdata)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if task, err = this.modelTask.getUserTask(session.GetUserId()); err != nil {
|
|
||||||
this.Errorf("getTaskList err %v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
this.modelTask.initTask(opencond, task, comm.TASK_DAILY)
|
|
||||||
this.modelTask.initTask(opencond, task, comm.TASK_WEEKLY)
|
|
||||||
this.modelTask.initTask(opencond, task, comm.TASK_ACHIEVE)
|
|
||||||
if err = this.modelTask.Change(session.GetUserId(), map[string]interface{}{
|
|
||||||
"dayList": task.DayList,
|
|
||||||
"weekList": task.WeekList,
|
|
||||||
"achieveList": task.AchieveList,
|
|
||||||
}); err != nil {
|
|
||||||
log.Error("err", log.Field{Key: "uid", Value: session.GetUserId()})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if active, err = this.modelTaskActive.getActiveList(session.GetUserId()); err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
this.modelTaskActive.initActiveReward(active, comm.TASK_DAILY)
|
|
||||||
this.modelTaskActive.initActiveReward(active, comm.TASK_WEEKLY)
|
|
||||||
if err = this.modelTaskActive.Change(session.GetUserId(), map[string]interface{}{
|
|
||||||
"activityList": active.ActivityList,
|
|
||||||
}); err != nil {
|
|
||||||
log.Error("err", log.Field{Key: "uid", Value: session.GetUserId()})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 清除缓存
|
|
||||||
func (this *ModuleTask) CleanTask(uid, sessionid string) {
|
|
||||||
this.modelTask.BatchDelLists(uid)
|
|
||||||
this.modelTaskActive.BatchDelLists(uid)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 重置玩家活跃度
|
|
||||||
func (this *ModuleTask) resetActive(uid string, taskTag comm.TaskTag) {
|
|
||||||
update := make(map[string]interface{})
|
|
||||||
if taskTag == comm.TASK_DAILY {
|
|
||||||
update["activeday"] = 0
|
|
||||||
} else if taskTag == comm.TASK_WEEKLY {
|
|
||||||
update["activeweek"] = 0
|
|
||||||
}
|
|
||||||
if len(update) > 0 {
|
|
||||||
this.ModuleUser.ChangeUserExpand(uid, update)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *ModuleTask) Reddot(session comm.IUserSession, rid ...comm.ReddotType) (reddot map[comm.ReddotType]*pb.ReddotItem) {
|
|
||||||
reddot = make(map[comm.ReddotType]*pb.ReddotItem)
|
|
||||||
var (
|
|
||||||
task *pb.DBTask = &pb.DBTask{}
|
|
||||||
active *pb.DBActivity
|
|
||||||
userExpand *pb.DBUserExpand
|
|
||||||
err error
|
|
||||||
)
|
|
||||||
if task, err = this.modelTask.getUserTask(session.GetUserId()); err != nil {
|
|
||||||
this.Errorf("getTaskList err %v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if active, err = this.modelTaskActive.getActiveList(session.GetUserId()); err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
// 获取玩家活跃度
|
|
||||||
userExpand, err = this.ModuleUser.GetUserExpand(session.GetUserId())
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, v := range rid {
|
|
||||||
|
|
||||||
switch v {
|
|
||||||
case comm.Reddot10101:
|
|
||||||
tf, _ := this.modelTask.noReceiveTask(task, comm.TASK_DAILY)
|
|
||||||
reddot[comm.Reddot10101] = &pb.ReddotItem{
|
|
||||||
Rid: int32(comm.Reddot10101),
|
|
||||||
Activated: tf,
|
|
||||||
Nextchanagetime: 0,
|
|
||||||
}
|
|
||||||
case comm.Reddot10102:
|
|
||||||
tf, _ := this.modelTask.noReceiveTask(task, comm.TASK_WEEKLY)
|
|
||||||
reddot[comm.Reddot10102] = &pb.ReddotItem{
|
|
||||||
Rid: int32(comm.Reddot10102),
|
|
||||||
Activated: tf,
|
|
||||||
Nextchanagetime: 0,
|
|
||||||
}
|
|
||||||
|
|
||||||
case comm.Reddot10103:
|
|
||||||
tf, _ := this.modelTask.noReceiveTask(task, comm.TASK_ACHIEVE)
|
|
||||||
reddot[comm.Reddot10103] = &pb.ReddotItem{
|
|
||||||
Rid: int32(comm.Reddot10103),
|
|
||||||
Activated: tf,
|
|
||||||
Nextchanagetime: 0,
|
|
||||||
}
|
|
||||||
case comm.Reddot10201:
|
|
||||||
tf, _ := this.modelTaskActive.noReceiveTaskActive(userExpand, active.ActivityList, comm.TASK_DAILY)
|
|
||||||
reddot[comm.Reddot10201] = &pb.ReddotItem{
|
|
||||||
Rid: int32(comm.Reddot10201),
|
|
||||||
Activated: tf,
|
|
||||||
Nextchanagetime: 0,
|
|
||||||
}
|
|
||||||
case comm.Reddot10301:
|
|
||||||
tf, _ := this.modelTaskActive.noReceiveTaskActive(userExpand, active.ActivityList, comm.TASK_WEEKLY)
|
|
||||||
reddot[comm.Reddot10301] = &pb.ReddotItem{
|
|
||||||
Rid: int32(comm.Reddot10301),
|
|
||||||
Activated: tf,
|
|
||||||
Nextchanagetime: 0,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
@ -1,4 +1,4 @@
|
|||||||
package dailytask
|
package weektask
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"go_dreamfactory/lego/base"
|
"go_dreamfactory/lego/base"
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package dailytask
|
package weektask
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"go_dreamfactory/comm"
|
"go_dreamfactory/comm"
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package dailytask
|
package weektask
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"go_dreamfactory/comm"
|
"go_dreamfactory/comm"
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package dailytask
|
package weektask
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"go_dreamfactory/comm"
|
"go_dreamfactory/comm"
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package dailytask
|
package weektask
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"go_dreamfactory/comm"
|
"go_dreamfactory/comm"
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package dailytask
|
package weektask
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
@ -7,6 +7,7 @@ import (
|
|||||||
"go_dreamfactory/lego/sys/mgo"
|
"go_dreamfactory/lego/sys/mgo"
|
||||||
"go_dreamfactory/modules"
|
"go_dreamfactory/modules"
|
||||||
"go_dreamfactory/pb"
|
"go_dreamfactory/pb"
|
||||||
|
"go_dreamfactory/sys/configure"
|
||||||
cfg "go_dreamfactory/sys/configure/structs"
|
cfg "go_dreamfactory/sys/configure/structs"
|
||||||
|
|
||||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||||
@ -44,7 +45,7 @@ func (this *ModelWeektask) getUserDTasks(uid string) (results *pb.DBWeektask, er
|
|||||||
Tasks: make([]int32, 0),
|
Tasks: make([]int32, 0),
|
||||||
Tcomplete: make(map[int32]bool),
|
Tcomplete: make(map[int32]bool),
|
||||||
Acomplete: make(map[int32]bool),
|
Acomplete: make(map[int32]bool),
|
||||||
Rtime: 0,
|
Rtime: configure.Now().Unix(),
|
||||||
}
|
}
|
||||||
if opencmd, errdata := this.module.sys.QueryOpenCondData(uid); errdata != nil {
|
if opencmd, errdata := this.module.sys.QueryOpenCondData(uid); errdata != nil {
|
||||||
err = fmt.Errorf("sys.QueryOpenCondData err:%s", errdata.Message)
|
err = fmt.Errorf("sys.QueryOpenCondData err:%s", errdata.Message)
|
||||||
@ -78,10 +79,9 @@ func (this *ModelWeektask) inquireActivations(info *pb.DBWeektask, opencmd map[s
|
|||||||
if v.Open != "" && opencmd[v.Open] != 2 { //功能未开启
|
if v.Open != "" && opencmd[v.Open] != 2 { //功能未开启
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
if v.IdBefore != 0 && !info.Tcomplete[v.Key] { //前置任务未完成
|
||||||
// if v.IdBefore != 0 && !info.Tcomplete[v.Key] { //前置任务未完成
|
continue
|
||||||
// continue
|
}
|
||||||
// }
|
|
||||||
info.Tasks = append(info.Tasks, v.Key)
|
info.Tasks = append(info.Tasks, v.Key)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package dailytask
|
package weektask
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"go_dreamfactory/comm"
|
"go_dreamfactory/comm"
|
||||||
|
@ -57,12 +57,12 @@ import (
|
|||||||
"go_dreamfactory/modules/stonehenge"
|
"go_dreamfactory/modules/stonehenge"
|
||||||
"go_dreamfactory/modules/storyline"
|
"go_dreamfactory/modules/storyline"
|
||||||
"go_dreamfactory/modules/sys"
|
"go_dreamfactory/modules/sys"
|
||||||
"go_dreamfactory/modules/task"
|
|
||||||
"go_dreamfactory/modules/tools"
|
"go_dreamfactory/modules/tools"
|
||||||
"go_dreamfactory/modules/uigame"
|
"go_dreamfactory/modules/uigame"
|
||||||
"go_dreamfactory/modules/user"
|
"go_dreamfactory/modules/user"
|
||||||
"go_dreamfactory/modules/viking"
|
"go_dreamfactory/modules/viking"
|
||||||
"go_dreamfactory/modules/warorder"
|
"go_dreamfactory/modules/warorder"
|
||||||
|
"go_dreamfactory/modules/weektask"
|
||||||
"go_dreamfactory/modules/wtask"
|
"go_dreamfactory/modules/wtask"
|
||||||
"go_dreamfactory/services"
|
"go_dreamfactory/services"
|
||||||
"go_dreamfactory/sys/db"
|
"go_dreamfactory/sys/db"
|
||||||
@ -102,7 +102,6 @@ func main() {
|
|||||||
friend.NewModule(),
|
friend.NewModule(),
|
||||||
hero.NewModule(),
|
hero.NewModule(),
|
||||||
equipment.NewModule(),
|
equipment.NewModule(),
|
||||||
task.NewModule(),
|
|
||||||
shop.NewModule(),
|
shop.NewModule(),
|
||||||
notify.NewModule(),
|
notify.NewModule(),
|
||||||
chat.NewModule(),
|
chat.NewModule(),
|
||||||
@ -156,6 +155,7 @@ func main() {
|
|||||||
pushgiftbag.NewModule(),
|
pushgiftbag.NewModule(),
|
||||||
uigame.NewModule(),
|
uigame.NewModule(),
|
||||||
battlerecord.NewModule(),
|
battlerecord.NewModule(),
|
||||||
|
weektask.NewModule(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,7 +12,6 @@ import "errors"
|
|||||||
|
|
||||||
type GameActiveRewardData struct {
|
type GameActiveRewardData struct {
|
||||||
Key int32
|
Key int32
|
||||||
IdTag int32
|
|
||||||
Active int32
|
Active int32
|
||||||
Reword []*Gameatn
|
Reword []*Gameatn
|
||||||
Action string
|
Action string
|
||||||
@ -27,7 +26,6 @@ func (*GameActiveRewardData) GetTypeId() int32 {
|
|||||||
|
|
||||||
func (_v *GameActiveRewardData)Deserialize(_buf map[string]interface{}) (err error) {
|
func (_v *GameActiveRewardData)Deserialize(_buf map[string]interface{}) (err error) {
|
||||||
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["key"].(float64); !_ok_ { err = errors.New("key error"); return }; _v.Key = int32(_tempNum_) }
|
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["key"].(float64); !_ok_ { err = errors.New("key error"); return }; _v.Key = int32(_tempNum_) }
|
||||||
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["id_tag"].(float64); !_ok_ { err = errors.New("id_tag error"); return }; _v.IdTag = int32(_tempNum_) }
|
|
||||||
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["active"].(float64); !_ok_ { err = errors.New("active error"); return }; _v.Active = int32(_tempNum_) }
|
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["active"].(float64); !_ok_ { err = errors.New("active error"); return }; _v.Active = int32(_tempNum_) }
|
||||||
{
|
{
|
||||||
var _arr_ []interface{}
|
var _arr_ []interface{}
|
||||||
|
@ -12,7 +12,6 @@ import "errors"
|
|||||||
|
|
||||||
type GameTaskActiveRewardData struct {
|
type GameTaskActiveRewardData struct {
|
||||||
Key int32
|
Key int32
|
||||||
IdTag int32
|
|
||||||
Active int32
|
Active int32
|
||||||
Reword []*Gameatn
|
Reword []*Gameatn
|
||||||
Action string
|
Action string
|
||||||
@ -27,7 +26,6 @@ func (*GameTaskActiveRewardData) GetTypeId() int32 {
|
|||||||
|
|
||||||
func (_v *GameTaskActiveRewardData)Deserialize(_buf map[string]interface{}) (err error) {
|
func (_v *GameTaskActiveRewardData)Deserialize(_buf map[string]interface{}) (err error) {
|
||||||
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["key"].(float64); !_ok_ { err = errors.New("key error"); return }; _v.Key = int32(_tempNum_) }
|
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["key"].(float64); !_ok_ { err = errors.New("key error"); return }; _v.Key = int32(_tempNum_) }
|
||||||
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["id_tag"].(float64); !_ok_ { err = errors.New("id_tag error"); return }; _v.IdTag = int32(_tempNum_) }
|
|
||||||
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["active"].(float64); !_ok_ { err = errors.New("active error"); return }; _v.Active = int32(_tempNum_) }
|
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["active"].(float64); !_ok_ { err = errors.New("active error"); return }; _v.Active = int32(_tempNum_) }
|
||||||
{
|
{
|
||||||
var _arr_ []interface{}
|
var _arr_ []interface{}
|
||||||
|
@ -13,12 +13,13 @@ import "errors"
|
|||||||
type GameTaskRoundData struct {
|
type GameTaskRoundData struct {
|
||||||
Key int32
|
Key int32
|
||||||
IdList int32
|
IdList int32
|
||||||
IdTag int32
|
|
||||||
Open string
|
Open string
|
||||||
|
Opentask string
|
||||||
|
IdBefore int32
|
||||||
|
IdAfter int32
|
||||||
TaskDisplay string
|
TaskDisplay string
|
||||||
TypeId int32
|
TypeId int32
|
||||||
Active int32
|
Active int32
|
||||||
IdAfter int32
|
|
||||||
JumpInterface int32
|
JumpInterface int32
|
||||||
Icon string
|
Icon string
|
||||||
Reword []*Gameatn
|
Reword []*Gameatn
|
||||||
@ -33,12 +34,13 @@ func (*GameTaskRoundData) GetTypeId() int32 {
|
|||||||
func (_v *GameTaskRoundData)Deserialize(_buf map[string]interface{}) (err error) {
|
func (_v *GameTaskRoundData)Deserialize(_buf map[string]interface{}) (err error) {
|
||||||
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["key"].(float64); !_ok_ { err = errors.New("key error"); return }; _v.Key = int32(_tempNum_) }
|
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["key"].(float64); !_ok_ { err = errors.New("key error"); return }; _v.Key = int32(_tempNum_) }
|
||||||
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["id_list"].(float64); !_ok_ { err = errors.New("id_list error"); return }; _v.IdList = int32(_tempNum_) }
|
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["id_list"].(float64); !_ok_ { err = errors.New("id_list error"); return }; _v.IdList = int32(_tempNum_) }
|
||||||
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["id_tag"].(float64); !_ok_ { err = errors.New("id_tag error"); return }; _v.IdTag = int32(_tempNum_) }
|
|
||||||
{ var _ok_ bool; if _v.Open, _ok_ = _buf["open"].(string); !_ok_ { err = errors.New("open error"); return } }
|
{ var _ok_ bool; if _v.Open, _ok_ = _buf["open"].(string); !_ok_ { err = errors.New("open error"); return } }
|
||||||
|
{ var _ok_ bool; if _v.Opentask, _ok_ = _buf["opentask"].(string); !_ok_ { err = errors.New("opentask error"); return } }
|
||||||
|
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["id_before"].(float64); !_ok_ { err = errors.New("id_before error"); return }; _v.IdBefore = int32(_tempNum_) }
|
||||||
|
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["Id_after"].(float64); !_ok_ { err = errors.New("Id_after error"); return }; _v.IdAfter = int32(_tempNum_) }
|
||||||
{var _ok_ bool; var __json_text__ map[string]interface{}; if __json_text__, _ok_ = _buf["task_display"].(map[string]interface{}) ; !_ok_ { err = errors.New("_v.TaskDisplay error"); return }; { var _ok_ bool; if _, _ok_ = __json_text__["key"].(string); !_ok_ { err = errors.New("key error"); return } }; { var _ok_ bool; if _v.TaskDisplay, _ok_ = __json_text__["text"].(string); !_ok_ { err = errors.New("text error"); return } } }
|
{var _ok_ bool; var __json_text__ map[string]interface{}; if __json_text__, _ok_ = _buf["task_display"].(map[string]interface{}) ; !_ok_ { err = errors.New("_v.TaskDisplay error"); return }; { var _ok_ bool; if _, _ok_ = __json_text__["key"].(string); !_ok_ { err = errors.New("key error"); return } }; { var _ok_ bool; if _v.TaskDisplay, _ok_ = __json_text__["text"].(string); !_ok_ { err = errors.New("text error"); return } } }
|
||||||
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["type_id"].(float64); !_ok_ { err = errors.New("type_id error"); return }; _v.TypeId = int32(_tempNum_) }
|
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["type_id"].(float64); !_ok_ { err = errors.New("type_id error"); return }; _v.TypeId = int32(_tempNum_) }
|
||||||
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["active"].(float64); !_ok_ { err = errors.New("active error"); return }; _v.Active = int32(_tempNum_) }
|
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["active"].(float64); !_ok_ { err = errors.New("active error"); return }; _v.Active = int32(_tempNum_) }
|
||||||
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["id_after"].(float64); !_ok_ { err = errors.New("id_after error"); return }; _v.IdAfter = int32(_tempNum_) }
|
|
||||||
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["jump_interface"].(float64); !_ok_ { err = errors.New("jump_interface error"); return }; _v.JumpInterface = int32(_tempNum_) }
|
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["jump_interface"].(float64); !_ok_ { err = errors.New("jump_interface error"); return }; _v.JumpInterface = int32(_tempNum_) }
|
||||||
{ var _ok_ bool; if _v.Icon, _ok_ = _buf["icon"].(string); !_ok_ { err = errors.New("icon error"); return } }
|
{ var _ok_ bool; if _v.Icon, _ok_ = _buf["icon"].(string); !_ok_ { err = errors.New("icon error"); return } }
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user