using CommonAI.Zone.Instance; using CommonLang; using CommonLang.Log; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using XmdsCommon.Plugin; using static CommonAI.ZoneClient.ClientStruct; using static XmdsCommonServer.Plugin.XmdsVirtual; namespace XmdsCommonServer.Plugin.JSGXmdsModule { public class JSGXmdsHackerModule { protected static readonly Logger log = LoggerFactory.GetLogger("JSGXmdsHackerModule"); public static void OnPlayerKillMonster(InstancePlayer attacker, InstanceUnit monster) { //玩家属性打印 XmdsVirtual playerVir = (attacker.Virtual as XmdsVirtual); XmdsUnitProp CurProp = playerVir.MirrorProp; XmdsUnitProp oldProp = playerVir.GetOriginProp(); log.Info("ID:" + attacker.PlayerUUID + ", 所在场景:" + attacker.Parent.GetSceneID()); log.Info(", 当前血:" + attacker.CurrentHP + ",基础:" + oldProp.MaxAttack + ", " + oldProp.Defence + ", " + oldProp.MaxHP + ", 攻防血" + CurProp.MaxAttack + ", " + CurProp.Defence + ", " + CurProp.MaxHP + ", 妖:" + CurProp.monsterAtk + ", " + CurProp.monsterDef + ", 妖比:" + CurProp.monsterAtkPer + ", " + CurProp.monsterDefPer) ; log.Info("扩展属性1, 增减伤:" + CurProp.AllDmgAdd + ", " + CurProp.AllDmgReduce + ", 玩家增减伤:" + CurProp.PlayerDamageAdd + ", " + CurProp.PlayerDamageReduce + ", 神器伤:" + CurProp.ArtifactMainPer + ", boss伤害:" + CurProp.ToBossCritRate + ", " + CurProp.ToBossCritDamage + ", 杀意:" + CurProp.KillValuePer + ", 吸血" + CurProp.NormalAtkLeech + ", " + CurProp.ActiveAtkLeech + ", 怪伤害:" + CurProp.monsterDamageAdd + ", " + CurProp.monsterDamageReduce); log.Info("扩展属性1, 暴击率:" + CurProp.CritRate + ", 爆伤:" + CurProp.CritDamage + ", 回血:" + CurProp.MaxHPReborn + ", 韧性:" + CurProp.CtrlTimeReduce + ", CD缩减:" + CurProp.SkillCD + ", 治疗效果:" + CurProp.HealEffect + ", " + CurProp.HealedEffect + ", 移攻速:" + CurProp.MoveSpeed + ", " + CurProp.AttackSpeed + ", 技伤:" + CurProp.SkillDamageAdd); UnitBuffStatus[] buffStatus = attacker.GetCurrentBuffStatus(); if (buffStatus != null) { foreach (UnitBuffStatus buffItem in buffStatus) { log.Info("玩家buff:" + buffItem.ToString()); } } //检测基本属性是否有异常的,打印一下 float rate1 = oldProp.MaxAttack == 0 ? 1 : (float)(CurProp.MaxAttack) / oldProp.MaxAttack; float rate2 = oldProp.Defence == 0 ? 1 : CurProp.Defence / oldProp.Defence; float rate3 = oldProp.MaxHP == 0 ? 1 : CurProp.MaxHP / oldProp.MaxHP; if(rate1 > 1.2f || rate2 > 1.2f || rate3 > 1.2f) { HashMap playerProps = playerVir.GetChangePropMap(); foreach(PropChangeOperation chgProp in playerProps.Values) { log.Info("玩家变更属性:" + chgProp.ToString()); } } else { log.Info("无特别异常属性!"); } } } }