فول کده
ورود عضویت
تبلیغات

آموزش برنامه نویسی و ساخت مود GTA V – بخش اول

آموزش برنامه نویسی و ساخت مود GTA V
هادی اکبرزاده
نوشته شده توسط هادی اکبرزاده

به جرئت می‌توان گفت GTA V اولین و یا حتی تنهاترین بازی تا به امروز هست که امکان ساخت مود (من ماد نمیگم، چون مود بهتر تلفظ می‌شه!)، به این گستردگی را دارد!
البته این احتمال دارد از سیاست‌های شرکت تولیدکننده‌ی این بازی باشد که چنین قابلیتی را برای بازی خود قرار داده‌اند و خب من خودم در بازی دیگری چنین چیزی تا به این لحظه مشاهده نکردم.

مقدمه

ساخت مود GTA V، کار ساده‌ای نیست و نیاز به دانش برنامه‌نویسی بالایی دارد و همچنین روش‌های مختلفی برای ساخت مود GTA V وجود دارند؛ از زبان برنامه‌نویسی C++ گرفته تا LUA و …

و اما چیزی که ما قصد داریم مودنویسی را در بستر آن آموزش دهیم، در حال حاظر، زبان برنامه‌نویسی سی شارپ می‌باشد. ما از سی شارپ و به کمک کتابخانه‌یScript Hook V .NET و …، مودهایمان را توسعه خواهیم داد.

نکته‌ی خیلی‌مهم: کتابخانه‌ی Script Hook V .NET، هم فایل cs یا vb و هم dll اجرا می‌کند.
در نتیجه شما به جای کامپایل کد خود در ویژوال استودیو و قرار دادن خروجی dll در پوشه‌ی scripts، می‌توانید مستقیما یک فایل متنی cs در پوشه‌ی scripts محل نصب بازی اجرا کرده و با نوت پد ساده در آن کدتان را بنویسید.
البته در این‌صورت اگر بخواهید مود خودتان را به اشتراک بگذارید، همه می‌توانند با یک نوت‌پد ساده، به کد شما دسترسی داشته و آن را ویرایش کنند که خب باز هم روش‌هایی برای به هم زدن کد و ناخوانا کردن آن وجود دارد. (البته شما فعلا یه مود ساده بسازین تا بعد :D)

پیش نیازها

ایجاد اولین پروژه

ایجاد پروژه در ویژوال استودیو

  • ویژوال استودیو را باز کنید.
  • یک پروژه‌ی سی شارپ، از نوع Class Library ایجاد کنید.
  • حال باید دو کتابخانه‌ی ScriptHookVDotNet2.dll و NativeUI.dll را به References پروژه اضافه کنید.
  • حالا بعد از Run کردن پروژه‌ی خود، همانطور که باید بدانید، خروجی dll در مسیر bin پروژه قرار خواهد گرفت و باید آن را به پوشه‌ی scripts انتقال دهید.

ایجاد پروژه در نوت پد

  • به پوشه‌ی scripts در مسیر نصب بازی gta v بروید.
  • یک فایل cs با نام دلخواه ایجاد کنید.
  • آن را با Notepad++ باز کنید.
    بدی این روش این است که خطایابی در آن سخت بوده و کدنویسی نیز در آن سخت می‌باشد.

این موارد را طبیعتا باید در پیش نیازهای خود داشته باشید و وظیفه‌ی ما نیست که آن‌ها را آموزش دهیم! چرا که هدف این پست آموزش ساخت مود با زبان سی‌شارپ بوده و خود زبان سی‌‍‌شارپ برای خود مبحث جدایی می‌باشد.

نکات مهمی که یک کلاس مختص GTA V باید داشته باشد:

  • ابتدا باید فضای نامی GTA به صورت زیر استفاده شود.

  • کلاسی که در بازی اجرا می‌شود، باید از کلاس Script، ارث بری کند.
    اگر کلاسی که می‌نویسیم از Script ارث بری نکند، این کلاس زمان اجرای Script Hook V فراخوانی نمی‌شود.
    البته ممکن است ما کلاس‌های دیگری داشته باشیم که از آن ها در این کلاس استفاده کنیم و دیگر آن‌ها نیاز به اجرا شدن جداگانه نداشته باشند.
    ولی هر مودی که می‌نویسیم، حتما باید حداقل یک کلاس این‌گونه داشته باشد در غیر این‌صورت اجرا نمی‌شود و تنها یک کتابخانه خواهد بود.
  • این کلاس ارث بری شده، سه رویداد Tick و KeyDown و KeyUp را برایتان فراهم می‌کند که هرکدام را نیاز داشتیم، داخل متدسازنده پیاده سازی می‌کنیم.
    فرض کنید اسم کلاس، FuLLKade می‌باشد.

  • رویداد Tick:
    این رویداد، در هر فریم از بازی اجرا می‌شود.
  • رویداد KeyDown:
    این رویداد، زمانی که دکمه‌ای از روی کیبورد به سمت پایین فشرده شد، اجرا می‌شود.
  • o
    این رویداد، زمانی که دکمه‌ی فشرده شده رها شد، اجرا می‌شود.

نکته‌ی خیلی‌مهم: در حال حاظر، آخرین نسخه‌ی Script Hook V .Net ازدات نت فریم ورک 7 به بالا استفاده می‌کند. پس این نسخه باید حتما روی سیستم شما نصب شده باشد.
در ویژوال استودیو نیز باید پروژه‌ی خود را برروی این نسخه تنظیم کنید تا به درستی کار کند.

یک مثال ساده‌ی ساده

در این مثال، با فشار دادن کلید 0 ، می‌توانید یک ماشین ظاهر کنید.

همانطور که می‌بینید:

  • کلید 0 نامپد را از طریق آبجکت e بررسی کرده‌ایم.
    خب هر برنامه‌نویس آشنا به سی شارپی با آبجکت KeyEventArgs باید آشنایی داشته باشد.
  • از آن‌جایی که می‌خواهیم یک ماشین در محیط بازی ایجاد کنیم، از متد CreateVehicle (ایجاد وسیله نقلیه) که در کلاس World (دنیا) قرار دارد استفاده می‌کنیم.
    خروجی این متد از نوع کلاس Vehicle (وسیله نقلیه) می‌باشد که برای همین آن را در متغیری از نوع همین کلاسو با نام vehicle ریخته‌ایم.
    در ورودی متد CreateVehicle ، تعداد چهار پارامتر به داخل آن ارسال کرده ایم.

    • پارامتر اول (model از جنس Model): مدل وسیله‌نقلیه‌ای که می‌خواهیم را ارسال می‌کنیم که همه داخل کلاس VehicleHash قرار دارند.
      در این‌جا، Adder را انتخاب کرده‌ایم.
    • پارامتر دوم (position از جنس Vector3): مکانی که ماشین در آن‌جا ظاهر می‌شود را باید ارسال کنیم.
      در این‌جا، گفته‌ایم که از مکان فعلی کاراکتر، سه متر به جلوتر.
      البته در مورد این کلاس Game و ادامه‌ی آن در بند بعدی توضیح مفصلی خواهم داد.
    • پارامتر سوم (heading از جنس float): در مورد این ورودی در آینده توضیح خواهم داد.
  • همانطور که دیدید، در ورودی‌های متد CreateVehicle، از برخی کلاس‌ها استفاده کرده‌بودیم که در این بند به توضیح آن‌ها می‌پردازم:
    • از طریق کلاس Game می‌توانیم به آبجکت Player و سپس به آبجکت Character دسترسی داشته باشیم.
      Player: که واضح است چه چیزیست، همان بازیکن فعلی می‌‎باشد که داریم با آن بازی می‌کنیم.
      Character: کاراکتر یا شخصیت پلیر می‌باشد و این از نوع کلاس Ped می‌باشد که هر پلیری برای خود یک شخصیتی نیز دارد. (مایکل و …)
    • هر شخصیتی یک Position یا موقعیت (یا مکان کاراکتر در دنیای بازی) دارد و همانطور که در خط اول می‌بینی، نوشته شده:
      Game.Player.Character.Position
      این موقعیت، از نوع کلاس Vector3 بوده و بازی‌سازان با آن آشنایی بیشتری دارند.
      کلاس Vector3: یک بردار سه بعدی در دنیای بازی ما می‌باشد.
    • ForwardVector: هرشخصیتی یک ForwardVector  دارد که دوباره از جنس Vector3 می‌باشد و بیانگر بردارد رو به روی کاراکتر می‌باشد.
      حالا باید بدانید چرا گفتیم سه متر جلوتر از کاراکتر ظاهر شود چئت عدد سه را در این بردار ضرب کرده‌ایم پس سه متر رو به روی کاراکتر ظاهر می‌شود.
  • حالا به توضیح ادامه‌ی‌کاری که با Vehicle ساخته شده در خطوط بعدی انجام گرفته است می‌پردازم.
    • ویژگی CustomPrimaryColor: رنگ اصلی ماشین که شامل بیشترین قسمت رنگ ماشین می‌شود.
    • ویژگی CustomSecondaryColor: رنگ فرعی ماشین که در اینجا شامل دو خط روی ماشین می‌شود.
  • کلاس Color: خب این یکی از چیزهاییست که باید از سی شارپ بلد باشید و به GTA مربوط نمی‌شود.
    • متد FromArgb: می‌توانیم رنگ را از RGB انتخاب کنیم.
    • ویژگی‌ها: می‌توانیم رنگ‌های اصلی را بدون نوشتن RGB انتخاب کنیم، مثل Green

نکته‌ی خیلی‌مهم: چنانچه با ویژوال استودیو کار می‌کنید، ممکن است کلاس Color شناسایی نشود، در این صورت از References، فضای نامی System.Drawing را اضافه کنید.
همچنین فضای نامی System.Windows.Forms نیز بهتر است اضافه شود جرا که کاربردی می‌باشد.

اعمال تغییرات بدون خروج از بازی

خب شاید برایتان سوال شده باشد که آیا راهی وجود ندارد که بدون اجرای مجدد بازی بتوانیم تغییرات کدی که نوشته‌ایم را برروی بازی اعمال کنیم؟!

راه حال آن در Script Hook V قرار داده شده است و شما به سادگی می‌توانید این کار را انجام دهید.

  • در محیط بازی Alt + Tab را فشار دهید تا منوی برنامه‌ها نمایش داده شود.
    میتوانید از دکمه‌ی پرچم نیز برای رفتن به محیط ویندوز استفاده کنید. (چنانچه دکمه پرچم کار نکرد، Alt +Enter را فشار دهید تا پنجره‌ی بازی کوچک شود.)
  • کدتان را ویرایش کنید.
  • نسخه جدید کدتان را بعد از خروجی گرفتن به پوشه scripts انتقال دهید.
    البته اگر فایل cs یا vb باشد، می‌توانید در همان مسیری که قبلا کپی کرده اید، آن را  ویرایش کنید تا دیگر نیازی به کپی نباشد. (ذخیره کردن کد بعد ویرایش هم یادتان نرود.)
  • به بازی برگردید.
  • دکمه Insert را از روی کیبورد فشار دهید تا اسکریپت‌ها دوباره بارگزاری شوند.
    در برخی کیبوردها ممکن است دکمه Insert با دکمه دیگری مثل Delete، به عنوان کلید دوم دکمه، تایین شده باشد که می‌توانید Shift را گرفته و سپس دکمه مورد نظر را فشار دهید.

موفق و پیروز باشید.

تبلیغات
0
کانال تلگرام فول کده

درباره نویسنده

هادی اکبرزاده

هادی اکبرزاده

[ مدیر فول کده ]

متولد آبان 74. برنامه نویسی اندروید، ویندوز، وب و ...

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

قوانین نظرات

  • تعریف سیستم نظرات: سیستم نظرات، محلی است تا شما دوستان عزیز بتوانید دیدگاه خود را نسبت به مطلب قرار گرفته بنویسید، نه چیز دیگری!
  • نظراتی که به بهبود پست کمک کنند، با ذکر نام ارسال کننده به پست اضافه خواهند شد.
  • برای ارسال نظر، نیازی به سلام و احوال‌پرسی نیست و این فقط به خاطر ساده‌تر و سریع تر شدن متن می‌باشد.
  • دیدگاهی که ارسال می‌کنید، حتما باید درباره‌ی پست قرار گرفته باشد؛ نظرات پست‌های دیگر را در جای خود بنویسید در غیر این‌صورت تایید یا پاسخ داده نخواهند شد.
  • سوالی که جواب آن در پست وجود داشته باشد، تایید یا پاسخ داده نخواهد شد.
  • برای پاسخ دادن به نظرات دیگران، از گزینه‌ی پاسخ کنار هر دیدگاه استفاده کرده و یک نظر جدید ارسال نفرمایید. همچنین برای ارسال نظر جدید از گزینه‌های مربوط به پاسخ استفاده نکنید.
  • دوستان عزیز واقعا نظر لطف شماست اما متن‌های کوتاهی مانند "مرسی"، "عالی بود" ممکن است تایید نشوند. این به خاطر شلوغ نشدن قسمت نظرات است.
  • بهتر است برای ارسال نظر در سایت ثبت نام کنید و سپس با اکانت خود وارد شده و نظرتان را ارسال کنید.
  • قوانین نظرات در طول زمان در این قسمت اضافه و تغییر داده می‌شوند و می‌توانید از این قسمت بررسی کنید.
  • این قوانین شامل پست های قدیمی نمی‌شود ولی نظرات پست های قدیمی نیز در صورت نیاز اصلاح خواهند شد.

نظرات ثبت شده بدون دیدگاه