chore: checkpoint stable battle and eidolon progression
This commit is contained in:
1 parent
365e66ffe0
commit
a681affdb3
23 files changed
+34511
-11310
No files matched your search
@@ -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)
|
||||
})
|
||||
|
||||
|
||||
Reference in new issue
Block a user