Help
RSS
API
Feed
Maltego
Contact
Domain > heartgames.io
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2024-05-04
3.133.166.97
(
ClassC
)
2026-01-30
3.131.239.142
(
ClassC
)
Port 80
HTTP/1.1 200 OKDate: Fri, 30 Jan 2026 23:47:58 GMTContent-Type: text/html; charsetutf-8Content-Length: 131540Connection: keep-aliveX-Powered-By: ExpressX-Frame-Options: SAMEORIGINAccess-Control-Allow-Origin: *Set-Cookie: signUp; Path/; ExpiresThu, 01 Jan 1970 00:00:00 GMTSet-Cookie: signIn; Path/; ExpiresThu, 01 Jan 1970 00:00:00 GMTSet-Cookie: FB_logout; Path/; ExpiresThu, 01 Jan 1970 00:00:00 GMTSet-Cookie: temp_walletAddress; Path/; ExpiresThu, 01 Jan 1970 00:00:00 GMTSet-Cookie: temp_wallet_sign; Path/; ExpiresThu, 01 Jan 1970 00:00:00 GMTSet-Cookie: account_link; Path/; ExpiresThu, 01 Jan 1970 00:00:00 GMTSet-Cookie: errMsg; Path/; ExpiresThu, 01 Jan 1970 00:00:00 GMTETag: W/201d4-YrOkphSR5qmZHOqFklBl7jrKzDA !DOCTYPE html>html langen> head> !-- Google tag (gtag.js) --> script async srchttps://www.googletagmanager.com/gtag/js?idG-J0ZQ9RN9VZ>/script> script> // 애널리틱스 선언하는 함수 // 그리고 어차피 layout.html이 모든 페이지 상위 에있으니 페이지별로 이거 넣을 필요 없음 // 그런데 game.html 쪽은 layout이 없으니간 넣어야할듯? window.dataLayer window.dataLayer || ; function gtag(){dataLayer.push(arguments);} gtag(js, new Date()); gtag(config, G-J0ZQ9RN9VZ); // 이 부분에 고유코드 삽입 // 그냥 이 코드만 넣어도 페이지 조회수는 자동으로 카운팅 //var a window.open(about:blankasd,_blank); // 즉, 아래처럼 사용자에 의해 일어나는 이벤트안에서 팝업만 된다. 팝업차단해도 /script> link relstylesheet href/scss/reset.css /> link relstylesheet href/scss/nomalize.css /> link relstylesheet href/scss/main.css /> link relstylesheet href/scss/playMain.css /> link relstylesheet href/scss/cookieModal.css />!-- link relstylesheet href/scss/shop.css />-->!-- script typemodule srcjs/addpool.mjs>/script>--> meta charsetutf-8 /> meta nameviewport contentwidthdevice-width, initial-scale1 /> meta namedescription content> meta namekeyword contentHeart Games, heartgames, P2E, Play to Earn, Blockchain, NFT, Non Fungible Token, HTC, Heart Coin, heartcoin, Bingo Hearts, Heart Slots, Free Bingo, Free Slots> meta namerobots contentindex, follow> meta relcanonical href> meta nametwitter:card contentsummary> meta nametwitter:site contentHeartGames> meta nametwitter:title contentHeartGames> meta nametwitter:description contentHeartGames proposes a P2E model by adoption of DeFi monetization with focus on NFT. HeartCoin is intended for using with the NFTs through P2E gameplay> meta nametwitter:image content/images/twitter_og_logo.png> !-- 나중에 라이브서버로 변경이 필요함--> meta nametwitter:url contenthttps://heartgames.io> meta nametwitter:image:width content500> meta nametwitter:image:height content500> meta propertyog:type contentwebsite> !-- 나중에 라이브서버로 변경이 필요함--> meta propertyog:url contenthttps://heartgames.io> meta propertyog:title contentHeartGames> meta propertyog:image content/images/og_logo.png> meta propertyog:description contentHeartGames proposes a P2E model by adoption of DeFi monetization with focus on NFT. HeartCoin is intended for using with the NFTs through P2E gameplay> meta propertyog:site_name contentHeartGames> meta propertyog:locale contenten_US> !-- 페북 메타 비즈니스 설정 브랜드 가치 도메인 인증--> meta namefacebook-domain-verification contents7xutwodatb0wq4fkey3e9mv7hbgka /> title>heartgames.io/title> link relicon href/images/mainFavicon.ico /> link relapple-touch-icon href/images/mainFavicon.ico> !-- link relstylesheet href/css/bingo/layout.css>--> !--link relstylesheet href/css/main_layout.css>-->!--link relstylesheet href/css/top_bar_main.css>-->script srchttps://cdn.jsdelivr.net/gh/ethereum/web3.js/dist/web3.min.js>/script>script src/jquery-3.6.0.min.js>/script>script src/scripts/Web3Agent.js>/script>!--link relstylesheet href/css/index.css>--> script srchttps://kit.fontawesome.com/757bb99289.js crossoriginanonymous >/script> /head> body>!-- div idloading-screen>-->!-- div classloadingLogo>img altlogo src/images/web_modal/main/logo2.png width150px/>/div>-->!-- /div>--> script> let pageType index; // SEO 최적화 페이지 분기점/* const popup window.open(window.location.href, _blank); if(!popup) { alert(팝업 차단을 해제해주세요) }else { popup.focus() }*/ //var windowReference window.open(); //var a window.open(about:blankasd,_blank); function updateMetaDescription(description) { var metaTag document.querySelector(metanamedescription); if (metaTag) { metaTag.setAttribute(content, description); } } function updateMetaCanonical(canonical) { var metaTag document.querySelector(metarelcanonical); if(metaTag) { metaTag.setAttribute(href, canonical); } } function changeFavicon(url) { const favicon document.querySelector(linkrelicon); if (favicon ! null) { favicon.href url; } else { // Favicon이 정의되지 않은 경우, 새로운 link> 요소를 생성하여 추가 const newFavicon document.createElement(link); newFavicon.rel icon; newFavicon.href url; document.head.appendChild(newFavicon); } } const page_cut () > { if(pageType index) { document.title heartgames.io; updateMetaDescription(HeartGames proposes a P2E model by adoption of DeFi monetization with focus on NFT. HeartCoin is intended for using with the NFTs through P2E gameplay); updateMetaCanonical(https://heartgames.io); const newFaviconUrl /images/mainFavicon.ico; changeFavicon(newFaviconUrl); } else if(pageType freeSlot) { document.title Heart Slots - Free Slot Machines; updateMetaDescription(Heart Slots offers the most exciting social casino games where users can play and compete against each other. FREE to Play and FREE Mint!); updateMetaCanonical(https://freeslot.io); const newFaviconUrl /images/slotFavicon.ico; changeFavicon(newFaviconUrl); } else if(pageType freeBingo) { document.title Bingo Hearts - Free Bingo; updateMetaDescription(Bingo Hearts offers most exciting social casino games where people can play and compete with other people. FREE to Play and FREE Mint NFT!); updateMetaCanonical(https://freebingo.io); const newFaviconUrl /images/bingoFavicon.ico; changeFavicon(newFaviconUrl); } }; page_cut(); //페이스북 비동기 초기화 window.fbAsyncInit function () { // 이게 시간이 좀 걸려서 바로 FB 어쩌고 함수 쓸려면 에러뜸 settimeout거치고 함수실행해야할듯 FB.init({ appId: 296774912754547, //Web App Id cookie: true, // Enable cookies to allow the server to access the session. xfbml: true, // Parse social plugins on this webpage. version: v13.0, // Use this Graph API version for this call. });//////////////////////* function guid() { function s4() { return ((1 + Math.random()) * 0x10000 | 0).toString(16).substring(1); } return s4() + s4() + - + s4() + - + s4() + - + s4() + - + s4() + s4() + s4(); } // 페북 개발자 페이지에서 정한 결제 콜백 url 때문에 테섭 혹은 라이브에서 해야지 테스트가 가능 클라의 url도 고려해서 페북에서 팝업을 띄움 // 지금 보니간 버전이 다르면 웹결제가 안되는것같은데?? 버전 시간별로 달라짐 페북에서 튕기는듯 버전시간 안맞으면 const productId 1; const productUrl https://devweb.heartgames.io/payment/item/ + Math.floor(new Date().getTime() / 1000) + / + productId; FB.ui({ method: pay, action: purchaseitem, display: async, //product: https://devweb.heartofslots.com/payment/item/1, product: productUrl, request_id: productId + _ + guid(), //developer_payload: developerPayload }, function(response) { console.log(PaymentManager.purchase(): response, response); });*///////////////////////// }; //Load the JS SDK asynchronously (function (d, s, id) { var js, fjs d.getElementsByTagName(s)0; if (d.getElementById(id)) { return; } js d.createElement(s); js.id id; js.src https://connect.facebook.net/en_US/sdk.js; fjs.parentNode.insertBefore(js, fjs); })(document, script, facebook-jssdk); //로딩 화면을 보여주는 함수 // window.onload () > { // const loadingScreen document.getElementById(loading-screen); // loadingScreen.style.display none;asdfasdfsafsadf // sessionStorage.setItem(account_link, 0); // }; /script> div> div idcontainer stylebackground-color: #170e30> div idmodalSignIn classmodalSignIn> div classmodalX> i classfa-solid fa-xmark>/i> /div> span>Sign In/span> div idmodal_signInContainer> div idfb-connect-container_signIn onclicksignIn_facebook()> img altheartgames_signIn src/images/web_modal/main/f_b_btn_up.png onmouseoverthis.src/images/web_modal/main/f_b_btn_down.png onmouseoutthis.src/images/web_modal/main/f_b_btn_up.png /> /div> p> img altheartgames_signIn src/images/web_modal/main/or.png /> /p> div idmetamask-connect-container_signIn onclicksignIn_Metamask()> img altheartgames_signIn src/images/web_modal/main/sign_m_btn_up.png onmouseoverthis.src/images/web_modal/main/sign_m_btn_down.png onmouseoutthis.src/images/web_modal/main/sign_m_btn_up.png /> /div> p> img altheartgames_signIn src/images/web_modal/main/or.png /> /p> div iddiscord-connect-container_signIn onclicksignIn_discord()> !-- 클릭 이벤트 발생시 discord 로그인 함수 넣는곳 --> img altheartgames_signIn src/images/web_modal/main/sign_d_btn_up.png onmouseoverthis.src/images/web_modal/main/sign_d_btn_down.png onmouseoutthis.src/images/web_modal/main/sign_d_btn_up.png /> /div>!-- 트위터 주석해제-->!-- p>-->!-- img altheartgames_signIn src/images/web_modal/main/or.png />-->!-- /p>-->!-- div idtwitter-connect-container_signIn onclicksignIn_twitter()>-->!-- <!– 클릭 이벤트 발생시 discord 로그인 함수 넣는곳 –>-->!-- img-->!-- altheartgames_signIn-->!-- src/images/web_modal/main/twitter_btn_up.png-->!-- onmouseoverthis.src/images/web_modal/main/twitter_btn_down.png-->!-- onmouseoutthis.src/images/web_modal/main/twitter_btn_up.png-->!-- />-->!-- /div>--> h3> Dont have an account? span onclickRegisterAnAccount()>Register an Account/span> /h3> /div>/div> div idmodalRegister classmodalRegister> div classmodalX> i classfa-solid fa-xmark>/i> /div> span>Register/span> div idmodal_registerContainer> div idfb-connect-container-register onclicksignUp_facebook()> img altheartgames_register src/images/web_modal/main/f_b_btn_up.png onmouseoverthis.src/images/web_modal/main/f_b_btn_down.png onmouseoutthis.src/images/web_modal/main/f_b_btn_up.png /> /div> p> img altheartgames_register src/images/web_modal/main/or.png /> /p> div idmetamask-connect-container-register onclicksignUp_Metamask()> img altheartgames_register src/images/web_modal/main/sign_m_btn_up.png onmouseoverthis.src/images/web_modal/main/sign_m_btn_down.png onmouseoutthis.src/images/web_modal/main/sign_m_btn_up.png /> /div> p> img altheartgames_register src/images/web_modal/main/or.png /> /p> div iddiscord-connect-container-register onclicksignUp_discord()> !-- 클릭 이벤트 발생시 discord 로그인 함수 넣는곳 --> img altheartgames_register src/images/web_modal/main/sign_d_btn_up.png onmouseoverthis.src/images/web_modal/main/sign_d_btn_down.png onmouseoutthis.src/images/web_modal/main/sign_d_btn_up.png /> /div> !-- 트위터 주석해제-->!-- p>-->!-- img altheartgames_register src/images/web_modal/main/or.png />-->!-- /p>-->!-- div idtwitter-connect-container-register onclicksignUp_twitter()>-->!-- <!– 클릭 이벤트 발생시 discord 로그인 함수 넣는곳 –>-->!-- img-->!-- altheartgames_register-->!-- src/images/web_modal/main/twitter_btn_up.png-->!-- onmouseoverthis.src/images/web_modal/main/twitter_btn_down.png-->!-- onmouseoutthis.src/images/web_modal/main/twitter_btn_up.png-->!-- />-->!-- /div>-->!-- div classagreement-error-messages styletext-align: center>-->!-- Please, check in the Agreement to join.-->!-- /div>--> div classregister_input>!-- span classcheckbox>-->!-- img classcheckbox-img altheartGames_check src/images/web_signup/box2_chack.png />-->!-- /span>--> span classagreement >By continuing, you agree to the a stylecolor: #ff9000 hrefhttps://heartgames.io/termsofservice target_blank >Terms of Service/a > and a stylecolor: #ff9000 hrefhttps://heartgames.io/privacypolicy target_blank >Privacy Policy/a >/span > /div>!-- strong>-->!-- If you sign up with a new account, p>it cannot be used as an linked account./p>-->!-- /strong>--> h3> Already have an account? span onclicksignInAnAccount()>Sign In/span> /h3> /div>/div> div idmask stylevisibility: hidden>/div> div iddimmed>/div>div idheader_container> div idheader_main> div idheader_items_container> div idlogo_container> a href/ idlogo classheader_items btn> div classlogoLastContainer> img altheartgames_logo src/images/web_modal/main/logo.png />/div> /a> /div> div classsign_btn_box> button idsignIn classmenu_item btn>Sign In/button> button idsignUp classmenu_item btn>Register/button> /div> div classmenuSidebar> img altheartgames_sidebar src/images/index/manu_up.png /> /div> div idmenu_container> div idsidebarClose> span>✖/span> /div> ul idmenu> li idshop classmenu_item btn> a hrefhttps://heartgames.io/shop > div classicons> img altheartGames src/images/index/top_icon6.png classtab /> /div> strong classitem_text>MARKETPLACE/strong> /a> /li>/ul>script> const menu_elements { id: slot, href: https://heartgames.io/slot_main, imgSrc: /images/index/top_icon2.png, content: HEART SLOTS, target: , }, { id: bingo, href: https://heartgames.io/bingo_main, imgSrc: /images/index/top_icon3.png, content: BINGO HEARTS, target: , }, { id: team, href: https://heartgames.io/team, imgSrc: /images/index/top_icon4.png, content: TEAM, target: , }, { id: white_paper, href: https://docs.heartgames.io/, imgSrc: /images/index/top_icon5.png, content: WHITE PAPER, target: _blank, }, { id: need_help, href: https://heartgames.io/support/, imgSrc: /images/index/top_icon7.png, content: NEED HELP, target: , }, ; const menu_ref document.querySelector(#menu); const firstLi menu_ref.querySelector(li); menu_elements.map((item, n) > { const newLi document.createElement(li); const newA document.createElement(a); const newDiv document.createElement(div); const newStrong document.createElement(strong); const newImg document.createElement(img); menu_ref.insertBefore(newLi, firstLi); newLi.id item.id; newLi.className menu_item btn; newLi.appendChild(newA); newA.appendChild(newDiv); newA.target item.target; newA.href item.href; newA.appendChild(newStrong); newDiv.appendChild(newImg); newImg.src item.imgSrc; newImg.alt heartGames; newImg.className tab; newDiv.className icons; newStrong.className item_text; newStrong.textContent item.content; });/script> /div> div classmyPage_container> button idmyPage onClicklocation.href https://heartgames.io/myMain> i classfa-solid fa-user>/i> span>MY PAGE/span> /button> /div>!-- div idwallet_container>-->!-- div-->!-- idconnect_button-->!-- onclickconnectMetamask();-->!-- >-->!-- img-->!-- src/images/index/connect_button_up.png-->!-- onmouseoverthis.src/images/index/connect_button_down.png-->!-- onmouseoutthis.src/images/index/connect_button_up.png-->!-- />-->!-- /div>-->!-- div idhtc_container>img src/images/index/htc_bar.png />strong classhtc_text>/strong>/div>-->!-- /div>--> /div> /div>/div> div idcontent classcontent shopContent>script> const currentPage index;/script>div classmain_content_img>!-- img altheartgames_main src/images/web_modal/portrait/bg1.png />-->!-- img altheartgames_main src/images/web_modal/landscape/bg1.png />-->!-- img altheartgames_main src/images/web_modal/main/web_main_1p.png />--> div idmainTopText> h1>FREE TO PLAY/h1> strong> span>HeartCoin(HTC) strives to establish an integrated HeartGames/span> span>Universe ecosystem where DeFi, GameFi, P2E, and the community/span> span>operate in perfect synergy. In this ecosystem, NFTs and the/span> span>HTC are meticulously balanced according to supply and demand,/span> span>fostering a virtuous growth cycle./span> /strong> /div> div classmain_btnImg_container> div classmain_contentImg> img classweb_main_img altmainDexImg src/images/web_modal/main/portrait_bg1.png/> img classlandscape_main_img altmainDexImg src/images/web_modal/landscape/web_bg1.png/> /div> div idsign_con> a idnoLogin_ambass>img altheartgames_become src/images/index/become.png/>/a> a idlogin_ambass onclicklocation_ambassadors()>img altheartgames_become src/images/index/become.png/>/a> span onclickwebRegImg()>Register instantly/span> img altheartgames_and src/images/web_modal/main/and.png stylecursor: default /> div idmain_inGame classmain_inGame_btn> div> img altheartgames_game src/images/index/slot_play_logo.png/> button classmain_playBtn onclickmain_playSlot()> PLAY NOW /button> /div> !-- img altheartgames_game src/images/web_modal/main/and.png stylecursor: default />--> div> img altheartgames_game src/images/index/bingo_play_logo.png/> button classmain_playBtn onclickmain_playBingo()> PLAY NOW /button> /div> /div> /div> /div> span> span> h2>HTC token price/h2> span>$0.18/span> a hrefhttps://app.uniswap.org/tokens/polygon/0xDdF7A0F6b5b7446aABB79c72235a8fa9b72AB28B?chainpolygon target_blank>INFO (POLYGON)>/a> a hrefhttps://app.uniswap.org/tokens/arbitrum/0xC0BaA7Cdf5b539D29a1d49FB230361507678b4d2?chainarbitrum target_blank>INFO (ARBITRUM)>/a> /span> span> h2>7D Trading Volume/h2> span>$272.06/span> a hrefhttps://info.uniswap.org/#/polygon/tokens/0xDdF7A0F6b5b7446aABB79c72235a8fa9b72AB28B target_blank>INFO (POLYGON) >/a> a hrefhttps://info.uniswap.org/#/arbitrum/tokens/0xC0BaA7Cdf5b539D29a1d49FB230361507678b4d2 target_blank>INFO (ARBITRUM) >/a> /span> span> h2>Liquidity Pool TVL/h2> span>$1,643/span> !--a hrefhttps://app.uniswap.org/#/tokens/polygon/0xDdF7A0F6b5b7446aABB79c72235a8fa9b72AB28B target_blank>img altheartgames_uniSwap src/images/index/uniswap_up.png />/a>--> a hrefhttps://info.uniswap.org/#/polygon/tokens/0xDdF7A0F6b5b7446aABB79c72235a8fa9b72AB28B target_blank>INFO (POLYGON) >/a> a hrefhttps://info.uniswap.org/#/arbitrum/tokens/0xC0BaA7Cdf5b539D29a1d49FB230361507678b4d2 target_blank>INFO (ARBITRUM) >/a> /span> /span>/div>!--div classgame_submit_tap>-->!-- div idgameSubmit_title>-->!-- div>-->!-- img altheartsSlots src/images/index/top_icon2.png/>-->!-- strong>HEART SLOTS/strong>-->!-- /div>-->!-- div>-->!-- img altbingoHearts src/images/index/top_icon3.png/>-->!-- strong>BINGO HEARTS/strong>-->!-- /div>-->!-- /div>-->!-- div classweb_submit>-->!-- img altheartgames_game src/images/web_modal/main/web_main_2p.png />-->!-- div>-->!-- img altheartgames_game-->!-- src/images/web_modal/main/b_heart_slots.png-->!-- />-->!-- img altheartgames_game-->!-- src/images/web_modal/main/b_bingo_hearts.png-->!-- />-->!-- /div>-->!-- p>-->!-- span onclicklocation.href https://heartgames.io/slot_main-->!-- >Go to Heart Slots/span-->!-- >-->!-- span onclicklocation.href https://heartgames.io/bingo_main-->!-- >Go to Bingo Hearts/span-->!-- >-->!-- /p>-->!-- /div>-->!-- div classportrait_submit>-->!-- img altheartgames_locationGame src/images/web_modal/portrait/bg2.png />-->!-- p onclicklocation.href https://heartgames.io/slot_main>Go to Heart Slots/p>-->!-- div onclicklocation.href https://heartgames.io/bingo_main>Go to Bingo Hearts/div>-->!-- /div>-->!-- div classlandscape_submit>-->!-- img altheartgames_locationGame src/images/web_modal/landscape/bg2.png />-->!-- div>-->!-- span onclicklocation.href https://heartgames.io/slot_main-->!-- >Go to Heart Slots/span-->!-- >-->!-- span onclicklocation.href https://heartgames.io/bingo_main-->!-- >Go to Bingo Hearts/span-->!-- >-->!-- /div>-->!-- /div>-->!-- div idgameSubmit_textCon>-->!-- strong>-->!-- span>Welcome to Heart Slots, your free slots casino! Let us bring Las Vegas straight to you,-->!-- wherever you are, and join in on the slot-->!-- machine fun now. You can play free slot games-->!-- in our fun online casino, from your phone,-->!-- tablet or computer./span>-->!-- /strong>-->!-- strong>-->!-- span>Bingo Hearts - Most exciting Free Online Bingo Games-->!-- Bingo Hearts Online offers a variety of games.-->!-- Find Bingo Mode that suits you best and play-->!-- alone, with your friends, or with other players-->!-- all around the world./span>-->!-- /strong>-->!-- /div>-->!--/div>-->!--div classslide>-->!-- div classcontent_main>-->!-- img altheartgames_chain classblock src/images/web_modal/main/web_main_3p.png />-->!-- div idweb_cardName>-->!-- span>Man Series/span>-->!-- span>Woman Series/span>-->!-- span>Cat Series/span>-->!-- span>Monkey Series/span>-->!-- /div>-->!-- /div>-->!-- div classcontent_main>-->!-- img altheartgames_chain classblock src/images/index/main_3p.png />-->!-- /div>-->!-- div idNFT_web_textCon>-->!-- h2>NFTspan>(Non-Fungible Token)/span>/h2>-->!-- strong>-->!-- span>This is an essential element at the heart of the-->!-- GameFi. Minting can be done for free. By-->!-- owning a NFT you can acquire additional game-->!-- money while playing./span>-->!-- br>-->!-- br>-->!-- span>it has various DeFi functions such as entering-->!-- GameFi, profile picture. and Stacking. You can-->!-- also use $HTC to Enchant(NFT upgrade)./span>-->!-- br>-->!-- br>-->!-- span>We will enable user-to-user transactions-->!-- through our own marketplace and OpenSea./span>-->!-- br>-->!-- br>-->!-- span>We plan to add a system that allows users to-->!-- rent their NFTs to others through the NFT Rent-->!-- service. This allows users to generate revenue-->!-- in a variety of ways with high-grade NFTs./span>-->!-- /strong>-->!-- /div>-->!-- div idP2E_web_textCon>-->!-- h2>P2Espan>(Play to Earn)/span>/h2>-->!-- strong>-->!-- span>Our Social Casino Games is a healthy leisure game genre that combines best of the casino-->!-- and online gaming. Our aim is make players enjoy the game for free with the Free2Play-->!-- concept, while playing you can collect the profile parts to create an NFT of your liking to-->!-- be used as profile picture, and with help of this NFT you can earn HeartCoin.-->!-- /span>-->!-- br>-->!-- br>-->!-- span>We implemented a game economy in which game items, such as game money,-->!-- can be swapped to $HTC, and NFTs can be exchanged and used again /span>-->!-- br>-->!-- br>-->!-- span>The Heart Games Universe allows true Play and Earn by reinvesting the Game Credits earned in the Game into the game./span>-->!-- /strong>-->!-- /div>-->!--/div>-->!--div classyoutubeMain>-->!-- <!– img classyoutubeBlock src/images/index/main_4p.png>–>-->!-- img altheartgames_bg-->!-- idportrait_main2-->!-- classblock-->!-- src/images/web_modal/portrait/bg3.png-->!-- />-->!-- img altheartgames_bg-->!-- idlandscape_main2-->!-- classblock-->!-- src/images/web_modal/landscape/bg3.png-->!-- />-->!-- div idcardName>-->!-- span>Man Series/span>-->!-- span>Woman Series/span>-->!-- span>Cat Series/span>-->!-- span>Monkey Series/span>-->!-- /div>-->!-- div idNFT_textCon>-->!-- h2>NFTspan>(Non-Fungible Token)/span>/h2>-->!-- strong>-->!-- span>This is an essential element at the heart of the-->!-- GameFi. Minting can be done for free. By-->!-- owning a NFT you can acquire additional game-->!-- money while playing./span>-->!-- br>-->!-- br>-->!-- span>it has various DeFi functions such as entering-->!-- GameFi, profile picture. and Stacking. You can-->!-- also use $HTC to Enchant(NFT upgrade)./span>-->!-- br>-->!-- br>-->!-- span>We will enable user-to-user transactions-->!-- through our own marketplace and OpenSea./span>-->!-- br>-->!-- br>-->!-- span>We plan to add a system that allows users to-->!-- rent their NFTs to others through the NFT Rent-->!-- service. This allows users to generate revenue-->!-- in a variety of ways with high-grade NFTs./span>-->!-- /strong>-->!-- /div>-->!-- div idP2E_textCon>-->!-- h2>P2Espan>(Play to Earn)/span>/h2>-->!-- strong>-->!-- span>Our Social Casino Games is a healthy leisure game genre that combines best of the casino-->!-- and online gaming. Our aim is make players enjoy the game for free with the Free2Play-->!-- concept, while playing you can collect the profile parts to create an NFT of your liking to-->!-- be used as profile picture, and with help of this NFT you can earn HeartCoin.-->!-- /span>-->!-- br>-->!-- br>-->!-- span>We implemented a game economy in which game items, such as game money,-->!-- can be swapped to $HTC, and NFTs can be exchanged and used again /span>-->!--<!– br>–>-->!--<!– br>–>-->!--<!– span>The Heart Games Universe allows true Play and Earn by reinvesting the Game Credits earned in the Game into the game./span>–>-->!-- /strong>-->!-- /div>-->!-- h2>HOW TO PLAY/h2>-->!-- div>-->!-- iframe-->!-- classyoutubeVideo-->!-- srchttps://youtube.com/embed/Q_h52vE60gw-->!-- >/iframe>-->!-- <!– youtube autoplay 추가 사운드는 정책상 음소거로 해놔야 자동재생 가능–>-->!-- /div>-->!--/div>-->div classseeMore_container> div onclicklocation.href https://heartgames.io/index_under> span>See More/span> strong>▼/strong> /div>/div>div idtail_logo> a href#content idlogo classheader_items> div> img idmain_footer_logo altheartgames_footer src/images/web_modal/main/logo.png /> img idbingo_footer_logo altbingoHeart src /images/bingo/main/1p_logo.png> img idslot_footer_logo altheartSlots src/images/index/slot_play_logo.png /> /div> /a> div classsocial_box>!-- pc 화면은 문제 없지만 모바일UI 구현은 불가능함-->!-- a hrefhttps://heartgames.io/support/>-->!-- div classhelp_fan>-->!-- img-->!-- altheartSlots src/images/slot/main/need_up.png-->!-- onmouseoverthis.src/images/slot/main/need_down.png-->!-- onmouseoutthis.src/images/slot/main/need_up.png-->!-- />-->!-- /div>-->!-- /a>--> a hrefhttps://www.facebook.com/HeartGames.io idfacebook_social classfooter_items target_blank> div> img altheartgames_facebook src/images/footer/facebook.png /> span>Facebook/span> /div> /a> a hrefhttps://discord.gg/QZ6bDTjTYn iddiscord_social classfooter_items target_blank> div> img altheartgames_discord src/images/footer/discord.png /> span>Discord/span> /div> /a> a hrefhttps://twitter.com/HeartGames_NFT idtwitter_social classfooter_items target_blank> div> img altheartgames_twitter src/images/footer/twitter.png /> span>Twitter/span> /div> /a> a hrefhttps://t.me/heartgames idtelegram_social classfooter_items target_blank> div> img altheartgames_telegram src/images/footer/telegram.png /> span>Telegram/span> /div> /a> a hrefhttps://www.instagram.com/heart2games/ idinstagram_social classfooter_items target_blank> div> img altheartgames_instagram src/images/footer/instagram.png /> span>Instagram/span> /div> /a> /div>/div>script> const mainLogo document.querySelector(#main_footer_logo); const bingoLogo document.querySelector(#bingo_footer_logo); const slotLogo document.querySelector(#slot_footer_logo); if (currentPage main) { mainLogo.style.display block; bingoLogo.style.display none; slotLogo.style.display none; } else if (currentPage bingo) { mainLogo.style.display none; bingoLogo.style.display block; slotLogo.style.display none; } else if (currentPage slot) { mainLogo.style.display none; bingoLogo.style.display none; slotLogo.style.display block; } else { mainLogo.style.display block; bingoLogo.style.display none; slotLogo.style.display none; }/script>script> console.log(index.html); // 페이지 로딩 후에 호출되는 함수 // function updateMetaCanonical(canonical) { // var metaTag document.querySelector(metarelcanonical); // if(metaTag) { // metaTag.setAttribute(href, canonical); // } // } // updateMetaCanonical(https://heartgams.io); // function updateMetaDescription(description) { // var metaTag document.querySelector(metanamedescription); // if (metaTag) { // metaTag.setAttribute(content, description); // } // } // // 페이지 로딩 후에 updateMetaDescription 함수를 호출하여 meta> 태그 내용을 설정 // updateMetaDescription(HeartCoin proposes a P2E model by adoption of DeFi monetization with focus on NFT. HeartCoin is intended for using with the NFTs through P2E gameplay of Heart Slots and Bingo Hearts games.); // // 필요한 함수 정의 // const list document.querySelector(.slide__list); // const items document.querySelectorAll(.content_main); // const buttons document.querySelector(.slideBtn); // const paginations document.querySelector(.slidePaginations); // const lastIndex items.length - 1; // let selected 0; // let interval; // // // 유틸 함수 // const setTransition (value) > { // list.style.transition value; // }; // // const setTranslate ({ index, reset }) > { // if (reset) list.style.transform `translate(-${list.clientWidth}px, 0)`; // else // list.style.transform `translate(-${ // (index + 1) * list.clientWidth // }px, 0)`; // }; // // const activePagination (index) > { // ...paginations.children.forEach((pagination) > { // pagination.classList.remove(on); // }); // paginations.childrenindex.classList.add(on); // }; // // // 다음 이전 버튼생성 // const handlePrev () > { // selected - 1; // setTransition(transform 0.7s linear); // setTranslate({ index: selected }); // if (selected 0) { // selected lastIndex; // setTimeout(() > { // setTransition(); // setTranslate({ index: selected }); // }, 700); // } // if (selected > 0) activePagination(selected); // }; // // const handleNext () > { // selected + 1; // setTransition(transform 0.7s linear); // setTranslate({ index: selected }); // if (selected > lastIndex) { // selected 0; // setTimeout(() > { // setTransition(); // setTranslate({ index: selected }); // }, 700); // } // if (selected lastIndex) activePagination(selected); // }; // // // click sound // function slideSound() { // new Audio(/sounds/arrow_click.mp3).play(); // } // // const makeButton () > { // if (items.length > 1) { // const prevButton document.createElement(button); // prevButton.classList.add(slideBtn__prev); // prevButton.innerHTML i classfas fa-arrow-left>/i>; // // prevButton.addEventListener(mouseover, () > { // // playSound(); // // }); // prevButton.addEventListener(click, handlePrev); // prevButton.addEventListener(click, slideSound); // // const nextButton document.createElement(button); // nextButton.classList.add(slideBtn__next); // nextButton.innerHTML i classfas fa-arrow-right>/i>; // nextButton.addEventListener(click, handleNext); // nextButton.addEventListener(click, slideSound); // // buttons.appendChild(prevButton); // buttons.appendChild(nextButton); // } // }; // // 페이지네이션 버튼 만들기 // const handlePagination (e) > { // if (e.target.dataset.num) { // selected parseInt(e.target.dataset.num); // setTransition(all 0.7s linear); // setTranslate({ index: selected }); // activePagination(selected); // } // }; // // const makePagination () > { // if (items.length > 1) { // for (let i 0; i items.length; i++) { // const button document.createElement(button); // button.dataset.num i; // button.classList.add(slidePagination); // if (i 0) { // button.classList.add(on); // } // paginations.appendChild(button); // paginations.addEventListener(click, handlePagination); // } // } // }; // // 무한으로 슬라이드 하기 위해 index0, 마지막 클론 이미지 생성 // const cloneElement () > { // list.prepend(itemslastIndex.cloneNode(true)); // list.append(items0.cloneNode(true)); // setTranslate({ reset: true }); // }; // // 자동 슬라이드 구현 // const autoplayIterator () > { // selected + 1; // setTransition(all 0.7s linear); // setTranslate({ index: selected }); // if (selected > lastIndex) { // activePagination(0); // clearInterval(interval); // setTimeout(() > { // selected 0; // setTransition(); // setTranslate({ reset: true }); // autoplay({ duration: 5000 }); // }, 700); // } // if (selected lastIndex) activePagination(selected); // }; // // const autoplay ({ duration }) > { // interval setInterval(autoplayIterator, duration); // }; // // const render () > { // makeButton(); // makePagination(); // cloneElement(); // autoplay({ duration: 5000 }); // }; // render(); function mainLogoImg() { mask.style.visibility visible; document.querySelector(#modalSignIn).style.visibility visible; document.querySelector(#menu_container).classList.remove(on); document.querySelector(#modalSignIn).classList.add(modalOn); document.querySelector(#dimmed).style.visibility hidden; // 이거 에러남 묻 } function webRegImg() { mask.style.visibility visible; document.querySelector(#modalRegister).style.visibility visible; document.querySelector(#menu_container).classList.remove(on); document.querySelector(#modalRegister).classList.add(modalOn); document.querySelector(#dimmed).style.visibility hidden; // 이거 에러남 묻 } if ( ! && ! ) { document.querySelector(#login_ambass).style.display flex; document.querySelector(#noLogin_ambass).style.display none; // document.querySelector(.main_content_img > .main_btnImg_container > div > img).style.display none; document.querySelector(.main_content_img > .main_btnImg_container > div > span).style.display none; } else { document.querySelector(#login_ambass).style.display none; document.querySelector(#noLogin_ambass).style.display flex; // document.querySelector(.main_content_img > .main_btnImg_container > div > img).style.display block; document.querySelector(.main_content_img > .main_btnImg_container > div > span).style.display flex; } const clearOtherSessionStorage () > { sessionStorage.removeItem(accountIndex); sessionStorage.removeItem(shopIndex); sessionStorage.removeItem(swapIndex); sessionStorage.removeItem(ambassadorIndex); sessionStorage.removeItem(my_menu_event_index); }; /* * 클릭 이벤트 감지하는 스니펫 * gtag(event, clickAmbassador, 클릭앰버서더는 이벤트명이라 이걸로 어떤이벤트인지 판별함 * event_category: Ambassador, 카테고리 명정해주는 변수 * event_label: ClickAmbassador, 그냥 라벨인데 카테고리랑 똑같이 사용하면될듯? * */ const location_ambassadors () > { gtag(event, clickAmbassador, { event_category: Ambassador, event_label: ClickAmbassador, }); clearOtherSessionStorage(); sessionStorage.setItem(setMenuItem, 3); sessionStorage.setItem(ambassadorIndex, 0); location.href https://heartgames.io/myMain; }; document.querySelector(#noLogin_ambass).addEventListener(click, () > { window.open(https://medium.com/@heartgames/heartgames-become-an-ambassador-bca04300afd5, _blank, width1200, height800, top0,left0); })/script>/div> /div> /div> !-- div idsignup_container_name>-->!-- form classsignup-form actionjavascript:signup_name() methodpost>-->!-- br>br>-->!-- div classinput-group>-->!-- label>Nickname/label>-->!-- input classsignup-input-name typename namename required placeholder5-15 Characters autocompleteoff>-->!-- /div>-->!-- div classname-error-messages stylevisibility: hidden;>Incorrect name. Please, try again./div>-->!-- <!– 밑에 이메일 agreement 2개 전부 clearErrorMsg 순서맞추기위해서 그냥 안쓰는데 선언만 해둠–>-->!-- div classemail-error-messages>Incorrect email address. Please, try again./div>-->!-- div classagreement-error-messages>Please, check in the Agreement to join./div>-->!-- div classexist-error-messages stylevisibility: hidden;>Email already exists. Please, try again./div>-->!-- <!– –>-->!-- button classsignup-btn typesubmit>-->!-- img classsignup-btn-img src/images/web_signup/signup_up.png onmouseoverthis.src/images/web_signup/signup_down.png onmouseoutthis.src/images/web_signup/signup_up.png>-->!-- /button>-->!-- br>br>br>br>br>br>-->!-- /form>-->!-- /div>-->div idsignup_container_email classsignup_container_email> div classmodalX> i classfa-solid fa-xmark>/i> /div> span>Enter additional information/span> form classsignup-form actionjavascript:signup_email() methodpost> div classinput-group nickName_box> label>Usernamespan> */span>/label> input classsignup-input-name typename namename required autocompleteoff /> div classname-error-messages styledisplay: none> Incorrect name. Please, try again. /div> /div> div classinput-group email_box> label>E-mailspan> */span>/label> input classsignup-input-email typeemail nameemail required autocompleteoff /> /div> div classinput-group c_email_box> label>Confirm E-mailspan> */span>/label> input classsignup-input-c_email typeemail namec_email required autocompleteoff /> /div> div classemail-error-messages> Incorrect email address. Please, try again. /div> div classexist-error-messages> Email already exists. Please, try again. /div> button classsignup-btn signup-btn-img typesubmit>continue/button> h3> Already have an account? span onclicksignInAnAccount()>Sign In/span> /h3> /form>/div> div idsystem_link classsystem_link> div classmodalX> i classfa-solid fa-xmark>/i> /div> span>Connect Your Accounts/span> div idmodal_system_link> div idfb-connect-container_system_link> div classnot_connect_box> img altheartgames_register src/images/web_modal/main/register_f_btn_up.png /> button typecheckbox idf-modal-toggle classmodal_toggleSwitch onclicklink_modal_fb()>CONNECT/button> span classfb-modal-notConnect-msg>Log In Facebook/span> /div> div classlink_connect> span> img altheartgames_register src/images/web_modal/main/register_f_btn_up.png />!-- button onclicksignIn_facebook()>CONNECT/button>--> span>ACTIVE NOW/span> /span> div> span>FaceBook User-name/span> input idf-name typetext disabled placeholderneed a Facebook connection/> /div> /div> /div> p> img altheartgames_or src/images/web_modal/main/or.png /> /p> div idmetamask-connect-container_system_link> div classnot_connect_box> img altheartgames_register src/images/web_modal/main/register_m_btn_up.png /> button typecheckbox idm-modal-toggle onclicklink_modal_mm() classmodal_toggleSwitch>CONNECT/button> span classm-modal-notConnect-msg>Connect MetaMask/span> /div> div classlink_connect> span> img altheartgames_register src/images/web_modal/main/register_m_btn_up.png />!-- button onclicksignIn_Metamask()>CONNECT/button>--> span>ACTIVE NOW/span> /span> div> span>MetaMask WalletAddress/span> input idm-wAdd typetext disabled placeholderneed a Metamask connection/> /div> /div> /div> p> img altheartgames_register src/images/web_modal/main/or.png /> /p> div iddiscord-connect-container_system_link> div classnot_connect_box> img src/images/web_modal/main/register_d_btn_up.png /> button typecheckbox idd-modal-toggle onclicklink_modal_dc() classmodal_toggleSwitch>CONNECT/button> span classd-modal-notConnect-msg>Join Discord/span> /div> div classlink_connect> span> img src/images/web_modal/main/register_d_btn_up.png />!-- button onclicksignIn_discord()>CONNECT/button>--> span>ACTIVE NOW/span> /span> div> span>Discord User-name/span> input idt-name typetext disabled placeholderneed a Discord connection/> /div> /div> /div> !-- 트위터 주석해제-->!-- p>-->!-- img altheartgames_register src/images/web_modal/main/or.png />-->!-- /p>-->!-- div idtwitter-connect-container_system_link>-->!-- div classnot_connect_box>-->!-- img src/images/web_modal/main/register_t_btn_up.png />-->!-- button typecheckbox idt-modal-toggle onclicklink_modal_dc() classmodal_toggleSwitch>CONNECT/button>-->!-- span classt-modal-notConnect-msg>Join Twitter/span>-->!-- /div>-->!-- div classlink_connect>-->!-- span>-->!-- img src/images/web_modal/main/register_t_btn_up.png />-->!--<!– button onclicksignIn_discord()>CONNECT/button>–>-->!-- span>ACTIVE NOW/span>-->!-- /span>-->!-- div>-->!-- span>Discord User-name/span>-->!-- input idd-name typetext disabled placeholderneed a Twitter connection/>-->!-- /div>-->!-- /div>-->!-- /div>--> span> span>b>Caution :/b> Once you connected account, you can not change it./span> p>You can sign in with any of your connected accounts./p> /span> /div>/div>!-- div idcookieModal classcookieModal> span>Your privacy/span> div classcookie_comment> p>쿠키 동의 팝업 띄울때 동시에 팝업 허용 해주시기 바랍니다도 같이 알림 그래야지 사이트 이용 가능합니다/p> p>문구는 한나한테 받고/p> p>이거 값이 없으면 동의를 안한거니깐 동의할때까지 사이트를 이용 못하게 막음/p> /div> div classcookie_accept_btn> button onclickcookieAccept()>Accept all cookies/button> button onclickcookieRefuse()>refuse cookies only/button> /div>/div>--> script> function setCookie(name, value 1, expireHours 9999, path /) { // 이 함수 안씀 서버에서 못사용함 쓰레기 let expires ; if (expireHours) { let date new Date(); date.setTime(date.getTime() + expireHours * 24 * 60 * 60 * 1000); expires `expires${date.toUTCString()};`; } document.cookie `${name}${value || };${expires}path${path}`; } function getCookie(name) { var cookieArr document.cookie.split(;); for (var i 0; i cookieArr.length; i++) { if(cookieArri.split()0.trim() name) if (cookieArricookieArri.length - 1 ! ) return cookieArri.split()1; } return ; } //setCookie(signedRequest, authResponse.signedRequest, 1); // // if(1 getCookie(cookiePopup)) { // // 쿠키 동의 팝업 띄울때 동시에 팝업 허용 해주시기 바랍니다도 같이 알림 그래야지 사이트 이용 가능합니다 // // 999년도로 // // 문구는 한나한테 받고 // // 이거 값이 없으면 동의를 안한거니깐 동의할때까지 사이트를 이용 못하게 막음 // document.querySelector(#cookieModal).style.visibility hidden; // } else { // document.querySelector(#cookieModal).style.visibility visible; // const tagSignIn document.querySelector(#modalSignIn); // const tagSignUp document.querySelector(#modalRegister); // const parentSignIn tagSignIn.parentNode; // const parentSignUp tagSignIn.parentNode; // parentSignIn.removeChild(tagSignIn); // parentSignUp.removeChild(tagSignUp); // } // // const cookieAccept () > { // setCookie(cookiePopup); // document.querySelector(#cookieModal).style.visibility hidden; // location.reload(); // }; // const cookieRefuse () > { // document.querySelector(#cookieModal).style.visibility hidden; // }; // const cookie_popup () > { // if(1 ! getCookie(cookiePopup)) { // document.querySelector(#cookieModal).style.visibility visible; // } // }; const currentUrl window.document.location.href; console.log(currentUrl no cookie); console.log(currentUrl); const currentHref () > { console.log(window.location.href : , window.location.href); /*let changeStr window.location.href.replace(heartgames, freeslot); const resultStr changeStr.replace(http:, https:);*/ let resultStr window.location.href; if (null ! window.location.href.match(http:)) { resultStr resultStr.replace(http:, https:); } if (null ! window.location.href.match(freeslot.io)) { //resultStr resultStr.replace(freeslot.io, https://heartgames.io/slot_main); resultStr https://heartgames.io/slot_main; } else if (null ! window.location.href.match(freebingo.io)) { //resultStr resultStr.replace(freebingo.io, heartgames.io/bingo_main); resultStr https://heartgames.io/bingo_main; } if (window.location.href ! resultStr) { gtag(event, currentHref, { event_category: event_category_currentHref, event_label: event_label_currentHref, }); window.location.assign(resultStr); } }; currentHref(); console.log(urls.slot_url); console.log(https://heartgames.io/slot_main); console.log(urls.mypage_url); console.log(https://heartgames.io/myMain); const mask document.querySelector(#mask); const signIn document.querySelector(#signIn); const signUp document.querySelector(#signUp); const link_ad /link/; // let agreementChecked false; $(document).ready(function () { // $(.checkbox).click(function () { // if (agreementChecked) { // // $로 표시하는것들은 0 1 아이템 구별이 없는듯 똑같은듯? // $(.checkbox-img).css(visibility, hidden); // agreementChecked false; // } else { // $(.checkbox-img).css(visibility, visible); // agreementChecked true; // } // }); $(#mask).click(function () { // 이거는 그냥 배경 어두워질때 그 배경 누르면 작동하는 것들임 $(.signup_container).css(visibility, hidden); $(#signup_container_email).css(visibility, hidden); $(#signup_container_name).css(visibility, hidden); $(#mask).css(visibility, hidden); $(.checkbox-img).css(visibility, hidden); clearErrorMsg(); // agreementChecked false; }); /*$(#test).click(function () { $.ajax({ type: POST, url: https://localhost/test, success: function (data) { console.log(data: , data); }, error: function (e) { alert(e.responseText); }, }); });*/ }); //////////////// console.log(FB_logout, ); if (1 ) { // 이거 가라페이지 자동으로 계속 로그인 시도하는데 로그아웃 응답을 받아도 다시 로그인 시도하니깐 로그아웃을 못거침 그래서 유저입장에서 자꾸 새로고침만 됨 fb_ad link 일때 // 이거 가라페이지로 접속할때는 무조건 로그아웃을 시키게 해야하나? /*(색인):1403 Uncaught ReferenceError: FB is not defined at (색인):1403:11*/ // 너무 빠르게 하면 이게 많이뜸 0.2초는 있어야하나? setTimeout(function (success) { //바로쓰면 에러남 나중에 씀 FB 함수 FB.getLoginStatus(function (response) { console.log(FB.getLoginStatus logout); if (response.status connected) { //Logged into your webpage and Facebook. console.log(InitState.FB.logout();(): response, response); FB.logout(); alert(FB_logout); location.href ; } else { //Not logged into your web page or we are unable to tell. //console.log(InitState.FB.logout();():##### Logged out. Go to landing page...); //FB.logout(); } }); }, 200); } console.log(errMsg : , );/* if (-9001 || -9101 ) { alert(This account already exist. Please login); } else if(-9002 || -9102 ) { alert(This account does not exist. Please register); } else if(-9802 || -999 ) { alert(You need to enter additional information. You can sign in. Sign up Please proceed again.); } else */if( ! ) { alert(); } if(null currentUrl.match(link_ad)) { // 광고 홍보 링크등 전용 로직탈때는 이거 안타게 근데 디스코드는 타야되는데? 뭐 금방 페이지 변경될테니간 잠깐 안해도 노상관일듯 디스코드여도 if ( ! && ! ) { //my 페이지로 변경할 조건 쿠키값이 이럴대 document.querySelector(#signIn).style.display none; document.querySelector(#signUp).style.display none; document.querySelector(#myPage).style.display flex; } else { document.querySelector(#signIn).style.display block; document.querySelector(#signUp).style.display block; document.querySelector(#myPage).style.display none; } }/* const SIGNUP_NAME_ID 1; const SIGNUP_EMAIL_ID 2;*//* // 서버 router index.js에서 locale로 넣어줘야함 그때 locale에는 쿠키꺼를 넣어주고 const SIGNUP ; // 쿠키값이 스트링이면 한번 싱글따옴표로 감싸주기 const LOGINTYPE ; const ACCESSTOKEN ; const FB_WEB_ID ; const DISCORD_ID ; const walletAddress ;*/ //const NAME ; // {} 이거는 쿠키값이 아니라 local. 에 넣는값임 착각하지말기 console.log(email : ); console.log(signUp , ); console.log(loginType , ); console.log(accessToken , ); console.log(fb_web_id , ); console.log(timezone, ); console.log(currentUrl coookie, ); console.log(skip_register_facebook, ); //console.log(NAME , NAME); function getTimezone() { const timezoneOffset Math.round(new Date().getTimezoneOffset() / 60); return timezoneOffset > 0 ? 24 - timezoneOffset : Math.abs(timezoneOffset); } /////////// // res.locals. 여기다가 항상 undefined말고 공백으로 넣기 if문에 그렇게 해서 웹클라에서 공배긍로 비교만 하게 하기 clearCookie땜에 공백으로 넣을때가 너무 많음 // 근데 공백 이 쓸대가 많음 의미가 잇음 undefiend가 맞기는 한데 ? 이런거 없는거 쓰면 공백임 그냥 공백으로 해야할듯/* if (undefined ) { console.log(undefined \\ ); } if (undefined ) { console.log(undefined \timezone\ ); } if ( ) { console.log( \timezone\ ); }*/ /////////// // 이 쿠키 값은 안없애야함 계속 유지 실시간 변경해야하고 사실 따지고보면 그냥 플레이버튼 눌렀을때?? 제대로 값을 갖는것도 좋을듯도한데?? // 이방법은 최적화가 아닌 방법 let WidthMode 1; if(window.innerWidth 768) { WidthMode 2; } else { WidthMode 1; } //쿠키 타임존 await안하고 진행 만약에 타임존쿠키없으면 메타마스크 페북 전부 리턴 시키고 에러 시간텀이 잇으니간 될듯? 근데 생각해보니간 유저별로 데이터 유지가 되나? if ( || || ! currentUrl || || ! WidthMode ) { setCookieTimezone(); } function setCookieTimezone() { console.log(setCookieTimezone()); const url https://heartgames.io/setCookieTimezone; const timezone getTimezone(); console.log(setCookieTimezone()); console.log(url); // 그냥 ajax가 안되는듯한데?? 노드모듈 날라갓나?? 클라니간 노드모듈이 아니라 그 위에 태그로 라이브러리 불러오는게 문제임 // 그게 문제가아니라 서버문제같은데 뭐지? // 사이트를 127.0.0.1로 열면 무슨 문제가 생기고 https://localhost:8765/ 로컬호스트로 열어야지 문제가 없는듯 쿠키도 잘 저장되고 $.ajax({ type: POST, url, data: { timezone: timezone, WidthMode: WidthMode }, success: function (data) { console.log(slot setCookieTimezone() success); }, error: function (e) { alert(slot setCookieTimezone() err); alert(e.responseText); location.href ; }, }); } function setCookieWidthMode() { if(window.innerWidth 480) { } console.log(setCookieWidthMode()); const url https://heartgames.io/setCookieWidthMode; const WidthMode getWidthMode(); $.ajax({ type: POST, url, data: { WidthMode: WidthMode, }, success: function (data) { console.log(slot setCookieWidthMode() success); }, error: function (e) { alert(e.responseText); location.href ; }, }); } //setCookieWidthMode(); //console.log(window.innerWidth, window.innerWidth); /////// ////////// if(1 ) { const consoleLog } else if(1 \\) {; console.log(consoleLog);/* setTimeout(function (success) { //// 이게 시간이 좀 걸려서 바로 FB 어쩌고 함수 쓸려면 에러뜸 settimeout거치고 함수실행해야할듯 signUp_facebook(); }, 1000);*/ } else if(1 ) { const consoleLog } else if(1 \\) {; console.log(consoleLog); signUp_discord(); } else if(1 ) { const consoleLog if(1 ) {; console.log(consoleLog); document.querySelector(#dimmed).style.visibility visible; // 이거 에러남 묻 // mask.style.visibility visible; RegisterAnAccount(); } else if (2 ) { const consoleLog if(1 ) {; console.log(consoleLog); document.querySelector(#dimmed).style.visibility visible; // 이거 에러남 묻 document.querySelector(#signup_container_email).style.visibility visible; document .querySelector(#signup_container_email) .classList.add(modalOn); if ( ! ) { console.log(if( ! local) {); const nickName_box document.querySelector(.nickName_box > input); nickName_box.disabled true; nickName_box.style.background gray; nickName_box.value ; nickName_box.style.color white; } if ( ! ) { const email_box document.querySelector(.email_box > input); email_box.disabled true; email_box.style.background gray; email_box.value ; email_box.style.color white; const c_email_box document.querySelector(.c_email_box > input); c_email_box.disabled true; c_email_box.style.background gray; c_email_box.value ; c_email_box.style.color white; } /* $(#signup_container_email).css(visibility, visible); $(#mask).css(visibility, visible);*/ // id이면 # class 이면 . //$(#signup_container_name).css(visibility, visible); //$(.signup_container).css(visibility, visible); //$(#mask).css(visibility, visible); } else if(1 ) { const consoleLog if(1 ) {; console.log(consoleLog); // mask.style.visibility visible; document.querySelector(#dimmed).style.visibility visible; // 이거 에러남 묻 signInAnAccount(); } else { if (null currentUrl.match(link_ad)) { console.log(SignIn SignUp Remove); mask.style.visibility hidden; document.querySelector(#signup_container_email).style.visibility hidden; document .querySelector(#signup_container_email) .classList.remove(modalOn); document.querySelector(#modalSignIn).style.visibility hidden; document.querySelector(#menu_container).classList.remove(on); document.querySelector(#modalSignIn).classList.remove(modalOn); } }/* if (SIGNUP_EMAIL_ID SIGNUP) { const consoleLog slot/if(2 ) {; console.log(consoleLog); // id이면 # class 이면 . $(#signup_container_email).css(visibility, visible); //$(.signup_container).css(visibility, visible); $(#mask).css(visibility, visible); }*/ function clearErrorMsg() { //메타마스크가입창item(0) 이메일받는가입창item(1) 이거 선언 순서대로 작동하는듯 근데 선언안된것도 name쪽 0 1 써도 문제를 없을듯한데?? // 선언안된거 hidden 넣을려고 하면 에러뜸 주의 //0은 그냥 원래 안동현이 만들던거 이름 이메일 같이 받는것 근데 이제 안쓰임 console.log(clearErrorMsg 1); document .getElementsByClassName(name-error-messages) .item(0).style.display none; document .getElementsByClassName(email-error-messages) .item(0).style.display none; document .getElementsByClassName(exist-error-messages) .item(0).style.display none; // document // .getElementsByClassName(agreement-error-messages) // .item(0).style.display none; /* console.log(clearErrorMsg 2); //1이면 이름 가입창 document .getElementsByClassName(name-error-messages) .item(SIGNUP_NAME_ID).style.display none; document .getElementsByClassName(agreement-error-messages) .item(SIGNUP_NAME_ID).style.visibility hidden; console.log(clearErrorMsg 3); //2이면 이메일 가입창 document .getElementsByClassName(email-error-messages) .item(SIGNUP_EMAIL_ID).style.visibility hidden; document .getElementsByClassName(exist-error-messages) .item(SIGNUP_EMAIL_ID).style.visibility hidden; document .getElementsByClassName(agreement-error-messages) .item(SIGNUP_EMAIL_ID).style.visibility hidden;*/ } console.log(document.cookie); console.log(document.cookie); console.log(document.cookie WidthMode); console.log(getCookie(WidthMode)); function setCookiesignedRequest(signedRequest) { console.log(slot setCookiesignedRequest()); const url https://heartgames.io/setCookiesignedRequest; $.ajax({ type: POST, url, data: { signedRequest: signedRequest, }, success: function (data) { console.log(slot setCookiesignedRequest() success); location.href https://heartgames.io/auth/facebook; }, error: function (e) { alert(e.responseText); location.href ; }, }); } //Log In function logInFacebook() { //FB 이용해서 왜 로그인을 하는지 조금 고민됫는데 그래야지 FB 로그인창 뜨면서 연동이되는듯 그래서 사용은 해야할듯 // 다른 예외처리 로그아웃등등 은 어덯게 처리될지 확인 // 아니지 다시 생각해보니 기존 로직은 그냥 auth/facebook 링크로 보내기만 해도 자동으로 페북 로그인 진행됫음 // 그러니간 결론은 여기서 FB init 이딴거 할필요가 없음 gtag(event, loginFacebook, { event_category: event_category_loginFacebook, event_label: event_label_logInFacebook, }); const consoleLog logInFacebook():; console.log(consoleLog); //FB.login(onLogin); // 스트래터지 라이브러리를 뜯어 고쳐야하나? 아니면 내가 새로 만들던가 권한창 안뜨게 //location.href https://heartgames.io/auth/facebook; FB.getLoginStatus(function (response) { console.log(InitState.onLoginStatus(): response, response); if (connected response.status) { //FB.logout(); //test //return; //test //Logged into your webpage and Facebook. //여기안에서 로그아웃해야지 진짜 초기화가 됨 웹에서 내꺼 계정 로그아웃은 상관도 없음 //로그아웃함수는 리스폰스가 없음 로그인함수는 있는데 //FB.logout(); //패스포트는 브라우저에서 로그인했는지 로그아웃했는지 파악을 잘함 그로직을 써서 하는게 좋을듯 //만약에 sdk에서 로그인하면 패스포트도 자연스럽게 로그인이됨 근데 로그아웃은 sdk가 로그인되어있어도 패스포트는 로그아웃일수가있음 반대 상황은 문제가없고 //페이스북 쿠키가 존재하는지 여부로 로그아웃시키고 로그인을 시키는 방식을 사용할수잇을듯? 안된다고함 상당히 어려운방식을 써야할듯 일단 기억만 //https://hexanaut.io/ // 이거는 특징적인게 가입 맨처음 권한줄때 모바일 반응형이 아니라 PC 화면인것마냥 불편하게 되어있었음 그래야지만 다음에 로그인할때 권한 유지 안묻나? var authResponse response.authResponse; console.log(authResponse.signedRequest); console.log(authResponse.signedRequest); console.log(authResponse); console.log(authResponse); // 클라 페북 api에서 엑세스토큰을 바로 얻는다면 굳이 dialog를 거칠필요도 없지 지금 그런듯 //return; //test //setCookiesignedRequest(authResponse.signedRequest); setCookie(signedRequest, authResponse.signedRequest, 1); //location.href https://heartgames.io/auth/facebook/callback; location.href `https://heartgames.io/auth/facebook/callback?access_token${authResponse.accessToken}&fb_web_id${authResponse.userID}`; //MyInfo.setFacebookId(authResponse.userID); //MyInfo.setAccessToken(authResponse.accessToken); //MyInfo.setToken(authResponse.signedRequest); //this.changeNextState({accessToken: MyInfo.getToken(), player_id: MyInfo.getFacebookId()}); if(authResponse null) { alert(팝업차단을 해제하라는 알림); } } else { //Not logged into your web page or we are unable to tell. console.log( InitState.onLoginStatus():##### Logged out. Go to landing page... ); //return; //test FB_login_first(); // 이거 팝업창 해제 안풀리면 어차피 안켜지니간 권한을 주셔야지 play 가능합니다 라고 alert 창 띄우기 //alert(팝업차단을 해제하라는 알림); //location.href https://heartgames.io/main; // window.open(https://devweb.freebingo.io/, _self); //if (AppInfo.isFacebookMode() && !this.isLoggedIn) { // this.isLoggedIn true; //FBWebAgent.login(createjs.proxy(this.onLoginStatus, this)); //} } }); //const url https://heartgames.io/auth/facebook; //auth/facebook/ 같은경우는 get으로 보내야함 post면 에러남 주의 // get이 안되는 이유가 가만히 보니간 페이스북 로그인 페이지랑 연결되는데 그쪽이랑 통신이 안되게 페북이 보안으로 막아 놓음듯? // 근데 생각해보면 이게 바로 직빵으로 페북로그인이랑 연결되는게 아니라 웹서버를 거치고 가는데 그런데도 안되나?? // get이아니라 post로 서버까지 바꿀가 고민? // 근데 생각을 해보면 어차피 페북 로그인을 하던 실패를 하던 전부 callbackurl로 가니깐 거기서 웹클라에 전송하는 방법을 생각해야겟음 /*$.ajax({ type: GET, url, success: function (data) { if (data unsigned) { console.log(consoleLog + if (data \unsigned\) {); $(#signup_container_facebook).css(visibility, visible); $(#mask).css(visibility, visible); } else if (data ok) { console.log(consoleLog + } else if (data \ok\) {); // 이거 안해도됨 서버 facebook callback에서 알아서 보내줌 //location.href https://heartgames.io/game; } }, error: function (e) { alert(e.responseText); } });*/ } function FB_login_first() { // 이게 이 함수로 넘어오면 브라우저에서는 로그인을 해도 이 앱에서는 로그인한적이 없으니 뜬다는건데 중요한점은 팝업창으로 뜬다는점 팝업창으로 안뜨게 못하나? 가라페이지 위해서 // FB.login( 이거는 팝업으로 뜸 이게 가라페이지에 적용할려면 클라 페북api에서부터 팝업이 안뜨게 해야하는데? // 맨처음 로그인할때는 이 함수를 거치는데 여기서는 FB.login을 안쓰게 할가?? 그러면 되기는 하는데 다음 로그인에서부터 쓰게하면 하여간 가입은 일단 되게하는거니간 // dialog로 권한을 줘도? 그 다음에도 페북에 로그인을 한거지 heartgames.io 앱에 로그인한걸로 안쳐서 계속 로그인안했다고 보내는듯 // 이러면 안되는데? // 모바일로도 테스트해봐야겟음 클라 fb login은 팝업창이 띄어지기는 하는데 그 전에 앞서 dialog로 권한 주기가 끝난거면 그냥 바로 팝업 띄엇다가 닫고 나서 진행됨 // 권한을 준적이 있는지 데이터 확인이 가능하면 분기가 가능한데 그냥 쿠키로 분기 할까? 쿠키 유효기간은 999년 이렇게 // 그러면 다른 브라우저에서 하면? 브라우저별로 클라 페북로그인 로그인 한적없다는 식으로나옴 그러니간 브라우저별로 쿠키 저장되니간 이 방법이 좋을듯? // 맨처음 가라페이지 접속 유저 예시로 생각하면 처음에는 dialog로 로그인하고 로그아웃하고 다시 로그인할때 다시 이 함수 들어옴 그때 FB.login을 거쳐야함 // 그리고 크롬 엣지등 다른 브라우저에서도 한번더 테스트 if (1 getCookie(FB_login_first_dialog)) { console.log(FB_login_first() 1 getCookie(\FB_login_first_dialog\));//return; //test FB.login( //로그아웃함수는 리스폰스가 없음 로그인함수는 있는데 function (response) { console.log(FBWebAgent.onLogin(): response, response); //return; //test if (response.status connected) { var authResponse response.authResponse; console.log( FBWebAgent.onLogin(): userID, authResponse.userID ); console.log( FBWebAgent.onLogin(): accessToken, authResponse.accessToken ); //setCookie(signedRequest, authResponse.signedRequest, 1); //setCookiesignedRequest(authResponse.signedRequest); setCookie(signedRequest, authResponse.signedRequest, 1); location.href `https://heartgames.io/auth/facebook/callback?access_token${authResponse.accessToken}&fb_web_id${authResponse.userID}`; } else { console.log(FBWebAgent.onLogin(): FAIL response, response); //FB_login_first(); alert(Please press the PLAY NOW button again); } }, { // 이메일 권한 주기 창이라고 함 scope: email } /* { //로그인 대화 상자에서 거부된 권한을 다시 요청 이메일 요청에 써먹어야할듯?? 페북 권한창 scope: user_likes, auth_type: rerequest }*/ ); } else { // 여기는 클라 fb login을 안거친 상태여서 signedRequest 가 없음 쿠키값이 서버에서 모름 이 쿠키 값으로 fb_id 서버페북api랑 같이 가져온 거 비교하는걸 없애? // 근데 그게 있어야지 페이스북 로그아웃을 하는데? console.log(FB_login_first() } else {); //return; //test setCookie(FB_login_first_dialog); location.href https://heartgames.io/auth/facebook; } } function signUp_facebook(cookie_delete) { console.log(signUp_facebook); try { gtag(event, signUp_facebook, { event_category: event_category_signUp_facebook, event_label: event_label_signUp_facebook, }); if(1 cookie_delete) { // 가라 페이지에서 여기로 오면 무조건 dialog api 거치게 하기 팝업차단 대비 setCookie(FB_login_first_dialog, 0, -1); } let url https://heartgames.io/setCookie_signUp; console.log(url); $.ajax({ type: POST, url, // ajax 여기 무조건 url이라고 변수이름 으로 넣어야함 안그러면 씹힘 data: { signUp: 1, }, success: function (data) { console.log(signUp_facebook() success); // if(agreementChecked true) { logInFacebook(); // } else { // document.querySelector(.agreement-error-messages).style.display block; // } }, error: function (e) { alert(e.responseText); location.href ; }, }); } catch (err) { alert(err); location.href ; } } function signIn_facebook() { console.log(signIn_facebook); try { gtag(event, signIn_facebook, { event_category: event_category_signIn_facebook, event_label: event_label_signIn_facebook, }); // 이거 패킷 이름은 signUp이라고 되어있는데 하여간 쓸일 많을테니 씀? let url https://heartgames.io/setCookie_signIn; console.log(url); $.ajax({ type: POST, url, // ajax 여기 무조건 url이라고 변수이름 으로 넣어야함 안그러면 씹힘 data: { signIn: 1, }, success: function (data) { console.log(signIn_facebook() success); logInFacebook(); }, error: function (e) { alert(e.responseText); location.href ; }, }); } catch (err) { alert(err); location.href ; } } function signUp_Metamask() { console.log(signUp_Metamask); try { gtag(event, signUp_Metamask, { event_category: event_category_signUp_Metamask, event_label: event_label_signUp_Metamask, }); let url https://heartgames.io/setCookie_signUp; console.log(url); $.ajax({ type: POST, url, // ajax 여기 무조건 url이라고 변수이름 으로 넣어야함 안그러면 씹힘 data: { signUp: 1, }, success: function (data) { console.log(signUp_Metamask() success); // if(agreementChecked true) { logInMetamask(); // } else { // document.querySelector(.agreement-error-messages).style.display block; // } }, error: function (e) { alert(e.responseText); location.href ; }, }); } catch (err) { alert(err); location.href ; } } function signIn_Metamask(b_no_pop) { console.log(signIn_Metamask); console.log(b_no_pop); try { const str_walletAddress ; if( ! && str_walletAddress.toUpperCase() ! Web3Agent.GetSelectedAddress().toUpperCase()) { alert(Make sure that your activated wallet address matches the address on your My Page Connect Account); return; } gtag(event, signIn_Metamask, { event_category: event_category_signIn_Metamask, event_label: event_label_signIn_Metamask, }); // 이거 패킷 이름은 signUp이라고 되어있는데 하여간 쓸일 많을테니 씀? // 이게 타이밍이 애매함 이거 이후에 메타마스크 서명이 뜨니간 거기서 유저가 서명을 안할수도 있는건데 signIn을 넣으니간 문제가생김? // 아니지 이거 기존 순서는 맞음 왜냐면 랜딩페이지에서 팝업띄우고나서 메타마스크 클릭을 할수 있으니 하지만 로그인 이후에 마이페이지에서는 // 이거 함수를 쓰면 안됨 왜냐면 그러면 팝업창이 띄울수밖에 없느니 로그인이후 마이페이지에서 메타마스크 로그인은 /// 함수 파라미터에 따라서 이걸 할수도 안할수도 if(true b_no_pop) { // 이거 나중에 서명 끝나고 나서 쿠키 signIn 넣어줘야하는데 파라미터로 넣기가 애매함 너무 쓸데 없는걸 많이 넣어야하고 // 그럼으로 pre_signIn 이렇게 넣고 이게 있으면 signIn 넣는 형식으로?? 그리고 쿠키 더러워지면 안되니간 무조건 pre_signIn 삭제는 하고 있던 없던간에 setCookie(pre_signIn, 1, 1); logInMetamask(); } else { setCookie(signIn, 1, 1); logInMetamask(); /*let url https://heartgames.io/setCookie_signIn; console.log(url); $.ajax({ type: POST, url, // ajax 여기 무조건 url이라고 변수이름 으로 넣어야함 안그러면 씹힘 data: { signIn: 1, }, success: function (data) { console.log(signIn_Metamask() success); logInMetamask(); }, error: function (e) { alert(e.responseText); location.href ; }, });*/ } /// } catch (err) { alert(err); location.href ; } } function logInMetamask(chainName) { if (undefined ! typeof chainName) { //Web3Agent.init(checkCurrentChainId, POLYGON); Web3Agent.init(checkCurrentChainId, chainName); } else { Web3Agent.init(web3_sign_login); } } function web3_sign_login(success, response) { if (true success) { Web3Agent.signMessage(onLoginMetamask); } else { //에러 팝업 처리 alert(response.message); } } function checkCurrentChainId(success, response, chainName) { //chainName POLYGON; //chainName BNB; if (true success) { //현재 체인이 폴리곤 체인지 여부 체크 if (Web3Agent.isCurrentChain(chainName)) { Web3Agent.signMessage(onLoginMetamask); } else { //현제 체인이 폴리곤 체인이 아니면 폴리곤 체인으로 변경 Web3Agent.requestToSwitchChain(call_requestChainId, chainName); } } else { //에러 팝업 처리 alert(response.message); } } function call_requestChainId(success, response, chainName) { if (true success) { //현재 체인이 폴리곤 체인지 여부 체크 Web3Agent.requestChainId(call_signMessage, chainName); } else { //에러 팝업 처리 alert(response.message); } } function call_signMessage(success, response, chainName) { console.log(if (Web3Agent.call_signMessage()) {); if (true success) { //현재 체인이 폴리곤 체인지 여부 체크 if (true Web3Agent.isCurrentChain(chainName)) { console.log(if (Web3Agent.isCurrentChain()) { true ); Web3Agent.signMessage(onLoginMetamask); } else { alert(response.message); } } else { //에러 팝업 처리 alert(response.message); } } function onLoginMetamask(success, account, wallet_sign) { if (true success) { // console.log(로그인 온클릭 메타마스크 : ); const url https://heartgames.io/setCookie_temp_wallet_sign_walletAddress; console.log(url: , url); console.log(onLoginMetamask wallet_sign : , wallet_sign); if (account) { //let userInfo {}; data에 오브젝트로 못넣음 //userInfo.metamaskAddress account; //여기에 signIn 쿠키 넣음 정상 로그인 과정이면 앞단에서 이미 하는데 그러니깐 덮어쓰기 처럼 됨 그래도 문제 없는지 확인 // 이거 근데 함수가 signup때도 계정연동 나올듯?? 이거 파라미터 추가해서 해야하나?? if (1 getCookie(pre_signIn)) { setCookie(signIn, 1, 1); } setCookie(pre_signIn, 0, -1); let walletAddress account.account; console.log(walletAddress: , walletAddress); // 이거 굳이 패스포트 안써도 되니간 내가 만든 디스코드 꺼 매니저로 바꿀까 고민 그리고 그냥 일괄되게 하기위해서 ajax 안쓰고 href로 그냥 진행하기 // 패스포트 그냥 버리기 엿같음 새로만든 디스코드 꺼로 바꾸기 매니저꺼로 //패스포트 그냥 버리기 엿같음 새로만든 디스코드 꺼로 바꾸기 매니저꺼로 $.ajax({ type: POST, url: url, data: { // name도 같이전달 로컬 스트래터지에서 같이 처리하게 대신에 name이 없을수도있으므로 조건체크를 여기 함수가 아니라 signup_name 함수에서 진행? 지갑주소도 같이 쿠키 저장해야할듯? // 일단 데이터는 오브젝트로 전달 안에 속성 뭐넣어야할지 이것저것 해야하니간 관련 서버 패스포트 로직 수정 //userInfo: userInfo, //메타마스크 주소 temp_walletAddress: walletAddress, temp_wallet_sign: wallet_sign, //필드는 필요하지만 값은 사용하지 않기 때문에 아무 값이나 가능 }, success: function (data) { console.log(setCookie_temp_wallet_sign_walletAddress success); location.href https://heartgames.io/auth/login; }, error: function (e) { alert(e.responseText); location.href ; }, }); } else { if (alert(login failed 2)) { location.href ; } } } else { if (alert(login failed 1)) { location.href ; } } } function signup_email() { // 이메일 가입과 페북가입을 분리를 해야할듯한데? // 쿠키에서 로그인타입으로 메타마스크 또는 페이스북일때의 이메일 가입을 분기 해서 처리를 하면 될듯 // item(1) 로 해야함 0으로하면 안됨 맨위에서부터 선언순서가 2번째여서 gtag(event, signup_email, { event_category: event_category_signup_email, event_label: event_label_signup_email, }); console.log(slot signup_email()); console.log(slot signup_email() 1_0); //const email document.getElementById(email).value; const email document .getElementsByClassName(signup-input-email) .item(0).value; console.log(slot signup_email() 1_1); //const c_email document.getElementById(c_email).value; const c_email document .getElementsByClassName(signup-input-c_email) .item(0).value; console.log(slot signup_email() 2); clearErrorMsg(); console.log(slot signup_email() 3); const input_name document .getElementsByClassName(signup-input-name) .item(0).value; if (email ! c_email) { document .getElementsByClassName(email-error-messages) .item(0).style.display block; } else if (15 input_name.length) { document .getElementsByClassName(name-error-messages) .item(0).style.display block; //document.getElementById(name-error).style.visibility visible; } else { // 에러처리 신경써야함 이미 데이터 존재할때 그냥 에러 리턴일때 그리고 성공일때 // 쿠키 로그인타입 분기 // 근데 당장 메타마스크 꺼는 안받을듯 메타마스크 기본으로 메일 받고있어서 인증안받은 쓰레기데이터이기는 함 // 이메일도 근데 나중에 인증하는거 만들거니간 서버랑 통신 중간에 해야함 쿠키 저장도 클라에서 생성하는거 모르니간 일단 서버랑 통신해서 쿠키만들기 // 근데 이렇게 할려고해도 await가 없어서 success 안에서 로직 이어나가야할듯 const verifyEmailUrl https://heartgames.io/verifyEmail; console.log(verifyEmailUrl); let verifyEmailData; /*if (facebook ) { verifyEmailData { email: email, accessToken_facebook: , loginType: , fb_web_id: }; } else */if (local ) { // 어차피 지갑주소 가입할대는 닉네임과 이메일을 입력해야함 그러니깐 여기서 이메일을 넣으면 될듯? 서버에서도 local일때만 쿠키로 username email 저장하면 딱일듯 verifyEmailData { username: input_name, email: email, playToken_wallet: , loginType: , userWalletAddress: }; }/* else if (discord ) { verifyEmailData { email: email, accessToken_discord: , loginType: , discord_id: }; }*/ else { alert(verifyEmailData err 1); location.href ; } if (undefined typeof verifyEmailData) { alert(verifyEmailData err 2); location.href ; } $.ajax({ type: POST, url: verifyEmailUrl, data: verifyEmailData, success: function (data) { console.log(ajax verifyEmailUrl); console.log(data); if (data exist) { document .getElementsByClassName(exist-error-messages) .item(0).style.display block; } else if (data error) { location.href /; } else if (data success) { /*if (facebook ) { console.log(\facebook\ ); logInFacebook(); //signed request 때문에 해야함 //location.href https://heartgames.io/auth/facebook; } else */ if (local ) { // 이거 대충함 꼼꼼히 다시하기 console.log(\local\ ); location.href https://heartgames.io/auth/login; }/* else if (discord ) { // 이거 대충함 꼼꼼히 다시하기 const url https://heartgames.io/auth/discord/callback; console.log(} else if (discord ) {); location.href `https://heartgames.io/auth/discord/callback`; /!*$.ajax({ type: GET, url: url, /!*data: { discord_id: },*!/ success: function (data) { if (data exist) { //document.getElementsByClassName(exist-error-messages).item(SIGNUP_EMAIL_ID).style.visibility visible; } else if (data error) { //location.href /; } else if (data success) { //logInMetamask(); /!*document.querySelector(#signup_container_email).style.visibility hidden; document.querySelector(#signup_container_email).classList.remove(modalOn); mask.style.visibility hidden;*!/ //location.href ; //location.href `https://heartgames.io/auth/discord/callback`; //location.replace(https://heartgames.io/auth/discord/callback); // 여기 render해도 이동 안되는 이유 알것같음 왜냐면 ajax 가 2중으로 감싸서 그럼 이럴대는 한번 더 서버랑 핑퐁해서 옮겨야할듯 // 근데 디스코드는 뭐 그렇다고치고 페북등은 어떻게 함? // 이거 그냥 get 을 location.href로 해야되는데 파라미터는 쿠키로 하고 ajax괜히 써서 success 받느라 이동을 안한듯 } else if (data currentUrl) { location.href ``; } else if (data /myMain) { location.href `https://heartgames.io${data}`; // location.replace(https://heartgames.io${data}); 형태로 해볼것 이전 페이지 데이터로 돌아가지못하게 다음페이지로 덮어씌우는것 . } }, error: function (e) { alert(e.responseText); location.href ; }, });*!/ }*/ else { alert(verifyEmailData err 3); location.href ; } } }, error: function (e) { if (-411 e) { alert(email already exists); } else { alert(e.responseText); } location.href ; }, }); } } function toReplace(str) { //웹서버에서 웹클라 데이터 줄때 웹클라 html에서 멋대로 바꾸는거 다시 되돌려야함 if (null str) { return null; } let returnStr str; returnStr returnStr.replaceAll(br>, \n); returnStr returnStr.replaceAll(>, >); returnStr returnStr.replaceAll(<, ); returnStr returnStr.replaceAll(", ); returnStr returnStr.replaceAll( , ); returnStr returnStr.replaceAll(&, &); return returnStr; } ///////////////////// // SIGNIN TAP // signIn 버튼 클릭됐을때 실행되는 event function signInClick() { mask.style.visibility visible; document.querySelector(#modalSignIn).style.visibility visible; document.querySelector(#menu_container).classList.remove(on); document.querySelector(#modalSignIn).classList.add(modalOn); document.querySelector(#dimmed).style.visibility hidden; // 이거 에러남 묻 } if (null currentUrl.match(link_ad)) { signIn.addEventListener(click, signInClick); } // SignIn 바깥에 검정화면 누르면 실행되는 event function signMskClick() { mask.style.visibility hidden; document.querySelector(#modalSignIn).style.visibility hidden; document.querySelector(#modalSignIn).classList.remove(modalOn); document .querySelector(#signup_container_email) .classList.remove(modalOn); document.querySelector(#system_link).classList.remove(modalOn); document.querySelector(#system_link).style.visibility hidden; sessionStorage.setItem(account_link, 0); } if (null currentUrl.match(link_ad)) { mask.addEventListener(click, signMskClick); } // --------------------------------------------------------------------------- // REGISTER TAP // Register 버튼 클릭됐을때 실행되는 event function registerClick() { mask.style.visibility visible; document.querySelector(#modalRegister).style.visibility visible; document.querySelector(#menu_container).classList.remove(on); document.querySelector(#modalRegister).classList.add(modalOn); document.querySelector(#dimmed).style.visibility hidden; // 이거 에러남 묻 } if (null currentUrl.match(link_ad)) { signUp.addEventListener(click, registerClick); } // Register 바깥에 검정화면 누르면 실행되는 event function regMskClick() { mask.style.visibility hidden; document.querySelector(#modalRegister).style.visibility hidden; document.querySelector(#modalRegister).classList.remove(modalOn); } if (null currentUrl.match(link_ad)) { mask.addEventListener(click, regMskClick); } /* function reg_fb_connect() { document.querySelector(#signup_container_email).style.visibility visible; document.querySelector(#modalRegister).style.visibility hidden; document .querySelector(#signup_container_email) .classList.add(modalOn); } function reg_mMask_connect() { document.querySelector(#signup_container_email).style.visibility visible; document.querySelector(#modalRegister).style.visibility hidden; document .querySelector(#signup_container_email) .classList.add(modalOn); }*/ function signUp_discord() { console.log(signUp_discord); try { gtag(event, signUp_discord, { event_category: event_category_signUp_discord, event_label: event_label_signUp_discord, }); let url https://heartgames.io/setCookie_signUp; console.log(url); $.ajax({ type: POST, url, // ajax 여기 무조건 url이라고 변수이름 으로 넣어야함 안그러면 씹힘 data: { signUp: 1, }, success: function (data) { console.log(signUp_discord() success); const url toReplace(https://discord.com/api/oauth2/authorize?client_id1120980233651224647&redirect_urihttps%3A%2F%2Fheartgames.io%2Fauth%2Fdiscord%2Fcallback&response_typecode&scopeidentify%20email%20guilds.members.read%20guilds.join%20role_connections.write); console.log(url: , url); // if(agreementChecked true) { if( ) { location.href url; } else { //console.log(logInDiscord() discord_auth_callback_url); location.href https://heartgames.io/auth/discord/callback; } // } else { // document.querySelector(.agreement-error-messages).style.display block; // } }, error: function (e) { alert(e.responseText); location.href ; }, }); } catch (err) { alert(err); location.href ; } } function signIn_discord() { // 로그인할때 해당 플랫폼 한거 거쳐야하고 그리고 쿠키값 이용해서 예외처리 가입절차 안가게 // 로그인 실패해도 3개 로그인창은 띄어놓아야함 테스트 console.log(signIn_discord); try { gtag(event, signIn_discord, { event_category: event_category_signIn_discord, event_label: event_label_signIn_discord, }); let url https://heartgames.io/setCookie_signIn; console.log(url); $.ajax({ type: POST, url, // ajax 여기 무조건 url이라고 변수이름 으로 넣어야함 안그러면 씹힘 data: { signIn: 1, }, success: function (data) { console.log(signIn_discord() success); const url toReplace(https://discord.com/api/oauth2/authorize?client_id1120980233651224647&redirect_urihttps%3A%2F%2Fheartgames.io%2Fauth%2Fdiscord%2Fcallback&response_typecode&scopeidentify%20email%20guilds.members.read%20guilds.join%20role_connections.write); console.log(url: , url); if( ) { location.href url; } else { //console.log(logInDiscord() discord_auth_callback_url); location.href https://heartgames.io/auth/discord/callback; } }, error: function (e) { alert(e.responseText); location.href ; }, }); } catch (err) { alert(err); location.href ; } } // 트위터 ajax 호출 로직은 위에거랑 동일 서버에서 로그인데이터 호출 function signUp_twitter() { console.log(signUp_twitter); try { gtag(event, signUp_twitter, { event_category: event_category_signUp_twitter, event_label: event_label_signUp_twitter, }); let url https://heartgames.io/setCookie_signUp; console.log(url); $.ajax({ type: POST, url, // ajax 여기 무조건 url이라고 변수이름 으로 넣어야함 안그러면 씹힘 data: { signUp: 1, }, success: function (data) { console.log(signUp_discord() success); const url toReplace(https://discord.com/api/oauth2/authorize?client_id1120980233651224647&redirect_urihttps%3A%2F%2Fheartgames.io%2Fauth%2Fdiscord%2Fcallback&response_typecode&scopeidentify%20email%20guilds.members.read%20guilds.join%20role_connections.write); console.log(url: , url); // if(agreementChecked true) { if( ) { location.href url; } else { //console.log(logInDiscord() discord_auth_callback_url); location.href https://heartgames.io/auth/discord/callback; } // } else { // document.querySelector(.agreement-error-messages).style.display block; // } }, error: function (e) { alert(e.responseText); location.href ; }, }); } catch (err) { alert(err); location.href ; } } // 트위터 ajax 호출 로직은 위에거랑 동일 서버에서 로그인데이터 호출 function signIn_twitter() { // 로그인할때 해당 플랫폼 한거 거쳐야하고 그리고 쿠키값 이용해서 예외처리 가입절차 안가게 // 로그인 실패해도 3개 로그인창은 띄어놓아야함 테스트 console.log(signIn_twitter); try { gtag(event, signIn_twitter, { event_category: event_category_signIn_twitter, event_label: event_label_signIn_twitter, }); let url https://heartgames.io/setCookie_signIn; console.log(url); $.ajax({ type: POST, url, // ajax 여기 무조건 url이라고 변수이름 으로 넣어야함 안그러면 씹힘 data: { signIn: 1, }, success: function (data) { console.log(signIn_discord() success); const url toReplace(https://discord.com/api/oauth2/authorize?client_id1120980233651224647&redirect_urihttps%3A%2F%2Fheartgames.io%2Fauth%2Fdiscord%2Fcallback&response_typecode&scopeidentify%20email%20guilds.members.read%20guilds.join%20role_connections.write); console.log(url: , url); if( ) { location.href url; } else { //console.log(logInDiscord() discord_auth_callback_url); location.href https://heartgames.io/auth/discord/callback; } }, error: function (e) { alert(e.responseText); location.href ; }, }); } catch (err) { alert(err); location.href ; } } //---------------------------------------------------------------------------- // SignIn,Register 내부에 X 버튼 클릭시 실행되는 event function xClick() { sessionStorage.setItem(account_link, 0); mask.style.visibility hidden; document.querySelector(#modalRegister).style.visibility hidden; document.querySelector(#modalSignIn).style.visibility hidden; document.querySelector(#signup_container_email).style.visibility hidden; document .querySelector(#signup_container_email) .classList.remove(modalOn); document.querySelector(#modalRegister).classList.remove(modalOn); document.querySelector(#modalSignIn).classList.remove(modalOn); document.querySelector(#system_link).classList.remove(modalOn); document.querySelector(#system_link).style.visibility hidden; document.querySelector(#dimmed).style.visibility hidden; // document.querySelector(#notice).style.visibility hidden; // document.querySelector(#notice).classList.remove(modalOn); } document.querySelectorAll(.modalX).forEach((e) > { e.addEventListener(click, xClick); }); function dimmedClick() { sessionStorage.setItem(account_link, 0); mask.style.visibility hidden; document.querySelector(#modalRegister).style.visibility hidden; document.querySelector(#modalSignIn).style.visibility hidden; document.querySelector(#signup_container_email).style.visibility hidden; document .querySelector(#signup_container_email) .classList.remove(modalOn); document.querySelector(#modalRegister).classList.remove(modalOn); document.querySelector(#modalSignIn).classList.remove(modalOn); document.querySelector(#system_link).classList.remove(modalOn); document.querySelector(#system_link).style.visibility hidden; document.querySelector(#dimmed).style.visibility hidden; // document.querySelector(#notice).style.visibility hidden; // document.querySelector(#notice).classList.remove(modalOn); } document.querySelector(#dimmed).addEventListener(click, dimmedClick); // const sss document.querySelector(.nickName_box > input); // sss.disabled true;asdasdsadasd // sss.style.background gray; // sss.value 닉네임 데이터 가져온 값; // sss.style.color white; function RegisterAnAccount() { document.querySelector(#modalRegister).style.visibility visible; document.querySelector(#modalSignIn).style.visibility hidden; document.querySelector(#modalRegister).classList.add(modalOn); document.querySelector(#modalSignIn).classList.remove(modalOn); } function signInAnAccount() { document.querySelector(#modalRegister).style.visibility hidden; document.querySelector(#signup_container_email).style.visibility hidden; document.querySelector(#modalSignIn).style.visibility visible; document.querySelector(#modalRegister).classList.remove(modalOn); document.querySelector(#signup_container_email).classList.remove(modalOn); document.querySelector(#modalSignIn).classList.add(modalOn); } // main play Btn function main_playSlot() { console.log(슬롯); gtag(event, main_playSlot, { event_category: event_category_main_playSlot, event_label: event_label_main_playSlot, }); //location.href `https://heartgames.io/slot_game`; if ( ! && ! ) { if( 1) { location.href `https://heartgames.io/slot_game`; } else { location.href `https://heartgames.io/slot_game_m`; } } else { signInClick(); } } function main_playBingo() { console.log(빙고); gtag(event, main_playBingo, { event_category: event_category_main_playBingo, event_label: event_label_main_playBingo, }); if ( ! && ! ) { if( 1) { location.href `https://heartgames.io/bingo_game`; } else { location.href `https://heartgames.io/bingo_game_m`; } } else { signInClick(); } } function system_link_MskClick() { mask.style.visibility hidden; document.querySelector(#system_link).style.visibility hidden; document.querySelector(#system_link).classList.remove(modalOn); } mask.addEventListener(click, system_link_MskClick); // container 안에 링크 버튼 func 모음 // 한페이지에서 로그인 연동을 해결하기때문에 기존로직 주석 if( ! ) { document.querySelector(#fb-connect-container_system_link > .link_connect).style.display flex; document.querySelector(#fb-connect-container_system_link > .link_connect > div > input).value ; document.querySelector(#fb-connect-container_system_link > .not_connect_box).style.display none; if( ! ) { document.querySelector(#fb-connect-container_system_link > .link_connect > span > span).style.display flex; // document.querySelector(#fb-connect-container_system_link > .link_connect > span > button).style.display none; } else { document.querySelector(#fb-connect-container_system_link > .link_connect > span > span).style.display none; // document.querySelector(#fb-connect-container_system_link > .link_connect > span > button).style.display block; } } else { document.querySelector(#fb-connect-container_system_link > .not_connect_box).style.display flex; document.querySelector(#fb-connect-container_system_link > .link_connect > span > span).style.display none; } if( ! ) { document.querySelector(#discord-connect-container_system_link > .link_connect).style.display flex; document.querySelector(#discord-connect-container_system_link > .link_connect > div > input).value ; document.querySelector(#discord-connect-container_system_link > .not_connect_box).style.display none; if( ! ) { document.querySelector(#discord-connect-container_system_link > .link_connect > span > span).style.display flex; // document.querySelector(#discord-connect-container_system_link > .link_connect > span > button).style.display none; } else { document.querySelector(#discord-connect-container_system_link > .link_connect > span > span).style.display none; // document.querySelector(#discord-connect-container_system_link > .link_connect > span > button).style.display block; } } else { document.querySelector(#discord-connect-container_system_link > .not_connect_box).style.display flex; document.querySelector(#discord-connect-container_system_link > .link_connect > span > span).style.display none; } if( ! ) { document.querySelector(#metamask-connect-container_system_link > .link_connect).style.display flex; document.querySelector(#metamask-connect-container_system_link > .link_connect > div > input).value ; document.querySelector(#metamask-connect-container_system_link > .not_connect_box).style.display none; if( ! ) { document.querySelector(#metamask-connect-container_system_link > .link_connect > span > span).style.display flex; // document.querySelector(#metamask-connect-container_system_link > .link_connect > span > button).style.display none; } else { document.querySelector(#metamask-connect-container_system_link > .link_connect > span > span).style.display none; // document.querySelector(#metamask-connect-container_system_link > .link_connect > span > button).style.display block; } } else { document.querySelector(#metamask-connect-container_system_link > .not_connect_box).style.display flex; document.querySelector(#metamask-connect-container_system_link > .link_connect > span > span).style.display none; } // if( ! ) { // // d_modal_toggle.checked true; // // d_modal_toggle.disabled true; // document.querySelector(.d-modal-notConnect-msg).style.display none; // } else { // document.querySelector(.d-modal-success-msg).style.display none; // } // // console.log(walletAddress : ); // // if( ! ) { // // m_modal_toggle.checked true; // // m_modal_toggle.disabled true; // document.querySelector(.m-modal-notConnect-msg).style.display none; // } else { // document.querySelector(.m-modal-success-msg).style.display none; // } function link_logic_fb () { console.log(페이스북 연동 로직); try { gtag(event, link_logic_fb, { event_category: event_category_link_logic_fb, event_label: event_label_link_logic_fb, }); // 이거 패킷 이름은 signUp이라고 되어있는데 하여간 쓸일 많을테니 씀? let url https://heartgames.io/setCookie_account_link; console.log(url); $.ajax({ type: POST, url, // ajax 여기 무조건 url이라고 변수이름 으로 넣어야함 안그러면 씹힘 data: { account_link: 1, }, success: function (data) { console.log(link_logic_fb() success); logInFacebook(); }, error: function (e) { alert(e.responseText); location.href ; }, }); } catch (err) { alert(err); location.href ; } } function link_logic_mm () { console.log(메타마스크 연동 로직); try { gtag(event, link_logic_mm, { event_category: event_category_link_logic_mm, event_label: event_label_link_logic_mm, }); // 이거 패킷 이름은 signUp이라고 되어있는데 하여간 쓸일 많을테니 씀? let url https://heartgames.io/setCookie_account_link; console.log(url); $.ajax({ type: POST, url, // ajax 여기 무조건 url이라고 변수이름 으로 넣어야함 안그러면 씹힘 data: { account_link: 1, }, success: function (data) { console.log(link_logic_mm() success); logInMetamask(); }, error: function (e) { alert(e.responseText); location.href ; }, }); } catch (err) { alert(err); location.href ; } } function link_logic_dc () { console.log(디스코드 연동 로직); try { gtag(event, link_logic_dc, { event_category: event_category_link_logic_dc, event_label: event_label_link_logic_dc, }); // 이거 패킷 이름은 signUp이라고 되어있는데 하여간 쓸일 많을테니 씀? let url https://heartgames.io/setCookie_account_link; console.log(url); $.ajax({ type: POST, url, // ajax 여기 무조건 url이라고 변수이름 으로 넣어야함 안그러면 씹힘 data: { account_link: 1, }, success: function (data) { console.log(link_logic_dc() success); const url toReplace(https://discord.com/api/oauth2/authorize?client_id1120980233651224647&redirect_urihttps%3A%2F%2Fheartgames.io%2Fauth%2Fdiscord%2Fcallback&response_typecode&scopeidentify%20email%20guilds.members.read%20guilds.join%20role_connections.write); console.log(url: , url); if( ) { location.href url; } else { //console.log(logInDiscord() discord_auth_callback_url); location.href https://heartgames.io/auth/discord/callback; } }, error: function (e) { alert(e.responseText); location.href ; }, }); } catch (err) { alert(err); location.href ; } } //계정 연동부분 트위터 위 다른 로그인이랑 로직 동일 function link_logic_tw () { console.log(트위터 연동 로직); try { gtag(event, link_logic_tw, { event_category: event_category_link_logic_tw, event_label: event_label_link_logic_tw, }); // 이거 패킷 이름은 signUp이라고 되어있는데 하여간 쓸일 많을테니 씀? let url https://heartgames.io/setCookie_account_link; console.log(url); $.ajax({ type: POST, url, // ajax 여기 무조건 url이라고 변수이름 으로 넣어야함 안그러면 씹힘 data: { account_link: 1, }, success: function (data) { console.log(link_logic_dc() success); const url toReplace(https://discord.com/api/oauth2/authorize?client_id1120980233651224647&redirect_urihttps%3A%2F%2Fheartgames.io%2Fauth%2Fdiscord%2Fcallback&response_typecode&scopeidentify%20email%20guilds.members.read%20guilds.join%20role_connections.write); console.log(url: , url); if( ) { location.href url; } else { //console.log(logInDiscord() discord_auth_callback_url); location.href https://heartgames.io/auth/discord/callback; } }, error: function (e) { alert(e.responseText); location.href ; }, }); } catch (err) { alert(err); location.href ; } }//------------------------------------------------------------------------------------------------------------------------------ function link_modal_fb() { link_logic_fb(); } function link_modal_mm() { link_logic_mm(); } function link_modal_dc() { link_logic_dc(); } function link_modal_tw() { link_logic_tw(); } document.addEventListener(DOMContentLoaded, () > { const account_link sessionStorage.getItem(account_link); console.log(account_link); if (account_link 1) { // css 에서 Connect Accounts 페이지 그릴대는 무조건 팝업창 지우게 해서 여기서 처리할 필요 없음 // layout에서 myMain 안에서 어떤 메뉴 클릭했는지 알아야지 새로고침해도 페이지를 다시 나오게 할 수 있음 진행 필요 document.querySelector(#system_link).classList.add(modalOn); document.querySelector(#system_link).style.visibility visible; mask.style.visibility visible; } else { document.querySelector(#system_link).classList.remove(modalOn); document.querySelector(#system_link).style.visibility hidden; mask.style.visibility hidden; } }); // shop에 재화를 설정해주는 함수 const myMoney () > { const coin document.querySelector(#my_slot_balance); const heart document.querySelector(#my_slot_heart); const dia document.querySelector(#my_bingo_ticket); const crown document.querySelector(#my_bingo_heart); const chip document.querySelector(#my_bingo_balance); // int 형태로도 삽입이 가능하나 string 형태가 필요할시 toString() 메서드를 사용할 것 // coin.innerText 321564; // heart.innerText 321564; // dia.innerText 321564; // crown.innerText 321564; // chip.innerText 321564; } myMoney(); // shop 에대한 구매함수 ///////////////////////////////// const buy_shop_polygon (e) > { const polygon_item e.target.parentNode.parentNode; console.log(polygon_item.style); }; const buy_shop_binance (e) > { console.log(e.target.parentNode.parentNode); const binance_item e.target.parentNode.parentNode; binance_item.style.background_color white }; // let serverUrl https://heartgames.io/info; // // GET 요청 보내기 // fetch(serverUrl) // 또는 axios 또는 XMLHttpRequest를 사용할 수 있습니다. // .then(response > { // if (!response.ok) { // throw new Error(네트워크 오류); // 요청이 실패한 경우 오류 처리 // } // return response.json(); // JSON 데이터를 파싱한 후 반환 // }) // .then(data > { // // 서버에서 받은 데이터(data)를 여기에서 사용 // console.log(data); // }) // .catch(error > { // console.error(오류 발생:, error); // 오류 처리 // }); // function getUniSwap () { // console.log(유니스압 통신용); // try { // let url https://heartgames.io/uniuni; // console.log(url); // // $.ajax({ // type: GET, // url, // dataType: json, // success: function (data) { // console.log(data가져오는 로그 : , data); // }, // error: function (e) { // console.log(s-ERROR : , e); // }, // }); // } catch (err) { // console.log(ERROR : , err); // } // } // // getUniSwap(); /script> /body> script> // gnb fixed horizontal scroll issue // function adjustmentTopBar() { // if($(this).scrollLeft() > 0) { // $(#header_container).css(left, 0 - $(this).scrollLeft()); // } // else { // $(#header_container).css(left, $(#container).marginLeft); // } // } // // $(window).scroll(adjustmentTopBar); // window.addEventListener(resize, function(){ // if($(this).scrollLeft() 0) { // console.log(resize event!); // document.querySelector(#header_container).style.left document.querySelector(#container).style.marginLeft; // } // }); var isLive production production; //HTC 보유량 표시 컨테이너 var htc_container document.querySelector(#htc_container); var HTC document.querySelector(.htc_text); //connect 버튼 var connect_button document.querySelector(#connect_button); //on load 함수 // (function() { // adjustmentTopBar(); // htc_container.style.visibility hidden; // if(0 1) { // // } // else { // //Web3Agent.isCurrentPolygonChain(); // //Web3Agent.init(metamask); // } // })(); //metamask connect 함수(버튼 클릭 시 연결) function connectMetamask() { Web3Agent.init(metamask, POLYGON); } //callback function metamask(success, account) { if(success true) { htc_container.style.visibility visible; connect_button.style.visibility hidden; //TODO temporary var current_htc 0; HTC.innerHTML current_htc.toLocaleString(); } else { //Web3Agent metamask 연결 실패 } } function coming() { alert(coming soon); }/script>!--메뉴 sidebar 생성 스크립트 부분-->script> document.addEventListener(DOMContentLoaded, function () { document .querySelector(.menuSidebar) .addEventListener(click, function (e) { if ( document.querySelector(#menu_container).classList.contains(on) ) { //메뉴닫힘 document.querySelector(#menu_container).classList.remove(on); } else { //메뉴펼처짐 document.querySelector(#menu_container).classList.add(on); //페이지 스크롤 락 레이어 추가 // let div document.createElement(div); // div.id dimmed; // document.body.append(div); document.querySelector(#dimmed).style.visibility visible; document .querySelector(#dimmed) .addEventListener(click, function (e) { document.querySelector(#menu_container).classList.remove(on); //페이지 스크롤 락 해제 document.querySelector(#dimmed).style.visibility hidden; }); //페이지 스크롤 락 모바일 이벤트 차단 document .querySelector(#dimmed) .addEventListener( scroll touchmove touchend mousewheel, function (e) { e.preventDefault(); e.stopPropagation(); return false; } ); } }); }); document .querySelector(#sidebarClose > span) .addEventListener(click, function (e) { document.querySelector(#menu_container).classList.remove(on); //페이지 스크롤 락 해제 document.querySelector(#dimmed).style.visibility hidden; });/script> /html>
Port 443
HTTP/1.1 200 OKDate: Fri, 30 Jan 2026 23:47:58 GMTContent-Type: text/html; charsetutf-8Content-Length: 131540Connection: keep-aliveX-Powered-By: ExpressX-Frame-Options: SAMEORIGINAccess-Control-Allow-Origin: *Set-Cookie: signUp; Path/; ExpiresThu, 01 Jan 1970 00:00:00 GMTSet-Cookie: signIn; Path/; ExpiresThu, 01 Jan 1970 00:00:00 GMTSet-Cookie: FB_logout; Path/; ExpiresThu, 01 Jan 1970 00:00:00 GMTSet-Cookie: temp_walletAddress; Path/; ExpiresThu, 01 Jan 1970 00:00:00 GMTSet-Cookie: temp_wallet_sign; Path/; ExpiresThu, 01 Jan 1970 00:00:00 GMTSet-Cookie: account_link; Path/; ExpiresThu, 01 Jan 1970 00:00:00 GMTSet-Cookie: errMsg; Path/; ExpiresThu, 01 Jan 1970 00:00:00 GMTETag: W/201d4-YrOkphSR5qmZHOqFklBl7jrKzDA !DOCTYPE html>html langen> head> !-- Google tag (gtag.js) --> script async srchttps://www.googletagmanager.com/gtag/js?idG-J0ZQ9RN9VZ>/script> script> // 애널리틱스 선언하는 함수 // 그리고 어차피 layout.html이 모든 페이지 상위 에있으니 페이지별로 이거 넣을 필요 없음 // 그런데 game.html 쪽은 layout이 없으니간 넣어야할듯? window.dataLayer window.dataLayer || ; function gtag(){dataLayer.push(arguments);} gtag(js, new Date()); gtag(config, G-J0ZQ9RN9VZ); // 이 부분에 고유코드 삽입 // 그냥 이 코드만 넣어도 페이지 조회수는 자동으로 카운팅 //var a window.open(about:blankasd,_blank); // 즉, 아래처럼 사용자에 의해 일어나는 이벤트안에서 팝업만 된다. 팝업차단해도 /script> link relstylesheet href/scss/reset.css /> link relstylesheet href/scss/nomalize.css /> link relstylesheet href/scss/main.css /> link relstylesheet href/scss/playMain.css /> link relstylesheet href/scss/cookieModal.css />!-- link relstylesheet href/scss/shop.css />-->!-- script typemodule srcjs/addpool.mjs>/script>--> meta charsetutf-8 /> meta nameviewport contentwidthdevice-width, initial-scale1 /> meta namedescription content> meta namekeyword contentHeart Games, heartgames, P2E, Play to Earn, Blockchain, NFT, Non Fungible Token, HTC, Heart Coin, heartcoin, Bingo Hearts, Heart Slots, Free Bingo, Free Slots> meta namerobots contentindex, follow> meta relcanonical href> meta nametwitter:card contentsummary> meta nametwitter:site contentHeartGames> meta nametwitter:title contentHeartGames> meta nametwitter:description contentHeartGames proposes a P2E model by adoption of DeFi monetization with focus on NFT. HeartCoin is intended for using with the NFTs through P2E gameplay> meta nametwitter:image content/images/twitter_og_logo.png> !-- 나중에 라이브서버로 변경이 필요함--> meta nametwitter:url contenthttps://heartgames.io> meta nametwitter:image:width content500> meta nametwitter:image:height content500> meta propertyog:type contentwebsite> !-- 나중에 라이브서버로 변경이 필요함--> meta propertyog:url contenthttps://heartgames.io> meta propertyog:title contentHeartGames> meta propertyog:image content/images/og_logo.png> meta propertyog:description contentHeartGames proposes a P2E model by adoption of DeFi monetization with focus on NFT. HeartCoin is intended for using with the NFTs through P2E gameplay> meta propertyog:site_name contentHeartGames> meta propertyog:locale contenten_US> !-- 페북 메타 비즈니스 설정 브랜드 가치 도메인 인증--> meta namefacebook-domain-verification contents7xutwodatb0wq4fkey3e9mv7hbgka /> title>heartgames.io/title> link relicon href/images/mainFavicon.ico /> link relapple-touch-icon href/images/mainFavicon.ico> !-- link relstylesheet href/css/bingo/layout.css>--> !--link relstylesheet href/css/main_layout.css>-->!--link relstylesheet href/css/top_bar_main.css>-->script srchttps://cdn.jsdelivr.net/gh/ethereum/web3.js/dist/web3.min.js>/script>script src/jquery-3.6.0.min.js>/script>script src/scripts/Web3Agent.js>/script>!--link relstylesheet href/css/index.css>--> script srchttps://kit.fontawesome.com/757bb99289.js crossoriginanonymous >/script> /head> body>!-- div idloading-screen>-->!-- div classloadingLogo>img altlogo src/images/web_modal/main/logo2.png width150px/>/div>-->!-- /div>--> script> let pageType index; // SEO 최적화 페이지 분기점/* const popup window.open(window.location.href, _blank); if(!popup) { alert(팝업 차단을 해제해주세요) }else { popup.focus() }*/ //var windowReference window.open(); //var a window.open(about:blankasd,_blank); function updateMetaDescription(description) { var metaTag document.querySelector(metanamedescription); if (metaTag) { metaTag.setAttribute(content, description); } } function updateMetaCanonical(canonical) { var metaTag document.querySelector(metarelcanonical); if(metaTag) { metaTag.setAttribute(href, canonical); } } function changeFavicon(url) { const favicon document.querySelector(linkrelicon); if (favicon ! null) { favicon.href url; } else { // Favicon이 정의되지 않은 경우, 새로운 link> 요소를 생성하여 추가 const newFavicon document.createElement(link); newFavicon.rel icon; newFavicon.href url; document.head.appendChild(newFavicon); } } const page_cut () > { if(pageType index) { document.title heartgames.io; updateMetaDescription(HeartGames proposes a P2E model by adoption of DeFi monetization with focus on NFT. HeartCoin is intended for using with the NFTs through P2E gameplay); updateMetaCanonical(https://heartgames.io); const newFaviconUrl /images/mainFavicon.ico; changeFavicon(newFaviconUrl); } else if(pageType freeSlot) { document.title Heart Slots - Free Slot Machines; updateMetaDescription(Heart Slots offers the most exciting social casino games where users can play and compete against each other. FREE to Play and FREE Mint!); updateMetaCanonical(https://freeslot.io); const newFaviconUrl /images/slotFavicon.ico; changeFavicon(newFaviconUrl); } else if(pageType freeBingo) { document.title Bingo Hearts - Free Bingo; updateMetaDescription(Bingo Hearts offers most exciting social casino games where people can play and compete with other people. FREE to Play and FREE Mint NFT!); updateMetaCanonical(https://freebingo.io); const newFaviconUrl /images/bingoFavicon.ico; changeFavicon(newFaviconUrl); } }; page_cut(); //페이스북 비동기 초기화 window.fbAsyncInit function () { // 이게 시간이 좀 걸려서 바로 FB 어쩌고 함수 쓸려면 에러뜸 settimeout거치고 함수실행해야할듯 FB.init({ appId: 296774912754547, //Web App Id cookie: true, // Enable cookies to allow the server to access the session. xfbml: true, // Parse social plugins on this webpage. version: v13.0, // Use this Graph API version for this call. });//////////////////////* function guid() { function s4() { return ((1 + Math.random()) * 0x10000 | 0).toString(16).substring(1); } return s4() + s4() + - + s4() + - + s4() + - + s4() + - + s4() + s4() + s4(); } // 페북 개발자 페이지에서 정한 결제 콜백 url 때문에 테섭 혹은 라이브에서 해야지 테스트가 가능 클라의 url도 고려해서 페북에서 팝업을 띄움 // 지금 보니간 버전이 다르면 웹결제가 안되는것같은데?? 버전 시간별로 달라짐 페북에서 튕기는듯 버전시간 안맞으면 const productId 1; const productUrl https://devweb.heartgames.io/payment/item/ + Math.floor(new Date().getTime() / 1000) + / + productId; FB.ui({ method: pay, action: purchaseitem, display: async, //product: https://devweb.heartofslots.com/payment/item/1, product: productUrl, request_id: productId + _ + guid(), //developer_payload: developerPayload }, function(response) { console.log(PaymentManager.purchase(): response, response); });*///////////////////////// }; //Load the JS SDK asynchronously (function (d, s, id) { var js, fjs d.getElementsByTagName(s)0; if (d.getElementById(id)) { return; } js d.createElement(s); js.id id; js.src https://connect.facebook.net/en_US/sdk.js; fjs.parentNode.insertBefore(js, fjs); })(document, script, facebook-jssdk); //로딩 화면을 보여주는 함수 // window.onload () > { // const loadingScreen document.getElementById(loading-screen); // loadingScreen.style.display none;asdfasdfsafsadf // sessionStorage.setItem(account_link, 0); // }; /script> div> div idcontainer stylebackground-color: #170e30> div idmodalSignIn classmodalSignIn> div classmodalX> i classfa-solid fa-xmark>/i> /div> span>Sign In/span> div idmodal_signInContainer> div idfb-connect-container_signIn onclicksignIn_facebook()> img altheartgames_signIn src/images/web_modal/main/f_b_btn_up.png onmouseoverthis.src/images/web_modal/main/f_b_btn_down.png onmouseoutthis.src/images/web_modal/main/f_b_btn_up.png /> /div> p> img altheartgames_signIn src/images/web_modal/main/or.png /> /p> div idmetamask-connect-container_signIn onclicksignIn_Metamask()> img altheartgames_signIn src/images/web_modal/main/sign_m_btn_up.png onmouseoverthis.src/images/web_modal/main/sign_m_btn_down.png onmouseoutthis.src/images/web_modal/main/sign_m_btn_up.png /> /div> p> img altheartgames_signIn src/images/web_modal/main/or.png /> /p> div iddiscord-connect-container_signIn onclicksignIn_discord()> !-- 클릭 이벤트 발생시 discord 로그인 함수 넣는곳 --> img altheartgames_signIn src/images/web_modal/main/sign_d_btn_up.png onmouseoverthis.src/images/web_modal/main/sign_d_btn_down.png onmouseoutthis.src/images/web_modal/main/sign_d_btn_up.png /> /div>!-- 트위터 주석해제-->!-- p>-->!-- img altheartgames_signIn src/images/web_modal/main/or.png />-->!-- /p>-->!-- div idtwitter-connect-container_signIn onclicksignIn_twitter()>-->!-- <!– 클릭 이벤트 발생시 discord 로그인 함수 넣는곳 –>-->!-- img-->!-- altheartgames_signIn-->!-- src/images/web_modal/main/twitter_btn_up.png-->!-- onmouseoverthis.src/images/web_modal/main/twitter_btn_down.png-->!-- onmouseoutthis.src/images/web_modal/main/twitter_btn_up.png-->!-- />-->!-- /div>--> h3> Dont have an account? span onclickRegisterAnAccount()>Register an Account/span> /h3> /div>/div> div idmodalRegister classmodalRegister> div classmodalX> i classfa-solid fa-xmark>/i> /div> span>Register/span> div idmodal_registerContainer> div idfb-connect-container-register onclicksignUp_facebook()> img altheartgames_register src/images/web_modal/main/f_b_btn_up.png onmouseoverthis.src/images/web_modal/main/f_b_btn_down.png onmouseoutthis.src/images/web_modal/main/f_b_btn_up.png /> /div> p> img altheartgames_register src/images/web_modal/main/or.png /> /p> div idmetamask-connect-container-register onclicksignUp_Metamask()> img altheartgames_register src/images/web_modal/main/sign_m_btn_up.png onmouseoverthis.src/images/web_modal/main/sign_m_btn_down.png onmouseoutthis.src/images/web_modal/main/sign_m_btn_up.png /> /div> p> img altheartgames_register src/images/web_modal/main/or.png /> /p> div iddiscord-connect-container-register onclicksignUp_discord()> !-- 클릭 이벤트 발생시 discord 로그인 함수 넣는곳 --> img altheartgames_register src/images/web_modal/main/sign_d_btn_up.png onmouseoverthis.src/images/web_modal/main/sign_d_btn_down.png onmouseoutthis.src/images/web_modal/main/sign_d_btn_up.png /> /div> !-- 트위터 주석해제-->!-- p>-->!-- img altheartgames_register src/images/web_modal/main/or.png />-->!-- /p>-->!-- div idtwitter-connect-container-register onclicksignUp_twitter()>-->!-- <!– 클릭 이벤트 발생시 discord 로그인 함수 넣는곳 –>-->!-- img-->!-- altheartgames_register-->!-- src/images/web_modal/main/twitter_btn_up.png-->!-- onmouseoverthis.src/images/web_modal/main/twitter_btn_down.png-->!-- onmouseoutthis.src/images/web_modal/main/twitter_btn_up.png-->!-- />-->!-- /div>-->!-- div classagreement-error-messages styletext-align: center>-->!-- Please, check in the Agreement to join.-->!-- /div>--> div classregister_input>!-- span classcheckbox>-->!-- img classcheckbox-img altheartGames_check src/images/web_signup/box2_chack.png />-->!-- /span>--> span classagreement >By continuing, you agree to the a stylecolor: #ff9000 hrefhttps://heartgames.io/termsofservice target_blank >Terms of Service/a > and a stylecolor: #ff9000 hrefhttps://heartgames.io/privacypolicy target_blank >Privacy Policy/a >/span > /div>!-- strong>-->!-- If you sign up with a new account, p>it cannot be used as an linked account./p>-->!-- /strong>--> h3> Already have an account? span onclicksignInAnAccount()>Sign In/span> /h3> /div>/div> div idmask stylevisibility: hidden>/div> div iddimmed>/div>div idheader_container> div idheader_main> div idheader_items_container> div idlogo_container> a href/ idlogo classheader_items btn> div classlogoLastContainer> img altheartgames_logo src/images/web_modal/main/logo.png />/div> /a> /div> div classsign_btn_box> button idsignIn classmenu_item btn>Sign In/button> button idsignUp classmenu_item btn>Register/button> /div> div classmenuSidebar> img altheartgames_sidebar src/images/index/manu_up.png /> /div> div idmenu_container> div idsidebarClose> span>✖/span> /div> ul idmenu> li idshop classmenu_item btn> a hrefhttps://heartgames.io/shop > div classicons> img altheartGames src/images/index/top_icon6.png classtab /> /div> strong classitem_text>MARKETPLACE/strong> /a> /li>/ul>script> const menu_elements { id: slot, href: https://heartgames.io/slot_main, imgSrc: /images/index/top_icon2.png, content: HEART SLOTS, target: , }, { id: bingo, href: https://heartgames.io/bingo_main, imgSrc: /images/index/top_icon3.png, content: BINGO HEARTS, target: , }, { id: team, href: https://heartgames.io/team, imgSrc: /images/index/top_icon4.png, content: TEAM, target: , }, { id: white_paper, href: https://docs.heartgames.io/, imgSrc: /images/index/top_icon5.png, content: WHITE PAPER, target: _blank, }, { id: need_help, href: https://heartgames.io/support/, imgSrc: /images/index/top_icon7.png, content: NEED HELP, target: , }, ; const menu_ref document.querySelector(#menu); const firstLi menu_ref.querySelector(li); menu_elements.map((item, n) > { const newLi document.createElement(li); const newA document.createElement(a); const newDiv document.createElement(div); const newStrong document.createElement(strong); const newImg document.createElement(img); menu_ref.insertBefore(newLi, firstLi); newLi.id item.id; newLi.className menu_item btn; newLi.appendChild(newA); newA.appendChild(newDiv); newA.target item.target; newA.href item.href; newA.appendChild(newStrong); newDiv.appendChild(newImg); newImg.src item.imgSrc; newImg.alt heartGames; newImg.className tab; newDiv.className icons; newStrong.className item_text; newStrong.textContent item.content; });/script> /div> div classmyPage_container> button idmyPage onClicklocation.href https://heartgames.io/myMain> i classfa-solid fa-user>/i> span>MY PAGE/span> /button> /div>!-- div idwallet_container>-->!-- div-->!-- idconnect_button-->!-- onclickconnectMetamask();-->!-- >-->!-- img-->!-- src/images/index/connect_button_up.png-->!-- onmouseoverthis.src/images/index/connect_button_down.png-->!-- onmouseoutthis.src/images/index/connect_button_up.png-->!-- />-->!-- /div>-->!-- div idhtc_container>img src/images/index/htc_bar.png />strong classhtc_text>/strong>/div>-->!-- /div>--> /div> /div>/div> div idcontent classcontent shopContent>script> const currentPage index;/script>div classmain_content_img>!-- img altheartgames_main src/images/web_modal/portrait/bg1.png />-->!-- img altheartgames_main src/images/web_modal/landscape/bg1.png />-->!-- img altheartgames_main src/images/web_modal/main/web_main_1p.png />--> div idmainTopText> h1>FREE TO PLAY/h1> strong> span>HeartCoin(HTC) strives to establish an integrated HeartGames/span> span>Universe ecosystem where DeFi, GameFi, P2E, and the community/span> span>operate in perfect synergy. In this ecosystem, NFTs and the/span> span>HTC are meticulously balanced according to supply and demand,/span> span>fostering a virtuous growth cycle./span> /strong> /div> div classmain_btnImg_container> div classmain_contentImg> img classweb_main_img altmainDexImg src/images/web_modal/main/portrait_bg1.png/> img classlandscape_main_img altmainDexImg src/images/web_modal/landscape/web_bg1.png/> /div> div idsign_con> a idnoLogin_ambass>img altheartgames_become src/images/index/become.png/>/a> a idlogin_ambass onclicklocation_ambassadors()>img altheartgames_become src/images/index/become.png/>/a> span onclickwebRegImg()>Register instantly/span> img altheartgames_and src/images/web_modal/main/and.png stylecursor: default /> div idmain_inGame classmain_inGame_btn> div> img altheartgames_game src/images/index/slot_play_logo.png/> button classmain_playBtn onclickmain_playSlot()> PLAY NOW /button> /div> !-- img altheartgames_game src/images/web_modal/main/and.png stylecursor: default />--> div> img altheartgames_game src/images/index/bingo_play_logo.png/> button classmain_playBtn onclickmain_playBingo()> PLAY NOW /button> /div> /div> /div> /div> span> span> h2>HTC token price/h2> span>$0.18/span> a hrefhttps://app.uniswap.org/tokens/polygon/0xDdF7A0F6b5b7446aABB79c72235a8fa9b72AB28B?chainpolygon target_blank>INFO (POLYGON)>/a> a hrefhttps://app.uniswap.org/tokens/arbitrum/0xC0BaA7Cdf5b539D29a1d49FB230361507678b4d2?chainarbitrum target_blank>INFO (ARBITRUM)>/a> /span> span> h2>7D Trading Volume/h2> span>$272.06/span> a hrefhttps://info.uniswap.org/#/polygon/tokens/0xDdF7A0F6b5b7446aABB79c72235a8fa9b72AB28B target_blank>INFO (POLYGON) >/a> a hrefhttps://info.uniswap.org/#/arbitrum/tokens/0xC0BaA7Cdf5b539D29a1d49FB230361507678b4d2 target_blank>INFO (ARBITRUM) >/a> /span> span> h2>Liquidity Pool TVL/h2> span>$1,643/span> !--a hrefhttps://app.uniswap.org/#/tokens/polygon/0xDdF7A0F6b5b7446aABB79c72235a8fa9b72AB28B target_blank>img altheartgames_uniSwap src/images/index/uniswap_up.png />/a>--> a hrefhttps://info.uniswap.org/#/polygon/tokens/0xDdF7A0F6b5b7446aABB79c72235a8fa9b72AB28B target_blank>INFO (POLYGON) >/a> a hrefhttps://info.uniswap.org/#/arbitrum/tokens/0xC0BaA7Cdf5b539D29a1d49FB230361507678b4d2 target_blank>INFO (ARBITRUM) >/a> /span> /span>/div>!--div classgame_submit_tap>-->!-- div idgameSubmit_title>-->!-- div>-->!-- img altheartsSlots src/images/index/top_icon2.png/>-->!-- strong>HEART SLOTS/strong>-->!-- /div>-->!-- div>-->!-- img altbingoHearts src/images/index/top_icon3.png/>-->!-- strong>BINGO HEARTS/strong>-->!-- /div>-->!-- /div>-->!-- div classweb_submit>-->!-- img altheartgames_game src/images/web_modal/main/web_main_2p.png />-->!-- div>-->!-- img altheartgames_game-->!-- src/images/web_modal/main/b_heart_slots.png-->!-- />-->!-- img altheartgames_game-->!-- src/images/web_modal/main/b_bingo_hearts.png-->!-- />-->!-- /div>-->!-- p>-->!-- span onclicklocation.href https://heartgames.io/slot_main-->!-- >Go to Heart Slots/span-->!-- >-->!-- span onclicklocation.href https://heartgames.io/bingo_main-->!-- >Go to Bingo Hearts/span-->!-- >-->!-- /p>-->!-- /div>-->!-- div classportrait_submit>-->!-- img altheartgames_locationGame src/images/web_modal/portrait/bg2.png />-->!-- p onclicklocation.href https://heartgames.io/slot_main>Go to Heart Slots/p>-->!-- div onclicklocation.href https://heartgames.io/bingo_main>Go to Bingo Hearts/div>-->!-- /div>-->!-- div classlandscape_submit>-->!-- img altheartgames_locationGame src/images/web_modal/landscape/bg2.png />-->!-- div>-->!-- span onclicklocation.href https://heartgames.io/slot_main-->!-- >Go to Heart Slots/span-->!-- >-->!-- span onclicklocation.href https://heartgames.io/bingo_main-->!-- >Go to Bingo Hearts/span-->!-- >-->!-- /div>-->!-- /div>-->!-- div idgameSubmit_textCon>-->!-- strong>-->!-- span>Welcome to Heart Slots, your free slots casino! Let us bring Las Vegas straight to you,-->!-- wherever you are, and join in on the slot-->!-- machine fun now. You can play free slot games-->!-- in our fun online casino, from your phone,-->!-- tablet or computer./span>-->!-- /strong>-->!-- strong>-->!-- span>Bingo Hearts - Most exciting Free Online Bingo Games-->!-- Bingo Hearts Online offers a variety of games.-->!-- Find Bingo Mode that suits you best and play-->!-- alone, with your friends, or with other players-->!-- all around the world./span>-->!-- /strong>-->!-- /div>-->!--/div>-->!--div classslide>-->!-- div classcontent_main>-->!-- img altheartgames_chain classblock src/images/web_modal/main/web_main_3p.png />-->!-- div idweb_cardName>-->!-- span>Man Series/span>-->!-- span>Woman Series/span>-->!-- span>Cat Series/span>-->!-- span>Monkey Series/span>-->!-- /div>-->!-- /div>-->!-- div classcontent_main>-->!-- img altheartgames_chain classblock src/images/index/main_3p.png />-->!-- /div>-->!-- div idNFT_web_textCon>-->!-- h2>NFTspan>(Non-Fungible Token)/span>/h2>-->!-- strong>-->!-- span>This is an essential element at the heart of the-->!-- GameFi. Minting can be done for free. By-->!-- owning a NFT you can acquire additional game-->!-- money while playing./span>-->!-- br>-->!-- br>-->!-- span>it has various DeFi functions such as entering-->!-- GameFi, profile picture. and Stacking. You can-->!-- also use $HTC to Enchant(NFT upgrade)./span>-->!-- br>-->!-- br>-->!-- span>We will enable user-to-user transactions-->!-- through our own marketplace and OpenSea./span>-->!-- br>-->!-- br>-->!-- span>We plan to add a system that allows users to-->!-- rent their NFTs to others through the NFT Rent-->!-- service. This allows users to generate revenue-->!-- in a variety of ways with high-grade NFTs./span>-->!-- /strong>-->!-- /div>-->!-- div idP2E_web_textCon>-->!-- h2>P2Espan>(Play to Earn)/span>/h2>-->!-- strong>-->!-- span>Our Social Casino Games is a healthy leisure game genre that combines best of the casino-->!-- and online gaming. Our aim is make players enjoy the game for free with the Free2Play-->!-- concept, while playing you can collect the profile parts to create an NFT of your liking to-->!-- be used as profile picture, and with help of this NFT you can earn HeartCoin.-->!-- /span>-->!-- br>-->!-- br>-->!-- span>We implemented a game economy in which game items, such as game money,-->!-- can be swapped to $HTC, and NFTs can be exchanged and used again /span>-->!-- br>-->!-- br>-->!-- span>The Heart Games Universe allows true Play and Earn by reinvesting the Game Credits earned in the Game into the game./span>-->!-- /strong>-->!-- /div>-->!--/div>-->!--div classyoutubeMain>-->!-- <!– img classyoutubeBlock src/images/index/main_4p.png>–>-->!-- img altheartgames_bg-->!-- idportrait_main2-->!-- classblock-->!-- src/images/web_modal/portrait/bg3.png-->!-- />-->!-- img altheartgames_bg-->!-- idlandscape_main2-->!-- classblock-->!-- src/images/web_modal/landscape/bg3.png-->!-- />-->!-- div idcardName>-->!-- span>Man Series/span>-->!-- span>Woman Series/span>-->!-- span>Cat Series/span>-->!-- span>Monkey Series/span>-->!-- /div>-->!-- div idNFT_textCon>-->!-- h2>NFTspan>(Non-Fungible Token)/span>/h2>-->!-- strong>-->!-- span>This is an essential element at the heart of the-->!-- GameFi. Minting can be done for free. By-->!-- owning a NFT you can acquire additional game-->!-- money while playing./span>-->!-- br>-->!-- br>-->!-- span>it has various DeFi functions such as entering-->!-- GameFi, profile picture. and Stacking. You can-->!-- also use $HTC to Enchant(NFT upgrade)./span>-->!-- br>-->!-- br>-->!-- span>We will enable user-to-user transactions-->!-- through our own marketplace and OpenSea./span>-->!-- br>-->!-- br>-->!-- span>We plan to add a system that allows users to-->!-- rent their NFTs to others through the NFT Rent-->!-- service. This allows users to generate revenue-->!-- in a variety of ways with high-grade NFTs./span>-->!-- /strong>-->!-- /div>-->!-- div idP2E_textCon>-->!-- h2>P2Espan>(Play to Earn)/span>/h2>-->!-- strong>-->!-- span>Our Social Casino Games is a healthy leisure game genre that combines best of the casino-->!-- and online gaming. Our aim is make players enjoy the game for free with the Free2Play-->!-- concept, while playing you can collect the profile parts to create an NFT of your liking to-->!-- be used as profile picture, and with help of this NFT you can earn HeartCoin.-->!-- /span>-->!-- br>-->!-- br>-->!-- span>We implemented a game economy in which game items, such as game money,-->!-- can be swapped to $HTC, and NFTs can be exchanged and used again /span>-->!--<!– br>–>-->!--<!– br>–>-->!--<!– span>The Heart Games Universe allows true Play and Earn by reinvesting the Game Credits earned in the Game into the game./span>–>-->!-- /strong>-->!-- /div>-->!-- h2>HOW TO PLAY/h2>-->!-- div>-->!-- iframe-->!-- classyoutubeVideo-->!-- srchttps://youtube.com/embed/Q_h52vE60gw-->!-- >/iframe>-->!-- <!– youtube autoplay 추가 사운드는 정책상 음소거로 해놔야 자동재생 가능–>-->!-- /div>-->!--/div>-->div classseeMore_container> div onclicklocation.href https://heartgames.io/index_under> span>See More/span> strong>▼/strong> /div>/div>div idtail_logo> a href#content idlogo classheader_items> div> img idmain_footer_logo altheartgames_footer src/images/web_modal/main/logo.png /> img idbingo_footer_logo altbingoHeart src /images/bingo/main/1p_logo.png> img idslot_footer_logo altheartSlots src/images/index/slot_play_logo.png /> /div> /a> div classsocial_box>!-- pc 화면은 문제 없지만 모바일UI 구현은 불가능함-->!-- a hrefhttps://heartgames.io/support/>-->!-- div classhelp_fan>-->!-- img-->!-- altheartSlots src/images/slot/main/need_up.png-->!-- onmouseoverthis.src/images/slot/main/need_down.png-->!-- onmouseoutthis.src/images/slot/main/need_up.png-->!-- />-->!-- /div>-->!-- /a>--> a hrefhttps://www.facebook.com/HeartGames.io idfacebook_social classfooter_items target_blank> div> img altheartgames_facebook src/images/footer/facebook.png /> span>Facebook/span> /div> /a> a hrefhttps://discord.gg/QZ6bDTjTYn iddiscord_social classfooter_items target_blank> div> img altheartgames_discord src/images/footer/discord.png /> span>Discord/span> /div> /a> a hrefhttps://twitter.com/HeartGames_NFT idtwitter_social classfooter_items target_blank> div> img altheartgames_twitter src/images/footer/twitter.png /> span>Twitter/span> /div> /a> a hrefhttps://t.me/heartgames idtelegram_social classfooter_items target_blank> div> img altheartgames_telegram src/images/footer/telegram.png /> span>Telegram/span> /div> /a> a hrefhttps://www.instagram.com/heart2games/ idinstagram_social classfooter_items target_blank> div> img altheartgames_instagram src/images/footer/instagram.png /> span>Instagram/span> /div> /a> /div>/div>script> const mainLogo document.querySelector(#main_footer_logo); const bingoLogo document.querySelector(#bingo_footer_logo); const slotLogo document.querySelector(#slot_footer_logo); if (currentPage main) { mainLogo.style.display block; bingoLogo.style.display none; slotLogo.style.display none; } else if (currentPage bingo) { mainLogo.style.display none; bingoLogo.style.display block; slotLogo.style.display none; } else if (currentPage slot) { mainLogo.style.display none; bingoLogo.style.display none; slotLogo.style.display block; } else { mainLogo.style.display block; bingoLogo.style.display none; slotLogo.style.display none; }/script>script> console.log(index.html); // 페이지 로딩 후에 호출되는 함수 // function updateMetaCanonical(canonical) { // var metaTag document.querySelector(metarelcanonical); // if(metaTag) { // metaTag.setAttribute(href, canonical); // } // } // updateMetaCanonical(https://heartgams.io); // function updateMetaDescription(description) { // var metaTag document.querySelector(metanamedescription); // if (metaTag) { // metaTag.setAttribute(content, description); // } // } // // 페이지 로딩 후에 updateMetaDescription 함수를 호출하여 meta> 태그 내용을 설정 // updateMetaDescription(HeartCoin proposes a P2E model by adoption of DeFi monetization with focus on NFT. HeartCoin is intended for using with the NFTs through P2E gameplay of Heart Slots and Bingo Hearts games.); // // 필요한 함수 정의 // const list document.querySelector(.slide__list); // const items document.querySelectorAll(.content_main); // const buttons document.querySelector(.slideBtn); // const paginations document.querySelector(.slidePaginations); // const lastIndex items.length - 1; // let selected 0; // let interval; // // // 유틸 함수 // const setTransition (value) > { // list.style.transition value; // }; // // const setTranslate ({ index, reset }) > { // if (reset) list.style.transform `translate(-${list.clientWidth}px, 0)`; // else // list.style.transform `translate(-${ // (index + 1) * list.clientWidth // }px, 0)`; // }; // // const activePagination (index) > { // ...paginations.children.forEach((pagination) > { // pagination.classList.remove(on); // }); // paginations.childrenindex.classList.add(on); // }; // // // 다음 이전 버튼생성 // const handlePrev () > { // selected - 1; // setTransition(transform 0.7s linear); // setTranslate({ index: selected }); // if (selected 0) { // selected lastIndex; // setTimeout(() > { // setTransition(); // setTranslate({ index: selected }); // }, 700); // } // if (selected > 0) activePagination(selected); // }; // // const handleNext () > { // selected + 1; // setTransition(transform 0.7s linear); // setTranslate({ index: selected }); // if (selected > lastIndex) { // selected 0; // setTimeout(() > { // setTransition(); // setTranslate({ index: selected }); // }, 700); // } // if (selected lastIndex) activePagination(selected); // }; // // // click sound // function slideSound() { // new Audio(/sounds/arrow_click.mp3).play(); // } // // const makeButton () > { // if (items.length > 1) { // const prevButton document.createElement(button); // prevButton.classList.add(slideBtn__prev); // prevButton.innerHTML i classfas fa-arrow-left>/i>; // // prevButton.addEventListener(mouseover, () > { // // playSound(); // // }); // prevButton.addEventListener(click, handlePrev); // prevButton.addEventListener(click, slideSound); // // const nextButton document.createElement(button); // nextButton.classList.add(slideBtn__next); // nextButton.innerHTML i classfas fa-arrow-right>/i>; // nextButton.addEventListener(click, handleNext); // nextButton.addEventListener(click, slideSound); // // buttons.appendChild(prevButton); // buttons.appendChild(nextButton); // } // }; // // 페이지네이션 버튼 만들기 // const handlePagination (e) > { // if (e.target.dataset.num) { // selected parseInt(e.target.dataset.num); // setTransition(all 0.7s linear); // setTranslate({ index: selected }); // activePagination(selected); // } // }; // // const makePagination () > { // if (items.length > 1) { // for (let i 0; i items.length; i++) { // const button document.createElement(button); // button.dataset.num i; // button.classList.add(slidePagination); // if (i 0) { // button.classList.add(on); // } // paginations.appendChild(button); // paginations.addEventListener(click, handlePagination); // } // } // }; // // 무한으로 슬라이드 하기 위해 index0, 마지막 클론 이미지 생성 // const cloneElement () > { // list.prepend(itemslastIndex.cloneNode(true)); // list.append(items0.cloneNode(true)); // setTranslate({ reset: true }); // }; // // 자동 슬라이드 구현 // const autoplayIterator () > { // selected + 1; // setTransition(all 0.7s linear); // setTranslate({ index: selected }); // if (selected > lastIndex) { // activePagination(0); // clearInterval(interval); // setTimeout(() > { // selected 0; // setTransition(); // setTranslate({ reset: true }); // autoplay({ duration: 5000 }); // }, 700); // } // if (selected lastIndex) activePagination(selected); // }; // // const autoplay ({ duration }) > { // interval setInterval(autoplayIterator, duration); // }; // // const render () > { // makeButton(); // makePagination(); // cloneElement(); // autoplay({ duration: 5000 }); // }; // render(); function mainLogoImg() { mask.style.visibility visible; document.querySelector(#modalSignIn).style.visibility visible; document.querySelector(#menu_container).classList.remove(on); document.querySelector(#modalSignIn).classList.add(modalOn); document.querySelector(#dimmed).style.visibility hidden; // 이거 에러남 묻 } function webRegImg() { mask.style.visibility visible; document.querySelector(#modalRegister).style.visibility visible; document.querySelector(#menu_container).classList.remove(on); document.querySelector(#modalRegister).classList.add(modalOn); document.querySelector(#dimmed).style.visibility hidden; // 이거 에러남 묻 } if ( ! && ! ) { document.querySelector(#login_ambass).style.display flex; document.querySelector(#noLogin_ambass).style.display none; // document.querySelector(.main_content_img > .main_btnImg_container > div > img).style.display none; document.querySelector(.main_content_img > .main_btnImg_container > div > span).style.display none; } else { document.querySelector(#login_ambass).style.display none; document.querySelector(#noLogin_ambass).style.display flex; // document.querySelector(.main_content_img > .main_btnImg_container > div > img).style.display block; document.querySelector(.main_content_img > .main_btnImg_container > div > span).style.display flex; } const clearOtherSessionStorage () > { sessionStorage.removeItem(accountIndex); sessionStorage.removeItem(shopIndex); sessionStorage.removeItem(swapIndex); sessionStorage.removeItem(ambassadorIndex); sessionStorage.removeItem(my_menu_event_index); }; /* * 클릭 이벤트 감지하는 스니펫 * gtag(event, clickAmbassador, 클릭앰버서더는 이벤트명이라 이걸로 어떤이벤트인지 판별함 * event_category: Ambassador, 카테고리 명정해주는 변수 * event_label: ClickAmbassador, 그냥 라벨인데 카테고리랑 똑같이 사용하면될듯? * */ const location_ambassadors () > { gtag(event, clickAmbassador, { event_category: Ambassador, event_label: ClickAmbassador, }); clearOtherSessionStorage(); sessionStorage.setItem(setMenuItem, 3); sessionStorage.setItem(ambassadorIndex, 0); location.href https://heartgames.io/myMain; }; document.querySelector(#noLogin_ambass).addEventListener(click, () > { window.open(https://medium.com/@heartgames/heartgames-become-an-ambassador-bca04300afd5, _blank, width1200, height800, top0,left0); })/script>/div> /div> /div> !-- div idsignup_container_name>-->!-- form classsignup-form actionjavascript:signup_name() methodpost>-->!-- br>br>-->!-- div classinput-group>-->!-- label>Nickname/label>-->!-- input classsignup-input-name typename namename required placeholder5-15 Characters autocompleteoff>-->!-- /div>-->!-- div classname-error-messages stylevisibility: hidden;>Incorrect name. Please, try again./div>-->!-- <!– 밑에 이메일 agreement 2개 전부 clearErrorMsg 순서맞추기위해서 그냥 안쓰는데 선언만 해둠–>-->!-- div classemail-error-messages>Incorrect email address. Please, try again./div>-->!-- div classagreement-error-messages>Please, check in the Agreement to join./div>-->!-- div classexist-error-messages stylevisibility: hidden;>Email already exists. Please, try again./div>-->!-- <!– –>-->!-- button classsignup-btn typesubmit>-->!-- img classsignup-btn-img src/images/web_signup/signup_up.png onmouseoverthis.src/images/web_signup/signup_down.png onmouseoutthis.src/images/web_signup/signup_up.png>-->!-- /button>-->!-- br>br>br>br>br>br>-->!-- /form>-->!-- /div>-->div idsignup_container_email classsignup_container_email> div classmodalX> i classfa-solid fa-xmark>/i> /div> span>Enter additional information/span> form classsignup-form actionjavascript:signup_email() methodpost> div classinput-group nickName_box> label>Usernamespan> */span>/label> input classsignup-input-name typename namename required autocompleteoff /> div classname-error-messages styledisplay: none> Incorrect name. Please, try again. /div> /div> div classinput-group email_box> label>E-mailspan> */span>/label> input classsignup-input-email typeemail nameemail required autocompleteoff /> /div> div classinput-group c_email_box> label>Confirm E-mailspan> */span>/label> input classsignup-input-c_email typeemail namec_email required autocompleteoff /> /div> div classemail-error-messages> Incorrect email address. Please, try again. /div> div classexist-error-messages> Email already exists. Please, try again. /div> button classsignup-btn signup-btn-img typesubmit>continue/button> h3> Already have an account? span onclicksignInAnAccount()>Sign In/span> /h3> /form>/div> div idsystem_link classsystem_link> div classmodalX> i classfa-solid fa-xmark>/i> /div> span>Connect Your Accounts/span> div idmodal_system_link> div idfb-connect-container_system_link> div classnot_connect_box> img altheartgames_register src/images/web_modal/main/register_f_btn_up.png /> button typecheckbox idf-modal-toggle classmodal_toggleSwitch onclicklink_modal_fb()>CONNECT/button> span classfb-modal-notConnect-msg>Log In Facebook/span> /div> div classlink_connect> span> img altheartgames_register src/images/web_modal/main/register_f_btn_up.png />!-- button onclicksignIn_facebook()>CONNECT/button>--> span>ACTIVE NOW/span> /span> div> span>FaceBook User-name/span> input idf-name typetext disabled placeholderneed a Facebook connection/> /div> /div> /div> p> img altheartgames_or src/images/web_modal/main/or.png /> /p> div idmetamask-connect-container_system_link> div classnot_connect_box> img altheartgames_register src/images/web_modal/main/register_m_btn_up.png /> button typecheckbox idm-modal-toggle onclicklink_modal_mm() classmodal_toggleSwitch>CONNECT/button> span classm-modal-notConnect-msg>Connect MetaMask/span> /div> div classlink_connect> span> img altheartgames_register src/images/web_modal/main/register_m_btn_up.png />!-- button onclicksignIn_Metamask()>CONNECT/button>--> span>ACTIVE NOW/span> /span> div> span>MetaMask WalletAddress/span> input idm-wAdd typetext disabled placeholderneed a Metamask connection/> /div> /div> /div> p> img altheartgames_register src/images/web_modal/main/or.png /> /p> div iddiscord-connect-container_system_link> div classnot_connect_box> img src/images/web_modal/main/register_d_btn_up.png /> button typecheckbox idd-modal-toggle onclicklink_modal_dc() classmodal_toggleSwitch>CONNECT/button> span classd-modal-notConnect-msg>Join Discord/span> /div> div classlink_connect> span> img src/images/web_modal/main/register_d_btn_up.png />!-- button onclicksignIn_discord()>CONNECT/button>--> span>ACTIVE NOW/span> /span> div> span>Discord User-name/span> input idt-name typetext disabled placeholderneed a Discord connection/> /div> /div> /div> !-- 트위터 주석해제-->!-- p>-->!-- img altheartgames_register src/images/web_modal/main/or.png />-->!-- /p>-->!-- div idtwitter-connect-container_system_link>-->!-- div classnot_connect_box>-->!-- img src/images/web_modal/main/register_t_btn_up.png />-->!-- button typecheckbox idt-modal-toggle onclicklink_modal_dc() classmodal_toggleSwitch>CONNECT/button>-->!-- span classt-modal-notConnect-msg>Join Twitter/span>-->!-- /div>-->!-- div classlink_connect>-->!-- span>-->!-- img src/images/web_modal/main/register_t_btn_up.png />-->!--<!– button onclicksignIn_discord()>CONNECT/button>–>-->!-- span>ACTIVE NOW/span>-->!-- /span>-->!-- div>-->!-- span>Discord User-name/span>-->!-- input idd-name typetext disabled placeholderneed a Twitter connection/>-->!-- /div>-->!-- /div>-->!-- /div>--> span> span>b>Caution :/b> Once you connected account, you can not change it./span> p>You can sign in with any of your connected accounts./p> /span> /div>/div>!-- div idcookieModal classcookieModal> span>Your privacy/span> div classcookie_comment> p>쿠키 동의 팝업 띄울때 동시에 팝업 허용 해주시기 바랍니다도 같이 알림 그래야지 사이트 이용 가능합니다/p> p>문구는 한나한테 받고/p> p>이거 값이 없으면 동의를 안한거니깐 동의할때까지 사이트를 이용 못하게 막음/p> /div> div classcookie_accept_btn> button onclickcookieAccept()>Accept all cookies/button> button onclickcookieRefuse()>refuse cookies only/button> /div>/div>--> script> function setCookie(name, value 1, expireHours 9999, path /) { // 이 함수 안씀 서버에서 못사용함 쓰레기 let expires ; if (expireHours) { let date new Date(); date.setTime(date.getTime() + expireHours * 24 * 60 * 60 * 1000); expires `expires${date.toUTCString()};`; } document.cookie `${name}${value || };${expires}path${path}`; } function getCookie(name) { var cookieArr document.cookie.split(;); for (var i 0; i cookieArr.length; i++) { if(cookieArri.split()0.trim() name) if (cookieArricookieArri.length - 1 ! ) return cookieArri.split()1; } return ; } //setCookie(signedRequest, authResponse.signedRequest, 1); // // if(1 getCookie(cookiePopup)) { // // 쿠키 동의 팝업 띄울때 동시에 팝업 허용 해주시기 바랍니다도 같이 알림 그래야지 사이트 이용 가능합니다 // // 999년도로 // // 문구는 한나한테 받고 // // 이거 값이 없으면 동의를 안한거니깐 동의할때까지 사이트를 이용 못하게 막음 // document.querySelector(#cookieModal).style.visibility hidden; // } else { // document.querySelector(#cookieModal).style.visibility visible; // const tagSignIn document.querySelector(#modalSignIn); // const tagSignUp document.querySelector(#modalRegister); // const parentSignIn tagSignIn.parentNode; // const parentSignUp tagSignIn.parentNode; // parentSignIn.removeChild(tagSignIn); // parentSignUp.removeChild(tagSignUp); // } // // const cookieAccept () > { // setCookie(cookiePopup); // document.querySelector(#cookieModal).style.visibility hidden; // location.reload(); // }; // const cookieRefuse () > { // document.querySelector(#cookieModal).style.visibility hidden; // }; // const cookie_popup () > { // if(1 ! getCookie(cookiePopup)) { // document.querySelector(#cookieModal).style.visibility visible; // } // }; const currentUrl window.document.location.href; console.log(currentUrl no cookie); console.log(currentUrl); const currentHref () > { console.log(window.location.href : , window.location.href); /*let changeStr window.location.href.replace(heartgames, freeslot); const resultStr changeStr.replace(http:, https:);*/ let resultStr window.location.href; if (null ! window.location.href.match(http:)) { resultStr resultStr.replace(http:, https:); } if (null ! window.location.href.match(freeslot.io)) { //resultStr resultStr.replace(freeslot.io, https://heartgames.io/slot_main); resultStr https://heartgames.io/slot_main; } else if (null ! window.location.href.match(freebingo.io)) { //resultStr resultStr.replace(freebingo.io, heartgames.io/bingo_main); resultStr https://heartgames.io/bingo_main; } if (window.location.href ! resultStr) { gtag(event, currentHref, { event_category: event_category_currentHref, event_label: event_label_currentHref, }); window.location.assign(resultStr); } }; currentHref(); console.log(urls.slot_url); console.log(https://heartgames.io/slot_main); console.log(urls.mypage_url); console.log(https://heartgames.io/myMain); const mask document.querySelector(#mask); const signIn document.querySelector(#signIn); const signUp document.querySelector(#signUp); const link_ad /link/; // let agreementChecked false; $(document).ready(function () { // $(.checkbox).click(function () { // if (agreementChecked) { // // $로 표시하는것들은 0 1 아이템 구별이 없는듯 똑같은듯? // $(.checkbox-img).css(visibility, hidden); // agreementChecked false; // } else { // $(.checkbox-img).css(visibility, visible); // agreementChecked true; // } // }); $(#mask).click(function () { // 이거는 그냥 배경 어두워질때 그 배경 누르면 작동하는 것들임 $(.signup_container).css(visibility, hidden); $(#signup_container_email).css(visibility, hidden); $(#signup_container_name).css(visibility, hidden); $(#mask).css(visibility, hidden); $(.checkbox-img).css(visibility, hidden); clearErrorMsg(); // agreementChecked false; }); /*$(#test).click(function () { $.ajax({ type: POST, url: https://localhost/test, success: function (data) { console.log(data: , data); }, error: function (e) { alert(e.responseText); }, }); });*/ }); //////////////// console.log(FB_logout, ); if (1 ) { // 이거 가라페이지 자동으로 계속 로그인 시도하는데 로그아웃 응답을 받아도 다시 로그인 시도하니깐 로그아웃을 못거침 그래서 유저입장에서 자꾸 새로고침만 됨 fb_ad link 일때 // 이거 가라페이지로 접속할때는 무조건 로그아웃을 시키게 해야하나? /*(색인):1403 Uncaught ReferenceError: FB is not defined at (색인):1403:11*/ // 너무 빠르게 하면 이게 많이뜸 0.2초는 있어야하나? setTimeout(function (success) { //바로쓰면 에러남 나중에 씀 FB 함수 FB.getLoginStatus(function (response) { console.log(FB.getLoginStatus logout); if (response.status connected) { //Logged into your webpage and Facebook. console.log(InitState.FB.logout();(): response, response); FB.logout(); alert(FB_logout); location.href ; } else { //Not logged into your web page or we are unable to tell. //console.log(InitState.FB.logout();():##### Logged out. Go to landing page...); //FB.logout(); } }); }, 200); } console.log(errMsg : , );/* if (-9001 || -9101 ) { alert(This account already exist. Please login); } else if(-9002 || -9102 ) { alert(This account does not exist. Please register); } else if(-9802 || -999 ) { alert(You need to enter additional information. You can sign in. Sign up Please proceed again.); } else */if( ! ) { alert(); } if(null currentUrl.match(link_ad)) { // 광고 홍보 링크등 전용 로직탈때는 이거 안타게 근데 디스코드는 타야되는데? 뭐 금방 페이지 변경될테니간 잠깐 안해도 노상관일듯 디스코드여도 if ( ! && ! ) { //my 페이지로 변경할 조건 쿠키값이 이럴대 document.querySelector(#signIn).style.display none; document.querySelector(#signUp).style.display none; document.querySelector(#myPage).style.display flex; } else { document.querySelector(#signIn).style.display block; document.querySelector(#signUp).style.display block; document.querySelector(#myPage).style.display none; } }/* const SIGNUP_NAME_ID 1; const SIGNUP_EMAIL_ID 2;*//* // 서버 router index.js에서 locale로 넣어줘야함 그때 locale에는 쿠키꺼를 넣어주고 const SIGNUP ; // 쿠키값이 스트링이면 한번 싱글따옴표로 감싸주기 const LOGINTYPE ; const ACCESSTOKEN ; const FB_WEB_ID ; const DISCORD_ID ; const walletAddress ;*/ //const NAME ; // {} 이거는 쿠키값이 아니라 local. 에 넣는값임 착각하지말기 console.log(email : ); console.log(signUp , ); console.log(loginType , ); console.log(accessToken , ); console.log(fb_web_id , ); console.log(timezone, ); console.log(currentUrl coookie, ); console.log(skip_register_facebook, ); //console.log(NAME , NAME); function getTimezone() { const timezoneOffset Math.round(new Date().getTimezoneOffset() / 60); return timezoneOffset > 0 ? 24 - timezoneOffset : Math.abs(timezoneOffset); } /////////// // res.locals. 여기다가 항상 undefined말고 공백으로 넣기 if문에 그렇게 해서 웹클라에서 공배긍로 비교만 하게 하기 clearCookie땜에 공백으로 넣을때가 너무 많음 // 근데 공백 이 쓸대가 많음 의미가 잇음 undefiend가 맞기는 한데 ? 이런거 없는거 쓰면 공백임 그냥 공백으로 해야할듯/* if (undefined ) { console.log(undefined \\ ); } if (undefined ) { console.log(undefined \timezone\ ); } if ( ) { console.log( \timezone\ ); }*/ /////////// // 이 쿠키 값은 안없애야함 계속 유지 실시간 변경해야하고 사실 따지고보면 그냥 플레이버튼 눌렀을때?? 제대로 값을 갖는것도 좋을듯도한데?? // 이방법은 최적화가 아닌 방법 let WidthMode 1; if(window.innerWidth 768) { WidthMode 2; } else { WidthMode 1; } //쿠키 타임존 await안하고 진행 만약에 타임존쿠키없으면 메타마스크 페북 전부 리턴 시키고 에러 시간텀이 잇으니간 될듯? 근데 생각해보니간 유저별로 데이터 유지가 되나? if ( || || ! currentUrl || || ! WidthMode ) { setCookieTimezone(); } function setCookieTimezone() { console.log(setCookieTimezone()); const url https://heartgames.io/setCookieTimezone; const timezone getTimezone(); console.log(setCookieTimezone()); console.log(url); // 그냥 ajax가 안되는듯한데?? 노드모듈 날라갓나?? 클라니간 노드모듈이 아니라 그 위에 태그로 라이브러리 불러오는게 문제임 // 그게 문제가아니라 서버문제같은데 뭐지? // 사이트를 127.0.0.1로 열면 무슨 문제가 생기고 https://localhost:8765/ 로컬호스트로 열어야지 문제가 없는듯 쿠키도 잘 저장되고 $.ajax({ type: POST, url, data: { timezone: timezone, WidthMode: WidthMode }, success: function (data) { console.log(slot setCookieTimezone() success); }, error: function (e) { alert(slot setCookieTimezone() err); alert(e.responseText); location.href ; }, }); } function setCookieWidthMode() { if(window.innerWidth 480) { } console.log(setCookieWidthMode()); const url https://heartgames.io/setCookieWidthMode; const WidthMode getWidthMode(); $.ajax({ type: POST, url, data: { WidthMode: WidthMode, }, success: function (data) { console.log(slot setCookieWidthMode() success); }, error: function (e) { alert(e.responseText); location.href ; }, }); } //setCookieWidthMode(); //console.log(window.innerWidth, window.innerWidth); /////// ////////// if(1 ) { const consoleLog } else if(1 \\) {; console.log(consoleLog);/* setTimeout(function (success) { //// 이게 시간이 좀 걸려서 바로 FB 어쩌고 함수 쓸려면 에러뜸 settimeout거치고 함수실행해야할듯 signUp_facebook(); }, 1000);*/ } else if(1 ) { const consoleLog } else if(1 \\) {; console.log(consoleLog); signUp_discord(); } else if(1 ) { const consoleLog if(1 ) {; console.log(consoleLog); document.querySelector(#dimmed).style.visibility visible; // 이거 에러남 묻 // mask.style.visibility visible; RegisterAnAccount(); } else if (2 ) { const consoleLog if(1 ) {; console.log(consoleLog); document.querySelector(#dimmed).style.visibility visible; // 이거 에러남 묻 document.querySelector(#signup_container_email).style.visibility visible; document .querySelector(#signup_container_email) .classList.add(modalOn); if ( ! ) { console.log(if( ! local) {); const nickName_box document.querySelector(.nickName_box > input); nickName_box.disabled true; nickName_box.style.background gray; nickName_box.value ; nickName_box.style.color white; } if ( ! ) { const email_box document.querySelector(.email_box > input); email_box.disabled true; email_box.style.background gray; email_box.value ; email_box.style.color white; const c_email_box document.querySelector(.c_email_box > input); c_email_box.disabled true; c_email_box.style.background gray; c_email_box.value ; c_email_box.style.color white; } /* $(#signup_container_email).css(visibility, visible); $(#mask).css(visibility, visible);*/ // id이면 # class 이면 . //$(#signup_container_name).css(visibility, visible); //$(.signup_container).css(visibility, visible); //$(#mask).css(visibility, visible); } else if(1 ) { const consoleLog if(1 ) {; console.log(consoleLog); // mask.style.visibility visible; document.querySelector(#dimmed).style.visibility visible; // 이거 에러남 묻 signInAnAccount(); } else { if (null currentUrl.match(link_ad)) { console.log(SignIn SignUp Remove); mask.style.visibility hidden; document.querySelector(#signup_container_email).style.visibility hidden; document .querySelector(#signup_container_email) .classList.remove(modalOn); document.querySelector(#modalSignIn).style.visibility hidden; document.querySelector(#menu_container).classList.remove(on); document.querySelector(#modalSignIn).classList.remove(modalOn); } }/* if (SIGNUP_EMAIL_ID SIGNUP) { const consoleLog slot/if(2 ) {; console.log(consoleLog); // id이면 # class 이면 . $(#signup_container_email).css(visibility, visible); //$(.signup_container).css(visibility, visible); $(#mask).css(visibility, visible); }*/ function clearErrorMsg() { //메타마스크가입창item(0) 이메일받는가입창item(1) 이거 선언 순서대로 작동하는듯 근데 선언안된것도 name쪽 0 1 써도 문제를 없을듯한데?? // 선언안된거 hidden 넣을려고 하면 에러뜸 주의 //0은 그냥 원래 안동현이 만들던거 이름 이메일 같이 받는것 근데 이제 안쓰임 console.log(clearErrorMsg 1); document .getElementsByClassName(name-error-messages) .item(0).style.display none; document .getElementsByClassName(email-error-messages) .item(0).style.display none; document .getElementsByClassName(exist-error-messages) .item(0).style.display none; // document // .getElementsByClassName(agreement-error-messages) // .item(0).style.display none; /* console.log(clearErrorMsg 2); //1이면 이름 가입창 document .getElementsByClassName(name-error-messages) .item(SIGNUP_NAME_ID).style.display none; document .getElementsByClassName(agreement-error-messages) .item(SIGNUP_NAME_ID).style.visibility hidden; console.log(clearErrorMsg 3); //2이면 이메일 가입창 document .getElementsByClassName(email-error-messages) .item(SIGNUP_EMAIL_ID).style.visibility hidden; document .getElementsByClassName(exist-error-messages) .item(SIGNUP_EMAIL_ID).style.visibility hidden; document .getElementsByClassName(agreement-error-messages) .item(SIGNUP_EMAIL_ID).style.visibility hidden;*/ } console.log(document.cookie); console.log(document.cookie); console.log(document.cookie WidthMode); console.log(getCookie(WidthMode)); function setCookiesignedRequest(signedRequest) { console.log(slot setCookiesignedRequest()); const url https://heartgames.io/setCookiesignedRequest; $.ajax({ type: POST, url, data: { signedRequest: signedRequest, }, success: function (data) { console.log(slot setCookiesignedRequest() success); location.href https://heartgames.io/auth/facebook; }, error: function (e) { alert(e.responseText); location.href ; }, }); } //Log In function logInFacebook() { //FB 이용해서 왜 로그인을 하는지 조금 고민됫는데 그래야지 FB 로그인창 뜨면서 연동이되는듯 그래서 사용은 해야할듯 // 다른 예외처리 로그아웃등등 은 어덯게 처리될지 확인 // 아니지 다시 생각해보니 기존 로직은 그냥 auth/facebook 링크로 보내기만 해도 자동으로 페북 로그인 진행됫음 // 그러니간 결론은 여기서 FB init 이딴거 할필요가 없음 gtag(event, loginFacebook, { event_category: event_category_loginFacebook, event_label: event_label_logInFacebook, }); const consoleLog logInFacebook():; console.log(consoleLog); //FB.login(onLogin); // 스트래터지 라이브러리를 뜯어 고쳐야하나? 아니면 내가 새로 만들던가 권한창 안뜨게 //location.href https://heartgames.io/auth/facebook; FB.getLoginStatus(function (response) { console.log(InitState.onLoginStatus(): response, response); if (connected response.status) { //FB.logout(); //test //return; //test //Logged into your webpage and Facebook. //여기안에서 로그아웃해야지 진짜 초기화가 됨 웹에서 내꺼 계정 로그아웃은 상관도 없음 //로그아웃함수는 리스폰스가 없음 로그인함수는 있는데 //FB.logout(); //패스포트는 브라우저에서 로그인했는지 로그아웃했는지 파악을 잘함 그로직을 써서 하는게 좋을듯 //만약에 sdk에서 로그인하면 패스포트도 자연스럽게 로그인이됨 근데 로그아웃은 sdk가 로그인되어있어도 패스포트는 로그아웃일수가있음 반대 상황은 문제가없고 //페이스북 쿠키가 존재하는지 여부로 로그아웃시키고 로그인을 시키는 방식을 사용할수잇을듯? 안된다고함 상당히 어려운방식을 써야할듯 일단 기억만 //https://hexanaut.io/ // 이거는 특징적인게 가입 맨처음 권한줄때 모바일 반응형이 아니라 PC 화면인것마냥 불편하게 되어있었음 그래야지만 다음에 로그인할때 권한 유지 안묻나? var authResponse response.authResponse; console.log(authResponse.signedRequest); console.log(authResponse.signedRequest); console.log(authResponse); console.log(authResponse); // 클라 페북 api에서 엑세스토큰을 바로 얻는다면 굳이 dialog를 거칠필요도 없지 지금 그런듯 //return; //test //setCookiesignedRequest(authResponse.signedRequest); setCookie(signedRequest, authResponse.signedRequest, 1); //location.href https://heartgames.io/auth/facebook/callback; location.href `https://heartgames.io/auth/facebook/callback?access_token${authResponse.accessToken}&fb_web_id${authResponse.userID}`; //MyInfo.setFacebookId(authResponse.userID); //MyInfo.setAccessToken(authResponse.accessToken); //MyInfo.setToken(authResponse.signedRequest); //this.changeNextState({accessToken: MyInfo.getToken(), player_id: MyInfo.getFacebookId()}); if(authResponse null) { alert(팝업차단을 해제하라는 알림); } } else { //Not logged into your web page or we are unable to tell. console.log( InitState.onLoginStatus():##### Logged out. Go to landing page... ); //return; //test FB_login_first(); // 이거 팝업창 해제 안풀리면 어차피 안켜지니간 권한을 주셔야지 play 가능합니다 라고 alert 창 띄우기 //alert(팝업차단을 해제하라는 알림); //location.href https://heartgames.io/main; // window.open(https://devweb.freebingo.io/, _self); //if (AppInfo.isFacebookMode() && !this.isLoggedIn) { // this.isLoggedIn true; //FBWebAgent.login(createjs.proxy(this.onLoginStatus, this)); //} } }); //const url https://heartgames.io/auth/facebook; //auth/facebook/ 같은경우는 get으로 보내야함 post면 에러남 주의 // get이 안되는 이유가 가만히 보니간 페이스북 로그인 페이지랑 연결되는데 그쪽이랑 통신이 안되게 페북이 보안으로 막아 놓음듯? // 근데 생각해보면 이게 바로 직빵으로 페북로그인이랑 연결되는게 아니라 웹서버를 거치고 가는데 그런데도 안되나?? // get이아니라 post로 서버까지 바꿀가 고민? // 근데 생각을 해보면 어차피 페북 로그인을 하던 실패를 하던 전부 callbackurl로 가니깐 거기서 웹클라에 전송하는 방법을 생각해야겟음 /*$.ajax({ type: GET, url, success: function (data) { if (data unsigned) { console.log(consoleLog + if (data \unsigned\) {); $(#signup_container_facebook).css(visibility, visible); $(#mask).css(visibility, visible); } else if (data ok) { console.log(consoleLog + } else if (data \ok\) {); // 이거 안해도됨 서버 facebook callback에서 알아서 보내줌 //location.href https://heartgames.io/game; } }, error: function (e) { alert(e.responseText); } });*/ } function FB_login_first() { // 이게 이 함수로 넘어오면 브라우저에서는 로그인을 해도 이 앱에서는 로그인한적이 없으니 뜬다는건데 중요한점은 팝업창으로 뜬다는점 팝업창으로 안뜨게 못하나? 가라페이지 위해서 // FB.login( 이거는 팝업으로 뜸 이게 가라페이지에 적용할려면 클라 페북api에서부터 팝업이 안뜨게 해야하는데? // 맨처음 로그인할때는 이 함수를 거치는데 여기서는 FB.login을 안쓰게 할가?? 그러면 되기는 하는데 다음 로그인에서부터 쓰게하면 하여간 가입은 일단 되게하는거니간 // dialog로 권한을 줘도? 그 다음에도 페북에 로그인을 한거지 heartgames.io 앱에 로그인한걸로 안쳐서 계속 로그인안했다고 보내는듯 // 이러면 안되는데? // 모바일로도 테스트해봐야겟음 클라 fb login은 팝업창이 띄어지기는 하는데 그 전에 앞서 dialog로 권한 주기가 끝난거면 그냥 바로 팝업 띄엇다가 닫고 나서 진행됨 // 권한을 준적이 있는지 데이터 확인이 가능하면 분기가 가능한데 그냥 쿠키로 분기 할까? 쿠키 유효기간은 999년 이렇게 // 그러면 다른 브라우저에서 하면? 브라우저별로 클라 페북로그인 로그인 한적없다는 식으로나옴 그러니간 브라우저별로 쿠키 저장되니간 이 방법이 좋을듯? // 맨처음 가라페이지 접속 유저 예시로 생각하면 처음에는 dialog로 로그인하고 로그아웃하고 다시 로그인할때 다시 이 함수 들어옴 그때 FB.login을 거쳐야함 // 그리고 크롬 엣지등 다른 브라우저에서도 한번더 테스트 if (1 getCookie(FB_login_first_dialog)) { console.log(FB_login_first() 1 getCookie(\FB_login_first_dialog\));//return; //test FB.login( //로그아웃함수는 리스폰스가 없음 로그인함수는 있는데 function (response) { console.log(FBWebAgent.onLogin(): response, response); //return; //test if (response.status connected) { var authResponse response.authResponse; console.log( FBWebAgent.onLogin(): userID, authResponse.userID ); console.log( FBWebAgent.onLogin(): accessToken, authResponse.accessToken ); //setCookie(signedRequest, authResponse.signedRequest, 1); //setCookiesignedRequest(authResponse.signedRequest); setCookie(signedRequest, authResponse.signedRequest, 1); location.href `https://heartgames.io/auth/facebook/callback?access_token${authResponse.accessToken}&fb_web_id${authResponse.userID}`; } else { console.log(FBWebAgent.onLogin(): FAIL response, response); //FB_login_first(); alert(Please press the PLAY NOW button again); } }, { // 이메일 권한 주기 창이라고 함 scope: email } /* { //로그인 대화 상자에서 거부된 권한을 다시 요청 이메일 요청에 써먹어야할듯?? 페북 권한창 scope: user_likes, auth_type: rerequest }*/ ); } else { // 여기는 클라 fb login을 안거친 상태여서 signedRequest 가 없음 쿠키값이 서버에서 모름 이 쿠키 값으로 fb_id 서버페북api랑 같이 가져온 거 비교하는걸 없애? // 근데 그게 있어야지 페이스북 로그아웃을 하는데? console.log(FB_login_first() } else {); //return; //test setCookie(FB_login_first_dialog); location.href https://heartgames.io/auth/facebook; } } function signUp_facebook(cookie_delete) { console.log(signUp_facebook); try { gtag(event, signUp_facebook, { event_category: event_category_signUp_facebook, event_label: event_label_signUp_facebook, }); if(1 cookie_delete) { // 가라 페이지에서 여기로 오면 무조건 dialog api 거치게 하기 팝업차단 대비 setCookie(FB_login_first_dialog, 0, -1); } let url https://heartgames.io/setCookie_signUp; console.log(url); $.ajax({ type: POST, url, // ajax 여기 무조건 url이라고 변수이름 으로 넣어야함 안그러면 씹힘 data: { signUp: 1, }, success: function (data) { console.log(signUp_facebook() success); // if(agreementChecked true) { logInFacebook(); // } else { // document.querySelector(.agreement-error-messages).style.display block; // } }, error: function (e) { alert(e.responseText); location.href ; }, }); } catch (err) { alert(err); location.href ; } } function signIn_facebook() { console.log(signIn_facebook); try { gtag(event, signIn_facebook, { event_category: event_category_signIn_facebook, event_label: event_label_signIn_facebook, }); // 이거 패킷 이름은 signUp이라고 되어있는데 하여간 쓸일 많을테니 씀? let url https://heartgames.io/setCookie_signIn; console.log(url); $.ajax({ type: POST, url, // ajax 여기 무조건 url이라고 변수이름 으로 넣어야함 안그러면 씹힘 data: { signIn: 1, }, success: function (data) { console.log(signIn_facebook() success); logInFacebook(); }, error: function (e) { alert(e.responseText); location.href ; }, }); } catch (err) { alert(err); location.href ; } } function signUp_Metamask() { console.log(signUp_Metamask); try { gtag(event, signUp_Metamask, { event_category: event_category_signUp_Metamask, event_label: event_label_signUp_Metamask, }); let url https://heartgames.io/setCookie_signUp; console.log(url); $.ajax({ type: POST, url, // ajax 여기 무조건 url이라고 변수이름 으로 넣어야함 안그러면 씹힘 data: { signUp: 1, }, success: function (data) { console.log(signUp_Metamask() success); // if(agreementChecked true) { logInMetamask(); // } else { // document.querySelector(.agreement-error-messages).style.display block; // } }, error: function (e) { alert(e.responseText); location.href ; }, }); } catch (err) { alert(err); location.href ; } } function signIn_Metamask(b_no_pop) { console.log(signIn_Metamask); console.log(b_no_pop); try { const str_walletAddress ; if( ! && str_walletAddress.toUpperCase() ! Web3Agent.GetSelectedAddress().toUpperCase()) { alert(Make sure that your activated wallet address matches the address on your My Page Connect Account); return; } gtag(event, signIn_Metamask, { event_category: event_category_signIn_Metamask, event_label: event_label_signIn_Metamask, }); // 이거 패킷 이름은 signUp이라고 되어있는데 하여간 쓸일 많을테니 씀? // 이게 타이밍이 애매함 이거 이후에 메타마스크 서명이 뜨니간 거기서 유저가 서명을 안할수도 있는건데 signIn을 넣으니간 문제가생김? // 아니지 이거 기존 순서는 맞음 왜냐면 랜딩페이지에서 팝업띄우고나서 메타마스크 클릭을 할수 있으니 하지만 로그인 이후에 마이페이지에서는 // 이거 함수를 쓰면 안됨 왜냐면 그러면 팝업창이 띄울수밖에 없느니 로그인이후 마이페이지에서 메타마스크 로그인은 /// 함수 파라미터에 따라서 이걸 할수도 안할수도 if(true b_no_pop) { // 이거 나중에 서명 끝나고 나서 쿠키 signIn 넣어줘야하는데 파라미터로 넣기가 애매함 너무 쓸데 없는걸 많이 넣어야하고 // 그럼으로 pre_signIn 이렇게 넣고 이게 있으면 signIn 넣는 형식으로?? 그리고 쿠키 더러워지면 안되니간 무조건 pre_signIn 삭제는 하고 있던 없던간에 setCookie(pre_signIn, 1, 1); logInMetamask(); } else { setCookie(signIn, 1, 1); logInMetamask(); /*let url https://heartgames.io/setCookie_signIn; console.log(url); $.ajax({ type: POST, url, // ajax 여기 무조건 url이라고 변수이름 으로 넣어야함 안그러면 씹힘 data: { signIn: 1, }, success: function (data) { console.log(signIn_Metamask() success); logInMetamask(); }, error: function (e) { alert(e.responseText); location.href ; }, });*/ } /// } catch (err) { alert(err); location.href ; } } function logInMetamask(chainName) { if (undefined ! typeof chainName) { //Web3Agent.init(checkCurrentChainId, POLYGON); Web3Agent.init(checkCurrentChainId, chainName); } else { Web3Agent.init(web3_sign_login); } } function web3_sign_login(success, response) { if (true success) { Web3Agent.signMessage(onLoginMetamask); } else { //에러 팝업 처리 alert(response.message); } } function checkCurrentChainId(success, response, chainName) { //chainName POLYGON; //chainName BNB; if (true success) { //현재 체인이 폴리곤 체인지 여부 체크 if (Web3Agent.isCurrentChain(chainName)) { Web3Agent.signMessage(onLoginMetamask); } else { //현제 체인이 폴리곤 체인이 아니면 폴리곤 체인으로 변경 Web3Agent.requestToSwitchChain(call_requestChainId, chainName); } } else { //에러 팝업 처리 alert(response.message); } } function call_requestChainId(success, response, chainName) { if (true success) { //현재 체인이 폴리곤 체인지 여부 체크 Web3Agent.requestChainId(call_signMessage, chainName); } else { //에러 팝업 처리 alert(response.message); } } function call_signMessage(success, response, chainName) { console.log(if (Web3Agent.call_signMessage()) {); if (true success) { //현재 체인이 폴리곤 체인지 여부 체크 if (true Web3Agent.isCurrentChain(chainName)) { console.log(if (Web3Agent.isCurrentChain()) { true ); Web3Agent.signMessage(onLoginMetamask); } else { alert(response.message); } } else { //에러 팝업 처리 alert(response.message); } } function onLoginMetamask(success, account, wallet_sign) { if (true success) { // console.log(로그인 온클릭 메타마스크 : ); const url https://heartgames.io/setCookie_temp_wallet_sign_walletAddress; console.log(url: , url); console.log(onLoginMetamask wallet_sign : , wallet_sign); if (account) { //let userInfo {}; data에 오브젝트로 못넣음 //userInfo.metamaskAddress account; //여기에 signIn 쿠키 넣음 정상 로그인 과정이면 앞단에서 이미 하는데 그러니깐 덮어쓰기 처럼 됨 그래도 문제 없는지 확인 // 이거 근데 함수가 signup때도 계정연동 나올듯?? 이거 파라미터 추가해서 해야하나?? if (1 getCookie(pre_signIn)) { setCookie(signIn, 1, 1); } setCookie(pre_signIn, 0, -1); let walletAddress account.account; console.log(walletAddress: , walletAddress); // 이거 굳이 패스포트 안써도 되니간 내가 만든 디스코드 꺼 매니저로 바꿀까 고민 그리고 그냥 일괄되게 하기위해서 ajax 안쓰고 href로 그냥 진행하기 // 패스포트 그냥 버리기 엿같음 새로만든 디스코드 꺼로 바꾸기 매니저꺼로 //패스포트 그냥 버리기 엿같음 새로만든 디스코드 꺼로 바꾸기 매니저꺼로 $.ajax({ type: POST, url: url, data: { // name도 같이전달 로컬 스트래터지에서 같이 처리하게 대신에 name이 없을수도있으므로 조건체크를 여기 함수가 아니라 signup_name 함수에서 진행? 지갑주소도 같이 쿠키 저장해야할듯? // 일단 데이터는 오브젝트로 전달 안에 속성 뭐넣어야할지 이것저것 해야하니간 관련 서버 패스포트 로직 수정 //userInfo: userInfo, //메타마스크 주소 temp_walletAddress: walletAddress, temp_wallet_sign: wallet_sign, //필드는 필요하지만 값은 사용하지 않기 때문에 아무 값이나 가능 }, success: function (data) { console.log(setCookie_temp_wallet_sign_walletAddress success); location.href https://heartgames.io/auth/login; }, error: function (e) { alert(e.responseText); location.href ; }, }); } else { if (alert(login failed 2)) { location.href ; } } } else { if (alert(login failed 1)) { location.href ; } } } function signup_email() { // 이메일 가입과 페북가입을 분리를 해야할듯한데? // 쿠키에서 로그인타입으로 메타마스크 또는 페이스북일때의 이메일 가입을 분기 해서 처리를 하면 될듯 // item(1) 로 해야함 0으로하면 안됨 맨위에서부터 선언순서가 2번째여서 gtag(event, signup_email, { event_category: event_category_signup_email, event_label: event_label_signup_email, }); console.log(slot signup_email()); console.log(slot signup_email() 1_0); //const email document.getElementById(email).value; const email document .getElementsByClassName(signup-input-email) .item(0).value; console.log(slot signup_email() 1_1); //const c_email document.getElementById(c_email).value; const c_email document .getElementsByClassName(signup-input-c_email) .item(0).value; console.log(slot signup_email() 2); clearErrorMsg(); console.log(slot signup_email() 3); const input_name document .getElementsByClassName(signup-input-name) .item(0).value; if (email ! c_email) { document .getElementsByClassName(email-error-messages) .item(0).style.display block; } else if (15 input_name.length) { document .getElementsByClassName(name-error-messages) .item(0).style.display block; //document.getElementById(name-error).style.visibility visible; } else { // 에러처리 신경써야함 이미 데이터 존재할때 그냥 에러 리턴일때 그리고 성공일때 // 쿠키 로그인타입 분기 // 근데 당장 메타마스크 꺼는 안받을듯 메타마스크 기본으로 메일 받고있어서 인증안받은 쓰레기데이터이기는 함 // 이메일도 근데 나중에 인증하는거 만들거니간 서버랑 통신 중간에 해야함 쿠키 저장도 클라에서 생성하는거 모르니간 일단 서버랑 통신해서 쿠키만들기 // 근데 이렇게 할려고해도 await가 없어서 success 안에서 로직 이어나가야할듯 const verifyEmailUrl https://heartgames.io/verifyEmail; console.log(verifyEmailUrl); let verifyEmailData; /*if (facebook ) { verifyEmailData { email: email, accessToken_facebook: , loginType: , fb_web_id: }; } else */if (local ) { // 어차피 지갑주소 가입할대는 닉네임과 이메일을 입력해야함 그러니깐 여기서 이메일을 넣으면 될듯? 서버에서도 local일때만 쿠키로 username email 저장하면 딱일듯 verifyEmailData { username: input_name, email: email, playToken_wallet: , loginType: , userWalletAddress: }; }/* else if (discord ) { verifyEmailData { email: email, accessToken_discord: , loginType: , discord_id: }; }*/ else { alert(verifyEmailData err 1); location.href ; } if (undefined typeof verifyEmailData) { alert(verifyEmailData err 2); location.href ; } $.ajax({ type: POST, url: verifyEmailUrl, data: verifyEmailData, success: function (data) { console.log(ajax verifyEmailUrl); console.log(data); if (data exist) { document .getElementsByClassName(exist-error-messages) .item(0).style.display block; } else if (data error) { location.href /; } else if (data success) { /*if (facebook ) { console.log(\facebook\ ); logInFacebook(); //signed request 때문에 해야함 //location.href https://heartgames.io/auth/facebook; } else */ if (local ) { // 이거 대충함 꼼꼼히 다시하기 console.log(\local\ ); location.href https://heartgames.io/auth/login; }/* else if (discord ) { // 이거 대충함 꼼꼼히 다시하기 const url https://heartgames.io/auth/discord/callback; console.log(} else if (discord ) {); location.href `https://heartgames.io/auth/discord/callback`; /!*$.ajax({ type: GET, url: url, /!*data: { discord_id: },*!/ success: function (data) { if (data exist) { //document.getElementsByClassName(exist-error-messages).item(SIGNUP_EMAIL_ID).style.visibility visible; } else if (data error) { //location.href /; } else if (data success) { //logInMetamask(); /!*document.querySelector(#signup_container_email).style.visibility hidden; document.querySelector(#signup_container_email).classList.remove(modalOn); mask.style.visibility hidden;*!/ //location.href ; //location.href `https://heartgames.io/auth/discord/callback`; //location.replace(https://heartgames.io/auth/discord/callback); // 여기 render해도 이동 안되는 이유 알것같음 왜냐면 ajax 가 2중으로 감싸서 그럼 이럴대는 한번 더 서버랑 핑퐁해서 옮겨야할듯 // 근데 디스코드는 뭐 그렇다고치고 페북등은 어떻게 함? // 이거 그냥 get 을 location.href로 해야되는데 파라미터는 쿠키로 하고 ajax괜히 써서 success 받느라 이동을 안한듯 } else if (data currentUrl) { location.href ``; } else if (data /myMain) { location.href `https://heartgames.io${data}`; // location.replace(https://heartgames.io${data}); 형태로 해볼것 이전 페이지 데이터로 돌아가지못하게 다음페이지로 덮어씌우는것 . } }, error: function (e) { alert(e.responseText); location.href ; }, });*!/ }*/ else { alert(verifyEmailData err 3); location.href ; } } }, error: function (e) { if (-411 e) { alert(email already exists); } else { alert(e.responseText); } location.href ; }, }); } } function toReplace(str) { //웹서버에서 웹클라 데이터 줄때 웹클라 html에서 멋대로 바꾸는거 다시 되돌려야함 if (null str) { return null; } let returnStr str; returnStr returnStr.replaceAll(br>, \n); returnStr returnStr.replaceAll(>, >); returnStr returnStr.replaceAll(<, ); returnStr returnStr.replaceAll(", ); returnStr returnStr.replaceAll( , ); returnStr returnStr.replaceAll(&, &); return returnStr; } ///////////////////// // SIGNIN TAP // signIn 버튼 클릭됐을때 실행되는 event function signInClick() { mask.style.visibility visible; document.querySelector(#modalSignIn).style.visibility visible; document.querySelector(#menu_container).classList.remove(on); document.querySelector(#modalSignIn).classList.add(modalOn); document.querySelector(#dimmed).style.visibility hidden; // 이거 에러남 묻 } if (null currentUrl.match(link_ad)) { signIn.addEventListener(click, signInClick); } // SignIn 바깥에 검정화면 누르면 실행되는 event function signMskClick() { mask.style.visibility hidden; document.querySelector(#modalSignIn).style.visibility hidden; document.querySelector(#modalSignIn).classList.remove(modalOn); document .querySelector(#signup_container_email) .classList.remove(modalOn); document.querySelector(#system_link).classList.remove(modalOn); document.querySelector(#system_link).style.visibility hidden; sessionStorage.setItem(account_link, 0); } if (null currentUrl.match(link_ad)) { mask.addEventListener(click, signMskClick); } // --------------------------------------------------------------------------- // REGISTER TAP // Register 버튼 클릭됐을때 실행되는 event function registerClick() { mask.style.visibility visible; document.querySelector(#modalRegister).style.visibility visible; document.querySelector(#menu_container).classList.remove(on); document.querySelector(#modalRegister).classList.add(modalOn); document.querySelector(#dimmed).style.visibility hidden; // 이거 에러남 묻 } if (null currentUrl.match(link_ad)) { signUp.addEventListener(click, registerClick); } // Register 바깥에 검정화면 누르면 실행되는 event function regMskClick() { mask.style.visibility hidden; document.querySelector(#modalRegister).style.visibility hidden; document.querySelector(#modalRegister).classList.remove(modalOn); } if (null currentUrl.match(link_ad)) { mask.addEventListener(click, regMskClick); } /* function reg_fb_connect() { document.querySelector(#signup_container_email).style.visibility visible; document.querySelector(#modalRegister).style.visibility hidden; document .querySelector(#signup_container_email) .classList.add(modalOn); } function reg_mMask_connect() { document.querySelector(#signup_container_email).style.visibility visible; document.querySelector(#modalRegister).style.visibility hidden; document .querySelector(#signup_container_email) .classList.add(modalOn); }*/ function signUp_discord() { console.log(signUp_discord); try { gtag(event, signUp_discord, { event_category: event_category_signUp_discord, event_label: event_label_signUp_discord, }); let url https://heartgames.io/setCookie_signUp; console.log(url); $.ajax({ type: POST, url, // ajax 여기 무조건 url이라고 변수이름 으로 넣어야함 안그러면 씹힘 data: { signUp: 1, }, success: function (data) { console.log(signUp_discord() success); const url toReplace(https://discord.com/api/oauth2/authorize?client_id1120980233651224647&redirect_urihttps%3A%2F%2Fheartgames.io%2Fauth%2Fdiscord%2Fcallback&response_typecode&scopeidentify%20email%20guilds.members.read%20guilds.join%20role_connections.write); console.log(url: , url); // if(agreementChecked true) { if( ) { location.href url; } else { //console.log(logInDiscord() discord_auth_callback_url); location.href https://heartgames.io/auth/discord/callback; } // } else { // document.querySelector(.agreement-error-messages).style.display block; // } }, error: function (e) { alert(e.responseText); location.href ; }, }); } catch (err) { alert(err); location.href ; } } function signIn_discord() { // 로그인할때 해당 플랫폼 한거 거쳐야하고 그리고 쿠키값 이용해서 예외처리 가입절차 안가게 // 로그인 실패해도 3개 로그인창은 띄어놓아야함 테스트 console.log(signIn_discord); try { gtag(event, signIn_discord, { event_category: event_category_signIn_discord, event_label: event_label_signIn_discord, }); let url https://heartgames.io/setCookie_signIn; console.log(url); $.ajax({ type: POST, url, // ajax 여기 무조건 url이라고 변수이름 으로 넣어야함 안그러면 씹힘 data: { signIn: 1, }, success: function (data) { console.log(signIn_discord() success); const url toReplace(https://discord.com/api/oauth2/authorize?client_id1120980233651224647&redirect_urihttps%3A%2F%2Fheartgames.io%2Fauth%2Fdiscord%2Fcallback&response_typecode&scopeidentify%20email%20guilds.members.read%20guilds.join%20role_connections.write); console.log(url: , url); if( ) { location.href url; } else { //console.log(logInDiscord() discord_auth_callback_url); location.href https://heartgames.io/auth/discord/callback; } }, error: function (e) { alert(e.responseText); location.href ; }, }); } catch (err) { alert(err); location.href ; } } // 트위터 ajax 호출 로직은 위에거랑 동일 서버에서 로그인데이터 호출 function signUp_twitter() { console.log(signUp_twitter); try { gtag(event, signUp_twitter, { event_category: event_category_signUp_twitter, event_label: event_label_signUp_twitter, }); let url https://heartgames.io/setCookie_signUp; console.log(url); $.ajax({ type: POST, url, // ajax 여기 무조건 url이라고 변수이름 으로 넣어야함 안그러면 씹힘 data: { signUp: 1, }, success: function (data) { console.log(signUp_discord() success); const url toReplace(https://discord.com/api/oauth2/authorize?client_id1120980233651224647&redirect_urihttps%3A%2F%2Fheartgames.io%2Fauth%2Fdiscord%2Fcallback&response_typecode&scopeidentify%20email%20guilds.members.read%20guilds.join%20role_connections.write); console.log(url: , url); // if(agreementChecked true) { if( ) { location.href url; } else { //console.log(logInDiscord() discord_auth_callback_url); location.href https://heartgames.io/auth/discord/callback; } // } else { // document.querySelector(.agreement-error-messages).style.display block; // } }, error: function (e) { alert(e.responseText); location.href ; }, }); } catch (err) { alert(err); location.href ; } } // 트위터 ajax 호출 로직은 위에거랑 동일 서버에서 로그인데이터 호출 function signIn_twitter() { // 로그인할때 해당 플랫폼 한거 거쳐야하고 그리고 쿠키값 이용해서 예외처리 가입절차 안가게 // 로그인 실패해도 3개 로그인창은 띄어놓아야함 테스트 console.log(signIn_twitter); try { gtag(event, signIn_twitter, { event_category: event_category_signIn_twitter, event_label: event_label_signIn_twitter, }); let url https://heartgames.io/setCookie_signIn; console.log(url); $.ajax({ type: POST, url, // ajax 여기 무조건 url이라고 변수이름 으로 넣어야함 안그러면 씹힘 data: { signIn: 1, }, success: function (data) { console.log(signIn_discord() success); const url toReplace(https://discord.com/api/oauth2/authorize?client_id1120980233651224647&redirect_urihttps%3A%2F%2Fheartgames.io%2Fauth%2Fdiscord%2Fcallback&response_typecode&scopeidentify%20email%20guilds.members.read%20guilds.join%20role_connections.write); console.log(url: , url); if( ) { location.href url; } else { //console.log(logInDiscord() discord_auth_callback_url); location.href https://heartgames.io/auth/discord/callback; } }, error: function (e) { alert(e.responseText); location.href ; }, }); } catch (err) { alert(err); location.href ; } } //---------------------------------------------------------------------------- // SignIn,Register 내부에 X 버튼 클릭시 실행되는 event function xClick() { sessionStorage.setItem(account_link, 0); mask.style.visibility hidden; document.querySelector(#modalRegister).style.visibility hidden; document.querySelector(#modalSignIn).style.visibility hidden; document.querySelector(#signup_container_email).style.visibility hidden; document .querySelector(#signup_container_email) .classList.remove(modalOn); document.querySelector(#modalRegister).classList.remove(modalOn); document.querySelector(#modalSignIn).classList.remove(modalOn); document.querySelector(#system_link).classList.remove(modalOn); document.querySelector(#system_link).style.visibility hidden; document.querySelector(#dimmed).style.visibility hidden; // document.querySelector(#notice).style.visibility hidden; // document.querySelector(#notice).classList.remove(modalOn); } document.querySelectorAll(.modalX).forEach((e) > { e.addEventListener(click, xClick); }); function dimmedClick() { sessionStorage.setItem(account_link, 0); mask.style.visibility hidden; document.querySelector(#modalRegister).style.visibility hidden; document.querySelector(#modalSignIn).style.visibility hidden; document.querySelector(#signup_container_email).style.visibility hidden; document .querySelector(#signup_container_email) .classList.remove(modalOn); document.querySelector(#modalRegister).classList.remove(modalOn); document.querySelector(#modalSignIn).classList.remove(modalOn); document.querySelector(#system_link).classList.remove(modalOn); document.querySelector(#system_link).style.visibility hidden; document.querySelector(#dimmed).style.visibility hidden; // document.querySelector(#notice).style.visibility hidden; // document.querySelector(#notice).classList.remove(modalOn); } document.querySelector(#dimmed).addEventListener(click, dimmedClick); // const sss document.querySelector(.nickName_box > input); // sss.disabled true;asdasdsadasd // sss.style.background gray; // sss.value 닉네임 데이터 가져온 값; // sss.style.color white; function RegisterAnAccount() { document.querySelector(#modalRegister).style.visibility visible; document.querySelector(#modalSignIn).style.visibility hidden; document.querySelector(#modalRegister).classList.add(modalOn); document.querySelector(#modalSignIn).classList.remove(modalOn); } function signInAnAccount() { document.querySelector(#modalRegister).style.visibility hidden; document.querySelector(#signup_container_email).style.visibility hidden; document.querySelector(#modalSignIn).style.visibility visible; document.querySelector(#modalRegister).classList.remove(modalOn); document.querySelector(#signup_container_email).classList.remove(modalOn); document.querySelector(#modalSignIn).classList.add(modalOn); } // main play Btn function main_playSlot() { console.log(슬롯); gtag(event, main_playSlot, { event_category: event_category_main_playSlot, event_label: event_label_main_playSlot, }); //location.href `https://heartgames.io/slot_game`; if ( ! && ! ) { if( 1) { location.href `https://heartgames.io/slot_game`; } else { location.href `https://heartgames.io/slot_game_m`; } } else { signInClick(); } } function main_playBingo() { console.log(빙고); gtag(event, main_playBingo, { event_category: event_category_main_playBingo, event_label: event_label_main_playBingo, }); if ( ! && ! ) { if( 1) { location.href `https://heartgames.io/bingo_game`; } else { location.href `https://heartgames.io/bingo_game_m`; } } else { signInClick(); } } function system_link_MskClick() { mask.style.visibility hidden; document.querySelector(#system_link).style.visibility hidden; document.querySelector(#system_link).classList.remove(modalOn); } mask.addEventListener(click, system_link_MskClick); // container 안에 링크 버튼 func 모음 // 한페이지에서 로그인 연동을 해결하기때문에 기존로직 주석 if( ! ) { document.querySelector(#fb-connect-container_system_link > .link_connect).style.display flex; document.querySelector(#fb-connect-container_system_link > .link_connect > div > input).value ; document.querySelector(#fb-connect-container_system_link > .not_connect_box).style.display none; if( ! ) { document.querySelector(#fb-connect-container_system_link > .link_connect > span > span).style.display flex; // document.querySelector(#fb-connect-container_system_link > .link_connect > span > button).style.display none; } else { document.querySelector(#fb-connect-container_system_link > .link_connect > span > span).style.display none; // document.querySelector(#fb-connect-container_system_link > .link_connect > span > button).style.display block; } } else { document.querySelector(#fb-connect-container_system_link > .not_connect_box).style.display flex; document.querySelector(#fb-connect-container_system_link > .link_connect > span > span).style.display none; } if( ! ) { document.querySelector(#discord-connect-container_system_link > .link_connect).style.display flex; document.querySelector(#discord-connect-container_system_link > .link_connect > div > input).value ; document.querySelector(#discord-connect-container_system_link > .not_connect_box).style.display none; if( ! ) { document.querySelector(#discord-connect-container_system_link > .link_connect > span > span).style.display flex; // document.querySelector(#discord-connect-container_system_link > .link_connect > span > button).style.display none; } else { document.querySelector(#discord-connect-container_system_link > .link_connect > span > span).style.display none; // document.querySelector(#discord-connect-container_system_link > .link_connect > span > button).style.display block; } } else { document.querySelector(#discord-connect-container_system_link > .not_connect_box).style.display flex; document.querySelector(#discord-connect-container_system_link > .link_connect > span > span).style.display none; } if( ! ) { document.querySelector(#metamask-connect-container_system_link > .link_connect).style.display flex; document.querySelector(#metamask-connect-container_system_link > .link_connect > div > input).value ; document.querySelector(#metamask-connect-container_system_link > .not_connect_box).style.display none; if( ! ) { document.querySelector(#metamask-connect-container_system_link > .link_connect > span > span).style.display flex; // document.querySelector(#metamask-connect-container_system_link > .link_connect > span > button).style.display none; } else { document.querySelector(#metamask-connect-container_system_link > .link_connect > span > span).style.display none; // document.querySelector(#metamask-connect-container_system_link > .link_connect > span > button).style.display block; } } else { document.querySelector(#metamask-connect-container_system_link > .not_connect_box).style.display flex; document.querySelector(#metamask-connect-container_system_link > .link_connect > span > span).style.display none; } // if( ! ) { // // d_modal_toggle.checked true; // // d_modal_toggle.disabled true; // document.querySelector(.d-modal-notConnect-msg).style.display none; // } else { // document.querySelector(.d-modal-success-msg).style.display none; // } // // console.log(walletAddress : ); // // if( ! ) { // // m_modal_toggle.checked true; // // m_modal_toggle.disabled true; // document.querySelector(.m-modal-notConnect-msg).style.display none; // } else { // document.querySelector(.m-modal-success-msg).style.display none; // } function link_logic_fb () { console.log(페이스북 연동 로직); try { gtag(event, link_logic_fb, { event_category: event_category_link_logic_fb, event_label: event_label_link_logic_fb, }); // 이거 패킷 이름은 signUp이라고 되어있는데 하여간 쓸일 많을테니 씀? let url https://heartgames.io/setCookie_account_link; console.log(url); $.ajax({ type: POST, url, // ajax 여기 무조건 url이라고 변수이름 으로 넣어야함 안그러면 씹힘 data: { account_link: 1, }, success: function (data) { console.log(link_logic_fb() success); logInFacebook(); }, error: function (e) { alert(e.responseText); location.href ; }, }); } catch (err) { alert(err); location.href ; } } function link_logic_mm () { console.log(메타마스크 연동 로직); try { gtag(event, link_logic_mm, { event_category: event_category_link_logic_mm, event_label: event_label_link_logic_mm, }); // 이거 패킷 이름은 signUp이라고 되어있는데 하여간 쓸일 많을테니 씀? let url https://heartgames.io/setCookie_account_link; console.log(url); $.ajax({ type: POST, url, // ajax 여기 무조건 url이라고 변수이름 으로 넣어야함 안그러면 씹힘 data: { account_link: 1, }, success: function (data) { console.log(link_logic_mm() success); logInMetamask(); }, error: function (e) { alert(e.responseText); location.href ; }, }); } catch (err) { alert(err); location.href ; } } function link_logic_dc () { console.log(디스코드 연동 로직); try { gtag(event, link_logic_dc, { event_category: event_category_link_logic_dc, event_label: event_label_link_logic_dc, }); // 이거 패킷 이름은 signUp이라고 되어있는데 하여간 쓸일 많을테니 씀? let url https://heartgames.io/setCookie_account_link; console.log(url); $.ajax({ type: POST, url, // ajax 여기 무조건 url이라고 변수이름 으로 넣어야함 안그러면 씹힘 data: { account_link: 1, }, success: function (data) { console.log(link_logic_dc() success); const url toReplace(https://discord.com/api/oauth2/authorize?client_id1120980233651224647&redirect_urihttps%3A%2F%2Fheartgames.io%2Fauth%2Fdiscord%2Fcallback&response_typecode&scopeidentify%20email%20guilds.members.read%20guilds.join%20role_connections.write); console.log(url: , url); if( ) { location.href url; } else { //console.log(logInDiscord() discord_auth_callback_url); location.href https://heartgames.io/auth/discord/callback; } }, error: function (e) { alert(e.responseText); location.href ; }, }); } catch (err) { alert(err); location.href ; } } //계정 연동부분 트위터 위 다른 로그인이랑 로직 동일 function link_logic_tw () { console.log(트위터 연동 로직); try { gtag(event, link_logic_tw, { event_category: event_category_link_logic_tw, event_label: event_label_link_logic_tw, }); // 이거 패킷 이름은 signUp이라고 되어있는데 하여간 쓸일 많을테니 씀? let url https://heartgames.io/setCookie_account_link; console.log(url); $.ajax({ type: POST, url, // ajax 여기 무조건 url이라고 변수이름 으로 넣어야함 안그러면 씹힘 data: { account_link: 1, }, success: function (data) { console.log(link_logic_dc() success); const url toReplace(https://discord.com/api/oauth2/authorize?client_id1120980233651224647&redirect_urihttps%3A%2F%2Fheartgames.io%2Fauth%2Fdiscord%2Fcallback&response_typecode&scopeidentify%20email%20guilds.members.read%20guilds.join%20role_connections.write); console.log(url: , url); if( ) { location.href url; } else { //console.log(logInDiscord() discord_auth_callback_url); location.href https://heartgames.io/auth/discord/callback; } }, error: function (e) { alert(e.responseText); location.href ; }, }); } catch (err) { alert(err); location.href ; } }//------------------------------------------------------------------------------------------------------------------------------ function link_modal_fb() { link_logic_fb(); } function link_modal_mm() { link_logic_mm(); } function link_modal_dc() { link_logic_dc(); } function link_modal_tw() { link_logic_tw(); } document.addEventListener(DOMContentLoaded, () > { const account_link sessionStorage.getItem(account_link); console.log(account_link); if (account_link 1) { // css 에서 Connect Accounts 페이지 그릴대는 무조건 팝업창 지우게 해서 여기서 처리할 필요 없음 // layout에서 myMain 안에서 어떤 메뉴 클릭했는지 알아야지 새로고침해도 페이지를 다시 나오게 할 수 있음 진행 필요 document.querySelector(#system_link).classList.add(modalOn); document.querySelector(#system_link).style.visibility visible; mask.style.visibility visible; } else { document.querySelector(#system_link).classList.remove(modalOn); document.querySelector(#system_link).style.visibility hidden; mask.style.visibility hidden; } }); // shop에 재화를 설정해주는 함수 const myMoney () > { const coin document.querySelector(#my_slot_balance); const heart document.querySelector(#my_slot_heart); const dia document.querySelector(#my_bingo_ticket); const crown document.querySelector(#my_bingo_heart); const chip document.querySelector(#my_bingo_balance); // int 형태로도 삽입이 가능하나 string 형태가 필요할시 toString() 메서드를 사용할 것 // coin.innerText 321564; // heart.innerText 321564; // dia.innerText 321564; // crown.innerText 321564; // chip.innerText 321564; } myMoney(); // shop 에대한 구매함수 ///////////////////////////////// const buy_shop_polygon (e) > { const polygon_item e.target.parentNode.parentNode; console.log(polygon_item.style); }; const buy_shop_binance (e) > { console.log(e.target.parentNode.parentNode); const binance_item e.target.parentNode.parentNode; binance_item.style.background_color white }; // let serverUrl https://heartgames.io/info; // // GET 요청 보내기 // fetch(serverUrl) // 또는 axios 또는 XMLHttpRequest를 사용할 수 있습니다. // .then(response > { // if (!response.ok) { // throw new Error(네트워크 오류); // 요청이 실패한 경우 오류 처리 // } // return response.json(); // JSON 데이터를 파싱한 후 반환 // }) // .then(data > { // // 서버에서 받은 데이터(data)를 여기에서 사용 // console.log(data); // }) // .catch(error > { // console.error(오류 발생:, error); // 오류 처리 // }); // function getUniSwap () { // console.log(유니스압 통신용); // try { // let url https://heartgames.io/uniuni; // console.log(url); // // $.ajax({ // type: GET, // url, // dataType: json, // success: function (data) { // console.log(data가져오는 로그 : , data); // }, // error: function (e) { // console.log(s-ERROR : , e); // }, // }); // } catch (err) { // console.log(ERROR : , err); // } // } // // getUniSwap(); /script> /body> script> // gnb fixed horizontal scroll issue // function adjustmentTopBar() { // if($(this).scrollLeft() > 0) { // $(#header_container).css(left, 0 - $(this).scrollLeft()); // } // else { // $(#header_container).css(left, $(#container).marginLeft); // } // } // // $(window).scroll(adjustmentTopBar); // window.addEventListener(resize, function(){ // if($(this).scrollLeft() 0) { // console.log(resize event!); // document.querySelector(#header_container).style.left document.querySelector(#container).style.marginLeft; // } // }); var isLive production production; //HTC 보유량 표시 컨테이너 var htc_container document.querySelector(#htc_container); var HTC document.querySelector(.htc_text); //connect 버튼 var connect_button document.querySelector(#connect_button); //on load 함수 // (function() { // adjustmentTopBar(); // htc_container.style.visibility hidden; // if(0 1) { // // } // else { // //Web3Agent.isCurrentPolygonChain(); // //Web3Agent.init(metamask); // } // })(); //metamask connect 함수(버튼 클릭 시 연결) function connectMetamask() { Web3Agent.init(metamask, POLYGON); } //callback function metamask(success, account) { if(success true) { htc_container.style.visibility visible; connect_button.style.visibility hidden; //TODO temporary var current_htc 0; HTC.innerHTML current_htc.toLocaleString(); } else { //Web3Agent metamask 연결 실패 } } function coming() { alert(coming soon); }/script>!--메뉴 sidebar 생성 스크립트 부분-->script> document.addEventListener(DOMContentLoaded, function () { document .querySelector(.menuSidebar) .addEventListener(click, function (e) { if ( document.querySelector(#menu_container).classList.contains(on) ) { //메뉴닫힘 document.querySelector(#menu_container).classList.remove(on); } else { //메뉴펼처짐 document.querySelector(#menu_container).classList.add(on); //페이지 스크롤 락 레이어 추가 // let div document.createElement(div); // div.id dimmed; // document.body.append(div); document.querySelector(#dimmed).style.visibility visible; document .querySelector(#dimmed) .addEventListener(click, function (e) { document.querySelector(#menu_container).classList.remove(on); //페이지 스크롤 락 해제 document.querySelector(#dimmed).style.visibility hidden; }); //페이지 스크롤 락 모바일 이벤트 차단 document .querySelector(#dimmed) .addEventListener( scroll touchmove touchend mousewheel, function (e) { e.preventDefault(); e.stopPropagation(); return false; } ); } }); }); document .querySelector(#sidebarClose > span) .addEventListener(click, function (e) { document.querySelector(#menu_container).classList.remove(on); //페이지 스크롤 락 해제 document.querySelector(#dimmed).style.visibility hidden; });/script> /html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]