更新代码
This commit is contained in:
parent
0ab62a2a65
commit
fbf8a5c257
@ -47,18 +47,19 @@ func GetReward(Reward, Score int) (int, []*item.Item) {
|
||||
return Reward, nil
|
||||
}
|
||||
r := make([]*item.Item, 0)
|
||||
NewReward := Reward
|
||||
for k, v := range data {
|
||||
Id := GoUtil.Int(k)
|
||||
if Reward >= Id {
|
||||
continue
|
||||
}
|
||||
if Score >= gamedata.GetIntValue(v, "Score") {
|
||||
if Score >= gamedata.GetIntValue(v, "Total") {
|
||||
Items := item.ParseItem(gamedata.GetValue(v, "Items"))
|
||||
r = item.Merge(r, Items)
|
||||
Reward = max(Reward, Id)
|
||||
NewReward = max(NewReward, Id)
|
||||
}
|
||||
}
|
||||
return Reward, r
|
||||
return NewReward, r
|
||||
}
|
||||
|
||||
func GetRankReward(Rank int) []*item.Item {
|
||||
|
||||
@ -6,7 +6,7 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
CFG_INVITE = "invite"
|
||||
CFG_INVITE = "Invite"
|
||||
)
|
||||
|
||||
func init() {
|
||||
|
||||
@ -217,3 +217,12 @@ func GetProgressReward(RewardId int) []*item.Item {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetProgressRewardType(RewardId int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_LIMITED_TIME_EVENT_JACKPOT, RewardId)
|
||||
if err != nil {
|
||||
log.Debug("GetProgressReward err:%v", err)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Type")
|
||||
}
|
||||
|
||||
@ -81,17 +81,19 @@ func (c *ChampshipMgr) Init() {
|
||||
c.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_INRANK, c.inRank)
|
||||
c.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_AI, c.ai)
|
||||
c.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_ZERO, c.ZeroUpdate)
|
||||
c.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY2, c.NotifyAll)
|
||||
|
||||
Now := GoUtil.Now()
|
||||
ZeroTime := GoUtil.ZeroTimestamp()
|
||||
Remain := Now - ZeroTime
|
||||
Remain1 := 1800 - Remain%1800
|
||||
|
||||
c.mDispatr.AfterFunc(time.Duration(Remain1)*time.Second, func() {
|
||||
c.mDispatr.AfterFunc(time.Duration(Remain1)*time.Second, func() { // 30分钟后重新分组
|
||||
c.Send(&msg.Msg{
|
||||
Type: msg.HANDLE_TYPE_CHAMPSHIP_GROUP,
|
||||
})
|
||||
})
|
||||
|
||||
c.mDispatr.AfterFunc(time.Duration(60)*time.Second, func() {
|
||||
c.Send(&msg.Msg{
|
||||
Type: msg.HANDLE_TYPE_CHAMPSHIP_AI,
|
||||
@ -104,6 +106,12 @@ func (c *ChampshipMgr) Init() {
|
||||
})
|
||||
}
|
||||
|
||||
func (c *ChampshipMgr) NotifyAll() {
|
||||
G_GameLogicPtr.NotifyAll(&msg.Msg{
|
||||
Type: msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY,
|
||||
})
|
||||
}
|
||||
|
||||
func (c *ChampshipMgr) ZeroUpdate(m *msg.Msg) (interface{}, error) {
|
||||
c.getData().PreRank = c.getData().Rank
|
||||
c.getData().PreRobot = c.getData().Robot
|
||||
@ -118,6 +126,11 @@ func (c *ChampshipMgr) ZeroUpdate(m *msg.Msg) (interface{}, error) {
|
||||
Type: msg.HANDLE_TYPE_CHAMPSHIP_ZERO,
|
||||
})
|
||||
})
|
||||
c.mDispatr.AfterFunc(time.Duration(1800)*time.Second, func() {
|
||||
c.Send(&msg.Msg{
|
||||
Type: msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY2,
|
||||
})
|
||||
})
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
|
||||
@ -38,6 +38,8 @@ func (f *FriendMgr) Init() {
|
||||
f.RegisterHandler(msg.HANDLE_TYPE_DEL, f.sendToPlayer)
|
||||
f.RegisterHandler(msg.HANDLE_TYPE_SYNC, f.sync)
|
||||
f.RegisterHandler(msg.HANDLE_TYPE_REFUSE, f.sync)
|
||||
f.RegisterHandler(msg.HANDLE_TYPE_INVITE_ADD_FRIEND, f.sendToPlayer)
|
||||
f.RegisterHandler(msg.HANDLE_TYPE_INVITE_FRIEND, f.sendToPlayer)
|
||||
|
||||
// 卡牌消息
|
||||
f.RegisterHandler(msg.HANDLE_TYPE_REQ_CARD, f.sendToPlayer)
|
||||
|
||||
@ -937,6 +937,7 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
|
||||
RegisterMsgProcessFunc("ReqSetFacebookUrl", ReqSetFacebookUrl) // 设置facebook地址
|
||||
|
||||
// 棋盘
|
||||
RegisterMsgProcessFunc("UpdatePlayerChessData", UpdatePlayerChessDataFunc) // 更新棋盘数据
|
||||
RegisterMsgProcessFunc("ReqSetEnergyMul", RegSetEneryFunc) //设置能量倍数
|
||||
RegisterMsgProcessFunc("ReqChessEx", ReqChessEx) // 转换棋子
|
||||
RegisterMsgProcessFunc("ReqGetChessFromBuff", ReqGetChessFromBuff) // 从buff中获取棋子
|
||||
@ -995,7 +996,7 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
|
||||
//场景转盘
|
||||
RegisterMsgProcessFunc("ReqLimitSenceReward", ReqLimitSenceReward)
|
||||
//领取限时事件进度奖励
|
||||
|
||||
RegisterMsgProcessFunc("ReqSelectLimitEvent", ReqSelectLimitEvent)
|
||||
// 好友
|
||||
RegisterMsgProcessFunc("ReqFriendList", ReqFriendList) // 请求好友列表
|
||||
RegisterMsgProcessFunc("ReqFriendApply", ReqFriendApply) // 请求申请好友列表
|
||||
@ -1173,3 +1174,17 @@ func getRedisLock(key string) error {
|
||||
func unsetRedisLock(key string) {
|
||||
db.RedisUnlock(key, "")
|
||||
}
|
||||
|
||||
func Destroy() {
|
||||
log.Debug("服务器下线")
|
||||
if G_GameLogicPtr != nil {
|
||||
for k, v := range G_GameLogicPtr.M_Players {
|
||||
log.Debug("palyer %d 断开连接 写入数据", k)
|
||||
v.ClearData()
|
||||
}
|
||||
G_GameLogicPtr.FriendMgr.SaveData()
|
||||
G_GameLogicPtr.RankMgr.SaveData()
|
||||
G_GameLogicPtr.ChampshipMgr.SaveData()
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -74,6 +74,11 @@ func ReqGmCommand(args []interface{}) error {
|
||||
case "setProgress":
|
||||
num, _ := strconv.Atoi(arg[1])
|
||||
player.PlayMod.getLimitedTimeEventMod().Progress = num
|
||||
case "setProgressReward":
|
||||
for i := 1; i < 5; i++ {
|
||||
player.PlayMod.getLimitedTimeEventMod().AddProgress(6)
|
||||
}
|
||||
player.PushClientRes(player.PlayMod.getLimitedTimeEventMod().ProgressBackData())
|
||||
case "champshipGroup":
|
||||
G_GameLogicPtr.ChampshipMgrSend(&MsgMod.Msg{
|
||||
Type: MsgMod.HANDLE_TYPE_CHAMPSHIP_GROUP,
|
||||
|
||||
@ -1,16 +1,10 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/robfig/cron/v3"
|
||||
"server/GoUtil"
|
||||
"server/MergeConst"
|
||||
"server/db"
|
||||
"server/gamedata"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/robfig/cron/v3"
|
||||
|
||||
"server/pkg/github.com/name5566/leaf/timer"
|
||||
)
|
||||
|
||||
@ -129,114 +123,5 @@ func (p *LimiteEventManager) GetIsHighRollerPersion() bool {
|
||||
|
||||
// 1.宝箱雨
|
||||
func (p *LimiteEventManager) InitManager() {
|
||||
// 0 11 20 12 *
|
||||
p.IsHighRoll = false
|
||||
p.m_MapCronEntryIDs = map[int][]*LimitEventPeriod{}
|
||||
c := cron.New()
|
||||
LimiteCfg := gamedata.GetConfigByName("LimiteEvent")
|
||||
WeekZero := p.GetSunDayZero()
|
||||
timeStamp := time.Now().Unix()
|
||||
|
||||
p.Mdispatr = timer.NewDispatcher(10)
|
||||
for i := 0; i < LimiteCfg.NumRecord(); i++ {
|
||||
record := LimiteCfg.Record(i).(*gamedata.LimiteEvent)
|
||||
startStrr := record.StartTime
|
||||
starts := strings.Split(startStrr, "|")
|
||||
|
||||
DurStrr := record.Duration
|
||||
Durs := strings.Split(DurStrr, "|")
|
||||
|
||||
AddTimesStrr := record.AddTimes
|
||||
ats := strings.Split(AddTimesStrr, "|")
|
||||
|
||||
p.m_MapCronEntryIDs[record.Id] = []*LimitEventPeriod{}
|
||||
for n := 0; n < len(starts); n++ {
|
||||
LEP := &LimitEventPeriod{}
|
||||
start := starts[n]
|
||||
dur, _ := strconv.Atoi(Durs[n])
|
||||
addt, _ := strconv.Atoi(ats[n])
|
||||
LEP.StartCronID, _ = c.AddFunc(start, func() {
|
||||
fmt.Println("Next: UTC", c.Entry(LEP.StartCronID).Next.Unix())
|
||||
fmt.Println("CronStr:" + LEP.CronStr)
|
||||
cur := int32(time.Now().Unix())
|
||||
LEP.StartTime = int32(cur)
|
||||
LEP.EndTime = int32(cur) + int32(dur)
|
||||
if record.Id == 9 {
|
||||
if G_GameLogicPtr.M_SvrGlobal.LimitCardSwapTime < LEP.StartTime {
|
||||
card4Cfg, str4 := gamedata.GetRandomDifferenceSet(4, G_GameLogicPtr.M_SvrGlobal.Limit4CardExclude)
|
||||
card5Cfg, str5 := gamedata.GetRandomDifferenceSet(5, G_GameLogicPtr.M_SvrGlobal.Limit5CardExclude)
|
||||
G_GameLogicPtr.M_SvrGlobal.Limit4Card = int32(card4Cfg.Id)
|
||||
G_GameLogicPtr.M_SvrGlobal.Limit5Card = int32(card5Cfg.Id)
|
||||
G_GameLogicPtr.M_SvrGlobal.Limit4CardExclude = str4
|
||||
G_GameLogicPtr.M_SvrGlobal.Limit5CardExclude = str5
|
||||
G_GameLogicPtr.M_SvrGlobal.LimitCardSwapTime = LEP.StartTime
|
||||
db.FormatAllMemUpdateDb(&G_GameLogicPtr.M_SvrGlobal, "t_server_global_data", "Id")
|
||||
}
|
||||
}
|
||||
GoUtil.CallEvent(MergeConst.OpenNewLimitEvent, []interface{}{record.Id, cur, cur + int32(dur), record.Type})
|
||||
if record.Id == 4 {
|
||||
p.IsHighRoll = true
|
||||
}
|
||||
go func() {
|
||||
LeafTimer := p.Mdispatr.AfterFunc(time.Duration(dur)*time.Second, func() {
|
||||
if record.Id == 4 {
|
||||
p.IsHighRoll = false
|
||||
}
|
||||
})
|
||||
LEP.EndTimer = LeafTimer
|
||||
|
||||
(<-p.Mdispatr.ChanTimer).Cb()
|
||||
}()
|
||||
})
|
||||
LEP.Duration = int32(dur)
|
||||
LEP.CronStr = start
|
||||
LEP.AddTimes = int32(addt)
|
||||
p.m_MapCronEntryIDs[record.Id] = append(p.m_MapCronEntryIDs[record.Id], LEP)
|
||||
}
|
||||
}
|
||||
c.Start()
|
||||
for k, v := range p.m_MapCronEntryIDs {
|
||||
// record := LimiteCfg.Index(k).(*gamedata.LimiteEvent)
|
||||
key := k
|
||||
for i := 0; i < len(v); i++ {
|
||||
Schedule := c.Entry(v[i].StartCronID).Schedule
|
||||
Next := Schedule.Next(time.Unix(WeekZero, 0))
|
||||
// fmt.Println("Next.Unix():" + strconv.Itoa(int(Next.Unix())))
|
||||
value := v[i]
|
||||
if timeStamp >= Next.Unix() && timeStamp < Next.Unix()+int64(value.Duration) {
|
||||
fmt.Println("CronStr:" + value.CronStr)
|
||||
if key == 4 {
|
||||
p.IsHighRoll = true
|
||||
}
|
||||
if key == 9 {
|
||||
if G_GameLogicPtr.M_SvrGlobal.LimitCardSwapTime < int32(Next.Unix()) {
|
||||
card4Cfg, str4 := gamedata.GetRandomDifferenceSet(4, G_GameLogicPtr.M_SvrGlobal.Limit4CardExclude)
|
||||
card5Cfg, str5 := gamedata.GetRandomDifferenceSet(5, G_GameLogicPtr.M_SvrGlobal.Limit5CardExclude)
|
||||
G_GameLogicPtr.M_SvrGlobal.Limit4Card = int32(card4Cfg.Id)
|
||||
G_GameLogicPtr.M_SvrGlobal.Limit5Card = int32(card5Cfg.Id)
|
||||
G_GameLogicPtr.M_SvrGlobal.Limit4CardExclude = str4
|
||||
G_GameLogicPtr.M_SvrGlobal.Limit5CardExclude = str5
|
||||
G_GameLogicPtr.M_SvrGlobal.LimitCardSwapTime = int32(Next.Unix())
|
||||
db.FormatAllMemUpdateDb(&G_GameLogicPtr.M_SvrGlobal, "t_server_global_data", "Id")
|
||||
}
|
||||
}
|
||||
go func() {
|
||||
delta := Next.Unix() + int64(value.Duration) - timeStamp
|
||||
LeafTimer := p.Mdispatr.AfterFunc(time.Duration(delta)*time.Second, func() {
|
||||
if key == 4 {
|
||||
p.IsHighRoll = false
|
||||
}
|
||||
})
|
||||
value.EndTimer = LeafTimer
|
||||
value.StartTime = int32(Next.Unix())
|
||||
value.EndTime = int32(Next.Unix()) + int32(value.Duration)
|
||||
(<-p.Mdispatr.ChanTimer).Cb()
|
||||
}()
|
||||
} else {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -9,7 +9,8 @@ import (
|
||||
|
||||
// 限时事件触发器
|
||||
func LimitedTimeEventTrigger(p *Player, AddEventId int) {
|
||||
EndTime, TimeoutEvent, AddEvent := p.PlayMod.getLimitedTimeEventMod().Trigger()
|
||||
Lv := p.GetPlayerBaseMod().GetLevel()
|
||||
EndTime, TimeoutEvent, AddEvent := p.PlayMod.getLimitedTimeEventMod().Trigger(Lv)
|
||||
remainingTime := GoUtil.NextHourRemain()
|
||||
EndTime = GoUtil.IfTrue(EndTime > 0, min(EndTime, int(remainingTime)), int(remainingTime)).(int)
|
||||
if AddEventId != 0 {
|
||||
|
||||
@ -18,6 +18,7 @@ import (
|
||||
MsgMod "server/game/mod/msg"
|
||||
"server/game/mod/quest"
|
||||
"server/msg"
|
||||
telog "server/thinkdata"
|
||||
"strconv"
|
||||
"sync"
|
||||
"time"
|
||||
@ -83,6 +84,7 @@ func (p *Player) Stop() {
|
||||
}
|
||||
|
||||
func (p *Player) CallEvent(Duration time.Duration, F func(), Label string) {
|
||||
log.Debug("CallEvent:%s", Label)
|
||||
if v, ok := p.timerList[Label]; ok {
|
||||
v.Stop()
|
||||
}
|
||||
@ -359,6 +361,8 @@ func (p *Player) ZeroUpdate(a []interface{}) {
|
||||
p.PlayMod.getEndlessMod().ZeroUpdate(p.PlayMod.getChargeMod().GetMaxCharge())
|
||||
p.PushClientRes(p.PlayMod.getEndlessMod().BackData())
|
||||
|
||||
p.PlayMod.getChampshipMod().ZeroUpdate()
|
||||
|
||||
p.PlayMod.save()
|
||||
}
|
||||
// 周更新
|
||||
@ -502,10 +506,22 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error {
|
||||
if v.Num > 0 && Label != "" {
|
||||
ResItem = append(ResItem, &msg.ItemInfo{Id: int32(v.Id), Num: int32(v.Num)})
|
||||
}
|
||||
var change_type string
|
||||
if v.Num < 0 {
|
||||
change_type = "gain"
|
||||
} else {
|
||||
change_type = "consume"
|
||||
}
|
||||
IType := itemCfg.GetItemType(v.Id)
|
||||
switch IType {
|
||||
case item.ITEM_TYPE_ENERGY: // 能量
|
||||
err := p.GetPlayerBaseMod().AddEnergy(v.Num)
|
||||
p.TeLog("asset_change", map[string]interface{}{
|
||||
"item_id": v.Id,
|
||||
"change_type": change_type,
|
||||
"change_num": v.Num,
|
||||
"change_after": p.GetPlayerBaseMod().GetEnergy(),
|
||||
})
|
||||
is_update = true
|
||||
if err != nil {
|
||||
return err
|
||||
@ -516,12 +532,24 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
p.TeLog("asset_change", map[string]interface{}{
|
||||
"item_id": v.Id,
|
||||
"change_type": change_type,
|
||||
"change_num": v.Num,
|
||||
"change_after": p.GetPlayerBaseMod().GetStar(),
|
||||
})
|
||||
case item.ITEM_TYPE_DIAMOND: // 钻石
|
||||
err := p.GetPlayerBaseMod().AddDiamond(v.Num)
|
||||
is_update = true
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
p.TeLog("asset_change", map[string]interface{}{
|
||||
"item_id": v.Id,
|
||||
"change_type": change_type,
|
||||
"change_num": v.Num,
|
||||
"change_after": p.GetPlayerBaseMod().GetDiamond(),
|
||||
})
|
||||
case item.ITEM_TYPE_CARD_PACK: // 卡包
|
||||
CardMod := p.PlayMod.getCardMod()
|
||||
Effect := itemCfg.GetItemEffect(v.Id)
|
||||
@ -546,9 +574,6 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error {
|
||||
}
|
||||
p.PushClientRes(ChessMod.BackData())
|
||||
case item.ITEM_TYPE_LIMIED_TIME_EVENT: // 限时事件
|
||||
if p.GetPlayerBaseMod().GetLevel() < 6 { // 等级小于6级不触发
|
||||
continue
|
||||
}
|
||||
EffectList := itemCfg.GetItemEffectList(v.Id)
|
||||
LimitedTimeEventMod := p.PlayMod.getLimitedTimeEventMod()
|
||||
if len(EffectList) < 2 {
|
||||
@ -612,8 +637,7 @@ func (p *Player) LoginBackData() {
|
||||
p.PushClientRes(p.PlayMod.mod_list.PiggyBank.BackData())
|
||||
p.PushClientRes(p.GetPlayerBaseMod().BackAsset())
|
||||
p.PushClientRes(p.GetPlayerBaseMod().BackKv())
|
||||
MyRank := G_GameLogicPtr.ChampshipMgr.getMyRank(int(p.M_DwUin))
|
||||
p.PushClientRes(p.PlayMod.mod_list.Champship.BackData(MyRank))
|
||||
BackChampship(p)
|
||||
BackUserInfo(p)
|
||||
}
|
||||
|
||||
@ -726,3 +750,7 @@ func (p *Player) AddLog(Uid int, Type int, Param string) {
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func (p *Player) TeLog(Type string, Param map[string]interface{}) {
|
||||
telog.Te.Track(p.GetPlayerBaseMod().GetName(), p.GetPlayerBaseMod().GetName(), Type, Param)
|
||||
}
|
||||
|
||||
@ -538,7 +538,9 @@ func (p *PlayerBaseData) AddExp(exp int) (int, error) {
|
||||
ChargeMod := p.M_Player.PlayMod.getChargeMod()
|
||||
ChargeMod.TriggerChargeUnlock(int(p.Data.Level), ChessMod.GetEmitList())
|
||||
p.M_Player.PushClientRes(ChargeMod.BackData())
|
||||
telog.Te.Track(p.Data.UserName, p.Data.UserName, "level_up", map[string]interface{}{})
|
||||
telog.Te.Track(p.Data.UserName, p.Data.UserName, "level_up", map[string]interface{}{
|
||||
"after_level": p.Data.Level,
|
||||
})
|
||||
}
|
||||
p.M_Player.PushClientRes(p.BackAsset())
|
||||
return upLv, nil
|
||||
|
||||
@ -138,6 +138,7 @@ func (p *PlayerChessData) ResPlayerChessData(player *Player) {
|
||||
agent := p.GetPlayer().GetAgentByPlayer()
|
||||
Msg := &p.Data
|
||||
Msg.ChessList = p.M_Player.PlayMod.getChessMod().BackData().ChessList
|
||||
Msg.MChessData = p.M_Player.PlayMod.getChessMod().ChessMap
|
||||
data, _ := proto.Marshal(Msg)
|
||||
G_getGameLogic().PackResInfo(agent, "ResPlayerChessData", data)
|
||||
}
|
||||
@ -178,7 +179,7 @@ func (p *PlayerChessData) UpdatePlayerChessData(buf []byte) error {
|
||||
p.M_Player.SendErrClienRes(res)
|
||||
return fmt.Errorf("棋子数据不一致")
|
||||
}
|
||||
|
||||
p.M_Player.PlayMod.getChessMod().ChessMap = update.MChessData
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -193,6 +194,7 @@ func (p *PlayerChessData) UpdateChessData(MChessData map[string]int32) error {
|
||||
p.M_Player.SendErrClienRes(res)
|
||||
return fmt.Errorf("棋子数据不一致")
|
||||
}
|
||||
p.M_Player.PlayMod.getChessMod().ChessMap = MChessData
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -276,6 +278,10 @@ func (p *PlayerChessData) HandleChess(handle_list []*msg.ChessHandle) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
p.M_Player.TeLog("sell_item", map[string]interface{}{
|
||||
"merge_item_id": ChessId,
|
||||
"get_star_num": items[0].Num,
|
||||
})
|
||||
itemList = item.Merge(itemList, items)
|
||||
case msg.HANDLE_TYPE_REMOVE: //移除棋子
|
||||
ChessMod.RemoveChess(ChessId)
|
||||
|
||||
@ -42,11 +42,11 @@ func handle(p *Player, m *msg.Msg) error {
|
||||
switch m.Type {
|
||||
case msg.HANDLE_TYPE_DEL, msg.HANDLE_TYPE_APPLY, msg.HADNLE_TYPE_AGREE, msg.HANDLE_TYPE_REQ_CARD:
|
||||
return HandleFriendMsg(p, m)
|
||||
case msg.HANDLE_TYPE_INVITE_ADD_FRIEND:
|
||||
case msg.HANDLE_TYPE_INVITE_ADD_FRIEND: // 邀请添加好友
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
FriendMod.AddFriend(m.From)
|
||||
p.PlayMod.save()
|
||||
case msg.HANDLE_TYPE_INVITE_FRIEND:
|
||||
case msg.HANDLE_TYPE_INVITE_FRIEND: // 邀请好友
|
||||
InviteMod := p.PlayMod.getInviteMod()
|
||||
InviteMod.AddInvite(m.From)
|
||||
p.PlayMod.save()
|
||||
@ -138,8 +138,7 @@ func handle(p *Player, m *msg.Msg) error {
|
||||
p.PlayMod.save()
|
||||
p.PushClientRes(CardMod.NotifyCard())
|
||||
case msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY: // 锦标赛排名变动通知
|
||||
MyRank := G_GameLogicPtr.ChampshipMgr.getMyRank(int(p.M_DwUin))
|
||||
p.PushClientRes(p.PlayMod.getChampshipMod().BackData(MyRank))
|
||||
BackChampship(p)
|
||||
case msg.HANDLE_TYPE_MAIL: // 邮件操作
|
||||
MailMod := p.PlayMod.getMailMod()
|
||||
if m.Extra == nil {
|
||||
@ -181,24 +180,29 @@ func HandleFriendMsg(p *Player, m *msg.Msg) error {
|
||||
p.PushClientRes(&proto.ResFriendApplyNotify{
|
||||
Player: PlayerSimpleData,
|
||||
Type: friend.FRIEND_NOTIFY_APPLY,
|
||||
Time: int32(GoUtil.Now()),
|
||||
})
|
||||
case msg.HADNLE_TYPE_AGREE: // 同意好友申请
|
||||
FriendMod.AgreeApply(m.From)
|
||||
p.PushClientRes(&proto.ResFriendApplyNotify{
|
||||
Player: PlayerSimpleData,
|
||||
Type: friend.FRIEND_NOTIFY_APPLY,
|
||||
Time: int32(GoUtil.Now()),
|
||||
})
|
||||
p.AddLog(m.From, friend.LOG_TYPE_FRIEND_BECOME, "")
|
||||
case msg.HANDLE_TYPE_DEL: // 删除好友
|
||||
FriendMod.DelFriend(m.From)
|
||||
p.AddLog(m.From, friend.LOG_TYPE_FRIEND_APPLY, "")
|
||||
p.PushClientRes(&proto.ResFriendApplyNotify{
|
||||
Player: PlayerSimpleData,
|
||||
Type: friend.FRIEND_NOTIFY_APPLY,
|
||||
Time: int32(GoUtil.Now()),
|
||||
})
|
||||
case msg.HANDLE_TYPE_REFUSE: // 拒绝好友申请
|
||||
p.PushClientRes(&proto.ResFriendApplyNotify{
|
||||
Player: PlayerSimpleData,
|
||||
Type: friend.FRIEND_NOTIFY_REFUSE,
|
||||
Time: int32(GoUtil.Now()),
|
||||
})
|
||||
case msg.HANDLE_TYPE_REQ_CARD: // 卡牌申请
|
||||
CardInfo := m.Extra.(*card.CardInfo)
|
||||
@ -249,11 +253,14 @@ func FriendListBackData(p *Player) {
|
||||
|
||||
func FriendApplyBackData(p *Player) {
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
var al []*proto.ResPlayerSimple
|
||||
for k := range FriendMod.Apply {
|
||||
var al []*proto.ResFriendApplyInfo
|
||||
for k, v := range FriendMod.ApplyList {
|
||||
ps := G_GameLogicPtr.GetResSimplePlayerByUid(k)
|
||||
if ps != nil {
|
||||
al = append(al, ps)
|
||||
al = append(al, &proto.ResFriendApplyInfo{
|
||||
Player: ps,
|
||||
Time: int32(v),
|
||||
})
|
||||
}
|
||||
}
|
||||
p.PushClientRes(&proto.ResFriendApply{
|
||||
@ -381,3 +388,10 @@ func GetCardInfoMsg(CardInfo *card.CardInfo) *proto.ResFriendCard {
|
||||
Id: CardInfo.Id,
|
||||
}
|
||||
}
|
||||
|
||||
func BackChampship(p *Player) {
|
||||
ChampshipMod := p.PlayMod.getChampshipMod()
|
||||
MyRank := G_GameLogicPtr.ChampshipMgr.getMyRank(int(p.M_DwUin))
|
||||
MyPreRank := G_GameLogicPtr.ChampshipMgr.getLastMyRank(int(p.M_DwUin))
|
||||
p.PushClientRes(ChampshipMod.BackData(MyRank, MyPreRank))
|
||||
}
|
||||
|
||||
@ -109,13 +109,6 @@ func (p *PlayerModData) InitMod() (bool, error) {
|
||||
}
|
||||
p.ModList = playerModList
|
||||
is_update := false
|
||||
// 初始化基础模块
|
||||
if p.ModList.Base == (base.Base{}) {
|
||||
var baseMod base.Base
|
||||
baseMod.InitData()
|
||||
p.ModList.Base = baseMod
|
||||
is_update = true
|
||||
}
|
||||
|
||||
// 初始化棋盘模块
|
||||
|
||||
@ -125,6 +118,7 @@ func (p *PlayerModData) InitMod() (bool, error) {
|
||||
p.ModList.Chess = chessMod
|
||||
is_update = true
|
||||
}
|
||||
|
||||
p.ModList.Handbook.InitData()
|
||||
p.ModList.Order.InitData()
|
||||
p.ModList.Decorate.InitData()
|
||||
@ -134,7 +128,7 @@ func (p *PlayerModData) InitMod() (bool, error) {
|
||||
p.ModList.DailyTask.InitData()
|
||||
p.ModList.Face.InitData()
|
||||
p.ModList.Avatar.InitData()
|
||||
p.ModList.Base.InitData()
|
||||
p.ModList.Base.InitData(int(p.Data.DwUin))
|
||||
p.ModList.SevenLogin.InitData()
|
||||
p.ModList.Activity.InitData()
|
||||
p.ModList.LimitedTimeEvent.InitData()
|
||||
@ -157,7 +151,11 @@ func (p *PlayerMod) save() {
|
||||
}
|
||||
|
||||
func (p *PlayerMod) ClearData(player *Player) {
|
||||
|
||||
ChessMod := p.getChessMod()
|
||||
if len(ChessMod.ChessMap) > 0 && len(ChessMod.ChessList) != len(ChessMod.ChessMap) {
|
||||
log.Debug("uid: %d, SaveData, chess error ", player.M_DwUin)
|
||||
return
|
||||
}
|
||||
if p.is_update {
|
||||
//序列化模块
|
||||
var buf bytes.Buffer
|
||||
|
||||
@ -1953,6 +1953,10 @@ func ReqRewardOrder(args []interface{}) error {
|
||||
return err
|
||||
}
|
||||
|
||||
player.TeLog("order_finish", map[string]interface{}{
|
||||
"order_id": int(req.OrderId),
|
||||
})
|
||||
|
||||
Lv := player.GetPlayerBaseMod().GetLevel()
|
||||
Emit := ChessMod.GetEmitList()
|
||||
OrderMod.CreateOrder(Lv, Emit)
|
||||
@ -1967,12 +1971,11 @@ func ReqRewardOrder(args []interface{}) error {
|
||||
|
||||
// 限时事件增加进度
|
||||
LimitedTimeEventMod.AddProgress(player.GetPlayerBaseMod().GetLevel())
|
||||
MyRank := G_GameLogicPtr.ChampshipMgr.getMyRank(int(player.M_DwUin))
|
||||
player.HandleInChampshipRank()
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(PiggyBankMod.BackData())
|
||||
player.PushClientRes(OrderMod.BackData())
|
||||
player.PushClientRes(ChampshipMod.BackData(MyRank))
|
||||
BackChampship(player)
|
||||
player.PushClientRes(LimitedTimeEventMod.BackData())
|
||||
player.PushClientRes(LimitedTimeEventMod.ProgressBackData())
|
||||
return nil
|
||||
@ -2021,7 +2024,11 @@ func ReqDecorate(args []interface{}) error {
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
if DecorateMod.GetAreaId() != AreaId { // 解锁上报
|
||||
player.TeLog("plot_unlock", map[string]interface{}{
|
||||
"plot_id": AreaId,
|
||||
})
|
||||
}
|
||||
if UpLev > 0 { //升级 获取奖励
|
||||
Items := userCfg.GetLevUpReward(UpLev)
|
||||
err = player.HandleItem(Items, "LevUpReward")
|
||||
@ -2786,6 +2793,7 @@ func ReqDelFriend(args []interface{}) error {
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
Uid: req.Uid,
|
||||
})
|
||||
player.AddLog(Uid, friend.LOG_TYPE_FRIEND_DELETE, "")
|
||||
FriendListBackData(player)
|
||||
return nil
|
||||
}
|
||||
@ -3395,6 +3403,12 @@ func ReqBuyChessShop(args []interface{}) error {
|
||||
})
|
||||
return err
|
||||
}
|
||||
player.TeLog("store_buy", map[string]interface{}{
|
||||
"item_id": int(req.Id),
|
||||
"change_num": 1,
|
||||
"cost_type": "diamond",
|
||||
"cost_num": Item[0].Num,
|
||||
})
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(ChargeMod.BackData())
|
||||
player.PushClientRes(&msg.ResBuyChessShop{
|
||||
@ -3530,9 +3544,8 @@ func ReqChampshipReward(args []interface{}) error {
|
||||
})
|
||||
return err
|
||||
}
|
||||
MyRank := G_GameLogicPtr.ChampshipMgr.getMyRank(int(player.M_DwUin))
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(ChampshipMod.BackData(MyRank))
|
||||
BackChampship(player)
|
||||
player.PushClientRes(&msg.ResChampshipReward{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
@ -3660,8 +3673,7 @@ func ReqChampshipRankReward(args []interface{}) error {
|
||||
return err
|
||||
}
|
||||
player.PlayMod.save()
|
||||
MyRank := G_GameLogicPtr.ChampshipMgr.getMyRank(int(player.M_DwUin))
|
||||
player.PushClientRes(ChampshipMod.BackData(MyRank))
|
||||
BackChampship(player)
|
||||
player.PushClientRes(&msg.ResChampshipRankReward{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
@ -3781,7 +3793,38 @@ func ReqAutoAddInviteFriend(args []interface{}) error {
|
||||
ResultCode: 1,
|
||||
})
|
||||
G_GameLogicPtr.FriendMgrSend(&MsqMod.Msg{
|
||||
From: int(player.M_DwUin),
|
||||
To: int(req.Id),
|
||||
Type: MsqMod.HANDLE_TYPE_INVITE_ADD_FRIEND,
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
func ReqSelectLimitEvent(args []interface{}) error {
|
||||
_, player, buf := ParseArgs(args)
|
||||
req := &msg.ReqSelectLimitEvent{}
|
||||
proto.Unmarshal(buf, req)
|
||||
LimitedTimeEventMod := player.PlayMod.getLimitedTimeEventMod()
|
||||
Items, err := LimitedTimeEventMod.SelectProgressReward(int(req.Id))
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResSelectLimitEvent{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: err.Error(),
|
||||
})
|
||||
return err
|
||||
}
|
||||
err = player.HandleItem(Items, "SelectLimitEvent")
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResSelectLimitEvent{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: err.Error(),
|
||||
})
|
||||
}
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(LimitedTimeEventMod.BackData())
|
||||
player.PushClientRes(LimitedTimeEventMod.ProgressBackData())
|
||||
player.PushClientRes(&msg.ResSelectLimitEvent{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package base
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
baseCfg "server/conf/base"
|
||||
"server/game/mod/item"
|
||||
"server/msg"
|
||||
@ -18,10 +19,13 @@ type Base struct {
|
||||
FacebookUrl string
|
||||
}
|
||||
|
||||
func (b *Base) InitData() {
|
||||
func (b *Base) InitData(Uid int) {
|
||||
// b.EnergyMul = 1
|
||||
// b.IsFirstBuy = false
|
||||
// b.EnergyBuy = 0
|
||||
if b.NickName == "" {
|
||||
b.NickName = fmt.Sprintf("Player_%d", Uid)
|
||||
}
|
||||
}
|
||||
|
||||
func (b *Base) GetNickName() string {
|
||||
|
||||
@ -55,13 +55,24 @@ func (c *ChampshipMod) GetReward() []*item.Item {
|
||||
return Items
|
||||
}
|
||||
|
||||
func (c *ChampshipMod) BackData(MyRank int) *msg.ResChampship {
|
||||
func (c *ChampshipMod) BackData(MyRank, MyPreRank int) *msg.ResChampship {
|
||||
RankReward := 0
|
||||
if c.RankReward {
|
||||
RankReward = 2
|
||||
} else {
|
||||
if MyPreRank >= 15 {
|
||||
RankReward = 1
|
||||
}
|
||||
}
|
||||
Status := GoUtil.IfTrue(GoUtil.Now()-GoUtil.ZeroTimestamp() < 1800, 0, 1)
|
||||
return &msg.ResChampship{
|
||||
Score: int32(c.Score),
|
||||
Reward: int32(c.Reward),
|
||||
EndTime: int32(GoUtil.ZeroTimestamp() + 86400), // 零点结束
|
||||
Period: int32(GoUtil.GetServerOpenDay()),
|
||||
Rank: int32(MyRank),
|
||||
RankReward: int32(RankReward),
|
||||
Status: int32(Status.(int)),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -21,6 +21,7 @@ type ChessBorad struct {
|
||||
EmitList map[int]int
|
||||
ChessBuff []int
|
||||
ChessBag ChessBag
|
||||
ChessMap map[string]int32
|
||||
}
|
||||
|
||||
type ChessBag struct {
|
||||
@ -64,6 +65,9 @@ func (cb *ChessBorad) ver() {
|
||||
cb.ChessBag.List[i] = ChessBagGrid{}
|
||||
}
|
||||
}
|
||||
if cb.ChessMap == nil {
|
||||
cb.ChessMap = make(map[string]int32)
|
||||
}
|
||||
}
|
||||
|
||||
// 棋子合成
|
||||
|
||||
@ -45,6 +45,7 @@ func randJackpot(jackpot map[int]dailyTaskCfg.Jackpot, num int) map[int][]*item.
|
||||
}
|
||||
return r
|
||||
}
|
||||
t++
|
||||
if t > 100 {
|
||||
return r
|
||||
}
|
||||
|
||||
@ -7,7 +7,7 @@ import (
|
||||
|
||||
type FriendMod struct {
|
||||
FriendList map[int]struct{} // 好友列表
|
||||
Apply map[int]struct{} // 请求列表
|
||||
ApplyList map[int]int64 // 请求列表
|
||||
Card map[string]*card.CardInfo // 收到的申请交换
|
||||
Log []*LogInfo // 日志
|
||||
AutoId int
|
||||
@ -25,6 +25,7 @@ const (
|
||||
LOG_TYPE_CARD_SELECT_SEND = 9 // 选择卡牌交换
|
||||
LOG_TYPE_CARD_EX_SUCCESS_1 = 10 // 卡牌交换成功
|
||||
LOG_TYPE_CARD_EX_SUCCESS_2 = 11 // 卡牌交换成功
|
||||
LOG_TYPE_FRIEND_DELETE = 14 // 删除好友
|
||||
)
|
||||
|
||||
const (
|
||||
@ -46,8 +47,8 @@ func (f *FriendMod) InitData() {
|
||||
if f.FriendList == nil {
|
||||
f.FriendList = make(map[int]struct{})
|
||||
}
|
||||
if f.Apply == nil {
|
||||
f.Apply = make(map[int]struct{})
|
||||
if f.ApplyList == nil {
|
||||
f.ApplyList = make(map[int]int64)
|
||||
}
|
||||
if f.Card == nil {
|
||||
f.Card = make(map[string]*card.CardInfo)
|
||||
@ -56,7 +57,7 @@ func (f *FriendMod) InitData() {
|
||||
|
||||
func (f *FriendMod) AddFriend(id int) {
|
||||
f.FriendList[id] = struct{}{}
|
||||
delete(f.Apply, id)
|
||||
delete(f.ApplyList, id)
|
||||
}
|
||||
|
||||
func (f *FriendMod) GetCardInfo(Id string) *card.CardInfo {
|
||||
@ -85,21 +86,21 @@ func (f *FriendMod) CheckFriend(Uid int) bool {
|
||||
}
|
||||
|
||||
func (f *FriendMod) RefuseApply(id int) {
|
||||
delete(f.Apply, id)
|
||||
delete(f.ApplyList, id)
|
||||
}
|
||||
|
||||
func (f *FriendMod) CheckApply(id int) bool {
|
||||
_, ok := f.Apply[id]
|
||||
_, ok := f.ApplyList[id]
|
||||
return ok
|
||||
}
|
||||
|
||||
func (f *FriendMod) AddFriendApply(Uid int) {
|
||||
f.Apply[Uid] = struct{}{}
|
||||
f.ApplyList[Uid] = GoUtil.Now()
|
||||
}
|
||||
|
||||
func (f *FriendMod) AgreeApply(UId int) {
|
||||
f.AddFriend(UId)
|
||||
delete(f.Apply, UId)
|
||||
delete(f.ApplyList, UId)
|
||||
}
|
||||
|
||||
func (f *FriendMod) AddLog(Uid, Type int, Param string) int {
|
||||
|
||||
@ -64,7 +64,10 @@ func (l *LimitedTimeEventMod) CheckExist(EventId int) bool {
|
||||
}
|
||||
|
||||
// 触发限时事件
|
||||
func (l *LimitedTimeEventMod) Trigger() (int, []int, []int) {
|
||||
func (l *LimitedTimeEventMod) Trigger(Lv int) (int, []int, []int) {
|
||||
if Lv < 4 {
|
||||
return 0, nil, nil
|
||||
}
|
||||
TriggerEvent := limitedTimeEventCfg.GetLimitedTimeEventCfg()
|
||||
TimeoutEvent := make([]int, 0)
|
||||
AddEvent := make([]int, 0)
|
||||
@ -144,9 +147,14 @@ func (l *LimitedTimeEventMod) BackData() *msg.ResLimitEvent {
|
||||
}
|
||||
|
||||
func (l *LimitedTimeEventMod) ProgressBackData() *msg.ResLimitEventProgress {
|
||||
r := make(map[int32]int32)
|
||||
for k, v := range l.ProgressReward {
|
||||
Type := limitedTimeEventCfg.GetProgressRewardType(v)
|
||||
r[int32(k)] = int32(Type)
|
||||
}
|
||||
return &msg.ResLimitEventProgress{
|
||||
Progress: int32(l.Progress),
|
||||
ProgressReward: GoUtil.MapIntToInt32(l.ProgressReward),
|
||||
ProgressReward: r,
|
||||
}
|
||||
}
|
||||
|
||||
@ -211,8 +219,7 @@ func (l *LimitedTimeEventMod) AddProgress(Lv int) {
|
||||
}
|
||||
l.Progress++
|
||||
ProgressMax := limitedTimeEventCfg.GetProgressMax()
|
||||
if l.Progress >= ProgressMax {
|
||||
l.Progress = 0
|
||||
if l.Progress == ProgressMax {
|
||||
SelectNum := limitedTimeEventCfg.GetProgressSelectNum(Lv)
|
||||
RandMap := limitedTimeEventCfg.GetProgressRewardRand(Lv)
|
||||
r := GoUtil.RandMapNum(RandMap, SelectNum)
|
||||
@ -233,6 +240,7 @@ func (l *LimitedTimeEventMod) SelectProgressReward(Id int) ([]*item.Item, error)
|
||||
Item := limitedTimeEventCfg.GetProgressReward(RewardId)
|
||||
l.LastSelect = RewardId
|
||||
l.ProgressReward = make(map[int]int)
|
||||
l.Progress = 0
|
||||
return Item, nil
|
||||
}
|
||||
|
||||
|
||||
@ -49,6 +49,7 @@ const (
|
||||
HANDLE_TYPE_CHAMPSHIP_AI = 303 //锦标赛入榜操作
|
||||
HANDLE_TYPE_CHAMPSHIP_NOTIFY = 304 //锦标赛排名变动通知
|
||||
HANDLE_TYPE_CHAMPSHIP_ZERO = 305 //锦标赛0点更新
|
||||
HANDLE_TYPE_CHAMPSHIP_NOTIFY2 = 306 //锦标赛0.30点通知
|
||||
//server mod handle
|
||||
SERVER_ZERO_UPDATE = 1000 //zero update
|
||||
)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -6,6 +6,7 @@ import (
|
||||
"os/signal"
|
||||
mergeCluster "server/cluster"
|
||||
sconf "server/conf"
|
||||
"server/game"
|
||||
"server/pkg/github.com/name5566/leaf/cluster"
|
||||
"server/pkg/github.com/name5566/leaf/conf"
|
||||
"server/pkg/github.com/name5566/leaf/console"
|
||||
@ -44,10 +45,11 @@ func Run(mods ...module.Module) {
|
||||
|
||||
// close
|
||||
c := make(chan os.Signal, 1)
|
||||
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
|
||||
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()
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user