Merge branch 'sdk' into online
This commit is contained in:
commit
1cf3bef001
@ -2,8 +2,13 @@ package GoUtil
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/aes"
|
||||
"crypto/cipher"
|
||||
crand "crypto/rand"
|
||||
"encoding/base64"
|
||||
"encoding/gob"
|
||||
"fmt"
|
||||
"io"
|
||||
"math/rand"
|
||||
"reflect"
|
||||
"strconv"
|
||||
@ -19,6 +24,54 @@ type EventObj struct {
|
||||
Obj interface{}
|
||||
}
|
||||
|
||||
const (
|
||||
SECRET_KEY = ")VQbB(vpy=U(wcp)"
|
||||
)
|
||||
|
||||
// 加密字符串
|
||||
func Encrypt(plainText string) (string, error) {
|
||||
block, err := aes.NewCipher([]byte(SECRET_KEY))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
cipherText := make([]byte, aes.BlockSize+len(plainText))
|
||||
iv := cipherText[:aes.BlockSize]
|
||||
if _, err := io.ReadFull(crand.Reader, iv); err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
stream := cipher.NewCFBEncrypter(block, iv)
|
||||
stream.XORKeyStream(cipherText[aes.BlockSize:], []byte(plainText))
|
||||
|
||||
return base64.URLEncoding.EncodeToString(cipherText), nil
|
||||
}
|
||||
|
||||
// 解密字符串
|
||||
func Decrypt(cipherText string) (string, error) {
|
||||
cipherTextBytes, err := base64.URLEncoding.DecodeString(cipherText)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
block, err := aes.NewCipher([]byte(SECRET_KEY))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
if len(cipherTextBytes) < aes.BlockSize {
|
||||
return "", fmt.Errorf("cipherText too short")
|
||||
}
|
||||
|
||||
iv := cipherTextBytes[:aes.BlockSize]
|
||||
cipherTextBytes = cipherTextBytes[aes.BlockSize:]
|
||||
|
||||
stream := cipher.NewCFBDecrypter(block, iv)
|
||||
stream.XORKeyStream(cipherTextBytes, cipherTextBytes)
|
||||
|
||||
return string(cipherTextBytes), nil
|
||||
}
|
||||
|
||||
func (o *EventObj) isEqual(tar *EventObj) bool {
|
||||
if reflect.ValueOf(o.Callback).Pointer() == reflect.ValueOf(tar.Callback).Pointer() && o.Obj == tar.Obj {
|
||||
return true
|
||||
|
||||
@ -192,3 +192,11 @@ func GetReqTimes() int {
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Value")
|
||||
}
|
||||
|
||||
func GetItemIdByCardId(CardId int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CARD_DETAIL_CFG_NAME, CardId)
|
||||
if err != nil {
|
||||
log.Debug("GetItemIdByCardId data not found")
|
||||
}
|
||||
return gamedata.GetIntValue(data, "ItemId")
|
||||
}
|
||||
|
||||
@ -29,6 +29,7 @@ var Server struct {
|
||||
RedisAddr string
|
||||
RedisPort string
|
||||
RedisPwd string
|
||||
RedisDb int
|
||||
|
||||
GameName string
|
||||
ServerType string
|
||||
|
||||
@ -16,6 +16,7 @@ const (
|
||||
CFG_LIMITED_TIME_EVENT_SENCE_JACKPOT = "LimitedTimeEventSenceJackpot"
|
||||
CFG_LIMITED_TIME_EVENT_FAST = "LimitedTimeEventFast"
|
||||
CFG_LIMITED_TIME_EVENT_JACKPOT = "LimitedTimeEventJackpot"
|
||||
CFG_LIMITED_TIME_EVENT_CHEST_JACKPOT = "LimitedTimeEventChestJackpot"
|
||||
CFG_LIMITED_TIME_EVENT_CONST = "LimitedTimeEventConst"
|
||||
CFG_LIMITED_TIME_EVENT_BONUS = "LimitedTimeEventBonus"
|
||||
)
|
||||
@ -31,6 +32,7 @@ func init() {
|
||||
gamedata.InitCfg(CFG_LIMITED_TIME_EVENT_JACKPOT)
|
||||
gamedata.InitCfg(CFG_LIMITED_TIME_EVENT_CONST)
|
||||
gamedata.InitCfg(CFG_LIMITED_TIME_EVENT_BONUS)
|
||||
gamedata.InitCfg(CFG_LIMITED_TIME_EVENT_CHEST_JACKPOT)
|
||||
}
|
||||
|
||||
// 获取限时事件触发列表
|
||||
@ -49,20 +51,47 @@ func GetMeteorAdd(ChessLv int) int {
|
||||
}
|
||||
|
||||
// 获取宝箱雨奖励
|
||||
func GetChestReward(Star int) []*item.Item {
|
||||
func GetChestReward(Star int) ([]*item.Item, int, int, int) {
|
||||
data, err := gamedata.GetData(CFG_LIMITED_TIME_EVENT_CHEST)
|
||||
if err != nil {
|
||||
log.Debug("GetChestReward err:%v", err)
|
||||
return nil
|
||||
return nil, 0, 0, 0
|
||||
}
|
||||
for _, v := range data {
|
||||
Grade := 0
|
||||
for k, v := range data {
|
||||
Min := gamedata.GetIntValue(v, "Min")
|
||||
Max := gamedata.GetIntValue(v, "Max")
|
||||
if Star >= Min && Star <= Max {
|
||||
return gamedata.GetItemList(v, "Items")
|
||||
Grade = GoUtil.Int(k)
|
||||
break
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
||||
data, err = gamedata.GetData(CFG_LIMITED_TIME_EVENT_CHEST_JACKPOT)
|
||||
if err != nil {
|
||||
log.Debug("GetChestReward err:%v", err)
|
||||
return nil, 0, 0, 0
|
||||
}
|
||||
RandMap := make(map[int]int)
|
||||
for k, v := range data {
|
||||
Prob := gamedata.GetIntValue(v, "Prob")
|
||||
if Grade == gamedata.GetIntValue(v, "Grade") {
|
||||
Id := GoUtil.Int(k)
|
||||
RandMap[Id] = Prob
|
||||
}
|
||||
}
|
||||
Id := GoUtil.RandMap(RandMap)
|
||||
data, err = gamedata.GetDataByIntKey(CFG_LIMITED_TIME_EVENT_CHEST_JACKPOT, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetChestReward err:%v", err)
|
||||
return nil, 0, 0, 0
|
||||
}
|
||||
Items := gamedata.GetItemList(data, "Items")
|
||||
|
||||
CardLv := gamedata.GetIntValue(data, "CardLv")
|
||||
Lv := gamedata.GetIntValue(data, "Lv")
|
||||
Jackpot := gamedata.GetIntValue(data, "Jackpot")
|
||||
return Items, CardLv, Lv, Jackpot
|
||||
}
|
||||
|
||||
// 获取超级订单奖励
|
||||
|
||||
@ -1,13 +1,13 @@
|
||||
{
|
||||
"AppID": 1,
|
||||
"LogLevel": "debug",
|
||||
"LogPath": "",
|
||||
"LogPath": "./log",
|
||||
"TCPAddr": ":3565",
|
||||
"WSAddr": ":3566",
|
||||
"MySqlAddr": "127.0.0.1",
|
||||
"MySqlPort": "3306",
|
||||
"MySqlUsr": "root",
|
||||
"MySqlPwd": "root",
|
||||
"MySqlPwd": "IOagNEq3C84c-20CmHEin5iODVc=",
|
||||
"MaxConnNum": 20000,
|
||||
"DbName": "Merge_Pet",
|
||||
"HttpPort": ":8081",
|
||||
|
||||
@ -25,7 +25,8 @@ var SqlDb *sqlx.DB
|
||||
|
||||
func InitDB() {
|
||||
//"用户名:密码@[连接方式](主机名:端口号)/数据库名"
|
||||
connect := fmt.Sprintf("%s:%s@(%s:%s)/%s", conf.Server.MySqlUsr, conf.Server.MySqlPwd, conf.Server.MySqlAddr, conf.Server.MySqlPort, conf.Server.DbName)
|
||||
MysqlPwd, _ := GoUtil.Decrypt(conf.Server.MySqlPwd)
|
||||
connect := fmt.Sprintf("%s:%s@(%s:%s)/%s", conf.Server.MySqlUsr, MysqlPwd, conf.Server.MySqlAddr, conf.Server.MySqlPort, conf.Server.DbName)
|
||||
SqlDb = sqlx.MustConnect("mysql", connect) // 设置连接数据库的参数
|
||||
SqlDb.SetMaxOpenConns(20) // 设置最大打开的连接数
|
||||
log.Debug("connect mysql success")
|
||||
|
||||
@ -17,7 +17,7 @@ func InitRedis() {
|
||||
rdb := redis.NewClient(&redis.Options{
|
||||
Addr: conf.Server.RedisAddr + ":" + conf.Server.RedisPort,
|
||||
Password: conf.Server.RedisPwd, // no password set
|
||||
DB: 0,
|
||||
DB: conf.Server.RedisDb,
|
||||
})
|
||||
|
||||
_, err := rdb.Ping(ctx).Result()
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"math"
|
||||
"server/GoUtil"
|
||||
champshipCfg "server/conf/champship"
|
||||
randnameCfg "server/conf/randname"
|
||||
@ -143,21 +144,21 @@ func (c *ChampshipMgr) ai(m *msg.Msg) (interface{}, error) {
|
||||
Notify := make(map[int]int)
|
||||
for e, r := range v {
|
||||
if r.Type == RANK_PLAYER_ROBOT {
|
||||
AddScore := 0
|
||||
AddScore := 0.0
|
||||
Robot := ChampshipData.Robot[r.Uid]
|
||||
if Robot == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
if Robot.Type == 2 && Robot.Time+60 < Now {
|
||||
AddScore = int(Robot.PerScore)
|
||||
AddScore = Robot.PerScore
|
||||
Robot.Time = Now
|
||||
}
|
||||
if Robot.Type == 3 && Robot.Time+1800 < Now {
|
||||
AddScore = int(Robot.PerScore)
|
||||
AddScore = Robot.PerScore
|
||||
Robot.Time = Now
|
||||
}
|
||||
r.Score += float64(AddScore)
|
||||
r.Score += AddScore
|
||||
} else {
|
||||
Notify[r.Uid] = e
|
||||
}
|
||||
@ -692,12 +693,12 @@ func CreateRobot(M float64, GroupId int) *ChampshipRobot {
|
||||
Score := M / 10
|
||||
PerScore := 0.0
|
||||
if Type == 2 {
|
||||
PerScore = (M / 10 * 0.34) / float64(GoUtil.NextZeroTimestampDuration()) / 60
|
||||
PerScore = math.Round((M/10*0.34)/(float64(GoUtil.NextZeroTimestampDuration())/60)*100) / 100
|
||||
Score = M / 10 * 0.66
|
||||
}
|
||||
if Type == 3 {
|
||||
PerScore = (M / 10 * 0.34) / float64(GoUtil.NextZeroTimestampDuration()) / 1800
|
||||
Score = 0
|
||||
PerScore = math.Round((M/10*0.34)/(float64(GoUtil.NextZeroTimestampDuration())/1800)*100) / 100
|
||||
Score = 2
|
||||
}
|
||||
|
||||
return &ChampshipRobot{
|
||||
|
||||
@ -102,8 +102,9 @@ func (gl *GameLogic) ZeroFlush() {
|
||||
})
|
||||
var a1 = []interface{}{gl.DailyTaskTimestamp}
|
||||
GoUtil.CallEvent(MergeConst.Notify_Daily_Renew, a1)
|
||||
gl.RankMgrSend(MsgMod.MSG_ZERO_UPDATE) // 零点更新排行榜
|
||||
gl.VarMgrSend(MsgMod.MSG_ZERO_UPDATE) // 零点更新变量
|
||||
gl.RankMgrSend(MsgMod.MSG_ZERO_UPDATE) // 零点更新排行榜
|
||||
gl.ChampshipMgrSend(MsgMod.MSG_ZERO_UPDATE) // 零点更新锦标赛
|
||||
gl.VarMgrSend(MsgMod.MSG_ZERO_UPDATE) // 零点更新变量
|
||||
gl.NotifyAll(MsgMod.MSG_ZERO_UPDATE)
|
||||
gl.CreateDailyLogFile()
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ import (
|
||||
"fmt"
|
||||
"server/GoUtil"
|
||||
cardCfg "server/conf/card"
|
||||
chargeCfg "server/conf/charge"
|
||||
playroomCfg "server/conf/playroom"
|
||||
"server/db"
|
||||
"server/game/mod/card"
|
||||
@ -73,6 +74,15 @@ func ReqGmCommand(args []interface{}) error {
|
||||
player.PlayMod.getSevenLoginMod().Active = num
|
||||
case "pay":
|
||||
ChargeId, _ := strconv.Atoi(arg[1])
|
||||
player.Kafka("pay", map[string]interface{}{
|
||||
"ProductId": ChargeId,
|
||||
"Price": chargeCfg.GetMoneyCharge(ChargeId),
|
||||
"PayType": 3,
|
||||
"OrderId": "gm",
|
||||
"PayChannelOrderId": "gm",
|
||||
"CreateTime": GoUtil.Now(),
|
||||
"PayTime": GoUtil.Now(),
|
||||
})
|
||||
Charge(player, ChargeId)
|
||||
case "resetFace":
|
||||
FaceMod := player.PlayMod.getFaceMod()
|
||||
|
||||
@ -15,6 +15,7 @@ const (
|
||||
)
|
||||
const (
|
||||
PLAYROOM_LOST = "playroom_lost"
|
||||
LOG_LENGTH = 10000
|
||||
)
|
||||
|
||||
type LogMgr struct {
|
||||
@ -36,6 +37,14 @@ func (L *LogMgr) InitManager() {
|
||||
L.McronSave.AddFunc("@every 10s", func() {
|
||||
L.Lock.Lock()
|
||||
defer L.Lock.Unlock()
|
||||
if kafkaMiddleware.KafkaMod == nil {
|
||||
if len(L.L) > LOG_LENGTH {
|
||||
L.L = L.L[:0]
|
||||
} else if len(L.L) > LOG_LENGTH {
|
||||
L.L = L.L[len(L.L)-LOG_LENGTH:]
|
||||
}
|
||||
return
|
||||
}
|
||||
for _, v := range L.L {
|
||||
value, _ := json.Marshal(v)
|
||||
kafkaMiddleware.SendMsg([]byte(v.EventName), value)
|
||||
|
||||
@ -47,7 +47,7 @@ type Player struct {
|
||||
agent gate.Agent
|
||||
lock sync.Mutex
|
||||
stopSignal chan bool
|
||||
Msg map[string]PlayerMsg
|
||||
Msg []PlayerMsg
|
||||
Trigger []*quest.Trigger
|
||||
MDispatr *timer.Dispatcher
|
||||
McronSave *cron.Cron
|
||||
@ -113,16 +113,16 @@ func (p *Player) SendClientRes() {
|
||||
for _, v := range p.Msg {
|
||||
G_GameLogicPtr.PackResInfo(p.GetAgent(), v.F, v.B)
|
||||
}
|
||||
p.Msg = make(map[string]PlayerMsg)
|
||||
p.Msg = make([]PlayerMsg, 0)
|
||||
}
|
||||
|
||||
func (p *Player) PushClientRes(m proto.Message) {
|
||||
key := GetStructName(m)
|
||||
buff, _ := proto.Marshal(m)
|
||||
p.Msg[key] = PlayerMsg{
|
||||
p.Msg = append(p.Msg, PlayerMsg{
|
||||
F: key,
|
||||
B: buff,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func (p *Player) PushAndSendClienRes(m proto.Message) {
|
||||
@ -173,14 +173,14 @@ func (p *Player) BackUp() *PlayerBackUp {
|
||||
func (p *Player) Recover(backUp *PlayerBackUp) {
|
||||
// p.GetPlayerBaseMod().Data = backUp.Data
|
||||
p.PlayMod.Recover(backUp)
|
||||
p.Msg = make(map[string]PlayerMsg)
|
||||
p.Msg = make([]PlayerMsg, 0)
|
||||
}
|
||||
|
||||
func (p *Player) InitPlayer(UserName string) error {
|
||||
p.lock.Lock()
|
||||
defer p.lock.Unlock()
|
||||
p.msgChan = make(chan *MsgMod.Msg, 100)
|
||||
p.Msg = make(map[string]PlayerMsg)
|
||||
p.Msg = make([]PlayerMsg, 0)
|
||||
p.args = make(map[string]interface{})
|
||||
p.timerList = make(map[string]*timer.Timer)
|
||||
p.MDispatr = timer.NewDispatcher(100)
|
||||
@ -491,6 +491,10 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error {
|
||||
"change_num": v.Num,
|
||||
"change_after": p.GetPlayerBaseMod().GetDiamond(),
|
||||
})
|
||||
case item.ITEM_TYPE_CARD: // 卡牌
|
||||
CardMod := p.PlayMod.getCardMod()
|
||||
Effect := itemCfg.GetItemEffect(v.Id)
|
||||
CardMod.AddCard(Effect)
|
||||
case item.ITEM_TYPE_CARD_PACK: // 卡包
|
||||
CardMod := p.PlayMod.getCardMod()
|
||||
Effect := itemCfg.GetItemEffect(v.Id)
|
||||
@ -656,7 +660,7 @@ func (p *Player) LoginBackData() {
|
||||
func (p *Player) InitPlayerOnly() {
|
||||
p.lock.Lock()
|
||||
defer p.lock.Unlock()
|
||||
p.Msg = make(map[string]PlayerMsg)
|
||||
p.Msg = make([]PlayerMsg, 0)
|
||||
p.args = make(map[string]interface{})
|
||||
p.timerList = make(map[string]*timer.Timer)
|
||||
p.MDispatr = timer.NewDispatcher(10)
|
||||
@ -687,6 +691,9 @@ func (p *Player) GetSimpleData(Uid int, simple *PlayerSimpleData) error {
|
||||
p.M_DwUin = int64(Uid)
|
||||
p.InitPlayerOnly()
|
||||
Base := p.GetPlayerBaseMod()
|
||||
if Base == nil {
|
||||
return errors.New("GetSimpleData failed")
|
||||
}
|
||||
simple.Name = p.GetPlayerBaseMod().GetName()
|
||||
simple.Avatar = p.PlayMod.getAvatarMod().SetId
|
||||
simple.Face = p.PlayMod.getFaceMod().SetId
|
||||
@ -748,6 +755,9 @@ func (p *Player) HandleInUserRank() {
|
||||
func (p *Player) HandleInChampshipRank() {
|
||||
ChampshipMod := p.PlayMod.getChampshipMod()
|
||||
Score := float64(ChampshipMod.GetScore())
|
||||
if Score <= 0 {
|
||||
return
|
||||
}
|
||||
// 更新排行榜
|
||||
m := &MsgMod.Msg{
|
||||
Type: MsgMod.HANDLE_TYPE_CHAMPSHIP_INRANK,
|
||||
|
||||
@ -7,6 +7,7 @@ import (
|
||||
"server/GoUtil"
|
||||
"server/MergeConst"
|
||||
cardCfg "server/conf/card"
|
||||
limitedTimeEventCfg "server/conf/limitedTimeEvent"
|
||||
mergeDataCfg "server/conf/mergeData"
|
||||
miningCfg "server/conf/mining"
|
||||
"server/db"
|
||||
@ -177,6 +178,7 @@ func ReqRewardOrder(args []interface{}) error {
|
||||
proto.Unmarshal(buf, req)
|
||||
OrderMod := player.PlayMod.getOrderMod()
|
||||
ChessMod := player.PlayMod.getChessMod()
|
||||
CardMod := player.PlayMod.getCardMod()
|
||||
LimitedTimeEventMod := player.PlayMod.getLimitedTimeEventMod()
|
||||
Item, mergeList, OrderType, Star, err := OrderMod.RewardOrder(int(req.OrderId))
|
||||
if OrderType == order.Trigger_type { // playroom触发式订单获取额外道具
|
||||
@ -184,6 +186,15 @@ func ReqRewardOrder(args []interface{}) error {
|
||||
Item1 := PlayroomMod.GetReward()
|
||||
Item = item.Merge(Item, Item1)
|
||||
}
|
||||
|
||||
if !OrderMod.CheckSuperOrder() {
|
||||
if LimitedTimeEventMod.RemoveSuperOrder() {
|
||||
player.PushClientRes(&msg.LimitEventNotify{
|
||||
Id: limitedTimeEvent.EVENT_TYPE_SUPER_ORDER,
|
||||
Type: limitedTimeEvent.EVENT_NOTIFY_TYPE_DEL,
|
||||
})
|
||||
}
|
||||
}
|
||||
if LimitedTimeEventMod.CheckExist(limitedTimeEvent.EVENT_TYPE_METEOR_SHOW) { //流星雨活动
|
||||
AddItem := LimitedTimeEventMod.GetMeteorReward(mergeList)
|
||||
if len(AddItem) > 0 {
|
||||
@ -194,27 +205,6 @@ func ReqRewardOrder(args []interface{}) error {
|
||||
}
|
||||
Item = item.Merge(Item, AddItem)
|
||||
}
|
||||
if LimitedTimeEventMod.CheckExist(limitedTimeEvent.EVENT_TYPE_CHEST_RAIN) { //宝箱雨活动
|
||||
AddItem := LimitedTimeEventMod.GetChestReward(mergeList)
|
||||
Item = item.Merge(Item, AddItem)
|
||||
if len(AddItem) > 0 {
|
||||
player.PushClientRes(&msg.ResChessRainReward{
|
||||
Chest: int32(AddItem[0].Id),
|
||||
})
|
||||
player.TeLog("time_limited_event_action", map[string]interface{}{
|
||||
"event_type": "chest_rain",
|
||||
"item_list": AddItem,
|
||||
})
|
||||
}
|
||||
}
|
||||
if !OrderMod.CheckSuperOrder() {
|
||||
if LimitedTimeEventMod.RemoveSuperOrder() {
|
||||
player.PushClientRes(&msg.LimitEventNotify{
|
||||
Id: limitedTimeEvent.EVENT_TYPE_SUPER_ORDER,
|
||||
Type: limitedTimeEvent.EVENT_NOTIFY_TYPE_DEL,
|
||||
})
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResRewardOrder{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
@ -240,6 +230,50 @@ func ReqRewardOrder(args []interface{}) error {
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
if LimitedTimeEventMod.CheckExist(limitedTimeEvent.EVENT_TYPE_CHEST_RAIN) { //宝箱雨活动
|
||||
AddItem, CardLv, ProductLv, Jackpot := LimitedTimeEventMod.GetChestReward(mergeList)
|
||||
ChestRainItems := make([]*item.Item, 0)
|
||||
if len(AddItem) > 0 {
|
||||
ChestRainItems = AddItem
|
||||
}
|
||||
JackpotId := 0
|
||||
if CardLv > 0 {
|
||||
CardId := CardMod.RandCard(CardLv)
|
||||
ItemId := cardCfg.GetItemIdByCardId(CardId)
|
||||
ChestRainItems = []*item.Item{{Id: ItemId, Num: 1}}
|
||||
}
|
||||
if ProductLv > 0 {
|
||||
Color := order.RandChessColor(ChessMod.GetOrderEmit())
|
||||
ChessId := mergeDataCfg.GetChessIdByLvAndColor(ProductLv, Color)
|
||||
ChestRainItems = append(ChestRainItems, &item.Item{Id: ChessId, Num: 1})
|
||||
}
|
||||
if Jackpot > 0 {
|
||||
ProbList := limitedTimeEventCfg.GetSenceJackpotProb()
|
||||
JackpotId = GoUtil.RandMap(ProbList)
|
||||
ChestRainItems = limitedTimeEventCfg.GetSenceJackpotReward(JackpotId)
|
||||
}
|
||||
player.args["ResItemPopId"] = JackpotId
|
||||
err = player.HandleItem(ChestRainItems, msg.ITEM_POP_LABEL_LimitEventChestRain.String())
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResRewardOrder{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: err.Error(),
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
if len(ChestRainItems) > 0 {
|
||||
player.PushClientRes(&msg.ResChessRainReward{
|
||||
Items: item.ItemToMsg(ChestRainItems),
|
||||
Id: int32(JackpotId),
|
||||
})
|
||||
player.TeLog("time_limited_event_action", map[string]interface{}{
|
||||
"event_type": "chest_rain",
|
||||
"item_list": ChestRainItems,
|
||||
})
|
||||
}
|
||||
}
|
||||
data := &PlayerChessData{}
|
||||
err = data.UpdateChessData(player, req.MChessData)
|
||||
if err != nil {
|
||||
@ -272,22 +306,22 @@ func ReqRewardOrder(args []interface{}) error {
|
||||
if player.GetPlayerBaseMod().GetLevel() >= 6 {
|
||||
ChampshipMod := player.PlayMod.getChampshipMod()
|
||||
ChampshipMod.AddScore(mergeList)
|
||||
player.HandleInChampshipRank()
|
||||
}
|
||||
// playroom 触发式订单
|
||||
err = PlayroomOrderTrigger(player)
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResRewardOrder{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: err.Error(),
|
||||
})
|
||||
return err
|
||||
}
|
||||
// // playroom 触发式订单
|
||||
// err = PlayroomOrderTrigger(player)
|
||||
// if err != nil {
|
||||
// player.SendErrClienRes(&msg.ResRewardOrder{
|
||||
// Code: msg.RES_CODE_FAIL,
|
||||
// Msg: err.Error(),
|
||||
// })
|
||||
// return err
|
||||
// }
|
||||
FriendTreasureMod := player.PlayMod.getFriendTreasureMod()
|
||||
FriendTreasureMod.AddStar(Star / 10)
|
||||
player.PushClientRes(FriendTreasureMod.NotifyStar())
|
||||
// 限时事件增加进度
|
||||
// LimitedTimeEventMod.AddProgress(player.GetPlayerBaseMod().GetLevel())
|
||||
player.HandleInChampshipRank()
|
||||
LimitedTimeEventMod.AddProgress(player.GetPlayerBaseMod().GetLevel())
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(PiggyBankMod.BackData())
|
||||
player.PushClientRes(OrderMod.BackData())
|
||||
@ -3278,12 +3312,12 @@ func ReqFriendTreasureEnd(args []interface{}) error {
|
||||
}
|
||||
|
||||
func ReqKafkaLog(args []interface{}) error {
|
||||
_, player, buf := ParseArgs(args)
|
||||
req := &msg.ReqKafkaLog{}
|
||||
proto.Unmarshal(buf, req)
|
||||
player.Kafka(req.Event, map[string]interface{}{
|
||||
"data": req.Data,
|
||||
})
|
||||
// _, player, buf := ParseArgs(args)
|
||||
// req := &msg.ReqKafkaLog{}
|
||||
// proto.Unmarshal(buf, req)
|
||||
// // player.Kafka(req.Event, map[string]interface{}{
|
||||
// // "data": req.Data,
|
||||
// // })
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@ -2,6 +2,11 @@ package game
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"server/GoUtil"
|
||||
cardCfg "server/conf/card"
|
||||
limitedTimeEventCfg "server/conf/limitedTimeEvent"
|
||||
mergeDataCfg "server/conf/mergeData"
|
||||
"server/game/mod/item"
|
||||
"server/game/mod/order"
|
||||
"server/game/mod/sevenLogin"
|
||||
"server/msg"
|
||||
@ -98,3 +103,33 @@ func UnitLimitProgress(p *Player) error {
|
||||
LimitedTimeEventMod.AddProgress(6)
|
||||
return nil
|
||||
}
|
||||
|
||||
func UnitLimitedTimeEvent(p *Player) error {
|
||||
LimitedTimeEventMod := p.PlayMod.getLimitedTimeEventMod()
|
||||
CardMod := p.PlayMod.getCardMod()
|
||||
ChessMod := p.PlayMod.getChessMod()
|
||||
mergeList := []int{1, 2, 30}
|
||||
ChestRainItems := make([]*item.Item, 0)
|
||||
AddItem, CardLv, ProductLv, Jackpot := LimitedTimeEventMod.GetChestReward(mergeList)
|
||||
if len(AddItem) > 0 {
|
||||
ChestRainItems = AddItem
|
||||
}
|
||||
JackpotId := 0
|
||||
if CardLv > 0 {
|
||||
CardId := CardMod.RandCard(CardLv)
|
||||
ItemId := cardCfg.GetItemIdByCardId(CardId)
|
||||
ChestRainItems = []*item.Item{{Id: ItemId, Num: 1}}
|
||||
}
|
||||
if ProductLv > 0 {
|
||||
Color := order.RandChessColor(ChessMod.GetOrderEmit())
|
||||
ChessId := mergeDataCfg.GetChessIdByLvAndColor(ProductLv, Color)
|
||||
ChestRainItems = append(ChestRainItems, &item.Item{Id: ChessId, Num: 1})
|
||||
}
|
||||
if Jackpot > 0 {
|
||||
ProbList := limitedTimeEventCfg.GetSenceJackpotProb()
|
||||
JackpotId = GoUtil.RandMap(ProbList)
|
||||
ChestRainItems = limitedTimeEventCfg.GetSenceJackpotReward(JackpotId)
|
||||
}
|
||||
fmt.Print(ChestRainItems, JackpotId)
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -38,6 +38,7 @@ func AdminPlayerInfo(args []interface{}) error {
|
||||
}
|
||||
res := make(map[string]interface{})
|
||||
res["Name"] = player.PlayMod.getBaseMod().NickName
|
||||
res["Uid"] = player.M_DwUin
|
||||
res["AreaId"] = player.PlayMod.getDecorateMod().GetAreaId()
|
||||
res["Charge"] = player.PlayMod.getChargeMod().Charge
|
||||
res["Level"] = player.GetPlayerBaseMod().GetLevel()
|
||||
@ -49,6 +50,7 @@ func AdminPlayerInfo(args []interface{}) error {
|
||||
res["Login"] = player.GetPlayerBaseMod().Data.LoginTime
|
||||
res["Cumulative"] = player.PlayMod.getBaseMod().Cumulative
|
||||
res["TodayCumulative"] = player.PlayMod.getBaseMod().TodayCumulative
|
||||
res["Bonus"] = player.PlayMod.getLimitedTimeEventMod().Progress
|
||||
OrderMap := make(map[int]interface{})
|
||||
Index := 0
|
||||
for k, v := range player.PlayMod.getOrderMod().OrderList {
|
||||
|
||||
@ -535,3 +535,7 @@ func (c *CardMod) GetHandbookReward(CardId int) ([]*item.Item, error) {
|
||||
}
|
||||
return nil, fmt.Errorf("GetHandbookReward not find card")
|
||||
}
|
||||
|
||||
func (c *CardMod) RandCard(Star int) int {
|
||||
return randCard(c.Round, Star, 0)
|
||||
}
|
||||
|
||||
@ -29,6 +29,8 @@ const (
|
||||
ITEM_TYPE_DIAMOND = 3
|
||||
|
||||
// 物品类型
|
||||
ITEM_TYPE_CARD = 98 // 卡牌
|
||||
ITEM_TYPE_BAG = 99 // 背包
|
||||
ITEM_TYPE_CHESS = 100 // 棋子
|
||||
ITEM_TYPE_CARD_PACK = 101 // 卡包
|
||||
ITEM_TYPE_LIMIED_TIME_EVENT = 102 //限时事件
|
||||
|
||||
@ -20,6 +20,7 @@ const (
|
||||
EVENT_TYPE_GOLDCARD_EX = 8 // 金卡交换
|
||||
EVENT_TYPE_PET_THIEF = 9 // 宠物小偷
|
||||
EVENT_TYPE_FAST_PRODUCE = 10 // 连击快手
|
||||
EVENT_TYPE_CAT_CYCLONE = 11 // 猫咪飓风
|
||||
)
|
||||
|
||||
const (
|
||||
@ -192,12 +193,11 @@ func (l *LimitedTimeEventMod) GetMeteorReward(MergeList []int) []*item.Item {
|
||||
}
|
||||
|
||||
// 获取宝箱雨奖励
|
||||
func (l *LimitedTimeEventMod) GetChestReward(MergeList []int) []*item.Item {
|
||||
func (l *LimitedTimeEventMod) GetChestReward(MergeList []int) ([]*item.Item, int, int, int) {
|
||||
Star := 0
|
||||
for _, v := range MergeList {
|
||||
Star += mergeDataCfg.GetStarById(v)
|
||||
}
|
||||
|
||||
return limitedTimeEventCfg.GetChestReward(Star)
|
||||
}
|
||||
|
||||
|
||||
@ -15,14 +15,6 @@ func getChessNumRand(OrderN int) map[int]int {
|
||||
}
|
||||
}
|
||||
|
||||
// 超级订单棋子个数
|
||||
func getChessNumRandSuper(OrderN int) map[int]int {
|
||||
return map[int]int{
|
||||
2: int(70 - OrderN),
|
||||
3: int(30 + OrderN),
|
||||
}
|
||||
}
|
||||
|
||||
func getOrderDiffRand(Diff, OrderN int) map[int]int {
|
||||
var d map[int]int
|
||||
switch Diff {
|
||||
@ -145,18 +137,6 @@ func getChessLv(Min, Max, Diff int) int {
|
||||
return GoUtil.RandNum(Start, End)
|
||||
}
|
||||
|
||||
func getRandChessColor(Emit int) string {
|
||||
Produce := mergeDataCfg.GetEmitProduceChessType(Emit)
|
||||
if len(Produce) == 1 {
|
||||
return Produce[0]
|
||||
}
|
||||
key := GoUtil.RandMap(map[int]int{
|
||||
0: 80,
|
||||
1: 20,
|
||||
})
|
||||
return Produce[key]
|
||||
}
|
||||
|
||||
func getRandChessColorList(o *OrderMod, Emit []int, EnergyMul int) map[string]int {
|
||||
r := make(map[string]int)
|
||||
ChessList := make([]int, 0)
|
||||
@ -166,11 +146,14 @@ func getRandChessColorList(o *OrderMod, Emit []int, EnergyMul int) map[string]in
|
||||
}
|
||||
}
|
||||
for _, v := range Emit {
|
||||
Produce := mergeDataCfg.GetEmitProduceChessType(v)
|
||||
Produce := mergeDataCfg.GetEmitProduceType(v)
|
||||
if len(Produce) == 0 {
|
||||
continue
|
||||
}
|
||||
if len(Produce) == 1 {
|
||||
if Produce[0] == "" {
|
||||
continue
|
||||
}
|
||||
r[Produce[0]] = 100
|
||||
continue
|
||||
}
|
||||
@ -183,6 +166,26 @@ func getRandChessColorList(o *OrderMod, Emit []int, EnergyMul int) map[string]in
|
||||
return r
|
||||
}
|
||||
|
||||
func RandChessColor(Emit []int) string {
|
||||
r := make(map[string]int)
|
||||
for _, v := range Emit {
|
||||
Produce := mergeDataCfg.GetEmitProduceType(v)
|
||||
if len(Produce) == 0 {
|
||||
continue
|
||||
}
|
||||
if len(Produce) == 1 {
|
||||
if Produce[0] == "" {
|
||||
continue
|
||||
}
|
||||
r[Produce[0]] = 100
|
||||
continue
|
||||
}
|
||||
r[Produce[0]] = 80
|
||||
r[Produce[1]] = 20
|
||||
}
|
||||
return GoUtil.RandStringMap(r)
|
||||
}
|
||||
|
||||
func checkA1High(ChessList []int, Emit int, EnergyMul int) bool {
|
||||
ChessMinLev, ChessMaxLev := getChesslvRange(Emit, EnergyMul)
|
||||
HighLv := ChessMinLev + ((ChessMaxLev-ChessMinLev)/3)*2
|
||||
|
||||
@ -51,6 +51,13 @@ func init() {
|
||||
|
||||
}
|
||||
|
||||
func Reload() {
|
||||
for k := range G_AllConfigsJsonData {
|
||||
InitCfg(k)
|
||||
log.Debug("配置已重新加载:%s", k)
|
||||
}
|
||||
}
|
||||
|
||||
func readRfNew(st interface{}, ralativePath string) *recordfile.RecordFile {
|
||||
rf, err := recordfile.New(st)
|
||||
if err != nil {
|
||||
|
||||
@ -20,17 +20,9 @@ func main() {
|
||||
lconf.CenterAddr = conf.Server.CenterAddr
|
||||
lconf.PendingWriteNum = conf.PendingWriteNum
|
||||
|
||||
// c := cron.New()
|
||||
|
||||
// c.AddFunc("@every 1s", func() {
|
||||
// fmt.Println("tick every 1 second")
|
||||
// })
|
||||
|
||||
// c.Start()
|
||||
leaf.Run(
|
||||
game.Module,
|
||||
gate.Module,
|
||||
// login.Module,
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
@ -3,6 +3,8 @@ package kafkaMiddleware
|
||||
import (
|
||||
"context"
|
||||
"server/conf"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
"time"
|
||||
|
||||
"github.com/segmentio/kafka-go"
|
||||
)
|
||||
@ -17,6 +19,19 @@ func init() {
|
||||
// 连接至Kafka集群的Leader节点
|
||||
conn, err := kafka.DialLeader(context.Background(), "tcp", "kafka-server:9092", topic, partition)
|
||||
if err != nil {
|
||||
log.Error("kafka.DialLeader err: %v", err)
|
||||
go func() {
|
||||
for {
|
||||
time.Sleep(time.Minute)
|
||||
conn, err = kafka.DialLeader(context.Background(), "tcp", "kafka-server:9092", topic, partition)
|
||||
if err == nil {
|
||||
KafkaMod = conn
|
||||
log.Release("Reconnected to Kafka")
|
||||
break
|
||||
}
|
||||
log.Error("kafka.DialLeader retry err: %v", err)
|
||||
}
|
||||
}()
|
||||
return
|
||||
}
|
||||
KafkaMod = conn
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,12 +1,12 @@
|
||||
package leaf
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"os/signal"
|
||||
mergeCluster "server/cluster"
|
||||
sconf "server/conf"
|
||||
"server/game"
|
||||
"server/gamedata"
|
||||
"server/pkg/github.com/name5566/leaf/cluster"
|
||||
"server/pkg/github.com/name5566/leaf/conf"
|
||||
"server/pkg/github.com/name5566/leaf/console"
|
||||
@ -45,11 +45,19 @@ func Run(mods ...module.Module) {
|
||||
|
||||
// close
|
||||
c := make(chan os.Signal, 1)
|
||||
signal.Notify(c, os.Interrupt, syscall.SIGTERM, syscall.SIGINT, syscall.SIGKILL)
|
||||
sig := <-c
|
||||
fmt.Printf("Leaf closing down (signal: %v)\n", sig.String())
|
||||
console.Destroy()
|
||||
cluster.Destroy()
|
||||
module.Destroy()
|
||||
game.Destroy()
|
||||
signal.Notify(c, syscall.SIGTERM, syscall.SIGINT)
|
||||
for {
|
||||
sig := <-c
|
||||
if sig == syscall.SIGINT {
|
||||
gamedata.Reload()
|
||||
continue
|
||||
}
|
||||
log.Debug("Leaf closing down (signal: %v)\n", sig.String())
|
||||
console.Destroy()
|
||||
cluster.Destroy()
|
||||
module.Destroy()
|
||||
game.Destroy()
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -101,13 +101,10 @@ func NewDailyLog(now time.Time, strLevel string, pathname string, flag int) (*Lo
|
||||
if pathname != "" {
|
||||
// now := time.Now()
|
||||
|
||||
filename := fmt.Sprintf("%d%02d%02d_%02d_%02d_%02d.log",
|
||||
filename := fmt.Sprintf("%d%02d%02d.log",
|
||||
now.Year(),
|
||||
now.Month(),
|
||||
now.Day(),
|
||||
now.Hour(),
|
||||
now.Minute(),
|
||||
now.Second())
|
||||
now.Day())
|
||||
|
||||
file, err := os.Create(path.Join(pathname, filename))
|
||||
if err != nil {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user