/// <summary> /// 战斗结算 /// </summary> public static ErrorCode Settle(int userId, string battleId, TBattleResult result, bool isManual, out TBattleSettle settle, int playerId) { settle = null; if (result == null) { return(ErrorCode.Success); } settle = new TBattleSettle() { BattleType = result.BattleType, IsMyWin = userId == (result == null ? 0 : result.WinPlayerId), BonusOutput = null, Round = result == null ? 1 : result.SettleRound, Success = result != null, BattleId = battleId, IsManual = isManual, }; //结算失败, 没有战斗结果 if (!settle.Success) { return(ErrorCode.Success); } //根据战斗类型结算 var err = ErrorCode.Success; switch ((BattleType)result.BattleType) { //挑战 case BattleType.PK: err = SettleUserPK(userId, settle); if (err != ErrorCode.Success) { return(err); } break; //合作 case BattleType.COOP: err = SettleUserCoop(userId, settle); if (err != ErrorCode.Success) { return(err); } break; //随机竞技场 case BattleType.PKRANDOM: err = SettleUserPKRandom(userId, settle, playerId); if (err != ErrorCode.Success) { return(err); } break; default: Logger.LogError($"User[{userId}]: Unknown battleType[{result.BattleType}] to settle"); return(ErrorCode.InvalidParameter); } return(ErrorCode.Success); }
public TBattleResult Simulate(TBattleRecord record) { LuaTable table; try { var times = Interlocked.Increment(ref _battleTimes); if (times >= _reInitCount && times % _reInitCount == 0) { InitState(); Logger.LogDebug("Reinit Lua State"); } Stopwatch watch = new Stopwatch(); watch.Start(); //Logger.LogWarning("Simulate Battle [" + record.ToJson() + "]"); table = _battleEntry.invoke("entry", record.ToLua(), false) as LuaTable; var result = new TBattleResult() { WinPlayerId = table["winPlayerId"].ToInt(), FrameCount = table["frameCount"].ToInt(), RoundNum = table["roundNum"].ToInt(), }; watch.Stop(); Logger.LogDebug($"Battle Simulate BattleId[{record.BattleId}] FrameCount[{record.FrameCount}] Result[{result.ToJson()}] Finish. Time cost [{watch.ElapsedMilliseconds}]ms"); return(result); } catch (Exception e) { Logger.LogError(e, "Simulate lua battle failed."); InitState(); _ = BattleService.ReportBattleException(Host.ServerId, record.PlayerList[0].PlayerId, BattleVersion, record.ToLua()); } return(null); }