From 378b4cc6814fd24cf1e06d5cf42bf419f2c9aae4 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Mon, 5 Aug 2024 10:09:10 +0800 Subject: [PATCH] update skin --- data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Skin.dat | Bin 896 -> 896 bytes data/DB_Skin.json | 4 +- data/DB_Task.dat | Bin 5299 -> 5299 bytes worldsrv/gameallconfig.go | 88 ---------------- worldsrv/gamedata.go | 30 ------ worldsrv/jackpotlist.go | 211 -------------------------------------- worldsrv/logiclevelmgr.go | 121 ---------------------- xlsx/DB_Skin.xlsx | Bin 12233 -> 12207 bytes 9 files changed, 2 insertions(+), 452 deletions(-) delete mode 100644 worldsrv/gameallconfig.go delete mode 100644 worldsrv/gamedata.go delete mode 100644 worldsrv/jackpotlist.go delete mode 100644 worldsrv/logiclevelmgr.go diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat index 8a38f2058576a7613bd72c2487f17ac850541c61..bff28e2cc3f6a5d15e822dfb6d3c070a7f97f144 100644 GIT binary patch literal 384 zcmd-w<6snElw#w!+{O&1uR!UmQ2H8_z7C?5I5-yevI!h$vE|a^U;?YZ36;MErEf#& z8))joIZ(~Vr4Qx~to8%l2{D%w?2d-Dk65^3Iat6BfjRUJ)B)%o0c!*rK*(ZUnMIfcIXD*fvI$&R>f^=6aj}hAfNQe`t2iT6xS_KOD7*-$ zfOT^K+hayS2uH*Vq6;WJ*@dHcvIx7#48j VO}y`5rm#YV7aWq?ypf-Y6#%w`EbjmS delta 169 zcmdn2xmk0=dnQ3Pjzzs}0*qc991DT;f?l>w%;F%?i*3vTTu{*qOMNzLu!=K66|+Kx z8#=2t2e3V66olvna=jp?iA;9kD26I#f+{{Ri)Zr*4o1ew#vEdk?{ns1k&feXW}Ym< VF1UFU?>olHSGWW>Z{%lU1psYGFHHad diff --git a/worldsrv/gameallconfig.go b/worldsrv/gameallconfig.go deleted file mode 100644 index 581b32a..0000000 --- a/worldsrv/gameallconfig.go +++ /dev/null @@ -1,88 +0,0 @@ -package main - -//import ( -// "mongo.games.com/game/model" -// "mongo.games.com/game/srvdata" -// "mongo.games.com/goserver/core/logger" -// "github.com/globalsign/mgo/bson" -//) -// -//func InitGameAllConfigData() error { -// c := model.GameConfigCollection() -// if c != nil { -// var datas []model.GameGlobalState -// err := c.Find(nil).All(&datas) -// if err != nil { -// logger.Logger.Trace("InitGameAllConfigData err:", err) -// return err -// } -// for i := 0; i < len(datas); i++ { -// model.GameAllConfig[datas[i].LogicId] = &datas[i] -// } -// logger.Logger.Trace("InitGameAllConfigData:", model.GameAllConfig) -// -// //把dbFree中的数据写入数据库 -// arr := srvdata.PBDB_GameFreeMgr.Datas.GetArr() -// for _, dbGame := range arr { -// if dbGame.GetGameId() > 0 { -// name := dbGame.GetName() -// if name != dbGame.GetTitle() { -// name = dbGame.GetName() + dbGame.GetTitle() -// } -// if data, exist := model.GameAllConfig[dbGame.GetId()]; exist { -// data.Name = name -// data.GameId = dbGame.GetGameId() -// data.GameMode = dbGame.GetGameMode() -// cu := model.GameConfigCollection() -// if cu != nil { -// info, err := cu.Upsert(bson.M{"logicid": dbGame.GetId()}, data) -// if err != nil { -// logger.Logger.Trace("InitGameAllConfigData :", info, err) -// return err -// } -// } -// } else { -// name := dbGame.GetName() -// if name != dbGame.GetTitle() { -// name = dbGame.GetName() + dbGame.GetTitle() -// } -// data := &model.GameGlobalState{ -// Id: bson.NewObjectId(), -// LogicId: dbGame.GetId(), -// Name: name, -// GameId: dbGame.GetGameId(), -// GameMode: dbGame.GetGameMode(), -// State: 0, -// } -// model.GameAllConfig[dbGame.GetId()] = data -// ci := model.GameConfigCollection() -// if ci != nil { -// info, err := ci.Upsert(bson.M{"logicid": dbGame.GetId()}, data) -// if err != nil { -// logger.Logger.Trace("InitGameAllConfigData :", info, err) -// return err -// } -// } -// } -// } -// } -// -// //dbfree表中删除后操作 -// for k, _ := range model.GameAllConfig { -// gc := srvdata.PBDB_GameFreeMgr.GetData(k) -// if gc == nil { -// cgc := model.GameConfigCollection() -// if cgc != nil { -// err := cgc.Remove(bson.M{"logicid": k}) -// if err != nil { -// logger.Logger.Warn("RemoveGameConfig error:", err) -// return err -// } else { -// delete(model.GameAllConfig, k) -// } -// } -// } -// } -// } -// return nil -//} diff --git a/worldsrv/gamedata.go b/worldsrv/gamedata.go deleted file mode 100644 index d90df8a..0000000 --- a/worldsrv/gamedata.go +++ /dev/null @@ -1,30 +0,0 @@ -package main - -import ( - "mongo.games.com/goserver/core/logger" -) - -type GameDataMgr struct { -} - -func (this *GameDataMgr) ModuleName() string { - return "GameDataMgr" -} - -func (this *GameDataMgr) Init() { - //model.InitGameData() -} - -func (this *GameDataMgr) Update() { - logger.Logger.Trace("(this *GameDataMgr) Update()") - //model.SaveGameData() -} - -func (this *GameDataMgr) Shutdown() { - //model.SaveGameData() - //module.UnregisteModule(this) -} - -func init() { - //module.RegisteModule(&GameDataMgr{}, time.Minute, 0) -} diff --git a/worldsrv/jackpotlist.go b/worldsrv/jackpotlist.go deleted file mode 100644 index 5ad2b3b..0000000 --- a/worldsrv/jackpotlist.go +++ /dev/null @@ -1,211 +0,0 @@ -package main - -// -//import ( -// "mongo.games.com/game/common" -// "mongo.games.com/game/proto" -// "mongo.games.com/game/protocol/gamehall" -// "mongo.games.com/goserver/core/logger" -// "mongo.games.com/goserver/core/timer" -// "math/rand" -// "strconv" -// "time" -//) -// -//var jackpotInterval = time.Hour * common.SCENE_BIGWINHISTORY_TIMEINTERVAL -// -//var JackpotListMgrSington = &JackpotListMgr{ -// BigWinHistoryByGameID: make(map[int][]*gamehall.BigWinHistoryInfo), -// jackpotListHandle: make(map[int]timer.TimerHandle), // 新的爆奖记录生成 -//} -// -//type JackpotListMgr struct { -// BigWinHistoryByGameID map[int][]*gamehall.BigWinHistoryInfo -// jackpotListHandle map[int]timer.TimerHandle // 新的爆奖记录生成 -//} -// -//func (this *JackpotListMgr) AddJackpotList(gameid int, data *gamehall.BigWinHistoryInfo) { -// this.BigWinHistoryByGameID[gameid] = append(this.BigWinHistoryByGameID[gameid], data) -// if len(this.BigWinHistoryByGameID[gameid]) > common.SCENE_BIGWINHISTORY_MAXNUMBER { -// this.BigWinHistoryByGameID[gameid] = this.BigWinHistoryByGameID[gameid][1:] -// } -//} -// -//func (this *JackpotListMgr) GetJackpotList(gameid int) []*gamehall.BigWinHistoryInfo { -// if this.BigWinHistoryByGameID[gameid] == nil { -// this.BigWinHistoryByGameID[gameid] = make([]*gamehall.BigWinHistoryInfo, 0) -// } -// return this.BigWinHistoryByGameID[gameid] -//} -// -//func genRandTime(sec int, circleTime time.Time) time.Time { -// //随机时间间隔 -// rand.Seed(time.Now().UnixNano() + int64(sec)) -// interval := rand.Intn(60) + 60*sec // 分钟 -// circleTime = circleTime.Add(time.Duration(-interval) * time.Minute) -// s := rand.Intn(60) //随机一个秒数 -// circleTime = circleTime.Add(time.Duration(-s) * time.Second) -// return circleTime -//} -// -//func genRoomIDAndScore(gameid int) (roomID int64, score int64) { -// // 随机从房间内读取一个场数据 -// var scenes = make([]*Scene, 0) -// for _, s := range SceneMgrSington.scenes { -// if s != nil && s.dbGameFree.GetGameId() == int32(gameid) { -// scenes = append(scenes, s) -// } -// } -// if len(scenes) < 1 { -// return -// } -// s := scenes[rand.Intn(len(scenes))] -// jackpot := s.dbGameFree.GetJackpot() -// roomID = int64(s.dbGameFree.GetBaseScore()) -// baseScore := int64(jackpot[0]) * roomID -// score = int64(baseScore) + int64(rand.Int31n(int32(baseScore/2))) -// logger.Logger.Infof("genjackpot %v score %v roomID%v baseScore%v", jackpot[0], score, s.dbGameFree.GetBaseScore(), baseScore) -// return -//} -// -//// 生成爆奖记录 -//func (this *JackpotListMgr) GenJackpot(gameid int) { -// // 首次生成初始化爆奖信息 -// if len(this.BigWinHistoryByGameID[gameid]) == 0 { -// // 直接从大厅取机器人 -// circleTime := time.Now() -// sec := common.SCENE_BIGWINHISTORY_LIMITNUMBER -// for _, p := range PlayerMgrSington.sidMap { -// if len(this.BigWinHistoryByGameID[gameid]) >= common.SCENE_BIGWINHISTORY_LIMITNUMBER { -// break -// } -// if p.IsRob { -// p.RobotRandName() -// genedTime := genRandTime(sec, circleTime).Unix() -// spinid := strconv.FormatInt(int64(p.SnId), 10) // 用户id转换成字符串 -// baseBet, priceValue := genRoomIDAndScore(gameid) -// if baseBet == 0 || priceValue == 0 { -// return -// } -// newJackpot := &gamehall.BigWinHistoryInfo{ -// SpinID: spinid, -// CreatedTime: genedTime, -// BaseBet: baseBet, -// TotalBet: baseBet, -// PriceValue: priceValue, -// UserName: p.Name, -// } -// this.AddJackpotList(gameid, newJackpot) -// sec-- -// } -// } -// } else { -// lastRecord := this.BigWinHistoryByGameID[gameid][len(this.BigWinHistoryByGameID[gameid])-1] // 当中奖纪录>10条时,随机时间差, 满足当前时间-最后一次爆奖记录时间 > 随机时间差 时重新生成一条记录 -// lastTime := time.Unix(lastRecord.GetCreatedTime(), 0) -// genNewJackpotFlag := lastTime.Add(jackpotInterval).Before(time.Now()) -// if genNewJackpotFlag { -// for _, p := range PlayerMgrSington.sidMap { -// if p.IsRob { -// p.RobotRandName() -// genedTime := time.Now().Unix() -// spinid := strconv.FormatInt(int64(p.SnId), 10) // 用户id转换成字符串 -// baseBet, priceValue := genRoomIDAndScore(gameid) -// if baseBet == 0 || priceValue == 0 { -// return -// } -// newJackpot := &gamehall.BigWinHistoryInfo{ -// SpinID: spinid, -// CreatedTime: genedTime, -// BaseBet: baseBet, -// TotalBet: baseBet, -// PriceValue: priceValue, -// UserName: p.Name, -// } -// this.AddJackpotList(gameid, newJackpot) -// break -// } -// } -// this.after(gameid) -// } -// } -//} -// -//// AddVirtualJackpot 添加虚拟爆奖记录(名字+用户id, 使用大厅机器人信息) -//func (this *JackpotListMgr) AddVirtualJackpot(gameid int, data *gamehall.BigWinHistoryInfo) { -// if len(PlayerMgrSington.sidMap) < 1 { -// logger.Logger.Error("AddVirtualJackpot not found robot") -// return -// } -// -// for _, p := range PlayerMgrSington.sidMap { -// if p.IsRob { -// p.RobotRandName() -// spinid := strconv.FormatInt(int64(p.SnId), 10) // 用户id转换成字符串 -// data.SpinID = spinid -// data.UserName = p.Name -// this.AddJackpotList(gameid, data) -// break -// } -// } -//} -// -//func (this *JackpotListMgr) start(gameid int) { -// this.jackpotListHandle[gameid], _ = timer.StartTimer(timer.TimerActionWrapper(func(h timer.TimerHandle, ud interface{}) bool { -// this.GenJackpot(gameid) -// return true -// }), nil, jackpotInterval, 1) -//} -// -//func (this *JackpotListMgr) after(gameid int) { -// interval := jackpotInterval + time.Duration(rand.Intn(2))*time.Hour + time.Duration(rand.Intn(60))*time.Minute + time.Duration(rand.Intn(60)) -// this.jackpotListHandle[gameid], _ = timer.AfterTimer(func(h timer.TimerHandle, ud interface{}) bool { -// this.GenJackpot(gameid) -// -// jackpotList := JackpotListMgrSington.GetJackpotList(gameid) -// msg := this.GetStoCMsg(jackpotList) -// logger.Logger.Infof("jackpotlist timer after gameid(%v) %v", gameid, msg) -// return true -// }, nil, interval) -//} -// -//func (this *JackpotListMgr) StopTimer(gameid int) bool { -// return timer.StopTimer(this.jackpotListHandle[gameid]) -//} -// -//func (this *JackpotListMgr) ResetAfterTimer(gameid int) { -// if this.StopTimer(gameid) { -// this.after(gameid) -// } -//} -// -//func (this *JackpotListMgr) GetStoCMsg(jackpotList []*gamehall.BigWinHistoryInfo) *gamehall.SCBigWinHistory { -// pack := &gamehall.SCBigWinHistory{} -// for i := len(jackpotList) - 1; i >= 0; i-- { -// v := jackpotList[i] -// player := &gamehall.BigWinHistoryInfo{ -// SpinID: proto.String(v.GetSpinID()), -// CreatedTime: proto.Int64(v.GetCreatedTime()), -// BaseBet: proto.Int64(v.GetBaseBet()), -// TotalBet: proto.Int64(v.GetTotalBet()), -// PriceValue: proto.Int64(int64(v.GetPriceValue())), -// UserName: proto.String(v.GetUserName()), -// Cards: v.GetCards(), -// } -// pack.BigWinHistory = append(pack.BigWinHistory, player) -// } -// -// //pack := &avengers.SCAvengersBigWinHistory{} -// //for i := len(jackpotList) - 1; i >= 0; i-- { -// // v := jackpotList[i] -// // player := &avengers.AvengersBigWinHistoryInfo{ -// // SpinID: proto.String(v.GetSpinID()), -// // CreatedTime: proto.Int64(v.GetCreatedTime()), -// // RoomID: proto.Int64(v.GetRoomID()), -// // PriceValue: proto.Int64(int64(v.GetPriceValue())), -// // UserName: proto.String(v.GetUserName()), -// // } -// // pack.BigWinHistory = append(pack.BigWinHistory, player) -// //} -// proto.SetDefaults(pack) -// return pack -//} diff --git a/worldsrv/logiclevelmgr.go b/worldsrv/logiclevelmgr.go deleted file mode 100644 index a445c99..0000000 --- a/worldsrv/logiclevelmgr.go +++ /dev/null @@ -1,121 +0,0 @@ -package main - -// -//import ( -// "encoding/json" -// "mongo.games.com/game/common" -// "mongo.games.com/game/model" -// "mongo.games.com/game/webapi" -// "mongo.games.com/goserver/core/logger" -// "io/ioutil" -// "net/http" -// "net/url" -// "strconv" -// "time" -//) -// -//var LogicLevelMgrSington = &LogicLevelMgr{ -// config: make(map[string]*LogicLevelConfig), -// client: &http.Client{Timeout: 30 * time.Second}, -//} -// -//type LogicLevelMgr struct { -// config map[string]*LogicLevelConfig -// client *http.Client -//} -//type LogicLevelConfig struct { -// Platform string -// LogicLevelInfo map[int32]*LogicLevelInfo -//} -//type LogicLevelInfo struct { -// Id int32 //分层id -// ClusterName string //分层名称 -// StartAct int32 //分层开关 1开启 0关闭 -// CheckActIds []int32 //分层包含的活动id -// CheckPay []string //分层包含的充值类型 -//} -// -//func (this *LogicLevelMgr) GetConfig(platform string) *LogicLevelConfig { -// return this.config[platform] -//} -// -//func (this *LogicLevelMgr) UpdateConfig(cfg *LogicLevelConfig) { -// logger.Logger.Trace("++++++++++++++UpdateConfig++++++++++++++") -// this.config[cfg.Platform] = cfg -// -// if playersOL, ok := PlayerMgrSington.playerOfPlatform[cfg.Platform]; ok { -// for _, player := range playersOL { -// if player != nil && !player.IsRob { -// player.layered = make(map[int]bool) -// for _, v := range player.layerlevels { -// if td, ok := cfg.LogicLevelInfo[int32(v)]; ok { -// if td.StartAct == 1 { -// for _, id := range td.CheckActIds { -// player.layered[int(id)] = true -// } -// } -// } -// } -// //player.ActStateSend2Client() -// } -// } -// } -//} -// -//type NewMsg struct { -// Platform string -// SnId int -// Levels []int -//} -// -//func (this *LogicLevelMgr) SendPostBySnIds(platform string, snids []int32) []NewMsg { -// client := this.client -// form := make(url.Values) -// form.Set("Platform", platform) -// str := "" -// for k, snid := range snids { -// str += strconv.Itoa(int(snid)) -// if k+1 < len(snids) { -// str += "," -// } -// } -// form.Set("SnIds", str) -// form.Set("PltName", common.CustomConfig.GetString("PltName")) -// logicLevelUrl := common.CustomConfig.GetString("LogicLevelUrl") -// resp, err := client.PostForm(logicLevelUrl+"/QueryDataBySnIds", form) -// if resp != nil && resp.Status == "200 OK" && err == nil { -// defer resp.Body.Close() -// body, _ := io.ReadAll(resp.Body) -// logger.Logger.Trace(string(body)) -// var data []NewMsg -// json.Unmarshal(body, &data) -// return data -// } -// return nil -//} -//func (this *LogicLevelMgr) LoadConfig() { -// logger.Logger.Trace("++++++++++++++LoadConfig++++++++++++++") -// type LogicLevelConfigData struct { -// Tag int -// Msg []*LogicLevelConfig -// } -// if !model.GameParamData.UseEtcd { -// logger.Logger.Trace("API_GetGradeShopConfigData") -// buff, err := webapi.API_GetLogicLevelConfigData(common.GetAppId()) -// if err == nil { -// var data LogicLevelConfigData -// err = json.Unmarshal(buff, &data) -// if err == nil && data.Tag == 0 { -// for _, cfg := range data.Msg { -// this.UpdateConfig(cfg) -// } -// } else { -// logger.Logger.Error("Unmarshal LogicLevelConfigData config data error:", err, string(buff)) -// } -// } else { -// logger.Logger.Error("Get LogicLevelConfigData config data error:", err) -// } -// } else { -// EtcdMgrSington.InitLogicLevelConfig() -// } -//} diff --git a/xlsx/DB_Skin.xlsx b/xlsx/DB_Skin.xlsx index c778487c866e80fdd69609fe58d464a1338a6620..94e7628af3a543492660759a6f2a98005a751ae8 100644 GIT binary patch delta 3436 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 Olddln223je0000@NKWJc delta 3451 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 MB0rOl!r$)y0!-LW)&Kwi