SamsaraGame/assets/Script/game/task_config.js
2025-04-24 17:03:28 +08:00

401 lines
12 KiB
JavaScript

import GameModel from "../ts/core/GameModel";
import SKDataUtil from "../ts/gear_2.3.4/util/SKDataUtil";
let CPubFunction = require('./PubFunction');
let EEventType =
{
PlayerTalkNpc: 1,
PlayerKillNpc: 2,
PlayerGatherNpc: 3,
PlayerDoAction: 4,
PlayerArriveArea: 5,
PlayerGiveNpcItem: 6,
FailEventPlayerDead: 11,
FailEventTimeOut: 12,
};
let ETaskKind =
{
EStory: 1,
EDaily: 2,
EFuBen: 3,
};
let EState =
{
ELock: 0,
EDoing: 1,
EDone: 2,
EFaild: 3,
};
class CEventBase {
constructor() {
this.nEventType = 0;
this.strTip = '';
this.vecPrize = [];
}
}
//--------------------- 對話 ---------------//
class CEventTalkNpc extends CEventBase {
constructor() {
super();
this.vecCreateNpc = [];
this.nNpcConfigID = 0;
this.vecSpeak = [];
this.bAutoTrigle = 0;
}
}
//--------------------- 採集Npc ---------------//
class CGatherNpc extends CEventBase {
constructor() {
super();
this.vecCreateNpc = [];
this.vecNpc = [];
}
}
//--------------------- 在指定區域做動作 ---------------//
class CDoActionInArea extends CEventBase {
constructor() {
super();
this.nMap = 0;
this.nX = 0;
this.nY = 0;
this.strAction;
this.strTalk = '';
}
}
//--------------------- 到達區域 ---------------//
class CArriveArea extends CEventBase {
constructor() {
super();
this.nMap = 0;
this.nX = 0;
this.nY = 0;
}
}
//--------------------- 給Npc物品 ---------------//
class CGiveNpcItem extends CEventBase {
constructor() {
super();
this.nItemID = 0;
this.nNum = 0;
this.nFromNpc;
this.nNpcConfigID;
}
}
//--------------------- 殺死Npc ---------------//
class CKillDynamicNpc extends CEventBase {
constructor() {
super();
this.vecCreateNpc = [];
this.vecNpc = [];
this.bAutoTrigle = 0;
}
}
//--------------------- 失敗事件:玩家死亡 ---------------//
class CFailEventPlayerDead extends CEventBase {
constructor() {
super();
this.nEventType = EEventType.FailEventPlayerDead;
this.nDeadCnt = 1;
}
}
//--------------------- 失敗事件:超時 ---------------//
class CFailEventTimeOut extends CEventBase {
constructor() {
super();
this.nEventType = EEventType.FailEventTimeOut;
this.nMaxTime = 60;
}
}
/**********************************************************************/
class CTask {
constructor() {
this.nTaskID = 0;
this.nKind = 0;
this.nTaskGrop = 0;
this.nDailyCnt = 0;
this.strTaskName = '';
this.vecLimit = [];
this.vecEvent = []; //事件列表
this.vecFailEvent = [];
}
}
/*********************************** 任務配置信息 ***********************************/
class CConfigTaskMgr {
constructor() {
this.mapConfigTask = {};
// this.InitAllTask();
}
GetTaskEventCreateNpc(vecString) {
let vecData = [];
if(!vecString){
return vecData;
}
if(SKDataUtil.isArray(vecString)){
for(let item of vecString){
if(typeof(item)!="string"){
continue;
}
let vecTmp = item.split(",");
if (vecTmp.length != 4){
continue;
}
vecData.push({ nNpc: vecTmp[0], nMap: vecTmp[1], nX: vecTmp[2], nY: vecTmp[3] });
}
}else{
cc.log(`$警告:${vecString}不是數組!`);
}
return vecData;
}
GetDailyMaxCnt(nGrop) {
if (nGrop == 2 || nGrop == 3)
return 20;
if (nGrop == 4)
return 15;
if (nGrop == 5)
return 5;
if (nGrop == 6)
return 120;
if (nGrop == 7)
return 40;
return 0;
}
StringVecorToDataVector(vecString) {
let vecData = [];
if(!vecString){
return vecData;
}
if(SKDataUtil.isArray(vecString)){
for (let item of vecString){
if(typeof(item) != "string"){
cc.warn(`$警告:解析錯誤非字符串:${item}`);
continue;
}
let vecTmp = item.split(":");
if (vecTmp.length < 2){
cc.warn(`$警告:解析錯誤缺少:號${item}`);
continue;
}
vecData.push({ nKey: vecTmp[0], nValue: vecTmp[1] });
}
}else{
cc.log(`$警告:${vecString}不是數組!`);
}
return vecData;
}
AddTask(nKind, stTask) {
if (this.mapConfigTask.hasOwnProperty(nKind) == false)
this.mapConfigTask[nKind] = [];
this.mapConfigTask[nKind].push(stTask);
}
InitAllTask() {
for (const itTask in GameModel.conf_task) {
if (itTask == 'datatype')
continue;
const stData = GameModel.conf_task[itTask];
let stTask = new CTask();
stTask.nTaskID = parseInt(itTask);
stTask.nKind = stData.nKind;
stTask.strTaskName = stData.strName;
stTask.nTaskGrop = CPubFunction.GetDefault(stData.nTaskGrop, 0);
stTask.nDailyCnt = CPubFunction.GetDefault(stData.nDailyCnt, 0);
for (let nIndex in stData.vecEvent) {
if (stData.vecEvent[nIndex].nEventType == EEventType.PlayerTalkNpc) //對話
{
let stTalk = new CEventTalkNpc();
stTalk.nEventType = EEventType.PlayerTalkNpc;
stTalk.vecPrize = this.StringVecorToDataVector(stData.vecEvent[nIndex].vecPrize);
stTalk.strTip = stData.vecEvent[nIndex].strTip;
stTalk.vecCreateNpc = this.GetTaskEventCreateNpc(stData.vecEvent[nIndex].vecCreateNpc);
stTalk.vecNpc = stData.vecEvent[nIndex].vecNpc.slice(0);
stTalk.vecSpeak = this.StringVecorToDataVector(stData.vecEvent[nIndex].vecSpeak);
stTalk.bAutoTrigle = CPubFunction.GetDefault(stData.vecEvent[nIndex].bAutoTrigle, 0);
stTask.vecEvent.push(stTalk);
}
if (stData.vecEvent[nIndex].nEventType == EEventType.PlayerGatherNpc) {
let stGather = new CGatherNpc();
stGather.nEventType = EEventType.PlayerGatherNpc;
stGather.strTip = stData.vecEvent[nIndex].strTip;
stGather.vecPrize = this.StringVecorToDataVector(stData.vecEvent[nIndex].vecPrize);
stGather.vecCreateNpc = this.GetTaskEventCreateNpc(stData.vecEvent[nIndex].vecCreateNpc);
stGather.vecNpc = stData.vecEvent[nIndex].vecNpc.slice(0);
stTask.vecEvent.push(stGather);
}
if (stData.vecEvent[nIndex].nEventType == EEventType.PlayerDoAction) {
let stAction = new CDoActionInArea();
stAction.nEventType = EEventType.PlayerDoAction;
stAction.vecPrize = this.StringVecorToDataVector(stData.vecEvent[nIndex].vecPrize);
stAction.strTip = stData.vecEvent[nIndex].strTip;
stAction.nMap = stData.vecEvent[nIndex].nMap;
stAction.nX = stData.vecEvent[nIndex].nX;
stAction.nY = stData.vecEvent[nIndex].nY;
stAction.strAction = stData.vecEvent[nIndex].strAction;
stAction.strTalk = stData.vecEvent[nIndex].strTalk;
stTask.vecEvent.push(stAction);
}
if (stData.vecEvent[nIndex].nEventType == EEventType.PlayerArriveArea) {
let stAction = new CArriveArea();
stAction.nEventType = EEventType.PlayerArriveArea;
stAction.vecPrize = this.StringVecorToDataVector(stData.vecEvent[nIndex].vecPrize);
stAction.strTip = stData.vecEvent[nIndex].strTip;
stAction.nMap = stData.vecEvent[nIndex].nMap;
stAction.nX = stData.vecEvent[nIndex].nX;
stAction.nY = stData.vecEvent[nIndex].nY;
stTask.vecEvent.push(stAction);
}
if (stData.vecEvent[nIndex].nEventType == EEventType.PlayerGiveNpcItem) {
let stAction = new CGiveNpcItem();
stAction.nEventType = EEventType.PlayerGiveNpcItem;
stAction.vecPrize = this.StringVecorToDataVector(stData.vecEvent[nIndex].vecPrize);
stAction.strTip = stData.vecEvent[nIndex].strTip;
stAction.nItemID = stData.vecEvent[nIndex].nItemID;
stAction.nNum = stData.vecEvent[nIndex].nNum;
stAction.nFromNpc = stData.vecEvent[nIndex].nFromNpc;
stAction.nNpcConfigID = stData.vecEvent[nIndex].nToNpc;
stAction.strTip2 = stData.vecEvent[nIndex].strTip2;
stTask.vecEvent.push(stAction);
}
if (stData.vecEvent[nIndex].nEventType == EEventType.PlayerKillNpc) {
let stEvent = new CKillDynamicNpc();
stEvent.nEventType = EEventType.PlayerKillNpc;
stEvent.vecPrize = this.StringVecorToDataVector(stData.vecEvent[nIndex].vecPrize);
stEvent.strTip = stData.vecEvent[nIndex].strTip;
stEvent.vecCreateNpc = this.GetTaskEventCreateNpc(stData.vecEvent[nIndex].vecCreateNpc);
stEvent.vecNpc = stData.vecEvent[nIndex].vecNpc.slice(0);
stEvent.bAutoTrigle = stData.vecEvent[nIndex].bAutoTrigle;
stTask.vecEvent.push(stEvent);
}
}
for (let nIndex in stData.vecFailEvent) {
if (stData.vecFailEvent[nIndex].nEventType == EEventType.FailEventPlayerDead) {
let stEvent = new CFailEventPlayerDead();
stTask.vecFailEvent.push(stEvent);
}
if (stData.vecFailEvent[nIndex].nEventType == EEventType.FailEventTimeOut) {
let stEvent = new CFailEventTimeOut();
stTask.vecFailEvent.push(stEvent);
}
}
stTask.vecLimit = this.StringVecorToDataVector(stData.vecLimit);
this.AddTask(stTask.nKind, stTask);
}
}
GetTaskInfo(nTaskID) {
if (CPubFunction.GetMapLen(this.mapConfigTask) <= 0) {
this.InitAllTask();
}
for (let nKind in this.mapConfigTask) {
let vecTask = this.mapConfigTask[nKind];
for (let nIndex in vecTask) {
if (vecTask[nIndex].nTaskID == nTaskID)
return vecTask[nIndex];
}
}
return null;
}
GetTaskStepInfo(nTaskID, nStep) {
let stTaskConfig = this.GetTaskInfo(nTaskID);
if (null == stTaskConfig)
return null;
if (nStep < 0 || nStep >= stTaskConfig.vecEvent.length)
return null;
return stTaskConfig.vecEvent[nStep];
}
GetFailEventInfo(nTaskID, nStep) {
let stTaskConfig = this.GetTaskInfo(nTaskID);
if (null == stTaskConfig)
return null;
if (nStep < 0 || nStep >= stTaskConfig.vecFailEvent.length)
return null;
return stTaskConfig.vecFailEvent[nStep];
}
IsTeamTask(nTaskID) {
if (nTaskID >= 500)
return true;
return false;
}
}
let g_pTaskConfigMgr = null;
module.exports = (() => {
if (g_pTaskConfigMgr == null) {
g_pTaskConfigMgr = new CConfigTaskMgr();
}
return { g_pTaskConfigMgr, CTask, CGatherNpc, CEventTalkNpc, EEventType, ETaskKind, EState };
})();