PgSimController.php 46 KB

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