PgSimController.php 47 KB

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