XmdsClientVirtual_Actor.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. using CommonAI.Data;
  2. using CommonAI.ZoneClient;
  3. using System.Collections.Generic;
  4. using XmdsCommon.Message;
  5. using XmdsCommon.Plugin;
  6. namespace XmdsCommon.ZoneClient.XmdsClientVirtual
  7. {
  8. public class XmdsClientVirtual_Actor : XmdsClientVirtual_Player
  9. {
  10. private List<string> mTeamList = null;
  11. protected override void MOwner_OnDoEvent(ZoneObject obj, CommonAI.Zone.ObjectEvent e)
  12. {
  13. if (e is XmdsUnitPropEventB2C)
  14. {
  15. XmdsUnitPropEventB2C evt = e as XmdsUnitPropEventB2C;
  16. XmdsUnitProperties props = (XmdsUnitProperties)mOwner.Info.Properties;
  17. props.ServerData.Prop = evt.Props;
  18. }
  19. else if (e is PlayerTeamIntoEventB2C)
  20. {
  21. PlayerTeamIntoEventB2C evt = e as PlayerTeamIntoEventB2C;
  22. mTeamList = evt.Members;
  23. }
  24. //else if (e is PlayerPKModeChangeEventB2C)
  25. //{
  26. // PlayerPKModeChangeEventB2C evt = e as PlayerPKModeChangeEventB2C;
  27. // mData.UnitPKInfo.CurPKMode = evt.CurMode;
  28. //}
  29. /* else if (e is SetAutoBattleB2C)
  30. {
  31. SetAutoBattleB2C evt = e as SetAutoBattleB2C;
  32. ZoneActor actor = obj as ZoneActor;
  33. actor.SendUnitGuard(evt.isAutoBattle != 0);
  34. }*/
  35. base.MOwner_OnDoEvent(obj, e);
  36. }
  37. public override bool IsEnemy(ZoneUnit unit)
  38. {
  39. bool ret = false;
  40. XmdsClientVirtual v = unit.Virtual as XmdsClientVirtual;
  41. if ((v is XmdsClientVirtual_Monster) || (v is XmdsClientVirtual_SummonUnit)) //怪物、召唤物或NPC按照默认方式处理.
  42. {
  43. ret = this.mOwner.Force == unit.Force ? false : true;
  44. return ret;
  45. }
  46. else if(v is XmdsClientVirtual_Pet)
  47. {
  48. return false;//自动选取目标时选中宠物的bug(宠物不对作为敌人)
  49. }
  50. else if (v is XmdsClientVirtual_Player)
  51. {
  52. XmdsClientVirtual_Player playerVirtual = v as XmdsClientVirtual_Player;
  53. PKMode m = GetPKInfo().CurPKMode;
  54. switch (m)
  55. {
  56. case PKMode.Peace:
  57. ret = this.mOwner.Force == unit.Force ? false : true;
  58. //if (ret == true) { ret = !IsTeamMember(playerVirtual); }
  59. break;
  60. case PKMode.Team:
  61. ret = !IsTeamMember(playerVirtual);
  62. break;
  63. case PKMode.All:
  64. ret = (playerVirtual.GetPlayerUUID() != this.GetPlayerUUID());
  65. break;
  66. case PKMode.Server:
  67. ret = GetServerID() == playerVirtual.GetServerID() ? false : true;
  68. if (ret == true) { ret = !IsTeamMember(playerVirtual); }
  69. break;
  70. case PKMode.Justice:
  71. ret = (playerVirtual.GetPKLv() == PKLevel.White ? false : true);
  72. if (ret == true) { ret = !IsTeamMember(playerVirtual); }
  73. break;
  74. case PKMode.Guild:
  75. ret = !IsGuildMember(playerVirtual);
  76. if (ret == true) { ret = !IsTeamMember(playerVirtual); }
  77. break;
  78. case PKMode.force:
  79. ret = GetForceID() != playerVirtual.GetForceID();
  80. if (ret == true) { ret = !IsTeamMember(playerVirtual); }
  81. break;
  82. default: break;
  83. }
  84. }
  85. return ret;
  86. }
  87. public bool IsTeamMember(XmdsClientVirtual_Player pl)
  88. {
  89. bool ret = false;
  90. if (pl.GetPlayerUUID() == this.GetPlayerUUID()) { ret = true; }
  91. else
  92. {
  93. ret = _IsTeamMember(pl.GetPlayerUUID());
  94. }
  95. return ret;
  96. }
  97. private bool _IsTeamMember(string uuid)
  98. {
  99. if (mTeamList != null && mTeamList.Contains(uuid))
  100. {
  101. return true;
  102. }
  103. return false;
  104. }
  105. public void GetAllTeamMember(List<ZoneUnit> ret)
  106. {
  107. if (mTeamList != null)
  108. {
  109. foreach(var a in mTeamList)
  110. {
  111. }
  112. }
  113. }
  114. public bool IsGuildMember(XmdsClientVirtual_Player pl)
  115. {
  116. bool ret = false;
  117. string gID = GetGuildID();
  118. if (string.IsNullOrEmpty(gID)) { ret = false; }
  119. else
  120. {
  121. ret = gID == pl.GetGuildID() ? true : false;
  122. }
  123. return ret;
  124. }
  125. public override bool IsAllies(ZoneUnit unit)
  126. {
  127. return _IsTeamMember((unit.Virtual as XmdsClientVirtual).GetPlayerUUID());
  128. }
  129. public override void OnDispose(ZoneUnit owner)
  130. {
  131. if (mTeamList != null)
  132. {
  133. mTeamList.Clear();
  134. mTeamList = null;
  135. }
  136. base.OnDispose(owner);
  137. }
  138. }
  139. }