Перейти к содержанию
Авторизация  
Marvellous

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

Рекомендуемые сообщения

Marvellous

Дорогие пользователи портала CR-MP

 

Посмотрел данный раздел и не нашел данную систему!

Теперь немного о системе:

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

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

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

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

 

И так начнем:

 

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 можете переведу,но советую на БД ставить,что бы не произошло с ними ни что!

 

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

 

Копировать на другие порталы строго запрещено!

 

Автор урока: Я

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
EgasVegas

А самому слабо написать код, а не брать с другим форумов?

Как и все твои манулы/уроки.

P.S: я ещё потом загуглю твои прошлые уроки и манулы, если тоже взяты, то и бан можно будет выдать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Marvellous

@EgasVegas,1) Данная система радаров стоит у меня в моде!

2) Я ее переводил с сампа в крмп( автор сампа я не знаю кто,по поводу перевода неправильно немного написал) сейчас отредактирую! 

 

P.S  Так же данный мануал разместил на данном портале,так как тут данного урока/мануала нет! Могу вообще тогда попросить все свои темы которые были созданы мною лично что бы удалили и больше вообще ни сливать и публиковать не буду! Если хотите то создам тему по удалению! Так как я публикую то что нет на портале,а тебе еще и не нравиться!


@EgasVegas

 

 

P.S: я ещё потом загуглю твои прошлые уроки и манулы, если тоже взяты, то и бан можно будет выдать.

Выдавай мне то что! Все файлы которые выложены я тогда удаляю и все,тему все получатся не действительными просто! Я за проекты как то не держусь,перейду на другой,от этого мне не холодно не жарко!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
EgasVegas

Нет, ты не переводил ничего.

Что ты перевод?

Функции?

не смеши, я загуглил чать кода и вылезло 10 форумов, точно с таким же кодом.

Я с учёбы через 2 часа приду и буду остальные проверять темы.

Если будешь мне врать, как сейчас, то выдам предупреждение за ввод администрации в заблуждение.

Ты думаешь я дурак и не могу проверить твой это код или нет?

 

Ладно если бы ты скопировал и вставил,

но ты даже авторство себе присвоил.

написал бы что ты автор доработки и всё.

а ты не написал.

ну вообщем-то всё.

через 2 часа проверю темы.

и да, темы ты уже не удалишь и не изменишь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Marvellous

@EgasVegas,Я и не собираю их изменять! Создал тему по удалению,а все файлы уже были отключены в Яндексе!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Ilia_Bellucci

Что деалать, если у меня нет строчки "OnPlayerEditObject" ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
EgasVegas

@Ilia_Bellucci,создать её, как и другие паблики. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
АЛЕКСАНДР МАМАЕВ

а на R39-3 сложно переделать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.