Update GaCy-GO

This commit is contained in:
CAtlas0784 committed 2026-10-28 18:54:43 +07:00
1 parent da8a32f60d
commit 0cbe460e49
345 files changed
+98202 -77559

No files matched your search

@@ -128,18 +128,16 @@ func init() {
// The revision's request name is misleading. Controlled reference replay
// establishes this request's MFFCPLBNHCF arm as portal selection and its
// response as GridFightHandlePendingActionScRsp. No numeric alias is used.
handleNamed("GridFightHandleBonfireHealHp", "GridFightHandlePendingActionScRsp", func(s *Session, req *goproto.GridFightHandleBonfireHealHpCsReq, rsp *goproto.GridFightHandlePendingActionScRsp) (resultErr error) {
cwHandleNamed("GridFightHandleBonfireHealHp", "GridFightHandlePendingActionScRsp", func(s *Session, req *goproto.GridFightHandleBonfireHealHpCsReq, rsp *goproto.GridFightHandlePendingActionScRsp) error {
rsp.QueuePosition = req.QueuePosition
rsp.Retcode = uint32(goproto.Retcode_RET_GRID_FIGHT_CONF_MISS)
defer func() {
if resultErr != nil {
PacketLog(fmt.Sprintf("CW_PENDING_ACTION failed queue=%d error=%v", req.QueuePosition, resultErr))
rsp.Retcode = uint32(goproto.Retcode_RET_GRID_FIGHT_CONF_MISS)
resultErr = nil // Send the typed error response so the wait block is released.
}
}()
selection := req.GetMFFCPLBNHCF()
if selection == nil && req.GetNNDGEJFLGGF() == nil && req.GetLGNPHHBGKFH() == nil && req.GetIBCHMBNIPLK() == nil && req.GetDKDFDGJGIHM() == nil {
if req.GetIIDBLCFAAPC() != nil {
if _, active := CURRENT_BATTLE.Load(s.Token); active {
return fmt.Errorf("CW Bonfire selection cannot change during Battle")
}
}
if selection == nil && req.GetNNDGEJFLGGF() == nil && req.GetLGNPHHBGKFH() == nil && req.GetIBCHMBNIPLK() == nil && req.GetDKDFDGJGIHM() == nil && req.GetFIKAGBAEOAP() == nil && req.GetBAKAKODKECM() == nil && req.GetIIDBLCFAAPC() == nil {
PacketLog(fmt.Sprintf("CW_PENDING_ACTION unsupported queue=%d action=%T", req.QueuePosition, req.FGLIODAJFML))
return nil
}
@@ -166,29 +164,29 @@ func init() {
}
var after *goproto.MPIMAEMCEFH
var notify *goproto.GridFightSyncUpdateResultScNotify
var runtime *common.CurrencyWarsRuntimeState
if selection != nil {
after, notify, err = currencyWarsEntryChoice(catalog, before, req.QueuePosition, selection.JCAPCNLJGFC)
} else {
after = proto.Clone(before).(*goproto.MPIMAEMCEFH)
switch {
case req.GetIIDBLCFAAPC() != nil && before.FMIGOKIDKJL.GetIIDBLCFAAPC() != nil:
notify, runtime, err = cwSelectBonfire(catalog, after, req.GetIIDBLCFAAPC())
case req.GetBAKAKODKECM() != nil && before.FMIGOKIDKJL.GetBAKAKODKECM() != nil:
notify, err = cwSelectEncounter(after, req.GetBAKAKODKECM())
case req.GetFIKAGBAEOAP() != nil && before.FMIGOKIDKJL.GetFIKAGBAEOAP() != nil:
notify, err = cwSelectSupply(catalog, after, req.GetFIKAGBAEOAP())
case req.GetDKDFDGJGIHM() != nil && before.FMIGOKIDKJL.GetEEKMIAMGHFL() != nil:
notify, err = cwSelectSpotlight(catalog, after, req.GetDKDFDGJGIHM())
case req.GetNNDGEJFLGGF() != nil && before.FMIGOKIDKJL.GetNNDGEJFLGGF() != nil:
stage, _ := cwStage(after)
entries, loadErr := cwNodeTransitions(catalog)
isNextRound := false
if loadErr == nil && stage != nil {
for _, entry := range entries {
level := new(goproto.AINFNFIDGFF)
if proto.Unmarshal(entry.LevelWire, level) == nil && level.DCAHJELNJNP == stage.DCAHJELNJNP && level.SectionId == stage.SectionId {
isNextRound = true
}
}
}
if isNextRound {
notify, err = cwNextRound(catalog, after)
} else {
route, loadErr := catalog.RouteNodes(stage.GetEMOHLJHPOPC())
if loadErr != nil || len(route) == 0 {
err = fmt.Errorf("CW RoundBegin route missing: %v", loadErr)
} else if stage.DCAHJELNJNP == route[0].ChapterID && stage.SectionId == route[0].SectionID {
notify, err = cwInitialRound(catalog, after)
} else {
notify, err = cwNextRound(catalog, after)
}
case req.GetLGNPHHBGKFH() != nil && before.FMIGOKIDKJL.GetLGNPHHBGKFH() != nil:
notify, err = cwReturnPreparation(after)
@@ -203,12 +201,25 @@ func init() {
return nil
}
data.DHFOFLFCLAH = after
if err := s.saveCurrencyWarsData(data, catalog); err != nil {
runtime, err = cwApplyBonfireEnemyRules(catalog, after, runtime)
if err != nil {
return err
}
// Enemy stars and their one-time rule marker must commit together.
if stage, _ := cwStage(after); stage != nil && runtime.Rules["PetPalStarDown"] != 0 && stage.GetIMPNAHBCADN().GetMPOBBIPMNNJ() != nil {
notify.GCPNIHHBGGD = append(notify.GCPNIHHBGGD, cwNotify(&goproto.KFNCAIHIHCM{MNLCHEJKDHO: &goproto.KFNCAIHIHCM_OOICHLAMNIG{OOICHLAMNIG: &goproto.AINFNFIDGFF{DCAHJELNJNP: stage.DCAHJELNJNP, SectionId: stage.SectionId, IMPNAHBCADN: stage.IMPNAHBCADN}}}).GCPNIHHBGGD...)
}
if err := s.saveCurrencyWarsDataWithRuntime(data, catalog, runtime); err != nil {
return err
}
if req.GetIIDBLCFAAPC().GetECDACDNDHGO() != nil {
player, _, _ := cwComponents(after)
stage, _ := cwStage(after)
PacketLog(fmt.Sprintf("CW_BONFIRE_TAKE saved old_queue=%d gold=%d level=%d exp=%d next=%d/%d revision=%d", req.QueuePosition, player.Gold, player.EHNJDIDABHD, player.GridFightCurLevelExp, stage.DCAHJELNJNP, stage.SectionId, s.currencyWarsRevision))
}
// Save before synchronizing, then finish the request after the ordered
// notification, matching the reference's pending-action callback flow.
if err := s.Send(notify); err != nil {
if err := cwSend(s, notify); err != nil {
return err
}
rsp.Retcode = 0