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

Основа банкомата

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

Vladimir_Kulkov

Представляю вашему внимаю основу динамических банкоматов,это всего лишь основа,никаких действий на кнопки и диалогов нет.И так начнём

В начало мода

 

#define MAX_ATM 100//максимальное кол-во атм

enum ATM_INFO

{

aID,

Float:aX,

Float:aY,

Float:aZ,

aPickup,

Text3D:aLabel,

}

new AtmInfo[MAX_ATM][ATM_INFO];

new AllAtm;//всего атм

new DB:ATM;//понадобится на работы с базой данных

в public OnGameModeInit()

 

ATM = db_open("atm.db");//открываем базу данных

db_query(ATM, "CREATE TABLE IF NOT EXISTS atm (ID int, X Float,Y Float,Z Float");//если таковой нет,создаём

LoadAtm();//загружаем атм

в конец мода или в любое свободное место

 

stock SaveAtm(id)//сохранение атм(понадобится если вы будете что-то переделывать в атм,к примеру перенести в другое место)

{

new sql[200];

format(sql, sizeof(sql), "UPDATE `atm` SET X=%f , Y=%f , Z=%f WHERE ID=%d",

AtmInfo[id][aX],

AtmInfo[id][aY],

AtmInfo[id][aZ],

AtmInfo[id][aID],

db_query(ATM,sql);

return 1;

}

 

stock LoadAtm()//вот сама загрузка атм

{

new DBResult:da;

da = db_query(ATM,"SELECT * FROM `atm`");

new i,buffer[25],label[50];

while(i != db_num_rows(da))

{

db_get_field_assoc(da,"ID",buffer,15);

AtmInfo[aID] = strval(buffer);

db_get_field_assoc(da,"X",buffer,15);

AtmInfo[aX] = floatstr(buffer);

db_get_field_assoc(da,"Y",buffer,15);

AtmInfo[aY] = floatstr(buffer);

db_get_field_assoc(da,"Z",buffer,15);

AtmInfo[aZ] = floatstr(buffer);

AtmInfo[aPickup] = CreateDynamicPickup(1274,1, AtmInfo[aX],AtmInfo[aY],AtmInfo[aZ],0,0);

format(label, sizeof(label), "АТМ № %d\nНажмите N",i);

AtmInfo[aLabel] = CreateDynamic3DTextLabel(label, 0x2ECC71FF, AtmInfo[aX], AtmInfo[aY], AtmInfo[aZ] + 1.0, 5.0);

i++; db_next_row(da);

}

AllAtm = i;

printf("Атм загружено: %i",AllAtm);

db_free_result(da);

return 1;

}

в public OnPlayerCommandText(playerid, cmdtext[])

 

if(strcmp(cmd, "/addatm", true) == 0)//добавление атм

{

if(PlayerInfo[playerid][pAdmin] != 5)return 1;

GetPlayerPos(playerid, AtmInfo[AllAtm][aX],AtmInfo[AllAtm][aY],AtmInfo[AllHouse][aZ]);

AtmInfo[AllAtm][aID] = random(243567);

AtmInfo[AllAtm][aPickup] = CreateDynamicPickup(1274,1, AtmInfo[AllAtm][aX],AtmInfo[AllAtm][aY],AtmInfo[AllAtm][aZ],0,0);

format(label, sizeof(label), "АТМ № %d\nНажмите N",AllAtm);

AtmInfo[AllAtm][aLabel] = CreateDynamic3DTextLabel(label, 0x2ECC71FF, AtmInfo[AllAtm][aX], AtmInfo[AllAtm][aY], AtmInfo[AllAtm][aZ] + 1.0, 5.0);

new addatm[200];

format(addatm,sizeof(addatm),"INSERT INTO `atm` (ID,X,Y,Z) VALUES (%i,%f,%f,%f)",

AtmInfo[AllAtm][aID],

AtmInfo[AllAtm][aX],

AtmInfo[AllAtm][aY],

AtmInfo[AllAtm][aZ]);

db_query(ATM,addatm);

AllAtm++;

return 1;

}

if(strcmp(cmd, "/removeatm", true) == 0)//удаление атм

{

new string[40];

if(PlayerInfo[playerid][pAdmin] != 5)return 1;

tmp = strtok(cmdtext, idx);

if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_LIGHTRED, "Используйте: /removeatm [id]");

new id = strval(tmp);

DestroyDynamicObject(AtmInfo[id][aPickup]);

DestroyDynamic3DTextLabel(AtmInfo[id][aLabel]);

format(string,40,"DELETE FROM `atm` WHERE ID=%i",AtmInfo[id][aID]);

db_query(ATM,string);

return 1;

}

в public OnGameModeExit()

 

db_close(ATM);//закрываем бд при выключении мода

 

Тем самым мы можем создавать атм из игры /addatm,удалять их /removeatm,база данных будет добавлена в папку scriptfiles автоматически при первом запуске мода.

Ещё раз скажу кто не читал 1 пост: это всего лишь основа,по сути вам осталось сделать действие на кнопку и вывод диалогов,тут уже действует ваша фантазия.Sqlite не требует подключения никак дополнительных плагинов и инклудов,для редактирования базы данных вручную вам понадобится программа: SQLite DataBase Browser

В принципе,возможно позже я сделаю 2 урок Действие на клавишу+диалоги

Автор: Basis

Изменено пользователем Vladimir_Kulkov

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


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

Было бы хорошо если сделал полностью :D83DDE0A: 
За второй урок поставлю +

 

P/S Новичкам полезнее готовый

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


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

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


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

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

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

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

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

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

Войти

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

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

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

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

×

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

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