Sign in to follow this  
Followers 0
DEST

Система радаров с сохранением на MySQL

1 post in this topic

Дорогие пользователи портала PAWNO-RUS.RU

 

Nемного о системе:

Радары можно будет добавлять прямо из игры

Далее они будут сохраняться в базу данных

Ну и так же после рестарта они не удаляться!

Но удалять придется их через саму БД

 

И так начнем:

 

1) Нам понадобятся плагины такие как mysql r-38,scanff,streamer и сам командный процессор

 Теперь начинаем в начало мода вставляем следующее

Спойлер

#define MAX_RADARS                              50
#define publics:%0(%1) forward %0(%1); public %0(%1)
#define SFCM(%0,%1,%2) do{ new msg[141]; format(msg,141,%2); SendClientMessage(%0,%1,msg); } while(FALSE)
#define SCM SendClientMessage
#define TOTAL_RADAR             "`radar`"
new RadarIterator[MAX_RADARS];
new radariter;
#define foreachRadar(%0) for(new _i, %0=RadarIterator[_i]; _i <radariter; %0=RadarIterator[++_i])  

enum rInfo{
        rid,
Float:rX,
Float:rY,
Float:rZ,
Float:rRZ,
Float:rR,
        rSpeed,
        rObj
};
new RadarInfo[MAX_RADARS][rInfo];
new TOTALRADAR;
new RadarTimer[MAX_PLAYERS];
new RadarShtraf[MAX_PLAYERS];
new RadarMaxSpeed[MAX_RADARS];

 

В Public OnPlayerDisconnect 

Спойлер

if(RadarTimer[playerid]!=0){
    RadarShtraf[playerid] = 0;
    KillTimer(RadarTimer[playerid]);
}

 

Теперь загрузку радаров

Спойлер

publics: OnLoadRadarCallback()
{
        new time = GetTickCount();
        new r, f;
        cache_get_data(r, f);
        for(new i = 0; i < r; i++)
        {
                RadarInfo[i][rid] = cache_get_field_content_int(i, "id", mysql);
                RadarInfo[i][rX]  = cache_get_field_content_float(i, "x", mysql);
                RadarInfo[i][rY]  = cache_get_field_content_float(i, "y", mysql);
                RadarInfo[i][rZ]  = cache_get_field_content_float(i, "z", mysql);
                RadarInfo[i][rRZ] = cache_get_field_content_float(i, "rz", mysql);
                RadarInfo[i][rR] = cache_get_field_content_float(i, "rad", mysql);
                RadarInfo[i][rSpeed] = cache_get_field_content_int(i, "speed", mysql);
                RadarInfo[i][rObj] = CreateObject(18880, RadarInfo[i][rX], RadarInfo[i][rY], RadarInfo[i][rZ], 0.0, 0.0, RadarInfo[i][rRZ]);
                new int = CreateDynamicSphere(RadarInfo[i][rX], RadarInfo[i][rY], RadarInfo[i][rZ], RadarInfo[i][rR], 0, 0, -1);
                //Iter_Add(RadarIterator, int);
                RadarIterator[radariter++]=int;
                RadarMaxSpeed[int]=RadarInfo[i][rSpeed];
                TOTALRADAR++;
        }
        printf("[Загрузка: %d радаров, потрачено %d (ms)", TOTALRADAR,GetTickCount() - time);
        return 1;
}

 

Если у вас есть данные коллбеки то просто добавьте содержимое,ну а если нет то добавляем данные строки

Спойлер

public OnPlayerEnterDynamicArea(playerid, areaid)
{
        foreachRadar(i)
        {
                if(areaid == i)
                {
                        if(IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) == 2) 
                        {
                                //if(IsAPlane(GetPlayerVehicleID(playerid)) || IsABoat(GetPlayerVehicleID(playerid)) || IsABike(GetPlayerVehicleID(playerid))) break; // это условие проверяет не сидите ли вы в самолете, лодке или велике!!!
                                RadarTimer[playerid] = SetTimerEx("CallBackRadar",500,true,"ii",playerid,areaid);
                        }
                        break;
                }
        }
        return true;
}
public OnPlayerLeaveDynamicArea(playerid, areaid)
{
        foreachRadar(i){
                if(areaid == i){
                        RadarShtraf[playerid] = 0;
                        KillTimer(RadarTimer[playerid]);
                        break;
                }
        }
        return true;
}

 

В OnPlayerEditObject:
 

Спойлер

if(response == EDIT_RESPONSE_FINAL){// player clicked on savе
                if(GetPVarInt(playerid, "addrad") == 1){
                        RadarInfo[TOTALRADAR][rid] = TOTALRADAR;
                        RadarInfo[TOTALRADAR][rX] = fX;
                        RadarInfo[TOTALRADAR][rY] = fY;
                        RadarInfo[TOTALRADAR][rZ] = fZ;
                        RadarInfo[TOTALRADAR][rRZ] = fRotZ;
                        RadarInfo[TOTALRADAR][rSpeed] = GetPVarInt(playerid, "speed");
                        mysql_format(mysql, MySqlStr, sizeof(MySqlStr), "INSERT INTO "TOTAL_RADAR" (`x`, `y`, `z`, `rz`, `speed`) VALUES ('%f', '%f', '%f', '%f', '%i')",fX,fY,fZ,fRotZ,RadarInfo[TOTALRADAR][rSpeed]);
                        mysql_function_query(mysql, MySqlStr, true, "", "");
                        new int = CreateDynamicSphere(fX,fY,fZ, 100, 0, 0, -1);
                        //Iter_Add(RadarIterator, int);
                        RadarIterator[radariter++]=int;
                        RadarMaxSpeed[int] = RadarInfo[TOTALRADAR][rSpeed];
                        DeletePVar(playerid, "addrad");
                        DeletePVar(playerid, "speed");
                }
        }
        else if(response == EDIT_RESPONSE_CANCEL){// player cancelled (ESC)
                DestroyObject(objectid);
                if(GetPVarInt(playerid, "addrad")==1) {
                        TOTALRADAR--;
                        DeletePVar(playerid, "addrad");
                        DeletePVar(playerid, "speed");
                }
        }
        else if(response == EDIT_RESPONSE_UPDATE){// player moved the object (edition did not stop at all)
                SetObjectPos(objectid, fX, fY, fZ);
                SetObjectRot(objectid, fRotX, fRotY, fRotZ);
        }

 

Данный коллбек отвечает за сами штрафы,его добавим в самый конец вашего мода

Спойлер

publics: CallBackRadar(playerid,area){
        if(RadarShtraf[playerid] == 0){
                if(IsACop(playerid) && PlayerInfo[playerid][pMember] == 4) return true;
                new speed = SpeedVehicle(playerid);
                if(speed >= RadarMaxSpeed[area]+10){>
                        new shtraf;
                        shtraf=(speed-RadarMaxSpeed[area])*RadarMaxSpeed[area];
                        PlayerInfo[playerid][pCash] -= shtraf;
                        RadarShtraf[playerid] = 1;
                        SFCM(playerid,COLOR_LIGHTRED,"[ДПС] Вы нарушили скоростной режим на %d м/ч. Штраф: %d!",speed-RadarMaxSpeed[area],shtraf);
                }
        }
        return true;
}

 

Ну и самое последнее это сама команда для добавление радаров

Спойлер

CMD:addradar(playerid, params[]){
        if(AdLevel[playerid] < 1) return true; //уровень админа
        if(sscanf(params, "i", params[0])) return SCM(playerid, COLOR_GREY, "{F74848}» Введите{FFFFFF}: /addradar [скорость]");
        new Float:X, Float:Y, Float:Z;
        SetPVarInt(playerid, "addrad", 1);
        SetPVarInt(playerid, "speed", params[0]);
        GetPlayerPos(playerid, X, Y, Z);
        TOTALRADAR++;
        RadarInfo[TOTALRADAR][rObj] = CreateObject(18880, X+1, Y+1, Z+1, 0.0,0.0,0.0);
        EditObject(playerid, RadarInfo[TOTALRADAR][rObj]);
        return true;
}

 

Ну вот и все,вот такая маленькая система! На mnINI можете переведу,но советую на БД ставить,что бы не произошло с ними ни что!

 

Спасибо за внимание! Удачного использования!

Автор: неизвестен.

Share this post


Link to post
Share on other sites

Your content will need to be approved by a moderator

Guest
You are commenting as a guest. If you have an account, please sign in.
Reply to this topic...

×   You have pasted content with formatting.   Remove formatting

  Only 75 emoticons maximum are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

Loading...
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • glvde.
      By glvde.


      Просмотр файла Aurora RP (доработка)
      Хранение данных (версия MySQL): R41-3.
      Командный процессор: Pawn.CMD.
      Количество строк в моде (без маппинга): 65264.
      Анти-чит: Nexius-AC.

      Под доработку взята версия Aurora за декабрь 2018.
      Автор данного мода: oscar_floyd.
      Автор данной доработки: GLADE (я).

      На доработку мода ушло около одного месяца.

      Что было сделано:
       

      Так же, начал делать инвентарь (copy by Aurora), но так и не доделал.

      Дополнительные скриншоты:
       


      Не исключаю, что есть ещё баги.
      Спасибо за внимание.
      Добавил glvde. Добавлено 21.04.2020 Категория Моды Автор oscar_floyd  
    • E)/(IK
      By E)/(IK
      В моде Only RolePlay можно создать всего 612 машин,для сервера мне надо  700. Так как я буду добавлять в игру их. Просто нужно мне узнать,как сделать так,чтобы больше машин можно было спавинть. После написания команды /veh 613 0 0 пишет введите /veh [ID Машины] [цвет1] [цвет2] а если вводить меньше то все работает.
    • NNN
      By NNN
      Поставил эту http://pawno-rus.ru/topic/1034-sistema-reporta/ систему репорта со всеми доработками, в компиляторе высвечиваются эти ошибки:
      loose indentation error 017: undefined symbol "AddMessage" warning 215: expression has no effect error 001: expected token: ";", but found "]" error 029: invalid expression, assumed zero fatal error 107: too many error messages on one line первое предупреждение из за корявости скрипта (loose indentation) а вот с остальными не знаю)