using CommonAI.data; using CommonAI.Data; using CommonAI.Zone; using CommonAI.Zone.Instance; using CommonLang.IO; using CommonLang.IO.Attribute; using System; using System.Collections.Generic; using System.Linq; using System.Text; using XmdsCommon.Plugin; namespace XmdsCommon.Message { /// /// 战斗状态改变事件. /// [MessageType(0x9001001)] public class CombatStateChangeEvent : ObjectEvent { private BattleStatus mCurState = BattleStatus.None; public BattleStatus CurState { get { return mCurState; } } public CombatStateChangeEvent() { } public CombatStateChangeEvent(uint unit_id, BattleStatus state) : base(unit_id) { mCurState = state; } public override void WriteExternal(IOutputStream output) { base.WriteExternal(output); output.PutEnum8(mCurState); } public override void ReadExternal(IInputStream input) { base.ReadExternal(input); mCurState = input.GetEnum8(); } } /// /// 跳战斗数字. /// [MessageType(0xF000010)] public class BattleHintNumberB2C : PlayerEvent { public uint TargetObjID; public int Value; public byte State; public BattleHintNumberB2C() { } public BattleHintNumberB2C(uint objId, int hp, byte state) { TargetObjID = objId; Value = hp; State = state; } override public void WriteExternal(IOutputStream output) { base.WriteExternal(output); output.PutU32(TargetObjID); output.PutS32(Value); output.PutU8(State); } override public void ReadExternal(IInputStream input) { base.ReadExternal(input); TargetObjID = input.GetU32(); Value = input.GetS32(); State = input.GetU8(); } } /// /// 玩家外观变更消息 /// [MessageType(0xF000001)] public class PlayAvatarEventB2C : ObjectEvent { public List AvatarList = null; public PlayAvatarEventB2C() { } public PlayAvatarEventB2C(List avatar) { AvatarList = avatar; } public PlayAvatarEventB2C(uint unit_id, List avatar) : base(unit_id) { AvatarList = avatar; } override public void WriteExternal(IOutputStream output) { base.WriteExternal(output); output.PutList(AvatarList, output.PutExt); } override public void ReadExternal(IInputStream input) { base.ReadExternal(input); AvatarList = input.GetList(input.GetExt); } } /// /// 能够同步给给客户端的数据. /// [MessageType(0xF000008)] public class PlayerVisibleDataB2C : IExternalizable, CommonAI.ZoneClient.IUnitVisibleData { /// /// 单位基础信息. /// public XmdsUnitBaseInfo BaseInfo = new XmdsUnitBaseInfo(); /// ///装备时装信息. /// public List AvatarList = new List(); /// /// 单位PK相关数据. /// public PKInfo UnitPKInfo = null; /// ///动态场景相关信息. /// public SceneInfo UnitSceneInfo = null; public void WriteExternal(IOutputStream output) { output.PutExt(this.BaseInfo); output.PutList(this.AvatarList, output.PutExt); output.PutExt(this.UnitPKInfo); output.PutExt(this.UnitSceneInfo); } public void ReadExternal(IInputStream input) { this.BaseInfo = input.GetExt(); this.AvatarList = input.GetList(input.GetExt); this.UnitPKInfo = input.GetExt(); this.UnitSceneInfo = input.GetExt(); } public void setVisibleName(String name) { } public void setVisibleCardData(ICardData datas) { } } [MessageType(0xF000023)] public class PlayerGotItemB2C : PlayerEvent { public string IconName;//tcCode public int Qty;//数量. public int Quality;//品质. public object Clone() { PlayerGotItemB2C ret = new PlayerGotItemB2C(); ret.IconName = IconName; ret.Qty = Qty; ret.Quality = Quality; return ret; } override public void WriteExternal(IOutputStream output) { base.WriteExternal(output); output.PutUTF(IconName); output.PutS32(Qty); output.PutS32(Quality); } override public void ReadExternal(IInputStream input) { base.ReadExternal(input); IconName = input.GetUTF(); Qty = input.GetS32(); Quality = input.GetS32(); } } [MessageType(0xF000006)] public class DropItem : ICloneable, IExternalizable { public string ObjID; public string Name; public string FileName;// public int Qty;//数量. public int TTL;//存在时间. public int Quality;//品质. public int TemplateID;//模板ID public int FreezeTime;//不可捡时间时间. public int ProtectTime;//保护时间. public List PlayerUUID;//哪个玩家掉的. public string IconName;//图标. public byte Mode;//拾取模式. public float OriginX;//初始坐标X. public float OriginY;//初始坐标Y. public int createTime; //创建时间 public String code; //道具code //道具绑定玩家id,只有该玩家可见,可拾取 public string bindPlayerId; public object Clone() { DropItem ret = new DropItem(); ret.ObjID = ObjID; ret.Name = Name; ret.FileName = FileName; ret.Qty = Qty; ret.TTL = TTL; ret.Quality = Quality; ret.TemplateID = TemplateID; ret.FreezeTime = FreezeTime; ret.ProtectTime = ProtectTime; ret.PlayerUUID = PlayerUUID; ret.IconName = IconName; ret.Mode = Mode; ret.OriginX = OriginX; ret.OriginY = OriginY; ret.code = this.code; ret.bindPlayerId = this.bindPlayerId; ret.createTime = this.createTime; return ret; } public void WriteExternal(IOutputStream output) { output.PutUTF(ObjID); output.PutUTF(Name); output.PutUTF(FileName); output.PutS32(Qty); output.PutS32(TTL); output.PutS32(Quality); output.PutS32(TemplateID); output.PutS32(FreezeTime); output.PutS32(ProtectTime); output.PutList(PlayerUUID, output.PutUTF); output.PutUTF(IconName); output.PutU8(Mode); output.PutF32(OriginX); output.PutF32(OriginY); output.PutUTF(this.code); output.PutS32(this.createTime); } public void ReadExternal(IInputStream input) { ObjID = input.GetUTF(); Name = input.GetUTF(); FileName = input.GetUTF(); Qty = input.GetS32(); TTL = input.GetS32(); Quality = input.GetS32(); TemplateID = input.GetS32(); FreezeTime = input.GetS32(); ProtectTime = input.GetS32(); PlayerUUID = input.GetUTFList(); IconName = input.GetUTF(); Mode = input.GetU8(); OriginX = input.GetF32(); OriginY = input.GetF32(); this.code = input.GetUTF(); this.createTime = input.GetS32(); } } [MessageType(0xF000011)] public class ScriptAddUnitEventsB2C : ZoneEvent { public uint ObjectID; public int TemplateID; public float X; public float Y; public ScriptAddUnitEventsB2C() { } public ScriptAddUnitEventsB2C(InstanceUnit unit) { this.ObjectID = unit.ID; this.TemplateID = unit.Info.ID; this.X = unit.X; this.Y = unit.Y; } public override void WriteExternal(IOutputStream output) { output.PutU32(this.ObjectID); output.PutS32(this.TemplateID); output.PutF32(this.X); output.PutF32(this.Y); } public override void ReadExternal(IInputStream input) { this.ObjectID = input.GetU32(); this.TemplateID = input.GetS32(); this.X = input.GetF32(); this.Y = input.GetF32(); } } [MessageType(0xF000012)] public class ScriptRemoveUnitEventsB2C : ZoneEvent { public uint ObjectID; public int TemplateID; public ScriptRemoveUnitEventsB2C() { } public ScriptRemoveUnitEventsB2C(InstanceUnit unit) { this.ObjectID = unit.ID; this.TemplateID = unit.Info.ID; } public override void WriteExternal(IOutputStream output) { output.PutU32(this.ObjectID); output.PutS32(this.TemplateID); } public override void ReadExternal(IInputStream input) { this.ObjectID = input.GetU32(); this.TemplateID = input.GetS32(); } } /// /// 基础数据更新主要是等级和VIP消息 /// [MessageType(0xF000002)] public class XmdsUnitBaseInfoEventB2C : ObjectEvent { public XmdsUnitBaseInfo Props = null; public XmdsUnitBaseInfoEventB2C() { } public XmdsUnitBaseInfoEventB2C(XmdsUnitBaseInfo props) { Props = props; } public XmdsUnitBaseInfoEventB2C(uint unit_id, XmdsUnitBaseInfo props) : base(unit_id) { Props = props; } override public void WriteExternal(IOutputStream output) { base.WriteExternal(output); output.PutExt(Props); } override public void ReadExternal(IInputStream input) { base.ReadExternal(input); Props = input.GetExt(); } } /// /// 属性更新的消息 /// [MessageType(0xF000003)] public class XmdsUnitPropEventB2C : PlayerEvent { public XmdsUnitProp Props = null; public XmdsUnitPropEventB2C() { } public XmdsUnitPropEventB2C(XmdsUnitProp props) { Props = props; } public XmdsUnitPropEventB2C(uint unit_id, XmdsUnitProp props) : base(unit_id) { Props = props; } override public void WriteExternal(IOutputStream output) { base.WriteExternal(output); output.PutExt(Props); } override public void ReadExternal(IInputStream input) { base.ReadExternal(input); Props = input.GetExt(); } } /// /// 战斗服提示信息. /// [MessageType(0xF000014)] public class ShowTipsEventB2C : PlayerEvent { public string Msg = null; public override void WriteExternal(IOutputStream output) { base.WriteExternal(output); output.PutUTF(Msg); } public override void ReadExternal(IInputStream input) { base.ReadExternal(input); Msg = input.GetUTF(); } } /// /// 怪物扩展数据. /// [MessageType(0xF000015)] public class MonsterVisibleDataB2C : IExternalizable, CommonAI.ZoneClient.IUnitVisibleData { /// /// 怪物类型:0:普通怪,1:稀有怪,2:首脑怪,3:精英怪,4:BOSS. /// public enum MonsterType : byte { MType0 = 0, MType1 = 1, MType2 = 2, MType3 = 3, //精英 MType4 = 4, //boss MType5 = 5, MType6 = 6, } /// /// 怪物名字颜色:0:白色,默认颜色1:绿色,优秀2: 蓝色,精良3: 紫色,史诗4: 橙色,传说5: 红色,顶级.6:澄绿色 /// public enum MonsterQcolor : byte { Q0 = 0, Q1 = 1, Q2 = 2, Q3 = 3, Q4 = 4, Q5 = 5, Q6 = 6, } /// /// 单位种族. /// public enum MonsterAtype : byte { Human = 0, Monster = 1, UnDead = 2, Evil = 3, Other = 9, } /// /// 攻击类型. /// public enum MonsterAttackType : byte { Passive = 0,//被动攻击. Active = 1,//主动攻击. } /// /// 归属者信息. /// [MessageType(0xF000030)] public class HeirInfo : IExternalizable { public string Name; public int hpPercent; public CommonAI.Data.XmdsUnitPro ProType; public void ReadExternal(IInputStream input) { Name = input.GetUTF(); hpPercent = input.GetS32(); ProType = input.GetEnum8(); } public void WriteExternal(IOutputStream output) { output.PutUTF(Name); output.PutS32(hpPercent); output.PutEnum8(ProType); } } public int MonsterID; public string DisplayName; public string Title; public MonsterAtype Atype; public MonsterQcolor Qcolor; public MonsterType MType; public MonsterAttackType AttackType; public string SenceType = null; public HeirInfo UnitHeirInfo = null; //血条层数 public byte hpPlies = 1; //卡牌数据 private ICardData cardInterface; public CardType[] cardData; //0-3代表有 public void setVisibleName(String name) { if(name != null && name.Length > 0) { this.DisplayName = name; } } public void setVisibleCardData(ICardData datas) { this.cardInterface = datas; } public void WriteExternal(IOutputStream output) { output.PutS32(MonsterID); output.PutUTF(DisplayName); output.PutEnum8(Atype); output.PutEnum8(Qcolor); output.PutEnum8(MType); output.PutEnum8(AttackType); output.PutUTF(SenceType); output.PutUTF(Title); output.PutExt(UnitHeirInfo); output.PutU8(hpPlies); if (this.MType >= MonsterType.MType4) { for (int i = 0; i < (int)CardType.Max; i++) { CardType testType = cardInterface == null ? CardType.Max : cardInterface.GetCardData(i); output.PutEnum8(cardInterface == null ? CardType.Max : cardInterface.GetCardData(i)); //System.Console.WriteLine("boss数据:" + testType); } } } public void ReadExternal(IInputStream input) { MonsterID = input.GetS32(); DisplayName = input.GetUTF(); Atype = input.GetEnum8(); Qcolor = input.GetEnum8(); MType = input.GetEnum8(); AttackType = input.GetEnum8(); SenceType = input.GetUTF(); Title = input.GetUTF(); UnitHeirInfo = input.GetExt(); hpPlies = input.GetU8(); if (this.MType >= MonsterType.MType4) { cardData = new CardType[(int)CardType.Max]; for (int i = 0; i < (int)CardType.Max; i++) { cardData[i] = input.GetEnum8(); //System.Console.WriteLine("boss数据:" + cardData[i]); } } } } /// /// 单位PK模式改变通知. /// [MessageType(0xF000016)] public class PlayerPKModeChangeEventB2C : PlayerEvent { public PKMode CurMode = PKMode.Peace; public override void WriteExternal(IOutputStream output) { base.WriteExternal(output); output.PutEnum8(CurMode); } public override void ReadExternal(IInputStream input) { base.ReadExternal(input); CurMode = input.GetEnum8(); } } /// /// 单位PK等级改变通知. /// [MessageType(0xF000019)] public class PlayerPKLvChangeEventB2C : ObjectEvent { public PKLevel CurLv = PKLevel.White; public override void WriteExternal(IOutputStream output) { base.WriteExternal(output); output.PutEnum8(CurLv); } public override void ReadExternal(IInputStream input) { base.ReadExternal(input); CurLv = input.GetEnum8(); } } /// /// PK值变更通知. /// [MessageType(0xF00001E)] public class PlayerPKValueChangeEventB2C : PlayerEvent { /// /// 当前PK值. /// public int CurPKValue; public override void WriteExternal(IOutputStream output) { base.WriteExternal(output); output.PutS32(CurPKValue); } public override void ReadExternal(IInputStream input) { base.ReadExternal(input); CurPKValue = input.GetS32(); } } /// /// 召唤物客户端同步信息. /// [MessageType(0xF00001A)] public class SummonUnitVisibleDataB2C : IExternalizable, CommonAI.ZoneClient.IUnitVisibleData { /// /// 宿主ID. /// public uint MasterObjID = 0; //召唤物模型信息。如果不为空,则替换之前获取模型的逻辑 public List AvatarList = null; public void ReadExternal(IInputStream input) { this.MasterObjID = input.GetU32(); this.AvatarList = input.GetList(input.GetExt); } public void WriteExternal(IOutputStream output) { output.PutU32(MasterObjID); output.PutList(this.AvatarList, output.PutExt); } public void setVisibleName(String name) {} public void setVisibleCardData(ICardData datas) { } } /// /// 同步队友信息. /// [MessageType(0xF00001C)] public class PlayerTeamIntoEventB2C : PlayerEvent { public List Members; public override void WriteExternal(IOutputStream output) { base.WriteExternal(output); output.PutList(Members, output.PutUTF); } public override void ReadExternal(IInputStream input) { base.ReadExternal(input); Members = input.GetUTFList(); } } /// /// 单位战斗属性同步. /// [MessageType(0xF00001D)] public class PlayerBattlePropChangeEventB2C : UnitAttrMaskType { public ulong Mask = 0; //最大血量. public int MaxHP = 100; //移动速度(最终值) public float MoveSpeed = 7; //移动速度加成 public int MoveSpeedAddition = 0; //血量恢复值. public int HPReborn = 10; //同步Attribute //生命增加百分比 public int HPPer = 0; //攻击 public int Attack = 0; //攻击增加百分比 public int AttackPer = 0; //防御 public int Def = 0; //防御增加百分比 public int DefPer = 0; //穿透增加百分比 public int IgnoreDefensePer = 0; //暴击率 public int CritRate = 0; //抗暴率 public int ResCritRate = 0; //暴击伤害叠加百分比 public int CritDamage = 0; //伤害增加百分比(玩家之间) public int IncAllDamage = 0; //伤害减免百分比(玩家之间) public int AllDamageReduce = 0; //韧性 public int CtrlTimeReduce = 0; //冷却缩减 public int SkillCD = 0; //治疗效果 public int HealEffect = 0; //被治疗效果 public int HealedEffect = 0; //技能加成 public int SkillDamage = 0; //攻击速度 public int AttackSpeed = 0; //控制增幅 public int ControlUp = 0; //金属性攻击 public int GoldAttack = 0; //金属性防御 public int GoldDefense = 0; //木属性攻击 public int WoodAttack = 0; //木属性防御 public int WoodDefense = 0; //水属性攻击 public int WaterAttack = 0; //水属性防御 public int WaterDefense = 0; //火属性攻击 public int FireAttack = 0; //火属性防御 public int FireDefense = 0; //土属性攻击 public int SoilAttack = 0; //土属性防御 public int SoilDefense = 0; //对Boss额外暴击率 public int ToBossCritRate = 0; //对Boss额外暴击伤害 public int ToBossCritDamage = 0; //金克制 public int GoldRestraint = 0; //木克制 public int WoodRestraint = 0; //水克制 public int WaterRestraint = 0; //火克制 public int FireRestraint = 0; //土克制 public int SoilRestraint = 0; //金抵御 public int GoldResist = 0; //木抵御 public int WoodResist = 0; //水抵御 public int WaterResist = 0; //火抵御 public int FireResist = 0; //土抵御 public int SoilResist = 0; //杀意值 public int PvpKillValue = 0; //妖气等级 public int YaoQiLevel = 0; //普攻吸血 public int NormalAtkLeech = 0; //技能吸血 public int ActiveAtkLeech = 0; //神器主属性伤害加成 public int ArtifactMainPer = 0; //最大生命值(ext, 暂时仅角色面板显示) public int MaxHPExt = 0; /// 野外boss伤害增益 public int FieldBossDamageAdd; /// 副本小怪伤害增益 public int DungeonMonsterDamageAdd; //妖兽破定效率 public int breakShieldValue; public int[] MonsterRestraint = new int[(int)UnitFateType.Five]; //猎妖属性 public int monsterAtk; // 猎妖攻 public int monsterDef; // 猎妖防 public int monsterAtkPer; // 猎妖攻百分比 public int monsterDefPer; // 猎妖防百分比 public override void WriteExternal(IOutputStream output) { base.WriteExternal(output); output.PutU64(Mask); if (Mask == 0) { return; } if ((Mask & MASK_MAX_HP) != 0) output.PutS32(MaxHP); if ((Mask & MASK_MOVE_SPEED) != 0) output.PutF32(MoveSpeed); if ((Mask & MASK_HP_REBORN) != 0) output.PutS32(HPReborn); //同步Attribute if ((Mask & MASK_HP_PER) != 0) output.PutS32(HPPer); if ((Mask & MASK_ATTACK) != 0) output.PutS32(Attack); if ((Mask & MASK_ATTACK_PER) != 0) output.PutS32(AttackPer); if ((Mask & MASK_DEF) != 0) output.PutS32(Def); if ((Mask & MASK_DEF_PER) != 0) output.PutS32(DefPer); if ((Mask & MASK_IGNORE_DEFENSE_PER) != 0) output.PutS32(IgnoreDefensePer); if ((Mask & MASK_CRIT_RATE) != 0) output.PutS32(CritRate); if ((Mask & MASK_CRIT_DAMAGE) != 0) output.PutS32(CritDamage); if ((Mask & MASK_INCALLDAMAGE) != 0) output.PutS32(IncAllDamage); if ((Mask & MASK_ALL_DAMAGE_REDUCE) != 0) output.PutS32(AllDamageReduce); if ((Mask & MASK_CTRLTIME_REDUCE) != 0) output.PutS32(CtrlTimeReduce); if ((Mask & MASK_SKILL_CD) != 0) output.PutS32(SkillCD); if ((Mask & MASK_HEALEFFECT) != 0) output.PutS32(HealEffect); if ((Mask & MASK_HEALEDEFFECT) != 0) output.PutS32(HealedEffect); if ((Mask & MASK_SKILLDAMAGE) != 0) output.PutS32(SkillDamage); if ((Mask & MASK_ATTACK_SPEED) != 0) output.PutS32(AttackSpeed); if ((Mask & MASK_CONTROL_UP) != 0) output.PutS32(ControlUp); if ((Mask & MASK_RES_CRIT_RATE) != 0) output.PutS32(this.ResCritRate); if ((Mask & MASK_GOLD_ATTACK) != 0) output.PutS32(GoldAttack); if ((Mask & MASK_GOLD_DEFENSE) != 0) output.PutS32(GoldDefense); if ((Mask & MASK_WOOD_ATTACK) != 0) output.PutS32(WoodAttack); if ((Mask & MASK_WOOD_DEFENSE) != 0) output.PutS32(WoodDefense); if ((Mask & MASK_WATER_ATTACK) != 0) output.PutS32(WaterAttack); if ((Mask & MASK_WATER_DEFENSE) != 0) output.PutS32(WaterDefense); if ((Mask & MASK_FIRE_ATTACK) != 0) output.PutS32(FireAttack); if ((Mask & MASK_FIRE_DEFENSE) != 0) output.PutS32(FireDefense); if ((Mask & MASK_SOIL_ATTACK) != 0) output.PutS32(SoilAttack); if ((Mask & MASK_SOIL_DEFENSE) != 0) output.PutS32(SoilDefense); if ((Mask & MASK_TOBOSS_CRIT_RATE) != 0) output.PutS32(ToBossCritRate); if ((Mask & MASK_TOBOSS_CRIT_DAMAGE) != 0) output.PutS32(ToBossCritDamage); if ((Mask & MASK_GOLD_RESTRAINT) != 0) output.PutS32(GoldRestraint); if ((Mask & MASK_WOOD_RESTRAINT) != 0) output.PutS32(WoodRestraint); if ((Mask & MASK_WATER_RESTRAINT) != 0) output.PutS32(WaterRestraint); if ((Mask & MASK_FIRE_RESTRAINT) != 0) output.PutS32(FireRestraint); if ((Mask & MASK_SOIL_RESTRAINT) != 0) output.PutS32(SoilRestraint); if ((Mask & MASK_GOLD_RESIST) != 0) output.PutS32(GoldResist); if ((Mask & MASK_WOOD_RESIST) != 0) output.PutS32(WoodResist); if ((Mask & MASK_WATER_RESIST) != 0) output.PutS32(WaterResist); if ((Mask & MASK_FIRE_RESIST) != 0) output.PutS32(FireResist); if ((Mask & MASK_SOIL_RESIST) != 0) output.PutS32(SoilResist); if ((Mask & MASK_PVP_KILLVALUE) != 0) output.PutS32(PvpKillValue); if ((Mask & MASK_YAOQI_LEVEL) != 0) output.PutS32(YaoQiLevel); if ((Mask & MASK_NORMAL_ATK_LEECH) != 0) output.PutS32(NormalAtkLeech); if ((Mask & MASK_ACTIVE_ATK_LEECH) != 0) output.PutS32(ActiveAtkLeech); if ((Mask & MASK_ARTIFACTMAIN_PER) != 0) output.PutS32(ArtifactMainPer); if ((Mask & MASK_FIELD_BOSS_DAMAGEADD) != 0) output.PutS32(FieldBossDamageAdd); if ((Mask & MASK_MAX_HP_EXT) != 0) output.PutS32(this.MaxHPExt); if ((Mask & MASK_DUNGEON_MONETER_DAMAGEADD) != 0) output.PutS32(DungeonMonsterDamageAdd); if ((Mask & MASK_MOVE_SPEED_ADDITION) != 0) output.PutS32(this.MoveSpeedAddition); //新增属性 if ((Mask & MASK_MONSTER_RESTRAINT_1) != 0) output.PutS32(this.MonsterRestraint[0]); if ((Mask & MASK_MONSTER_RESTRAINT_2) != 0) output.PutS32(this.MonsterRestraint[1]); if ((Mask & MASK_MONSTER_RESTRAINT_3) != 0) output.PutS32(this.MonsterRestraint[2]); if ((Mask & MASK_MONSTER_RESTRAINT_4) != 0) output.PutS32(this.MonsterRestraint[3]); if ((Mask & MASK_MONSTER_RESTRAINT_5) != 0) output.PutS32(this.MonsterRestraint[4]); if ((Mask & MASK_MONSTER_ATK) != 0) output.PutS32(this.monsterAtk); if ((Mask & MASK_MONSTER_DEF) != 0) output.PutS32(this.monsterDef); if ((Mask & MASK_MONSTER_ATK_PER) != 0) output.PutS32(this.monsterAtkPer); if ((Mask & MASK_MONSTER_DEF_PER) != 0) output.PutS32(this.monsterDefPer); } public override void ReadExternal(IInputStream input) { base.ReadExternal(input); Mask = input.GetU64(); if (Mask == 0) { return; } if ((Mask & MASK_MAX_HP) != 0) this.MaxHP = input.GetS32(); if ((Mask & MASK_MOVE_SPEED) != 0) this.MoveSpeed = input.GetF32(); if ((Mask & MASK_HP_REBORN) != 0) this.HPReborn = input.GetS32(); //同步Attribute if ((Mask & MASK_HP_PER) != 0) this.HPPer = input.GetS32(); if ((Mask & MASK_ATTACK) != 0) this.Attack = input.GetS32(); if ((Mask & MASK_ATTACK_PER) != 0) this.AttackPer = input.GetS32(); if ((Mask & MASK_DEF) != 0) this.Def = input.GetS32(); if ((Mask & MASK_DEF_PER) != 0) this.DefPer = input.GetS32(); if ((Mask & MASK_IGNORE_DEFENSE_PER) != 0) this.IgnoreDefensePer = input.GetS32(); if ((Mask & MASK_CRIT_RATE) != 0) this.CritRate = input.GetS32(); if ((Mask & MASK_CRIT_DAMAGE) != 0) this.CritDamage = input.GetS32(); if ((Mask & MASK_INCALLDAMAGE) != 0) this.IncAllDamage = input.GetS32(); if ((Mask & MASK_ALL_DAMAGE_REDUCE) != 0) this.AllDamageReduce = input.GetS32(); if ((Mask & MASK_CTRLTIME_REDUCE) != 0) this.CtrlTimeReduce = input.GetS32(); if ((Mask & MASK_SKILL_CD) != 0) this.SkillCD = input.GetS32(); if ((Mask & MASK_HEALEFFECT) != 0) this.HealEffect = input.GetS32(); if ((Mask & MASK_HEALEDEFFECT) != 0) this.HealedEffect = input.GetS32(); if ((Mask & MASK_SKILLDAMAGE) != 0) this.SkillDamage = input.GetS32(); if ((Mask & MASK_ATTACK_SPEED) != 0) this.AttackSpeed = input.GetS32(); if ((Mask & MASK_CONTROL_UP) != 0) this.ControlUp = input.GetS32(); if ((Mask & MASK_RES_CRIT_RATE) != 0) this.ResCritRate = input.GetS32(); if ((Mask & MASK_GOLD_ATTACK) != 0) this.GoldAttack = input.GetS32(); if ((Mask & MASK_GOLD_DEFENSE) != 0) this.GoldDefense = input.GetS32(); if ((Mask & MASK_WOOD_ATTACK) != 0) this.WoodAttack = input.GetS32(); if ((Mask & MASK_WOOD_DEFENSE) != 0) this.WoodDefense = input.GetS32(); if ((Mask & MASK_WATER_ATTACK) != 0) this.WaterAttack = input.GetS32(); if ((Mask & MASK_WATER_DEFENSE) != 0) this.WaterDefense = input.GetS32(); if ((Mask & MASK_FIRE_ATTACK) != 0) this.FireAttack = input.GetS32(); if ((Mask & MASK_FIRE_DEFENSE) != 0) this.FireDefense = input.GetS32(); if ((Mask & MASK_SOIL_ATTACK) != 0) this.SoilAttack = input.GetS32(); if ((Mask & MASK_SOIL_DEFENSE) != 0) this.SoilDefense = input.GetS32(); if ((Mask & MASK_TOBOSS_CRIT_RATE) != 0) this.ToBossCritRate = input.GetS32(); if ((Mask & MASK_TOBOSS_CRIT_DAMAGE) != 0) this.ToBossCritDamage = input.GetS32(); if ((Mask & MASK_GOLD_RESTRAINT) != 0) this.GoldRestraint = input.GetS32(); if ((Mask & MASK_WOOD_RESTRAINT) != 0) this.WoodRestraint = input.GetS32(); if ((Mask & MASK_WATER_RESTRAINT) != 0) this.WaterRestraint = input.GetS32(); if ((Mask & MASK_FIRE_RESTRAINT) != 0) this.FireRestraint = input.GetS32(); if ((Mask & MASK_SOIL_RESTRAINT) != 0) this.SoilRestraint = input.GetS32(); if ((Mask & MASK_GOLD_RESIST) != 0) this.GoldResist = input.GetS32(); if ((Mask & MASK_WOOD_RESIST) != 0) this.WoodResist = input.GetS32(); if ((Mask & MASK_WATER_RESIST) != 0) this.WaterResist = input.GetS32(); if ((Mask & MASK_FIRE_RESIST) != 0) this.FireResist = input.GetS32(); if ((Mask & MASK_SOIL_RESIST) != 0) this.SoilResist = input.GetS32(); if ((Mask & MASK_PVP_KILLVALUE) != 0) this.PvpKillValue = input.GetS32(); if ((Mask & MASK_YAOQI_LEVEL) != 0) this.YaoQiLevel = input.GetS32(); if ((Mask & MASK_NORMAL_ATK_LEECH) != 0) this.NormalAtkLeech = input.GetS32(); if ((Mask & MASK_ACTIVE_ATK_LEECH) != 0) this.ActiveAtkLeech = input.GetS32(); if ((Mask & MASK_ARTIFACTMAIN_PER) != 0) this.ArtifactMainPer = input.GetS32(); if ((Mask & MASK_FIELD_BOSS_DAMAGEADD) != 0) this.FieldBossDamageAdd = input.GetS32(); if ((Mask & MASK_MAX_HP_EXT) != 0) this.MaxHPExt = input.GetS32(); if ((Mask & MASK_DUNGEON_MONETER_DAMAGEADD) != 0) this.DungeonMonsterDamageAdd = input.GetS32(); if ((Mask & MASK_MOVE_SPEED_ADDITION) != 0) this.MoveSpeedAddition = input.GetS32(); //新增属性 if ((Mask & MASK_MONSTER_RESTRAINT_1) != 0) this.MonsterRestraint[0] = input.GetS32(); if ((Mask & MASK_MONSTER_RESTRAINT_2) != 0) this.MonsterRestraint[1] = input.GetS32(); if ((Mask & MASK_MONSTER_RESTRAINT_3) != 0) this.MonsterRestraint[2] = input.GetS32(); if ((Mask & MASK_MONSTER_RESTRAINT_4) != 0) this.MonsterRestraint[3] = input.GetS32(); if ((Mask & MASK_MONSTER_RESTRAINT_5) != 0) this.MonsterRestraint[4] = input.GetS32(); if ((Mask & MASK_MONSTER_ATK) != 0) this.monsterAtk = input.GetS32(); if ((Mask & MASK_MONSTER_DEF) != 0) this.monsterDef = input.GetS32(); if ((Mask & MASK_MONSTER_ATK_PER) != 0) this.monsterAtkPer = input.GetS32(); if ((Mask & MASK_MONSTER_DEF_PER) != 0) this.monsterDefPer = input.GetS32(); } } /// /// NPC治愈协议. /// [MessageType(0xF00001F)] public class NPCCureEventB2C : PlayerEvent { public override void WriteExternal(IOutputStream output) { base.WriteExternal(output); } public override void ReadExternal(IInputStream input) { base.ReadExternal(input); } } /// /// Buff触发技能变更. /// [MessageType(0xF000020)] public class BuffActiveSkillEventB2C : PlayerEvent { public bool IsWorking; public int BuffID; public int ActiveSkillID; public int FreezeSkillID; public override void WriteExternal(IOutputStream output) { base.WriteExternal(output); output.PutBool(IsWorking); output.PutS32(BuffID); output.PutS32(ActiveSkillID); output.PutS32(FreezeSkillID); } public override void ReadExternal(IInputStream input) { base.ReadExternal(input); IsWorking = input.GetBool(); BuffID = input.GetS32(); ActiveSkillID = input.GetS32(); FreezeSkillID = input.GetS32(); } } /// /// Buff触发技能变更. /// [MessageType(0xF000022)] public class BattleFloatTipsEventB2C : PlayerEvent { public CommonAI.XmdsConstConfig.BattleFloatTipsType Type; public override void WriteExternal(IOutputStream output) { base.WriteExternal(output); output.PutEnum8(Type); } public override void ReadExternal(IInputStream input) { base.ReadExternal(input); Type = input.GetEnum8(); } } /// /// 宠物同步客户端数据. /// [MessageType(0xF000024)] public class PetVisibleDataB2C : IExternalizable, CommonAI.ZoneClient.IUnitVisibleData { /// /// 单位基础信息. /// public PetBaseInfo BaseInfo = new PetBaseInfo(); public void WriteExternal(IOutputStream output) { output.PutExt(this.BaseInfo); } public void ReadExternal(IInputStream input) { this.BaseInfo = input.GetExt(); } public void setVisibleName(String name) { } public void setVisibleCardData(ICardData datas) { } } /// /// 宠物基础信息变更事件. /// [MessageType(0xF000025)] public class PetBaseInfoChangeEventB2C : ObjectEvent { public PetBaseInfo BaseInfo; override public void WriteExternal(IOutputStream output) { base.WriteExternal(output); output.PutExt(BaseInfo); } override public void ReadExternal(IInputStream input) { base.ReadExternal(input); BaseInfo = input.GetExt(); } } /// /// 单位遗言变更协议. /// [MessageType(0xF000026)] public class TestamentChangeEventB2C : ObjectEvent { public byte TestamentID; override public void WriteExternal(IOutputStream output) { base.WriteExternal(output); output.PutU8(TestamentID); } override public void ReadExternal(IInputStream input) { base.ReadExternal(input); TestamentID = input.GetU8(); } } /// /// 气泡框. /// [MessageType(0xF000027)] public class BubbleTipsEventB2C : ObjectEvent { /// /// 消息. /// public string Msg; override public void WriteExternal(IOutputStream output) { base.WriteExternal(output); output.PutUTF(Msg); } override public void ReadExternal(IInputStream input) { base.ReadExternal(input); Msg = input.GetUTF(); } } /// /// 向场景内单个单位发送播放音频通知. /// [MessageType(0xF000028)] public class PlaySoundEventB2CForOne : PlayerEvent { /// /// 音频文件名,不带后缀. /// public string SoundName = null; override public void WriteExternal(IOutputStream output) { base.WriteExternal(output); output.PutUTF(SoundName); } override public void ReadExternal(IInputStream input) { base.ReadExternal(input); SoundName = input.GetUTF(); } } /// /// 向场景内所有单位发送播放音频通知. /// [MessageType(0xF000029)] public class PlaySoundEventB2CForAll : ZoneEvent { /// /// 音频文件名,不带后缀. /// public string SoundName = null; override public void WriteExternal(IOutputStream output) { output.PutUTF(SoundName); } override public void ReadExternal(IInputStream input) { SoundName = input.GetUTF(); } } /// /// 怪物归属权更改. /// [MessageType(0xF000031)] public class MonsterHeirInfoChangeEventB2C : ObjectEvent { public MonsterVisibleDataB2C.HeirInfo UnitHeirInfo; public override void WriteExternal(IOutputStream output) { base.WriteExternal(output); output.PutExt(UnitHeirInfo); } public override void ReadExternal(IInputStream input) { base.ReadExternal(input); UnitHeirInfo = input.GetExt(); } } /// /// 发送可否放置法器通知 /// [MessageType(0xF000032)] public class PlayerPutRefineSoulItemB2c : PlayerEvent { public bool CanPut = true; public string QuestID = null; override public void WriteExternal(IOutputStream output) { base.WriteExternal(output); output.PutBool(CanPut); output.PutUTF(QuestID); } override public void ReadExternal(IInputStream input) { base.ReadExternal(input); CanPut = input.GetBool(); QuestID = input.GetUTF(); } } /// /// 单位动态播放特效(非编辑器中的静态数据) /// [MessageType(0xF000033)] public class DynamicUnitEffectB2C : ObjectEvent { public string Name; public bool BindBody; public string BindPartName; public float ScaleToBodySize; public string SoundName; public int EarthQuakeMS; public float EarthQuakeXYZ; public string CameraAnimation; public int EffectTimeMS = 0; public override void WriteExternal(IOutputStream output) { base.WriteExternal(output); output.PutUTF(this.Name); output.PutBool(this.BindBody); output.PutUTF(this.BindPartName); output.PutF32(this.ScaleToBodySize); output.PutUTF(this.SoundName); output.PutS32(this.EarthQuakeMS); output.PutF32(this.EarthQuakeXYZ); output.PutUTF(this.CameraAnimation); output.PutS32(this.EffectTimeMS); } public override void ReadExternal(IInputStream input) { base.ReadExternal(input); this.Name = input.GetUTF(); this.BindBody = input.GetBool(); this.BindPartName = input.GetUTF(); this.ScaleToBodySize = input.GetF32(); this.SoundName = input.GetUTF(); this.EarthQuakeMS = input.GetS32(); this.EarthQuakeXYZ = input.GetF32(); this.CameraAnimation = input.GetUTF(); this.EffectTimeMS = input.GetS32(); } } [MessageType(0xF000034)] public class ChangeQuestSeekB2C : ObjectEvent { public string QuestID; // x,y or null or funid public string SeekInfo; public override void WriteExternal(IOutputStream output) { base.WriteExternal(output); output.PutUTF(this.QuestID); output.PutUTF(this.SeekInfo); } public override void ReadExternal(IInputStream input) { base.ReadExternal(input); this.QuestID = input.GetUTF(); this.SeekInfo = input.GetUTF(); } } /// /// 单位遭受攻击提示. /// [MessageType(0xF000035)] public class UnderAttackNotifyB2C : PlayerEvent { /// /// 攻击者实例ID. /// public uint AttackerID = 0; /// /// 攻击者基础信息. /// public XmdsUnitBaseInfo AttackerInfo = null; public override void WriteExternal(IOutputStream output) { base.WriteExternal(output); output.PutU32(AttackerID); output.PutExt(AttackerInfo); } public override void ReadExternal(IInputStream input) { base.ReadExternal(input); AttackerID = input.GetU32(); AttackerInfo = input.GetExt(); } } /// /// 单位遭受伤害信息. /// [MessageType(0xF000036)] public class MonsterSufferDamageInfoB2C : PlayerEvent { /// /// 伤害集合. /// public List InfoList = null; /// /// 排名. /// public int PlayerRank = 0; /// /// 玩家伤害. /// public int PlayerDamage = 0; public override void WriteExternal(IOutputStream output) { base.WriteExternal(output); output.PutExtList(InfoList); output.PutS32(PlayerRank); output.PutS32(PlayerDamage); } public override void ReadExternal(IInputStream input) { base.ReadExternal(input); InfoList = input.GetExtList(); PlayerRank = input.GetS32(); PlayerDamage = input.GetS32(); } } /// /// 跟随状态变换 /// [MessageType(0xF000037)] public class SetAutoFollowB2C : PlayerEvent { /// /// 是否跟随状态 /// public int stateFollow; public override void ReadExternal(IInputStream input) { base.ReadExternal(input); stateFollow = input.GetS32(); } public override void WriteExternal(IOutputStream output) { base.WriteExternal(output); output.PutS32(stateFollow); } } /// /// 自动战斗状态变换 /// [MessageType(0xF000038)] public class SetAutoBattleB2C : PlayerEvent { /// /// 是否自动战斗状态 /// public int isAutoBattle; public override void ReadExternal(IInputStream input) { base.ReadExternal(input); isAutoBattle = input.GetS32(); } public override void WriteExternal(IOutputStream output) { base.WriteExternal(output); output.PutS32(isAutoBattle); } } /// /// 掉落物品飞 /// [MessageType(0xF000039)] public class RemoveDropItemB2C : PlayerEvent { public uint objectId; public uint actor_id; public RemoveDropItemB2C() { } public RemoveDropItemB2C(uint object_id, uint actor_id) { this.objectId = object_id; this.actor_id = actor_id; } public override void ReadExternal(IInputStream input) { base.ReadExternal(input); objectId = input.GetU32(); actor_id = input.GetU32(); } public override void WriteExternal(IOutputStream output) { base.WriteExternal(output); output.PutU32(objectId); output.PutU32(actor_id); } } }