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);
}
}
}