Question

Хочу начать заниматься скриптингом, банальные штучки по типу изменения названия сервера/ постановки сервера на хостинг знаю.
Хочу выйти на новый уровень и понять как создаются и прописываются новые системы.
Пример: Вышла на Радмире система с брелком автосигнализации, как мне её сделать на своем сервере??

Share this post


Link to post

4 answers to this question

  • 0

@Kreker, я постараюсь вам описать процесс написания этой системы, но стоит понимать следующее:

  1. Любая готовая система (отчасти даже идея) требует знание игрового мода. То, что будет предоставлено как образец, может не подойти в ваш игровой мод – придется вам же адаптировать.
  2. Чтобы что-то делать, нужно понимать, что именно. В случае отношений заказчик - исполнитель это техническое задание. В данном случае вполне будет достаточно чуть более подробного описания того, как это работает на вашем Radmir. К счастью, уже давно нигде не играю, потому не знаю, какие системы и где выходят.

Таким образом, на данный момент от вас нужно описание того, как вы себе это представляете. В идеале – алгоритм (некоторая последовательность действий), который бы описывал, как вообще работает эта система, – тогда и с кодом не будет проблем.

 

Спойлер

Не брелком сигнализации, а брелоком. И ударение тоже падает на букву о.

c48c6bac39e2a1499740f4d1e50637c3.png

 

Share this post


Link to post
  • 0

 

@Cawfee Благодарю за поправку.
https://www.youtube.com/watch?v=yG1bJyFWJMk- в данном видеоролике описывается работа системы.
Смотреть с 8:50.

Edited by Kreker

Share this post


Link to post
  • 0

У меня была копия Радмира... С обновления 5.5 - брелки работают на cef. Его можно взять с RADMIR LAUNCHER - resurces - projects - crmp - cef - assets - js.

Все что там указано написано через Visual Studio. Если нужно могу объяснить в дискорде - "not getto#7616". Вот сама CMD (её в самый конец мода)

 

Спойлер

CMD:keys(playerid)
{
    new vehicleid;
    new Float:Distance_ = 50.0;
    for(new c = 0; c<30; c++)
    {
        if(cars_g[playerid][c] != INVALID_VEHICLE_ID)
        {
            new Float:Distance = D_PlayerVehicle(playerid, cars_g[playerid][c]);
            if(Distance < Distance_)
            {
                Distance_ = Distance;
                vehicleid = cars_g[playerid][c];
            }
        }
    }
    if(Distance_ == 50.0return SendClientMessage(playerid, 0x808080FF"Вы далеко от своего авто");
    if(GetIteam(playerid, 256) < 1return SCM(playerid, 0xCECECEFF"У вас нет сигнализации");
    if(vehicleid != INVALID_VEHICLE_ID || GetPlayerAllowedCar(playerid) != INVALID_VEHICLE_ID)
    {
        if(GetPVarInt(playerid, "keys") == 0) SendPacket_2(playerid, s_CefInterface, t_CefShow, "CarKey""[0, 1, 1, 1, 1, 1]"), SetPVarInt(playerid, "keys"1);
        else SendPacket_1(playerid, s_CefInterface, t_CefHide, "CarKey"), DeletePVar(playerid, "keys");
    }
    else
    {
        if(GetPlayerOwnableCars(playerid) == 0)
            SendClientMessage(playerid, 0x999999FF"У вас нет личного/доверенного  транспорта");
                else
                    SendClientMessage(playerid, 0x999999FF"Ваш личный транспорт не загружен на сервер");
    }

    return 1;
}

public: CarsKey_OnPlayerRequst(playerid, remain)
{
    new vehicleid;
    new Float:Distance_ = 50.0;
    for(new c = 0; c<30; c++)
    {
        if(cars_g[playerid][c] != INVALID_VEHICLE_ID)
        {
            new Float:Distance = D_PlayerVehicle(playerid, cars_g[playerid][c]);
            if(Distance < Distance_)
            {
                Distance_ = Distance;
                vehicleid = cars_g[playerid][c];
            }
        }
    }
    if(Distance_ == 50.0return SendClientMessage(playerid, 0x808080FF"Вы далеко от своего транспорта");
    switch(remain)
    {
        case 5:
        {
            if(vehicleid != INVALID_VEHICLE_ID || GetPlayerAllowedCar(playerid) != INVALID_VEHICLE_ID)
            {
                new status = GetVehicleParam(vehicleid, V_LOCK);
                if(status)
                {
                    Action(playerid, "закрыл личный транспорт", _, true);
                    GameText(playerid, "~w~Транспорт ~r~закрыт"40001);
                    SetVehicleParam(vehicleid, V_LOCK, VEHICLE_PARAM_OFF);
                    SendPacket_1(playerid, s_CefInterface, t_CefUpdate, "playSound('sounds/alarm/key_unlock.mp3', 0, 1)");
                }
                else
                {
                    Action(playerid, "закрыл личный транспорт", _, true);
                    GameText(playerid, "~w~Транспорт ~r~закрыт"40001);
                    SetVehicleParam(vehicleid, V_LOCK, VEHICLE_PARAM_ON);
                    SendPacket_1(playerid, s_CefInterface, t_CefUpdate, "playSound('sounds/alarm/key_lock.mp3', 0, 1)");
                }
            }
            else
            {
                if(GetPlayerOwnableCars(playerid) == 0)
                    SendClientMessage(playerid, 0x999999FF"У вас нет личного/доверенного  транспорта");
                else
                    SendClientMessage(playerid, 0x999999FF"Ваш личный транспорт не загружен на сервер");
            }

        }
        case 4:
        {
            if(vehicleid != INVALID_VEHICLE_ID || GetPlayerAllowedCar(playerid) != INVALID_VEHICLE_ID)
            {
                new status = GetVehicleParam(vehicleid, V_BOOT);
                if(status == VEHICLE_PARAM_OFF)
                {
                    Action(playerid, "открыл багажник личного т/с", _, true);
                    GameText(playerid, "~w~Багажник~g~открыт"40001);
                    SetVehicleParam(vehicleid, V_BOOT, VEHICLE_PARAM_ON);
                }
                else if(status == VEHICLE_PARAM_ON)
                {
                    Action(playerid, "закрыл багажник личного т/с", _, true);
                    GameText(playerid, "~w~Багажник~g~закрыт"40001);
                    SetVehicleParam(vehicleid, V_BOOT, VEHICLE_PARAM_OFF);
                }
            }
            else
            {
                if(GetPlayerOwnableCars(playerid) == 0)
                    SendClientMessage(playerid, 0x999999FF"У вас нет личного/доверенного  транспорта");
                else
                    SendClientMessage(playerid, 0x999999FF"Ваш личный транспорт не загружен на сервер");
            }
        }
        case 6:
        {
            if(vehicleid != INVALID_VEHICLE_ID || GetPlayerAllowedCar(playerid) != INVALID_VEHICLE_ID)
            {
                new status = GetVehicleParam(vehicleid, V_BONNET);
                if(status == VEHICLE_PARAM_OFF)
                {
                    Action(playerid, "открыл капот личного т/с", _, true);
                    GameText(playerid, "~w~Капот ~r~открыт"40001);
                    SetVehicleParam(vehicleid, V_BONNET, VEHICLE_PARAM_ON);
                }
                else if(status == VEHICLE_PARAM_ON)
                {
                    Action(playerid, "закрыл капот личного т/с", _, true);
                    GameText(playerid, "~w~Капот ~r~закрыт"40001);
                    SetVehicleParam(vehicleid, V_BONNET, VEHICLE_PARAM_OFF);
                }
            }
            else
            {
                if(GetPlayerOwnableCars(playerid) == 0)
                    SendClientMessage(playerid, 0x999999FF"У вас нет личного/доверенного  транспорта");
                else
                    SendClientMessage(playerid, 0x999999FF"Ваш личный транспорт не загружен на сервер");
            }
        }
        case 3: GameText(playerid, "~r~Безключевой доступ не доступен"30001);
        case 2:
        {
            if(vehicleid != INVALID_VEHICLE_ID || GetPlayerAllowedCar(playerid) != INVALID_VEHICLE_ID)
            {
                if(GetVehicleData(vehicleid, V_FUEL) <= 0.0return GameText(playerid, "~r~нет бензина, 4000, 2);

                new engine = (GetVehicleParam(vehicleid, V_ENGINE) ^ VEHICLE_PARAM_ON);
                SetVehicleParam(vehicleid, V_ENGINE, engine);

                if(GetVehicleParam(vehicleid, V_ENGINE) ^ VEHICLE_PARAM_OFF)
                {
                    SendPacket_1(playerid, s_CefInterface, t_CefUpdate, "playSound('sounds/car/start_engine_car.wav', 0, 1)");
                    GameText(playerid, "~g~ДВИГАТЕЛЬ ЗАВОДИТСЯ..."10003);
                }
            }
            else
            {
                if(GetPlayerOwnableCars(playerid) == 0)
                    SendClientMessage(playerid, 0x999999FF"У вас нет личного/доверенного  транспорта");
                else
                    SendClientMessage(playerid, 0x999999FF"Ваш личный транспорт не загружен на сервер");
            }
        }
    }

    return 1;
}

stock LPN(playerid)
{
    new fmt_text[2640],
        Cache: result;

    mysql_format(mysql, fmt_text, sizeof fmt_text, "SELECT * FROM numbers WHERE owner_id=%d AND trunk=0 LIMIT 20", GetPlayerAccountID(playerid));
    result = mysql_query(mysql, fmt_text, true);

    new rows = cache_num_rows();

    new query[170], eventid, type, number[32], region[32];

    format(fmt_text, sizeof fmt_text, "");

    if(!rows) numbersinv[playerid] = "";
    for(new i = 0; i < rows; i ++)
    {

        eventid = cache_get_field_content_int(i, "id");
        type = cache_get_field_content_int(i, "type");

        cache_get_field_content(i, "number", number);
        cache_get_field_content(i, "region", region);

        format(query, sizeof query, ",[%d,99,1,%d,\"%s %s\"]", eventid, type, number, region);
        strcat(fmt_text, query);

        numbersinv[playerid] = fmt_text;
    }

    cache_delete(result);
}

stock LoadSkins(playerid)
{
    new fmt_text[2640],
        Cache: result;

    mysql_format(mysql, fmt_text, sizeof fmt_text, "SELECT * FROM n_skins WHERE owner_id=%d AND trunk=0 LIMIT 20", GetPlayerAccountID(playerid));
    result = mysql_query(mysql, fmt_text, true);

    new rows = cache_num_rows();

    new query[170], eventid, skin_id;

    format(fmt_text, sizeof fmt_text, "");

    if(!rows) skins_inv[playerid] = "";
    for(new i = 0; i < rows; i ++)
    {

        eventid = cache_get_field_content_int(i, "id");
        skin_id = cache_get_field_content_int(i, "skin_id");

        format(query, sizeof query, ",[%d,100,0,%d]", eventid, skin_id);
        strcat(fmt_text, query);

        skins_inv[playerid] = fmt_text;
    }

    cache_delete(result);
}

stock LoadMySQLSettings()
{
    new FileID = ini_openFile("mysql_settings.ini"),errCode;
    if(FileID < 0)
    {
        printf("Error while opening MySQL settings file. Error code: %d",FileID);
        return 0;
    }
    errCode = ini_getString(FileID,"host",MySQLSettings[MYSQL_HOST]);
    if(errCode < 0) printf("Error while reading MySQL settings file (host). Error code: %d",errCode);
    errCode = ini_getString(FileID,"username",MySQLSettings[MYSQL_USER]);
    if(errCode < 0) printf("Error while reading MySQL settings file (username). Error code: %d",errCode);
    errCode = ini_getString(FileID,"password",MySQLSettings[MYSQL_PASS]);
    if(errCode < 0) printf("Error while reading MySQL settings file (password). Error code: %d",errCode);
    errCode = ini_getString(FileID,"database",MySQLSettings[MYSQL_BASE]);
    if(errCode < 0) printf("Error while reading MySQL settings file (database). Error code: %d",errCode);
    ini_closeFile(FileID);
    return 1;
}

 

 

Edited by Cawfee

Заметка от Cawfee , создано

3.2. Код необходимо брать в тег "Код", а код более 10 строк – еще и в "Спойлер". Как это сделать рассказано в разделе "FAQ".

Устное предупреждение.

Share this post


Link to post
  • 0

@Tom Extraside Отправил вам заявку в дискорд, спасибо за помощь!!

Share this post


Link to post
Guest
This topic is now closed to further replies.
Sign in to follow this  
Followers 0
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • SheikhMAN
      By SheikhMAN
      Приветствую дорогие коллеги. Намучался, хочу решить одну проблему, делаю проверку на правильность введенной почты,
      и не могу правильно настроить это дело в диалоге. Кто поможет, буду очень рад. Внизу прикрепил скрипт.

      Внутри спойлера код.