From 660ce4a16f96a37789b34536ac944be6ce9e0eca Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Sat, 14 Feb 2026 03:19:20 +0000 Subject: [PATCH] A seguir: Gostaria de testar o fluxo de pagamento --- core/__pycache__/models.cpython-311.pyc | Bin 5340 -> 5678 bytes core/__pycache__/urls.cpython-311.pyc | Bin 1681 -> 1933 bytes core/__pycache__/views.cpython-311.pyc | Bin 16478 -> 18456 bytes core/management/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 168 bytes core/management/commands/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 177 bytes .../populate_games.cpython-311.pyc | Bin 0 -> 5535 bytes core/management/commands/populate_games.py | 140 +++++++ ...ernal_url_userpurchase_is_paid_and_more.py | 38 ++ ...rpurchase_is_paid_and_more.cpython-311.pyc | Bin 0 -> 1845 bytes core/models.py | 9 +- core/templates/core/admin_game_form.html | 9 +- core/templates/core/play.html | 132 ++++--- core/templates/core/purchase.html | 348 +++++++++++------- core/urls.py | 4 +- core/views.py | 115 ++++-- 17 files changed, 556 insertions(+), 239 deletions(-) create mode 100644 core/management/__init__.py create mode 100644 core/management/__pycache__/__init__.cpython-311.pyc create mode 100644 core/management/commands/__init__.py create mode 100644 core/management/commands/__pycache__/__init__.cpython-311.pyc create mode 100644 core/management/commands/__pycache__/populate_games.cpython-311.pyc create mode 100644 core/management/commands/populate_games.py create mode 100644 core/migrations/0004_gameproject_external_url_userpurchase_is_paid_and_more.py create mode 100644 core/migrations/__pycache__/0004_gameproject_external_url_userpurchase_is_paid_and_more.cpython-311.pyc diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index 505bc480111470bb4d2dde528bd984943ed9b2b1..d6f8f2165308de393b64a25ebc18343ff3e7861a 100644 GIT binary patch delta 1025 zcmZ{iOK1~87{_;#G)a@}wwp=%@PQlAz-nqsYqhOatG1O&ic+m$Db%<#iCecx-QB3E z4=RWV9;|#GJa~|bHDVE^2=?g7o1~C~1ig9j7NsC~awatjK4zKUely>Hp8xrvK95OH zMA0X(^6uju{el0bv`~ZQ;Z;ovzSm&b?tZ+1xQMh^x8M|nXRNN3v7kesu1O3&&-&A$ zwYZuiu0?qPF*U0{)!~Ywq1tAO;2(-cf^P_8O(b+&P{Sqv;lva@W@aX-W~**E;JMkT zI!f+L+R)Q<#(%W(SK@m59K7{tr~|fpy9Z`Aj*i5YWX4qJC7YV*grTerP*Q9*OLdwG z+khG2=;ZJ-sHo&kWbMpEI&<+UGCLsW)zCKh=xs*L@Xf2D9*ESMO(idzdr+qaDFv#t zPh?F4pmrqE#tu6B>nl4vVRu=mVs^M31h=o<|FFLxsw<*e6jj*gOE%%nbGz>C&xc<0 z7y7jVCM%c}F`11oJ@Q>aax2^03A2syGrvZ2H?#%1(N35QoMc;i6X-;p@Ga2q@8QW_ zj=eA_wz@}o*aw%z9lkgZIa**zT(04fc2^ENMi5+cu7i2$>k;Bv^e#Am0M8*M8ps*%j@eYUn0tp$E)aKfwc;!g7;gb$gN~iisZKz_GAju^olfH zl%{77zsJ$JT}2$tXA6DF0#2>qR1v4ZiM!A^^x`3R#hr1ujW?q6@D$&VHKKK8;cv`E k@5R3G{?*^fc9;sq4oPSbm4$zkJ+0m^mE7uo6qRHB07xGQDgXcg delta 707 zcmZ{h-D}fO7{+r(lBLN`*5o7`>SU;+7z`;?T30O&R3=3fonN#dbvD_TZiSN-g&|B( z?{w977rXLCsES39;e}UT3tntk6pQ`=3PJ|E^Tu;3RhW80emr@fHz#kN^TPe?=ua?K z1-5c;m!>DwmwH`7H{g{t2^S3=Jh^_bq1TZhJZJZ>RW!SVK%6l;&%W5`-O@qY9Tr6L zjse>@ZVSae-#jZgq@^7npAAma%1lt6cOaBj;$6@hkr)nt_i!S+pMve1Yvfh0{zw!pF2MHxF^-;5$yrV_c5FZrxM! zTypG#qW)Uqs{FvPk-O^kVl>p~-javuD=Y)z#~3YNWl3moC+2; z_+Z=|I>U;N*y^c<0WF0=7*1E_=pI&ViIXfn$_Im6VjtWyZFB@4n@MEDdovlo!VH?= zD0Ae&B!>@_xE$rU#BrI!KaL}lXR1$;k-4B z3UJ@b%k2;f@WtARX5ojm;@W6?B>at9V%go`_02z~2XAcmC`O|w68_CvW;wUf_BQ|1 H(VqP$p~|F) diff --git a/core/__pycache__/urls.cpython-311.pyc b/core/__pycache__/urls.cpython-311.pyc index e4054c9bd5cf15710e616c625f5fe8e1c778a392..e33ebf356ee7f126cac96da3f7407bef8edc71cf 100644 GIT binary patch delta 337 zcmbQp+sm)MoR^o20SI2)?a#DjWng#=;=q6il<_%fqq->5#0{+cimA+5LNMtRrHKnf zHI;!v!f+v#HEhe685mXrF$AOwM2V!R1~X`?ZFXaN##pahoS9pilUS0fTaZ|po0?am zZztrDh5x40y+q_h~DUQvijn9g{J z$|}BsoWx3fo5{v3qKu-GJz0|2i^PB~EE1o*f+c`U7RY1-;^Li~nOO4~744Y&|KIe|@yUsIHyseu~=i==^?0Xu_VOaK4? delta 114 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 U8bx6G3hb{EBhdZBkuSmj0%h8 zp-gxvoQVuYGUY?%f<>}Oo^(YfIuwPr_bJOzOez74OFqC#$q!g1l>$~vWq>tO0I*gH z0@g_(Kq7?!>!k=_gH#UKC{+M9Nm0ONDfX15bf`s&!%M3q3|JDCtX~+O`ML0{Aoy6H zt<@O~+TMaE8dkG=52L2WtiYm!xX*0Ad zSjr&^b!@jiKJ&37B?Q}`bI@EEh9<3NCtTZwM)s_$s-YD-q6mJ37(yJN;FQlQx}nnw zcGFeehDR4{r{pQ!3a#ZsOGGK7sL8Z8s;IOR25Onl{rb|;@40_v6+G~9Hz9Jmm0IvmSipruP zgM^Rx;yqkB-PmtWX_CBFJN{8wl_^Y4;uzfx)7sdNeI3G|XKwji!jip7^t-*U2>EkLUB1vhPiL`9U z9Yj~u(X`w-qNHVVc<_PyyN`&I;y{Wj6GnI6zyRN(iwus*=4KC^92g|SG8xIH(^G(I z%1|^_%%@=|IX%*u(o{oKR9Wf(F(fjP7N^8v*jiEH)M2Wf(Pc`M5ekBJk(0ViGH5}S z6i+2>2M4ycCpx$^y`)c6Cq=!3Xq2EhqN-#>JW^jHR34-n6DQ@Jq^FDQBdr652-iOZ zr?e6sh$XA!jAD#|7`j2TTxQr{Qx_S?Xd3jR*i=jFqz#;6SQDv)2O3&7HJ0cin{iJ) zrBToo(Wi7n&hXobq!o`K$0t29g@X*BB&&*4=C|O22`#PYW2lLxJ5DNkR!qaRDNsn8 zB+^sF7?WZB1eHg?dt?dD>g^&YWPJiIs7#{mbY)ZpLCA<=z?oCax6zepP~ZvK$b#~Y zAG`ly+=@`~4AHeL3zWCyxrDMRq0Id5ySm4WOnOfjIiL|$Ge8%qbXG#TOd(&=qG~D@ z3hD@<J;Nmax+Rv31F*1#^x622P z@kkk2i3PYm3C0HI(&Mn~5d8FK0M1($?Ox9#!lKRM2rX7x!c)Rk$86{<{JYt2{sm+w zD^*Df#!og=OY_6$;-Hv^`x(@r$-Nx#+sX})2d_Yoz(8R> z=iE8>IZw{T4pudncynHA%X!av)N=O0?h1R(BKg>JRegQVoJaCYrHU|Wk;-1SUJqP> z2zU*nAb-x47-h?Ci)9>RCx2jlFlT$oB86VDu}^wxgfQ!^uDd59*`#tsxB?fthL_?G zZ_u4{yScMG1hG|HiL6{p~`8? zML?d?5ri=S9aX!`N?OC-Y%2F^(8X}+)>8IC@E4w7A%(&6Q;~|50I~rTe05KF~NDXk=nt*ftwD!on@X zP97+&ENG3e=UP6=qX}plAd3|fY73GYB)A(tS?kqZT(=3=-LzM5N-|bO#UgJxp5H|U zYa=?b6qbC@+#<<+kb)>P@Y7Wc@VnX3w#uq|=Ip!X?Ym~}yFMxj&qkW(N?PViT4wDn zv~K2n+h44Km76SaiRtZ!gnIT)`|dn9d~m(!Jp0_u@CF=Bvj}MTg6FhZgC={5%}rFr z@nThLgV(RQ^;zWX+H0@eS_YOvScT#*O&^14@8Z;*VEN9O`Hmo#?)jc|)S z(VYVU{?{G14qG9FBv{|ZR~>Ic!gRAg?yF_LBLNoanF{wyuADnrOkwWJ{v|I@uw7*# z_Me`B5MZU7s`{|uC?_p#WiM^2 zwS$9a*t?q!HKQu}Zp=su&=~41C{ITenh|fje&a_P7H%3;iw4`axyPhLWIZLg<~T3- zSJoh&vyLH{whO`Kow20mA1DPM*k-9$me#X_`vFgLXa@){uxY}xK1^_vJc$#YLdYYW zXYno7b-ZNrPh@FoOw?u5NiM)}0e*Uyz%F#xu+v*k3AfotTN;?F_mKC#Ip2|a-;r70 z5%$gA-YV|(c=qyxkq6&DUtm2uTG;!&PueBNWd|Cr!tgK8g3`pb+-AqU73_;0^@59) z?yq2f@RV*ekY7tr&N;ra?7I63lw#Lb%CTvfbIxs4v(Gj}tV=oIgRRayq!G6yT=%T2 zjXcIGNhNR2vx+P(spMtb+TEcJ@*V3h_)e-~))<4YjcNEIu$u9h>m0)yPaL!dTblsD zne0+ZoYE6c`Z#u?+6#Wu6O-Bm+Le9>`@B%&D^NivMT349ItJmhl@}-H;e}60giIQF zu)~2+q){)+?~UbAhXtFeouR09GqfO&%y0RfIBHd-gqIVd;Nlhe#HoVElp_i0F@&>= z{5XqCJV-Z_e6A%S>C-TvW9f?yZ9cT79%lzv3jSpp(M!<(4_vUwo(2N#*cE5f+Z&m@ ztI2k|w1U01ecPV$N+?1C?NEdSoKS=WoaYaJ8M63d3*qQOwC>Vl3pFi^E_>X$XaV@l zV)wbeK!8_=i{e-I%zy8FO=w$j*g^O+T!?xLEyu$ra4ABNz14TzUgFqsn>h~r zAdDWBXe-#qbzsU?oV1<&^nj6f;#X^0H#vYo(fltZ9#nYjC=->gw3ZUnNl{6Pz%Be% zGq1?i)QPXV5%wbNM>vjvX5{55)v!eoFlU${8^Zxu6aovE_6-X~33*KamwOiol}*cg z=ntV!fS>-c!2WrVvA6oe>}UOtmidL6Mav4*vZ_P12jW6t(Xs;DeFB(u1*(bgkg#Z3 ng$IOMVFbEX;k^RO9ooFN5?8Lk_Bg(-z}AS6gjIJ(euw`99hm^x diff --git a/core/management/__init__.py b/core/management/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/core/management/__pycache__/__init__.cpython-311.pyc b/core/management/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0b03314e897e731635f0f2d0840ffbb01a3f06ae GIT binary patch literal 168 zcmZ3^%ge<81a1%dGePuY5CH>>P{wCAAY(d13PUi1CZpd>P{wCAAY(d13PUi1CZpdlIY~;;_lhPbtkwwJTx;8Va(um>)=dU}j`w{J;PsikN|70DLMei2wiq literal 0 HcmV?d00001 diff --git a/core/management/commands/__pycache__/populate_games.cpython-311.pyc b/core/management/commands/__pycache__/populate_games.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3f0b2880776c69f21e4b5a48d412e2af879b4d14 GIT binary patch literal 5535 zcmbVQTWA|s8XjFO+i_|~xjMIFr-`jNy2Q@5S>M37c9W)#YbRam(yF65N7BTj8Fem} zt=iCsKIEaWEi5!k6V~lQx+N`imwgCjVGDWLhkdY(A!48q*r&Xyqzg-*_B%6@EICdo zJ06`mm;e6%=Rg1P7j11V0-l*izmq@TF9`qUgX$Bgbe@c(^NBzO>QRJw{`D%JoOj;q z;eDUt%lYU19>FWTEKvUk0u3x%NA5UfQ5{Xm%aQypd#H)^u2d8>2v-<2Re zexx?>)rq@+zqgH3^Gpo{oxAwmt4$b%XYljaKxn|+j!K!;H>CJSA?}-18QZ^C_|&hs)u&d=f66A7nt{I*dAdeK+hE01YtGs z;a^Se-^xSJ(4IzV;DbM|HqqXdrcVVLF*~Y|f^eg`+F$WEa{W}e<6jLu!;UpQtJwUz z68gV<_1ZId?Cz@&BJJ!-XwBLA_1t-%MjCaXXSRI+&HL{7R+{L!B5X*HRXpOQQP?*I z`^N9WxA$uPZLsg!ig2T~%59DBr>7o3z!&bbwzt}=|I)-t08*U4<7 z6@H!l`Dv!ZWLr9JguSNz^*$ZE6(y;5At;uNkr8@tw@8#2o(6 zSrr!;sj#wxqAtN^Rvc1Pd2x59bXm=cMAPMr%u_qd)m)g<5EH5xEAG9f6_`%OEm@(m znkk;1&{V_JVKIaS9K&2;MFpOC*J31Z0kNwXuNP3##p1GaZaCtxT#C`S$>~N@6}q;+ zKXKur6@!F0sZ#vlfx0P0lkmxlJo>UMBkDxd;FNE3OxFmSEnT#OGmiJ|(3F9A!XapJA5B3a(R}b_Mh3)~V=LQ##WF>HZ0b4! zPUjiPacab~)3+U1vRxNniv)M9+I!d%b`PwZg!k=MH|UcR%xgExMpBead67Nl$Is&d zG{rrac__HSN{T)bCB;M6b8w9&@$;7lX*F1iVb?Mk!!T}G#vXG?e}VapEK`&yw!5@| zU0aM)t;nN!SAXR+Q;RMQ20;bkXuu;G zPLyEq&lIf0BG2hO7u!u*iWfPC9Zbs#Y-R`95;i!-lFm@D*uD%i?Sp8NaJ9s;nu1VE zx)!wqx~OIt@&?ZYIpAb9Swgxo^4MlbLnhTM(+(7L8I%Hsxr|)YG2uxjFfL_{3KD%)@YWGaUV9^8TT}y}BNbZiL6T z!s8Famo~$fHo~uLgN@?! z;m;5M`SdsYHo7isbzLY;&#uqC@h@fl?eyk!dVM;*=6^_rHp$Ta$?p#R{nZU}d5c_L z$E&EN6W!%Dp`-5yp{ZlvkGv^6O}o%>@K(piEguE``=6k&@6bo@-s=AN*zb?kX)#vX zKe={(eg7ohuMd88{F~xNWPB?!?#|qtYEW{@QE+f8Joqp?wizDV2v2NT@w>n!p>%W&7^)ro6w z%uJE2nNvnvhN~YY($N;a!-k#R>-PCLrO{>b9?l^h$JiiA43U&5Eo5};QaVUZB@&pC zG)2=fNT<_7B#lBQnig@;FAow!RE?;?bQud&M!FC&nO4{m;Lt`Xj%Xxl4U|E|%Be#{ zROE~rMIy-=nB;|nK16OJ_$(bz1=M#y=>=4mVC8ZUuFi5g8r3~a& z9j&+~lE`Z-=#tWOUoOpOl50bRkX$j(uD>Y8v=>BhYh(vEarOeDIAYl)HW7cc;>i&6EdQw?rA6=pQd zszF8w)g+52${5oBl;Y&f@#Rajw`ZGIPh@D@kS?~lL`Et!I3h|H6UT9HPd}{(R+vc~ z#Q>bxropE<{)I&199c$Z0D)BFQ0t^E)d>$mb+OPJA@9{z9FLkyF&t;g96xYCqbG%< zYoTYGPCd{p0<9O!@WNi_2<%j+6NmhH+6eV@I+56gdWvCd%!p>TcLzZU@}WBHU4n|| z5F`%sR{&&y-Qo||8s6h%bkVQDEMvN^6|U!dB8a}|2=Yf`)a(X5$*FVrzF!7^g{4ivFa1*bvpkhK2)i(F z_E2A6qm<9wxDIqrBqsCw9`_O=!I|5}Uxj&VMs>HByNL8tNf*O$H+3PCIj6;!Ld2`{ zdyZR`@xzA@{Y5^(E7IbLY7w=2895IagP=iCQETV*i@X{GS8HD4O?c zf2G#h_b1E#8Baj=l!b;5_4WrK*3*qkniIrzq!%CiD7}H|Si|j0XR+<7Gsge(r}G2Z zZgrP%El~`o9CrlTA?Z({VOPUZeH=*q(qiP%lzkqLrzEt!@BEd7f%V3>B%E4re9Qiq Vy&ed^dwX-?2WRESXRJF4{trsQ%^d&$ literal 0 HcmV?d00001 diff --git a/core/management/commands/populate_games.py b/core/management/commands/populate_games.py new file mode 100644 index 0000000..c04b5f9 --- /dev/null +++ b/core/management/commands/populate_games.py @@ -0,0 +1,140 @@ +import random +from django.core.management.base import BaseCommand +from core.models import GameProject + +class Command(BaseCommand): + help = 'Populates the database with a variety of online and traditional games' + + def handle(self, *args, **options): + game_data = [ + { + "title": "Space Invaders Pro", + "genre": "shooter", + "description": "Defenda a terra contra invasores espaciais nesta versão clássica.", + "type": "script" + }, + { + "title": "Neon Runner", + "genre": "runner", + "description": "Corra por uma cidade futurista desviando de obstáculos neon.", + "type": "script" + }, + { + "title": "Sudoku Online", + "genre": "puzzle", + "description": "Desafie sua mente com milhares de níveis de Sudoku.", + "type": "online", + "url": "https://www.247sudoku.com/" + }, + { + "title": "Classic Solitaire", + "genre": "puzzle", + "description": "O jogo de cartas mais popular de todos os tempos.", + "type": "online", + "url": "https://www.247solitaire.com/" + }, + { + "title": "Snake Classic", + "genre": "arcade", + "description": "O jogo da cobrinha original em versão moderna.", + "type": "script" + }, + { + "title": "Tower Building", + "genre": "puzzle", + "description": "Construa a torre mais alta que puder!", + "type": "online", + "url": "https://www.crazygames.com/embed/tower-building" + }, + { + "title": "2048", + "genre": "puzzle", + "description": "Combine os blocos para chegar ao número 2048.", + "type": "online", + "url": "https://play2048.co/" + } + ] + + # Categories for variety + categories = ['Ação', 'Aventura', 'Puzzle', 'Esportes', 'Estratégia', 'Arcade', 'Luta', 'Corrida'] + + count = 0 + # Create base games + for data in game_data: + if not GameProject.objects.filter(title=data['title']).exists(): + GameProject.objects.create( + title=data['title'], + genre=data['genre'], + description=data['description'], + external_url=data.get('url', ''), + script_code=self.get_placeholder_script(data['title']) if data['type'] == 'script' else '', + is_active=True + ) + count += 1 + + # Generate 50 more "simulated" games to show scale + for i in range(1, 51): + title = f"Jogo Online {i} - {random.choice(categories)}" + if not GameProject.objects.filter(title=title).exists(): + GameProject.objects.create( + title=title, + genre='online', + description=f"Um emocionante jogo de {title.split(' - ')[1]} para jogar online.", + external_url="https://www.crazygames.com/embed/shell-shockers" if i % 2 == 0 else "https://www.crazygames.com/embed/moto-x3m", + is_active=True + ) + count += 1 + + self.stdout.write(self.style.SUCCESS(f'Sucesso! {count} novos jogos adicionados ao catálogo.')) + + def get_placeholder_script(self, title): + return f""" + + + + + + +
Score: 0
+ + + + +""" diff --git a/core/migrations/0004_gameproject_external_url_userpurchase_is_paid_and_more.py b/core/migrations/0004_gameproject_external_url_userpurchase_is_paid_and_more.py new file mode 100644 index 0000000..e1e7901 --- /dev/null +++ b/core/migrations/0004_gameproject_external_url_userpurchase_is_paid_and_more.py @@ -0,0 +1,38 @@ +# Generated by Django 5.2.7 on 2026-02-14 02:28 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0003_gameproject_script_code_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='gameproject', + name='external_url', + field=models.URLField(blank=True, help_text='URL for external online games', null=True), + ), + migrations.AddField( + model_name='userpurchase', + name='is_paid', + field=models.BooleanField(default=False, help_text='Anti-fraud: Payment detected by intelligent system'), + ), + migrations.AlterField( + model_name='gameproject', + name='genre', + field=models.CharField(choices=[('platformer', 'Platformer'), ('shooter', 'Top-Down Shooter'), ('runner', 'Endless Runner'), ('puzzle', 'Puzzle'), ('traditional', 'Traditional Script'), ('online', 'Online Link')], default='platformer', max_length=50), + ), + migrations.AlterField( + model_name='gameproject', + name='prompt', + field=models.TextField(blank=True), + ), + migrations.AlterField( + model_name='userpurchase', + name='is_confirmed', + field=models.BooleanField(default=False, help_text='User successfully validated the code'), + ), + ] diff --git a/core/migrations/__pycache__/0004_gameproject_external_url_userpurchase_is_paid_and_more.cpython-311.pyc b/core/migrations/__pycache__/0004_gameproject_external_url_userpurchase_is_paid_and_more.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4cc9413980c30959a2a9a21a9a9fa458c1003e37 GIT binary patch literal 1845 zcmah}&2QsG6dxy!lep>9x?L6)7R;($5kZr(a6qdSsIYV;)Lp7=7o;4pCZ0*+bUZd= zo3=Uiz=0b*AaUnVinf1DigJi7apJVMRPAX`ym8|6Q`<@WJn#F>dq2-#lao4v_0PY* zIlDQ8{*z3)fKS%(LwNmx2qFqYu2NInOf93J40?=6<`+b=RB2~NwrCG_FUDLgOVl+~ z&b^fCawgVYrzvpgcsz(T*CUh#cIqkLr4e&16q%BunnF-5LzJdc%VrQ&+i6jdnn;P( z&Zhy0N^(R!(9V}|kU!5~h*BWMBuZf%MJE#nrM(Os1D@f!GDb1gLM4+)jHH!P+C=2W zp9*<{OdU+0&wgzrBZ)LIj;$Wd>_IPHz%yLeL@1EiOXs~gSr(LpQICl zajCW^Xgt5TxcI5n#4h!P*QR!81-5Yf(6V8G7UslqrP;(8i?~F$LMk|BRwUSZ=g#wI zD`vwJW-2y4&Kyon=@XQ*ajwoV--wGX%6uyXt61d`W1!I!m{=SPK_+Rg;ZR26QWQ|( zN5XF5fW~LCczitj}-=rMpzb`s#QuU4oY9!6`da>z=>x$lK)R+E4;YO+=i7 z?#4HqFd78rvxJu#Kk9TCjkVR}4U&maVB*NH0<(^>e#)3@Nu#CHuwR{t?}mL_arlO~ z38lWg4+Pqjw_BcL(?HC~`gIp?S&Z^#*n)h*bN#Ta2#Kn=1dXyi-f-YVq%-#%nrH@* z4X!~0I=*fGjG05Q>{ZyJrkwH9@?>1Fk`Y)|tXnW|5-|$iRz{&HUb~pv?|eCJ-uL-}qqn-tX0Ywfp%G z-5={+!#*_Zo?#F2YEeHzKu#n%>o(t?zTG$GcklI#`F+~`GUyuNp%M0s@Cv8*WUf0& zuDANeUFmdpfY8S{dx36bH>K#2x~#%$=COK|(36C|KJeRV;QiUIQ8_d!J)`m(52zoG zeOf>58jVAv(K8wsoj$s4XglA^pQxn$eOgxIB57mZ^eUvD04agbZ~_a`EU~S^?p5L8 w5RG4mPk@!zWbi$ZK~_-|n2J*Fq7N_s2b!s919X|}>bRunner + +
+ + + Se preenchido, o jogo será carregado via Iframe desta URL. +
+
@@ -59,4 +66,4 @@
-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/core/templates/core/play.html b/core/templates/core/play.html index d8bee65..5bbca7d 100644 --- a/core/templates/core/play.html +++ b/core/templates/core/play.html @@ -1,78 +1,74 @@ {% extends 'base.html' %} +{% load static %} {% block content %} -
-
-

{{ game.title }}

-

Sessão validada. Divirta-se!

-
- Sair do Jogo -
- -
- {% if game.script_code %} - - {% else %} -
- - -
-

Este jogo ainda não possui script. Exibindo simulador.

-
Aguardando IA
+
+
+ +
+
+ + Voltar + +
{{ game.title }}
+
+
+ {{ game.get_genre_display }}
- {% endif %} -
-
-
-

Sobre o Jogo

-

{{ game.prompt }}

-
-
-
-
Status da Sessão
-
Ativo ✅
-
Sua compra foi validada com sucesso.
+ +
+ {% if game.external_url %} + + {% elif game.script_code %} + + + {% else %} + +
+
+

Jogo Simulado

+

Este jogo está em desenvolvimento.

+ +
+
+ + {% endif %}
- -{% block extra_js %} -{% if not game.script_code %} - -{% endif %} {% endblock %} -{% endblock %} \ No newline at end of file diff --git a/core/templates/core/purchase.html b/core/templates/core/purchase.html index 4225c69..dec6b16 100644 --- a/core/templates/core/purchase.html +++ b/core/templates/core/purchase.html @@ -1,183 +1,265 @@ {% extends 'base.html' %} +{% load static %} {% block content %} -
-
-
-

{{ game.title }}

-

{{ game.prompt }}

-
-
💳
-
-
Instruções de Aluguel
-
Selecione um plano, clique em "CLICK NO QR", escaneie o código e aguarde 3 minutos para receber seu código de validação.
-
-
- -

Escolha o tempo de acesso:

-
+
+
+
+

{{ game.title }}

+

Selecione o tempo de jogo desejado para liberar o acesso.

+ + +
{% for option in options %} -
-
-
{{ option.title }}
-
R$ {{ option.price }}
+
+
+
+
+ +
+

{{ option.title }}

+

{{ option.description }}

+
R$ {{ option.price }}
+
{{ option.duration_days }} dia(s) de jogo
+
{% endfor %}
-
-
-
-
-
-
🛒
-

Selecione uma opção

-

Escolha um plano ao lado para começar.

-
- -
-

- -
- -

Clique para visualizar os códigos de pagamento

-
- -
-
-
-
- QR 1 -
-
QR CODE 1
+ +