playroom表情

This commit is contained in:
hahwu 2025-07-15 18:39:53 +08:00
parent c58c35c9ed
commit 59ec90f4ba
11 changed files with 193 additions and 31 deletions

View File

@ -11,6 +11,7 @@ import (
"fmt"
"io"
"math/rand"
"net/http"
"reflect"
"strconv"
"strings"
@ -425,3 +426,102 @@ func GenerateShuffledAlphabet() string {
return string(bytes)
}
// 根据IP获取国家名称
func GetCountryByIP(ip string) (string, error) {
resp, err := http.Get("https://ipapi.co/" + ip + "/country_name/")
if err != nil {
return "", err
}
defer resp.Body.Close()
buf := new(bytes.Buffer)
buf.ReadFrom(resp.Body)
return strings.TrimSpace(buf.String()), nil
}
// 根据国家名称获取ISO 3166-1国家码
func GetISOCodeByCountry(country string) (string, error) {
// 简单映射,可以扩展为更完整的映射表
countryMap := map[string]string{
"Afghanistan": "004", // 阿富汗
"Albania": "008", // 阿尔巴尼亚
"Algeria": "012", // 阿尔及利亚
"Angola": "024", // 安哥拉
"Argentina": "032", // 阿根廷
"Austria": "040", // 奥地利
"Azerbaijan": "031", // 阿塞拜疆
"Bahrain": "048", // 巴林
"Bangladesh": "050", // 孟加拉国
"Belgium": "056", // 比利时
"Bolivia": "068", // 玻利维亚
"Bosnia and Herzegovina": "070", // 波斯尼亚和黑塞哥维那
"Brazil": "076", // 巴西
"Bulgaria": "100", // 保加利亚
"Canada": "124", // 加拿大
"Chile": "152", // 智利
"China": "156", // 中国
"Colombia": "170", // 哥伦比亚
"Costa Rica": "188", // 哥斯达黎加
"Croatia": "191", // 克罗地亚
"Cuba": "192", // 古巴
"Denmark": "208", // 丹麦
"Ecuador": "218", // 厄瓜多尔
"Egypt": "818", // 埃及
"Ethiopia": "231", // 埃塞俄比亚
"Finland": "246", // 芬兰
"France": "250", // 法国
"Germany": "276", // 德国
"Ghana": "288", // 加纳
"Greece": "300", // 希腊
"Hungary": "348", // 匈牙利
"India": "356", // 印度
"Indonesia": "360", // 印度尼西亚
"Iran": "364", // 伊朗
"Iraq": "368", // 伊拉克
"Italy": "380", // 意大利
"Japan": "392", // 日本
"Jordan": "400", // 约旦
"Kenya": "404", // 肯尼亚
"Kuwait": "414", // 科威特
"Lebanon": "422", // 黎巴嫩
"Malaysia": "458", // 马来西亚
"Mexico": "484", // 墨西哥
"Morocco": "504", // 摩洛哥
"Nigeria": "566", // 尼日利亚
"Norway": "578", // 挪威
"Pakistan": "586", // 巴基斯坦
"Peru": "604", // 秘鲁
"Philippines": "608", // 菲律宾
"Poland": "616", // 波兰
"Portugal": "620", // 葡萄牙
"Qatar": "634", // 卡塔尔
"Romania": "642", // 罗马尼亚
"Russia": "643", // 俄罗斯
"Saudi Arabia": "682", // 沙特阿拉伯
"South Africa": "710", // 南非
"South Korea": "410", // 韩国
"Spain": "724", // 西班牙
"Sweden": "752", // 瑞典
"Switzerland": "756", // 瑞士
"Thailand": "764", // 泰国
"Turkey": "792", // 土耳其
"Ukraine": "804", // 乌克兰
"United Kingdom": "826", // 英国
"United States": "840", // 美国
"Vietnam": "704", // 越南
"Zimbabwe": "716", // 津巴布韦
}
if code, ok := countryMap[country]; ok {
return code, nil
}
return "", fmt.Errorf("country code not found for %s", country)
}
// 综合函数根据IP获取ISO 3166-1国家码
func GetISOCodeByIP(ip string) (string, error) {
country, err := GetCountryByIP(ip)
if err != nil {
return "", err
}
return GetISOCodeByCountry(country)
}

View File

@ -32,6 +32,7 @@
"RemoteAddr":"host.docker.internal:9001",
"Partition":3,
"KafkaHost":"kafka-server",
"CountryCode":"004",
"KafkaPort":"9092",
"Version":"1.0.0",
"IdVerify":false

View File

@ -320,7 +320,7 @@ func ReqGmCommand_(player *Player, Command string) error {
PlayroomBackData(player)
case "addChip":
PlayroomMod := player.PlayMod.getPlayroomMod()
PlayroomMod.AddChip(1, 1)
PlayroomMod.AddChip(1, 1, 0)
player.PushClientRes(PlayroomMod.NotifyLose())
case "save":
player.PlayMod.ClearData(player)

View File

@ -72,7 +72,8 @@ func PlayroomBackData(p *Player) {
ChipMessage := make([]*proto.ChipInfo, 0)
for _, v := range PlayroomMod.ChipList {
ChipMessage = append(ChipMessage, &proto.ChipInfo{
Uid: int64(v.Uid),
Uid: int64(v.Uid),
EmojiId: int32(v.Emoji),
})
}
data := G_GameLogicPtr.GetUserData(int(p.M_DwUin))

View File

@ -212,19 +212,21 @@ func handle(p *Player, m *msg.Msg) error {
PlayroomMod := p.PlayMod.getPlayroomMod()
Items := m.Item
GameId := playroom.GAME_TYPE_HOOK
Emoji := 0
if m.Extra != nil {
if val, ok := m.Extra.(int); ok {
GameId = val
if val, ok := m.Extra.(GameResult); ok {
GameId = val.T
Emoji = val.Emoji
}
}
if len(Items) == 0 {
return nil
}
if GameId == playroom.GAME_TYPE_HOOK {
PlayroomMod.AddChip(m.From, m.SendT)
p.AddLog(m.From, friend.LOG_TYPE_PLAYROOM_CAT_WIN, fmt.Sprintf("%d_%d", Items[0].Id, Items[0].Num), m.SendT)
PlayroomMod.AddChip(m.From, m.SendT, Emoji)
p.AddLog(m.From, friend.LOG_TYPE_PLAYROOM_CAT_WIN, fmt.Sprintf("%d_%d_%d", Items[0].Id, Items[0].Num, Emoji), m.SendT)
} else {
p.AddLog(m.From, friend.LOG_TYPE_PLAYROOM_VISIT, fmt.Sprintf("%d_%d", Items[0].Id, Items[0].Num), m.SendT)
p.AddLog(m.From, friend.LOG_TYPE_PLAYROOM_VISIT, fmt.Sprintf("%d_%d_%d", Items[0].Id, Items[0].Num, Emoji), m.SendT)
}
PlayroomMod.AddMood(playroom.MOOD_TYPE_FOOD, -50)
PlayroomMod.AddMood(playroom.MOOD_TYPE_CLEAN, -50)
@ -245,7 +247,13 @@ func handle(p *Player, m *msg.Msg) error {
p.PushClientRes(PlayroomMod.NotifyLose())
case msg.HANDLE_TYPE_PLAYROOM_GAME:
FriendMod := p.PlayMod.getFriendMod()
p.AddLog(m.From, friend.LOG_TYPE_PLAYROOM_CAT_LOSE, "", m.SendT)
Emoji := 0
if m.Extra != nil {
if val, ok := m.Extra.(GameResult); ok {
Emoji = val.Emoji
}
}
p.AddLog(m.From, friend.LOG_TYPE_PLAYROOM_CAT_LOSE, fmt.Sprintf("%d", Emoji), m.SendT)
FriendMod.Interact(m.From, friend.INTERACT_TYPE_VISIT, m.SendT)
case msg.FRIEND_TREASURE_HANDLE: // # 好友宝藏
Items := make([]*item.Item, 0)

View File

@ -148,7 +148,7 @@ func (p *PlayerModData) InitMod(player *Player) (bool, error) {
BaseMod.FackBookId = PlayerBaseMod.Data.FaceBookId
is_update = true
}
Ip := p.GetPlayer().agent.RemoteAddr().String()
p.ModList.Handbook.InitData()
p.ModList.Order.InitData()
p.ModList.Decorate.InitData()
@ -158,7 +158,7 @@ func (p *PlayerModData) InitMod(player *Player) (bool, error) {
p.ModList.DailyTask.InitData()
p.ModList.Face.InitData()
p.ModList.Avatar.InitData()
p.ModList.Base.InitData(int(p.Data.DwUin))
p.ModList.Base.InitData(int(p.Data.DwUin), Ip)
p.ModList.SevenLogin.InitData()
p.ModList.LimitedTimeEvent.InitData(BaseMod.GetLevel())
p.ModList.Friend.InitData()

View File

@ -3268,6 +3268,10 @@ func ReqPlayroomGame(player *Player, buf []byte) error {
To: Target,
Type: MsqMod.HANDLE_TYPE_PLAYROOM_GAME,
SendT: GoUtil.Now(),
Extra: GameResult{
T: PlayroomMod.GetGameId(),
Emoji: int(req.EmojiId),
},
})
player.PlayMod.save()
ItemsMsg := make(map[int32]*msg.ItemInfo, 0)
@ -3306,7 +3310,10 @@ func ReqPlayroomSelectReward(player *Player, buf []byte) error {
Type: MsqMod.HANDLE_TYPE_PLAYROOM_LOSE,
SendT: GoUtil.Now(),
Item: Items,
Extra: PlayroomMod.GetGameId(),
Extra: GameResult{
T: PlayroomMod.GetGameId(),
Emoji: int(req.EmojiId),
},
})
G_GameLogicPtr.SetUserData(Target, VAR_OP_CHIP, 1)
PlayroomMod.ResetGame()
@ -3497,7 +3504,10 @@ func ReqPlayroomFlipReward(player *Player, buf []byte) error {
Type: MsqMod.HANDLE_TYPE_PLAYROOM_LOSE,
SendT: GoUtil.Now(),
Item: Items,
Extra: PlayroomMod.GetGameId(),
Extra: GameResult{
T: playroom.GAME_TYPE_FILP,
Emoji: int(req.EmojiId),
},
})
player.PlayMod.save()
PlayroomBackData(player)

View File

@ -78,8 +78,9 @@ type ChargeExtra struct {
}
type GameResult struct {
t int // 游戏类型
r int // 1:赢 2:输 3:平
T int // 游戏类型
R int // 1:赢 2:输 3:平
Emoji int // 表情
}
func init() {

View File

@ -45,12 +45,16 @@ type Base struct {
AddCode string // 用于添加好友的code
}
func (b *Base) InitData(Uid int) {
func (b *Base) InitData(Uid int, Ip string) {
if b.AddCode == "" {
Code, _ := GoUtil.GetCountryByIP(Ip)
CountryCode := conf.Server.CountryCode
if CountryCode == "" {
CountryCode = "000"
}
if Code != "" {
CountryCode = Code
}
b.AddCode = fmt.Sprintf("MMM-%s-%s", CountryCode, GoUtil.UniqueStringFromInt(Uid))
}
if b.NickName == "" {

View File

@ -98,8 +98,9 @@ const (
)
type ChipInfo struct {
Uid int
Time int64
Uid int
Time int64
Emoji int
}
type Mood struct {
@ -327,11 +328,11 @@ func (p *PlayroomMod) GetChip() int {
return len(p.ChipList)
}
func (p *PlayroomMod) AddChip(Uid int, Time int64) {
func (p *PlayroomMod) AddChip(Uid int, Time int64, Emoji int) {
if len(p.ChipList) >= playroomCfg.GetChipNum() {
return
}
p.ChipList = append(p.ChipList, &ChipInfo{Uid: Uid, Time: Time})
p.ChipList = append(p.ChipList, &ChipInfo{Uid: Uid, Time: Time, Emoji: Emoji})
p.RevengeUid = int64(Uid)
}

View File

@ -860,7 +860,7 @@ const (
LimitEventParam_CAT_TRICK_ENERGY LimitEventParam = 1 //猫咪能量
LimitEventParam_CAT_TRICK_TYPE LimitEventParam = 2 //猫咪类型
LimitEventParam_PAYBACK_DAY_COUNT LimitEventParam = 3 //回收日
LimitEventParam_LUCKY_CAT_EARNINGS LimitEventParam = 4 //幸运猫收益
LimitEventParam_LUCKY_CAT_EARNINGS LimitEventParam = 4 //幸运猫
)
// Enum value maps for LimitEventParam.
@ -20546,7 +20546,8 @@ func (x *NotifyPlayroomLose) GetRevenge() int64 {
type ChipInfo struct {
state protoimpl.MessageState `protogen:"open.v1"`
Uid int64 `protobuf:"varint,1,opt,name=Uid,proto3" json:"Uid,omitempty"` // 玩家id
Uid int64 `protobuf:"varint,1,opt,name=Uid,proto3" json:"Uid,omitempty"` // 玩家id
EmojiId int32 `protobuf:"varint,2,opt,name=EmojiId,proto3" json:"EmojiId,omitempty"` // 表情id
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
@ -20588,6 +20589,13 @@ func (x *ChipInfo) GetUid() int64 {
return 0
}
func (x *ChipInfo) GetEmojiId() int32 {
if x != nil {
return x.EmojiId
}
return 0
}
type NotifyPlayroomMood struct {
state protoimpl.MessageState `protogen:"open.v1"`
AllMood int32 `protobuf:"varint,1,opt,name=AllMood,proto3" json:"AllMood,omitempty"` // 总心情
@ -21177,6 +21185,7 @@ func (x *ResPlayroomFlip) GetCardId() int32 {
// 领取游戏奖励
type ReqPlayroomFlipReward struct {
state protoimpl.MessageState `protogen:"open.v1"`
EmojiId int32 `protobuf:"varint,1,opt,name=EmojiId,proto3" json:"EmojiId,omitempty"` // 表情id
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
@ -21211,6 +21220,13 @@ func (*ReqPlayroomFlipReward) Descriptor() ([]byte, []int) {
return file_proto_Gameapi_proto_rawDescGZIP(), []int{367}
}
func (x *ReqPlayroomFlipReward) GetEmojiId() int32 {
if x != nil {
return x.EmojiId
}
return 0
}
type ResPlayroomFlipReward struct {
state protoimpl.MessageState `protogen:"open.v1"`
Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"`
@ -21265,7 +21281,8 @@ func (x *ResPlayroomFlipReward) GetMsg() string {
type ReqPlayroomGame struct {
state protoimpl.MessageState `protogen:"open.v1"`
Type int32 `protobuf:"varint,1,opt,name=Type,proto3" json:"Type,omitempty"` // 1:绿色 2黄色 3红色
Type int32 `protobuf:"varint,1,opt,name=Type,proto3" json:"Type,omitempty"` // 1:绿色 2黄色 3红色
EmojiId int32 `protobuf:"varint,2,opt,name=EmojiId,proto3" json:"EmojiId,omitempty"` // 表情id
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
@ -21307,6 +21324,13 @@ func (x *ReqPlayroomGame) GetType() int32 {
return 0
}
func (x *ReqPlayroomGame) GetEmojiId() int32 {
if x != nil {
return x.EmojiId
}
return 0
}
type ResPlayroomGame struct {
state protoimpl.MessageState `protogen:"open.v1"`
Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"`
@ -21587,7 +21611,8 @@ func (x *ResPlayroomSetRoom) GetMsg() string {
type ReqPlayroomSelectReward struct {
state protoimpl.MessageState `protogen:"open.v1"`
Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 奖励id
Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 奖励id
EmojiId int32 `protobuf:"varint,2,opt,name=EmojiId,proto3" json:"EmojiId,omitempty"` // 表情id
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
@ -21629,6 +21654,13 @@ func (x *ReqPlayroomSelectReward) GetId() int32 {
return 0
}
func (x *ReqPlayroomSelectReward) GetEmojiId() int32 {
if x != nil {
return x.EmojiId
}
return 0
}
type ResPlayroomSelectReward struct {
state protoimpl.MessageState `protogen:"open.v1"`
Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"`
@ -24987,9 +25019,10 @@ const file_proto_Gameapi_proto_rawDesc = "" +
"\x12NotifyPlayroomLose\x12.\n" +
"\bLoseItem\x18\x01 \x03(\v2\x12.tutorial.ItemInfoR\bLoseItem\x12&\n" +
"\x04Chip\x18\x02 \x03(\v2\x12.tutorial.ChipInfoR\x04Chip\x12\x18\n" +
"\aRevenge\x18\x03 \x01(\x03R\aRevenge\"\x1c\n" +
"\aRevenge\x18\x03 \x01(\x03R\aRevenge\"6\n" +
"\bChipInfo\x12\x10\n" +
"\x03Uid\x18\x01 \x01(\x03R\x03Uid\"\xb0\x02\n" +
"\x03Uid\x18\x01 \x01(\x03R\x03Uid\x12\x18\n" +
"\aEmojiId\x18\x02 \x01(\x05R\aEmojiId\"\xb0\x02\n" +
"\x12NotifyPlayroomMood\x12\x18\n" +
"\aAllMood\x18\x01 \x01(\x05R\aAllMood\x12:\n" +
"\x04Mood\x18\x02 \x03(\v2&.tutorial.NotifyPlayroomMood.MoodEntryR\x04Mood\x12L\n" +
@ -25061,13 +25094,15 @@ const file_proto_Gameapi_proto_rawDesc = "" +
"\x04Code\x18\x01 \x01(\x0e2\x12.tutorial.RES_CODER\x04Code\x12\x10\n" +
"\x03Msg\x18\x02 \x01(\tR\x03Msg\x12\x0e\n" +
"\x02Id\x18\x03 \x01(\x05R\x02Id\x12\x16\n" +
"\x06CardId\x18\x04 \x01(\x05R\x06CardId\"\x17\n" +
"\x15ReqPlayroomFlipReward\"Q\n" +
"\x06CardId\x18\x04 \x01(\x05R\x06CardId\"1\n" +
"\x15ReqPlayroomFlipReward\x12\x18\n" +
"\aEmojiId\x18\x01 \x01(\x05R\aEmojiId\"Q\n" +
"\x15ResPlayroomFlipReward\x12&\n" +
"\x04Code\x18\x01 \x01(\x0e2\x12.tutorial.RES_CODER\x04Code\x12\x10\n" +
"\x03Msg\x18\x02 \x01(\tR\x03Msg\"%\n" +
"\x03Msg\x18\x02 \x01(\tR\x03Msg\"?\n" +
"\x0fReqPlayroomGame\x12\x12\n" +
"\x04Type\x18\x01 \x01(\x05R\x04Type\"\xe9\x01\n" +
"\x04Type\x18\x01 \x01(\x05R\x04Type\x12\x18\n" +
"\aEmojiId\x18\x02 \x01(\x05R\aEmojiId\"\xe9\x01\n" +
"\x0fResPlayroomGame\x12&\n" +
"\x04Code\x18\x01 \x01(\x0e2\x12.tutorial.RES_CODER\x04Code\x12\x10\n" +
"\x03Msg\x18\x02 \x01(\tR\x03Msg\x12\x12\n" +
@ -25091,9 +25126,10 @@ const file_proto_Gameapi_proto_rawDesc = "" +
"\x05value\x18\x02 \x01(\x05R\x05value:\x028\x01\"N\n" +
"\x12ResPlayroomSetRoom\x12&\n" +
"\x04Code\x18\x01 \x01(\x0e2\x12.tutorial.RES_CODER\x04Code\x12\x10\n" +
"\x03Msg\x18\x02 \x01(\tR\x03Msg\")\n" +
"\x03Msg\x18\x02 \x01(\tR\x03Msg\"C\n" +
"\x17ReqPlayroomSelectReward\x12\x0e\n" +
"\x02Id\x18\x01 \x01(\x05R\x02Id\"S\n" +
"\x02Id\x18\x01 \x01(\x05R\x02Id\x12\x18\n" +
"\aEmojiId\x18\x02 \x01(\x05R\aEmojiId\"S\n" +
"\x17ResPlayroomSelectReward\x12&\n" +
"\x04Code\x18\x01 \x01(\x0e2\x12.tutorial.RES_CODER\x04Code\x12\x10\n" +
"\x03Msg\x18\x02 \x01(\tR\x03Msg\"\x11\n" +