123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using XmdsCommon.Plugin;
- using CommonLang.Log;
- using XmdsCommon.EditorData;
- using CommonAI.Zone.Helper;
- using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator;
- using CommonAI.Data;
- namespace XmdsServerEdgeJS
- {
- public class XmdsPlayerUtil
- {
- public class UnitSkillData
- {
- public XmdsUnitSkillInfo normalSkill = new XmdsUnitSkillInfo();
- public XmdsUnitSkillInfo cardSkill = new XmdsUnitSkillInfo();
- }
- private readonly Logger log = LoggerFactory.GetLogger("XmdsPlayer");
- private static XmdsPlayerUtil _instance;
- /// 单件实例
- public static XmdsPlayerUtil instance()
- {
- if (_instance == null)
- {
- _instance = new XmdsPlayerUtil();
- }
- return _instance;
- }
- public static void instance(XmdsPlayerUtil value)
- {
- _instance = value;
- }
- public XmdsUnitData createXmdsUnitData(dynamic input, string playerId)
- {
- try
- {
- XmdsUnitData data = new XmdsUnitData();
- data.BaseInfo = createXmdsUnitBaseInfo(input.basic);
- data.UnitPKInfo = createXmdsPKInfo(input.pkInfo);
- data.AvatarList = createXmdsAvatarInfoList(input.avatars);
- data.Prop = createXmdsUnitProp(input.effects, playerId);
- data.Prop.HP = (int)input.tempData.hp;
- if(data.Prop.HP <= 0)
- {
- log.Error("单位血量为负值:" + data.Prop.HP);
- //防止异常
- data.Prop.HP = 1;
- }
- data.PropExt = createXmdsUnitProp(input.effectsExt, playerId);
- UnitSkillData skillData = createXmdsUnitSkillInfo(input.skills);
- data.Skills = skillData.normalSkill;
- data.CardSkills = skillData.cardSkill;
- int addTestPetData = (int)input.addTestPetData;
- if (addTestPetData == 1)
- {
- data.UnitPetData = createPetData(input.petBase, input.petEffect, input.petSkill, input.petMode);
- }
- data.UnitSceneInfo = createSceneInfo(input.sceneData);
- return data;
- }
- catch (Exception err)
- {
- log.Error("createXmdsUnitData error: " + err.Message, err);
- return null;
- }
- }
- public SceneInfo createSceneInfo(dynamic sceneData)
- {
- try
- {
- int allowAutoGuard = (int)sceneData.allowAutoGuard;
- SceneInfo sceneInfo = new SceneInfo();
- sceneInfo.AllowAutoGuard = true;
- if (allowAutoGuard == 1)
- {
- sceneInfo.AllowAutoGuard = false;
- }
- return sceneInfo;
- }
- catch (Exception err)
- {
- log.Error("createPetConfig error: " + err.Message, err);
- return null;
- }
- }
- public PetData createPetData(dynamic petBase, dynamic petEffect, dynamic petSkill, dynamic petMode)
- {
- try
- {
- PetData petData = new PetData();
- PetBaseInfo baseInfo = createPetBaseData(petBase);
- petData.BaseInfo = baseInfo;
- XmdsUnitProp unitProp = createXmdsUnitProp(petEffect, "");
- petData.UnitProp = unitProp;
- UnitSkillData skillData = createXmdsUnitSkillInfo(petSkill);
- XmdsUnitSkillInfo skillInfo = skillData.normalSkill;
- petData.SkillInfo = skillInfo;
- XmdsPetConifg petConfigInfo = createPetConfig(petMode);
- petData.PetConfig = petConfigInfo;
- return petData;
- }
- catch (Exception err)
- {
- log.Error("createPetData error: " + err.Message, err);
- return null;
- }
- }
- public XmdsPetConifg createPetConfig(dynamic petMode)
- {
- try
- {
- XmdsPetConifg petConfigInfo = new XmdsPetConifg();
- petConfigInfo.Mode = (XmdsPetConifg.XmdsPetFollowMode)petMode;
- return petConfigInfo;
- }
- catch (Exception err)
- {
- log.Error("createPetConfig error: " + err.Message, err);
- return null;
- }
- }
- public PetBaseInfo createPetBaseData(dynamic petBase)
- {
- try
- {
- PetBaseInfo baseInfo = new PetBaseInfo();
- baseInfo.AvatarModel = (string)petBase.Model;
- baseInfo.AvatarModelScale = (int)petBase.ModelPercent;
- baseInfo.EffectModel = (string)petBase.ModelStar;
- baseInfo.EffectScale = (int)petBase.ModelStarPercent;
- baseInfo.EffectSceneScale = (int)petBase.ModelStarScenePercent;
- baseInfo.level = (int)petBase.level;
- baseInfo.name = (string)petBase.name;
- baseInfo.QColor = (byte)petBase.Qcolor;
- baseInfo.TemplateID = (int)petBase.templateId;
- baseInfo.IconName = (string)petBase.Icon;
- baseInfo.StateLv = (byte)petBase.upGradeLevel;
- return baseInfo;
- }
- catch (Exception err)
- {
- log.Error("createPetBaseData error: " + err.Message, err);
- return null;
- }
- }
- public PKInfo createXmdsPKInfo(dynamic input)
- {
- try
- {
- PKInfo pkInfo = new PKInfo();
- pkInfo.CurPKMode = (PKMode)input.mode;
- pkInfo.CurPKValue = (int)input.value;
- pkInfo.CurPKLevel = (PKLevel)input.level;
- return pkInfo;
- }
- catch (Exception err)
- {
- log.Error("createXmdsPKInfo error: " + err.Message, err);
- return null;
- }
- }
- public XmdsUnitBaseInfo createXmdsUnitBaseInfo(dynamic input)
- {
- XmdsUnitBaseInfo baseInfo = new XmdsUnitBaseInfo();
- baseInfo.name = (string)input.name;
- baseInfo.force = input.force;
- baseInfo.alliesForce = input.alliesForce;
- baseInfo.GuildID = (string)input.guildId;
- baseInfo.GuildName = (string)input.guildName;
- baseInfo.ProType = (CommonAI.Data.XmdsUnitPro)input.pro;
- baseInfo.ServerID = (int)input.serverId;
- baseInfo.TitleID = (int)input.titleId;
- baseInfo.UnitLv = (int)input.level;
- baseInfo.VIPLv = (int)input.vip;
- baseInfo.StateLv = (byte)input.upLevel;
- int beReward = (int)input.beReward;
- baseInfo.SPState = (CommonAI.XmdsConstConfig.SpecialState)beReward;
- baseInfo.logicServerId = (int)input.logicServerId;
- baseInfo.sex = (byte)input.sex;
- baseInfo.uuid = input.uuid;
- baseInfo.potionAddition = ((float)input.potionAddition) / 10000;
- return baseInfo;
- }
- public List<XmdsAvatarInfo> createXmdsAvatarInfoList(dynamic input)
- {
- try
- {
- List<XmdsAvatarInfo> prop = new List<XmdsAvatarInfo>();
- foreach (dynamic obj in input)
- {
- XmdsAvatarInfo avatar = new XmdsAvatarInfo();
- avatar.PartTag = (XmdsAvatarInfo.XmdsAvatar)obj.tag;
- avatar.FileName = (string)obj.fileName;
- avatar.EffectType = (byte)obj.effectType;
- prop.Add(avatar);
- }
- return prop;
- }
- catch (Exception err)
- {
- log.Error("createXmdsAvatarInfoList error: " + err.Message, err);
- return null;
- }
- }
- /*注意,该接口为玩家和宠物公用,单方新增字段需加判断,否则会报错(如下:bagRemainCount和teamBagRemainCount字段)*/
- public XmdsUnitProp createXmdsUnitProp(dynamic input, string playerId)
- {
- try
- {
- XmdsUnitProp prop = new XmdsUnitProp();
- //生命
- prop.BaseMaxHP = (input.MaxHP != null) ? (int)input.MaxHP : 0;
- prop.HPPer = (input.HPPer != null) ? (int)input.HPPer : 0;
- prop.HP = (input.HP != null) ? (int)input.HP : prop.BaseMaxHP;
- //攻击
- prop.BaseAttack = (input.Attack != null) ? (int)input.Attack : 0;
- prop.AttackPer = (input.AttackPer != null) ? (int)input.AttackPer : 0;
- //防御
- prop.BaseDefence = (input.Def != null) ? (int)input.Def : 0;
- prop.DefencePer = (input.DefPer != null) ? (int)input.DefPer : 0;
- //无视防御
- prop.BaseIgnoreDefense = (input.IgnoreDefense != null) ? (int)input.IgnoreDefense : 0;
- prop.IgnoreDefensePer = (input.IgnoreDefensePer != null) ? (int)input.IgnoreDefensePer : 0;
- //暴击
- prop.CritRate = (input.CritRate != null) ? (int)input.CritRate : 0;
- prop.BaseResCrit = (input.Rescrit != null) ? (int)input.Rescrit : 0;
- prop.ResCritPer = (input.ResCritPer != null) ? (int)input.ResCritPer : 0;
- prop.ResCritRate = (input.ResCritRate != null) ? (int)input.ResCritRate : 0;
- prop.CritDamage = (input.CritDamage != null) ? (int)input.CritDamage : 0;
- prop.CritDamageRes = (input.CritDamageRes != null) ? (int)input.CritDamageRes : 0;
- //伤害整体
- prop.PlayerDamageAdd = (input.IncAllDamage != null) ? (int)input.IncAllDamage : 0;
- prop.PlayerDamageReduce = (input.AllDamageReduce != null) ? (int)input.AllDamageReduce : 0;
- prop.CtrlTimeReduce = (input.CtrlTimeReduce != null) ? (int)input.CtrlTimeReduce : 0;
- prop.SkillCD = (input.SkillCD != null) ? (int)input.SkillCD : 0;
- prop.HPReborn = (input.HPRegen != null) ? (int)input.HPRegen : 0;
- prop.HPRecoverPer = (input.HPRecoverPer != null) ? (int)input.HPRecoverPer : 0;
- prop.HealEffect = (input.HealEffect != null) ? (int)input.HealEffect : 0;
- prop.HealedEffect = (input.HealedEffect != null) ? (int)input.HealedEffect : 0;
- prop.MoveSpeed = (input.MoveSpeed != null) ? (float)input.MoveSpeed : 0;
- if (prop.MoveSpeed != 0 && (prop.MoveSpeed > 100 || prop.MoveSpeed < 2))
- {
- log.Warn("玩家/宠物移速确定是认真的? : " + prop.MoveSpeed + ", " + playerId);
- }
- prop.VelocityAddition = (input.RunSpeed != null) ? (int)input.RunSpeed : 0;
- prop.CurInventorySize = (input.bagRemainCount != null) ? (int)input.bagRemainCount : 0;
- prop.CurTeamInventorySize = (input.teamBagRemainCount != null) ? (int)input.teamBagRemainCount : 0;
- //2019.7.10新增属性
- prop.SkillDamageAdd = (input.SkillDamage != null) ? (int)input.SkillDamage : 0;
- prop.AttackSpeed = (input.AttackSpeed != null) ? (int)input.AttackSpeed : 0;
- prop.ControlUp = (input.ControlUp != null) ? (int)input.ControlUp : 0;
- //if (prop.AttackSpeed != 0 && (prop.AttackSpeed > 100000 || prop.AttackSpeed < 1000))
- //{
- // log.Warn("玩家/宠物攻速确定是认真的? : " + prop.AttackSpeed);
- // prop.AttackSpeed = 10000;
- //}
- //元素攻击 & 防御
- prop.ArtifactAttack[(int)ArtifactType.Gold] = (input.GoldAttack != null) ? (int)input.GoldAttack : 0;
- prop.ArtifactAttack[(int)ArtifactType.Wood] = (input.WoodAttack != null) ? (int)input.WoodAttack : 0;
- prop.ArtifactAttack[(int)ArtifactType.Water] = (input.WaterAttack != null) ? (int)input.WaterAttack : 0;
- prop.ArtifactAttack[(int)ArtifactType.Fire] = (input.FireAttack != null) ? (int)input.FireAttack : 0;
- prop.ArtifactAttack[(int)ArtifactType.Soil] = (input.SoilAttack != null) ? (int)input.SoilAttack : 0;
- prop.ArtifactDefense[(int)ArtifactType.Gold] = (input.GoldDefense != null) ? (int)input.GoldDefense : 0;
- prop.ArtifactDefense[(int)ArtifactType.Wood] = (input.WoodDefense != null) ? (int)input.WoodDefense : 0;
- prop.ArtifactDefense[(int)ArtifactType.Water] = (input.WaterDefense != null) ? (int)input.WaterDefense : 0;
- prop.ArtifactDefense[(int)ArtifactType.Fire] = (input.FireDefense != null) ? (int)input.FireDefense : 0;
- prop.ArtifactDefense[(int)ArtifactType.Soil] = (input.SoilDefense != null) ? (int)input.SoilDefense : 0;
- //元素克制 & 抵御
- prop.ArtifactRestraint[(int)ArtifactType.Gold] = (input.GoldRestraint != null) ? (int)input.GoldRestraint : 0;
- prop.ArtifactRestraint[(int)ArtifactType.Wood] = (input.WoodRestraint != null) ? (int)input.WoodRestraint : 0;
- prop.ArtifactRestraint[(int)ArtifactType.Water] = (input.WaterRestraint != null) ? (int)input.WaterRestraint : 0;
- prop.ArtifactRestraint[(int)ArtifactType.Fire] = (input.FireRestraint != null) ? (int)input.FireRestraint : 0;
- prop.ArtifactRestraint[(int)ArtifactType.Soil] = (input.SioilRestraint != null) ? (int)input.SoilRestraint : 0;
- prop.ArtifactResist[(int)ArtifactType.Gold] = (input.GoldResist != null) ? (int)input.GoldResist : 0;
- prop.ArtifactResist[(int)ArtifactType.Wood] = (input.WoodResist != null) ? (int)input.WoodResist : 0;
- prop.ArtifactResist[(int)ArtifactType.Water] = (input.WaterResist != null) ? (int)input.WaterResist : 0;
- prop.ArtifactResist[(int)ArtifactType.Fire] = (input.FireResist != null) ? (int)input.FireResist : 0;
- prop.ArtifactResist[(int)ArtifactType.Soil] = (input.SoilResist != null) ? (int)input.SoilResist : 0;
- //元素主属性加成
- prop.ArtifactMainPer = (input.ArtifactMainPer != null) ? input.ArtifactMainPer : 0;
- //boss伤害
- prop.ToBossCritRate = (input.ToBossCritRate != null) ? (int)input.ToBossCritRate : 0;
- prop.ToBossCritDamage = (input.ToBossCritDamage != null) ? (int)input.ToBossCritDamage : 0;
-
- prop.KillValuePer = (input.PvpKillValue != null) ? (int)input.PvpKillValue : 0;
- prop.YaoQiLevel = (input.YaoQiLevel != null) ? (int)input.YaoQiLevel : 0;
- //吸血
- prop.NormalAtkLeech = (input.NormalAtkLeech != null) ? (int)input.NormalAtkLeech : 0;
- prop.ActiveAtkLeech = (input.ActiveAtkLeech != null) ? (int)input.ActiveAtkLeech : 0;
- //怪物增伤
- prop.monsterDamageAdd = (input.FieldBossDamageAdd != null) ? (int)input.FieldBossDamageAdd : 0;
- prop.monsterDamageReduce = (input.DungeonMonsterDamageAdd != null) ? (int)input.DungeonMonsterDamageAdd : 0;
- //人物命格伤害加成
- prop.MonsterRestraint[0] = (input.MonsterRestraint1 != null) ? (int)input.MonsterRestraint1 : 0;
- prop.MonsterRestraint[1] = (input.MonsterRestraint2 != null) ? (int)input.MonsterRestraint2 : 0;
- prop.MonsterRestraint[2] = (input.MonsterRestraint3 != null) ? (int)input.MonsterRestraint3 : 0;
- prop.MonsterRestraint[3] = (input.MonsterRestraint4 != null) ? (int)input.MonsterRestraint4 : 0;
- prop.MonsterRestraint[4] = (input.MonsterRestraint5 != null) ? (int)input.MonsterRestraint5 : 0;
- //宠物天命属性
- prop.fateType = (input.fateType != null) ? (UnitFateType)input.fateType : UnitFateType.None;
- prop.fateValue = (input.fateValue != null) ? (int)input.fateValue : 0;
- //神器,背饰
- //神器属性
- prop.ArtifactIndex = (input.artifactIndex != null) ? input.artifactIndex : (int)ArtifactType.None;
- if (prop.ArtifactIndex < (int)ArtifactType.None || prop.ArtifactIndex > (int)ArtifactType.Fire)
- {
- prop.ArtifactIndex = (int)ArtifactType.None;
- }
- //神器背饰id
- prop.ArtifactDefenceIndex = (input.artifactDefenceIndex != null) ? input.artifactDefenceIndex : (int)ArtifactType.None;
- if (prop.ArtifactDefenceIndex < (int)ArtifactType.None || prop.ArtifactDefenceIndex > (int)ArtifactType.Fire)
- {
- prop.ArtifactDefenceIndex = (int)ArtifactType.None;
- }
- prop.BreakShieldValue = (input.breakShieldValue != null) ? input.breakShieldValue : 0;
- //猎妖属性
- prop.monsterAtk = (input.MonsterAtk != null) ? (int)input.MonsterAtk : 0;
- prop.monsterDef = (input.MonsterDef != null) ? (int)input.MonsterDef : 0;
- prop.monsterAtkPer = (input.MonsterAtkPer != null) ? (int)input.MonsterAtkPer : 0;
- prop.monsterDefPer = (input.MonsterDefPer != null) ? (int)input.MonsterDefPer : 0;
- //卡牌权重属性
- prop.cardWeight[(int)CardType.QingLong] = input.SHCQingLong != null ? (int)input.SHCQingLong : 0;
- prop.cardWeight[(int)CardType.ZhuQue] = input.SHCZhuQue != null ? (int)input.SHCZhuQue : 0;
- prop.cardWeight[(int)CardType.BaiHu] = input.SHCBaiHu != null ? (int)input.SHCBaiHu : 0;
- prop.cardWeight[(int)CardType.XuanWu] = input.SHCXuanWu != null ? (int)input.SHCXuanWu : 0;
- return prop;
- }
- catch (Exception err)
- {
- log.Error("createXmdsUnitProp error: " + err.Message, err);
- return new XmdsUnitProp();
- }
- }
- public UnitSkillData createXmdsUnitSkillInfo(dynamic input)
- {
- try
- {
- UnitSkillData unitSkillData = new UnitSkillData();
- unitSkillData.normalSkill.UnitSkills = new List<GameSkill>();
- unitSkillData.cardSkill.UnitSkills = new List<GameSkill>();
- foreach (dynamic obj in input)
- {
- GameSkill skill = new GameSkill();
- skill.SkillTimestampMS = (long)obj.skillTime;
- skill.SkillID = (int)obj.id;
- skill.SkillLevel = (int)obj.level;
- skill.SkillType = (XmdsSkillType)obj.type;
- if(obj.talentLevel != null)
- {
- skill.TalentSkillLevel1 = (int)obj.talentLevel[0];
- skill.TalentSkillLevel2 = (int)obj.talentLevel[1];
- skill.TalentSkillLevel3 = (int)obj.talentLevel[2];
- }
- if (obj.autoLaunch != null)
- {
- skill.AutoLaunch = (bool)obj.autoLaunch;
- }
-
- if (obj.cdTime != null)
- {
- skill.SkillCDDecreasePercent = (int)obj.cdTime;
- }
- if(skill.SkillType == XmdsSkillType.cardSkill)
- {
- unitSkillData.cardSkill.UnitSkills.Add(skill);
- }
- else
- {
- unitSkillData.normalSkill.UnitSkills.Add(skill);
- }
- }
- return unitSkillData;
- }
- catch (Exception err)
- {
- log.Error("createXmdsUnitSkillInfo error: " + err.Message, err);
- return null;
- }
- }
- }
- }
|