更新代码

This commit is contained in:
hahwu 2024-11-27 19:17:32 +08:00
parent 0ab62a2a65
commit fbf8a5c257
24 changed files with 1441 additions and 1199 deletions

View File

@ -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 {

View File

@ -6,7 +6,7 @@ import (
)
const (
CFG_INVITE = "invite"
CFG_INVITE = "Invite"
)
func init() {

View File

@ -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")
}

View File

@ -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
}

View File

@ -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)

View File

@ -937,12 +937,13 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
RegisterMsgProcessFunc("ReqSetFacebookUrl", ReqSetFacebookUrl) // 设置facebook地址
// 棋盘
RegisterMsgProcessFunc("ReqSetEnergyMul", RegSetEneryFunc) //设置能量倍数
RegisterMsgProcessFunc("ReqChessEx", ReqChessEx) // 转换棋子
RegisterMsgProcessFunc("ReqGetChessFromBuff", ReqGetChessFromBuff) // 从buff中获取棋子
RegisterMsgProcessFunc("ReqPutChessInBag", ReqPutChessInBag) // 把棋子放入背包
RegisterMsgProcessFunc("ReqTakeChessOutBag", ReqTakeChessOutBag) // 从背包中取出棋子
RegisterMsgProcessFunc("ReqBuyChessBagGrid", ReqBuyChessBagGrid) // 使用棋子技能
RegisterMsgProcessFunc("UpdatePlayerChessData", UpdatePlayerChessDataFunc) // 更新棋盘数据
RegisterMsgProcessFunc("ReqSetEnergyMul", RegSetEneryFunc) //设置能量倍数
RegisterMsgProcessFunc("ReqChessEx", ReqChessEx) // 转换棋子
RegisterMsgProcessFunc("ReqGetChessFromBuff", ReqGetChessFromBuff) // 从buff中获取棋子
RegisterMsgProcessFunc("ReqPutChessInBag", ReqPutChessInBag) // 把棋子放入背包
RegisterMsgProcessFunc("ReqTakeChessOutBag", ReqTakeChessOutBag) // 从背包中取出棋子
RegisterMsgProcessFunc("ReqBuyChessBagGrid", ReqBuyChessBagGrid) // 使用棋子技能
RegisterMsgProcessFunc("ReqBuyEnergy", ReqBuyEnergy) //购买能量
@ -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()
}
}

View File

@ -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,

View File

@ -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 {
}
}
}
}

View File

@ -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 {

View File

@ -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)
}

View File

@ -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

View File

@ -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)

View File

@ -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))
}

View File

@ -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

View File

@ -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
}

View File

@ -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 {

View File

@ -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),
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)),
}
}

View File

@ -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)
}
}
// 棋子合成

View File

@ -45,6 +45,7 @@ func randJackpot(jackpot map[int]dailyTaskCfg.Jackpot, num int) map[int][]*item.
}
return r
}
t++
if t > 100 {
return r
}

View File

@ -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 {

View File

@ -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
}

View File

@ -44,11 +44,12 @@ const (
// 邮件操作
HANDLE_TYPE_MAIL = 201 //邮件操作
// 锦标赛
HANDLE_TYPE_CHAMPSHIP_GROUP = 301 //锦标赛分组操作
HANDLE_TYPE_CHAMPSHIP_INRANK = 302 //锦标赛入榜操作
HANDLE_TYPE_CHAMPSHIP_AI = 303 //锦标赛入榜操作
HANDLE_TYPE_CHAMPSHIP_NOTIFY = 304 //锦标赛排名变动通知
HANDLE_TYPE_CHAMPSHIP_ZERO = 305 //锦标赛0点更新
HANDLE_TYPE_CHAMPSHIP_GROUP = 301 //锦标赛分组操作
HANDLE_TYPE_CHAMPSHIP_INRANK = 302 //锦标赛入榜操作
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

View File

@ -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()
}