diff --git a/src/server/conf/playroom/playroom_cfg.go b/src/server/conf/playroom/playroom_cfg.go index c549535f..16d0e4c2 100644 --- a/src/server/conf/playroom/playroom_cfg.go +++ b/src/server/conf/playroom/playroom_cfg.go @@ -607,7 +607,7 @@ func GetOrderItemList() []int { log.Debug("GetOrderItemList err:%v", err) return nil } - r := make([]int, 0) + r := make([]int, 0, len(data)) for k := range data { Id := GoUtil.Int(k) if Id == 0 { @@ -665,7 +665,7 @@ func GetDailyTaskListById(Id int) []int { return nil } Type := GetDailyTaskType(Id) - r := make([]int, 0) + r := make([]int, 0, len(data)) for k, v := range data { if gamedata.GetIntValue(v, "Type") == Type { r = append(r, GoUtil.Int(k)) diff --git a/src/server/db/Mysql.go b/src/server/db/Mysql.go index 0b870d1d..363a8dc3 100644 --- a/src/server/db/Mysql.go +++ b/src/server/db/Mysql.go @@ -151,61 +151,6 @@ func SeriesTransaction(sqlstrs []string, params [][]any) (err error) { return } -// 更新数据 -func FormatUpdateOneAttrRow(u interface{}, tableName string, UpdateAttr string, Exclude string) (err error) { - t := reflect.TypeOf(u) - len1 := t.Elem().NumField() - Fields := make([]string, len1) - Values := make([]interface{}, len1) - pp := reflect.ValueOf(u) - origin := "UPDATE " + tableName + " SET " - index := 0 - var keyValue interface{} - for i := 0; i < len1; i++ { - field := t.Elem().Field(i) - if field.Tag.Get("db") != Exclude { - if field.Tag.Get("db") == UpdateAttr { - Fields[index] = field.Tag.Get("db") + " = ?" - - ufield := pp.Elem().FieldByName(field.Name) - k := ufield.Kind() - if k == reflect.String { - Values[index] = ufield.String() - } - if k == reflect.Int32 { - Values[index] = ufield.Int() - } - index++ - } - - } else { - - ufield := pp.Elem().FieldByName(field.Name) - k := ufield.Kind() - if k == reflect.String { - keyValue = ufield.String() - } - if k == reflect.Int32 { - keyValue = ufield.Int() - } - } - } - Values[index] = keyValue - // Values = append(Values, keyValue) - origin += strings.Join(Fields, ",") - strLen := len(origin) - origin = origin[:strLen-1] - origin = origin + " WHERE " + Exclude + " = ?" - sqlStr := origin - _, err = SqlDb.Exec(sqlStr, Values...) - if err != nil { - log.Debug("table: %s, sql :%s, exec failed, err:%v\n", tableName, sqlStr, err) - return - } - - return -} - // "UPDATE user SET age = ?, degree = ? WHERE id = ?" func FormatAllMemUpdateDb(u interface{}, tableName string, Exclude string) (err error) { t := reflect.TypeOf(u) @@ -381,52 +326,6 @@ func UpdateAccountInfoDeviceToDb(account *Db_Account) (err error) { return } -func FormatAllMemLoadDb(u interface{}, tableName string, Exclude string) (err error) { - t := reflect.TypeOf(u) - len := t.Elem().NumField() - Fields := make([]string, len) - Values := make([]interface{}, len) - pp := reflect.ValueOf(u) - origin := "SELECT * FROM " + tableName + " WHERE " - index := 0 - var keyValue interface{} - for i := 0; i < len; i++ { - field := t.Elem().Field(i) - if field.Tag.Get("db") != Exclude { - Fields[index] = field.Tag.Get("db") + " = ?" - - ufield := pp.Elem().FieldByName(field.Name) - k := ufield.Kind() - if k == reflect.String { - Values[index] = ufield.String() - } - if k == reflect.Int32 || k == reflect.Int || k == reflect.Int64 { - Values[index] = ufield.Int() - } - index++ - } else { - - ufield := pp.Elem().FieldByName(field.Name) - k := ufield.Kind() - if k == reflect.String { - keyValue = ufield.String() - } - if k == reflect.Int32 { - keyValue = ufield.Int() - } - } - } - Values[index] = keyValue - // Values = append(Values, keyValue) - origin += strings.Join(Fields, " AND ") - sqlStr := origin - if err := SqlDb.Get(u, sqlStr, Values...); err != nil { - log.Debug("table: %s, sql :%s, exec failed, err:%v\n", tableName, sqlStr, err) - return err - } - return -} - func GetServerData(d interface{}, Key string) (err error) { sqlDb := GetDB() if sqlDb == nil { @@ -487,103 +386,6 @@ func GetPlayerClientData(d interface{}, Key string) (err error) { return } -func InsertData(u interface{}, tableName string) (insertID int64, err error) { - t := reflect.TypeOf(u) - len := t.Elem().NumField() - Fields := make([]string, 0) - Fields1 := make([]string, 0) - Values := make([]interface{}, 0) - pp := reflect.ValueOf(u) - origin := "INSERT INTO " + tableName + "(" - for i := 0; i < len; i++ { - field := t.Elem().Field(i) - if field.Tag.Get("db") == "id" { - continue - } - - ufield := pp.Elem().FieldByName(field.Name) - k := ufield.Kind() - if k == reflect.String && ufield.String() == "" { - continue - } - if (k == reflect.Int32 || k == reflect.Int || k == reflect.Int64) && ufield.Int() == 0 { - continue - } - - if k == reflect.String { - Values = append(Values, ufield.String()) - } - if k == reflect.Int32 || k == reflect.Int || k == reflect.Int64 { - Values = append(Values, ufield.Int()) - } - Fields = append(Fields, field.Tag.Get("db")) - Fields1 = append(Fields1, "?") - } - for i := range Fields { - Fields[i] = "`" + Fields[i] + "`" - } - origin += strings.Join(Fields, ",") - origin += ") VALUES(" - origin += strings.Join(Fields1, ",") - origin += ")" - sqlStr := origin - result, err := SqlDb.Exec(sqlStr, Values...) - if err != nil { - log.Debug("InsertData exec failed, sql : %s ;err:%v\n", sqlStr, err) - return - } - insertID, err = result.LastInsertId() - if err != nil { - log.Debug("InsertData exec failed, err:%v\n", err) - return - } - return -} - -func UpdateData(u interface{}, tableName string, Exclude string) (err error) { - t := reflect.TypeOf(u) - len1 := t.Elem().NumField() - Fields := make([]string, 0) - Values := make([]interface{}, 0) - pp := reflect.ValueOf(u) - origin := "UPDATE " + tableName + " SET " - var ExcludeValue interface{} - for i := 0; i < len1; i++ { - field := t.Elem().Field(i) - ufield := pp.Elem().FieldByName(field.Name) - k := ufield.Kind() - if field.Tag.Get("db") != Exclude && field.Tag.Get("db") != "id" { - - if k == reflect.String { - Values = append(Values, ufield.String()) - } - if k == reflect.Int32 || k == reflect.Int || k == reflect.Int64 { - Values = append(Values, ufield.Int()) - } - Fields = append(Fields, "`"+field.Tag.Get("db")+"` = ?") - } - if field.Tag.Get("db") == Exclude { - if k == reflect.String { - ExcludeValue = ufield.String() - } - if k == reflect.Int32 || k == reflect.Int || k == reflect.Int64 { - ExcludeValue = append(Values, ufield.Int()) - } - } - } - Values = append(Values, ExcludeValue) - origin += strings.Join(Fields, ",") - origin = origin + " WHERE `" + Exclude + "` = ?" - sqlStr := origin - - _, err = SqlDb.Exec(sqlStr, Values...) - if err != nil { - log.Debug("update failed, sql %s err:%v\n", sqlStr, err) - return - } - return -} - func GetServerMailData(data *[]*SqlServerMailStruct) error { sql := "select * from system_mail_info" err := SqlDb.Select(data, sql) diff --git a/src/server/game/GameLogic.go b/src/server/game/GameLogic.go index e7a08f94..14a8cb78 100644 --- a/src/server/game/GameLogic.go +++ b/src/server/game/GameLogic.go @@ -472,7 +472,6 @@ func G_getGameLogic() *GameLogic { G_GameLogicPtr.RegisterEvent() // 注册事件 G_GameLogicPtr.RegisterNetWorkFunc() // 注册客户端接口 G_GameLogicPtr.InitActivity() // 初始化活动 - G_GameLogicPtr.GetVersion() // 获取版本号 if conf.Server.ServerType == "center" { G_GameLogicPtr.CreateFriendMgr() //创建好友管理器 G_GameLogicPtr.CreateChampshipMgr() // 创建竞标赛管理器 @@ -501,28 +500,6 @@ func (ad *GameLogic) InitServerInfo() { ad.SeverInfo = ServerInfo } -func (ad *GameLogic) GetVersion() { - sqlStr := "SELECT * FROM t_gameserver WHERE id = ?" - sqlStruck := db.SqlVersionStruct{} - IsHaveDataDb := false - sqlStruck.Id = 1 - G_GameLogicPtr.Version = 0 - if err := db.SqlDb.Get(&sqlStruck, sqlStr, 1); err != nil { - G_GameLogicPtr.Version = 1 - IsHaveDataDb = false - } else { - G_GameLogicPtr.Version = sqlStruck.IsClose + 1 - IsHaveDataDb = true - } - sqlStruck.IsClose = G_GameLogicPtr.Version - - if IsHaveDataDb { - db.FormatAllMemUpdateDb(&sqlStruck, "t_gameserver", "id") - } else { - db.FormatAllMemInsertDb(&sqlStruck, "t_gameserver") - } -} - func (ad *GameLogic) SendServerVersion(a gate.Agent) { res := &msg.ResServerVersion{} res.Version = G_GameLogicPtr.Version diff --git a/src/server/game/activity_func.go b/src/server/game/activity_func.go index 28360eeb..bfe66951 100644 --- a/src/server/game/activity_func.go +++ b/src/server/game/activity_func.go @@ -221,7 +221,7 @@ func (p *Player) GuessColorBackData() { Status := p.GetActivityStatus(activity.ACT_TYPE_GUESS_COLOR) GuessColorMod := p.PlayMod.getGuessColorMod() - MapList := make([]*msg.GuessColorInfo, 0) + MapList := make([]*msg.GuessColorInfo, 0, len(GuessColorMod.MapList)) for _, v := range GuessColorMod.MapList { MapList = append(MapList, &msg.GuessColorInfo{ Map: v, @@ -252,7 +252,7 @@ func (p *Player) RaceBackData() { } Status := p.GetActivityStatus(activity.ACT_TYPE_RACE) RaceMod := p.PlayMod.getRaceMod() - Opponent := make([]*msg.Raceopponent, 0) + Opponent := make([]*msg.Raceopponent, 0, len(RaceMod.Opponent)) for _, v := range RaceMod.Opponent { Opponent = append(Opponent, &msg.Raceopponent{ Id: int32(v.Id), @@ -352,7 +352,7 @@ func (p *Player) CatnipBackData() { return } FriendMod := p.PlayMod.getFriendMod() - GameList := make([]*msg.CatnipGame, 0) + GameList := make([]*msg.CatnipGame, 0, len(CatnipMod.Game)) for _, v := range CatnipMod.Game { GameInfo := &msg.CatnipGame{ Id: int32(v.Id), @@ -373,7 +373,6 @@ func (p *Player) CatnipBackData() { GameList = append(GameList, GameInfo) } tmpData := make(map[int]*msg.CatnipInvite) - InviteList := make([]*msg.CatnipInvite, 0) for uid, info := range CatnipMod.InviteList { tmpData[uid] = &msg.CatnipInvite{ Uid: int64(uid), @@ -410,6 +409,7 @@ func (p *Player) CatnipBackData() { invite.Type = 4 // 已参与游戏的好友不显示邀请 } } + InviteList := make([]*msg.CatnipInvite, 0, len(tmpData)) for _, v := range tmpData { ResPlayerSimple := G_getGameLogic().GetResSimplePlayerByUid(int(v.Uid)) if ResPlayerSimple != nil { diff --git a/src/server/game/message_handler.go b/src/server/game/message_handler.go index c89774c4..229a953a 100644 --- a/src/server/game/message_handler.go +++ b/src/server/game/message_handler.go @@ -1099,7 +1099,7 @@ func (player *Player) GetPetOrderReward(Star int, Items []*item.Item) []*item.It } func ExcludeCardStar(CardList []int) []int { - StarList := make([]int, 0) + StarList := make([]int, 0, len(CardList)) for _, v := range CardList { Star := cardCfg.GetStarById(v) if Star < 2 || Star > 4 { diff --git a/src/server/game/mod/card/Card.go b/src/server/game/mod/card/Card.go index 8b9ce43f..80d96c8b 100644 --- a/src/server/game/mod/card/Card.go +++ b/src/server/game/mod/card/Card.go @@ -224,7 +224,7 @@ func (c *CardMod) BackData() *msg.ResCardInfo { } cardList = append(cardList, &msg.Card{Id: int32(k), Count: int32(v)}) } - ReqUid := make([]int64, 0) + ReqUid := make([]int64, 0, len(c.ReqFriend)) for _, v := range c.ReqFriend { if v.EndTime < GoUtil.Now() { delete(c.ReqFriend, v.BUid) @@ -232,7 +232,7 @@ func (c *CardMod) BackData() *msg.ResCardInfo { } ReqUid = append(ReqUid, int64(v.BUid)) } - ExUid := make([]int64, 0) + ExUid := make([]int64, 0, len(c.ExCard)) for k, v := range c.ExCard { if v.EndTime < GoUtil.Now() { delete(c.ExCard, k) @@ -514,7 +514,7 @@ func (c *CardMod) NotifyCard() *msg.ResNotifyCard { } func (c *CardMod) NotifyTimes() *msg.ResNotifyCardTimes { - ReqUid := make([]int64, 0) + ReqUid := make([]int64, 0, len(c.ReqFriend)) for k, v := range c.ReqFriend { if v.EndTime < GoUtil.Now() { delete(c.ReqFriend, k) @@ -522,7 +522,7 @@ func (c *CardMod) NotifyTimes() *msg.ResNotifyCardTimes { } ReqUid = append(ReqUid, int64(k)) } - ExUid := make([]int64, 0) + ExUid := make([]int64, 0, len(c.ExCard)) for k, v := range c.ExCard { if v.EndTime < GoUtil.Now() { delete(c.ExCard, k) @@ -590,7 +590,7 @@ func (c *CardMod) SeasonFirstReward() ([]*item.Item, error) { } func (c *CardMod) GetCardList() []int { - cardList := make([]int, 0) + cardList := make([]int, 0, len(c.CardList)) for k, v := range c.CardList { if v > 0 { cardList = append(cardList, k) diff --git a/src/server/game/mod/charge/charge_func.go b/src/server/game/mod/charge/charge_func.go index cd243096..082a7edb 100644 --- a/src/server/game/mod/charge/charge_func.go +++ b/src/server/game/mod/charge/charge_func.go @@ -20,42 +20,3 @@ func GetChessDiamond(Lv, Type int) int { } return max(1, d) } - -// func getChessMainRand(Color string) []*Rand { -// r := make([]*Rand, 0) -// for i := 6; i <= 10; i++ { -// Diamond := int(math.Pow(2, float64(i-1)) / 2.5) -// ChessId := mergeDataCfg.GetChessIdByLvAndColor(i, Color) -// if ChessId == 0 { -// continue -// } -// r = append(r, &Rand{ChessId: ChessId, Diamond: Diamond}) -// } -// return r -// } - -// func getChessSecondaryRand(Color string) []*Rand { -// r := make([]*Rand, 0) -// for i := 5; i <= 9; i++ { -// Diamond := int((math.Pow(2, float64(i-1)) / 2.5) * 2) -// ChessId := mergeDataCfg.GetChessIdByLvAndColor(i, Color) -// if ChessId == 0 { -// continue -// } -// r = append(r, &Rand{ChessId: ChessId, Diamond: Diamond}) -// } -// return r -// } - -// func getChessSubRand(Color string) []*Rand { -// r := make([]*Rand, 0) -// for i := 5; i <= 9; i++ { -// Diamond := int(math.Pow(2, float64(i-1))/2.5 + 6.4) -// ChessId := mergeDataCfg.GetChessIdByLvAndColor(i, Color) -// if ChessId == 0 { -// continue -// } -// r = append(r, &Rand{ChessId: ChessId, Diamond: Diamond}) -// } -// return r -// } diff --git a/src/server/game/mod/chess/Chess.go b/src/server/game/mod/chess/Chess.go index dd9880ac..85a1073b 100644 --- a/src/server/game/mod/chess/Chess.go +++ b/src/server/game/mod/chess/Chess.go @@ -149,7 +149,7 @@ func (cb *ChessBorad) ComposeChess(id int) (int, error) { return 0, errors.New("已达最大等级") } count := 0 - newList := make([]int, 0) + newList := make([]int, 0, len(cb.ChessList)) for _, chess := range cb.ChessList { if chess == id && count < 2 { count++ @@ -457,17 +457,17 @@ func (cb *ChessBorad) BackData() *msg.ResPlayerChessInfo { Count: int32(v.Num), }) } - Re := make([]string, 0) + Re := make([]string, 0, len(cb.Retire)) for k, v := range cb.Retire { if v == EMIT_RETIRE_END { Re = append(Re, k) } } - Ho := make([]int32, 0) + Ho := make([]int32, 0, len(cb.Honor)) for k := range cb.Honor { Ho = append(Ho, int32(k)) } - Rw := make([]string, 0) + Rw := make([]string, 0, len(cb.RetireReward)) for k, v := range cb.RetireReward { if v == true { Rw = append(Rw, k) @@ -633,7 +633,7 @@ func (cb *ChessBorad) RetireOrder(EmitType string) error { if cb.Retire[EmitType] != 1 { return errors.New("chess has not been retired") } - chess := make([]int, 0) + chess := make([]int, 0, len(cb.ChessMap)) EmitProduct := mergeDataCfg.GetEmitOrderProduce(EmitType) for k, v := range cb.ChessMap { arr := strings.Split(k, "@") diff --git a/src/server/game/trigger_func.go b/src/server/game/trigger_func.go index 0d2a536e..374340ae 100644 --- a/src/server/game/trigger_func.go +++ b/src/server/game/trigger_func.go @@ -30,7 +30,7 @@ const ( func (player *Player) MailTrigger(Tr *quest.Trigger) bool { MailMod := player.PlayMod.getMailMod() TriggerMail := mailCfg.GetTriggerMail() - t := make([]*mailCfg.TriggerMail, 0) + t := make([]*mailCfg.TriggerMail, 0, len(TriggerMail)) for _, v := range TriggerMail { if GoUtil.InArray(v.Id, MailMod.TriggerMail) { continue diff --git a/src/server/main.go b/src/server/main.go index bb9e2371..d56aa3a8 100644 --- a/src/server/main.go +++ b/src/server/main.go @@ -26,9 +26,9 @@ func main() { lconf.ListenAddr = conf.Server.ListenAddr lconf.CenterAddr = conf.Server.CenterAddr lconf.PendingWriteNum = conf.PendingWriteNum - // 当内存>2G时开始GC + // 当内存>256M时开始GC debug.SetGCPercent(50) - debug.SetMemoryLimit(2 << 30) + debug.SetMemoryLimit(512 << 20) // 启动 pprof(仅绑定本地) go func() { // 如果需要绑定所有接口改为 ":6060"