Server Files
This commit is contained in:
+28
@@ -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
|
||||
@@ -1,2 +1,171 @@
|
||||
# YabosRageMPCore
|
||||
Everything you need to start your RageMP RP, DM or Freeroam server using performance friendly code + Rage-RPC
|
||||
<div align="center">
|
||||
|
||||
# 🔥 YabosRageMPCore
|
||||
|
||||
### A open-source **RAGE:MP** GTA V multiplayer server framework.
|
||||
|
||||
[](https://www.gnu.org/licenses/gpl-3.0)
|
||||
[](https://rage.mp/)
|
||||
[](https://www.typescriptlang.org/)
|
||||
[](https://vuejs.org/)
|
||||
[](https://vitejs.dev/)
|
||||
|
||||
_A modern, scalable server boilerplate with a type-safe RPC system and a Hot-Module-Reloading CEF UI pipeline._
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## ✨ 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.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
|
||||
**Made with ❤️ for the RAGE:MP community**
|
||||
|
||||
</div>
|
||||
|
||||
+633
@@ -0,0 +1,633 @@
|
||||
�o�l�p啦 牁s�u鄍P蜂;椚_�t�M檀=�n�f�e譥
|
||||
𠙶f�c�o癯)�
|
||||
�o�l�p徉
|
||||
�.�i漖_� 值{縳
|
||||
�p�t�.�s��鶧x�s鸇4啦 �t煻 俳 錏l� �s啦 �.�i漖_�[�r邲
|
||||
�f偯r�)�e�r皡r�;尠r� 值m鉐u�l�x�s鸇4�t煻;�p�t�.牁h�t漟 值r�;尠r�u� �s徉}徉
|
||||
�n� �s���a� 值m鉐u�l�e�l�X�a�6太
|
||||
�l�s偏e�o瘈 錏c���u�o熏x暫y暫z嗷{�f偯t�e�� 糔!倘 �n�f�e譪)�
|
||||
�i蒩x啦 駏|噿0撻;�h�.橛=� � 螩0徉t�s� 值z�|啡.�
|
||||
罿e�e�f偯t�e�� 駏=倘 �b�c餀)�
|
||||
� 萱r�y�s�r�(餑)�
|
||||
�i蒩x啦 鞈0邲
|
||||
�i蒩y啦 鞈1邲
|
||||
�i蒩z啦 鞈2邲
|
||||
篸e�e�
|
||||
�i蒩x啦 駜x徉t�s� 值x�;�h�.糔=�.縎
|
||||
罿}�
|
||||
�e�t�e蜂 錏r�u� �w偏e�o瘈(�h�.餗 �h�.樾 �h�.篪;�
|
||||
�d�)�
|
||||
� � �s�n�o鶲V�t��3嗷r�u� �w偏e�o瘈(�i蒩x冕 磔x暫t�s� 銀v�,�h�.糔+�.篪;�l� �t�n�e褙V�t��3�h�.駏+�,�h�.橛+�,�h�.糔+�)徉}�u�r�t�)�
|
||||
� � �s�n�o鶲V�t��3嗷r�u� �w偏e�o瘈(�i蒩x剪 磔x暫t�s� 褓v�,�h�.糔-�.篪;�l� �t�n�e褙V�t��3�h�.駏-�,�h�.橛-�,�h�.糔-�)徉}�u�i�y�)�
|
||||
� � �s�n�o鶲V�t��3嗷r�u� �w偏e�o瘈(�i蒩x兜 磔x暫t�s� 瘓v�,�h�.糔*�.篪;�l� �t�n�e褙V�t��3�h�.駏*�,�h�.橛*�,�h�.糔*�)徉}�i�d儺v嗷{�f偯v�n�a�e�� �c�r␁ �t�n�e褙V�t��3�h�.駏/�.餗 �i蒩y勒 磔y暫t�s� 褥v�)徉e�e�e�r皡n� �c�r␀t�s� 褥v暫t�s� 褥v暫t�s� 褥v墓
|
||||
罿e�a�(碻 錏r�u� �i蒩x啦=�.駏&僅t�s� 倘 磔y匿&�h�.糔=值v�;�
|
||||
�t�)�
|
||||
�t�n�h�.駏*�.駏+�h�.橛*�.橛+�h�.糔*�.縎
|
||||
罿c�s蒻v嗷{�e�r皡n� �c�r␀
|
||||
�i蒩y兜 磔z剪 �i蒩z兜 磔y潑t�s� 瘓v� 褓t�s� 瘓v�,�h�.駏*�.橛-�h�.橛*�.魤)徉}�e�t衋)�
|
||||
�t�n陞a�.�r靺t�s�o靺t�s嘗;�
|
||||
�i靺)�
|
||||
�t�n�h�.�v�e�h�.�n�h蜂)徉}�i癯)�
|
||||
�t�n陞a�.�n艇a�.�n�h�.餗 �i蒩y嘆 �i蒩z墓
|
||||
罿m�(嗷{�e�r皡M�h�a飺M�h�a飺t�s�,�h�.橧,�h�.篪;�
|
||||
�A�l�(嗷{�e�r皡[�t躝a�n�h�.橛/�h�.�n�h蜂)暫M�h�t�2�h�.篫 �i蒩x僱;�
|
||||
�g�T�餚嗷{�e�r皡M�h�c��(�i蒩d��(魌 褥(�i蒩l�g�(嗷*�.�n�h蜂)墓
|
||||
罿t�姅�y�)�
|
||||
�t�n偃t�s�,�h�.樾 �i蒩z芢s�c儺0暫n�|唱)徉}�l��蜂 錏r�u� �w偏e�o瘈(�i蒩x暫t�s�,�h�.篪;�
|
||||
�i靺x暫y暫z嗷{�h�.駏=�;�h�.橛=�;�h�.糔=�;�e�r皡t�s徉}�o�r�g蜂 錏r�u� �"駔:�t�s�}暱y絀$�h�.�,�"者{�i蒩z�`徉}�
|
||||
�.�c�r␈=偏e�o瘈;�l�s偎u�e�i�� 錏c���u�o熏x暫y暫z暫w嗷{�h�.駏=� � 螩0徉t�s� 值y�|啡.�
|
||||
�i蒩z啦 糔|噿0撻;�h�.褙=� � 螩0徉}�
|
||||
�.�a靿=偎u�e�i��;尠l� 鷛a�B�f� 值n� �r�B�f�(矛2兜 ≦2切;�e靿g�l�缆�f�r啦 �w乾l�缆␚A�a橉g�p貜u�e煻;�e靿g�y�B�f� 值n� �n餇A�a橉g�p貜u�e煻;�e靿g�i�n鬿4�f�r啦 �w高i驉n鬿4�r�(鷛a�B�f�)徉l� 鷛u�t␚B�f� 值n� �n髣2�r�(鷛a�B�f�)徉
|
||||
牁s�u鄔B�_�i�f�r墓
|
||||
牁s�u鄔B啦 �d�i�d徉
|
||||
�t�_�o�B�f�P�𧯯啦 佽;尠c��靿k�o�B�f�A�o騠i� 值2兜 詭5石5冕 ℅;尠f�c�o皡a�o�t鶣l���f�r�r鬎 �u�)�
|
||||
�n� �n�h啦 鷛c�n鶞u�e漈o��.�n�h徉
|
||||
�t�r瑧
|
||||
�f�e�t醽=倘 眤
|
||||
錏a� 值n� �n髣2�r�(�w骨r�y�f�r�C�n鶞u�e漵l�c�z儹)徉}�l�
|
||||
錏a� 值g�l���f�r�o𤧟l�g� 褓1邲
|
||||
鷛c�n鶞u�e漈o��.�p蜂;�
|
||||
�r牓s�(�c�u�r�y詼,�o�t冕 ℅)徉
|
||||
�t�n�r瑧
|
||||
罿
|
||||
�n�i�� �e鶣l���f�r�u�)�
|
||||
鷛c�n鶞u�e漈o��.�s衋b�f墓
|
||||
罿
|
||||
�t�r�r�P�𧯯蒨=偃]徉
|
||||
�n�i�� �o𡎎t�姅�y蜂 錏t�s噸t�姅�y蜂;尠c��靿c�𩵚靿=�_�n髣2�f�r匼]徉
|
||||
�t�e靿=�e褙A�a橉c�𩵚靾;尠f��(�t� 值0客i啪 �u�;冕+钁
|
||||
錏r�[驧 值t�s�_�n髣2�f�r�+△]徉}尠r�u� �t徉}尠f�c�o皡p�𧯯�o�r�F�t蜂 錏t�s噸t�姅�y蜂;尠c��靿c�𩵚靿=�_�n髣2�f�r匼]徉
|
||||
�t�o�r�C�h孇=�h�.牁t�姅�y�c�;尠t�姅�y�c�.�n�h啦 �u�;尠f��(�t� 值0客i啪 �u�;冕+钁
|
||||
錏t�姅�y�c�[驧 值t�s�_�n髣2�f�r�+△]徉}尠r�u� �A�a擃a�e徉}尠
|
||||
�n�i�� �o𡎎t�姅�y�R�g儺p��,�a�e暫d�e�i��,�b嗷{�_�o�B�f�[聣 值p��.髬
|
||||
鷛f�a銂u�e滼1虯=�o蒩y徉g�l�缆�f�r厔]啦 �s�;尠g�l�缆�f�r咇]啦 �n�;尠i鶺c藭=值n�l嗷{�b啦 �m�s�n徉g�i�3◥u�e滼4虯=偯0霈F眳F眳F啄>啡)徉}�l� 錏g�i�3◥u�e滼4虯=�i�n�o着
|
||||
罿
|
||||
�i蒩_�r�c齱n�n�(墓
|
||||
�o�t�o�t啦 鷛u�t␚B�f�[聣;尠l� �t啦 �w骨r�y�o�t墓
|
||||
�o熏l� 讟=啡;� 畏c�𩵚駃 酵i嫖{�e銙i虯=�h�[鷛u�t␚B�f�[驨1芚;�
|
||||
�e�r皡r�;�
|
||||
�u�t�n�o���A�a憿n�m�s�n�i�n�o臯 �)�
|
||||
鷛u�t␚B�f�[聣 值d�e�i��;尠t�s噸f�鍃�h�D�e�i��(墓
|
||||
�o�t�o�t啦 鷛u�t␚B�f�[聣;尠l� �t啦 �w骨r�y�o�t墓
|
||||
�o熏l� 讟=啡;� 畏c�𩵚駃 酵i嫖{�e銙i虯=�h�[鷛u�t␚B�f�[驨1芚;�
|
||||
�e�r皡r�;�
|
||||
尠f�c�o皡p�𧯯�o潃a�(�)�
|
||||
�i蒩_�A�a橉)徉
|
||||
�n� �u� 值g�i�3◥u�e滼0邲
|
||||
�o�t�l��籅u�e犕=�l�c�e�o�B�f�(鷛u�t␚B�f�,�o�t墓
|
||||
�r橛{�o熏l� 讟=啡;� 畏c�𩵚駃 酵i嫖{�o�t�n�t橛=�h�[�o�d�f�r�]邲
|
||||
�f�n�t橧 �
|
||||
�(�t�y墓
|
||||
罿}�
|
||||
�t�(儹 躽}尠f�e�o�B�f�(�o�d�f�r墓
|
||||
罿
|
||||
�n�i�� �o𡎎f�鍃�h�D�e�i��(�m�s�n暫c臗 錏g�i�3◥u�e滼0虯=�i�n�o着
|
||||
�h�.�o潃a�I𨻙i�n�o癯)徉
|
||||
�n� �u� 值g�i�3◥u�e滼0邲
|
||||
�o�t�l��籅u�e犕=�l�c�e�o�B�f�(鷛u�t␚B�f�,�o�t墓
|
||||
�r橛{�o熏l� 讟=啡;� 畏c�𩵚駃 酵i嫖{�o�t�n�t橛=�h�[�o�d�f�r�]邲
|
||||
�f�n�t橧 �
|
||||
�(�t�y墓
|
||||
罿}�
|
||||
�t�(儹 躽}尠f�e�o�B�f�(�o�d�f�r墓
|
||||
罿
|
||||
�n�i�� �o𡎎f�鍃�h�R�g儺p��,�a�e暫d�e�i��,�b嗷{�_�o�B�f�[聣 值p��.髬
|
||||
鷛f�a銂u�e滼1虯=�o蒩y徉g�l�缆�f�r厔]啦 �s�;尠g�l�缆�f�r咇]啦 �n�;尠i鶺c藭=值n�l嗷{�b啦 �m�s�n徉g�i�3◥u�e滼4虯=偯0霈F眳F眳F啄>啡)徉}�l� 錏g�i�3◥u�e滼4虯=�i�n�o着
|
||||
罿
|
||||
�i蒩_�r�c齱n�n�(墓
|
||||
�o�t�o�t啦 鷛u�t␚B�f�[聣;尠c��靿c�n�B�f� 值a�o�t鶣l���f�r�_�n髣2�f�r暫c�𩵚靾;尠t� 錏f��(�t� 值0客i啪 �u�;冕+钁
|
||||
錏c��靿e�i� 值t�s�l��籅u�e滼i芚;尠i鶺e�i�)售{�b�n�t橧;�
|
||||
罿}�a�h�)� 罿
|
||||
�e鶣l���f�r�l��籅u�e煻;�
|
||||
�u�t�n�o���p�(�)�
|
||||
�i蒩_�A�a橉)徉
|
||||
�n� �u� 值g�i�3◥u�e滼0邲
|
||||
�o�t�l��籅u�e犕=�l�c�e�o�B�f�(鷛u�t␚B�f�,�o�t墓
|
||||
�r橛
|
||||
錏f��(�t� 值0客i啪 �u�;冕+钁
|
||||
錏c��靿e�i� 值t�s�l��籅u�e滼i芚;尠i鶺e�i�)售{�b�p�y�n�t橧;�
|
||||
罿}�a�h�)� 罿
|
||||
�e鶣l���f�r�l��籅u�e煻;�
|
||||
�u�t�n�o���i�s�n�t橧 錏i鶺N�b�.�I�e�r�n�t橧)�
|
||||
�t�n�h�[�t�y虯!值n�l徉}�l� �(�p�f�n�t橛=倘 �b�c餀 僇 �t�y勘=�u� 僇 �p�f�n�t橭i蠓!倘 �n�f�e譪)�
|
||||
�t�n�h�[�t�y�d虯=倘 �t�y徉}尠r�u� �l�;�
|
||||
�o�t�P�𧯯�m� 值[�l�e�"暫"�h�l�"暫"�骲�t蒘,動p�k�s第 �l�s第 �h�k�i�s第 �a�e�"暫"�l�a�s第 �a�l蒘,動d�m�s第 �e�"邲
|
||||
�P�𧯯�m�.�r�c衋p�𧯯啦>�
|
||||
�t�o��� 值m鈳"珅 銀p�𧯯邲
|
||||
�r�r�P�𧯯蒩p�h�o���)徉m鈳p�𧯯虯=�o���;尠p�𧯯�j�o�r� 值p�𧯯�o�r�;�o���.�A�a擙a� 值p�𧯯�o�r�F�t徉
|
||||
�o𢦀b𠯢t�姅�y�R�g孇=�o���A�a憿n�n�;�o���.�A�a憿n�m�s�n啦 �o𡎎t�姅�y�D�e�i��;尠p�𧯯�j�o潃a� 值p�𧯯�o潃a�;�o���.�r�c灡a� 值p�𧯯�o潃a�;尠p�𧯯�j�o潃a�I疞a�e啦 �o𡎎f�鍃�h�R�g灃
|
||||
�o𢦀b𠯢f�鍃�h�D�e�i�� 值p�𧯯�o潃a�I𨻙i�n�o着
|
||||
�o���.�p� 值p�𧯯�p�y徉
|
||||
�o𢦀b𠯢_�o�r�C�h孇=偃]徉
|
||||
�o𢦀b𠯢e�s� 值p�𧯯�x�t蒑
|
||||
呪*�o𢦀b𠯢a靿=�o���.�t威/�o���.� 值f�c�o癯i�)�
|
||||
�t�n�h�[�x邲
|
||||
罿}墓
|
||||
尠m鉐_�o��啦 �飱�e蘢o��徉
|
||||
�n� 覺P梫I�3〦=啃5徉c��靿T伓E洁n鬿4啦 ﹢;�o�t側Y嶺_�o𤨣=啃7徉c��靿T伓E炷l�缆啦 -;�o�t側Y嶺_�r�g啦 ×;�o�t側Y嶺_癟b�c靿=啊0徉c��靿T伓E炰S�i� 值2±
|
||||
�n� 覺P梫Z�j�t啦 L;�o�t側Y嶺_搷b�c靿=啊3徉c��靿T伓E洈i瓩u�e犕=啊4徉c��靿T伓E狊e�o瘈 值2申
|
||||
�n� 覺P梫N�l啦 P;尠f�c�o皡p�h�r�m�t�h�S�)�
|
||||
�t健t�e啦 �p�f�h�S�)徉
|
||||
�i�h偯_�p儹 錏c�e區n�b�'芬_�p孇=側Y嶺_�t␚;�r�k徉c�e區o�e�'糾{�e靿_�g啦 �i蒚r鯙
|
||||
�f偯!�r鷙 錏_�p孇=側Y嶺_�l无
|
||||
篸e�e�f偯t�e�� �r鷝_�p鶠n靿!倘 �n�f�e譪 僇
|
||||
�p�f健a�.� 敕=區u�e�n�'嗷{椚s�[驧 值_�g�d徉_�p孇=健a�.�y�I�;� �s孇i鶲(�r黰i�t�c�f�p噢e�o瘈)�
|
||||
�r馧i虯=偃_�g�,健a�.樾 �r鷝z邲
|
||||
�y� 值T伓E狊e�o瘈;� �s孇i鶲(�r黰i�t�c�f骨r�y�f�r嗷{椚t�e啦 覺P梫B�B�f�;� �s孇{椚t�e啦 覺P梫S�j�t徉}�
|
||||
�e�;�a� �o���'芬_�p孇=側Y嶺_�o无
|
||||
�e�;�a� �t�n龢:椚t�e啦 覺P梫S�i�;�r�k徉c�e區b�i�'芬_�p孇=側Y嶺_�t至;�r�k徉d�a�t芬_�p孇=側Y嶺_�l无
|
||||
�e�;�
|
||||
�e�r皡_�p灃
|
||||
罿
|
||||
�.�v�t蒩_�u�_�g�e� 值p�h�r�m�t徉
|
||||
�n�i�� �s禶a�u�n�(�c嗷{�o�t�a�I�O�s� 值(蛻(�r鬷l�g� 銀4冕 阪 銀7嗷/匾)啄>啡)兜 阪;尠l� �s�j�t蒨=�a�e徉
|
||||
�r偯l� 讟=啡;� 畏s�.�n�h客+�)�
|
||||
�t�h�S� 值s�[驧;尠l� �y� 值0徉
|
||||
�n� �s鶞y�I� 值b�e�x�f�t冕 � 瘓1汐;尠s�t� �y�o鶺t�s�c嘗 錏c�e區n�b�'糾{�o�t�u�e漶d駏=偯b�e�t鶠d駏/啖)徉
|
||||
� 蒂u�e牓i耤n�g�(�i蒚r髂)�
|
||||
鷛u�t␚B�f�[�m�r�x虯=�h�S�;椚t�e啦 覺P梫I�3E
|
||||
篸e�e�
|
||||
鷛f�a銂u�e滼b�e�t鶠d駏/啖]啦 �i蒚r鯙
|
||||
�y� 值T伓E炷l�缆徉}�
|
||||
�e�;尠c�e區o�e�'糾{�e靿_�g啦 �i蒚r鯙
|
||||
�f偯!�r鷙 錏_�p孇=側Y嶺_�l无
|
||||
篸e�e�f偯t�e�� �r鷝_�p鶠n靿!倘 �n�f�e譪 僇 �p�f健a�.� 敕=區u�e�n�'嗷{尠c��靿n�b�I� 值(�s鶞y�I� 褥4墓
|
||||
�_�n髣2�f�r�u�e漶d韏 值_�g�d徉_�p孇=健a�.�y�I�;尠}�l� � 虞a� �s�n�o鶲m鉐V�t��3嗷{尠c��靿v�I� 值(�s鶞y�I� 褥4墓
|
||||
�_�o�B�f�[�c�x虯=健a�.髬
|
||||
鷛f�a銂u�e滼v�I� 銀1虯=健a�.橔
|
||||
鷛f�a銂u�e滼v�I� 銀2虯=健a�.縎
|
||||
椚t�e啦 覺P梫V�t��3徉}�l� � 虞a� �s�n�o鶲A�a撉u�e煻 錏h�O�e�s啦 �u灃
|
||||
�y� 值T伓E洈i瓩u�e瑧
|
||||
篸e�e�
|
||||
�s�j�t蒨=�r�;椚t�e啦 覺P梫S�j�t徉}�
|
||||
�e�;�a� �o���'糾{�_�t鶞u�e滼b�e�t鶠d韏 值t�s�c徉_�p孇=側Y嶺_�o无
|
||||
罿b�a䴐
|
||||
�s孇'�r�g煉
|
||||
�s�j�t蒨=�r�;椚t�e啦 覺P梫S�i�;�r�k徉c�e區b�i�'糾{�o�t�i�n銦d駏=偯b�e�t鶠d駏/匾)徉g�i�n鬿4�f�r�i�n銦d韏 值t�s�c徉_�p孇=側Y嶺_�t至;�
|
||||
�e�;�e�u�:椚t�e啦 覺P梫N�l徉b�a䴐
|
||||
罿
|
||||
鷛b�e�f�r刵 銀4冕 驧 值_�p灃
|
||||
罿
|
||||
�t�n�a膇b�c�;�
|
||||
尠{�e靿d�a�n�e犕=�
|
||||
�t糾f�c�o癯o�,�a�a�e嗷{�e�r皡o�.�t�y�e靘a�a�e�a�a�e墓
|
||||
螞r�u� �骲�o�l�a�a�e邲*踱}潑s�:�u�t�n�b匳 �r�b�,�a�e嗷{�b𠯢e�i�.�t�r�b�(�r�b�,�a�e墓
|
||||
�t�n�r�;呪*�骲�o�l�a�a�e虯=�a�e威/�
|
||||
縳
|
||||
�e靿f�e�a�r�a�l� 值{�e馜 �n�i��(�骲暫i蘅 錏r�u� �骲�e銈a�F�t�e�d墓
|
||||
簂
|
||||
�t糾f�c�o癯o�,�d暫v�u儹 錏o�.�t�c鶖e�u�(�,�a�e墓
|
||||
�t�n�r�;�
|
||||
縳
|
||||
�e靿h�d�e�a�a�l� 值{�e馜 �n�i��(�骲暫i蘅 錏r�u� �骲�e�e�O�r�y�d墓
|
||||
簂
|
||||
�t糾f�c�o癯o�,�d暫v�u儹 錏o�.�t�a籈v�l�(�,�a�e墓
|
||||
�t�n�r�;�
|
||||
縳
|
||||
�e靿w�p���d�r啦 錏g�:�u�t�n�b匳 �)�
|
||||
� �y�o鶲i蠓=值'�r�g溥 錏i鶲(� 倘=區a�'嗷r�u� �骲�l擡e�o�;�l� � �d啦=值'�e�'嗷r�u� �r�t�e�v鶨l擡e�o�.�n蘉t�g�)徉e�e�f偯i蠓=倘 �u�e�'嗷r�u� �骲�e�o甎m�;�e�r皡o�.�t�a�n�m�鴦鉐j�学靺i蘅)徉}尠r�u� �骲�e靽e�o甎m�(�)徉}潑s�:�u�t�n�b匳 �,�a�e嗷{�f偯t�e�� � 倘 溶t�n龢)�
|
||||
� �d啦=值'�r�n餀)�e�r皡o�.�t�a�n�m�鴒�.�a�n暫v�u儹;�e�r皡o�.�t�r�n靽e�o甎m�(�.�a�(�)暫v�u儹;�
|
||||
�t�n�b𠯢s�C�r�t�a�n�m�鬨蠙 �l�)徉}�;尠l� �h�l鶗o�a�l� 值{�e馜 �n�i��(�骲暫i蘅 錏r�u� �骲�e銗o蘉i蘅;�,�e馜 �n�i��(�骲暫i蠙 �l�)�
|
||||
�骲�e銗o蘉i蠙 �l�)徉r�u� �u灃
|
||||
罿}徉
|
||||
�t�e�c�E�r�a�l� 值{�e馜 �n�i��(�骲暫i蘅 錏r�u� �骲�e鉽x�a�d墓
|
||||
簂
|
||||
�t糾f�c�o癯o�,�d暫v�u儹 錏o�.�t�t�(�,�a�e墓
|
||||
�t�n�r�;�
|
||||
縳
|
||||
�l�s鬼n�t擳v�t�n�e犕{�o�t�c�r�n�t橧 錏t�s�n�t橛=�n�t橔
|
||||
�i蒩e�n� 值{縳
|
||||
罿
|
||||
�d�a�,�a�l�)�
|
||||
�t�v啦 �e�s�a�]徉
|
||||
� �v嫖e磔p�h�a�l�)徉e�e�v啦 �a�l�]徉}尠r�o�(�e�,�a�l�)�
|
||||
� 補h�d�r嗷{�f偯t�e�� �e� 倘 �t�n龢)�
|
||||
�i蒩e�n�[�e�]啦 佽;� �s孇i鶲(�r�.�A�a橉e�n靾)�
|
||||
�r偯l� �v�f�v�t嗷{�h�.�e�s侇e瘚 值[邲
|
||||
罿}尠}�l� 錏i鶲(�i蒩e�n�.�s�n�o�r�(�e�)嗷{�h�.�e�s�v�t虯=�h�.�e�s�v�t芢f�t�(�a�l� 俳 �a�l� 敕=�a�l�)徉}�
|
||||
罿
|
||||
�v���v�t�m囃 �g蒢 錏l� � 值e�n�[�m黤;尠i鶲(�)�
|
||||
�r偯l� 讟=啡;� 畏e磔l�g�;�+鄘 錏i鶲(�v�p�y�u�,�r�)嗷{�f偯e磔l�g� 倘 ℅ 錏e�n�[�m黤 值u�e�n�;� �s孇{�v�p�c儺i暫1墓
|
||||
褐i徉}�
|
||||
罿}�
|
||||
罿
|
||||
�.�v�t蒩a�(眺_�a�r�o騢e�l�"暫(�a�r暫r�I�,�a鑻 俳 錏i鶲(�a�r噸_�n�n鷚p鬷h�O�P�p�t橉r�I�)嗷{�e靿p啦 �a�r噸_�n�n鷚p馧r�I�]徉d�e� �a�r噸_�n�n鷚p馧r�I�]徉
|
||||
�y�
|
||||
鉐r�o�e�a鑻;� �t� �)�
|
||||
�n�l嚾e�o熏e暫e�t�k墓
|
||||
罿}�)徉
|
||||
�n� �j�t�n�a�n蒨=偃"�m�O�"暫"�n�l�d第 票a�e銝l�e漡u�"暫"�i�t�j�t�n眶;尠m鉐_�e�s�d蘉"牁p�y�P�c�j�t�"暫(�a�r暫r�I�,�o�)啦>�
|
||||
� �l�e牓_�e�i�R�.�s�n�o�r�(�c�x嘗 錏l� 鉎=�l�e牓_�e�i�R�[�c�x邲
|
||||
�l�e�l�e牓_�e�i�R�[�c�x邲
|
||||
�r橛{�.�j�t�R屨 �j�t�:匏{�j�t�n�a�n蒬c�𨫪�`墓
|
||||
篸c�c醽(儹 錏c�����r�r�,�.�a�)徉}�
|
||||
篴;尠
|
||||
�t�b簕r�𨧡�y�o�t�n啦 錏e�m�a�e糾f�s囃
|
||||
�t糾f�c�o癯)�
|
||||
�i蒩g�P�𢹂�o癯)徉r�u� �w�p噢e�o瘈(鷛f�a銂u�e滼0苃 鷛f�a銂u�e滼1苃 鷛f�a銂u�e滼2芩;�,�e馜 �n�i��(�s嗷{�h�.�t�s�i��(�s墓
|
||||
罿}徉
|
||||
�t�b㳜e�o艩s�V�i�l孇=�u�t�n�e樾 �l�)�
|
||||
�t�e�a� 值r�o�e�s衋k�)徉l� �y� 值t�e��(�l�)徉
|
||||
�t�s靿=�u�;尠s�t� 虞t�e嗷{�a� �u�e瑳:椚t�e啦 覺P梫I�3E
|
||||
�e�;�a� �b�c餀:�
|
||||
�t健a� 值v�u灃
|
||||
�f偯!�r鷙 錏_�p孇=側Y嶺_�l无
|
||||
篸e�e�f偯t�e�� �r鷝_�p鶠n靿!倘 �n�f�e譪 僇
|
||||
�p�f健a�.� 敕=區u�e�n�'嗷{�a�e啦 �r鷝i譥
|
||||
�y� 值_�g噸t�e�t徉}�l� � 虞a� �s�n�o鶲m鉐V�t��3嗷{�a�e啦 侇a�.餗 �r鷝y暫_�g�]徉_�p孇=側Y嶺_�c�r␓
|
||||
篸e�e�f偯_�g�n�a�e�� �r�B�f�)�
|
||||
�y� 值T伓E洈i瓩u�e瑧
|
||||
篸e�e�
|
||||
�y� 值T伓E牰O�e�;�
|
||||
罿b�a䴐
|
||||
�s孇'�o�a𥅽:椚t�e啦 覺P梫B�𧯯徉b�a䴐
|
||||
�s孇'�r�g煉
|
||||
�y� 值T伓E牰t�n壧
|
||||
�e�;�a� �i�n餀:椚t�e啦 覺P梫I�6太
|
||||
�e�;�e�u�:椚t�e啦 覺P梫N�l徉b�a䴐
|
||||
罿
|
||||
�i蒩_�t�r�b�(�y�s躟 �l�,健t�e墓
|
||||
縳
|
||||
�e靿o�M�h�𪊺�t�r�b�s啦 �n�i��(�r�b�s嗷{�e靿k�s啦 �j�t�e�(�r�b�s墓
|
||||
�t健v�s啦 �w骨r�y�e�.�n�h兜 ␁;�e靿a�I� 值0徉
|
||||
�r偯l� �y�f�e�)�
|
||||
�t�a�e啦 �r�b�s�e曀;尠l� �y�s醽=�e�l�H�h�e橧;�e靿_�p孇=�y�o鶺v�u儹;尠s�t� 虞t�e嗷{�a� �u�e瑳:椚t�e啦 覺P梫I�3E
|
||||
�e�;�a� �b�c餀:�
|
||||
�t健a� 值v�u灃
|
||||
�f偯!�r鷙 錏_�p孇=側Y嶺_�l无
|
||||
篸e�e�f偯t�e�� �r鷝_�p鶠n靿!倘 �n�f�e譪 僇
|
||||
�p�f健a�.� 敕=區u�e�n�'嗷{�a�e啦 �r鷝i譥
|
||||
�y� 值_�g噸t�e�t徉}�l� � 虞a� �s�n�o鶲m鉐V�t��3嗷{�a�e啦 侇a�.餗 �r鷝y暫_�g�]徉_�p孇=側Y嶺_�c�r␓
|
||||
篸e�e�f偯_�g�n�a�e�� �r�B�f�)�
|
||||
�y� 值T伓E洈i瓩u�e瑧
|
||||
篸e�e�
|
||||
�y� 值T伓E牰O�e�;�
|
||||
罿b�a䴐
|
||||
�s孇'�o�a𥅽:椚t�e啦 覺P梫B�𧯯徉b�a䴐
|
||||
�s孇'�r�g煉
|
||||
�y� 值T伓E牰t�n壧
|
||||
�e�;�a� �i�n餀:椚t�e啦 覺P梫I�6太
|
||||
�e�;�e�u�:椚t�e啦 覺P梫N�l徉b�a䴐
|
||||
罿
|
||||
�a�[�r�x虯=�e�a�;椚v�s�r漶d駏+啃]啦 �y�;椚v�s�r漶d駏+啊]啦 �l�;尠a�I� 閣 ␓
|
||||
罿
|
||||
�i蒩_�t�r�b�(�a�)徉}徉
|
||||
�t�l�e漭e�o艩s�O�V�i�l孇=�u�t�n�e樾 �l�)�
|
||||
�t�e�a� 值r�o�e�s衋k�)徉l� �y� 值t�e��(�l�)徉
|
||||
�i�h偯_�p儹 錏c�e區n�b�'芬_�p孇=側Y嶺_�t␚;�r�k徉c�e區o�e�'糾{�e靿_�g啦 �l�;尠i鶲(捧a�)�
|
||||
�y� 值T伓E浀u�;� �s孇i鶲(�p�f健a�.�y�I� 敕=區u�e�n�'匿&�y�o鶲_�g�d勘=值'�d�i�d溥 錏v�u孇=健a�.�;椚t�e啦 �r鷝_�p鶠n駃
|
||||
篸e�e�f偯_�g�n�a�e�� �.�c�r␁ 錏v�u孇=偃_�g�,健a�.樾 �r鷝z邲
|
||||
�y� 值T伓E狊e�o瘈;� �s孇i鶲(�r黰i�t�c�f骨r�y�f�r嗷{椚t�e啦 覺P梫B�B�f�;� �s孇{椚t�e啦 覺P梫S�j�t徉}�
|
||||
�e�;�a� �o���'芬_�p孇=側Y嶺_�o无
|
||||
�e�;�a� �t�n龢:椚t�e啦 覺P梫S�i�;�r�k徉c�e區b�i�'芬_�p孇=側Y嶺_�t至;�r�k徉d�a�t芬_�p孇=側Y嶺_�l无
|
||||
�e�;�
|
||||
�h�.�e銣w癑a�a�e�e�a�,�a�e暫_�p儹;�;尠l� �a�r�t�d�e銣w癑a�a�e蒨=�u�t�n�a�a�e蒢 錏l� �a� 值n� �r�(�r�b�s�e�t醽*唱)徉l� �r�x啦 �
|
||||
�o犕(�t�e橛i皡v�i�l�)�
|
||||
�t�a�e啦 �r�b�s�e曀;尠l� �y�s醽=�e�l�H�h�e橧;�e靿_�p孇=�y�o鶺v�u儹;尠s�t� 虞t�e嗷{�a� �u�e瑳:椚t�e啦 覺P梫I�3E
|
||||
�e�;�a� �b�c餀:�
|
||||
�t健a� 值v�u灃
|
||||
�f偯!�r鷙 錏_�p孇=側Y嶺_�l无
|
||||
篸e�e�f偯t�e�� �r鷝_�p鶠n靿!倘 �n�f�e譪 僇
|
||||
�p�f健a�.� 敕=區u�e�n�'嗷{�a�e啦 �r鷝i譥
|
||||
�y� 值_�g噸t�e�t徉}�l� � 虞a� �s�n�o鶲m鉐V�t��3嗷{�a�e啦 侇a�.餗 �r鷝y暫_�g�]徉_�p孇=側Y嶺_�c�r␓
|
||||
篸e�e�f偯_�g�n�a�e�� �r�B�f�)�
|
||||
�y� 值T伓E洈i瓩u�e瑧
|
||||
篸e�e�
|
||||
�y� 值T伓E牰O�e�;�
|
||||
罿b�a䴐
|
||||
�s孇'�o�a𥅽:椚t�e啦 覺P梫B�𧯯徉b�a䴐
|
||||
�s孇'�r�g煉
|
||||
�y� 值T伓E牰t�n壧
|
||||
�e�;�a� �i�n餀:椚t�e啦 覺P梫I�6太
|
||||
�e�;�e�u�:椚t�e啦 覺P梫N�l徉b�a䴐
|
||||
罿
|
||||
�a�[�r�x虯=�e�a�;椚v�s�r漶d駏+啃]啦 �y�;椚v�s�r漶d駏+啊]啦 �l�;尠a�I� 閣 ␓
|
||||
罿
|
||||
�i蒩_�t�n�r�b�(�a�)徉}徉
|
||||
�t�l�e漭e�o艩c�l�o鯫=�u�t�n�v�t�m囃 �g蒢 錏g�i�n鬿4�f�r匼]啦 �s���a�(�e�N�e墓
|
||||
�e靿r�I譥
|
||||
�f偯A�a橭i膌r�y�r�)嗷{�_�n髣2�f�r厔]啦 �g蒩l�g�;尠l� �s�j�t蒨=�u�_�g�e�s�r�)徉
|
||||
� �a膇b�c�)�
|
||||
�c� 值t�s噸c�l�o騔.嬴a�s墓
|
||||
篸e�e�
|
||||
�c� 值t�s噸c�l�o騔)徉}� �s孇{�_�n髣2�f�r厔]啦 �
|
||||
�c� 值t�s噸c�l�o騔)徉}尠r�u� �w偶r���(�e�l�,�e�c靾 俳 錏t�s噸_�n�n鷚p馧r�I舋 值{�e�l�:�e�l�,�e�c馜 �j�t�;�)徉}徉
|
||||
�t�l�e漭e�o艩c�l啦 �n�i��(�e�N�e暫a�s嗷{�_�g�t至B�f�[聣 值r�o�e�s衋e�n鉿a�)徉
|
||||
� 萱r�y�s�r�(�g蒢)�
|
||||
鷛u�t␚B�f�[6 值a�s�e�t驞
|
||||
�e靿h�O�e�s啦 �s禶a�u�n�(�g蒢;尠i鶲(�s�j�t蒢 錏t�s噸c�l裟.�r�)徉}�l� 錏t�s噸c�l蜂;�
|
||||
篸e�e�
|
||||
鷛u�t␚B�f�[6 值0徉t�s噸c�l蜂;�
|
||||
縳
|
||||
�e靿p�y�M�h�𪊺�l𤂌n�l�b� 值f�c�o癯e�n鉿a�,�r�)�
|
||||
鷛b�i�6云u�e滼0虯=�e�l�H�h�v�t�m儹;尠i鶲(�r�.�A�a橉a�s嘗 錏g�i�3◥u�e滼2虯=�r�.�n�h徉
|
||||
�t�a膇b�c� 值p�h�r�m�t蒻a�s墓
|
||||
�f偯h�O�e�s嗷{�h�.�a�U�e�a�e裟.�r�)徉}�l� 錏t�s噸c�l�r�i�l儺)徉}� �s孇{�_�n髣2�f�r厔]啦 �
|
||||
�i蒩_�l𤂌n�l�b�(墓
|
||||
罿}徉
|
||||
�t�l�e漭e�o艩c�l�S�e�e蠓=�u�t�n�n�u�S�f暫e�n鉿a�,�r�)�
|
||||
鷛b�i�6云u�e滼0虯=�e�l�H�h�v�t�m儹;尠i鶲(�r�.�A�a橉a�s嘗 錏g�i�3◥u�e滼2虯=�r�.�n�h徉
|
||||
�t�a膇b�c� 值p�h�r�m�t蒻a�s墓
|
||||
�f偯h�O�e�s嗷{�h�.�a�T�裨�a�d�n�u�S�f暫.嬴a�s墓
|
||||
篸e�e�
|
||||
�i蒩_�l頔o�r�m�(�c�d齠e�)徉}� �s孇{�_�n髣2�f�r厔]啦 �
|
||||
�i蒩_�l頔o�r�m�(�c�d齠e�)徉}�;尠l� �a�r�t�d�a�T�裨�a�d�r�i�l孇=�u�t�n�n�u�S�f暫e�n鉿a�,�r�)�
|
||||
鷛b�i�6云u�e滼0虯=�e�l�H�h�v�t�m儹;尠i鶲(�r�.�A�a橉a�s嘗 錏g�i�3◥u�e滼2虯=�r�.�n�h徉
|
||||
�t�a膇b�c� 值p�h�r�m�t蒻a�s墓
|
||||
�f偯h�O�e�s嗷{�h�.�a�T�裨�a�d�r�i�l儺i�l�e�l鶭 嬴.�g蒢;� �s孇{�h�.�a�T�裨�a�d�r�i�l儺i�l�e�l鶬;�
|
||||
篸e�e�
|
||||
鷛u�t␚B�f�[6 值0徉t�s噸c�l�S�e�e蘀n�l�b�(�c�d齠e�)徉}�;尠l� �a�r�o鈮s�e�e蘢l�e� 值{�n�e�b�:�a�e潑g�:�u�t�n蜂 錏t�s噸_�t�r�m�P�y�s蜂;尠c��靿c�𩵚靿=�_�n髣2�f�r匼]徉
|
||||
�t�e靿=�e褙A�a橉c�𩵚靾;尠f��(�t� 值0客i啪 �u�;冕+钁
|
||||
錏r�[驧 值t�s�_�n髣2�f�r�+△]徉}尠r�u� �t徉}潑s�:偯)啦>�}�;尠
|
||||
�.�a�r�r�㙟�p嚾s�O�V�i�l孇=�l�e漭e�o艩s�O�V�i�l灃
|
||||
�.�a�r�r�㙟�p嚾s�O�V�i�l� 值p�y�M�h�𪊺�t�n�r�b�s徉m鉐P�y�.�o�t�e�a�P�c啦 �a�r�t�d�a�P�c徉m鉐P�y�.�o�t�e�a� 值p�y�M�h�𪊺�l无
|
||||
�.�a�r�r�㙟�p嚾c�l�r�i�l孇=�l�e漭e�o艩c�l�r�i�l灃
|
||||
�p噪l�e牓p�t�䛐�.�l頔o�r�m� 值p�y�M�h�𪊺�l頔o�r�m�;�p噪l�e牓p�t�䛐�.�l頔o�r�m�U�e�a�e啦 �a�r�t�d�a�T�裨�a�d�r�i�l灃
|
||||
齄"�a�r第 移e�c�"暫"�j�t第 硫i�u鉌,動B�p第 疵h�k�i�"暫"�r�r第 疵o�h�e第 票e�L�e敭,動D�m擳n�t樨,動P�"芢f�鍃�h�l啦>�
|
||||
�[�]�r�㙟�p嚾s�V�i�l孇=�b㳜e�o艩s�V�i�l灃
|
||||
�[�]�r�㙟�p嚾s�V�i�l� 值o�M�h�𪊺�t�r�b�s徉}墓
|
||||
�p噸e�n�.�d裘e�i�C�a�d第 �n�t橧 俳 錏
|
||||
�t�d啦 �t�y噸_�;�e靿t�e啦 �t�y噸_�p鶠n駃
|
||||
�t健t�e啦 �t�y噸_�p灃
|
||||
�r�r�P�𧯯蒬t�e苀i舋 值e�i�;尠O�e�.�f�e�o�r�(�t�y暫"�"暫{�a�e糾i蠙
|
||||
�i�b�:�a�e�)徉
|
||||
�j�t�e�n鼰r�𨧡�y�n�t樾 眺t�e�t第 錏v�u欀 �p囃
|
||||
�i�b�:�a�e�)徉
|
||||
�j�t�e�n鼰r�𨧡�y�n�t樾 �y�"暫{�a�e糾_�p囃
|
||||
�i�b�:�a�e�)徉
|
||||
�t�n�t曌y� 值e�i�.�y�I�;尠i鶲(�t�y�p孇!倘 庇&僅e�i�T�e勘=值9嗷{银b�c鞄d�i�P�p�t橉e�i�,動p�𢹂�o皷,�b簕r�𨧡�y�o�t�n墓
|
||||
罿
|
||||
�j�t�e�n鼰r�𨧡�y�n�t樾 �v�t蒘,�
|
||||
�u�r�l欀 �l�,�a�e糾n� �t�y�e�H�d�r�n�t橧
|
||||
篴;尠O�e�.�f�e�o�r�(�t�y暫"�t鯓,�
|
||||
�u�r�l欀 �l�,�a�e糾n� �o�(錏e�i�:�n�t樾
|
||||
�c�:�}�,�a�H�d�r嫖}墓
|
||||
�w�c醽(�t�y�p儹 錏c�e啡:勒*�l�e犕*褥{银b�c鞄d�i�P�p�t橉e�i�,動s�e�e蘢l�e�"暫p�y�P�p�t�a�d�a�r蒢;尠e�i�.牁p�d�g�c啦 �;尠O�e�.�f�e�o�r�(�t�y暫"�c鶖e�u�s第 錏e�m�a�e糾f�s囃
|
||||
�l�:�e褙P�x橉e�i�,�a�F�t�e�n�e煻
|
||||
篴;尠O�e�.�f�e�o�r�(�t�y暫"�a籈v�l�s第 錏e�m�a�e糾f�s囃
|
||||
�l�:�e褙P�x橉e�i�,�e�O�r�y�n�e煻
|
||||
篴;尠O�e�.�f�e�o�r�(�t�y暫"�a�n蒘,�
|
||||
�u�r�l欀 �l�,�a�e糾n� �o�(�t�y暫w�p���d�r嫖}墓
|
||||
罿b�a䴐
|
||||
�s孇1糾/瘓v�i�e兜/�
|
||||
�j�t�e�n鼰r�𨧡�y�n�t樾 �o�"暫{�n�e�b�:�a�e潑v�u欀 �w偶r�𥖹�n�t樾 �h�l鶗o�a�l�)�)徉
|
||||
�j�t�e�n鼰r�𨧡�y�n�t樾 �x�a蒘,�
|
||||
�u�r�l欀 �l�,�a�e糾n� �o�(�t�y暫v�i�e�t�H�d�r嫖}墓
|
||||
罿b�a䴐
|
||||
罿}墓
|
||||
罿
|
||||
�u�t�n陞u�i�a�r�c�t�n�e�a�)�
|
||||
�i蒩m�s�e啦 �s�g灃
|
||||
�i蒩n�e啦 畦u�i�a�r�x�p�o皷;�
|
||||
�p噸v�i�e蒩n� 值f�c�o癯m�𨫪㩗 �s�i��,�d蘅 錏i鶲(�d� 倘 �l鑻
|
||||
�r�� �w陞u�i�a�r�c�t�n裘V�i�e糾M�𨫪𤨣i蒨r�u�e襣)徉i鶲(�s�i�� 倘 �l鑻
|
||||
�r�� �w陞u�i�a�r�c�t�n裘V�i�e糾P�𢹂�o皡i蒨r�u�e襣)徉
|
||||
� 補a�)�
|
||||
�t�n�h�.�e蝩t�e�� �d� 倘 �t�n龢 紙m鉐j�学靺m�𨫪鑻 糾m�𨫪㩗 �s�i��,啡.畓 粗,啊5汁 �l�,�a�e暫0暫0暫0暫0墓
|
||||
篸e�e�
|
||||
� �d蠑h�d�g啦=�u�)�d蠑h�d�g啦 螩0徉i鶲(�d�u�e漈l�e啦=�u�)�d蠑n�b�P�t孇=動"徉i鶲(�d�l�a啦=�u�)�d蠑a�h鮵=啊5申
|
||||
� �d蠑l�𠳖� 倘 �l鑻
|
||||
�d�o�e蠓=�a�e徉i鶲(�d�n�n孇=值n�l嫖a�.�g�e啦 �l�;�f偯a�.�l�� 倘 �l𤨣|懧a�.�l��.�n�h勘=啊)�d蠑c��犕=偃0暫0邲
|
||||
� �d蠑d�e�i�� 倘 �l鑻
|
||||
�d�i�n�o皡=啡;尠l� �l�関�e啦 �
|
||||
�f偯A�a橭i膌r�y�d蠑c��滼0芩)�
|
||||
� �d蠑c��滼0芢l�g� 倘 Ⅸ 錏c��熉y� 值2徉
|
||||
�t�o�r啦 �d�o�r匼]徉a�.�l�靀聣 值(�l�靀△ 皈 阪 銀c��滼0邲
|
||||
�o�r啦 �d�o�r厒]徉a�.�l�靀△ 值(�l�靀△ 皈 阪 銀c��滼0邲
|
||||
篸e�e�
|
||||
�l�関�e啦 ±
|
||||
�e靿c��犕=�d蠑c��滼0邲
|
||||
�d�o�r匼]啦 �o�r厒]啪<啃6嗷+偯c��滼1虯<畏8嗷+�o�r匼]徉
|
||||
�l�� 值a�.�l�靀△;�d蠑c��滼1虯=偯c��滼1虯<畏1汐 銀(�l�靀△ 皈 阪 銀c��滼0邲
|
||||
罿}尠r�u� �i蒩_�w�y�o鶲m�𨫪𤨣=值'�r�g溜?�p�o�t�o�l嗷:�o�l暫p�𢹂�o臯 �d�e�i�,�d蠑n�b�P�t囃 �d�l�a暫a�.�c�d暫a�.�g�e暫c��熉y�,�d蠑c��滼0苃 �d�o�r厒]暫a�.�m�s�n墓
|
||||
罿}徉
|
||||
�.�b�c�.�w啦 �n�i��(�d�,�o�t�n暫a�)�
|
||||
� �o�l啦=�u�)�h�w�e褙M�t�l�e潃x�p�o癯"�j�t糾M�𨫪𤨣i蒨r�u�e襣)徉i鶲(�s�i�� 倘 �l鑻
|
||||
�r�� �w陞u�i�a�r�c�t�n裘O�e�:偶o�t�n�s�e�i�d笠;尠i鶲(�d蘅 錏r�u� �i蒩_�w�y�o鶲m�𨫪𤨣=值'�r�g溜?�p�o�t�o�l嗷:�o�l暫p�𢹂�o臯 匼.畓 螩0暫0撻]暫2禾,啡)徉}�l� 錏i鶲(�d�o�t�n啦=�u�)�d蠑r�𦡞�o皡=偃0撻,啡.畓 螩0邲
|
||||
� �d蠑a�h鮵=值n�l嫖a�.�p� 值2禾;�f偯a�.�m�s�n啦=�u�)�d蠑d�e�i�� 值0徉
|
||||
�t�n�h�.�e蝩t�e�� �d� 倘 �t�n龢 紙m鉐j�学靺m�𨫪鑻 糾m�𨫪㩗 �s�i��,�d蠑r�𦡞�o臯 �d�l�a暫a�.�m�s�n墓
|
||||
罿}尠m鉐_�i�.�w啦 �n�i��(�r�e暫p�𢹂�o臯 �d嗷{�f偯s�i� 倘 �l鑻
|
||||
�r�� �w陞u�i�a�r�c�t�n裘B�p糾S�i� � �q�r�"墓
|
||||
� �o�t�n啦=�u�)�h�w�e褙M�t�l�e潃x�p�o癯"�i隓 �s�i�� � �q�r�"墓
|
||||
�f偯!�d嗷{�e�r皡t�s噸n�(�r�e暫p�𢹂�o臯 粗,啃.畓 畓 O5暫0撻,�a�e暫0暫0墓
|
||||
篸e�e�
|
||||
� �d蠑n�e啦=�u�)�d蠑n�e啦 粗;�f偯a�.�a� 倘 �l鑻
|
||||
�d�c�e啦 ﹉0徉i鶲(�d�o�r啦=�u�)�d蠑c��犕=啡;�f偯a�.�p� 倘 �l鑻
|
||||
�d�l�a啦 O5徉i鶲(�d�r�D�t�c孇=值n�l嫖a�.�a蝚i�a�e啦 螩0徉i鶲(�d�h�魩�n� 倘 �l鑻
|
||||
�d�h�魩�n� 值f�s灃
|
||||
� �d蠑r�𦡞�o皡=值n�l嫖a�.�t�i�� 值0徉i鶲(�d�i�n�o皡=值n�l嫖a�.�m�s�n啦 �
|
||||
�e�r皡t�s噸n�(�r�e暫p�𢹂�o臯 �d�a�,�d蠑s�l囃 �d�o�r暫a�.�p�,�d蠑d�w�s�n�,�d蠑s�r鈭a�e暫a�.�t�i��,�d蠑d�e�i��)徉}�
|
||||
�p噸c�c�o�t蒩n� 值f�c�o癯t�e暫p�𢹂�o臯 �d�s暫a�)�
|
||||
� �y� 倘 �l鑻
|
||||
�r�� �w陞u�i�a�r�c�t�n裘C�c�o�t糾T�e�s�e�i�d笠;�f偯p�𢹂�o皡=值n�l嫖t�o褙n� �l�p�y�E�e�i��(疵h�k�i�:偶o�t�n�s�e�i�d笠;�f偯r�i� 倘 �l鑻
|
||||
�r�� �w陞u�i�a�r�c�t�n裘C�c�o�t糾R�i� � �q�r�"墓
|
||||
�f偯!�d嗷{�e�r皡t�s噸n�(�p囃 �s�i��,�a�u蓌 �s�i��,剪1暫t�e暫0墓
|
||||
篸e�e�
|
||||
� �d蠑d�e�i�� 倘 �l鑻
|
||||
�d�i�c�o皡=�o�t�n徉i鶲(�d�o�r啦=�u�)�d蠑c��犕=偃2禾,啊5汁 O5暫2禾]徉i鶲(�d�i�b� 倘 �l鑻
|
||||
�d�i�b� 值t�e徉i鶲(�d�i�n�o皡=值n�l嫖a�.�m�s�n啦 �
|
||||
�e�r皡t�s噸n�(�p囃 �s�i��,�a�u蓌 �d�i�c�o臯 �d蠑c��滼3虯<畏2切 銀(�d�o�r厔]啪<啃6嗷+偯a�.�l�靀△ 皈 阪 銀a�.�l�靀聣,�d蠑v�i�e暫a�.�m�s�n墓
|
||||
罿}尠m鉐_�r�r蒩n� 值f�c�o癯t�e暫p�𢹂�o臯 �a�,�d蘅 錏i鶲(�p孇=值n�l嫖t�o褙n� �l�p�y�E�e�i��(畦a�e瑲 �p孇i蒨r�u�e襣)徉i鶲(�s�i�� 倘 �l鑻
|
||||
�r�� �w陞u�i�a�r�c�t�n裘M�k�:偶o�t�n�s�e�i�d笠;�f偯s�l孇=值n�l嫖t�o褙n� �l�p�y�E�e�i��(畦a�e瑲 �a� � �q�r�"墓
|
||||
�f偯!�d嗷{�e�r皡t�s噸n�(�p囃 �s�i��,�c�e暫[螩0暫0撻,啡.聣,�o�t�n暫-_ �u囃 眤;� �s孇{�f偯a�.�r�t�n啦=�u�)�d蠑d�e�i�� 值p�𢹂�o着
|
||||
� �d蠑r�𦡞�o皡=值n�l嫖a�.�t�i�� 值[螩0暫0撻,啡.聣;�f偯a�.�l�� 倘 �l鑻
|
||||
�d�o�r啦 厔5汁 O5暫2禾,啊5扔;�f偯a�.�s�l孇=值n�l嫖a�.�s�l孇=�r�;�f偯a�.�m�s�n啦=�u�)�d蠑d�e�i�� 值0徉
|
||||
�t�n�h�.�e蝩t�e暫p�𢹂�o臯 �a�,�d蠑r�𦡞�o臯 �d�i�c�o臯 �d蠑c��滼3虯<畏2切 銀(�d�o�r厔]啪<啃6嗷+偯a�.�l�靀△ 皈 阪 銀a�.�l�靀聣,�d蠑v�i�e暫a�.�m�s�n墓
|
||||
罿}尠m鉐_�d蒩n� 值f�c�o癯m�𨫪㩗 �s�i��,�d蘅 錏i鶲(�d� 倘 �l鑻
|
||||
�r�� �w陞u�i�a�r�c�t�n裘P�:陞o�l�s�e�i�d笠;�f偯p�𢹂�o皡=值n�l嫖t�o褙n� �l�p�y�E�e�i��(硫e譣 �s�i�� � �q�r�"墓
|
||||
�f偯!�d嗷{�e�r皡t�s噸n�(�d�,�o�t�n暫0暫f�s囃 �l�,�a�e暫f�s囃 眤;� �s孇{�f偯a�.�a�n黰=值n�l嫖a�.�a�n黰=啡;�f偯a�.�o�n啦=�u�)�d蠑f�z� 值f�s灃
|
||||
� �d蠑i�i�i�e啦=�u�)�d蠑i�i�i�e啦 �l�;�f偯a�.�n�i鯫=值n�l嫖a�.�n�i鯫=�a�e徉i鶲(�d�o�C���l啦=�u�)�d蠑l�𠳖�n�o𤨣=�r�;�f偯a�.�m�s�n啦=�u�)�d蠑d�e�i�� 值0徉
|
||||
�t�n�h�.�e蝩m�𨫪㩗 �s�i��,�d蠑h�d�g暫a�.�n�i鬎 �d�n�n�b�,�d蠑f�z�,�d蠑l�𠳖�n�o㩗 �d�i�n�o癶;�
|
||||
罿
|
||||
�.�l�e�.�l𤨣=�u�t�n蜂 錏i鶲(�g�e�s�e�t醽>啃)�
|
||||
�t�r彏 值a�u�n�[聣;尠i鶲(�p�f�r彏)勘=值'�r�g溜&嗯t�e��(�g眤 敕=區b�i�'嗷{�e靿a�s啦 �g�e�s厔]徉
|
||||
�t�v�t�s醽=�y�o鶺a�u�n�[△)啦=值'�r�g溜?�e�l�H�h�r�m�t蒬1芩 糾a�u�n�[△;尠g�i�n鬿4�f�r匼]啦 �e�H�h徉g�i�3◥u�e滼2虯=�r�.�n�h徉
|
||||
� �r� 僇 �g蒩l�g� 旅0嗷{�e靿h�O�e�s啦 �s禶a�u�n�(�g蒢;尠i鶲(�s�j�t蒢 錏m鉐_�a�r蒩_�l担o熏a�u�n�[聣,副.�r�)徉}�l� 錏m鉐_�a�r蒩_�l担o熏a�u�n�[聣)徉}� �s孇{�p噸p�y�s噸c�l�r�r�m�t蒬0芩;�
|
||||
篸e�e�
|
||||
�t�r� 值a�u�n�[△;尠l� �e�H�h啦 �p�f�r彏)啦=值'�g�t溜?�r彏 糾r�o�e�s衋a�0墓
|
||||
�_�g�t至B�f�[聣 值e�n�a�;尠i鶲(�g蒨&僅a�s�e�t醽>啡)�
|
||||
鷛u�t␚B�f�[6 值a�s�e�t驞
|
||||
�e靿h�O�e�s啦 �s禶a�u�n�(�g蒢;尠i鶲(�a膇b�c�)�
|
||||
�.�l�e�.�a�(墓
|
||||
篸e�e�
|
||||
�.�l�e�.�a�(嬴.�g蒢;�
|
||||
篸e�e�
|
||||
鷛u�t␚B�f�[6 值0徉
|
||||
�.�l�e�.�a�(墓
|
||||
罿}� �s孇{�_�g�t至B�f�[聣 值r�o�e�s衋a�u�n�[聣)徉g�i�3◥u�e滼2虯=啡;尠m鉐_�a�r蒩_�l擥)徉}�;尠m鉐_�a�r蒩c�l�D�e�i�� 值(�m�s�n暫e�n鉿a�,�r�)啦>�
|
||||
�_�g�t至B�f�[聣 值r�o�e�s衋e�n鉿a�)徉
|
||||
� �r�)�
|
||||
鷛u�t␚B�f�[6 值a�s�e�t驞
|
||||
�e靿h�O�e�s啦 �s禶a�u�n�(�g蒢;尠i鶲(�s�j�t蒢 錏m鉐_�a�r蒩_�l𢡟n�m�s�n�i�n�o臯 嬴.�g蒢;� �s孇{�p噸p�y�s噸c�l�D�e�i��(�m�s�n墓
|
||||
罿}�l� 錏g�i�3◥u�e滼2虯=啡;�p噸p�y�s噸c�l�D�e�i��(�m�s�n墓
|
||||
罿}徉
|
||||
�.�l�e�.�l𢡟n�n� 值(�s�i��,�a�e暫d�e�i��,�v�t�m囃 �g蒢 俳 錏i鶲(�m�s�n啦=�u�)�e�r着
|
||||
�f偯t�e�� �m�s�n啦=值'�m�r溥 錏g�i�n鬿4�f�r匼]啦 �s���a�(�e�N�e墓
|
||||
�f偯a�s嗷{�_�n髣2�f�r厔]啦 �g蒩l�g�;尠l� �s�j�t蒨=�u�_�g�e�s�r�)徉
|
||||
� �a膇b�c�)�
|
||||
�.�l�e�.�a�I疞a�e�d�m�s�n�o�t�n暫r�g囃 �m�s�n暫.嬴a�s墓
|
||||
篸e�e�
|
||||
�.�l�e�.�a�I疞a�e�d�m�s�n�o�t�n暫r�g囃 �m�s�n墓
|
||||
罿}�l� 錏g�i�3◥u�e滼2虯=啡;�p噸p�y�s噸c�l�R�g鶨n繻i�n�o癯p�𢹂�o臯 �n�,�i�n�o癶;�
|
||||
篸e�e�
|
||||
鷛b�i�6云u�e滼0虯=�e�l�H�h�i�n�o癶;尠i鶲(�e�N�e嗷{�_�n髣2�f�r厔]啦 �e�N�e�e�t驞
|
||||
�e靿h�O�e�s啦 �s禶a�u�n�(�e�N�e墓
|
||||
�f偯h�O�e�s嗷{�p噸p�y�s噸c�l�R�g儺p�𢹂�o臯 �n�,副.�v�t�m儹;� �s孇{�p噸p�y�s噸c�l�R�g儺p�𢹂�o臯 �n�)徉}� �s孇{�_�n髣2�f�r厔]啦 �
|
||||
�.�l�e�.�a�I疞a�e�o�t�n暫r�g儹;�
|
||||
罿}徉
|
||||
�p噸p�y�s�a�U�e�a�e啦 �n�i��(嗷{�f偯a�u�n�.�n�h啄 ℅ 錏l� �g臈=�r�m�t蒬0邲
|
||||
�f偯t�e��(�g眤 敕=區s�i�'匿&�y�o鶺a�0嗷!倘 �i�n餀)�
|
||||
�t�r� 值a�u�n�[6;尠l� �e�H�h啦 �p�f�r�m�t蒬1芩 倘=區s�i�'啞 �s���a�(�g�e�s厒]嗷:�r�m�t蒬1邲
|
||||
�_�g�t至B�f�[聣 值e�n�a�;�_�n髣2�f�r厔]啦 �g蒩l�g�;尠i鶲(�g蒨&僅a�s�e�t醽>啡)�
|
||||
�t�a膇b�c� 值p�h�r�m�t蒻a�s墓
|
||||
�f偯h�O�e�s嗷{�p噸p�y�s噸c�l�r�r�i�l儺a�u�n�[聣,副.�r�)徉}�l� 錏m鉐_�a�r蒩_�l担o熀n�l�b�(�g�e�s匼]墓
|
||||
罿}�l� 錏m鉐_�a�r蒩_�l担o熀n�l�b�(�g�e�s匼]墓
|
||||
罿}�l� 錏l� �g蒨=�r�m�t蒬1邲
|
||||
�e靿e�n�a� 值t�e��(�g眤 倘=區b�i�'啞 �g臈:�e�l�H�h�r彏)徉
|
||||
鷛b�i�6云u�e滼0虯=�v�t�s驞
|
||||
�f偯a�s匿&�r�.�n�h啄 眤 錏g�i�3◥u�e滼2虯=�r�.�n�h徉
|
||||
�t�a膇b�c� 值p�h�r�m�t蒻a�s墓
|
||||
�f偯!�s�j�t蒢 錏m鉐_�a�r蒩_�l𤂌n�l�b�(墓
|
||||
篸e�e�
|
||||
�.�l�e�.�a�U�e�a�e裟.�r�)徉}� �s孇{�_�n髣2�f�r厔]啦 �
|
||||
�p噸p�y�s噸c�l�r�i�l儺)徉}�
|
||||
篸e�e�
|
||||
鷛b�i�6云u�e滼0虯=�e�l�H�h�r�m�t蒬0芩;�_�n髣2�f�r厔]啦 �
|
||||
�p噸p�y�s噸c�l�r�i�l儺)徉}�;尠m鉐_�a�r蒩c�l�D�e�i���e�a�e啦 �i�n�o臯 �e�N�e暫a�s嗷=旅{尠g�i�n鬿4�f�r匼]啦 �s���a�(�e�N�e墓
|
||||
�f偯a�s嗷{�_�n髣2�f�r厔]啦 �g蒩l�g�;尠l� �s�j�t蒨=�u�_�g�e�s�r�)徉
|
||||
� �a膇b�c�)�
|
||||
�.�l�e�.�a�I𨻙i�n�o瘬n�l�b�(�m�s�n暫.嬴a�s墓
|
||||
篸e�e�
|
||||
�.�l�e�.�a�I𨻙i�n�o瘬n�l�b�(�m�s�n墓
|
||||
罿}�l� 錏g�i�3◥u�e滼2虯=啡;�p噸p�y�s噸c�l�D�e�i���e�a�e�i�n�o癶;�
|
||||
縳
|
||||
�p噸p�y�s�a�I疞a�e�r�i�l孇=偯p�𢹂�o臯 �n�,�i�n�o臯 �e�N�e暫a�s嗷=旅{�f偯d�e�i�� 倘 �l鑻
|
||||
�t�n徉
|
||||
� �y�o鶲d�e�i�� 倘=區n�b�'嗷{�_�g�t至B�f�[聣 值r�o�e�s衋e�n鉿a�)徉
|
||||
� �r�)�
|
||||
鷛u�t␚B�f�[6 值a�s�e�t驞
|
||||
�e靿h�O�e�s啦 �s禶a�u�n�(�g蒢;尠i鶲(�s�j�t蒢 錏m鉐_�a�r蒩_�l𢡟n�n�A�D�e�i���e�a�e�o�t�n暫r�g囃 �m�s�n暫.嬴a�s墓
|
||||
篸e�e�
|
||||
�.�l�e�.�a�I疞a�e�d�m�s�n�r�i�l儺p�𢹂�o臯 �n�,�i�n�o癶;�
|
||||
篸e�e�
|
||||
鷛u�t␚B�f�[6 值0徉m鉐_�a�r蒩_�l𢡟n�n�A�D�e�i���e�a�e�o�t�n暫r�g囃 �m�s�n墓
|
||||
罿}�l� 錏g�i�n鬿4�f�r匼]啦 �s���a�(�m�s�n墓
|
||||
�f偯e�n鉿a�)�
|
||||
鷛u�t␚B�f�[6 值e�n鉿a�.�n�h徉
|
||||
�t�a膇b�c� 值p�h�r�m�t蒻e�n鉿a�)徉
|
||||
� �a膇b�c�)�
|
||||
�.�l�e�.�a�I疞a�e�r�i�l儺p�𢹂�o臯 �n�,副.�v�t�m儹;� �s孇{�p噸p�y�s噸c�l�R�g齝n�l�b�(�s�i��,�a�e墓
|
||||
罿}�l� 錏g�i�3◥u�e滼2虯=啡;�p噸p�y�s噸c�l�R�g齝n�l�b�(�s�i��,�a�e墓
|
||||
罿}�;尠m鉐_�b�s�e褙=�u�t�n�e�,�o�t�n暫a�)�
|
||||
� �e� 倘 �l鑻
|
||||
�r�� �w陞u�i�a�r�c�t�n裘T�t�b�:側e� � �q�r�"墓
|
||||
� �o�t�n啦=�u�)�h�w�e褙M�t�l�e潃x�p�o癯"�x鉹a�l糾P�𢹂�o皡i蒨r�u�e襣)徉
|
||||
� 補a�)�
|
||||
�t�n�h�.�e蝩p�𢹂�o臯 �x鞂 �u囃 畓 J0撻,剪1暫0墓
|
||||
篸e�e�
|
||||
� �d蠑l�� 倘 �l鑻
|
||||
�d�o蒨=�r�;�f偯a�.�n靿=值n�l嫖a�.�n靿=啡;�f偯a�.�a蝚i�a�e啦=�u�)�d蠑d�w�s�n� 值2𤀑.�
|
||||
� 補a�.�l�� � �d�o�r�e�t醽!值4嫖a�.�l�� 值[O5暫2禾,啊5汁 O5邲
|
||||
� �d蠑d�e�i�� 倘 �l鑻
|
||||
�d�i�n�o皡=啡;尠r�u� �i蒩_�w�o�t�n暫t�t暫a�.�s暫a�.�n鞂 �d�r�D�t�c囃 �d蠑c��滼3虯<畏2切 銀(�d�o�r厔]啪<啃6嗷+偯a�.�l�靀△ 皈 阪 銀a�.�l�靀聣,�d蠑d�e�i��)徉}�
|
||||
�p噸d�m�s�e褙=�u�t�n�u�y�p囃 �m�s�n暫s�r�D�a嗷{�e靿_�l蒨=�u�;�f偯s�r�D�a嗷{�e靿v�i�l� 值O�e�.�y蒻s�r�D�a墓
|
||||
椚v�s啦 �w骨r�y�a�a�e蒩l�g� 瘓3墓
|
||||
�t�r漶d駏=啡;尠f�� �e靿k� �� �r�b�s嗷{�e靿v�u孇=�h�e繻a�[�y邲
|
||||
�e靿k�H�h啦 �s���a�(�y墓
|
||||
�t健t�e啦 �p�f�a�e墓
|
||||
�w�c醽(�y�)�
|
||||
�s孇'�m�r煉
|
||||
�y� 值T伓E洁n髣2徉b�a䴐
|
||||
�s孇'�骲�t煉 錏l� �r黰=�a�e徉
|
||||
� 補_�g嗷{椚t�e啦 覺P梫N�l徉}�l� � �y�o鶲_�g噸t�e�t勘=值'�d�i�d溜&嗯t�e�� �r鷝i蠓!倘 �n�f�e譪)�
|
||||
�l� 值_�g�d徉_�p孇=健a�.�y�I�;� �s孇i鶲(�r黰i�t�c�f�p噢e�o瘈)�
|
||||
�l� 值[�r鷝x暫_�g�,健a�.窱;椚t�e啦 覺P梫V�t��3徉}�l� � 虞a� �s�n�o鶲A�a撉u�e煻 錏_�p孇=側Y嶺_�n�f�r徉}�l� 錏_�p孇=側Y嶺_癟b�c駃
|
||||
罿}�r�k徉c�e區b�𧯯�n煉
|
||||
�y� 值T伓E洈o��;�r�k徉c�e區s�i�'芬_�p孇=側Y嶺_�r�g徉b�a䴐
|
||||
�s孇'�g�t煉
|
||||
�y� 值T伓E洁n鬿4徉b�a䴐
|
||||
�f�l馜
|
||||
�y� 值T伓E浀u�;�r�k徉}尠_�l蒬a�I�]啦 �y�s驞
|
||||
�a�[�r�x冕 △ 值_�p灃
|
||||
�a�[�r�x冕 6 值v�u灃
|
||||
�r漶d駏+值3徉}�
|
||||
�e�r皡m鉐_�m�e蒩_�w�u�y�p囃 �a�,�i�n�o癶;�
|
||||
�
|
||||
�n� �y�F�c�o皡=飢b�c鞄g�P�t�䛐�O鶺a�n鯫f�c�o癯)�}嘍c���u�o瑧
|
||||
�p�v�t蒨=�
|
||||
�n�d糾{簂
|
||||
�n�d�o鯜 �,�i�e穭o�l糾{簂
|
||||
�i�:�u�t�n�v�t暫a�s嗷{�e靿e磃=�h�.�n�d�v�t邲
|
||||
�f偯e碻 錏i鶲(�p�f�r�[聣)啦=區O�e�'匿&�r�[聣.�e�s嗷{�r�[聣.�e�s�n�k儺e�n鉿a�,�r�)徉}尠l� 牁e磃=�
|
||||
�n�l糾f�s囃
|
||||
�l齎 �l晴}徉
|
||||
�r偯l� �v�t�f�v嗷{椚_�.�l鶲=健e�n駃
|
||||
�v�t�p�y虞_�,�r�)徉
|
||||
� 虞_�.�n�l嗷{�r�k徉}�
|
||||
�f偯_�v�a�e鑻 錏r�u� �u灃
|
||||
罿}尠}潑
|
||||
�r鼰r��:�s�c�u�t�n�v�t暫a�s嗷{�e靿e磃=�h�.�n�d�o馧e�n鉾;尠i鶲(�)�
|
||||
�t�r啦 �l无
|
||||
�r偯l� �v�t�f�v嗷{�r啦 �a� �v�t�p�y�u�,�r�)徉}尠r�u� �;�
|
||||
�,尠f�e�c�:�u�t�n�v�t暫a�s嗷{�e靿e磃=�h�.�n�d�c�[�e�]徉
|
||||
� �v嗷{�f偯t�e��(�g蒬0芩 倘 概b�c餀 僇
|
||||
�g蒬0芢e�n�)�
|
||||
�g蒬0芢e�n�.�v���v�t�m囃 �g蒢;�
|
||||
�e靿_�v啦 錏c�c�:�a�e潑s�f糾n�l�;尠f�� �e靿_�e� �� �)�
|
||||
牁e磔s�f啦 �v�t徉_�e�.�p�(牁e磑 �g蒢;尠i鶲(牁e磔c�c�)�
|
||||
�e�;�
|
||||
罿}�,尠a�P�c糾f�c�o癯e�n鞂 �n�e熗 �_�o�)�
|
||||
� 補h�d�r嗷{�f偯t�e�� �e� 倘 �b�c韍)�
|
||||
�r偯k� � �e�)�
|
||||
�i蒩a�P�c�e樾 �e�[�y芩;�
|
||||
罿}�l� 錏i鶲(�h�.�n�d�o馧e�n鉾)�
|
||||
�i蒩b�d�P�c�v�t虯=偃]徉m鉐_�e�s�d蘢r��(�e�,�e褙A�n颾u�t�n�t�{�t� 值a�i靿m鉐e�n�.�r鼰r��(溧{�e�}溺 �g�e�s墓i鶺r敕n�l�a�u�n�[聣.�e�y�o騔t�s隙,熗m鉐_�e�s噸_�s禶a�u�n靺r嘗;�l�{�g�e�s匼]噸r�l曏r��(�i蓇0墓}�a�h�)�r�m�t蒬0芢_�j�t�o騔t�s隙)�`嘗;�
|
||||
�f偯t�搭�n靾
|
||||
�i蒩b�d�P�c�v�t芢p�h�a�l�)徉e�e�h�.�n�d�o馧e�n鉾.�s衋h�d�r墓
|
||||
罿}潑
|
||||
�d糾f�c�o癯e�n鞂 �n�e熗 �_�o�)�
|
||||
� 補h�d�r嗷{�f偯t�e�� �e� 倘 �b�c韍)�
|
||||
�r偯k� � �e�)�
|
||||
�i蒩a�(�y暫e�n銙k�]墓
|
||||
罿}� �s孇{�f偯!�i蒩b�d�[�e�]嗷{�h�.�n�d�v�t虯=偃]徉m鉐_�e�s�d蘉e�n鞂 �w乾u�t�n�r�u� �i蒩f�e裒$�v�t糨,�r�m�t蒢;蟥.�n蘉t�s嘗;�
|
||||
�f偯t�搭�n靾
|
||||
�i蒩b�d�[�e�]�u�(�n�e煻;�l�
|
||||
�i蒩b�d�[�e�]�u�(�n�e煻;�
|
||||
簂
|
||||
�d穭o�l糾f�c�o癯e�n鞂 �n�e熗 �_�o�)�
|
||||
� 補h�d�r嗷{�f偯t�e�� �e� 倘 �b�c韍)�
|
||||
�r偯k� � �e�)�
|
||||
�i蒩a�L�卟擥k�,�v�t�e曀)徉}�
|
||||
篸e�e�
|
||||
� 補t�s�i�e穭o�l�v�t芩 錏t�s�i�e穭o�l�v�t虯=偃]徉m鉐_�e�s�d穭o�l�v�t暫n� �n�i��(�e�r皡t�s�i�(溧{�e�}溺 �g�e�s墓`嘍b�d�h�)墓
|
||||
罿
|
||||
� �o�r��嫖t�s�i�e穭o�l�v�t芢p�h�a�l�)徉e�e�h�.�n�d�c�[�e�]�u�(�n�e煻;�
|
||||
簂
|
||||
�d糮o�a�:偯n�e暫h�d�r嗷=旅{�p噸e�n�.�d�m�n蘉n�e暫h�d�r墓
|
||||
簂
|
||||
�e銎l𢦀f糾f�c�o癯e�n靾 錏r�u� �i蒩b�d�.�s�n�o�r�(�e�)啞 �i蒩b�d�[�e�]�l�e蜂 糾[邲
|
||||
簂
|
||||
�a�:�p噸e�n�.�l㩗
|
||||
�l𩥝o�l糾m鉐_�e�s�a�L�卟㩗
|
||||
�e�v欀 �n�i��(�e�,�a�l�)�
|
||||
� 補h�d�r嗷{�f偯t�e�� �e� 倘 �t�n龢)�
|
||||
�i蒩b�d�[�e�]啦 佽;� �s孇i鶲(�r�.�A�a橉e�n靾)�
|
||||
�r偯l� �v�f�v�t嗷{�h�.�n�d侇e瘚 值[邲
|
||||
罿}尠}�l� 錏i鶲(�i蒩b�d�.�s�n�o�r�(�e�)嗷{�h�.�n�d�v�t虯=�h�.�n�d�v�t芢f�t�(�a�l� 俳 �a�l� 敕=�a�l�)徉}�
|
||||
簂
|
||||
�e�v鶪o�l糾f�c�o癯e�n鞂 �n�e煻 錏i鶲(�a�l�)�
|
||||
� �y�o鶲e�n靿=值'�r�g溥 錏t�s�i�e穭o�l�v�t虯=偃]徉}�l� � 萱r�y�s�r�(�e�)嗷{�o犕(�t健e磃o鶲e�n靾 錏t�s�i�e穭o�l侇e瘚 值[邲
|
||||
罿}尠}�l� 錏i鶲(�i蒩b�d�L�卟漖h�O�P�p�t橉e�n靾)�
|
||||
�i蒩b�d�L�卟𤧟e�n鉾 值t�s�i�e穭o�l�v�t芢f�t�(�a�l� 俳 �a�l� 敕=�a�l�)徉}�
|
||||
簂
|
||||
�e�t糾f�c�o癯)�
|
||||
�i蒩b�d� 值{縳
|
||||
簂
|
||||
�s�L�卟𡠩 �n�i��(嗷{�h�.�n�d�c� 值{縳
|
||||
罿}徉c�s蒨E�n靿{�o�t�c�r�a�,�a�l�)�
|
||||
�i蒩n�e啦 �m灃
|
||||
�i蒩h�d�r啦 �n�e瑧
|
||||
�i蒩e�b�(墓
|
||||
罿e�b�(嗷{�p�v�t蒩a�(�i蒩n�e暫t�s�a�l�)徉}�e�r��(嗷{�p�v�t蒩r�o�(�i蒩n�e暫t�s�a�l�)徉}�;�p冪v�t啦 �e�;�
|
||||
�e銦n�r�l蛻)啦>�}暫0墓
|
||||
篴(墓
|
||||
BIN
Binary file not shown.
@@ -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})()
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
require('./client.js');
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"maxplayers" : 100,
|
||||
"name" : "RAGE:MP Unofficial server",
|
||||
"gamemode" : "freeroam",
|
||||
"stream-distance" : 300.0,
|
||||
"announce" : false,
|
||||
"csharp" : "disabled",
|
||||
"port": 22005
|
||||
}
|
||||
@@ -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?
|
||||
@@ -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 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
|
||||
|
||||
Learn more about the recommended Project Setup and IDE Support in the [Vue Docs TypeScript Guide](https://vuejs.org/guide/typescript/overview.html#project-setup).
|
||||
@@ -0,0 +1,16 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Apex CEF</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@400;500;600;700&family=Rajdhani:wght@400;500;600;700&display=swap" rel="stylesheet">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<script type="module" src="/src/main.ts"></script>
|
||||
</body>
|
||||
</html>
|
||||
Generated
+1256
File diff suppressed because it is too large
Load Diff
@@ -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"
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 9.3 KiB |
@@ -0,0 +1,24 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<symbol id="bluesky-icon" viewBox="0 0 16 17">
|
||||
<g clip-path="url(#bluesky-clip)"><path fill="#08060d" d="M7.75 7.735c-.693-1.348-2.58-3.86-4.334-5.097-1.68-1.187-2.32-.981-2.74-.79C.188 2.065.1 2.812.1 3.251s.241 3.602.398 4.13c.52 1.744 2.367 2.333 4.07 2.145-2.495.37-4.71 1.278-1.805 4.512 3.196 3.309 4.38-.71 4.987-2.746.608 2.036 1.307 5.91 4.93 2.746 2.72-2.746.747-4.143-1.747-4.512 1.702.189 3.55-.4 4.07-2.145.156-.528.397-3.691.397-4.13s-.088-1.186-.575-1.406c-.42-.19-1.06-.395-2.741.79-1.755 1.24-3.64 3.752-4.334 5.099"/></g>
|
||||
<defs><clipPath id="bluesky-clip"><path fill="#fff" d="M.1.85h15.3v15.3H.1z"/></clipPath></defs>
|
||||
</symbol>
|
||||
<symbol id="discord-icon" viewBox="0 0 20 19">
|
||||
<path fill="#08060d" d="M16.224 3.768a14.5 14.5 0 0 0-3.67-1.153c-.158.286-.343.67-.47.976a13.5 13.5 0 0 0-4.067 0c-.128-.306-.317-.69-.476-.976A14.4 14.4 0 0 0 3.868 3.77C1.546 7.28.916 10.703 1.231 14.077a14.7 14.7 0 0 0 4.5 2.306q.545-.748.965-1.587a9.5 9.5 0 0 1-1.518-.74q.191-.14.372-.293c2.927 1.369 6.107 1.369 8.999 0q.183.152.372.294-.723.437-1.52.74.418.838.963 1.588a14.6 14.6 0 0 0 4.504-2.308c.37-3.911-.63-7.302-2.644-10.309m-9.13 8.234c-.878 0-1.599-.82-1.599-1.82 0-.998.705-1.82 1.6-1.82.894 0 1.614.82 1.599 1.82.001 1-.705 1.82-1.6 1.82m5.91 0c-.878 0-1.599-.82-1.599-1.82 0-.998.705-1.82 1.6-1.82.893 0 1.614.82 1.599 1.82 0 1-.706 1.82-1.6 1.82"/>
|
||||
</symbol>
|
||||
<symbol id="documentation-icon" viewBox="0 0 21 20">
|
||||
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="m15.5 13.333 1.533 1.322c.645.555.967.833.967 1.178s-.322.623-.967 1.179L15.5 18.333m-3.333-5-1.534 1.322c-.644.555-.966.833-.966 1.178s.322.623.966 1.179l1.534 1.321"/>
|
||||
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M17.167 10.836v-4.32c0-1.41 0-2.117-.224-2.68-.359-.906-1.118-1.621-2.08-1.96-.599-.21-1.349-.21-2.848-.21-2.623 0-3.935 0-4.983.369-1.684.591-3.013 1.842-3.641 3.428C3 6.449 3 7.684 3 10.154v2.122c0 2.558 0 3.838.706 4.726q.306.383.713.671c.76.536 1.79.64 3.581.66"/>
|
||||
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M3 10a2.78 2.78 0 0 1 2.778-2.778c.555 0 1.209.097 1.748-.047.48-.129.854-.503.982-.982.145-.54.048-1.194.048-1.749a2.78 2.78 0 0 1 2.777-2.777"/>
|
||||
</symbol>
|
||||
<symbol id="github-icon" viewBox="0 0 19 19">
|
||||
<path fill="#08060d" fill-rule="evenodd" d="M9.356 1.85C5.05 1.85 1.57 5.356 1.57 9.694a7.84 7.84 0 0 0 5.324 7.44c.387.079.528-.168.528-.376 0-.182-.013-.805-.013-1.454-2.165.467-2.616-.935-2.616-.935-.349-.91-.864-1.143-.864-1.143-.71-.48.051-.48.051-.48.787.051 1.2.805 1.2.805.695 1.194 1.817.857 2.268.649.064-.507.27-.857.49-1.052-1.728-.182-3.545-.857-3.545-3.87 0-.857.31-1.558.8-2.104-.078-.195-.349-1 .077-2.078 0 0 .657-.208 2.14.805a7.5 7.5 0 0 1 1.946-.26c.657 0 1.328.092 1.946.26 1.483-1.013 2.14-.805 2.14-.805.426 1.078.155 1.883.078 2.078.502.546.799 1.247.799 2.104 0 3.013-1.818 3.675-3.558 3.87.284.247.528.714.528 1.454 0 1.052-.012 1.896-.012 2.156 0 .208.142.455.528.377a7.84 7.84 0 0 0 5.324-7.441c.013-4.338-3.48-7.844-7.773-7.844" clip-rule="evenodd"/>
|
||||
</symbol>
|
||||
<symbol id="social-icon" viewBox="0 0 20 20">
|
||||
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M12.5 6.667a4.167 4.167 0 1 0-8.334 0 4.167 4.167 0 0 0 8.334 0"/>
|
||||
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M2.5 16.667a5.833 5.833 0 0 1 8.75-5.053m3.837.474.513 1.035c.07.144.257.282.414.309l.93.155c.596.1.736.536.307.965l-.723.73a.64.64 0 0 0-.152.531l.207.903c.164.715-.213.991-.84.618l-.872-.52a.63.63 0 0 0-.577 0l-.872.52c-.624.373-1.003.094-.84-.618l.207-.903a.64.64 0 0 0-.152-.532l-.723-.729c-.426-.43-.289-.864.306-.964l.93-.156a.64.64 0 0 0 .412-.31l.513-1.034c.28-.562.735-.562 1.012 0"/>
|
||||
</symbol>
|
||||
<symbol id="x-icon" viewBox="0 0 19 19">
|
||||
<path fill="#08060d" fill-rule="evenodd" d="M1.893 1.98c.052.072 1.245 1.769 2.653 3.77l2.892 4.114c.183.261.333.48.333.486s-.068.089-.152.183l-.522.593-.765.867-3.597 4.087c-.375.426-.734.834-.798.905a1 1 0 0 0-.118.148c0 .01.236.017.664.017h.663l.729-.83c.4-.457.796-.906.879-.999a692 692 0 0 0 1.794-2.038c.034-.037.301-.34.594-.675l.551-.624.345-.392a7 7 0 0 1 .34-.374c.006 0 .93 1.306 2.052 2.903l2.084 2.965.045.063h2.275c1.87 0 2.273-.003 2.266-.021-.008-.02-1.098-1.572-3.894-5.547-2.013-2.862-2.28-3.246-2.273-3.266.008-.019.282-.332 2.085-2.38l2-2.274 1.567-1.782c.022-.028-.016-.03-.65-.03h-.674l-.3.342a871 871 0 0 1-1.782 2.025c-.067.075-.405.458-.75.852a100 100 0 0 1-.803.91c-.148.172-.299.344-.99 1.127-.304.343-.32.358-.345.327-.015-.019-.904-1.282-1.976-2.808L6.365 1.85H1.8zm1.782.91 8.078 11.294c.772 1.08 1.413 1.973 1.425 1.984.016.017.241.02 1.05.017l1.03-.004-2.694-3.766L7.796 5.75 5.722 2.852l-1.039-.004-1.039-.004z" clip-rule="evenodd"/>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.9 KiB |
@@ -0,0 +1,20 @@
|
||||
<template>
|
||||
<Chat />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import Chat from './components/Chat.vue';
|
||||
</script>
|
||||
|
||||
<style>
|
||||
/* Reset everything */
|
||||
body, html {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background-color: transparent;
|
||||
overflow: hidden;
|
||||
user-select: none;
|
||||
}
|
||||
</style>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 44 KiB |
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 8.5 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="37.07" height="36" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 198"><path fill="#41B883" d="M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0h47.36Z"></path><path fill="#41B883" d="m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0H0Z"></path><path fill="#35495E" d="M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0H50.56Z"></path></svg>
|
||||
|
After Width: | Height: | Size: 496 B |
@@ -0,0 +1,450 @@
|
||||
<template>
|
||||
<div id="chat-container" :class="{ inactive: !chatActive, active: chatActive }">
|
||||
<div id="chat-wrapper">
|
||||
<div id="chat-messages" ref="messagesContainer">
|
||||
<div v-for="(msg, index) in chatMessages" :key="index" class="chat-message" v-html="formatMessage(msg)"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="chat-input-container" :class="{ active: inputActive }">
|
||||
<span id="chat-prefix">{{ chatPrefix }}</span>
|
||||
<input
|
||||
type="text"
|
||||
id="chat-input"
|
||||
ref="chatInput"
|
||||
v-model="inputValue"
|
||||
@keydown="handleKeyDown"
|
||||
maxlength="128"
|
||||
autocomplete="off"
|
||||
spellcheck="false"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, onMounted, nextTick } from 'vue';
|
||||
import { Rpc } from '@entityseven/rage-fw-rpc';
|
||||
|
||||
const chatRpc = new Rpc();
|
||||
|
||||
// State
|
||||
const chatMessages = ref<any[]>([]);
|
||||
const chatActive = ref(false);
|
||||
const inputActive = ref(false);
|
||||
const inputValue = ref('');
|
||||
const chatPrefix = ref('Say:');
|
||||
const messagesContainer = ref<HTMLElement | null>(null);
|
||||
const chatInput = ref<HTMLInputElement | null>(null);
|
||||
|
||||
let inactiveTimer: ReturnType<typeof setTimeout> | null = null;
|
||||
const MAX_MESSAGES = 6;
|
||||
const INACTIVE_TIMEOUT = 6000;
|
||||
|
||||
const setInactive = () => {
|
||||
if (!inputActive.value) {
|
||||
chatActive.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
const setActive = () => {
|
||||
chatActive.value = true;
|
||||
if (inactiveTimer) {
|
||||
clearTimeout(inactiveTimer);
|
||||
inactiveTimer = null;
|
||||
}
|
||||
};
|
||||
|
||||
const resetInactiveTimer = () => {
|
||||
setActive();
|
||||
if (inactiveTimer) clearTimeout(inactiveTimer);
|
||||
if (!inputActive.value) {
|
||||
inactiveTimer = setTimeout(() => {
|
||||
setInactive();
|
||||
}, INACTIVE_TIMEOUT);
|
||||
}
|
||||
};
|
||||
|
||||
const openChat = (withSlash = false) => {
|
||||
if (inputActive.value) return;
|
||||
chatActive.value = true;
|
||||
inputActive.value = true;
|
||||
|
||||
if (withSlash) {
|
||||
inputValue.value = '/';
|
||||
chatPrefix.value = 'Cmd:';
|
||||
} else {
|
||||
inputValue.value = '';
|
||||
chatPrefix.value = 'Say:';
|
||||
}
|
||||
|
||||
nextTick(() => {
|
||||
chatInput.value?.focus();
|
||||
});
|
||||
|
||||
if (typeof (window as any).mp !== 'undefined') {
|
||||
(window as any).mp.invoke('focus', true);
|
||||
}
|
||||
chatRpc.callClient('chat:toggleInput', [true]);
|
||||
};
|
||||
|
||||
const closeChat = () => {
|
||||
if (!inputActive.value) return;
|
||||
inputActive.value = false;
|
||||
inputValue.value = '';
|
||||
chatInput.value?.blur();
|
||||
|
||||
if (typeof (window as any).mp !== 'undefined') {
|
||||
(window as any).mp.invoke('focus', false);
|
||||
}
|
||||
|
||||
chatRpc.callClient('chat:toggleInput', [false]);
|
||||
resetInactiveTimer();
|
||||
};
|
||||
|
||||
const handleKeyDown = (e: KeyboardEvent) => {
|
||||
if (e.key === 'Enter') {
|
||||
e.preventDefault();
|
||||
sendMessage();
|
||||
} else if (e.key === 'Escape') {
|
||||
e.preventDefault();
|
||||
closeChat();
|
||||
}
|
||||
};
|
||||
|
||||
const sendMessage = () => {
|
||||
const msg = inputValue.value.trim();
|
||||
if (msg.length > 0) {
|
||||
chatRpc.callClient('chat:sendMessage', [msg]);
|
||||
}
|
||||
closeChat();
|
||||
};
|
||||
|
||||
const addMessage = (data: any) => {
|
||||
resetInactiveTimer();
|
||||
chatMessages.value.push(data);
|
||||
if (chatMessages.value.length > MAX_MESSAGES) {
|
||||
chatMessages.value.shift();
|
||||
}
|
||||
nextTick(() => {
|
||||
if (messagesContainer.value) {
|
||||
messagesContainer.value.scrollTop = messagesContainer.value.scrollHeight;
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
const clearChat = () => {
|
||||
chatMessages.value = [];
|
||||
};
|
||||
|
||||
const escapeHtml = (text: string) => {
|
||||
const div = document.createElement('div');
|
||||
div.textContent = text;
|
||||
return div.innerHTML;
|
||||
};
|
||||
|
||||
const formatTime = (timestamp: number) => {
|
||||
const date = new Date(timestamp);
|
||||
const hours = date.getHours().toString().padStart(2, '0');
|
||||
const minutes = date.getMinutes().toString().padStart(2, '0');
|
||||
return `${hours}:${minutes}`;
|
||||
};
|
||||
|
||||
const formatMessage = (data: any) => {
|
||||
let html = '';
|
||||
switch (data.type) {
|
||||
case 'player': {
|
||||
const time = formatTime(data.timestamp || Date.now());
|
||||
html = `
|
||||
<span class="msg-timestamp">[${time}]</span>
|
||||
<span class="msg-name player">${escapeHtml(data.name)}</span>
|
||||
<span class="msg-id">(${data.id})</span>
|
||||
<span class="msg-separator">>></span>
|
||||
<span class="msg-text">${escapeHtml(data.text)}</span>
|
||||
`;
|
||||
break;
|
||||
}
|
||||
case 'global':
|
||||
html = `
|
||||
<span class="msg-global-tag">[GLOBAL]</span>
|
||||
<span class="msg-name global">${escapeHtml(data.name)}</span>
|
||||
<span class="msg-id global">(${data.id})</span>
|
||||
<span class="msg-separator" style="color: #ff3333;">>></span>
|
||||
<span class="msg-text global">${escapeHtml(data.text)}</span>
|
||||
`;
|
||||
break;
|
||||
case 'admin': {
|
||||
let tagClass = '';
|
||||
let tag = '';
|
||||
if (data.adminLevel >= 10) {
|
||||
tagClass = 'owner';
|
||||
tag = 'OWNER';
|
||||
} else if (data.adminLevel === 9) {
|
||||
tagClass = 'admin';
|
||||
tag = 'ADMIN';
|
||||
} else {
|
||||
tagClass = 'mod';
|
||||
tag = 'ADMIN';
|
||||
}
|
||||
html = `
|
||||
<span class="msg-admin-tag ${tagClass}">${tag}</span>
|
||||
<span class="msg-name ${tagClass}">${escapeHtml(data.name)}</span>
|
||||
<span class="msg-separator" style="color: inherit;">>></span>
|
||||
<span class="msg-text ${tagClass}">${escapeHtml(data.text)}</span>
|
||||
`;
|
||||
break;
|
||||
}
|
||||
case 'system':
|
||||
html = `<span class="msg-system">${escapeHtml(data.text)}</span>`;
|
||||
break;
|
||||
case 'error':
|
||||
html = `<span class="msg-error">${escapeHtml(data.text)}</span>`;
|
||||
break;
|
||||
case 'success':
|
||||
html = `<span class="msg-success">${escapeHtml(data.text)}</span>`;
|
||||
break;
|
||||
default:
|
||||
html = `<span class="msg-text">${escapeHtml(data.text)}</span>`;
|
||||
}
|
||||
return html;
|
||||
};
|
||||
|
||||
// Expose legacy API for compatibility but also register via RPC
|
||||
onMounted(() => {
|
||||
(window as any).openChat = openChat;
|
||||
(window as any).closeChat = closeChat;
|
||||
(window as any).addMessage = addMessage;
|
||||
(window as any).clearChat = clearChat;
|
||||
|
||||
chatRpc.register('chat:addMessage', (data: any) => {
|
||||
addMessage(data);
|
||||
});
|
||||
|
||||
chatRpc.register('chat:clear', () => {
|
||||
clearChat();
|
||||
});
|
||||
|
||||
window.addEventListener('keydown', (e) => {
|
||||
if ((e.key === 't' || e.key === 'T') && !inputActive.value) {
|
||||
e.preventDefault();
|
||||
openChat(false);
|
||||
} else if (e.key === '/' && !inputActive.value) {
|
||||
e.preventDefault();
|
||||
openChat(true);
|
||||
}
|
||||
});
|
||||
|
||||
setInactive();
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
#chat-container {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 420px;
|
||||
font-family: 'Rajdhani', sans-serif;
|
||||
font-weight: 500;
|
||||
transition: opacity 0.3s ease;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
#chat-container.inactive {
|
||||
opacity: 0.15;
|
||||
}
|
||||
|
||||
#chat-container.active {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
#chat-wrapper {
|
||||
min-height: 140px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
|
||||
#chat-messages {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: flex-start;
|
||||
padding: 6px 10px;
|
||||
background: linear-gradient(180deg, rgba(0, 0, 0, 0.6) 0%, rgba(0, 0, 0, 0.3) 100%);
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
::v-deep(.chat-message) {
|
||||
padding: 1px 4px;
|
||||
margin: 0;
|
||||
font-size: 13px;
|
||||
line-height: 1.2;
|
||||
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.9), 0 0 8px rgba(0, 0, 0, 0.6);
|
||||
animation: messageIn 0.15s ease-out;
|
||||
word-wrap: break-word;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
|
||||
@keyframes messageIn {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateX(-10px);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateX(0);
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep(.msg-timestamp) {
|
||||
color: #888888;
|
||||
font-size: 10px;
|
||||
font-family: 'Orbitron', sans-serif;
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
::v-deep(.msg-global-tag) {
|
||||
color: #ff3333;
|
||||
font-weight: 700;
|
||||
font-family: 'Orbitron', sans-serif;
|
||||
font-size: 11px;
|
||||
text-transform: uppercase;
|
||||
margin-right: 3px;
|
||||
}
|
||||
|
||||
::v-deep(.msg-admin-tag) {
|
||||
font-weight: 700;
|
||||
font-family: 'Orbitron', sans-serif;
|
||||
font-size: 11px;
|
||||
text-transform: uppercase;
|
||||
margin-right: 3px;
|
||||
}
|
||||
|
||||
::v-deep(.msg-admin-tag.owner) {
|
||||
color: #ff3333;
|
||||
}
|
||||
|
||||
::v-deep(.msg-admin-tag.admin) {
|
||||
color: #ff8c00;
|
||||
}
|
||||
|
||||
::v-deep(.msg-admin-tag.mod) {
|
||||
color: #33ff33;
|
||||
}
|
||||
|
||||
::v-deep(.msg-name) {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
::v-deep(.msg-name.player) {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
|
||||
::v-deep(.msg-name.owner) {
|
||||
color: #ff3333;
|
||||
}
|
||||
|
||||
::v-deep(.msg-name.admin) {
|
||||
color: #ff8c00;
|
||||
}
|
||||
|
||||
::v-deep(.msg-name.mod) {
|
||||
color: #33ff33;
|
||||
}
|
||||
|
||||
::v-deep(.msg-name.global) {
|
||||
color: #ff3333;
|
||||
}
|
||||
|
||||
::v-deep(.msg-id) {
|
||||
color: #888888;
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
::v-deep(.msg-id.global) {
|
||||
color: #ff3333;
|
||||
}
|
||||
|
||||
::v-deep(.msg-separator) {
|
||||
color: #666666;
|
||||
margin: 0 4px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
::v-deep(.msg-text) {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
::v-deep(.msg-text.owner) {
|
||||
color: #ff3333;
|
||||
}
|
||||
|
||||
::v-deep(.msg-text.admin) {
|
||||
color: #ff8c00;
|
||||
}
|
||||
|
||||
::v-deep(.msg-text.mod) {
|
||||
color: #33ff33;
|
||||
}
|
||||
|
||||
::v-deep(.msg-text.global) {
|
||||
color: #ff3333;
|
||||
}
|
||||
|
||||
::v-deep(.msg-system) {
|
||||
color: #ffcc00;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
::v-deep(.msg-error) {
|
||||
color: #ff4444;
|
||||
}
|
||||
|
||||
::v-deep(.msg-success) {
|
||||
color: #44ff44;
|
||||
}
|
||||
|
||||
#chat-input-container {
|
||||
display: none;
|
||||
align-items: center;
|
||||
background: rgba(0, 0, 0, 0.9);
|
||||
border-top: 1px solid rgba(255, 255, 255, 0.1);
|
||||
padding: 8px 10px;
|
||||
pointer-events: auto;
|
||||
}
|
||||
|
||||
#chat-input-container.active {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
#chat-prefix {
|
||||
color: #ffffff;
|
||||
font-family: 'Orbitron', sans-serif;
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
margin-right: 8px;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
#chat-input {
|
||||
flex: 1;
|
||||
background: rgba(255, 255, 255, 0.08);
|
||||
border: 1px solid rgba(255, 255, 255, 0.15);
|
||||
border-radius: 3px;
|
||||
padding: 6px 10px;
|
||||
color: #ffffff;
|
||||
font-family: 'Rajdhani', sans-serif;
|
||||
font-size: 13px;
|
||||
font-weight: 500;
|
||||
outline: none;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
#chat-input:focus {
|
||||
background: rgba(255, 255, 255, 0.12);
|
||||
border-color: rgba(255, 255, 255, 0.25);
|
||||
}
|
||||
|
||||
#chat-input::placeholder {
|
||||
color: rgba(255, 255, 255, 0.3);
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,4 @@
|
||||
import { createApp } from 'vue'
|
||||
import App from './App.vue'
|
||||
|
||||
createApp(App).mount('#app')
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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"]
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"files": [],
|
||||
"references": [
|
||||
{ "path": "./tsconfig.app.json" },
|
||||
{ "path": "./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"]
|
||||
}
|
||||
@@ -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,
|
||||
}
|
||||
})
|
||||
Generated
+1013
File diff suppressed because it is too large
Load Diff
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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 };
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "esnext",
|
||||
"module": "esnext",
|
||||
"moduleResolution": "node",
|
||||
"strict": true,
|
||||
"baseUrl": ".",
|
||||
"paths": {
|
||||
"@/*": ["src/*"]
|
||||
}
|
||||
},
|
||||
"include": ["src/**/*"]
|
||||
}
|
||||
@@ -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'
|
||||
}
|
||||
}
|
||||
});
|
||||
Generated
+38
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"name": "@apex-freeroam/core",
|
||||
"version": "1.0.0",
|
||||
"main": "index.js",
|
||||
"dependencies": {
|
||||
"@entityseven/rage-fw-rpc": "^0.2.5"
|
||||
}
|
||||
}
|
||||
@@ -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}`;
|
||||
});
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"mysql": {
|
||||
"host": "localhost",
|
||||
"user": "root",
|
||||
"password": "",
|
||||
"database": "apex_freeroam"
|
||||
},
|
||||
"debugger": true,
|
||||
"cef": "dev"
|
||||
}
|
||||
Reference in New Issue
Block a user