Ali

به تیم اسکریپتر های آرساکیا گیم بپیوندید! (قابل توجه برنامه نویسان)

77 ارسال در این موضوع قرار دارد

Devs-min.jpg

 

قابل توجه برنامه نویسان عزیز، در صورتی که در زبان های C-Style تجربه ای دارید (مانند C, C++, C#, PHP, Objective-C, Python, Perl, JavaScript و ...) و در زمینه شیء گرایی تجربه کافی دارید می توانید به ما کمک کنید.

 

در حال حاضر تنها در بخش Scripter نیروی کمکی نیاز داریم و در صورت مشاهده استعداد ها امکان جابجایی افراد به تیم برنامه نویسان وجود دارد. (دسترسی به هسته برنامه)

 

حتماً تا اینجا برایتان سؤال پیش آمده که با چه زبانی قرار است در Scripting به ما کمک کنید، خیالتان را راحت کنیم که آن زبان Lua یا خدایی نکرده Pawn Lang نیست. (شیء گرایی یا هیچ)

 

ابتدا ما تصمیم داشتیم که زبان اسکریپتینگی قرار ندهیم و تمام بخش های بازی در برنامه باشد و با زبان ++C/C نوشته شود اما به دلیل تسریع کار در Debug و Reload کردن مود ها تصمیم به قرار دادن یک زبان اسکریپتینگ گرفتیم.

 

برای اینکار انتخاب های زیادی داشتیم، اعم از JavaScript (Google V8), Squirrel, Scheme, Python, GameMonkey و ... اما ما زبانی می خواستیم که به ++C نزدیک ترین باشد و سریع ترین قدرت پردازش را داشته باشد در عین حال دارای شیء گرایی باشد، بنابراین با توجه به تسریع در عمل Bind کردن زبان اسکریپت نویسی به پروژه انتخاب ما AngelScript بود.

 

حتماً از وبسایت این زبان دیدن کنید: https://www.angelcode.com/angelscript/

 

ما تا جایی که توانستیم این زبان را ویرایش کردیم تا اسکریپت نویسی به آسان ترین شکل ممکن صورت بگیرد و در عین حال مشکلات ریزی که پیدا کردیم را برطرف کرده و به سازنده زبان اطلاع رسانی کردیم و آن را در Repository اصلی قرار دادیم. (کلیک)

hUaNLJ.png

 

در صورتی که یکی از زبان های C-Style به خصوص ++C و #C را بلد باشید، این زبان را کامل بلدید و تنها به اطلاعات تکمیلی کوچکی نیاز دارید.

 

اسکریپت نویسی به چه گونه است؟ در زیر Sample هایی از اسکریپت PYL را برایتان قرار میدهیم.

 

	class Client
{
    Client()
    {
        Misc::ServerLog("Client constructor");
    }
    
    ~Client()
    {
        Misc::ServerLog("Client dtor");
    }
    
    Vehicle@ playerVehicle;
}
	class MyPlayer : IPlayer
{
    void OnJoin()
    {
        Misc::ServerLog("Player connect: " + GetName() + ", " + GetVersion());
        Misc::SendConsole("You're " + GetName());
        Spawn(Vector(0.f, 0.f, 5.f), 0.f, 217);
        FadeCamera(true);
        SetCameraTarget(GetRealEntity());
        GiveWeapon(EWeaponType::deagle, 9999, true);
    }
    
    void OnModelChange(uint16 old, uint16 new)
    {
        Misc::ServerLog("Old: " + old + " New: " + new);
    }
    
    void OnWeaponFire(int weapon, Vector end, Element@ hitElement, Vector start)
    {
        Misc::SendConsole("weaponFire Info: Weapon : " + weapon + ", End: " + end + ", Start: " + start );
    }
    
    void OnConsole(string theMessage)
    {
        if (theMessage == "setkon")
        {
            Client@ client = Client();
            @client.playerVehicle = Vehicle(411, GetPos());
            any setAnyVar;
            setAnyVar = @client;
            SetData("client", setAnyVar);
            Misc::SendConsole("Set!");
            WarpIntoVehicle(client.playerVehicle);
        }
        if (theMessage == "dv")
        {
            any@ getClient = GetData("client");
            if (@getClient == null) Misc::SendConsole("Wow shit happened");
            else
            {
                Client@ client;
                getClient.Get(@client);
                if (@client.playerVehicle == null) Misc::SendConsole("Doesnt exist tho!");
                else
                {
                    @client.playerVehicle = null; // removed
                    Misc::SendConsole("Removed!");
                }
            }
        }
        if (theMessage == "fix")
        {
            Vehicle@ myRef = GetVehicle();
            if (@myRef != null)
            {
                myRef.Fix();
                Misc::SendConsole("Fixed successfully");
            }
            else
                Misc::SendConsole("Failed to fix");
        }
    }
}
	
int64 myStartTime = 0;
	class MyGuzClass
{
    void MyTimer(dict@ args)
    {
        int64 iRes = Misc::GetTickCount()-myStartTime;
        Misc::ServerLog("Timer triggered, resolution: " + iRes + "ms");
        myStartTime = Misc::GetTickCount();
    }
}
	MariaDBHandle@ mariaHandle;
	void mysqlRes(MariaDBResult@ myres)
{
    if (myres.Success)
    {
        Misc::ServerLog("Query is successful.");
        Misc::ServerLog("Exec time: " + myres.ExecTime + "ms, Query was: " + myres.Query);
        if (@myres.Result != null)
        {
            Misc::ServerLog("Result is not null, rows received: " + myres.Result.length());
            dict@ myDict;
            @myDict = myres.Result[0];
            string pName = myDict["pName"];
            string pKey = myDict["pKey"];
            int helpero = myres.Dict["helper"];
            if (@myDict != null) Misc::ServerLog("Dict is not null (" + helpero + "), two fields received: " + pName + " | " + pKey);
        }
    }
    else Misc::ServerLog("myres is not successful!");
}
	void OnConsole(string cmd)
{
    if (cmd == "timerkon")
    {
        myStartTime = Misc::GetTickCount();
        MyGuzClass myGiz;
        TimerCallback_t @func = TimerCallback_t(myGiz.MyTimer);
        Timer TimerGuz(func, 51, 0);
        Misc::ServerLog("Timer started dude");
    }
    if (cmd == "boroberim")
    {
        Element MyElement("sucker");
        array<any> myArray(1);
        myArray[0] = @MyElement;
        string myJSON = Misc::ToJSON(myArray, false, "spaces");
        Misc::ServerLog("Inam az json: " + myJSON);
        array<any@> @FromArray = Misc::FromJSON(myJSON);
        Element@ GetItMyElem;
        //@GetItMyElem = cast<Element@>(FromArray[0]);
        FromArray[0].Get(@GetItMyElem);
        if (GetItMyElem !is null) Misc::ServerLog("My elem !is null");
        Misc::ServerLog("Element id: " + GetItMyElem.GetType() + "\n");
        MyElement.Destroy();
    }
    if (cmd == "pw")
    {
        dict myDict;
        Misc::PasswordHash("mypw", function(maDict)
        {
            string strHashRes = maDict["HashResult"];
            Misc::ServerLog("Hash: " + strHashRes);
            Misc::PasswordVerify("mypw", strHashRes, function(dick)
            {
                bool bVerified = dick["VerifyResult"];
                if (bVerified) Misc::ServerLog("verified!");
                else Misc::ServerLog("verification failed");
            }, maDict);
        }, myDict);
    }
    if (cmd == "mariaconnect")
    {
        MariaDBOpts mariaDBOpts;
        mariaDBOpts.LogLevel = MARIA_DB_LOG_LEVEL_ALL;
        
        MariaDBHandle mariaDB(mariaDBOpts);
        mariaDB.Connect("127.0.0.1", "lifeforgame", "root", "••••");
        @mariaHandle = mariaDB;
    }
    if (cmd == "mariatest")
    {
        dict MyDict;
        MyDict["my_name"] = ":my_password";
        MyDict["my_password"] = ":my_name";
        MariaDBResult@ myres = mariaHandle.Query("SELECT pName, pKey FROM `users` WHERE pName = :my_name AND pKey = :my_password", @MyDict);
        if (myres.Success)
        {
            Misc::ServerLog("Query is successful.");
            Misc::ServerLog("Exec time: " + myres.ExecTime + "ms, Query was: " + myres.Query);
            if (@myres.Result != null)
            {
                Misc::ServerLog("Result is not null, rows received: " + myres.Result.length());
                dict@ myDict;
                @myDict = myres.Result[0];
                string pName = myDict["pName"];
                string pKey = myDict["pKey"];
                if (@myDict != null) Misc::ServerLog("Dict is not null, two fields received: " + pName + " | " + pKey);
            }
        }
        else Misc::ServerLog("myres is not successful!");
    }
    if (cmd == "mariatest2")
    {
        dict myUserParam;
        myUserParam["helper"] = 50;
        array<any> MyArray(1);
        MyArray[0] = "Ali";
        DBResCallback_t@ func = @mysqlRes;
        string result = mariaHandle.TQuery(func, "SELECT pName, pKey FROM `users` WHERE pName = ?",
                                            @MyArray, @myUserParam);
        Misc::ServerLog("Query threaded: " + result);
    }
}
 
	

 

همانطور که در کد بالا مشاهده کردید، کار کردن با این زبان بسیار شیرین و سریع می باشد (برخلاف زبان های اسکریپت نویسی غیر حرفه ای اعم از معروف ترین آنها قبیل Lua و Pawn، هرچند Lua از AngelScript سریع تر است اما با توجه به شخصی که با Lua کار می کند مطمئن باشید به دلیل غیر استاندارد بودن اکثر کد ها و نداشتن علم و درک کافی به نحو عجیبی از Performance کل بازی خود کم می کنند، لازم به ذکر هست که قرار است AngelScript را در قالب Just In Time (JIT) اعمال کنیم)

 

همانطور که مشاهده کردید ما از MariaDB استفاده می کنیم که با توابع بالا می توانید ایمن بودن و روان بودن Wrapper ما را مشاهده کنید!

 

به طور مثال تمامی رویداد های ممکن برای یک بازیکن مانند کد زیر شناسایی می شود:

class MyPlayer : IPlayer
{
    void OnJoin()
    {
        Misc::ServerLog("Kasi ke connect shode esmesh hast: " + GetName()); // <-- Ferestade mishe be loge server
        Spawn(Vector(0.f, 0.f, 5.f), 0.f, 217); // <-- Ferestade mishe be playeri ke connect shode, this = player
        GiveWeapon(EWeaponType::deagle, 9999, true); // <-- Inam hamintor, this.GiveWeapon
    }
}

 

جالب هست که بدونید هر چند تا Class می توانید برای Handle کردن رویداد ایجاد کنید و حتی آن ها را اولویت بندی کنید! مانند class YourPlayer_P5 : IPlayer به شما یک Class با Priority Channel 5 می دهد، Priority Channel پیش فرض 0 است با این حساب اول MyPlayer رویداد ها را اجرا می کند سپس YourPlayer، در صورت لغو رویداد (CancelEvent) باز هم رویداد در Class ها صورت می گیرد و می توانید با IsEventCanceled متوجه شوید که آیا رویداد لغو شده یا خیر، در صورت مشاهده متوجه می شوید که چقدر any و dict ما با any و dictionary اصلی خود AngelScript متفاوت است و چقدر آسان است.

 

قابل ذکر هست که از شیرینی اسکریپت نویسی می توان مثال دیگری زد، برای ایجاد یک وسیله نقلیه باید از شیء گرایی استفاده کنید، به صورت زیر یک ماشین ایجاد می شود:

Vehicle myInfernus(411, Vector(0.f, 0.f, 0.f));

myInfernus.SetHealth(500.f);

myInfernus.SetPos(thatPlayer.GetPos());

 

// To remove 'myInfernus' all you have to do is delete all the references to the myInfernus, so basically if myInfernus's reference is not held anywhere it will be removed automatically, AngelScript got a nice Garbage Collector to handle complicated circular references

 

What's in it for me?

 

  • قرار گرفتن اسم در لیست سازندگان
  • قرار گرفتن اسم در فرم زمان ثبت بازی در ESRA
  • دعوت نامه رسمی پس از جابجایی دفتر مجموعه
  • همکاری با تیم فعال آرساکیا گیم
  • دسترسی سریع به پروژه ها قبل از انتشار آن ها و قبل از همه
  • تعطیلات به همراه تیم
  • ایده پردازی به صورت مستقیم

 

در صورتی که قصد ثبت نام دارید وارد لینک زیر شوید:

 

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

تاپیک برای پرسش سؤالات و مباحث باز شد.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

با سلام.

بصورت مجانی و افتخاری
یا
هزینه پروژه های انجام شده پرداخت می شود؟

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

در 2 ساعت قبل، Rabbit گفته است:

با سلام.

بصورت مجانی و افتخاری
یا
هزینه پروژه های انجام شده پرداخت می شود؟

 



What's in it for me?

 

قرار گرفتن اسم در لیست سازندگان

قرار گرفتن اسم در فرم زمان ثبت بازی در ESRA

دعوت نامه رسمی پس از جابجایی دفتر مجموعه

همکاری با تیم فعال آرساکیا گیم

دسترسی سریع به پروژه ها قبل از انتشار آن ها و قبل از همه

تعطیلات به همراه تیم

ایده پردازی به صورت مستقیم

  • دوست دارم که 1
  • هاها 1
  • چی چی 3

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برنامه نویسی کردم ولی در این اندازه با این مجموعه بزرگ نه

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام اقا زبون سی رو از کجا یاد بگیریم کد هایشو یا PHP؟ اگه از اول شروع کنی چقدر طول میکشه یاد بگیری حرفه ای نه ور حد متوسط یاد داشته باشی؟

ویرایش شده در توسط NewT

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

در ۱ ساعت قبل، NewT گفته است:

سلام اقا زبون سی رو از کجا یاد بگیریم کد هایشو یا PHP؟ اگه از اول شروع کنی چقدر طول میکشه یاد بگیری حرفه ای نه ور حد متوسط یاد داشته باشی؟

ببین تو گوگل جست و جو کن "آموزش زبان c" هر زبان هم بحثش جداست، PHP برای سرور ها و وردپرس تحت وب به کار میره ولی سی یک زبانیه که پایه ی خیلی زبان های دیگه است و اگر سی رو بلد باشی، بقیه هم خیلی راحت یاد میگیری. همه ی زبان ها با توجه به اینکه زبانشون انگلیسیه و مثل زنجیر به هم وصلن، اگر زبان پایه ای مثل سی رو بلد باشی بقیه رو راحت یاد میگیری. یه سری سایت ها هم هستن این ویدیوهای آموزشی رو قرار میدن. برای اینکه به یک زبان متوسط مسلط باشی، باید مرتبا هر روز تمرین کنی.

من خودم HTML و CSS رو متوسط بلدم، زبان سی هم میخوام تابستون امسال یاد بگیرم.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

در 5 دقیقه قبل، Original گفته است:

ببین تو گوگل جست و جو کن "آموزش زبان c" هر زبان هم بحثش جداست، PHP برای سرور ها و وردپرس تحت وب به کار میره ولی سی یک زبانیه که پایه ی خیلی زبان های دیگه است و اگر سی رو بلد باشی، بقیه هم خیلی راحت یاد میگیری. همه ی زبان ها با توجه به اینکه زبانشون انگلیسیه و مثل زنجیر به هم وصلن، اگر زبان پایه ای مثل سی رو بلد باشی بقیه رو راحت یاد میگیری. یه سری سایت ها هم هستن این ویدیوهای آموزشی رو قرار میدن. برای اینکه به یک زبان متوسط مسلط باشی، باید مرتبا هر روز تمرین کنی.

من خودم HTML و CSS رو متوسط بلدم، زبان سی هم میخوام تابستون امسال یاد بگیرم.

چقدر زرنگی شما میدونم چی ان منظورم اینه از کجا یاد گرفت کلاس داره یا همین اینترنت کافیه چون حجمش زیاده 😕

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

در 8 دقیقه قبل، NewT گفته است:

چقدر زرنگی شما میدونم چی ان منظورم اینه از کجا یاد گرفت کلاس داره یا همین اینترنت کافیه چون حجمش زیاده 😕

دلیل توضیح بنده این نبود که بخوام بگم زرنگم! اشتباه برداشت نکن!
کلاس حضوری به هیچ وجه لازم نداره هیچ زبان برنامه نویسی، آدم با دیدن ویدیوهای آموزشی و نوشتن کد های مهم در یک دفترچه یادداشت اختصاصی، به راحتی یاد میگیره. 

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

در 23 ساعت قبل، Original گفته است:

دلیل توضیح بنده این نبود که بخوام بگم زرنگم! اشتباه برداشت نکن!
کلاس حضوری به هیچ وجه لازم نداره هیچ زبان برنامه نویسی، آدم با دیدن ویدیوهای آموزشی و نوشتن کد های مهم در یک دفترچه یادداشت اختصاصی، به راحتی یاد میگیره. 

خب این کد هارو کجا نوشته که هر کد چی کار میکنه یکی یک سایت درست داره بده؟ 😕

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

در 9 دقیقه قبل، NewT گفته است:

خب این کد هارو کجا نوشته که هر کد چی کار میکنه یکی یک سایت درست داره بده؟ 😕

در ویدیو های آموزشی، کافیه بزنید : آموزش زبان های برنامه نویسی و روی اولین سایت کلیک کنید دوره های آموزشی داره.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

در 4 دقیقه قبل، Original گفته است:

در ویدیو های آموزشی، کافیه بزنید : آموزش زبان های برنامه نویسی و روی اولین سایت کلیک کنید دوره های آموزشی داره.

نبود ادرس بده :|

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

در 6 دقیقه قبل، NewT گفته است:

نبود ادرس بده :|

تبلیغات محسوب میشه فکر کنم 

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

در 12 ساعت قبل، Original گفته است:

تبلیغات محسوب میشه فکر کنم 

خب تو پیام شخصی بهش بگو. شاید اشکال نداشته باشه

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

در در ۱۳۹۹/۳/۲۲ در 00:43، NewT گفته است:

از کجا یاد گرفت کلاس داره یا همین اینترنت کافیه چون حجمش زیاده

 

اینکه فرمودی حجمش زیاده خب هزینه کلاس های بیرون خیلی بیشتر از هزینه ایه که برای دوره های خودآموز میذاری. هرجور حساب کنی با گیر اوردن ویدیو ها و اموزش تو نت خیلی بنفعت میشه.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

در 1 ساعت قبل، RoLLinG گفته است:

 

اینکه فرمودی حجمش زیاده خب هزینه کلاس های بیرون خیلی بیشتر از هزینه ایه که برای دوره های خودآموز میذاری. هرجور حساب کنی با گیر اوردن ویدیو ها و اموزش تو نت خیلی بنفعت میشه.

هرجا نگاه میکنم فقط یک جلسه گزاشته اونم چیزه خاصی یاد نداده فقط یک کامپایلر تبلیغ کرده جایی نیست کامل یاد بده 😐

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

در 4 ساعت قبل، NewT گفته است:

هرجا نگاه میکنم فقط یک جلسه گزاشته اونم چیزه خاصی یاد نداده فقط یک کامپایلر تبلیغ کرده جایی نیست کامل یاد بده 😐

 

عجیبه... من هرجا اموزش دیدم کامل بوده. نه اینکه 100% فول اموزش بده ولی خب در حد متوسط بوده حداقل. هیچوقت اینجور چیزی که میگیو ندیدم.

البته معمولا اموزش های غیررایگان قسمت اولش دیدنش رایگانه و بقیش رو فقط بعد از پرداخت میتونید ببینید. معمولا هم توی قسمت اول کامپایلر رو معرفی میکنن اگه زبان کامپایلر بخواد :|

 

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

در در ۱۳۹۹/۳/۲۴ در 01:04، GelofeN گفته است:

جایی نیست کامل یاد بده

😐 تو گوگل بنویس دوره آموزش کامل برنامه نویسی به زبان C رایگان

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

 

در در ۱۳۹۷/۱۲/۲۳ در 00:14، Ali گفته است:

در صورتی که قصد ثبت نام دارید وارد لینک زیر شوید:

@Ali

لینک نمیاد

https://forum.arsacia.ir/staffapplications/application/4-تیم-اسکریپتر-ها/?do=embed

 

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام و درود زبان C بلدم ولی نه به صورت حرفه ای برای حجم های به این بزرگی

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

در در ۱۳۹۹/۳/۲۱ در 23:33، GelofeN گفته است:

سلام اقا زبون سی رو از کجا یاد بگیریم کد هایشو یا PHP؟ اگه از اول شروع کنی چقدر طول میکشه یاد بگیری حرفه ای نه ور حد متوسط یاد داشته باشی؟

 

سلام داش من از سایت پرتغال دوره برنانه نویسی پایتون در حد متوسط رو خریدم که خیلی خوبه (در حد متوسط هستش حرفه ای نیس ولی بازم خوبه).

تازه فک کنم تا فرداشب تخفیف 90 درصدی داره من خودم با این تخفیف خریدم دوره برنامه نویسی پایتون بودش 110 هزار تومن ولی بخاطر تخفیف نود درصدی من خریدم 11 یا 10 تومن :|

از من میشنوی برو بخر دوره فوق العاده ای هستش و تخفیف 90 درصدیش فقط تا فرداشب هستش از ما گفتن بود اگه علاقه داری

 @Ali اقا شما شبیه قبل به سرور علاقه نشون نمیدین ما رو از اپدیت باخبر نمیکنین به تاپیک ها جواب نمیدید دلیلش چیه :(

 

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید دیدگاهی ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است !

ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید

ورود به حساب کاربری