324 lines
14 KiB
C#
324 lines
14 KiB
C#
using ServerCommon;
|
|
using ServerCore; using ServerBase;
|
|
using META_ID = System.UInt32;
|
|
using ITEM_GUID = System.String;
|
|
using static ClientToGameReq.Types;
|
|
|
|
namespace GameServer;
|
|
|
|
[ChatCommandAttribute("ugcnpccreate", typeof(ChatCommandUgcNpcCreate), AuthAdminLevelType.Developer, AuthAdminLevelType.GmNormal, AuthAdminLevelType.GmSuper)]
|
|
internal class ChatCommandUgcNpcCreate : ChatCommandBase
|
|
{
|
|
public override async Task invoke(Player player, string token, string[] args)
|
|
{
|
|
Log.getLogger().info($"Call ugcnpccreate !!! - {player.toBasicString()}");
|
|
|
|
var result = new Result();
|
|
var err_msg = string.Empty;
|
|
|
|
if (args.Length < 3)
|
|
{
|
|
err_msg = $"Not enough argument !!! : argCount:{args.Length} == 3 - {player.toBasicString()}";
|
|
Log.getLogger().error(err_msg);
|
|
return;
|
|
}
|
|
|
|
if ( false == int.TryParse(args[1], out int body_item_meta_id)
|
|
|| false == bool.TryParse(args[2], out bool is_show_tattoo )
|
|
)
|
|
{
|
|
err_msg = $"Invalid argument !!! - {player.toBasicString()}";
|
|
Log.getLogger().error(err_msg);
|
|
return;
|
|
}
|
|
|
|
var nickname = args[0];
|
|
if (true == nickname.isNullOrWhiteSpace())
|
|
{
|
|
err_msg = $"Nickname is empty !!! - {player.toBasicString()}";
|
|
Log.getLogger().error(err_msg);
|
|
return;
|
|
}
|
|
|
|
var user_inventory_action = player.getEntityAction<UserInventoryAction>();
|
|
NullReferenceCheckHelper.throwIfNull(user_inventory_action, () => $"user_inventory_action is null !!! - {player.toBasicString()}");
|
|
|
|
var found_body_items = user_inventory_action.tryGetItemAllByItemMetaId((META_ID)body_item_meta_id);
|
|
if (0 >= found_body_items.Count)
|
|
{
|
|
err_msg = $"Not found Body Item !!! : bodyItemMetaId:{body_item_meta_id} - {player.toBasicString()}";
|
|
Log.getLogger().error(err_msg);
|
|
return;
|
|
}
|
|
|
|
var item_attribute_base = found_body_items[0].getEntityAttribute<ItemAttributeBase>();
|
|
NullReferenceCheckHelper.throwIfNull(item_attribute_base, () => $"item_attribute_base is null !!! - {player.toBasicString()}");
|
|
var body_item_guid = item_attribute_base.ItemGuid;
|
|
|
|
|
|
var cloth_item_guids = new List<ITEM_GUID>();
|
|
var cloth_item_sample_meta_ids = new List<META_ID>() { 15230180, 15231430, 15230420, 15131035 };
|
|
foreach (var cloth_item_meta_id in cloth_item_sample_meta_ids)
|
|
{
|
|
var found_cloth_items = user_inventory_action.tryGetItemAllByItemMetaId(cloth_item_meta_id);
|
|
if (0 >= found_cloth_items.Count)
|
|
{
|
|
err_msg = $"Not found Cloth Item !!! : clothItemMetaId:{cloth_item_meta_id} - {player.toBasicString()}";
|
|
Log.getLogger().error(err_msg);
|
|
return;
|
|
}
|
|
item_attribute_base = found_cloth_items[0].getEntityAttribute<ItemAttributeBase>();
|
|
NullReferenceCheckHelper.throwIfNull(item_attribute_base, () => $"item_attribute_base is null !!! - {player.toBasicString()}");
|
|
var cloth_item_guid = item_attribute_base.ItemGuid;
|
|
|
|
cloth_item_guids.Add(cloth_item_guid);
|
|
}
|
|
|
|
var tattoo_item_guids = new List<ITEM_GUID>();
|
|
var tattoo_item_sample_meta_ids = new List<META_ID>() { 11851003, 11851005, 11851008 };
|
|
foreach (var tattoo_item_meta_id in tattoo_item_sample_meta_ids)
|
|
{
|
|
var found_tattoo_items = user_inventory_action.tryGetItemAllByItemMetaId(tattoo_item_meta_id);
|
|
if (0 >= found_tattoo_items.Count)
|
|
{
|
|
err_msg = $"Not found Tattoo Item !!! : tattooItemMetaId:{tattoo_item_meta_id} - {player.toBasicString()}";
|
|
Log.getLogger().error(err_msg);
|
|
return;
|
|
}
|
|
item_attribute_base = found_tattoo_items[0].getEntityAttribute<ItemAttributeBase>();
|
|
NullReferenceCheckHelper.throwIfNull(item_attribute_base, () => $"item_attribute_base is null !!! - {player.toBasicString()}");
|
|
var tattoo_item_guid = item_attribute_base.ItemGuid;
|
|
|
|
tattoo_item_guids.Add(tattoo_item_guid);
|
|
}
|
|
|
|
var default_action_sample_meta_id = 110004;
|
|
var social_action_sample_meta_ids = new List<META_ID>() { 110009, 110013, 110017 };
|
|
var dialogue_social_action_sample_meta_ids = new List<META_ID>() { 110054 };
|
|
|
|
var beacon_tag_meta_ids = new List<META_ID>() { 1, 2, 3, 4, 5, 6, 7 };
|
|
|
|
var tattoo_slot_visibles = is_show_tattoo == true
|
|
? new Dictionary<int, BoolType>() { { (int)TattooSlotType._1, BoolType.True }, { (int)TattooSlotType._2, BoolType.True }, { (int)TattooSlotType._3, BoolType.True } }
|
|
: new Dictionary<int, BoolType>() { { (int)TattooSlotType._1, BoolType.False }, { (int)TattooSlotType._2, BoolType.False }, { (int)TattooSlotType._3, BoolType.False } };
|
|
|
|
var server_logic = GameServerApp.getServerLogic();
|
|
NullReferenceCheckHelper.throwIfNull(server_logic, () => $"server_logic is null !!! - {player.toBasicString()}");
|
|
var db_connector = server_logic.getDynamoDbClient();
|
|
NullReferenceCheckHelper.throwIfNull(db_connector, () => $"db_connector 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 C2GS_REQ_UGC_NPC_CREATION();
|
|
packet.Request.ReqUgcNpcCreation = request;
|
|
|
|
request.Nickname = nickname;
|
|
request.Title = "Test Ugc Npc by Cheat !!!";
|
|
request.Description = "I AI Ugc Npc !!!";
|
|
request.WorldScenario = "good luck !!!";
|
|
request.BodyItemGuid = body_item_guid;
|
|
|
|
request.MaterialItemGuids.AddRange(cloth_item_guids);
|
|
request.MaterialItemGuids.AddRange(tattoo_item_guids);
|
|
|
|
request.DefaultSocialActionId = default_action_sample_meta_id;
|
|
request.HabitSocialActionIds.AddRange(social_action_sample_meta_ids.Select(x => (int)x).ToList());
|
|
request.DialogueSocialActionIds.AddRange(dialogue_social_action_sample_meta_ids.Select(x => (int)x).ToList());
|
|
|
|
request.TattooSlotVisibles.Add(tattoo_slot_visibles.toMapField());
|
|
request.HashTagMetaIds.Add(beacon_tag_meta_ids.Select(x => (int)x).ToList());
|
|
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
|
|
[ChatCommandAttribute("ugcnpcdelete", typeof(ChatCommandUgcNpcDelete), AuthAdminLevelType.Developer, AuthAdminLevelType.GmNormal, AuthAdminLevelType.GmSuper)]
|
|
internal class ChatCommandUgcNpcDelete : ChatCommandBase
|
|
{
|
|
public override async Task invoke(Player player, string token, string[] args)
|
|
{
|
|
Log.getLogger().info($"Call ugcnpcdelete !!! - {player.toBasicString()}");
|
|
|
|
var result = new Result();
|
|
var err_msg = string.Empty;
|
|
|
|
if (args.Length < 1)
|
|
{
|
|
err_msg = $"Not enough argument !!! : argCount:{args.Length} == 3 - {player.toBasicString()}";
|
|
Log.getLogger().error(err_msg);
|
|
return;
|
|
}
|
|
|
|
var to_delete_nickname = args[0];
|
|
if (true == to_delete_nickname.isNullOrWhiteSpace())
|
|
{
|
|
err_msg = $"To delete Nickname is empty !!! - {player.toBasicString()}";
|
|
Log.getLogger().error(err_msg);
|
|
return;
|
|
}
|
|
|
|
var player_action = player.getEntityAction<PlayerAction>();
|
|
NullReferenceCheckHelper.throwIfNull(player_action, () => $"player_action is null !!!");
|
|
|
|
result = await player_action.tryDeleteUgcNpc(to_delete_nickname);
|
|
if (result.isFail())
|
|
{
|
|
Log.getLogger().error(result.toBasicString());
|
|
}
|
|
}
|
|
}
|
|
|
|
[ChatCommandAttribute("ugcnpclikecheck", typeof(ChatCommandUgcNpcLikeCheck), AuthAdminLevelType.Developer, AuthAdminLevelType.GmNormal, AuthAdminLevelType.GmSuper)]
|
|
internal class ChatCommandUgcNpcLikeCheck : ChatCommandBase
|
|
{
|
|
public override async Task invoke(Player player, string token, string[] args)
|
|
{
|
|
Log.getLogger().info($"Call ugcnpclikecheck !!! - {player.toBasicString()}");
|
|
|
|
var result = new Result();
|
|
var err_msg = string.Empty;
|
|
|
|
if (args.Length < 2)
|
|
{
|
|
err_msg = $"Not enough argument !!! : argCount:{args.Length} == 2 - {player.toBasicString()}";
|
|
Log.getLogger().error(err_msg);
|
|
return;
|
|
}
|
|
|
|
var target_user_nickname = args[0];
|
|
if (true == target_user_nickname.isNullOrWhiteSpace())
|
|
{
|
|
err_msg = $"target_user_nickname is empty !!! - {player.toBasicString()}";
|
|
Log.getLogger().error(err_msg);
|
|
return;
|
|
}
|
|
|
|
var target_ugc_npc_nickname = args[1];
|
|
if (true == target_ugc_npc_nickname.isNullOrWhiteSpace())
|
|
{
|
|
err_msg = $"target_ugc_npc_nickname is empty !!! - {player.toBasicString()}";
|
|
Log.getLogger().error(err_msg);
|
|
return;
|
|
}
|
|
|
|
var server_logic = GameServerApp.getServerLogic();
|
|
NullReferenceCheckHelper.throwIfNull(server_logic, () => $"server_logic is null !!! - {player.toBasicString()}");
|
|
var db_connector = server_logic.getDynamoDbClient();
|
|
NullReferenceCheckHelper.throwIfNull(db_connector, () => $"db_connector is null !!! - {player.toBasicString()}");
|
|
|
|
(result, var found_user_info) = await EntitySearchHelper.findUserInfoByUserNickname(db_connector, target_user_nickname);
|
|
if (result.isFail())
|
|
{
|
|
err_msg = $"Failed to findUserInfoByUserNickname() !!! : userNickname:{target_user_nickname} - {player.toBasicString()}";
|
|
Log.getLogger().error(err_msg);
|
|
return;
|
|
}
|
|
NullReferenceCheckHelper.throwIfNull(found_user_info, () => $"found_user_info is null !!! - {player.toBasicString()}");
|
|
|
|
(result, var found_ugc_npc_info) = await EntitySearchHelper.findUgcNpcInfoByUgcNpcNickname(db_connector
|
|
, OwnerEntityType.User, found_user_info.UserGuid
|
|
, target_ugc_npc_nickname);
|
|
if (result.isFail())
|
|
{
|
|
err_msg = $"Failed to findUgcNpcInfoByUgcNpcNickname() !!! : userNickname:{target_user_nickname} - {player.toBasicString()}";
|
|
Log.getLogger().error(err_msg);
|
|
return;
|
|
}
|
|
NullReferenceCheckHelper.throwIfNull(found_ugc_npc_info, () => $"found_ugc_npc_info 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 C2GS_REQ_UGC_NPC_LIKE();
|
|
packet.Request.ReqUgcNpcLike = request;
|
|
request.NpcGuid = found_ugc_npc_info.UgcNpcAttrib.UgcNpcMetaGuid;
|
|
request.OwnerGuid = found_ugc_npc_info.UgcNpcAttrib.OwnerGuid;
|
|
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
|
|
[ChatCommandAttribute("beaconsell", typeof(ChatCommandBeaconSell), AuthAdminLevelType.Developer, AuthAdminLevelType.GmNormal, AuthAdminLevelType.GmSuper)]
|
|
internal class ChatCommandBeaconSell : ChatCommandBase
|
|
{
|
|
public override async Task invoke(Player player, string token, string[] args)
|
|
{
|
|
Log.getLogger().info($"Call beaconsell !!! - {player.toBasicString()}");
|
|
|
|
var result = new Result();
|
|
var err_msg = string.Empty;
|
|
|
|
if (args.Length < 1)
|
|
{
|
|
err_msg = $"Not enough argument !!! : argCount:{args.Length} == 3 - {player.toBasicString()}";
|
|
Log.getLogger().error(err_msg);
|
|
return;
|
|
}
|
|
|
|
var to_sell_nickname = args[0];
|
|
if (true == to_sell_nickname.isNullOrWhiteSpace())
|
|
{
|
|
err_msg = $"To sell Nickname is empty !!! - {player.toBasicString()}";
|
|
Log.getLogger().error(err_msg);
|
|
return;
|
|
}
|
|
|
|
var player_action = player.getEntityAction<PlayerAction>();
|
|
NullReferenceCheckHelper.throwIfNull(player_action, () => $"player_action is null !!!");
|
|
|
|
|
|
var found_ugc_npc = player_action.findUgcNpcByNickname(to_sell_nickname);
|
|
if(null == found_ugc_npc)
|
|
{
|
|
err_msg = $"Not found Beacon !!! : beaconNickName:{to_sell_nickname} - {player.toBasicString()}";
|
|
Log.getLogger().error(err_msg);
|
|
return;
|
|
}
|
|
|
|
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 C2GS_REQ_BEACON_SELL();
|
|
packet.Request.ReqBeaconSell = request;
|
|
request.ToSellUgcNpcMetaGuid = found_ugc_npc.getUgcNpcMetaGuid();
|
|
|
|
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;
|
|
}
|
|
}
|
|
} |