C .
ODE
G
AMELET
# TwilightWarsEventsExp <h2><font color=red> 本模組由於過於雜亂,為了提高可維護性,以及進行效能優化,將開始進行程式碼的重構計畫。 如有需要請改用 [TWEventsBetterExp](https://code.gamelet.com/edit/TWEventsBetterExp) 模組,近期會開始慢慢將本模組的部分功能搬遷過去。 未來本模組將不再添加新功能,僅進行維護,如非必要請勿加載此模組。 </font></h2> 本專案為光暈戰記的擴充模組,主要是建立在 **[TwilightWarsLib](/edit/TwilightWarsLib)** 的基礎之上,添加一些小東西。本專案並不包含 **[TwilightWarsEvents](/edit/TwilightWarsEvents)** 模組。 本模組並不會覆蓋原有的動作、檢查,所有本模組新增的檢查、動作等,都會被整合在**光暈戰記 / 擴充包**內,且不會新增任何跟光暈無關的檢查或動作,希望是一個純淨的光暈模組,跟光暈無關的相關事件,有需要的話會在 **[CgEventsExp](/edit/CgEventsExp)** 做更新。 本專案開放查詢原始碼,所有的檢查、動作,皆有在本專案的 **Test** 資料夾內做實際範例,歡迎自行查看使用方法,也歡迎自行進入程式區內,看各個檢查、動作是如何完成。 本人希望弄一個可以讓大家互相交流、維護,甚至更新的這麼一個光暈同人模組,我覺得這樣共同成長,才會讓嘎母變得更成熟,所以如果你有什麼好想法,也都歡迎提供給我。 另外個人創了一個第三方的 **[嘎母討論區(Discord)](https://discord.gg/hZKQzRfPJM)** ,主要是希望大家有一個好的交流平台,可以一起討論一些設計,除了光暈,還有其他非光暈的專案等等,甚至是能夠一起合作,讓作者們有機會推出更多優質的作品。 有任何 BUG 的話都歡迎回報,會盡量在最短的時間內處裡掉。 **[Google 試算表 - 光暈戰記](https://docs.google.com/spreadsheets/d/1kRPdI6caisjZuHJGmCjB3kHBveR2RVAeTJoyCmqOZVs/edit?usp=sharing)** 本專案有些需要查詢的地方,例如武器道具的索引值等等,可以由此試算表查詢。 ## 其他工具 - [ImageIndex 查詢器](https://paint.gamelet.online/?version=0.0.27) ## 作者 **[cook1470](/profile/cook1470)**
# TwilightWarsEventsEnhFF 本專案為 **TwilightWarsEventsEnh** 模組的 **beta版本** ,「FF」是「Fast Forward」的縮寫,代表快速開發。 因為原模組的開發緩慢,所以會逐漸把原模組的功能移植至本專案完善。 ## 前言 本專案主要由 **[雪姬](/profile/setsuki)** 維護。 歡迎加入 **[Discord群組](https://discord.gg/seJwuzCbWq)** 。 ## 使用須知 ***本專案開源,若有不明之處可查看 [test](cg://source/test/README.md)*** 本專案的主要目的是要讓事件表編輯如同寫程式一般。 不只專注於 **效能** ,會更著重在提供更大的 **彈性** 。 另外,本專案不會立即修復不嚴重的錯誤。 當測試穩定後,未來會將事件表功能從本專案移植回原模組,屆時該功能可能會在一段時間後,於本模組移除。 Enh的測試、回報需要你的參與,歡迎加入 **[Discord群組](https://discord.gg/seJwuzCbWq)** 。 ## 作者 **[EnhProject](/profile/EnhProject)** - **[不會取名字](/profile/buhuechuminzu)** - **[雪姬](/profile/setsuki)** --- # TwilightWarsEventsEnhFF "FF" stands for "Fast Forward", and can be considered as **beta version** of original **TWEventsEnh**. Due to slow updates of the original Enh, the functionality from mainline Enh would be porting and refined here. ## Additional This project is mainly maintained by [雪姬](/profile/setsuki). The **[Enh Discord server](https://discord.gg/seJwuzCbWq)** is also welcoming participants! ## Important ***It is recommanded to read source code and [test](cg://source/test/README.md) of this project!*** The main concept is to make events work as code. Not just focused on **performance**, but also provide more **flexibility**. This project will not repair bugs instantly unless they are critical. If there are any bugs, they will be fixed before integrated into the main Enh. Enh needs your participate for testing, asking questions or reporting bugs! Features merged into the mainline Enh will be removed here. ## Authors **[EnhProject](/profile/EnhProject)** - **[不會取名字](/profile/buhuechuminzu)** - **[雪姬](/profile/setsuki)**
# 花靈宮模組 - 作者 **[妮娜](/profile/LoliPrincessNina)** - 使用此模組為你的專案增加新的陣營和技能 - 注意電腦AI使用技能時有機會比較蠢 - 過快使用技能將會有概率出BUG - 此為測試版本,有BUG很正常 - 查詢及回報請到<b><a href="https://gamelet.online/user/nina/board">我的留言板</a></b> # 說明 - 為了方便各位照搬/測試花靈宮的任務,此處將填上花靈宮裡所有用到的觸發/檢查/動作 - 有相當一部分代碼是來自TwilightWarsEventsExp和CgEventsExp(下方不列出;部分存在變更,與原版有差異) - 若希望使用以上觸發/檢查/動作,請用原版,此處不會有更新 ## 目前提供支援的有: ## 陣營 - 花靈宮 - 盜賊幫 - 無魂軍 - 智械兵團 - 蒼鎧營 <!-- --> ## 觸發 #### 角色 - 角色說話 - 人物受傷(內建排除傷害類型/傷害數值比對) #### 武器道具 - 使用消耗型道具(可儲存道具變數) #### 技能 - 發動技能 <!-- --> ## 檢查 #### 技能 - 角色技能狀態 - 手持武器技能 #### 角色 - 角色狀態附加 - 角色面向某物 - 角色燃燒狀態 - 角色B是否角色A的敵人 - 角色是否可直視某點/物 #### 地圖 - 可行走座標 - 兩點之間的距離 #### 存讀 - 儲存變數 - 在陣列中找到字串 - 以符號分離字串 - 是否存在專案資源 #### 地圖機關 - 燭火機關狀態 - 找出所有地圖機關(迴圈) <!-- --> ## 動作 - 筆記 #### 角色 - 新增角色 - 角色漂浮能力 - 設定角色演員 - 移動角色位置 - 設定角色大小 - 角色可否攻擊 - 角色死亡訊息 - 人物停止說話 - 角色特殊屬性 - 取得玩家陣營演員角色 - 角色醉酒管理 - 角色反彈子彈 - 放下旗幟 - 鎖定面向方向 - 傳送角色加血訊息 - 傳送角色傷害訊息 - 傳送角色閃現至定點訊息 - 設定最大血量 #### 技能 - 角色結束技能 - 限制使用技能 - 設定武器技能 - 傳送技能訊息(欲自定義參數可在此處查看:<a href="https://docs.google.com/spreadsheets/d/1GAJctoQ3f1A_DutUhTHeSFdPY4ex0_U-cUnnuCS5-_g/edit?usp=sharing">技能參數</a>) - 白鳥拳 - 正/反旋風劈掌 - 千手如來 - 百裂拳 - 元氣玉 - 釋放拳法 #### 任務流程 - 跳出系統訊息 - 更多遊戲規則 - 角色對己說話 - 改變任務代碼 #### 存讀 - 工作階段儲存空間數據庫存取 - 以符號分離字串 - 定義Json變數 - 轉換Json為字串 - 轉換Json為物件 - 預載單一資源 #### 特效 - 聖光術 - 角色燃燒狀態 - 應用攻擊屬性 - 震地 - 吸血/血刃 - 劍氣光彈 - 地圖痕跡 - 冰氣 - 火箭 - 快跳文字 - 光環 - 衝擊波 - 地圖動畫 - 擊退人物 - 光印 - 冷卻 - 防護罩 - 防護罩泡泡 - 冰魂護盾 - 血滴 - 自動移除動畫 - 反衝箭 - 定時炸彈 - 空心虛線圓 #### 武器道具 - 背包道具設定 - 攜帶式道具設定 - 切換預設武器 - 切換至另一手 - 裝填武器彈藥 - 新增任務道具 - 新增武器道具 - 人物裝備道具 - 人物裝備武器 - 移除武器道具 - 玩家背包道具擁有的數量 - 設定花靈宮道具 - 遊戲道具配置 #### 地圖 - 隨機可行走座標 #### 隨機 - 隨機設定陣營 - 隨機角色演員 - 隨機使用技能 - 隨機物件代碼 - 隨機字串 - 隨機角色 #### 陣營 - 設定陣營/暱稱/技能圖示 - 新增陣營 - 改變陣營色彩風格(4個子項被拆分成2個新動作) - 回朔至初始陣營 #### 地圖機關 - 控制燭火機關 - 新增可推石塊 - 新增告示牌(NPC角色包括同人陣營選項)
# CgEventsRoguelike 專門為 Roguelike 遊戲設計的事件表擴充包。把「卡片定義 + 卡片實體容器」這兩件事拆開做透徹,讓所有「抽卡、發牌、戰利品池、商店進貨、背包合成、保底機制」都能用 GUI 動作組合出來。 ## 它解決的是什麼問題 Roguelike 遊戲的核心循環不外乎兩件事: 1. **這張卡是什麼?** —— 火球的傷害是多少、稀有度是哪一級、抽到的權重是多少(卡片的種類定義)。 2. **這張卡現在在誰那邊?** —— 在抽牌堆、手牌、棄牌堆、玩家擁有清單、商店貨架、背包(卡片實體的容器與流轉)。 純事件表要做這兩件事,得手算總權重、用迴圈累減、處理不重複、動態維護容器,還得區分「種類」與「實體」(手上兩張一模一樣的卡)。對只熟悉 GUI 的創作者來說門檻很高。 `CgEventsRoguelike` 把上述能力切成兩個正交模組: - **卡片字典(Catalog)** —— 定義「有哪些卡種」的字典。每個卡種有 kindId、weight(抽中機率)、maxCopies(持有上限)、data(基礎資料)。三種抽法:等權抽樣、保底抽、分層抽。 - **牌堆(Stack)** —— 裝實體卡片的容器(有序、可重複)。每張卡有自動的 instanceId,可獨立攜帶 data(用來表達升級、詞綴等實體狀態)。 - **橋接動詞** —— 一個動作從字典加權抽 N 個 → 自動生成實體推入牌堆。 - **「順便推入牌堆」可選模式** —— 6 個抽法動作都可勾選,抽完直接寫進指定牌堆。少寫一個動作、多人時少送一次封包。 ## 適合什麼場景 **STS 三堆戰鬥**:永久牌組 → 戰前複製到抽牌堆 + 洗牌 → 抽 5 進手牌 → 打牌進棄牌堆 → 結束回合洗回。 **升級三選一**:技能字典中加權抽 3 個 kindId 不重複當候選 → 玩家選一張 → 進入「玩家技能」牌堆。同卡多次選到可以堆疊(用 data 表達升級狀態)。 **戰利品池跨玩家共池**:一個戰利品池配上「每個玩家擁有」的對照堆 + 字典裡的同種上限(普通×5、稀有×1)→ 玩家點抽即可,自動避開達上限的卡種。 **商店每日進貨**:開店時從字典加權抽 3 件商品到貨架 → 玩家點商品買走 → 對應格子變空 → 補貨按鈕清空貨架重抽。 **背包合成**:玩家背包中數鐵 ≥1 且水 ≥1 才能合成藥水 → 消耗素材 → 推入藥水。檢查 + 否則觸發 處理素材不足。 **保底抽卡**:「保底:抽卡」一個動作搞定,自動維護進度變數,達 N 次未中強制保底。 **分層戰利品**:「分層抽」一個動作搞定。先依權重選池(普通 70% / 稀有 25% / 傳說 5%),再從該池內抽。深度感由開發者用「卡片字典:設定權重」動態調整即可。 **牌堆構築**:玩家擁有的牌組就是一個 Stack,新獲得的卡 push 進去,刪除 / 升級單張靠 instanceId 精準操作。 ## 設計理念 **字典 vs 容器分離**。字典回答「卡種長什麼樣」、容器回答「現在誰拿著哪幾張」。這個切法讓「抽卡 → 生成實體 → 進入容器」變成 3 個獨立可組合的步驟,而不是糾纏成一團。 **實體有 instanceId**。Stack 內每張卡有獨立 instanceId(自動生成,全域唯一),可以表達「兩張一模一樣的火球」、「升級到不同等級的同卡」、「精準刪除某張」等情境,不會跟 kindId 混淆。 **資料欄位(data)支援 GUI 編輯**。建立卡種或升級單張時不必手寫 JSON 字串,直接用 GUI 加列(key + 型別 + 值)即可。 **錯誤訊息就是教學**。用錯時控制台跳出帶建議的中文警告(開發模式才顯示),引導用正確的元件組合。 **動作不做條件判斷**。所有分支邏輯靠檢查 + 「否則觸發事件」,這是事件表本來就推薦的條件分支寫法。 ## 一個最直接的例子 升級三選一(用橋接動詞): 1. 建立技能字典(一次性,定義有哪些技能) 2. 玩家升級時:「橋接:從字典生成實體進牌堆」抽 3 個不重複到「候選」牌堆 3. UI 顯示 3 個按鈕對應 3 張候選 → 玩家點選 → 該張 Transfer 到「玩家技能」 整個流程都是 GUI 動作組合,不用碰一行程式碼。 ## 開始使用 - **5 分鐘上手教學**:見同目錄下 `TUTORIAL.md` - **完整互動範例**:[CgEventsRoguelike 模組專案](https://code.gamelet.com/edit/CgEventsRoguelike) 下 `test/examples/` - `basic_draw.events`:基本抽 / 打 / 自動洗回 - `loot_pool.events`:跨玩家共池戰利品(依字典 maxCopies 過濾) - `level_up_choice.events`:升級三選一 + 升級單張 - `deck_battle.events`:STS 戰鬥三堆完整循環 - `shop.events`:商店進貨 / 買走 / 補貨 - `crafting.events`:背包合成(多素材 Check + 消耗 + 產出) - `pity_draw.events`:保底抽卡(CatalogPityRollRL 一個動作搞定) - `pity_draw_legacy.events`:舊版保底寫法(5 個 event 拼裝),保留供新舊對照 - `tier_loot.events`:分層戰利品(CatalogTierRollRL + 順便推入戰利品包) - **元件分類**:事件表編輯器中位於 **Roguelike / 卡片字典**(含 保底、分層抽 子分類)、**Roguelike / 牌堆**、**Roguelike / 橋接** ## 作者 **[cook1470](/profile/cook1470)**
# EnhBase 此模組的目標為提供一個框架,使得各模組可以透過Socket傳訊、執行特定功能等;同時希望降低各模組的依賴項,將單一模組內容以更細的粒度拆分,需要特定功能時才載入對應之模組。 此模組之更新時間與更新之功能不定,如果有任何新想法,歡迎加入[Discord群組](https://discord.gg/seJwuzCbWq)一起討論。 此模組初期可能會經過大量修改,以確定設計方向,故本模組並不穩定,如想使用請謹慎考慮。 ***建議可以先查看模組測試的部分,其中的unit_test資料夾可以參考,內含檔案同時是範例實作。*** ## 如何使用 可以透過下列程式碼以完成註冊: ```typescript let lib_name: string // 函式庫之名稱 let user: BasicUser<any> = CG.EnhBase.core.libManager.registerLib(lib_name); ``` 欲接受傳入資料,請使用下列程式碼: ```typescript let socket_unique_name: string // 可辨識之Socket名稱 let socket: Socket = user.createSocket(); socket.addHandler("data", function(data, senderCode) { // 處理資料如何使用 }) socket.listen(socket_unique_name); ``` 而欲傳輸資料給目標Socket,請使用下列程式碼: ```typescript let target_socket_name // 目標Socket名稱 socket.send("YOUR_DATA", target_socket_name); ``` --- ## 變數表功能 接續前面,假設已經取得了BasicUser物件,預設該物件會帶有一個變數表,透過下列程式碼存取: ```typescript const varTable = lib.varTable; ``` 預設該變數表會啟用保護功能,禁止外部存取,於v0.0.2引入了保護用的Key,設定為true或false可控制外部是否可存取,未來可能會更動,請謹慎使用。 ```typescript // enable protection varTable.setValue(BaseVariableTable.ABILITYS.PROTECT, true, true); // or varTable.removeValue(BaseVariableTable.ABILITYS.PROTECT) varTable.setValue(BaseVariableTable.ABILITYS.PROTECT, true); // disable protection varTable.removeValue(BaseVariableTable.ABILITYS.PROTECT) // or varTable.setValue(BaseVariableTable.ABILITYS.PROTECT, false, true); ``` 同時,就算沒有LibUser物件,也可以直接利用 ```typescript let varTable = new SimpleVariableTable(); // or (syncable) let varTable = new GenericVariableTable(); ``` 以取得變數表,並透過下列方法將變數表註冊於manager上: ```typescript core.getInstance<VariableTableManager>("VariableTableManager").addVariableTable(varTable); // or core.variableTableManager.addVariableTable(varTable); ``` ## Authors **[EnhProject](/profile/EnhProject)** - [不會取名字](/profile/buhuechuminzu) - [雪姬](/profile/setsuki)
# Desperate City Armory — 武器系統模組使用教學 > ## ⚠️ !!注意!! 在使用前需要先初始化武器 > 在遊戲開始時(通常是「初始化」事件),**必須**先執行 `InitGameData` 動作,否則所有武器功能都不會正常運作。 > > ``` > 事件:初始化 > 動作:InitGameData > ├── 武器資料別名:datas_weaponType(預設) > ├── 殭屍資料別名:datas_zombieType(預設) > └── 除錯日誌:false(正式版請關閉) > ``` --- ## 目錄 1. [模組架構](#模組架構) 2. [初始化設定](#初始化設定) 3. [新增武器到地圖](#新增武器到地圖) 4. [讓角色裝備武器](#讓角色裝備武器) 5. [自訂武器處理器(Actions)](#自訂武器處理器) 6. [weapon_utils 工具函式](#weapon_utils-工具函式) 7. [datas_gameConfig 武器資料設定](#datas_gameconfig-武器資料設定) 8. [新增武器的完整流程](#新增武器的完整流程) 9. [注意事項與常見問題](#注意事項與常見問題) --- ## 模組架構 ``` datas/ ├── datas_gameConfig.ts ← 武器資料定義(FarWeaponData)與 WeaponTypeData 管理器 └── weapon/ ├── weapon_utils.ts ← 共用工具函式(registerWeapon、actorCustomGAF 等) ├── InitGameData.action.ts ← 【必須】初始化動作,負責事件監聽與切換偵測 ├── WeaponActions.action.ts ← WeaponSpawn(生成武器到地上) ├── WeaponEquip.action.ts ← WeaponEquip(讓角色裝備武器) └── weapons/ ├── Demo_actions.ts ← 新增武器用的模板 ├── Barret_actions.ts ├── AA12_actions.ts ├── M249_actions.ts ├── P90_actions.ts ├── MP5_actions.ts ├── SCAR_actions.ts ├── M200_actions.ts ├── Revolver_actions.ts ├── Gating_actions.ts ├── GrenadeGun_actions.ts ├── Crossbow_actions.ts ├── SR16_actions.ts ├── ElectricGun_actions.ts ├── AUG_actions.ts └── CombatShotgun_actions.ts ``` --- ## 初始化設定 > ### ⚠️ 使用前必須先執行 InitGameData,否則所有武器功能不會正常運作! `InitGameData` 會執行以下工作: - 載入所有武器資料(`WeaponTypeData`) - 建立自訂彈匣(`initMagazines`) - 註冊所有武器處理器(Handler) - 掛上 `ACTOR_PICKUP_STUFF`、`ACTOR_DROP_STUFF`、`ACTOR_FIRE` 事件監聽 - 啟動輪詢(每 100ms)偵測武器切換與裝填 **動作參數說明:** | 參數 | 說明 | 預設值 | |------|------|--------| | 武器資料別名 | JSON 資源的別名 | `datas_weaponType` | | 殭屍資料別名 | JSON 資源的別名 | `datas_zombieType` | | 除錯日誌 | 開啟後顯示詳細 log,上架前請關閉 | `false` | --- ## 新增武器到地圖 使用 `WeaponSpawn` 動作將武器放到地圖上。 **動作參數說明:** | 參數 | 說明 | |------|------| | 武器種類 | 從下拉選單選擇 | | 位置 | 在地圖上點選位置 | | 道具代碼 | 武器物件的事件代碼(`item*` 自動生成唯一代碼) | | 區域變數名稱 | 儲存道具代碼的區域變數 | | 除錯日誌 | 顯示生成 log | **支援的武器種類:** | 武器代碼 | 武器名稱 | 特效 | 自訂音效 | |---------|---------|------|---------| | `barret` | 巴雷特 | GAF ✅ | ✅ | | `m249` | M249 | GAF ✅ | ✅ | | `p90` | P90 | GAF ✅ | ✅ | | `mp5` | MP5 | GAF ✅ | ✅ | | `scar` | SCAR | GAF ✅ | ✅ | | `m200` | M200 | GAF ✅ | ✅ | | `revolver` | 左輪槍 | GAF ✅ | ✅ | | `gating` | 加特林 | GAF ✅ | ✅ | | `aa12` | AA-12 | GAF ✅ | ✅ | | `combat_shotgun` | 戰鬥霰彈槍 | — | ❌ | | `aug` | AUG | — | ✅ | | `sr16` | SR-16 | — | ✅ | | `electric_gun` | 電擊槍 | — | ✅ | | `grenadegun` | 榴彈槍 | ❌ | ❌ | | `crossbow` | 弩 | GAF ✅ | ✅ | | `uzi` | 烏茲 | — | — | | `mk18` | MK18 | — | — | | `svd` | SVD | — | — | | `glock17` | 格洛克17 | — | — | | `victor` | 維克托 | — | — | | `m2_machinegun` | M2機槍 | ❌ | ❌ | --- ## 讓角色裝備武器 使用 `WeaponEquip` 動作讓角色直接持有武器(不需要從地上撿起)。 **動作參數說明:** | 參數 | 說明 | 預設值 | |------|------|--------| | 角色代碼 | 目標角色 | 必填 | | 武器種類 | 從下拉選單選擇 | `barret` | | 裝備在哪一手 | -1 當前手 / 0 第一手 / 1 第二手 | `-1` | | 裝備後切換至此武器 | 裝備後立即切換 | `false` | | 在角色位置放下之前的武器 | 換武器時丟棄舊武器 | `false` | | 設為角色預設武器 | 手空時自動拿出 | `false` | | 除錯日誌 | 顯示裝備 log | `false` | --- ## 自訂武器處理器 每把有 GAF 動畫或自訂音效的武器,需要一個對應的 `_actions.ts` 檔案。**複製 `Demo_actions.ts` 作為起點。** ```typescript const myHandler: WeaponHandler = { stuffCode: 'cusfar_myWeapon', // 對應 WEAPON_DATAS 的 stuff 欄位 onPickup(actor, game, manager) { // 撿起武器:隱藏引擎動畫、設旗標、播 GAF setActorDisplayVisible(actor, 'rightHand', false); setActorDisplayVisible(actor, 'leftHand', false); setWeaponAlpha(actor, 0); setGlobal(manager, `${actor.code}_hold_myWeapon`, 1); actorCustomGAF({ ..., linkage: 'Idle', stop: true }); }, onFire(actor, game, manager) { // 開槍:播射擊動畫 + 音效 actorCustomGAF({ ..., linkage: 'Shoot' }); mapSoundEffect(game, actor, 'Desperate_City.myWeapon_music', 1.0); }, onReload(actor, game, manager) { // 裝填:播裝填動畫 actorCustomGAF({ ..., linkage: 'Reload' }); }, onUnequip(actor, game, manager) { // 卸除:移除 GAF、清旗標、恢復引擎動畫 actorCustomGAF({ actorCode: actor.code, actorCustomGAFCode: gafCode(actor), add: 'remove' }); setGlobal(manager, `${actor.code}_hold_myWeapon`, 0); setActorDisplayVisible(actor, 'rightHand', true); setActorDisplayVisible(actor, 'leftHand', true); setWeaponAlpha(actor, 100); }, }; export function registerMyWeapon(): void { registerWeapon(myHandler); } ``` --- ## 新增武器的完整流程 1. **複製 `Demo_actions.ts`**,改名為 `MyWeapon_actions.ts` 2. **修改三個常數**:`STUFF_CODE`、`GAF_ALIAS`、`HOLD_SUFFIX` 3. **調整各 handler** 的 linkage、fps、音效等細節 4. **`InitGameData.action.ts`** 加上 import 和 `registerMyWeapon()` 呼叫 5. **`datas_gameConfig.ts`** 的 `WEAPON_DATAS` 加上武器設定 --- ## 注意事項與常見問題 ### Q:武器沒有子彈特效? 確認 `SpawnedFarWeapon` 沒有 override `createBulletsData` 方法,必須使用引擎原始邏輯。 ### Q:onPickup 沒有觸發? 確認 `stuffCode` 能被 `_resolveStuffCode` 正確對應,系統嘗試順序: 1. 直接查 handler(如 `cusfar_barret`) 2. 去掉 `cusfar_` 前綴(如 `SCAR`、`p90`) 3. 去掉 `homemade_` 前綴(如 `m249`) ### Q:切換武器時 GAF 沒更新? 系統每 100ms 輪詢 `_currentWeapon`,偵測切換時觸發 `onUnequip`(舊)+ `onPickup`(新)。初次撿起由 `ACTOR_PICKUP_STUFF` 事件負責。 ### Q:引擎手持動畫沒有隱藏? 確認 `datas_gameConfig` 裡該武器設定 `hasCustomAnim: true`。 ### Q:clip 設什麼? - 使用 `TwilightWarsLib.actors` → 填 `lib_rifle`、`lib_handgun`、`lib_shotgun` 等 - 使用自訂資源 → 填該資源內的 linkage 名稱(如 `mp5_clip`、`barret_clip`) ### Q:weaponCode 需要手動填? 大多數情況不需要,系統自動從 `stuff` 推算。以下需手動填: - `gating`:`weaponCode: 'gating_gun'` - `m249`:`weaponCode: 'homemade_m249'` ## Authors **[Autumn](/profile/113266227571469019286@google)**
# TwilightWarsLib A Top-down view shooting game framework. ## Getting Started These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. To start a .event ```typescript CG.TwilightWarsLib.initialize() .then(() => { CG.TwilightWarsLib.events.startEvents('test/test.events', 'arena'); }) ``` To manually setup the game: ```typescript CG.TwilightWarsLib.initialize() .then(() => let mapSource = 'test/test.twmap'; CG.Base.resourceManager.addAppSource(mapSource); CG.Base.resourceManager.load(() => { let mapResource = new CG.TWMap.resources.MapResource(); mapResource.importBase64(CG.Base.resourceManager.getText(mapSource)); mapResource.loadTextures(() => { CG.Base.pixi.initialize(600, 500); let game = new CG.TwilightWarsLib.games.Game(); CG.Base.pixi.root.addChild(game); game.initResources(mapResource); game.start(); console.log('tw game created'); let me = new CG.TwilightWarsLib.games.actors.Actor(game, 'me'); game.addActor(me, new MyActorController(me), 32, 100, 0, null); game.gameCamera.setFocus(me); game.interface.setMe(me); let ai = new CG.TwilightWarsLib.games.actors.Actor(game, 'ai'); ai.camp = CG.TwilightWarsLib.games.datas.Camp.CAMP2; ai.actorClip.headClip.clip.gotoAndStop(5); game.addActor(ai, new CG.TwilightWarsLib.games.actors.controllers.AIController(ai), 160, 300, 0, null); game.createStuff(null, 64 + 16, 128 + 16, CG.TwilightWarsLib.games.items.StuffInfo.getByCode('sword'), game.stuffManager.useNextStuffId(), true); }); }); }) ``` ## Versioning We use [SemVer](http://semver.org/) for versioning. ## Authors * **[Haskasu](/profile/Haskasu)** ## Acknowledgments * Hat tip to anyone who's code was used * Inspiration * etc
# JEventsEXP <table width="100%"> <tr> <th rowspan="2"> <a href="https://discord.gg/UNde4eaGuc" target="_blank"> <img src="https://imgur.com/HDw592N.png" width="110px"> <br> 珍・EventsEXP <br> <a href="https://discord.gg/UNde4eaGuc" class="mat-raised-button mat-primary "> 加入Discord </a> </a> </th> <th> 隨便寫的模組。 </th> <th> A casually written module. </th> </tr> <tr> <td> <pre> # 觸發 珍妮-擴充包/ └── 輸入/ └── 鍵盤序列 # 動作 珍妮-擴充包/ └── 變數/ └── 生成隨機整數陣列 └── 地圖/ └── 迷宮生成 └── 特效/ └── 角色/ └── 熱感應追蹤器 └── 自定熱感應追蹤器 └── 移除熱感應追蹤器 # 道具 └── 熱感應追蹤器 </pre> </td> <td> <pre> # Trigger Jennie-Expansions/ └── Input/ └── Keyboard Sequence # Actions Jennie-Expansions/ └── Variable/ └── Generate Random Integer Array └── Map/ └── Maze Generation └── Effect/ └── Actor/ └── Thermal Tracker └── Custom Thermal Tracker └── Remove Thermal Tracker # Item └── Thermal Tracker </pre> </td> </tr> </table> ## 作者 **[SinB.JN](/profile/108665576516229624668@google)** <details open> <summary> <a class="mat-raised-button mat-primary"> 更新日誌(Changlog) </a> </summary> ## [v0.1.5](/view/JEventsEXP/0.1.5) (2026-04-26) #### 新增 - [動作]特效/角色/自定熱感應追蹤器 - 顯示其他角色的即時位置熱感應追蹤 #### Added - [Actions]Effect/Actor/Custom Thermal Tracker - Show other actors' real-time positions with thermal tracking ## [v0.1.2](/view/JEventsEXP/0.1.2) (2025-06-25) #### 新增 - [動作]特效/角色/熱感應追蹤器 - 顯示其他角色的即時位置熱感應追蹤 - [動作]特效/角色/移除熱感應追蹤器 - 移除角色的熱感應追蹤器 #### Added - [Actions]Effect/Actor/Thermal Tracker - Show other actors' real-time positions with thermal tracking - [Actions]Effect/Actor/Remove Thermal Tracker - Remove thermal tracker from an actor ## [v0.0.8](/view/JEventsEXP/0.0.8) (2025-05-24) #### 新增 - [觸發]輸入/鍵盤序列 - 當一系列鍵盤按鍵和滑鼠按鍵依序被按下時觸發 #### Added - [Trigger]Input/KeyboardSequence - Trigger when a sequence of keyboard keys and mouse buttons is pressed ## [v0.0.7](/view/JEventsEXP/0.0.7) (2025-05-09) #### 新增 - [動作]地圖/迷宮生成 - 在選定的地圖區域(矩形或圓形)內以1x1物件生成迷宮 #### Added - [Actions]Map/Maze Generation - Generates a maze within a selected map region (rectangle or circle) with 1x1 object ## [v0.0.6](/view/JEventsEXP/0.0.6) (2024-08-31) #### 更改 - [動作]變數/生成隨機整數陣列 - 新增了對數量、最大重複次數和種子參數的變數輸入支持。 - 優化了錯誤處理和無效輸入的提示信息。 #### Changed - [Actions]Variable/Generate Random Integer Array - Added support for variable input for count, max repeats, and seed parameters. - Improved error handling and messaging for invalid inputs. ## [v0.0.5](/view/JEventsEXP/0.0.5) (2024-08-30) #### 更改 - [動作]變數/生成隨機整數陣列 - 新增了使用種子生成隨機數的選項。用戶現在可以選擇是否使用種子,並輸入一個特定的種子值來生成可重現的隨機數序列。 - 優化了用戶界面。 #### Changed - [Actions]Variable/Generate Random Integer Array - Added an option to use a seed for random number generation. Users can now choose whether to use a seed and input a specific seed value to generate reproducible random number sequences. - Improved the user interface. ## [v0.0.4](/view/JEventsEXP/0.0.4) (2024-08-29) #### 錯誤修復 - [動作]變數/生成隨機整數陣列 - 修復了當可用數字少於陣列長度時導致遊戲崩潰的問題。 #### Bug fixed - [Actions]Variable/Generate Random Integer Array - Fixed an issue where the game would crash when the number of usable integers was smaller than the array length. ## [v0.0.1](/view/JEventsEXP/0.0.1) (2024-08-29) #### 新增 - [動作]變數/生成隨機整數陣列 #### Added - [Actions]Variable/Generate Random Integer Array </details>
# GLT One Paragraph of the game description goes here ## Getting Started ### Auth (Login) ```typescript // All action must wait until auth system is ready. CG.GLT.auth.onReady(user => { if(user.isLocalGuest()) { // not login yet } else { // logged in user } }); // auth event listener, triggered when auth user changed let authListener = CG.GLT.auth.onAuth(user => { if(user.isLocalGuest()) { // logged out } else { // logged in user } }); // auth event listener, triggered when validating a new auth action // a following onAuth event is expected. this.validatingListener = onAuthValidating(() => { // show loading animation }); ``` ### API The CG.GLT.api is responsible to communicate with glt.gamelet.online. CG.GLT.commands includes all comments to query/submit data from glt.gamelet.online. The commands has a function submit() that uses CG.GLT.api.submitCommand(), so most of the time, you don't need to call the api to submit. ```typescript CG.GLT.commands.scoreService.submitScore( 'challenge', // the name of the score to submit 10, // the score SubmitType.KEEP_HIGHEST, // submit only when the new score is greater than the one on server TimeRange.ALL // submit to all time-ranges (history and weekly) ) .submit(); // to receive the weekly high score list CG.GLT.commands.scoreService.listScores( 'challenge', // the name of the scores to get TimeRange.WEEKLY, // in which time range OrderType.HIGH_TO_LOW, // how to order the scores CG.GLT.api.lastUpdatedServerTimestamp, // tell the server which week to see 0, // start index 10, // how many to get (list: UserScoreList) => { // do something with the scorelist }, (error) => { // deal with error } ) ``` ## Authors **[Haskasu](/profile/113321052805704333314@google)**
# CgEventsLib The engine of CgEvents. CgEvents is a great way to build your own games with with a CG.built-in editor. ## Live Demo <a href="cg://source/test/physics.events" class="mat-raised-button mat-primary">Open Demo Events Sheet</a> ## Concept The engine takes a *.events file to run. The .events file is an encoded json which contains a config field and a events field. ```json { config: { stage: { width: "number", height: "number", resolutionPolicy: "showAll" | "exactFit" | "fixedWidth" | "fixedHeight" | "origin", alignHorizontal: "left" | "center" | "right", alignVertical: "top" | "middle" | "bottom" } }, events: [ { id: "string", triggers: [], checks: [], actions: [] }, ... ] } ``` Yon can edit the json with CG.built-in editor to control all your game events. ## How Events Work Each event contains a TRIGGER, some CHECKS, and some ACTION. The event flow works like this: 1. The TRIGGER of the event is triggered by the engine (keyboard pressed, event over, or maybe the hero collides with an enemy) 1. Once the trigger is triggered, the engine then goes check the CHECKS. 1. If all CHECKS pass, the engine executes all the ACTIONS in the event. ## Getting Started ```typescript let manager = new CgEventManager(); manager.importFromSource('CG.YourProject/yourGame.events') .then(() => manager.preload()) .then(() => manager.start()) ; ``` ## Versioning We use [SemVer](http://semver.org/) for versioning. ## Authors * **[Haskasu](/profile/Haskasu)**
# TWCleaner 本專案的目的是清理 [TwilightWarsLib](/edit/TwilightWarsLib) 在遊玩過程中產生的物件,載入就會生效。 如有任何問題可在[Discord群組](https://discord.gg/seJwuzCbWq)詢問。 ## 參數及功能 ```typescript const config: { // 預設為 true // 在遊戲結束後,是否要將 Game local 的參考移除(實作方法有風險,遊戲模組更新後可能會失效) clearGameLocalCache: boolean, // 預設為 true // 在遊戲結束時,是否要將 Actor local message index registry 對 Game 的參考移除(實作方法有風險,遊戲模組更新後可能會失效) clearActorLocalMsgIndexReg: boolean, // 預設為 false // 在遊戲結束後,是否取消將遊戲過程中透過 CG.Base.resourceManager.createGAFMovieClip() 產生的 GAF.GAFMovieClip 物件銷毀 donotCleanGAFMovieClip: boolean, // 預設為 false // 是否印出 debug log showGCMessage: boolean } // 執行此 function 可避免透過 CG.Base.resourceManager.createGAFMovieClip() 產生的 GAF.GAFMovieClip 物件在遊戲結束後被銷毀 function markNotClean(obj: GAF.GAFMovieClip): void // 執行此 function 可刪除 Actor local message index registry 的 key(實作方法有風險,遊戲模組更新後可能會失效) function deleteActorMessageTableKey(key: string): void // 只有在參數 showGCMessage 為 true 時才會被執行 // 執行此 function 可在 obj 被 GC 時,在 Console 印出 name log function showGCMessage(name: string, obj: any): void ``` ## 清理項目 1. 銷毀遊戲過程中產生的 GAF - 在遊戲結束後,銷毀遊戲過程中透過 CG.Base.resourceManager.createGAFMovieClip() 產生的 GAF.GAFMovieClip 物件 1. 清除 Game local 的參考 - 在遊戲結束後,清除 Game local 中的 instance 參考,使得可以不需要等下一場遊戲開始才能釋放 Game 1. 清除 Actor local 中的 message index registry 對 Game 的參考 - 在遊戲結束時,清除 Actor local 中的 message index registry 對 Game 的參考(Game 本身發出訊息或是死亡進入觀戰時就會殘留) 1. 釋放 Pool 中的物件 - 在遊戲過程中釋放 Pool 中的物件,避免存在過多的顯示物件 1. 銷毀 ArmorBoard - 補上在遊戲結束後 game.ui.dispose() 中沒有呼叫的 this.armorBoard.dispose() 1. 銷毀 SlideBoard 中可能的 clip - 銷毀在遊戲結束後,SlideBoard 的 subclasses 可能存在的 this.clip 1. 清除 WatcherController, BugParasiteNetwork 對 Game 的參考 - 這些 class 在各自的 local 中都會保留 instance 參考,因此在 dispose() 時清除它們對 Game 的參考 1. 避免 CG.TWLibLib.libs.openDialogWithTabManager() 中的 React cache 保留對 Game 的參考 - 替換掉參數 options.onClose 以解除 React component 中對 props 的參考間接保留對 Game 的參考 ## Authors **[EnhProject](/profile/EnhProject)** - **[不會取名字](/profile/buhuechuminzu)** - **[雪姬](/profile/setsuki)**
# WovenFatesPerformanceModule WovenFatesPerformanceModule 是一組為 **平生願** 專案整理的演出用擴充模組,主要有以下功能: - **Dialogue**:對話框、選項、對話履歷與相關互動觸發 - **Notebook**:可建立、開關、增刪條目並支援翻頁演出的筆記本系統 - **Typing Animation**:可直接顯示於畫面,或掛載到顯示屏上的逐字動畫特效 - **Damage Telegraph Zone**:可打斷的傷害預警區域 - **Vision Zone**:可偵測並被障礙遮擋的視野區域。 這個模組的目標不是提供底層框架,而是補足事件表中常用的 **演出能力和機制**。 讓對話、筆記、提示文字與資訊呈現能更直接地接入任務流程,並設計更有趣的關卡。 具體使用效果可以參考平生願重製版:https://woven-fates.gamelet.online/ --- **本模組依賴 CgEventsExp + CgEventsLib + TwillightWarsLib + TwillightWarsEvents + TwillightWarsEventsEXP。** --- # DIALOGUE ## Action: - **建立對話框** 建立對話框 UI,初始化對話介面的版面、文字區與顯示結構,作為後續顯示台詞與操作履歷的基礎。 - **顯示對話內容** 更新對話框中的角色名稱與台詞內容,用於一般劇情推進與對話演出。 - **顯示對話選項** 顯示可供玩家選擇的對話選項視窗,支援自訂選項內容、位置、字體與外框樣式,可選擇是否等待玩家作答。 - **開啟對話履歷** 開啟對話紀錄視窗,讓玩家查看先前已顯示過的對話內容。 - **關閉對話履歷** 關閉對話紀錄視窗,回到一般對話流程。 ## Trigger: - **選中對話選項** 在玩家選中對話選項後觸發,可取得選項視窗 ID 與選中的值,方便把選項結果接回事件表邏輯。 - **滑鼠滾輪觸發** 監聽滑鼠滾輪輸入,可用於開關對話履歷、切換頁面或其他 UI 滾輪互動。 --- # NOTEBOOK ## Action: - **建立筆記本** 建立筆記本 UI 與控制器,初始化封面、頁面、目錄、條目內容、圖片區與翻頁機制。 - **開關筆記本** 控制筆記本的開啟、關閉或切換狀態,可用於劇情中隨時調出或收起筆記本介面。 - **新增筆記條目** 將新條目加入筆記本,支援標題、左右頁內容與圖片資料,適合用於調查、線索收集與資訊整理。 - **刪除筆記條目** 依照條目 ID 或索引刪除指定條目,可用於更新資料、覆蓋舊資訊或同步任務進度。 - **顯示筆記條目** 顯示指定條目內容,或切回筆記本目錄頁,並配合翻頁效果切換內容。 ## Trigger: - **筆記本事件觸發** 監聽筆記本的開啟、關閉、回到目錄與選中特定條目等事件,可直接把玩家閱讀行為接入事件表。 --- # TYPING ANIMATION ## Action: - **特效逐字動畫** 在畫面上顯示逐字出現的文字,並可搭配音效、晃動與淡出等效果,用於提示、旁白、內心獨白或特殊文字演出。 - **建立逐字動畫顯示屏** 建立可重用的逐字動畫顯示區,支援背景、行距、最大行數、堆疊方向與推動動畫設定,可讓多條逐字訊息依序堆疊顯示,而不互相重疊。 --- # DAMAGE TELEGRAPH ZONE ## Action: - **建立傷害預警區域** 建立矩形、扇形或圓形傷害預警區域,時間到便會對符合敘述的角色造成一次或持續傷害。 - **打斷傷害預警區域** 打斷特定ID的傷害預警區域。 --- # VISION ZONE ## Action: - **建立視野區域** 建立扇型或圓形視野區域,並可偵測在區域內的角色。 - **設定視野區域顏色** 設定特定ID的視野區域顏色和顯示與否。 ## Trigger: - **視野區域偵測** 當角色碰到視野區域時觸發。 ---
# 更好的光暈戰記事件表擴充模組(TWEventsBetterExp) 本模組延續 [**TwilightWarsEventsExp**](https://code.gamelet.com/edit/TwilightWarsEventsExp)(以下簡稱 EXP)的概念所設計,並基於 [**TwilightWarsEvents**](https://code.gamelet.com/edit/TwilightWarsEvents) 建立,用於擴充 [**光暈戰記**](https://twilightwars.gamelet.online/) 事件表功能的模組。 由於 **EXP** 過於混雜,為優化模組架構與性能,將逐步進行程式碼重構,剔除許多不必要,或與 **TwilightWarsEvents** 重疊的功能,保留真正需要的功能。 程式碼搬遷將會是一個持續性的工程,如果你有建議可以優先搬遷的功能,歡迎直接告訴我。 本模組的所有功能都放在 **光暈戰記 (BetterExp)** 目錄底下,且所有功能皆有 (BetterExp) 後綴。 ## 注意事項 即使是作用相同的功能,由於程式碼重構的關係,使用上 **EXP** 還是會和本模組有所差異,沒辦法直接將資料無痛轉移,因此你應該將其視為兩個不同的模組。 如果你是曾使用過 **EXP** 的開發者,如今想要開發新的專案,會建議不要安裝 **EXP** 而改安裝此模組。 ## 玩家社群 ### Discord - [**嘎姆討論區**](https://discord.gg/hZKQzRfPJM):於 2021/05/08 創立的非官方社群,主要用於討論嘎姆擂台的相關資訊。 ## 作者 **酷可**:[**Code.Gamelet**](/profile/114899766849308759711@google)、[**Gamelet.Online**](https://gamelet.online/user/114899766849308759711@google/board)、[**Youtube**](https://www.youtube.com/@cook1470)
<center><strong> <font size=5> <font color=EA7869> # 光暈戰記武器素材擴充包(TwilightWarsWeaponsResource) </font> </font> </strong><br> <font color=7869EA> <strong> <font size=4> <font color=7869EA> # 本模組為光暈戰記同人陣添加多種武器外觀 </font> </font> </strong><br> <strong> <font size=4> <font color=EA7869> <details> <summary> <strong> <font size=4> <font color=EA7869> ## 手動新增自創武器教學(點擊打開) </font> </font> </strong> </summary> <br> <font color=7869EA> 點開事件表(.events)的<strong>光暈戰記遊戲設定</strong> <br><br> ![](https://i.imgur.com/bnCBKkk.png) <br><br> 找到下方的<strong>自製近身武器</strong>與<strong>自製遠程武器</strong> <br><br> ![](https://i.imgur.com/Al86kNu.png) </font><br><br><br> <strong> <font size=4> <font color=EA7869> </details> <details> <summary> <strong> <font size=4> <font color=EA7869> ## 預置武器修改教學(點擊打開) </font> </font> </strong> </summary> <br> <font color=7869EA> <a href="cg://source/CG.TwilightWarsWeapons/Preset.events" class="mat-raised-button mat-primary">預置事件表</a> <br><br> 找到最左側<strong>檔案總管</strong>內,<strong>CG.TwilightWarsWeapons</strong> 之中的<strong>Preset.events</strong>,右鍵<strong>複製檔案</strong>,更新後就不會遺失改過的設定 <br><br> ![](https://i.imgur.com/svcKdMk.png) <br><br> 找到複製後的<strong>Preset_copy.events</strong>,接著就能依照自己的喜好修改預置武器 <br><br> ![](https://i.imgur.com/Cuu5mUp.png) <br><br> 改完之後,找到需要使用自創武器的事件表選擇<strong>設定</strong> <br><br> ![](https://i.imgur.com/JBQr85k.png) <br><br> 在<strong>預先載入</strong>的地方把剛剛的<strong>Preset_copy.events</strong>打勾,就可以使用裡面的武器了 <br><br> ![](https://i.imgur.com/cd1zJkg.png) <br><br> </font> </details> <details> <summary> <strong> <font size=4> <font color=EA7869> ## 預置武器事件表更新教學(點擊打開) </font> </font> </strong> </summary> <br> <font color=7869EA> 首先刪除原本在 CG.TwilightWarsWeapons 資料夾中的<a href="cg://source/CG.TwilightWarsWeapons/Preset.events" class="mat-raised-button mat-primary">預置事件表</a> <br><br> 接著更新模組 <br><br> 打開最新版本的<a href="cg://source/CG.TwilightWarsWeapons/Preset.events" class="mat-raised-button mat-primary">預置事件表</a> <br><br> 點開右上角的**編輯原始資料(JSON)** <br><br> ![](https://i.imgur.com/QH5bVdp.png) <br><br> 找到武器代碼,從上方**逗號與大括號**一次框選到下方相對位置的**大括號**(可以從顏色判斷)並複製 <br><br> ![](https://i.imgur.com/iOI38jq.png) <br><br> ![](https://i.imgur.com/MyDAyGa.png) <br><br> 最後複製到 **自己的** 預置武器事件表之中的對應位置內就完成了 <br><br> ![](https://i.imgur.com/QH5bVdp.png) <br><br> </font> </details> <strong> <font size=5> <font color=EA7869> ## 作者 </font> </font> </strong> <strong> <font size=5> <font color=7869EA> 阝千翎 </font> </font> </strong> **[<img src="https://gamelet.online/clients/assets/v1/img/cg_logo.png" width="30px" /><a href="https://code.gamelet.com/profile/Chinatsu" target="_blank" style="color:#55BBFF;">CG](/profile/117336754650487480063@google)**</a> **[<img src="https://gamelet.online/clients/assets/v1/img/gamelet_icon.png" width="30px" /><a href="https://gamelet.online/user/117336754650487480063@google/board" target="_blank" style="color:#55BBFF;">嘎姆](https://gamelet.online/user/117336754650487480063@google/board)**</a> **[<img src="https://play-lh.googleusercontent.com/Qolm5gr9jnabjk-0z79srjYC1XPVExribNz5kbDmGJeEtmRlo0UQoQEIkKMHRyt5paw" width="30px" /><a href="https://www.youtube.com/channel/UCALDNiLyfHERP13-BG9xpFQ?sub_confirmation=1" target="_blank" style="color:#55BBFF;">YouTube](https://www.youtube.com/channel/UCALDNiLyfHERP13-BG9xpFQ?sub_confirmation=1)**</a> **[<img src="https://cdn-icons-png.flaticon.com/256/1384/1384065.png" width="30px" /><a href="https://twitter.com/V_chiurin" target="_blank" style="color:#55BBFF;">推特](https://twitter.com/V_chiurin)**</a> **[<img src="https://cdn.iconscout.com/icon/free/png-256/twitch-11-461838.png" width="30px" /><a href="https://www.twitch.tv/haokute39171765" target="_blank" style="color:#55BBFF;">Twitch](https://www.twitch.tv/haokute39171765)**</a> **[<img src="https://cdn-icons-png.flaticon.com/512/145/145802.png" width="30px" /><a href="https://www.facebook.com/profile.php?id=100041014581991" target="_blank" style="color:#55BBFF;">facebook](https://www.facebook.com/profile.php?id=100041014581991)**</a> </center>
ⒸCode.Gamelet.com | Privacy Policy | Terms of Service