package gameserver import ( "fmt" "gac-hkrpg-go/internal/common" pb "gac-hkrpg-go/protocol/proto" ) func (s *Session) applyCurrencyWarsCommands() error { if !s.currencyWarsOpen { return nil } if _, active := CURRENT_BATTLE.Load(s.Token); active { return nil } commands, err := common.ReadCurrencyWarsCommands() if err != nil { return err } if len(commands) == 0 { return nil } cfg, err := common.LoadRuntimeConfig() if err != nil { return err } for _, command := range commands { if command.UID != cfg.PlayerUID { continue } catalog, data, err := cwPreparingData(s) if err != nil { return nil } if command.RunID != data.DHFOFLFCLAH.UniqueId { if err = common.AcknowledgeCurrencyWarsCommand(command.ID); err != nil { return err } PacketLog("CW_GM discarded command for a finished run") continue } player, _, _ := cwComponents(data.DHFOFLFCLAH) if player == nil { return fmt.Errorf("CW player missing") } var update *pb.KFNCAIHIHCM switch command.Field { case "gold": player.Gold = command.Value update = cwGoldSync(player.Gold) case "hp": if command.Value == 0 || command.Value > player.PPKKHHNEOHB { return fmt.Errorf("CW command HP exceeds run limit") } player.GridFightLineupHp = command.Value update = &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_GridFightLineupHp{GridFightLineupHp: &pb.FMJDDIHBELC{GridFightLineupHp: command.Value, PPKKHHNEOHB: player.PPKKHHNEOHB}}} default: return fmt.Errorf("unknown CW command field") } if err = s.saveCurrencyWarsData(data, catalog); err != nil { return err } if err = s.Send(cwNotify(update)); err != nil { return err } if err = common.AcknowledgeCurrencyWarsCommand(command.ID); err != nil { return err } PacketLog(fmt.Sprintf("CW_GM applied request=%s field=%s value=%d revision=%d", command.ID, command.Field, command.Value, s.currencyWarsRevision)) } return nil }