diff --git a/src/server/conf/guideTask/GuideTaskCfg.go b/src/server/conf/guideTask/GuideTaskCfg.go index afe2cd18..19a4255a 100644 --- a/src/server/conf/guideTask/GuideTaskCfg.go +++ b/src/server/conf/guideTask/GuideTaskCfg.go @@ -1,6 +1,7 @@ package GuideTaskCfg import ( + "server/GoUtil" "server/game/mod/item" "server/gamedata" "server/pkg/github.com/name5566/leaf/log" @@ -42,6 +43,13 @@ func GetTaskActive(Id int) int { } return gamedata.GetIntValue(data, "Active") } +func GetUnlock(Id int) int { + data, err := gamedata.GetDataByIntKey(GUIDE_TASK_TASK, Id) + if err != nil { + return 0 + } + return gamedata.GetIntValue(data, "Unlock") +} func GetActiveReward(Id int) ([]*item.Item, int) { data, err := gamedata.GetDataByIntKey(GUIDE_TASK_ACTIVE, Id) @@ -50,6 +58,23 @@ func GetActiveReward(Id int) ([]*item.Item, int) { } return gamedata.GetItemList(data, "Items"), gamedata.GetIntValue(data, "Active") } +func GetActiveReward2(reward []int, Active int) []*item.Item { + data, err := gamedata.GetData(GUIDE_TASK_ACTIVE) + if err != nil { + return nil + } + for k, v := range data { + active := gamedata.GetIntValue(v, "Active") + if active < Active { + continue + } + if GoUtil.InArray(GoUtil.Int(k), reward) { + continue + } + return gamedata.GetItemList(v, "Items") + } + return nil +} func GetUnlockLv() int { data, err := gamedata.GetDataByKey(GUIDE_TASK_CONST, "UnlockLv") diff --git a/src/server/conf/order/orderCfg.go b/src/server/conf/order/orderCfg.go index 3cf90b24..bcbfe680 100644 --- a/src/server/conf/order/orderCfg.go +++ b/src/server/conf/order/orderCfg.go @@ -81,6 +81,14 @@ func GetOrderNum(Level int) int { return 0 } +func GetStartOrderInfo(Id int) (int, int) { + data, err := gamedata.GetDataByIntKey(CFG_START_ORDER, Id) + if err != nil { + return -1, -1 + } + return gamedata.GetIntValue(data, "group"), gamedata.GetIntValue(data, "step") +} + func GetStartOrderList() []*gamedata.StartOrderData { ret := make([]*gamedata.StartOrderData, 0) data, err := gamedata.GetData(CFG_START_ORDER) @@ -95,6 +103,8 @@ func GetStartOrderList() []*gamedata.StartOrderData { Appear: gamedata.GetStringValue(v, "appear"), Preview: gamedata.GetStringValue(v, "preview"), Items: gamedata.GetItemList(v, "reward"), + Group: gamedata.GetIntValue(v, "group"), + Step: gamedata.GetIntValue(v, "step"), }) } sort.Slice(ret, func(i, j int) bool { diff --git a/src/server/conf/user/UserData.go b/src/server/conf/user/UserData.go index 1c4f6985..465681a9 100644 --- a/src/server/conf/user/UserData.go +++ b/src/server/conf/user/UserData.go @@ -65,6 +65,38 @@ func GetLevUpExp(lv int) (int, int) { return gamedata.GetIntValue(data, "Exp"), gamedata.GetIntValue(data, "PExp") } +func GetNewLevUpExp(lv int, Exp int, PetExt int) (int, int) { + ExpLv := lv + PetLv := lv + for { + data1, err := gamedata.GetDataByIntKey(CFG_NAME, ExpLv) + if err != nil { + break + } + ExpNeed := gamedata.GetIntValue(data1, "Exp") + if Exp >= ExpNeed { + Exp -= ExpNeed + ExpLv++ + } else { + break + } + } + for { + data2, err := gamedata.GetDataByIntKey(CFG_NAME, PetLv) + if err != nil { + break + } + PetNeed := gamedata.GetIntValue(data2, "PExp") + if PetExt >= PetNeed { + PetExt -= PetNeed + PetLv++ + } else { + break + } + } + return ExpLv, PetLv +} + // 获取能量回复时间 func GetRecover(lv int) int { data, err := gamedata.GetDataByIntKey(CFG_NAME, lv) diff --git a/src/server/game/PlayerBaseMod.go b/src/server/game/PlayerBaseMod.go index df922074..f6556fd3 100644 --- a/src/server/game/PlayerBaseMod.go +++ b/src/server/game/PlayerBaseMod.go @@ -537,9 +537,12 @@ func (p *PlayerBaseData) AddExp(player *Player, exp int, pexp int) (int, error) player.TeLog("level_up", map[string]interface{}{ "after_level": BaseMod.Level, }) + NewExpLv, NewPetLv := userCfg.GetNewLevUpExp(BaseMod.Level, BaseMod.Exp, BaseMod.PExp) player.TeLog("property_level_up", map[string]interface{}{ "property_level": BaseMod.Level, "property_level_reward": userCfg.GetUnlock(int(BaseMod.Level)), + "story_level": NewExpLv, + "pet_level": NewPetLv, }) player.HandleInUserRank() } diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 2f9b63c1..ab81cef9 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -75,7 +75,7 @@ func handle(p *Player, m *msg.Msg) error { PlayroomBackData(p) p.TeLog("friend_add", map[string]interface{}{ "player_id": m.From, - "add_type": "invite add friend", + "add_type": "发起申请", }) p.PlayMod.save() case msg.HANDLE_TYPE_INVITE_FRIEND: // 邀请好友 @@ -403,7 +403,7 @@ func HandleFriendMsg(p *Player, m *msg.Msg) error { PlayroomBackData(p) p.TeLog("friend_add", map[string]interface{}{ "player_id": m.From, - "add_type": "agree", + "add_type": "接受申请", }) p.AddLog(m.From, friend.LOG_TYPE_FRIEND_BECOME, "", m.SendT) case msg.HANDLE_TYPE_DEL: // 删除好友 @@ -985,6 +985,68 @@ func (player *Player) GetPetOrderItemExp() int { } return playroomCfg.GetPetOrderItemExpByList(itemList) } + +// 触发生成新的固定订单 +func (player *Player) TriggerOrder(lv int, Type string, Emit []int, EnergyMul int) error { + OrderMod := player.PlayMod.getOrderMod() + TriggerOrderList := orderCfg.GetStartOrderList() + FixedOrder := 0 + for _, v := range OrderMod.OrderList { + if v.Type == order.Fixed_type { + FixedOrder++ + } + } + OrderList := make(map[int]order.Order, len(OrderMod.OrderList)) + for k, v := range OrderMod.OrderList { + OrderList[k] = v + } + // 触发生成新的固定订单 + for _, v := range TriggerOrderList { + if GoUtil.InArray(v.Id, OrderMod.FinishOrder) { + continue + } + orderInfo, exists := OrderList[v.Id] + if exists && v.Preview == "" { + continue + } + // 预览条件不为空且未存在且未完成 + if v.Preview != "" && !exists && !GoUtil.InArray(v.Id, OrderMod.FinishOrder) { + if OrderMod.CheckCondition(lv, v.Preview, Type, Emit, FixedOrder, OrderList) { + OrderMod.AddFixOrder(v.Id, v.MergeList, order.Preview_type, v.Items) + player.TeLog("preset_order_birth", map[string]interface{}{ + "order_id": v.Id, + "order_item_id": v.MergeList, + "preset_order_group": v.Group, + "preset_order_step": v.Step, + }) + } + } + if v.Appear != "" { + if OrderMod.CheckCondition(lv, v.Appear, Type, Emit, FixedOrder, OrderList) { + Type := order.Fixed_type + OrderType := orderCfg.GetOrderType(v.Id) + if OrderType != 0 { + Type = OrderType + } + if exists { + orderInfo.Type = order.Fixed_type + OrderMod.OrderList[v.Id] = orderInfo + } else { + OrderMod.AddFixOrder(v.Id, v.MergeList, Type, v.Items) + if v.Id == 78 { + OrderMod.Retire("D") + OrderMod.AutoEmit = append(OrderMod.AutoEmit, "D") + } + if v.Id == 79 { + OrderMod.Retire("I") + OrderMod.AutoEmit = append(OrderMod.AutoEmit, "I") + } + } + } + } + } + return nil +} func (player *Player) AddOrder() { BaseMod := player.PlayMod.getBaseMod() OrderMod := player.PlayMod.getOrderMod() diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index 5e094d6e..3fdcf481 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -10,10 +10,12 @@ import ( collectCfg "server/conf/collect" decorateCfg "server/conf/decorate" emojiCfg "server/conf/emoji" + GuideTaskCfg "server/conf/guideTask" handbookCfg "server/conf/handbook" limitedTimeEventCfg "server/conf/limitedTimeEvent" mergeDataCfg "server/conf/mergeData" miningCfg "server/conf/mining" + orderCfg "server/conf/order" playroomCfg "server/conf/playroom" "server/db" "server/game/internal" @@ -337,6 +339,7 @@ func ReqRewardOrder(player *Player, buf []byte) error { if OrderType != order.Preview_type && OrderType != order.Fixed_type { preset_order_group = -1 } + preset_order_group, preset_order_step := orderCfg.GetStartOrderInfo(int(req.OrderId)) player.TeLog("order_finish", map[string]interface{}{ "order_id": int(req.OrderId), "order_item_id": mergeList, @@ -345,6 +348,7 @@ func ReqRewardOrder(player *Player, buf []byte) error { "order_item_reward": order_item_reward, "order_star_value": Star, "preset_order_group": preset_order_group, + "preset_order_step": preset_order_step, }) player.PetItemGetLog(Item, nil, "Order") EmitRetireTrigger2(player) @@ -1212,7 +1216,7 @@ func ReqGetDailyTaskReward(player *Player, buf []byte) error { "task_id": int(req.Id), "item_list": itemList, "task_type": "daily", - "task_score_reward": 0, + "task_score_reward": DailyTaskMod.GetWeekReward2(), }) return nil } @@ -1286,9 +1290,11 @@ func ReqGetGuideTaskReward(player *Player, buf []byte) error { }) return err } - player.TeLog("ReqGetGuideTaskReward", map[string]interface{}{ - "task_id": int(req.Id), - "item_list": itemList, + player.TeLog("new_player_task", map[string]interface{}{ + "task_id": int(req.Id), + "item_list": itemList, + "task_gruop": GuideTaskCfg.GetUnlock(int(req.Id)), + "task_score_reward": GuideTaskCfg.GetActiveReward2(GuideTaskMod.Reward, GuideTaskMod.Active), }) player.PlayMod.save() player.PushClientRes(GuideTaskMod.BackData()) @@ -1701,10 +1707,6 @@ func ReqApplyFriend(player *Player, buf []byte) error { BaseMod := player.PlayMod.getBaseMod() PlayroomMod.AddRoomPointInvite(BaseMod.GetLevel()) PlayroomBackData(player) - player.TeLog("friend_add", map[string]interface{}{ - "player_id": Uid, - "add_type": "apply", - }) return nil } @@ -1736,7 +1738,7 @@ func ReqAgreeFriend(player *Player, buf []byte) error { }) player.TeLog("friend_add", map[string]interface{}{ "player_id": Uid, - "add_type": "agree", + "add_type": "接受申请", }) player.AddLog(Uid, friend.LOG_TYPE_FRIEND_BECOME, "", GoUtil.Now()) FriendApplyBackData(player) @@ -3026,7 +3028,7 @@ func ReqAutoAddInviteFriend(player *Player, buf []byte) error { PlayroomBackData(player) player.TeLog("friend_add", map[string]interface{}{ "player_id": req.Id, - "add_type": "invite add friend", + "add_type": "邀请注册", }) return nil } @@ -3067,7 +3069,7 @@ func ReqAutoAddInviteFriend2(player *Player, buf []byte) error { PlayroomBackData(player) player.TeLog("friend_add", map[string]interface{}{ "player_id": req.Id, - "add_type": "invite add friend", + "add_type": "邀请注册", }) return nil } @@ -3077,7 +3079,7 @@ func ReqSelectLimitEvent(player *Player, buf []byte) error { proto.Unmarshal(buf, req) LimitedTimeEventMod := player.PlayMod.getLimitedTimeEventMod() BaseMod := player.PlayMod.getBaseMod() - Items, EventName, slot_order_number, err := LimitedTimeEventMod.SelectProgressReward(int(req.Id), BaseMod.GetLevel(), BaseMod.GetEnergy()) + Items, EventType, OrderNum, RewardList, err := LimitedTimeEventMod.SelectProgressReward(int(req.Id), BaseMod.GetLevel(), BaseMod.GetEnergy()) if err != nil { player.SendErrClienRes(&msg.ResSelectLimitEvent{ Code: msg.RES_CODE_FAIL, @@ -3094,9 +3096,9 @@ func ReqSelectLimitEvent(player *Player, buf []byte) error { return err } player.TeLog("time_limited_slot", map[string]interface{}{ - "slot_order_number": slot_order_number, - "slot_reward_list": EventName, - "slot_reward": EventName, + "slot_order_number": OrderNum, + "slot_reward_list": RewardList, + "slot_reward": limitedTimeEventCfg.GetEventName(EventType), }) player.PlayMod.save() player.PushClientRes(LimitedTimeEventMod.BackData()) @@ -3916,9 +3918,10 @@ func ReqPlayroomTask(player *Player, buf []byte) error { }) return err } + Type := playroomCfg.GetDailyTaskType(int(req.Id)) player.TeLog("room_daily_task", map[string]interface{}{ "task_id": req.Id, - "is_reward": PlayroomMod.DailyTaskCanReward(int(req.Id)), + "is_reward": PlayroomMod.DailyTaskCanReward(Type), }) player.PlayMod.save() player.PushClientRes(&msg.ResPlayroomTask{ diff --git a/src/server/game/mod/dailyTask/DailyTask.go b/src/server/game/mod/dailyTask/DailyTask.go index 3d3695fa..f4d99c5c 100644 --- a/src/server/game/mod/dailyTask/DailyTask.go +++ b/src/server/game/mod/dailyTask/DailyTask.go @@ -192,3 +192,23 @@ func (dt *DailyTaskMod) GetWeekReward(id int) ([]*item.Item, error) { } return nil, fmt.Errorf("task not finish") } + +func (dt *DailyTaskMod) GetWeekReward2() []*item.Item { + max := 0 + for id := range dt.WeekReward { + if id > max { + max = id + } + } + max++ + if v, ok := dt.WeekReward[max]; ok { + NeedActive := dailyTaskCfg.GetTaskActiveById(max) + if dt.Active < NeedActive { + return nil + } + if !v.Status { + return v.Items + } + } + return nil +} diff --git a/src/server/game/mod/limitedTimeEvent/LimitedTimeEvent.go b/src/server/game/mod/limitedTimeEvent/LimitedTimeEvent.go index cec1ef61..e53c9efa 100644 --- a/src/server/game/mod/limitedTimeEvent/LimitedTimeEvent.go +++ b/src/server/game/mod/limitedTimeEvent/LimitedTimeEvent.go @@ -350,13 +350,14 @@ func (l *LimitedTimeEventMod) AddProgress(Lv int) { } // 选择进度奖励 -func (l *LimitedTimeEventMod) SelectProgressReward(Id, Lv, Energy int) ([]*item.Item, int, int, error) { +func (l *LimitedTimeEventMod) SelectProgressReward(Id, Lv, Energy int) ([]*item.Item, int, int, map[int]int, error) { RewardId, ok := l.ProgressReward[Id] + RewardList := l.ProgressReward if !ok { - return nil, 0, 0, fmt.Errorf("RewardId not exist") + return nil, 0, 0, nil, fmt.Errorf("RewardId not exist") } - r2 := l.ProgressMax Item := limitedTimeEventCfg.GetProgressReward(RewardId) + OrderNum := l.ProgressMax l.LastSelect = RewardId l.ProgressReward = make(map[int]int) l.Progress = 0 @@ -389,7 +390,7 @@ func (l *LimitedTimeEventMod) SelectProgressReward(Id, Lv, Energy int) ([]*item. } l.LastOption = r l.FirstReward = true - return Item, limitedTimeEventCfg.GetProgressRewardType(RewardId), r2, nil + return Item, limitedTimeEventCfg.GetProgressRewardType(RewardId), OrderNum, RewardList, nil } func (l *LimitedTimeEventMod) RemoveSuperOrder() bool { diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index 6e70af50..6df55534 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -500,6 +500,9 @@ func (o *OrderMod) addOrder(ChessList []int, Diff int, Type int) int { func (o *OrderMod) AddExtraOrder(ChessList []int) { o.addOrder(ChessList, DIFF_LOW, Extra_type) } +func (o *OrderMod) AddFixOrder(Id int, ChessList []int, Type int, Items []*item.Item) { + o.addFixOrder(Id, ChessList, Type, Items) +} func (o *OrderMod) addFixOrder(Id int, ChessList []int, Type int, Items []*item.Item) { Order := Order{ MergeId: ChessList, diff --git a/src/server/gamedata/type.go b/src/server/gamedata/type.go index ad0d2338..17400eac 100644 --- a/src/server/gamedata/type.go +++ b/src/server/gamedata/type.go @@ -24,6 +24,7 @@ type StartOrderData struct { Step int `json:"step"` Appear string `json:"appear"` Preview string `json:"preview"` + Group int `json:"group"` Items []*item.Item }