From 6a39a2960ea943e346de3952e8eadf94ac4bbd7f Mon Sep 17 00:00:00 2001 From: AlessandroCH Date: Mon, 10 Mar 2025 21:08:13 +0100 Subject: [PATCH] gift to chars work --- Campofinale/Game/Spaceship/SpaceshipChar.cs | 1 + .../Game/Spaceship/SpaceshipManager.cs | 34 +++++++++++++++++++ Campofinale/Packets/Cs/HandleCsLogin.cs | 2 +- .../Cs/HandleCsSpaceshipPresentGiftToChar.cs | 28 +++++++++++++++ .../Packets/Sc/PacketScSnsGetChatList.cs | 33 ++++++++++++++++++ Campofinale/Resource/ResourceManager.cs | 2 ++ Campofinale/Resource/Table/GiftItemTable.cs | 15 ++++++++ Campofinale/Resource/Table/SNSChatTable.cs | 16 +++++++++ 8 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 Campofinale/Packets/Cs/HandleCsSpaceshipPresentGiftToChar.cs create mode 100644 Campofinale/Packets/Sc/PacketScSnsGetChatList.cs create mode 100644 Campofinale/Resource/Table/GiftItemTable.cs create mode 100644 Campofinale/Resource/Table/SNSChatTable.cs diff --git a/Campofinale/Game/Spaceship/SpaceshipChar.cs b/Campofinale/Game/Spaceship/SpaceshipChar.cs index 22127f9..a81a463 100644 --- a/Campofinale/Game/Spaceship/SpaceshipChar.cs +++ b/Campofinale/Game/Spaceship/SpaceshipChar.cs @@ -46,6 +46,7 @@ namespace Campofinale.Game.Spaceship IsWorking = isWorking, PhysicalStrength = physicalStrength, StationedRoomId = stationedRoomId, + Skills = { new ScdSpaceshipCharSkill() diff --git a/Campofinale/Game/Spaceship/SpaceshipManager.cs b/Campofinale/Game/Spaceship/SpaceshipManager.cs index 441a2d8..521fffe 100644 --- a/Campofinale/Game/Spaceship/SpaceshipManager.cs +++ b/Campofinale/Game/Spaceship/SpaceshipManager.cs @@ -10,6 +10,7 @@ using System.Threading.Tasks; using MongoDB.Bson.Serialization.IdGenerators; using static Campofinale.Resource.ResourceManager; using Campofinale.Resource; +using Campofinale.Resource.Table; namespace Campofinale.Game.Spaceship { @@ -84,6 +85,39 @@ namespace Campofinale.Game.Spaceship } } } + + public void GiftToChar(CsSpaceshipPresentGiftToChar req) + { + SpaceshipChar chara = GetChar(req.CharId); + if (chara != null) + { + foreach (var item in req.Gifts) + { + GiftItemTable giftItem = ResourceManager.giftItemTable[item.Id]; + chara.favorability += giftItem.favorablePoint * item.Count; + //TODO item consume + } + ScSpaceshipPresentGiftToChar confirm = new() + { + CurFav = chara.favorability, + CharId = chara.id, + RecvGiftCnt = req.Gifts.Count, + }; + //TODO packet class + /*ScSpaceshipCharFavorabilityChange change = new() + { + ChangeInfos = + { + new SpaceshipCharFavorabilityChangeInfo() + { + CharId = chara.id, + CurFav=chara.favorability, + } + } + };*/ + owner.Send(Protocol.ScMsgId.ScSpaceshipPresentGiftToChar, confirm); + } + } } diff --git a/Campofinale/Packets/Cs/HandleCsLogin.cs b/Campofinale/Packets/Cs/HandleCsLogin.cs index 52b957f..217092a 100644 --- a/Campofinale/Packets/Cs/HandleCsLogin.cs +++ b/Campofinale/Packets/Cs/HandleCsLogin.cs @@ -241,7 +241,7 @@ namespace Campofinale.Packets.Cs session.Send(new PacketScSpaceshipSync(session)); session.Send(new PacketScSyncFullDungeonStatus(session)); session.Send(new PacketScActivitySync(session)); - + session.Send(new PacketScSnsGetChatList(session)); session.Send(ScMsgId.ScSyncFullDataEnd, new ScSyncFullDataEnd()); session.EnterScene(); session.Initialized = true; diff --git a/Campofinale/Packets/Cs/HandleCsSpaceshipPresentGiftToChar.cs b/Campofinale/Packets/Cs/HandleCsSpaceshipPresentGiftToChar.cs new file mode 100644 index 0000000..bbdf214 --- /dev/null +++ b/Campofinale/Packets/Cs/HandleCsSpaceshipPresentGiftToChar.cs @@ -0,0 +1,28 @@ +using Campofinale.Network; +using Campofinale.Packets.Sc; +using Campofinale.Protocol; +using Google.Protobuf; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Sockets; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Linq; + +namespace Campofinale.Packets.Cs +{ + public class HandleCsSpaceshipPresentGiftToChar + { + + [Server.Handler(CsMsgId.CsSpaceshipPresentGiftToChar)] + public static void Handle(Player session, CsMsgId cmdId, Packet packet) + { + CsSpaceshipPresentGiftToChar req = packet.DecodeBody(); + session.spaceshipManager.GiftToChar(req); + + } + + } +} diff --git a/Campofinale/Packets/Sc/PacketScSnsGetChatList.cs b/Campofinale/Packets/Sc/PacketScSnsGetChatList.cs new file mode 100644 index 0000000..3f96ca3 --- /dev/null +++ b/Campofinale/Packets/Sc/PacketScSnsGetChatList.cs @@ -0,0 +1,33 @@ +using Campofinale.Network; +using Campofinale.Protocol; +using Campofinale.Resource; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; + +namespace Campofinale.Packets.Sc +{ + public class PacketScSnsGetChatList : Packet + { + public PacketScSnsGetChatList(Player player) { + ScSnsGetChatList proto = new ScSnsGetChatList() { + + }; + foreach (var chat in ResourceManager.snsChatTable) + { + var chatInfo = new SnsChatInfo() + { + ChatId = chat.Value.chatId, + ChatType = chat.Value.chatType, + Timestamp = DateTime.UtcNow.ToUnixTimestampMilliseconds(), + + }; + proto.ChatList.Add(chatInfo); + } + SetData(ScMsgId.ScSnsGetChatList, proto); + } + } +} diff --git a/Campofinale/Resource/ResourceManager.cs b/Campofinale/Resource/ResourceManager.cs index b1f1d2e..17c1cfe 100644 --- a/Campofinale/Resource/ResourceManager.cs +++ b/Campofinale/Resource/ResourceManager.cs @@ -68,6 +68,8 @@ namespace Campofinale.Resource public static Dictionary facSTTNodeTable = new(); public static Dictionary facSTTLayerTable = new(); public static Dictionary itemTypeTable = new(); // + public static Dictionary snsChatTable = new();// + public static Dictionary giftItemTable = new(); public static InteractiveTable interactiveTable = new(); // public static List levelDatas = new(); public static List interactiveData = new(); diff --git a/Campofinale/Resource/Table/GiftItemTable.cs b/Campofinale/Resource/Table/GiftItemTable.cs new file mode 100644 index 0000000..6cd6849 --- /dev/null +++ b/Campofinale/Resource/Table/GiftItemTable.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Campofinale.Resource.Table +{ + [TableCfgType("TableCfg/GiftItemTable.json", LoadPriority.LOW)] + public class GiftItemTable + { + public int favorablePoint; + public string id; + } +} diff --git a/Campofinale/Resource/Table/SNSChatTable.cs b/Campofinale/Resource/Table/SNSChatTable.cs new file mode 100644 index 0000000..b2101e5 --- /dev/null +++ b/Campofinale/Resource/Table/SNSChatTable.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Campofinale.Resource.Table +{ + [TableCfgType("TableCfg/SNSChatTable.json", LoadPriority.LOW)] + public class SNSChatTable + { + public string chatId; + public int chatType; + public int tagType; + } +}