Files
GaCy-GO/internal/gameserver/currency_wars_commands.go
T

73 lines
1.9 KiB
Go

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
}