From 9823de2ac596b594101d4f2fe85f6bc2648a39c7 Mon Sep 17 00:00:00 2001 From: liwei1dao Date: Thu, 30 Mar 2023 20:05:45 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E4=B8=8A=E4=BC=A0pvp=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/pvp/module.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/modules/pvp/module.go b/modules/pvp/module.go index ac6119bc0..dfddca3eb 100644 --- a/modules/pvp/module.go +++ b/modules/pvp/module.go @@ -228,7 +228,20 @@ func (this *Pvp) readyTimeOut(task *timewheel.Task, args ...interface{}) { }, battle.RedSession, battle.BlueSession); err != nil { this.Errorln(err) } - go this.practice.ChallengeResults(battle.Id, battle.Red.Uid, battle.Blue.Uid, 0) + + switch battle.Ptype { + case pb.PvpType_friends: + var winside int32 = 0 + if battle.Redformation != nil { + winside = 1 + } + if battle.Blueformation != nil { + winside = 2 + } + go this.practice.ChallengeResults(battle.Id, battle.Red.Uid, battle.Blue.Uid, winside) + break + } + } } From 707934fbefc813057638140b6fffe39f36f5dd7b Mon Sep 17 00:00:00 2001 From: wh_zcy Date: Thu, 30 Mar 2023 20:37:59 +0800 Subject: [PATCH 2/5] update --- comm/imodule.go | 2 - modules/rtask/model_rtask.go | 8 +- modules/rtask/module.go | 218 +------------------------------- modules/task/api_send.go | 4 +- modules/worldtask/api_finish.go | 32 ++--- 5 files changed, 25 insertions(+), 239 deletions(-) diff --git a/comm/imodule.go b/comm/imodule.go index 7aa497aaa..7cc95747f 100644 --- a/comm/imodule.go +++ b/comm/imodule.go @@ -211,8 +211,6 @@ type ( RemoveCondi(uid string, condiId int32) error // 更新任务条件数据 ChangeCondi(uid string, data map[int32]*pb.RtaskData) error - //任务触发 - SendToRtask(session IUserSession, rtaskType TaskType, params ...int32) (code pb.ErrorCode) //任务批量触发 TriggerTask(uid string, taskParams ...*TaskParam) // 获取任务条件记录 diff --git a/modules/rtask/model_rtask.go b/modules/rtask/model_rtask.go index 544ab37f7..c5d7712bc 100644 --- a/modules/rtask/model_rtask.go +++ b/modules/rtask/model_rtask.go @@ -94,8 +94,12 @@ func (this *ModelRtask) checkCondi(uid string, condiId int32) (err error, ok boo var condi *rtaskCondi cond, ok := this.moduleRtask.handleMap.Load(condiId) if !ok { - errors.Errorf("condiID: %v handle no found", condiId) - return + rcs := this.moduleRtask.getHandle(comm.TaskType(conf.Type)) + for _, v:=range rcs { + if v.condId == condiId { + cond = v + } + } } if condi, ok = cond.(*rtaskCondi); !ok { diff --git a/modules/rtask/module.go b/modules/rtask/module.go index cbf07b1a7..406c94666 100644 --- a/modules/rtask/module.go +++ b/modules/rtask/module.go @@ -45,9 +45,7 @@ type ModuleRtask struct { } func NewModule() core.IModule { - return &ModuleRtask{ - // handleMap: make(map[int32]*rtaskCondi), - } + return &ModuleRtask{} } func (this *ModuleRtask) GetType() core.M_Modules { @@ -57,7 +55,6 @@ func (this *ModuleRtask) GetType() core.M_Modules { func (this *ModuleRtask) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) { err = this.ModuleBase.Init(service, module, options) this.service = service.(base.IRPCXService) - // this.initRtaskVerifyHandle() return } func (this *ModuleRtask) Start() (err error) { @@ -260,145 +257,6 @@ func (this *ModuleRtask) getHandle(tt comm.TaskType) (condis []*rtaskCondi) { return } -// 条件校验初始 -// Deprecated -func (this *ModuleRtask) initRtaskVerifyHandle() { - conf, err := this.configure.getRtaskCondiCfg() - if err != nil { - return - } - - for _, v := range conf.GetDataList() { - if typeCfg, err := this.configure.getRtaskTypeById(v.Id); err == nil { - if typeCfg != nil { - switch comm.TaskType(typeCfg.Type) { - case comm.Rtype1: - this.registerVerifyHandle(v.Id, &rtaskCondi{ - find: this.modelRtaskRecord.equalFirstParam, - verify: this.modelRtask.verfiyRtype1, - update: this.modelRtaskRecord.overrideUpdate, - }) - case comm.Rtype2: - this.registerVerifyHandle(v.Id, &rtaskCondi{ - find: this.modelRtaskRecord.equalFirstParam, - verify: this.modelRtask.verifyRtype2, - update: this.modelRtaskRecord.overrideUpdate, - }) - case comm.Rtype3: - this.registerVerifyHandle(v.Id, &rtaskCondi{ - find: this.modelRtaskRecord.equalFirstParam, - verify: this.modelRtask.verifyRtype3, - update: this.modelRtaskRecord.overrideUpdate, - }) - case comm.Rtype4: - this.registerVerifyHandle(v.Id, &rtaskCondi{ - find: this.modelRtaskRecord.equalFirstParam, - verify: this.modelRtask.verifyRtype4, - update: this.modelRtaskRecord.overrideUpdate, - }) - case comm.Rtype5: - this.registerVerifyHandle(v.Id, &rtaskCondi{ - find: this.modelRtaskRecord.equalFirstParam, - verify: this.modelRtask.verifyRtype5, - update: this.modelRtaskRecord.overrideUpdate, - }) - case comm.Rtype6: - this.registerVerifyHandle(v.Id, &rtaskCondi{ - find: this.modelRtaskRecord.equalFirstParam, - verify: this.modelRtask.verifyRtype6, - update: this.modelRtaskRecord.overrideUpdate, - }) - case comm.Rtype8: - this.registerVerifyHandle(v.Id, &rtaskCondi{ - find: this.modelRtaskRecord.equalFirstParam, - verify: this.modelRtask.verfiyRtype8, - update: this.modelRtaskRecord.overrideUpdate, - }) - case comm.Rtype9: - this.registerVerifyHandle(v.Id, &rtaskCondi{ - find: this.modelRtaskRecord.equalFirstParam, - verify: this.modelRtask.verfiyRtype9, - update: this.modelRtaskRecord.overrideUpdate, - }) - case comm.Rtype10: - this.registerVerifyHandle(v.Id, &rtaskCondi{ - find: this.modelRtaskRecord.equalFirstParam, - verify: this.modelRtask.verfiyRtype10, - update: this.modelRtaskRecord.overrideUpdate, - }) - case comm.Rtype11, comm.Rtype84, comm.Rtype85: - this.registerVerifyHandle(v.Id, &rtaskCondi{ - find: this.modelRtaskRecord.lessEqualFirstParam, - verify: this.modelRtaskRecord.verifyFirstGreatEqualParam, - update: this.modelRtaskRecord.overrideUpdate, - }) - case comm.Rtype18: - this.registerVerifyHandle(v.Id, &rtaskCondi{ - find: this.modelRtaskRecord.greatEqualFirstParam, - verify: this.modelRtaskRecord.verifyFirstGreatEqualParam, - update: this.modelRtaskRecord.addUpdate, - }) - case comm.Rtype7, comm.Rtype12, comm.Rtype13, comm.Rtype14, comm.Rtype15, - comm.Rtype19, comm.Rtype21, comm.Rtype24, - comm.Rtype26, comm.Rtype27, comm.Rtype28, comm.Rtype38, - comm.Rtype39, comm.Rtype50, comm.Rtype51, comm.Rtype53, - comm.Rtype54, comm.Rtype57, comm.Rtype58, comm.Rtype60, - comm.Rtype62, comm.Rtype64, comm.Rtype69, comm.Rtype72, comm.Rtype88, comm.Rtype104, - comm.Rtype96, comm.Rtype105, comm.Rtype128, comm.Rtype130, comm.Rtype131, - comm.Rtype141, comm.Rtype142, comm.Rtype143, comm.Rtype144, comm.Rtype145, comm.Rtype146, - comm.Rtype147, comm.Rtype149, comm.Rtype153, comm.Rtype154, comm.Rtype155, comm.Rtype156: - this.registerVerifyHandle(v.Id, &rtaskCondi{ - find: this.modelRtaskRecord.lessEqualFirstParam, - verify: this.modelRtaskRecord.verifyFirstGreatEqualParam, - update: this.modelRtaskRecord.addUpdate, - }) - case comm.Rtype20: - this.registerVerifyHandle(v.Id, &rtaskCondi{ - find: this.modelRtaskRecord.equalFirstParam, - verify: this.modelRtask.verifyRtype20, - update: this.modelRtaskRecord.overrideUpdate, - }) - case comm.Rtype22, comm.Rtype109: - this.registerVerifyHandle(v.Id, &rtaskCondi{ - find: this.modelRtaskRecord.equalFirstParam, - verify: this.modelRtaskRecord.verifyFirstEqualParam, - update: this.modelRtaskRecord.overrideUpdate, - }) - case comm.Rtype63: - this.registerVerifyHandle(v.Id, &rtaskCondi{ - find: this.modelRtaskRecord.equalFirstParam, - verify: this.modelRtask.verifyRtype63, - update: this.modelRtaskRecord.addUpdate, - }) - case comm.Rtype16, comm.Rtype17, - comm.Rtype35, comm.Rtype44, - comm.Rtype59, comm.Rtype61, comm.Rtype70: - this.registerVerifyHandle(v.Id, &rtaskCondi{ - find: this.modelRtaskRecord.equalParams, - verify: this.modelRtaskRecord.verifyFromDb, - update: this.modelRtaskRecord.overrideUpdate, - }) - case comm.Rtype23, comm.Rtype25, comm.Rtype29, comm.Rtype30, comm.Rtype31, - comm.Rtype32, comm.Rtype33, comm.Rtype34, comm.Rtype36, - comm.Rtype37, comm.Rtype40, comm.Rtype41, - comm.Rtype42, comm.Rtype43, comm.Rtype45, - comm.Rtype46, comm.Rtype47, comm.Rtype48, comm.Rtype49, - comm.Rtype52, comm.Rtype55, comm.Rtype56, - comm.Rtype65, comm.Rtype66, comm.Rtype67, comm.Rtype68, comm.Rtype140: - this.registerVerifyHandle(v.Id, &rtaskCondi{ - find: this.modelRtaskRecord.lessThanParams, - verify: this.modelRtaskRecord.verifyFromDb, - update: this.modelRtaskRecord.addUpdate, - }) - - default: - log.Warnf("rtaskType[%v] not register", typeCfg.Type) - } - } - } - } -} - // 处理触发的任务 func (this *ModuleRtask) processOneTask(session comm.IUserSession, rtaskType comm.TaskType, params ...int32) (code pb.ErrorCode) { uid := session.GetUserId() @@ -481,80 +339,6 @@ func (this *ModuleRtask) processOneTask(session comm.IUserSession, rtaskType com return } -// Deprecated -func (this *ModuleRtask) SendToRtask(session comm.IUserSession, rtaskType comm.TaskType, params ...int32) (code pb.ErrorCode) { - uid := session.GetUserId() - if this.IsCross() { - //随机任务 - if _, err := this.service.AcrossClusterRpcGo( - context.Background(), - session.GetServiecTag(), - comm.Service_Worker, - string(comm.Rpc_ModuleRtaskSendTask), - pb.RPCRTaskReq{Uid: uid, TaskType: int32(rtaskType), Param: params}, - nil); err != nil { - this.Errorln(err) - } - return - } - - this.Debug("任务事件触发", - log.Field{Key: "uid", Value: uid}, - log.Field{Key: "taskType", Value: rtaskType}, - log.Field{Key: "params", Value: params}, - ) - var ( - condis []*rtaskCondi - ) - - condis = this.getHandle(rtaskType) - - // for _, codiConf := range this.configure.getRtaskCondis(int32(rtaskType)) { - // v, ok := this.handleMap[codiConf.Id] - // if !ok { - // this.Warn("未注册事件处理器", - // log.Field{Key: "uid", Value: uid}, - // log.Field{Key: "condiId", Value: codiConf.Id}, - // ) - // code = pb.ErrorCode_RtaskCondiNoFound - // return - // } - - // if v.find == nil { - // this.Warn("未设置find Handle", - // log.Field{Key: "uid", Value: uid}, - // log.Field{Key: "condiId", Value: codiConf.Id}, - // ) - // return - // } - - // if condiId, _ := v.find(codiConf, params...); condiId != 0 { - // v.condId = codiConf.Id - // condis = append(condis, v) - // } - // } - - // update - for _, v := range condis { - conf, err := this.configure.getRtaskTypeById(v.condId) - if err != nil { - log.Errorf("get condId conf err:%v", err) - code = pb.ErrorCode_RtaskCondiNoFound - return - } - - if v.update != nil { - if err := v.update(uid, conf, params...); err != nil { - log.Errorf("update task:%v", err) - code = pb.ErrorCode_DBError - } - } - - } - - return -} - func (this *ModuleRtask) TriggerTask(uid string, taskParams ...*comm.TaskParam) { this.Debug("任务处理", log.Field{Key: "uid", Value: uid}, diff --git a/modules/task/api_send.go b/modules/task/api_send.go index 8c46cfcdc..3091f5fdc 100644 --- a/modules/task/api_send.go +++ b/modules/task/api_send.go @@ -17,9 +17,7 @@ func (this *apiComp) SendCheck(session comm.IUserSession, req *pb.TaskSendReq) ( func (this *apiComp) Send(session comm.IUserSession, req *pb.TaskSendReq) (code pb.ErrorCode, data proto.Message) { if imodule, err := this.service.GetModule(comm.ModuleRtask); err == nil { if itask, ok := imodule.(comm.IRtask); ok { - if code = itask.SendToRtask(session, comm.TaskType(req.TaskType), req.Params...); code != pb.ErrorCode_Success { - return - } + itask.TriggerTask(session.GetUserId(), comm.GettaskParam(comm.TaskType(req.TaskType), req.Params...)) } } diff --git a/modules/worldtask/api_finish.go b/modules/worldtask/api_finish.go index ff9900e83..8f69b0813 100644 --- a/modules/worldtask/api_finish.go +++ b/modules/worldtask/api_finish.go @@ -70,7 +70,7 @@ func (this *apiComp) Finish(session comm.IUserSession, req *pb.WorldtaskFinishRe return } - updateCheckCond := func(nextTaskId int32) *pb.DBWorldtask { + updateCheckCond := func(userTask *pb.DBWorldtask, nextTaskId int32) *pb.DBWorldtask { //检查下个任务的完成条件 nextTaskConf, err := this.module.configure.getWorldtaskById(nextTaskId) if err != nil || curTaskConf == nil { @@ -85,13 +85,16 @@ func (this *apiComp) Finish(session comm.IUserSession, req *pb.WorldtaskFinishRe userTask.CurrentTask = make(map[int32]*pb.Worldtask) } - if len(nextTaskConf.Completetask) == 1 && nextTaskConf.Completetask[0] == 0 { + update := make(map[string]interface{}) + if (len(nextTaskConf.Completetask) == 1 && nextTaskConf.Completetask[0] == 0) || + len(nextTaskConf.Completetask) == 0 { wt := &pb.Worldtask{ TaskId: nextTaskId, TaskType: nextTaskConf.Des, CondiIds: []int32{}, } userTask.CurrentTask[nextTaskConf.Group] = wt + update["currentTask"] = userTask.CurrentTask } else { for _, condiId := range nextTaskConf.Completetask { if condiId == 0 { @@ -105,9 +108,8 @@ func (this *apiComp) Finish(session comm.IUserSession, req *pb.WorldtaskFinishRe log.Field{Key: "uid", Value: uid}, log.Field{Key: "taskId", Value: nextTaskId}, log.Field{Key: "condiId", Value: condiId}, - ) - rsp.CondiId = condiId - rsp.TaskId = nextTaskId + ) + } else { nwt, ok := userTask.CurrentTask[nextTaskConf.Group] if ok { @@ -121,19 +123,19 @@ func (this *apiComp) Finish(session comm.IUserSession, req *pb.WorldtaskFinishRe } } userTask.CurrentTask[nextTaskConf.Group] = nwt + update["currentTask"] = userTask.CurrentTask } } } + } } - update := map[string]interface{}{ - "currentTask": userTask.CurrentTask, - } - - if err := this.module.modelWorldtask.Change(uid, update); err != nil { - code = pb.ErrorCode_DBError - return nil + if len(update) > 0 { + if err := this.module.modelWorldtask.Change(uid, update); err != nil { + code = pb.ErrorCode_DBError + return nil + } } return userTask @@ -145,9 +147,9 @@ func (this *apiComp) Finish(session comm.IUserSession, req *pb.WorldtaskFinishRe nextTask := make(map[int32]*pb.Worldtask) for _, next := range nextTaskIds { - userTask = updateCheckCond(next) - if userTask != nil { - for k, v := range userTask.CurrentTask { + ut := updateCheckCond(userTask, next) + if ut != nil { + for k, v := range ut.CurrentTask { nextTask[k] = &pb.Worldtask{ TaskId: v.TaskId, } From bf49db1b352f324326afcdad309834e11fd69cdb Mon Sep 17 00:00:00 2001 From: wh_zcy Date: Thu, 30 Mar 2023 20:39:07 +0800 Subject: [PATCH 3/5] update config --- bin/json/game_rdtaskcondi.json | 413 +++++++++++++++++++++++++++++++-- bin/json/game_worldtask.json | 200 +++++++++++----- 2 files changed, 539 insertions(+), 74 deletions(-) diff --git a/bin/json/game_rdtaskcondi.json b/bin/json/game_rdtaskcondi.json index c9a32b082..110cb3ef0 100644 --- a/bin/json/game_rdtaskcondi.json +++ b/bin/json/game_rdtaskcondi.json @@ -5,6 +5,7 @@ "tasktxt": "", "type": 1, "valid": 0, + "NPC": 0, "data1": 1, "data2": 25001, "data3": 0, @@ -17,6 +18,7 @@ "tasktxt": "", "type": 2, "valid": 0, + "NPC": 0, "data1": 1, "data2": 3, "data3": 0, @@ -29,6 +31,7 @@ "tasktxt": "", "type": 3, "valid": 0, + "NPC": 0, "data1": 1, "data2": 2, "data3": 0, @@ -41,6 +44,7 @@ "tasktxt": "", "type": 4, "valid": 0, + "NPC": 0, "data1": 10, "data2": 14007, "data3": 0, @@ -53,6 +57,7 @@ "tasktxt": "", "type": 5, "valid": 0, + "NPC": 0, "data1": 2, "data2": 25001, "data3": 0, @@ -65,6 +70,7 @@ "tasktxt": "", "type": 6, "valid": 0, + "NPC": 0, "data1": 5, "data2": 25004, "data3": 0, @@ -77,6 +83,7 @@ "tasktxt": "", "type": 7, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -89,6 +96,7 @@ "tasktxt": "", "type": 8, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -101,6 +109,7 @@ "tasktxt": "", "type": 9, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -113,6 +122,7 @@ "tasktxt": "", "type": 10, "valid": 0, + "NPC": 0, "data1": 2, "data2": 0, "data3": 0, @@ -125,6 +135,7 @@ "tasktxt": "", "type": 11, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -137,6 +148,7 @@ "tasktxt": "", "type": 12, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -149,6 +161,7 @@ "tasktxt": "", "type": 13, "valid": 0, + "NPC": 0, "data1": 2, "data2": 0, "data3": 0, @@ -161,11 +174,12 @@ "tasktxt": "招募一次守护者", "type": 14, "valid": 0, + "NPC": 101, "data1": 1, "data2": 0, "data3": 0, "data4": 0, - "data5": 101 + "data5": 0 }, { "id": 115, @@ -173,6 +187,7 @@ "tasktxt": "", "type": 15, "valid": 0, + "NPC": 0, "data1": 10, "data2": 0, "data3": 0, @@ -185,6 +200,7 @@ "tasktxt": "", "type": 16, "valid": 0, + "NPC": 0, "data1": 5, "data2": 3, "data3": 0, @@ -197,6 +213,7 @@ "tasktxt": "", "type": 17, "valid": 0, + "NPC": 0, "data1": 1, "data2": 3, "data3": 0, @@ -209,6 +226,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -221,6 +239,7 @@ "tasktxt": "", "type": 19, "valid": 0, + "NPC": 0, "data1": 2, "data2": 0, "data3": 0, @@ -233,6 +252,7 @@ "tasktxt": "", "type": 20, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -245,6 +265,7 @@ "tasktxt": "", "type": 21, "valid": 0, + "NPC": 0, "data1": 2, "data2": 0, "data3": 0, @@ -257,6 +278,7 @@ "tasktxt": "", "type": 22, "valid": 0, + "NPC": 0, "data1": 25001, "data2": 0, "data3": 0, @@ -269,6 +291,7 @@ "tasktxt": "", "type": 23, "valid": 0, + "NPC": 0, "data1": 3, "data2": 5, "data3": 20, @@ -281,6 +304,7 @@ "tasktxt": "", "type": 24, "valid": 0, + "NPC": 0, "data1": 4, "data2": 0, "data3": 0, @@ -293,6 +317,7 @@ "tasktxt": "", "type": 25, "valid": 0, + "NPC": 0, "data1": 3, "data2": 25001, "data3": 6, @@ -305,6 +330,7 @@ "tasktxt": "", "type": 26, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -317,6 +343,7 @@ "tasktxt": "", "type": 27, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -329,6 +356,7 @@ "tasktxt": "", "type": 28, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -341,6 +369,7 @@ "tasktxt": "", "type": 29, "valid": 0, + "NPC": 0, "data1": 2, "data2": 22, "data3": 25004, @@ -353,6 +382,7 @@ "tasktxt": "", "type": 30, "valid": 0, + "NPC": 0, "data1": 5, "data2": 3, "data3": 0, @@ -365,6 +395,7 @@ "tasktxt": "", "type": 31, "valid": 0, + "NPC": 0, "data1": 4, "data2": 3, "data3": 0, @@ -377,6 +408,7 @@ "tasktxt": "", "type": 32, "valid": 0, + "NPC": 0, "data1": 3, "data2": 3, "data3": 20, @@ -389,6 +421,7 @@ "tasktxt": "", "type": 33, "valid": 0, + "NPC": 0, "data1": 3, "data2": 3, "data3": 23, @@ -401,6 +434,7 @@ "tasktxt": "", "type": 34, "valid": 0, + "NPC": 0, "data1": 5, "data2": 2, "data3": 0, @@ -413,6 +447,7 @@ "tasktxt": "", "type": 35, "valid": 0, + "NPC": 0, "data1": 2, "data2": 25001, "data3": 0, @@ -425,11 +460,12 @@ "tasktxt": "", "type": 36, "valid": 0, + "NPC": 2, "data1": 1, "data2": 3, "data3": 3, "data4": 1, - "data5": 2 + "data5": 0 }, { "id": 137, @@ -437,6 +473,7 @@ "tasktxt": "", "type": 37, "valid": 0, + "NPC": 0, "data1": 1, "data2": 3, "data3": 0, @@ -449,6 +486,7 @@ "tasktxt": "", "type": 38, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -461,6 +499,7 @@ "tasktxt": "", "type": 39, "valid": 0, + "NPC": 0, "data1": 2, "data2": 0, "data3": 0, @@ -473,6 +512,7 @@ "tasktxt": "", "type": 40, "valid": 0, + "NPC": 0, "data1": 2, "data2": 2, "data3": 0, @@ -485,6 +525,7 @@ "tasktxt": "", "type": 41, "valid": 0, + "NPC": 0, "data1": 2, "data2": 2, "data3": 1, @@ -497,6 +538,7 @@ "tasktxt": "", "type": 42, "valid": 0, + "NPC": 0, "data1": 2, "data2": 2, "data3": 2, @@ -509,6 +551,7 @@ "tasktxt": "", "type": 43, "valid": 0, + "NPC": 0, "data1": 2, "data2": 2, "data3": 0, @@ -521,6 +564,7 @@ "tasktxt": "", "type": 44, "valid": 0, + "NPC": 0, "data1": 3, "data2": 0, "data3": 0, @@ -533,6 +577,7 @@ "tasktxt": "", "type": 45, "valid": 0, + "NPC": 0, "data1": 2, "data2": 1, "data3": 1, @@ -545,6 +590,7 @@ "tasktxt": "", "type": 46, "valid": 0, + "NPC": 0, "data1": 1, "data2": 4, "data3": 1, @@ -557,6 +603,7 @@ "tasktxt": "", "type": 47, "valid": 0, + "NPC": 0, "data1": 2, "data2": 0, "data3": 0, @@ -569,6 +616,7 @@ "tasktxt": "", "type": 48, "valid": 0, + "NPC": 0, "data1": 1, "data2": 1, "data3": 2, @@ -581,6 +629,7 @@ "tasktxt": "", "type": 49, "valid": 0, + "NPC": 0, "data1": 1, "data2": 1, "data3": 2, @@ -593,6 +642,7 @@ "tasktxt": "", "type": 50, "valid": 0, + "NPC": 0, "data1": 1, "data2": 1, "data3": 0, @@ -605,6 +655,7 @@ "tasktxt": "", "type": 51, "valid": 0, + "NPC": 0, "data1": 1, "data2": 1, "data3": 0, @@ -617,6 +668,7 @@ "tasktxt": "", "type": 52, "valid": 0, + "NPC": 0, "data1": 1, "data2": 14007, "data3": 0, @@ -629,6 +681,7 @@ "tasktxt": "", "type": 53, "valid": 0, + "NPC": 0, "data1": 2, "data2": 0, "data3": 0, @@ -641,6 +694,7 @@ "tasktxt": "", "type": 54, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -653,6 +707,7 @@ "tasktxt": "", "type": 55, "valid": 0, + "NPC": 0, "data1": 2, "data2": 3, "data3": 0, @@ -665,6 +720,7 @@ "tasktxt": "", "type": 56, "valid": 0, + "NPC": 0, "data1": 1, "data2": 1, "data3": 2, @@ -677,6 +733,7 @@ "tasktxt": "", "type": 57, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -689,6 +746,7 @@ "tasktxt": "", "type": 58, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -701,6 +759,7 @@ "tasktxt": "", "type": 59, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -713,6 +772,7 @@ "tasktxt": "", "type": 60, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -725,11 +785,12 @@ "tasktxt": "通关主线章节1-5", "type": 61, "valid": 0, + "NPC": 102, "data1": 1100105, "data2": 0, "data3": 0, "data4": 0, - "data5": 102 + "data5": 0 }, { "id": 162, @@ -737,6 +798,7 @@ "tasktxt": "", "type": 62, "valid": 0, + "NPC": 0, "data1": 2, "data2": 0, "data3": 0, @@ -749,6 +811,7 @@ "tasktxt": "", "type": 63, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -761,6 +824,7 @@ "tasktxt": "", "type": 64, "valid": 0, + "NPC": 0, "data1": 2, "data2": 0, "data3": 0, @@ -773,6 +837,7 @@ "tasktxt": "", "type": 65, "valid": 0, + "NPC": 0, "data1": 2, "data2": 10001, "data3": 0, @@ -785,6 +850,7 @@ "tasktxt": "", "type": 66, "valid": 0, + "NPC": 0, "data1": 2, "data2": 1, "data3": 0, @@ -797,6 +863,7 @@ "tasktxt": "", "type": 67, "valid": 0, + "NPC": 0, "data1": 1000, "data2": 1, "data3": 0, @@ -809,6 +876,7 @@ "tasktxt": "", "type": 68, "valid": 0, + "NPC": 0, "data1": 1000, "data2": 1, "data3": 0, @@ -821,6 +889,7 @@ "tasktxt": "", "type": 69, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -833,6 +902,7 @@ "tasktxt": "", "type": 1, "valid": 0, + "NPC": 0, "data1": 1, "data2": 44006, "data3": 0, @@ -845,6 +915,7 @@ "tasktxt": "", "type": 70, "valid": 0, + "NPC": 0, "data1": 1, "data2": 101, "data3": 0, @@ -857,6 +928,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 10, "data2": 0, "data3": 0, @@ -869,6 +941,7 @@ "tasktxt": "", "type": 72, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -881,11 +954,12 @@ "tasktxt": "尝试挑战邦尼兔", "type": 70, "valid": 0, + "NPC": 10031, "data1": 1, "data2": 101, "data3": 0, "data4": 0, - "data5": 10031 + "data5": 0 }, { "id": 175, @@ -893,6 +967,7 @@ "tasktxt": "", "type": 70, "valid": 0, + "NPC": 0, "data1": 1, "data2": 102, "data3": 0, @@ -905,6 +980,7 @@ "tasktxt": "", "type": 70, "valid": 0, + "NPC": 0, "data1": 1, "data2": 103, "data3": 0, @@ -917,6 +993,7 @@ "tasktxt": "", "type": 70, "valid": 0, + "NPC": 0, "data1": 1, "data2": 104, "data3": 0, @@ -929,6 +1006,7 @@ "tasktxt": "", "type": 70, "valid": 0, + "NPC": 0, "data1": 1, "data2": 105, "data3": 0, @@ -941,6 +1019,7 @@ "tasktxt": "", "type": 70, "valid": 0, + "NPC": 0, "data1": 1, "data2": 106, "data3": 0, @@ -953,6 +1032,7 @@ "tasktxt": "", "type": 70, "valid": 0, + "NPC": 0, "data1": 1, "data2": 107, "data3": 0, @@ -965,6 +1045,7 @@ "tasktxt": "", "type": 70, "valid": 0, + "NPC": 0, "data1": 1, "data2": 108, "data3": 0, @@ -977,6 +1058,7 @@ "tasktxt": "", "type": 70, "valid": 0, + "NPC": 0, "data1": 1, "data2": 109, "data3": 0, @@ -989,6 +1071,7 @@ "tasktxt": "", "type": 140, "valid": 0, + "NPC": 0, "data1": 1, "data2": 10001, "data3": 0, @@ -1001,6 +1084,7 @@ "tasktxt": "", "type": 140, "valid": 0, + "NPC": 0, "data1": 1, "data2": 10002, "data3": 0, @@ -1013,6 +1097,7 @@ "tasktxt": "", "type": 140, "valid": 0, + "NPC": 0, "data1": 1, "data2": 10003, "data3": 0, @@ -1025,6 +1110,7 @@ "tasktxt": "", "type": 140, "valid": 0, + "NPC": 0, "data1": 1, "data2": 10004, "data3": 0, @@ -1037,6 +1123,7 @@ "tasktxt": "", "type": 109, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -1049,6 +1136,7 @@ "tasktxt": "", "type": 104, "valid": 0, + "NPC": 0, "data1": 100, "data2": 0, "data3": 0, @@ -1061,6 +1149,7 @@ "tasktxt": "", "type": 70, "valid": 0, + "NPC": 0, "data1": 1, "data2": 110, "data3": 0, @@ -1073,11 +1162,12 @@ "tasktxt": "", "type": 70, "valid": 0, + "NPC": 1, "data1": 1, "data2": 111, "data3": 1, "data4": 1, - "data5": 1 + "data5": 0 }, { "id": 191, @@ -1085,11 +1175,12 @@ "tasktxt": "", "type": 70, "valid": 0, + "NPC": 2, "data1": 1, "data2": 112, "data3": 2, "data4": 2, - "data5": 2 + "data5": 0 }, { "id": 192, @@ -1097,11 +1188,12 @@ "tasktxt": "", "type": 70, "valid": 0, + "NPC": 3, "data1": 1, "data2": 113, "data3": 3, "data4": 3, - "data5": 3 + "data5": 0 }, { "id": 193, @@ -1109,11 +1201,12 @@ "tasktxt": "", "type": 70, "valid": 0, + "NPC": 4, "data1": 1, "data2": 114, "data3": 4, "data4": 4, - "data5": 4 + "data5": 0 }, { "id": 195, @@ -1121,6 +1214,7 @@ "tasktxt": "", "type": 140, "valid": 0, + "NPC": 0, "data1": 1, "data2": 10005, "data3": 0, @@ -1133,6 +1227,7 @@ "tasktxt": "", "type": 140, "valid": 0, + "NPC": 0, "data1": 1, "data2": 10006, "data3": 0, @@ -1145,6 +1240,7 @@ "tasktxt": "", "type": 140, "valid": 0, + "NPC": 0, "data1": 1, "data2": 10007, "data3": 0, @@ -1157,6 +1253,7 @@ "tasktxt": "", "type": 140, "valid": 0, + "NPC": 0, "data1": 1, "data2": 10008, "data3": 0, @@ -1169,6 +1266,7 @@ "tasktxt": "", "type": 140, "valid": 0, + "NPC": 0, "data1": 1, "data2": 10009, "data3": 0, @@ -1181,6 +1279,7 @@ "tasktxt": "", "type": 140, "valid": 0, + "NPC": 0, "data1": 1, "data2": 10010, "data3": 0, @@ -1193,6 +1292,7 @@ "tasktxt": "", "type": 140, "valid": 0, + "NPC": 0, "data1": 1, "data2": 10007, "data3": 0, @@ -1205,6 +1305,7 @@ "tasktxt": "", "type": 140, "valid": 0, + "NPC": 0, "data1": 1, "data2": 10007, "data3": 0, @@ -1217,11 +1318,12 @@ "tasktxt": "调查这些木桩", "type": 149, "valid": 1, + "NPC": 104, "data1": 1, "data2": 0, "data3": 0, "data4": 0, - "data5": 104 + "data5": 0 }, { "id": 301, @@ -1229,11 +1331,12 @@ "tasktxt": "通关主线章节1-1", "type": 61, "valid": 0, + "NPC": 29, "data1": 1100101, "data2": 0, "data3": 0, "data4": 0, - "data5": 29 + "data5": 0 }, { "id": 302, @@ -1241,6 +1344,7 @@ "tasktxt": "", "type": 61, "valid": 0, + "NPC": 0, "data1": 104, "data2": 0, "data3": 0, @@ -1253,6 +1357,7 @@ "tasktxt": "", "type": 61, "valid": 0, + "NPC": 0, "data1": 108, "data2": 0, "data3": 0, @@ -1265,11 +1370,12 @@ "tasktxt": "通关维京远征难度1", "type": 73, "valid": 0, + "NPC": 10071, "data1": 1, "data2": 1001, "data3": 1, "data4": 0, - "data5": 10071 + "data5": 0 }, { "id": 305, @@ -1277,11 +1383,12 @@ "tasktxt": "通关主线1-6", "type": 61, "valid": 0, + "NPC": 102, "data1": 1100106, "data2": 0, "data3": 0, "data4": 0, - "data5": 102 + "data5": 0 }, { "id": 306, @@ -1289,11 +1396,12 @@ "tasktxt": "进行一次10连", "type": 14, "valid": 0, + "NPC": 101, "data1": 10, "data2": 0, "data3": 0, "data4": 0, - "data5": 101 + "data5": 0 }, { "id": 307, @@ -1301,11 +1409,38 @@ "tasktxt": "打败梦魇!", "type": 70, "valid": 0, + "NPC": 10101, "data1": 1, "data2": 102, "data3": 0, "data4": 0, - "data5": 10101 + "data5": 0 + }, + { + "id": 308, + "type_sp": 1, + "tasktxt": "通关维京远征难度1", + "type": 73, + "valid": 0, + "NPC": 70022, + "data1": 1, + "data2": 1001, + "data3": 1, + "data4": 0, + "data5": 0 + }, + { + "id": 309, + "type_sp": 1, + "tasktxt": "通关维京远征难度1", + "type": 73, + "valid": 0, + "NPC": 70032, + "data1": 1, + "data2": 1001, + "data3": 1, + "data4": 0, + "data5": 0 }, { "id": 10001, @@ -1313,6 +1448,7 @@ "tasktxt": "", "type": 24, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -1325,6 +1461,7 @@ "tasktxt": "", "type": 24, "valid": 0, + "NPC": 0, "data1": 5, "data2": 0, "data3": 0, @@ -1337,6 +1474,7 @@ "tasktxt": "", "type": 24, "valid": 0, + "NPC": 0, "data1": 10, "data2": 0, "data3": 0, @@ -1349,6 +1487,7 @@ "tasktxt": "", "type": 24, "valid": 0, + "NPC": 0, "data1": 20, "data2": 0, "data3": 0, @@ -1361,6 +1500,7 @@ "tasktxt": "", "type": 24, "valid": 0, + "NPC": 0, "data1": 50, "data2": 0, "data3": 0, @@ -1373,6 +1513,7 @@ "tasktxt": "", "type": 24, "valid": 0, + "NPC": 0, "data1": 100, "data2": 0, "data3": 0, @@ -1385,6 +1526,7 @@ "tasktxt": "", "type": 24, "valid": 0, + "NPC": 0, "data1": 200, "data2": 0, "data3": 0, @@ -1397,6 +1539,7 @@ "tasktxt": "", "type": 24, "valid": 0, + "NPC": 0, "data1": 300, "data2": 0, "data3": 0, @@ -1409,6 +1552,7 @@ "tasktxt": "", "type": 24, "valid": 0, + "NPC": 0, "data1": 500, "data2": 0, "data3": 0, @@ -1421,6 +1565,7 @@ "tasktxt": "", "type": 24, "valid": 0, + "NPC": 0, "data1": 1000, "data2": 0, "data3": 0, @@ -1433,6 +1578,7 @@ "tasktxt": "", "type": 7, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -1445,6 +1591,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -1457,6 +1604,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 5, "data2": 0, "data3": 0, @@ -1469,6 +1617,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 10, "data2": 0, "data3": 0, @@ -1481,6 +1630,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 20, "data2": 0, "data3": 0, @@ -1493,6 +1643,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 50, "data2": 0, "data3": 0, @@ -1505,6 +1656,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 100, "data2": 0, "data3": 0, @@ -1517,6 +1669,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 200, "data2": 0, "data3": 0, @@ -1529,6 +1682,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 300, "data2": 0, "data3": 0, @@ -1541,6 +1695,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 500, "data2": 0, "data3": 0, @@ -1553,6 +1708,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 1000, "data2": 0, "data3": 0, @@ -1565,6 +1721,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 1, "data2": 5, "data3": 0, @@ -1577,6 +1734,7 @@ "tasktxt": "", "type": 50, "valid": 0, + "NPC": 0, "data1": 5, "data2": 5, "data3": 0, @@ -1589,6 +1747,7 @@ "tasktxt": "", "type": 50, "valid": 0, + "NPC": 0, "data1": 10, "data2": 5, "data3": 0, @@ -1601,6 +1760,7 @@ "tasktxt": "", "type": 50, "valid": 0, + "NPC": 0, "data1": 20, "data2": 5, "data3": 0, @@ -1613,6 +1773,7 @@ "tasktxt": "", "type": 50, "valid": 0, + "NPC": 0, "data1": 50, "data2": 5, "data3": 0, @@ -1625,6 +1786,7 @@ "tasktxt": "", "type": 50, "valid": 0, + "NPC": 0, "data1": 100, "data2": 5, "data3": 0, @@ -1637,6 +1799,7 @@ "tasktxt": "", "type": 50, "valid": 0, + "NPC": 0, "data1": 200, "data2": 5, "data3": 0, @@ -1649,6 +1812,7 @@ "tasktxt": "", "type": 50, "valid": 0, + "NPC": 0, "data1": 300, "data2": 5, "data3": 0, @@ -1661,6 +1825,7 @@ "tasktxt": "", "type": 50, "valid": 0, + "NPC": 0, "data1": 500, "data2": 5, "data3": 0, @@ -1673,6 +1838,7 @@ "tasktxt": "", "type": 50, "valid": 0, + "NPC": 0, "data1": 1000, "data2": 5, "data3": 0, @@ -1685,6 +1851,7 @@ "tasktxt": "", "type": 50, "valid": 0, + "NPC": 0, "data1": 1, "data2": 6, "data3": 0, @@ -1697,6 +1864,7 @@ "tasktxt": "", "type": 50, "valid": 0, + "NPC": 0, "data1": 5, "data2": 6, "data3": 0, @@ -1709,6 +1877,7 @@ "tasktxt": "", "type": 50, "valid": 0, + "NPC": 0, "data1": 10, "data2": 6, "data3": 0, @@ -1721,6 +1890,7 @@ "tasktxt": "", "type": 50, "valid": 0, + "NPC": 0, "data1": 20, "data2": 6, "data3": 0, @@ -1733,6 +1903,7 @@ "tasktxt": "", "type": 50, "valid": 0, + "NPC": 0, "data1": 50, "data2": 6, "data3": 0, @@ -1745,6 +1916,7 @@ "tasktxt": "", "type": 50, "valid": 0, + "NPC": 0, "data1": 100, "data2": 6, "data3": 0, @@ -1757,6 +1929,7 @@ "tasktxt": "", "type": 50, "valid": 0, + "NPC": 0, "data1": 200, "data2": 6, "data3": 0, @@ -1769,6 +1942,7 @@ "tasktxt": "", "type": 50, "valid": 0, + "NPC": 0, "data1": 300, "data2": 6, "data3": 0, @@ -1781,6 +1955,7 @@ "tasktxt": "", "type": 50, "valid": 0, + "NPC": 0, "data1": 500, "data2": 6, "data3": 0, @@ -1793,6 +1968,7 @@ "tasktxt": "", "type": 50, "valid": 0, + "NPC": 0, "data1": 1000, "data2": 6, "data3": 0, @@ -1805,6 +1981,7 @@ "tasktxt": "", "type": 58, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -1817,6 +1994,7 @@ "tasktxt": "", "type": 58, "valid": 0, + "NPC": 0, "data1": 5, "data2": 0, "data3": 0, @@ -1829,6 +2007,7 @@ "tasktxt": "", "type": 58, "valid": 0, + "NPC": 0, "data1": 10, "data2": 0, "data3": 0, @@ -1841,6 +2020,7 @@ "tasktxt": "", "type": 58, "valid": 0, + "NPC": 0, "data1": 20, "data2": 0, "data3": 0, @@ -1853,6 +2033,7 @@ "tasktxt": "", "type": 58, "valid": 0, + "NPC": 0, "data1": 30, "data2": 0, "data3": 0, @@ -1865,6 +2046,7 @@ "tasktxt": "", "type": 58, "valid": 0, + "NPC": 0, "data1": 50, "data2": 0, "data3": 0, @@ -1877,6 +2059,7 @@ "tasktxt": "", "type": 58, "valid": 0, + "NPC": 0, "data1": 70, "data2": 0, "data3": 0, @@ -1889,6 +2072,7 @@ "tasktxt": "", "type": 58, "valid": 0, + "NPC": 0, "data1": 100, "data2": 0, "data3": 0, @@ -1901,6 +2085,7 @@ "tasktxt": "", "type": 62, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -1913,6 +2098,7 @@ "tasktxt": "", "type": 62, "valid": 0, + "NPC": 0, "data1": 5, "data2": 0, "data3": 0, @@ -1925,6 +2111,7 @@ "tasktxt": "", "type": 62, "valid": 0, + "NPC": 0, "data1": 99, "data2": 0, "data3": 0, @@ -1937,6 +2124,7 @@ "tasktxt": "", "type": 64, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -1949,6 +2137,7 @@ "tasktxt": "", "type": 64, "valid": 0, + "NPC": 0, "data1": 5, "data2": 0, "data3": 0, @@ -1961,6 +2150,7 @@ "tasktxt": "", "type": 64, "valid": 0, + "NPC": 0, "data1": 10, "data2": 0, "data3": 0, @@ -1973,6 +2163,7 @@ "tasktxt": "", "type": 64, "valid": 0, + "NPC": 0, "data1": 20, "data2": 0, "data3": 0, @@ -1985,6 +2176,7 @@ "tasktxt": "", "type": 64, "valid": 0, + "NPC": 0, "data1": 50, "data2": 0, "data3": 0, @@ -1997,6 +2189,7 @@ "tasktxt": "", "type": 64, "valid": 0, + "NPC": 0, "data1": 100, "data2": 0, "data3": 0, @@ -2009,6 +2202,7 @@ "tasktxt": "", "type": 64, "valid": 0, + "NPC": 0, "data1": 200, "data2": 0, "data3": 0, @@ -2021,6 +2215,7 @@ "tasktxt": "", "type": 64, "valid": 0, + "NPC": 0, "data1": 300, "data2": 0, "data3": 0, @@ -2033,6 +2228,7 @@ "tasktxt": "", "type": 64, "valid": 0, + "NPC": 0, "data1": 500, "data2": 0, "data3": 0, @@ -2045,6 +2241,7 @@ "tasktxt": "", "type": 64, "valid": 0, + "NPC": 0, "data1": 1000, "data2": 0, "data3": 0, @@ -2057,6 +2254,7 @@ "tasktxt": "", "type": 8, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -2069,6 +2267,7 @@ "tasktxt": "", "type": 8, "valid": 0, + "NPC": 0, "data1": 5, "data2": 0, "data3": 0, @@ -2081,6 +2280,7 @@ "tasktxt": "", "type": 8, "valid": 0, + "NPC": 0, "data1": 10, "data2": 0, "data3": 0, @@ -2093,6 +2293,7 @@ "tasktxt": "", "type": 8, "valid": 0, + "NPC": 0, "data1": 20, "data2": 0, "data3": 0, @@ -2105,6 +2306,7 @@ "tasktxt": "", "type": 8, "valid": 0, + "NPC": 0, "data1": 50, "data2": 0, "data3": 0, @@ -2117,6 +2319,7 @@ "tasktxt": "", "type": 8, "valid": 0, + "NPC": 0, "data1": 100, "data2": 0, "data3": 0, @@ -2129,6 +2332,7 @@ "tasktxt": "", "type": 8, "valid": 0, + "NPC": 0, "data1": 200, "data2": 0, "data3": 0, @@ -2141,6 +2345,7 @@ "tasktxt": "", "type": 8, "valid": 0, + "NPC": 0, "data1": 300, "data2": 0, "data3": 0, @@ -2153,6 +2358,7 @@ "tasktxt": "", "type": 8, "valid": 0, + "NPC": 0, "data1": 500, "data2": 0, "data3": 0, @@ -2165,6 +2371,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 1000, "data2": 0, "data3": 0, @@ -2177,6 +2384,7 @@ "tasktxt": "", "type": 8, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -2189,6 +2397,7 @@ "tasktxt": "", "type": 12, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -2201,6 +2410,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -2213,6 +2423,7 @@ "tasktxt": "", "type": 24, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -2225,6 +2436,7 @@ "tasktxt": "", "type": 47, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -2237,6 +2449,7 @@ "tasktxt": "", "type": 62, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -2249,6 +2462,7 @@ "tasktxt": "", "type": 64, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -2261,6 +2475,7 @@ "tasktxt": "", "type": 130, "valid": 0, + "NPC": 0, "data1": 3, "data2": 0, "data3": 0, @@ -2273,6 +2488,7 @@ "tasktxt": "", "type": 8, "valid": 0, + "NPC": 0, "data1": 10, "data2": 0, "data3": 0, @@ -2285,6 +2501,7 @@ "tasktxt": "", "type": 12, "valid": 0, + "NPC": 0, "data1": 10, "data2": 0, "data3": 0, @@ -2297,6 +2514,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 5, "data2": 0, "data3": 0, @@ -2309,6 +2527,7 @@ "tasktxt": "", "type": 24, "valid": 0, + "NPC": 0, "data1": 5, "data2": 0, "data3": 0, @@ -2321,6 +2540,7 @@ "tasktxt": "", "type": 47, "valid": 0, + "NPC": 0, "data1": 7, "data2": 0, "data3": 0, @@ -2333,6 +2553,7 @@ "tasktxt": "", "type": 62, "valid": 0, + "NPC": 0, "data1": 7, "data2": 0, "data3": 0, @@ -2345,6 +2566,7 @@ "tasktxt": "", "type": 64, "valid": 0, + "NPC": 0, "data1": 7, "data2": 0, "data3": 0, @@ -2357,6 +2579,7 @@ "tasktxt": "", "type": 88, "valid": 0, + "NPC": 0, "data1": 3, "data2": 0, "data3": 0, @@ -2369,6 +2592,7 @@ "tasktxt": "", "type": 105, "valid": 0, + "NPC": 0, "data1": 10, "data2": 0, "data3": 0, @@ -2381,6 +2605,7 @@ "tasktxt": "", "type": 104, "valid": 0, + "NPC": 0, "data1": 1000, "data2": 0, "data3": 0, @@ -2393,6 +2618,7 @@ "tasktxt": "", "type": 130, "valid": 0, + "NPC": 0, "data1": 30, "data2": 0, "data3": 0, @@ -2405,6 +2631,7 @@ "tasktxt": "", "type": 8, "valid": 0, + "NPC": 0, "data1": 3, "data2": 0, "data3": 0, @@ -2417,6 +2644,7 @@ "tasktxt": "", "type": 8, "valid": 0, + "NPC": 0, "data1": 7, "data2": 0, "data3": 0, @@ -2429,6 +2657,7 @@ "tasktxt": "", "type": 8, "valid": 0, + "NPC": 0, "data1": 30, "data2": 0, "data3": 0, @@ -2441,6 +2670,7 @@ "tasktxt": "", "type": 8, "valid": 0, + "NPC": 0, "data1": 90, "data2": 0, "data3": 0, @@ -2453,6 +2683,7 @@ "tasktxt": "", "type": 8, "valid": 0, + "NPC": 0, "data1": 180, "data2": 0, "data3": 0, @@ -2465,6 +2696,7 @@ "tasktxt": "", "type": 8, "valid": 0, + "NPC": 0, "data1": 365, "data2": 0, "data3": 0, @@ -2477,6 +2709,7 @@ "tasktxt": "", "type": 9, "valid": 0, + "NPC": 0, "data1": 3, "data2": 0, "data3": 0, @@ -2489,6 +2722,7 @@ "tasktxt": "", "type": 9, "valid": 0, + "NPC": 0, "data1": 7, "data2": 0, "data3": 0, @@ -2501,6 +2735,7 @@ "tasktxt": "", "type": 9, "valid": 0, + "NPC": 0, "data1": 14, "data2": 0, "data3": 0, @@ -2513,6 +2748,7 @@ "tasktxt": "", "type": 9, "valid": 0, + "NPC": 0, "data1": 30, "data2": 0, "data3": 0, @@ -2525,6 +2761,7 @@ "tasktxt": "", "type": 10, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -2537,6 +2774,7 @@ "tasktxt": "", "type": 10, "valid": 0, + "NPC": 0, "data1": 5, "data2": 0, "data3": 0, @@ -2549,6 +2787,7 @@ "tasktxt": "", "type": 10, "valid": 0, + "NPC": 0, "data1": 10, "data2": 0, "data3": 0, @@ -2561,6 +2800,7 @@ "tasktxt": "", "type": 10, "valid": 0, + "NPC": 0, "data1": 20, "data2": 0, "data3": 0, @@ -2573,6 +2813,7 @@ "tasktxt": "", "type": 10, "valid": 0, + "NPC": 0, "data1": 30, "data2": 0, "data3": 0, @@ -2585,6 +2826,7 @@ "tasktxt": "", "type": 10, "valid": 0, + "NPC": 0, "data1": 50, "data2": 0, "data3": 0, @@ -2597,6 +2839,7 @@ "tasktxt": "", "type": 11, "valid": 0, + "NPC": 0, "data1": 5, "data2": 0, "data3": 0, @@ -2609,6 +2852,7 @@ "tasktxt": "", "type": 11, "valid": 0, + "NPC": 0, "data1": 10, "data2": 0, "data3": 0, @@ -2621,6 +2865,7 @@ "tasktxt": "", "type": 11, "valid": 0, + "NPC": 0, "data1": 30, "data2": 0, "data3": 0, @@ -2633,6 +2878,7 @@ "tasktxt": "", "type": 11, "valid": 0, + "NPC": 0, "data1": 50, "data2": 0, "data3": 0, @@ -2645,6 +2891,7 @@ "tasktxt": "", "type": 11, "valid": 0, + "NPC": 0, "data1": 100, "data2": 0, "data3": 0, @@ -2657,6 +2904,7 @@ "tasktxt": "", "type": 11, "valid": 0, + "NPC": 0, "data1": 300, "data2": 0, "data3": 0, @@ -2669,6 +2917,7 @@ "tasktxt": "", "type": 11, "valid": 0, + "NPC": 0, "data1": 500, "data2": 0, "data3": 0, @@ -2681,6 +2930,7 @@ "tasktxt": "", "type": 11, "valid": 0, + "NPC": 0, "data1": 1000, "data2": 0, "data3": 0, @@ -2693,6 +2943,7 @@ "tasktxt": "", "type": 11, "valid": 0, + "NPC": 0, "data1": 3000, "data2": 0, "data3": 0, @@ -2705,6 +2956,7 @@ "tasktxt": "", "type": 11, "valid": 0, + "NPC": 0, "data1": 5000, "data2": 0, "data3": 0, @@ -2717,6 +2969,7 @@ "tasktxt": "", "type": 11, "valid": 0, + "NPC": 0, "data1": 10000, "data2": 0, "data3": 0, @@ -2729,6 +2982,7 @@ "tasktxt": "", "type": 12, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -2741,6 +2995,7 @@ "tasktxt": "", "type": 12, "valid": 0, + "NPC": 0, "data1": 5, "data2": 0, "data3": 0, @@ -2753,6 +3008,7 @@ "tasktxt": "", "type": 12, "valid": 0, + "NPC": 0, "data1": 10, "data2": 0, "data3": 0, @@ -2765,6 +3021,7 @@ "tasktxt": "", "type": 12, "valid": 0, + "NPC": 0, "data1": 30, "data2": 0, "data3": 0, @@ -2777,6 +3034,7 @@ "tasktxt": "", "type": 12, "valid": 0, + "NPC": 0, "data1": 50, "data2": 0, "data3": 0, @@ -2789,6 +3047,7 @@ "tasktxt": "", "type": 12, "valid": 0, + "NPC": 0, "data1": 100, "data2": 0, "data3": 0, @@ -2801,6 +3060,7 @@ "tasktxt": "", "type": 12, "valid": 0, + "NPC": 0, "data1": 300, "data2": 0, "data3": 0, @@ -2813,6 +3073,7 @@ "tasktxt": "", "type": 12, "valid": 0, + "NPC": 0, "data1": 500, "data2": 0, "data3": 0, @@ -2825,6 +3086,7 @@ "tasktxt": "", "type": 12, "valid": 0, + "NPC": 0, "data1": 1000, "data2": 0, "data3": 0, @@ -2837,6 +3099,7 @@ "tasktxt": "", "type": 16, "valid": 0, + "NPC": 0, "data1": 1, "data2": 5, "data3": 0, @@ -2849,6 +3112,7 @@ "tasktxt": "", "type": 16, "valid": 0, + "NPC": 0, "data1": 2, "data2": 5, "data3": 0, @@ -2861,6 +3125,7 @@ "tasktxt": "", "type": 16, "valid": 0, + "NPC": 0, "data1": 3, "data2": 5, "data3": 0, @@ -2873,6 +3138,7 @@ "tasktxt": "", "type": 16, "valid": 0, + "NPC": 0, "data1": 5, "data2": 5, "data3": 0, @@ -2885,6 +3151,7 @@ "tasktxt": "", "type": 16, "valid": 0, + "NPC": 0, "data1": 10, "data2": 5, "data3": 0, @@ -2897,6 +3164,7 @@ "tasktxt": "", "type": 16, "valid": 0, + "NPC": 0, "data1": 15, "data2": 5, "data3": 0, @@ -2909,6 +3177,7 @@ "tasktxt": "", "type": 16, "valid": 0, + "NPC": 0, "data1": 20, "data2": 5, "data3": 0, @@ -2921,6 +3190,7 @@ "tasktxt": "", "type": 16, "valid": 0, + "NPC": 0, "data1": 30, "data2": 5, "data3": 0, @@ -2933,6 +3203,7 @@ "tasktxt": "", "type": 16, "valid": 0, + "NPC": 0, "data1": 50, "data2": 5, "data3": 0, @@ -2945,6 +3216,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 10, "data2": 0, "data3": 0, @@ -2957,6 +3229,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 20, "data2": 0, "data3": 0, @@ -2969,6 +3242,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 30, "data2": 0, "data3": 0, @@ -2981,6 +3255,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 50, "data2": 0, "data3": 0, @@ -2993,6 +3268,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 100, "data2": 0, "data3": 0, @@ -3005,6 +3281,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 200, "data2": 0, "data3": 0, @@ -3017,6 +3294,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 300, "data2": 0, "data3": 0, @@ -3029,6 +3307,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 500, "data2": 0, "data3": 0, @@ -3041,6 +3320,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 1000, "data2": 0, "data3": 0, @@ -3053,6 +3333,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 2000, "data2": 0, "data3": 0, @@ -3065,6 +3346,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 5000, "data2": 0, "data3": 0, @@ -3077,6 +3359,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 10000, "data2": 0, "data3": 0, @@ -3089,6 +3372,7 @@ "tasktxt": "", "type": 20, "valid": 0, + "NPC": 0, "data1": 10, "data2": 0, "data3": 0, @@ -3101,6 +3385,7 @@ "tasktxt": "", "type": 20, "valid": 0, + "NPC": 0, "data1": 20, "data2": 0, "data3": 0, @@ -3113,6 +3398,7 @@ "tasktxt": "", "type": 20, "valid": 0, + "NPC": 0, "data1": 30, "data2": 0, "data3": 0, @@ -3125,6 +3411,7 @@ "tasktxt": "", "type": 20, "valid": 0, + "NPC": 0, "data1": 40, "data2": 0, "data3": 0, @@ -3137,6 +3424,7 @@ "tasktxt": "", "type": 20, "valid": 0, + "NPC": 0, "data1": 50, "data2": 0, "data3": 0, @@ -3149,6 +3437,7 @@ "tasktxt": "", "type": 20, "valid": 0, + "NPC": 0, "data1": 60, "data2": 0, "data3": 0, @@ -3161,6 +3450,7 @@ "tasktxt": "", "type": 43, "valid": 0, + "NPC": 0, "data1": 1, "data2": 15, "data3": 0, @@ -3173,6 +3463,7 @@ "tasktxt": "", "type": 43, "valid": 0, + "NPC": 0, "data1": 2, "data2": 15, "data3": 0, @@ -3185,6 +3476,7 @@ "tasktxt": "", "type": 43, "valid": 0, + "NPC": 0, "data1": 4, "data2": 15, "data3": 0, @@ -3197,6 +3489,7 @@ "tasktxt": "", "type": 43, "valid": 0, + "NPC": 0, "data1": 6, "data2": 15, "data3": 0, @@ -3209,6 +3502,7 @@ "tasktxt": "", "type": 43, "valid": 0, + "NPC": 0, "data1": 12, "data2": 15, "data3": 0, @@ -3221,6 +3515,7 @@ "tasktxt": "", "type": 43, "valid": 0, + "NPC": 0, "data1": 18, "data2": 15, "data3": 0, @@ -3233,6 +3528,7 @@ "tasktxt": "", "type": 43, "valid": 0, + "NPC": 0, "data1": 24, "data2": 15, "data3": 0, @@ -3245,6 +3541,7 @@ "tasktxt": "", "type": 43, "valid": 0, + "NPC": 0, "data1": 30, "data2": 15, "data3": 0, @@ -3257,6 +3554,7 @@ "tasktxt": "", "type": 43, "valid": 0, + "NPC": 0, "data1": 60, "data2": 15, "data3": 0, @@ -3269,6 +3567,7 @@ "tasktxt": "", "type": 43, "valid": 0, + "NPC": 0, "data1": 120, "data2": 15, "data3": 0, @@ -3281,6 +3580,7 @@ "tasktxt": "", "type": 47, "valid": 0, + "NPC": 0, "data1": 10, "data2": 0, "data3": 0, @@ -3293,6 +3593,7 @@ "tasktxt": "", "type": 47, "valid": 0, + "NPC": 0, "data1": 20, "data2": 0, "data3": 0, @@ -3305,6 +3606,7 @@ "tasktxt": "", "type": 47, "valid": 0, + "NPC": 0, "data1": 30, "data2": 0, "data3": 0, @@ -3317,6 +3619,7 @@ "tasktxt": "", "type": 47, "valid": 0, + "NPC": 0, "data1": 50, "data2": 0, "data3": 0, @@ -3329,6 +3632,7 @@ "tasktxt": "", "type": 47, "valid": 0, + "NPC": 0, "data1": 100, "data2": 0, "data3": 0, @@ -3341,6 +3645,7 @@ "tasktxt": "", "type": 47, "valid": 0, + "NPC": 0, "data1": 200, "data2": 0, "data3": 0, @@ -3353,6 +3658,7 @@ "tasktxt": "", "type": 47, "valid": 0, + "NPC": 0, "data1": 300, "data2": 0, "data3": 0, @@ -3365,6 +3671,7 @@ "tasktxt": "", "type": 47, "valid": 0, + "NPC": 0, "data1": 500, "data2": 0, "data3": 0, @@ -3377,6 +3684,7 @@ "tasktxt": "", "type": 47, "valid": 0, + "NPC": 0, "data1": 1000, "data2": 0, "data3": 0, @@ -3389,6 +3697,7 @@ "tasktxt": "", "type": 47, "valid": 0, + "NPC": 0, "data1": 2000, "data2": 0, "data3": 0, @@ -3401,6 +3710,7 @@ "tasktxt": "", "type": 47, "valid": 0, + "NPC": 0, "data1": 3000, "data2": 0, "data3": 0, @@ -3413,6 +3723,7 @@ "tasktxt": "", "type": 47, "valid": 0, + "NPC": 0, "data1": 5000, "data2": 0, "data3": 0, @@ -3425,6 +3736,7 @@ "tasktxt": "", "type": 47, "valid": 0, + "NPC": 0, "data1": 10000, "data2": 0, "data3": 0, @@ -3437,6 +3749,7 @@ "tasktxt": "", "type": 64, "valid": 0, + "NPC": 0, "data1": 5, "data2": 0, "data3": 0, @@ -3449,6 +3762,7 @@ "tasktxt": "", "type": 64, "valid": 0, + "NPC": 0, "data1": 10, "data2": 0, "data3": 0, @@ -3461,6 +3775,7 @@ "tasktxt": "", "type": 64, "valid": 0, + "NPC": 0, "data1": 20, "data2": 0, "data3": 0, @@ -3473,6 +3788,7 @@ "tasktxt": "", "type": 64, "valid": 0, + "NPC": 0, "data1": 50, "data2": 0, "data3": 0, @@ -3485,6 +3801,7 @@ "tasktxt": "", "type": 64, "valid": 0, + "NPC": 0, "data1": 100, "data2": 0, "data3": 0, @@ -3497,6 +3814,7 @@ "tasktxt": "", "type": 64, "valid": 0, + "NPC": 0, "data1": 200, "data2": 0, "data3": 0, @@ -3509,6 +3827,7 @@ "tasktxt": "", "type": 64, "valid": 0, + "NPC": 0, "data1": 500, "data2": 0, "data3": 0, @@ -3521,6 +3840,7 @@ "tasktxt": "", "type": 68, "valid": 0, + "NPC": 0, "data1": 50000, "data2": 0, "data3": 0, @@ -3533,6 +3853,7 @@ "tasktxt": "", "type": 68, "valid": 0, + "NPC": 0, "data1": 500000, "data2": 0, "data3": 0, @@ -3545,6 +3866,7 @@ "tasktxt": "", "type": 68, "valid": 0, + "NPC": 0, "data1": 5000000, "data2": 0, "data3": 0, @@ -3557,6 +3879,7 @@ "tasktxt": "", "type": 68, "valid": 0, + "NPC": 0, "data1": 50000000, "data2": 0, "data3": 0, @@ -3569,6 +3892,7 @@ "tasktxt": "", "type": 84, "valid": 0, + "NPC": 0, "data1": 10, "data2": 0, "data3": 0, @@ -3581,6 +3905,7 @@ "tasktxt": "", "type": 84, "valid": 0, + "NPC": 0, "data1": 20, "data2": 0, "data3": 0, @@ -3593,6 +3918,7 @@ "tasktxt": "", "type": 84, "valid": 0, + "NPC": 0, "data1": 50, "data2": 0, "data3": 0, @@ -3605,6 +3931,7 @@ "tasktxt": "", "type": 84, "valid": 0, + "NPC": 0, "data1": 100, "data2": 0, "data3": 0, @@ -3617,6 +3944,7 @@ "tasktxt": "", "type": 85, "valid": 0, + "NPC": 0, "data1": 5, "data2": 0, "data3": 0, @@ -3629,6 +3957,7 @@ "tasktxt": "", "type": 85, "valid": 0, + "NPC": 0, "data1": 10, "data2": 0, "data3": 0, @@ -3641,6 +3970,7 @@ "tasktxt": "", "type": 85, "valid": 0, + "NPC": 0, "data1": 20, "data2": 0, "data3": 0, @@ -3653,6 +3983,7 @@ "tasktxt": "", "type": 85, "valid": 0, + "NPC": 0, "data1": 30, "data2": 0, "data3": 0, @@ -3665,6 +3996,7 @@ "tasktxt": "", "type": 85, "valid": 0, + "NPC": 0, "data1": 50, "data2": 0, "data3": 0, @@ -3677,6 +4009,7 @@ "tasktxt": "", "type": 96, "valid": 0, + "NPC": 0, "data1": 10, "data2": 0, "data3": 0, @@ -3689,6 +4022,7 @@ "tasktxt": "", "type": 96, "valid": 0, + "NPC": 0, "data1": 20, "data2": 0, "data3": 0, @@ -3701,6 +4035,7 @@ "tasktxt": "", "type": 96, "valid": 0, + "NPC": 0, "data1": 50, "data2": 0, "data3": 0, @@ -3713,6 +4048,7 @@ "tasktxt": "", "type": 96, "valid": 0, + "NPC": 0, "data1": 100, "data2": 0, "data3": 0, @@ -3725,6 +4061,7 @@ "tasktxt": "", "type": 96, "valid": 0, + "NPC": 0, "data1": 200, "data2": 0, "data3": 0, @@ -3737,6 +4074,7 @@ "tasktxt": "", "type": 96, "valid": 0, + "NPC": 0, "data1": 300, "data2": 0, "data3": 0, @@ -3749,6 +4087,7 @@ "tasktxt": "", "type": 96, "valid": 0, + "NPC": 0, "data1": 500, "data2": 0, "data3": 0, @@ -3761,6 +4100,7 @@ "tasktxt": "", "type": 96, "valid": 0, + "NPC": 0, "data1": 1000, "data2": 0, "data3": 0, @@ -3773,6 +4113,7 @@ "tasktxt": "", "type": 96, "valid": 0, + "NPC": 0, "data1": 2000, "data2": 0, "data3": 0, @@ -3785,6 +4126,7 @@ "tasktxt": "", "type": 96, "valid": 0, + "NPC": 0, "data1": 3000, "data2": 0, "data3": 0, @@ -3797,6 +4139,7 @@ "tasktxt": "", "type": 96, "valid": 0, + "NPC": 0, "data1": 5000, "data2": 0, "data3": 0, @@ -3809,6 +4152,7 @@ "tasktxt": "", "type": 96, "valid": 0, + "NPC": 0, "data1": 10000, "data2": 0, "data3": 0, @@ -3821,6 +4165,7 @@ "tasktxt": "", "type": 104, "valid": 0, + "NPC": 0, "data1": 500, "data2": 0, "data3": 0, @@ -3833,6 +4178,7 @@ "tasktxt": "", "type": 104, "valid": 0, + "NPC": 0, "data1": 1000, "data2": 0, "data3": 0, @@ -3845,6 +4191,7 @@ "tasktxt": "", "type": 104, "valid": 0, + "NPC": 0, "data1": 3000, "data2": 0, "data3": 0, @@ -3857,6 +4204,7 @@ "tasktxt": "", "type": 104, "valid": 0, + "NPC": 0, "data1": 5000, "data2": 0, "data3": 0, @@ -3869,6 +4217,7 @@ "tasktxt": "", "type": 104, "valid": 0, + "NPC": 0, "data1": 10000, "data2": 0, "data3": 0, @@ -3881,6 +4230,7 @@ "tasktxt": "", "type": 104, "valid": 0, + "NPC": 0, "data1": 20000, "data2": 0, "data3": 0, @@ -3893,6 +4243,7 @@ "tasktxt": "", "type": 104, "valid": 0, + "NPC": 0, "data1": 30000, "data2": 0, "data3": 0, @@ -3905,6 +4256,7 @@ "tasktxt": "", "type": 104, "valid": 0, + "NPC": 0, "data1": 50000, "data2": 0, "data3": 0, @@ -3917,6 +4269,7 @@ "tasktxt": "", "type": 104, "valid": 0, + "NPC": 0, "data1": 100000, "data2": 0, "data3": 0, @@ -3929,6 +4282,7 @@ "tasktxt": "", "type": 104, "valid": 0, + "NPC": 0, "data1": 200000, "data2": 0, "data3": 0, @@ -3941,6 +4295,7 @@ "tasktxt": "", "type": 104, "valid": 0, + "NPC": 0, "data1": 500000, "data2": 0, "data3": 0, @@ -3953,6 +4308,7 @@ "tasktxt": "", "type": 128, "valid": 0, + "NPC": 0, "data1": 1100, "data2": 0, "data3": 0, @@ -3965,6 +4321,7 @@ "tasktxt": "", "type": 128, "valid": 0, + "NPC": 0, "data1": 1200, "data2": 0, "data3": 0, @@ -3977,6 +4334,7 @@ "tasktxt": "", "type": 128, "valid": 0, + "NPC": 0, "data1": 1300, "data2": 0, "data3": 0, @@ -3989,6 +4347,7 @@ "tasktxt": "", "type": 128, "valid": 0, + "NPC": 0, "data1": 1400, "data2": 0, "data3": 0, @@ -4001,6 +4360,7 @@ "tasktxt": "", "type": 128, "valid": 0, + "NPC": 0, "data1": 1500, "data2": 0, "data3": 0, @@ -4013,6 +4373,7 @@ "tasktxt": "", "type": 128, "valid": 0, + "NPC": 0, "data1": 1600, "data2": 0, "data3": 0, @@ -4025,6 +4386,7 @@ "tasktxt": "", "type": 128, "valid": 0, + "NPC": 0, "data1": 1700, "data2": 0, "data3": 0, @@ -4037,6 +4399,7 @@ "tasktxt": "", "type": 128, "valid": 0, + "NPC": 0, "data1": 1800, "data2": 0, "data3": 0, @@ -4049,6 +4412,7 @@ "tasktxt": "", "type": 128, "valid": 0, + "NPC": 0, "data1": 1900, "data2": 0, "data3": 0, @@ -4061,6 +4425,7 @@ "tasktxt": "", "type": 128, "valid": 0, + "NPC": 0, "data1": 2000, "data2": 0, "data3": 0, @@ -4073,6 +4438,7 @@ "tasktxt": "", "type": 131, "valid": 0, + "NPC": 0, "data1": 5, "data2": 0, "data3": 0, @@ -4085,6 +4451,7 @@ "tasktxt": "", "type": 131, "valid": 0, + "NPC": 0, "data1": 10, "data2": 0, "data3": 0, @@ -4097,6 +4464,7 @@ "tasktxt": "", "type": 131, "valid": 0, + "NPC": 0, "data1": 20, "data2": 0, "data3": 0, @@ -4109,6 +4477,7 @@ "tasktxt": "", "type": 131, "valid": 0, + "NPC": 0, "data1": 30, "data2": 0, "data3": 0, @@ -4121,6 +4490,7 @@ "tasktxt": "", "type": 131, "valid": 0, + "NPC": 0, "data1": 50, "data2": 0, "data3": 0, @@ -4133,6 +4503,7 @@ "tasktxt": "", "type": 131, "valid": 0, + "NPC": 0, "data1": 100, "data2": 0, "data3": 0, @@ -4145,6 +4516,7 @@ "tasktxt": "", "type": 131, "valid": 0, + "NPC": 0, "data1": 200, "data2": 0, "data3": 0, @@ -4157,6 +4529,7 @@ "tasktxt": "", "type": 131, "valid": 0, + "NPC": 0, "data1": 300, "data2": 0, "data3": 0, @@ -4169,6 +4542,7 @@ "tasktxt": "", "type": 131, "valid": 0, + "NPC": 0, "data1": 500, "data2": 0, "data3": 0, @@ -4181,6 +4555,7 @@ "tasktxt": "", "type": 131, "valid": 0, + "NPC": 0, "data1": 1000, "data2": 0, "data3": 0, @@ -4193,6 +4568,7 @@ "tasktxt": "", "type": 11, "valid": 0, + "NPC": 0, "data1": 3, "data2": 0, "data3": 0, @@ -4205,6 +4581,7 @@ "tasktxt": "", "type": 12, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -4217,6 +4594,7 @@ "tasktxt": "", "type": 18, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -4229,6 +4607,7 @@ "tasktxt": "", "type": 24, "valid": 0, + "NPC": 0, "data1": 1, "data2": 0, "data3": 0, @@ -4241,6 +4620,7 @@ "tasktxt": "", "type": 47, "valid": 0, + "NPC": 0, "data1": 6, "data2": 0, "data3": 0, @@ -4253,6 +4633,7 @@ "tasktxt": "", "type": 63, "valid": 0, + "NPC": 0, "data1": 100, "data2": 0, "data3": 0, @@ -4265,6 +4646,7 @@ "tasktxt": "", "type": 68, "valid": 0, + "NPC": 0, "data1": 200000, "data2": 0, "data3": 0, @@ -4277,6 +4659,7 @@ "tasktxt": "", "type": 104, "valid": 0, + "NPC": 0, "data1": 100, "data2": 0, "data3": 0, @@ -4289,6 +4672,7 @@ "tasktxt": "和骇客蛛进行对话", "type": 20001, "valid": 1, + "NPC": 10011, "data1": 1, "data2": 602, "data3": 0, @@ -4301,6 +4685,7 @@ "tasktxt": "和邦尼兔进行对话", "type": 20001, "valid": 1, + "NPC": 10021, "data1": 1, "data2": 432, "data3": 0, diff --git a/bin/json/game_worldtask.json b/bin/json/game_worldtask.json index 4d976582e..b30e3e3d8 100644 --- a/bin/json/game_worldtask.json +++ b/bin/json/game_worldtask.json @@ -8,12 +8,12 @@ "des": 2, "icon": "", "task_Tname": { - "key": "story_80", + "key": "Mainline_Tasks", "text": "1" }, "task_name": { "key": "Mainline_Tasks_1", - "text": "初来乍到" + "text": "主线任务1" }, "task_display": { "key": "story_80", @@ -45,12 +45,12 @@ "des": 2, "icon": "", "task_Tname": { - "key": "story_80", + "key": "Mainline_Tasks", "text": "1" }, "task_name": { "key": "Mainline_Tasks_2", - "text": "不测风云" + "text": "主线任务2" }, "task_display": { "key": "story_80", @@ -82,12 +82,12 @@ "des": 2, "icon": "", "task_Tname": { - "key": "story_80", + "key": "Mainline_Tasks", "text": "1" }, "task_name": { "key": "Mainline_Tasks_3", - "text": "雨过天晴" + "text": "主线任务3" }, "task_display": { "key": "story_80", @@ -117,12 +117,12 @@ "des": 2, "icon": "", "task_Tname": { - "key": "story_80", + "key": "Mainline_Tasks", "text": "1" }, "task_name": { - "key": "story_80", - "text": "1" + "key": "Mainline_Tasks_4", + "text": "主线任务4" }, "task_display": { "key": "story_80", @@ -152,12 +152,12 @@ "des": 2, "icon": "", "task_Tname": { - "key": "story_80", + "key": "Mainline_Tasks", "text": "1" }, "task_name": { - "key": "story_80", - "text": "1" + "key": "Mainline_Tasks_5", + "text": "主线任务5" }, "task_display": { "key": "story_80", @@ -187,12 +187,12 @@ "des": 2, "icon": "", "task_Tname": { - "key": "story_80", + "key": "Mainline_Tasks", "text": "1" }, "task_name": { - "key": "story_80", - "text": "1" + "key": "Mainline_Tasks_6", + "text": "主线任务6" }, "task_display": { "key": "story_80", @@ -222,12 +222,12 @@ "des": 2, "icon": "", "task_Tname": { - "key": "story_80", + "key": "Mainline_Tasks", "text": "1" }, "task_name": { - "key": "story_80", - "text": "1" + "key": "Mainline_Tasks_7", + "text": "主线任务7" }, "task_display": { "key": "story_80", @@ -257,12 +257,12 @@ "des": 2, "icon": "", "task_Tname": { - "key": "story_80", + "key": "Mainline_Tasks", "text": "1" }, "task_name": { - "key": "story_80", - "text": "1" + "key": "Mainline_Tasks_8", + "text": "主线任务8" }, "task_display": { "key": "story_80", @@ -292,12 +292,12 @@ "des": 2, "icon": "", "task_Tname": { - "key": "story_80", + "key": "Mainline_Tasks", "text": "1" }, "task_name": { - "key": "story_80", - "text": "1" + "key": "Mainline_Tasks_9", + "text": "主线任务9" }, "task_display": { "key": "story_80", @@ -322,17 +322,17 @@ "key": 20100, "lock": 1, "ontxe": 20090, - "id_after": 30010, + "id_after": 0, "group": 2, "des": 2, "icon": "", "task_Tname": { - "key": "story_80", + "key": "Mainline_Tasks", "text": "1" }, "task_name": { - "key": "story_80", - "text": "1" + "key": "Mainline_Tasks_10", + "text": "主线任务10" }, "task_display": { "key": "story_80", @@ -362,11 +362,11 @@ "des": 3, "icon": "", "task_Tname": { - "key": "story_80", + "key": "Side_Quest", "text": "1" }, "task_name": { - "key": "story_80", + "key": "WuGuanSceneTask_1", "text": "1" }, "task_display": { @@ -392,24 +392,26 @@ "key": 40010, "lock": 1, "ontxe": 20020, - "id_after": 0, + "id_after": 40020, "group": 4, "des": 3, "icon": "", "task_Tname": { - "key": "story_80", + "key": "Side_Quest", "text": "1" }, "task_name": { - "key": "story_80", + "key": "SmithyScene_1", "text": "1" }, "task_display": { "key": "story_80", "text": "1" }, - "npc": 0, - "completetask": [], + "npc": 70020, + "completetask": [ + 0 + ], "deliver_npc": 0, "auto_accept": 0, "reword": [ @@ -422,28 +424,30 @@ "module": [] }, { - "key": 50010, + "key": 40020, "lock": 1, - "ontxe": 20030, + "ontxe": 40010, "id_after": 0, - "group": 5, + "group": 4, "des": 3, "icon": "", "task_Tname": { - "key": "story_80", + "key": "Side_Quest", "text": "1" }, "task_name": { - "key": "story_80", + "key": "SmithyScene_1_1", "text": "1" }, "task_display": { "key": "story_80", "text": "1" }, - "npc": 0, - "completetask": [], - "deliver_npc": 0, + "npc": 70021, + "completetask": [ + 308 + ], + "deliver_npc": 70023, "auto_accept": 0, "reword": [ { @@ -454,6 +458,76 @@ ], "module": [] }, + { + "key": 50010, + "lock": 1, + "ontxe": 20030, + "id_after": 50011, + "group": 5, + "des": 3, + "icon": "", + "task_Tname": { + "key": "Side_Quest", + "text": "1" + }, + "task_name": { + "key": "SmithyScene_2", + "text": "1" + }, + "task_display": { + "key": "story_80", + "text": "1" + }, + "npc": 70030, + "completetask": [ + 0 + ], + "deliver_npc": 0, + "auto_accept": 0, + "reword": [ + { + "a": "item", + "t": "110001", + "n": 113 + } + ], + "module": [] + }, + { + "key": 50011, + "lock": 1, + "ontxe": 50010, + "id_after": 0, + "group": 5, + "des": 3, + "icon": "", + "task_Tname": { + "key": "Side_Quest", + "text": "1" + }, + "task_name": { + "key": "SmithyScene_2_1", + "text": "1" + }, + "task_display": { + "key": "story_80", + "text": "1" + }, + "npc": 70031, + "completetask": [ + 309 + ], + "deliver_npc": 70033, + "auto_accept": 0, + "reword": [ + { + "a": "item", + "t": "110001", + "n": 114 + } + ], + "module": [] + }, { "key": 60010, "lock": 1, @@ -463,26 +537,28 @@ "des": 3, "icon": "", "task_Tname": { - "key": "story_80", + "key": "Side_Quest", "text": "1" }, "task_name": { - "key": "story_80", + "key": "WuGuanSceneTask_2", "text": "1" }, "task_display": { "key": "story_80", "text": "1" }, - "npc": 0, - "completetask": [], + "npc": 70040, + "completetask": [ + 0 + ], "deliver_npc": 0, "auto_accept": 0, "reword": [ { "a": "item", "t": "110001", - "n": 113 + "n": 115 } ], "module": [] @@ -496,26 +572,28 @@ "des": 3, "icon": "", "task_Tname": { - "key": "story_80", + "key": "Side_Quest", "text": "1" }, "task_name": { - "key": "story_80", + "key": "WuGuanSceneTask_3", "text": "1" }, "task_display": { "key": "story_80", "text": "1" }, - "npc": 0, - "completetask": [], + "npc": 70050, + "completetask": [ + 0 + ], "deliver_npc": 0, "auto_accept": 0, "reword": [ { "a": "item", "t": "110001", - "n": 114 + "n": 116 } ], "module": [] @@ -529,26 +607,28 @@ "des": 3, "icon": "", "task_Tname": { - "key": "story_80", + "key": "Side_Quest", "text": "1" }, "task_name": { - "key": "story_80", + "key": "SmithyScene_3", "text": "1" }, "task_display": { "key": "story_80", "text": "1" }, - "npc": 0, - "completetask": [], + "npc": 70060, + "completetask": [ + 0 + ], "deliver_npc": 0, "auto_accept": 0, "reword": [ { "a": "item", "t": "110001", - "n": 115 + "n": 117 } ], "module": [] @@ -566,7 +646,7 @@ "text": "1" }, "task_name": { - "key": "story_80", + "key": "Daily_tasks", "text": "1" }, "task_display": { @@ -601,7 +681,7 @@ "text": "1" }, "task_name": { - "key": "story_80", + "key": "Weekly_Tasks", "text": "1" }, "task_display": { From 8fbbd1e3f8272461a1a7edf797ea9f7032ba6d99 Mon Sep 17 00:00:00 2001 From: liwei1dao Date: Thu, 30 Mar 2023 20:45:04 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E8=A3=85=E5=A4=87?= =?UTF-8?q?=E5=9B=9E=E6=94=B6=E7=B3=BB=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/json/game_sellcoefficient.json | 22 ++++++++++ modules/equipment/configure.go | 22 +++++++++- modules/equipment/module.go | 10 ++++- sys/configure/structs/Game.SellCoefficient.go | 42 +++++++++++++++++++ .../structs/Game.SellCoefficientData.go | 37 ++++++++++++++++ 5 files changed, 130 insertions(+), 3 deletions(-) create mode 100644 bin/json/game_sellcoefficient.json create mode 100644 sys/configure/structs/Game.SellCoefficient.go create mode 100644 sys/configure/structs/Game.SellCoefficientData.go diff --git a/bin/json/game_sellcoefficient.json b/bin/json/game_sellcoefficient.json new file mode 100644 index 000000000..34a36df15 --- /dev/null +++ b/bin/json/game_sellcoefficient.json @@ -0,0 +1,22 @@ +[ + { + "character": 1, + "coefficient": 1000 + }, + { + "character": 2, + "coefficient": 1200 + }, + { + "character": 3, + "coefficient": 1500 + }, + { + "character": 4, + "coefficient": 2000 + }, + { + "character": 5, + "coefficient": 3000 + } +] \ No newline at end of file diff --git a/modules/equipment/configure.go b/modules/equipment/configure.go index e096f971d..9733f8c97 100644 --- a/modules/equipment/configure.go +++ b/modules/equipment/configure.go @@ -18,6 +18,8 @@ const ( game_equipcompose = "game_equipcompose.json" //装备锻造 game_equipattribute = "game_equipattribute.json" //装备技能列表 game_equipenchanting = "game_equipenchanting.json" //装备附魔 + game_sellcoefficient = "game_sellcoefficient.json" //装备出售品质系数 + ) ///背包配置管理组件 @@ -39,6 +41,7 @@ func (this *configureComp) Init(service core.IService, module core.IModule, comp this.LoadConfigure(game_equipcompose, cfg.NewGameEquipSCompose) this.LoadConfigure(game_equipattribute, cfg.NewGameEquipAttribute) this.LoadConfigure(game_equipenchanting, cfg.NewGameEquipEnchanting) + this.LoadConfigure(game_sellcoefficient, cfg.NewGameSellCoefficient) configure.RegisterConfigure(game_equip, cfg.NewGameEquip, func() { this.equiplock.Lock() if v, err := this.GetConfigure(game_equip); err != nil { @@ -282,7 +285,24 @@ func (this *configureComp) getEquipenchanting(id string) (result *cfg.GameEquipE } else { if result, ok = v.(*cfg.GameEquipEnchanting).GetDataMap()[id]; !ok { err = fmt.Errorf("on found getEquipenchanting id:%s", id) - this.module.Errorf("err:%v", err) + return + } + } + return +} + +//读取装备出售系数配置 +func (this *configureComp) getSellcoefficient(id int32) (result *cfg.GameSellCoefficientData, err error) { + var ( + v interface{} + ok bool + ) + if v, err = this.GetConfigure(game_sellcoefficient); err != nil { + this.module.Errorf("err:%v", err) + return + } else { + if result, ok = v.(*cfg.GameSellCoefficient).GetDataMap()[id]; !ok { + err = fmt.Errorf("on found getSellcoefficient id:%d", id) return } } diff --git a/modules/equipment/module.go b/modules/equipment/module.go index f2545feee..33a527f58 100644 --- a/modules/equipment/module.go +++ b/modules/equipment/module.go @@ -235,6 +235,7 @@ func (this *Equipment) RecycleEquipments(session comm.IUserSession, equs []strin var ( err error equipments []*pb.DB_Equipment + sellconf *cfg.GameSellCoefficientData confs []*cfg.GameEquipData sale [][]*cfg.Gameatn ) @@ -252,19 +253,24 @@ func (this *Equipment) RecycleEquipments(session comm.IUserSession, equs []strin } if confs[i], err = this.configure.GetEquipmentConfigureById(v.CId); err != nil { this.Errorln(err) - code = pb.ErrorCode_EquipmentOnFoundEquipment + code = pb.ErrorCode_ConfigNoFound return } if confs[i].SmithySale == nil || len(confs[i].SmithySale) == 0 { code = pb.ErrorCode_EquipmentNoCanSell return } + if sellconf, err = this.configure.getSellcoefficient(int32(len(v.AdverbEntry))); err != nil { + this.Errorln(err) + code = pb.ErrorCode_ConfigNoFound + return + } sale[i] = make([]*cfg.Gameatn, len(confs[i].Sale)) for n, s := range confs[i].SmithySale { _s := &cfg.Gameatn{ A: s.A, T: s.T, - N: int32(math.Floor(float64(s.N) * float64(discount+1000) / float64(1000))), + N: int32(math.Floor(float64(s.N) * (float64(discount+1000) / float64(1000)) * (float64(sellconf.Coefficient) / float64(1000)))), } sale[i][n] = _s } diff --git a/sys/configure/structs/Game.SellCoefficient.go b/sys/configure/structs/Game.SellCoefficient.go new file mode 100644 index 000000000..3f35471ef --- /dev/null +++ b/sys/configure/structs/Game.SellCoefficient.go @@ -0,0 +1,42 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +package cfg + +type GameSellCoefficient struct { + _dataMap map[int32]*GameSellCoefficientData + _dataList []*GameSellCoefficientData +} + +func NewGameSellCoefficient(_buf []map[string]interface{}) (*GameSellCoefficient, error) { + _dataList := make([]*GameSellCoefficientData, 0, len(_buf)) + dataMap := make(map[int32]*GameSellCoefficientData) + for _, _ele_ := range _buf { + if _v, err2 := DeserializeGameSellCoefficientData(_ele_); err2 != nil { + return nil, err2 + } else { + _dataList = append(_dataList, _v) + dataMap[_v.Character] = _v + } + } + return &GameSellCoefficient{_dataList:_dataList, _dataMap:dataMap}, nil +} + +func (table *GameSellCoefficient) GetDataMap() map[int32]*GameSellCoefficientData { + return table._dataMap +} + +func (table *GameSellCoefficient) GetDataList() []*GameSellCoefficientData { + return table._dataList +} + +func (table *GameSellCoefficient) Get(key int32) *GameSellCoefficientData { + return table._dataMap[key] +} + + diff --git a/sys/configure/structs/Game.SellCoefficientData.go b/sys/configure/structs/Game.SellCoefficientData.go new file mode 100644 index 000000000..b63c7a25f --- /dev/null +++ b/sys/configure/structs/Game.SellCoefficientData.go @@ -0,0 +1,37 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +package cfg + +import "errors" + +type GameSellCoefficientData struct { + Character int32 + Coefficient int32 +} + +const TypeId_GameSellCoefficientData = 46519505 + +func (*GameSellCoefficientData) GetTypeId() int32 { + return 46519505 +} + +func (_v *GameSellCoefficientData)Deserialize(_buf map[string]interface{}) (err error) { + { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["character"].(float64); !_ok_ { err = errors.New("character error"); return }; _v.Character = int32(_tempNum_) } + { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["coefficient"].(float64); !_ok_ { err = errors.New("coefficient error"); return }; _v.Coefficient = int32(_tempNum_) } + return +} + +func DeserializeGameSellCoefficientData(_buf map[string]interface{}) (*GameSellCoefficientData, error) { + v := &GameSellCoefficientData{} + if err := v.Deserialize(_buf); err == nil { + return v, nil + } else { + return nil, err + } +} From 7e1ca9f7b5051ae36451a6b7bf675721c2cf6faa Mon Sep 17 00:00:00 2001 From: liwei1dao Date: Thu, 30 Mar 2023 20:50:49 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E5=9B=9E=E6=94=B6?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/equipment/module.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/equipment/module.go b/modules/equipment/module.go index 33a527f58..63f373f96 100644 --- a/modules/equipment/module.go +++ b/modules/equipment/module.go @@ -260,7 +260,7 @@ func (this *Equipment) RecycleEquipments(session comm.IUserSession, equs []strin code = pb.ErrorCode_EquipmentNoCanSell return } - if sellconf, err = this.configure.getSellcoefficient(int32(len(v.AdverbEntry))); err != nil { + if sellconf, err = this.configure.getSellcoefficient(int32(len(v.AdverbEntry) + 1)); err != nil { this.Errorln(err) code = pb.ErrorCode_ConfigNoFound return