del_Ins_MisStatus.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <?php
  2. /*
  3. * To change this license header, choose License Headers in Project Properties.
  4. * To change this template file, choose Tools | Templates
  5. * and open the template in the editor.
  6. */
  7. /**
  8. * Description of MisStatus
  9. * 任务状态信息
  10. * @author jgao
  11. */
  12. class MisStatus {
  13. //put your code here
  14. /// <summary>
  15. /// id
  16. /// </summary>
  17. public $id = 0;
  18. /// <summary>
  19. /// 类型
  20. /// </summary>
  21. public $type = 0;
  22. /// <summary>
  23. /// 命令码
  24. /// </summary>
  25. public $cmd = 0;
  26. /// <summary>
  27. /// 参数集
  28. /// </summary>
  29. public $paras = array();
  30. /// <summary>
  31. /// 当前计数
  32. /// </summary>
  33. public $cur = 0;
  34. /// <summary>
  35. /// 最大计数
  36. /// </summary>
  37. public $max = 0;
  38. /// <summary>
  39. /// 触发任务
  40. /// </summary>
  41. public $next = 0;
  42. /// <summary>
  43. /// 最低等级
  44. /// </summary>
  45. public $minlv = 0;
  46. /**
  47. * 所属任务卡
  48. * @var type
  49. */
  50. public $card = 0;
  51. /**
  52. * 扩展数据
  53. * @var type
  54. */
  55. public $exdatas = array();
  56. function initialize($value) {
  57. CommUtil::loadObject($value, $this);
  58. }
  59. /// <summary>
  60. /// 是否完成
  61. /// </summary>
  62. public function isFinish() {
  63. return $this->cur >= $this->max;
  64. }
  65. /// <summary>
  66. /// 由原始模型执行初始化
  67. /// </summary>
  68. /// <param name="mo"></param>
  69. /// <returns></returns>
  70. public static function initFromMo($mo) {
  71. $mis = new MisStatus();
  72. $mis->id = $mo->id;
  73. $mis->type = $mo->type;
  74. $mis->cmd = $mo->cmd;
  75. $mis->paras = strsplit($mo->paras);
  76. $mis->cur = self::calcStatusCur($mo);
  77. $mis->max = $mo->num;
  78. $mis->next = $mo->next;
  79. $mis->minlv = $mo->minlv;
  80. return $mis;
  81. }
  82. /**
  83. * 是否状态型任务
  84. * @param type $cmd
  85. */
  86. static function isStatusType($cmd) {
  87. return
  88. $cmd == MissEventCode::Evn_User_Levelup ||
  89. $cmd == MissEventCode::SEvn_Habitat_Own ||
  90. $cmd == MissEventCode::SEvn_Farm_Own ||
  91. $cmd == MissEventCode::SEvn_Build_Own ||
  92. $cmd == MissEventCode::SEvn_Pet ||
  93. $cmd == MissEventCode::SEvn_Explore_GridOwn;
  94. }
  95. /**
  96. * 自动对齐可能出现统计失误的状态型任务计数
  97. */
  98. function autoCalcStatusCur() {
  99. if (self::isStatusType($this->cmd)) {
  100. $mo = dataCenter()->getMissionConst($this->id);
  101. if ($mo != null) {
  102. $cur = self::calcStatusCur($mo);
  103. if ($this->cur < $cur) {
  104. $this->cur = $cur;
  105. }
  106. if ($this->max > $mo->num) {
  107. $this->max = $mo->num;
  108. }
  109. }
  110. }
  111. }
  112. static function calcStatusCur($mo) {
  113. $paras = strsplit($mo->paras);
  114. $para0 = "";
  115. $para1 = "";
  116. $para2 = "";
  117. if (array_count($paras) >= 1) {
  118. $para0 = $paras[0];
  119. }
  120. if (array_count($paras) >= 2) {
  121. $para1 = $paras[1];
  122. }
  123. if (array_count($paras) >= 3) {
  124. $para2 = $paras[2];
  125. }
  126. switch ($mo->cmd) {
  127. case MissEventCode::Evn_User_Levelup: // 第一个状态事件
  128. return usrInfo()->baseInfo()->level;
  129. case MissEventCode::SEvn_Habitat_Own:
  130. return MissProc::GetBuildingNum(INIT_HABITID, $para0, $para1);
  131. case MissEventCode:: SEvn_Farm_Own:
  132. return MissProc::GetBuildingNum(INIT_Farm, $para0, $para1);
  133. case MissEventCode:: SEvn_Build_Own:
  134. return MissProc::GetBuildingNum($para0, $para1, $para2);
  135. case MissEventCode:: SEvn_Pet:
  136. return MissProc::GetPetNum($para0, $para1, $para2);
  137. case MissEventCode:: SEvn_Explore_GridOwn:
  138. return MissProc::GetExlporeGridNum($para0);
  139. }
  140. return 0;
  141. }
  142. }