del_MissProc.php 37 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166
  1. <?php
  2. /**
  3. * Description of GoalProc
  4. * 任务处理流程
  5. * @author jgao
  6. */
  7. class MissProc {
  8. //put your code here
  9. /**
  10. * 获得任务卡列表
  11. * @param type $args
  12. */
  13. static function onMissionCardList($args) {
  14. $storeInfo = usrInfo()->storeInfo();
  15. return array(
  16. 'missCardDict' => $storeInfo->misCardDict,
  17. );
  18. }
  19. /**
  20. * 开启任务卡
  21. */
  22. static function onStartMissionCard($args) {
  23. $id = $args->id;
  24. $storeInfo = usrInfo()->storeInfo(true);
  25. $missInfo = usrInfo()->missInfo(true);
  26. if (!$storeInfo->hasMissionCard($id)) {
  27. // 错误:没有这张任务卡
  28. return Errcode::err_miss_nomisscard;
  29. }
  30. if ($storeInfo->checkSameTypeMissionCardHasStarted($id)) {
  31. // 错误:已开启同类型任务卡
  32. return Errcode::err_miss_sametypehasopen;
  33. }
  34. $ins = $storeInfo->startMissionCard($id); // 任务卡置为开启状态
  35. $missCardMo = dataCenter()->getMissionCardData($ins->tid);
  36. $missList = strsplit_raw($missCardMo->misslist);
  37. if (count($missList) <= 0) {
  38. // 错误:配置数据出错
  39. return Errcode::default_;
  40. }
  41. // 自动挂载任务卡的第一个任务
  42. $missIns = $missInfo->addMission($missList[0]);
  43. $missIns->card = $id;
  44. return succeed();
  45. }
  46. /**
  47. * 任务卡兑换奖励
  48. */
  49. static function onFinishMissionCard($args) {
  50. $ids = $args->ids;
  51. $storeInfo = usrInfo()->storeInfo(true);
  52. $missInfo = usrInfo()->missInfo(true);
  53. $prizes = array();
  54. foreach ($ids as $id) {
  55. if (!$storeInfo->hasMissionCard($id)) {
  56. // 错误:没有这张任务卡
  57. return Errcode::err_miss_nomisscard;
  58. }
  59. $ins = $storeInfo->getMissionCard($id);
  60. $state = $ins->getState();
  61. if ($state != MissionCardStateType::finish) {
  62. // 错误:任务链尚未完成
  63. return Errcode::err_miss_notfinish;
  64. }
  65. $missCardMo = dataCenter()->getMissionCardData($ins->tid);
  66. array_pushs($prizes, usrInfo()->modifyPrizes($missCardMo->prize));
  67. // 清理任务卡名下所有子任务的完成痕迹(避免后续影响任务卡是否完成的判断)
  68. $missList = strsplit_raw($missCardMo->misslist);
  69. foreach ($missList as $missId) {
  70. dict_remove($missInfo->overMissions, $missId);
  71. }
  72. $storeInfo->delMissionCard($id); // 删除这张任务卡
  73. }
  74. return array(
  75. 'prizes' => $prizes,
  76. );
  77. }
  78. /**
  79. * 完成任务
  80. * @param RequestVo $req
  81. */
  82. static function onFinishMission($args) {
  83. $id = $args->id;
  84. $missInfo = usrInfo()->missInfo(true);
  85. $baseInfo = usrInfo()->baseInfo(true);
  86. // 检测今日是否已经做过该任务
  87. if (!$missInfo->hasMission($id)) {
  88. // 尚未接取此任务
  89. return ErrCode::err_miss_noting;
  90. }
  91. $ing = $missInfo->GetMission($id);
  92. if (!$ing->isFinish()) {
  93. // 任务尚未完成
  94. return ErrCode::err_miss_notfinish;
  95. }
  96. $ctx = dataCenter()->getMissionConst($id);
  97. if ($ctx == null) {
  98. // 任务模板数据缺失
  99. return ErrCode::default_;
  100. }
  101. if ($ctx->vip != 0 && $ctx->vip != $baseInfo->vip) {
  102. // vip等级错误
  103. return ErrCode::default_;
  104. }
  105. if ($ctx->start != "") {
  106. $startInfo = strsplit_raw($ctx->start, ":");
  107. $start = $startInfo[0] * 3600 + $startInfo[1] * 60 + $startInfo[2];
  108. $endInfo = strsplit_raw($ctx->end, ":");
  109. $end = $endInfo[0] * 3600 + $endInfo[1] * 60 + $endInfo[2];
  110. $date = datetime();
  111. $now = $date->hours * 3600 + $date->minutes * 60 + $date->seconds;
  112. if ($start > $now || $end < $now) {
  113. // 完成时间不满足条件
  114. return ErrCode::default_;
  115. }
  116. }
  117. $ctx_prizes = "";
  118. if ($ctx->prizes != "") { // 如果有奖励,则直接应用之
  119. $ctx_prizes = $ctx->prizes;
  120. } else {
  121. #m没有奖励--待定
  122. }
  123. $prizes = usrInfo()->modifyPrizes($ctx_prizes);
  124. $missInfo->finishMission($id);
  125. if ($ctx->next != 0) {
  126. if ($ctx->next == 999999) { // 未完待续任务标志字
  127. $missInfo->contMissions->$id = "continue..";
  128. } else {
  129. $ing = $missInfo->addMission($ctx->next);
  130. self::DealToServer(array($ing));
  131. }
  132. }
  133. $result = array(
  134. 'ret' => "succeed!",
  135. 'prizes' => $prizes,
  136. 'miss' => $missInfo,
  137. );
  138. return $result;
  139. }
  140. /**
  141. * 自动修复状态型任务
  142. * @param RequestVo $req
  143. */
  144. static function autoRecoverStateMissions() {
  145. $missInfo = usrInfo()->missInfo(true);
  146. foreach ($missInfo->ingMissions as $key => $ing) {
  147. $ing->autoCalcStatusCur();
  148. self::chechIngMissIsAuto($ing->id); // 判断自动完成的任务是否需要自动对齐完成状态
  149. }
  150. }
  151. /**
  152. * 自动起始的任务
  153. * @param RequestVo $req
  154. */
  155. static function autoStartingMissions() {
  156. $missList = dataCenter()->getMissionConst();
  157. $missInfo = usrInfo()->missInfo(true);
  158. foreach ($missList as $id => $val) {
  159. if ($val->etc == "1") {
  160. if (!$missInfo->hasMission($id) &&
  161. !$missInfo->onceFinished($id)) {
  162. $missInfo->addMission($id);
  163. }
  164. }
  165. }
  166. }
  167. /**
  168. * 待续任务重新续接
  169. * @param RequestVo $req
  170. */
  171. static function autoRecontinueMissions() {
  172. $dirtyContiMissions = array();
  173. $missInfo = usrInfo()->missInfo(true);
  174. foreach ($missInfo->contMissions as $id => $val) {
  175. $ctx = dataCenter()->getMissionConst($id);
  176. if ($ctx->next != 0 && $ctx->next != 999999) {
  177. $missInfo->addMission($ctx->next);
  178. $dirtyContiMissions[] = $id;
  179. }
  180. }
  181. foreach ($dirtyContiMissions as $dirty) {
  182. dict_remove($missInfo->contMissions, $dirty);
  183. }
  184. }
  185. /**
  186. * 自动接取每日任务
  187. * @param RequestVo $req
  188. */
  189. static function autoDailyMissions() {
  190. $dirty = array();
  191. $missDic = dataCenter()->getMissionConst();
  192. console("autoDailyMissions");
  193. $missInfo = usrInfo()->missInfo(true);
  194. foreach ($missInfo->ingMissions as $ing) {
  195. if (!dict_exists($missDic, $ing->id)) {
  196. $dirty[] = $ing->id;
  197. }
  198. }
  199. foreach ($dirty as $temp) {
  200. $missInfo->delMission($temp);
  201. }
  202. foreach ($missDic as $id => $val) {
  203. if ($val->type != 2) {
  204. continue;
  205. }
  206. // 如果有前一天的残留数据,或者找不到此任务,则直接干掉
  207. if (dict_exists($missInfo->ingMissions, $id)) {
  208. $missInfo->delMission($id);
  209. }
  210. $missInfo->addMission($id);
  211. }
  212. }
  213. // ------------------------任务状态检测-----------------------------
  214. /**
  215. * 筛选正在执行中的任务
  216. * @param MissEventInfo $info
  217. * @return type
  218. */
  219. static function SelectIngMissions($info) {
  220. $list = array();
  221. if (!MissEventCode::isServerLogic) {
  222. return $list;
  223. }
  224. $baseInfo = usrInfo()->baseInfo(false);
  225. $missInfo = usrInfo()->missInfo(false);
  226. foreach ($missInfo->ingMissions as $key => $ing) {
  227. if ($ing->minlv > $baseInfo->level &&
  228. !MisStatus::isStatusType($ing->cmd) &&
  229. $ing->type != 2) {
  230. continue;
  231. }
  232. if ($ing->cmd != $info->evnCode) {
  233. continue;
  234. }
  235. $bSign = true;
  236. if (array_count($ing->paras) == 0) {
  237. ###说明这个任务没有特定需求
  238. } else {
  239. $index = 0;
  240. foreach ($info->paras as $para) {
  241. if ($index < array_count($ing->paras)) {
  242. if (strcontains($para, "|")) {
  243. $paraList = strsplit($para, "|");
  244. foreach ($paraList as $paraItem) {
  245. if ($paraItem == $ing->paras[$index]) {
  246. continue;
  247. }
  248. }
  249. } else {
  250. if ($ing->paras[$index] != 0 && $para != $ing->paras[$index]) {
  251. $bSign = false;
  252. continue;
  253. }
  254. }
  255. } else {
  256. continue;
  257. }
  258. $index++;
  259. }
  260. }
  261. if ($bSign) {
  262. $list[] = $ing->id;
  263. }
  264. }
  265. return $list;
  266. }
  267. /**
  268. * 筛选出的任务节奏递推
  269. * @param type $id
  270. * @param type $info
  271. * @return type
  272. */
  273. static function PropelIngMission($id, $info) {
  274. $missInfo = usrInfo()->missInfo(true);
  275. $ing = $missInfo->GetMission($id);
  276. switch ($info->ope) {
  277. case "set":
  278. $ing->cur = $info->val;
  279. break;
  280. case "add":
  281. $ing->cur += $info->val;
  282. break;
  283. case "inc":
  284. $ing->cur += 1;
  285. break;
  286. case "max":
  287. if ($info->val > $ing->cur) {
  288. $ing->cur = $info->val;
  289. }
  290. break;
  291. }
  292. if ($info->ope != "set") {
  293. if ($ing->cur > $ing->max) {
  294. $ing->cur = $ing->max;
  295. }
  296. }
  297. #检查现有的任务中是否包含自动完成的数据
  298. self::chechIngMissIsAuto($id);
  299. return $ing;
  300. }
  301. /**
  302. * 检查现有的任务中是否包含自动完成的数据
  303. * @param type $ing
  304. */
  305. static function chechIngMissIsAuto($id) {
  306. $missInfo = usrInfo()->missInfo(true);
  307. $ing = $missInfo->GetMission($id);
  308. $ctx = dataCenter()->getMissionConst($id);
  309. if ($ing->isFinish() && $ctx->isauto == 1) {
  310. $missInfo->finishMission($id);
  311. if ($ctx->next != 0) {
  312. if ($ctx->next == 999999) { // 未完待续任务标志字
  313. $missInfo->contMissions->$id = "continue..";
  314. } else {
  315. $nexting = $missInfo->addMission($ctx->next);
  316. if ($ing->card != 0) {
  317. $nexting->card = $ing->card; // 继承任务卡的所属关系
  318. }
  319. }
  320. }
  321. }
  322. }
  323. /**
  324. * 捆绑进度变化到应答信息
  325. * @param type $ings
  326. */
  327. static function DealToServer($ings) {
  328. $resp = ctx()->resp();
  329. $missInfo = usrInfo()->missInfo(true);
  330. if (count($ings) > 0) {
  331. if (!dict_exists($resp->tag, "missInfo")) {
  332. $resp->tag->missInfo = new stdClass();
  333. }
  334. if (!dict_exists($resp->tag->missInfo, "ings")) {
  335. $resp->tag->missInfo->ings = array();
  336. }
  337. array_pushs($resp->tag->missInfo->ings, $ings);
  338. }
  339. }
  340. // -------------各种任务事件监听---------------
  341. /**
  342. * 玩家升级事件
  343. * @param type $level
  344. */
  345. static function DealUserLevelup($level) {
  346. $ings = array();
  347. $info = new MissEventInfo(
  348. MissEventCode::Evn_User_Levelup, "set", $level);
  349. $list = self::SelectIngMissions($info);
  350. foreach ($list as $id) {
  351. $ings[] = self::PropelIngMission($id, $info);
  352. }
  353. self::DealToServer($ings);
  354. }
  355. /**
  356. * 玩家食物发生变化
  357. * 参数一:特定食物类型,无限定填0
  358. * @param type $type 类型
  359. * @param type $num 食物数量
  360. */
  361. static function DealUserFood($type, $num) {
  362. $ings = array();
  363. $info = new MissEventInfo(
  364. MissEventCode::Evn_User_Food, "set", $num, array($type));
  365. $list = self::SelectIngMissions($info);
  366. foreach ($list as $id) {
  367. $ings[] = self::PropelIngMission($id, $info);
  368. }
  369. self::DealToServer($ings);
  370. }
  371. /**
  372. * 建造一个领地 /
  373. * 建造一个指定领地
  374. * 参数一:特定建筑ID,无限定填0
  375. * @param type $type
  376. */
  377. static function DealHabitat_Build($type) {
  378. $ings = array();
  379. $info = new MissEventInfo(
  380. MissEventCode::Evn_Habitat_Build, "inc", 1, array($type));
  381. $list = self::SelectIngMissions($info);
  382. foreach ($list as $id) {
  383. $ings[] = self::PropelIngMission($id, $info);
  384. }
  385. self::DealToServer($ings);
  386. }
  387. /**
  388. * √拥有一个领地
  389. * / 拥有一个指定领地
  390. * / 拥有一个特定 等级领地
  391. * 参数一:特定栖息地类型,无限定填0
  392. * 参数二:特定等级,无限定填0
  393. * @param type $type 领地类型
  394. * @param type $level 领地等级
  395. */
  396. static function DealHabitat_Own($subId, $level) {
  397. $ings = array();
  398. $info = new MissEventInfo(
  399. MissEventCode::SEvn_Habitat_Own, "set", self::GetBuildingNum(INIT_HABITID, $subId, $level), array($subId, $level));
  400. $list = self::SelectIngMissions($info);
  401. foreach ($list as $id) {
  402. $ings[] = self::PropelIngMission($id, $info);
  403. }
  404. self::DealToServer($ings);
  405. }
  406. /**
  407. * 升级一个领地 / 升级一个指定领地
  408. * 参数一:特定建筑ID,无限定填0
  409. * 参数二:特定目标等级,无限定填0
  410. * @param type $type
  411. * @param type $level
  412. */
  413. static function DealHabitat_LevelUp($type, $level) {
  414. $ings = array();
  415. $info = new MissEventInfo(
  416. MissEventCode::Evn_Habitat_LevelUp, "inc", 1, array($type, $level));
  417. $list = self::SelectIngMissions($info);
  418. foreach ($list as $id) {
  419. $ings[] = self::PropelIngMission($id, $info);
  420. }
  421. self::DealToServer($ings);
  422. }
  423. /**
  424. * 收取一次金币操作
  425. * 【行为的计数 】
  426. * 参数一:特定领地类型,无限定填0
  427. * @param type $type
  428. */
  429. static function DealHabitat_CollectGold($type) {
  430. $ings = array();
  431. $info = new MissEventInfo(
  432. MissEventCode::Evn_Habitat_CollectGold, "inc", 1, array($type));
  433. $list = self::SelectIngMissions($info);
  434. foreach ($list as $id) {
  435. $ings[] = self::PropelIngMission($id, $info);
  436. }
  437. self::DealToServer($ings);
  438. }
  439. /**
  440. * 栖息地 金币收集累计
  441. * 【金币的计数 】
  442. * 参数一:特定领地类型,无限定填0
  443. * @param type $type
  444. * @param type $num
  445. */
  446. static function DealHabitat_CollectGold_S($type, $num) {
  447. $ings = array();
  448. $info = new MissEventInfo(
  449. MissEventCode::SEvn_Habitat_CollectGold, "add", $num, array($type));
  450. $list = self::SelectIngMissions($info);
  451. foreach ($list as $id) {
  452. $ings[] = self::PropelIngMission($id, $info);
  453. }
  454. self::DealToServer($ings);
  455. }
  456. /**
  457. * 建造一个农田
  458. * 参数一:特定建筑ID,无限定填0
  459. * @param type $type
  460. */
  461. static function DealFarm_Build($type) {
  462. $ings = array();
  463. $info = new MissEventInfo(
  464. MissEventCode::Evn_Farm_Build, "inc", 1, array($type));
  465. $list = self::SelectIngMissions($info);
  466. foreach ($list as $id) {
  467. $ings[] = self::PropelIngMission($id, $info);
  468. }
  469. self::DealToServer($ings);
  470. }
  471. /**
  472. * 拥有一个农田 /
  473. * 拥有一个指定农田 /
  474. * 拥有一个指定等级的农田
  475. * 参数一:特定农田类别,无限定填0
  476. * 参数二:特定等级,无限定填0
  477. * @param type $subId 农田类别
  478. * @param type $level 领地等级
  479. */
  480. static function DealFarm_Own($subId, $level) {
  481. $ings = array();
  482. $info = new MissEventInfo(
  483. MissEventCode::SEvn_Farm_Own, "set", self::GetBuildingNum(INIT_Farm, $subId, $level), array($subId, $level));
  484. $list = self::SelectIngMissions($info);
  485. foreach ($list as $id) {
  486. $ings[] = self::PropelIngMission($id, $info);
  487. }
  488. self::DealToServer($ings);
  489. }
  490. /**
  491. * 升级一个农田
  492. * 参数一:特定建筑,无限定填0
  493. * 参数二:特定目标等级,无限定填0
  494. * @param type $type
  495. * @param type $level
  496. */
  497. static function DealFarm_LevelUp($type, $level) {
  498. $ings = array();
  499. $info = new MissEventInfo(
  500. MissEventCode::Evn_Farm_LevelUp, "inc", 1, array($type, $level));
  501. $list = self::SelectIngMissions($info);
  502. foreach ($list as $id) {
  503. $ings[] = self::PropelIngMission($id, $info);
  504. }
  505. self::DealToServer($ings);
  506. }
  507. /**
  508. * 种植一次作物 / 种植一次指定作物
  509. * 参数一:特定作物类型,无限定填0
  510. * @param type $type
  511. */
  512. static function DealFarm_PlantFood($type) {
  513. $ings = array();
  514. $info = new MissEventInfo(
  515. MissEventCode::Evn_Farm_PlantFood, "inc", 1, array($type));
  516. $list = self::SelectIngMissions($info);
  517. foreach ($list as $id) {
  518. $ings[] = self::PropelIngMission($id, $info);
  519. }
  520. self::DealToServer($ings);
  521. }
  522. /**
  523. * 收获一次作物 / 收获一次指定作物
  524. * 【行为统计】
  525. * 参数一:特定作物类型,无限定填0
  526. * @param type $type
  527. * @param type $num
  528. */
  529. static function DealFarm_CollectFood($type) {
  530. $ings = array();
  531. $info = new MissEventInfo(
  532. MissEventCode::Evn_Farm_CollectFood, "inc", 1, array($type));
  533. $list = self::SelectIngMissions($info);
  534. foreach ($list as $id) {
  535. $ings[] = self::PropelIngMission($id, $info);
  536. }
  537. self::DealToServer($ings);
  538. }
  539. /**
  540. * 收获一次作物 / 收获一次指定作物
  541. * 【果实数量统计】
  542. * 参数一:特定作物类型,无限定填0
  543. * @param type $type
  544. * @param type $num
  545. */
  546. static function DealFarm_CollectFood_S($type, $num) {
  547. $ings = array();
  548. $info = new MissEventInfo(
  549. MissEventCode::SEvn_Farm_CollectFood, "add", $num, array($type));
  550. $list = self::SelectIngMissions($info);
  551. foreach ($list as $id) {
  552. $ings[] = self::PropelIngMission($id, $info);
  553. }
  554. self::DealToServer($ings);
  555. }
  556. /**
  557. * 建造一个建筑 / 建造一个指定建筑
  558. * 参数一:特定类型,无限定填0
  559. * @param type $type
  560. */
  561. static function DealBuild_Construct($type) {
  562. $ings = array();
  563. $info = new MissEventInfo(
  564. MissEventCode::Evn_Build_Construct, "inc", 1, array($type));
  565. $list = self::SelectIngMissions($info);
  566. foreach ($list as $id) {
  567. $ings[] = self::PropelIngMission($id, $info);
  568. }
  569. self::DealToServer($ings);
  570. }
  571. /**
  572. * 拥有一个建筑 / 拥有一个指定建筑 / 拥有指定等级的建筑
  573. * 参数一:特定建筑 一级大类 类型,无限定填0
  574. * 参数二:特定建筑 二级小类 类型,无限定填0
  575. * 参数二:特定等级,无限定填0
  576. * @param type $cabid
  577. * @param type $subId
  578. * @param type $level
  579. */
  580. static function DealBuild_Own($cabid, $subId, $level) {
  581. $ings = array();
  582. $info = new MissEventInfo(
  583. MissEventCode::SEvn_Build_Own, "set", self::GetBuildingNum($cabid, $subId, $level), array($cabid, $subId, $level));
  584. $list = self::SelectIngMissions($info);
  585. foreach ($list as $id) {
  586. $ings[] = self::PropelIngMission($id, $info);
  587. }
  588. self::DealToServer($ings);
  589. }
  590. /**
  591. * 升级一个建筑 / 升级一个指定建筑
  592. * 参数一:特定建筑ID,无限定填0
  593. * 参数二:特定目标等级,无限定填0
  594. * @param type $type
  595. * @param type $level
  596. */
  597. static function DealBuild_Levelup($type, $level) {
  598. $ings = array();
  599. $info = new MissEventInfo(
  600. MissEventCode::Evn_Build_LevelUp, "inc", 1, array($type, $level));
  601. $list = self::SelectIngMissions($info);
  602. foreach ($list as $id) {
  603. $ings[] = self::PropelIngMission($id, $info);
  604. }
  605. self::DealToServer($ings);
  606. }
  607. /**
  608. * 铲除 一个建筑 / 铲除一个指定建筑
  609. * 参数一:特定类型,无限定填0
  610. * @param type $type
  611. */
  612. static function DealBuild_Remove($type) {
  613. $ings = array();
  614. $info = new MissEventInfo(
  615. MissEventCode::Evn_Build_Remove, "inc", 1, array($type));
  616. $list = self::SelectIngMissions($info);
  617. foreach ($list as $id) {
  618. $ings[] = self::PropelIngMission($id, $info);
  619. }
  620. self::DealToServer($ings);
  621. }
  622. /**
  623. * 招募 一次
  624. * 参数一:特定神兽类型,无限定填0
  625. * @param type $type
  626. */
  627. static function DealBuild_PubEmploy($type) {
  628. $ings = array();
  629. $info = new MissEventInfo(
  630. MissEventCode::Evn_Build_PubEmploy, "inc", 1, array($type));
  631. $list = self::SelectIngMissions($info);
  632. foreach ($list as $id) {
  633. $ings[] = self::PropelIngMission($id, $info);
  634. }
  635. self::DealToServer($ings);
  636. }
  637. /**
  638. * 培育一次 / 培育出指定神兽一次 获得兽蛋
  639. * 参数一:特定兽蛋类型,无限定填0
  640. * @param type $type
  641. */
  642. static function DealBuild_Breed($type) {
  643. $ings = array();
  644. $info = new MissEventInfo(
  645. MissEventCode::Evn_Build_Breed, "inc", 1, array($type));
  646. $list = self::SelectIngMissions($info);
  647. foreach ($list as $id) {
  648. $ings[] = self::PropelIngMission($id, $info);
  649. }
  650. self::DealToServer($ings);
  651. }
  652. /**
  653. * 孵化
  654. * 参数一:特定兽蛋类型,无限定填0
  655. * @param type $type
  656. */
  657. static function DealBuild_EggHatch($type) {
  658. $ings = array();
  659. $info = new MissEventInfo(
  660. MissEventCode::Evn_Build_EggHatch, "inc", 1, array($type));
  661. $list = self::SelectIngMissions($info);
  662. foreach ($list as $id) {
  663. $ings[] = self::PropelIngMission($id, $info);
  664. }
  665. self::DealToServer($ings);
  666. }
  667. /**
  668. * 采矿场 打工一次
  669. * 参数一:特定工作神兽类型,无限定填0
  670. * @param type $type
  671. */
  672. static function DealBuild_QuarryWork($type) {
  673. $ings = array();
  674. $info = new MissEventInfo(
  675. MissEventCode::Evn_Build_QuarryWork, "inc", 1, array($type));
  676. $list = self::SelectIngMissions($info);
  677. foreach ($list as $id) {
  678. $ings[] = self::PropelIngMission($id, $info);
  679. }
  680. self::DealToServer($ings);
  681. }
  682. /**
  683. * 采矿场 结果收取一次
  684. * 参数一:特定工作神兽类型,无限定填0
  685. * @param type $type
  686. */
  687. static function DealBuild_QuarryResult($type) {
  688. $ings = array();
  689. $info = new MissEventInfo(
  690. MissEventCode::Evn_Build_QuarryResult, "inc", 1, array($type));
  691. $list = self::SelectIngMissions($info);
  692. foreach ($list as $id) {
  693. $ings[] = self::PropelIngMission($id, $info);
  694. }
  695. self::DealToServer($ings);
  696. }
  697. /**
  698. * 采矿场 结果收取一次
  699. * [累计道具的收取始数量]
  700. * 参数一:特定采矿成果道具ID, 无限定填0
  701. * @param type $type
  702. * @param type $num
  703. */
  704. static function DealBuild_QuarryResult_S($type, $num) {
  705. $ings = array();
  706. $info = new MissEventInfo(
  707. MissEventCode::SEvn_Build_QuarryResult, "add", $num, array($type));
  708. $list = self::SelectIngMissions($info);
  709. foreach ($list as $id) {
  710. $ings[] = self::PropelIngMission($id, $info);
  711. }
  712. self::DealToServer($ings);
  713. }
  714. /**
  715. * 加工厂 打工一次
  716. * 参数一:特定工作神兽类型,无限定填0
  717. * @param type $type
  718. */
  719. static function DealBuild_ProcessWork($type) {
  720. $ings = array();
  721. $info = new MissEventInfo(
  722. MissEventCode::Evn_Build_ProcessWork, "inc", 1, array($type));
  723. $list = self::SelectIngMissions($info);
  724. foreach ($list as $id) {
  725. $ings[] = self::PropelIngMission($id, $info);
  726. }
  727. self::DealToServer($ings);
  728. }
  729. /**
  730. * 采矿场 结果收取一次
  731. * 参数一:特定工作神兽类型,无限定填0
  732. * @param type $type
  733. */
  734. static function DealBuild_ProcessResult($type) {
  735. $ings = array();
  736. $info = new MissEventInfo(
  737. MissEventCode::Evn_Build_ProcessResult, "inc", 1, array($type));
  738. $list = self::SelectIngMissions($info);
  739. foreach ($list as $id) {
  740. $ings[] = self::PropelIngMission($id, $info);
  741. }
  742. self::DealToServer($ings);
  743. }
  744. /**
  745. * 加工厂 结果收取
  746. * [累计道具的收取始数量]
  747. * 参数一:特定成果道具ID, 无限定填0
  748. * @param type $type
  749. * @param type $num
  750. */
  751. static function DealBuild_ProcessResult_S($type, $num) {
  752. $ings = array();
  753. $info = new MissEventInfo(
  754. MissEventCode::SEvn_Build_ProcessResult, "add", $num, array($type));
  755. $list = self::SelectIngMissions($info);
  756. foreach ($list as $id) {
  757. $ings[] = self::PropelIngMission($id, $info);
  758. }
  759. self::DealToServer($ings);
  760. }
  761. /**
  762. * 收取建造的建筑的经验值
  763. * 参数一:特定建筑ID,无限定填0
  764. * 计数:要求数目
  765. * @param type $type
  766. */
  767. static function DealBuild_CollectExp($type) {
  768. $ings = array();
  769. $info = new MissEventInfo(
  770. MissEventCode::Evn_Build_CollectExp, "inc", 1, array($type));
  771. $list = self::SelectIngMissions($info);
  772. foreach ($list as $id) {
  773. $ings[] = self::PropelIngMission($id, $info);
  774. }
  775. self::DealToServer($ings);
  776. }
  777. /**
  778. * 酒馆配置上阵神兽
  779. * 计数:配置次数
  780. */
  781. static function DealBuild_PubTeamConfig() {
  782. $ings = array();
  783. $info = new MissEventInfo(
  784. MissEventCode::Evn_Build_PubTeamConfig, "inc", 1);
  785. $list = self::SelectIngMissions($info);
  786. foreach ($list as $id) {
  787. $ings[] = self::PropelIngMission($id, $info);
  788. }
  789. self::DealToServer($ings);
  790. }
  791. ################################ 神兽 #######################################################################
  792. /**
  793. * 拥有一只神兽 / 拥有一只指定神兽
  794. * 参数一:特定神兽类型,无限定填0
  795. * 参数二:特定等级,无限定填0
  796. * 参数三:特定星级,无限定填0
  797. * @param type $type
  798. * @param type $level
  799. */
  800. static function DealPet_Own($type, $level, $star) {
  801. $ings = array();
  802. $info = new MissEventInfo(
  803. MissEventCode::SEvn_Pet, "set", self::GetPetNum($type, $level, $star), array($type, $level, $star));
  804. $list = self::SelectIngMissions($info);
  805. foreach ($list as $id) {
  806. $ings[] = self::PropelIngMission($id, $info);
  807. }
  808. self::DealToServer($ings);
  809. }
  810. /**
  811. * 喂养一次神兽 / 喂养一次指定神兽
  812. * 参数一:特定神兽类型,无限定填0
  813. * @param type $type
  814. */
  815. static function DealPet_Feed($type) {
  816. $ings = array();
  817. $info = new MissEventInfo(
  818. MissEventCode::Evn_Pet_Feed, "inc", 1, array($type));
  819. $list = self::SelectIngMissions($info);
  820. foreach ($list as $id) {
  821. $ings[] = self::PropelIngMission($id, $info);
  822. }
  823. self::DealToServer($ings);
  824. }
  825. /**
  826. * 升级一次神兽 / 升级一次指定神兽
  827. * 参数一:特定神兽类型,无限定填0
  828. * 参数二:特定等级,无限定填0
  829. * @param type $level
  830. * @param type $type
  831. */
  832. static function DealPet_LevelUp($type, $level) {
  833. $ings = array();
  834. $info = new MissEventInfo(
  835. MissEventCode::Evn_Pet_LevelUp, "inc", 1, array($type, $level));
  836. $list = self::SelectIngMissions($info);
  837. foreach ($list as $id) {
  838. $ings[] = self::PropelIngMission($id, $info);
  839. }
  840. self::DealToServer($ings);
  841. }
  842. /**
  843. * 升级技能一次神兽 / 升级一次指定神兽 的技能
  844. * 参数一:特定神兽类型,无限定填0
  845. * 参数二:特定技能ID,无限定填0
  846. * 参数三:特定技能等级,无限定填0
  847. * @param type $level
  848. * @param type $type
  849. */
  850. static function DealPet_Skill($type, $skill, $skillLevel) {
  851. $ings = array();
  852. $info = new MissEventInfo(
  853. MissEventCode::Evn_Pet_Skill, "inc", 1, array($type, $skill, $skillLevel));
  854. $list = self::SelectIngMissions($info);
  855. foreach ($list as $id) {
  856. $ings[] = self::PropelIngMission($id, $info);
  857. }
  858. self::DealToServer($ings);
  859. }
  860. /**
  861. * 升星一次神兽 / 升星一次指定神兽
  862. * 参数一:特定神兽类型,无限定填0
  863. * 参数二:特定星级,无限定填0
  864. * @param type $starlv
  865. * @param type $type
  866. */
  867. static function DealPet_Star($type, $starlv) {
  868. $ings = array();
  869. $info = new MissEventInfo(
  870. MissEventCode::Evn_Pet_Star, "inc", 1, array($type, $starlv));
  871. $list = self::SelectIngMissions($info);
  872. foreach ($list as $id) {
  873. $ings[] = self::PropelIngMission($id, $info);
  874. }
  875. self::DealToServer($ings);
  876. }
  877. // --------------------- 探索任务卡相关 ------------------------
  878. /**
  879. * 占领一块领地 / 占领一块指定领地
  880. * 参数一:特定领地类型,无限定填0
  881. * @param type $gridtype
  882. */
  883. static function DealExplore_GridCaptureSucced($gridtype) {
  884. $ings = array();
  885. $info = new MissEventInfo(
  886. MissEventCode::Evn_Explore_GridCaptureSucced, "inc", 1, array($gridtype));
  887. $list = self::SelectIngMissions($info);
  888. foreach ($list as $id) {
  889. $ings[] = self::PropelIngMission($id, $info);
  890. }
  891. self::DealToServer($ings);
  892. }
  893. /**
  894. * 进行一次占领(不考虑结果)
  895. * 参数一:特定领地类型,无限定填0
  896. * @param type $gridtype
  897. */
  898. static function DealExplore_GridCapture($gridtype) {
  899. $ings = array();
  900. $info = new MissEventInfo(
  901. MissEventCode::Evn_Explore_GridCapture, "inc", 1, array($gridtype));
  902. $list = self::SelectIngMissions($info);
  903. foreach ($list as $id) {
  904. $ings[] = self::PropelIngMission($id, $info);
  905. }
  906. self::DealToServer($ings);
  907. }
  908. /**
  909. * 拥有N块领地 / 拥有N块指定领地
  910. * 参数一:特定领地类型,无限定填0
  911. * @param type $gridtype
  912. */
  913. static function DealExplore_GridOwn($gridtype) {
  914. $ings = array();
  915. $info = new MissEventInfo(
  916. MissEventCode::SEvn_Explore_GridOwn, "set", self::GetExlporeGridNum($gridtype), array($gridtype));
  917. $list = self::SelectIngMissions($info);
  918. foreach ($list as $id) {
  919. $ings[] = self::PropelIngMission($id, $info);
  920. }
  921. self::DealToServer($ings);
  922. }
  923. /**
  924. * 与NPC交谈处理流程
  925. * @param type $mapId
  926. * @param type $posX
  927. * @param type $posY
  928. * @param type $npcId
  929. */
  930. static function dealTalkToMissNpc($mapId, $posX, $posY, $npcId) {
  931. $ings = array();
  932. $info = new MissEventInfo(
  933. MissEventCode::Evn_Explore_TalkToMissNpc, "inc", 1, array($mapId, $posX . "_" . $posY));
  934. $list = self::SelectIngMissions($info);
  935. foreach ($list as $id) {
  936. $ings[] = self::PropelIngMission($id, $info);
  937. }
  938. self::DealToServer($ings);
  939. }
  940. /**
  941. * 与NPC战斗处理流程
  942. * @param type $mapId
  943. * @param type $posX
  944. * @param type $posY
  945. * @param type $npcId
  946. */
  947. static function dealFightToMissNpc($mapId, $posX, $posY, $npcId) {
  948. $ings = array();
  949. $info = new MissEventInfo(
  950. MissEventCode::Evn_Explore_FightToMissNpc, "inc", 1, array($mapId, $posX . "_" . $posY));
  951. $list = self::SelectIngMissions($info);
  952. foreach ($list as $id) {
  953. $ings[] = self::PropelIngMission($id, $info);
  954. }
  955. self::DealToServer($ings);
  956. }
  957. /**
  958. * 进入一次探索地图
  959. */
  960. static function DealExplore_EnterMap($map) {
  961. $ings = array();
  962. $info = new MissEventInfo(
  963. MissEventCode::Evn_Explore_EnterMap, "inc", 1, array($map));
  964. $list = self::SelectIngMissions($info);
  965. foreach ($list as $id) {
  966. $ings[] = self::PropelIngMission($id, $info);
  967. }
  968. self::DealToServer($ings);
  969. }
  970. /**
  971. * 队伍调动
  972. */
  973. static function DealExplore_ArmyDeploy() {
  974. $ings = array();
  975. $info = new MissEventInfo(
  976. MissEventCode::Evn_Explore_ArmyDeploy, "inc", 1);
  977. $list = self::SelectIngMissions($info);
  978. foreach ($list as $id) {
  979. $ings[] = self::PropelIngMission($id, $info);
  980. }
  981. self::DealToServer($ings);
  982. }
  983. // ----------------------------------------------------------------------------------------
  984. /**
  985. * 加速一次 / 加速一次指定操作
  986. * 参数一:加速类型(建造 /种植 /孵化/铲除障碍物),无限定填0
  987. * @param type $speedType build / plant / hatch / obstacle
  988. */
  989. static function Deal_SpeedUp($speedType) {
  990. $ings = array();
  991. $info = new MissEventInfo(
  992. MissEventCode::Evn_SpeedUp, "inc", 1, array($speedType));
  993. $list = self::SelectIngMissions($info);
  994. foreach ($list as $id) {
  995. $ings[] = self::PropelIngMission($id, $info);
  996. }
  997. self::DealToServer($ings);
  998. }
  999. /**
  1000. * 岛屿解锁
  1001. * 计数:要求数目
  1002. */
  1003. static function Deal_MapIsLand() {
  1004. $ings = array();
  1005. $info = new MissEventInfo(
  1006. MissEventCode::Evn_MapIsLand, "inc", 1);
  1007. $list = self::SelectIngMissions($info);
  1008. foreach ($list as $id) {
  1009. $ings[] = self::PropelIngMission($id, $info);
  1010. }
  1011. self::DealToServer($ings);
  1012. }
  1013. /**
  1014. * 岛屿阴影解锁
  1015. * 计数:要求数目
  1016. */
  1017. static function Deal_MapShadow() {
  1018. $ings = array();
  1019. $info = new MissEventInfo(
  1020. MissEventCode::Evn_MapShadow, "inc", 1);
  1021. $list = self::SelectIngMissions($info);
  1022. foreach ($list as $id) {
  1023. $ings[] = self::PropelIngMission($id, $info);
  1024. }
  1025. self::DealToServer($ings);
  1026. }
  1027. /**
  1028. * 新手引导
  1029. * @param type $step = 引导步骤
  1030. */
  1031. static function DealGuideStep($step) {
  1032. $ings = array();
  1033. $info = new MissEventInfo(
  1034. MissEventCode::Evn_Guide, "set", $step, array($step));
  1035. $list = self::SelectIngMissions($info);
  1036. foreach ($list as $id) {
  1037. $ings[] = self::PropelIngMission($id, $info);
  1038. }
  1039. self::DealToServer($ings);
  1040. }
  1041. //----------------------------------
  1042. // ---------------------------状态辅助方法--------------------------------
  1043. /**
  1044. * 获取当前建筑数量
  1045. * @param type $cabid = 建筑一级大类
  1046. * @param type $subId = 建筑二级分类
  1047. * @param type $level = 建筑等级
  1048. * @return int
  1049. */
  1050. static function GetBuildingNum($cabid = 0, $subId = 0, $level = 0) {
  1051. $num = 0;
  1052. $mapInfo = usrInfo()->mapInfo(false);
  1053. foreach ($mapInfo->items as $key => $bd) {
  1054. $buildMo = dataCenter()->getItemBuildData($bd->buildid);
  1055. if ($buildMo->level >= $level) {
  1056. if (($cabid == 0 || ($cabid != 0 && $buildMo->categoryId == $cabid)) &&
  1057. ($subId == 0 || ($subId != 0 && $buildMo->subcategoryId == $subId))) {
  1058. $num++;
  1059. }
  1060. }
  1061. }
  1062. return $num;
  1063. }
  1064. /**
  1065. * 获取当前英雄数量
  1066. * @return int
  1067. */
  1068. static function GetPetNum($type = 0, $level = 0, $star = 0) {
  1069. $num = 0;
  1070. $mapInfo = usrInfo()->mapInfo(false);
  1071. foreach ($mapInfo->godpets as $iid => $hero) {
  1072. if ($hero->type == $type || $hero->level == $level || $hero->currStar == $star) {
  1073. $num++;
  1074. }
  1075. }
  1076. return $num;
  1077. }
  1078. /**
  1079. * 获得探索中,拥有某个类型得领地数量
  1080. * @param type $type
  1081. * @return int
  1082. */
  1083. static function GetExlporeGridNum($type = 0) {
  1084. $num = 0;
  1085. return $num;
  1086. }
  1087. }