Sign in to follow this  
Followers 0
DEST

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

3 posts 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

@DEST а таблица mysql?

Share this post


Link to post
Share on other sites

@Vadim_Lvov у меня ее нет, автор системы не я. 

Можно восстановить примерную структуру таблицы по RadarInfo, это по сути то, что должно сохраняться в БД. 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • xpadio
      By xpadio
      Asia RP - Переделка
      Скачать файл 1.Теперь если администратор не авторизовлся и вводит админ команды ему будет писать следующие: Сначала Авторизуйтесь (/alogin)
      2.Командой /ban теперь можно пользоваться только с 7 лвл и выше админ-прав
      3.Покупка unavig в админском донате теперь стоит 119 рублей ( до этого 49 )
      4.Команды /ban - /unban теперь с 7 лвл админки
      5.Кмд /goto - /gethere теперь с 1 лвл админки ( ранее были на 7-8)
      6.Добавили CMD /aweapon с 3 лвл и выше вы можете брать коплект админ оружия
      7.Добавили + 1 лвл админки итого: 14 lvl adminky
      8.ДОБАВИЛИ команду /swarn ( устно предупреждать ) уже с 4 лвл админки 
      9. /agivevip - можно теперь если вы администратор выдать другу бронз серебро и т.д вип
      10. /addzone - создать зеленую зону где захочешь
      11. /addbiz - создание бизнеса
      12. /ptp - телепортировать игрока к игроку ( Эта команда как и все выше прописанные так же были добавленны в мод)
      13. Создали команду для создании промокодов /newpromo
      14. Добавили команду /setpassword для изменения пароля игроку (доступно с фд)
      15. Добавили команду /chatsms прослушка сообщений
      16. /agetipreg добавили команду чтобы узнать ник и айпи адрес человека под его ID
      17. Добавили команду /astats для проверки статы админа 
      18. Добавили команду /aadmins
      19. Добавили команду /aleaders
      20. Добавил команду /crash для 14 лвл админки чтобы крашнуть кого угодно
      21. Добавил команду /blowup исходят взрывы вокруг тебя не нанося тебе урона 
      22. Добавил команду /npcbars для создание ботов прям в игре(я думаю вы разберётесь)
      23.пофиксил команду /mpwin выйграшь теперь можно давать от 50 до 50000 доната( ранее было от 0 до 50 )
      24. Добавил pawno ботов на сервер
      25. Я думаю кто - нибудь будет использовать этот мод, причина слива? проект развалился и был официально закрыт.
      Добавил xpadio Добавлено 17.06.2024 Категория Моды Автор xpadio  
    • xpadio
      By xpadio
      1.Теперь если администратор не авторизовлся и вводит админ команды ему будет писать следующие: Сначала Авторизуйтесь (/alogin)
      2.Командой /ban теперь можно пользоваться только с 7 лвл и выше админ-прав
      3.Покупка unavig в админском донате теперь стоит 119 рублей ( до этого 49 )
      4.Команды /ban - /unban теперь с 7 лвл админки
      5.Кмд /goto - /gethere теперь с 1 лвл админки ( ранее были на 7-8)
      6.Добавили CMD /aweapon с 3 лвл и выше вы можете брать коплект админ оружия
      7.Добавили + 1 лвл админки итого: 14 lvl adminky
      8.ДОБАВИЛИ команду /swarn ( устно предупреждать ) уже с 4 лвл админки 
      9. /agivevip - можно теперь если вы администратор выдать другу бронз серебро и т.д вип
      10. /addzone - создать зеленую зону где захочешь
      11. /addbiz - создание бизнеса
      12. /ptp - телепортировать игрока к игроку ( Эта команда как и все выше прописанные так же были добавленны в мод)
      13. Создали команду для создании промокодов /newpromo
      14. Добавили команду /setpassword для изменения пароля игроку (доступно с фд)
      15. Добавили команду /chatsms прослушка сообщений
      16. /agetipreg добавили команду чтобы узнать ник и айпи адрес человека под его ID
      17. Добавили команду /astats для проверки статы админа 
      18. Добавили команду /aadmins
      19. Добавили команду /aleaders
      20. Добавил команду /crash для 14 лвл админки чтобы крашнуть кого угодно
      21. Добавил команду /blowup исходят взрывы вокруг тебя не нанося тебе урона 
      22. Добавил команду /npcbars для создание ботов прям в игре(я думаю вы разберётесь)
      23.пофиксил команду /mpwin выйграшь теперь можно давать от 50 до 50000 доната( ранее было от 0 до 50 )
      24. Добавил pawno ботов на сервер
      25. Я думаю кто - нибудь будет использовать этот мод, причина слива? проект развалился и был официально закрыт.
    • Доналдо Фарекелка
      By Доналдо Фарекелка


      Скачать файл Arizona RolePlay || Ser
      Приветствую, этот мод я нашёл на просторах интернета. 
      Скачал мод у автора:  Developer Stravinskiy
      Доработал мод: Donaldo_Farekelka
       
      Предупреждаю! Мод сырой, багов стало меньше, но они есть.
      Мод: Баня, Подвал, В некоторых местах маппинг, система коронавируса, 8 лвл админок
       
      Информация:
      1) Dc_Cmd
      2) Mysql, mode, language - Всё настраивается теперь в pawno ( UPDATE: 1.1.0 )
      3) Административные права в данный момент можно выдать только через MYSQL ( BD ).
       
      То что я сделал ( Всё что я делаю сейчас, смотрите в изменениях ):
       
      Добавил Доналдо Фарекелка Добавлено 13.04.2023 Категория Моды Автор shenol (vk.com/donaldo_farekelka)  
    • Доналдо Фарекелка
      By Доналдо Фарекелка
      Приветствую, этот мод я нашёл на просторах интернета. 
      Скачал мод у автора:  Developer Stravinskiy
      Доработал мод: Donaldo_Farekelka
       
      Предупреждаю! Мод сырой, багов стало меньше, но они есть.
      Мод: Баня, Подвал, В некоторых местах маппинг, система коронавируса, 8 лвл админок
       
      Информация:
      1) Dc_Cmd
      2) Mysql, mode, language - Всё настраивается теперь в pawno ( UPDATE: 1.1.0 )
      3) Административные права в данный момент можно выдать только через MYSQL ( BD ).
       
      То что я сделал ( Всё что я делаю сейчас, смотрите в изменениях ):
       
    • katarochqa
      By katarochqa
      Привет, друг! Я набираю людей в команду разработчиков! Если тебе нравится работать в PAWNO, заниматься 3D моделирование, фотошопить, то мы ждем именно тебя!
      Для связи:
      VK:https://vk.com/evdokimovrussia