آخرين ارسال هاي تالار گفتمان
|
موضوعات
آمار
آخرین کاربران
امکانات جانبی
جدید ترین مطالب
درباره ما
|
این راهنما تلاش می کند تا فرایند نحوه نوشتن یک Gamemode مناسب را توصیف کند. اگر شما فقط با استفاده از اسکریپت برای MTA شروع کردید، ممکن است بخواهید دیگر آموزشهای اسکریپت را در صفحه اصلی اول بررسی کنید.
Gamemode یک منبع است که هر بار شروع می شود، تمام گیم پلی را کنترل می کند. این ممکن است شامل گفتن بازیکنان در مورد آنچه که انجام می دهند، ایجاد بازیکنان، ایجاد تیم ها، تعریف آنچه که بازیکنان باید انجام دهند برای برنده شدن یا گرفتن امتیاز و خیلی بیشتر. مثالها عبارتند از نژاد و مرگ و میر.
برای قرار دادن آن به سادگی، یک Gamemode مناسب است که استفاده کامل از فایل سیستم فایل نقشه MTA است.این بدان معنی است که کد gamemode هیچ اطلاعات خاص نقشه ای را که در آن سخت است، مانند موقعیت بازیکنان یا اتومبیل ها ندارد. در عوض Gamemode باید بتواند فایلهای Map را بارگذاری کند که این اطلاعات را تعریف می کنند. به این ترتیب gamemode می تواند چندین نقشه داشته باشد؛ همچنین، افراد می توانند فایل های Map را برای gamemode با ویرایشگر نقشه MTA ایجاد کنند که بسیار راحت تر از نوشتن کد است.
یک نمونه واضح از "gamemode مناسب" MTA: Race است. این اجازه می دهد تا نقشه های usermade با بسیاری از امکانات در فایل .map. برای تغییر نقطه اکتشاف، اشیاء و غیره، کاربر نیازی به ویرایش خود gamemode ندارد.
فایل های نقشه اساسا اسناد XML با یک فرمت .map است.آنها یک محیط را برای بازی یک یا چند gamemodes خاص درون تعریف می کنند. با این وجود نباید قواعد بازی را تغییر داد - آنها توسط gamemode تعریف می شوند.
هر عنصر در یک نقشه مربوط به یک گره در فایل .map است. نحوی استاندارد برای موارد رایج مانند نقطه اکتشاف، وسایل و وسایل نقلیه وجود دارد. با این حال، برای "خاص"، اطلاعات خاص gamemode، شما باید سنتکس خود را اختراع کنید.
بگذارید یک نمونه Capture را برای gamemode پرچم بگیریم. نقشه ای برای این gamemode نیاز به طور عمده برای تعریف مکان های spellpoint و پرچم، و در نهایت اشیا و وسایل نقلیه. یک فایل نقشه ساده می تواند به صورت زیر باشد:
<نقشه><spawnpointid="spawnpoint1"posX="1959.5487060547"posY="- 1714.4613037109"posZ="877.25219726563"rot="63.350006103516"model="0"/><pickupid="زره 1"posX="1911.083984375"posY="- 1658.8798828125"posZ="885.40216064453" نوع ="زره"health="50"respawn="60000"/><flagposX="1959.5487060547"posY="- 1714.4613037109"posZ="877.25219726563"team="blue"/> ... </ map>
در اینجا شما می توانید دو عنصر MTA را مشاهده کنید - یک spellpoint و یک وانت. مهمتر از همه، این .map دارای گره سفارشی "پرچم" است که موقعیت و رنگ پرچم را تعریف می کند. با استفاده از منابع خارجی موجود، می توان از اکتشاف و جمع آوری داده ها استفاده کرد. عناصر سفارشی باید توسط gamemode پردازش شوند.
برای خلاصه کردن - ما می خواهیم ورودی نقشه گیر جرمی که ما در MTA دیدیم: نژاد. کاربران نبايد مجبور باشند که تمامي اسکريپت gamemode خود را لمس کنند.
همانطور که در بالا ذکر شد gamemode شما نیاز به بازیابی عناصر سفارشی دارد که در یک فایل نقشه تعریف شده است و آنها را پردازش می کند. این کاملا آسان است که در زیر نشان داده شده است.
- یک جدول را با تمام عناصر پرچم بازیابی کنید flagElements محلیمحلی= getElementsByType ("پرچم") - حلقه از طریق آنهابرایکلید،ارزشدرجفت(flagElements)انجامدهید - اطلاعات خود را دریافت کنیدlocal posX = getElementData (value، posX)محلی posY = getElementData (مقدار،"posY")محلی posZ = getElementData (مقدار،"posZ")تیممحلی= getElementData (ارزش،"تیم") - ایجاد یک شی با توجه به موقعیت پرچم createObject (1337، posX، posY، posZ) - خروجی تیمی که پایه ای برای آن ایجاد کردیم outputChatBox ("پایه برای تیم"..تیم.."ایجاد")پایان
تابع getElementsByType یک جدول از تمام عناصر نوع خاصی را بازیابی می کند (نوع مربوط به نام گره در فایل .map است). این کار برای هر دو نوع سفارشی و ساخته شده است در انواع MTA (مانند "وسیله نقلیه" و یا "پخش").getElementData می تواند برای بازیابی ویژگی های xml تنظیم شده در فایل .map استفاده شود. در این مثال ساده، یک شی در مکان پرچم ایجاد می شود و یک پیام در جعبه چت نمایش داده می شود. در حقیقت، در حین بارگذاری نقشه، قطعا نیاز به انجام بیشتر دارید، مانند در این مورد ایجاد اشکال برخورد برای شناسایی بازیکنان پرچم.
پس از خواندن بخش فوق، باید مشخص شود که gamemode همیشه باید شامل دو بخش باشد:
در حال حاضر به جای نوشتن نقشه باربر برای هر gamemode تک، مدیر نقشه عمل می کند برای بارگذاری gamemodes و نقشه ها. به سادگی می توان گفت هنگام وارد کردن فرمان صحیح (به عنوان مثال gamemode ctf ctf-italy) هر زمان که "ctf" و "ctf-italy" را با استفاده از یک رویداد ( onGamemodeMapStart ) شروع کنید، به منبع ctf بگویید که یک نقشه بارگذاری شد منابع "ctf" پس از آن می توانند به اطلاعات "ctf-italy" دسترسی پیدا کنند و شروع به تولید بازیگران و غیره کنند.
برای استفاده از سرویس mapmanager، منبع gamemode شما باید به عنوان اولین بار برچسب گذاری شود. به طور خاص، ویژگی "type" تگ <info> خود را به "gamemode" در meta.xml تنظیم کنید. همچنین شما می توانید ویژگی "نام" را به یک نام دوستانه (مانند "ضبط پرچم") تنظیم کنید که به جای نام منابع به عنوان ASE نمایش داده خواهد شد.
<! - meta.xml در "cowcatapult" gamemode -><meta><info نوع ="gamemode"name="گاو catapulting 2.0"/> </ meta>
اگر gamemode شما بارگذاری نقشه های سفارشی است، شما باید برای دسته بندی ها اضافه کنید
هنگامی که یک نقشه برای gamemode شما شروع یا متوقف می شود، آنها را اخراج می کنند و منابع نقشه را به عنوان یک پارامتر انتقال می دهند. در داخل تابع handler برای این رویدادها می توانید تمام اطلاعاتی را که از فایل های نقشه منابع و فایل های پیکربندی نیاز دارید را استخراج کنید.
function startCtfMap (startedMap) - startMap حاوی مرجع به منبع نقشه است mapRoot = getResourceRootElement (startedMap) - گره root از نقشه آغاز شده را دریافت کنید flagElements محلی = getElementsByType ("پرچم"، mapRoot) - همه پرچم ها را در نقشه دریافت کنید و آنها را در یک جدول ذخیره کنید - اطلاعات مربوط به بارگذاری مانند مثال بالا را وارد کنید - بازیکنان اکتشاف و غیرهپایان addEventHandler ("onGamemodeMapStart"، getRootElement ()، startCtfMap)
نقشه ها منابع جداگانه ای هستند. این کار انجام شده است، بنابراین هیچ ویرایش از منبع gamemode برای ساخت یک نقشه سفارشی ضروری نیست، و همچنین به شما اجازه می دهد تا بسته های اسکریپت / پیکربندی خاص نقشه را با آنها بسته کنید.
برای ایجاد نقشه سازگار با gamemode خود، meta.xml منبع خود را باز کنید و آن را نیز برچسب گذاری کنید: ویژگی "type" باید بر روی "map" تنظیم شود و ویژگی gamemodes باید یک لیست جدا شده با کاما باشد (بدون فضای ) از نام منابع gamemode که نقشه با آن کار می کند.
<! - meta.xml نقشه -><meta><infotype="map"gamemodes="cowcatapult، attack، tdm"/> </ meta>
هنگامی که همه چیز را تنظیم می کنید، مدیران از این دستورات برای شروع / توقف gamemodes استفاده می کنند: / gamemode gamemodeName [mapName] (پارامتر اختیاری اجازه می دهد تا یک نقشه اولیه، پیش فرض به هیچ کدام) / changemap mapName [gamemodeName] (پارامتر اختیاری gamemode را مشخص می کند برای شروع نقشه با پیش فرض به یک فعلی)
مدیر نقشه چند توابع دسترسی بیشتری را صادر می کند که شما مجبور نیستید استفاده کنید، اما ممکن است مفید باشد.
چندین منبع دیگر وجود دارد که gamemodes باید با آن سازگار باشد.
راهنمای کمک باید رابط استاندارد برای بازیکنان زمانی که آنها به کمک نیاز دارند. اگر از helpmenager برای کمک به gamemode خود استفاده کنید، هر بازیکنانی که قبل از استفاده از admin manager (به عنوان مثال در gamemodes دیگر)، بلافاصله می دانند که چگونه به آنجا بروند. همچنین، در صورت لزوم، برای منابع مختلف در یک پنجره، کمک می کند.
دو راه اصلی برای استفاده از help manager وجود دارد:
برای اطلاعات بیشتر در مورد چگونگی انجام این کار، به صفحه راهنمای مدیریت کمک مراجعه کنید.
نمره نمایش بازیکنان و تیم های حاضر در حال بازی را نمایش می دهد. ستون های سفارشی را به آن اضافه کنید تا اطلاعات خاص نقشه را فراهم کنید. به عنوان مثال ستون 'points' در gamemode 'ctf' می تواند امتیاز های بازیکن را از طریق کشتن یا تسخیر به دست آورد. به طور معمول، برای اطلاعات بیشتر صفحه کمک صفحه رتبه بندی را مشاهده کنید.
نقشه سیکلر کنترل آنچه gamemodes و نقشه ها بر روی یک سرور انجام می شود. شما می توانید برای مثال چند بار در یک ردیف یک نقشه تا زمانی که آن را به یک بعدی تغییر کند. برای رسیدن به این هدف، هنگامی که gamemode خود را به پایان رساند (به عنوان مثال هنگامی که یک دور پایان می یابد)، باید نقشه cycler را به آن بگویید.
منابع بخش مهمی از MTA هستند. یک منبع اساسا یک پوشه یا فایل زیپ است که حاوی مجموعه ای از فایل ها، و همچنین یک فرایند متا است که به سرور توضیح می دهد که چگونه منابع باید بارگذاری شوند و چه فایل هایی حاوی آنها باشد. یک منبع می تواند به عنوان بخشی از معادل یک برنامه در حال اجرا در یک سیستم عامل دیده می شود - می توان آن را آغاز و متوقف کرد، و چندین منبع را می توان در یک بار اجرا کرد.
همه چیزهایی که با اسکریپت کردن در منابع اتفاق می افتد، چه منابع تعیین می کند، اگر یک gamemode، یک نقشه یا هر چیز دیگری باشد. MTA دارای منابعی است که می توانید به طور دلخواه در gamemodes خود استفاده کنید، مانند نقشه هایی که می توانید در یک منطقه بازی یا playpicks برای ایجاد یخچال های سلاح نگه دارید.
نکته: اولین قدم برای شروع اسکریپت Lua باید از یک ویرایشگر Lua استفاده شود. این باعث می شود اسکریپت بسیار ساده تر باشد. ما Visual Studio Code ،Sublime Text ، Notepad ++ یا LuaEdit را توصیه می کنیم . همچنین یک ویرایشگر اسکریپت MTA غیر رسمی (در حالت کار در حال پیشرفت) وجود دارد که میتوانید آن را تست کنید. |
ما برای اولین بار یاد بگیریم که چگونه یک اسکریپت اساسی ایجاد کنیم که به بازیکن امکان می دهد که قدم به قدم در شهر حرکت کند.
بیایید نگاهی به ساختار فایل اسکریپت بیاندازیم. به پوشه MTA Server بروید و مسیر زیر را دنبال کنید:
server / mods / deathmatch / منابع /
شما تعداد زیادی از فایل های زیپ را مشاهده خواهید کرد که اسکریپت نمونه بسته شده با MTA است. هر پرونده یک "منبع" است و زمانی که شروع می شود، همه آنها توسط سرور جدا شده و بارگذاری می شوند. برای ایجاد منابع خود، به سادگی یک پوشه با نام مورد نظر خود را ایجاد کنید. ما از این "آموزش" استفاده خواهیم کرد.
حالا شما باید زیر این پوشه باشید:
server / mods / deathmatch / resources / myserver /
به منظور اجازه دادن به سرور می دانم که چه در منبع است، یک فایل متا. xml باید برای فهرست محتوای منبع ایجاد شود. این باید در دایرکتوری ریشه منابع قرار بگیرد، که پوشه "myserver" در مورد ماست. بنابراین یک فایل متنی ایجاد کنید و آن را meta.xml نامید و آن را با notepad باز کنید.
کدهای زیر را در فایل meta.xml وارد کنید:
<meta><infoauthor="YourName"type="gamemode"name="My Server"description="اولین سرور MTA من"/><scriptsrc="script.lua"/> </ meta>
در برچسب <info /> یک فیلد "type" وجود دارد که نشان می دهد که منبع یک gamemode است به جای یک عدد منظم یا یک نقشه که بعدا توضیح داده خواهد شد.Gamemode چیزی است که شما نیاز دارید که یک سرور مستقل داشته باشید.
تگ <script /> نشان می دهد که فایل های اسکریپت موجود در منابع، که بعدا ایجاد می کنیم.
توجه داشته باشید که در تگ <script /> در بالا، فایل .lua زیر پوشه دیگری نیست. بنابراین ما این فایل را در همان پوشه به عنوان meta.xml ایجاد می کنیم. حالا شما می توانید کد زیر را در script.lua کپی کنید و وارد کنید:
spawnx محلی،کرهای Y، spawnZ =1959.55،-1714.46،10تابع joinHandler () spawnPlayer (منبع، spawnX، spawnY، spawnZ) fadeCamera (منبع،درست) setCameraTarget (منبع،منبع) outputChatBox ("به سرور من خوش آمدید"،منبع)پایان addEventHandler ("onPlayerJoin"، getRootElement ()، joinHandler)
این اسکریپت در هنگام هماهنگی (x، y، z) که در بالا مشخص شده است، شما را در هنگام پیوستن به بازی ایجاد می کند. توجه داشته باشید که باید از تابع fadeCameraاستفاده شود یا صفحه نمایش سیاه و سفید باشد. همچنین، در نسخه های بعد از DP2، شما باید هدف دوربین را تنظیم کنید (در غیر اینصورت تمام بازیکن به نظر می رسد آسمان آبی است).
متغیر منبع نشان می دهد که کدام رویداد را فعال کرده است. از آنجا که یک بازیکن هنگام پیاده سازی کد پیوست، شما از این متغیر برای نگاه کردن به آن استفاده می کنید.بنابراین آن بازیکن را به جای همه یا یک فرد تصادفی بکشید.
اگر نگاه دقیقتری به addEventHandler داشته باشیم ، می توانید 3 چیز را مشاهده کنید: 'onPlayerJoin'، که نشان می دهد هنگامی که آن را فعال می کند. getRootElement () که توسط چه / چه کسی می تواند باعث شود.(getRootElement () همه چیز / همه است) و joinHandler، که نشان دهنده تابع است که باید پس از رویداد triggered شود. جزئیات دیگر بعدا در مثال دیگری توضیح داده می شود، حالا اجازه دهید فقط سرور را اجرا کنیم و آن را امتحان کنید!
برای دریافت سرور، به سادگی اجرای اجرایی زیر سرور / دایرکتوری را اجرا کنید. یک لیست از آمار سرور برای اولین بار نشان داده می شود؛ توجه داشته باشید که شماره پورت، که شما هنگام پیوستن به بازی نیاز دارید. سپس سرور تمام منابع را تحت دایرکتوری mods / deathmatch / resources / بارگذاری می کند، و سپس "آماده پذیرش اتصالات!"
قبل از اتصال به سرور، باید Gamemode را اجرا کنید. تایپ "start myserver" را فشار دهید و Enter را فشار دهید.سرور Gamemode را که تازه ایجاد کرده اید شروع خواهد کرد و هر خطایی و هشدار را از این نقطه نشان خواهد داد.اکنون می توانید مشتری MTA و «Quick Connect» را با استفاده از آدرس IP سرور خود و شماره پورت که قبلا دیده اید شروع کنید. اگر همه چیز خوب پیش رود، پس از چند ثانیه شخصیت شما در خیابان های لوس سانتوس راه می رود.
بعد ما یک فرمان به اسکریپت خود اضافه می کنیم که بازیکنان می توانند برای ایجاد یک وسیله نقلیه در کنار موقعیت خود استفاده کنند. شما می توانید آن را امتحان کنید و اسکریپت های پیشرفته تر را با مدیر نقشه ، که این آموزش را ادامه می دهد، بررسی کنید. شاخه دیگری از این آموزش Introduction to GUI اسکریپت است ، شما می توانید آن را دنبال کنید تا ببینید که چگونه رابط کاربری گرافیکی در MTA کشیده شده و اسکریپت شده است.
بیایید به محتوای فایل script.lua بازگردیم . همانطور که در بالا ذکر شد، ما می خواهیم دستور ایجاد یک وسیله نقلیه را در کنار موقعیت فعلی شما در بازی فراهم کنیم. اولا ما باید یک تابع که میخواهیم تماس بگیریم را ایجاد کنیم و یک handler command که فرمان را ایجاد میکند که بازیکن میتواند وارد کنسول شود.
- ایجاد تابع call call handler، با استدلال: theplayer، command، vehicleModelfunction createVehicleForPlayer (theplayer، command، vehicleModel) - یک وسیله نقلیه و موارد دیگر را ایجاد کنیدپایان - یک دستیار فرمان ایجاد کنید addCommandHandler ("createvehicle"، createVehicleForPlayer)
نکته: نام های تابع در مثال های کد در wiki قابل کلیک هستند و به اسناد توابع مرتبط هستند.
اولین argument of addCommandHandler نام فرمان است که بازیکن قادر به وارد شدن است، دومین آرگومان عملکردی است که این فراخوانی می شود، در این صورتcreateVehicleForPlayer .
اگر قبلا در اسکریپت تجربه کرده باشید، متوجه خواهید شد که شما یک تابع مثل این را می نامید:
functionName (argument1، argument2، argument3،..)
functionName (theplayer، commandName، argument3،..)
اگر نگاهی دقیق تر به مثال پایین تر از بالا داشته باشیم، می توانیم argument1 را ببینیم theplayer و argument2 commandName است. thePlayer به سادگی کسی است که این دستور را تایپ کرده است، بنابراین هرچیزی که شما آن را می نامید، متغیر شامل بازیکنانی است که دستور را فعال کرده اند. commandName به سادگی دستوراتی است که تایپ کرده اند. بنابراین اگر آنها "/ greet" را تایپ کرده باشند، این استدلال حاوی "سلام" است. Argument 3 چیز دیگری است که بازیکن تایپ کرده است، شما آن را کمی در آموزش یاد خواهید گرفت. هرگز فراموش نکنید که 2 استدلال اول استدلال استاندارد هستند، اما شما می توانید آنها را به هر چیزی که می خواهید نامید.
ما این تابع addCommandHandler را قبلا نامگذاری کردیمو از آنجا که createVehicleForPlayer یک تابع نیز است، می توان آن را نیز به همین نام نام برد. اما ما برای استفاده از یک دستگیره فرمان استفاده می کنیم که آن را به صورت مشابه به صورت داخلی می نامند.
به عنوان مثال: کسی یک بازی "ساخت بازی 468" را در کنسول برای ایجاد سانچز ایجاد می کند، فرمانده فرمان، تابع createVehicleForPlayer را فراخوانی می کند، بهشرط اینکه ما این خط کد را در اسکریپت داریم:
createVehicleForPlayer (thePlayer، "createvehicle"، "468") - theplayer عنصری از بازیکن است که وارد فرمان شد
همانطور که می بینیم، چندین پارامتر را فراهم می کند: بازیکن که دستور را فراخوانی کرد، فرماندهی کرد و هر متن دیگری که بعد از آن بود، در این مورد "468" به عنوان شناسه خودرو برای سانچز. دو پارامتر اول با تمام دست اندرکاران دستورات مشابه هستند، که شما می توانید در صفحهaddEventHandler بخوانید. برای این واقعیت، شما همیشه باید حداقل دو پارامتر را برای استفاده از هر بعد از آن (به عنوان مثال برای پردازش متن که پس از فرمان وارد شده است، مانند مثال ما ID مدل خودرو) تعریف کنید.
نکته: شما باید بعد از اینکه عملکرد تابع handler را تعریف کردید، دستور handler را اضافه کنید، دیگری نمیتواند آن را پیدا کند. منظور از اعدام مهم است.
برای تکمیل عملکردی که ما ایجاد کردیم، باید به آنچه که باید انجام دهیم فکر می کنیم:
برای رسیدن به اهداف ما باید از چندین توابع استفاده کنیم.برای پیدا کردن تابع مورد نیاز برای استفاده، باید از فهرست توابع سرور بازدید کنیم. ابتدا ما نیاز به یک تابع برای به دست آوردن موقعیت بازیکنان. از آنجا که بازیکنان عناصر هستند، ابتدا به توابع Element که در آن تابعgetElementPosition را می بینیم، پرش می کنیم. با کلیک کردن بر روی نام تابع در لیست، به توضیحات تابع می روید.در اینجا ما می توانیم نحو را ببینیم، چه چیزی باز می گردد و معمولا یک نمونه است. نحو نشان می دهد که چه استدلال هایی می توانیم یا باید ارائه کنیم.
برای getElementPosition ، نحو است:
شناور،شناور،شناور getElementPosition (element theElement)
سه شناور در مقابل نام تابع نوع بازگشت است. در این حالت به این معنی است که تابع مقدار سه عدد شناور را باز می گرداند. (x، y و z) در داخل پرانتزها، می توانید ببینید که چه استدلال هایی باید ارسال کنید. در این مورد فقط عنصری است که موقعیتی را که میخواهید بدست آورید، یعنی بازیکن در مثال ما است.
function createVehicleForPlayer (theplayer، command، vehicleModel) - موقعیت را بدست آورید و آن را در متغیرهای x، y، z قرار دهید - (به معنای محلی، متغیرها فقط در دامنه فعلی، در این مورد، تابع وجود دارد)محلی x، y، z = getElementPosition (thePlayer)پایان
بعد ما می خواهیم اطمینان حاصل کنیم که وسیله نقلیه مستقیما در بازیکن پخش نخواهد شد، بنابراین ما چند واحد را به متغیر x اضافه می کنیم که باعث می شود از بازیکن پخش شود.
function createVehicleForPlayer (theplayer، command، vehicleModel) محلی x، y، z = getElementPosition (thePlayer) - موقعیت بازیکن را بدست آورید x = x + 5 - 5 واحد را به موقعیت x اضافه کنیدپایان
در حال حاضر ما نیاز به یک تابع دیگر، یکی برای ایجاد یک وسیله نقلیه. ما یکبار دیگر در لیست سرورهای سرور ، این بار - از زمانی که ما در مورد وسایل نقلیه صحبت می کنیم - در بخش توابع وسایل نقلیه ، که در آن ما createVehicle را انتخاب می کنیم، جستجو می کنیم. در نحو این تابع، ما فقط یک نوع بازگشت (که رایج تر است) است، یک عنصر خودرو که به وسیله نقلیه ای که ما آن را ایجاد کرده است اشاره می کند. همچنین می بینیم که برخی از استدلال ها درون [] تعبیه شده اند که به این معنی است که آنها اختیاری هستند.
ما در حال حاضر تمام استدلال هایی را که برای عملکرد createVehicle نیاز داریم را داریم: موقعیتی که ما فقط در متغیرهای x، y، z و شناسه ی مدل که از طریق فرمان ارائه می دهیم ("createvehicle 468") محاسبه می کنیم و می توانیم در عملکرد به عنوان vehicleModel دسترسی داشتهباشیم متغیر.
function createVehicleForPlayer (theplayer، command، vehicleModel) محلی x، y، z = getElementPosition (thePlayer) - موقعیت بازیکن را بدست آورید x = x + 5 - 5 واحد را به موقعیت x اضافه کنید - ایجاد وسیله نقلیه و ذخیره عنصر خودرو بازگشتی در متغیر '' createdVehicle ''local createdVehicle = createVehicle (tonumber (vehicleModel)، x، y، z)پایان
البته این کد را می توان با روش های مختلف بهبود داد، اما حداقل ما می خواهیم یک چک کنید که آیا وسیله نقلیه با موفقیت ایجاد شده یا نه. همانطور که می توانیم در صفحهCreateVehicle در زیر Returns بخوانیم ، تابع هنگامی که قادر به ایجاد وسیله نقلیه نبود، فاکتور را باز می گرداند.بنابراین، ما مقدار متغیر createVehicle را بررسی می کنیم.
حالا ما اسکریپت کامل داریم:
function createVehicleForPlayer (theplayer، command، vehicleModel) محلی x، y، z = getElementPosition (thePlayer) - موقعیت بازیکن را بدست آورید x = x + 5 - 5 واحد را به موقعیت x اضافه کنیدlocal createdVehicle = createVehicle (tonumber (vehicleModel)، x، y، z) - بررسی کنید که مقدار برگشتی '' false '' باشداگر(createdVehicle ==اشتباه)سپس - اگر چنین است، پیامی را به صندوق چت ارسال می کند، اما فقط به این بازیکن. outputChatBox ("ایجاد نشدن وسیله نقلیه"، thePlayer)پایانپایان addCommandHandler ("createvehicle"، createVehicleForPlayer)
همانطور که می بینید، ما یک تابع دیگر را باoutputChatBox معرفی کردیم. در حال حاضر، شما باید قادر به کشف صفحه مستندات تابع خود باشید. برای اسکریپت های پیشرفته تر، لطفا مدیر نقشه را بررسی کنید.
شما قبلا بعضی چیزها در مورد منابع، دستیارهای فرمان و خواسته های توابع در اسناد را در پاراگراف اول خواندید، اما یادگیری بسیار بیشتر است. این بخش به شما یک بررسی کلی نسبت به برخی از این موارد را می دهد، در صورت امکان به صفحات مربوطه پیوند دهید.
شما ممکن است قبلا این و یا شرایط مشابه (سرور / مشتری) جایی در این ویکی، اغلب در رابطه با توابع، متوجه شده اید. MTA نه تنها از اسکریپت هایی که بر روی سرور اجرا می شوند پشتیبانی می کند و دستورات (مانند مواردی که در بالا نوشتیم) و یا سایر ویژگی ها را پشتیبانی می کند، بلکه اسکریپتهایی که در Client MTA استفاده می شود که بازیکنان برای اتصال به سرور استفاده می کنند. دلیل این امر این است که برخی از ویژگی های MTA نیاز به clientide دارند (مانند GUI - رابط کاربری گرافیکی)، بعضی دیگر باید به این دلیل باشد که آنها بهتر کار می کنند و دیگران بهتر هستند که سرور باشند یا فقط clientide کار نمی کنند.
اکثر اسکریپت هایی که ایجاد می کنید (gamemodes، maps) احتمالا serveride هستند، مانند آنچه ما در بخش اول نوشتیم. اگر شما به چیزی که نمی تواند سرورهای سرور را حل کند، شما احتمالا باید آن را clientide کنید.برای مثال برای مثال script clientide شما یک فایل اسکریپت معمولی (به عنوان مثال client.lua نامیده اید ) ایجاد کنید و آن را در meta.xml مشخص کنید مانند این:
<scriptsrc="client.lua"type="client"/>
ویژگی نوع به طور پیش فرض به سرور است، بنابراین شما فقط باید آن را برای scripted clientside مشخص کنید.وقتی این کار را انجام می دهید، اسکریپت clientide بعد از اتصال به سرور به کامپیوتر پخش می شود. دربارهاسکریپتهای جانبی مشتری بیشتر بخوانید.
بخش قبلی به طور خلاصه نحوه اضافه کردن اسکریپت های clientide به منبع را نشان داد، اما همچنین امکان پذیر است. همانطور که در بالا از این صفحه ذکر شده است، منابع می تواند تقریبا همه چیز باشد. هدف آنها با آنچه انجام می دهند تعریف می شود. اجازه دهید برخی از منابع نظری، با نگاه کردن به فایل های موجود، meta.xml و آنچه که آنها ممکن است انجام دهد:
/ admin_commands /meta.xml /commands.lua /client.lua
<meta><infoauthor="Someguy"description="دستورات مدیریت"/><scriptsrc="commands.lua"/><scriptsrc="client.lua"type="client"/> </ meta>
این مثال ممکن است در همه زمان ها اجرا شود (شاید حتی زمانی که سرور شروع می شود خودکار شروع شود)، همانطور که در طول بازی کل تجربه مفید است و همچنین در بازی گیم پلی دخالت نمی کند، مگر اینکه یک مدیر تصمیم بگیرد که برخی از اقدامات را انجام دهد.
/ضد حمله /meta.xml /counterstrike.lua /buymenu.lua
<meta><infoautor="Someguy"description="بازسازی Counterstrike"type="gamemode"/><scriptsrc="counterstrike.lua"/><scriptsrc="buymenu.lua"type="client"/> </ meta>
این مثال می تواند یک gamemode نامیده شود، زیرا نه تنها با گیم پلی تعامل دارد، بلکه قواعد آن را تعریف می کند. خصیصه نوع نشان می دهد که این مثال با مدیر نقشهکار می کند، اما یک منبع دیگر که توسط تیم QA برای مدیریت gamemodes و بارگذاری نقشه نوشته شده است.به شدت توصیه می شود که gamemodes خود را بر اساس تکنیک های ارائه شده بنا کنید.
این بدان معنی است که gamemode احتمالا بدون یک نقشه اجرا خواهد شد. Gamemodes همیشه باید به عنوان عمومی به عنوان امکان پذیر است. یک مثال برای یک نقشه در مثال بعدی ذکر شده است.
/ cs-airport /meta.xml /airport.map /airport.lua
<meta><infoautor="Someguy"description="نقشه فرودگاه Counterstrike"type="map"gamemodes="counterstrike"/> <نقشه src = "airport.map" /><scriptsrc="airport.lua"/> </ meta>
همانطور که می بینید، ویژگی نوع به «نقشه» تغییر می کند، به مدیر نقشه می گوید که این منبع یک نقشه است، در حالی که ویژگی gamemodes به آن می گوید که کدام gamemodes این نقشه معتبر است، در این مورد gamemode از مثال بالا. چه چیزی ممکن است به عنوان یک شگفتی این باشد که یک اسکریپت در منبع نقشه وجود دارد. البته این لزوما در یک نقشه ضروری نیست، اما طیف وسیعی از امکانات را برای سازندگان نقشه برای ایجاد دنیای خود در قوانین gamemode که برای آنها ایجاد می کند، باز می کند.
فایل map.map ممکن است مشابه این باشد:
<mapmode="deathmatch"version="1.0"> <تروریست ها><spawnpointposX="2332.23"posY="- 12232.33"posZ="4.42223"skins="23-40"/> </ terrorists> <ضدتروریست ها><spawnpointposX="2334.23443"posY="- 12300.233"posZ="10.2344"skins="40-50"/> </ counterterrorists><bombposX="23342.23"posY=""posZ=""/><vehicleposX=""posY=""posZ=""model="602"/><vehicleposX=""posY=""posZ=""model="603"/> </ map>
هنگامی که یک gamemode با یک نقشه آغاز می شود، منابع نقشه به طور خودکار توسط مدیر نقشه برداری آغاز می شود و اطلاعات موجود در آن می تواند توسط منبع gamemode خوانده شود. هنگامی که نقشه تغییر می کند، منابع نقشه فعلی متوقف می شود و منبع نقشه بعدی شروع می شود. برای توضیحات بیشتر و نمونه هایی از نحوه استفاده از منابع نقشه در اسکریپت اصلی، لطفا از صفحهWriting Gamemodes دیدن کنید.
رویدادها همانطور که MTA اسکریپتها را درباره چیزهایی که اتفاق می افتد، می گوید. به عنوان مثال وقتی یک بازیکن میمیرد، رویداد onPlayerWasted باعث میشود.برای انجام هر گونه اقدام هنگامی که یک بازیکن می میرد، شما باید خودتان را برای اضافه کردن یک فرمانده فرمان آماده کنید، همانطور که در فصل اول نشان داده شده است.
این مثال یک پیام را با نام بازیکن که درگذشته است، ارسال می کند:
تابع playerDied (totalAmmo، killer، killerWeapon، bodypart) outputChatBox (getPlayerName (منبع).."مرد!")پایان addEventHandler ("onPlayerWasted"، getRootElement ()، playerDied)
به جای اینکه نشان دهد چه استدلال لازم است، صفحه اسناد مربوط به رویدادها نشان می دهد چه پارامترهایی به تابع handler منتقل می شوند، مشابه نحوه انجام یککاراکتر دستور ، فقط آن است که از رویداد به رویداد متفاوت است. نکته مهم دیگر متغیر منبع است که در توابع دستکاری وجود دارد. لازم نیست که به لیست پارامتر تابع افزوده شود، اما هنوز هم وجود دارد. این مقدار متفاوت از رویداد به رویداد است، برای رویدادهای پخش (همانطور که در مثال بالا) آن عنصر پخش است. به عنوان مثال دیگر، شما می توانید یک اسکریپت پخش کننده اساسی اولیه را در قسمت اول به دنبال یک ایده از نحوه استفاده از منبع نگاه کنید .
اکنون باید با اساسی ترین جنبه های اسکریپت MTA آشنا شوید و کمی با مستندات نیز آشنا شوید. صفحه اصلی بهشما پیوندهایی را به اطلاعات بیشتر، آموزشها و مراجع می دهد که به بررسی دقیق تر موضوعات مورد علاقه شما می آموزند.
توجه: از این جا توصیه میکنیم آموزش اشکال زدایی را بخوانید. مهارت های اشکال زدایی هنگامی که شما اسکریپت ها را انجام می دهید، نیازمندی مطلق هستند.ما همچنین توصیه می کنیم از فهرست متغیرهای از پیش تعیین شده برای کمک به شما در انجام وظایف خاص استفاده کنید و اسکریپت را آسان تر و سریعتر انجام دهید. |
مطالب پربازدید
مطالب تصادفی
عضويت سريع
لینک دوستان