修改宠物币根据膨胀系数变化功能

This commit is contained in:
hahwu 2026-03-19 10:39:34 +08:00
parent 31e41bab0f
commit 7270808f80
10 changed files with 91 additions and 80 deletions

View File

@ -24,7 +24,7 @@ func init() {
gamedata.InitCfg(DAILY_TASK_REWARD)
}
func GetDailyTaskReward(Id, factory, activityId int) []*item.Item {
func GetDailyTaskReward(Id, activityId int) []*item.Item {
data, err := gamedata.GetData(DAILY_TASK_REWARD)
if err != nil {
log.Debug("GetDailyTaskReward err:%v", err)
@ -37,11 +37,9 @@ func GetDailyTaskReward(Id, factory, activityId int) []*item.Item {
items := gamedata.GetItemList(v, "ItemID")
petCoinBase := gamedata.GetIntValue(v, "PetCoinBase")
if petCoinBase > 0 {
petCoinNum := int(float64(petCoinBase) * (float64(factory)/1000 + 1))
petCoinNum = (petCoinNum/5 + 1) * 5 // 向上取整到5的倍数
items = append(items, &item.Item{
Id: item.ITEM_STAR_ID,
Num: petCoinNum,
Num: petCoinBase,
})
}
return items

View File

@ -43,43 +43,46 @@ func (c *Collect) ensureJackpot() {
}
// 获取收集奖励
func (c *Collect) GetReward(Id, Num int) ([]*item.Item, error) {
func (c *Collect) GetReward(id, num, factor int) ([]*item.Item, error) {
// 判断是否已领取
for _, v := range c.Reward {
if v == Id {
return nil, fmt.Errorf("id : %d;已领取", Id)
if v == id {
return nil, fmt.Errorf("id : %d;已领取", id)
}
}
Need := collectCfg.GetRewardNeed(Id)
if Num < Need {
return nil, fmt.Errorf("id : %d;收集数量不足 %d", Id, Need)
need := collectCfg.GetRewardNeed(id)
if num < need {
return nil, fmt.Errorf("id : %d;收集数量不足 %d", id, need)
}
// 领取奖励
c.Reward = append(c.Reward, Id)
JackpotId := 0
JackpotId, c.Jackpot = GoUtil.PopSlice(c.Jackpot)
c.Reward = append(c.Reward, id)
jackpotId := 0
jackpotId, c.Jackpot = GoUtil.PopSlice(c.Jackpot)
c.ensureJackpot()
return collectCfg.GetJackpotItems(JackpotId), nil
items := collectCfg.GetJackpotItems(jackpotId)
items = GoUtil.FormatStarItem(items, factor)
return items, nil
}
func (c *Collect) BackData() *msg.ResCollectInfo {
ItemsMsg := make([]*msg.CollectItem, 0, jackpotPreviewSize)
func (c *Collect) BackData(factor int) *msg.ResCollectInfo {
itemsMsg := make([]*msg.CollectItem, 0, jackpotPreviewSize)
for i := 0; i < jackpotPreviewSize; i++ {
Items := collectCfg.GetJackpotItems(c.Jackpot[i])
ItemsMsg = append(ItemsMsg, &msg.CollectItem{
items := collectCfg.GetJackpotItems(c.Jackpot[i])
items = GoUtil.FormatStarItem(items, factor)
itemsMsg = append(itemsMsg, &msg.CollectItem{
Id: int32(i + 1),
Items: item.ItemToMsg(Items),
Items: item.ItemToMsg(items),
})
}
return &msg.ResCollectInfo{
Id: GoUtil.IntToInt32(c.Reward),
Items: ItemsMsg,
Items: itemsMsg,
}
}
func initJackpot2(r1 []int) []int {
Ids := collectCfg.GetJackpotId()
r2 := GoUtil.ShuffleArray(Ids)
ids := collectCfg.GetJackpotId()
r2 := GoUtil.ShuffleArray(ids)
return append(r1, r2...)
}

View File

@ -2,7 +2,6 @@ package dailyTask
import (
"fmt"
"math"
dailyTaskCfg "server/conf/daily_task"
"server/game/mod/item"
"server/game/mod/quest"
@ -73,7 +72,8 @@ func (dt *DailyTaskMod) ZeroUpdate(lv, factor, activityId int) {
if err != nil {
log.Debug("parse quest err str : %s", questStr)
}
items := dailyTaskCfg.GetDailyTaskReward(id, factor, activityId)
items := dailyTaskCfg.GetDailyTaskReward(id, activityId)
items = GoUtil.FormatStarItem(items, factor)
dt.DayTask[id] = DailyTask{
Items: items,
UnLock: id == 1,
@ -109,12 +109,7 @@ func (dt *DailyTaskMod) WeekUpdate(factor int) {
func formatWeekReward(reward map[int]WeekReward, factor int) map[int]WeekReward {
for k, v := range reward {
for _, v := range v.Items {
if v.Id == item.ITEM_STAR_ID {
Num := math.Round(float64(v.Num) * float64(factor) / 100)
v.Num = int(Num) / 5 * 5
}
}
v.Items = GoUtil.FormatStarItem(v.Items, factor)
reward[k] = v
}
return reward

View File

@ -66,20 +66,23 @@ func (f *FriendTreasureMod) Flip(Pos int) ([]*item.Item, int64, error) {
return nil, 0, fmt.Errorf("game not start")
}
f.Shift++
Info := f.List[Pos]
Info.Status = GAME_STATUS_START
if Info.Uid != 0 {
log.Debug("uid:%v", Info.Uid)
f.Uids = append(f.Uids, Info.Uid)
info, ok := f.List[Pos]
if !ok {
return nil, 0, fmt.Errorf("invalid position")
}
if Info.Type == FRIEND_TYPE_ALIVE {
ProbMap := friendTreasureCfg.GetChestProb()
Prob := GoUtil.RandMap(ProbMap)
Items := friendTreasureCfg.GetChestItems(Prob)
if Items != nil {
f.BoxItems = append(f.BoxItems, Items...)
info.Status = GAME_STATUS_START
if info.Uid != 0 {
log.Debug("uid:%v", info.Uid)
f.Uids = append(f.Uids, info.Uid)
}
if info.Type == FRIEND_TYPE_ALIVE {
probMap := friendTreasureCfg.GetChestProb()
prob := GoUtil.RandMap(probMap)
items := friendTreasureCfg.GetChestItems(prob)
if items != nil {
f.BoxItems = append(f.BoxItems, items...)
}
return Items, Info.Uid, nil
return items, info.Uid, nil
}
return nil, 0, nil
}
@ -90,19 +93,18 @@ func (f *FriendTreasureMod) EndGame(factor int) ([]*item.Item, int, error) {
return nil, 0, fmt.Errorf("game is over")
}
// f.Shift++
ProbAdd := friendTreasureCfg.GetProbAdd(f.Shift)
ItemNum := int(float64(f.Star) * (100.0 + float64(ProbAdd)) / 100.0)
ItemNum = int(float64(ItemNum)*float64(factor)/100/5) * 5
FriendItemNum := ItemNum / 10
Reward := []*item.Item{
{Id: item.ITEM_STAR_ID, Num: ItemNum},
probAdd := friendTreasureCfg.GetProbAdd(f.Shift)
itemNum := int(float64(f.Star) * (100.0 + float64(probAdd)) / 100.0)
friendItemNum := itemNum / 10
reward := []*item.Item{
{Id: item.ITEM_STAR_ID, Num: itemNum},
}
if f.Shift == 9 {
BigReward := friendTreasureCfg.GetBigReward()
Reward = append(Reward, BigReward...)
bigReward := friendTreasureCfg.GetBigReward()
reward = append(reward, bigReward...)
}
return Reward, FriendItemNum, nil
reward = GoUtil.FormatStarItem(reward, factor)
return reward, friendItemNum, nil
}
// 重置游戏数据
@ -120,15 +122,13 @@ func (f *FriendTreasureMod) NotifyStar() *msg.ResFriendTreasureStar {
}
func (f *FriendTreasureMod) BackData() *msg.ResFriendTreasure {
TreasureInfoList := make([]*msg.TreasureInfo, 0, len(f.List))
treasureInfoList := make([]*msg.TreasureInfo, 0, len(f.List))
for _, v := range f.List {
TreasureInfoList = append(TreasureInfoList, v)
treasureInfoList = append(treasureInfoList, v)
}
return &msg.ResFriendTreasure{
Status: int32(f.Status),
List: TreasureInfoList,
List: treasureInfoList,
List2: f.List2,
Star: int32(f.Star),
Shift: int32(f.Shift),

View File

@ -2,7 +2,6 @@ package sevenLogin
import (
"fmt"
"math"
sevenLoginCfg "server/conf/seven_login"
"server/game/mod/item"
GoUtil "server/game_util"
@ -130,24 +129,9 @@ func (s *SevenLoginMod) BackData() *msg.ResSevenLogin {
func formatSevenReward(reward map[int]Reward, factor int) map[int]Reward {
for k, v := range reward {
for _, v := range v.Item1 {
if v.Id == item.ITEM_STAR_ID {
Num := math.Round(float64(v.Num) * float64(factor) / 100)
v.Num = int(Num) / 5 * 5
}
}
for _, v := range v.Item2 {
if v.Id == item.ITEM_STAR_ID {
Num := math.Round(float64(v.Num) * float64(factor) / 100)
v.Num = int(Num) / 5 * 5
}
}
for _, v := range v.Item3 {
if v.Id == item.ITEM_STAR_ID {
Num := math.Round(float64(v.Num) * float64(factor) / 100)
v.Num = int(Num) / 5 * 5
}
}
v.Item1 = GoUtil.FormatStarItem(v.Item1, factor)
v.Item2 = GoUtil.FormatStarItem(v.Item2, factor)
v.Item3 = GoUtil.FormatStarItem(v.Item3, factor)
reward[k] = v
}
return reward

View File

@ -7,6 +7,7 @@ import (
"server/game/mod/champship"
"server/game/mod/charge"
"server/game/mod/chess"
"server/game/mod/collect"
dailyTask "server/game/mod/daily_task"
"server/game/mod/decorate"
"server/game/mod/endless"
@ -105,3 +106,7 @@ func (p *Player) GetFriendTreasureMod() *friendTreasure.FriendTreasureMod {
func (p *Player) GetActivityMod() *activity.Activity {
return p.PlayMod.getActivityMod()
}
func (p *Player) GetCollectMod() *collect.Collect {
return p.PlayMod.getCollectMod()
}

View File

@ -402,7 +402,7 @@ func (p *Player) ZeroUpdate(a []interface{}) {
p.ActivityZeroUpdate()
// 每日任务
p.PlayMod.getDailyTaskMod().ZeroUpdate(p.GetPlayerBaseMod().GetLevel(), p.PlayMod.getDecorateMod().GetAreaId(), p.GetDailyTaskActivityId())
p.PlayMod.getDailyTaskMod().ZeroUpdate(p.GetPlayerBaseMod().GetLevel(), p.GetOrderFactor(), p.GetDailyTaskActivityId())
p.PushClientRes(p.PlayMod.getDailyTaskMod().BackData())
p.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_LOGIN})

View File

@ -4449,7 +4449,7 @@ func ReqSetEmoji(player *Player, buf []byte) error {
// 请求收藏室内
func ReqCollectInfo(player *Player, buf []byte) error {
CollectMod := player.PlayMod.getCollectMod()
player.PushClientRes(CollectMod.BackData())
player.PushClientRes(CollectMod.BackData(player.GetOrderFactor()))
return nil
}
@ -4475,7 +4475,7 @@ func ReqCollect(player *Player, buf []byte) error {
AreaType = "avatar"
Num = player.PlayMod.getAvatarMod().GetAvatarNum()
}
Items, err := CollectMod.GetReward(int(req.Id), Num)
Items, err := CollectMod.GetReward(int(req.Id), Num, player.GetOrderFactor())
if err != nil {
player.SendErrClienRes(&msg.ResCollect{
Code: msg.RES_CODE_FAIL,
@ -4492,7 +4492,7 @@ func ReqCollect(player *Player, buf []byte) error {
return err
}
player.PlayMod.save()
player.PushClientRes(CollectMod.BackData())
player.PushClientRes(CollectMod.BackData(player.GetOrderFactor()))
player.PushClientRes(&msg.ResCollect{
Code: msg.RES_CODE_SUCCESS,
})

View File

@ -12,10 +12,12 @@ import (
"encoding/hex"
"fmt"
"io"
"math"
"math/rand"
"net"
"net/http"
"reflect"
"server/game/mod/item"
"server/pkg/github.com/name5566/leaf/log"
"sort"
"strconv"
@ -721,3 +723,13 @@ func GetGeoInfo(ip string) (string, string, error) {
return countryCode, record.Country.IsoCode, nil
}
func FormatStarItem(items []*item.Item, factor int) []*item.Item {
for _, v := range items {
if v.Id == item.ITEM_STAR_ID {
Num := math.Round(float64(v.Num) * float64(factor) / 100)
v.Num = int(Num) / 5 * 5
}
}
return items
}

View File

@ -0,0 +1,14 @@
package test
import (
"server/game"
"testing"
)
func TestCollectBack(t *testing.T) {
p1 := new(game.Player)
p1.InitPlayer("3625212")
CollectMod := p1.GetCollectMod()
res := CollectMod.BackData(p1.GetOrderFactor())
t.Logf("res:%v", res)
}