using System; using System.Collections.Generic; using ProtoCSStruct; using Sog; namespace Battle { public class HeroValue2 { public BattleHero hero; public int value; public int value2; } public enum DmgImmuneSpellType { None = 0, //无 AllDmgExceptManual = 1, //免疫大招除外的伤害 } public enum DmgImmuneLimitType { None = 0, //无 DmgGETargetMaxHpRate = 1, //伤害值需大于等于目标血量上限千分比 } public class SpellCriModify { public uint buffObjId; public int spellId; public int criRateAdd; public int condType; public int condParam1; public int condParam2; public override string ToString() { return string.Format("spellid {0} criRateAdd {1} cond {2} param1 {3} param2 {4}", spellId, criRateAdd, condType, condParam1, condParam2); } } //buff免疫 public class DmgImmuneEx { public int count = 0; // 伤害免疫次数 -1表示没有限制 public uint buffObjId = 0; // buffI objId public DmgImmuneSpellType spellType; //技能类型 public DmgImmuneLimitType limitType; //限制类型 public int param; //限制参数 } // 技能相关的扩展数据,正值为增加,负值为减少 public class HeroSpellExt { // 远程技能最大射程 public int addRemoteSpellMaxDist; // 远程技能最大射程千分比 public int addRemoteSpellMaxDistRate; // 对目标加增益buff时,buff持续时间根据下值修正 public int addPositiveBuffTime; // 对目标加减益buff时,buff持续时间根据下值修正 public int addNegativeBuffTime; // 被别人加增益buff时,buff持续时间根据下值修正 public int beAddPositiveBuffTime; // 被别人加减益buff时,buff持续时间根据下值修正 public int beAddNegativeBuffTime; //技能暴击率修正 public List criModifyList = new List(); // 免疫致死一击的次数 public int immuneDeadlyHitCount; public int immuneDeadlyHitBuffId; // 闪电链这类技能, 表现层需要逻辑层多次重复放同1个技能, 策划希望多次技能之间伤害/治疗增加 // 下面字段每次闪电链施放时填写, 施法结束清除 public int lightningChainSpellId; public int lightningChainReviseDmgHealRate; //伤害免疫 public List dmgImmuneExList = new List(); //增伤 //public List IncSpellDmgList = new List(); } public class SpellRuneInfo { //public List spellRuneList = new List(); } public class TDHeroData { public int outCost; public bool outFight; } public class HeroPropChgNode { // 触发该节点生效的buffId public int triggerBuffId; // 该节点当前已经修改的属性值 public long targetPropChgVal; // 剩余时长 public int remainTime; } // 当srcPropId变化时, 如果满足条件cond, 则根据规则rule修改targetPropId, 修改值保存在targetPropChgVal // 每个node可配置一组条件, 规则, 持续时长, 同一个srcPropId可以配置多个node // 例如: 当神射虎受到队友的攻击力加成时, 额外获得50%的攻速加成 public class HeroPropChgData { // 创造当前数据的技能id public int createSpellId; // key 1 // 发生变化的属性id public int srcPropId; // key 2 // 修改条件 public int cond; public int condParam1; public int condParam2; // 修改规则 public int rule; public int ruleParam1; public int ruleParam2; public int targetPropId; // 表现buffId public int showBuffId; // 详细的属性变化信息 public List chgPropList = new List(); } // 禅师熊猫治疗链 public class PandaHealChain { public BattleHero friend; //被治疗方 public BattleHero enemy; //被伤害方 public BattleHero caster; //施法者(熊猫) public int dmgToHealRate; //伤害转治疗比例 public int enemyDieHealFriendRate; //敌方死亡时, 友方回血比例 public int friendDeadlyHitHealRate; //友方受到致死打击时, 回血比例 public int effectBuffId; // 功能buff id public int effectBuffLevel; // 功能buff level public int showBuffId; // 表现连线的buff id public long secHealLimit; //每秒治疗限制 public long curSecStartMs; //当前秒起始帧 public long curSecHealTotal; //当前秒治疗总量 } // 溢出吸血转护盾 public class OverflowStealShield { public int transRate; public int buffId; public long maxSheild; //public BattleBuff srcBuff; //效果源buff //public BattleBuff shieldBuff; //缓存护盾buff } // 溢出治疗转护盾 public class OverflowHealShield { public int transRate; public int buffId; public long maxSheild; //public BattleBuff srcBuff; //效果源buff //public BattleBuff shieldBuff; //缓存护盾buff } // 溢出治疗转护盾 public class AddDebuffRandomNode { public uint buffObjId; //buffId public int rate; //概率 public int addTime; //增加时间 } public class DelayDmgInfo { public uint buffObjId; //buffId public int buffId; //buffDescId public int maxCount; //最大次数 public int rate; //倍率 public List dmgList = new List(); } // 额外buff伤害 public class BuffExtraDamage { public int buffId; //buffId public int targetObjId; //对方objid public long dmg; //额外伤害 public int effectIdx; } public class BattleHero { public BattleObj Battle; public BattleHero(BattleObj battle) { Battle = battle; hurtSeq = 1; isHaveSurvieTime = false; } public int objId; //对象ID public int DescId; public string name; public bool isBoss; // 行动回合 public int actionRound; // 眩晕回合, 在次回合结束前眩晕 public int stunRound; public int pos; public int roundComboNum; // 阵营 A=1,B=2 public BattleSide initSide; //初始阵营,创建英雄的时候就确定了,不会变 public BattleSide fightSide; //作战阵营,逻辑实际处理时候用的阵营,有效果会改变这个。用接口BattleHeroSvc.CheckIsFriend()来判断敌友方 public RaceType race; //种族 public int level; public HeroType heroType; //英雄类型,目前分为:英雄、怪物、召唤物,召唤物属于怪物 public int masterObjId; //主人objId public int posX; public int posZ; public int facing; // 属性 // public HeroProp prop = new HeroProp(); // 开场时属性 public long startPropAtk; //攻击力 public long startPropDef; //防御力 public int buffUpdateTimePass; //成功选择目标id public uint successTestTargetObjId; // 技能相关的扩展数据 public HeroSpellExt spellExt = new HeroSpellExt(); public SpellRuneInfo spellRuneInfo = new SpellRuneInfo(); //不允许直接设置,请调用setdead public bool isDead { get; private set; } // 正在复活 public bool reviving; //记录被伤害值,用来恢复能量 public long hurtAddEnergyTotal; //记录伤害 public long totalHurt; //承受伤害 public long totalDamage; //记录损失血量 public long lostHp; //记录被攻击次数 public int attackedCount; //记录被普攻伤害次数 public int beNormalHurtCount; //记录获取能量 public long getEnergy; //记录免疫掉的伤害 public long totalImmuneDamage; // 技能调整规则 //public ISpellAdjustRuleData spellAdjustRuleData; // 自增序列,战斗中伤害、治疗数据排序,这个排序代表HP的变化顺序 // 用于伤害数字的合并、伤害同时触发治疗时两个技能表现的合并 public int hurtSeq; // 强制攻击目标同时只存在一个,新目标覆盖旧目标 public BattleHero forceAttackTarget; public bool forceAttackOnlyNormalSpell; public uint forceAttackBuffObjId; // 协同攻击目标, 优先级低于forceAttackTarget public BattleHero cooperativePartner; public BattleHero cooperativeAttackTarget; //技能施法 public int spellCastingInstCleanSeq; //public BattleSpellCastingInst spellCastingInst; //public BattleHeroAIData aiData; public bool isHaveSurvieTime; //是否存在生存时间 public int survieTime; //生存时间 // 当前被几条灵魂链链接, 灵魂链接是AB之间双向平分伤害 public int soulChainCount; //// 伤害传递是单向, A->B, 反之则不行, A掉100%血, B掉传递的百分比 //public List dmgTransferList = new List(); //// 伤害分担单向的, A->B A掉(100-X)%血, B掉分担的百分比 //public List dmgBearList = new List(); ////直接掉血量上限参数 //public List loseHpMaxDatas; //更新的逻辑时间,加速减速会影响时间 public long updateLogicTime; public TDHeroData tdHero = new TDHeroData(); public Fixed64Vector3 enterMapStopPos = new Fixed64Vector3(); //玩家英雄放大招,需要停滞其他英雄 public int castSuperSpellFreezeOther; public int castSpellfreezeOtherTimeResumeTime; //public List _manualSpellSelectTarget = new List(); ////这个功能只支持一个,直接保存,提高效率,免得遍历buff //public AbsorbDmgInfo absorbDmgInfo; ////保存,提高效率 //public BattleSpell normalSpell; //public BattleSpell manualActiveSpell; public Vector3IntFloat lastManualPos; //上次手动技能的位置 public uint lastDmgSpellTarget; //上次伤害技能的目标 public uint lastNormalSpellTarget; //上次普攻的目标 ////英雄指定技能冷却缩减 seq--praram //public Dictionary cutSpellCdRateMap = new Dictionary(); //public Dictionary cutSpellCdTimeMap = new Dictionary(); // 最低血量 >0 表示不会被击杀, 低于血量战斗胜利 public long minHpWin; public List heroPropChgList = new List(); //public PropIconData propIconData = new PropIconData(); ////特殊效果本回合触发次数 //public Dictionary effectTriggerThisRound = new Dictionary(); ////特殊效果连续x回合未被触发计数,触发则设置0 //public Dictionary effectUnTriggerRound = new Dictionary(); ////特殊效果触发几率加成 //public Dictionary effectTriggerRateAdd = new Dictionary(); //是否会闪避 public bool hurt_willDodge; public bool hurt_willAtkBack; public long roundHurt = 0;//本回合受到的伤害 public long roundDmg = 0;//本回合造成的伤害 //战斗中的临时参数 public Dictionary param = new Dictionary(); public void SetDead() { if(isDead) { return; } isDead = true; Battle.deadHeros.Add(this); } public void SetRelive() { if (!isDead) { return; } isDead = false; Battle.deadHeros.Remove(this); } //internal bool CanAtkBackAtStun() //{ // return this.GetProp(CSPropIDType.AtkBackAtStun) == 1; //} public int lastAddStunTimeMs; //最后添加眩晕时间 public PandaHealChain pandaHealChain; public bool isLeave = false; //是否离场 离场会消失,且update不会tick public bool noEnergy = false; //禁止回能 //public LeaveBattleData leaveBattleData; public int enterStopTime = 0; //进场需停止时间 //特殊统计 //public Dictionary> statisticsDict = new Dictionary>(); //受击时间 public Dictionary hurtTimeMap = new Dictionary(); //特征,属性id public int featureConfigId; public int propConfigId; //单次受伤最大值 //public List hurtMaxDmgList = new List(); ////单次掉血最大值 //public List lostHpList = new List(); //受到哪些英雄的伤害 public HashSet beHurtHeros = new HashSet(); public bool doDmgToShield; //需要处理伤害转护盾 public bool samePriorityRandSpell = false; //同优先级随机技能 //public Dictionary > buffEventMap; //BuffEffectEvent-List //public Dictionary > removeBuffEventMap; //BuffRemoveEvent-list //战斗数据 public OneFightInfo fightInfo; public int showAtkSpeedModifyRate; public int AtkSpeedModifyRate; //全局攻速修正 public int NormalSpeedModifyRate; //普攻速度修正 public int CastSpeedModifyRate; //施法速度修正 public int NormalSpeed = 1000; //普攻速度,正常是1000 public int CastSpeed = 1000; //施法速度,正常是1000 public long OneFrameAddTime; //public EnterBattleType enterBattleType; public int enterRandomNormalCd; public bool skipEnter = false; //跳过入场阶段 //溢出吸血转护盾 public OverflowStealShield overflowStealShield; //溢出治疗转护盾 public OverflowHealShield overflowHealShield; //条件免疫伤害 //public List conditionImmuneDmgNodes = new List(); /// /// 延迟伤害 /// public DelayDmgInfo delayDmgInfo = new DelayDmgInfo(); public int lastAtkTarget = 0; //攻击目标修改,从最后切换的目标数目 public class Buff { public int buffid; // buffId public int level; // buff等级 public int effectCount; //层数 public int effectRound; //生效回合 public int triggerParam; public int endTriggerParam; public int addRound = 0; public int casterId; // 施法者Id, 有的效果需要用到施法者属性 但是生效时已经和施法者失去联系 public bool needRemove = false; //是否要移除 //public SkillDesc.Effect effect; //具体效果 public int effectIdx = 0; public int targetId = 0; public Dictionary param = new Dictionary(); //public override string ToString() //{ // return "[buffid="+buffid+",level="+level+ ",effectCount="+effectCount+ ",effectRound="+ effectRound+ ",addRound="+ addRound + // ",triggerParam = " + triggerParam + ",endParam="+endTriggerParam+ ",effectIdx=" +effectIdx+ // ",casterId="+casterId+",effectType="+effect.type+", param="+ param.Count+"]"; //} } public List buffs = new List(); // todo buff添加的属性备份 buff加的属性太杂要移除的时候用 public List buffProp = new List(); // 临时存储额外伤害,最后和普攻伤害汇总伤害下发 public List buffExtraDmgList = new List(); } }