초기커밋
This commit is contained in:
324
GameServer/Contents/ItemFunction/ItemStressCheat.cs
Normal file
324
GameServer/Contents/ItemFunction/ItemStressCheat.cs
Normal file
@@ -0,0 +1,324 @@
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
|
||||
|
||||
using Amazon.S3.Model;
|
||||
|
||||
|
||||
using ServerCore; using ServerBase;
|
||||
using ServerCommon;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
using static ClientToGameReq.Types;
|
||||
|
||||
|
||||
using META_ID = System.UInt32;
|
||||
using static System.Runtime.InteropServices.JavaScript.JSType;
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
|
||||
[ChatCommandAttribute("additembyrandom", typeof(ChatCommandAddItemByRandom), AuthAdminLevelType.Developer, AuthAdminLevelType.GmNormal, AuthAdminLevelType.GmSuper)]
|
||||
internal class ChatCommandAddItemByRandom : ChatCommandBase
|
||||
{
|
||||
public override async Task invoke(Player player, string token, string[] args)
|
||||
{
|
||||
Log.getLogger().info($"Call additembyrandom !!! - {player.toBasicString()}");
|
||||
|
||||
var result = new Result();
|
||||
var err_msg = string.Empty;
|
||||
|
||||
if (args.Length < 1)
|
||||
{
|
||||
err_msg = $"Not enough argument !!! : argCount:{args.Length} == 2 - {player.toBasicString()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
return;
|
||||
}
|
||||
|
||||
if (int.TryParse(args[0], out int count) == false)
|
||||
{
|
||||
err_msg = $"Invalid argument !!! - {player.toBasicString()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
return;
|
||||
}
|
||||
|
||||
if(count > 1000)
|
||||
{
|
||||
err_msg = $"Invalid item random creation count limit over !!! : 1000 >= {count} - {player.toBasicString()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
return;
|
||||
}
|
||||
|
||||
var inventory_action_base = player.getEntityAction<InventoryActionBase>();
|
||||
NullReferenceCheckHelper.throwIfNull(inventory_action_base, () => $"inventory_action_base is null !! - {player.toBasicString()}");
|
||||
inventory_action_base.writeLog();
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
|
||||
var total_items = new Dictionary<META_ID, List<Item>>();
|
||||
|
||||
var fn_item_add_by_random = async delegate ()
|
||||
{
|
||||
var result = new Result();
|
||||
var err_msg = string.Empty;
|
||||
|
||||
var picked_item_metas = new List<ItemMetaData>();
|
||||
|
||||
// 1. random 으로 n개의 ItemMetaData 정보를 얻는다.
|
||||
var item_meta_count_random = new Random();
|
||||
var random_picked_item_meta_datas = MetaData.Instance._ItemTable
|
||||
.OrderBy(x => item_meta_count_random.Next())
|
||||
.Take(count)
|
||||
.ToList();
|
||||
|
||||
var batch_count = 100;
|
||||
var total_count = random_picked_item_meta_datas.Count;
|
||||
|
||||
// 2. 추출된 ItemMetaData 정보를 참조하여 모든 아이템을 지급을 시도 한다.
|
||||
for (int i = 0; i < total_count; i += batch_count)
|
||||
{
|
||||
// 2.1. 현재 배치 처리할 범위 계산 및 지급할 ItemMetaData를 구성 한다.
|
||||
int current_batch_count = Math.Min(batch_count, total_count - i);
|
||||
var current_item_meta_datas = random_picked_item_meta_datas.GetRange(i, current_batch_count);
|
||||
|
||||
err_msg = $"Start batch ItemMeta TakeIn !!! - at index {i} with {current_batch_count} items - {player.toBasicString()}";
|
||||
Log.getLogger().info(err_msg);
|
||||
|
||||
// 2.2. 선택된 구간의 ItemMetaData의 아이텝 지급을 시도 한다.
|
||||
foreach (var each in current_item_meta_datas)
|
||||
{
|
||||
var item_count_random = new Random();
|
||||
|
||||
var item_meta_id = each.Key;
|
||||
var item_meta_data = each.Value;
|
||||
|
||||
int to_add_count = item_count_random.Next(1, item_meta_data.StackMaxCount); // 1 이상 StackMaxCount이하의 숫자 -> 즉, 1부터 StackMaxCount까지
|
||||
|
||||
err_msg = $"Begin - tryTakalbleToBag() : ItemMetaId:{item_meta_id}, toAddCount:{to_add_count} - {player.toBasicString()}";
|
||||
Log.getLogger().info(err_msg);
|
||||
|
||||
(result, var add_or_updated_items) = await inventory_action_base.tryTakalbleToBag((META_ID)item_meta_id, (ushort)to_add_count);
|
||||
if (result.isFail())
|
||||
{
|
||||
err_msg = $"Failed to tryTakalbleToBag() !!! : {result.toBasicString()} - {player.toBasicString()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
err_msg = $"End - tryTakalbleToBag() : ItemMetaId:{item_meta_id}, toAddCount:{to_add_count} - {player.toBasicString()}";
|
||||
Log.getLogger().info(err_msg);
|
||||
inventory_action_base.writeLog();
|
||||
|
||||
total_items[(META_ID)item_meta_id] = add_or_updated_items;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
err_msg = $"End batch ItemMeta TakeIn !!! - at index {i} with {current_batch_count} items - {player.toBasicString()}";
|
||||
Log.getLogger().info(err_msg);
|
||||
}
|
||||
|
||||
foreach (var each in total_items)
|
||||
{
|
||||
var item_meta_id = each.Key;
|
||||
var added_or_updated_items = each.Value;
|
||||
|
||||
ClientToGame clientToGame = new();
|
||||
clientToGame.Response = new();
|
||||
clientToGame.Response.AddItemRes = new();
|
||||
|
||||
if(false == MetaData.Instance._ItemTable.TryGetValue((int)item_meta_id, out var itemMetaData) || null == itemMetaData)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
(result, _, var bag_tab_type) = inventory_action_base.toBagTypeAndTabType(itemMetaData);
|
||||
clientToGame.Response.AddItemRes.Index = (int)bag_tab_type + 1;
|
||||
foreach (var item in added_or_updated_items)
|
||||
{
|
||||
clientToGame.Response.AddItemRes.Item.Add(item.toItemData4Client());
|
||||
}
|
||||
|
||||
player.sendPacket(clientToGame);
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
result = await player.runTransactionRunnerSafely(TransactionIdType.PrivateContents, "Cheat.ItemAddByRandom", fn_item_add_by_random);
|
||||
if (result.isFail())
|
||||
{
|
||||
err_msg = $"Failed to runTransactionRunnerSafely()!!! : {result.toBasicString()} - {player.toBasicString()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
}
|
||||
|
||||
inventory_action_base.writeLog();
|
||||
|
||||
foreach (var each in total_items)
|
||||
{
|
||||
var item_meta_id = each.Key;
|
||||
|
||||
await QuestManager.It.QuestCheck(player, new QuestItem(EQuestEventTargetType.ITEM, EQuestEventNameType.BOUGHT, (int)item_meta_id));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[ChatCommandAttribute("delitembyrandom", typeof(ChatCommandDelItemByRandom), AuthAdminLevelType.Developer, AuthAdminLevelType.GmNormal, AuthAdminLevelType.GmSuper)]
|
||||
internal class ChatCommandDelItemByRandom : ChatCommandBase
|
||||
{
|
||||
public override async Task invoke(Player player, string token, string[] args)
|
||||
{
|
||||
Log.getLogger().info($"Call delitembyrandom !!! - {player.toBasicString()}");
|
||||
|
||||
var result = new Result();
|
||||
var err_msg = string.Empty;
|
||||
|
||||
if (args.Length < 1)
|
||||
{
|
||||
err_msg = $"Not enough argument !!! : argCount:{args.Length} == 2 - {player.toBasicString()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
return;
|
||||
}
|
||||
|
||||
if (int.TryParse(args[0], out int count) == false)
|
||||
{
|
||||
err_msg = $"Invalid argument !!! - {player.toBasicString()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
return;
|
||||
}
|
||||
|
||||
if (count > 1000)
|
||||
{
|
||||
err_msg = $"Invalid item random delete count limit over !!! : 1000 >= {count} - {player.toBasicString()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
return;
|
||||
}
|
||||
|
||||
var inventory_action_base = player.getEntityAction<InventoryActionBase>();
|
||||
NullReferenceCheckHelper.throwIfNull(inventory_action_base, () => $"inventory_action_base is null !! - {player.toBasicString()}");
|
||||
inventory_action_base.writeLog();
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
|
||||
var total_items = new Dictionary<META_ID, List<Item>>();
|
||||
|
||||
var fn_item_delete_by_random = async delegate ()
|
||||
{
|
||||
var result = new Result();
|
||||
var err_msg = string.Empty;
|
||||
|
||||
var picked_item_metas = new List<ItemMetaData>();
|
||||
|
||||
// 1. random 으로 n개의 ItemMetaData 정보를 얻는다.
|
||||
var item_meta_count_random = new Random();
|
||||
var random_picked_item_meta_datas = MetaData.Instance._ItemTable
|
||||
.OrderBy(x => item_meta_count_random.Next())
|
||||
.Take(count)
|
||||
.ToList();
|
||||
|
||||
var batch_count = 100;
|
||||
var total_count = random_picked_item_meta_datas.Count;
|
||||
|
||||
// 2. 추출된 ItemMetaData 정보를 참조하여 모든 아이템을 삭제를 시도 한다.
|
||||
for (int i = 0; i < total_count; i += batch_count)
|
||||
{
|
||||
// 2.1. 현재 배치 처리할 범위 계산 및 지급할 ItemMetaData를 구성 한다.
|
||||
int current_batch_count = Math.Min(batch_count, total_count - i);
|
||||
var current_item_meta_datas = random_picked_item_meta_datas.GetRange(i, current_batch_count);
|
||||
|
||||
err_msg = $"Start batch ItemMeta TakeOut !!! - at index {i} with {current_batch_count} items - {player.toBasicString()}";
|
||||
Log.getLogger().info(err_msg);
|
||||
|
||||
// 2.2. 선택된 ItemMetaData의 아이텝 삭제를 시도 한다.
|
||||
foreach (var each in current_item_meta_datas)
|
||||
{
|
||||
var item_count_random = new Random();
|
||||
|
||||
var item_meta_id = each.Key;
|
||||
var item_meta_data = each.Value;
|
||||
|
||||
var has_count = inventory_action_base.getItemCountAllByMetaId((META_ID)item_meta_id);
|
||||
var max_random = has_count > item_meta_data.StackMaxCount ? has_count : item_meta_data.StackMaxCount;
|
||||
var to_delete_count = item_count_random.Next(1, max_random); // 1 이상 max_random 이하의 숫자 -> 즉, 1부터 max_random까지
|
||||
|
||||
err_msg = $"Begin - tryDeleteItemByMetaId() : ItemMetaId:{item_meta_id}, toDeleteCount:{to_delete_count} - {player.toBasicString()}";
|
||||
Log.getLogger().info(err_msg);
|
||||
|
||||
(result, var deleted_items) = await inventory_action_base.tryDeleteItemByMetaId((META_ID)item_meta_id, (ushort)to_delete_count);
|
||||
if (result.isFail())
|
||||
{
|
||||
err_msg = $"Failed to tryDeleteItemByMetaId() !!! : {result.toBasicString()} - {player.toBasicString()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
err_msg = $"End - tryDeleteItemByMetaId() : ItemMetaId:{item_meta_id}, toAddCount:{to_delete_count} - {player.toBasicString()}";
|
||||
Log.getLogger().info(err_msg);
|
||||
inventory_action_base.writeLog();
|
||||
|
||||
total_items[(META_ID)item_meta_id] = deleted_items;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
err_msg = $"End batch ItemMeta TakeOut !!! - at index {i} with {current_batch_count} items - {player.toBasicString()}";
|
||||
Log.getLogger().info(err_msg);
|
||||
}
|
||||
|
||||
foreach (var each in total_items)
|
||||
{
|
||||
var item_meta_id = each.Key;
|
||||
var deleted_items = each.Value;
|
||||
|
||||
ClientToGame clientToGame = new();
|
||||
clientToGame.Response = new();
|
||||
clientToGame.Response.RemoveItemsRes = new();
|
||||
|
||||
if (false == MetaData.Instance._ItemTable.TryGetValue((int)item_meta_id, out var itemMetaData) || null == itemMetaData) continue;
|
||||
|
||||
(result, _, var bag_tab_type) = inventory_action_base.toBagTypeAndTabType(itemMetaData);
|
||||
clientToGame.Response.AddItemRes.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.ItemDeleteByRandom", fn_item_delete_by_random);
|
||||
if (result.isFail())
|
||||
{
|
||||
err_msg = $"Failed to runTransactionRunnerSafely()!!! : {result.toBasicString()} - {player.toBasicString()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
}
|
||||
|
||||
inventory_action_base.writeLog();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user