From 9080c8870a7419c958327aef1b98a7e2be221b81 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 8 Dec 2025 15:15:55 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E7=8C=AB=E8=8D=89=E5=A4=A7=E4=BD=9C?= =?UTF-8?q?=E6=88=98=E3=80=91-=20=E8=AE=BE=E7=BD=AEemoji=20=E3=80=81?= =?UTF-8?q?=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + src/server/conf/json.go | 2 +- src/server/game/FriendMgr.go | 1 + src/server/game/PlayerFunc.go | 5 ++ src/server/game/RegisterNetworkFunc.go | 78 +++++++++++++++++++++++++- src/server/game/mod/catnip/Catnip.go | 16 ++++-- src/server/game/mod/msg/Msg.go | 3 +- src/server/test/catnip_test.go | 36 ++++++++++++ src/server/test/conf/server.json | 48 ++++++++++++++++ 9 files changed, 182 insertions(+), 9 deletions(-) create mode 100644 src/server/test/catnip_test.go create mode 100644 src/server/test/conf/server.json diff --git a/.gitignore b/.gitignore index a6745817..66d65180 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,5 @@ src/server/teLog/log.2024-11-28 src/server/logs/ga_log/*.log src/server/goroutine.prof src/server/heap_after.pb.gz +src/server/test/logs/* +src/server/test/teLog/* diff --git a/src/server/conf/json.go b/src/server/conf/json.go index 64bd3ec7..aabca98f 100644 --- a/src/server/conf/json.go +++ b/src/server/conf/json.go @@ -64,7 +64,7 @@ var Server struct { func init() { filePath := "conf/server.json" if len(os.Args) == 2 { - if os.Args[1] != "" { + if os.Args[1] != "" && os.Args[1][0] != '-' { filePath = os.Args[1] } } diff --git a/src/server/game/FriendMgr.go b/src/server/game/FriendMgr.go index b571cc37..cde0258d 100644 --- a/src/server/game/FriendMgr.go +++ b/src/server/game/FriendMgr.go @@ -82,6 +82,7 @@ func (f *FriendMgr) Init() { f.RegisterHandler(msg.HANDLE_TYPE_CATNIP_REFUSE, f.sendToPlayer) f.RegisterHandler(msg.HANDLE_TYPE_CATNIP_GROWTH, f.sendToPlayer) f.RegisterHandler(msg.HANDLE_TYPE_CATNIP_AGREE_DEL, f.sendToPlayer) + f.RegisterHandler(msg.HANDLE_TYPE_CATNIP_SEND_EMOJI, f.sendToPlayer) f.RegisterHandler(msg.HANDLE_TYPE_PLAYROOM_KISS, f.sendToPlayerOnline) f.RegisterHandler(msg.HANDLE_TYPE_PLAYROOM_GAME, f.sendToPlayer) diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 97a8137a..4735f7ae 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -373,6 +373,11 @@ func handle(p *Player, m *msg.Msg) error { FriendMod.AddReplyInfo(m.From, friend.REPLY_TYPE_CATNIP_ITEMS, "", m.End, Items) } p.CatnipBackData() + case msg.HANDLE_TYPE_CATNIP_SEND_EMOJI: + CatnipMod := p.PlayMod.getCatnipMod() + EmojiId := GoUtil.Int(m.Extra) + CatnipMod.SetEmoji(m.From, EmojiId) + p.CatnipBackData() case msg.HANDLE_TYPE_FRIEND_GREETING_REPLY: FriendMod := p.PlayMod.getFriendMod() if v, ok := m.Extra.(friend.ReplyInfo); ok { diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index b6a31ff6..9d7fe69d 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -5348,6 +5348,13 @@ func ReqCatnipInvite(player *Player, buf []byte) error { return err } ActivityId := GetActivityId(player, activity.ACT_TYPE_CATNIP) + if ActivityId == 0 { + player.SendErrClienRes(&msg.ResCatnipPlay{ + Code: msg.RES_CODE_FAIL, + Msg: "activity not active", + }) + return fmt.Errorf("activity not active") + } ActivityInfo := GetActivityInfo(player, ActivityId) CatnipMod := player.PlayMod.getCatnipMod() err = CatnipMod.Invite(int(req.Uid), int(req.Id)) @@ -5388,6 +5395,13 @@ func ReqCatnipAgree(player *Player, buf []byte) error { } CatnipMod := player.PlayMod.getCatnipMod() ActivityId := GetActivityId(player, activity.ACT_TYPE_CATNIP) + if ActivityId == 0 { + player.SendErrClienRes(&msg.ResCatnipPlay{ + Code: msg.RES_CODE_FAIL, + Msg: "activity not active", + }) + return fmt.Errorf("activity not active") + } _, err = CatnipMod.Agree(int(req.Id), int(req.Uid)) if err != nil { player.SendErrClienRes(&msg.ResCatnipAgree{ @@ -5433,6 +5447,14 @@ func ReqCatnipMultiply(player *Player, buf []byte) error { return err } CatnipMod := player.PlayMod.getCatnipMod() + ActivityId := GetActivityId(player, activity.ACT_TYPE_CATNIP) + if ActivityId == 0 { + player.SendErrClienRes(&msg.ResCatnipPlay{ + Code: msg.RES_CODE_FAIL, + Msg: "activity not active", + }) + return fmt.Errorf("activity not active") + } err = CatnipMod.Multiply(int(req.Multiply)) if err != nil { player.SendErrClienRes(&msg.ResCatnipMultiply{ @@ -5460,6 +5482,14 @@ func ReqCatnipPlay(player *Player, buf []byte) error { return err } CatnipMod := player.PlayMod.getCatnipMod() + ActivityId := GetActivityId(player, activity.ACT_TYPE_CATNIP) + if ActivityId == 0 { + player.SendErrClienRes(&msg.ResCatnipPlay{ + Code: msg.RES_CODE_FAIL, + Msg: "activity not active", + }) + return fmt.Errorf("activity not active") + } Id, Growth, PartnerId, Items, ItemCost, FriendItems, err := CatnipMod.Play(int(req.Id)) if err != nil { player.SendErrClienRes(&msg.ResCatnipPlay{ @@ -5508,6 +5538,14 @@ func ReqCatnipReward(player *Player, buf []byte) error { return err } CatnipMod := player.PlayMod.getCatnipMod() + ActivityId := GetActivityId(player, activity.ACT_TYPE_CATNIP) + if ActivityId == 0 { + player.SendErrClienRes(&msg.ResCatnipPlay{ + Code: msg.RES_CODE_FAIL, + Msg: "activity not active", + }) + return fmt.Errorf("activity not active") + } Items, GameInfo, err := CatnipMod.Reward(int(req.Id), int(req.Progress)) if err != nil { player.SendErrClienRes(&msg.ResCatnipReward{ @@ -5546,6 +5584,14 @@ func ReqCatnipGrandReward(player *Player, buf []byte) error { return err } CatnipMod := player.PlayMod.getCatnipMod() + ActivityId := GetActivityId(player, activity.ACT_TYPE_CATNIP) + if ActivityId == 0 { + player.SendErrClienRes(&msg.ResCatnipPlay{ + Code: msg.RES_CODE_FAIL, + Msg: "activity not active", + }) + return fmt.Errorf("activity not active") + } Items, err := CatnipMod.GrandReward() if err != nil { player.SendErrClienRes(&msg.ResCatnipGrandReward{ @@ -5580,6 +5626,14 @@ func ReqCatnipRefuse(player *Player, buf []byte) error { return err } CatnipMod := player.PlayMod.getCatnipMod() + ActivityId := GetActivityId(player, activity.ACT_TYPE_CATNIP) + if ActivityId == 0 { + player.SendErrClienRes(&msg.ResCatnipPlay{ + Code: msg.RES_CODE_FAIL, + Msg: "activity not active", + }) + return fmt.Errorf("activity not active") + } err = CatnipMod.Refuse(int(req.Id), int(req.Uid)) if err != nil { player.SendErrClienRes(&msg.ResCatnipRefuse{ @@ -5770,7 +5824,29 @@ func ReqCatnipEmoji(player *Player, buf []byte) error { return err } CatnipMod := player.PlayMod.getCatnipMod() - CatnipMod.SetEmoji(int(req.Id), int(req.EmojiId)) + ActivityId := GetActivityId(player, activity.ACT_TYPE_CATNIP) + if ActivityId == 0 { + player.SendErrClienRes(&msg.ResCatnipPlay{ + Code: msg.RES_CODE_FAIL, + Msg: "activity not active", + }) + return fmt.Errorf("activity not active") + } + GameInfo := CatnipMod.GetGameInfo(int(req.Id)) + if GameInfo.Partner == 0 { + player.SendErrClienRes(&msg.ResCatnipEmoji{ + Code: msg.RES_CODE_FAIL, + Msg: "no partner", + }) + return fmt.Errorf("no partner") + } + FriendMgrSend(&MsqMod.Msg{ + From: int(player.M_DwUin), + To: GameInfo.Partner, + Type: MsqMod.HANDLE_TYPE_CATNIP_SEND_EMOJI, + Extra: int(req.EmojiId), + }) + player.CatnipBackData() return nil } diff --git a/src/server/game/mod/catnip/Catnip.go b/src/server/game/mod/catnip/Catnip.go index cd619640..17cdef2e 100644 --- a/src/server/game/mod/catnip/Catnip.go +++ b/src/server/game/mod/catnip/Catnip.go @@ -233,15 +233,19 @@ func (c *CatnipMod) GrowthByUid(Uid, Growth int) { } -func (c *CatnipMod) SetEmoji(Id, EmojiId int) { - GameInfo, ok := c.Game[Id] - if !ok { - return // Game does not exist +func (c *CatnipMod) SetEmoji(Uid, EmojiId int) { + for _, v := range c.Game { + if v.Partner == Uid { + v.EmojiId = EmojiId + return + } } - // Here we can set the emoji for the game. This is a placeholder implementation. - GameInfo.EmojiId = EmojiId } func (c *CatnipMod) GetMultiple() int { return c.Mul } + +func (c *CatnipMod) GetGameInfo(Id int) *CatnipGame { + return c.Game[Id] +} diff --git a/src/server/game/mod/msg/Msg.go b/src/server/game/mod/msg/Msg.go index 623af111..22415fee 100644 --- a/src/server/game/mod/msg/Msg.go +++ b/src/server/game/mod/msg/Msg.go @@ -110,7 +110,8 @@ const ( HANDLE_TYPE_CHAMPSHIP_LOGIN // 锦标赛登录 HANDLE_TYPE_CHAMPSHIP_RANK_INFO // 锦标赛排名信息 - HANDLE_TYPE_SET_CATNIP_PARTNER + HANDLE_TYPE_SET_CATNIP_PARTNER // 设置猫薄荷伙伴 + HANDLE_TYPE_CATNIP_SEND_EMOJI // 发送猫薄荷表情 ) const ( diff --git a/src/server/test/catnip_test.go b/src/server/test/catnip_test.go new file mode 100644 index 00000000..93b5ee4d --- /dev/null +++ b/src/server/test/catnip_test.go @@ -0,0 +1,36 @@ +package test + +import ( + "testing" + + "google.golang.org/protobuf/proto" + + "server/game" + "server/msg" +) + +func TestCatnipBackData(t *testing.T) { + p1 := new(game.Player) + p1.InitPlayer("aaa001") + game.G_GameLogicPtr.SetPlayer(p1) + p1.CatnipBackData() +} + +func TestReqCatnipEmoji(t *testing.T) { + p1 := new(game.Player) + p1.InitPlayer("aaa001") + game.G_GameLogicPtr.SetPlayer(p1) + + req := &msg.ReqCatnipEmoji{ + Id: 1, + EmojiId: 1, + } + data, err := proto.Marshal(req) + if err != nil { + t.Fatalf("proto.Marshal error: %v", err) + } + + if err := game.ReqCatnipEmoji(p1, data); err != nil { + t.Fatalf("ReqCatnipEmoji returned error: %v", err) + } +} diff --git a/src/server/test/conf/server.json b/src/server/test/conf/server.json new file mode 100644 index 00000000..c6779e49 --- /dev/null +++ b/src/server/test/conf/server.json @@ -0,0 +1,48 @@ +{ + "AppID": 1, + "LogLevel": "debug", + "LogPath": "./log", + "TCPAddr": ":3601", + "WSAddr": ":3566", + "MySqlAddr": "127.0.0.1", + "MySqlPort": "3306", + "MySqlUsr": "root", + "MySqlPwd": "IOagNEq3C84c-20CmHEin5iODVc=", + "MaxConnNum": 20000, + "DbName": "Merge_Pet_1", + "HttpPort": ":8081", + "AppPath": "./app", + "TELOGDIR" : "./teLog/", + + "GameName": "Merge_Pet_Local", + + "ServerType":"node", + + "ServerID": 1, + "ServerOpenTime": "2018-01-01 00:00:00", + "ServerName": "Merge_Pet", + "ServerStatus" : 1, + "ServerCenter" : 1, + "GameConfPath": "D:/Github/pet_home_server/src/server/gamedata/config/", + + "ListenAddr":":9001", + "CenterAddr": "pethome.bywaystudios.com:9000", + "RemoteAddr":"host.docker.internal:9001", + + "RedisAddr":"127.0.0.1", + "RedisPort" :"6379", + "RedisPwd" :"", + + "RedisWriteAddr":"127.0.0.1:6379", + "RedisReadAddrs":"127.0.0.1:6379", + "RedisMasterName":"mymaster", + "RedisConnType":"Direct", + + "GoogleVerify":false, + "Partition":3, + "KafkaHost":"kafka-server", + "CountryCode":"004", + "KafkaPort":"9092", + "Version":"1.0.0", + "IdVerify":false +}