कैसे Hytale में कस्टम Minigames का निर्माण करने के लिए: सर्वर डेवलपर गाइड

By HytaleCharts Team श्रेणी: Name मिनट पढ़ा

अगले बेड वॉर्स या हंगर गेम्स का निर्माण करना चाहते हैं? यह गाइड पूर्ण कार्यप्रवाह को कवर करता है - गेम स्टेट मशीनों और एरेना मैनेजमेंट से ECS आधारित खिलाड़ी ट्रैकिंग, मैचमेकिंग और तैनाती तक। मौजूदा CurseForge minigame mods से वास्तविक उदाहरण शामिल हैं।.

Hytale के सर्वर-साइड आर्किटेक्चर इसे विशिष्ट रूप से कस्टम मिनीगेम के लिए अनुकूल बनाता है। Minecraft के विपरीत जहां गेम मोड प्लगइन्स वेनिला सैंडबॉक्स के खिलाफ लड़ाई करते हैं, हाइटेल के प्लगइन एपीआई और ईसीएस आपको इकाई व्यवहार, विश्व राज्य और खेल प्रवाह पर सीधे नियंत्रण देते हैं। यदि आपने Bukkit minigames बनाया है, तो अवधारणाओं का अनुवाद - लेकिन कार्यान्वयन क्लीनर है। इस गाइड में प्रत्येक minigame की जरूरत को कवर किया गया है: खेल राज्य प्रबंधन, अरेना उदाहरण, खिलाड़ी ट्रैकिंग, स्कोरिंग, मैचमेकिंग और तैनाती। आर्किटेक्चर: How Minigame Plugins Work in Hytale Before डाइविंग कोड में, हाइटेली मिनीगेम की उच्च स्तरीय वास्तुकला को समझते हैं: LayerPurposeImplementation खेल प्रबंधकOrchestrates सब कुछ - एरेना बनाता है, लॉबी का प्रबंधन करता है, रूट्स प्लेयर्स सिंगलटन सेवा आपके प्लगइन में Arena Instance अपने राज्य, खिलाड़ियों और विश्व क्षेत्र के साथ एक रनिंग गेम सत्रक्लास एक विश्व या क्षेत्र का प्रबंधन खेल राज्य मशीन चरण प्रवाह को नियंत्रित करता है - प्रतीक्षा, उलटी गिनती, खेल, समाप्तEnum + टाइमर तर्क प्रति अरेना Player DataTracks per-player state — स्कोर, टीम, alive/dead,statsECS खिलाड़ी संस्थाओं से जुड़े घटक Event handlers खिलाड़ी कार्रवाई के लिए प्रतिक्रिया — हत्या, ब्लॉक ब्रेक, जोन प्रविष्टिEventBus + ECS इवेंट सिस्टम प्रमाणन Step 1: गेम स्टेट मशीन Every minigame एक राज्य मशीन की जरूरत है। यह रीढ़ की हड्डी है जो क्या होता है और कब होता है। public enum GameState A वैटिंग, // लॉबी, खिलाड़ियों के लिए इंतजार खेल शुरू होने से पहले // उलटना स्थान सक्रिय गेमप्ले DEATHMATCH, // वैकल्पिक: अंतिम शोडाउन चरण // गेम ओवर, परिणाम दिखा रहा है प्रत्येक क्षेत्र के उदाहरण में अपना खुद का GameState है। स्थितियों के आधार पर संक्रमण होता है: WAITING → STARTING: न्यूनतम खिलाड़ी गिनती तक पहुँचे Starting → PLAYING: उलटी गिनती टाइमर समाप्त हो जाता है PLAYING → DEATHMATCH: समय सीमा या खिलाड़ी सीमा PLAYING/DEATHMATCH → ending: विन कंडीशन मीट (अंतिम खिलाड़ी जीवित, स्कोर पहुंच गया, आदि) ending>WAITING: परिणाम प्रदर्शित, arena रीसेट public class Arena A निजी गेमस्टेट स्टेट = गेमस्टेट। वैटिंग; निजी अंतिम सूची खिलाड़ियों = नए ArrayList(); निजी उलटी गिनती = 10; सार्वजनिक void tick() A स्विच (राज्य) { WAITING -> { अगर (players.size) >= MIN_PLAYERS) { राज्य = GameState. स्टार्टिंग; गिनती = 10; हिन्दी हिन्दी A STARTING -> { उलटी गिनती प्रसारणकाउंटडाउन (काउंटडाउन); अगर (countdown { चेकविन कंडिशन(); हिन्दी (information) प्रदर्शनResults(); रीसेट करें(); राज्य = GameState. वैटिंग; हिन्दी हिन्दी हिन्दी Step 2: ECS घटक के साथ प्लेयर डेटा गेम-विशिष्ट डेटा को खिलाड़ी संस्थाओं में संलग्न करने के लिए Hytale की इकाई घटक प्रणाली का उपयोग करें। यह बाहरी को बनाए रखने की तुलना में क्लीनर है HashMap नक्शे - डेटा इकाई पर ही रहता है। public class Minigame खिलाड़ी कार्यान्वयन घटक और lt; अनंतता स्टोर और GT; { सार्वजनिक स्ट्रिंग एरियाना Id = ""; पब्लिक स्ट्रिंग टीम = ""; सार्वजनिक int हत्या = 0; सार्वजनिक int मौत = 0; सार्वजनिक int स्कोर = 0; सार्वजनिक बोलान alive = सच; लंबे समय तक मृत्यु = 0; @Override Public MinigamePlayer clone. मिनीगेम प्लेयर कॉपी = नया मिनीगेमप्लेयर (); प्रतिलिपि Id = this.arenaId; प्रतिलिपि टीम = this.team; copy.kills = this.kills; copy.deaths = this.deaths; copy.score = this.score; प्रतिलिपि.alive = this.alive; प्रतिलिपि.lastDeath = this.last मृत्यु; रिटर्न कॉपी; हिन्दी इस घटक को जब कोई खिलाड़ी एक क्षेत्र में शामिल हो जाता है, तो इसे स्कोरिंग और टीम लॉजिक के लिए गेमप्ले के दौरान पढ़ा जाता है, और जब वे छोड़ते हैं तो इसे हटा देता है। Step 3: गेम लॉजिक के लिए इवेंट हैंडलिंग Mingames को खिलाड़ी के कार्यों पर प्रतिक्रिया करने की आवश्यकता है। प्रत्येक प्रकार के लिए उपयुक्त घटना प्रणाली का उपयोग करें: इवेंट बस आयोजन (ग्लोबल) / खिलाड़ी सर्वर में जुड़ जाता है - उन्हें लॉबी दिखाते हैं GetEventRegistry().registerGlobal() PlayerReadyEvent.class. घटना -> teleporttoLobby (event.getPlayer) ); // प्लेयर डिस्कनेक्ट - एरेना से हटा दें GetEventRegistry().registerGlobal() PlayerDisconnectEvent.class, घटना -> हैंडलप्लेयरलेव (event.getPlayer) ); // चैट कमांड — /join, /leave, /spectate getEventRegistry().registerAsyncGlobal() PlayerChatEvent.class, भविष्य -> भविष्य.thenAccept(event -> { स्ट्रिंग msg = event.getMessage(); अगर (msg.startswith("/join")) A घटना.setCancelled(true); हैंडल JoinCommand (event.getSender)); हिन्दी (d) ECS कार्यक्रम (Entity-Specific) ब्लॉक ब्रेक, क्षति और अन्य इकाई स्तर के कार्यों के लिए, अनंतताEventSystem subclasses: / स्कोरिंग के लिए ट्रैक हत्या सार्वजनिक वर्ग किलट्रैकर विस्तार RefChangeSystem { @Override सार्वजनिक void onComponent जोड़ा गया (एन्टीटी स्टोर स्टोर, रेफरी इकाई, मौतप्रतिरोध मौत // एंटिटी की मृत्यु हो गई - किलर ढूंढें, अद्यतन स्कोर रेफरी किलर = मौत.getKiller(); अगर (किलर != null) { मिनीगेम प्लेयर किलरडाटा = getComponent() हत्यारा, MinigamePlayer.class; अगर (killerData!= null) { हत्यारा Data.kills++; हत्यारा Data.score += KILL_POINTS; हिन्दी हिन्दी हिन्दी Remember: ECS की घटनाओं को फिल्टर चरण में रद्द कर दिया जाना चाहिए, निरीक्षण चरण नहीं। यदि आप लॉबी चरण के दौरान ब्लॉक ब्रेकिंग को रोकना चाहते हैं, तो फ़िल्टर को गेम स्टेट की जांच करनी चाहिए और एक्शन निष्पादित होने से पहले रद्द करना चाहिए। Step 4: Arena Management उन खेलों के लिए जिन्हें अलग-अलग प्ले स्पेस (हंगर गेम्स, बेड वॉर्स) की आवश्यकता होती है, आपको अरेना उदाहरणों की आवश्यकता होती है: मल्टी-एरिना पैटर्न public class ArenaManager A निजी अंतिम मानचित्र arenas = new HashMap(); सार्वजनिक Arena createArena (स्ट्रिंग आईडी, लोकेशन सेंटर) A Arena isna = new Arena(id, center); arenas.put(id, arena); वापसी; हिन्दी सार्वजनिक Arena findAvailableArena () A रिटर्न arenas.values().stream () .filter(a -> a.getState) == गेमस्टेट वैटिंग (a -> a.getPlayerCount) .findFirst() .orElse(null); हिन्दी 中文(简体) 中文(繁體) arenas.values().forEach(Arena:tick); हिन्दी Arena रीसेट प्रत्येक गेम के बाद, क्षेत्र को अपने मूल राज्य में वापस आने की जरूरत है। दो दृष्टिकोण: Snapshot बहाल: गेम शुरू होने से पहले क्षेत्र के ब्लॉक डेटा को सहेजें, इसके बाद बहाल करें। अधिक स्मृति का प्रयोग करें लेकिन विश्वसनीय है। Prefab फिर से लोड: एक प्रीफ़ैब स्ट्रक्चर के रूप में अरेना को स्टोर करने के लिए Hytale के अंतर्निहित प्रीफ़ैब सिस्टम का उपयोग करें और प्रत्येक गेम के बाद इसे फिर से स्थान दें। क्लीनर और Hytale के मूल उपकरणों के साथ एकीकृत करता है। Step 5: टीम और स्कोरिंग टीम असाइनमेंट public void टीम (एरिना क्षेत्र) A सूची & lt;PlayerRef> खिलाड़ियों = arena.getPlayers(); संग्रह.shuffle(players); स्ट्रिंग [] टीमों = {"Red", "ब्लू", "ग्रीन", "पीला" के लिए (int i = 0; i < players.size(); i++) { मिनीगेम प्लेयर डेटा = getComponent( Players.get(i), MinigamePlayer.class; data.team = teams[i % teams.length]; हिन्दी स्कोरबोर्ड डिस्प्ले Use Hytale's Message class फॉर प्रारूपित स्कोर डिस्प्ले। संदेश प्रणाली रंग स्वरूपण, बोल्ड / इतालवी शैलियों और पैरामीटर प्रतिस्थापन का समर्थन करती है: public void broadcast स्कोर(Arena arena) { स्ट्रिंगबिल्डर sb = नया स्ट्रिंगबिल्डर ("§6=== स्कोरबोर्ड == \n arena.getPlayers().stream () .sorted(a, b) -> getScore(b) - getScore(a) ForEach(p -> { मिनीगेम प्लेयर डेटा = getComponent( P, MinigamePlayer.class; sb.append(String.format("§f%s: §e%d §7 §a%d pts\n", p.getUsername(), data.kills, data.score)); (d); arena.broadcast(sb.toString)); Step 6: जीत की स्थिति कॉमन मिनीगेम जीत की स्थिति और उन्हें कैसे कार्यान्वित करें: gam टाइपWin शर्त Last Man स्टैंडिंग1 खिलाड़ी/टीम लाइवDeath handler — गिनती alive player Score टार्गेटScore टार्गेट स्कोर अपडेट - चेक थ्रेसहोल्ड समय सीमा समय समाप्त होने पर उच्चतम स्कोरगेम टिक - चेक टाइमर Objective पूरा विशिष्ट कार्य (कैप्चर ध्वज, नष्ट बिस्तर) उद्देश्य बातचीत के लिए कस्टम ECS घटना Rounds N राउंड के सर्वश्रेष्ठ राउंड एंड हैंडलर - चेक सीरीज़ स्कोर प्रमाणन Step 7: Matchmaking and Queues एकाधिक समवर्ती गेम चलाने वाले सर्वरों के लिए, एक कतार प्रणाली को लागू करें: public class Matchmaking क्वि निजी फाइनल Queue queue = new LinkedList(); निजी अंतिम int की आवश्यकता खिलाड़ी; Englishالعربية中文(简体)हिन्दी; हिंदीاردو queue.add(player); चेकक्व्यू(); हिन्दी निजी void checkQueue() { अगर (queue.size) >= की आवश्यकता हैPlayers) A Arena arena = isnaManager.findAvailableArena(); अगर (arena!= null) { के लिए (int i = 0); मैं खिलाड़ी; i++) { खिलाड़ी = queue.poll (); arena.addPlayer(player); हिन्दी हिन्दी हिन्दी हिन्दी Hytale's बिल्ट-इन पार्टी सिस्टम खिलाड़ियों को समूहबद्ध करने और सर्वर ट्रांसफर पर एक साथ रहने देता है। आपके मैचमेकिंग को पार्टी समूहों का सम्मान करना चाहिए - कतार पार्टी के सदस्यों को एक साथ रखना और उन्हें उसी टीम पर रखना जब संभव हो। अध्ययन करने के लिए मौजूदा मिनीगेम मॉड खरोंच से निर्माण नहीं करना - CurseForge पर पहले से ही अध्ययन करें: Mod टाइप अध्ययन की मुख्य विशेषताएं Hunger Gamesअंतिम मैन स्टैंडिंगमल्टी-एरिना मैनेजमेंट, लॉबी सिस्टम, उलटी गिनती, PvP चरण, ऑटो-reset BossArena PvE ArenaNPC अनुबंध की दुकानें, प्रति खिलाड़ी लूट छाती, विन्यास योग्य बॉस Wave Combat ArenasHorde मोडWave spawning, कठिनाई स्केलिंग, रिवॉर्ड सिस्टम SkyblockIsland SurvivalPer-player दुनिया के उदाहरण, प्रगति ट्रैकिंग, बॉस का सामना प्रमाणन हंगर गेम्स मोड विशेष रूप से अध्ययन करने लायक है - यह एक प्रतिस्पर्धी मिनीगेम के पूर्ण जीवन चक्र को दर्शाता है: लॉबी → उलटी गिनती → PvP → डेथमैच → परिणाम → रीसेट। बिल्ट-इन प्लेटफॉर्म मिनिमगेम सर्वर के लिए सुविधाएँ Hytale उन बॉक्स से कई सुविधाएँ प्रदान करता है जो Minecraft सर्वर को प्लगइन्स की आवश्यकता होती है: Discovery catalog: मुख्य मेनू में निर्मित - खिलाड़ी बाहरी लिस्टिंग साइटों के बिना अपने मिनीगेम सर्वर को ढूंढ सकते हैं पार्टी सिस्टम: मूल मित्र समूह जो सर्वर ट्रांसफर में बनी रहती है भुगतान गेटवे: उन सर्वरों के लिए क्लाइंट में निर्मित जो सौंदर्य प्रसाधन या perks को monetize करना चाहते हैं Permissions Framework: उपयोगकर्ता स्तर, समूह आधारित और वाइल्डकार्ड अनुमति मिलान तैनाती चेकलिस्ट आपका निर्माण JAR: /gradlew build स्थानीय रूप से टेस्ट: %AppData%/Roaming/Hytale/UserData/Mods/ एकाधिक ग्राहकों के साथ टेस्ट: अद्यतन 4 एक पीसी पर एकाधिक हथेला उदाहरणों की अनुमति देता है - स्थानीय स्तर पर मल्टीप्लेयर परिदृश्यों का परीक्षण करें सर्वर के लिए तैनाती: JAR को /opt/hytale/Server/mods/ अपलोड करें CurseForge पर प्रकाशित: उचित manifest.json के साथ एक प्लगइन के रूप में पैकेज अपने सर्वर को सूचीबद्ध करें इसे HytaleCharts में "मिनीगेम्स" टैग के साथ जोड़ें ताकि खिलाड़ी आपको मिल सके फाउंडेशनल प्लगइन एपीआई अवधारणाओं के लिए इस गाइड का निर्माण होता है, हमारे एपीआई गाइड को संपादित करें। और नो-कोड सामग्री निर्माण के लिए जो आपके प्लगइन्स को पूरक करता है, हमारी जांच करें विजुअल स्क्रिप्टिंग गाइड एक मिनीगेम सर्वर का निर्माण? इसे हमारे Discord पर साझा करें - हम नियमित रूप से सामुदायिक निर्माण की सुविधा देते हैं।