PgSimController.php 47 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345
  1. <?php
  2. namespace App\Http\Controllers\Game;
  3. use App\Facade\TableName;
  4. use App\Game\Config\PgSimData;
  5. use App\Game\GameCard;
  6. use App\Game\GlobalUserInfo;
  7. use App\Game\LogGamecardClick;
  8. use App\Game\Services\OuroGameService;
  9. use App\Game\Services\PgSoftService;
  10. use App\Game\Services\PlatformService;
  11. use App\Game\Services\ServerService;
  12. use App\Models\AccountsInfo;
  13. use App\Notification\TelegramBot;
  14. use App\Util;
  15. use App\Utility\SetNXLock;
  16. use Illuminate\Http\Request;
  17. use Illuminate\Routing\Controller;
  18. use Illuminate\Support\Facades\Crypt;
  19. use Illuminate\Support\Facades\DB;
  20. use Illuminate\Support\Facades\Redis;
  21. class PgSimController extends Controller
  22. {
  23. public function __construct()
  24. {
  25. }
  26. public function gameLunch(Request $request)
  27. {
  28. $gid = $request->input('gid');
  29. $level = $request->input('level',0);
  30. $user = $request->user();
  31. $userid = $user->UserID;
  32. GameCard::$enableStateCheck = false;
  33. $gamecard = GameCard::where('gid', $gid)->first();
  34. $in_gameid = OuroGameService::getUserInGame($userid, $user->GlobalUID);
  35. if ($in_gameid != intval($gamecard->id)) {
  36. Util::WriteLog('24680game', compact('in_gameid', 'gamecard', 'user'));
  37. // die;
  38. }
  39. $gamecard = GameCard::where('gid', $gid)->where('brand', 'PGSoft')->first();
  40. $gamecard->increment('play_num', 1);
  41. //$this->logGameClick($gamecard->id,$userid);
  42. LogGamecardClick::recordClick($gamecard->id, $userid);
  43. $lang = GlobalUserInfo::getLocale();
  44. $supportLang = ['en', 'da', 'de', 'es', 'fi', 'fr', 'id', 'it', 'ja', 'ko', 'nl', 'no', 'pl', 'pt', 'ro', 'ru', 'sv', 'th', 'tr', 'vi', 'zh', 'my'];
  45. if (!in_array($lang, $supportLang)) {
  46. $lang = 'en';
  47. }
  48. $configurls=json_decode(env('CONFIG_GAMES'),true);
  49. $configurl=$configurls['pg'];
  50. $cdnserver = 'https://'.$configurl['source'];
  51. $sign = GlobalUserInfo::genGuuidSign($user);
  52. $or = $this->convertString($configurl['source']);
  53. $api = $configurl['api'];
  54. if($userid==80000140){
  55. $api="api.pgn-nmu2nd.com";
  56. }
  57. // $api = $this->convertString($this->GetApiSite());
  58. // $api = $this->convertString('api.pgn-nmu2nd.com');
  59. $params = ['l' => $lang, 'ot' => $sign, 'btt' => $level>0?$level+2:1, 't' => $user->GlobalUID, 'or' => $or, 'api' => $api,'__hv'=>'2fMEQCIFLydRxh8H68maL+JBCLPYwNvVYnfrj2F2sz6vZlvN8RAiBwtO1MPOn3EEGrB37KWtvUkTvvwOE6pUJneC1YekbBjw=='];
  60. $url = $cdnserver . "/$gid/index.html?" . http_build_query($params);
  61. // https://static2.pgn-nmu2nd.com/57/index.html?l=zh&ot=&btt=1&t=917c74999c-b53b-eb1a-0004478930&or=static2.pgn-nmu2nd.com&api=api.pgn-nmu2nd.com
  62. echo "<script>
  63. parent.postMessage({cmd:\"closeLoading\"},\"*\");
  64. location.href='$url';
  65. </script>";
  66. return "";
  67. }
  68. public function leaveOrg(Request $request){
  69. $UserID = $request->UserID;
  70. $api=$this->GetApiSite();
  71. try {
  72. file_get_contents("https://$api/game-api/000/v2/removePlayer/Get?UserID=$UserID");
  73. }catch (\Exception $e){
  74. }
  75. DB::connection('write')->table('QPTreasureDB.dbo.GameScoreLocker')
  76. ->where('UserID', $UserID)
  77. ->delete();
  78. return '<script>
  79. if(window.parent&&window.parent!=window){
  80. window.parent.postMessage("backhome","*")
  81. }else {
  82. document.location = "game://a=1&b=2";
  83. }
  84. </script>';
  85. }
  86. public function gameLunchOrg(Request $request)
  87. {
  88. if(!$request->isSecure()){
  89. return redirect(env('APP_URL'). $_SERVER['REQUEST_URI']);
  90. }
  91. $gid = $request->input('gid');
  92. $level=$request->input('level',0);
  93. $lang=$request->input('lang','pu');
  94. $lang=['pu'=>'pt','en'=>'en','sp'=>'es','ur'=>'en'][$lang]??$lang;
  95. $userid = $request->UserID;
  96. $GlobalUID = 'a1b1c1-b53b-'.ServerService::GetLocalSign().'-' . $userid;
  97. if($userid>10000000&&$userid<20000000){
  98. $GlobalUID='a1b1c1-b53b-eb1a-'.$userid;
  99. }
  100. GameCard::$enableStateCheck = false;
  101. // $gamecard = GameCard::where('gid', $gid)->first();
  102. // $in_gameid = OuroGameService::getUserInGame($userid, $GlobalUID);
  103. // if ($in_gameid != intval($gamecard->id)) {
  104. // Util::WriteLog('24680game', compact('in_gameid', 'gamecard', 'GlobalUID'));
  105. // die;
  106. // }
  107. // $gamecard = GameCard::where('gid', $gid)->where('brand', 'PGSoft')->first();
  108. // $gamecard->increment('play_num', 1);
  109. //$this->logGameClick($gamecard->id,$userid);
  110. // LogGamecardClick::recordClick($gamecard->id, $userid);
  111. // $lang = GlobalUserInfo::getLocale();
  112. $supportLang = ['en', 'da', 'de', 'es', 'fi', 'fr', 'id', 'it', 'ja', 'ko', 'nl', 'no', 'pl', 'pt', 'ro', 'ru', 'sv', 'th', 'tr', 'vi', 'zh', 'my'];
  113. if (!in_array($lang, $supportLang)) {
  114. $lang = 'en';
  115. }
  116. $cdnserver = 'https://static4.pgn-nmu2nd.com';
  117. $LogonPass='123';
  118. $sign = GlobalUserInfo::genGuuidSign((object)compact('GlobalUID','LogonPass'));
  119. $or = $this->convertString('static4.pgn-nmu2nd.com');
  120. $api = $this->GetApiSite($GlobalUID);//$this->convertString($this->GetApiSite());
  121. // $api = $this->convertString('api.pgn-nmu2nd.com');
  122. $params = ['l' => $lang, 'ot' => $sign, 'btt' => $level>0?$level+2:1, 't' => $GlobalUID, 'or' => $or, 'api' => $api,'_tt'=>time(),'__hv'=>'2fMEQCIFLydRxh8H68maL+JBCLPYwNvVYnfrj2F2sz6vZlvN8RAiBwtO1MPOn3EEGrB37KWtvUkTvvwOE6pUJneC1YekbBjw=='];
  123. $url = $cdnserver . "/$gid/index.html?" . http_build_query($params);
  124. // https://static2.pgn-nmu2nd.com/57/index.html?l=zh&ot=&btt=1&t=917c74999c-b53b-eb1a-0004478930&or=static2.pgn-nmu2nd.com&api=api.pgn-nmu2nd.com
  125. // dd($url);
  126. $trans="rotated-iframe-container";
  127. $userAgent = $_SERVER['HTTP_USER_AGENT'];
  128. if(strpos($userAgent,"iPhone") || strpos($userAgent,"iPad") || strpos($userAgent,"iPod")){
  129. }else{
  130. if($request->input('norot',0)==1){
  131. $trans="no-rotated-iframe-container";
  132. }
  133. }
  134. $leaveUrl=$request->getSchemeAndHttpHost().'/api/pgsoft/leave?UserID='.$userid;
  135. echo '<!DOCTYPE html>
  136. <html lang="en">
  137. <head>
  138. <meta charset="UTF-8">
  139. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  140. <title>PGSoft</title>
  141. <style>
  142. body, html {
  143. margin: 0;
  144. padding: 0;
  145. background: #000;
  146. height: 100vh;
  147. overflow: hidden;
  148. -webkit-overflow-scrolling: touch; /* 启用惯性滚动 */
  149. }
  150. .rotated-iframe-container {
  151. width: 100vh; /* 旋转后高度变为宽度 */
  152. height: 100vw; /* 旋转后宽度变为高度 */
  153. transform: rotate(-90deg);
  154. transform-origin: top right;
  155. position: absolute;
  156. top: 0;
  157. right: 100%;
  158. overflow: hidden;
  159. }
  160. .no-rotated-iframe-container {
  161. width: 100vw; /* 旋转后高度变为宽度 */
  162. height: 100vh; /* 旋转后宽度变为高度 */
  163. position: absolute;
  164. top: 0;
  165. }
  166. .rotated-iframe {
  167. width: 100%;
  168. height: 100%;
  169. transform-origin: top right;
  170. }
  171. </style>
  172. </head>
  173. <body>
  174. <script>
  175. document.addEventListener("touchstart", (e) => {
  176. // 确保滑动事件生效
  177. }, { passive: true });
  178. document.addEventListener("touchmove", (e) => {
  179. // 确保惯性滚动生效
  180. }, { passive: true });
  181. window.addEventListener("message", ()=>{
  182. var xhr = new XMLHttpRequest();
  183. var url = "'.$leaveUrl.'"; // 这里替换成你实际要访问的 URL
  184. console.log(url);
  185. xhr.open("GET", url, true);
  186. xhr.send();
  187. setTimeout(()=>{
  188. if(window.parent&&window.parent!=window){
  189. window.parent.postMessage("backhome","*")
  190. }else {
  191. document.location = "game://a=1&b=2";
  192. }
  193. },500)
  194. // document.body.innerHTML=`<span style="color:#fff">${url}</span>`;
  195. })
  196. </script>
  197. <div class="'.$trans.'">
  198. <!-- 嵌入的 iframe -->
  199. <iframe class="rotated-iframe" frameborder="0" src="'.$url.'"></iframe>
  200. </div>
  201. </body>
  202. </html>';
  203. return "";
  204. }
  205. private function convertString($input)
  206. {
  207. return "13" . str_rot13($input);
  208. }
  209. private function log(Request $request, $addLog = "")
  210. {
  211. $post = $request->all();
  212. Util::WriteLog('pgsim', $post);
  213. if (!empty($addLog)) Util::WriteLog('pgsim', $addLog);
  214. }
  215. public function GetByResourcesTypeIds(Request $request)
  216. {
  217. $this->log($request);
  218. return PgSimData::$typeids;
  219. }
  220. public function BetSummary(Request $request)
  221. {
  222. $this->log($request);
  223. ///gid: 1543462
  224. //dtf: 1722355200000
  225. //dtt: 1722959999999
  226. //atk: S2VS1R6P-Q3B7-785R-WBRP-7EBO6LC651V3
  227. //pf: 4
  228. //wk: 0_C
  229. //btt: 1
  230. $gid = intval($request->gid);
  231. if ($gid != 1543462) {
  232. return [
  233. "dt" => [
  234. "lut" => $request->dtf,
  235. "bs" => [
  236. "gid" => $gid,
  237. "bc" => 8,
  238. "btba" => 4,
  239. "btwla" => -3.40,
  240. "lbid" => 12123212211111221,
  241. ]
  242. ],
  243. "err" => null
  244. ];
  245. }
  246. // Redis::setex($newToken,3600,json_encode($data));
  247. $user = json_decode(Redis::get($request->atk));
  248. if (!$user) return ['dt' => null, 'err' => ['cd' => 1302, 'msg' => 'Invalid player session', 'tid' => $request->traceId]];
  249. $UserID = $user->UserID;
  250. $record = DB::connection('mysql')->table('webgame.PgRecords')
  251. ->where('uid', $UserID)
  252. ->where('gid', $request->gid)
  253. ->whereBetween('bt', [$request->dtf, $request->dtt])
  254. ->selectRaw('count(*) as bc,sum(gtba) as btba,sum(gtwla) as btwla,max(tid) as lbid,max(bt) as lut')->get()->toArray();
  255. $record = (array)$record[0];
  256. return [
  257. "dt" => [
  258. "lut" => $record['lut'] ?? $request->dtf,
  259. "bs" => [
  260. "gid" => intval($request->gid),
  261. "bc" => $record['bc'] ?? 0,
  262. "btba" => floatval($record['btba'] ?? 0),
  263. "btwla" => floatval($record['btwla'] ?? 0),
  264. "lbid" => $record['lbid'] ?? null,
  265. ]
  266. ],
  267. "err" => null
  268. ];
  269. }
  270. public static $readyGames = [1695365, 1543462, 68, 57, 42, 48, 1682240, 126, 98, 89, 104, 1451122, 1492288, 135];
  271. public function BetHistory(Request $request)
  272. {
  273. // $this->log($request);
  274. ///gid: 1543462
  275. //dtf: 1722873600000
  276. //dtt: 1722959999999
  277. //bn: 1
  278. //rc: 15
  279. //atk: 69TN676M-60PU-587G-QKVS-DC319L8RREGJ
  280. //pf: 4
  281. //wk: 0_C
  282. //btt: 1
  283. $gid = intval($request->gid);
  284. $beginTime = intval($request->lbt ?? time() * 1000);
  285. //假数据
  286. if (!in_array($gid, self::$readyGames)) {
  287. return $this->returnFakeHistory($gid);
  288. }
  289. $user = json_decode(Redis::get($request->atk));
  290. // if(!$user)return ['dt'=>null,'err'=>'session expired'];
  291. if (!$user) return ['dt' => null, 'err' => ['cd' => 1302, 'msg' => 'Invalid player session', 'tid' => $request->traceId]];
  292. $UserID = $user->UserID;
  293. $records = DB::connection('mysql')->table('webgame.PgRecords')
  294. ->where('uid', $UserID)
  295. ->where('gid', $request->gid)
  296. ->whereBetween('bt', [$request->dtf, $request->dtt])
  297. ->where('bt', '<', $beginTime)
  298. ->selectRaw('tid,gid,cc,gtba,gtwla,bt,gd')
  299. ->orderBy('id', 'desc')
  300. ->limit(30)
  301. ->get()->toArray();
  302. $items = [];
  303. foreach ($records as &$record) {
  304. $record = (array)$record;
  305. $record['gtba'] = floatval($record['gtba']);
  306. $record['gtwla'] = floatval($record['gtwla']);
  307. $record['gd'] = json_decode($record['gd']);
  308. $bd = [];
  309. foreach ($record['gd'] as $gd) {
  310. $gd = (array)$gd;
  311. $arr = ["tid" => "1820491964999664640",
  312. "tba" => $gd['tb'],
  313. "twla" => $gd['tw'],
  314. "bl" => $gd['bl'],
  315. "bt" => $record['bt'],
  316. "gd" => $gd
  317. ];
  318. $bd[] = $arr;
  319. }
  320. $ge = $record['gd'][0]->ge;
  321. if ($ge[0] == 4) $ge[] = 1;
  322. $items[] = [
  323. "tid" => $record['tid'],
  324. "pid" => 0,
  325. "gid" => $record['gid'],
  326. "cc" => $record['cc'],
  327. "gtba" => $record['gtba'],
  328. "gtwla" => $record['gtwla'],
  329. "bt" => $record['bt'],
  330. "ge" => $ge,
  331. "mgcc" => 0,
  332. "fscc" => 0,
  333. "bd" => $bd
  334. ];
  335. }
  336. $result = [
  337. "dt" => [
  338. "bh" => $items
  339. ],
  340. "err" => null
  341. ];
  342. return $result;
  343. }
  344. private function returnFakeHistory($gid)
  345. {
  346. $winitem = [
  347. "tid" => "1820491964999664640",
  348. "pid" => 0,
  349. "gid" => $gid,
  350. "cc" => "BRL",
  351. "gtba" => 0.5,
  352. "gtwla" => 0,
  353. "bt" => 1722874083597,
  354. "ge" => [
  355. 1,
  356. 11
  357. ],
  358. "bd" => [
  359. [
  360. "tid" => "1820491964999664640",
  361. "tba" => 0.5,
  362. "twla" => 0,
  363. "bl" => 310.62,
  364. "bt" => 1722874082006,
  365. "gd" => [
  366. "wp" => [
  367. "6" => [
  368. 1,
  369. 6,
  370. 9
  371. ],
  372. "7" => [
  373. 1,
  374. 6,
  375. 10
  376. ]
  377. ],
  378. "lw" => [
  379. "6" => 0.25,
  380. "7" => 0.25
  381. ],
  382. "orl" => [
  383. 5,
  384. 5,
  385. 7,
  386. 99,
  387. 6,
  388. 6,
  389. 5,
  390. 5,
  391. 3,
  392. 5,
  393. 5,
  394. 99
  395. ],
  396. "ift" => false,
  397. "iff" => false,
  398. "cpf" => [],
  399. "cptw" => 0,
  400. "crtw" => 0,
  401. "imw" => false,
  402. "fs" => null,
  403. "gwt" => -1,
  404. "fb" => null,
  405. "ctw" => 0.5,
  406. "pmt" => null,
  407. "cwc" => 1,
  408. "fstc" => null,
  409. "pcwc" => 1,
  410. "rwsp" => [
  411. "6" => 5,
  412. "7" => 5
  413. ],
  414. "hashr" => "0:5;6;3#5;6;5#7;5;5#99;5;99#R#5#011221#MV#0.50#MT#1#R#5#011222#MV#0.50#MT#1#MG#0.50#",
  415. "ml" => 1,
  416. "cs" => 0.05,
  417. "rl" => [
  418. 5,
  419. 5,
  420. 7,
  421. 99,
  422. 6,
  423. 6,
  424. 5,
  425. 5,
  426. 3,
  427. 5,
  428. 5,
  429. 99
  430. ],
  431. "sid" => "1820491964999664640",
  432. "psid" => "1820491964999664640",
  433. "st" => 1,
  434. "nst" => 1,
  435. "pf" => 4,
  436. "aw" => 0.5,
  437. "wid" => 0,
  438. "wt" => "C",
  439. "wk" => "0_C",
  440. "wbn" => null,
  441. "wfg" => null,
  442. "blb" => 310.62,
  443. "blab" => 310.12,
  444. "bl" => 310.62,
  445. "tb" => 0.5,
  446. "tbb" => 0.5,
  447. "tw" => 0.5,
  448. "np" => 0,
  449. "ocr" => null,
  450. "mr" => null,
  451. "ge" => [
  452. 1,
  453. 11
  454. ]
  455. ]
  456. ]
  457. ],
  458. "mgcc" => 0,
  459. "fscc" => 0
  460. ];
  461. $item = [
  462. "tid" => "1820492035749183488",
  463. "pid" => 0,
  464. "gid" => $gid,
  465. "cc" => "BRL",
  466. "gtba" => 0.5,
  467. "gtwla" => -0.5,
  468. "bt" => 1722874100124,
  469. "ge" => [
  470. 1,
  471. 11
  472. ],
  473. "bd" => [
  474. [
  475. "tid" => "1820492035749183488",
  476. "tba" => 0.5,
  477. "twla" => -0.5,
  478. "bl" => 307.72,
  479. "bt" => 1722874099074,
  480. "gd" => [
  481. "wp" => null,
  482. "lw" => null,
  483. "orl" => [
  484. 5,
  485. 5,
  486. 5,
  487. 99,
  488. 6,
  489. 5,
  490. 5,
  491. 7,
  492. 4,
  493. 4,
  494. 6,
  495. 99
  496. ],
  497. "ift" => false,
  498. "iff" => false,
  499. "cpf" => [],
  500. "cptw" => 0,
  501. "crtw" => 0,
  502. "imw" => false,
  503. "fs" => null,
  504. "gwt" => -1,
  505. "fb" => null,
  506. "ctw" => 0,
  507. "pmt" => null,
  508. "cwc" => 0,
  509. "fstc" => null,
  510. "pcwc" => 0,
  511. "rwsp" => null,
  512. "hashr" => "0:5;6;4#5;5;4#5;5;6#99;7;99#MV#0.50#MT#1#MG#0#",
  513. "ml" => 1,
  514. "cs" => 0.05,
  515. "rl" => [
  516. 5,
  517. 5,
  518. 5,
  519. 99,
  520. 6,
  521. 5,
  522. 5,
  523. 7,
  524. 4,
  525. 4,
  526. 6,
  527. 99
  528. ],
  529. "sid" => "1820492035749183488",
  530. "psid" => "1820492035749183488",
  531. "st" => 1,
  532. "nst" => 1,
  533. "pf" => 4,
  534. "aw" => 0,
  535. "wid" => 0,
  536. "wt" => "C",
  537. "wk" => "0_C",
  538. "wbn" => null,
  539. "wfg" => null,
  540. "blb" => 308.22,
  541. "blab" => 307.72,
  542. "bl" => 307.72,
  543. "tb" => 0.5,
  544. "tbb" => 0.5,
  545. "tw" => 0,
  546. "np" => -0.5,
  547. "ocr" => null,
  548. "mr" => null,
  549. "ge" => [
  550. 1,
  551. 11
  552. ]
  553. ]
  554. ]
  555. ],
  556. "mgcc" => 0,
  557. "fscc" => 0
  558. ];
  559. $result = [
  560. "dt" => [
  561. "bh" => [$item, $winitem]
  562. ],
  563. "err" => null
  564. ];
  565. return $result;
  566. }
  567. public function GameWallet(Request $request)
  568. {
  569. // Extracted constant for repeated value
  570. $user = json_decode(Redis::get($request->atk));
  571. // if(!$user)return ['dt'=>null,'err'=>'session expired'];
  572. if (!$user||!isset($user->UserID)) return ['dt' => null, 'err' => ['cd' => 1302, 'msg' => 'Invalid player session', 'tid' => $request->traceId]];
  573. $score = GlobalUserInfo::getScoreByUserID($user->UserID);
  574. // Original data with more descriptive keys and organized structure
  575. // $jsonData = [
  576. // "details" => [
  577. // "currency" => "BRL",
  578. // "totalBalance" => $score,
  579. // "pendingBalance" => 0.00,
  580. // "currentBalance" => $score,
  581. // "totalBetBalance" => 0.00,
  582. // "totalFreeGameBalance" => 0.00,
  583. // "remainingFreeGamesCount" => 0,
  584. // "isBonusEnabled" => false,
  585. // "isFreeGameEnabled" => false,
  586. // "isExclusiveBonusEnabled" => false,
  587. // "isExclusiveFreeGameEnabled" => false,
  588. // "child" => [
  589. // "key" => "0_C",
  590. // "childId" => 0,
  591. // "childBalance" => $score
  592. // ],
  593. // "promotion" => null,
  594. // "ocr" => null
  595. // ],
  596. // "error" => null
  597. // ];
  598. $Currency = env("CONFIG_24680_CURRENCY", "BRL");
  599. $CurrencySymbol = env("CONFIG_24680_DOLLAR", "R$");
  600. $json = [
  601. "dt" => [
  602. "cc" => $Currency,
  603. "tb" => $score,
  604. "pb" => 0,
  605. "cb" => $score,
  606. "tbb" => 0,
  607. "tfgb" => 0,
  608. "rfgc" => 0,
  609. "inbe" => false,
  610. "infge" => false,
  611. "iebe" => false,
  612. "iefge" => false,
  613. "ch" => [
  614. "k" => "0_C",
  615. "cid" => 0,
  616. "cb" => $score
  617. ],
  618. "p" => null,
  619. "ocr" => null
  620. ],
  621. "err" => null
  622. ];
  623. // Usage example
  624. return $json;
  625. }
  626. public function GameRule(Request $request)
  627. {
  628. $this->log($request);
  629. return '{"dt":{"rtp":{"Default":{"min":96.75,"max":96.75}},"ows":{"itare":true,"tart":1,"igare":true,"gart":2160},"jws":null},"err":null}';
  630. }
  631. public function GameName(Request $request)
  632. {
  633. $this->log($request);
  634. ///lang: zh
  635. //btt: 1
  636. //atk: K8ZU75Z5-TC66-8163-6Q4W-7XFBU6NIWTQE
  637. //pf: 4
  638. //gid: 1543462
  639. $token = $request->atk;
  640. $gameid = $request->gid ?? "57";
  641. $lang = $request->lang ?? "en";
  642. $gamenames = json_decode(PgSimData::$gamenames, true);
  643. $supportLang = array_keys($gamenames);//['en','da','de','es','fi','fr','id','it','ja','ko','nl','no','pl','pt','ro','ru','sv','th','tr','vi','zh','my'];
  644. if (!in_array($lang, $supportLang)) $lang = 'en';
  645. return response()->json($gamenames[$lang])->setEncodingOptions(JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
  646. // return json_encode($gamenames[$lang],JSON_UNESCAPED_UNICODE);
  647. }
  648. public function verifyOperatorPlayerSession(Request $request)
  649. {
  650. $this->log($request);
  651. ///btt: 1
  652. //vc: 2
  653. //pf: 4
  654. //l: zh
  655. //gi: 1543462
  656. //os: 917c74999c-b53b-eb1a-0004478930
  657. //otk: I-226f37ece4604f19a926c0cd709a995c
  658. return $this->VerifySession($request);
  659. return [
  660. "dt" => null,
  661. "err" => [
  662. "cd" => "1308",
  663. "msg" => "Player session is expired",
  664. "tid" => $request->traceId
  665. ]
  666. ];
  667. }
  668. public function GetByReferenceIdsResourceTypeIds(Request $request)
  669. {
  670. return [
  671. "dt" => [
  672. "0" => [
  673. "rid" => 0,
  674. "rtid" => 13,
  675. "url" => "https://public.pg-demo.com/pages/static/image/en/SocialProfile/default-e16a5d2e.png",
  676. "l" => "en-US",
  677. "ut" => "2019-09-27T10:57:09"
  678. ],
  679. "1" => [
  680. "rid" => 2,
  681. "rtid" => 13,
  682. "url" => "https://public.pg-demo.com/pages/static/image/en/SocialProfile/m2-de4b8bd8.png",
  683. "l" => "en-US",
  684. "ut" => "2019-09-27T10:57:09"
  685. ],
  686. "2" => [
  687. "rid" => 3,
  688. "rtid" => 13,
  689. "url" => "https://public.pg-demo.com/pages/static/image/en/SocialProfile/m3-d31d9b62.png",
  690. "l" => "en-US",
  691. "ut" => "2019-09-27T10:57:09"
  692. ],
  693. "3" => [
  694. "rid" => 4,
  695. "rtid" => 13,
  696. "url" => "https://public.pg-demo.com/pages/static/image/en/SocialProfile/m4-a6308645.png",
  697. "l" => "en-US",
  698. "ut" => "2019-09-27T10:57:09"
  699. ],
  700. "4" => [
  701. "rid" => 5,
  702. "rtid" => 13,
  703. "url" => "https://public.pg-demo.com/pages/static/image/en/SocialProfile/m5-8eab7ae3.png",
  704. "l" => "en-US",
  705. "ut" => "2019-09-27T10:57:09"
  706. ],
  707. "5" => [
  708. "rid" => 6,
  709. "rtid" => 13,
  710. "url" => "https://public.pg-demo.com/pages/static/image/en/SocialProfile/m6-19e7aa37.png",
  711. "l" => "en-US",
  712. "ut" => "2019-09-27T10:57:09"
  713. ],
  714. "6" => [
  715. "rid" => 7,
  716. "rtid" => 13,
  717. "url" => "https://public.pg-demo.com/pages/static/image/en/SocialProfile/m7-8e038206.png",
  718. "l" => "en-US",
  719. "ut" => "2019-09-27T10:57:09"
  720. ],
  721. "7" => [
  722. "rid" => 8,
  723. "rtid" => 13,
  724. "url" => "https://public.pg-demo.com/pages/static/image/en/SocialProfile/m8-711d3975.png",
  725. "l" => "en-US",
  726. "ut" => "2019-09-27T10:57:09"
  727. ],
  728. "8" => [
  729. "rid" => 9,
  730. "rtid" => 13,
  731. "url" => "https://public.pg-demo.com/pages/static/image/en/SocialProfile/m9-21680422.png",
  732. "l" => "en-US",
  733. "ut" => "2019-09-27T10:57:09"
  734. ],
  735. "9" => [
  736. "rid" => 10,
  737. "rtid" => 13,
  738. "url" => "https://public.pg-demo.com/pages/static/image/en/SocialProfile/m10-51eb1a26.png",
  739. "l" => "en-US",
  740. "ut" => "2019-09-27T10:57:09"
  741. ],
  742. "10" => [
  743. "rid" => 11,
  744. "rtid" => 13,
  745. "url" => "https://public.pg-demo.com/pages/static/image/en/SocialProfile/m11-69f2941d.png",
  746. "l" => "en-US",
  747. "ut" => "2019-09-27T10:57:09"
  748. ],
  749. "11" => [
  750. "rid" => 12,
  751. "rtid" => 13,
  752. "url" => "https://public.pg-demo.com/pages/static/image/en/SocialProfile/m12-db14d865.png",
  753. "l" => "en-US",
  754. "ut" => "2019-09-27T10:57:09"
  755. ],
  756. "12" => [
  757. "rid" => 13,
  758. "rtid" => 13,
  759. "url" => "https://public.pg-demo.com/pages/static/image/en/SocialProfile/f1-3818e131.png",
  760. "l" => "en-US",
  761. "ut" => "2019-09-27T10:57:09"
  762. ],
  763. "13" => [
  764. "rid" => 14,
  765. "rtid" => 13,
  766. "url" => "https://public.pg-demo.com/pages/static/image/en/SocialProfile/f2-057a3e40.png",
  767. "l" => "en-US",
  768. "ut" => "2019-09-27T10:57:09"
  769. ],
  770. "14" => [
  771. "rid" => 15,
  772. "rtid" => 13,
  773. "url" => "https://public.pg-demo.com/pages/static/image/en/SocialProfile/f3-642d52dc.png",
  774. "l" => "en-US",
  775. "ut" => "2019-09-27T10:57:09"
  776. ],
  777. "15" => [
  778. "rid" => 16,
  779. "rtid" => 13,
  780. "url" => "https://public.pg-demo.com/pages/static/image/en/SocialProfile/f4-f3fc5462.png",
  781. "l" => "en-US",
  782. "ut" => "2019-09-27T10:57:09"
  783. ],
  784. "16" => [
  785. "rid" => 17,
  786. "rtid" => 13,
  787. "url" => "https://public.pg-demo.com/pages/static/image/en/SocialProfile/f5-06141292.png",
  788. "l" => "en-US",
  789. "ut" => "2019-09-27T10:57:09"
  790. ],
  791. "17" => [
  792. "rid" => 18,
  793. "rtid" => 13,
  794. "url" => "https://public.pg-demo.com/pages/static/image/en/SocialProfile/f6-1c66ed0b.png",
  795. "l" => "en-US",
  796. "ut" => "2019-09-27T10:57:09"
  797. ],
  798. "18" => [
  799. "rid" => 19,
  800. "rtid" => 13,
  801. "url" => "https://public.pg-demo.com/pages/static/image/en/SocialProfile/f7-1147f29a.png",
  802. "l" => "en-US",
  803. "ut" => "2019-09-27T10:57:09"
  804. ],
  805. "19" => [
  806. "rid" => 21,
  807. "rtid" => 13,
  808. "url" => "https://public.pg-demo.com/pages/static/image/en/SocialProfile/f9-f835d8e6.png",
  809. "l" => "en-US",
  810. "ut" => "2019-09-27T10:57:09"
  811. ],
  812. "20" => [
  813. "rid" => 22,
  814. "rtid" => 13,
  815. "url" => "https://public.pg-demo.com/pages/static/image/en/SocialProfile/f10-54c3b4a4.png",
  816. "l" => "en-US",
  817. "ut" => "2019-09-27T10:57:09"
  818. ],
  819. "21" => [
  820. "rid" => 23,
  821. "rtid" => 13,
  822. "url" => "https://public.pg-demo.com/pages/static/image/en/SocialProfile/f11-9f9a1767.png",
  823. "l" => "en-US",
  824. "ut" => "2019-09-27T10:57:09"
  825. ],
  826. "22" => [
  827. "rid" => 24,
  828. "rtid" => 13,
  829. "url" => "https://public.pg-demo.com/pages/static/image/en/SocialProfile/f12-5d493e91.png",
  830. "l" => "en-US",
  831. "ut" => "2019-09-27T10:57:09"
  832. ]
  833. ],
  834. "err" => null
  835. ];
  836. }
  837. public function GameUI(Request $request)
  838. {
  839. return PgSimData::$gameuis;
  840. }
  841. public function TournamentExistance(Request $request)
  842. {
  843. return ['dt' => null, 'err' => null];
  844. }
  845. public function InitLite(Request $request)
  846. {
  847. return ['dt' => null, 'err' => null];
  848. }
  849. public function SocialInitConfig(Request $request)
  850. {
  851. return [
  852. "dt" => [
  853. "countries" => null,
  854. "achievements" => null,
  855. "levelActionPermissions" => null,
  856. "gameChatEmoticonTemplateDatas" => null,
  857. "gameSpecificThresholdId" => null,
  858. "configurationSetting" => null,
  859. "onlinePlayerCounts" => null,
  860. "playerFavouriteGamesDatas" => null,
  861. "playerProfileInfo" => null,
  862. "levelBackground" => null,
  863. "onlinePlayerCount" => null
  864. ],
  865. "err" => null
  866. ];
  867. }
  868. private function GetApiSite($GlobalUID=null)
  869. {
  870. $configurls=json_decode(env('CONFIG_GAMES'),true);
  871. $configurl=$configurls['pg'];
  872. return $configurl['api'];
  873. }
  874. public function VerifySession(Request $request)
  875. {
  876. $this->log($request);
  877. // btt: 1
  878. //vc: 2
  879. //pf: 4
  880. //l: zh
  881. //gi: 1543462
  882. //tk: 20bb7d43-1ace-43d8-84f5-afa15981b653
  883. //otk: Zm9saWFiZXQ=
  884. $changeSign=str_ends_with($request->otk,"@");
  885. //区域跳转
  886. try {
  887. $arr = explode('|', Crypt::decryptString($request->otk));
  888. $this->log($request, $arr);
  889. $GlobalUID = $arr[0];
  890. // if (!ServerService::IsLocalUser($GlobalUID)) {
  891. // return ServerService::RedirectToSub($GlobalUID);
  892. // }
  893. $timestamp = intval($arr[1]);
  894. if (time() > $timestamp) return ['dt' => null, 'err' => ['cd' => 1302, 'msg' => 'Invalid player session', 'tid' => $request->traceId]];
  895. // $user = GlobalUserInfo::getGameUserInfo('GlobalUID', $GlobalUID);
  896. } catch (\Exception $e) {
  897. if(isset($request->otk)) {
  898. TelegramBot::getDefault()->sendMsgWithEnv("redirect fail:" . json_encode($request->all()) . $e->getMessage() . $e->getTraceAsString());
  899. $this->log($request, "wrong user");
  900. }
  901. return "";
  902. }
  903. if(!isset($GlobalUID)||empty($GlobalUID)){
  904. return ['dt' => null, 'err' => ['cd' => 1302, 'msg' => 'Invalid player session', 'tid' => $request->traceId]];
  905. }
  906. //不是本地构造的
  907. // if(!strstr($GlobalUID,'a1b1c1')) {
  908. // if (!isset($user) || !$user) return ['dt' => null, 'err' => ['cd' => 1302, 'msg' => 'Invalid player session', 'tid' => $request->traceId]];
  909. // $data = $user->toArray();
  910. // }else{
  911. $data=['UserID'=>ServerService::GlobalToUserID($GlobalUID)];
  912. // }
  913. // $GlobalUID=$request->tk;
  914. $gameid = $request->gi ?? "57";
  915. $lang = $request->l ?? "en";
  916. $Currency = env("CONFIG_24680_CURRENCY", "BRL");
  917. $CurrencySymbol = env("CONFIG_24680_DOLLAR", "R$");
  918. // $GlobalUID = $user->GlobalUID;
  919. $PgPlayerID = md5($GlobalUID);
  920. $newToken = base64_encode(random_bytes(20));
  921. $data['currency'] = $Currency;
  922. $data['dollar'] = $CurrencySymbol;
  923. $roomlevel=$request->btt??1;
  924. $data['limit_room']=0;
  925. // if($roomlevel>1){
  926. // $data['limit_room']=1;
  927. // }
  928. $account = AccountsInfo::where('UserID', $data['UserID'])->first();
  929. if(!$account){
  930. TelegramBot::getDefault()->sendMsgWithEnv("VerifySession fail11111:" . json_encode([$request->all(),$data]) );
  931. return ['dt' => null, 'err' => ['cd' => 1302, 'msg' => 'Invalid player session', 'tid' => $request->traceId]];
  932. }else{
  933. $account=$account->toArray();
  934. }
  935. $data = array_merge($data, $account);
  936. Redis::setex($newToken, 7200, json_encode($data));
  937. // Redis::set($newToken,json_encode($data));
  938. $sessions = json_decode($changeSign?PgSimData::$sessions2:PgSimData::$sessions, true);
  939. $api=$this->GetApiSite($GlobalUID);
  940. if(ServerService::GlobalToUserID($GlobalUID)==80000140){
  941. $api="api.pgn-nmu2nd.com";
  942. }
  943. if(isset($sessions[$gameid])) {
  944. $obj = $sessions[$gameid];
  945. $obj['dt']['lm'] = $data['limit_room'];
  946. $obj['dt']['pid'] = $PgPlayerID;
  947. $obj['dt']['pcd'] = $GlobalUID;
  948. $obj['dt']['nkn'] = $GlobalUID;
  949. $obj['dt']['tk'] = $newToken;
  950. $obj['dt']['cc'] = $Currency;
  951. $obj['dt']['cs'] = $CurrencySymbol;
  952. $obj['dt']['geu'] = "https://$api/game-api/$gameid/";
  953. $obj['dt']['lau'] = "https://$api";
  954. $obj['dt']['bau'] = "https://$api/web-api/game-proxy/";
  955. $obj['dt']['eatk'] = $newToken;
  956. $obj['dt']['ec'] = [
  957. // [
  958. // "n" => "132bb011e7",
  959. // "v" => "10",
  960. // "il" => 0,
  961. // "om" => 0,
  962. // "uie" => [
  963. // "ct" => "1"
  964. // ]
  965. // ],
  966. // [
  967. // "n" => "5e3d8c75c3",
  968. // "v" => "6",
  969. // "il" => 0,
  970. // "om" => 0,
  971. // "uie" => [
  972. // "ct" => "1"
  973. // ]
  974. // ]
  975. ];
  976. // $obj['dt']['uiogc']['gsc']=1;
  977. // $obj['dt']['uiogc']['grt']=0;
  978. // $obj['dt']['uiogc']['swf']=1;
  979. // $obj['dt']['uiogc']['swfbsi']=1;
  980. // $obj['dt']['uiogc']['swfbli']=1;
  981. $obj['dt']['sdn'] = 'api';
  982. $obj['dt']['jc'] = [
  983. "bf" => 1,
  984. "et" => 0,
  985. "np" => 0,
  986. "as" => 100,
  987. "asc" => 2,
  988. "std" => 0,
  989. "hnp" => 0,
  990. "ts" => 1,
  991. "smpo" => 0,
  992. "swf" => 0,
  993. "sp" => 0,
  994. "rcf" => 0,
  995. "sbb" => 0,
  996. "hwl" => 0
  997. ];
  998. $obj['dt']['tt'] = [env('REGION_24680'), env('APP_URL')];
  999. $obj['dt']['ioph'] = '00000';
  1000. return response()->json($obj)->setEncodingOptions(JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
  1001. }
  1002. $jayParsedAry = [
  1003. "dt" => [
  1004. "oj" => [
  1005. "jid" => 0
  1006. ],
  1007. "pid" => $PgPlayerID,
  1008. "pcd" => $GlobalUID,
  1009. "nkn" => $GlobalUID,
  1010. "tk" => $newToken,
  1011. "st" => 1,
  1012. "geu" => "https://$api/game-api/$gameid/",
  1013. "lau" => "https://$api",
  1014. "bau" => "https://$api/web-api/game-proxy/",
  1015. "cc" => $Currency,
  1016. "cs" => $CurrencySymbol,
  1017. "gm" => [
  1018. [
  1019. "gid" => intval($gameid),
  1020. "msdt" => 1672972799000,
  1021. "medt" => 1672972799000,
  1022. "st" => 1,
  1023. "amsg" => "",
  1024. "rtp" => [
  1025. "df" => [
  1026. "min" => 96.81,
  1027. "max" => 96.81
  1028. ]
  1029. ],
  1030. "mxe" => 2500,
  1031. "mxehr" => 1000000000
  1032. ]
  1033. ],
  1034. "uiogc" => [
  1035. "bb" => 1,
  1036. "grtp" => 1,
  1037. "gec" => 1,
  1038. "cbu" => 0,
  1039. "cl" => 0,
  1040. "bf" => 1,
  1041. "mr" => 0,
  1042. "phtr" => 0,
  1043. "vc" => 0,
  1044. "bfbsi" => 1,
  1045. "bfbli" => 1,
  1046. "il" => 0,
  1047. "rp" => 0,
  1048. "gc" => 1,
  1049. "ign" => 1,
  1050. "tsn" => 0,
  1051. "we" => 0,
  1052. "gsc" => 1,
  1053. "bu" => 0,
  1054. "pwr" => 0,
  1055. "hd" => 0,
  1056. "et" => 0,
  1057. "np" => 0,
  1058. "igv" => 0,
  1059. "as" => 0,
  1060. "asc" => 0,
  1061. "std" => 0,
  1062. "hnp" => 0,
  1063. "ts" => 0,
  1064. "smpo" => 0,
  1065. "ivs" => 1,
  1066. "ir" => 0,
  1067. "gvs" => 0,
  1068. "hn" => 1,
  1069. "swf" => 1,
  1070. "swfbsi" => 1,
  1071. "swfbli" => 1,
  1072. ],
  1073. "ec" => [
  1074. [
  1075. "n" => "132bb011e7",
  1076. "v" => "10",
  1077. "il" => 0,
  1078. "om" => 0,
  1079. "uie" => [
  1080. "ct" => "1"
  1081. ]
  1082. ], [
  1083. "n" => "5e3d8c75c3",
  1084. "v" => "6",
  1085. "il" => 0,
  1086. "om" => 0,
  1087. "uie" => [
  1088. "ct" => "1"
  1089. ]
  1090. ]
  1091. ],
  1092. "occ" => [
  1093. "rurl" => "",
  1094. "tcm" => "",
  1095. "tsc" => 10,
  1096. "ttp" => 10,
  1097. "tlb" => "",
  1098. "trb" => ""
  1099. ],
  1100. "ioph" => '00000',//$ioph[$gameid] ?? "6028539ddfc8",
  1101. "sdn" => 'api',
  1102. "eatk" => $newToken,
  1103. ],
  1104. "err" => null
  1105. ];
  1106. return json_encode($jayParsedAry, JSON_UNESCAPED_UNICODE);
  1107. }
  1108. public function cashUpdateBetDetail()
  1109. {
  1110. return response()->json(['data' => ['is_success' => 1], 'error' => null]);
  1111. }
  1112. private $gameList = [
  1113. '1' => 'diaochan',
  1114. '2' => 'gem-saviour',
  1115. '3' => 'fortune-gods',
  1116. '6' => 'medusa2',
  1117. '7' => 'medusa',
  1118. '18' => 'hood-wolf',
  1119. '20' => 'reel-love',
  1120. '24' => 'win-win-won',
  1121. '25' => 'plushie-frenzy',
  1122. '26' => 'fortune-tree',
  1123. '28' => 'hotpot',
  1124. '29' => 'dragon-legend',
  1125. '31' => 'baccarat-deluxe',
  1126. '33' => 'hip-hop-panda',
  1127. '34' => 'legend-of-hou-yi',
  1128. '35' => 'mr-hallow-win',
  1129. '36' => 'prosperity-lion',
  1130. '37' => 'santas-gift-rush',
  1131. '38' => 'gem-saviour-sword',
  1132. '39' => 'piggy-gold',
  1133. '40' => 'jungle-delight',
  1134. '41' => 'symbols-of-egypt',
  1135. '42' => 'ganesha-gold',
  1136. '44' => 'emperors-favour',
  1137. '48' => 'double-fortune',
  1138. '50' => 'journey-to-the-wealth',
  1139. '53' => 'the-great-icescape',
  1140. '54' => 'captains-bounty',
  1141. '57' => 'dragon-hatch',
  1142. '58' => 'vampires-charm',
  1143. '59' => 'ninja-vs-samurai',
  1144. '60' => 'leprechaun-riches',
  1145. '61' => 'flirting-scholar',
  1146. '62' => 'gem-saviour-conquest',
  1147. '63' => 'dragon-tiger-luck',
  1148. '64' => 'muay-thai-champion',
  1149. '65' => 'mahjong-ways',
  1150. '67' => 'shaolin-soccer',
  1151. '68' => 'fortune-mouse',
  1152. '69' => 'bikini-paradise',
  1153. '70' => 'candy-burst',
  1154. '71' => 'cai-shen-wins',
  1155. '73' => 'egypts-book-mystery',
  1156. '74' => 'mahjong-ways2',
  1157. '75' => 'ganesha-fortune',
  1158. '79' => 'dreams-of-macau',
  1159. '80' => 'circus-delight',
  1160. '82' => 'phoenix-rises',
  1161. '83' => 'wild-fireworks',
  1162. '84' => 'queen-bounty',
  1163. '85' => 'genies-wishes',
  1164. '86' => 'galactic-gems',
  1165. '87' => 'treasures-aztec',
  1166. '88' => 'jewels-prosper',
  1167. '89' => 'lucky-neko',
  1168. '90' => 'sct-cleopatra',
  1169. '91' => 'gdn-ice-fire',
  1170. '92' => 'thai-river',
  1171. '93' => 'opera-dynasty',
  1172. '94' => 'bali-vacation',
  1173. '95' => 'majestic-ts',
  1174. '97' => 'jack-frosts',
  1175. '98' => 'fortune-ox',
  1176. '100' => 'candy-bonanza',
  1177. '101' => 'rise-of-apollo',
  1178. '102' => 'mermaid-riches',
  1179. '103' => 'crypto-gold',
  1180. '104' => 'wild-bandito',
  1181. '105' => 'heist-stakes',
  1182. '106' => 'ways-of-qilin',
  1183. '107' => 'lgd-monkey-kg',
  1184. '108' => 'buffalo-win',
  1185. '110' => 'jurassic-kdm',
  1186. '112' => 'oriental-pros',
  1187. '113' => 'crypt-fortune',
  1188. '114' => 'emoji-riches',
  1189. '115' => 'sprmkt-spree',
  1190. '117' => 'cocktail-nite',
  1191. '118' => 'mask-carnival',
  1192. '119' => 'spirit-wonder',
  1193. '120' => 'queen-banquet',
  1194. '121' => 'dest-sun-moon',
  1195. '122' => 'garuda-gems',
  1196. '123' => 'rooster-rbl',
  1197. '124' => 'battleground',
  1198. '125' => 'btrfly-blossom',
  1199. '126' => 'fortune-tiger',
  1200. '127' => 'speed-winner',
  1201. '128' => 'legend-perseus',
  1202. '129' => 'win-win-fpc',
  1203. '130' => 'lucky-piggy',
  1204. '132' => 'wild-coaster',
  1205. '135' => 'wild-bounty-sd',
  1206. '1312883' => 'prosper-ftree',
  1207. '1338274' => 'totem-wonders',
  1208. '1340277' => 'asgardian-rs',
  1209. '1368367' => 'alchemy-gold',
  1210. '1372643' => 'diner-delights',
  1211. '1381200' => 'hawaiian-tiki',
  1212. '1397455' => 'fruity-candy',
  1213. '1402846' => 'midas-fortune',
  1214. '1418544' => 'bakery-bonanza',
  1215. '1420892' => 'rave-party-fvr',
  1216. '1432733' => 'myst-spirits',
  1217. '1448762' => 'songkran-spl',
  1218. '1451122' => 'dragon-hatch2',
  1219. '1473388' => 'cruise-royale',
  1220. '1489936' => 'ult-striker',
  1221. '1492288' => 'pinata-wins',
  1222. '1508783' => 'wild-ape-3258',
  1223. '1513328' => 'spr-golf-drive',
  1224. '1529867' => 'ninja-raccoon',
  1225. '1543462' => 'fortune-rabbit',
  1226. '1555350' => 'forge-wealth',
  1227. '1568554' => 'wild-heist-co',
  1228. '1572362' => 'gladi-glory',
  1229. '1580541' => 'mafia-mayhem',
  1230. '1594259' => 'safari-wilds',
  1231. '1601012' => 'lucky-clover',
  1232. '1623475' => 'anubis-wrath',
  1233. '1635221' => 'zombie-outbrk',
  1234. '1648578' => 'shark-hunter',
  1235. '1671262' => 'gemstones-gold',
  1236. '1682240' => 'cash-mania',
  1237. '1717688' => 'mystic-potions',
  1238. '1738001' => 'chicky-run',
  1239. '1760238' => 'yakuza-honor',
  1240. '1778752' => 'futebol-fever'
  1241. ];
  1242. }