shape1
shape2
shape3
shape4
shape7
shape8

Система ATM с возможностью создания из игры.


RineGO

Новичок
Пользователь
19.06.2016
9
1
0
Скриптер
Сегодня мы с вами напишем систему АТМ для сервера с возможностью создания из игры.
Система на MySQL!

Командный процессор DC_CMD!

[1] Ко всем define:

#define MAX_ATM 1000 // максимальное количество банкоматов.
#define dbank 4 // ID диалога АТМ.



[2] Ко всем переменным new:

new TOTALATM; // Всего АТМ
new BankObject; // объект АТМ



[3] Ко всем enum:

enum BDATA
{
bID,
Float:bX,
Float:bY,
Float:bZ,
Float:bRX,
Float:bRY,
Float:bRZ
}
new bInfo[MAX_ATM][BDATA];



[4] Теперь ко всем командам добавим:

CMD:atm(playerid, params[])
{
new Float:pOS[3]; // Переменные для записи позиции персонажа!
GetPlayerPos(playerid, POS[0], POS[1], POS[2]); // Узнаем позицию персонажа и записываем их в POS.
BankObject = CreateObject(2942,POS[0]+2, POS[1], POS[2],0,0,270); // Создаем объект АТМ.
EditObject(playerid, BankObject); // Назначаем переменной BankObject функцию редактирования объекта.
SetPVarInt(playerid, "bEDIT", 1); // Установим число 1 в переменную игрока.
return true;
}



[5] Далее переходим в public OnPlayerEditObject (если его нет создайте):

if(response == EDIT_RESPONSE_FINAL) // Если игрок нажал на иконку сохранить.
{
if(GetPVarInt(playerid, "bEDIT") == 1) // Проверяем переменную игрока на число 1.
{
new query[200]; // Переменная для запроса.
mysql_format(mysql, query, sizeof(query), "INSERT INTO `ATM` (`bID`, `bX`, `bY`, `bZ`, `bRX`, `bRY`, `bRZ`) VALUES ('%d', '%f', '%f', '%f', '%f', '%f', '%f')", TOTALATM, fX, fY, fZ, fRotX, fRotY, fRotZ);
mysql_tquery(mysql, query, "", ""); // Запрос на БД.
bInfo[TOTALATM][bX] = fX; // Записываем позицию объекта(x) в переменную bX.
bInfo[TOTALATM][bY] = fY; // Записываем позицию объекта(y) в переменную bY.
bInfo[TOTALATM][bZ] = fZ; // Записываем позицию объекта(z) в переменную bZ.
TOTALATM++;
Create3DTextLabel("Банкомат\nНажмите {529b43}'Y'", -1, fX, fY, fZ, 10.0, 0, 1); // Создаем 3D текст у банкомата
SendClientMessage(playerid, -1, "Банкомат успешно создан!"); // Если все прошло успешно выводим текст.
}
}
if(response == EDIT_RESPONSE_CANCEL) // Если игрок нажал на ESC
{
if(GetPVarInt(playerid, "bEDIT") == 1) // Проверяем переменную игрока на число 1.
{
DestroyObject(BankObject); // Удаляем АТМ.
SendClientMessage(playerid, -1, "Банкомат удален!"); // Если все прошло успешно выводим текст.
DeletePVar(playerid, "bEDIT"); // Обнуляем переменную игрока.
}
}



[6] В конец мода или там где у вас находится загрузка данных:

stock LoadAtm() return mysql_function_query(mysql, "SELECT * FROM `ATM` ORDER BY `ATM`.`bID` ASC ", false, "OnAccountBank",""); // stock для загрузки ATM.
forward OnAccountBank(playerid);
public OnAccountBank(playerid)
{
new rows, fields;// Создаем переменные для выгрузки кол-во строк-граф
cache_get_data(rows, fields);// Выгружаем примечание не выгружает если выключено кзширование
new i = 0;// Переменная для хранения временного
new temp[128];
if(rows)// Проверка есть ли строчки в таблице.
{
for(new idx = 1; idx <= rows; idx++)
{
cache_get_row(i, 0, temp), bInfo[idx][bID] = strval(temp); // Загружаем 1 строчку БД.
cache_get_row(i, 1, temp), bInfo[idx][bX] = floatstr(temp); // Загружаем 2 строчку БД.
cache_get_row(i, 2, temp), bInfo[idx][bY] = floatstr(temp); // Загружаем 3 строчку БД.
cache_get_row(i, 3, temp), bInfo[idx][bZ] = floatstr(temp); // Загружаем 4 строчку БД.
cache_get_row(i, 4, temp), bInfo[idx][bRX] = floatstr(temp); // Загружаем 5 строчку БД.
cache_get_row(i, 5, temp), bInfo[idx][bRY] = floatstr(temp); // Загружаем 6 строчку БД.
cache_get_row(i, 6, temp), bInfo[idx][bRZ] = floatstr(temp); // Загружаем 7 строчку БД.
TOTALATM++, i++;
CreateObject(2942, bInfo[idx][bX], bInfo[idx][bY], bInfo[idx][bZ], bInfo[idx][bRX], bInfo[idx][bRY], bInfo[idx][bRZ]); // Создаем АТМ.
Create3DTextLabel("Банкомат\nНажмите {529b43}'Y'", -1, bInfo[idx][bX], bInfo[idx][bY], bInfo[idx][bZ], 10.0, 0, 1); // Создаем 3D текст.
}
}
return printf("[Система АТМ]: Было загружено - %d", TOTALATM); // Показываем сколько банкоматов было загружено.
}



[7] Теперь public OnGameModeInit():

LoadAtm();


И так с созданием АТМ и его загрузкой мы закончили. Теперь собственно сделаем чтобы банкомат работал:)

[1] В public OnPlayerKeyStateChange:

if(newkeys == KEY_YES) // если игрок нажал на Y
{
for(new b = 1; b <= TOTALATM; b++)
{
if(IsPlayerInRangeOfPoint(playerid, 1.0, bInfo[bX], bInfo[bY], bInfo[bZ])) // Проверяем стоит ли игрок рядом с банкоматом. Если да то выводим диалог ниже :)
{
ShowPlayerDialog(playerid, dbank, DIALOG_STYLE_LIST, "{FFFFFF}Банкомат", "{529b43}[1] {ffffff}Баланс\n{529b43}[2] {ffffff}Снять наличные\n{529b43}[3] {ffffff}Внести наличные", "Войти", "Выйти");
}
}
return true;
}



[2] В public OnDialogResponse:

switch(dialogid)
{
case dbank:
{
if(!response) return true; // Игрок нажал на вторую кнопку!
switch(listitem)
{
case 0: // Игрок выбрал первый пункт!
{
new string[50]; // Переменная которая хранит длину текста!
format(string,sizeof(string),"{FFFFFF}Баланс: {529b43}%d {FFFFFF}р.", pInfo[playerid][BankAccount]);
SendClientMessage(playerid, -1, string);
ShowPlayerDialog(playerid, dbank, DIALOG_STYLE_LIST, "{FFFFFF}Банкомат", "{529b43}[1] {ffffff}Баланс\n{529b43}[2] {ffffff}Снять наличные\n{529b43}[3] {ffffff}Внести наличные", "Далее", "Выйти");
}
case 1: // Игрок выбрал второй пункт!
{
ShowPlayerDialog(playerid, dbank+1, DIALOG_STYLE_INPUT, "{FFFFFF}Банкомат{529b43} [Снять наличные]", "{ffffff}Введите сумму которую хотите снять:", "Снять", "Выйти");
}
case 2: // Игрок выбрал третий пункт!
{
ShowPlayerDialog(playerid, dbank+2, DIALOG_STYLE_INPUT, "{FFFFFF}Банкомат{529b43} [Внести наличные]", "{ffffff}Введите сумму которую хотите внести:", "Внести", "Выйти");
}
}
}
case dbank+1:
{
if(!response) return ShowPlayerDialog(playerid, dbank, DIALOG_STYLE_LIST, "{FFFFFF}Банкомат", "{529b43}[1] {ffffff}Баланс\n{529b43}[2] {ffffff}Снять наличные\n{529b43}[3] {ffffff}Внести наличные", "Далее", "Выйти");
if(strval(inputtext) > pInfo[playerid][BankAccount]) // Проверяем хватает ли денег в банке. Если нет выводим диалог и текст!
{
ShowPlayerDialog(playerid, dbank+1, DIALOG_STYLE_INPUT, "{FFFFFF}Банкомат{529b43} [Снять наличные]", "{ffffff}Введите сумму которую хотите снять:", "Снять", "Выйти");
return SendClientMessage(playerid, -1, "Недостаточно средств!");
}
pInfo[playerid][BankAccount] -= strval(inputtext);
pInfo[playerid][Money] += strval(inputtext);
GivePlayerMoney(playerid, strval(inputtext));
}
case dbank+2:
{
if(!response) return ShowPlayerDialog(playerid, dbank, DIALOG_STYLE_LIST, "{FFFFFF}Банкомат", "{529b43}[1] {ffffff}Баланс\n{529b43}[2] {ffffff}Снять наличные\n{529b43}[3] {ffffff}Внести наличные", "Далее", "Выйти");
if(strval(inputtext) > pInfo[playerid][Money]) // проверяем хватает ли денег у игрока. Если нет то выводим диалог и текст!
{
ShowPlayerDialog(playerid, dbank+2, DIALOG_STYLE_INPUT, "{FFFFFF}Банкомат{529b43} [Внести наличные]", "{ffffff}Введите сумму которую хотите внести:", "Внести", "Выйти");
return SendClientMessage(playerid, -1, "Недостаточно средств!");
}
pInfo[playerid][BankAccount] += strval(inputtext);
GivePlayerMoney(playerid, -strval(inputtext));
}
}



Теперь нам нужно создать БД для АТМ. Создаем таблицу и называем ее ATM и далее делаем как на фото:

qaYgBuFF7es.jpg




Ну вот и все, система АТМ готова. Обзор клац

P.S: pInfo[playerid][bankAccount], pInfo[playerid][Money] и запрос mysql нужно заменить на свое чтобы не было ошибок!

 
Последнее редактирование модератором: