CTT/Server/Hotfix/Game/System/Task/UnitTaskSystem.cs

81 lines
2.8 KiB
C#

using Cal.DataTable;
using System;
using System.Collections.Generic;
using System.Text;
namespace ET
{
public class UnitTaskDestroySystem : DestroySystem<UnitTask>
{
public override void Destroy(UnitTask self)
{
self.CompleteTaskIdList.Clear();
self.FinishTaskIdList.Clear();
self.RunningTaskList.Clear();
for (int i = self.DateTimeArr.Length - 1; i >= 0; i--)
{
self.DateTimeArr[i] = 0;
}
}
}
public static class UnitTaskSystem
{
public static Task CreateTask(this UnitTask self,TaskBase taskBase)
{
Task task = EntityFactory.CreateWithId<Task>(self.Domain, taskBase.Id);
TaskTargetType type = (TaskTargetType)taskBase.TargetType;
task.TaskTargetType = type;
switch (type)
{
case TaskTargetType.KillSpecialTask:
case TaskTargetType.SubmitTask:
case TaskTargetType.CollectionTask:
int len =taskBase. CountTargetArr.Length;
task.TotalAmountList = new int[len];
task.CurrAmountList = new int[len];
for (int i = 0; i < len; i++)
{
TaskBase.CountTarget countTarget = taskBase.CountTargetArr[i];
task.TotalAmountList[i] = countTarget.CountTarget_Count;
}
break;
case TaskTargetType.KillAnyTask:
task.TotalAmountList = new int[1];
task.CurrAmountList = new int[1];
task.TotalAmountList[0] = taskBase.AnyTargetCount;
break;
case TaskTargetType.DialogTask:
case TaskTargetType.ChangeMapTask:
case TaskTargetType.LevelTask:
case TaskTargetType.CompleteTask:
task.TotalAmountList = new int[1];
task.CurrAmountList = new int[1];
task.TotalAmountList[0] = 1;
break;
}
return task;
}
public static void CompleteTask(this UnitTask self,TaskBase taskBase)
{
for (int i = 0; i < self.RunningTaskList.Count; i++)
{
Task task = self.RunningTaskList[i];
if (task.Id == taskBase.Id)
{
task.Dispose();
self.RunningTaskList.RemoveAt(i);
self.CompleteTaskIdList.Add((int)taskBase.Id);
//!更新客户端
TaskComponent.Instance.SendTaskState(self.GetParent<Unit>(),taskBase.SubmitNPCId);
return;
}
}
}
}
}