Merge branch 'develop' into sdk

This commit is contained in:
hahwu 2025-07-17 10:10:35 +08:00
commit 8d0b43cb11
23 changed files with 2264 additions and 1197 deletions

View File

@ -32,6 +32,8 @@ const (
CONDITION_LT = "<" // 小于 CONDITION_LT = "<" // 小于
CONDITION_GE = ">=" // 大于等于 CONDITION_GE = ">=" // 大于等于
CONDITION_LE = "<=" // 小于等于 CONDITION_LE = "<=" // 小于等于
LETTER = "GhCvgqSNTUMVeRfwakiYmcxWKtJQpZrDIBXnPyLsAFdzjHbulE"
) )
// 加密字符串 // 加密字符串
@ -312,3 +314,214 @@ func UniqueInts(input []int) []int {
} }
return result return result
} }
/*
#codebase: GoUtil
修改函数UniqueStringFromInt
功能说明
将整数转换为包含字母和数字的唯一字符串
算法步骤
1. 将输入整数格式化为5位数字符串不足前补0
2. 分割字符串前2位中2位最后1位
3. 将各段转为整数作为字母表索引
4. 从预定义字母表中选择对应字符
5. 随机生成2个数字字符
6. 随机插入数字字符到字母串中
7. 返回最终唯一标识字符串
*/
func UniqueStringFromInt(n int) string {
n = n % 100000 // 确保n在0-99999范围内
str := fmt.Sprintf("%05d", n)
a1 := str[0:2]
a2 := str[2:4]
a3 := str[4:5]
s1, _ := strconv.Atoi(a1)
s2, _ := strconv.Atoi(a2)
s3, _ := strconv.Atoi(a3)
// 修改索引计算逻辑
var letter1, letter2 string
if s1 >= len(LETTER) {
letter1 = string(LETTER[s1%len(LETTER)]) + strconv.Itoa(s1/len(LETTER))
} else {
letter1 = string(LETTER[s1])
}
if s2 >= len(LETTER) {
idx := (s2) % len(LETTER)
letter2 = string(LETTER[idx]) + strconv.Itoa(s2/len(LETTER))
} else {
letter2 = string(LETTER[s2])
}
letter3 := string(LETTER[s3+20])
letter := fmt.Sprintf("%s%s%s", letter1, letter2, letter3)
lastLetter := 5 - len(letter)
indices := rand.Perm(8)[:2]
chars := []byte{byte('2' + indices[0]), byte('2' + indices[1])}
if lastLetter > 0 {
for i := 0; i < lastLetter; i++ {
insertPos1 := rand.Intn(len(letter) + 1)
letter = letter[:insertPos1] + string(chars[0]) + letter[insertPos1:]
}
}
pos := rand.Intn(len(LETTER))
letter += string(LETTER[pos])
return fmt.Sprintf("%s-%s", letter[:3], letter[3:])
}
// 反解析 UniqueStringFromInt 生成的字符串返回原始整数0-99999失败返回 -1
func ParseUniqueStringToInt(s string) int {
arr := strings.Split(s, "-")
// 去除字符串中大于1的数字
s1 := arr[2] + arr[3]
s1 = s1[:len(s1)-1] // 去掉最后一个字符
s2 := ""
for _, ch := range s1 {
if ch < '2' || ch > '9' {
s2 += string(ch)
}
}
index1 := 0
s3 := ""
for i := 0; i < len(s2); i++ {
index := strings.Index(LETTER, string(s2[i]))
if i < len(s2)-1 && s2[i+1] == '1' {
index += len(LETTER)
i++
}
index1++
if i == len(s2)-1 {
index -= 20 // 最后一位是字母减去20
s3 += fmt.Sprintf("%d", index)
} else {
s3 += fmt.Sprintf("%02d", index)
}
}
return Int(s3)
}
func GenerateShuffledAlphabet() string {
// 包含所有大小写字母的字符串
alphabet := "abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ"
// 转换为字节切片以便打乱
bytes := []byte(alphabet)
// 使用当前时间作为随机种子
rand.Seed(time.Now().UnixNano())
// Fisher-Yates 洗牌算法
for i := len(bytes) - 1; i > 0; i-- {
j := rand.Intn(i + 1)
bytes[i], bytes[j] = bytes[j], bytes[i]
}
return string(bytes)
}
// 根据IP获取国家名称
func GetCountryByIP(ip string) (string, error) {
return "", nil
// 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

@ -51,8 +51,8 @@ var Server struct {
KafkaHost string KafkaHost string
KafkaPort string KafkaPort string
Version string Version string
CountryCode string
IdVerify bool IdVerify bool
} }
func init() { func init() {

View File

@ -29,10 +29,10 @@
"RedisPort" :"6379", "RedisPort" :"6379",
"RedisPwd" :"", "RedisPwd" :"",
"GoogleVerify":false, "GoogleVerify":false,
"RemoteAddr":"host.docker.internal:9001", "RemoteAddr":"host.docker.internal:9001",
"Partition":3, "Partition":3,
"KafkaHost":"kafka-server", "KafkaHost":"kafka-server",
"CountryCode":"004",
"KafkaPort":"9092", "KafkaPort":"9092",
"Version":"1.0.0", "Version":"1.0.0",
"IdVerify":false "IdVerify":false

View File

@ -0,0 +1,35 @@
package game
import (
"server/game/mod/compensation"
"server/game/mod/mail"
)
func (p *Player) Compensation() {
p.Compensation20250716()
}
func (p *Player) Compensation20250716() {
compensationMod := p.PlayMod.getCompensationMod()
if compensationMod.Is20250716() {
return // 已经领取过补偿
}
PlayerBaseMod := p.GetPlayerBaseMod()
items := compensationMod.Compensation20250716(PlayerBaseMod.GetName())
if len(items) == 0 {
return // 没有补偿物品
}
MailMod := p.PlayMod.getMailMod()
MailMod.SendMail(&mail.MailStruct{
Title: compensation.Compensation20250716_Mail_Config.Title,
SubTitle: "",
Content: compensation.Compensation20250716_Mail_Config.Content,
TitleEn: compensation.Compensation20250716_Mail_Config.Title,
SubTitleEn: "",
ContentEn: compensation.Compensation20250716_Mail_Config.Content,
Items: items,
Type: mail.MAIL_TYPE_NORMAL,
})
p.PlayMod.save()
}

View File

@ -150,6 +150,8 @@ func (f *FriendMgr) SetVarUserData(m *msg.Msg) (interface{}, error) {
data.Upvote++ data.Upvote++
case VAR_OP_CHIP: case VAR_OP_CHIP:
data.Chip += VarOp.Data.(int) data.Chip += VarOp.Data.(int)
case VAR_OP_CHIP_SET:
data.Chip = VarOp.Data.(int)
case VAR_OP_KISS: case VAR_OP_KISS:
data.Kiss = VarOp.Data.(int) data.Kiss = VarOp.Data.(int)
} }

View File

@ -217,6 +217,13 @@ func (ad *GameLogic) NewAccountInsertDataToDB() bool {
Uid: insertId, Uid: insertId,
EventName: "register", EventName: "register",
}) })
G_GameLogicPtr.AddLog(&Log{
Uid: insertId,
EventName: "register_info",
Param: map[string]interface{}{
"username": ad.Db_AccountInfo.UserName,
},
})
return true return true
} }
@ -736,6 +743,7 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
RegisterMsgProcessFunc("ReqFriendTLUpvote", ReqFriendTLUpvote) // 请求时间线点赞 RegisterMsgProcessFunc("ReqFriendTLUpvote", ReqFriendTLUpvote) // 请求时间线点赞
RegisterMsgProcessFunc("ReqAddNpc", ReqAddNpc) // 增加npc RegisterMsgProcessFunc("ReqAddNpc", ReqAddNpc) // 增加npc
RegisterMsgProcessFunc("ReqWishApply", ReqWishApply) // 同意好友心愿单请求 RegisterMsgProcessFunc("ReqWishApply", ReqWishApply) // 同意好友心愿单请求
RegisterMsgProcessFunc("ReqFriendByCode", ReqFriendByCode) // 根据邀请码查询好友
RegisterMsgProcessFunc("ReqSearchPlayer", ReqSearchPlayer) // 搜索好友 RegisterMsgProcessFunc("ReqSearchPlayer", ReqSearchPlayer) // 搜索好友
RegisterMsgProcessFunc("ReqApplyFriend", ReqApplyFriend) // 申请好友 RegisterMsgProcessFunc("ReqApplyFriend", ReqApplyFriend) // 申请好友
@ -800,30 +808,31 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
RegisterMsgProcessFunc("ReqRaceStart", ReqRaceStart) RegisterMsgProcessFunc("ReqRaceStart", ReqRaceStart)
// #region playroom // #region playroom
RegisterMsgProcessFunc("ReqPlayroom", ReqPlayroom) // 请求playroom数据 RegisterMsgProcessFunc("ReqPlayroom", ReqPlayroom) // 请求playroom数据
RegisterMsgProcessFunc("ReqPlayroomInfo", ReqPlayroomInfo) // 请求playroom拜访信息 RegisterMsgProcessFunc("ReqPlayroomInfo", ReqPlayroomInfo) // 请求playroom拜访信息
RegisterMsgProcessFunc("ReqPlayroomDressSet", ReqPlayroomDressSet) // 设置服装 RegisterMsgProcessFunc("ReqPlayroomDressSet", ReqPlayroomDressSet) // 设置服装
RegisterMsgProcessFunc("ReqPlayroomPetAirSet", ReqPlayroomPetAirSet) // 获取宠物空气 RegisterMsgProcessFunc("ReqPlayroomPetAirSet", ReqPlayroomPetAirSet) // 获取宠物空气
RegisterMsgProcessFunc("ReqPlayroomGame", ReqPlayroomGame) // 游戏结果 RegisterMsgProcessFunc("ReqPlayroomGame", ReqPlayroomGame) // 游戏结果
RegisterMsgProcessFunc("ReqPlayroomInteract", ReqPlayroomInteract) // 宠物交互 RegisterMsgProcessFunc("ReqPlayroomInteract", ReqPlayroomInteract) // 宠物交互
RegisterMsgProcessFunc("ReqPlayroomSetRoom", ReqPlayroomSetRoom) // playroom装饰 RegisterMsgProcessFunc("ReqPlayroomSetRoom", ReqPlayroomSetRoom) // playroom装饰
RegisterMsgProcessFunc("ReqPlayroomSelectReward", ReqPlayroomSelectReward) // playroom选择奖励 RegisterMsgProcessFunc("ReqPlayroomSelectReward", ReqPlayroomSelectReward) // playroom选择奖励
RegisterMsgProcessFunc("ReqPlayroomLose", ReqPlayroomLose) // 处理偷取的棋子 RegisterMsgProcessFunc("ReqPlayroomLose", ReqPlayroomLose) // 处理偷取的棋子
RegisterMsgProcessFunc("ReqPlayroomWork", ReqPlayroomWork) // 宠物工作 RegisterMsgProcessFunc("ReqPlayroomWork", ReqPlayroomWork) // 宠物工作
RegisterMsgProcessFunc("ReqPlayroomRest", ReqPlayroomRest) // 宠物休息 RegisterMsgProcessFunc("ReqPlayroomRest", ReqPlayroomRest) // 宠物休息
RegisterMsgProcessFunc("ReqPlayroomDraw", ReqPlayroomDraw) // 转盘 RegisterMsgProcessFunc("ReqPlayroomDraw", ReqPlayroomDraw) // 转盘
RegisterMsgProcessFunc("ReqPlayroomFlip", ReqPlayroomFlip) // 翻牌 RegisterMsgProcessFunc("ReqPlayroomFlip", ReqPlayroomFlip) // 翻牌
RegisterMsgProcessFunc("ReqPlayroomFlipReward", ReqPlayroomFlipReward) // 翻牌奖励 RegisterMsgProcessFunc("ReqPlayroomFlipReward", ReqPlayroomFlipReward) // 翻牌奖励
RegisterMsgProcessFunc("ReqPlayroomChip", ReqPlayroomChip) // 消除碎片 RegisterMsgProcessFunc("ReqPlayroomChip", ReqPlayroomChip) // 消除碎片
RegisterMsgProcessFunc("ReqPlayroomOutline", ReqPlayroomOutline) // 打工离线 RegisterMsgProcessFunc("ReqPlayroomOutline", ReqPlayroomOutline) // 打工离线
RegisterMsgProcessFunc("ReqPlayroomWrokOutline", ReqPlayroomWrokOutline) // 打工离线完成 RegisterMsgProcessFunc("ReqPlayroomWrokOutline", ReqPlayroomWrokOutline) // 打工离线完成
RegisterMsgProcessFunc("ReqPlayroomShop", ReqPlayroomShop) // playroom 商店 RegisterMsgProcessFunc("ReqPlayroomShop", ReqPlayroomShop) // playroom 商店
RegisterMsgProcessFunc("ReqPlayroomBuyItem", ReqPlayroomBuyItem) // 购买playroom物品 RegisterMsgProcessFunc("ReqPlayroomBuyItem", ReqPlayroomBuyItem) // 购买playroom物品
RegisterMsgProcessFunc("ReqPlayroomUpvote", ReqPlayroomUpvote) // 点赞别人的playroom RegisterMsgProcessFunc("ReqPlayroomUpvote", ReqPlayroomUpvote) // 点赞别人的playroom
RegisterMsgProcessFunc("ReqPlayroomUnlock", ReqPlayroomUnlock) // 解锁房间 RegisterMsgProcessFunc("ReqPlayroomUnlock", ReqPlayroomUnlock) // 解锁房间
RegisterMsgProcessFunc("ReqPlayroomTask", ReqPlayroomTask) // playroom任务 RegisterMsgProcessFunc("ReqPlayroomTask", ReqPlayroomTask) // playroom任务
RegisterMsgProcessFunc("ReqPlayroomTaskReward", ReqPlayroomTaskReward) // 领取任务奖励 RegisterMsgProcessFunc("ReqPlayroomTaskReward", ReqPlayroomTaskReward) // 领取任务奖励
RegisterMsgProcessFunc("ReqPlayroomGameShowReward", ReqPlayroomGameShowReward) // 展示游戏结果数据
RegisterMsgProcessFunc("ReqPlayroomGuide", ReqPlayroomGuide) // 展示游戏结果数据
// 宠物宝藏 // 宠物宝藏
RegisterMsgProcessFunc("ReqFriendTreasure", ReqFriendTreasure) // 请求好友宝藏数据 RegisterMsgProcessFunc("ReqFriendTreasure", ReqFriendTreasure) // 请求好友宝藏数据
RegisterMsgProcessFunc("ReqFriendTreasureStart", ReqFriendTreasureStart) // 开始游戏 RegisterMsgProcessFunc("ReqFriendTreasureStart", ReqFriendTreasureStart) // 开始游戏

View File

@ -320,7 +320,7 @@ func ReqGmCommand_(player *Player, Command string) error {
PlayroomBackData(player) PlayroomBackData(player)
case "addChip": case "addChip":
PlayroomMod := player.PlayMod.getPlayroomMod() PlayroomMod := player.PlayMod.getPlayroomMod()
PlayroomMod.AddChip(1, 1) PlayroomMod.AddChip(100100001, 1, 0)
player.PushClientRes(PlayroomMod.NotifyLose()) player.PushClientRes(PlayroomMod.NotifyLose())
case "save": case "save":
player.PlayMod.ClearData(player) player.PlayMod.ClearData(player)
@ -463,7 +463,13 @@ func ReqGmCommand_(player *Player, Command string) error {
} }
} }
player.HandleItem(items, msg.ITEM_POP_LABEL_GM.String()) player.HandleItem(items, msg.ITEM_POP_LABEL_GM.String())
case "resetCompensation":
compensationMod := player.PlayMod.getCompensationMod()
compensationMod.C20250716 = false
case "resetCode":
BaseMod := player.PlayMod.getBaseMod()
BaseMod.AddCode = fmt.Sprintf("MMM-%s-%s", "156", GoUtil.UniqueStringFromInt(int(BaseMod.Uid)))
BackUserInfo(player)
default: default:
return fmt.Errorf("Player %d ReqGmCommand:%v not found", player.M_DwUin, arg) return fmt.Errorf("Player %d ReqGmCommand:%v not found", player.M_DwUin, arg)
} }

View File

@ -397,6 +397,7 @@ func (p *Player) Login() {
FaceMod.Login(PlayBaseMod.GetRegisterTime()) FaceMod.Login(PlayBaseMod.GetRegisterTime())
AvatarMod.Login(PlayBaseMod.GetRegisterTime()) AvatarMod.Login(PlayBaseMod.GetRegisterTime())
HandbookItem := p.PlayMod.getCardMod().Login(G_GameLogicPtr.SeverInfo.OpenTime) HandbookItem := p.PlayMod.getCardMod().Login(G_GameLogicPtr.SeverInfo.OpenTime)
p.Compensation()
p.HandleItem(HandbookItem, msg.ITEM_POP_LABEL_AllCollectRewardHB.String()) p.HandleItem(HandbookItem, msg.ITEM_POP_LABEL_AllCollectRewardHB.String())
} }
@ -708,7 +709,7 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error {
}) })
default: default:
err := ItemMod.AddItem(v.Id, v.Num) err := ItemMod.AddItem(v.Id, v.Num)
p.TeLog("item_change", map[string]interface{}{ p.TeLog("asset_change", map[string]interface{}{
"item_id": v.Id, "item_id": v.Id,
"change_type": change_type, "change_type": change_type,
"change_num": math.Abs(float64(v.Num)), "change_num": math.Abs(float64(v.Num)),
@ -1047,3 +1048,10 @@ func (p *Player) SubCard(Id int) error {
}) })
return nil return nil
} }
func (p *Player) GetIp() string {
if p.GetAgent() == nil {
return ""
}
return p.GetAgent().RemoteAddr().String()
}

View File

@ -72,7 +72,8 @@ func PlayroomBackData(p *Player) {
ChipMessage := make([]*proto.ChipInfo, 0) ChipMessage := make([]*proto.ChipInfo, 0)
for _, v := range PlayroomMod.ChipList { for _, v := range PlayroomMod.ChipList {
ChipMessage = append(ChipMessage, &proto.ChipInfo{ 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)) data := G_GameLogicPtr.GetUserData(int(p.M_DwUin))
@ -147,3 +148,25 @@ func (p *Player) NotifyPlayroomKiss() {
} }
p.PushClientRes(m) p.PushClientRes(m)
} }
func BackUserInfo(p *Player) {
BaseMod := p.PlayMod.getBaseMod()
FaceMod := p.PlayMod.getFaceMod()
AvatarMod := p.PlayMod.getAvatarMod()
DecorateMod := p.PlayMod.getDecorateMod()
p.PushClientRes(&proto.UserInfo{
Uid: p.M_DwUin,
Nickname: BaseMod.NickName,
Avatar: int32(AvatarMod.SetId),
Face: int32(FaceMod.SetId),
DecorateCnt: int32(DecorateMod.DecorateNum),
AvatarList: AvatarMod.BackData(),
FaceList: FaceMod.BackData(),
EmojiList: p.PlayMod.getEmojiMod().BackData(),
SetEmoji: p.PlayMod.getEmojiMod().GetEmojiSet(),
Login: int32(BaseMod.GetLoginTime()),
PetName: BaseMod.PetName,
IdNum: BaseMod.IdCardNum,
AddCode: BaseMod.AddCode,
})
}

View File

@ -177,7 +177,6 @@ func (p *PlayerBaseData) UpdateBaseItemInfo(update *msg.UpdateBaseItemInfo) {
p.Data.LastPlayTime = v p.Data.LastPlayTime = v
} }
} }
} }
func (p *PlayerBaseData) ReqRemoveAd(player *Player, buf []byte) { func (p *PlayerBaseData) ReqRemoveAd(player *Player, buf []byte) {
@ -417,6 +416,9 @@ func (p *PlayerBaseData) ReqSynGameData(player *Player, buf []byte) {
res.ResultCode = 0 res.ResultCode = 0
} }
p.p.TeLog("ReqSynGameData", map[string]interface{}{
"platform_type": "facebook",
})
p.SaveDataFromDB("") p.SaveDataFromDB("")
agent := player.GetAgentByPlayer() agent := player.GetAgentByPlayer()
data, _ := proto.Marshal(res) data, _ := proto.Marshal(res)

View File

@ -212,19 +212,21 @@ func handle(p *Player, m *msg.Msg) error {
PlayroomMod := p.PlayMod.getPlayroomMod() PlayroomMod := p.PlayMod.getPlayroomMod()
Items := m.Item Items := m.Item
GameId := playroom.GAME_TYPE_HOOK GameId := playroom.GAME_TYPE_HOOK
Emoji := 0
if m.Extra != nil { if m.Extra != nil {
if val, ok := m.Extra.(int); ok { if val, ok := m.Extra.(GameResult); ok {
GameId = val GameId = val.T
Emoji = val.Emoji
} }
} }
if len(Items) == 0 { if len(Items) == 0 {
return nil return nil
} }
if GameId == playroom.GAME_TYPE_HOOK { if GameId == playroom.GAME_TYPE_HOOK || GameId == playroom.GAME_TYPE_HIDE {
PlayroomMod.AddChip(m.From, m.SendT) PlayroomMod.AddChip(m.From, m.SendT, Emoji)
p.AddLog(m.From, friend.LOG_TYPE_PLAYROOM_CAT_WIN, fmt.Sprintf("%d_%d", Items[0].Id, Items[0].Num), m.SendT) 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 { } 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_FOOD, -50)
PlayroomMod.AddMood(playroom.MOOD_TYPE_CLEAN, -50) PlayroomMod.AddMood(playroom.MOOD_TYPE_CLEAN, -50)
@ -245,7 +247,13 @@ func handle(p *Player, m *msg.Msg) error {
p.PushClientRes(PlayroomMod.NotifyLose()) p.PushClientRes(PlayroomMod.NotifyLose())
case msg.HANDLE_TYPE_PLAYROOM_GAME: case msg.HANDLE_TYPE_PLAYROOM_GAME:
FriendMod := p.PlayMod.getFriendMod() 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) FriendMod.Interact(m.From, friend.INTERACT_TYPE_VISIT, m.SendT)
case msg.FRIEND_TREASURE_HANDLE: // # 好友宝藏 case msg.FRIEND_TREASURE_HANDLE: // # 好友宝藏
Items := make([]*item.Item, 0) Items := make([]*item.Item, 0)
@ -586,27 +594,6 @@ func CancelOrder(p *Player, OrderSn string) error {
return nil return nil
} }
func BackUserInfo(p *Player) {
BaseMod := p.PlayMod.getBaseMod()
FaceMod := p.PlayMod.getFaceMod()
AvatarMod := p.PlayMod.getAvatarMod()
DecorateMod := p.PlayMod.getDecorateMod()
p.PushClientRes(&proto.UserInfo{
Uid: p.M_DwUin,
Nickname: BaseMod.NickName,
Avatar: int32(AvatarMod.SetId),
Face: int32(FaceMod.SetId),
DecorateCnt: int32(DecorateMod.DecorateNum),
AvatarList: AvatarMod.BackData(),
FaceList: FaceMod.BackData(),
EmojiList: p.PlayMod.getEmojiMod().BackData(),
SetEmoji: p.PlayMod.getEmojiMod().GetEmojiSet(),
Login: int32(BaseMod.GetLoginTime()),
PetName: BaseMod.PetName,
IdNum: BaseMod.IdCardNum,
})
}
func GetCardInfoMsg(CardInfo *card.CardInfo) *proto.ResFriendCard { func GetCardInfoMsg(CardInfo *card.CardInfo) *proto.ResFriendCard {
Uid := 0 Uid := 0
if CardInfo.Type == card.TYPE_CARD_SEND { if CardInfo.Type == card.TYPE_CARD_SEND {
@ -741,9 +728,6 @@ func GetRecommendPlayer(p *Player, Num int) []int {
PlayerList1 := make([]int, 0) PlayerList1 := make([]int, 0)
FriendMod := p.PlayMod.getFriendMod() FriendMod := p.PlayMod.getFriendMod()
for _, v := range PlayerList { for _, v := range PlayerList {
if v.Score < 15 {
continue
}
if v.Uid == int(p.M_DwUin) { if v.Uid == int(p.M_DwUin) {
continue continue
} }
@ -1085,3 +1069,22 @@ func ExcludeCardStar(CardList []int) []int {
} }
return StarList return StarList
} }
func (p *Player) GetPlayroomGameReward(Type, SelectId int) []*item.Item {
PlayroomMod := p.PlayMod.getPlayroomMod()
BaseMod := p.PlayMod.getBaseMod()
Level := BaseMod.GetLevel()
Items := make([]*item.Item, 0)
if Type == playroom.GAME_RESULT_LOSE {
Items = append(Items, item.NewItem(item.ITEM_STAR_ID, 20))
}
if Type == playroom.GAME_RESULT_LOW {
Items = append(Items, item.NewItem(item.ITEM_STAR_ID, Level*2))
}
if Type == playroom.GAME_RESULT_MIDDLE {
Items = append(Items, item.NewItem(item.ITEM_STAR_ID, Level*3))
} else {
Items = PlayroomMod.SelectReward(SelectId)
}
return Items
}

View File

@ -13,6 +13,7 @@ import (
"server/game/mod/charge" "server/game/mod/charge"
"server/game/mod/chess" "server/game/mod/chess"
"server/game/mod/collect" "server/game/mod/collect"
"server/game/mod/compensation"
"server/game/mod/dailyTask" "server/game/mod/dailyTask"
"server/game/mod/decorate" "server/game/mod/decorate"
"server/game/mod/emoji" "server/game/mod/emoji"
@ -77,6 +78,7 @@ type PlayerModList struct {
Emoji emoji.EmojiMod // 表情 Emoji emoji.EmojiMod // 表情
Collect collect.Collect // 收集 Collect collect.Collect // 收集
Activity activity.Activity // 活动 Activity activity.Activity // 活动
Compensation compensation.Compensation // 补偿
} }
func (p *PlayerModData) LoadDataFromDB(dwUin interface{}) bool { func (p *PlayerModData) LoadDataFromDB(dwUin interface{}) bool {
@ -148,7 +150,7 @@ func (p *PlayerModData) InitMod(player *Player) (bool, error) {
BaseMod.FackBookId = PlayerBaseMod.Data.FaceBookId BaseMod.FackBookId = PlayerBaseMod.Data.FaceBookId
is_update = true is_update = true
} }
Ip := p.GetPlayer().GetIp()
p.ModList.Handbook.InitData() p.ModList.Handbook.InitData()
p.ModList.Order.InitData() p.ModList.Order.InitData()
p.ModList.Decorate.InitData() p.ModList.Decorate.InitData()
@ -158,7 +160,7 @@ func (p *PlayerModData) InitMod(player *Player) (bool, error) {
p.ModList.DailyTask.InitData() p.ModList.DailyTask.InitData()
p.ModList.Face.InitData() p.ModList.Face.InitData()
p.ModList.Avatar.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.SevenLogin.InitData()
p.ModList.LimitedTimeEvent.InitData(BaseMod.GetLevel()) p.ModList.LimitedTimeEvent.InitData(BaseMod.GetLevel())
p.ModList.Friend.InitData() p.ModList.Friend.InitData()
@ -361,3 +363,6 @@ func (p *PlayerMod) getCollectMod() *collect.Collect {
func (p *PlayerMod) getActivityMod() *activity.Activity { func (p *PlayerMod) getActivityMod() *activity.Activity {
return &p.mod_list.Activity return &p.mod_list.Activity
} }
func (p *PlayerMod) getCompensationMod() *compensation.Compensation {
return &p.mod_list.Compensation
}

View File

@ -5,6 +5,7 @@ import (
"fmt" "fmt"
"math" "math"
"server/GoUtil" "server/GoUtil"
"server/conf"
cardCfg "server/conf/card" cardCfg "server/conf/card"
collectCfg "server/conf/collect" collectCfg "server/conf/collect"
decorateCfg "server/conf/decorate" decorateCfg "server/conf/decorate"
@ -74,6 +75,7 @@ func ReqPlayerBriefProfileDataFunc(player *Player, buf []byte) error {
// 移除广告 // 移除广告
func ReqRemoveAdFunc(player *Player, buf []byte) error { func ReqRemoveAdFunc(player *Player, buf []byte) error {
player.PlayerBaseMod.ReqRemoveAd(player, buf) player.PlayerBaseMod.ReqRemoveAd(player, buf)
player.TeLog("remove_ad", map[string]interface{}{})
return nil return nil
} }
@ -209,6 +211,10 @@ func RegHandbookAllReward(player *Player, buf []byte) error {
Type: req.Type, Type: req.Type,
}, },
}) })
player.TeLog("collection_all_reward", map[string]interface{}{
"type": req.Type,
"item_list": Items,
})
player.PushClientRes(player.PlayMod.getHandbookMod().BackData()) player.PushClientRes(player.PlayMod.getHandbookMod().BackData())
player.PlayMod.save() player.PlayMod.save()
return nil return nil
@ -571,7 +577,7 @@ func ReqDecorateReward(player *Player, buf []byte) error {
func UpdatePlayerChessDataFunc(player *Player, buf []byte) error { func UpdatePlayerChessDataFunc(player *Player, buf []byte) error {
data := &PlayerChessData{} data := &PlayerChessData{}
err := data.UpdatePlayerChessData(player, buf) err := data.UpdatePlayerChessData(player, buf)
if err != nil { if err == nil {
player.TeLog("outsync_event", map[string]interface{}{ player.TeLog("outsync_event", map[string]interface{}{
"outsync_event": "UpdatePlayerChessDataFunc", "outsync_event": "UpdatePlayerChessDataFunc",
}) })
@ -611,11 +617,11 @@ func ReqGetChessFromBuff(player *Player, buf []byte) error {
Code: msg.RES_CODE_FAIL, Code: msg.RES_CODE_FAIL,
Msg: err.Error(), Msg: err.Error(),
}) })
player.TeLog("outsync_event", map[string]interface{}{
"outsync_event": "ReqGetChessFromBuff",
})
return err return err
} }
player.TeLog("ReqGetChessFromBuff", map[string]interface{}{
"chess_id": ChessId,
})
Update = OrderMod.CreateExtraOrder([]int{ChessId}, AddNewEmit, ChessMod.GetUnlockChessList(), BaseMod.GetEnergyMul()) Update = OrderMod.CreateExtraOrder([]int{ChessId}, AddNewEmit, ChessMod.GetUnlockChessList(), BaseMod.GetEnergyMul())
if Update { if Update {
player.PushClientRes(OrderMod.BackData()) player.PushClientRes(OrderMod.BackData())
@ -651,11 +657,13 @@ func ReqPutChessInBag(player *Player, buf []byte) error {
Code: msg.RES_CODE_FAIL, Code: msg.RES_CODE_FAIL,
Msg: err.Error(), Msg: err.Error(),
}) })
player.TeLog("outsync_event", map[string]interface{}{
"outsync_event": "ReqPutChessInBag",
})
return err return err
} }
player.TeLog("ReqPutChessInBag", map[string]interface{}{
"chess_id": req.ChessId,
"bag_id": req.BagId,
"emit_id": req.EmitId,
})
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(ChessMod.BackData()) player.PushClientRes(ChessMod.BackData())
player.PushClientRes(&msg.ResPutChessInBag{ player.PushClientRes(&msg.ResPutChessInBag{
@ -669,7 +677,7 @@ func ReqTakeChessOutBag(player *Player, buf []byte) error {
req := &msg.ReqTakeChessOutBag{} req := &msg.ReqTakeChessOutBag{}
proto.Unmarshal(buf, req) proto.Unmarshal(buf, req)
ChessMod := player.PlayMod.getChessMod() ChessMod := player.PlayMod.getChessMod()
err := ChessMod.TakeChessOutBag(int(req.BagId)) ChessId, err := ChessMod.TakeChessOutBag(int(req.BagId))
if err != nil { if err != nil {
player.SendErrClienRes(&msg.ResTakeChessOutBag{ player.SendErrClienRes(&msg.ResTakeChessOutBag{
Code: msg.RES_CODE_FAIL, Code: msg.RES_CODE_FAIL,
@ -684,11 +692,12 @@ func ReqTakeChessOutBag(player *Player, buf []byte) error {
Code: msg.RES_CODE_FAIL, Code: msg.RES_CODE_FAIL,
Msg: err.Error(), Msg: err.Error(),
}) })
player.TeLog("outsync_event", map[string]interface{}{
"outsync_event": "ReqTakeChessOutBag",
})
return err return err
} }
player.TeLog("ReqTakeChessOutBag", map[string]interface{}{
"bag_id": req.BagId,
"chess_id": ChessId,
})
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(ChessMod.BackData()) player.PushClientRes(ChessMod.BackData())
player.PushClientRes(&msg.ResTakeChessOutBag{ player.PushClientRes(&msg.ResTakeChessOutBag{
@ -753,11 +762,12 @@ func ReqSeparateChess(player *Player, buf []byte) error {
Code: msg.RES_CODE_FAIL, Code: msg.RES_CODE_FAIL,
Msg: err.Error(), Msg: err.Error(),
}) })
player.TeLog("outsync_event", map[string]interface{}{
"outsync_event": "ReqSeparateChess",
})
return err return err
} }
player.TeLog("ReqSeparateChess", map[string]interface{}{
"chess_id": req.ChessId,
"new_chess": NewChess,
})
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(ChessMod.BackData()) player.PushClientRes(ChessMod.BackData())
player.PushClientRes(&msg.ResSeparateChess{ player.PushClientRes(&msg.ResSeparateChess{
@ -791,11 +801,12 @@ func ReqUpgradeChess(player *Player, buf []byte) error {
Code: msg.RES_CODE_FAIL, Code: msg.RES_CODE_FAIL,
Msg: err.Error(), Msg: err.Error(),
}) })
player.TeLog("outsync_event", map[string]interface{}{
"outsync_event": "ReqUpgradeChess",
})
return err return err
} }
player.TeLog("ReqUpgradeChess", map[string]interface{}{
"chess_id": req.ChessId,
"new_chess": NewChess,
})
Handbook := player.PlayMod.getHandbookMod() Handbook := player.PlayMod.getHandbookMod()
Handbook.SetHandbook(NewChess) Handbook.SetHandbook(NewChess)
triggerComposeChess(player, NewChess, player.PlayMod.getBaseMod().EnergyMul, player.PlayMod.getChessMod().GetEmitList()) triggerComposeChess(player, NewChess, player.PlayMod.getBaseMod().EnergyMul, player.PlayMod.getChessMod().GetEmitList())
@ -806,9 +817,6 @@ func ReqUpgradeChess(player *Player, buf []byte) error {
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
}) })
player.PushClientRes(Handbook.BackData()) player.PushClientRes(Handbook.BackData())
player.TeLog("upgrade_use", map[string]interface{}{
"upgrade_item_id": int(req.ChessId),
})
player.UpdateUserInfo() player.UpdateUserInfo()
return nil return nil
} }
@ -849,9 +857,6 @@ func ReqChessEx(player *Player, buf []byte) error {
Code: msg.RES_CODE_FAIL, Code: msg.RES_CODE_FAIL,
Msg: err.Error(), Msg: err.Error(),
}) })
player.TeLog("outsync_event", map[string]interface{}{
"outsync_event": "ReqChessEx",
})
return err return err
} }
// 限时事件气泡 幸运猫 // 限时事件气泡 幸运猫
@ -886,7 +891,12 @@ func ReqChessEx(player *Player, buf []byte) error {
"star": req.CostStar, "star": req.CostStar,
}) })
} }
player.TeLog("ReqChessEx", map[string]interface{}{
"old_chess_id": int(req.OldChessId),
"new_chess_id": int(req.NewChessId),
"cost_dia": req.CostDia,
"cost_star": req.CostStar,
})
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(ChessMod.BackData()) player.PushClientRes(ChessMod.BackData())
player.PushClientRes(&msg.ResChessEx{ player.PushClientRes(&msg.ResChessEx{
@ -923,12 +933,13 @@ func ReqSourceChest(player *Player, buf []byte) error {
Code: msg.RES_CODE_FAIL, Code: msg.RES_CODE_FAIL,
Msg: err.Error(), Msg: err.Error(),
}) })
player.TeLog("outsync_event", map[string]interface{}{
"outsync_event": "ReqSourceChest",
})
return err return err
} }
player.PlayMod.save() player.PlayMod.save()
player.TeLog("ReqSourceChest", map[string]interface{}{
"chest_id": ChestId,
"item_list": Items,
})
player.PushClientRes(ChessMod.BackData()) player.PushClientRes(ChessMod.BackData())
player.PushClientRes(&msg.ResSourceChest{ player.PushClientRes(&msg.ResSourceChest{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
@ -965,6 +976,10 @@ func ReqCardSeasonFirstReward(player *Player, buf []byte) error {
}) })
return err return err
} }
player.TeLog("ReqCardSeasonFirstReward", map[string]interface{}{
"season_id": CardMod.EndTime,
"item_list": itemList,
})
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(&msg.ResCardSeasonFirstReward{ player.PushClientRes(&msg.ResCardSeasonFirstReward{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
@ -1034,6 +1049,10 @@ func ReqExStarReward(player *Player, buf []byte) error {
}) })
return err return err
} }
player.TeLog("ReqExStarReward", map[string]interface{}{
"ex_star_id": int(req.Id),
"item_list": itemList,
})
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(&msg.ResExStarReward{ player.PushClientRes(&msg.ResExStarReward{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
@ -1071,6 +1090,10 @@ func ReqAllCollectReward(player *Player, buf []byte) error {
return err return err
} }
player.PlayMod.save() player.PlayMod.save()
player.TeLog("ReqAllCollectReward", map[string]interface{}{
"item_list": itemList,
"item_list2": itemList2,
})
player.PushClientRes(CardMod.BackData()) player.PushClientRes(CardMod.BackData())
player.PushClientRes(&msg.ResAllCollectReward{ player.PushClientRes(&msg.ResAllCollectReward{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
@ -1100,6 +1123,10 @@ func ReqGuideReward(player *Player, buf []byte) error {
}) })
return err return err
} }
player.TeLog("ReqGuideReward", map[string]interface{}{
"guide_id": int(req.Id),
"item_list": itemList,
})
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(GuideMod.BackData()) player.PushClientRes(GuideMod.BackData())
player.PushClientRes(&msg.ResGuideReward{ player.PushClientRes(&msg.ResGuideReward{
@ -1165,6 +1192,12 @@ func ReqGetDailyWeekReward(player *Player, buf []byte) error {
}) })
return err return err
} }
player.TeLog("ReqGetDailyWeekReward", map[string]interface{}{
"task_id": int(req.Id),
"item_list": itemList,
"task_type": "week",
"task_score_reward": 0,
})
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(DailyTaskMod.BackData()) player.PushClientRes(DailyTaskMod.BackData())
player.PushClientRes(&msg.ResGetDailyWeekReward{ player.PushClientRes(&msg.ResGetDailyWeekReward{
@ -1233,6 +1266,9 @@ func ReqSetFace(player *Player, buf []byte) error {
player.PushClientRes(&msg.ResSetFace{ player.PushClientRes(&msg.ResSetFace{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
}) })
player.TeLog("face_set", map[string]interface{}{
"face_id": int(req.Face),
})
BackUserInfo(player) BackUserInfo(player)
player.UpdateUserInfo() player.UpdateUserInfo()
return nil return nil
@ -1282,6 +1318,9 @@ func ReqGetEnergyByAD(player *Player, buf []byte) error {
}) })
return err return err
} }
player.TeLog("ReqGetEnergyByAD", map[string]interface{}{
"item_list": Item,
})
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(BaseMod.BackData()) player.PushClientRes(BaseMod.BackData())
player.PushClientRes(&msg.ResGetEnergyByAD{ player.PushClientRes(&msg.ResGetEnergyByAD{
@ -1347,6 +1386,11 @@ func ReqGetMonthLoginReward(player *Player, buf []byte) error {
}) })
return err return err
} }
player.TeLog("ReqGetMonthLoginReward", map[string]interface{}{
"reward_type": "month",
"reward_step": int(req.Id),
"item_list": itemList,
})
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(SevenLoginMod.BackData()) player.PushClientRes(SevenLoginMod.BackData())
player.PushClientRes(&msg.ResGetMonthLoginReward{ player.PushClientRes(&msg.ResGetMonthLoginReward{
@ -1387,6 +1431,12 @@ func ReqFastProduceReward(player *Player, buf []byte) error {
return err return err
} }
player.PlayMod.save() player.PlayMod.save()
player.TeLog("ReqFastProduceReward", map[string]interface{}{
"energy": int(req.Energy),
"item_list": itemList,
"end_time": EndTime,
"times": Times,
})
player.PushClientRes(LimitedTimeEventMod.BackData()) player.PushClientRes(LimitedTimeEventMod.BackData())
player.PushClientRes(&msg.ResFastProduceReward{ player.PushClientRes(&msg.ResFastProduceReward{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
@ -1416,6 +1466,10 @@ func ReqLimitSenceReward(player *Player, buf []byte) error {
}) })
return err return err
} }
player.TeLog("ReqLimitSenceReward", map[string]interface{}{
"event_type": limitedTimeEvent.EVENT_TYPE_SENCE_DASH,
"item_list": Items,
})
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(&msg.ResLimitSenceReward{ player.PushClientRes(&msg.ResLimitSenceReward{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
@ -1559,6 +1613,10 @@ func ReqAgreeFriend(player *Player, buf []byte) error {
Uid: req.Uid, Uid: req.Uid,
Player: G_GameLogicPtr.GetResSimplePlayerByUid(int(req.Uid)), Player: G_GameLogicPtr.GetResSimplePlayerByUid(int(req.Uid)),
}) })
player.TeLog("friend_add", map[string]interface{}{
"player_id": Uid,
"add_type": "agree",
})
player.AddLog(Uid, friend.LOG_TYPE_FRIEND_BECOME, "", GoUtil.Now()) player.AddLog(Uid, friend.LOG_TYPE_FRIEND_BECOME, "", GoUtil.Now())
FriendApplyBackData(player) FriendApplyBackData(player)
PlayroomMod := player.PlayMod.getPlayroomMod() PlayroomMod := player.PlayMod.getPlayroomMod()
@ -1776,6 +1834,9 @@ func ReqRefuseCardGive(player *Player, buf []byte) error {
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
Id: req.Id, Id: req.Id,
}) })
player.TeLog("ReqRefuseCardGive", map[string]interface{}{
"card_id": CardInfo.CardId,
})
m := &MsqMod.Msg{ m := &MsqMod.Msg{
Type: MsqMod.HANDLE_TYPE_REG_CARD_REFUSE, Type: MsqMod.HANDLE_TYPE_REG_CARD_REFUSE,
From: int(player.M_DwUin), From: int(player.M_DwUin),
@ -1813,6 +1874,10 @@ func ReqCardSend(player *Player, buf []byte) error {
player.PushClientRes(&msg.ResCardSend{ player.PushClientRes(&msg.ResCardSend{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
}) })
player.TeLog("card_send", map[string]interface{}{
"card_id": CardId,
"player_id_target": int(req.Uid),
})
player.PushClientRes(CardMod.NotifyCard()) player.PushClientRes(CardMod.NotifyCard())
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(CardMod.NotifyTimes()) player.PushClientRes(CardMod.NotifyTimes())
@ -2181,6 +2246,11 @@ func ReqGetMailReward(player *Player, buf []byte) error {
}) })
return err return err
} }
player.TeLog("mail_reward", map[string]interface{}{
"mail_id": req.Id,
"item_list": itemList,
})
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(MailMod.NotifyMail(int(req.Id))) player.PushClientRes(MailMod.NotifyMail(int(req.Id)))
player.PushClientRes(&msg.ResGetMailReward{ player.PushClientRes(&msg.ResGetMailReward{
@ -2923,6 +2993,7 @@ func ReqMiningTake(player *Player, buf []byte) error {
}) })
return err return err
} }
player.TeLog("ReqMiningTake", map[string]interface{}{})
player.PlayMod.save() player.PlayMod.save()
player.NotifyRed(ACT_TYPE_MINING) player.NotifyRed(ACT_TYPE_MINING)
MiningBackData(player) MiningBackData(player)
@ -3006,6 +3077,10 @@ func ReqGuessColorTake(player *Player, buf []byte) error {
return err return err
} }
GuessColorMod.Take(req.Map.Map, req.OMap) GuessColorMod.Take(req.Map.Map, req.OMap)
player.TeLog("ReqGuessColorTake", map[string]interface{}{
"map": req.Map.Map,
"o_map": req.OMap,
})
player.PlayMod.save() player.PlayMod.save()
GuessColorBackData(player) GuessColorBackData(player)
player.NotifyRed(ACT_TYPE_GUESS_COLOR) player.NotifyRed(ACT_TYPE_GUESS_COLOR)
@ -3041,6 +3116,9 @@ func ReqGuessColorReward(player *Player, buf []byte) error {
}) })
return err return err
} }
player.TeLog("guess_color_finish", map[string]interface{}{
"item_list": itemList,
})
player.PlayMod.save() player.PlayMod.save()
GuessColorBackData(player) GuessColorBackData(player)
return nil return nil
@ -3094,6 +3172,9 @@ func ReqRaceReward(player *Player, buf []byte) error {
return err return err
} }
RaceBackData(player) RaceBackData(player)
player.TeLog("ReqRaceReward", map[string]interface{}{
"item_list": Items,
})
player.PushClientRes(&msg.ResRaceReward{ player.PushClientRes(&msg.ResRaceReward{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
}) })
@ -3124,8 +3205,7 @@ func ReqPlayroomInfo(player *Player, buf []byte) error {
PlayerData := G_GameLogicPtr.GetSimplePlayerByUid(Targer) PlayerData := G_GameLogicPtr.GetSimplePlayerByUid(Targer)
PlayroomMod.SetTarget(Targer) PlayroomMod.SetTarget(Targer)
player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_VISITROOM}) player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_VISITROOM})
if PlayerData.Loginout > 0 && PlayerData.Loginout < GoUtil.Now()-int64(playroomCfg.GetGameOutline()) { // todo DEBUG if PlayerData.Loginout > 0 && PlayerData.Loginout < GoUtil.Now()-int64(playroomCfg.GetGameOutline()) {
log.Debug("ReqPlayroomInfo PlayerData.Loginout:%v, %v", PlayerData.Loginout, playroomCfg.GetGameOutline())
GameType := PlayroomMod.RandGameType() GameType := PlayroomMod.RandGameType()
PlayroomMod.SetGameId(GameType) PlayroomMod.SetGameId(GameType)
Star := min(500, max(PlayerData.Star/10, 10)) Star := min(500, max(PlayerData.Star/10, 10))
@ -3199,6 +3279,10 @@ func ReqPlayroomInteract(player *Player, buf []byte) error {
G_GameLogicPtr.SetUserData(int(player.M_DwUin), VAR_OP_KISS, 0) G_GameLogicPtr.SetUserData(int(player.M_DwUin), VAR_OP_KISS, 0)
LimitedTimePlayroomTrigger_(player, PType) LimitedTimePlayroomTrigger_(player, PType)
player.NotifyPlayroomKiss() player.NotifyPlayroomKiss()
player.TeLog("playroom_interact", map[string]interface{}{
"interact_id": int(req.Id),
"interact_type": int(req.Type),
})
player.PushClientRes(&msg.ResPlayroomInteract{ player.PushClientRes(&msg.ResPlayroomInteract{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
InteractNum: int32(PlayroomMod.InteractNum), InteractNum: int32(PlayroomMod.InteractNum),
@ -3240,21 +3324,8 @@ func ReqPlayroomGame(player *Player, buf []byte) error {
}) })
return fmt.Errorf("no target") return fmt.Errorf("no target")
} }
PlayerData := G_GameLogicPtr.GetSimplePlayerByUid(Target) Items := player.GetPlayroomGameReward(int(req.Type), 0)
Items := make([]*item.Item, 0) PlayroomMod.ResetGame()
if req.Type == playroom.GAME_RESULT_LOSE {
Items = append(Items, item.NewItem(item.ITEM_STAR_ID, 20))
PlayroomMod.ResetGame()
}
if req.Type == playroom.GAME_RESULT_LOW {
Items = append(Items, item.NewItem(item.ITEM_STAR_ID, PlayerData.Level*2))
PlayroomMod.ResetGame()
}
if req.Type == playroom.GAME_RESULT_MIDDLE {
Items = append(Items, item.NewItem(item.ITEM_STAR_ID, PlayerData.Level*3))
PlayroomMod.ResetGame()
}
err := player.HandleItem(Items, msg.ITEM_POP_LABEL_PlayroomGame.String()) err := player.HandleItem(Items, msg.ITEM_POP_LABEL_PlayroomGame.String())
if err != nil { if err != nil {
player.SendErrClienRes(&msg.ResPlayroomGame{ player.SendErrClienRes(&msg.ResPlayroomGame{
@ -3268,6 +3339,10 @@ func ReqPlayroomGame(player *Player, buf []byte) error {
To: Target, To: Target,
Type: MsqMod.HANDLE_TYPE_PLAYROOM_GAME, Type: MsqMod.HANDLE_TYPE_PLAYROOM_GAME,
SendT: GoUtil.Now(), SendT: GoUtil.Now(),
Extra: GameResult{
T: PlayroomMod.GetGameId(),
Emoji: int(req.EmojiId),
},
}) })
player.PlayMod.save() player.PlayMod.save()
ItemsMsg := make(map[int32]*msg.ItemInfo, 0) ItemsMsg := make(map[int32]*msg.ItemInfo, 0)
@ -3277,6 +3352,12 @@ func ReqPlayroomGame(player *Player, buf []byte) error {
Num: int32(v.Num), Num: int32(v.Num),
} }
} }
player.TeLog("playroom_game", map[string]interface{}{
"game_id": PlayroomMod.GetGameId(),
"emoji_id": req.EmojiId,
"game_type": req.Type,
"reward": Items,
})
player.PushClientRes(&msg.ResPlayroomGame{ player.PushClientRes(&msg.ResPlayroomGame{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
Type: req.Type, Type: req.Type,
@ -3290,7 +3371,7 @@ func ReqPlayroomSelectReward(player *Player, buf []byte) error {
req := &msg.ReqPlayroomSelectReward{} req := &msg.ReqPlayroomSelectReward{}
proto.Unmarshal(buf, req) proto.Unmarshal(buf, req)
PlayroomMod := player.PlayMod.getPlayroomMod() PlayroomMod := player.PlayMod.getPlayroomMod()
Items := PlayroomMod.SelectReward(int(req.Id)) Items := player.GetPlayroomGameReward(playroom.GAME_RESULT_HIGH, int(req.Id))
err := player.HandleItem(Items, msg.ITEM_POP_LABEL_PlayroomGame.String()) err := player.HandleItem(Items, msg.ITEM_POP_LABEL_PlayroomGame.String())
if err != nil { if err != nil {
player.SendErrClienRes(&msg.ResPlayroomSelectReward{ player.SendErrClienRes(&msg.ResPlayroomSelectReward{
@ -3299,18 +3380,36 @@ func ReqPlayroomSelectReward(player *Player, buf []byte) error {
}) })
return err return err
} }
GameId := PlayroomMod.GetGameId()
Target := PlayroomMod.GetTarget() Target := PlayroomMod.GetTarget()
if GameId == 0 || Target == 0 {
player.SendErrClienRes(&msg.ResPlayroomSelectReward{
Code: msg.RES_CODE_FAIL,
Msg: "no game or target",
})
return fmt.Errorf("no game or target")
}
G_GameLogicPtr.FriendMgrSend(&MsqMod.Msg{ G_GameLogicPtr.FriendMgrSend(&MsqMod.Msg{
From: int(player.M_DwUin), From: int(player.M_DwUin),
To: Target, To: Target,
Type: MsqMod.HANDLE_TYPE_PLAYROOM_LOSE, Type: MsqMod.HANDLE_TYPE_PLAYROOM_LOSE,
SendT: GoUtil.Now(), SendT: GoUtil.Now(),
Item: Items, Item: Items,
Extra: PlayroomMod.GetGameId(), Extra: GameResult{
T: PlayroomMod.GetGameId(),
Emoji: int(req.EmojiId),
},
}) })
G_GameLogicPtr.SetUserData(Target, VAR_OP_CHIP, 1) G_GameLogicPtr.SetUserData(Target, VAR_OP_CHIP, 1)
PlayroomMod.ResetGame() PlayroomMod.ResetGame()
player.PlayMod.save() player.PlayMod.save()
player.TeLog("playroom_select_reward", map[string]interface{}{
"reward_id": req.Id,
"emoji_id": req.EmojiId,
"game_id": PlayroomMod.GetGameId(),
"reward": Items,
"target_id": Target,
})
PlayroomBackData(player) PlayroomBackData(player)
PlayroomVisit(player, PlayroomMod.GetTarget()) PlayroomVisit(player, PlayroomMod.GetTarget())
player.PushClientRes(&msg.ResPlayroomSelectReward{ player.PushClientRes(&msg.ResPlayroomSelectReward{
@ -3354,7 +3453,9 @@ func ReqPlayroomWork(player *Player, buf []byte) error {
return err return err
} }
player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_PETWORK}) player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_PETWORK})
player.TeLog("playroom_work", map[string]interface{}{
"work_item": Items,
})
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(PlayroomMod.NotifyWork()) player.PushClientRes(PlayroomMod.NotifyWork())
// PlayroomBackData(player) // PlayroomBackData(player)
@ -3369,6 +3470,7 @@ func ReqPlayroomRest(player *Player, buf []byte) error {
PlayroomMod := player.PlayMod.getPlayroomMod() PlayroomMod := player.PlayMod.getPlayroomMod()
PlayroomMod.Rest() PlayroomMod.Rest()
player.PlayMod.save() player.PlayMod.save()
player.TeLog("playroom_rest", map[string]interface{}{})
player.PushClientRes(PlayroomMod.NotifyWork()) player.PushClientRes(PlayroomMod.NotifyWork())
return nil return nil
} }
@ -3428,7 +3530,12 @@ func ReqPlayroomChip(player *Player, buf []byte) error {
}) })
return err return err
} }
G_GameLogicPtr.SetUserData(int(player.M_DwUin), VAR_OP_CHIP, -ChipNum) player.TeLog("playroom_chip", map[string]interface{}{
"chip_num": ChipNum,
"uid": req.Uid,
})
G_GameLogicPtr.SetUserData(int(player.M_DwUin), VAR_OP_CHIP_SET, len(PlayroomMod.ChipList))
player.PlayMod.save() player.PlayMod.save()
PlayroomBackData(player) PlayroomBackData(player)
player.PushClientRes(&msg.ResPlayroomChip{ player.PushClientRes(&msg.ResPlayroomChip{
@ -3497,7 +3604,16 @@ func ReqPlayroomFlipReward(player *Player, buf []byte) error {
Type: MsqMod.HANDLE_TYPE_PLAYROOM_LOSE, Type: MsqMod.HANDLE_TYPE_PLAYROOM_LOSE,
SendT: GoUtil.Now(), SendT: GoUtil.Now(),
Item: Items, Item: Items,
Extra: PlayroomMod.GetGameId(), Extra: GameResult{
T: playroom.GAME_TYPE_FILP,
Emoji: int(req.EmojiId),
},
})
player.TeLog("playroom_flip_reward", map[string]interface{}{
"reward": Items,
"target_id": Target,
"emoji_id": req.EmojiId,
"game_id": playroom.GAME_TYPE_FILP,
}) })
player.PlayMod.save() player.PlayMod.save()
PlayroomBackData(player) PlayroomBackData(player)
@ -3536,8 +3652,10 @@ func ReqPlayroomBuyItem(player *Player, buf []byte) error {
}) })
return err return err
} }
player.TeLog("playroom_buy_item", map[string]interface{}{
"item_id": req.Id,
})
player.PlayMod.save() player.PlayMod.save()
// PlayroomBackData(player)
player.PushClientRes(&msg.ResPlayroomBuyItem{ player.PushClientRes(&msg.ResPlayroomBuyItem{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
}) })
@ -3631,6 +3749,10 @@ func ReqPlayroomTask(player *Player, buf []byte) error {
}) })
return err return err
} }
player.TeLog("playroom_task", map[string]interface{}{
"task_id": req.Id,
"reward": Items,
})
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(&msg.ResPlayroomTask{ player.PushClientRes(&msg.ResPlayroomTask{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
@ -3661,6 +3783,11 @@ func ReqPlayroomTaskReward(player *Player, buf []byte) error {
}) })
return err return err
} }
player.TeLog("playroom_task_reward", map[string]interface{}{
"task_type": req.Type,
"reward_id": Id,
"reward": Items,
})
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(&msg.ResPlayroomTaskReward{ player.PushClientRes(&msg.ResPlayroomTaskReward{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
@ -3779,6 +3906,11 @@ func ReqPlayroomShop(player *Player, buf []byte) error {
}) })
return err return err
} }
player.TeLog("playroom_shop", map[string]interface{}{
"shop_id": req.Id,
"num": req.Num,
"reward": AddItems,
})
player.PlayMod.save() player.PlayMod.save()
PlayroomBackData(player) PlayroomBackData(player)
player.PushClientRes(&msg.ResPlayroomShop{ player.PushClientRes(&msg.ResPlayroomShop{
@ -3812,7 +3944,7 @@ func ReqFriendTreasureStart(player *Player, buf []byte) error {
}) })
return fmt.Errorf("not enough star") return fmt.Errorf("not enough star")
} }
player.TeLog("friend_treasure_start", map[string]interface{}{})
player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_PETTREASURE}) player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_PETTREASURE})
FriendTreasureMod.InitGame(req.List, req.List2) FriendTreasureMod.InitGame(req.List, req.List2)
player.PlayMod.save() player.PlayMod.save()
@ -3856,7 +3988,11 @@ func ReqFriendTreasureFilp(player *Player, buf []byte) error {
) )
return err return err
} }
player.TeLog("friend_treasure_filp", map[string]interface{}{
"pos": req.Pos,
"items": Items,
"uid": Uid,
})
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(&msg.ResFriendTreasureFilp{ player.PushClientRes(&msg.ResFriendTreasureFilp{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
@ -3898,6 +4034,10 @@ func ReqFriendTreasureEnd(player *Player, buf []byte) error {
) )
return err return err
} }
player.TeLog("friend_treasure_end", map[string]interface{}{
"items": Items,
"num": FriendItemNum,
})
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(&msg.ResFriendTreasureEnd{ player.PushClientRes(&msg.ResFriendTreasureEnd{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
@ -3935,6 +4075,10 @@ func ReqCardHandbookReward(player *Player, buf []byte) error {
}) })
return err return err
} }
player.TeLog("card_handbook_reward", map[string]interface{}{
"CardId": int(req.CardId),
"Items": Items,
})
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(&msg.ResCardHandbookReward{ player.PushClientRes(&msg.ResCardHandbookReward{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
@ -3956,6 +4100,10 @@ func ReqSetEmoji(player *Player, buf []byte) error {
}) })
return err return err
} }
player.TeLog("set_emoji", map[string]interface{}{
"Id": int(req.Id),
"Type": int(req.Type),
})
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(&msg.ResSetEmoji{ player.PushClientRes(&msg.ResSetEmoji{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
@ -4222,6 +4370,9 @@ func ReqAddNpc(player *Player, buf []byte) error {
PlayroomMod.AddRoomPointInvite() PlayroomMod.AddRoomPointInvite()
PlayroomMod.AddRoomPointAdd() PlayroomMod.AddRoomPointAdd()
PlayroomBackData(player) PlayroomBackData(player)
player.TeLog("add_npc", map[string]interface{}{
"NpcId": int(req.NpcId),
})
player.AddLog(int(req.NpcId), friend.LOG_TYPE_FRIEND_BECOME_NPC, GoUtil.String(req.NpcId), GoUtil.Now()) player.AddLog(int(req.NpcId), friend.LOG_TYPE_FRIEND_BECOME_NPC, GoUtil.String(req.NpcId), GoUtil.Now())
player.PushClientRes(&msg.ResAddNpc{ player.PushClientRes(&msg.ResAddNpc{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
@ -4268,6 +4419,11 @@ func ReqAddWish(player *Player, buf []byte) error {
return err return err
} }
} }
player.TeLog("wish_add", map[string]interface{}{
"Id": int(req.Id),
"Type": int(req.Type),
"Items": Items,
})
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(&msg.ResAddWish{ player.PushClientRes(&msg.ResAddWish{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
@ -4449,3 +4605,78 @@ func ReqId2Verify(player *Player, buf []byte) error {
}) })
return nil return nil
} }
func ReqFriendByCode(player *Player, buf []byte) error {
req := &msg.ReqFriendByCode{}
proto.Unmarshal(buf, req)
if req.Code == "" {
player.SendErrClienRes(&msg.ResFriendByCode{
Code: msg.RES_CODE_FAIL,
Msg: "code is empty",
})
return fmt.Errorf("code is empty")
}
CodeNum := GoUtil.ParseUniqueStringToInt(req.Code)
if CodeNum <= 0 {
player.SendErrClienRes(&msg.ResFriendByCode{
Code: msg.RES_CODE_FAIL,
Msg: "code is invalid",
})
return fmt.Errorf("code is invalid")
}
Uid := int64(CodeNum) + int64(conf.Server.ServerID*100000) + int64(conf.Server.AppID*100000000)
if Uid == player.M_DwUin {
player.SendErrClienRes(&msg.ResFriendByCode{
Code: msg.RES_CODE_FAIL,
Msg: "can not add yourself",
})
return fmt.Errorf("can not add yourself")
}
PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(int(Uid))
if PlayerSimpleData == nil {
player.SendErrClienRes(&msg.ResFriendByCode{
Code: msg.RES_CODE_FAIL,
Msg: "player not exist",
})
return fmt.Errorf("player not exist")
}
player.PushClientRes(&msg.ResFriendByCode{
Code: msg.RES_CODE_SUCCESS,
Player: PlayerSimpleData,
})
return nil
}
func ReqPlayroomGameShowReward(player *Player, buf []byte) error {
req := &msg.ReqPlayroomGameShowReward{}
proto.Unmarshal(buf, req)
Items := player.GetPlayroomGameReward(int(req.Type), int(req.SelectId))
player.PushClientRes(&msg.ResPlayroomGameShowReward{
Items: item.ItemToMsg(Items),
})
return nil
}
func ReqPlayroomGuide(player *Player, buf []byte) error {
req := &msg.ReqPlayroomGuide{}
proto.Unmarshal(buf, req)
PlayroomMod := player.PlayMod.getPlayroomMod()
err := PlayroomMod.Guide(int(req.Type))
if err != nil {
player.SendErrClienRes(&msg.ResPlayroomGuide{
Code: msg.RES_CODE_FAIL,
Msg: err.Error(),
})
return err
}
player.TeLog("playroom_guide", map[string]interface{}{
"Physiology": req.Type,
})
player.PlayMod.save()
player.PushClientRes(PlayroomMod.NotifyMood())
player.PushClientRes(&msg.ResPlayroomGuide{
Code: msg.RES_CODE_SUCCESS,
})
return nil
}

View File

@ -78,8 +78,9 @@ type ChargeExtra struct {
} }
type GameResult struct { type GameResult struct {
t int // 游戏类型 T int // 游戏类型
r int // 1:赢 2:输 3:平 R int // 1:赢 2:输 3:平
Emoji int // 表情
} }
func init() { func init() {
@ -88,4 +89,8 @@ func init() {
gob.Register(&msg.HandbookMsg{}) gob.Register(&msg.HandbookMsg{})
gob.Register(&limitedTimeEvent.CatTrick{}) gob.Register(&limitedTimeEvent.CatTrick{})
gob.Register(&VarOpration{}) gob.Register(&VarOpration{})
gob.Register(&VarUserData{})
gob.Register(&ActivityInfo{})
gob.Register(&ChargeExtra{})
gob.Register(&GameResult{})
} }

View File

@ -25,9 +25,10 @@ const (
) )
const ( const (
VAR_OP_UPVOTE = 1 VAR_OP_UPVOTE = 1
VAR_OP_CHIP = 2 VAR_OP_CHIP = 2
VAR_OP_KISS = 3 VAR_OP_KISS = 3
VAR_OP_CHIP_SET = 4
) )
func (f *VarMgr) Init() { func (f *VarMgr) Init() {

View File

@ -29,6 +29,11 @@ var AdminFuncMap = map[string]func([]interface{}) error{
} }
func AdminProcess(Func string, args []interface{}) { func AdminProcess(Func string, args []interface{}) {
defer func() {
if r := recover(); r != nil {
GoUtil.SendFeishuFatal(0, Func, fmt.Sprintf("fatal : %s", r))
}
}()
if f, ok := AdminFuncMap[Func]; ok { if f, ok := AdminFuncMap[Func]; ok {
err := f(args) err := f(args)
if err != nil { if err != nil {

View File

@ -3,6 +3,7 @@ package base
import ( import (
"fmt" "fmt"
"server/GoUtil" "server/GoUtil"
"server/conf"
baseCfg "server/conf/base" baseCfg "server/conf/base"
"server/game/mod/item" "server/game/mod/item"
"server/msg" "server/msg"
@ -41,12 +42,21 @@ type Base struct {
Lang msg.LANG_TYPE // 语言 Lang msg.LANG_TYPE // 语言
IdCardName string IdCardName string
IdCardNum string IdCardNum string
AddCode string // 用于添加好友的code
} }
func (b *Base) InitData(Uid int) { func (b *Base) InitData(Uid int, Ip string) {
// b.EnergyMul = 1 if b.AddCode == "" && Ip != "" {
// b.IsFirstBuy = false Code, _ := GoUtil.GetCountryByIP(Ip)
// b.EnergyBuy = 0 CountryCode := conf.Server.CountryCode
if CountryCode == "" {
CountryCode = "000"
}
if Code != "" && len(Code) == 3 {
CountryCode = Code
}
b.AddCode = fmt.Sprintf("MMM-%s-%s", CountryCode, GoUtil.UniqueStringFromInt(Uid))
}
if b.NickName == "" { if b.NickName == "" {
b.NickName = fmt.Sprintf("Player_%d", Uid) b.NickName = fmt.Sprintf("Player_%d", Uid)
} }

View File

@ -435,21 +435,21 @@ func (cb *ChessBorad) PutChessInBag(Grid, ChessId, EmitId int) error {
return nil return nil
} }
func (cb *ChessBorad) TakeChessOutBag(Grid int) error { func (cb *ChessBorad) TakeChessOutBag(Grid int) (int, error) {
if Grid < 0 { if Grid < 0 {
cb.RemoveHonor(-Grid) cb.RemoveHonor(-Grid)
cb.AddChess(-Grid) cb.AddChess(-Grid)
return nil return 0, nil
} }
GridInfo, ok := cb.ChessBag.List[Grid] GridInfo, ok := cb.ChessBag.List[Grid]
if !ok { if !ok {
return errors.New("ChessBag Grid unlock") return 0, errors.New("ChessBag Grid unlock")
} }
if GridInfo.ChessId == 0 { if GridInfo.ChessId == 0 {
return errors.New("ChessBag Grid is empty") return 0, errors.New("ChessBag Grid is empty")
} }
cb.ChessBag.List[Grid] = ChessBagGrid{} cb.ChessBag.List[Grid] = ChessBagGrid{}
return cb.AddChess(GridInfo.ChessId) return GridInfo.ChessId, cb.AddChess(GridInfo.ChessId)
} }
func (cb *ChessBorad) GetOrderEmit() []int { func (cb *ChessBorad) GetOrderEmit() []int {

View File

@ -0,0 +1,66 @@
package compensation
import (
"server/GoUtil"
"server/game/mod/item"
)
type Compensation struct {
C20250716 bool // 2025年7月16日补偿
}
func (c *Compensation) InitData() {
}
func (c *Compensation) Is20250716() bool {
return c.C20250716
}
func (c *Compensation) Set20250716() {
c.C20250716 = true
}
func (c *Compensation) Compensation20250716(UserName string) []*item.Item {
c.Set20250716()
// 获取补偿物品
items := make([]*item.Item, 0, len(Compensation20250716_UserList))
for i := 1; i <= len(Compensation20250716_UserList); i++ {
if GoUtil.InStringArray(UserName, Compensation20250716_UserList[i]) {
return Compensation20250716_Mail_Item[i]
}
}
return items
}
var Compensation20250716_UserList = map[int][]string{
// 大R
1: {"xinshou76", "4920601d6e34e87038919438e242d52e", "93c80508360e35b7571f1a0a03f56a776370cfa0"},
// 中R
2: {"xinshou75", "9c65224bb7ed95148260db8f0fe3a0bd", "2efc5e0f7517c825cd7e4702085f885b", "b559595638f42a679284fef0374a549e", "26e701c36fbb004ee00dcccd9bd8cf0f", "51afdcc7d1b0d60044f3a33389f2c734", "ed0f5c193171226d343eae6996fa5ebf", "5c80e4c852b9a4cd1e28c6bcc04f308f", "48289bca7f497297b885203b2cc037bb", "5de84a24101ee25a3ac33168c8083abe", "a9264ed76dafbed52ed9e7afe63d4129", "051d7f087832091750d7d9cc00a5e04a", "04b4de4d67f2ed0399c6abffb956cade", "41c70beb9f22bada780feada5e62bbd1", "fc085d60508bc2e39fc51e5640d75516", "7c0fcfac6e9e8e056b983a30e4f30a09", "20d4b2aed241eda005679a1671bedeac", "857706a740154c8023ea9201d08b8864", "7f47313cd3dcd45a06ad985f2cb27cae", "057bf7221b86d61cce1f80558b929090", "95328e05928a61493c801e05e9e6270a", "491d7d28ce106938aee8b1e1a19b4ae5", "823943647d9adc4d8ddeb596614c0cfb", "d6ce7a43a045d4cd71dbc687787bd0bf", "c75a5faa056b819ad5bb41f4a3ba4a38", "e5815e97add54cb3ceca7dbd2e45bf97", "2cd42018cf56cb9d5a355aff14137b31", "820b48695d2dac1656a84d73e420178b", "2bf69272d55fb9d9d9e15894fb4694a4", "424ccad8b512d91d2f29c80939424564", "a51377da6a792ff69f6faf937e3417ce", "f5ff321d2b2c073e64042852a15dd9b1", "5d80e08adde8e9d59bc79501b16afe20", "53d8041da3964505857ddd1b3cdecf94", "0cc86c12b97d15019dfe25a3285a3e96", "235eb2c144e5b9edf6c44e8ab96082dd", "ed5bbc10a0fba93e591a35a2ec0291c5", "831ab28d8820675ad109c9b184ce9013", "445007c8ca0cc7a12d44d7abdff5cce3", "63f081723bd0e847d1434f5a04598683", "54e715c5c1f4ed795c9c17593de1b7e7", "addb314c66e16f13ddae30896b96c703", "6fc757735b67cf08a7a5ec3baf2a75a3", "2f50d795ddaab2eab1907b5f252705ac", "2137703e941d639f61aeded20f9dbb2b", "02439d94926af2d1473c75f74a00e119", "bd5f5f3e57bd3924e914cdbbc34cce5c", "ab5b80213f12aaaf6d07be2f1932ec43", "ceeb48146b3ebcad66a4cc036ed54d22", "a71625538207fa2b95bb9e8e21449c43", "a0ce6002bb25c2ae0f090a90018fc54c", "a3f5aef9e7dad7d5aa605a49430835b1", "1cf2a5325fa89bb9bb8be2c8616cb9d7", "b04b3963228f85182b6e62c3ef6d8144", "1e8dde7c182488128a5106c5e2d30b42", "71f91ead33b74f7d45be1e37c519286f", "dead5b7820a93351f2e97fe55c0ea5b4", "8732360803535d860fc16d7911c909a1", "7f957a374879d6a2fb635928ce89a525", "0d8ade527e8f3679392260d07b2912e5", "7bf0a3e6df56f0f209814f6547865f55", "d2438f28296a975d52b7d60d287e84ad", "6cafd1059a6c45a31f19f42ed092d633", "55655483cd1cce10b3461d947062f801", "08e04219504d9f37d32e2cfba2874762", "a3d83249211bc380a8ff97f8ab47583a", "c7b75f7ab09002bd245a6a182cbc18df", "d5ded02c0489e177e8f698e5204cfa3d", "e05933874f35069eb0632a433da36ca7", "684ad5e04c21c5a11ac77f2eda19847a", "bd269aa65aa8db830ecbba58bc64902d", "4ec2fd320c4c5ff36dc52fc88720b395", "863db41256074f9656ebbd46fbd85290", "411ca5c6b78844dea836aa399f42ed27", "f0cb8a1825c417e2f7b06a58cac75143", "fd9df16ee523e74d8003f46e47dcb642", "f4a9060aea89d38e2e3f01660491f5c5", "34ed9d69301c301953b2b88dcd13ee9a", "347376f2bf14f156e24fbc4a7285f81c", "dc264e609290d0f94f3e16ca37bbe0c9", "26347928b465b7ba373e9ba641b48199", "f29998d94e79b86c7c3d8937fa9e91e8", "d23081f6510236f4e4be9fb6d5304a6a", "e6718d5d9280570cc31d7a6473143e38", "8083f7ee7c1258aed3db5f40531c334c", "bcdd1c131475dcea35cab935057772eb", "eeb59425fc240ec52454e7dda9889633", "120e7116d570a2554b65f28e724ae758", "675899c81cfece5caa982844538b0191", "9a08781243dba23cbe85bf47c64aa8c4", "0bf5220563363300c6cf43ed20cb5ae7", "c071328705938dc141c8d646d345bf99", "659d71e3896f2f2c98c86c730d394f0b", "96fe50777f7562384e5d71eb010eae7c", "f621506531e0d8cf2bf343ec87042960", "38738aed39f8cea218bc055b5a400cc3", "970653b0d90e2fd43465f436c27845b5", "d7d93978b35d4af85daba89530bf668a", "5d50835ff8c5fdbecd4e92423b5754d3", "ee5648d165c5bab14896741b632b641b", "0b193cbcc1aa07dee619c5d74fdaf92e", "515701c302a9ac871e5b83af734cbdbc", "276c9182dd46575aeb66aac4cef03b7c", "464483a547102c193a44045c9e68fc54", "f421c2c4e1ef383e96df09476502bdaf", "b34e90cbbc0d6f9bf4d6ef80114c5b73", "7d204e48d8c2615c257c2520769fe6ca"},
// 未付费 18级以上
3: {"xinshou79", "8c22f4e8d8edb80d591e716cf016a01a", "ad154577c6ed0c1234c971931fe44353", "cd5fc4cfb76993f1fb62f430895805b5", "ce2107e0f2d5e7c8095928127da643e9", "d95d63f6cbafa348dca4398c61eb7edc", "3c62b0c0e554a16fc54bd9c09a6c76b7", "af31d50b8c98869e9fde4562de7e3b89", "8b3dd61d65a21da33efd3fb9b0a99b55", "0351a4df40069b71de39a9be8c46e705", "786bf20cb74a4e1b9ddfa3035c96aa34", "7b3a3e96d92b48e6fc7fb8dc54c6f177", "05442D5E8EF144F8", "huang015", "585797c5605a8ad80f677312f3c76d64", "acbe55ba2c95f1cb72f4ed4d598cb4b2", "8770ee5ad6e7180ca831f9b23ae0fb2a", "6dea915a82fed9186e6461d2ed2da2aa", "c6bcac871e44dca717c2fd6fab7480d0", "dc9904a54b46116e6534e2c91b8e5164", "dd59d0d8f0e1384e14635035cf17c668", "379a4d820d6e52a7cb781c8f2d7eef5d", "729b80c2155f49043b266744065b5941", "6b997d889562961b44d62bc3e99b8af5"},
// 未付费 7-17级
4: {"xinshou80", "764abc676187b5fb45cb2218b4076e32", "5c790273c5e51e9b8247f4614f6f4f1f", "bdcde03b4dc399118ce1e546690d8c61", "eaf25de5835afb920984eb09297103dd", "8b321645bb2df7ac618c085c849be2e6", "1f2066cb8fd35f6e8cc00c58f919f012", "f75ef1bf55789c8851338712aa1a3c25", "ac5d178c66ddaad2b04d82183dc902f7", "9baad73794e1e7f6f7284cb3fe679160", "20d207e40820d7879baa0781294ff021", "507416eb227f7f012a728f190537530b", "32beaaad0fa90c6dcafc456663d9d417", "7e4dcb931c89033cceac11a1b24b7d45", "b33892d661937e3bd1c3be62120fbf51", "7aed3a3c4703bf898bc20c360f38d09d", "172a008cab6d3606962bcb7add5b1553", "e838a9130e0bf7e0e2680eb825c0ff5a", "167d1a2c6944c65be30c2feb43bdedea", "fcf00eb8002da8ddc6cc72b9de48de55", "3edb0a525ae8a708d12ce15e8d606351", "2901b8332f6a39785194f52dbdecb420", "8efb7602f08d08351798e60791926d79", "8664fc8e96eea3cff44be59a72980635", "a40fedab76a2912bd896fcd8048a3842", "99c592a99716450e59a910d6c5192c7f", "bc3c3b7ca9e5de311ed337d6c3d617c6", "b12acbb51580947a7c1869070dea0d75", "c0ad232262fb2b912ade9aa1412e5406", "0f7e7c8a43f8f502356329ca4fe01a8d", "1eb7a5f2f9390a36b92488645baa6544", "0d56e34bac14cd02ecf98e880234485b", "cf9152a0206da604126c848e3abe3173", "d6c787411fc914c546092a6a6ee33873", "5c427a9e417dea683874bb9117a83899", "3eafdc409abd63f6fa40fcee615bb886", "ea224eb2ab657afe381535c8935b58dd", "717810be22b82f567e14f00c6eecdae7", "f38ce2b02121c800395a19e28174d3b4", "fcd7bce06319b6a590e04baca8958260", "4c5aca1ed18bd529e92792cc9e82d659", "6695418802da285c421eafc09c48256b", "fcb93bd158d212ec031b6f1ae05ab724", "b701386139828ec8f3a3db11731b0f81", "915d608525150d974f7f85bdf0f7b4e1", "0b2244d9b6c01cbb0daf685080d6d975"},
}
var Compensation20250716_Mail_Item = map[int][]*item.Item{
1: {item.NewItem(item.ITEM_DIAMOND_ID, 500), item.NewItem(item.ITEM_ENERGY_ID, 5000)}, // 大R
2: {item.NewItem(item.ITEM_DIAMOND_ID, 200), item.NewItem(item.ITEM_ENERGY_ID, 3000)}, // 中R
3: {item.NewItem(item.ITEM_DIAMOND_ID, 100), item.NewItem(item.ITEM_ENERGY_ID, 1500)}, // 未付费 18级以上
4: {item.NewItem(item.ITEM_ENERGY_ID, 500)}, // 未付费 7-17级
}
type MailConfig struct {
Title string
Content string
Items []*item.Item
}
var Compensation20250716_Mail_Config = MailConfig{
Title: "Update Issue reply",
Content: `Dear players, sorry about the update issues due to our release process and strategy changessome even lost data. We take this issue very seriously.
We truly appreciate your support, so we've prepared a special compensation just for you. Please check it
We're already working on fixing things to make future updates smoother and more stable.
Thanks again for sticking with us. Enjoy your game! `,
}

View File

@ -62,7 +62,8 @@ type MoneyCat struct {
} }
type LuckyCat struct { type LuckyCat struct {
Earnings int Earnings int
MaxEarings int
} }
type CatTrick struct { type CatTrick struct {
@ -475,8 +476,10 @@ func initEventInfo(E *LTEInfo, EventType int) {
Mul: 1.1, Mul: 1.1,
} }
case EVENT_TYPE_LUCKY_CAT: case EVENT_TYPE_LUCKY_CAT:
MaxEarning := limitedTimeEventCfg.GetLuckyCatMaxEarning(int(E.Remian))
E.D = &LuckyCat{ E.D = &LuckyCat{
Earnings: 0, Earnings: 0,
MaxEarings: MaxEarning,
} }
case EVENT_TYPE_PAYBACK_DAY: case EVENT_TYPE_PAYBACK_DAY:
@ -504,6 +507,10 @@ func addEventInfo(E *LTEInfo, EventType, Duration int) {
Id: len(d.List) + 1, Id: len(d.List) + 1,
Type: limitedTimeEventCfg.GetCatTrickType(Duration), Type: limitedTimeEventCfg.GetCatTrickType(Duration),
}) })
case EVENT_TYPE_LUCKY_CAT:
MaxEarning := limitedTimeEventCfg.GetLuckyCatMaxEarning(Duration)
d := E.D.(*LuckyCat)
d.MaxEarings += MaxEarning
case EVENT_TYPE_PAYBACK_DAY: case EVENT_TYPE_PAYBACK_DAY:
d := E.D.(*PaybackDay) d := E.D.(*PaybackDay)
d.count += limitedTimeEventCfg.GetPaybackDay() d.count += limitedTimeEventCfg.GetPaybackDay()
@ -524,6 +531,9 @@ func getLimitEventMsg(t int, e *LTEInfo) *msg.LimitEvent {
d := e.D.(*MoneyCat) d := e.D.(*MoneyCat)
Cd = int(d.EndTime) Cd = int(d.EndTime)
Mul = d.Mul Mul = d.Mul
case EVENT_TYPE_LUCKY_CAT:
d := e.D.(*LuckyCat)
Param[msg.LimitEventParam_LUCKY_CAT_EARNINGS.String()] = int32(d.MaxEarings)
case EVENT_TYPE_CAT_TRICK: case EVENT_TYPE_CAT_TRICK:
d := e.D.(*CatTrick) d := e.D.(*CatTrick)
Energy := d.Energy Energy := d.Energy

View File

@ -45,6 +45,37 @@ func (m *MailMod) InitData() {
} }
} }
type MailStruct struct {
Title string
SubTitle string
Content string
TitleEn string
SubTitleEn string
ContentEn string
Items []*item.Item
Type int
}
func (m *MailMod) SendMail(mail *MailStruct) int {
if mail == nil {
return 0
}
m.AutoId++
m.List[m.AutoId] = &MailInfo{
Title: mail.Title,
SubTitle: mail.SubTitle,
Content: mail.Content,
TitleEn: mail.TitleEn,
SubTitleEn: mail.SubTitleEn,
ContentEn: mail.ContentEn,
Items: mail.Items,
Send: GoUtil.Now(),
Type: mail.Type,
Status: MAIL_STATUS_IDLE,
}
return m.AutoId
}
// 发送邮件 // 发送邮件
func (m *MailMod) Send(Title, SubTitle, Content, TitleEn, SubTitleEn, ContentEn string, Items []*item.Item, t int) int { func (m *MailMod) Send(Title, SubTitle, Content, TitleEn, SubTitleEn, ContentEn string, Items []*item.Item, t int) int {
m.AutoId++ m.AutoId++

View File

@ -98,8 +98,9 @@ const (
) )
type ChipInfo struct { type ChipInfo struct {
Uid int Uid int
Time int64 Time int64
Emoji int
} }
type Mood struct { type Mood struct {
@ -327,11 +328,11 @@ func (p *PlayroomMod) GetChip() int {
return len(p.ChipList) 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() { if len(p.ChipList) >= playroomCfg.GetChipNum() {
return 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) p.RevengeUid = int64(Uid)
} }
@ -898,3 +899,11 @@ func (p *PlayroomMod) BackDataTask() []*msg.DailyTask {
}) })
return DailyTask return DailyTask
} }
func (p *PlayroomMod) Guide(Type int) error {
if _, ok := p.Physiology[Type]; !ok {
return fmt.Errorf("Guide Type is not ok")
}
p.Physiology[Type].Num = 0
return nil
}

File diff suppressed because it is too large Load Diff