How to Build Custom Minigames in Hytale: Server Developer's Guide

By HytaleCharts Team Category: technical 7 min read

רוצים לבנות את משחקי הבית או משחקי הרעב ב- Hytale? מדריך זה מכסה את זרימת העבודה המלאה - ממכונות משחק וניהול זירות מעקב שחקן מבוסס ECS, התאמה ופריסה. כולל דוגמאות אמיתיות מ- CurseForge minigame Mods.

הארכיטקטורה של השרת בצד השרת של Hytale הופכת אותו לתאים ייחודי עבור מיני משחקים מותאמים אישית. שלא כמו Minecraft שבו תוספי מצבי משחק להילחם נגד תיבת החול וניל, התוסף של Hytale ו- ECS נותנים לך שליטה ישירה על התנהגות ישות, מצב עולמי וזרימת משחקים. אם בניתם את Bukkit minigames, המושגים מתרגמים - אבל היישום הוא נקי יותר. מדריך זה מכסה את מערכות הליבה כל מיני משחקים צריך: ניהול מצב משחק, מקרים זירות, מעקב שחקן, ניקוד, התאמה ופריסה. Architecture: How Minigame Plugins Work in Hytale לפני צלילה לקוד, להבין את האדריכלות ברמה גבוהה של משחק Hytale: LayerPurumeImplementation < Strong>Game ManagerOrchestrates כל דבר - יוצר זירות, מנהל כיכרות, מסלולים שחקניםשירות שללינגלטון בתוסף שלךtr>> Arena Instance משחק אחד עם מדינתו, שחקנים ואזור עולמיClass ניהול עולם או אזור Game State MachineControls the Phase Flow - המתנה, ספירה לאחור, משחק, סיום>Enum + timer Logic perזירה < Strong>Player DataTracks per-player state - ציון, צוות, חי /ad, statsECS Components מחוברים לגופים של השחקן < Strong> Event Handlers>< תגובה לפעולות שחקן - להרוג, לחסום הפסקות, כניסה לאזור אפילוtBus + ECS מערכות אירועיםtr> Step 1: Game State Machine כל מיני-משחק זקוק למכונה ממשלתית. זהו עמוד השדרה השולט במה שקורה ומתי. שם הסרטון: Public enum Gamestate { לוויה, מחכה לשחקנים משחק: Countdown לפני המשחק מתחיל כיף / / משחק Active Gameplay DEATHMATCH / Optional: שלב ההופעות הסופי סוף / משחק למעלה, מראה תוצאות כל מופע זירה מכיל Gamestate. המעבר מבוסס על תנאים: שם הסרטון:< Strong>WAIING ספירת שחקן מינימלית הגיעה ל- תגית: PLAYING: ה- Countdown timer יפוג ב- תגית: DEATHMATCH: הגבלת זמן או סף שחקן > < Strong>PLAING/DEATHMATCH מצב מנצח (השחקן האחרון חי, ציון הגיע וכו ') שם הסרטון: ENDING תוצאות מוצגות, זירה איפוס שם מקור: Public Class Arena { מצב משחק פרטי - Gamestate מחכה; רשימה אחרונה פרטית: PlayerRef > שחקנים = חדש ArrayList < > הספירה לאחור הפרטית = 10 המונחים: רִיק tick { (מדינה) המונחים: אם (שחקנים בגודל) MIN_PLAYERS מדינה = Gamestate משחק; ספירה לאחור = 10 } } משחק > ספירה לאחור – שידור (countdown); אם (חשבון הצגות (); ריצוף (); מדינה = Gamestate מחכה; } } } Step 2: Player Data with ECS Components Use Hytale's Entity Component System כדי לצרף נתונים ספציפיים למשחק לגורמי שחקן. זה נקי יותר מאשר לשמור על האשמפה מפות - הנתונים חיים על הישות עצמה. Class Minigame שחקן מיישום מקור: EntityStore > זירת החתירה הציבורית Id = ""; צוות החתירה הציבורי = " Int הורג = 0 הרוגים ציבוריים = 0 הציון הציבורי = 0 בועה ציבורית בחיים = אמת הציבור האחרון מוות = 0 @Override Mini Mini משחק Minigame נגן: MinigamePlayer (); עותק:arena Id = זה.arenaId; העתק. צוות = זה עותקים.kills = זה.kills; העתקים = זה.deaths; עותק.score = This.score עותק.alive = זה.alive; צילום: Last Death - This.last מוות; החזרת עותק; } Attach רכיב זה כאשר שחקן מצטרף לזירה, קרא אותו במהלך משחק עבור ניקוד והגיון צוות, להסיר אותו כאשר הם יוצאים. Step 3: Event Handling for Game Logic חברות משחק צריכות להגיב לפעולות שחקן. השתמש במערכת האירוע המתאימה לכל סוג: אירועי אוטובוס (Global) השחקן מצטרף לשרת - הראה להם את הלובי המונחים:registerGlobal שחקן קוראי קורס, אירוע: TeleportToLobby (event.getPlayer) ); / / ניתוק לשחקן - להסיר מהזירה המונחים:registerGlobal PlayerDisconnectevent.class תגית: TreatPlayer Leave (event.getPlayer) ); / / צ'אט פקודות - / Join, / Leave, /spectate המונחים:registerAsync(Global) שחקן צ'אט עתיד > עתיד String msg = אירוע.getMesage(); אם (msg.starts with) { אירוע זה (נכון); ג'וינטקמנד (event.getSender) } 1) תגית: ECS אירועים (Entity-Specific) עבור הפסקות בלוק, נזק ופעולות אחרות ברמת הישות, ליצור Entity Event System subclasses: עקבו אחריהבקיע קטגוריה: KillTracker מרחיב שינוי מערכת & lt; EntityStore, DeathComponent > @Override ציבורי OUT ONComponent תוספת (EntityStore store) סירוב, מוות אחראי / / Entity מת - מצא את הרוצח, עדכון מקרר = מוות אם (killer!) משחק Minigame Player KillerData = GetComponent הרוצח, מיניג'ר. אם (killerData!) רוצח מידע.kills + רוצח Data.score += KILL_POINTS } } } זכור: יש לבטל את אירועי ECS בשלב filter, ולא בשלב הבדיקה. אם ברצונך למנוע פירוק במהלך שלב הלובי, המסנן חייב לבדוק את מצב המשחק ולבטל לפני ביצוע הפעולה. Step 4: Arena Management עבור משחקים שצריכים חללי משחק מבודדים (משחקי הרעב, מלחמות השינה), אתה צריך מקרים זירות: Multi-arena Pattern שם הסרטון: Public Class Arenamanager { מיפוי אחרון פרטי < סטרינג, Arena > זירות = חדש האשמפה < > Arena ציבורי יוצר את Arena(String id, Location Center) { זירת ארנה = Arena חדש (id, מרכז); זירות (איד, זירה); החזרה לזירה; } איראנה (Availablearena) { זירות החזרה filter(a > a.getstate) משחק המדינה צלילה) .filter(a> a.get PlayerCount() < a.getMaxPlayers() .מצא ראשון() (או אלזה) } void void זירות (ערכים) עבור כל אחד (שטח: טיק); } Arena איפוס אחרי כל משחק, הזירה צריכה לחזור למצבה המקורי. שתי גישות: Snapshot: שמור את נתוני בלוק האזור לפני המשחק מתחיל, לשחזר אותו לאחר מכן. השתמש יותר זיכרון אבל הוא אמין. Prefab reload: השתמש במערכת Prefab של Hytale כדי לאחסן את הזירה כמבנה prefab והחלפתו מחדש לאחר כל משחק. ניקוי ושילוב עם הכלים הילידים של Hytale. Step 5: Teams and Scoring Team Assignment Public רִיק Teams(שטח ארונה) { רשימת < PlayerRef > שחקנים = זירה.getPlayers אוספים (שחקנים); קבוצות = "אדום", "כחול", "ירוק" (int i=0; i < Players. size) I++ משחק Minigame פרטי שחקן = GetComponent( שחקנים (i), MinigamePlayer.class) צוות = קבוצות (% קבוצות). } Scoreboard Display Use Hytale's Message כיתה עבור תצוגות ציון מעוצבות. מערכת ההודעה תומכת בתבנית צבע, סגנונות נועזים / אישיים, והחלפת פרמטר: Public רִיק שידור (שטח ארונה) StringBuilder sb = StringBuilder ("סעיף 6") סינדרון (WEB זירה.getPlayers(stream) (a, b) > GetScore(b) - GetScore(a) לכל אחד (p> משחק Minigame פרטי שחקן = GetComponent( P, Minigameer.class sb.append (String.format) ("%s: §%d הורג §7 §a%d pts\n" p.getusername(), data.kills, Data.score); 1) זירה.broadcast(sb.toString) Step 6: Win Conditions Common minigame win תנאים וכיצד ליישם אותם: Game TypeWin ConditionCheck Inth> Last Man Standing שחקן / צוות חי ב מטפל המוות - לספור שחקנים חיים Score Target First to X Points>> עדכון - בדוק את הסף Time Limit הציון הגבוה ביותר כאשר הזמן מסתייםGame tag - בדוק את Timer Objective משימה ספציפית מלאה (דגל, הרס מיטה) אירוע ECS עבור אינטראקציה אובייקטיבית Rounds Best of N RoundsRound End Hander - Check series Scoretr> Step 7: התאמת ו Queues עבור שרתים המפעילים מספר משחקים במקביל, ליישם מערכת תור: Class Matchmaking המונחים: גמר פרטי Queue < PlayerRef > תור = חדש LinkedList < > ההנפקה הפרטית הנדרשת שחקנים; שחקן ללא תוספת (PlayerRef Player) המונחים:add(player); בדיקה (); } בדיקה אחרונה ב-3 ביולי 2008. ^ אם (הופנה מהדף= Requireplayers) { זירת ארנה = זירה Manager. FindAvailablearena(); אם (אכן) (int i=0; i < Require שחקנים, i++ PlayerRef Player = תור.poll (); זירת המשחק (שחקן); } } } } Hytale's Built-in Party System מאפשר לשחקנים להתחבר ולהישאר יחד עם העברות השרתים. ההתאמות שלך צריכות לכבד קבוצות של המפלגה - חברי קבוצת תור יחד ולמקם אותם באותו צוות בעת האפשר. Existing Minigame Mods to Study אל תבנו מאפס - למדו מה כבר על CurseForge: Mod Type תכונות עיקריות למחקר < Strong>Hunger Games Last Man StandingMulti-arena Management, מערכת הלובית, ספירה לאחור, שלבי PvP, Auto-resetd> Bos Arena< PvE ArenaNPC חנויות חוזים, בחזה לבז לשחקן, בוסים הניתנים להגדרהtr>tr>tr> Wave Combat ArenasHorde ModeWave Createing, Troubleing, Reward Systems SkyblockIsland SurvivePer-player הופעות בעולם, מעקב, מפגשי בוס מודל משחקי הרעב שווה במיוחד ללמוד - הוא מדגים את מחזור החיים המלא של minigame תחרותי: לובי ספירה לאחור / PvP / Deathmatch - תוצאות איפוס. Built-in Platform תכונות עבור Minigame Server Hytale מספקת מספר תכונות מתוך הקופסה שבה שרתי Minecraft זקוקים לתוספים עבור: Discoveryקטלוג: נבנה לתוך התפריט הראשי - שחקנים יכולים למצוא את שרת minigame שלך ללא אתרי רישום חיצוניים < Strong>Party System: חבר אינדיאני מארגן כי נמשך על פני העברות השרת Payment Gateway: נבנה לתוך הלקוח עבור שרתים שרוצים לייצר קוסמטיקה או perks Permissions Framework: רמת המשתמש, המבוססת על הקבוצה, והרשומה של כרטיס הבר תואם את Deployment Checklist < Strong>Build your JAR: ./gradlew Building>>> Test Local: זרוק %AppData%/Roaming/Hytale/UserData/Mods/code> Test עם לקוחות מרובים: עדכון 4 מאפשר מספר מקרים של Hytale במחשב אחד - תרחישים מרובי משתתפים מקומיים Deploy לשרת: Upload JAR כדי /opt/hytale/Server/mods/ שם הסרטון: CurseForge: חבילה כמו Plugin עם manifest.json List Your Server: הוסף את זה ל