Messages.cs 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using CommonLang.IO;
  5. using CommonAI.Zone;
  6. using CommonLang.IO.Attribute;
  7. using CommonAI.Zone.Helper;
  8. using CommonLang;
  9. using CommonAI.Data;
  10. using CommonAI.data;
  11. namespace CommonAI.ZoneClient
  12. {
  13. public static class ClientStruct
  14. {
  15. public struct UnitBuffStatus : IExternalizable
  16. {
  17. public int BuffTemplateID;
  18. public uint SenderID;
  19. public bool IsEquip;
  20. public int TotalTime;
  21. public int PassTime;
  22. public byte OverlayLevel;
  23. public void WriteExternal(IOutputStream output)
  24. {
  25. output.PutS32(BuffTemplateID);
  26. output.PutVU32(SenderID);
  27. output.PutBool(IsEquip);
  28. output.PutVS32(TotalTime);
  29. output.PutVS32(PassTime);
  30. output.PutU8(OverlayLevel);
  31. }
  32. public void ReadExternal(IInputStream input)
  33. {
  34. this.BuffTemplateID = input.GetS32();
  35. this.SenderID = input.GetVU32();
  36. this.IsEquip = input.GetBool();
  37. this.TotalTime = input.GetVS32();
  38. this.PassTime = input.GetVS32();
  39. this.OverlayLevel = input.GetU8();
  40. }
  41. public override string ToString()
  42. {
  43. return "[" + BuffTemplateID + ", " + TotalTime + ", " + PassTime + ", " + OverlayLevel + "]";
  44. }
  45. }
  46. public struct UnitSkillStatus : IExternalizable
  47. {
  48. public int SkillTemplateID;
  49. public int PassTime;
  50. public int useTimes;
  51. public void WriteExternal(IOutputStream output)
  52. {
  53. output.PutS32(SkillTemplateID);
  54. output.PutVS32(PassTime);
  55. output.PutS32(useTimes);
  56. }
  57. public void ReadExternal(IInputStream input)
  58. {
  59. this.SkillTemplateID = input.GetS32();
  60. this.PassTime = input.GetVS32();
  61. this.useTimes = input.GetS32();
  62. }
  63. }
  64. public struct UnitItemStatus : IExternalizable
  65. {
  66. public int ItemTemplateID;
  67. public int Count;
  68. public void WriteExternal(IOutputStream output)
  69. {
  70. output.PutS32(ItemTemplateID);
  71. output.PutVS32(Count);
  72. }
  73. public void ReadExternal(IInputStream input)
  74. {
  75. this.ItemTemplateID = input.GetS32();
  76. this.Count = input.GetVS32();
  77. }
  78. }
  79. public class ZoneEnvironmentVar : IExternalizable
  80. {
  81. public string Key;
  82. public bool SyncToClient;
  83. public object Value;
  84. public void WriteExternal(IOutputStream output)
  85. {
  86. output.PutUTF(Key);
  87. output.PutBool(SyncToClient);
  88. output.PutData(Value);
  89. }
  90. public void ReadExternal(IInputStream input)
  91. {
  92. DataType dt;
  93. this.Key = input.GetUTF();
  94. this.SyncToClient = input.GetBool();
  95. this.Value = input.GetData(out dt);
  96. }
  97. }
  98. }
  99. /// <summary>
  100. /// 单位的客户端显示数据,通常存储横向功能,比如Avatar
  101. /// </summary>
  102. public interface IUnitVisibleData : IExternalizable
  103. {
  104. void setVisibleName(String name);
  105. void setVisibleCardData(ICardData datas);
  106. }
  107. abstract public class SyncObjectInfo : IExternalizable
  108. {
  109. public uint ObjectID;
  110. public int TemplateID;
  111. public float x;
  112. public float y;
  113. public float direction;
  114. /// <summary>
  115. /// 用于扩展属性
  116. /// </summary>
  117. public IExternalizable ExtData;
  118. public abstract bool IsHalf { get; protected set; }
  119. public abstract bool HasExtData { get; protected set; }
  120. public virtual void ReadExternal(IInputStream input)
  121. {
  122. this.ObjectID = input.GetVU32();
  123. this.TemplateID = input.GetS32();
  124. MoveHelper.ReadPosAndDirection(IsHalf, out x, out y, out direction, input);
  125. if (HasExtData)
  126. {
  127. this.ExtData = input.GetExtAny();
  128. }
  129. }
  130. public virtual void WriteExternal(IOutputStream output)
  131. {
  132. output.PutVU32(ObjectID);
  133. output.PutS32(TemplateID);
  134. MoveHelper.WritePosAndDirection(IsHalf, x, y, direction, output);
  135. if (HasExtData)
  136. {
  137. output.PutExt(this.ExtData);
  138. }
  139. }
  140. }
  141. /// <summary>
  142. /// 场景中同步单位数据
  143. /// </summary>
  144. [MessageType(0x9010)]
  145. public class SyncUnitInfo : SyncObjectInfo
  146. {
  147. public string Name;
  148. public string Alias;
  149. public int Force;
  150. public int Level;
  151. public string PlayerUUID;
  152. public byte status;
  153. public byte sub_status;
  154. public short sub_flag; //sub_status>0才会有
  155. // 天命属性
  156. public byte fateType;
  157. public UnitFieldChangedEvent fields = new UnitFieldChangedEvent();
  158. public ClientStruct.UnitBuffStatus[] CurrentBuffStatus;
  159. public IUnitVisibleData VisibleInfo;
  160. //---------------------------------------------------
  161. private BitSet8 mask = new BitSet8(0);
  162. public override bool IsHalf
  163. {
  164. get { return mask.Get(0); }
  165. protected set { mask.Set(0, value); }
  166. }
  167. public override bool HasExtData
  168. {
  169. get { return mask.Get(1); }
  170. protected set { mask.Set(1, value); }
  171. }
  172. public bool HasName
  173. {
  174. get { return mask.Get(2); }
  175. private set { mask.Set(2, value); }
  176. }
  177. public bool HasPlayerUUID
  178. {
  179. get { return mask.Get(3); }
  180. private set { mask.Set(3, value); }
  181. }
  182. public bool HasAlias
  183. {
  184. get { return mask.Get(4); }
  185. private set { mask.Set(4, value); }
  186. }
  187. public bool IsTouchObj
  188. {
  189. get { return mask.Get(5); }
  190. set { mask.Set(5, value); }
  191. }
  192. public bool IsTouchMap
  193. {
  194. get { return mask.Get(6); }
  195. set { mask.Set(6, value); }
  196. }
  197. public bool IsStaticBlockable
  198. {
  199. get { return mask.Get(7); }
  200. set { mask.Set(7, value); }
  201. }
  202. //---------------------------------------------------
  203. public SyncUnitInfo(bool is_half) { this.IsHalf = is_half; }
  204. public SyncUnitInfo() { }
  205. public override void ReadExternal(IInputStream input)
  206. {
  207. this.mask.Mask = input.GetU8();
  208. base.ReadExternal(input);
  209. this.Force = input.GetS32();
  210. this.Level = input.GetVS32();
  211. if (HasName) this.Name = input.GetUTF();
  212. if (HasPlayerUUID) this.PlayerUUID = input.GetUTF();
  213. if (HasAlias) this.Alias = input.GetUTF();
  214. this.VisibleInfo = input.GetExtAny() as IUnitVisibleData;
  215. this.CurrentBuffStatus = input.GetStructArray<ClientStruct.UnitBuffStatus>();
  216. this.status = input.GetU8();
  217. this.sub_status = input.GetU8();
  218. this.fateType = input.GetU8();
  219. this.fields.ReadExternal(input);
  220. if(this.sub_status > 0)
  221. {
  222. this.sub_flag = input.GetS16();
  223. }
  224. }
  225. public override void WriteExternal(IOutputStream output)
  226. {
  227. this.HasName = !string.IsNullOrEmpty(Name);
  228. this.HasPlayerUUID = !string.IsNullOrEmpty(PlayerUUID);
  229. this.HasAlias = !string.IsNullOrEmpty(Alias);
  230. this.HasExtData = ExtData != null;
  231. output.PutU8(mask.Mask);
  232. base.WriteExternal(output);
  233. output.PutS32(Force);
  234. output.PutVS32(Level);
  235. if (HasName) output.PutUTF(Name);
  236. if (HasPlayerUUID) output.PutUTF(PlayerUUID);
  237. if (HasAlias) output.PutUTF(Alias);
  238. output.PutExt(VisibleInfo);
  239. output.PutStructArray(this.CurrentBuffStatus);
  240. output.PutU8(status);
  241. output.PutU8(sub_status);
  242. output.PutU8(fateType);
  243. fields.WriteExternal(output);
  244. if(this.sub_status > 0)
  245. {
  246. output.PutS16(this.sub_flag);
  247. }
  248. }
  249. }
  250. /// <summary>
  251. /// 场景中同步物品数据
  252. /// </summary>
  253. [MessageType(0x9011)]
  254. public class SyncItemInfo : SyncObjectInfo
  255. {
  256. public bool bDrop;
  257. public string Name;
  258. public string Alias;
  259. public int Force;
  260. public int ItemTotalTimeMS;
  261. public int ItemExpireTimeMS;
  262. public bool showItemLeftTimes;
  263. public bool isCanPick; //是否还能够拾取
  264. //---------------------------------------------------
  265. private BitSet8 mask = new BitSet8(0);
  266. public override bool IsHalf
  267. {
  268. get { return mask.Get(0); }
  269. protected set { mask.Set(0, value); }
  270. }
  271. public override bool HasExtData
  272. {
  273. get { return mask.Get(4); }
  274. protected set { mask.Set(4, value); }
  275. }
  276. public bool HasName
  277. {
  278. get { return mask.Get(1); }
  279. private set { mask.Set(1, value); }
  280. }
  281. public bool HasAlias
  282. {
  283. get { return mask.Get(3); }
  284. private set { mask.Set(3, value); }
  285. }
  286. //---------------------------------------------------
  287. public SyncItemInfo(bool is_half) { this.IsHalf = is_half; bDrop = false; }
  288. public SyncItemInfo() { bDrop = false; }
  289. public override void ReadExternal(IInputStream input)
  290. {
  291. this.mask.Mask = input.GetU8();
  292. base.ReadExternal(input);
  293. this.Force = input.GetVS32();
  294. this.ItemExpireTimeMS = input.GetVS32();
  295. this.ItemTotalTimeMS = input.GetVS32();
  296. if (HasName) this.Name = input.GetUTF();
  297. if (HasAlias) this.Alias = input.GetUTF();
  298. this.showItemLeftTimes = input.GetBool();
  299. this.isCanPick = input.GetBool();
  300. }
  301. public override void WriteExternal(IOutputStream output)
  302. {
  303. this.HasName = !string.IsNullOrEmpty(Name);
  304. this.HasAlias = !string.IsNullOrEmpty(Alias);
  305. this.HasExtData = ExtData != null;
  306. output.PutU8(mask.Mask);
  307. base.WriteExternal(output);
  308. output.PutVS32(Force);
  309. output.PutVS32(ItemExpireTimeMS);
  310. output.PutVS32(ItemTotalTimeMS);
  311. if (HasName) output.PutUTF(Name);
  312. if (HasAlias) output.PutUTF(Alias);
  313. output.PutBool(this.showItemLeftTimes);
  314. output.PutBool(this.isCanPick);
  315. }
  316. }
  317. /// <summary>
  318. /// 场景中同步法术数据
  319. /// </summary>
  320. [MessageType(0x9012)]
  321. public class SyncSpellInfo : SyncObjectInfo
  322. {
  323. public int Force;
  324. public float CurSpeed;
  325. //---------------------------------------------------
  326. private BitSet8 mask = new BitSet8(0);
  327. public override bool IsHalf
  328. {
  329. get { return mask.Get(0); }
  330. protected set { mask.Set(0, value); }
  331. }
  332. public override bool HasExtData
  333. {
  334. get { return mask.Get(4); }
  335. protected set { mask.Set(4, value); }
  336. }
  337. public bool HasSpeed
  338. {
  339. get { return mask.Get(4); }
  340. set { mask.Set(4, value); }
  341. }
  342. //---------------------------------------------------
  343. public SyncSpellInfo(bool is_half) { this.IsHalf = is_half; }
  344. public SyncSpellInfo() { }
  345. public override void ReadExternal(IInputStream input)
  346. {
  347. this.mask.Mask = input.GetU8();
  348. base.ReadExternal(input);
  349. this.Force = input.GetVS32();
  350. if (HasSpeed)
  351. {
  352. this.CurSpeed = input.GetF32();
  353. }
  354. }
  355. public override void WriteExternal(IOutputStream output)
  356. {
  357. this.HasExtData = ExtData != null;
  358. output.PutU8(mask.Mask);
  359. base.WriteExternal(output);
  360. output.PutVS32(Force);
  361. if (HasSpeed)
  362. {
  363. output.PutF32(CurSpeed);
  364. }
  365. }
  366. }
  367. /*
  368. /// <summary>
  369. /// 场景中同步单位数据
  370. /// </summary>
  371. [MessageType(0x9000)]
  372. public class SyncUnitInfo : IExternalizable
  373. {
  374. public uint ObjectID;
  375. public SyncUnitType ObjectType = SyncUnitType.Unit;
  376. public int TemplateID;
  377. public string Name;
  378. public string Alias;
  379. public byte Force;
  380. public float x;
  381. public float y;
  382. public float direction;
  383. /// <summary>
  384. /// 用于扩展属性
  385. /// </summary>
  386. public IExternalizable ExtData;
  387. //---------------------------------------------------
  388. #region units
  389. public int Level;
  390. public string PlayerUUID;
  391. public byte status;
  392. public byte sub_status;
  393. public UnitFieldChangedEvent fields = new UnitFieldChangedEvent();
  394. public ClientStruct.UnitBuffStatus[] CurrentBuffStatus;
  395. /// <summary>
  396. /// 战斗服玩家属性,通常存储横向功能,比如Avatar
  397. /// </summary>
  398. public CreateUnitInfoR2B PlayerInfo;
  399. #endregion
  400. //---------------------------------------------------
  401. #region items
  402. public int ItemTotalTimeMS;
  403. public int ItemExpireTimeMS;
  404. #endregion
  405. //---------------------------------------------------
  406. private BitSet8 mask = new BitSet8(0);
  407. public bool IsHalf
  408. {
  409. get { return mask.Get(0); }
  410. private set { mask.Set(0, value); }
  411. }
  412. public bool HasName
  413. {
  414. get { return mask.Get(1); }
  415. private set { mask.Set(1, value); }
  416. }
  417. public bool HasPlayerUUID
  418. {
  419. get { return mask.Get(2); }
  420. private set { mask.Set(2, value); }
  421. }
  422. public bool HasAlias
  423. {
  424. get { return mask.Get(3); }
  425. private set { mask.Set(3, value); }
  426. }
  427. public bool HasExtData
  428. {
  429. get { return mask.Get(4); }
  430. private set { mask.Set(4, value); }
  431. }
  432. //---------------------------------------------------
  433. public SyncUnitInfo(bool is_half) { }
  434. public SyncUnitInfo() { }
  435. public void ReadExternal(IInputStream input)
  436. {
  437. this.mask.Mask = input.GetU8();
  438. this.ObjectType = (SyncUnitType)input.GetU8();
  439. this.ObjectID = input.GetVU32();
  440. this.TemplateID = input.GetS32();
  441. if (HasName)
  442. {
  443. this.Name = input.GetUTF();
  444. }
  445. MoveHelper.ReadPosAndDirection(IsHalf, out x, out y, out direction, input);
  446. if (ObjectType == SyncUnitType.Item)
  447. {
  448. this.Force = input.GetU8();
  449. this.ItemExpireTimeMS = input.GetVS32();
  450. this.ItemTotalTimeMS = input.GetVS32();
  451. if (HasAlias)
  452. {
  453. this.Alias = input.GetUTF();
  454. }
  455. }
  456. else if (ObjectType == SyncUnitType.Unit)
  457. {
  458. this.Force = input.GetU8();
  459. this.Level = input.GetVS32();
  460. if (HasPlayerUUID)
  461. {
  462. this.PlayerUUID = input.GetUTF();
  463. }
  464. if (HasAlias)
  465. {
  466. this.Alias = input.GetUTF();
  467. }
  468. this.PlayerInfo = input.GetExt<CreateUnitInfoR2B>();
  469. this.CurrentBuffStatus = input.GetStructArray<ClientStruct.UnitBuffStatus>();
  470. this.status = input.GetU8();
  471. this.sub_status = input.GetU8();
  472. this.fields.ReadExternal(input);
  473. }
  474. if (HasExtData)
  475. {
  476. this.ExtData = input.GetExtAny();
  477. }
  478. }
  479. public void WriteExternal(IOutputStream output)
  480. {
  481. this.HasName = !string.IsNullOrEmpty(Name);
  482. this.HasPlayerUUID = !string.IsNullOrEmpty(PlayerUUID);
  483. this.HasAlias = !string.IsNullOrEmpty(Alias);
  484. this.HasExtData = ExtData != null;
  485. output.PutU8(mask.Mask);
  486. output.PutU8((byte)ObjectType);
  487. output.PutVU32(ObjectID);
  488. output.PutS32(TemplateID);
  489. if (HasName)
  490. {
  491. output.PutUTF(Name);
  492. }
  493. MoveHelper.WritePosAndDirection(IsHalf, x, y, direction, output);
  494. if (ObjectType == SyncUnitType.Item)
  495. {
  496. output.PutU8(Force);
  497. output.PutVS32(ItemExpireTimeMS);
  498. output.PutVS32(ItemTotalTimeMS);
  499. if (HasAlias)
  500. {
  501. output.PutUTF(Alias);
  502. }
  503. }
  504. else if (ObjectType == SyncUnitType.Unit)
  505. {
  506. output.PutU8(Force);
  507. output.PutVS32(Level);
  508. if (HasPlayerUUID)
  509. {
  510. output.PutUTF(PlayerUUID);
  511. }
  512. if (HasAlias)
  513. {
  514. output.PutUTF(Alias);
  515. }
  516. output.PutExt(PlayerInfo);
  517. output.PutStructArray(this.CurrentBuffStatus);
  518. output.PutU8(status);
  519. output.PutU8(sub_status);
  520. fields.WriteExternal(output);
  521. }
  522. if (HasExtData)
  523. {
  524. output.PutExt(ExtData);
  525. }
  526. }
  527. }
  528. */
  529. /// <summary>
  530. /// 同步场景中所有单位
  531. /// </summary>
  532. [MessageType(0x9001)]
  533. public class SyncObjectsEvent : ZoneEvent
  534. {
  535. public List<SyncObjectInfo> Objects;
  536. public SyncObjectsEvent() { }
  537. public SyncObjectsEvent(int count)
  538. {
  539. this.Objects = new List<SyncObjectInfo>(count);
  540. }
  541. override public void WriteExternal(IOutputStream output)
  542. {
  543. int len = Objects.Count;
  544. output.PutVS32(len);
  545. for (int i = 0; i < len; i++)
  546. {
  547. output.PutExt(Objects[i]);
  548. }
  549. }
  550. override public void ReadExternal(IInputStream input)
  551. {
  552. int len = input.GetVS32();
  553. this.Objects = new List<SyncObjectInfo>(len);
  554. for (int i = 0; i < len; i++)
  555. {
  556. SyncObjectInfo add = input.GetExtAny() as SyncObjectInfo;
  557. Objects.Add(add);
  558. }
  559. }
  560. }
  561. /// <summary>
  562. /// 玩家登陆到服务器后,服务器分配对应的单位ID
  563. /// </summary>
  564. [MessageType(0x9002)]
  565. public class LockActorEvent : ZoneEvent
  566. {
  567. /// <summary>
  568. /// 当前房间单位信息
  569. /// </summary>
  570. public SyncUnitInfo UnitData;
  571. /// <summary>
  572. /// 服务端传过来的单位信息
  573. /// </summary>
  574. public IUnitProperties GameServerProp;
  575. /// <summary>
  576. /// 服务端更新速度/秒
  577. /// </summary>
  578. public int ServerUpdateInterval;
  579. /// <summary>
  580. /// 客户端同步范围
  581. /// </summary>
  582. public float ClientSyncObjectRange;
  583. /// <summary>
  584. /// 客户端同步范围
  585. /// </summary>
  586. public float ClientSyncObjectOutRange;
  587. public PlayerSkillChangedEvent Skills;
  588. public ClientStruct.UnitSkillStatus[] CurrentSkillStatus;
  589. public ClientStruct.UnitItemStatus[] CurrentItemStatus;
  590. public ClientStruct.ZoneEnvironmentVar[] CurrentZoneVars;
  591. public ClientStruct.ZoneEnvironmentVar[] CurrentPlayerVars;
  592. override public void WriteExternal(IOutputStream output)
  593. {
  594. output.PutExt(this.UnitData);
  595. output.PutExt(this.GameServerProp);
  596. output.PutVS32(this.ServerUpdateInterval);
  597. output.PutF32(this.ClientSyncObjectRange);
  598. output.PutF32(this.ClientSyncObjectOutRange);
  599. output.PutExt(this.Skills);
  600. output.PutStructArray(this.CurrentSkillStatus);
  601. output.PutStructArray(this.CurrentItemStatus);
  602. output.PutExtArray(this.CurrentZoneVars);
  603. output.PutExtArray(this.CurrentPlayerVars);
  604. }
  605. override public void ReadExternal(IInputStream input)
  606. {
  607. this.UnitData = input.GetExt<SyncUnitInfo>();
  608. this.GameServerProp = input.GetExtAny() as IUnitProperties;
  609. this.ServerUpdateInterval = input.GetVS32();
  610. this.ClientSyncObjectRange = input.GetF32();
  611. this.ClientSyncObjectOutRange = input.GetF32();
  612. this.Skills = input.GetExt<PlayerSkillChangedEvent>();
  613. this.CurrentSkillStatus = input.GetStructArray<ClientStruct.UnitSkillStatus>();
  614. this.CurrentItemStatus = input.GetStructArray<ClientStruct.UnitItemStatus>();
  615. this.CurrentZoneVars = input.GetExtArray<ClientStruct.ZoneEnvironmentVar>();
  616. this.CurrentPlayerVars = input.GetExtArray<ClientStruct.ZoneEnvironmentVar>();
  617. }
  618. }
  619. /// <summary>
  620. /// 连接到代理服务器
  621. /// </summary>
  622. [MessageType(0x9003)]
  623. public class ConnectToProxy : ZoneEvent
  624. {
  625. public string ConnectString;
  626. public ConnectToProxy() { }
  627. public ConnectToProxy(string connect_string)
  628. {
  629. this.ConnectString = connect_string;
  630. }
  631. override public void WriteExternal(IOutputStream output)
  632. {
  633. output.PutUTF(ConnectString);
  634. }
  635. override public void ReadExternal(IInputStream input)
  636. {
  637. this.ConnectString = input.GetUTF();
  638. }
  639. }
  640. /// <summary>
  641. /// 从代理服务器断开
  642. /// </summary>
  643. [MessageType(0x9004)]
  644. public class DisconnectFromProxy : ZoneEvent
  645. {
  646. override public void WriteExternal(IOutputStream output)
  647. {
  648. }
  649. override public void ReadExternal(IInputStream input)
  650. {
  651. }
  652. }
  653. /// <summary>
  654. /// 同步场景中所有Flag状态
  655. /// </summary>
  656. [MessageType(0x9005)]
  657. public class SyncFlagsEvent : ZoneEvent
  658. {
  659. public List<string> ClosedDecorations = new List<string>();
  660. public HashMap<string, string> ChangedTags = new HashMap<string, string>();
  661. public SyncFlagsEvent()
  662. {
  663. }
  664. override public void WriteExternal(IOutputStream output)
  665. {
  666. output.PutList(ClosedDecorations, output.PutUTF);
  667. output.PutMap(ChangedTags, output.PutUTF, output.PutUTF);
  668. }
  669. override public void ReadExternal(IInputStream input)
  670. {
  671. this.ClosedDecorations = input.GetUTFList();
  672. this.ChangedTags = input.GetMap<string, string>(input.GetUTF, input.GetUTF);
  673. }
  674. }
  675. [MessageType(0x9006)]
  676. public class ClientEnterScene : ZoneEvent
  677. {
  678. /// <summary>
  679. /// 场景ID
  680. /// </summary>
  681. public int sceneID;
  682. /// <summary>
  683. /// 分割大小
  684. /// </summary>
  685. public int spaceDiv;
  686. /// <summary>
  687. /// 资源版本
  688. /// </summary>
  689. public string resVersion;
  690. public ClientEnterScene() { }
  691. public ClientEnterScene(int sceneID, int spaceDiv, string resVer)
  692. {
  693. this.sceneID = sceneID;
  694. this.spaceDiv = spaceDiv;
  695. this.resVersion = resVer;
  696. }
  697. override public void WriteExternal(IOutputStream output)
  698. {
  699. output.PutS32(sceneID);
  700. output.PutVS32(spaceDiv);
  701. output.PutUTF(resVersion);
  702. }
  703. override public void ReadExternal(IInputStream input)
  704. {
  705. this.sceneID = input.GetS32();
  706. this.spaceDiv = input.GetVS32();
  707. this.resVersion = input.GetUTF();
  708. }
  709. }
  710. /// <summary>
  711. /// 玩家离开场景.
  712. /// </summary>
  713. [MessageType(0x9007)]
  714. public class PlayerLeaveScene : PlayerEvent
  715. {
  716. public PlayerLeaveScene() { }
  717. public PlayerLeaveScene(uint oid) : base(oid)
  718. {
  719. }
  720. override public void WriteExternal(IOutputStream output)
  721. {
  722. base.WriteExternal(output);
  723. }
  724. override public void ReadExternal(IInputStream input)
  725. {
  726. base.ReadExternal(input);
  727. }
  728. }
  729. [MessageType(0x9008)]
  730. public class AddEffectEvent2 : ZoneEvent, PositionMessage
  731. {
  732. public enum EffectType
  733. {
  734. None,
  735. MoveToTarget,
  736. MoveToPlayer
  737. }
  738. public uint hostId = 0;
  739. public float x;
  740. public float y;
  741. public float direction;
  742. private uint effect_sn = 0;
  743. private EffectType et;
  744. private float targetX;
  745. private float targetY;
  746. private bool followActor;
  747. public LaunchEffect effect { get; set; }
  748. public AddEffectEvent2() { }
  749. public AddEffectEvent2(uint hostId, float x, float y, float dir, LaunchEffect effect, EffectType et, float targetX, float targetY, bool followActor = false)
  750. {
  751. this.hostId = hostId;
  752. this.x = x;
  753. this.y = y;
  754. this.direction = dir;
  755. this.effect = effect;
  756. this.et = et;
  757. this.targetX = targetX;
  758. this.targetY = targetY;
  759. this.followActor = followActor;
  760. }
  761. override public void WriteExternal(IOutputStream output)
  762. {
  763. output.PutVU32(hostId);
  764. output.PutF32(x);
  765. output.PutF32(y);
  766. output.PutF32(direction);
  767. output.PutVU32(effect_sn);
  768. }
  769. override public void ReadExternal(IInputStream input)
  770. {
  771. this.hostId = input.GetVU32();
  772. this.x = input.GetF32();
  773. this.y = input.GetF32();
  774. this.direction = input.GetF32();
  775. this.effect_sn = input.GetVU32();
  776. }
  777. public override void BeforeWrite(TemplateManager templates)
  778. {
  779. if (effect != null)
  780. {
  781. this.effect_sn = effect.SerialNumber;
  782. }
  783. }
  784. public override void EndRead(TemplateManager templates)
  785. {
  786. this.effect = templates.GetSnData<LaunchEffect>(effect_sn);
  787. }
  788. public float X { get { return x; } }
  789. public float Y { get { return y; } }
  790. public float TargetX
  791. {
  792. get { return targetX; }
  793. }
  794. public float TargetY
  795. {
  796. get { return targetY; }
  797. }
  798. public bool FollowActor
  799. {
  800. get { return followActor; }
  801. }
  802. public EffectType ET
  803. {
  804. get { return et; }
  805. }
  806. }
  807. }