Guest User

Untitled

a guest
May 9th, 2017
1,092
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 33.06 KB | None | 0 0
  1. // io. = EVERYONE
  2. // socket. = SINGLE USER
  3. var app = require('express')();
  4. var http = require('http').Server(app);
  5. var https = require('https');
  6. var tls = require('tls');
  7. var _http = require('http');
  8. var httpApi = require('http');
  9. var mysql = require('mysql');
  10. var io = require('socket.io')(http);
  11. var request = require("request");
  12. var fs = require('fs');
  13. var crypto = require('crypto');
  14. var Q = require('q');
  15. var cors = require('cors');
  16. var Steam = require('steam');
  17. var SteamWebLogOn = require('steam-weblogon');
  18. var getSteamAPIKey = require('steam-web-api-key');
  19. var SteamTradeOffers = require('steam-tradeoffers');
  20.  
  21. var SteamUser = require('steam-user');
  22. var SteamCommunity = require('steamcommunity');
  23. var SteamTotp = require('steam-totp');
  24. var TradeOfferManager = require('steam-tradeoffer-manager');
  25.  
  26. app.use(function (req, res, next) {
  27. res.setHeader('Access-Control-Allow-Origin', 'https://csgobm.hostbm.pt');
  28. res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
  29. res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
  30. res.setHeader('Access-Control-Allow-Credentials', true);
  31. next();
  32. });
  33. app.use(cors({origin: 'https://csgobm.hostbm.pt'}));
  34.  
  35. var _ = require('underscore');
  36.  
  37.  
  38. require("jsdom").env("", function(err, window) {
  39. if (err) {
  40. console.error(err);
  41. return;
  42. }
  43. var $ = require("jquery")(window);
  44. });
  45.  
  46. var api_url = "http://www.csgobm.hostbm.pt";
  47. var api_key = "NCR6JTMTJ924HH2ZOOMBZLFLC8H39Q";
  48. var api_yt = "AIzaSyBEdkdY01HA7h2Crv7Izf8VpZrTXHy9fWI";
  49.  
  50. var admin = '76561198367147799';
  51.  
  52. var csgobm_db_config = {
  53. host: 'localhost',
  54. user: 'csgobm_socket',
  55. password: '47ehCybb0NtItyaK',
  56. database: 'admin_csgobm'
  57. };
  58. //var csgobm_db = mysql.createConnection(csgobm_db_config);
  59. //csgobm_db.connect();
  60. function handleDisconnect(conn) {
  61. conn.on('error', function(err) {
  62. if (!err.fatal) {
  63. return;
  64. }
  65.  
  66. if (err.code !== 'PROTOCOL_CONNECTION_LOST') {
  67. throw err;
  68. }
  69.  
  70. console.log('Re-connecting lost connection: ' + err.stack);
  71.  
  72. csgobm_db = mysql.createConnection(csgobm_db_config);
  73. handleDisconnect(csgobm_db);
  74. csgobm_db.connect();
  75. });
  76. }
  77.  
  78. //handleDisconnect(csgobm_db);
  79.  
  80. var onlineP = 0 +0;
  81. var userData = [];
  82. var validated,logged,balance,transactions = [];
  83. var canWithdraw,canDeposit,canBuy,canRoulette,canJackpot,canCoinflip = {};
  84.  
  85. var _NextColor = "0";
  86.  
  87. app.get('/', function(req, res){
  88. res.sendfile('csgobm.php');
  89. });
  90. app.get('/socket.io', function(req, res){
  91. res.sendfile('csgobm.php');
  92. });
  93.  
  94. var tag = '[CSGOBM-Socket]-> ';
  95. var tag_err = '[CSGOBM-Error]-> ';
  96. var tagSteam = '[CSGOBM-Steam]-> ';
  97. var tagJukebox = '[CSGOBM-Jukebox]-> ';
  98.  
  99. var RouletteBets1 = [];
  100. var RouletteBets2 = [];
  101. var RouletteBets3 = [];
  102. var RouletteBets4 = [];
  103. var RB1_S=null;var RB2_S=null;var RB3_S=null;var RB4_S=null;
  104. var ForceUpdateBets1=true;var ForceUpdateBets2=true;var ForceUpdateBets3=true;var ForceUpdateBets4=true;
  105.  
  106. var b_id = 0;
  107. var Bet_EID = {};
  108. var Bet_VAL = {};
  109. var Bet_VAL_AC = {};
  110. var Bet_VAL_AC_1 = {};
  111. var Bet_VAL_AC_2 = {};
  112. var Bet_VAL_AC_3 = {};
  113. var Bet_VAL_AC_4 = {};
  114. var Bet_TYPE = {};
  115. var Bet_T = {};
  116.  
  117. var PreviousColor = {};
  118. var PreviousColorsCount = 0;
  119.  
  120. if (!Date.now) {
  121. Date.now = function() { return new Date().getTime(); }
  122. }
  123.  
  124. var client = new SteamUser();
  125. var manager = new TradeOfferManager({
  126. "steam": client,
  127. "domain": "csgobm.hostbm.pt",
  128. "cancelTime": "600000",
  129. "language": "en",
  130. "pollInterval": "5000"
  131. });
  132. var community = new SteamCommunity();
  133.  
  134. var logOnOptions = {
  135. "accountName": "csgobm01",//"rizeoficial",
  136. "password": "csgobm1291",//"nesbangbang2309",
  137. "twoFactorCode": SteamTotp.getAuthCode("jAm5fVoeqKc7VX6nzelAv3h6Zeo=") //TFXMU: BzwFkohgPozfBkBeNsutWPJV8do=
  138. };
  139.  
  140. var identitySecret = "FSAebN50xQb3VJXA7PgezXxdHHI="; //TFXMU : KKNtodRwQyn+otmeAIrGgoZXcdQ=
  141.  
  142. if (fs.existsSync('polldata.json')) {
  143. manager.pollData = JSON.parse(fs.readFileSync('polldata.json'));
  144. }
  145.  
  146. client.logOn(logOnOptions);
  147.  
  148. client.on('loggedOn', function(details) {
  149. if(details.eresult == SteamUser.EResult.OK) {
  150. client.getPersonas([client.steamID], function(personas) {
  151. console.log("============ Logged in ===============================")
  152. console.log('== Name: ' + personas[client.steamID]["player_name"]);
  153. console.log('== ID64: ' + client.steamID);
  154. console.log("======================================================");
  155. console.log("");
  156. });
  157. console.log();
  158. client.setPersona(1);
  159. client.webLogOn();
  160. setInterval(function() { client.webLogOn(); }, 1000 * 60);
  161. } else {
  162. console.log(tagSteam+"Error Logging!");
  163. }
  164. });
  165.  
  166. client.on('webSession', function(sessionID, cookies) {
  167. manager.setCookies(cookies, function(err) {
  168. if (err) {
  169. console.log(err);
  170. //process.exit(1);
  171. return;
  172. }
  173. console.log(tagSteam+"Got API key: " + manager.apiKey);
  174. });
  175.  
  176. community.setCookies(cookies);
  177. community.startConfirmationChecker(15000, identitySecret);
  178. });
  179.  
  180. community.on("sessionExpired", function(err) {
  181. console.log(tagSteam+" Session Expired, relogging.");
  182. setTimeout(function() {client.logOn(logOnOptions);}, 2000);
  183. setTimeout(function() {client.webLogOn();}, 4000);
  184. });
  185.  
  186. manager.on('sentOfferChanged', function(offer, oldState) {
  187. console.log(tagSteam+'Offer #'+offer.id+' changed: '+TradeOfferManager.ETradeOfferState[oldState]+' -> '+TradeOfferManager.ETradeOfferState[offer.state]);
  188.  
  189. if(offer.state == TradeOfferManager.ETradeOfferState.Accepted) {
  190. var SteamID = offer.partner;
  191. var Message = offer.message;
  192. var ItemsD = offer.itemsToReceive;
  193. var JSON = offer.rawJson;
  194. offer.getReceivedItems(function(err, items) {
  195. if (err) {
  196. console.log(tagSteam+"Couldn't get received items: " + err);
  197. } else {
  198. var names = items.map(function(item) {
  199. return item.name;
  200. });
  201. console.log("");
  202. console.log(tagSteam+"===== Deposit from [ "+SteamID+" ] ==");
  203. console.log(tagSteam+"TRADE MESSAGE => "+Message);
  204. for(i = 0; i < ItemsD.length; ++i) {
  205. console.log(tagSteam+"ITEM => "+ItemsD[i].amount+"x "+ItemsD[i].name+" ("+ItemsD[i].classid+"_"+ItemsD[i].instanceid+")");
  206. }
  207. console.log(tagSteam+"===========================================");
  208. console.log("");
  209.  
  210. var URL_SEND = api_url+"/_api.php?key="+api_key+"&gi=_TradeOfferReceived&sid="+SteamID+"&offerid="+offer.id+"&offermsg="+Message+"&json="+JSON;
  211. //console.log(tagSteam+"URL_SEND: "+URL_SEND);
  212. _http.get(URL_SEND, function(res) {
  213. var data;
  214. res.on('data', function(chunk) {
  215. data += chunk;
  216. });
  217. res.on('end', function() {
  218. console.log("[CSGOBM-ErrorResponse]-> "+data);
  219. });
  220. });
  221. }
  222. });
  223. }
  224. });
  225.  
  226. manager.on('newOffer', function(offer) {
  227. console.log(tagSteam+"Processing New Offer (#"+offer.id+") from "+offer.partner);// offer.partner.getSteam3RenderedID());
  228. /*offer.getUserDetails(function(err, me, them) {
  229. console.log("");
  230. console.log("============ New Offer ===============================");
  231. console.log("== Message: " + offer.message);
  232. console.log("======================================================");
  233. console.log("");
  234. });*/
  235. if(offer.itemsToGive.length > 0) {
  236. offer.decline(function(err) {
  237. if (err) {
  238. console.log(tagSteam+"Unable to decline offer: " + err.message);
  239. } else {
  240. console.log(tagSteam+"Offer Declined! (ItemsToGive not Allowed)");
  241. }
  242. });
  243. } else if(offer.itemsToReceive.length > 5) {
  244. offer.decline(function(err) {
  245. if (err) {
  246. console.log(tagSteam+"Unable to decline offer: " + err.message);
  247. } else {
  248. console.log(tagSteam+"Offer Declined! (Only 5 Items Allowed)");
  249. }
  250. });
  251. } else {
  252. offer.accept(function(err) {
  253. if (err) {
  254. console.log(tagSteam+"Unable to accept offer: " + err.message);
  255. } else {
  256. community.checkConfirmations();
  257. console.log(tagSteam+"Offer Accepted!");
  258. }
  259. });
  260. }
  261.  
  262. });
  263.  
  264. manager.on('receivedOfferChanged', function(offer, oldState) {
  265. console.log(tagSteam+'Offer '+offer.id+' changed: '+TradeOfferManager.ETradeOfferState[oldState]+' -> '+TradeOfferManager.ETradeOfferState[offer.state]+' ['+offer.state+']');
  266.  
  267. if(offer.state == TradeOfferManager.ETradeOfferState.Accepted) {
  268. var SteamID = offer.partner;
  269. var Message = offer.message;
  270. var ItemsD = offer.itemsToReceive;
  271. var JSON = offer.rawJson;
  272. offer.getReceivedItems(function(err, items) {
  273. if (err) {
  274. console.log(tagSteam+"Couldn't get received items: " + err);
  275. } else {
  276. var names = items.map(function(item) {
  277. return item.name;
  278. });
  279. console.log("");
  280. //console.log(tagSteam+"===== Donation from [ "+SteamID+" ] =");
  281. // --remove--
  282. console.log(tagSteam+"===== Deposit from [ "+SteamID+" ] =");
  283. // --remove--
  284. console.log(tagSteam+"TRADE MESSAGE => "+Message);
  285. for(i = 0; i < ItemsD.length; ++i) {
  286. console.log(tagSteam+"ITEM => "+ItemsD[i].amount+"x "+ItemsD[i].name+" ("+ItemsD[i].classid+"_"+ItemsD[i].instanceid+")");
  287. }
  288. console.log(tagSteam+"===========================================");
  289. console.log("");
  290.  
  291. //var URL_SEND = api_url+"/_api.php?key="+api_key+"&gi=_DonationReceived&sid="+SteamID+"&offerid="+offer.id+"&offermsg="+Message+"&json="+JSON;
  292. //_http.get(URL_SEND);
  293. // --remove--
  294. var URL_SEND = api_url+"/_api.php?key="+api_key+"&gi=_TradeOfferReceived&sid="+SteamID+"&offerid="+offer.id+"&offermsg="+Message+"&json="+JSON;
  295. console.log(tagSteam+"URL_SEND: "+URL_SEND);
  296. _http.get(URL_SEND, function(res) {
  297. var data;
  298. res.on('data', function(chunk) {
  299. data += chunk;
  300. });
  301. res.on('end', function() {
  302. console.log("[CSGOBM-ErrorResponse]-> "+data);
  303. });
  304. });
  305. // --remove--
  306. }
  307. });
  308. }
  309. });
  310.  
  311. manager.on('pollData', function(pollData) {
  312. fs.writeFile('polldata.json', JSON.stringify(pollData), function() {});
  313. });
  314.  
  315. io.on('connection', function (socket) { /* */ });
  316.  
  317. io.sockets.on('connection', function (socket) {
  318. var socketId = socket.id;
  319. var clientIp = socket.request.connection.remoteAddress;
  320. var clientPort = socket.request.connection.remotePort;
  321. var timenow = Math.floor(Date.now() / 1000);
  322. var saved_time = timenow;
  323.  
  324. userData.push({ sid: socketId, validated: 0, logged: 0, balance: 0 });
  325. var eid,validated,logged,steamid,token,time,balance,transactions,rank = 0;
  326. var steamName = "Guest";
  327. var steamAvatar = api_url+"/template/img/default.png";
  328. var requests_n = 0;
  329. var canWithdraw = 1;
  330. var canDeposit = 1;
  331. var canBuy = 1;
  332. var canRoulette = 1;
  333. var canJackpot = 1;
  334. var canCoinflip = 1;
  335.  
  336.  
  337. onlineP = onlineP + 1;
  338.  
  339. function LoggedAndValid() { if(validated && logged == 1) { return true; } else { return false; } }
  340. function Valid() { if(validated) { return true; } else { return false; } }
  341. function LogNameAfterConn(sN) { if(requests_n < 2) { setTimeout(function() { console.log(tag+"User [ "+sN+" ] validated!"); },1500); } }
  342.  
  343. console.log(tag + 'New Connection: ' + socketId + ' (' + clientIp + ':' + clientPort + ') [ '+onlineP+' Online ]');
  344.  
  345. socket.emit('init request');
  346. socket.on('init', function(init_data) {
  347. logged = init_data.logged;
  348. eid = init_data.eid;
  349. steamid = init_data.steamid;
  350. token = init_data.token;
  351. time = init_data.time + 6;
  352. //if(timenow < time && timenow > (init_data.time - 6)) {
  353. socket.emit('init validate', '1');
  354. validated = true;
  355. /*} else {
  356. socket.emit('init validate', '0');
  357. validated = false;
  358. }*/
  359. });
  360.  
  361. if(LoggedAndValid) {
  362. setInterval(function() {
  363. requests_n++;
  364. _http.get(api_url+"/_api.php?key="+api_key+"&gi=_userData&eid="+eid, function(res) {
  365. var data_json = '';
  366. var actual_balance = balance;
  367. var actual_transactions = transactions;
  368. res.on('data', function(chunk) {
  369. data_json += chunk;
  370. });
  371. res.on('end', function() {
  372. var r;
  373. if(data_json !== "") {
  374. r = JSON.parse(data_json);
  375. } else {
  376. r = 0;
  377. r.balance = 0;
  378. r.transcations = 0;
  379. }
  380. if(r.balance !== actual_balance) {
  381. balance = r.balance;
  382. //balance_s = balance.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
  383. socket.emit('update balance', { balance : balance });
  384. balance = balance;
  385. }
  386. if(r.transactions !== actual_transactions) {
  387. transactions = r.transactions;
  388. socket.emit('update transactions');
  389. transactions = transactions;
  390. }
  391.  
  392. rank = r.rank;
  393. steamName = r.steamName; LogNameAfterConn(steamName);
  394. steamAvatar = r.steamAvatarF;
  395. canWithdraw = Number(r.canWithdraw);
  396. canDeposit = Number(r.canDeposit);
  397. canBuy = Number(r.canBuy);
  398. canRoulette = Number(r.canRoulette);
  399. canJackpot = Number(r.canJackpot);
  400. canCoinflip = Number(r.canCoinflip);
  401. });
  402. });
  403. }, 500);
  404. setInterval(function() {
  405. _http.get(api_url+"/_api.php?key="+api_key+"&gi=_userAlerts&eid="+eid, function(res) {
  406. var data_json = '';
  407. res.on('data', function(chunk) {
  408. data_json += chunk;
  409. });
  410. res.on('end', function() {
  411. var r;
  412. if(data_json !== "") {
  413. r = JSON.parse(data_json);
  414. } else {
  415. r = 0;
  416. r.haveAlerts = "0";
  417. }
  418. if(r.haveAlerts == "1") {
  419. socket.emit('alert', { msg: r.alertMsg, type: 2, t2: r.alertType, error: 0 });
  420. }
  421. });
  422. });
  423. }, 1300);
  424. }
  425.  
  426. setTimeout(function() {
  427. Update_PreviousColors_Send(true, socketId);
  428. },2000);
  429.  
  430. socket.on('alert', function(msg) {
  431. if(rank >= 4) {
  432. io.emit('alert', { msg: msg, type: 1, error: 0 });
  433. } else {
  434. socket.emit('alert', { msg: 'You don\'t have permission to send alerts!', error: 1, nopermission: 1 });
  435. }
  436. });
  437.  
  438. socket.on('roulette nextcolor', function(nc_data) {
  439. if(rank >= 5) {
  440. if(isNaN(nc_data)) {
  441. if(nc_data=="TERRORIST"||nc_data=="T") _NextColor=14;
  442. if(nc_data=="COUNTER-TERRORIST"||nc_data=="CT") _NextColor=15;
  443. if(nc_data=="BADLUCK"||nc_data=="BL") _NextColor=1;
  444. if(nc_data=="KNIFE") _NextColor=8;
  445. } else {
  446. _NextColor = nc_data;
  447. }
  448. } else {
  449. socket.emit('alert', { msg: 'You don\'t have permission to do this action!', error: 1, nopermission: 1 });
  450. }
  451. });
  452.  
  453. //BET_ROULETTE FUNCTION
  454. {
  455. var betType;
  456. var betValue = 0;
  457.  
  458. socket.on('roulette bet', function(bet_data) {
  459. if(!LoggedAndValid()) {SendError("Please, login to your account through Steam.",1,true,socketId);return;}
  460.  
  461. if(!validated) {SendError("User not validated, please refresh the page or login again.",1,true,socketId);return;}
  462.  
  463. if(!canRoulette) {SendError("You don't have permission to bet on the Roulette.",1,true,socketId);return;}
  464.  
  465. betType = bet_data.bet_type;
  466. betValue = bet_data.bet_value-1+1;
  467. if(_rouletteActive) {
  468. socket.emit('roulette bet error', 'e_1790');
  469. console.error(tag+"[ "+steamName+" ]: No permission to bet when the Roulette is Active! [BALANCE="+balance+"][VALUE="+betValue+"]");
  470. } else if(!(betType=="T"||betType=="CT"||betType=="KNIFE")) {
  471. socket.emit('roulette bet error', 'e_3481');
  472. console.error(tag+"[ "+steamName+" ]: Invalid Bet Informations! [BALANCE="+balance+"][VALUE="+betValue+"]");
  473. } else if(betValue < 100) {
  474. socket.emit('roulette bet error', 'e_2952');
  475. } else if(betValue > 100000 && 1==2) {
  476. socket.emit('roulette bet error', 'e_2953');
  477. } else if(balance >= betValue) {
  478. _http.get(api_url+"/_api.php?key="+api_key+"&gi=_ActionRemoveBalance&eid="+eid+"&value="+betValue);
  479. CreateLogCoins(eid,"minus",betValue,'{"game":"roulette","type":"bet","betType":"'+betType+'"}');
  480. socket.emit('roulette bet ok', {value:betValue});
  481.  
  482. if(betType == "T") {
  483. RouletteBets1.push({ eid: eid, socket: socketId, val: betValue, name: steamName, avatar: steamAvatar });
  484. if(isNaN(Bet_VAL_AC_1[socketId])) {
  485. Bet_VAL_AC_1[socketId] = Number(betValue*1);
  486. } else if(Bet_VAL_AC_1[socketId] > 0) {
  487. Bet_VAL_AC_1[socketId] = Number((Bet_VAL_AC_1[socketId]*1+betValue*1)*1);
  488. }
  489. }
  490. if(betType == "CT") {
  491. RouletteBets2.push({ eid: eid, socket: socketId, val: betValue, name: steamName, avatar: steamAvatar });
  492. if(isNaN(Bet_VAL_AC_2[socketId])) {
  493. Bet_VAL_AC_2[socketId] = Number(betValue*1);
  494. } else if(Bet_VAL_AC_2[socketId] > 0) {
  495. Bet_VAL_AC_2[socketId] = Number((Bet_VAL_AC_2[socketId]*1+betValue*1)*1);
  496. }
  497. }
  498. /*if(betType == "X5") {
  499. RouletteBets3.push({ eid: eid, socket: socketId, val: betValue, name: steamName, avatar: steamAvatar });
  500. if(isNaN(Bet_VAL_AC_3[socketId])) {
  501. Bet_VAL_AC_3[socketId] = Number(betValue*1);
  502. } else if(Bet_VAL_AC_3[socketId] > 0) {
  503. Bet_VAL_AC_3[socketId] = Number((Bet_VAL_AC_3[socketId]*1+betValue*1)*1);
  504. }
  505. }*/
  506. if(betType == "KNIFE") {
  507. RouletteBets4.push({ eid: eid, socket: socketId, val: betValue, name: steamName, avatar: steamAvatar });
  508. if(isNaN(Bet_VAL_AC_4[socketId])) {
  509. Bet_VAL_AC_4[socketId] = Number(betValue*1);
  510. } else if(Bet_VAL_AC_4[socketId] > 0) {
  511. Bet_VAL_AC_4[socketId] = Number((Bet_VAL_AC_4[socketId]*1+betValue*1)*1);
  512. }
  513. }
  514.  
  515. b_id++;
  516. Bet_EID[socketId] = eid;
  517. Bet_VAL[b_id] = betValue; //Not Needed
  518. /*if(isNaN(Bet_VAL_AC[socketId])) {
  519. Bet_VAL_AC[socketId] = Number(betValue*1);
  520. } else if(Bet_VAL_AC[socketId] > 0) {
  521. Bet_VAL_AC[socketId] = Number((Bet_VAL_AC[socketId]*1+betValue*1)*1);
  522. }*/
  523. Bet_TYPE[b_id] = betType;
  524. Bet_T[socketId] = Math.floor(Date.now() / 1000) * Math.floor(Math.random() * 65) + 15;
  525.  
  526. console.log(tag+"[ "+steamName+" ]: Bet Successfull! [BALANCE="+balance+"][VALUE="+betValue+"]["+betType+"]");
  527. } else if(balance < betValue) {
  528. socket.emit('roulette bet error', 'e_9367');
  529. console.error(tag+"[ "+steamName+" ]: Not enough coins! [BALANCE="+balance+"][VALUE="+betValue+"]");
  530. } else {
  531. socket.emit('roulette bet error', 'e_8365');
  532. console.error(tag+"[ "+steamName+" ]: Error betting! Maybe try again? [BALANCE="+balance+"][VALUE="+betValue+"]");
  533. }
  534. });
  535. }
  536. //---------------------
  537.  
  538. //SEND_TRADE_OFFER[DEPOSIT] FUNCTION
  539. {
  540. socket.on('new deposit', function(deposit_data) {
  541. if(deposit_data.items !== null && deposit_data.items !== "") {
  542. var offer = manager.createOffer("76561198161578475");
  543. manager.loadInventory(730, 2, true, function(err, myItems) {
  544. if(err) {
  545. console.log(err);
  546. return;
  547. }
  548. offer.loadPartnerInventory(730, 2, function(err, theirItems) {
  549. if(err) {
  550. console.log(tagSteam+err);
  551. return;
  552. }
  553. //offer.addMyItem(myItems[0]);
  554. //offer.addTheirItem(theirItems[373]);
  555. offer.addTheirItem(theirItems[482]);
  556. offer.setMessage("CSGOBM_DEPOSIT: ["+Math.floor(1000000000 + Math.random() * 9000000000)+"]");
  557. offer.send("");
  558. console.log(tagSteam+"Processing New Deposit!");
  559. });
  560. });
  561. } else {
  562. console.log(tagSteam+"Error processing the Deposit! (Missing_Items)");
  563. }
  564. });
  565. }
  566. //----------------------------------
  567.  
  568. //JUKEBOX_REQUEST Function
  569. {
  570. socket.on('jukebox new', function(jkb_data) {
  571. if(rank >= 2) {
  572. var perm = false;
  573. if(rank >= 3) perm = true;
  574. JKB_Play(jkb_data,steamName,socketId,perm);
  575. } else {
  576. socket.emit('alert', { msg: 'You don\'t have permission to play on the Jukebox!', error: 1, nopermission: 1 });
  577. }
  578. });
  579. socket.on('jukebox stop', function() {
  580. if(rank >= 3) {
  581. JKB_Stop();
  582. } else {
  583. socket.emit('alert', { msg: 'You don\'t have permission to stop the Jukebox!', error: 1, nopermission: 1 });
  584. }
  585. });
  586. }
  587. //------------------------
  588.  
  589. //Disconnect
  590. socket.on('disconnect', function () {
  591. if(onlineP != 0) { onlineP = onlineP - 1; }
  592. console.log(tag + 'Disconnected: ' + socketId + ' (' + clientIp + ':' + clientPort + ') [ '+onlineP+' Online ]');
  593.  
  594. });
  595. });
  596.  
  597. //ROUND_ROULETTE FUNCTION
  598. {
  599. var RoundTime = 19;
  600. var timeLeft = RoundTime;
  601. var num = 1;
  602. var diff;
  603. var betsValueTotal = 0;
  604. var _rouletteActive = false;
  605.  
  606. var _colorNumber = {
  607. terrorist: [1,3,5,7,10,12,14,16,18,20,23,25,27,29],
  608. counterterrorist: [2,4,6,9,11,13,15,17,19,21,24,26,28,30],
  609. badluck: [],
  610. knife: [8,22]
  611. }
  612.  
  613. setInterval(function() {
  614. if(timeLeft > 1 && timeLeft !== 20) {
  615. io.emit('roulette round timeleft', {tl : timeLeft});
  616. timeLeft = timeLeft - 1;
  617. } else if(timeLeft == 1) {
  618. io.emit('roulette round timeleft', {tl : timeLeft});
  619. num = GenerateNum();
  620. diff = Math.random() * (65 - 15) + 15; //Math.floor(Math.random() * 55) + 25;
  621. timeLeft = 20;
  622.  
  623. var w_color;
  624. var bType;
  625. var bData;
  626. var contains = function(needle) {var findNaN = needle !== needle;var indexOf;if(!findNaN && typeof Array.prototype.indexOf === 'function') {indexOf = Array.prototype.indexOf;}else{indexOf=function(needle){var i = -1, index = -1;for(i = 0; i < this.length; i++) {var item = this[i];if((findNaN && item !== item) || item === needle) {index = i;break;}}return index;};}return indexOf.call(this, needle) > -1;};
  627. if(contains.call(_colorNumber.terrorist, num)) w_color = "TERRORIST";
  628. if(contains.call(_colorNumber.counterterrorist, num)) w_color = "COUNTER-TERRORIST";
  629. if(contains.call(_colorNumber.badluck, num)) w_color = "BADLUCK";
  630. if(contains.call(_colorNumber.knife, num)) w_color = "KNIFE";
  631.  
  632. _rouletteActive = true;
  633. io.emit('roulette round starts', {
  634. n : num,
  635. d : diff,
  636. h : "ABCDEFGHIJKLMNOPQRSTUVXZ"
  637. });
  638. console.log(tag + "Team: "+w_color+" | Number: "+num+" | Diff: "+diff);
  639. setTimeout(function() {
  640. io.emit('roulette round timeleft', {tl : 20});
  641. }, 3500);
  642. setTimeout(function() {
  643. timeLeft = RoundTime;
  644. _rouletteActive = false;
  645. //RouletteBets1=[];RouletteBets2=[];RouletteBets3=[];RouletteBets4=[];
  646. }, 14500);
  647. setTimeout(function() {
  648. if(w_color=="TERRORIST"){bType=1;bData=RouletteBets1;}else if(w_color=="COUNTER-TERRORIST"){bType=2;bData=RouletteBets2;}else if(w_color=="BADLUCK"){bType=3;bData=RouletteBets3;}else if(w_color=="KNIFE"){bType=4;bData=RouletteBets4;}else{bType=0;}
  649. PayBets(bType);
  650. Update_PreviousColors(w_color);
  651. RouletteBets1=[];RouletteBets2=[];RouletteBets3=[];RouletteBets4=[];
  652. RB1_S=null;RB2_S=null;RB3_S=null;RB4_S=null;
  653. b_id=0;
  654. Bet_VAL_AC={};Bet_VAL_AC_1={};Bet_VAL_AC_2={};Bet_VAL_AC_3={};Bet_VAL_AC_4={};
  655. }, 13500);
  656. }
  657. }, 1000);
  658. function GenerateNum() {
  659. var numR;
  660.  
  661. if(_NextColor!=="0") {
  662. numR = _NextColor;
  663. _NextColor = "0";
  664. } else {
  665. numR = Math.floor(Math.random() * 30) + 1;
  666. }
  667.  
  668. return (numR*1);
  669. }
  670. }
  671. //-----------------------
  672.  
  673. //SEND_ROULETTE_BETS FUNCTION
  674. {
  675. setInterval(function() {
  676. if(RouletteBets1.length > RB1_S || RB1_S==null || ForceUpdateBets1) {
  677. if(ForceUpdateBets1) {ForceUpdateBets1=false;}
  678. RB1_S=RouletteBets1.length;
  679. io.emit('roulette bets update 1', RouletteBets1);
  680. }
  681. if(RouletteBets2.length > RB2_S || RB2_S==null || ForceUpdateBets2) {
  682. if(ForceUpdateBets2) {ForceUpdateBets2=false;}
  683. RB2_S=RouletteBets2.length;
  684. io.emit('roulette bets update 2', RouletteBets2);
  685. }
  686. if(RouletteBets3.length > RB3_S || RB3_S==null || ForceUpdateBets3) {
  687. if(ForceUpdateBets3) {ForceUpdateBets3=false;}
  688. RB3_S=RouletteBets3.length;
  689. io.emit('roulette bets update 3', RouletteBets3);
  690. }
  691. if(RouletteBets4.length > RB4_S || RB4_S==null || ForceUpdateBets4) {
  692. if(ForceUpdateBets4) {ForceUpdateBets4=false;}
  693. RB4_S=RouletteBets4.length;
  694. io.emit('roulette bets update 4', RouletteBets4);
  695. }
  696. }, 600);
  697. }
  698. //---------------------------
  699.  
  700. //SEND_ROULETTE_PREVIOUS_COLORS FUNCTION
  701. function Update_PreviousColors(color) {
  702. PreviousColorsCount++;
  703. PreviousColor[PreviousColorsCount] = color;
  704.  
  705. var PrevCol = PreviousColor[PreviousColorsCount];
  706.  
  707. Update_PreviousColors_Send(false, null);
  708. }
  709. function Update_PreviousColors_Send(clientOnly,sid) {
  710. var si;
  711. var validSocket = false;
  712. if(clientOnly) {
  713. si = io.sockets.connected[sid];
  714. if(si) {
  715. validSocket = true;
  716. console.log(tag+"Sending the Previous Colors to ID: "+sid);
  717. } else {
  718. validSocket = false;
  719. }
  720. } else {
  721. si = io;
  722. if(si) { validSocket = true; } else { validSocket = false; }
  723. }
  724. if(validSocket) {
  725. si.emit('roulette previous colors', {
  726. previousColor1: PreviousColor[PreviousColorsCount],
  727. previousColor2: PreviousColor[PreviousColorsCount-1],
  728. previousColor3: PreviousColor[PreviousColorsCount-2],
  729. previousColor4: PreviousColor[PreviousColorsCount-3],
  730. previousColor5: PreviousColor[PreviousColorsCount-4],
  731. previousColor6: PreviousColor[PreviousColorsCount-5],
  732. previousColor7: PreviousColor[PreviousColorsCount-6],
  733. previousColor8: PreviousColor[PreviousColorsCount-7],
  734. previousColor9: PreviousColor[PreviousColorsCount-8],
  735. previousColor10: PreviousColor[PreviousColorsCount-9]
  736. });
  737. }
  738. }
  739. //--------------------------------------
  740.  
  741. //MAKE_WINNERS_ROULETTE FUNCTION
  742. var tempBal = [];
  743. function PayBets(btp) {
  744. var TotalPaymentAmount = 0;
  745. var money_actual;
  746. var paymentAmount = 0;
  747. var timesPayed = 0;
  748. console.log(tag+"Processing the payments...");
  749.  
  750. if(btp==1){
  751. Bet_VAL_AC = Bet_VAL_AC_1;
  752. }else if(btp==2){
  753. Bet_VAL_AC = Bet_VAL_AC_2;
  754. }else if(btp==3){
  755. Bet_VAL_AC = Bet_VAL_AC_3;
  756. }else if(btp==4){
  757. Bet_VAL_AC = Bet_VAL_AC_4;
  758. }
  759.  
  760. for(var betInfo in Bet_VAL_AC) {
  761. var ib = betInfo;
  762. console.log(tag+"[ !DEBUG! ]: betInfo("+ib+") | Bet_VAL_AC[betInfo]('"+Bet_VAL_AC[ib]+"')");
  763. var valueToPay = 0;
  764.  
  765. if(btp==1){
  766. valueToPay = Bet_VAL_AC_1[ib]*2;
  767. }else if(btp==2){
  768. valueToPay = Bet_VAL_AC_2[ib]*2;
  769. }else if(btp==3){
  770. valueToPay = Bet_VAL_AC_3[ib]*0; //*5 BLUE to BLACK NULL
  771. }else if(btp==4){
  772. valueToPay = Bet_VAL_AC_4[ib]*15;
  773. }
  774.  
  775. SendPaymentQuery(valueToPay,Bet_EID[ib]);
  776. }
  777. for(i=0;i<b_id;i++) {
  778. /* DEBUG ON
  779. var ib = (i+1);
  780.  
  781. if(btp==1&&Bet_TYPE[ib]=="X2") SendPaymentQuery(Bet_VAL[ib]*2,Bet_EID[ib],Bet_T[ib]);
  782. if(btp==2&&Bet_TYPE[ib]=="X3") SendPaymentQuery(Bet_VAL[ib]*3,Bet_EID[ib],Bet_T[ib]);
  783. if(btp==3&&Bet_TYPE[ib]=="X5") SendPaymentQuery(Bet_VAL[ib]*5,Bet_EID[ib],Bet_T[ib]);
  784. if(btp==4&&Bet_TYPE[ib]=="X15") SendPaymentQuery(Bet_VAL[ib]*15,Bet_EID[ib],Bet_T[ib]);
  785. if(btp==0) SendPaymentQuery(Bet_VAL[ib]*0,Bet_EID[ib],Bet_T[ib]);
  786. var TotalPaymentAmount = (tempBal + paymentAmount)*1;
  787.  
  788. TotalPaymentAmout = 0;
  789. paymentAmount = 0;
  790.  
  791. if(i == (b_id-1)*1) {
  792. console.log(tag+"Sending payment to [ "+(b_id)+" ] requests.");
  793. }
  794. */
  795. }
  796. if(b_id == 0) {
  797. console.log(tag+"No payments needed! Starting new Round...");
  798. }
  799. }
  800. function SaveTempBalance(b) { tempBal = b; }
  801. function SendPaymentQuery(pA,EID) {
  802. httpApi.get(api_url+"/_api.php?key="+api_key+"&gi=_ActionAddBalance&eid="+EID+"&value="+pA);
  803. CreateLogCoins(EID,"plus",pA,'{"game":"roulette","type":"bet_win"}');
  804. console.log(tag+"Sending [ "+pA+" ]coins to EID:["+EID+"]");
  805. }
  806. function SendCoins_RouletteWin(d,t) {
  807. d_string = JSON.stringify(d);
  808. _http.get(api_url+"/_api.php?key="+api_key+"&gi=_RouletteWin&data="+d+"&bet="+t);
  809. }
  810. //------------------------------
  811.  
  812. //JUKEBOX FUNCTIONS
  813. {
  814. var JKB_Playing = false;
  815. var JKB_MusicURL = null;
  816. var JKB_MusicID = null;
  817. var JKB_MusicTITLE = null;
  818. var JKB_MusicDURATION = null;
  819. var JKB_MusicTHUMBNAIL = null;
  820. var JKB_MusicBY = null;
  821. var JKB_TimeAllow = true;
  822. var t_playing = setTimeout(function(){},10000*10000);
  823. var t_timeallow = setTimeout(function(){},10000*10000);
  824. function C_Playing(m,duration) {
  825. clearTimeout(t_playing);
  826. t_playing = setTimeout(function() { JKB_Playing=m; }, duration);
  827. }
  828. function C_TimeAllow(m,duration) {
  829. clearTimeout(t_timeallow);
  830. t_timeallow = setTimeout(function() { JKB_TimeAllow=m; }, duration);
  831. }
  832. function JKB_Play(url,by,sid,perm) {
  833. var si = io.sockets.connected[sid];
  834. var validSocket = false;
  835. if(si){validSocket=true;}else{validSocket=false;}
  836.  
  837. if(JKB_CheckURL(url)) {
  838. if(!JKB_Playing) {
  839. if(JKB_TimeAllow) {
  840. JKB_Playing = true;
  841. JKB_TimeAllow = false;
  842. JKB_MusicURL = url;
  843. JKB_MusicID = YoutubeVideoID(url);
  844. console.log(tagJukebox+"Playing Youtube Video [ID="+JKB_MusicID+"]");
  845. _http.get(api_url+"/_api.php?key="+api_key+"&gi=_YoutubeVideoData&vid="+JKB_MusicID+"&key="+api_yt, function(res) {
  846. var data_json = '';
  847. res.on('data', function(chunk) {
  848. data_json += chunk;
  849. });
  850. res.on('end', function() {
  851. var r;
  852. var ok = false;
  853. if(data_json !== "") {
  854. r = JSON.parse(data_json);
  855. ok = true;
  856. } else {
  857. r = 0;
  858. r.videoId = null;
  859. r.videoTitle = null;
  860. r.videoDescription = null;
  861. r.videoThumbnail = null;
  862. r.videoDuration = null;
  863. ok = false;
  864. }
  865. JKB_MusicTITLE = r.videoTitle;
  866. JKB_MusicDURATION = r.videoDuration;
  867. JKB_MusicTHUMBNAIL = r.videoThumbnail;
  868. JKB_MusicBY = by;
  869. console.log(tagJukebox+"Title: \""+r.videoTitle+"\" | Duration: "+r.videoDuration);
  870. if(ok) {
  871. if(JKB_MusicDURATION > 390 && !perm) { // 360 seconds = 6 minutes
  872. si.emit('alert', { msg: "You don't have permission to play musics with more than 5 minutes in the Jukebox.", type: 2, t2: "error", error: 0 });
  873. JKB_Playing=false;
  874. JKB_TimeAllow=true;
  875. } else {
  876. io.emit('jukebox play', {
  877. videoId: JKB_MusicID,
  878. videoTitle: JKB_MusicTITLE,
  879. videoDuration: JKB_MusicDURATION,
  880. videoThumbnail: JKB_MusicTHUMBNAIL,
  881. videoBy: JKB_MusicBY
  882. });
  883. C_Playing(false,JKB_MusicDURATION*1000+3500);
  884. C_TimeAllow(true,JKB_MusicDURATION*1000+6500);
  885. si.emit('alert', { msg: "Your music is now playing on the Jukebox.", type: 2, t2: "success", error: 0 });
  886. }
  887. }
  888. });
  889. });
  890. } else {
  891. si.emit('alert', { msg: "Please wait a few moments before use the Jukebox!", type: 2, t2: "error", error: 0 });
  892. }
  893. } else {
  894. si.emit('alert', { msg: "There is currently a song playing on jukebox!", type: 2, t2: "error", error: 0 });
  895. }
  896. } else {
  897. console.log(tagJukebox+"Invalid URL format! (Only accept Youtube URL)");
  898. }
  899. }
  900. function JKB_CheckURL(url) {
  901. var validUrls = ['youtube.com','yt.com','youtube.pt','ytbe.com'];
  902. if(validUrls.some(function(v){return url.indexOf(v)>=0;})) {
  903. return true;
  904. } else {
  905. return false;
  906. }
  907. }
  908. function JKB_Stop() {
  909. JKB_Playing = false;
  910. clearTimeout(t_playing);
  911. C_TimeAllow(true,3000);
  912. io.emit('jukebox stop');
  913. }
  914. }
  915. //setTimeout(function(){JKB_Play("https://www.youtube.com/watch?v=iOe6dI2JhgU","bruno","123");},5000);
  916. //-----------------
  917.  
  918. //res.setHeader('Access-Control-Allow-Origin', 'https://csgobm.hostbm.pt');
  919. //res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
  920. //res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
  921. //res.setHeader('Access-Control-Allow-Credentials', true);
  922. // key: fs.readFileSync('/home/ssl/websocket.hostbm.pt.key'),
  923. // cert: fs.readFileSync('/home/ssl/websocket.hostbm.pt.crt')
  924.  
  925. const options = {
  926.  
  927. key: fs.readFileSync('/home/ssl/csgobm_ws.key.pem'),
  928. cert: fs.readFileSync('/home/ssl/csgobm_ws.key-cert.pem')
  929. };
  930. /*
  931. https.createServer(options, (req, res) => {
  932. res.setHeader('Access-Control-Allow-Origin', 'https://csgobm.hostbm.pt');
  933. res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
  934. res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
  935. res.setHeader('Access-Control-Allow-Credentials', true);
  936. res.writeHead(200);
  937. res.end('HostBM WebSocket System 3.2\n');
  938. }).listen(443);*/
  939.  
  940. http.listen(9497, function(){
  941. console.log('---------------------------------------------------------');
  942. console.log('== HOSTBM SOCKET SERVER [CSGOBM.pt] - Porta 80 ==');
  943. console.log('---------------------------------------------------------');
  944. });
  945.  
  946.  
  947. setInterval(function() {
  948. io.emit('players_online', onlineP);
  949. io.emit('game status', {
  950. roulette: true,
  951. coinflip: false
  952. });
  953. }, 2000);
  954.  
  955. //FUNCTIONS ----------------------- \/
  956.  
  957. function CreateLogCoins(eid,tp,val,data) {
  958. httpApi.get(api_url+"/_api.php?key="+api_key+"&gi=_LogCoins&eid="+eid+"&tp="+tp+"&value="+val+"&data="+data);
  959. }
  960.  
  961. function SendError(msg,type,clientOnly,sid) {
  962. var si;
  963. if(clientOnly){si=io.sockets.connected[sid];}else{si=io;}
  964. si.emit('error_warn', { t:type, msg:msg });
  965. }
  966.  
  967. function YoutubeVideoID(str) {
  968. return str.split('=')[1];
  969. }
  970.  
  971. function get_json(url, callback) {
  972. _http.get(url, function(res) {
  973. var body = '';
  974. res.on('data', function(chunk) {
  975. body += chunk;
  976. });
  977. res.on('end', function() {
  978. var response = JSON.parse(body);
  979. callback(response);
  980. });
  981. });
  982. }
  983.  
  984. function Update_UserData(userData) {
  985. var result = $.grep(userData, function(e){ return e.id == id; });
  986. if (result.length == 0) {
  987. // not found
  988. } else if (result.length == 1) {
  989. // access the foo property using result[0].foo
  990. } else {
  991. // multiple items found
  992. }
  993. }
  994.  
  995. function BalanceFormat(bal) {
  996. return bal.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
  997. }
  998.  
  999. function getSHA1(bytes) {
  1000. var shasum = crypto.createHash('sha1');
  1001. shasum.end(bytes);
  1002. return shasum.read();
  1003. }
Add Comment
Please, Sign In to add comment