using CommonAI.Data; using CommonAI.Zone; using CommonAI.Zone.Formula; using CommonAI.Zone.Helper; using CommonAI.Zone.Instance; using CommonLang.Log; using CommonLang.Vector; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using static CommonAI.ZoneClient.ClientStruct; //using System.Threading.Tasks; namespace CommonAI.ZoneServer.JSGModule { public class JSGHackerModule { protected static readonly Logger log = LoggerFactory.GetLogger("JSGHackerModule"); public static void OnPlayerKillMonster(InstanceUnit attacker, InstanceUnit monster) { #if JSGProfile try { InstancePlayer player = (InstancePlayer)(attacker.IsPlayer ? attacker : attacker.Virtual.GetMasterUnit()); if (player == null) { log.Info("OnPlayerKillMonster player not exist:" + attacker.Parent.GetSceneID() + ", mID:" + monster.Info.ID + ", PID: " + attacker.PlayerUUID); return; } player.Virtual.OnPlayerKillMonster(monster); } catch (Exception e) { log.Warn("CI OnPlayerKillMonster catch:", e); } #endif } public static void PrintDmgInfo(InstanceUnit unit, InstanceUnit sender, AttackSource source, int hp, int finalHP) { #if JSGProfile try { if (!unit.IsPlayer){ return;} int atkPropID = (source == null || source.Attack == null || source.Attack.Properties == null) ? 0 : source.Attack.Properties.GetAttackID(); if (atkPropID != -1 && atkPropID != 9999901 && (finalHP < -100000000 || finalHP > 100000000) && !(unit.IsMonster && hp == unit.MaxHP)) { string stackInfo = new StackTrace().ToString(); log.Warn("伤害异常: " + hp + ", finalHP: " + finalHP + ", UnitInfo:" + unit.Info.ID + ", " + unit.PlayerUUID + ", sender:" + (sender == null ? "-1" : sender.PlayerUUID) + JSGModule.GetAttackSourceDes(source) + ", " + stackInfo); } } catch (Exception e) { log.Warn("JSGHackerModule PrintDmgInfo:", e); } #endif } } }