Files
test/Assets/Scripts/Task/TaskTempl.cs
T
2025-09-19 14:31:18 +07:00

523 lines
18 KiB
C#

using UnityEngine;
using System.IO;
namespace PerfectWorld.Scripts.Task
{
/// <summary>
/// Completion Method
/// </summary>
public enum TaskMethod
{
enumTMNone = 0, // None
enumTMKillNumMonster, // Kill a number of monsters
enumTMCollectNumArticle, // Collect a number of items
enumTMTalkToNPC, // Talk to a specific NPC
enumTMReachSite, // Reach a specific location
enumTMWaitTime, // Wait for a specified time
enumTMAnswerQuestion, // Answer a question
enumTMTinyGame, // Mini-game
enumTMProtectNPC, // Protect a specific NPC
enumTMNPCReachSite, // NPC reaches a specific location
enumTMGlobalValOK, // Global variable condition satisfied
enumTMLeaveSite, // Leave a specific location
enumTMReachTreasureZone, // Reach the treasure area
enumTMKillPlayer, // Kill another player
enumTMTransform, // Transform state
enumTMReachLevel, // Check level: normal level, rebirth count, realm level
enumTMSimpleClientTask, // Simple client task (only client-side validation, currently just checks UI triggers)
enumTMSimpleClientTaskForceNavi // Force navigation
}
public class ATaskTemplFixedData
{
public ulong m_ID;
public ulong m_ulNPCToProtect;
public ulong m_ulProtectTimeLen;
public ulong m_enumMethod;
public ulong m_enumFinishType;
//Hierarchy
public ATaskTempl m_pParent;
public ATaskTempl m_pPrevSibling;
public ATaskTempl m_pNextSibling;
public ATaskTempl m_pFirstChild;
// Required items
public ulong m_ulPremItems;
// public ItemWanted[] m_PremItems; // [MAX_ITEM_WANTED]
public bool m_bShowByItems;
public bool m_bPremItemsAnyOne;
// Level condition
public ulong m_ulPremise_Lev_Min;
public ulong m_ulPremise_Lev_Max;
public ulong m_bPremCheckMaxHistoryLevel;
public bool m_bShowByLev;
// Monster controller
public long m_lMonsCtrl;
public bool m_bTrigCtrl;
// Auto trigger when conditions are met
public bool m_bAutoDeliver;
// Whether to display in exclusive UI
public bool m_bDisplayInExclusiveUI;
public bool m_bReadyToNotifyServer;
// Whether used in token shop
public bool m_bUsedInTokenShop;
// Trigger on death
public bool m_bDeathTrig;
// Whether clear all acquired items
public bool m_bClearAcquired;
// Recommended level
public ulong m_ulSuitableLevel;
// Whether to show prompt
public bool m_bShowPrompt;
// Whether it is a key task
public bool m_bKeyTask;
// Deliver NPC
public ulong m_ulDelvNPC;
// Award NPC
public ulong m_ulAwardNPC;
// Whether it is a skill task
public bool m_bSkillTask;
// Can be sought out
public bool m_bCanSeekOut;
// Whether to show direction
public bool m_bShowDirection;
// Marriage
public bool m_bMarriage;
// Change global key/value
public ulong m_ulChangeKeyCnt;
public long[] m_plChangeKey; // [TASK_AWARD_MAX_CHANGE_VALUE]
public long[] m_plChangeKeyValue;
public bool[] m_pbChangeType;
// Switch scene fail
public bool m_bSwitchSceneFail;
// Hidden task
public bool m_bHidden;
// Whether to deliver skill [Yongdong, 2010-1-6]
public bool m_bDeliverySkill;
public int m_iDeliveredSkillID;
public int m_iDeliveredSkillLevel;
// Whether to show task finished effect [Yongdong, 2010-1-21]
public bool m_bShowGfxFinished; // Show effect when task is completed
// Whether change PQ ranking
public bool m_bChangePQRanking;
// Compare items with player inventory before delivery
public bool m_bCompareItemAndInventory;
public ulong m_ulInventorySlotNum; // Required number of inventory slots
// Whether it is a PQ task
public bool m_bPQTask;
// PQ task global variable display
public ulong m_ulPQExpCnt;
// Dynamic task type
public string m_DynTaskType;
// Special award ID, used for events
public ulong m_ulSpecialAward;
// Whether to display in the title task UI
public bool m_bDisplayInTitleTaskUI;
}
public class ATaskTempl : ATaskTemplFixedData
{
public bool LoadFromBinFile(FileStream fp)
{
LoadBinary(fp);
// CheckDepth();
return true;
}
private void LoadBinary(FileStream fp)
{
// LoadFixedDataFromBinFile(fp);
// LoadDescriptionBin(fp);
// LoadTributeBin(fp);
// # ifndef _TASK_CLIENT
// CheckMask();
// #else
// SyncTaskType();
// #endif
// namechar code = (namechar)m_ID;
// m_DelvTaskTalk.load(fp);
// convert_talk_text(&m_DelvTaskTalk, code);
// m_UnqualifiedTalk.load(fp);
// convert_talk_text(&m_UnqualifiedTalk, code);
// m_DelvItemTalk.load(fp);
// convert_talk_text(&m_DelvItemTalk, code);
// m_ExeTalk.load(fp);
// convert_talk_text(&m_ExeTalk, code);
// m_AwardTalk.load(fp);
// convert_talk_text(&m_AwardTalk, code);
// fread(&m_nSubCount, sizeof(m_nSubCount), 1, fp);
// for (int i = 0; i < m_nSubCount; i++)
// {
// ATaskTempl* pSub = new ATaskTempl;
// g_ulNewCount++;
// AddSubTaskTempl(pSub);
// pSub->LoadBinary(fp);
// }
// SynchID();
// return true;
}
private bool LoadFixedDataFromBinFile(FileStream fp)
{
// LOG_DELETE(m_Award_S);
// LOG_DELETE(m_Award_F);
// LOG_DELETE(m_AwByRatio_S);
// LOG_DELETE(m_AwByRatio_F);
// LOG_DELETE(m_AwByItems_S);
// LOG_DELETE(m_AwByItems_F);
// LOG_DELETE_ARR(m_tmStart);
// LOG_DELETE_ARR(m_tmEnd);
// LOG_DELETE_ARR(m_plChangeKey);
// LOG_DELETE_ARR(m_plChangeKeyValue);
// LOG_DELETE_ARR(m_pbChangeType);
// LOG_DELETE_ARR(m_PremItems);
// LOG_DELETE_ARR(m_GivenItems);
// LOG_DELETE_ARR(m_TeamMemsWanted);
// LOG_DELETE_ARR(m_ItemsWanted);
// LOG_DELETE_ARR(m_PlayerWanted);
// LOG_DELETE_ARR(m_MonsterWanted);
// LOG_DELETE_ARR(m_pszSignature);
// LOG_DELETE_ARR(m_pszExp);
// LOG_DELETE_ARR(m_pExpArr);
// LOG_DELETE_ARR(m_pTaskChar);
// LOG_DELETE_ARR(m_pszPQExp);
// LOG_DELETE_ARR(m_pPQExpArr);
// LOG_DELETE_ARR(m_MonstersContrib);
// LOG_DELETE_ARR(m_pDelvRegion);
// LOG_DELETE_ARR(m_pEnterRegion);
// LOG_DELETE_ARR(m_pLeaveRegion);
// LOG_DELETE_ARR(m_pReachSite);
// LOG_DELETE_ARR(m_pLeaveSite);
// LOG_DELETE_ARR(m_PremTitles);
// unsigned long i;
// fread(this, sizeof(*this), 1, fp);
// convert_txt(m_szName, MAX_TASK_NAME_LEN, (namechar)m_ID);
// m_Award_S = new AWARD_DATA;
// g_ulNewCount++;
// m_Award_F = new AWARD_DATA;
// g_ulNewCount++;
// m_AwByRatio_S = new AWARD_RATIO_SCALE;
// g_ulNewCount++;
// m_AwByRatio_F = new AWARD_RATIO_SCALE;
// g_ulNewCount++;
// m_AwByItems_S = new AWARD_ITEMS_SCALE;
// g_ulNewCount++;
// m_AwByItems_F = new AWARD_ITEMS_SCALE;
// g_ulNewCount++;
// m_tmStart = NULL;
// m_tmEnd = NULL;
// m_plChangeKey = NULL;
// m_plChangeKeyValue = NULL;
// m_pbChangeType = NULL;
// m_PremItems = NULL;
// m_GivenItems = NULL;
// m_TeamMemsWanted= NULL;
// m_ItemsWanted = NULL;
// m_PlayerWanted = NULL;
// m_MonsterWanted = NULL;
// m_pszSignature = NULL;
// m_pszExp = NULL;
// m_pExpArr = NULL;
// m_pTaskChar = NULL;
// m_pszPQExp = NULL;
// m_pPQExpArr = NULL;
// m_MonstersContrib = NULL;
// m_PremTitles = NULL;
// if (m_bHasSign)
// {
// m_pszSignature = new task_char[MAX_TASK_NAME_LEN];
// g_ulNewCount++;
// fread(m_pszSignature, sizeof(task_char), MAX_TASK_NAME_LEN, fp);
// convert_txt(m_pszSignature, MAX_TASK_NAME_LEN, (namechar)m_ID);
// }
// if (m_ulTimetable)
// {
// m_tmStart = new task_tm[m_ulTimetable];
// g_ulNewCount++;
// m_tmEnd = new task_tm[m_ulTimetable];
// g_ulNewCount++;
// }
// for (i = 0; i < m_ulTimetable; i++)
// {
// fread(&m_tmStart[i], sizeof(task_tm), 1, fp);
// fread(&m_tmEnd[i], sizeof(task_tm), 1, fp);
// }
// if (m_ulChangeKeyCnt)
// {
// m_plChangeKey = new long[m_ulChangeKeyCnt];
// m_plChangeKeyValue = new long[m_ulChangeKeyCnt];
// m_pbChangeType = new bool[m_ulChangeKeyCnt];
// }
// for (i=0; i<m_ulChangeKeyCnt; i++)
// {
// fread(&m_plChangeKey[i], sizeof(long), 1, fp);
// fread(&m_plChangeKeyValue[i], sizeof(long), 1, fp);
// fread(&m_pbChangeType[i], sizeof(bool), 1, fp);
// }
// if (m_ulPQExpCnt)
// {
// m_pszPQExp = new char[m_ulPQExpCnt][TASK_AWARD_MAX_DISPLAY_CHAR_LEN];
// memset(m_pszPQExp, 0, m_ulPQExpCnt*TASK_AWARD_MAX_DISPLAY_CHAR_LEN);
// m_pPQExpArr = new TASK_EXPRESSION[m_ulPQExpCnt][TASK_AWARD_MAX_DISPLAY_CHAR_LEN];
// memset(m_pPQExpArr, 0, sizeof(TASK_EXPRESSION)*m_ulPQExpCnt*TASK_AWARD_MAX_DISPLAY_CHAR_LEN);
// for (i=0; i<m_ulPQExpCnt; i++)
// {
// fread(m_pszPQExp[i], 1, TASK_AWARD_MAX_DISPLAY_CHAR_LEN, fp);
// fread(m_pPQExpArr[i], sizeof(TASK_EXPRESSION), TASK_AWARD_MAX_DISPLAY_CHAR_LEN, fp);
// }
// }
// if (m_ulMonsterContribCnt)
// {
// m_MonstersContrib = new MONSTERS_CONTRIB[m_ulMonsterContribCnt];
// g_ulNewCount++;
// }
// for (i = 0; i < m_ulMonsterContribCnt; i++)
// {
// MONSTERS_CONTRIB& mc = m_MonstersContrib[i];
// fread(&mc, sizeof(mc), 1, fp);
// }
// // version 80
// if (m_ulDelvRegionCnt>0)
// {
// m_pDelvRegion = new Task_Region[m_ulDelvRegionCnt];
// g_ulNewCount++;
// }
// else m_pDelvRegion = NULL;
// for (i=0;i<m_ulDelvRegionCnt;i++)
// {
// Task_Region& t = m_pDelvRegion[i];
// fread(&t,sizeof(Task_Region),1,fp);
// }
// if (m_ulEnterRegionCnt>0)
// {
// m_pEnterRegion = new Task_Region[m_ulEnterRegionCnt];
// g_ulNewCount++;
// }
// else m_pEnterRegion = NULL;
// for (i=0;i<m_ulEnterRegionCnt;i++)
// {
// Task_Region& t = m_pEnterRegion[i];
// fread(&t,sizeof(Task_Region),1,fp);
// }
// if (m_ulLeaveRegionCnt>0)
// {
// m_pLeaveRegion = new Task_Region[m_ulLeaveRegionCnt];
// g_ulNewCount++;
// }
// else m_pLeaveRegion = NULL;
// for (i=0;i<m_ulLeaveRegionCnt;i++)
// {
// Task_Region& t = m_pLeaveRegion[i];
// fread(&t,sizeof(Task_Region),1,fp);
// }
// // ÈÎÎñ¿ªÆôÌõ¼þ¼°·½Ê½
// if (m_ulPremItems)
// {
// m_PremItems = new ITEM_WANTED[m_ulPremItems];
// g_ulNewCount++;
// }
// for (i = 0; i < m_ulPremItems; i++)
// {
// ITEM_WANTED& iw = m_PremItems[i];
// fread(&iw, sizeof(iw), 1, fp);
// }
// m_ulGivenCmnCount = 0;
// m_ulGivenTskCount = 0;
// if (m_ulGivenItems)
// {
// m_GivenItems = new ITEM_WANTED[m_ulGivenItems];
// g_ulNewCount++;
// }
// for (i = 0; i < m_ulGivenItems; i++)
// {
// ITEM_WANTED& iw = m_GivenItems[i];
// fread(&iw, sizeof(iw), 1, fp);
// if (iw.m_bCommonItem) m_ulGivenCmnCount++;
// else m_ulGivenTskCount++;
// }
// if (m_bTeamwork)
// {
// if (m_ulTeamMemsWanted)
// {
// m_TeamMemsWanted = new TEAM_MEM_WANTED[m_ulTeamMemsWanted];
// g_ulNewCount++;
// }
// for (i = 0; i < m_ulTeamMemsWanted; i++)
// {
// TEAM_MEM_WANTED& tmw = m_TeamMemsWanted[i];
// fread(&tmw, sizeof(tmw), 1, fp);
// }
// }
// if (m_iPremTitleNumTotal)
// {
// m_PremTitles = new int[m_iPremTitleNumTotal];
// g_ulNewCount++;
// for (i = 0; i < m_iPremTitleNumTotal; i++)
// {
// fread(&m_PremTitles[i], sizeof(int), 1, fp);
// }
// }
// /* ÈÎÎñÍê³ÉµÄ·½Ê½¼°Ìõ¼þ */
// if (m_ulMonsterWanted)
// {
// m_MonsterWanted = new MONSTER_WANTED[m_ulMonsterWanted];
// g_ulNewCount++;
// }
// for (i = 0; i < m_ulMonsterWanted; i++)
// {
// MONSTER_WANTED& mw = m_MonsterWanted[i];
// fread(&mw, sizeof(mw), 1, fp);
// }
// if (m_ulPlayerWanted)
// {
// m_PlayerWanted = new PLAYER_WANTED[m_ulPlayerWanted];
// g_ulNewCount++;
// }
// for (i = 0; i < m_ulPlayerWanted; ++i)
// {
// PLAYER_WANTED& pw = m_PlayerWanted[i];
// fread(&pw, sizeof(pw), 1, fp);
// }
// if (m_ulItemsWanted)
// {
// m_ItemsWanted = new ITEM_WANTED[m_ulItemsWanted];
// g_ulNewCount++;
// }
// for (i = 0; i < m_ulItemsWanted; i++)
// {
// ITEM_WANTED& iw = m_ItemsWanted[i];
// fread(&iw, sizeof(iw), 1, fp);
// }
// if (m_ulExpCnt)
// {
// m_pszExp = new char[m_ulExpCnt][TASK_AWARD_MAX_DISPLAY_CHAR_LEN];
// memset(m_pszExp, 0, m_ulExpCnt*TASK_AWARD_MAX_DISPLAY_CHAR_LEN);
// m_pExpArr = new TASK_EXPRESSION[m_ulExpCnt][TASK_AWARD_MAX_DISPLAY_CHAR_LEN];
// memset(m_pExpArr, 0, sizeof(TASK_EXPRESSION)*m_ulExpCnt*TASK_AWARD_MAX_DISPLAY_CHAR_LEN);
// for (i=0; i<m_ulExpCnt; i++)
// {
// fread(m_pszExp[i], 1, TASK_AWARD_MAX_DISPLAY_CHAR_LEN, fp);
// fread(m_pExpArr[i], sizeof(TASK_EXPRESSION), TASK_AWARD_MAX_DISPLAY_CHAR_LEN, fp);
// }
// }
// if (m_ulTaskCharCnt)
// {
// m_pTaskChar = new task_char[m_ulTaskCharCnt][TASK_AWARD_MAX_DISPLAY_CHAR_LEN];
// memset(m_pTaskChar, 0, sizeof(task_char)*m_ulTaskCharCnt*TASK_AWARD_MAX_DISPLAY_CHAR_LEN);
// for (i=0; i<m_ulTaskCharCnt; i++)
// {
// fread(m_pTaskChar[i], sizeof(task_char), TASK_AWARD_MAX_DISPLAY_CHAR_LEN, fp);
// }
// }
// // version 80
// if (m_ulReachSiteCnt>0)
// {
// m_pReachSite = new Task_Region[m_ulReachSiteCnt];
// g_ulNewCount++;
// }
// else m_pReachSite = NULL;
// for (i=0;i<m_ulReachSiteCnt;i++)
// {
// Task_Region& t = m_pReachSite[i];
// fread(&t,sizeof(Task_Region),1,fp);
// }
// if (m_ulLeaveSiteCnt>0)
// {
// m_pLeaveSite = new Task_Region[m_ulLeaveSiteCnt];
// g_ulNewCount++;
// }
// else m_pLeaveSite = NULL;
// for (i=0;i<m_ulLeaveSiteCnt;i++)
// {
// Task_Region& t = m_pLeaveSite[i];
// fread(&t,sizeof(Task_Region),1,fp);
// }
// LoadAwardDataBin(fp, *m_Award_S, _task_templ_cur_version);
// LoadAwardDataBin(fp, *m_Award_F, _task_templ_cur_version);
// LoadAwardDataRatioScale(fp, *m_AwByRatio_S, _task_templ_cur_version);
// LoadAwardDataRatioScale(fp, *m_AwByRatio_F, _task_templ_cur_version);
// LoadAwardDataItemsScale(fp, *m_AwByItems_S, _task_templ_cur_version);
// LoadAwardDataItemsScale(fp, *m_AwByItems_F, _task_templ_cur_version);
return true;
}
}
}