چگونه برای ساخت بازی های کوچک سفارشی در Hytale: راهنمای توسعه دهنده سرور

By HytaleCharts Team Category: technical 7 min read

آیا می خواهید جنگ های بعدی یا بازی های گرسنگی را در Hytale بسازید؟ این راهنما جریان کار کامل را پوشش می دهد - از ماشین های حالت بازی و مدیریت عرصه به ردیابی بازیکن ECS، بازی سازی و استقرار. شامل نمونه های واقعی از روش های بازی کوچک بازی نفرین شده موجود است.

Hytale معماری سمت سرور آن را به طور منحصر به فرد برای مینی گیم های سفارشی مناسب می کند. بر خلاف Minecraft که در آن پلاگین های حالت بازی علیه Sandbox، API پلاگین Hytale و ECS به شما کنترل مستقیم بر رفتار سازمانی، حالت جهانی و جریان بازی. اگر مینی گیم های Bukkit را ساخته اید، مفاهیم ترجمه می شوند، اما پیاده سازی تمیزتر است. این راهنما سیستم های اصلی را پوشش می دهد هر مینی بازی نیاز دارد: مدیریت حالت بازی، نمونه های عرصه، ردیابی بازیکن، امتیاز، بازی سازی و استقرار. Architecture: How Minigame Plugins در Hytale قبل از غواصی در کد، معماری سطح بالایی از یک مینی بازی Hytale را درک کنید: LayerPurpose Implementation Game Manager Orchestrates همه چیز - ایجاد عرصه، مدیریت lobbies، بازیکنان مسیر Singleton سرویس در پلاگین شما Arena Instance یک جلسه بازی در حال اجرا با حالت خود، بازیکنان و منطقه جهانی کلاس مدیریت یک جهان یا منطقه Machine State Machine جریان فاز را کنترل می کند – انتظار، شمارش معکوس، بازی کردن، پایان دادن به Enum + timer منطق در هر/tr> Player dataTracks for-player state - امتیاز، تیم، زنده / مرده، آمارECS اجزای متصل به نهادهای بازیکن varrs واکنش به فعالیت های بازیکن - کشتن، شکستن بلوک، ورود منطقه ای حتیtBus + ECS سیستم رویداد Step 1: Game State Machine هر مینی بازی به یک ماشین دولتی نیاز دارد. این ستون فقرات است که کنترل آنچه اتفاق می افتد و چه زمانی. code> Public enum GameCount { منتظر بازیکنان باشید شروع بازی، شمارش معکوس قبل از شروع بازی بازی کردن، // گیم پلی فعال DeadTHMATCH، اختیاری: مرحله نهایی نمایش ENDING بازی Over، نشان دادن نتایج } هر مثال دارای Game State است. انتقال بر اساس شرایط اتفاق می افتد: WAIING حداقل تعداد بازیکن به رسید STARING تایمر شمارش معکوس منقضی می شود playing محدودیت زمان یا آستانه بازیکن Playing/DEATHMATCH شرط برنده (آخرین بازیکن زنده، نمره به دست آمده، و غیره) Ending نتایج نشان داده شده، صحنه Reset> کلاس عمومی Arena { حالت بازی خصوصی = Game State هشدار؛ فهرست نهایی خصوصی:PlayerRef >؛ بازیکنان = آرایه جدید ویت؛ >؛ شمارش معکوس خصوصی = 10 public disk تیک() { تغییر (حالت) [در صورت لزوم] اگر (بازیگران.size() = بازی های کامپیوتری { کشور = Game State آغاز؛ شمارش معکوس = 10 😉 😉 (تغییرمسیر) شمارش معکوس؛ پخش (Countdown) اگر (کاهش بررسی داوری (); 😉 در پایان: صفحه نمایش (); (تغییرمسیر) کشور = Game State هشدار؛ 😉 😉 😉 } مرحله ۲: داده های بازیکن با اجزای ECS استفاده از سیستم Entity String Hytale برای اتصال داده های خاص بازی به نهادهای بازیکن. این تمیزتر از حفظ کد خارجی است. HashMap ؛ نقشه – داده ها بر روی خود واحد زندگی می کنند. کلاس عمومی Minigame Player پیاده سازی بخش عرصه عمومی Id = " تیم رشته عمومی = " قتل عام = 0 مرگ عمومی = 0 امتیاز عمومی = 0 دانلود موسیقی متن فیلم The Public boolean Alive مدت زمان طولانی مرگ = 0 @ Override عمومی MinigamePlayer کلون () بازی Minigame نسخه Player = New MinigamePlayer () کپی Id = این کپی تیم = این کپی کردن: این کپی: مرگ = این مرگ؛ کپی: این کپی برداری = این دانلود زیرنویس فارسی فیلم The Last Death مرگ؛ بازگشت کپی؛ 😉 } این جزء را هنگامی که یک بازیکن به یک عرصه ملحق می شود، آن را در طول گیم پلی برای امتیاز دادن و منطق تیم بخوانید و آن را هنگامی که ترک می کنند حذف کنید. مرحله 3: Eventching for Game Logic MiniGames باید به اقدامات بازیکن واکنش نشان دهد. از سیستم رویداد مناسب برای هر نوع استفاده کنید: Event رویدادهای اتوبوس (Global) بازیکن به سرور ملحق می شود – به آنها نشان دهید دریافت کننده (.registerGlobal) بازی PlayerReadyEvent رویداد -> TeleportToLobby (event.getPlayer()) ) // بازیکن قطع می کند - حذف از صحنه دریافت کننده (.registerGlobal) PlayerDisconnectt.class رویداد -> doPlayer Leave (event.getPlayer()) ) // دستور چت - /join, / Leave, /spectate دریافت کننده (.registerAsyncGlobal) ClassChat آینده > آینده رشته msg = Event.getMessage (); اگر (msg.starts with ("/join") { نام بازی: SetCancelleded (True)؛ فرمان (D.getSender() 😉 ) ECS رویدادها (Entity-Specific) برای شکستن بلوک، آسیب و سایر اقدامات سطح سازمانی، ایجاد Entitytsystem زیر کلاس ها: دانلود موسیقی متن فیلم Track Kill for Score کلاس عمومی KillTracker گسترش عدم تغییر سیستم @ Override فضای عمومی درComponent اضافه شده (EntityStore store، عدم وجود، مرگ و میر // Entity درگذشت - پیدا کردن قاتل، به روز رسانی نمرات قاتل: مرگ در صورتی که (قاتل)= null بازی Minigame دانلود بازی Player KillerData = GetComponent قاتل، MinigamePlayer.class اگر (قاتل داده!= null) قاتل قاتل قاتل داده ها قاتل قاتل قاتل داده ها KILL_POINTS 😉 😉 😉 } به یاد داشته باشید: رویدادهای ECS باید در فاز فیلتر لغو شوند، نه مرحله بازرسی. اگر می خواهید از شکستن در طول فاز لابی جلوگیری کنید، فیلتر باید قبل از اجرای عمل، حالت بازی را بررسی و لغو کند. Step 4: Arena Management برای بازی هایی که نیاز به فضاهای بازی جداگانه دارند (بازی های گرسنه، جنگ های تختخواب)، شما به موارد میدانی نیاز دارید: الگوی چند منظوره کلاس عمومی ArenaManager { نقشه نهایی خصوصی:String، Arena >؛ عرصه ها = HashMap < جدید؛ >؛ عمومی Arena (String id, Location Center) { صحنه Arena = New Arena (id, Center) عرصه ها بازگشت؛ 😉 عمومی Arena FindAvailable Arena() { بازگشت به عرصه.values().stream() فیلتر (a -> a.get State() == بازی (تغییرمسیر) فیلتر (a -> a.getPlayerCount() |firstFind() و یا علی (ع) 😉 گزینه عمومی LockAll() زمینه ها.values() برای هر (Isna:tick)؛ 😉 } arena Reset بعد از هر بازی، عرصه باید به حالت اصلی خود بازگردد. دو روش: Snapshot بازیابی: ذخیره داده های بلاک منطقه قبل از شروع بازی، آن را پس انداز کنید. استفاده از حافظه بیشتر اما قابل اعتماد است. پیش بارگذاری مجدد: از سیستم آرایش داخلی Hytale استفاده کنید تا عرصه را به عنوان یک ساختار پیش ساخت ذخیره کنید و بعد از هر بازی دوباره آن را جایگزین کنید. تمیز کردن و ادغام با ابزار بومی Hytale مرحله 5: تیم ها و Scoring Team Assignment code> Publichole تیم ها (Ana Field) { List بازیکنان = عرصه.getPlayers (); دسته بندی ها تیم ها = {red}، "Blue"، "Green"، "Yellow"؛ برای (int I = 0; i < Player.size) I++) بازی Minigame داده های Player =Component () بازیکنان (i)، MinigamePlayer.class؛ داده ها 😉 } Scoreboard Display از کلاس Message Hytale برای نمایش امتیاز فرمت شده استفاده کنید. سیستم پیام از قالب بندی رنگ، سبک های جسورانه /italic و جایگزینی پارامتر پشتیبانی می کند: code> پخش عمومی امتیازها (Ana Field) StringBuilder sb = New StringBuilder دانلود زیرنویس فارسی فیلم Scoreboard === بازی.getPlayers().stream() (a, b) -> GetScore (b) – GetScore (a) برای هر یک (p ->) بازی Minigame داده های Player =Component () بازی MinigamePlayer.class sb.append (String.format ("§%s: §%d §7 را می کشد § § a٪d pts\n" p.get Username()، داده ها.kills، داده ها.score)؛ 😉 مرحله (b.toString() } مرحله 6: شرایط برنده مینی گیم برنده شرایط و چگونگی پیاده سازی آنها: Game TypeWin Conditioncheck in/tr> Last Man Standing1 Player/Team Live Dead Death handler - شمارش بازیکنان زنده Score Target ابتدا به x امتیاز به روز رسانی نمره - چک آستانه Time Limit بالاترین نمره زمانی که زمان منقضی می شود Game تیک - Check تایمر Obخصیص کامل کار خاص (پرچم، از بین بردن تخت) Client ECS برای تعامل عینی Rounds بهترین دسته بندی انتهای NRound >Round End handler را بررسی کنید مرحله 7: Matchmaking و Queues برای سرورهایی که چندین بازی همزمان را اجرا می کنند، یک سیستم صف را پیاده سازی کنید: Public Class Matchmaking { نهایی خصوصی Queue صف = جدید LinkedList < > فینال خصوصی مورد نیاز بازیگران؛ بازی عمومی (PlayerRef Player) صف (بازیگر)؛ چک کنید (); 😉 چک کردن خالی خصوصیQueue() اگر (queue.size() = NeedPlayers) { Arena Field =Manager.FindAvailable Arena (); اگر (مخالق!) برای (int I = 0; I < بازیکنان؛ i++ PlayerRef Player = صف.poll (); بازی AddPlayer (player)؛ 😉 😉 😉 😉 } Hytale’s Built-in party System به بازیکنان اجازه می دهد تا با هم در انتقال سرور شرکت کنند. بازی سازی شما باید به گروه های حزبی احترام بگذارد - اعضای حزب صف در کنار هم و آنها را در همان تیم در صورت امکان قرار دهید. Existing Minigame Mods برای مطالعه از ابتدا نسازید – مطالعه کنید که در حال حاضر در CurseForge: Mod نوع ویژگی های کلیدی برای مطالعه Games Last Man Standing Multi-arena Management، سیستم لابی، شمارش معکوس، مراحل PvP، خودکارسازی/tr> Bos Arena PvE Arena NPC مغازه های قرارداد، قفسه سینه های تک نفره، configurable Boss Wave Combat Arenas Mode Wave، سختی مقیاس، سیستم های پاداش SkyblockIsland Survival Per-player world Case، ردیابی پیشرفت، رئیس مواجه می شود شیوه بازی های گرسنگی به طور خاص ارزش مطالعه - آن را نشان می دهد چرخه عمر کامل از یک مینی بازی رقابتی: لابی شمارش معکوس - PvP ~ Deathmatch نتایج تنظیم مجدد. Built-in Platform Features for Minigame Servers Hytale چندین ویژگی را از جعبه ای که سرورهای Minecraft به افزونه نیاز دارند، فراهم می کند: Discovery Catalog: ساخته شده در منوی اصلی - بازیکنان می توانند سرور مینی بازی خود را بدون سایت های لیست خارجی پیدا کنند party System: گروه بندی دوست بومی که در انتقال سرور ادامه دارد Payment Gateway: ساخته شده در مشتری برای سرورهایی که می خواهند لوازم آرایشی یا Perks Permissions Framework: مجوز کاربر، مبتنی بر گروه و کارت وحشی مطابق با Deployment Checklist ساخت JAR: Testing به صورت محلی: %AppData%/Roaming/Hytale/UserData/Mods/ Testing با چندین مشتری: به روز رسانی 4 اجازه می دهد تا چندین مورد Hytale در یک کامپیوتر - سناریوهای چند نفره را به صورت محلی تست کنید Deploy to server: JAR را به /opt/hytale/Server/mods//li> آپلود کنید. Publish on CurseForge: بسته به عنوان یک پلاگین با manifest.json سرور خود را انتخاب کنید: آن را به