초기커밋

This commit is contained in:
2025-05-01 07:20:41 +09:00
commit 98bb2e3c5c
2747 changed files with 646947 additions and 0 deletions

View 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;
}
}
}