초기커밋
This commit is contained in:
263
GameServer/Contents/Quest/Action/QuestTaskUpdateAction.cs
Normal file
263
GameServer/Contents/Quest/Action/QuestTaskUpdateAction.cs
Normal file
@@ -0,0 +1,263 @@
|
||||
using Amazon.CloudWatchLogs.Model;
|
||||
using Amazon.Runtime.Internal;
|
||||
using Amazon.S3.Model;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
using MetaAssets;
|
||||
using Newtonsoft.Json;
|
||||
using Org.BouncyCastle.Asn1.Ocsp;
|
||||
using ServerCommon;
|
||||
using ServerCore; using ServerBase;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using static ClientToGameRes.Types;
|
||||
|
||||
namespace GameServer
|
||||
{
|
||||
public class QuestTaskUpdateAction : EntityActionBase
|
||||
{
|
||||
public QuestTaskUpdateAction(EntityBase owner)
|
||||
: base(owner)
|
||||
{
|
||||
}
|
||||
|
||||
public override Task<Result> onInit()
|
||||
{
|
||||
var result = new Result();
|
||||
return Task.FromResult(result);
|
||||
}
|
||||
|
||||
private Result taskFunctionProgress(QuestTaskUpdateHandler questTaskUpdateHandler)
|
||||
{
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(questTaskUpdateHandler.m_quest, () => $"questTaskUpdateHandler.m_quest is null !!!");
|
||||
|
||||
var owner = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
|
||||
|
||||
var quest_task = new QuestClientSide(owner);
|
||||
var quest = questTaskUpdateHandler.m_quest;
|
||||
|
||||
var result = quest_task.questTaskFunctionProgress(owner, ref questTaskUpdateHandler);
|
||||
if(result.isFail()) return result;
|
||||
|
||||
var quest_attribute = quest.getEntityAttribute<QuestAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_attribute, () => $"quest_attribute is null !!!");
|
||||
|
||||
if (quest_attribute.CurrentTaskComplete == 1 && quest_attribute.IsComplete == 0)
|
||||
{
|
||||
result = questNextTaskUpdate(questTaskUpdateHandler);
|
||||
if(result.isFail()) return result;
|
||||
}
|
||||
quest_attribute.modifiedEntityAttribute();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private async Task<Result> rewardUpdate(QuestTaskUpdateHandler questTaskUpdateHandler)
|
||||
{
|
||||
var owner = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
|
||||
|
||||
IReward reward_proc = new QuestTaskReward(owner, owner.getUserGuid(), questTaskUpdateHandler);
|
||||
|
||||
var result = await RewardManager.It.proceedRewardProcess(reward_proc);
|
||||
if (result.isFail()) return result;
|
||||
return result;
|
||||
}
|
||||
|
||||
private async Task<Result> delteItemUpdate(QuestTaskUpdateHandler questTaskUpdateHandler)
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
//아이템 삭제 처리
|
||||
var delete_items = questTaskUpdateHandler.m_deletable_items;
|
||||
foreach (var item in delete_items)
|
||||
{
|
||||
var item_id = item.Key;
|
||||
var item_count = item.Value;
|
||||
|
||||
var owner = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
|
||||
|
||||
var inventory_action = owner.getEntityAction<InventoryActionBase>();
|
||||
(result, var deleted_item) = await inventory_action.tryDeleteItemByMetaId((uint)item_id, (ushort)item_count);
|
||||
if (result.isFail())
|
||||
{
|
||||
var err_msg = $"delteItemUpdate error delteitem : {JsonConvert.SerializeObject(item)}, owner : {owner.toBasicString()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
return result;
|
||||
}
|
||||
questTaskUpdateHandler.m_deleted_items.AddRange(deleted_item);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public Result questNextTaskUpdate(QuestTaskUpdateHandler questTaskUpdateHandler)
|
||||
{
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(questTaskUpdateHandler.m_quest_meta_info, () => $"questTaskUpdateHandler.m_quest_meta_info is null !!!");
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(questTaskUpdateHandler.m_quest, () => $"questTaskUpdateHandler.m_quest is null !!!");
|
||||
|
||||
var result = new Result();
|
||||
|
||||
//var task_group = questTaskUpdateHandler.m_quest_task_group;
|
||||
var next_task_num = questTaskUpdateHandler.m_next_task_number;
|
||||
|
||||
var task_group_list = questTaskUpdateHandler.m_quest_meta_info.QuestTaskGroupList;
|
||||
if (false == task_group_list.TryGetValue(next_task_num, out var questTaskInfo))
|
||||
{
|
||||
var err_msg = $"questEventInfo InvalidData questId = {questTaskUpdateHandler.m_quest_id}, next_task_num : {next_task_num}";
|
||||
result.setFail(ServerErrorCode.QuestInvalidValue, err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
var quest_attribute = questTaskUpdateHandler.m_quest.getEntityAttribute<QuestAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_attribute, () => $"quest_attribute is null !!!");
|
||||
quest_attribute.CurrentTaskNum = next_task_num;
|
||||
quest_attribute.CurrentTaskComplete = 0;
|
||||
|
||||
DateTime now = DateTime.UtcNow;
|
||||
quest_attribute.TaskStartTime = now;
|
||||
quest_attribute.ActiveEvents.Clear();
|
||||
quest_attribute.ActiveEvents.AddRange(questTaskInfo.EventStringList);
|
||||
quest_attribute.HasTimer = 0;
|
||||
quest_attribute.TimerCompleteTime = now;
|
||||
quest_attribute.CompletedIdxStrings.Clear();
|
||||
|
||||
if (questTaskInfo.HasCounter)
|
||||
{
|
||||
quest_attribute.HasCounter = 1;
|
||||
quest_attribute.MaxCounter = questTaskInfo.MaxCounter;
|
||||
quest_attribute.MinCounter = questTaskInfo.MinCounter;
|
||||
quest_attribute.CurrentCounter = questTaskInfo.MinCounter;
|
||||
}
|
||||
else
|
||||
{
|
||||
quest_attribute.HasCounter = 0;
|
||||
quest_attribute.MaxCounter = 0;
|
||||
quest_attribute.MinCounter = 0;
|
||||
quest_attribute.CurrentCounter = 0;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public Result taskUpdateConditionCheck(ref QuestTaskUpdateHandler questTaskUpdateHandler)
|
||||
{
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(questTaskUpdateHandler.m_quest_meta_info, () => $"questTaskUpdateHandler.m_quest_meta_info is null !!!");
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(questTaskUpdateHandler.m_quest, () => $"questTaskUpdateHandler.m_quest is null !!!");
|
||||
|
||||
var result = new Result();
|
||||
var owner = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
|
||||
|
||||
var quest_id = questTaskUpdateHandler.m_quest_id;
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var quest_action = owner.getEntityAction<QuestAction>();
|
||||
|
||||
var quest_type = questTaskUpdateHandler.m_quest_type;
|
||||
var quest = questTaskUpdateHandler.m_quest;
|
||||
|
||||
var quest_attribute = quest.getEntityAttribute<QuestAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_attribute, () => $"quest_attribute is null !!!");
|
||||
if (quest_attribute.IsComplete == 1)
|
||||
{
|
||||
result.setFail(ServerErrorCode.QuestAlreadyComplete, $"Already Complete Quest QuestID : {quest_id}");
|
||||
return result;
|
||||
}
|
||||
|
||||
var active_event = questTaskUpdateHandler.m_active_event;
|
||||
if (false == quest_attribute.ActiveEvents.Contains(active_event))
|
||||
{
|
||||
string err_msg = $"ActiveIdxList info Invalie questId : {quest_id}, activeEvent : {active_event} User QuestInfo : {JsonConvert.SerializeObject(quest_attribute)}";
|
||||
result.setFail(ServerErrorCode.QuestMailNotExist, err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
if (false == questTaskUpdateHandler.m_quest_meta_info.QuestTaskGroupList.TryGetValue(quest_attribute.CurrentTaskNum, out var questTaskInfo))
|
||||
{
|
||||
string err_msg = $"questBaseInfo.QuestTaskGroupList InvalidData CurrentTaskNum : {quest_attribute.CurrentTaskNum}";
|
||||
result.setFail(ServerErrorCode.QuestInvalidValue, err_msg);
|
||||
return result;
|
||||
}
|
||||
questTaskUpdateHandler.m_quest_task_group = questTaskInfo;
|
||||
|
||||
result = QuestMetaHelper.getQuestTaskEventGroupByEventString(questTaskInfo, active_event, out var questEventInfo);
|
||||
if(result.isFail()) return result;
|
||||
|
||||
NullReferenceCheckHelper.throwIfNull(questEventInfo, () => $"questEventInfo is null !!!");
|
||||
|
||||
EQuestEventTargetType targetType = EnumHelper.convertEnumTypeAndValueStringToEnum(questEventInfo.EventTarget, EQuestEventTargetType.NONE);
|
||||
EQuestEventNameType nameType = EnumHelper.convertEnumTypeAndValueStringToEnum(questEventInfo.EventName, EQuestEventNameType.NONE);
|
||||
|
||||
if (false == checkClientSideEvent(targetType, nameType))
|
||||
{
|
||||
string err_msg = $"scriptDataList does not match EQuestEventTargetType questId : {quest_id}, targetType : {targetType.ToString()}, nameType : {nameType.ToString()}";
|
||||
result.setFail(ServerErrorCode.QuestInvalidValue, err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
questTaskUpdateHandler.m_target_type = targetType;
|
||||
questTaskUpdateHandler.m_name_type = nameType;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public bool checkClientSideEvent(EQuestEventTargetType target, EQuestEventNameType nameType)
|
||||
{
|
||||
if (target.Equals(EQuestEventTargetType.GUI) && nameType.Equals(EQuestEventNameType.POPUP)) return true;
|
||||
if (target.Equals(EQuestEventTargetType.CONCERT) && nameType.Equals(EQuestEventNameType.STARTED)) return true;
|
||||
if (target.Equals(EQuestEventTargetType.CONCERT) && nameType.Equals(EQuestEventNameType.ENDED)) return true;
|
||||
if (target.Equals(EQuestEventTargetType.CUTSCENE)) return true;
|
||||
if (target.Equals(EQuestEventTargetType.DIALOGUE)) return true;
|
||||
if (target.Equals(EQuestEventTargetType.MANNEQUIN) && nameType.Equals(EQuestEventNameType.USED)) return true;
|
||||
if (target.Equals(EQuestEventTargetType.MOVEMENT) && nameType.Equals(EQuestEventNameType.FEVER)) return true;
|
||||
if (target.Equals(EQuestEventTargetType.MOVEMENT)) return true;
|
||||
if (target.Equals(EQuestEventTargetType.NPC)) return true;
|
||||
if (target.Equals(EQuestEventTargetType.SOCIALACTION) && nameType.Equals(EQuestEventNameType.ACTIVED)) return true;
|
||||
if (target.Equals(EQuestEventTargetType.SPECIALGUIDE)) return true;
|
||||
if (target.Equals(EQuestEventTargetType.TAXI) && nameType.Equals(EQuestEventNameType.USED)) return true;
|
||||
if (target.Equals(EQuestEventTargetType.TRIGGER)) return true;
|
||||
if (target.Equals(EQuestEventTargetType.VIDEO)) return true;
|
||||
if (target.Equals(EQuestEventTargetType.INTERIORMODE) && nameType.Equals(EQuestEventNameType.STOPPED)) return true;
|
||||
if (target.Equals(EQuestEventTargetType.BEACONDIALOGUE) && nameType.Equals(EQuestEventNameType.SENDED)) return true;
|
||||
if (target.Equals(EQuestEventTargetType.BEACONDIALOGUE) && nameType.Equals(EQuestEventNameType.RECEIVED)) return true;
|
||||
if (target.Equals(EQuestEventTargetType.WAITING)) return true;
|
||||
if (target.Equals(EQuestEventTargetType.PROP) && nameType.Equals(EQuestEventNameType.SWITCHED)) return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public async Task<Result> questTaskUpdate(QuestTaskUpdateHandler questTaskUpdateDataRef)
|
||||
{
|
||||
var result = new Result();
|
||||
result = taskFunctionProgress(questTaskUpdateDataRef);
|
||||
if (result.isFail()) return result;
|
||||
|
||||
result = await rewardUpdate(questTaskUpdateDataRef);
|
||||
if (result.isFail()) return result;
|
||||
|
||||
result = await delteItemUpdate(questTaskUpdateDataRef);
|
||||
if (result.isFail()) return result;
|
||||
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public override void onClear()
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user