using System;
using System.Collections.Generic;
using System.Text;
using CommonLang.IO.Attribute;
using CommonLang.IO;
using CommonAI.Zone;
using CommonLang.Protocol;
namespace CommonAI.ZoneServer
{
///
/// 创建房间额外的参数
/// 由游戏服发起(游戏服->战斗服)
///
[MessageType(0x00040000)]
public class CreateRoomInfoR2B : IExternalizable
{
public int SceneID;
public int AverageLevel;
public string EnvironmentVars;
virtual public void WriteExternal(IOutputStream output)
{
output.PutS32(SceneID);
output.PutS32(AverageLevel);
output.PutUTF(EnvironmentVars);
}
virtual public void ReadExternal(IInputStream input)
{
SceneID = input.GetS32();
AverageLevel = input.GetS32();
EnvironmentVars = input.GetUTF();
}
}
///
/// 创建玩家单位额外的参数
/// 由游戏服发起(游戏服->战斗服)
///
[MessageType(0x00040001)]
public class CreateUnitInfoR2B : IExternalizable
{
///
/// 角色模板ID
///
public int UnitTemplateID;
///
/// 出生阵营
///
public int Force;
public int alliesForce;
///
/// 玩家出生点
///
public string StartFlag;
///
/// 玩家扩展属性
///
public IExternalizable UnitPropData = null;
virtual public void WriteExternal(IOutputStream output)
{
output.PutS32(UnitTemplateID);
output.PutVS32(Force);
output.PutUTF(StartFlag);
output.PutExt(UnitPropData);
}
virtual public void ReadExternal(IInputStream input)
{
UnitTemplateID = input.GetS32();
Force = input.GetVS32();
StartFlag = input.GetUTF();
UnitPropData = input.GetExtAny();
}
}
///
/// 房间战斗结束,结算报文(战斗服->游戏服)
///
[MessageType(0x00040002)]
public class RoomFinishInfoB2R : IExternalizable
{
///
/// 游戏编辑器对应的Xml场景ID
///
public int SceneID;
///
/// 胜利方
///
public byte WinnerForce;
///
/// 自定义消息
///
public string Message;
///
/// 游戏总共进行时间
///
public int TotalTimeSEC;
///
/// 玩家所有统计信息
///
public List PlayerResults = new List();
///
/// 战斗记录
///
public byte[] BinLog;
public void WriteExternal(IOutputStream output)
{
output.PutS32(this.SceneID);
output.PutU8(this.WinnerForce);
output.PutUTF(this.Message);
output.PutS32(this.TotalTimeSEC);
output.PutS32(PlayerResults.Count);
int count = PlayerResults.Count;
for (int i = 0; i < count; i++)
{
PlayerResult pr = PlayerResults[i];
pr.WriteExternal(output);
}
output.PutBytes(BinLog);
}
public void ReadExternal(IInputStream input)
{
this.SceneID = input.GetS32();
this.WinnerForce = input.GetU8();
this.Message = input.GetUTF();
this.TotalTimeSEC = input.GetS32();
int count = input.GetS32();
for (int i = 0; i < count; i++)
{
PlayerResult pr = new PlayerResult();
pr.ReadExternal(input);
PlayerResults.Add(pr);
}
this.BinLog = input.GetBytes();
}
///
/// 玩家战斗结果
///
public class PlayerResult : IExternalizable
{
///
/// 玩家唯一标识
///
public string PlayerUUID;
///
/// 场景中的ID
///
public uint ZoneObjectID;
///
/// 是否胜利
///
public bool IsWin;
///
/// 此次战斗的阵营
///
public byte Force;
///
/// 获取的金币数量
///
public int TotalTakeMoney;
///
/// 死亡次数
///
public int DeadCount;
///
/// 承受伤害
///
public long SelfDamage;
///
/// 收获的所有道具 编辑器道具ID[]
///
public int[] ItemTemplates;
///
/// 总共杀死单位数量
///
public int KillUnitCount;
///
/// 总共杀敌人/小兵数量
///
public int KillEnemyCount;
///
/// 总共杀野怪数量
///
public int KillNeutralityCount;
///
/// 总共杀死建筑数量
///
public int KillBuildingCount;
///
/// 总共杀死玩家数量
///
public int KillPlayerCount;
///
/// 杀死精英怪物 编辑器单位ID[]
///
public int[] KilledEllitMonsters;
///
/// 杀死的玩家 玩家UUID[]
///
public string[] KillPlayers;
///
/// 对怪物造成的总伤害
///
public long MonsterDamage;
///
/// 对玩家造成的总伤害
///
public long PlayerDamage;
public void WriteExternal(IOutputStream output)
{
output.PutUTF(PlayerUUID);
output.PutU32(ZoneObjectID);
output.PutBool(IsWin);
output.PutU8(Force);
output.PutS32(TotalTakeMoney);
output.PutS32(DeadCount);
output.PutS64(SelfDamage);
output.PutArray(ItemTemplates, output.PutS32);
output.PutS32(KillUnitCount);
output.PutS32(KillEnemyCount);
output.PutS32(KillNeutralityCount);
output.PutS32(KillBuildingCount);
output.PutS32(KillPlayerCount);
output.PutArray(KilledEllitMonsters, output.PutS32);
output.PutArray(KillPlayers, output.PutUTF);
output.PutS64(MonsterDamage);
output.PutS64(PlayerDamage);
}
public void ReadExternal(IInputStream input)
{
PlayerUUID = input.GetUTF();
ZoneObjectID = input.GetU32();
IsWin = input.GetBool();
Force = input.GetU8();
TotalTakeMoney = input.GetS32();
DeadCount = input.GetS32();
SelfDamage = input.GetS64();
ItemTemplates = input.GetArray(input.GetS32);
KillUnitCount = input.GetS32();
KillEnemyCount = input.GetS32();
KillNeutralityCount = input.GetS32();
KillBuildingCount = input.GetS32();
KillPlayerCount = input.GetS32();
KilledEllitMonsters = input.GetArray(input.GetS32);
KillPlayers = input.GetUTFArray();
MonsterDamage = input.GetS64();
PlayerDamage = input.GetS64();
}
}
}
///
/// 通知玩家杀死怪物 (战斗服->游戏服)
///
[MessageType(0x00040003)]
public class UnitKillMonsterB2R : IExternalizable
{
public string PlayerUUID;
public int MonsterId;
virtual public void WriteExternal(IOutputStream output)
{
output.PutUTF(this.PlayerUUID);
output.PutS32(this.MonsterId);
}
virtual public void ReadExternal(IInputStream input)
{
this.PlayerUUID = input.GetUTF();
this.MonsterId = input.GetS32();
}
}
///
/// 通知获得道具 (战斗服->游戏服)
///
[MessageType(0x00040004)]
public class UnitGotItemB2R : IExternalizable
{
public string PlayerUUID;
public int ItemTemplateID;
public int Count;
virtual public void WriteExternal(IOutputStream output)
{
output.PutUTF(PlayerUUID);
output.PutS32(ItemTemplateID);
output.PutS32(Count);
}
virtual public void ReadExternal(IInputStream input)
{
PlayerUUID = input.GetUTF();
ItemTemplateID = input.GetS32();
Count = input.GetS32();
}
}
///
/// 通知获得金币 (战斗服->游戏服)
///
[MessageType(0x00040005)]
public class UnitGotMoneyB2R : IExternalizable
{
public string PlayerUUID;
public int Money;
virtual public void WriteExternal(IOutputStream output)
{
output.PutUTF(this.PlayerUUID);
output.PutS32(this.Money);
}
virtual public void ReadExternal(IInputStream input)
{
this.PlayerUUID = input.GetUTF();
this.Money = input.GetS32();
}
}
///
/// 客户端请求使用游戏币,(战斗服->游戏服)
/// [Request的MessageID和Response的MessageID必须相等]
///
[MessageType(0x00040006)]
public class ClientCostRequestB2R : NetMessage
{
///
/// 玩家标识
///
public string PlayerUUID;
///
/// 消耗付费游戏币
///
public int CostDiamond;
///
/// 消耗产出金币
///
public int CostGold;
///
/// 消耗道具
///
public int ItemTemplateID;
public override void WriteExternal(IOutputStream output)
{
output.PutS32(base.MessageID);
output.PutUTF(this.PlayerUUID);
output.PutS32(this.CostDiamond);
output.PutS32(this.CostGold);
output.PutS32(this.ItemTemplateID);
}
public override void ReadExternal(IInputStream input)
{
base.MessageID = input.GetS32();
this.PlayerUUID = input.GetUTF();
this.CostDiamond = input.GetS32();
this.CostGold = input.GetS32();
this.ItemTemplateID = input.GetS32();
}
}
///
/// 客户端请求使用游戏币回馈,(游戏服->战斗服)
/// [Request的MessageID和Response的MessageID必须相等]
///
[MessageType(0x00040007)]
public class ClientCostResponseR2B : NetMessage
{
public const byte RESULT_OK = 1;
public const byte RESULT_FAILED = 2;
public byte Result = 0;
public string Reason = "";
public override void WriteExternal(IOutputStream output)
{
output.PutS32(base.MessageID);
output.PutU8(this.Result);
output.PutUTF(this.Reason);
}
public override void ReadExternal(IInputStream input)
{
base.MessageID = input.GetS32();
this.Result = input.GetU8();
this.Reason = input.GetUTF();
}
}
///
/// 使用背包道具 (战斗服->游戏服)
///
[MessageType(0x00040008)]
public class UnitUseItemB2R : IExternalizable
{
///
/// 玩家标识
///
public string PlayerUUID;
public int ItemTemplateID;
virtual public void WriteExternal(IOutputStream output)
{
output.PutUTF(PlayerUUID);
output.PutS32(ItemTemplateID);
}
virtual public void ReadExternal(IInputStream input)
{
PlayerUUID = input.GetUTF();
ItemTemplateID = input.GetS32();
}
}
///
/// 游戏服关闭房间
///
[MessageType(0x00040009)]
public class CloseRoomNotifyR2B : NetMessage
{
///
/// 关闭消息类型
///
public int Result;
///
/// 关闭消息
///
public string Message;
///
/// 关闭倒计时
///
public int TimeDelayMS;
public override void WriteExternal(IOutputStream output)
{
output.PutS32(base.MessageID);
output.PutS32(this.Result);
output.PutUTF(this.Message);
output.PutS32(this.TimeDelayMS);
}
public override void ReadExternal(IInputStream input)
{
base.MessageID = input.GetS32();
this.Result = input.GetS32();
this.Message = input.GetUTF();
this.TimeDelayMS = input.GetS32();
}
}
///
/// 游戏服向战斗服发送
///
[MessageType(0x0004000A)]
public class SendMessageR2B : NetMessage
{
public string Message;
public override void WriteExternal(IOutputStream output)
{
output.PutUTF(this.Message);
}
public override void ReadExternal(IInputStream input)
{
this.Message = input.GetUTF();
}
}
///
/// 战斗服向游戏服发送
///
[MessageType(0x0004000B)]
public class SendMessageB2R : NetMessage
{
public string Message;
public override void WriteExternal(IOutputStream output)
{
output.PutUTF(this.Message);
}
public override void ReadExternal(IInputStream input)
{
this.Message = input.GetUTF();
}
}
///
/// 战斗服向游戏服发送自定义事件.
///
[MessageType(0x0004000C)]
public class SendEventB2R : NetMessage
{
public IExternalizable evt;
public override void WriteExternal(IOutputStream output)
{
output.PutExt(this.evt);
}
public override void ReadExternal(IInputStream input)
{
evt = input.GetExtAny();
}
}
}