diff --git a/src/server/conf/limitedTimeEvent/LimitedTimeEventCfg.go b/src/server/conf/limitedTimeEvent/LimitedTimeEventCfg.go index 6ed133ae..6c4e30b7 100644 --- a/src/server/conf/limitedTimeEvent/LimitedTimeEventCfg.go +++ b/src/server/conf/limitedTimeEvent/LimitedTimeEventCfg.go @@ -24,6 +24,7 @@ const ( CFG_LIMITED_TIME_EVENT_MONEY = "LimitedTimeEventMoney" CFG_LIMITED_TIME_EVENT_LUCKY = "LimitedTimeEventLucky" CFG_LIMITED_TIME_EVENT_CAT_TRICK = "LimitedTimeEventCatTrick" + CFG_LIMTTED_TIME_EVENT_DECORATE_OFF = "LimitedTimeEventDecorateOff" ) func init() { @@ -41,6 +42,7 @@ func init() { gamedata.InitCfg(CFG_LIMITED_TIME_EVENT_MONEY) gamedata.InitCfg(CFG_LIMITED_TIME_EVENT_LUCKY) gamedata.InitCfg(CFG_LIMITED_TIME_EVENT_CAT_TRICK) + gamedata.InitCfg(CFG_LIMTTED_TIME_EVENT_DECORATE_OFF) } // 获取限时事件触发列表 @@ -417,3 +419,21 @@ func GetCatTrickDiamond(Type int) (int, int) { } return gamedata.GetIntValue(data, "Diamond"), gamedata.GetIntValue(data, "Energy") } + +func GetDecorateOffDiscount(AreaId, StepId int) int { + data, err := gamedata.GetData(CFG_LIMTTED_TIME_EVENT_DECORATE_OFF) + if err != nil { + log.Debug("GetDecorateOffDiscount err:%v", err) + return 100 + } + for _, v := range data { + StartAreaId := gamedata.GetIntValue(v, "StartArea") + EndAreaId := gamedata.GetIntValue(v, "EndArea") + StartStepId := gamedata.GetIntValue(v, "StartStep") + EndStepId := gamedata.GetIntValue(v, "EndStep") + if AreaId >= StartAreaId && AreaId <= EndAreaId && StepId >= StartStepId && StepId <= EndStepId { + return gamedata.GetIntValue(v, "Off") + } + } + return 100 +} diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index e8eb401f..406d214a 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -471,7 +471,9 @@ func ReqDecorate(player *Player, buf []byte) error { DecorateMod := player.PlayMod.getDecorateMod() DecorateId := int(req.DecorateId) AreaId := int(req.AreaId) - CostItem, PetExp, PartItem := DecorateMod.GetDecorateCostItem(AreaId, DecorateId) + LimitEventMod := player.PlayMod.getLimitedTimeEventMod() + DecorateOffIsExist := LimitEventMod.CheckExist(limitedTimeEvent.EVENT_TYPE_DECORATE_OFF) + CostItem, PetExp, PartItem := DecorateMod.GetDecorateCostItem(AreaId, DecorateId, DecorateOffIsExist) err := player.HandleLoseItem(CostItem, msg.ITEM_POP_LABEL_DecorateCost.String()) // 扣除道具 if err != nil { player.SendErrClienRes(&msg.ResDecorate{ @@ -562,7 +564,9 @@ func ReqDecorateAll(player *Player, buf []byte) error { return errors.New("等级不足") } PlayerBaseMod := player.GetPlayerBaseMod() - CostItem, AddItem, DecorateNum, DecorateList, Log, PetExp := DecorateMod.DecorateAll(PlayerBaseMod.GetStar()) + LimitEventMod := player.PlayMod.getLimitedTimeEventMod() + DecorateOffIsExist := LimitEventMod.CheckExist(limitedTimeEvent.EVENT_TYPE_DECORATE_OFF) + CostItem, AddItem, DecorateNum, DecorateList, Log, PetExp := DecorateMod.DecorateAll(PlayerBaseMod.GetStar(), DecorateOffIsExist) err := player.HandleLoseItem(CostItem, msg.ITEM_POP_LABEL_DecorateCost.String()) // 扣除道具 if err != nil { player.SendErrClienRes(&msg.ResDecorateAll{ diff --git a/src/server/game/UnitTest.go b/src/server/game/UnitTest.go index 513e40b0..a7ada801 100644 --- a/src/server/game/UnitTest.go +++ b/src/server/game/UnitTest.go @@ -332,7 +332,7 @@ func UnitDecoratePartCost(p *Player) error { DecorateMod.PartClassPool = []int{} DecorateMod.PartPool = make(map[int]int) DecorateMod.InitData() - Items, _, _ := DecorateMod.GetDecorateCostItem(1, 33) + Items, _, _ := DecorateMod.GetDecorateCostItem(1, 33, false) err := p.HandleLoseItem(Items, "") if err != nil { fmt.Print(err) diff --git a/src/server/game/mod/decorate/Decorate.go b/src/server/game/mod/decorate/Decorate.go index 54867726..a0703315 100644 --- a/src/server/game/mod/decorate/Decorate.go +++ b/src/server/game/mod/decorate/Decorate.go @@ -2,8 +2,10 @@ package decorate import ( "fmt" + "math" "server/GoUtil" decorateCfg "server/conf/decorate" + limitedTimeEventCfg "server/conf/limitedTimeEvent" "server/game/mod/item" "server/msg" "sort" @@ -75,10 +77,14 @@ func (d *Decorate) GetDecorateAddEnergy(cnt int) []*item.Item { } // 获取装饰消耗 -func (d *Decorate) GetDecorateCostItem(AreaId, DecorateId int) ([]*item.Item, int, []*item.Item) { +func (d *Decorate) GetDecorateCostItem(AreaId, DecorateId int, DecorateOffIsExist bool) ([]*item.Item, int, []*item.Item) { Item := decorateCfg.GetStarCost(AreaId, DecorateId) PetExp := decorateCfg.GetDecoratePExp(AreaId, DecorateId) Id := decorateCfg.GetIdBySenceAndLv(AreaId, DecorateId) + if DecorateOffIsExist { + OffRate := limitedTimeEventCfg.GetDecorateOffDiscount(AreaId, DecorateId) + Item = int(math.Ceil(float64(Item) * float64(OffRate))) + } Items := []*item.Item{item.NewItem(item.ITEM_STAR_ID, Item)} PartItem := d.PartCost[Id] PartItemList := make([]*item.Item, 0) @@ -93,7 +99,7 @@ func (d *Decorate) GetDecorateCostItem(AreaId, DecorateId int) ([]*item.Item, in return Items, PetExp, PartItemList } -func (d *Decorate) DecorateAll(Star int) ([]*item.Item, []*item.Item, int, []int, []interface{}, int) { +func (d *Decorate) DecorateAll(Star int, DecorateOffIsExist bool) ([]*item.Item, []*item.Item, int, []int, []interface{}, int) { DecorateAll := decorateCfg.GetAllSortIdByAreaId(d.AreaId) SubAlice := GoUtil.SubSlices(DecorateAll, GoUtil.MapIntToIntSlice(d.FinishList)) sort.Ints(SubAlice) @@ -111,6 +117,10 @@ func (d *Decorate) DecorateAll(Star int) ([]*item.Item, []*item.Item, int, []int break } NeedStar := decorateCfg.GetStarCost(d.AreaId, v) + if DecorateOffIsExist { + OffRate := limitedTimeEventCfg.GetDecorateOffDiscount(d.AreaId, v) + NeedStar = int(math.Ceil(float64(NeedStar) * float64(OffRate))) + } if Star < NeedStar { break } diff --git a/src/server/game/mod/limitedTimeEvent/LimitedTimeEvent.go b/src/server/game/mod/limitedTimeEvent/LimitedTimeEvent.go index 9d65c623..8bc6f24b 100644 --- a/src/server/game/mod/limitedTimeEvent/LimitedTimeEvent.go +++ b/src/server/game/mod/limitedTimeEvent/LimitedTimeEvent.go @@ -28,6 +28,7 @@ const ( EVENT_TYPE_PAYBACK_DAY = 15 // 回收日 EVENT_TYPE_LITTLE_APPRENTICE = 16 // 小学徒 EVENT_TYPE_CAT_DAY_SALE = 17 // 猫咪大甩卖 + EVENT_TYPE_DECORATE_OFF = 18 // 装饰打折 ) const (