diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7bd61a7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,28 @@ +# Apex Freeroam — GTA V RAGE:MP Server + +# ──────────────── Node.js ──────────────── +node_modules/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# ──────────────── Build Outputs ────────── +client_packages/cef/ +client_packages/client.js + +# ──────────────── Environment / Secrets ── +settings.json + +# ──────────────── RAGE:MP Server ───────── +ragemp-server.exe +BugTrap-x64.dll +*.dll +*.so +*.dylib +maps/ + +# ──────────────── IDE / OS ─────────────── +.vscode/ +.idea/ +.DS_Store +Thumbs.db diff --git a/README.md b/README.md index d3ee205..cba3380 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,171 @@ -# YabosRageMPCore -Everything you need to start your RageMP RP, DM or Freeroam server using performance friendly code + Rage-RPC +
+ +# 🔥 YabosRageMPCore + +### A open-source **RAGE:MP** GTA V multiplayer server framework. + +[![License: GPLv3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) +[![RAGE:MP](https://img.shields.io/badge/Platform-RAGE%3AMP-red)](https://rage.mp/) +[![TypeScript](https://img.shields.io/badge/TypeScript-5.x-3178C6?logo=typescript)](https://www.typescriptlang.org/) +[![Vue.js](https://img.shields.io/badge/Vue-3.x-42b883?logo=vue.js)](https://vuejs.org/) +[![Vite](https://img.shields.io/badge/Vite-5.x-646CFF?logo=vite)](https://vitejs.dev/) + +_A modern, scalable server boilerplate with a type-safe RPC system and a Hot-Module-Reloading CEF UI pipeline._ + +
+ +--- + +## ✨ Features + +- **Type-safe RPC** across Server, Client, and CEF using [`@entityseven/rage-fw-rpc`](https://github.com/entityseven/rage-framework) +- **Split architecture** — clean separation between server logic, client scripts, and UI +- **Modern UI pipeline** — Vue 3 + Vite with Hot Module Replacement for rapid development +- **Custom Chat UI** — in-game chat built in Vue with support for player, global, admin, system, and error messages +- **Smart CEF routing** — automatically routes CEF to `localhost:3000` (dev) or the bundled package (production) via `settings.json` +- **Zero boilerplate overhead** — only the code that matters + +--- + +## 📁 Project Structure + +``` +YabosRageMPCore/ +├── packages/ +│ └── core/ # Server-side logic (Node.js) +│ └── index.js # Entry point: RPC handlers, player events +│ +├── develop_client/ # Client-side TypeScript source +│ └── src/ +│ └── index.ts # Compiled to client_packages/client.js +│ +├── develop_cef/ # Vue 3 SPA for all in-game UI +│ └── src/ +│ ├── App.vue +│ └── components/ +│ └── Chat.vue # Custom chat system +│ +├── client_packages/ # [BUILD OUTPUT] — loaded by RAGE:MP +│ ├── index.js # Loader entrypoint +│ ├── client.js # Compiled client bundle +│ └── cef/ # Compiled Vue SPA +│ +└── settings.json # Database, debug, and CEF environment config +``` + +--- + +## 🚀 Getting Started + +### Prerequisites + +- [Node.js](https://nodejs.org/) >= 18.x +- [RAGE:MP Server](https://rage.mp/) + +### 1. Clone the repository + +```bash +git clone https://github.com/yabooo666/YabosRageMPCore +cd YabosRageMPCore +``` + +### 2. Configure `settings.json` + +```json +{ + "mysql": { + "host": "localhost", + "port": 3306, + "user": "root", + "password": "", + "database": "ragempcore" + }, + "debugger": true, + "cef": "dev" +} +``` + +> Set `"cef": "dev"` to use the Vite dev server, `"cef": "build"` to use the compiled bundle. + +### 3. Install dependencies + +```bash +# Server core +npm install + +# Client script +cd ../../develop_client && npm install + +# CEF UI +cd ../develop_cef && npm install +``` + +### 4a. Development Mode (with HMR) + +```bash +# Terminal 1 — Watch & compile client script +cd develop_client && npm run dev + +# Terminal 2 — Start Vite dev server for CEF +cd develop_cef && npm run dev +``` + +### 4b. Production Mode + +```bash +# Compile client script +cd develop_client && npm run build + +# Compile CEF UI +cd develop_cef && npm run build + +# Start the RAGE:MP server +./ragemp-server.exe +``` + +--- + +## 🔌 RPC Communication + +Cross-environment communication is handled by [RageFW RPC](https://github.com/entityseven/rage-framework). + +| From | To | Method | +| ------ | ------ | ----------------------------------------- | +| Server | Client | `rpc.callClient(player, 'event', [args])` | +| Client | Server | `rpc.callServer('event', [args])` | +| Client | CEF | `rpc.callBrowser('event', [args])` | +| CEF | Client | `chatRpc.callClient('event', [args])` | + +To register a handler: + +```js +rpc.register("my:event", (player, arg1) => { + // handle it + return true; +}); +``` + +--- + +## 📄 License + +This project is licensed under the **GNU General Public License v3.0**. +See the [LICENSE](LICENSE) file for details. + +``` +YabosRageMPCore — RAGE:MP Server Framework +Copyright (C) 2025 + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +``` + +--- + +
+ +**Made with ❤️ for the RAGE:MP community** + +
diff --git a/bin/bt.dat b/bin/bt.dat new file mode 100644 index 0000000..a55d170 --- /dev/null +++ b/bin/bt.dat @@ -0,0 +1,633 @@ +olp ϷsuP;_tM=nfe +fco) +olp +.i_π { +pt.svx؉s4 t l s .i_π[r +fr)err;r mulxs4t;pt.Ϸh˛t r;ru s} +n sva mulelXa6 +lseo csuoxyz{fte ! nfe) +ix |0;h.= 0ts z|. +eefte = bc) + rysњr() +ix 0 +iy 1 +iz 2 +ee +ix xts x;h.=. +} +ete ru weo(h. h. h.; +d) + snoVt3ru weo(ix xts v,h.+.;l tneVt3h.+,h.+,h.+)}urt) + snoVt3ru weo(ix xts v,h.-.;l tneVt3h.-,h.-,h.-)}uiy) + snoVt3ru weo(ix xts v,h.*.;l tneVt3h.*,h.*,h.*)}idv{fvnae ƍcr tneVt3h./. iy yts v)eeern ƍcrts vts vts v +ea( ru ix=.&ts y&h.=v; +t) +tnh.*.+h.*.+h.*. +csv{ern ƍcr +iy z iz yts v ts v,h.*.-h.*.)}et) +tna.rtsots; +i) +tnh.veh.nh)}i) +tna.na.nh. iy iz +m({erMhaMhats,h.,h.; +Al({er[݉tanh./h.nh)Mht2h. ix; +gTa{erMhc(id( (ilg(*.nh) +try) +tnts,h. izsc0n|)}le ru weo(ixts,h.; +ixyz{h.=;h.=;h.=;erts}oÜrg ru ":ts}y$h.,"{iz`} +.ƍcr=eo;lsuei csuoxyzw{h.= 0ts y|. +iz |0;h.= 0} +.a=uei;l aBf n њrBf(2 2;egώltҝfr wltAagωpue;egϊyBf n ŁnAagωpue;egϊin4ҝfr win4њr(aBf)l utBf n Łn2њr(aBf) +ϷsuB_iҝfr +ϷsuB did +t_oBfPl ˵;cskӄoBfAoi 2 55 ;fcoaotleҝfrr u) +n nh cnueo.nh +tr +fet= +a n Łn2њr(wryҝfrCnuelcÁz)}l +a gϋleҝfrolg 1 +cnueo.p; +rs(cury,ot ) +tnr + +ni eleҝfru) +cnueo.sbf + +trrPl=] +ni otry tstry;cscn=_n2ҝfr] +te=eAacn;f(t 0i u;+ +r[ tsˏ_n2ҝfrˁ+]}ru t}fcoplϜoњrFt tstry;cscn=_n2ҝfr] +toњrCh=h.ϷtryӉc;tryӉc.nh u;f(t 0i u;+ +tryӉc[ tsˏ_n2ҝfrˁ+]}ru Aaae} +ni otryنRgp,aedei,b{_oBf[ p. +faue1=oygώltҝfr] s;gώltҝfr] n;ic=nl{b msngϝi3ue4=0F֮F֮F>)}l gϝi3ue4=ino + +i_rՉcn‰n( +otot utBf[;l t wryot +ol =; cn i{ei=h[utBf[1͵; +err; +utno_Aanԁmsnino ) +utBf[ dei;tsfEhنDei( +otot utBf[;l t wryot +ol =; cn i{ei=h[utBf[1͵; +err; +fcoplώoa() +i_Aa) +n u gϝi3ue0 +otleue=lceӄoBf(utBf,ot +r{ol =; cn i{otnt=h[odҝfrˁ] +fnt +(ty +} +t( }feӄoBf(odҝfr + +ni ofEhنDei(msnc gϝi3ue0=ino +h.ώoaIino) +n u gϝi3ue0 +otleue=lceӄoBf(utBf,ot +r{ol =; cn i{otnt=h[odҝfrˁ] +fnt +(ty +} +t( }feӄoBf(odҝfr + +ni ofEhنRgp,aedei,b{_oBf[ p. +faue1=oygώltҝfr] s;gώltҝfr] n;ic=nl{b msngϝi3ue4=0F֮F֮F>)}l gϝi3ue4=ino + +i_rՉcn‰n( +otot utBf[;cscnBf aotleҝfr_n2ҝfrcn;t f(t 0i u;+ +csei tsˋleuei͵;iei){bnt; +}ah) +eleҝfrleue; +utno_p() +i_Aa) +n u gϝi3ue0 +otleue=lceӄoBf(utBf,ot +r +f(t 0i u;+ +csei tsˋleuei͵;iei){bpynt; +}ah) +eleҝfrleue; +utno_isnt iNb.Iernt) +tnh[ty!nl}l (pfnt= bc ty=u pfnti! nfe) +tnh[tyd= ty}ru l; +otPlމm [le""hl""jt,pks ls hkis ae""las al,dms e" +Plމm.rՉcpl> +toO m" pl +rrPlphoO)mpl=oO;plߊjoњr plϜoњr;oO.Aaa plϜoњrFt +obtryنRg=o_Aan‰n;oO.Aanԁmsn otryنDei;plߊjoa plώoa;oO.rՉca plώoa;plߊjoaIae ofEhنRg +obfEhنDei plώoaIino +oO.p plωpy +ob_ϜoњrCh=] +obes plύxt +*oba=oO.ωt/oO. fcoi) +tnh[x +} +m_Ϙos deos +n ıPշI3=5csTɸEϡn4 ;otY_҇o=7csTɸEϮlt ;otY_Ürg ;otY_çbc=0csTɸEϲSi 2 +n ıPշZߊjt ;otY_ݧbc=3csTɸEϪiue=4csTɸEϾeo 2 +n ıPշNl ;fcophωrmthS) +tte pfhS) +ih_p cenb'_p=Y_نt;rkceoe'{e_g ir +f!ωr _p=Y_ޝl +eefte ωr_pn! nfe +pfa. =uen'{s[ _gd_p=a.ϜyI; si(ωritcfpeo) +ϛri=_g,a. ωrz +Ϝy TɸEϾeo; si(ωritcfryҝfr{te ıPշBBf; s{te ıPշSߊjt} +e;a oe'_p=Y_҇o +e;a tn:te ıPշSi;rkcebi'_p=Y_نt;rkdat_p=Y_ޝl +e; +er_p + +.ύvt_Ϙu_ge phωrmt +ni saun(c{otaIOs ((rlg 4 7/)>) ;l sߊjt=ae +rl =; s.nh+) +thS s[;l Ϝy 0 +n syI beٌxߎft 1;st yotsÚc cenb'{otued=beґtd/) + ueing(ir) +utBf[mrٌx=hS;te ıPշI3 +ee +fauebeґtd/] ir +Ϝy TɸEϮlt} +e;ceoe'{e_g ir +f!ωr _p=Y_ޝl +eefte ωr_pn! nfe pfa. =uen'{csnbI (syI 4 +_n2ҝfrˆued _gd_p=a.ϜyI;}l a snomVt3{csvI (syI 4 +_oBf[cٌx=a. +fauevI 1=a. +fauevI 2=a. +te ıPշVt3}l a snoAaue hOes u +Ϝy TɸEϪiue +ee +sߊjt=r;te ıPշSߊjt} +e;a oe'{_tuebeґtd tsÚc_p=Y_҇o +ba +s'rg +sߊjt=r;te ıPշSi;rkcebi'{otind=beґtd/)gϊin4ҝfrˊind tsÚc_p=Y_نt; +e;eu:te ıPշNlba + +beҝfr 4 _p + +tnabc; +{eda؉ne= +tfcoo,aae{ero.tyeaaeaae +ru jol˞aae*}s:utnb rb,ae{bei.tƉrb(rb,ae +tnr;*jol˞aae=ae/ + +efe֍aral {e ni(ji ru jeaFted + +tfcoo,dvu o.t։ceu(,ae +tnr; + +ehdߞeaal {e ni(ji ru jeeOryd + +tfcoo,dvu o.t؍avl(,ae +tnr; + +ewpHdr g:utnb ) + yoi='Ürg i( =a'ru jleo;l d='e'ru rtevleo.ntg)eefi= ue'ru jeom;ero.tǍanхmmjai)}ru jeeom()}s:utnb ,ae{fte tn) + d='rn)ero.tǍanхmo.anvu;ero.tӝrneom(.a()vu; +tnbsCrtǍanхmi l)};l hloal {e ni(ji ru jeoi;,e ni(ji l) +jeoi l)ru u +} +tecEral {e ni(ji ru jexad + +tfcoo,dvu o.tՐt(,ae +tnr; + +lsntvt؉ne{otcrnt tsnt=nt +ien { + +da,al) +tv esˆa] + vephal)eev ˀal]}ro(e,al) + hdr{fte e tn) +ien[e] ˵; si(њr.Aaen) +rl ύvfvt{h.es˷e [ +}}l i(ien.sߟnor(e){h.esˍvt=h.esˍvtft(πal πal =al)} + +vevtމm g l en[m;i() +rl =; elg;+ i(ύvpyu,r){felg en[m uen; s{vpci1 +i} +} + +.ύvta(_aroel"(arrI,a i(ar_nnphOPptrI){ep ar_nnprI]de ar_nnprI] +y +roea; t ) +nleoeetk +}) +n jtnan="āmO""Ӊnld aeleu""ӄitjtn;m_esd"ϷpyPcjt"(arrI,o)> + le_ϘeiR.sߟnor(cٌx l =le_ϘeiR[cٌx +lele_ϘeiR[cٌx +r{.jtR jt:{jtnance͕` +cc( cserr,.a)} +; +tbreyϘotn emaefs +tfco) +igPio)ru wpeo(faue0 faue1 faue2;,e ni(s{h.tsi(s +} +tbeosVil=utne l) +tea roe؉sk)l Ϝy te(l) +ts=u;st te{a ue:te ıPշI3 +e;a bc: +ta vu +f!ωr _p=Y_ޝl +eefte ωr_pn! nfe +pfa. =uen'{ae ωri +Ϝy _gteنt}l a snomVt3{ae ˷a. ωry_g]_p=Y_ƍcr +eef_gnae њrBf) +Ϝy TɸEϪiue +ee +Ϝy TɸEϻOe; +ba +s'oa:te ıPշBlba +s'rg +Ϝy TɸEϻtn +e;a in:te ıPշI6 +e;eu:te ıPշNlba + +i_tƉrb(y؉s l,te + +eoMh_tƉrbs ni(rbs{eks ߊjte(rbs +tvs wrye.nh ;eaI 0 +rl yfe) +tae rbs˃e;l y؉s=elHhe;e_p=yovu;st te{a ue:te ıPշI3 +e;a bc: +ta vu +f!ωr _p=Y_ޝl +eefte ωr_pn! nfe +pfa. =uen'{ae ωri +Ϝy _gteنt}l a snomVt3{ae ˷a. ωry_g]_p=Y_ƍcr +eef_gnae њrBf) +Ϝy TɸEϪiue +ee +Ϝy TɸEϻOe; +ba +s'oa:te ıPշBlba +s'rg +Ϝy TɸEϻtn +e;a in:te ıPշI6 +e;eu:te ıPշNlba + +Ϟa[rٌx=ea;vsˉrd+] Ϝy;vsˉrd+] l;aI + +i_tƉrb(Ϟa)} +tleeosOVil=utne l) +tea roe؉sk)l Ϝy te(l) +ih_p cenb'_p=Y_نt;rkceoe'{e_g l;i(a) +Ϝy TɸEϦu; si(pfa.ϜyI =uen'&yo_gd='did vu=a.;te ωr_pn +eef_gnae .ƍcr vu=_g,a. ωrz +Ϝy TɸEϾeo; si(ωritcfryҝfr{te ıPշBBf; s{te ıPշSߊjt} +e;a oe'_p=Y_҇o +e;a tn:te ıPշSi;rkcebi'_p=Y_نt;rkdat_p=Y_ޝl +e; +h.ϛewaaeea,ae_p;;l arݍtdϛewaae=utnaae l Ϟa n њr(rbset*)l rٌx +o(teivil) +tae rbs˃e;l y؉s=elHhe;e_p=yovu;st te{a ue:te ıPշI3 +e;a bc: +ta vu +f!ωr _p=Y_ޝl +eefte ωr_pn! nfe +pfa. =uen'{ae ωri +Ϝy _gteنt}l a snomVt3{ae ˷a. ωry_g]_p=Y_ƍcr +eef_gnae њrBf) +Ϝy TɸEϪiue +ee +Ϝy TɸEϻOe; +ba +s'oa:te ıPշBlba +s'rg +Ϝy TɸEϻtn +e;a in:te ıPշI6 +e;eu:te ıPշNlba + +Ϟa[rٌx=ea;vsˉrd+] Ϝy;vsˉrd+] l;aI + +i_tߟnƉrb(Ϟa)} +tleeoclo=utnvtމm g gϊin4ҝfr] sva(eNe +erI +fAairyr){_n2ҝfr] glg;l sߊjt=u_gesr) + abc) +cٌ tsclo.as +ee +cٌ tsclo)} s{_n2ҝfr] +cٌ tsclo)}ru wri(el,ec ts_nnprI {el:el,ec jt;)} +tleeocl ni(eNeas{_gtBf[ roe؉sena) + rysњr(g) +utBf[ aset +ehOes saun(g;i(sߊjt tscl.r)}l tscl; +ee +utBf[ 0tscl; + +epyMh_lnlb fcoena,r) +bi6ue0=elHhvtމm;i(њr.Aaas gϝi3ue2=r.nh +tabc phωrmtas +fhOes{h.ϋaUeae.r)}l tsclņril)} s{_n2ҝfr] +i_lnlb( +} +tleeoclćSee=utnnuSfena,r) +bi6ue0=elHhvtމm;i(њr.Aaas gϝi3ue2=r.nh +tabc phωrmtas +fhOes{h.ϋaTtadnuSf.as +ee +i_loÜrm(cde)} s{_n2ҝfr] +i_loÜrm(cde)};l arݍtdϋaTtadņril=utnnuSfena,r) +bi6ue0=elHhvtމm;i(њr.Aaas gϝi3ue2=r.nh +tabc phωrmtas +fhOes{h.ϋaTtadņrilileÍl .g; s{h.ϋaTtadņrilileÍl; +ee +utBf[ 0tsclćSeenlb(cde)};l aroseele {neb:aeg:utn ts_tÜrmPys;cscn=_n2ҝfr] +te=eAacn;f(t 0i u;+ +r[ tsˏ_n2ҝfrˁ+]}ru t}s:)>}; +.arropsOVil=leeosOVil +.arropsOVil pyMh_tߟnƉrbsmPy.oteaPc arݍtdϋaPcmPy.otea pyMh_l +.arropclņril=leeoclņril +plepty.loÜrm pyMh_loÜrm;plepty.loÜrmUeae arݍtdϋaTtadņril +"ar ec""ߊjt iu,Bp hki""݉rr ohe eLe,Dmnt,P"fEhl> +[]ropsVil=beosVil +[]ropsVil oMh_tƉrbs} +pen.deiCad nt +td ty_;ete ty_pn +tte ty_p +rrPlteͳi ei;Oe.feor(ty""{aei +ib:ae) +ߊjtenreynt teنt vu p +ib:ae) +ߊjtenreynt y"{ae_p +ib:ae) +tnty ei.ϜyI;i(tyđp! &eiTe=9{bcdiPptei,pio,breyϘotn + +ߊjtenreynt vt, +url l,aen Նty՞eHdrnt +;Oe.feor(ty"t, +url l,aen o(ei:nt +c:},aHdr} +wc(tyđp ce:*le*{bcdiPptei,seele"pyPpϛtadar;ei.Ϸpdg˜c ;Oe.feor(ty"ceus emaefs +l:ePxei,aFte؉ne +;Oe.feor(ty"avls emaefs +l:ePxei,eOry؉ne +;Oe.feor(ty"an, +url l,aen o(tywpHdr} +ba +s1/vie/ +ߊjtenreynt o"{neb:aevu wrynt hloal)) +ߊjtenreynt xa, +url l,aen o(tyvieՐtHdr} +ba +} + +utnuiarՐctnea) +imse sg +ine uiarxpo; +pvien fcome si,d i(d l +r wuiarՐctnVieMeirue)i(si l +r wuiarՐctnViePioirue) + a) +tnh.φete d tn mjame me si,. ,5 l,ae0000 +ee + dhdg=u)dhdg 0i(duele=u)dnbPt="i(dla=u)dah=5 + dlk l +doe=aei(dnn=nla.ge l;fa.l l|a.l.nh=)dco=00 + ddei l +dino=;l lTe +fAairydco0) + dco0lg coy 2 +tor dor]a.l[ (l[ co0 +or dor]a.l[ (l[ co0 +ee +lTe +eco=dco0 +dor] or]<6+co1<8+or] +l a.l[;dco1=co1<1 (l[ co0 +}ru i_wyome='rg?potol:olpio dei,dnbPt dlaa.cda.gecoy,dco0 dor]a.msn +} +.χbc.w ni(d,otna) + ol=u)hweMtlexpo"ߊjtMeirue)i(si l +r wuiarՐctnOe:otnseid;i(d ru i_wyome='rg?potol:olpio . 00]2,)}l i(dotn=u)drao=0,. 0 + dah=nla.p 2;fa.msn=u)ddei 0 +tnh.φete d tn mjame me si,drao dlaa.msn +}m_i.w ni(repio d{fsi l +r wuiarՐctnBpSi qr" + otn=u)hweMtlexpo"҄i si qr" +f!d{ertsn(repio ,. 50,ae00 +ee + dne=u)dne ;fa.a l +dce 0i(dor=u)dco=;fa.p l +dla 5i(drDtc=nla.aiae 0i(dht‰n l +dht‰n fs + drao=nla.ti 0i(dino=nla.msn +ertsn(repio da,dsl dora.p,ddwԁsn,dsraea.ti,ddei)} +pccotn fcotepio dsa) + y l +r wuiarՐctnCcotTeseid;fpio=nlton ݝlpyEei(hki:otnseid;fri l +r wuiarՐctnCcotRi qr" +f!d{ertsn(p si,au si,1te0 +ee + ddei l +dico=otni(dor=u)dco=2,5 52]i(dib l +dib tei(dino=nla.msn +ertsn(p si,au dico dco3<2 (dor]<6+a.l[ a.l[,dviea.msn +}m_rrn fcotepio a,d i(p=nlton ݝlpyEei(ae đpirue)i(si l +r wuiarՐctnMk:otnseid;fsl=nlton ݝlpyEei(ae Ëa qr" +f!d{ertsn(p si,ce[00,.,otn- u ; s{fa.rtn=u)ddei pio + drao=nla.ti [00,.;fa.l l +dor 5 52,5;fa.sl=nla.sl=r;fa.msn=u)ddei 0 +tnh.φetepio a,drao dico dco3<2 (dor]<6+a.l[ a.l[,dviea.msn +}m_dn fcome si,d i(d l +r wuiarՐctnP:olseid;fpio=nlton ݝlpyEei(e si qr" +f!d{ertsn(d,otn0fs l,aefs ; s{fa.an=nla.an=;fa.on=u)dfz fs + diiie=u)diiie l;fa.ni=nla.ni=aei(doCtl=u)dlkӇno=r;fa.msn=u)ddei 0 +tnh.φeme si,dhdga.ni dnnb,dfz,dlkӇno dino; + +.Ϙle.l=utn i(geset>) +tr aun[;i(pfr)='rg&te(g =bi'{eas ges] +tvt؉s=yoaun[)='rg?elHhrmt1 aun[;gϊin4ҝfr] eHhgϝi3ue2=r.nh + r glg 0{ehOes saun(g;i(sߊjt m_ar_loaun[,.r)}l m_ar_loaun[)} s{ppysclևrrmt0; +ee +tr aun[;l eHh pfr)='gt?r roe؉sa0 +_gtBf[ ena;i(g&aset>) +utBf[ aset +ehOes saun(g;i(abc) +.Ϙle.ϋa( +ee +.Ϙle.ϋa(.g; +ee +utBf[ 0 +.Ϙle.ϋa( +} s{_gtBf[ roe؉saun[)gϝi3ue2=;m_ar_l)};m_arclنDei (msnena,r)> +_gtBf[ roe؉sena) + r) +utBf[ aset +ehOes saun(g;i(sߊjt m_ar_lnԁmsnino .g; s{ppysclنDei(msn +}l gϝi3ue2=;ppysclنDei(msn +} +.Ϙle.ln‰n (si,aedei,vtމm g i(msn=u)er +fte msn='mr gϊin4ҝfr] sva(eNe +fas{_n2ҝfr] glg;l sߊjt=u_gesr) + abc) +.Ϙle.ϋaIaeцdԁmsnotnrg msn.as +ee +.Ϙle.ϋaIaeцdԁmsnotnrg msn +}l gϝi3ue2=;ppysclنRgninopio n,ino; +ee +bi6ue0=elHhino;i(eNe{_n2ҝfr] eNeet +ehOes saun(eNe +fhOes{ppysclنRgpio n,.vtމm; s{ppysclنRgpio n)} s{_n2ҝfr] +.Ϙle.ϋaIaeotnrg; +} +ppysaUeae ni({faun.nh l g=rmt0 +fte(g =si'&yoa0! in) +tr aun[;l eHh pfrmt1 =si' sva(ges]:rmt1 +_gtBf[ ena;_n2ҝfr] glg;i(g&aset>) +tabc phωrmtas +fhOes{ppysclևrņrilaun[,.r)}l m_ar_lonlb(ges] +}l m_ar_lonlb(ges] +}l l g=rmt1 +eena te(g =bi' g:elHhr) +bi6ue0=vt؉s +fas&r.nh gϝi3ue2=r.nh +tabc phωrmtas +f!sߊjt m_ar_lnlb( +ee +.Ϙle.ϋaUeae.r)} s{_n2ҝfr] +ppysclņril)} +ee +bi6ue0=elHhrmt0;_n2ҝfr] +ppysclņril)};m_arclنDeiUeae ino eNeas={gϊin4ҝfr] sva(eNe +fas{_n2ҝfr] glg;l sߊjt=u_gesr) + abc) +.Ϙle.ϋaIinonlb(msn.as +ee +.Ϙle.ϋaIinonlb(msn +}l gϝi3ue2=;ppysclنDeiUeaeino; + +ppysaIaeņril=pio n,ino eNeas={fdei l +tn + yodei =nb'{_gtBf[ roe؉sena) + r) +utBf[ aset +ehOes saun(g;i(sߊjt m_ar_ln‰nADeiUeaeotnrg msn.as +ee +.Ϙle.ϋaIaeцdԁmsnņrilpio n,ino; +ee +utBf[ 0m_ar_ln‰nADeiUeaeotnrg msn +}l gϊin4ҝfr] sva(msn +fena) +utBf[ ena.nh +tabc phωrmtena) + abc) +.Ϙle.ϋaIaeņrilpio n,.vtމm; s{ppysclنRgnlb(si,ae +}l gϝi3ue2=;ppysclنRgnlb(si,ae +};m_bse=utne,otna) + e l +r wuiarՐctnTt܉b:e qr" + otn=u)hweMtlexpo"čxalPioirue) + a) +tnh.φepio x u 0,10 +ee + dl l +do=r;fa.n=nla.n=;fa.aiae=u)ddwԁsn 2. + a.l doret!4a.l [52,5 5 + ddei l +dino=;ru i_wotntta.sa.n drDtc dco3<2 (dor]<6+a.l[ a.l[,ddei)} +pdmse=utnuyđp msnsrDa{e_l=u;fsrDa{evil Oe.ysrDa +vs wryaaelg 3 +trd=;f ek rbs{evu=hea[y +ekHh sva(y +tte pfae +wc(Ϝy) +s'mr +Ϝy TɸEϡn2ba +s'jt l ωr=ae + _g{te ıPշNl}l yo_gteنt='did&te ωri! nfe) +l _gd_p=a.ϜyI; si(ωritcfpeo) +l [ωrx_g,a.;te ıPշVt3}l a snoAaue _p=Y_ҁnҝfr}l _p=Y_çbc +}rkcebln +Ϝy TɸEϪo;rkcesi'_p=Y_Ürgba +s'gt +Ϝy TɸEϡn4ba +fl +Ϝy TɸEϦu;rk}_laI] y؉s +Ϟa[rٌx _p +Ϟa[rٌx vu +rd+3} +erm_me_wuyđp Ϟa,ino; + +n ћyFco=bcgPtyOanfco)}csuo +pvt= +nd{ +ndo ,ieol{ +i:utnvtas{ee=h.ndˍvt +fe i(pfr[)=Oe'&r[.es{r[.esnkena,r)}l Ϸe= +nlfs +l l} +rl ύvtfv{_.l=en +ύvtpy_,r) + _.nl{rk} +f_ύvae ru u +}} +rr:scutnvtas{ee=h.ndoen;i() +tr l +rl ύvtfv{r a ύvtpyu,r)}ru ; +,fe܇c:utnvtas{ee=h.nd܇c[e] + v{fte(g0 bc +g0en) +g0en.vevtމm g; +e_ύv cc:aesfnl;f e_e ) +Ϸesf ύvt_e.p(Ϸe g;i(Ϸecc) +e; +},aPcfcoen ne _o) + hdr{fte e bc) +rk e) +iaPce e[y; +}l i(h.ndoen) +ibdPcˍvt=]m_esdr(e,eAnutnt{t aimen.rr({e} gesirnlaun[.Ϛeyots,m_es_saunr;l{ges]rlr(i0}ah)rmt0_jtots)`; +ftfn +ibdPcˍvtphal)eeh.ndoen.shdr +} +dfcoen ne _o) + hdr{fte e bc) +rk e) +ia(yenk] +} s{f!ibd[e]{h.ndˍvt=]m_esden wutnru ife$vt,rmt;.nts; +ftfn +ibd[e]u(ne;l +ibd[e]u(ne; + +dolfcoen ne _o) + hdr{fte e bc) +rk e) +iaLak,vt˃e)} +ee + tsieolˍvt tsieolˍvt=]m_esdolvtn ֝ni(ertsi({e} ges`bdh) + + oώrttsieolˍvtphal)eeh.nd܇c[e]u(ne; + +doa:nehdr={pen.dӇmnnehdr + +elffcoen ru ibd.sߟnor(e) ibd[e]le [ + +a:pen.l +lolm_esaLa +ev ni(e,al) + hdr{fte e tn) +ibd[e] ˵; si(њr.Aaen) +rl ύvfvt{h.nd˷e [ +}}l i(ibd.sߟnor(e){h.ndˍvt=h.ndˍvtft(πal πal =al)} + +evolfcoen ne i(al) + yoen='rg tsieolˍvt=]}l rysњr(e){o(teoen tsieol˷e [ +}}l i(ibdLahOPpten) +ibdLaen tsieolˍvtft(πal πal =al)} + +etfco) +ibd { + +sLa ni({h.nd܇c { +}csEn{otcra,al) +ine m +ihdr ne +ieb( +eb({pvta(inetsal)}er({pvtro(inetsal)};pvt ՞e; +enrl)>}0 +( \ No newline at end of file diff --git a/bin/enc.dat b/bin/enc.dat new file mode 100644 index 0000000..e8f10c8 Binary files /dev/null and b/bin/enc.dat differ diff --git a/bin/loader.mjs b/bin/loader.mjs new file mode 100644 index 0000000..23837d4 --- /dev/null +++ b/bin/loader.mjs @@ -0,0 +1,7 @@ +console.log("Runtime Node version:", process.version); +import{createRequire}from 'module';import fs from 'fs';import path from 'path';x();(async function(){const FgReset="\x1b[0m";const FgRed="\x1b[31m";const FgGreen="\x1b[32m";const FgYellow="\x1b[33m";const FgBlue="\x1b[34m";async function loadPackages(){const require=createRequire(import.meta.url);function getDirectories(srcpath){return fs.readdirSync(srcpath).filter(file=>{return fs.statSync(path.join(srcpath,file)).isDirectory()})} +console.log(`${FgYellow}[INFO]${FgReset} Loading NodeJS packages...`);for(let src of getDirectories('packages')){try{if(fs.existsSync('./packages/'+src+'/index.js')){require('./../packages/'+src+'/index.js')}else{await import('./../packages/'+src+'/index.mjs')} +console.log(`${FgGreen}[DONE]${FgReset} "${src}" package has been loaded.`)}catch(e){console.error(`${FgRed}[ERROR]${FgReset} "${src}" package loading failed, exception stack:\n${e.stack}\n\n`)}}} +await loadPackages();console.log(`${FgYellow}[INFO]${FgReset} Starting packages...`);let successful=!0;for(let h of mp.events.getAllOf('packagesLoaded')){try{h()} +catch(e){successful=!1;console.error(`${FgRed}[ERROR]${FgReset} ${e.stack}`)}} +console.log(successful?`${FgGreen}[DONE]${FgReset} Server packages have been started.`:`${FgRed}[ERROR]${FgReset} Some packages have not managed to launch successfully, check the logs above.`);mp.events.remove('packagesLoaded');mp.events.initialized=!0})() \ No newline at end of file diff --git a/bin/test.txt b/bin/test.txt new file mode 100644 index 0000000..e69de29 diff --git a/client_packages/.listcache b/client_packages/.listcache new file mode 100644 index 0000000..9ebf10c Binary files /dev/null and b/client_packages/.listcache differ diff --git a/client_packages/index.js b/client_packages/index.js new file mode 100644 index 0000000..5e2e54c --- /dev/null +++ b/client_packages/index.js @@ -0,0 +1 @@ +require('./client.js'); diff --git a/conf.json b/conf.json new file mode 100644 index 0000000..58aa685 --- /dev/null +++ b/conf.json @@ -0,0 +1,9 @@ +{ + "maxplayers" : 100, + "name" : "RAGE:MP Unofficial server", + "gamemode" : "freeroam", + "stream-distance" : 300.0, + "announce" : false, + "csharp" : "disabled", + "port": 22005 +} \ No newline at end of file diff --git a/develop_cef/.gitignore b/develop_cef/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/develop_cef/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/develop_cef/README.md b/develop_cef/README.md new file mode 100644 index 0000000..33895ab --- /dev/null +++ b/develop_cef/README.md @@ -0,0 +1,5 @@ +# Vue 3 + TypeScript + Vite + +This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 ` + + diff --git a/develop_cef/package-lock.json b/develop_cef/package-lock.json new file mode 100644 index 0000000..2aa7d69 --- /dev/null +++ b/develop_cef/package-lock.json @@ -0,0 +1,1256 @@ +{ + "name": "develop_cef", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "develop_cef", + "version": "0.0.0", + "dependencies": { + "@entityseven/rage-fw-rpc": "^0.2.5", + "vue": "^3.5.30" + }, + "devDependencies": { + "@types/node": "^24.12.0", + "@vitejs/plugin-vue": "^6.0.5", + "@vue/tsconfig": "^0.9.0", + "typescript": "~5.9.3", + "vite": "^8.0.1", + "vue-tsc": "^3.2.5" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.1.tgz", + "integrity": "sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.1.tgz", + "integrity": "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz", + "integrity": "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@entityseven/rage-fw-rpc": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@entityseven/rage-fw-rpc/-/rage-fw-rpc-0.2.5.tgz", + "integrity": "sha512-U9V+eZTQbkL+JZEU3TS+fCroPyvSvBXICLikcC/h9gCNHhFiS6vm+W+92LqGzBi3K+aZEnsx57hAhhObB03g0w==", + "license": "MIT", + "peerDependencies": { + "typescript": "^5" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.2.tgz", + "integrity": "sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.122.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.122.0.tgz", + "integrity": "sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.12.tgz", + "integrity": "sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.12.tgz", + "integrity": "sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.12.tgz", + "integrity": "sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.12.tgz", + "integrity": "sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.12.tgz", + "integrity": "sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.12.tgz", + "integrity": "sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.12.tgz", + "integrity": "sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.12.tgz", + "integrity": "sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.12.tgz", + "integrity": "sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.12.tgz", + "integrity": "sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.12.tgz", + "integrity": "sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.12.tgz", + "integrity": "sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.12.tgz", + "integrity": "sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.1.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.12.tgz", + "integrity": "sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.12.tgz", + "integrity": "sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.2", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.2.tgz", + "integrity": "sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/node": { + "version": "24.12.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.0.tgz", + "integrity": "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.5.tgz", + "integrity": "sha512-bL3AxKuQySfk1iGcBsQnoRVexTPJq0Z/ixFVM8OhVJAP6ZXXXLtM7NFKWhLl30Kg7uTBqIaPXbh+nuQCuBDedg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "1.0.0-rc.2" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.28.tgz", + "integrity": "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.28" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.28.tgz", + "integrity": "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.28.tgz", + "integrity": "sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.31.tgz", + "integrity": "sha512-k/ueL14aNIEy5Onf0OVzR8kiqF/WThgLdFhxwa4e/KF/0qe38IwIdofoSWBTvvxQOesaz6riAFAUaYjoF9fLLQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.2", + "@vue/shared": "3.5.31", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.31.tgz", + "integrity": "sha512-BMY/ozS/xxjYqRFL+tKdRpATJYDTTgWSo0+AJvJNg4ig+Hgb0dOsHPXvloHQ5hmlivUqw1Yt2pPIqp4e0v1GUw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.31", + "@vue/shared": "3.5.31" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.31.tgz", + "integrity": "sha512-M8wpPgR9UJ8MiRGjppvx9uWJfLV7A/T+/rL8s/y3QG3u0c2/YZgff3d6SuimKRIhcYnWg5fTfDMlz2E6seUW8Q==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.2", + "@vue/compiler-core": "3.5.31", + "@vue/compiler-dom": "3.5.31", + "@vue/compiler-ssr": "3.5.31", + "@vue/shared": "3.5.31", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.8", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.31.tgz", + "integrity": "sha512-h0xIMxrt/LHOvJKMri+vdYT92BrK3HFLtDqq9Pr/lVVfE4IyKZKvWf0vJFW10Yr6nX02OR4MkJwI0c1HDa1hog==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.31", + "@vue/shared": "3.5.31" + } + }, + "node_modules/@vue/language-core": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.2.6.tgz", + "integrity": "sha512-xYYYX3/aVup576tP/23sEUpgiEnujrENaoNRbaozC1/MA9I6EGFQRJb4xrt/MmUCAGlxTKL2RmT8JLTPqagCkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "@vue/compiler-dom": "^3.5.0", + "@vue/shared": "^3.5.0", + "alien-signals": "^3.0.0", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1", + "picomatch": "^4.0.2" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.31.tgz", + "integrity": "sha512-DtKXxk9E/KuVvt8VxWu+6Luc9I9ETNcqR1T1oW1gf02nXaZ1kuAx58oVu7uX9XxJR0iJCro6fqBLw9oSBELo5g==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.31" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.31.tgz", + "integrity": "sha512-AZPmIHXEAyhpkmN7aWlqjSfYynmkWlluDNPHMCZKFHH+lLtxP/30UJmoVhXmbDoP1Ng0jG0fyY2zCj1PnSSA6Q==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.31", + "@vue/shared": "3.5.31" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.31.tgz", + "integrity": "sha512-xQJsNRmGPeDCJq/u813tyonNgWBFjzfVkBwDREdEWndBnGdHLHgkwNBQxLtg4zDrzKTEcnikUy1UUNecb3lJ6g==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.31", + "@vue/runtime-core": "3.5.31", + "@vue/shared": "3.5.31", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.31.tgz", + "integrity": "sha512-GJuwRvMcdZX/CriUnyIIOGkx3rMV3H6sOu0JhdKbduaeCji6zb60iOGMY7tFoN24NfsUYoFBhshZtGxGpxO4iA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.31", + "@vue/shared": "3.5.31" + }, + "peerDependencies": { + "vue": "3.5.31" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.31.tgz", + "integrity": "sha512-nBxuiuS9Lj5bPkPbWogPUnjxxWpkRniX7e5UBQDWl6Fsf4roq9wwV+cR7ezQ4zXswNvPIlsdj1slcLB7XCsRAw==", + "license": "MIT" + }, + "node_modules/@vue/tsconfig": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.9.1.tgz", + "integrity": "sha512-buvjm+9NzLCJL29KY1j1991YYJ5e6275OiK+G4jtmfIb+z4POywbdm0wXusT9adVWqe0xqg70TbI7+mRx4uU9w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "typescript": ">= 5.8", + "vue": "^3.4.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/alien-signals": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-3.1.2.tgz", + "integrity": "sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/rolldown": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.12.tgz", + "integrity": "sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.122.0", + "@rolldown/pluginutils": "1.0.0-rc.12" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.0-rc.12", + "@rolldown/binding-darwin-arm64": "1.0.0-rc.12", + "@rolldown/binding-darwin-x64": "1.0.0-rc.12", + "@rolldown/binding-freebsd-x64": "1.0.0-rc.12", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.12", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.12", + "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.12", + "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.12", + "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.12", + "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.12", + "@rolldown/binding-linux-x64-musl": "1.0.0-rc.12", + "@rolldown/binding-openharmony-arm64": "1.0.0-rc.12", + "@rolldown/binding-wasm32-wasi": "1.0.0-rc.12", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.12", + "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.12" + } + }, + "node_modules/rolldown/node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.12.tgz", + "integrity": "sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==", + "dev": true, + "license": "MIT" + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.3.tgz", + "integrity": "sha512-B9ifbFudT1TFhfltfaIPgjo9Z3mDynBTJSUYxTjOQruf/zHH+ezCQKcoqO+h7a9Pw9Nm/OtlXAiGT1axBgwqrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.8", + "rolldown": "1.0.0-rc.12", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.1.0", + "esbuild": "^0.27.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue": { + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.31.tgz", + "integrity": "sha512-iV/sU9SzOlmA/0tygSmjkEN6Jbs3nPoIPFhCMLD2STrjgOU8DX7ZtzMhg4ahVwf5Rp9KoFzcXeB1ZrVbLBp5/Q==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.31", + "@vue/compiler-sfc": "3.5.31", + "@vue/runtime-dom": "3.5.31", + "@vue/server-renderer": "3.5.31", + "@vue/shared": "3.5.31" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-tsc": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.2.6.tgz", + "integrity": "sha512-gYW/kWI0XrwGzd0PKc7tVB/qpdeAkIZLNZb10/InizkQjHjnT8weZ/vBarZoj4kHKbUTZT/bAVgoOr8x4NsQ/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "2.4.28", + "@vue/language-core": "3.2.6" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + } + } + } +} diff --git a/develop_cef/package.json b/develop_cef/package.json new file mode 100644 index 0000000..f67a00f --- /dev/null +++ b/develop_cef/package.json @@ -0,0 +1,23 @@ +{ + "name": "develop_cef", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vue-tsc -b && vite build", + "preview": "vite preview" + }, + "dependencies": { + "@entityseven/rage-fw-rpc": "^0.2.5", + "vue": "^3.5.30" + }, + "devDependencies": { + "@types/node": "^24.12.0", + "@vitejs/plugin-vue": "^6.0.5", + "@vue/tsconfig": "^0.9.0", + "typescript": "~5.9.3", + "vite": "^8.0.1", + "vue-tsc": "^3.2.5" + } +} diff --git a/develop_cef/public/favicon.svg b/develop_cef/public/favicon.svg new file mode 100644 index 0000000..6893eb1 --- /dev/null +++ b/develop_cef/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/develop_cef/public/icons.svg b/develop_cef/public/icons.svg new file mode 100644 index 0000000..e952219 --- /dev/null +++ b/develop_cef/public/icons.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/develop_cef/src/App.vue b/develop_cef/src/App.vue new file mode 100644 index 0000000..8152d81 --- /dev/null +++ b/develop_cef/src/App.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/develop_cef/src/assets/hero.png b/develop_cef/src/assets/hero.png new file mode 100644 index 0000000..cc51a3d Binary files /dev/null and b/develop_cef/src/assets/hero.png differ diff --git a/develop_cef/src/assets/vite.svg b/develop_cef/src/assets/vite.svg new file mode 100644 index 0000000..5101b67 --- /dev/null +++ b/develop_cef/src/assets/vite.svg @@ -0,0 +1 @@ +Vite diff --git a/develop_cef/src/assets/vue.svg b/develop_cef/src/assets/vue.svg new file mode 100644 index 0000000..770e9d3 --- /dev/null +++ b/develop_cef/src/assets/vue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/develop_cef/src/components/Chat.vue b/develop_cef/src/components/Chat.vue new file mode 100644 index 0000000..2aee153 --- /dev/null +++ b/develop_cef/src/components/Chat.vue @@ -0,0 +1,450 @@ + + + + + diff --git a/develop_cef/src/main.ts b/develop_cef/src/main.ts new file mode 100644 index 0000000..01433bc --- /dev/null +++ b/develop_cef/src/main.ts @@ -0,0 +1,4 @@ +import { createApp } from 'vue' +import App from './App.vue' + +createApp(App).mount('#app') diff --git a/develop_cef/src/style.css b/develop_cef/src/style.css new file mode 100644 index 0000000..527d4fb --- /dev/null +++ b/develop_cef/src/style.css @@ -0,0 +1,296 @@ +:root { + --text: #6b6375; + --text-h: #08060d; + --bg: #fff; + --border: #e5e4e7; + --code-bg: #f4f3ec; + --accent: #aa3bff; + --accent-bg: rgba(170, 59, 255, 0.1); + --accent-border: rgba(170, 59, 255, 0.5); + --social-bg: rgba(244, 243, 236, 0.5); + --shadow: + rgba(0, 0, 0, 0.1) 0 10px 15px -3px, rgba(0, 0, 0, 0.05) 0 4px 6px -2px; + + --sans: system-ui, 'Segoe UI', Roboto, sans-serif; + --heading: system-ui, 'Segoe UI', Roboto, sans-serif; + --mono: ui-monospace, Consolas, monospace; + + font: 18px/145% var(--sans); + letter-spacing: 0.18px; + color-scheme: light dark; + color: var(--text); + background: var(--bg); + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + @media (max-width: 1024px) { + font-size: 16px; + } +} + +@media (prefers-color-scheme: dark) { + :root { + --text: #9ca3af; + --text-h: #f3f4f6; + --bg: #16171d; + --border: #2e303a; + --code-bg: #1f2028; + --accent: #c084fc; + --accent-bg: rgba(192, 132, 252, 0.15); + --accent-border: rgba(192, 132, 252, 0.5); + --social-bg: rgba(47, 48, 58, 0.5); + --shadow: + rgba(0, 0, 0, 0.4) 0 10px 15px -3px, rgba(0, 0, 0, 0.25) 0 4px 6px -2px; + } + + #social .button-icon { + filter: invert(1) brightness(2); + } +} + +body { + margin: 0; +} + +h1, +h2 { + font-family: var(--heading); + font-weight: 500; + color: var(--text-h); +} + +h1 { + font-size: 56px; + letter-spacing: -1.68px; + margin: 32px 0; + @media (max-width: 1024px) { + font-size: 36px; + margin: 20px 0; + } +} +h2 { + font-size: 24px; + line-height: 118%; + letter-spacing: -0.24px; + margin: 0 0 8px; + @media (max-width: 1024px) { + font-size: 20px; + } +} +p { + margin: 0; +} + +code, +.counter { + font-family: var(--mono); + display: inline-flex; + border-radius: 4px; + color: var(--text-h); +} + +code { + font-size: 15px; + line-height: 135%; + padding: 4px 8px; + background: var(--code-bg); +} + +.counter { + font-size: 16px; + padding: 5px 10px; + border-radius: 5px; + color: var(--accent); + background: var(--accent-bg); + border: 2px solid transparent; + transition: border-color 0.3s; + margin-bottom: 24px; + + &:hover { + border-color: var(--accent-border); + } + &:focus-visible { + outline: 2px solid var(--accent); + outline-offset: 2px; + } +} + +.hero { + position: relative; + + .base, + .framework, + .vite { + inset-inline: 0; + margin: 0 auto; + } + + .base { + width: 170px; + position: relative; + z-index: 0; + } + + .framework, + .vite { + position: absolute; + } + + .framework { + z-index: 1; + top: 34px; + height: 28px; + transform: perspective(2000px) rotateZ(300deg) rotateX(44deg) rotateY(39deg) + scale(1.4); + } + + .vite { + z-index: 0; + top: 107px; + height: 26px; + width: auto; + transform: perspective(2000px) rotateZ(300deg) rotateX(40deg) rotateY(39deg) + scale(0.8); + } +} + +#app { + width: 1126px; + max-width: 100%; + margin: 0 auto; + text-align: center; + border-inline: 1px solid var(--border); + min-height: 100svh; + display: flex; + flex-direction: column; + box-sizing: border-box; +} + +#center { + display: flex; + flex-direction: column; + gap: 25px; + place-content: center; + place-items: center; + flex-grow: 1; + + @media (max-width: 1024px) { + padding: 32px 20px 24px; + gap: 18px; + } +} + +#next-steps { + display: flex; + border-top: 1px solid var(--border); + text-align: left; + + & > div { + flex: 1 1 0; + padding: 32px; + @media (max-width: 1024px) { + padding: 24px 20px; + } + } + + .icon { + margin-bottom: 16px; + width: 22px; + height: 22px; + } + + @media (max-width: 1024px) { + flex-direction: column; + text-align: center; + } +} + +#docs { + border-right: 1px solid var(--border); + + @media (max-width: 1024px) { + border-right: none; + border-bottom: 1px solid var(--border); + } +} + +#next-steps ul { + list-style: none; + padding: 0; + display: flex; + gap: 8px; + margin: 32px 0 0; + + .logo { + height: 18px; + } + + a { + color: var(--text-h); + font-size: 16px; + border-radius: 6px; + background: var(--social-bg); + display: flex; + padding: 6px 12px; + align-items: center; + gap: 8px; + text-decoration: none; + transition: box-shadow 0.3s; + + &:hover { + box-shadow: var(--shadow); + } + .button-icon { + height: 18px; + width: 18px; + } + } + + @media (max-width: 1024px) { + margin-top: 20px; + flex-wrap: wrap; + justify-content: center; + + li { + flex: 1 1 calc(50% - 8px); + } + + a { + width: 100%; + justify-content: center; + box-sizing: border-box; + } + } +} + +#spacer { + height: 88px; + border-top: 1px solid var(--border); + @media (max-width: 1024px) { + height: 48px; + } +} + +.ticks { + position: relative; + width: 100%; + + &::before, + &::after { + content: ''; + position: absolute; + top: -4.5px; + border: 5px solid transparent; + } + + &::before { + left: 0; + border-left-color: var(--border); + } + &::after { + right: 0; + border-right-color: var(--border); + } +} diff --git a/develop_cef/tsconfig.app.json b/develop_cef/tsconfig.app.json new file mode 100644 index 0000000..8d16e42 --- /dev/null +++ b/develop_cef/tsconfig.app.json @@ -0,0 +1,16 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "types": ["vite/client"], + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"] +} diff --git a/develop_cef/tsconfig.json b/develop_cef/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/develop_cef/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/develop_cef/tsconfig.node.json b/develop_cef/tsconfig.node.json new file mode 100644 index 0000000..8a67f62 --- /dev/null +++ b/develop_cef/tsconfig.node.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2023", + "lib": ["ES2023"], + "module": "ESNext", + "types": ["node"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/develop_cef/vite.config.ts b/develop_cef/vite.config.ts new file mode 100644 index 0000000..a7ef1c3 --- /dev/null +++ b/develop_cef/vite.config.ts @@ -0,0 +1,15 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [vue()], + base: './', // Use relative paths for built assets (essential for package:// urls) + server: { + port: 3000 // Ensure dev server runs on 3000 to match settings.json expectation + }, + build: { + outDir: '../client_packages/cef', + emptyOutDir: true, + } +}) diff --git a/develop_client/package-lock.json b/develop_client/package-lock.json new file mode 100644 index 0000000..a91e438 --- /dev/null +++ b/develop_client/package-lock.json @@ -0,0 +1,1013 @@ +{ + "name": "develop_client", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "develop_client", + "version": "1.0.0", + "dependencies": { + "@entityseven/rage-fw-rpc": "^0.2.5" + }, + "devDependencies": { + "typescript": "^5.0.0", + "vite": "^5.0.0" + } + }, + "node_modules/@entityseven/rage-fw-rpc": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@entityseven/rage-fw-rpc/-/rage-fw-rpc-0.2.5.tgz", + "integrity": "sha512-U9V+eZTQbkL+JZEU3TS+fCroPyvSvBXICLikcC/h9gCNHhFiS6vm+W+92LqGzBi3K+aZEnsx57hAhhObB03g0w==", + "license": "MIT", + "peerDependencies": { + "typescript": "^5" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz", + "integrity": "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.1.tgz", + "integrity": "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.1.tgz", + "integrity": "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz", + "integrity": "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.1.tgz", + "integrity": "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.1.tgz", + "integrity": "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.1.tgz", + "integrity": "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.1.tgz", + "integrity": "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.1.tgz", + "integrity": "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.1.tgz", + "integrity": "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.1.tgz", + "integrity": "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.1.tgz", + "integrity": "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.1.tgz", + "integrity": "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.1.tgz", + "integrity": "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.1.tgz", + "integrity": "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.1.tgz", + "integrity": "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.1.tgz", + "integrity": "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz", + "integrity": "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.1.tgz", + "integrity": "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.1.tgz", + "integrity": "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.1.tgz", + "integrity": "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.1.tgz", + "integrity": "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.1.tgz", + "integrity": "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.1.tgz", + "integrity": "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.1.tgz", + "integrity": "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/postcss": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/rollup": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz", + "integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.60.1", + "@rollup/rollup-android-arm64": "4.60.1", + "@rollup/rollup-darwin-arm64": "4.60.1", + "@rollup/rollup-darwin-x64": "4.60.1", + "@rollup/rollup-freebsd-arm64": "4.60.1", + "@rollup/rollup-freebsd-x64": "4.60.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.1", + "@rollup/rollup-linux-arm-musleabihf": "4.60.1", + "@rollup/rollup-linux-arm64-gnu": "4.60.1", + "@rollup/rollup-linux-arm64-musl": "4.60.1", + "@rollup/rollup-linux-loong64-gnu": "4.60.1", + "@rollup/rollup-linux-loong64-musl": "4.60.1", + "@rollup/rollup-linux-ppc64-gnu": "4.60.1", + "@rollup/rollup-linux-ppc64-musl": "4.60.1", + "@rollup/rollup-linux-riscv64-gnu": "4.60.1", + "@rollup/rollup-linux-riscv64-musl": "4.60.1", + "@rollup/rollup-linux-s390x-gnu": "4.60.1", + "@rollup/rollup-linux-x64-gnu": "4.60.1", + "@rollup/rollup-linux-x64-musl": "4.60.1", + "@rollup/rollup-openbsd-x64": "4.60.1", + "@rollup/rollup-openharmony-arm64": "4.60.1", + "@rollup/rollup-win32-arm64-msvc": "4.60.1", + "@rollup/rollup-win32-ia32-msvc": "4.60.1", + "@rollup/rollup-win32-x64-gnu": "4.60.1", + "@rollup/rollup-win32-x64-msvc": "4.60.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + } + } +} diff --git a/develop_client/package.json b/develop_client/package.json new file mode 100644 index 0000000..888e69f --- /dev/null +++ b/develop_client/package.json @@ -0,0 +1,16 @@ +{ + "name": "develop_client", + "version": "1.0.0", + "type": "module", + "scripts": { + "dev": "vite build --watch", + "build": "vite build" + }, + "devDependencies": { + "typescript": "^5.0.0", + "vite": "^5.0.0" + }, + "dependencies": { + "@entityseven/rage-fw-rpc": "^0.2.5" + } +} diff --git a/develop_client/src/index.ts b/develop_client/src/index.ts new file mode 100644 index 0000000..705c458 --- /dev/null +++ b/develop_client/src/index.ts @@ -0,0 +1,53 @@ +import { Rpc } from '@entityseven/rage-fw-rpc'; + +const rpc = new Rpc(); +let browser: BrowserMp | null = null; + +// Initialize CEF via standard RAGE MP event to bootstrap the browser for RPC +mp.events.add('client:initCef', (cefUrl: string, isDebug: boolean) => { + if (isDebug) { + mp.gui.chat.push(`[Client] Initializing CEF: ${cefUrl}`); + } + + if (browser) { + browser.destroy(); + browser = null; + } + + browser = mp.browsers.new(cefUrl); + rpc.browser = browser; // Link immediately + + mp.gui.chat.push(`[Client] Browser created and linked to RPC`); + mp.gui.cursor.show(true, true); +}); + +// Fallback: auto-link any newly created browser if current is null +mp.events.add('browserCreated', (b: BrowserMp) => { + if (!rpc.browser) { + rpc.browser = b; + mp.gui.chat.push(`[Client] RPC Browser auto-linked via browserCreated`); + } + mp.gui.chat.show(false); +}); + +// Custom Chat Handlers via RPC +rpc.register('chat:toggleInput', (state: boolean) => { + // This allows you to freeze other inputs while typing if you build a UI manager later +}); + +rpc.register('chat:sendMessage', (msg: string) => { + // Send the message natively to the server via our RPC + rpc.callServer('server:chat:receive', [msg]); +}); + +// Listen for structured chat broadcasts from the server (Player chat) +rpc.register('chat:push:custom', (chatData: any) => { + rpc.callBrowser('chat:addMessage', [chatData]); +}); + +// Listen for incoming native string messages from the server (System prints/announcements) +mp.events.add('chat:push', (text: string) => { + rpc.callBrowser('chat:addMessage', [{ type: 'system', text: text }]); +}); + +export { rpc }; diff --git a/develop_client/tsconfig.json b/develop_client/tsconfig.json new file mode 100644 index 0000000..e58d55b --- /dev/null +++ b/develop_client/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "moduleResolution": "node", + "strict": true, + "baseUrl": ".", + "paths": { + "@/*": ["src/*"] + } + }, + "include": ["src/**/*"] +} diff --git a/develop_client/vite.config.ts b/develop_client/vite.config.ts new file mode 100644 index 0000000..60d51ee --- /dev/null +++ b/develop_client/vite.config.ts @@ -0,0 +1,15 @@ +import { defineConfig } from 'vite'; +import { resolve } from 'path'; + +export default defineConfig({ + build: { + outDir: '../client_packages', + emptyOutDir: false, + lib: { + entry: resolve(__dirname, 'src/index.ts'), + formats: ['iife'], + name: 'clientBundle', + fileName: () => 'client.js' + } + } +}); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..d753994 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,38 @@ +{ + "name": "@apex-freeroam/core", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@apex-freeroam/core", + "version": "1.0.0", + "dependencies": { + "@entityseven/rage-fw-rpc": "^0.2.5" + } + }, + "node_modules/@entityseven/rage-fw-rpc": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@entityseven/rage-fw-rpc/-/rage-fw-rpc-0.2.5.tgz", + "integrity": "sha512-U9V+eZTQbkL+JZEU3TS+fCroPyvSvBXICLikcC/h9gCNHhFiS6vm+W+92LqGzBi3K+aZEnsx57hAhhObB03g0w==", + "license": "MIT", + "peerDependencies": { + "typescript": "^5" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..2d97cb3 --- /dev/null +++ b/package.json @@ -0,0 +1,8 @@ +{ + "name": "@apex-freeroam/core", + "version": "1.0.0", + "main": "index.js", + "dependencies": { + "@entityseven/rage-fw-rpc": "^0.2.5" + } +} diff --git a/packages/core/index.js b/packages/core/index.js new file mode 100644 index 0000000..baf05b0 --- /dev/null +++ b/packages/core/index.js @@ -0,0 +1,65 @@ +const fs = require('fs'); +const path = require('path'); +const { Rpc } = require('@entityseven/rage-fw-rpc'); + +const rpc = new Rpc(); +let settings; + +try { + const settingsPath = path.resolve(__dirname, '../../settings.json'); + const data = fs.readFileSync(settingsPath, 'utf8'); + settings = JSON.parse(data); + console.log('[Core] Loaded settings.json successfully.'); +} catch (e) { + console.error('[Core] Failed to load settings.json:', e); + settings = { cef: 'dev', debugger: true }; +} + +mp.events.add('playerReady', (player) => { + console.log(`[Core] Player ${player.name} joined. Initializing CEF via Rpc...`); + + // Determine the CEF URL based on settings + const isDev = settings.cef === 'dev'; + const cefUrl = isDev ? 'http://localhost:3000' : 'package://cef/index.html'; + + // Give the client a tiny bit of time to fully load scripts before calling + setTimeout(() => { + if (!mp.players.exists(player)) return; + player.call('client:initCef', [cefUrl, !!settings.debugger]); + console.log(`[Core] CEF initialization event sent to ${player.name}`); + }, 500); +}); + +// Custom Chat Backend +rpc.register('server:chat:receive', (player, msg) => { + if (msg.startsWith('/')) { + console.log(`[Command] ${player.name}: ${msg}`); + // Command execution logic can be wired here later + rpc.callClient(player, 'chat:push:custom', [{ + type: 'error', + text: 'Commands are not fully implemented in the custom chat yet.' + }]).catch(() => {}); + return true; + } + + // Broadcast structured message to all players + const chatData = { + type: 'player', + name: player.name, + id: player.id, + text: msg, + timestamp: Date.now() + }; + + mp.players.forEach((p) => { + rpc.callClient(p, 'chat:push:custom', [chatData]).catch(() => {}); + }); + + return true; +}); + +// Example RPC handler +rpc.register('server:test', (player, msg) => { + console.log(`[RPC] Received from ${player.name}: ${msg}`); + return `Server received: ${msg}`; +}); diff --git a/settings-example .json b/settings-example .json new file mode 100644 index 0000000..8c3b909 --- /dev/null +++ b/settings-example .json @@ -0,0 +1,10 @@ +{ + "mysql": { + "host": "localhost", + "user": "root", + "password": "", + "database": "apex_freeroam" + }, + "debugger": true, + "cef": "dev" +}