TaskDeal.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. <?php
  2. namespace loyalsoft;
  3. /*
  4. * To change this license header, choose License Headers in Project Properties.
  5. * To change this template file, choose Tools | Templates
  6. * and open the template in the editor.
  7. */
  8. include_once __DIR__ . '/../../main.php';
  9. taskDeal();
  10. //textInterface();
  11. function taskDeal() {
  12. $db = daoInst();
  13. $zoneid = 1;
  14. $index = 0;
  15. $size = 20;
  16. $page = 0;
  17. $userUidArr = array();
  18. while (true) {
  19. $page = $index * $size;
  20. $sql = "select * from tab_rolename WHERE zoneid= $zoneid limit %d,%d";
  21. $queryStr = sprintf($sql, $page, $size);
  22. $result = $db->query($queryStr)->fetchAll();
  23. if(count($result) == 0){
  24. break;
  25. }
  26. foreach ($result as $arr) {
  27. foreach ($arr as $k=>$item) {
  28. if($k == "userID" && !in_array($item, $userUidArr)){
  29. $userUidArr[] = $item;
  30. }
  31. }
  32. }
  33. // if($index >= 10){//临时代码以后删除的
  34. // break;
  35. // }
  36. $index += 1;
  37. }
  38. startDeal($userUidArr);
  39. }
  40. /**
  41. * 测试接口 可以自己添加uid测试
  42. */
  43. function textInterface() {
  44. $userUidArr = array();
  45. $userUidArr[] = "6347a46975d0a43de55f0cec";
  46. //$userUidArr[] = "EA74E58DCEB076ACC2D824684499CDA2";
  47. startDeal($userUidArr);
  48. }
  49. /**
  50. * 开始处理玩家任务信息
  51. * @param type $userUidArr
  52. */
  53. function startDeal($userUidArr) {
  54. $mem = gMem();
  55. foreach ($userUidArr as $userUid) {
  56. $userRedisKey = MemKey_User::Info_hash(1, $userUid);
  57. if(!$mem->exists($userRedisKey)){
  58. //$sFname = "savData/" ."noRedisExistUserUid.txt";
  59. $sFname = isOnline("otherData", "noRedisExistUserUid.txt");
  60. //$sFname = "../../../../../../ylsjTaskData/otherData/"."noRedisExistUserUid.txt";
  61. $fd = fopen($sFname, 'a');
  62. fwrite($fd, "\r\n" . $userRedisKey);
  63. fclose($fd);
  64. continue;
  65. }
  66. if(!$mem->hexists($userRedisKey,'privateState')){
  67. //$sFname = "savData/" ."noPrivateState.txt";
  68. //$sFname = "../../../../../../ylsjTaskData/otherData/"."noPrivateState.txt";
  69. $sFname = isOnline("otherData", "noPrivateState.txt");
  70. $fd = fopen($sFname, 'a');
  71. fwrite($fd, "\r\n" . $userRedisKey);
  72. fclose($fd);
  73. continue;
  74. }
  75. if(!$mem->hexists($userRedisKey,'store')){
  76. //$sFname = "savData/" ."noStore.txt";
  77. //$sFname = "../../../../../../ylsjTaskData/otherData/"."noStore.txt";
  78. $sFname = isOnline("otherData", "noStore.txt");
  79. $fd = fopen($sFname, 'a');
  80. fwrite($fd, "\r\n" . $userRedisKey);
  81. fclose($fd);
  82. continue;
  83. }
  84. if(!$mem->hexists($userRedisKey,'heros')){//
  85. //$sFname = "savData/" ."noHeros.txt";
  86. //$sFname = "../../../../../../ylsjTaskData/otherData/"."noHeros.txt";
  87. $sFname = isOnline("otherData", "noHeros.txt");
  88. $fd = fopen($sFname, 'a');
  89. fwrite($fd, "\r\n" . $userRedisKey);
  90. fclose($fd);
  91. continue;
  92. }
  93. $privateState = $mem->hget($userRedisKey, 'privateState');
  94. if(!StlUtil::dictHasProperty($privateState,'taskJianRong_index')){
  95. $privateState->taskJianRong_index = 0;
  96. }
  97. $startIndex = $privateState->taskJianRong_index;
  98. if($startIndex > 0){
  99. continue;
  100. }
  101. $dic = GameConfig::taskJianRong();//任务兼容配置表
  102. $arr = (array)$dic;
  103. ksort($arr);
  104. $store = $mem->hget($userRedisKey, 'store');
  105. $herosdic = $mem->hget($userRedisKey,'heros');
  106. $base = $mem->hget($userRedisKey, 'baseInfo');
  107. $taskcards = $store->taskcards;
  108. //处理前玩家数据保存
  109. taskSav_start($userRedisKey, $store, $privateState,$herosdic);
  110. foreach ($arr as $index =>$val) {
  111. if($index <= $startIndex){
  112. continue;
  113. }
  114. $cmd = $val->cmd1;
  115. $tempUId = 999999;
  116. $tag = true;
  117. switch ($cmd) {
  118. case 100://该任务存在即重置,不存在就算了 参数:任务id
  119. $tag = false;
  120. // $str = substr($base->name,0,2);
  121. // if($str == "No."){
  122. // $tag = true;
  123. // }
  124. //
  125. break;
  126. case 200://多个武器拥有其中一个即不需要重置,都没有要重置 参数:多个武器id,号分开
  127. $list = explode(',', $val->paras1);
  128. $tag = true;
  129. $equip = $store->equipment;
  130. foreach ($equip as $eUid => $eDic) {
  131. if(in_array($eDic->typeId,$list)){
  132. $tag = false;
  133. break;
  134. }
  135. }
  136. break;
  137. case 201://多个武器任一一个等级到10级即不重置,都没有则重置
  138. $list = explode(',', $val->paras1);
  139. $lv = $val->parasCtx1;
  140. $equip = $store->equipment;
  141. foreach ($list as $eTypeId) {
  142. foreach ($equip as $eUid => $eDic) {
  143. if($eTypeId == $eDic->typeId && $eDic->level >= $lv){
  144. $tag = false;
  145. break 2;
  146. }
  147. }
  148. }
  149. break;
  150. case 202://多个武器任一一个突破到1星即不重置,都没有则重置
  151. $list = explode(',', $val->paras1);
  152. $starLv = $val->parasCtx1;
  153. $equip = $store->equipment;
  154. foreach ($list as $eTypeId) {
  155. foreach ($equip as $eUid => $eDic) {
  156. if($eTypeId == $eDic->typeId && $eDic->starLevel >= $starLv){
  157. $tag = false;
  158. break 2;
  159. }
  160. }
  161. }
  162. break;
  163. case 300://唤灵师等级升到X级,不满足则重置***
  164. $lv = $val->paras1;
  165. $heros = $herosdic->collectHeros;
  166. foreach ($heros as $heroUid => $v) {
  167. if($v->level >= $lv){
  168. $tag = false;
  169. break;
  170. }
  171. }
  172. break;
  173. case 301://唤灵师有过突破,不满足则重置
  174. $sLv = $val->paras1;
  175. $heros = $herosdic->collectHeros;
  176. foreach ($heros as $heroUid => $v) {
  177. if($v->curStar >= $sLv){
  178. $tag = false;
  179. break;
  180. }
  181. }
  182. break;
  183. case 302://是否拥有某言灵,有其中一个则不重置,全没有则重置
  184. $list = explode(',', $val->paras1);
  185. $tag = true;
  186. $yanling = $store->yanling;
  187. foreach ($yanling as $eUid => $eDic) {
  188. if(in_array($eDic->typeId,$list)){
  189. $tag = false;
  190. break;
  191. }
  192. }
  193. break;
  194. case 303://items 背包里是否有某道具(是否获得召唤卡)
  195. $items = $store->items;
  196. $itemId = $val->paras1;
  197. if(StlUtil::dictHasProperty($items, $itemId)){
  198. $tag = false;
  199. }
  200. break;
  201. case 304://任一言灵等级到20级,都没有则重置
  202. $lv = $val->paras1;
  203. $yanling = $store->yanling;
  204. foreach ($yanling as $eUid => $eDic) {
  205. if($eDic->level >= $lv){
  206. $tag = false;
  207. break;
  208. }
  209. }
  210. break;
  211. case 305://任一言灵突破到1星,都没有则重置
  212. $slv = $val->paras1;
  213. $yanling = $store->yanling;
  214. foreach ($yanling as $eUid => $eDic) {
  215. if($eDic->starLv >= $slv){
  216. $tag = false;
  217. break;
  218. }
  219. }
  220. break;
  221. default:
  222. break;
  223. }
  224. $privateState->taskJianRong_index = $index;
  225. if($tag){
  226. $k = 1;
  227. $tempUId = $privateState->taskCardTracing->$k;
  228. if(StlUtil::dictHasProperty($taskcards,$tempUId)){
  229. $task = new Ins_TaskCard($val->taskId_Modified);
  230. $task->uid = $tempUId;
  231. $task->state = 2;
  232. $taskcards->$tempUId = $task;
  233. //福利--给50w金币
  234. $base->gold += 500000;
  235. if($cmd == 200 || $cmd == 201 || $cmd == 202){//给1010022武器
  236. $cid = $privateState->currentId++;
  237. $equip = new Ins_Weapon();
  238. $equip->typeId = 1010022;
  239. $store->equipment->$cid = $equip;
  240. }
  241. if($cmd == 301){
  242. $prizeitems = "2010001,10;3255001,3;3261001,15";
  243. $list = explode(';', $prizeitems);
  244. foreach ($list as $s) {
  245. $slist = explode(',', $s);
  246. $itemId = $slist[0];
  247. $itemNum = $slist[1];
  248. if(StlUtil::dictHasProperty($store->items,$itemId) ){
  249. $store->items->$itemId += $itemNum;
  250. } else {
  251. $store->items->$itemId = $itemNum;
  252. }
  253. }
  254. }
  255. }
  256. break;
  257. }
  258. }
  259. $store->taskcards = $taskcards;
  260. taskSav_end($userRedisKey, $store, $privateState,$base);
  261. //玩家数据回存
  262. gMem()->hset($userRedisKey, 'store', $store);
  263. gMem()->hset($userRedisKey, 'privateState', $privateState);
  264. gMem()->hset($userRedisKey, 'baseInfo', $base);
  265. }
  266. }
  267. /**
  268. * 保存数据地址 ----自己去方法里面设置 true或是false
  269. * @param type $g
  270. * @param type $name
  271. * @return string
  272. */
  273. function isOnline($g,$name) {
  274. $Online = false;
  275. $sFname = $name;
  276. if($Online){
  277. if($g == "start"){
  278. $sFname = "../../../../../../ylsjTaskData/sav_start/".$name;
  279. } elseif ($g == "end") {
  280. $sFname = "../../../../../../ylsjTaskData/sav_last/".$name;
  281. } else {
  282. $sFname = "../../../../../../ylsjTaskData/otherData/".$name;
  283. }
  284. } else {
  285. $sFname = "savData/". $name;
  286. }
  287. return $sFname;
  288. }
  289. /**
  290. * 处理完后数据回存
  291. * @param type $userUid
  292. * @param type $store
  293. * @param type $privateState
  294. * @param type $hero
  295. */
  296. function taskSav_start($userUid,$store,$privateState,$hero) {
  297. $name = isOnline("start", $userUid.".txt");
  298. $fd = fopen($name, 'a');
  299. fwrite($fd, json_encode($store)."\r\n");
  300. fwrite($fd, "\r\n" . json_encode($privateState)."\r\n");
  301. fwrite($fd, "\r\n" . json_encode($hero)."\r\n");
  302. fclose($fd);
  303. }
  304. function taskSav_end($userUid,$store,$privateState,$base) {
  305. //$name ="savData/". "$userUid"."-last.txt";
  306. //$name = "../../../../../../ylsjTaskData/sav_last/"."$userUid"."-last.txt";
  307. $name = isOnline("end", $userUid."-last.txt");
  308. $fd = fopen($name, 'a');
  309. fwrite($fd,"\r\n" . json_encode($store)."\r\n");
  310. fwrite($fd, "\r\n" . json_encode($privateState)."\r\n");
  311. fwrite($fd, "\r\n" . json_encode($base)."\r\n");
  312. fclose($fd);
  313. }