diff --git a/.gitignore b/.gitignore index fdc27c87..ab614cb0 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,6 @@ src/server/test/teLog/* src/server/*.exe* src/server/msg/Gameapi.pb.go src/server/gen-go +src/server/GeoLite2-Country +src/server/test/GeoLite2-Country +src/server/msg/Gameapi_grpc.pb.go diff --git a/src/server/conf/collect/collect_cfg.go b/src/server/conf/collect/collect_cfg.go index 0394fff4..7dd75dfe 100644 --- a/src/server/conf/collect/collect_cfg.go +++ b/src/server/conf/collect/collect_cfg.go @@ -56,3 +56,12 @@ func GetRewardType(Id int) int { } return gamedata.GetIntValue(data, "Type") } + +func GetRewardLen() int { + data, err := gamedata.GetData(CFG_COLLECT) + if err != nil { + log.Debug("GetRewardLen err:%v", err) + return 0 + } + return len(data) +} diff --git a/src/server/conf/daily_task/daily_task_cfg.go b/src/server/conf/daily_task/daily_task_cfg.go index c969b437..a3971b03 100644 --- a/src/server/conf/daily_task/daily_task_cfg.go +++ b/src/server/conf/daily_task/daily_task_cfg.go @@ -24,7 +24,7 @@ func init() { gamedata.InitCfg(DAILY_TASK_REWARD) } -func GetDailyTaskReward(Id, factory, activityId int) []*item.Item { +func GetDailyTaskReward(Id, activityId int) []*item.Item { data, err := gamedata.GetData(DAILY_TASK_REWARD) if err != nil { log.Debug("GetDailyTaskReward err:%v", err) @@ -37,11 +37,9 @@ func GetDailyTaskReward(Id, factory, activityId int) []*item.Item { items := gamedata.GetItemList(v, "ItemID") petCoinBase := gamedata.GetIntValue(v, "PetCoinBase") if petCoinBase > 0 { - petCoinNum := int(float64(petCoinBase) * (float64(factory)/1000 + 1)) - petCoinNum = (petCoinNum/5 + 1) * 5 // 向上取整到5的倍数 items = append(items, &item.Item{ Id: item.ITEM_STAR_ID, - Num: petCoinNum, + Num: petCoinBase, }) } return items diff --git a/src/server/conf/seven_login/seven_login_cfg.go b/src/server/conf/seven_login/seven_login_cfg.go index 8b464349..2b4d7ec9 100644 --- a/src/server/conf/seven_login/seven_login_cfg.go +++ b/src/server/conf/seven_login/seven_login_cfg.go @@ -29,11 +29,11 @@ func GetSevenLoginReward() []*gamedata.SevenLoginRewardData { var result []*gamedata.SevenLoginRewardData for k, v := range data { Id, _ := strconv.Atoi(k) - Diamond := gamedata.GetIntValue(v, "Diamond") + Energy := gamedata.GetFloatValue(v, "Energy") RewardNum := gamedata.GetIntValue(v, "RewardNum") result = append(result, &gamedata.SevenLoginRewardData{ Id: Id, - Diamond: Diamond, + Energy: Energy, RewardNum: RewardNum, }) } @@ -53,11 +53,11 @@ func GetSevenLoginMonthReward(nowMonth int) []*gamedata.SevenLoginRewardData { continue } Id, _ := strconv.Atoi(k) - Diamond := gamedata.GetIntValue(v, "Diamond") + Energy := gamedata.GetFloatValue(v, "Energy") RewardNum := gamedata.GetIntValue(v, "RewardNum") result = append(result, &gamedata.SevenLoginRewardData{ Id: Id, - Diamond: Diamond, + Energy: Energy, RewardNum: RewardNum, }) } @@ -73,7 +73,7 @@ func GetSevenLoginJackpot(IsMonth int) []*gamedata.SevenLoginJackpotData { var result []*gamedata.SevenLoginJackpotData for k, v := range data { Id, _ := strconv.Atoi(k) - Diamond := gamedata.GetIntValue(v, "Diamond") + Energy := gamedata.GetFloatValue(v, "Energy") Type := gamedata.GetIntValue(v, "Type") Month := gamedata.GetIntValue(v, "Month") if IsMonth != Month && IsMonth != 0 { @@ -82,11 +82,11 @@ func GetSevenLoginJackpot(IsMonth int) []*gamedata.SevenLoginJackpotData { ItemMap := gamedata.GetValue(v, "Item") Items := item.ParseItem(ItemMap) result = append(result, &gamedata.SevenLoginJackpotData{ - Id: Id, - Diamond: Diamond, - Items: Items, - Type: Type, - Month: Month, + Id: Id, + Energy: Energy, + Items: Items, + Type: Type, + Month: Month, }) } return result diff --git a/src/server/db/Mysql.go b/src/server/db/Mysql.go index af80a370..e2581d95 100644 --- a/src/server/db/Mysql.go +++ b/src/server/db/Mysql.go @@ -311,6 +311,27 @@ func ResetAccountData(oldName, newName string) error { return err } +func MappingAccountData(oldName, newName string) error { + sqlStr := "UPDATE t_account SET user_name = ? WHERE user_name = ?" + _, err := SqlDb.Exec(sqlStr, "", oldName) + if err != nil { + return err + } + sqlStr = "UPDATE t_player_baseinfo SET user_name = ? WHERE user_name = ?" + _, err = SqlDb.Exec(sqlStr, "", oldName) + if err != nil { + return err + } + sqlStr = "UPDATE t_account SET user_name = ? WHERE user_name = ?" + _, err = SqlDb.Exec(sqlStr, oldName, newName) + if err != nil { + return err + } + sqlStr = "UPDATE t_player_baseinfo SET user_name = ? WHERE user_name = ?" + _, err = SqlDb.Exec(sqlStr, oldName, newName) + return err +} + func UpdateAccountInfoToDb(account *Db_Account) (err error) { _, err = SqlDb.Exec("UPDATE t_account SET user_password = ? WHERE user_name = ?", account.UserPassword, account.UserName) return diff --git a/src/server/game/GameLogic.go b/src/server/game/GameLogic.go index e3ea35e7..f485759a 100644 --- a/src/server/game/GameLogic.go +++ b/src/server/game/GameLogic.go @@ -793,6 +793,7 @@ func (ad *GameLogic) RegisterNetWorkFunc() { // #region 活动 RegisterMsgProcessFunc("ReqActivityReward", ReqActivityReward) // 领取活动奖励 + RegisterMsgProcessFunc("ReqAddGiftReward", ReqAddGiftReward) // 领取加赠活动奖励 // 挖矿 RegisterMsgProcessFunc("ReqMining", ReqMining) // 请求挖矿数据 RegisterMsgProcessFunc("ReqMiningReward", ReqMiningReward) // 领取挖矿奖励 diff --git a/src/server/game/activity_func.go b/src/server/game/activity_func.go index 79bbbe4e..bcce1d93 100644 --- a/src/server/game/activity_func.go +++ b/src/server/game/activity_func.go @@ -307,6 +307,14 @@ func (p *Player) RedBackData() { p.PushClientRes(&msg.ResActRed{Red: result}) } +func (p *Player) GetMiningItemId() int { + ActivityInfo := p.GetActivityInfo(activity.ACT_TYPE_MINING) + if ActivityInfo == nil { + return 0 + } + return miningCfg.GetActivityItemId(ActivityInfo.Id) +} + // 通行证活动数据返回 func (p *Player) ActPassBackData() { ActivityInfo := p.GetActivityInfo(activity.ACT_TYPE_PASS) diff --git a/src/server/game/activity_mgr.go b/src/server/game/activity_mgr.go new file mode 100644 index 00000000..df6c2c82 --- /dev/null +++ b/src/server/game/activity_mgr.go @@ -0,0 +1,60 @@ +package game + +import ( + "server/game/mod/msg" + "sync" +) + +type ActivityMgr struct { + *ServerMod +} + +type ActivityData struct { + List map[int]*ActivityCfg // 玩家排行榜 + mu sync.Mutex +} + +type ActivityCfg struct { + Id int + Type int + Strartime int64 + Endtime int64 + Level int + Title string + MailTitle string + MailContent string + RewardItem map[string]interface{} + Extra map[string]interface{} +} + +const () + +func (r *ActivityMgr) Init() { + r.key = RANK_MGR_KEY + r.data = &ActivityData{ + List: make(map[int]*ActivityCfg, 0), + } + // 注册处理函数 + r.init() +} + +func (r *ActivityMgr) getData() *ActivityData { + return r.data.(*ActivityData) +} + +// 零点更新 重置榜单 +func (r *ActivityMgr) ZeroUpdate(m *msg.Msg) (interface{}, error) { + return nil, nil +} + +func (r ActivityMgr) GetActivityCfg(Id int) ActivityCfg { + // 获取活动配置 + data := r.getData() + data.mu.Lock() + defer data.mu.Unlock() + cfg, ok := data.List[Id] + if !ok { + return ActivityCfg{} + } + return *cfg +} diff --git a/src/server/game/charge_func.go b/src/server/game/charge_func.go index 6daee5de..7c33e90a 100644 --- a/src/server/game/charge_func.go +++ b/src/server/game/charge_func.go @@ -19,6 +19,7 @@ import ( proto "server/msg" "server/pkg/github.com/name5566/leaf/log" "strings" + "time" ) func (p *Player) Charge(ChargeId int) { @@ -46,9 +47,9 @@ func (p *Player) SendCharge(d *ChargeExtra) { func (p *Player) ADPetWorkFire(ChargeId int) { ChargeMod := p.PlayMod.getChargeMod() - Item := ChargeMod.FireAdReward(ChargeId) - if Item != nil { - err := p.HandleItem(Item, proto.ITEM_POP_LABEL_ActivityGift.String()) + items := ChargeMod.FireAdReward(ChargeId) + if items != nil { + err := p.HandleItem(items, proto.ITEM_POP_LABEL_ActivityGift.String()) if err != nil { log.Debug("ChargeFire err : %s", err) return @@ -58,41 +59,37 @@ func (p *Player) ADPetWorkFire(ChargeId int) { p.ChargeBackData() } -func (p *Player) ActivityFire(ChargeId int) { +func (p *Player) ActivityFire(chargeId int) { ActivityMod := p.PlayMod.getActivityMod() - ActivityId := activityCfg.GetActivityGiftId(ChargeId) - ActivityInfo := p.GetActivityInfoById(ActivityId) - if ActivityInfo == nil { - log.Debug("ActivityFire ActivityInfo nil : player id :%d, charge id:%d", p.M_DwUin, ChargeId) + activityId := activityCfg.GetActivityGiftId(chargeId) + activityInfo := p.GetActivityInfoById(activityId) + if activityInfo == nil { + log.Debug("ActivityFire ActivityInfo nil : player id :%d, charge id:%d", p.M_DwUin, chargeId) return } - Item, err := ActivityMod.Fire(ChargeId) + items, err := ActivityMod.Fire(chargeId, activityInfo.Type) if err != nil { log.Debug("ActivityFire err : %s", err) return } - if Item == nil { + if items == nil { + log.Debug("ActivityFire err : %s", err) return } - err = p.HandleItem(Item, proto.ITEM_POP_LABEL_ActivityGift.String()) + err = p.HandleItem(items, proto.ITEM_POP_LABEL_ActivityGift.String()) if err != nil { log.Debug("ChargeFire err : %s", err) return } - if ActivityId == activity.ACT_TYPE_ADD_GIFT { - Items := activityCfg.GetActivityRewardItems(ActivityId) - if len(Items) > 0 { - err = p.HandleItem(Item, proto.ITEM_POP_LABEL_ActTypeAddGift.String()) - if err != nil { - log.Debug("ChargeFire err : %s", err) - return - } + if activityInfo.Type == activity.ACT_TYPE_ADD_GIFT { + if ActivityMod.AddEnd > GoUtil.Now() && !ActivityMod.AddReward { + p.CallEvent(time.Duration(ActivityMod.AddEnd-GoUtil.Now())*time.Second, p.TickActivityAddGift, "activity_add_gift") } } p.TeLog("charge_gift", map[string]interface{}{ - "activity_id": ActivityId, - "charge_id": ChargeId, - "item_list": Item, + "activity_id": activityId, + "charge_id": chargeId, + "item_list": items, }) p.PlayMod.save() p.InitActivity() diff --git a/src/server/game/external.go b/src/server/game/external.go index 4742cbba..d43b7dae 100644 --- a/src/server/game/external.go +++ b/src/server/game/external.go @@ -120,7 +120,7 @@ func HandleClientReq(args []interface{}) { G_GameLogicPtr.SendServerVersion(a) case "ReqRegisterAccount": detail := &msg.ReqRegisterAccount{} - log.Debug("player %s start login", detail.UserName) + log.Debug("player %s start register", detail.UserName) proto.Unmarshal(buf, detail) gl := G_getGameLogic() defer func() { diff --git a/src/server/game/gm_handler.go b/src/server/game/gm_handler.go index 77bf594b..036915a0 100644 --- a/src/server/game/gm_handler.go +++ b/src/server/game/gm_handler.go @@ -131,6 +131,7 @@ func ReqGmCommand_(player *Player, Command string) error { VarMod.WeeklyResetTime = 0 player.ZeroUpdate(nil) G_GameLogicPtr.ZeroFlush() + player.PushClientRes(player.GetDailyTaskMod().BackData()) case "setSevenLoginActive": num, _ := strconv.Atoi(arg[1]) player.PlayMod.getSevenLoginMod().Active = num @@ -591,14 +592,28 @@ func ReqGmCommand_(player *Player, Command string) error { BaseMod.Account = newAccount player.GetPlayerBaseMod().Data.UserName = newAccount player.PushAndSendClienRes(&msg.ForceKickOut{}) + case "mapping": + if len(arg) < 2 { + return fmt.Errorf("mapping command requires an argument") + } + BaseMod := player.PlayMod.getBaseMod() + account := BaseMod.Account + err := db.MappingAccountData(account, arg[1]) + if err != nil { + log.Error("resetPlayer err:%s", err.Error()) + return err + } + log.Debug("player reset: old account: %s; new account %s", account, arg[1]) + BaseMod.Account = "" + player.GetPlayerBaseMod().Data.UserName = "" + player.PushAndSendClienRes(&msg.ForceKickOut{}) + player.ClearData() case "resetCode": BaseMod := player.PlayMod.getBaseMod() BaseMod.AddCode = fmt.Sprintf("MMM-%s-%s", "156", GoUtil.UniqueStringFromInt(int(BaseMod.Uid))) player.BackUserInfo() case "debug": - player.AddPlayroomUpvote(100100129) - i := player.GetPlayroomUpvote(100100129) - log.Debug("debug upvote:%d", i) + player.HandleInUserRank() case "addLimitEvent": Id, _ := strconv.Atoi(arg[1]) Cd, _ := strconv.Atoi(arg[2]) @@ -629,9 +644,15 @@ func ReqGmCommand_(player *Player, Command string) error { GoUtil.NotifyPlayer(GoUtil.Int(PlayerSimpleData.Account), NOTIFY_TYPE_PETROOM_GAME, fmt.Sprintf(title, PlayerSimpleData.PetName), fmt.Sprintf(info, PlayerSimpleData.PetName)) case "resetWeekReward": SevenMod := player.PlayMod.getSevenLoginMod() + SevenMod.WeekResetTime = 0 SevenMod.MonthResetTime = 0 PlayerBaseMod := player.GetPlayerBaseMod() - SevenMod.ZeroUpdate(PlayerBaseMod.GetSevenLoginAdd(), PlayerBaseMod.GetLastLoginTime()) + SevenMod.ZeroUpdate(PlayerBaseMod.GetSevenLoginAdd(), PlayerBaseMod.GetLastLoginTime(), player.GetOrderFactor()) + player.PushClientRes(SevenMod.BackData()) + case "addInvite": + Id, _ := strconv.Atoi(arg[1]) + player.PlayMod.getInviteMod().AddInvite(Id) + player.PushClientRes(player.PlayMod.getInviteMod().NotifySuccess()) case "debugLogoutMsg": ToUid, _ := strconv.Atoi(arg[1]) uidList, err := db.GetDebugPlayer(ToUid) diff --git a/src/server/game/message_handler.go b/src/server/game/message_handler.go index df0c54b2..1779a079 100644 --- a/src/server/game/message_handler.go +++ b/src/server/game/message_handler.go @@ -150,7 +150,10 @@ func (p *Player) handle(m *msg.Msg) error { p.PlayMod.save() case msg.HANDLE_TYPE_INVITE_FRIEND: // 邀请好友 InviteMod := p.PlayMod.getInviteMod() - InviteMod.AddInvite(m.From) + err := InviteMod.AddInvite(m.From) + if err != nil { + return err + } p.AddLog(m.From, friend.LOG_TYPE_FRIEND_INVITE, "", m.SendT) p.PlayMod.save() p.PushClientRes(InviteMod.NotifySuccess()) diff --git a/src/server/game/mod/activity/activity.go b/src/server/game/mod/activity/activity.go index b001afe7..a4d7e194 100644 --- a/src/server/game/mod/activity/activity.go +++ b/src/server/game/mod/activity/activity.go @@ -19,7 +19,7 @@ const ( ACT_TYPE_GUESS_COLOR = 2 // 猜颜色 ACT_TYPE_RACE = 3 // 赛跑 ACT_TYPE_DISCOUNT_GIFT = 4 // 折扣礼包 - ACT_TYPE_ADD_GIFT = 5 // 加送礼包 + ACT_TYPE_ADD_GIFT = 5 // 买一赠一礼包 ACT_TYPE_SUPER_GIFT = 6 // 超值加购礼包 ACT_TYPE_CATNIP = 7 // 猫草大作战 ACT_TYPE_PASS = 8 // 通行证 @@ -33,6 +33,8 @@ const ( type Activity struct { Var map[int]interface{} // 活动数据 + AddEnd int64 // 买一赠一礼包结束时间 + AddReward bool // 买一赠一礼包奖励是否已领取 } type Gift struct { @@ -94,15 +96,26 @@ func (a *Activity) GetActivityStatus(data *gamedata.ActivityData) int { } // 活动礼包-获取奖励 -func (a *Activity) GetReward(ActId int) ([]*item.Item, error) { - Var := a.getGiftVar(ActId) - if !Var.Buy { - return nil, fmt.Errorf("ActId:%d not buy", ActId) +func (a *Activity) GetReward(actId int) ([]*item.Item, error) { + varInfo := a.getGiftVar(actId) + if !varInfo.Buy { + return nil, fmt.Errorf("ActId:%d not buy", actId) } - if Var.Reward { - return nil, fmt.Errorf("ActId:%d reward already get", ActId) + if varInfo.Reward { + return nil, fmt.Errorf("ActId:%d reward already get", actId) } - Var.Reward = true - Var.RewardTime = GoUtil.Now() - return activityCfg.GetActivityRewardItems(ActId), nil + varInfo.Reward = true + varInfo.RewardTime = GoUtil.Now() + return activityCfg.GetActivityRewardItems(actId), nil +} + +func (a *Activity) GetAddGiftReward(aId int) ([]*item.Item, error) { + if a.AddReward { + return nil, fmt.Errorf("AddGift reward already get") + } + if a.AddEnd == 0 { + return nil, fmt.Errorf("AddGift not buy") + } + a.AddReward = true + return activityCfg.GetActivityRewardItems(aId), nil } diff --git a/src/server/game/mod/activity/activity_gift.go b/src/server/game/mod/activity/activity_gift.go index 8f287eda..23875261 100644 --- a/src/server/game/mod/activity/activity_gift.go +++ b/src/server/game/mod/activity/activity_gift.go @@ -3,10 +3,11 @@ package activity import ( activityCfg "server/conf/activity" "server/game/mod/item" + GoUtil "server/game_util" ) // 活动礼包 -func (a *Activity) Fire(Id int) ([]*item.Item, error) { +func (a *Activity) Fire(Id int, atype int) ([]*item.Item, error) { // AId := activityCfg.GetActivityGiftId(Id) // Var := a.getGiftVar(AId) // if Var.Buy { @@ -14,5 +15,8 @@ func (a *Activity) Fire(Id int) ([]*item.Item, error) { // } // Var.Buy = true // Var.Time = GoUtil.Now() + if atype == ACT_TYPE_ADD_GIFT { + a.AddEnd = GoUtil.Now() + 7*86400 + } return activityCfg.GetActivityGiftItems(Id), nil } diff --git a/src/server/game/mod/base/Base.go b/src/server/game/mod/base/Base.go index 28c1201a..0a52df8a 100644 --- a/src/server/game/mod/base/Base.go +++ b/src/server/game/mod/base/Base.go @@ -45,9 +45,15 @@ type Base struct { AddCode string // 用于添加好友的code DiviceId string // 设备id RegisterTime int64 // 注册时间 + CountryCode string // 国家码 } func (b *Base) InitData(Uid int, Ip string) { + if b.CountryCode == "" { + Ip = GoUtil.GetIPFromAddr(Ip) + code, _ := GoUtil.GetCountryByIP(Ip) + b.CountryCode = code + } if b.AddCode == "" && Ip != "" { Code, _ := GoUtil.GetCountryByIP(Ip) CountryCode := conf.Server.CountryCode diff --git a/src/server/game/mod/collect/Collect.go b/src/server/game/mod/collect/Collect.go index d85c5f44..d6eac176 100644 --- a/src/server/game/mod/collect/Collect.go +++ b/src/server/game/mod/collect/Collect.go @@ -22,7 +22,7 @@ const ( COLLECT_TYPE_FACE = 2 COLLECT_TYPE_AVATAR = 3 - jackpotPreviewSize = 18 // 展示的奖池预览数量,同时作为补充阈値 + jackpotPreviewSize = 9 // 展示的奖池预览数量,同时作为补充阈値 ) func (c *Collect) InitData() { @@ -37,49 +37,57 @@ func (c *Collect) InitData() { // ensureJackpot 当奖池剩余少于预览数量时自动补充 func (c *Collect) ensureJackpot() { - if len(c.Jackpot) <= jackpotPreviewSize { - c.Jackpot = initJackpot2(c.Jackpot) + rewardLen := collectCfg.GetRewardLen() + if len(c.Jackpot) <= rewardLen { + loopNum := (rewardLen-len(c.Jackpot))/jackpotPreviewSize + 1 + for i := 0; i < loopNum; i++ { + c.Jackpot = append(c.Jackpot, initJackpot2(nil)...) + } } } // 获取收集奖励 -func (c *Collect) GetReward(Id, Num int) ([]*item.Item, error) { +func (c *Collect) GetReward(id, num, factor int) ([]*item.Item, error) { // 判断是否已领取 for _, v := range c.Reward { - if v == Id { - return nil, fmt.Errorf("id : %d;已领取", Id) + if v == id { + return nil, fmt.Errorf("id : %d;已领取", id) } } - Need := collectCfg.GetRewardNeed(Id) - if Num < Need { - return nil, fmt.Errorf("id : %d;收集数量不足 %d", Id, Need) + need := collectCfg.GetRewardNeed(id) + if num < need { + return nil, fmt.Errorf("id : %d;收集数量不足 %d", id, need) } // 领取奖励 - c.Reward = append(c.Reward, Id) - JackpotId := 0 - JackpotId, c.Jackpot = GoUtil.PopSlice(c.Jackpot) - c.ensureJackpot() - return collectCfg.GetJackpotItems(JackpotId), nil + c.Reward = append(c.Reward, id) + jackpotId := c.Jackpot[id-1] + if jackpotId == 0 { + return nil, fmt.Errorf("id : %d;奖池数据异常", id) + } + items := collectCfg.GetJackpotItems(jackpotId) + items = GoUtil.FormatStarItem(items, factor) + return items, nil } -func (c *Collect) BackData() *msg.ResCollectInfo { - ItemsMsg := make([]*msg.CollectItem, 0, jackpotPreviewSize) - for i := 0; i < jackpotPreviewSize; i++ { - Items := collectCfg.GetJackpotItems(c.Jackpot[i]) - ItemsMsg = append(ItemsMsg, &msg.CollectItem{ - Id: int32(i + 1), - Items: item.ItemToMsg(Items), +func (c *Collect) BackData(factor int) *msg.ResCollectInfo { + itemsMsg := make([]*msg.CollectItem, 0, jackpotPreviewSize) + for k, v := range c.Jackpot { + items := collectCfg.GetJackpotItems(v) + items = GoUtil.FormatStarItem(items, factor) + itemsMsg = append(itemsMsg, &msg.CollectItem{ + Id: int32(k + 1), + Items: item.ItemToMsg(items), }) } return &msg.ResCollectInfo{ Id: GoUtil.IntToInt32(c.Reward), - Items: ItemsMsg, + Items: itemsMsg, } } func initJackpot2(r1 []int) []int { - Ids := collectCfg.GetJackpotId() - r2 := GoUtil.ShuffleArray(Ids) + ids := collectCfg.GetJackpotId() + r2 := GoUtil.ShuffleArray(ids) return append(r1, r2...) } diff --git a/src/server/game/mod/daily_task/DailyFunc.go b/src/server/game/mod/daily_task/DailyFunc.go index 28728d10..55eb6092 100644 --- a/src/server/game/mod/daily_task/DailyFunc.go +++ b/src/server/game/mod/daily_task/DailyFunc.go @@ -9,7 +9,7 @@ import ( ) func getTaskReward(Id, AreaId, activityId int) []*item.Item { - + switch Id { case 2: StarNum := int(50 * math.Pow(1.04, float64(AreaId))) @@ -32,6 +32,7 @@ func randJackpot(jackpot map[int]dailyTaskCfg.Jackpot, num int) map[int][]*item. lastIds1 = Ids1 prevIsCard := 0 valid := true + cardCount := 0 for _, k := range Ids1 { curIsCard := jackpot[k].Is_card if prevIsCard == 1 && curIsCard == 1 { @@ -39,6 +40,12 @@ func randJackpot(jackpot map[int]dailyTaskCfg.Jackpot, num int) map[int][]*item. break } prevIsCard = curIsCard + if curIsCard == 1 { + cardCount++ + } + } + if cardCount < 2 { + continue } if valid { r := make(map[int][]*item.Item, num) diff --git a/src/server/game/mod/daily_task/DailyTask.go b/src/server/game/mod/daily_task/DailyTask.go index 2c629ef8..84406ce0 100644 --- a/src/server/game/mod/daily_task/DailyTask.go +++ b/src/server/game/mod/daily_task/DailyTask.go @@ -3,7 +3,6 @@ package dailyTask import ( "fmt" dailyTaskCfg "server/conf/daily_task" - orderCfg "server/conf/order" "server/game/mod/item" "server/game/mod/quest" GoUtil "server/game_util" @@ -49,46 +48,46 @@ func (dt *DailyTaskMod) Unlock() { dt.Lock = true } -func (dt *DailyTaskMod) LevUpTrigger(Lv, AreaId, dailyAcitivityId int) bool { +func (dt *DailyTaskMod) LevUpTrigger(lv, factor, dailyAcitivityId int) bool { if len(dt.DayTask) != 0 { return false } - dt.ZeroUpdate(Lv, AreaId, dailyAcitivityId) + dt.ZeroUpdate(lv, factor, dailyAcitivityId) return true } -func (dt *DailyTaskMod) ZeroUpdate(Lv, AreaId, activityId int) { - TaskList := dailyTaskCfg.GetTaskList(Lv) - if len(TaskList) <= 0 { +func (dt *DailyTaskMod) ZeroUpdate(lv, factor, activityId int) { + taskList := dailyTaskCfg.GetTaskList(lv) + if len(taskList) <= 0 { return } - TaskListId := GoUtil.GetMapKey(TaskList) - LastTaskId := GoUtil.GetMapKey(dt.lastTask) - TaskList1 := GoUtil.SubSlices(TaskListId, LastTaskId) - TaskId := GoUtil.RandSliceNum(TaskList1, 3) - OrderFactor := orderCfg.GetOrderFactor(AreaId) - for i := 0; i < len(TaskId); i++ { - Id := i + 1 - questStr := TaskList[TaskId[i]] - QuestProgress, err := quest.ParseQuest(questStr) + taskListId := GoUtil.GetMapKey(taskList) + lastTaskId := GoUtil.GetMapKey(dt.lastTask) + taskList1 := GoUtil.SubSlices(taskListId, lastTaskId) + taskId := GoUtil.RandSliceNum(taskList1, 3) + for i := range taskId { + id := i + 1 + questStr := taskList[taskId[i]] + questProgress, err := quest.ParseQuest(questStr) if err != nil { log.Debug("parse quest err str : %s", questStr) } - Items := dailyTaskCfg.GetDailyTaskReward(Id, OrderFactor, activityId) - dt.DayTask[Id] = DailyTask{ - Items: Items, - UnLock: Id == 1, - Quest: QuestProgress, + items := dailyTaskCfg.GetDailyTaskReward(id, activityId) + items = GoUtil.FormatStarItem(items, factor) + dt.DayTask[id] = DailyTask{ + Items: items, + UnLock: id == 1, + Quest: questProgress, } } // 更新 lastTask,下次不重复当前任务 - dt.lastTask = make(map[int]struct{}, len(TaskId)) - for _, id := range TaskId { + dt.lastTask = make(map[int]struct{}, len(taskId)) + for _, id := range taskId { dt.lastTask[id] = struct{}{} } } -func (dt *DailyTaskMod) WeekUpdate() { +func (dt *DailyTaskMod) WeekUpdate(factor int) { jackpot := dailyTaskCfg.GetTaskWeekJackpot() jackpotRand := randJackpot(jackpot, 5) jackpotId := GoUtil.GetMapKey(jackpotRand) @@ -105,7 +104,15 @@ func (dt *DailyTaskMod) WeekUpdate() { Items: []*item.Item{{Id: item.ITEM_FIVE_STAR_CARD_PACK, Num: 1}}, } dt.Active = 0 - dt.WeekReward = weekReward + dt.WeekReward = formatWeekReward(weekReward, factor) +} + +func formatWeekReward(reward map[int]WeekReward, factor int) map[int]WeekReward { + for k, v := range reward { + v.Items = GoUtil.FormatStarItem(v.Items, factor) + reward[k] = v + } + return reward } func (dt *DailyTaskMod) Trigger(Tr *quest.Trigger) bool { @@ -138,32 +145,32 @@ func (dt *DailyTaskMod) Trigger(Tr *quest.Trigger) bool { } func (dt *DailyTaskMod) BackData() *msg.ResDailyTask { - WeekReward := make(map[int32]*msg.DailyWeek) - DailyTask := make(map[int32]*msg.DailyTask) + weekReward := make(map[int32]*msg.DailyWeek) + dailyTask := make(map[int32]*msg.DailyTask) for k, v := range dt.WeekReward { - NeedActive := dailyTaskCfg.GetTaskActiveById(k) - WeekReward[int32(k)] = &msg.DailyWeek{ + needActive := dailyTaskCfg.GetTaskActiveById(k) + weekReward[int32(k)] = &msg.DailyWeek{ Status: v.Status, - NeedActive: int32(NeedActive), + NeedActive: int32(needActive), Items: item.ItemToMsg(v.Items), } } for k, v := range dt.DayTask { - DailyTask[int32(k)] = &msg.DailyTask{ + dailyTask[int32(k)] = &msg.DailyTask{ Status: int32(v.Status), UnLock: v.UnLock, Progress: quest.QuestProgressToMsg(&v.Quest), Items: item.ItemToMsg(v.Items), } } - DayEnd := GoUtil.NextZeroTimestampDuration() - WeekEnd := GoUtil.NextWeekTimestampDuration() + dayEnd := GoUtil.NextZeroTimestampDuration() + weekEnd := GoUtil.NextWeekTimestampDuration() return &msg.ResDailyTask{ - WeekReward: WeekReward, - DailyTask: DailyTask, + WeekReward: weekReward, + DailyTask: dailyTask, Active: int32(dt.Active), - DayEnd: int32(DayEnd), - WeekEnd: int32(WeekEnd), + DayEnd: int32(dayEnd), + WeekEnd: int32(weekEnd), } } @@ -181,8 +188,8 @@ func (dt *DailyTaskMod) GetDailyReward(id, activityId int) ([]*item.Item, error) func (dt *DailyTaskMod) GetWeekReward(id int) ([]*item.Item, error) { if v, ok := dt.WeekReward[id]; ok { - NeedActive := dailyTaskCfg.GetTaskActiveById(id) - if dt.Active < NeedActive { + needActive := dailyTaskCfg.GetTaskActiveById(id) + if dt.Active < needActive { return nil, fmt.Errorf("active not enough") } if !v.Status { @@ -202,8 +209,8 @@ func (dt *DailyTaskMod) GetWeekReward2() []*item.Item { } } if v, ok := dt.WeekReward[maxId]; ok { - NeedActive := dailyTaskCfg.GetTaskActiveById(maxId) - if dt.Active < NeedActive { + needActive := dailyTaskCfg.GetTaskActiveById(maxId) + if dt.Active < needActive { return nil } if !v.Status { diff --git a/src/server/game/mod/friend_treasure.go/friend_treasure.go b/src/server/game/mod/friend_treasure.go/friend_treasure.go index 06823956..05209023 100644 --- a/src/server/game/mod/friend_treasure.go/friend_treasure.go +++ b/src/server/game/mod/friend_treasure.go/friend_treasure.go @@ -66,42 +66,45 @@ func (f *FriendTreasureMod) Flip(Pos int) ([]*item.Item, int64, error) { return nil, 0, fmt.Errorf("game not start") } f.Shift++ - Info := f.List[Pos] - Info.Status = GAME_STATUS_START - if Info.Uid != 0 { - log.Debug("uid:%v", Info.Uid) - f.Uids = append(f.Uids, Info.Uid) + info, ok := f.List[Pos] + if !ok { + return nil, 0, fmt.Errorf("invalid position") } - if Info.Type == FRIEND_TYPE_ALIVE { - ProbMap := friendTreasureCfg.GetChestProb() - Prob := GoUtil.RandMap(ProbMap) - Items := friendTreasureCfg.GetChestItems(Prob) - if Items != nil { - f.BoxItems = append(f.BoxItems, Items...) + info.Status = GAME_STATUS_START + if info.Uid != 0 { + log.Debug("uid:%v", info.Uid) + f.Uids = append(f.Uids, info.Uid) + } + if info.Type == FRIEND_TYPE_ALIVE { + probMap := friendTreasureCfg.GetChestProb() + prob := GoUtil.RandMap(probMap) + items := friendTreasureCfg.GetChestItems(prob) + if items != nil { + f.BoxItems = append(f.BoxItems, items...) } - return Items, Info.Uid, nil + return items, info.Uid, nil } return nil, 0, nil } // 结束游戏 -func (f *FriendTreasureMod) EndGame() ([]*item.Item, int, error) { +func (f *FriendTreasureMod) EndGame(factor int) ([]*item.Item, int, error) { if f.Status == GAME_STATUS_IDLE { return nil, 0, fmt.Errorf("game is over") } // f.Shift++ - ProbAdd := friendTreasureCfg.GetProbAdd(f.Shift) - ItemNum := int(float64(f.Star) * (100.0 + float64(ProbAdd)) / 100.0) - FriendItemNum := ItemNum / 10 - Reward := []*item.Item{ - {Id: item.ITEM_STAR_ID, Num: ItemNum}, + probAdd := friendTreasureCfg.GetProbAdd(f.Shift) + itemNum := int(float64(f.Star) * (100.0 + float64(probAdd)) / 100.0) + friendItemNum := itemNum / 10 + reward := []*item.Item{ + {Id: item.ITEM_STAR_ID, Num: itemNum}, } if f.Shift == 9 { - BigReward := friendTreasureCfg.GetBigReward() - Reward = append(Reward, BigReward...) + bigReward := friendTreasureCfg.GetBigReward() + reward = append(reward, bigReward...) } - - return Reward, FriendItemNum, nil + reward = GoUtil.FormatStarItem(reward, factor) + return reward, friendItemNum, nil } // 重置游戏数据 @@ -119,15 +122,13 @@ func (f *FriendTreasureMod) NotifyStar() *msg.ResFriendTreasureStar { } func (f *FriendTreasureMod) BackData() *msg.ResFriendTreasure { - TreasureInfoList := make([]*msg.TreasureInfo, 0, len(f.List)) - + treasureInfoList := make([]*msg.TreasureInfo, 0, len(f.List)) for _, v := range f.List { - TreasureInfoList = append(TreasureInfoList, v) + treasureInfoList = append(treasureInfoList, v) } - return &msg.ResFriendTreasure{ Status: int32(f.Status), - List: TreasureInfoList, + List: treasureInfoList, List2: f.List2, Star: int32(f.Star), Shift: int32(f.Shift), diff --git a/src/server/game/mod/invite/invite.go b/src/server/game/mod/invite/invite.go index 4db9e05a..1cc26505 100644 --- a/src/server/game/mod/invite/invite.go +++ b/src/server/game/mod/invite/invite.go @@ -19,8 +19,12 @@ func (i *InviteMod) InitData() { } } -func (i *InviteMod) AddInvite(id int) { +func (i *InviteMod) AddInvite(id int) error { + if _, exists := i.InviteList[id]; exists { + return fmt.Errorf("invite already exists") + } i.InviteList[id] = struct{}{} + return nil } func (i *InviteMod) GetReward(Index int) ([]*item.Item, error) { diff --git a/src/server/game/mod/playroom/playroom.go b/src/server/game/mod/playroom/playroom.go index 5c7c8735..b1ecac0b 100644 --- a/src/server/game/mod/playroom/playroom.go +++ b/src/server/game/mod/playroom/playroom.go @@ -701,15 +701,9 @@ func (p *PlayroomMod) GetTaskReward(Type int) (int, []*item.Item, error) { p.DailyTaskReward = append(p.DailyTaskReward, Type) Id := 0 var Items []*item.Item - if Type == DAILY_TASK_TYPE_TWO { - ProbList := limitedTimeEventCfg.GetSenceJackpotProb() - Id = GoUtil.RandMap(ProbList) - Items = limitedTimeEventCfg.GetSenceJackpotReward(Id) - } else { - ProbList := playroomCfg.GetTaskJackpotProb() - Id = GoUtil.RandMap(ProbList) - Items = playroomCfg.GetTaskJackpotReward(Id) - } + ProbList := playroomCfg.GetTaskJackpotProb() + Id = GoUtil.RandMap(ProbList) + Items = playroomCfg.GetTaskJackpotReward(Id) if len(Items) > 1 { // 多个奖励时,随机选择一个 Items = []*item.Item{GoUtil.RandItem(Items)} diff --git a/src/server/game/mod/seven_login/seven_login.go b/src/server/game/mod/seven_login/seven_login.go index a8d09277..ae523bc8 100644 --- a/src/server/game/mod/seven_login/seven_login.go +++ b/src/server/game/mod/seven_login/seven_login.go @@ -30,19 +30,21 @@ func (s *SevenLoginMod) InitData() { } -func (s *SevenLoginMod) ZeroUpdate(Add, LastLoginTime int) { +func (s *SevenLoginMod) ZeroUpdate(Add, LastLoginTime, factor int) { WeekZeroTimestamp := GoUtil.WeekZeroTimestamp() Now := GoUtil.Now() if WeekZeroTimestamp > s.WeekResetTime { RewardType := GoUtil.IfTrue(Now-int64(LastLoginTime) > GoUtil.SEVENDAYS && LastLoginTime > 0, BACK_REWARD, DEFAULT_REWARD).(int) s.IsBack = RewardType == BACK_REWARD s.LoginReward = randWeekReward(Add, RewardType) + s.LoginReward = formatSevenReward(s.LoginReward, factor) s.WeekResetTime = WeekZeroTimestamp s.DayR = 0 } monthZeroTimestamp := GoUtil.MonthZeroTimestamp() if monthZeroTimestamp > s.MonthResetTime { s.MonthReward = randMonthReward() + s.MonthReward = formatSevenReward(s.MonthReward, factor) s.Active = 0 s.MonthResetTime = monthZeroTimestamp } @@ -124,3 +126,13 @@ func (s *SevenLoginMod) BackData() *msg.ResSevenLogin { IsBack: s.IsBack, } } + +func formatSevenReward(reward map[int]Reward, factor int) map[int]Reward { + for k, v := range reward { + v.Item1 = GoUtil.FormatStarItem(v.Item1, factor) + v.Item2 = GoUtil.FormatStarItem(v.Item2, factor) + v.Item3 = GoUtil.FormatStarItem(v.Item3, factor) + reward[k] = v + } + return reward +} diff --git a/src/server/game/mod/seven_login/seven_login_func.go b/src/server/game/mod/seven_login/seven_login_func.go index 5eec7e73..f74f471c 100644 --- a/src/server/game/mod/seven_login/seven_login_func.go +++ b/src/server/game/mod/seven_login/seven_login_func.go @@ -1,6 +1,7 @@ package sevenLogin import ( + "math" "math/rand/v2" sevenLoginCfg "server/conf/seven_login" "server/game/mod/item" @@ -17,111 +18,140 @@ const ( ) func randWeekReward(Add, Type int) map[int]Reward { - RewardList := sevenLoginCfg.GetSevenLoginReward() - sort.Slice(RewardList, func(i, j int) bool { - return RewardList[i].Id < RewardList[j].Id + rewardList := sevenLoginCfg.GetSevenLoginReward() + sort.Slice(rewardList, func(i, j int) bool { + return rewardList[i].Id < rewardList[j].Id }) jackpot := sevenLoginCfg.GetSevenLoginJackpot(0) sort.Slice(jackpot, func(i, j int) bool { - return jackpot[i].Diamond < jackpot[j].Diamond + return jackpot[i].Energy < jackpot[j].Energy }) - RI := make([]int, 0, len(RewardList)) - for _, v := range RewardList { - RI = append(RI, v.Id) + rI := make([]int, 0, len(rewardList)) + for _, v := range rewardList { + rI = append(rI, v.Id) } - CardPackIds := GoUtil.RandSliceNumNonAdjacent(RI, 3) + cardPackIds := GoUtil.RandSliceNumNonAdjacent(rI, 3) result := make(map[int]Reward) - LastType := 0 - EnergyMul := 1.0 + lastType := []int{} + energyMul := 1.0 if Type == BACK_REWARD { - EnergyMul = 2.0 + energyMul = 2.0 } - for _, v := range RewardList { - v.Diamond = int(float64(v.Diamond) * (1 + float64(Add)/100)) - Reward := randReward(v, LastType, jackpot, CardPackIds, 0.5, EnergyMul) - result[v.Id] = Reward + for _, v := range rewardList { + v.Energy = float64(v.Energy) * (1 + float64(Add)/100) + rewardData, randItemType := randReward(v, lastType, jackpot, cardPackIds, 0.5, energyMul) + lastType = randItemType + result[v.Id] = rewardData } return result } -func randReward(RewardData *gamedata.SevenLoginRewardData, LastType int, jackpot []*gamedata.SevenLoginJackpotData, CardPackIds []int, EnergyPer, EnergyMul float64) Reward { +func randReward(rewardData *gamedata.SevenLoginRewardData, lastType []int, jackpot []*gamedata.SevenLoginJackpotData, cardPackIds []int, energyPer, energyMul float64) (Reward, []int) { // 奖励1 体力 体力等价钻石占总价值的50%,且1钻≈2.5体力;体力值四舍五入,需以0或5结尾 - Num := float64(RewardData.Diamond) * EnergyPer * 2.5 - Num = float64(int(Num/5+0.5)) * 5 - RemainDiamond := RewardData.Diamond - int(Num/2.5) - Num = Num * EnergyMul - Item1 := []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, int(Num))} + num := math.Round(float64(rewardData.Energy) * energyPer) + energyNum := float64(int(num/5)) * 5 + remainEnergy := rewardData.Energy - energyNum + // 召回玩家 每日体力数*2 + energyNum = energyNum * energyMul + items1 := []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, int(energyNum))} // 奖励2 - - NewJackpot := make([]*gamedata.SevenLoginJackpotData, 0, len(jackpot)) + newJackpot := make([]*gamedata.SevenLoginJackpotData, 0, len(jackpot)) for _, v := range jackpot { - if v.Diamond <= RemainDiamond && v.Type != LastType && v.Type != JACKPOT_CARD_TYPE { - NewJackpot = append(NewJackpot, v) + if v.Energy <= remainEnergy && !GoUtil.InArray(v.Type, lastType) && v.Type != JACKPOT_CARD_TYPE { + newJackpot = append(newJackpot, v) } } - if len(NewJackpot) == 0 { - return Reward{Item1: Item1} + var items2 []*item.Item + itemType := []int{} + if rewardData.RewardNum == 3 { + remainEnergy -= 5 } - var Item2 []*item.Item - Item2Type := 0 - if RewardData.RewardNum == 3 { - RemainDiamond -= 5 - } - if GoUtil.InArray(RewardData.Id, CardPackIds) { - CardJackpot := make([]*gamedata.SevenLoginJackpotData, 0, len(jackpot)) + if GoUtil.InArray(rewardData.Id, cardPackIds) { + cardJackpot := make([]*gamedata.SevenLoginJackpotData, 0, len(jackpot)) for _, v := range jackpot { - if v.Diamond <= RemainDiamond && v.Type == JACKPOT_CARD_TYPE { - CardJackpot = append(CardJackpot, v) + if v.Energy <= remainEnergy && v.Type == JACKPOT_CARD_TYPE { + cardJackpot = append(cardJackpot, v) } } - if len(CardJackpot) == 0 { - Item2 = []*item.Item{item.NewItem(item.ITEM_DIAMOND_ID, RemainDiamond)} + if len(cardJackpot) == 0 { + items2 = []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, int(remainEnergy))} } else { - Index := rand.IntN(len(CardJackpot)) - Item2Type = CardJackpot[Index].Type - Item2 = CardJackpot[Index].Items - RemainDiamond -= CardJackpot[Index].Diamond + index := rand.IntN(len(cardJackpot)) + itemType = append(itemType, cardJackpot[index].Type) + items2 = cardJackpot[index].Items + remainEnergy -= cardJackpot[index].Energy } } else { - Index := rand.IntN(len(NewJackpot)) - Item2Type = NewJackpot[Index].Type - Item2 = NewJackpot[Index].Items - RemainDiamond -= NewJackpot[Index].Diamond + if len(newJackpot) == 0 { + for _, v := range jackpot { + if v.Energy <= remainEnergy { + newJackpot = append(newJackpot, v) + } + } + if len(newJackpot) == 0 { + items2 = []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, int(remainEnergy))} + return Reward{Item1: items1, Item2: items2}, nil + } + sort.Slice(newJackpot, func(i, j int) bool { + return newJackpot[i].Energy > newJackpot[j].Energy + }) + itemType = append(itemType, newJackpot[0].Type) + return Reward{Item1: items1, Item2: newJackpot[0].Items}, itemType + } + sort.Slice(newJackpot, func(i, j int) bool { + return newJackpot[i].Energy > newJackpot[j].Energy + }) + itemType = append(itemType, newJackpot[0].Type) + items2 = newJackpot[0].Items + remainEnergy -= newJackpot[0].Energy } - var Item3 []*item.Item - if RewardData.RewardNum == 3 { - RemainDiamond += 5 - NewJackpot3 := make([]*gamedata.SevenLoginJackpotData, 0, len(jackpot)) + var items3 []*item.Item + if rewardData.RewardNum == 3 { + remainEnergy += 5 + newJackpot3 := make([]*gamedata.SevenLoginJackpotData, 0, len(jackpot)) for _, v := range jackpot { - if v.Diamond <= RemainDiamond && v.Type != LastType && v.Type != Item2Type { - NewJackpot3 = append(NewJackpot3, v) + if v.Energy <= remainEnergy && !GoUtil.InArray(v.Type, lastType) && !GoUtil.InArray(v.Type, itemType) { + newJackpot3 = append(newJackpot3, v) } } - Index := rand.IntN(len(NewJackpot3)) - Item3 = NewJackpot3[Index].Items + if len(newJackpot3) == 0 { + items3 = []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, int(remainEnergy))} + return Reward{ + Item1: items1, + Item2: items2, + Item3: items3, + }, itemType + } + sort.Slice(newJackpot3, func(i, j int) bool { + return newJackpot3[i].Energy > newJackpot3[j].Energy + }) + items3 = newJackpot3[0].Items + itemType = append(itemType, newJackpot3[0].Type) } return Reward{ - Item1: Item1, - Item2: Item2, - Item3: Item3, - } + Item1: items1, + Item2: items2, + Item3: items3, + }, itemType } func randMonthReward() map[int]Reward { month := GoUtil.NowMonth() - RewardList := sevenLoginCfg.GetSevenLoginMonthReward(month) - sort.Slice(RewardList, func(i, j int) bool { - return RewardList[i].Id < RewardList[j].Id + rewardList := sevenLoginCfg.GetSevenLoginMonthReward(month) + sort.Slice(rewardList, func(i, j int) bool { + return rewardList[i].Id < rewardList[j].Id }) jackpot := sevenLoginCfg.GetSevenLoginJackpot(1) sort.Slice(jackpot, func(i, j int) bool { - return jackpot[i].Diamond < jackpot[j].Diamond + return jackpot[i].Energy < jackpot[j].Energy }) + lastType := []int{} result := make(map[int]Reward) - for _, v := range RewardList { - Reward := randReward(v, 0, jackpot, []int{}, 0.65, 1) - result[v.Id] = Reward + for _, v := range rewardList { + reward, lastItemType := randReward(v, lastType, jackpot, []int{}, 0.65, 1) + lastType = lastItemType + result[v.Id] = reward } return result } diff --git a/src/server/game/mod_factory.go b/src/server/game/mod_factory.go index 12118ed9..cf3ef97b 100644 --- a/src/server/game/mod_factory.go +++ b/src/server/game/mod_factory.go @@ -1,16 +1,19 @@ package game import ( + "server/game/mod/activity" "server/game/mod/base" "server/game/mod/card" "server/game/mod/champship" "server/game/mod/charge" "server/game/mod/chess" + "server/game/mod/collect" dailyTask "server/game/mod/daily_task" "server/game/mod/decorate" "server/game/mod/endless" "server/game/mod/face" "server/game/mod/friend" + friendTreasure "server/game/mod/friend_treasure.go" "server/game/mod/fur" "server/game/mod/item" limitedTimeEvent "server/game/mod/limited_time_event" @@ -95,3 +98,15 @@ func (p *Player) GetDailyTaskMod() *dailyTask.DailyTaskMod { func (p *Player) GetItemMod() *item.ItemMod { return p.PlayMod.getItemMod() } + +func (p *Player) GetFriendTreasureMod() *friendTreasure.FriendTreasureMod { + return p.PlayMod.getFriendTreasureMod() +} + +func (p *Player) GetActivityMod() *activity.Activity { + return p.PlayMod.getActivityMod() +} + +func (p *Player) GetCollectMod() *collect.Collect { + return p.PlayMod.getCollectMod() +} diff --git a/src/server/game/player_base_mod.go b/src/server/game/player_base_mod.go index 3de3f0c2..6a3eca24 100644 --- a/src/server/game/player_base_mod.go +++ b/src/server/game/player_base_mod.go @@ -536,9 +536,8 @@ func (p *PlayerBaseData) AddExp(player *Player, exp int, pexp int) (int, error) upExp, upPExp = userCfg.GetLevUpExp(BaseMod.Level) // 日常任务解锁 DailyTaskMod := player.PlayMod.getDailyTaskMod() - DecorateMod := player.PlayMod.getDecorateMod() dailyAcitivityId := player.GetDailyTaskActivityId() - if DailyTaskMod.LevUpTrigger(BaseMod.Level, DecorateMod.GetAreaId(), dailyAcitivityId) { + if DailyTaskMod.LevUpTrigger(BaseMod.Level, player.GetOrderFactor(), dailyAcitivityId) { player.PushClientRes(DailyTaskMod.BackData()) } upLv = BaseMod.Level diff --git a/src/server/game/player_data.go b/src/server/game/player_data.go index 83362e8d..d7fe5240 100644 --- a/src/server/game/player_data.go +++ b/src/server/game/player_data.go @@ -16,6 +16,7 @@ import ( limitedTimeEventCfg "server/conf/limited_time_event" mergeDataCfg "server/conf/merge_data" miningCfg "server/conf/mining" + orderCfg "server/conf/order" playroomCfg "server/conf/playroom" "server/db" "server/ga" @@ -65,6 +66,9 @@ type Player struct { activity map[int]*ActivityInfo stop bool wg sync.WaitGroup + dispatcherWg sync.WaitGroup + stopOnce sync.Once + msgChanOnce sync.Once func_time int } @@ -79,19 +83,24 @@ type PlayerMsg struct { } func (p *Player) Stop() { - select { - case <-p.stopSignal: - // 通道已经关闭 - return - default: - p.wg.Wait() - close(p.stopSignal) + p.wg.Wait() + p.signalDispatcherStop() + p.msgChanOnce.Do(func() { close(p.msgChan) + }) + for _, timer := range p.timerList { + timer.Stop() } p.McronSave.Stop() p.stop = true } +func (p *Player) signalDispatcherStop() { + p.stopOnce.Do(func() { + close(p.stopSignal) + }) +} + func (p *Player) CallEvent(Duration time.Duration, F func(), Label string) { if v, ok := p.timerList[Label]; ok { v.Stop() @@ -213,6 +222,8 @@ func (p *Player) InitPlayer(UserName string) error { p.timerList = make(map[string]*timer.Timer) p.MDispatr = timer.NewDispatcher(100) p.stopSignal = make(chan bool) + p.stopOnce = sync.Once{} + p.msgChanOnce = sync.Once{} Base := &PlayerBaseData{p: p} // 玩家基础数据 @@ -273,6 +284,8 @@ func (p *Player) InitPlayerByUid(Uid int) error { p.timerList = make(map[string]*timer.Timer) p.MDispatr = timer.NewDispatcher(100) p.stopSignal = make(chan bool) + p.stopOnce = sync.Once{} + p.msgChanOnce = sync.Once{} Base := &PlayerBaseData{p: p} // 玩家基础数据 @@ -356,7 +369,7 @@ func (p *Player) ZeroUpdate(a []interface{}) { p.PushClientRes(p.PlayMod.getBaseMod().BackData()) // 七日签到 - p.PlayMod.getSevenLoginMod().ZeroUpdate(PlayerBaseMod.GetSevenLoginAdd(), PlayerBaseMod.GetLastLoginTime()) + p.PlayMod.getSevenLoginMod().ZeroUpdate(PlayerBaseMod.GetSevenLoginAdd(), PlayerBaseMod.GetLastLoginTime(), p.GetOrderFactor()) p.PushClientRes(p.PlayMod.getSevenLoginMod().BackData()) // 礼包充值 @@ -389,7 +402,7 @@ func (p *Player) ZeroUpdate(a []interface{}) { p.ActivityZeroUpdate() // 每日任务 - p.PlayMod.getDailyTaskMod().ZeroUpdate(p.GetPlayerBaseMod().GetLevel(), p.PlayMod.getDecorateMod().GetAreaId(), p.GetDailyTaskActivityId()) + p.PlayMod.getDailyTaskMod().ZeroUpdate(p.GetPlayerBaseMod().GetLevel(), p.GetOrderFactor(), p.GetDailyTaskActivityId()) p.PushClientRes(p.PlayMod.getDailyTaskMod().BackData()) p.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_LOGIN}) @@ -400,7 +413,7 @@ func (p *Player) ZeroUpdate(a []interface{}) { if VarMod.WeeklyResetTime < weekZeroTimestamp { VarMod.WeeklyResetTime = weekZeroTimestamp VarMod.WeeklyVar = make(map[int]interface{}) - p.PlayMod.getDailyTaskMod().WeekUpdate() + p.PlayMod.getDailyTaskMod().WeekUpdate(p.GetOrderFactor()) p.PushClientRes(p.PlayMod.getDailyTaskMod().BackData()) p.PlayMod.getLimitedTimeEventMod().WeekUpdate() @@ -922,6 +935,18 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error { "change_after": ItemMod.GetItem(v.Id), "change_reason": Label, }) + if v.Id == p.GetMiningItemId() { + ActivityInfo := p.GetActivityInfo(activity.ACT_TYPE_MINING) + aId := 0 + if ActivityInfo != nil { + aId = ActivityInfo.Id + } + p.TeLog("get_token", map[string]interface{}{ + "obtain_way": Label, + "get_num": v.Num, + "event_id": aId, + }) + } if err != nil { return err } @@ -1011,6 +1036,8 @@ func (p *Player) InitPlayerOnly() { p.timerList = make(map[string]*timer.Timer) p.MDispatr = timer.NewDispatcher(10) p.stopSignal = make(chan bool) + p.stopOnce = sync.Once{} + p.msgChanOnce = sync.Once{} Base := &PlayerBaseData{p: p} @@ -1111,6 +1138,9 @@ func (p *Player) HandleInUserRank() { Uid: int(p.M_DwUin), Score: float64(Score), RankType: RANK_TYPE_USER, + Extra: map[string]interface{}{ + "country": p.PlayMod.getBaseMod().CountryCode, + }, }, } G_GameLogicPtr.RankMgrSend(m) @@ -1212,6 +1242,10 @@ func (p *Player) InitActivity() { if minduration > 0 { p.CallEvent(time.Duration(minduration)*time.Second, p.TickActivity, "init_activity") } + ActivityMod = p.PlayMod.getActivityMod() + if ActivityMod.AddEnd > now && !ActivityMod.AddReward { + p.CallEvent(time.Duration(ActivityMod.AddEnd-now)*time.Second, p.TickActivityAddGift, "init_activity_add_gift") + } p.TeLog("activity_ids", map[string]interface{}{ "info": p.activity, }) @@ -1229,6 +1263,30 @@ func (p *Player) TickActivity() { p.SendClientRes() } +func (p *Player) TickActivityAddGift() { + p.lock.Lock() + defer p.lock.Unlock() + ActivityMod := p.PlayMod.getActivityMod() + activityInfo := p.GetActivityInfo(activity.ACT_TYPE_ADD_GIFT) + if activityInfo == nil { + log.Error("tick activity add gift error! activity end!") + return + } + items, err := ActivityMod.GetAddGiftReward(activityInfo.Id) + if err != nil { + log.Error("tick activity add gift error! get reward failed! activity id: %d, err: %v", activityInfo.Id, err) + return + } + err = p.HandleItem(items, msg.ITEM_POP_LABEL_ActTypeAddGift.String()) + if err != nil { + log.Error("tick activity add gift error! handle reward failed! activity id: %d, err: %v", activityInfo.Id, err) + return + } + p.PlayMod.save() + p.BackDataActivity() + p.SendClientRes() +} + func (p *Player) BackDataActivity() { ResActivityList := make([]*msg.ActivityInfo, 0) for _, v := range p.activity { @@ -1243,9 +1301,11 @@ func (p *Player) BackDataActivity() { Red: int32(Red), }) } - + ActivityMod := p.PlayMod.getActivityMod() p.PushClientRes(&msg.ResActivity{ ActiveList: ResActivityList, + AddEnd: ActivityMod.AddEnd, + AddReward: ActivityMod.AddReward, }) } @@ -1345,7 +1405,9 @@ func (p *Player) func_exec_add() error { } func (p *Player) DispatcherHandle() { + p.dispatcherWg.Add(1) go func() { + defer p.dispatcherWg.Done() var cb *timer.Timer for { select { @@ -1399,3 +1461,7 @@ func (p *Player) FixPlayroomPyhical() { } } } + +func (p *Player) GetOrderFactor() int { + return orderCfg.GetOrderFactor(p.GetDecorateMod().AreaId) +} diff --git a/src/server/game/rank_mgr.go b/src/server/game/rank_mgr.go index ed969059..be26812d 100644 --- a/src/server/game/rank_mgr.go +++ b/src/server/game/rank_mgr.go @@ -48,6 +48,7 @@ type RankMsg struct { Uid int Score float64 RankType int + Extra map[string]interface{} } func (r *RankMgr) Init() { @@ -100,13 +101,25 @@ func (r *RankMgr) getRank(RankType int) []*Rank { // 获取排行榜信息 func (r *RankMgr) getRankInfo(m *msg.Msg) (interface{}, error) { - data := m.Extra.(RankMsg) + data, ok := m.Extra.(map[string]interface{}) + if !ok { + return &RankInfo{ + List: []*Rank{}, + MyRank: 0, + MyScore: 0, + }, nil + } // 全球排行榜 - if data.RankType == RANK_TYPE_GLOBAL { + rank_type := RANK_TYPE_GLOBAL + info, ok := data["rank_type"] + if ok { + rank_type = GoUtil.Int(info) + } + if rank_type == RANK_TYPE_GLOBAL { return r.getRedisRankInfo(m) } // 国家排行榜 - if data.RankType == RANK_TYPE_USER { + if rank_type == RANK_TYPE_USER { return r.getRedisCountryRankInfo(m) } return &RankInfo{ @@ -117,7 +130,16 @@ func (r *RankMgr) getRankInfo(m *msg.Msg) (interface{}, error) { } func (r *RankMgr) getRedisCountryRankInfo(m *msg.Msg) (interface{}, error) { - RedisKey := fmt.Sprintf("%s_%s", RANK_COUNTRY_USER, conf.Server.CountryCode) + data, ok := m.Extra.(map[string]interface{}) + if !ok { + return &RankInfo{}, nil + } + country := "000" + info, ok := data["country"] + if ok && info != "" { + country = info.(string) + } + RedisKey := fmt.Sprintf("%s_%s", RANK_COUNTRY_USER, country) RedisList, err := db.RedisZRevRangeWithScores(RedisKey, 0, 100) if err != nil { return &RankInfo{}, nil @@ -167,16 +189,22 @@ func (r *RankMgr) getRedisRankInfo(m *msg.Msg) (interface{}, error) { // 进入排行榜 func (r *RankMgr) inRank(m *msg.Msg) (interface{}, error) { - data := m.Extra.(RankMsg) + data, ok := m.Extra.(RankMsg) + if !ok { + return nil, fmt.Errorf("invalid rank msg") + } if data.RankType == RANK_TYPE_USER { // 全球玩家排行榜 Uid := strconv.Itoa(data.Uid) TimeSort := fmt.Sprintf("0.%d", RANK_TIME_SORT-GoUtil.Now()) TimeSortF, _ := strconv.ParseFloat(TimeSort, 64) db.RedisZAdd(RANK_USER, Uid, data.Score+TimeSortF) - + info, ok := data.Extra["country"] + if !ok || info == "" { + info = "000" + } // 地区玩家排行榜 - RedisKey := fmt.Sprintf("%s_%s", RANK_COUNTRY_USER, conf.Server.CountryCode) + RedisKey := fmt.Sprintf("%s_%s", RANK_COUNTRY_USER, info) db.RedisZAdd(RedisKey, Uid, data.Score+TimeSortF) } diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index 4fb5eefe..b0e02bd4 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -2334,10 +2334,14 @@ func ReqRank(player *Player, buf []byte) error { if err != nil { return err } + BaseMod := player.PlayMod.getBaseMod() m := &MsqMod.Msg{ - From: int(player.M_DwUin), - Type: MsqMod.HANDLE_TYPE_RANK_INFO, - Extra: RankMsg{RankType: int(req.Type)}, + From: int(player.M_DwUin), + Type: MsqMod.HANDLE_TYPE_RANK_INFO, + Extra: map[string]interface{}{ + "country": BaseMod.CountryCode, + "rank_type": int(req.Type), + }, SendT: GoUtil.Now(), } RankInfo := G_GameLogicPtr.RankMgrCall(m).(*RankInfo) @@ -3207,9 +3211,15 @@ func ReqMiningReward(player *Player, buf []byte) error { }) return err } - player.TeLog("mining_finish", map[string]interface{}{ + ActivityInfo := player.GetActivityInfo(activity.ACT_TYPE_MINING) + aId := 0 + if ActivityInfo != nil { + aId = ActivityInfo.Id + } + player.TeLog("finish_level", map[string]interface{}{ "expend_token_num": Mining, - "level_ID": MiningMod.Pass - 1, + "level_id": MiningMod.Pass - 1, + "event_id": aId, }) player.PushClientRes(&msg.ResMiningReward{ Code: msg.RES_CODE_SUCCESS, @@ -4313,7 +4323,7 @@ func ReqFriendTreasureFilp(player *Player, buf []byte) error { func ReqFriendTreasureEnd(player *Player, buf []byte) error { FriendTreasureMod := player.PlayMod.getFriendTreasureMod() - Items, FriendItemNum, err := FriendTreasureMod.EndGame() + Items, FriendItemNum, err := FriendTreasureMod.EndGame(player.GetOrderFactor()) if err != nil { player.SendErrClienRes( &msg.ResFriendTreasureEnd{ @@ -4446,7 +4456,7 @@ func ReqSetEmoji(player *Player, buf []byte) error { // 请求收藏室内 func ReqCollectInfo(player *Player, buf []byte) error { CollectMod := player.PlayMod.getCollectMod() - player.PushClientRes(CollectMod.BackData()) + player.PushClientRes(CollectMod.BackData(player.GetOrderFactor())) return nil } @@ -4472,7 +4482,7 @@ func ReqCollect(player *Player, buf []byte) error { AreaType = "avatar" Num = player.PlayMod.getAvatarMod().GetAvatarNum() } - Items, err := CollectMod.GetReward(int(req.Id), Num) + Items, err := CollectMod.GetReward(int(req.Id), Num, player.GetOrderFactor()) if err != nil { player.SendErrClienRes(&msg.ResCollect{ Code: msg.RES_CODE_FAIL, @@ -4489,7 +4499,7 @@ func ReqCollect(player *Player, buf []byte) error { return err } player.PlayMod.save() - player.PushClientRes(CollectMod.BackData()) + player.PushClientRes(CollectMod.BackData(player.GetOrderFactor())) player.PushClientRes(&msg.ResCollect{ Code: msg.RES_CODE_SUCCESS, }) @@ -4611,6 +4621,47 @@ func ReqLimitEventLuckyCat(player *Player, buf []byte) error { return nil } +// 领取加赠活动奖励 +func ReqAddGiftReward(player *Player, buf []byte) error { + req := &msg.ReqAddGiftReward{} + err := proto.Unmarshal(buf, req) + if err != nil { + return err + } + activityInfo := player.GetActivityInfo(activity.ACT_TYPE_ADD_GIFT) + if activityInfo == nil { + player.SendErrClienRes(&msg.ResActivityReward{ + Code: msg.RES_CODE_FAIL, + Msg: "activity not exist", + }) + return fmt.Errorf("activity not exist") + } + ActivityMod := player.PlayMod.getActivityMod() + items, err := ActivityMod.GetAddGiftReward(activityInfo.Id) + if err != nil { + player.SendErrClienRes(&msg.ResAddGiftReward{ + Code: msg.RES_CODE_FAIL, + Msg: err.Error(), + }) + return err + } + err = player.HandleItem(items, msg.ITEM_POP_LABEL_ActTypeAddGift.String()) + if err != nil { + player.SendErrClienRes(&msg.ResAddGiftReward{ + Code: msg.RES_CODE_FAIL, + Msg: err.Error(), + }) + return err + } + player.PlayMod.save() + player.BackDataActivity() + player.PushClientRes(&msg.ResAddGiftReward{ + Code: msg.RES_CODE_SUCCESS, + }) + return nil + +} + func ReqActivityReward(player *Player, buf []byte) error { req := &msg.ReqActivityReward{} err := proto.Unmarshal(buf, req) diff --git a/src/server/game/server_mod.go b/src/server/game/server_mod.go index 43757e59..374f03d1 100644 --- a/src/server/game/server_mod.go +++ b/src/server/game/server_mod.go @@ -22,6 +22,7 @@ const ( BAN_MGR_KEY = "BAN_MGR" PER_SAVE_TIME = 60 MESSAGE_MGR_KEY = "MESSAGE_MGR" + ACTIVITY_MGR_KEY = "ACTIVITY_MGR" ) type ServerMod struct { diff --git a/src/server/game_util/GoUtil.go b/src/server/game_util/GoUtil.go index 9b3fc74c..114e5a21 100644 --- a/src/server/game_util/GoUtil.go +++ b/src/server/game_util/GoUtil.go @@ -12,14 +12,20 @@ import ( "encoding/hex" "fmt" "io" + "math" "math/rand" + "net" "net/http" "reflect" + "server/game/mod/item" "server/pkg/github.com/name5566/leaf/log" + "sort" "strconv" "strings" "sync" "time" + + "github.com/oschwald/geoip2-golang" ) var bufferPool = sync.Pool{ @@ -353,6 +359,24 @@ func Rand8DigitNumber() string { return fmt.Sprintf("%08d", n) } +// RandThreeNonAdjacent 从 [1, x] 中随机抽取 3 个两两不相邻的数。 +func RandThreeNonAdjacent(x int) ([]int, error) { + if x < 5 { + return nil, fmt.Errorf("x must be >= 5") + } + + // 先在 [1, x-2] 中均匀抽 3 个不重复数,再通过偏移构造为不相邻的结果。 + base := rand.Perm(x - 2)[:3] + sort.Ints(base) + + ret := make([]int, 3) + for i, v := range base { + ret[i] = (v + 1) + i + } + + return ret, nil +} + func UniqueInts(input []int) []int { seen := make(map[int]struct{}) result := make([]int, 0, len(input)) @@ -478,15 +502,28 @@ func GenerateShuffledAlphabet() string { // 根据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 + parsedIP := net.ParseIP(ip) + if parsedIP == nil { + return "", fmt.Errorf("invalid ip: %s", ip) + } + + db, err := geoip2.Open("./GeoLite2-Country/GeoLite2-City.mmdb") + if err != nil { + return "", err + } + defer db.Close() + + record, err := db.Country(parsedIP) + if err != nil { + return "", err + } + + countryName := record.Country.Names["en"] + if countryName == "" { + return "", fmt.Errorf("country name not found for ip %s", ip) + } + + return GetISOCodeByCountry(countryName) } // 根据国家名称获取ISO 3166-1国家码 @@ -569,11 +606,7 @@ func GetISOCodeByCountry(country string) (string, error) { // 综合函数:根据IP获取ISO 3166-1国家码 func GetISOCodeByIP(ip string) (string, error) { - country, err := GetCountryByIP(ip) - if err != nil { - return "", err - } - return GetISOCodeByCountry(country) + return GetCountryByIP(ip) } func GetVarKey(Uid int) string { @@ -658,3 +691,45 @@ func ElemNumber(list []int, ele int) int { } return count } + +func GetIPFromAddr(addr string) string { + ip, _, err := net.SplitHostPort(addr) + if err != nil { + return "" + } + return ip +} + +func GetGeoInfo(ip string) (string, string, error) { + parsedIP := net.ParseIP(ip) + if parsedIP == nil { + return "", "", fmt.Errorf("invalid ip: %s", ip) + } + + db, err := geoip2.Open("./GeoLite2-Country/GeoLite2-City.mmdb") + if err != nil { + return "", "", err + } + defer db.Close() + record, err := db.Country(parsedIP) + if err != nil { + return "", "", err + } + + countryCode, err := GetISOCodeByCountry(record.Country.Names["en"]) + if err != nil { + return "", "", err + } + + return countryCode, record.Country.IsoCode, nil +} + +func FormatStarItem(items []*item.Item, factor int) []*item.Item { + for _, v := range items { + if v.Id == item.ITEM_STAR_ID { + Num := math.Round(float64(v.Num) * float64(factor) / 100) + v.Num = int(Num) / 5 * 5 + } + } + return items +} diff --git a/src/server/game_util/sliceUtil.go b/src/server/game_util/sliceUtil.go index 51887e22..178446a5 100644 --- a/src/server/game_util/sliceUtil.go +++ b/src/server/game_util/sliceUtil.go @@ -128,15 +128,15 @@ func RandSliceNumNonAdjacent(s []int, num int) []int { for len(result) < num { Id := rand.Intn(len(slice)) result = append(result, slice[Id]) - slice = SubAdjacentElemSlice(slice, Id) + slice = SubAdjacentElemSlice(slice, slice[Id]) } return result } func SubAdjacentElemSlice(s []int, Id int) []int { r := make([]int, 0, len(s)) - for k, v := range s { - if k < Id-1 || k > Id+1 { + for _, v := range s { + if v < Id-1 || v > Id+1 { r = append(r, v) } } diff --git a/src/server/gamedata/type.go b/src/server/gamedata/type.go index 2bb48771..099762d7 100644 --- a/src/server/gamedata/type.go +++ b/src/server/gamedata/type.go @@ -31,16 +31,16 @@ type StartOrderData struct { type SevenLoginRewardData struct { Id int - Diamond int + Energy float64 RewardNum int } type SevenLoginJackpotData struct { - Id int - Diamond int - Items []*item.Item - Type int - Month int + Id int + Energy float64 + Items []*item.Item + Type int + Month int } type ActivityData struct { diff --git a/src/server/go.mod b/src/server/go.mod index 071ec27e..3aa595ee 100644 --- a/src/server/go.mod +++ b/src/server/go.mod @@ -1,6 +1,6 @@ module server -go 1.23 +go 1.25.0 require ( github.com/alibabacloud-go/cloudauth-20190307/v4 v4.9.2 @@ -13,10 +13,12 @@ require ( github.com/go-sql-driver/mysql v1.8.1 github.com/gorilla/websocket v1.5.3 github.com/jmoiron/sqlx v1.4.0 + github.com/oschwald/geoip2-golang v1.13.0 github.com/redis/go-redis/v9 v9.6.1 github.com/robfig/cron/v3 v3.0.1 github.com/shirou/gopsutil v3.21.11+incompatible - google.golang.org/protobuf v1.36.2 + google.golang.org/grpc v1.79.2 + google.golang.org/protobuf v1.36.11 gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 ) @@ -36,19 +38,20 @@ require ( github.com/json-iterator/go v1.1.12 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/stretchr/testify v1.9.0 // indirect github.com/tjfoc/gmsm v1.4.1 // indirect github.com/tklauser/go-sysconf v0.3.14 // indirect github.com/tklauser/numcpus v0.8.0 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect - golang.org/x/net v0.34.0 // indirect + golang.org/x/net v0.51.0 // indirect golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect ) require ( - github.com/apache/thrift v0.22.0 // indirect - golang.org/x/sys v0.29.0 // indirect + github.com/oschwald/maxminddb-golang v1.13.0 // indirect + golang.org/x/sys v0.41.0 // indirect + golang.org/x/text v0.34.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c // indirect ) require ( diff --git a/src/server/go.sum b/src/server/go.sum index 03c7cb8e..5373fd05 100644 --- a/src/server/go.sum +++ b/src/server/go.sum @@ -73,8 +73,6 @@ github.com/aliyun/credentials-go v1.3.6/go.mod h1:1LxUuX7L5YrZUWzBrRyk0SwSdH4OmP github.com/aliyun/credentials-go v1.4.5/go.mod h1:Jm6d+xIgwJVLVWT561vy67ZRP4lPTQxMbEYRuT2Ti1U= github.com/aliyun/credentials-go v1.4.6 h1:CG8rc/nxCNKfXbZWpWDzI9GjF4Tuu3Es14qT8Y0ClOk= github.com/aliyun/credentials-go v1.4.6/go.mod h1:Jm6d+xIgwJVLVWT561vy67ZRP4lPTQxMbEYRuT2Ti1U= -github.com/apache/thrift v0.22.0 h1:r7mTJdj51TMDe6RtcmNdQxgn9XcyfGDOzegMDRg47uc= -github.com/apache/thrift v0.22.0/go.mod h1:1e7J/O1Ae6ZQMTYdy9xa3w9k+XHWPfRvdPyJeynQ+/g= github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= @@ -95,6 +93,10 @@ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cu github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= @@ -110,12 +112,15 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -146,6 +151,10 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/oschwald/geoip2-golang v1.13.0 h1:Q44/Ldc703pasJeP5V9+aFSZFmBN7DKHbNsSFzQATJI= +github.com/oschwald/geoip2-golang v1.13.0/go.mod h1:P9zG+54KPEFOliZ29i7SeYZ/GM6tfEL+rgSn03hYuUo= +github.com/oschwald/maxminddb-golang v1.13.0 h1:R8xBorY71s84yO06NgTmQvqvTvlS/bnYZrrWX1MElnU= +github.com/oschwald/maxminddb-golang v1.13.0/go.mod h1:BU0z8BfFVhi1LQaonTwwGQlsHUEu9pWNdMfmq4ztm0o= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -176,6 +185,18 @@ github.com/yuin/goldmark v1.1.30/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= +go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= +go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48= +go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8= +go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0= +go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs= +go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= +go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= +go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8= +go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew= +go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI= +go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -221,8 +242,8 @@ golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= -golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= -golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= +golang.org/x/net v0.51.0 h1:94R/GTO7mt3/4wIKpcR5gkGmRLOuE/2hNGeWq/GBIFo= +golang.org/x/net v0.51.0/go.mod h1:aamm+2QF5ogm02fjy5Bb7CQ0WMt1/WVM7FtyaTLlA9Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -254,8 +275,8 @@ golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= -golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k= +golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -278,6 +299,8 @@ golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= +golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1 h1:NusfzzA6yGQ+ua51ck7E3omNUX/JuqbFSaRGqU8CcLI= golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -295,22 +318,28 @@ golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxb golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= +gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c h1:xgCzyF2LFIO/0X2UAoVRiXKU5Xg6VjToG4i2/ecSswk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.79.2 h1:fRMD94s2tITpyJGtBBn7MkMseNpOZU8ZxgC3MMBaXRU= +google.golang.org/grpc v1.79.2/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.36.2 h1:R8FeyR1/eLmkutZOM5CWghmo5itiG9z0ktFlTVLuTmU= -google.golang.org/protobuf v1.36.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= +google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= diff --git a/src/server/pkg/github.com/name5566/leaf/network/tcp_server.go b/src/server/pkg/github.com/name5566/leaf/network/tcp_server.go index 2b25178b..ea4d7d93 100644 --- a/src/server/pkg/github.com/name5566/leaf/network/tcp_server.go +++ b/src/server/pkg/github.com/name5566/leaf/network/tcp_server.go @@ -2,7 +2,6 @@ package network import ( "net" - "server/conf" "server/pkg/github.com/name5566/leaf/log" "sync" "time" @@ -84,9 +83,9 @@ func (server *TCPServer) run() { return } tempDelay = 0 - if conf.Server.ServerType == "center" { - log.Debug("accept connection from %v", conn.RemoteAddr()) - } + // if conf.Server.ServerType == "center" { + // log.Debug("accept connection from %v", conn.RemoteAddr()) + // } server.mutexConns.Lock() if len(server.conns) >= server.MaxConnNum { server.mutexConns.Unlock() diff --git a/src/server/test/activity_test.go b/src/server/test/activity_test.go index 03dd8307..799ed857 100644 --- a/src/server/test/activity_test.go +++ b/src/server/test/activity_test.go @@ -2,7 +2,9 @@ package test import ( "server/game" + "server/game/mod/activity" "testing" + "time" ) func TestActivityOpenEnd(t *testing.T) { @@ -11,3 +13,33 @@ func TestActivityOpenEnd(t *testing.T) { p.InitActivity() p.ActivityLogin() } + +func TestActivityAddGift(t *testing.T) { + p := new(game.Player) + p.InitPlayer("3625212") + p.InitActivity() + p.Charge(72) + p.BackDataActivity() + + ActivityMod := p.GetActivityMod() + activityInfo := p.GetActivityInfo(activity.ACT_TYPE_ADD_GIFT) + if activityInfo == nil { + t.Error("activityInfo is nil") + return + } + items, err := ActivityMod.GetAddGiftReward(activityInfo.Id) + if err != nil { + t.Error("GetAddGiftReward error:", err) + return + } + t.Logf("GetAddGiftReward items:%v", items) +} + +func TestActivityAddGiftTick(t *testing.T) { + p := new(game.Player) + p.InitPlayer("3625212") + p.InitActivity() + p.Charge(72) + p.BackDataActivity() + time.Sleep(time.Second * 15) +} diff --git a/src/server/test/charge_test.go b/src/server/test/charge_test.go index fc6b9060..4250dba3 100644 --- a/src/server/test/charge_test.go +++ b/src/server/test/charge_test.go @@ -31,5 +31,5 @@ func TestWatchAd(t *testing.T) { func TestActivityGiftAdd(t *testing.T) { p1 := new(game.Player) p1.InitPlayer("3625212") - p1.Charge(76) + p1.Charge(71) } diff --git a/src/server/test/collect_test.go b/src/server/test/collect_test.go new file mode 100644 index 00000000..884a6758 --- /dev/null +++ b/src/server/test/collect_test.go @@ -0,0 +1,14 @@ +package test + +import ( + "server/game" + "testing" +) + +func TestCollectBack(t *testing.T) { + p1 := new(game.Player) + p1.InitPlayer("3625212") + CollectMod := p1.GetCollectMod() + res := CollectMod.BackData(p1.GetOrderFactor()) + t.Logf("res:%v", res) +} diff --git a/src/server/test/dailytask_test.go b/src/server/test/dailytask_test.go index 673ba37a..44479631 100644 --- a/src/server/test/dailytask_test.go +++ b/src/server/test/dailytask_test.go @@ -26,6 +26,17 @@ func TestDailyZeroUpdate(t *testing.T) { DailyTaskMod.BackData() } +func TestDailyWeekUpdate(t *testing.T) { + player := new(game.Player) + player.InitPlayerByUid(100001) + DailyTaskMod := player.GetDailyTaskMod() + DailyTaskMod.WeekUpdate(200) + for _, v := range DailyTaskMod.WeekReward { + fmt.Printf("week reward id: %d, items: %v\n", v.Id, v.Items) + } + DailyTaskMod.BackData() +} + func TestDailyTaskRewardScore(t *testing.T) { score1 := dailyTaskCfg.GetDailyTaskScore(1, 1) if score1 == 0 { diff --git a/src/server/test/fix_test.go b/src/server/test/fix_test.go index e59763a0..21afff50 100644 --- a/src/server/test/fix_test.go +++ b/src/server/test/fix_test.go @@ -96,7 +96,8 @@ func TestFixUserData(t *testing.T) { func TestRandInt(t *testing.T) { p1 := new(game.Player) p1.InitPlayer("3625212") - p1.DeleteHighOrder() + CollectMod := p1.GetCollectMod() + p1.PushClientRes(CollectMod.BackData(p1.GetOrderFactor())) } func TestII(t *testing.T) { @@ -285,3 +286,18 @@ func TestChampionShipCreateRobot(t *testing.T) { func TestRedisZset(t *testing.T) { db.RedisZAdd("rank_user", "100001", 100) } + +func TestGeoIp(t *testing.T) { + ip := "117.30.95.111:5557" + ip = GoUtil.GetIPFromAddr(ip) + code, _ := GoUtil.GetCountryByIP(ip) + fmt.Printf("IP: %s, Country Code: %s\n", ip, code) +} + +func TestRandAn(t *testing.T) { + rI := []int{1, 2, 3, 4, 5, 6, 7} + for i := 0; i < 10; i++ { + randNum := GoUtil.RandSliceNumNonAdjacent(rI, 3) + fmt.Printf("Random Number: %v\n", randNum) + } +} diff --git a/src/server/test/friendTreasure_test.go b/src/server/test/friendTreasure_test.go new file mode 100644 index 00000000..7779dd55 --- /dev/null +++ b/src/server/test/friendTreasure_test.go @@ -0,0 +1,29 @@ +package test + +import ( + "server/game" + friendTreasure "server/game/mod/friend_treasure.go" + "testing" +) + +func TestFriendTreasure(t *testing.T) { + player := new(game.Player) + player.InitPlayerByUid(100001) + FriendTreasureMod := player.GetFriendTreasureMod() + FriendTreasureMod.Status = friendTreasure.GAME_STATUS_START + FriendTreasureMod.Shift = 1 + FriendTreasureMod.Star = 100 + Items, FriendItemNum, err := FriendTreasureMod.EndGame(111) + if err != nil { + t.Errorf("EndGame error: %v", err) + } + if len(Items) != 1 { + t.Errorf("EndGame error: expected 1 item, got %d", len(Items)) + } + if Items[0].Num != 220 { + t.Errorf("EndGame error: expected item num 220, got %d", Items[0].Num) + } + if FriendItemNum != 22 { + t.Errorf("EndGame error: expected friend item num 22, got %d", FriendItemNum) + } +} diff --git a/src/server/test/seven_test.go b/src/server/test/seven_test.go index 792e5114..9e436243 100644 --- a/src/server/test/seven_test.go +++ b/src/server/test/seven_test.go @@ -1,6 +1,7 @@ package test import ( + "fmt" sevenLoginCfg "server/conf/seven_login" "server/game" GoUtil "server/game_util" @@ -17,7 +18,15 @@ func TestSevenLoginZeroUpdate(t *testing.T) { p1 := new(game.Player) p1.InitPlayer("3625212") SevenLoginMod := p1.GetSevenLoginMod() - SevenLoginMod.ZeroUpdate(0, 0) + SevenLoginMod.WeekResetTime = 0 + SevenLoginMod.MonthResetTime = 0 + SevenLoginMod.ZeroUpdate(0, 0, p1.GetOrderFactor()) SevenLoginMod.BackData() - t.Logf("SevenLoginMod:%v", SevenLoginMod) + fmt.Printf("order factor:%v\n", p1.GetOrderFactor()) + for k, v := range SevenLoginMod.LoginReward { + t.Logf("Reward:%v\n", v) + fmt.Printf("id :%d ; Reward:%v\n", k, v) + } + t.Logf("SevenLoginMod:%v\n", SevenLoginMod.MonthReward) + fmt.Printf("SevenLoginMod:%v\n", SevenLoginMod.MonthReward) }