chore: checkpoint stable battle and eidolon progression

This commit is contained in:
CAtlas0784 committed 2026-10-17 16:38:03 +07:00
1 parent 365e66ffe0
commit a681affdb3
23 files changed
+34511 -11310

No files matched your search

+37 -20
View File
@@ -74,6 +74,15 @@ func init() {
{Tid: 101, Num: 999999}, // Normal Pass
{Tid: 102, Num: 999999}, // Special Pass
}
materials, err := eidolonMaterials(player)
if err != nil {
return err
}
for _, material := range materials {
if material.Num > 0 {
rsp.MaterialList = append(rsp.MaterialList, material)
}
}
// Avatar IDs do not imply item IDs. The old 130000+avatar formula
// produced nonexistent materials and broke the client's inventory init.
return nil
@@ -128,32 +137,40 @@ func init() {
return nil
}
isExRank := false
if req.CostData != nil {
for _, item := range req.CostData.ItemList {
if pile := item.GetPileItem(); pile != nil {
if (pile.ItemId >= 130000 && pile.ItemId < 140000) || pile.ItemId == 131204 || pile.ItemId == 131213 || pile.ItemId == 131308 {
isExRank = true
break
}
}
}
res, err := common.GameRes()
if err != nil {
return err
}
if req.Rank > 6 {
isExRank = true
maximum := res.AvatarConfigs[req.AvatarId].MaxRank
if maximum == 0 || req.Rank > maximum {
rsp.Retcode = uint32(goproto.Retcode_RET_AVATAR_RANK_REACH_MAX)
return nil
}
if isExRank || (avatar.Data.Rank >= 6 && common.AvatarExRankMap[req.AvatarId] != 0) {
avatar.ExRankUnlocked = true
if req.Rank > 0 && req.Rank <= 6 {
avatar.Data.Rank = req.Rank
}
} else {
avatar.Data.Rank = req.Rank
if req.Rank != avatar.Data.Rank+1 {
rsp.Retcode = uint32(goproto.Retcode_RET_AVATAR_RANK_NOT_MATCH)
return nil
}
if _, active := CURRENT_BATTLE.Load(s.Token); active {
rsp.Retcode = uint32(goproto.Retcode_RET_AVATAR_RANK_NOT_MATCH)
return nil
}
// Ordinary Eidolons do not implicitly unlock EX, even at the final rank.
materials, err := eidolonMaterials(player)
if err != nil {
return err
}
if err := common.SaveAvatarRank(req.AvatarId, req.Rank); err != nil {
return err
}
avatar.Data.Rank = req.Rank
materials, err = eidolonMaterials(player)
if err != nil {
return err
}
ret := &goproto.PlayerSyncScNotify{}
buildSync(player, ret, []uint32{avatar.AvatarID}, nil, nil)
ret.MaterialList = materials
return s.Send(ret)
})