CTT/Server/Hotfix/Game/Event/UpdateTaskStateEvent.cs

237 lines
10 KiB
C#
Executable File

using Cal.DataTable;
using System;
using System.Collections.Generic;
namespace ET
{
public class UpdateTaskStateEvent : AEvent<EventType.UpdateTaskState>
{
public override async ETTask Run(EventType.UpdateTaskState args)
{
try
{
Unit unit = args.unit;
if (!unit)
{
Log.Error($"unit is invalid where unitId = {unit.Id}");
return;
}
UnitTask unitTask = unit.GetComponent<UnitTask>();
if (!unitTask)
return;
TaskTargetType type = args.type;
int value = args.value;
switch (type)
{
case TaskTargetType.KillSpecialTask:
case TaskTargetType.CollectionTask:
case TaskTargetType.SubmitTask:
//!value:怪物Id/ItemId
for (int ii = 0; ii < unitTask.RunningTaskList.Count; ii++)
{
try
{
Task task = unitTask.RunningTaskList[ii];
if (task.TaskTargetType == type)
{
int taskId = (int)task.Id;
TaskBase taskbase = DataTableHelper.Get<TaskBase>(taskId);
if (taskbase == null)
{
Log.Error($"taskBase==null where id = {taskId}");
return;
}
for (int i = 0; i < taskbase.CountTargetArr.Length; i++)
{
TaskBase.CountTarget countTarget = taskbase.CountTargetArr[i];
if (countTarget.CountTarget_Id == value)
{
task.UpdateAmount(i);
break;
}
}
if (task.IsComplete)
{
unitTask.CompleteTask(taskbase);
}
}
}
catch (Exception e)
{
Log.Error(e);
}
}
break;
case TaskTargetType.KillAnyTask:
//!value:怪物Id
int level = unit.GetComponent<NumericComponent>().GetAsInt(NumericType.Level);
MonsterBase monsterBase = DataTableHelper.Get<MonsterBase>(value);
if (monsterBase == null) return;
for (int i = 0; i < unitTask.RunningTaskList.Count; i++)
{
try
{
Task task = unitTask.RunningTaskList[i];
if (task.TaskTargetType == type)
{
int taskId = (int)task.Id;
TaskBase taskbase = DataTableHelper.Get<TaskBase>(taskId);
if (taskbase == null)
{
Log.Error($"taskBase==null where id = {taskId}");
return;
}
if (level- monsterBase.Level <= taskbase.AnyTargetLevel)
task.UpdateAmount(0);
if (task.IsComplete)
{
unitTask.CompleteTask(taskbase);
}
}
}
catch (Exception e)
{
Log.Error(e.ToString());
}
}
break;
case TaskTargetType.DialogTask:
//!value:NPCId
for (int i = 0; i < unitTask.RunningTaskList.Count; i++)
{
try
{
Task task = unitTask.RunningTaskList[i];
if (task.TaskTargetType == type)
{
int taskId = (int)task.Id;
TaskBase taskbase = DataTableHelper.Get<TaskBase>(taskId);
if (taskbase == null)
{
Log.Error($"taskBase==null where id = {taskId}");
return;
}
if (value == taskbase.DialogTargetId)
task.UpdateAmount(0);
if (task.IsComplete)
{
unitTask.CompleteTask(taskbase);
}
}
}
catch (Exception e)
{
Log.Error(e);
}
}
break;
case TaskTargetType.LevelTask:
//!value:Level
for (int i = 0; i < unitTask.RunningTaskList.Count; i++)
{
try
{
Task task = unitTask.RunningTaskList[i];
if (task.TaskTargetType == type)
{
int taskId = (int)task.Id;
TaskBase taskbase = DataTableHelper.Get<TaskBase>(taskId);
if (taskbase == null)
{
Log.Error($"taskBase==null where id = {taskId}");
return;
}
if (value >= taskbase.TargetLevel)
task.UpdateAmount(0);
if (task.IsComplete)
{
unitTask.CompleteTask(taskbase);
}
}
}
catch (Exception e)
{
Log.Error(e);
}
}
break;
case TaskTargetType.ChangeMapTask:
//!value:Sys_SceneId x 100 + Maplayer x 1
for (int i = 0; i < unitTask.RunningTaskList.Count; i++)
{
try
{
Task task = unitTask.RunningTaskList[i];
if (task.TaskTargetType != type)
{
continue;
}
int taskId = (int)task.Id;
TaskBase taskbase = DataTableHelper.Get<TaskBase>(taskId);
if (taskbase == null)
{
Log.Error($"taskBase==null where id = {taskId}");
return;
}
if (value / 100 == taskbase.TargetSceneId &&
value % 100 == taskbase.TargetMaplayer)
task.UpdateAmount(0);
if (task.IsComplete)
{
unitTask.CompleteTask(taskbase);
}
}
catch (Exception e)
{
Log.Error(e);
}
}
break;
case TaskTargetType.NoneTask:
break;
case TaskTargetType.CompleteTask:
for (int i = 0; i < unitTask.RunningTaskList.Count; i++)
{
try
{
Task task = unitTask.RunningTaskList[i];
if (task.TaskTargetType == type)
{
int taskId = (int)task.Id;
TaskBase taskbase = DataTableHelper.Get<TaskBase>(taskId);
if (taskbase == null)
{
Log.Error($"taskBase==null where id = {taskId}");
return;
}
task.UpdateAmount(0);
if (task.IsComplete)
{
unitTask.CompleteTask(taskbase);
}
}
}
catch (Exception e)
{
Log.Error(e);
}
}
break;
}
}
catch (Exception e)
{
Log.Error(e);
}
await ETTask.CompletedTask;
}
}
}