초기커밋

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,374 @@
using Amazon.S3.Model;
using ServerCore; using ServerBase;
using ServerCommon;
using static ClientToGameReq.Types;
using META_ID = System.UInt32;
using Amazon.DynamoDBv2.Model;
namespace GameServer;
[ChatCommandAttribute("additem", typeof(ChatCommandAddItem), AuthAdminLevelType.Developer, AuthAdminLevelType.GmNormal, AuthAdminLevelType.GmSuper)]
internal class ChatCommandAddItem : ChatCommandBase
{
public override async Task invoke(Player player, string token, string[] args)
{
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
Log.getLogger().info($"Call additem !!! - {player.toBasicString()}");
if (args.Length < 2)
return;
if (int.TryParse(args[0], out int itemId) == false || int.TryParse(args[1], out int count) == false)
return;
var result = new Result();
var err_msg = string.Empty;
var server_logic = GameServerApp.getServerLogic();
var fn_item_add = async delegate ()
{
var result = new Result();
var err_msg = string.Empty;
ClientToGame clientToGame = new();
clientToGame.Response = new();
clientToGame.Response.AddItemRes = new();
var inventory_action = player.getEntityAction<InventoryActionBase>();
NullReferenceCheckHelper.throwIfNull(inventory_action, () => $"inventory_action is null !! - {player.toBasicString()}");
(result, var add_or_updated_items) = await inventory_action.tryTakalbleToBag((uint)itemId, (ushort)count);
if (result.isFail())
{
err_msg = $"Failed to tryTakalbleToBag() !!! : {result.toBasicString()} - {player.toBasicString()}";
Log.getLogger().error(err_msg);
return result;
}
var batch = new QueryBatchEx<QueryRunnerWithItemRequest>(player, LogActionType.CheatCommandItem
, server_logic.getDynamoDbClient());
{
batch.addQuery(new DBQWriteToAttributeAllWithTransactionRunner());
}
result = await QueryHelper.sendQueryAndBusinessLog(batch);
if (result.isFail())
{
return result;
}
MetaData.Instance._ItemTable.TryGetValue((int)itemId, out var itemMetaData);
NullReferenceCheckHelper.throwIfNull(itemMetaData, () => $"item meta data is null !! - item id : {itemId}");
(result, _, var bag_tab_type) = inventory_action.toBagTypeAndTabType(itemMetaData);
clientToGame.Response.AddItemRes.Index = (int)bag_tab_type + 1;
foreach (var item in add_or_updated_items)
{
clientToGame.Response.AddItemRes.Item.Add(item.toItemData4Client());
}
player.sendPacket(clientToGame);
return result;
};
result = await player.runTransactionRunnerSafely(TransactionIdType.PrivateContents, "Cheat.ItemAdd", fn_item_add);
if (result.isFail())
{
err_msg = $"Failed to runTransactionRunnerSafely()!!! : {result.toBasicString()} - {player.toBasicString()}";
Log.getLogger().error(err_msg);
}
await QuestManager.It.QuestCheck(player, new QuestItem(EQuestEventTargetType.ITEM, EQuestEventNameType.BOUGHT, itemId));
}
}
[ChatCommandAttribute("updateitem", typeof(ChatCommandUpdateItem), AuthAdminLevelType.Developer, AuthAdminLevelType.GmNormal, AuthAdminLevelType.GmSuper)]
internal class ChatCommandUpdateItem : ChatCommandBase
{
public override async Task invoke(Player player, string token, string[] args)
{
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
Log.getLogger().info($"Call additem !!! - {player.toBasicString()}");
if (args.Length < 2)
return;
if ( int.TryParse(args[0], out int item_meta_id) == false
|| int.TryParse(args[1], out int to_change_count) == false )
{
return;
}
var result = new Result();
var err_msg = string.Empty;
if (to_change_count <= 0)
{
err_msg = $"Invalid Item Count : 0 < toChangeCount:{to_change_count}, itemMetaId:{item_meta_id} - {player.toBasicString()}";
Log.getLogger().error(err_msg);
return;
}
var server_logic = GameServerApp.getServerLogic();
var db_client = server_logic.getDynamoDbClient();
var fn_update_item = async delegate ()
{
var result = new Result();
var err_msg = string.Empty;
var packet = new ClientToGame();
packet.Response = new ClientToGameRes();
var ack_msg = new ClientToGameRes.Types.AddItemRes();
packet.Response.AddItemRes = ack_msg;
var inventory_action = player.getEntityAction<InventoryActionBase>();
NullReferenceCheckHelper.throwIfNull(inventory_action, () => $"inventory_action is null !! - {player.toBasicString()}");
if (!MetaData.Instance._ItemTable.TryGetValue((int)item_meta_id, out var found_item_meta_data))
{
err_msg = $"Not found meta of Item !!! : itemMetaId:{item_meta_id} - {player.toBasicString()}";
result.setFail(ServerErrorCode.ItemMetaDataNotFound, err_msg);
Log.getLogger().error(result.toBasicString());
return result;
}
var found_items = inventory_action.tryGetItemAllByItemMetaId((META_ID)item_meta_id);
if(0 >= found_items.Count)
{
err_msg = $"Not found Item : itemMetaId:{item_meta_id} - {player.toBasicString()}";
result.setFail(ServerErrorCode.ItemNotFound, err_msg);
Log.getLogger().error(result.toBasicString());
return result;
}
var target_item = found_items[0];
var item_attribute = target_item.getEntityAttribute<UserItemAttribute>();
NullReferenceCheckHelper.throwIfNull(item_attribute, () => $"item_attribute is null !! - {player.toBasicString()}");
item_attribute.ItemStackCount = (UInt16)Math.Min(found_item_meta_data.StackMaxCount, to_change_count);
item_attribute.modifiedEntityAttribute();
var batch = new QueryBatchEx<QueryRunnerWithItemRequest>( player, LogActionType.CheatCommandItem
, server_logic.getDynamoDbClient()
);
{
batch.addQuery(new DBQWriteToAttributeAllWithTransactionRunner());
batch.addQuery(new QueryFinal());
}
result = await QueryHelper.sendQueryAndBusinessLog(batch);
if (result.isFail())
{
return result;
}
player.sendPacket(packet);
return result;
};
result = await player.runTransactionRunnerSafely(TransactionIdType.PrivateContents, "Cheat.ItemUpdate", fn_update_item);
if (result.isFail())
{
err_msg = $"Failed to runTransactionRunnerSafely()!!! : {result.toBasicString()} - {player.toBasicString()}";
Log.getLogger().error(err_msg);
}
}
}
[ChatCommandAttribute("delitem", typeof(ChatCommandDelItem), AuthAdminLevelType.Developer, AuthAdminLevelType.GmNormal, AuthAdminLevelType.GmSuper)]
internal class ChatCommandDelItem : ChatCommandBase
{
public override async Task invoke(Player player, string token, string[] args)
{
Log.getLogger().info($"Call delitem !!! - {player.toBasicString()}");
if (args.Length < 2)
return;
if (int.TryParse(args[0], out int itemId) == false || int.TryParse(args[1], out int count) == false)
return;
var result = new Result();
var err_msg = string.Empty;
var server_logic = GameServerApp.getServerLogic();
var fn_item_delete = async delegate ()
{
var result = new Result();
var err_msg = string.Empty;
ClientToGame clientToGame = new();
clientToGame.Response = new();
clientToGame.Response.RemoveItemsRes = new();
var inventory_action = player.getEntityAction<InventoryActionBase>();
NullReferenceCheckHelper.throwIfNull(inventory_action, () => $"InventoryActionBase is null !!! - {player.toBasicString()}");
(result, var deleted_items) = await inventory_action.tryDeleteItemByMetaId((META_ID)itemId, (ushort)count);
if (result.isFail())
{
err_msg = $"Failed to tryDeleteItemByMetaId() !!! : {result.toBasicString()} - {player.toBasicString()}";
Log.getLogger().error(err_msg);
return result;
}
var batch = new QueryBatchEx<QueryRunnerWithDocument>(player, LogActionType.CheatCommandItem
, server_logic.getDynamoDbClient());
{
batch.addQuery(new DBQWriteToAttributeAllWithTransactionRunner());
}
result = await QueryHelper.sendQueryAndBusinessLog(batch);
if (result.isFail())
{
return result;
}
MetaData.Instance._ItemTable.TryGetValue((int)itemId, out var itemMetaData);
NullReferenceCheckHelper.throwIfNull(itemMetaData, () => $"itemMetaData is null !! - item id:{itemId}");
(result, _, var bag_tab_type) = inventory_action.toBagTypeAndTabType(itemMetaData);
clientToGame.Response.RemoveItemsRes.Index = (int)bag_tab_type + 1;
foreach (var item in deleted_items)
{
clientToGame.Response.RemoveItemsRes.Item.Add(item.toItemData4Client());
}
player.sendPacket(clientToGame);
return result;
};
result = await player.runTransactionRunnerSafely(TransactionIdType.PrivateContents, "Cheat.ItemDelete", fn_item_delete);
if (result.isFail())
{
err_msg = $"Failed to runTransactionRunnerSafely()!!! : {result.toBasicString()} - {player.toBasicString()}";
Log.getLogger().error(err_msg);
}
}
}
[ChatCommandAttribute("megaphone", typeof(ChatCommandMegaPhone), AuthAdminLevelType.Developer, AuthAdminLevelType.GmNormal, AuthAdminLevelType.GmSuper)]
internal class ChatCommandMegaPhone : ChatCommandBase
{
public override async Task invoke(Player player, string token, string[] args)
{
await Task.CompletedTask;
Log.getLogger().info($"HandleMegaPhone");
if (args.Length < 1)
{
Log.getLogger().error($"Invalid Argument");
return;
}
var server_logic = GameServerApp.getServerLogic();
var receivers = server_logic.getPlayerManager().getUsers();
foreach (var receiver in receivers)
{
ChatNotifyHelper.send_S2C_NTF_CHAT(receiver.Value, ChatType.Channel, player.getUserNickname(), receiver.Value.getUserNickname(), PlayerStateType.None, args[0]);
}
}
}
[ChatCommandAttribute("leveluptattoo", typeof(ChatCommandLevelUpTattoo), AuthAdminLevelType.Developer, AuthAdminLevelType.GmNormal, AuthAdminLevelType.GmSuper)]
internal class ChatCommandLevelUpTattoo : ChatCommandBase
{
public override async Task invoke(Player player, string token, string[] args)
{
Log.getLogger().info($"Call leveluptattoo !!! - {player.toBasicString()}");
var result = new Result();
var err_msg = string.Empty;
if (args.Length < 1)
{
err_msg = $"Not enough argument !!! : argCount:{args.Length} == 1 - {player.toBasicString()}";
Log.getLogger().error(err_msg);
return;
}
var param = args[0];
if (true == param.isNullOrWhiteSpace())
{
err_msg = $"Arg 1 is Empty !!! - {player.toBasicString()}";
Log.getLogger().error(err_msg);
return;
}
if(false == int.TryParse(param, out var slot_no))
{
err_msg = $"Failed to TryParse() !!! - {player.toBasicString()}";
Log.getLogger().error(err_msg);
return;
}
var tatoo_slot_type = (TattooSlotType)slot_no;
var user_inventory_action = player.getEntityAction<UserInventoryAction>();
NullReferenceCheckHelper.throwIfNull(user_inventory_action, () => $"user_inventory_action is null !!! - {player.toBasicString()}");
user_inventory_action.getEquipInvens().TryGetValue(InvenEquipType.Tattoo, out var found_equip_inven);
NullReferenceCheckHelper.throwIfNull(found_equip_inven, () => $"found_equip_inven is null !!! - {player.toBasicString()}");
var tattoo_inven = found_equip_inven as TattooEquipInven;
NullReferenceCheckHelper.throwIfNull(tattoo_inven, () => $"tattoo_inven is null !!! - {player.toBasicString()}");
var tattoo_inven_data = tattoo_inven.getData();
NullReferenceCheckHelper.throwIfNull(tattoo_inven_data, () => $"tattoo_inven_data is null !!! - {player.toBasicString()}");
var found_tattoo = tattoo_inven_data.findEntityBaseInSlotType(tatoo_slot_type);
if(null == found_tattoo)
{
err_msg = $"Not found Tattoo !!! : tattooSlotType:{tatoo_slot_type} - {player.toBasicString()}";
Log.getLogger().error(err_msg);
return;
}
var item_attribute = found_tattoo.getOriginEntityAttribute<ItemAttributeBase>();
NullReferenceCheckHelper.throwIfNull(item_attribute, () => $"item_attribute is null !!! - {player.toBasicString()}");
var tattoo_item_guid = item_attribute.ItemGuid;
var server_logic = GameServerApp.getServerLogic();
NullReferenceCheckHelper.throwIfNull(server_logic, () => $"server_logic is null !!! - {player.toBasicString()}");
var session = player as IEntityWithSession;
NullReferenceCheckHelper.throwIfNull(session, () => $"session is null !!! - {player.toBasicString()}");
//=====================================================================================
// 패킷 구성
//=====================================================================================
var packet = new ClientToGame();
packet.Request = new ClientToGameReq();
var request = new LevelUpTattooReq();
packet.Request.LevelUpTattooReq = request;
request.ItemGuid = tattoo_item_guid;
result = await server_logic.onCallProtocolHandler(session, packet);
if (result.isFail())
{
err_msg = $"Failed to onCallProtocolHandler() !!! : {result.toBasicString()} - {player.toBasicString()}";
Log.getLogger().error(err_msg);
return;
}
}
}