Доброго времени суток. Собственно, сабж.
Ко всем #define:
[code]#define MAX_ATM 1000
#define dbank 4[/code]

Ко всем [color=#0000FF]new[/color]:
[code]new TOTALATM = 0; // Сколько всего банкоматов
new BankObject; // для CreateObject
enum BDATA { bID, Float:bX, Float:bY, Float:bZ, Float:bRX, Float:bRY, Float:bRZ }
new bInfo[MAX_ATM][BDATA]; // Здесь будет информация о каждом банкомате
[/code]

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

В [color=#0000FF]public[/color] OnPlayerEditObject:
[code] if(response == EDIT_RESPONSE_FINAL)
{
if(GetPVarInt(playerid, «bEDIT») == 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;
bInfo[TOTALATM][bY] = fY;
bInfo[TOTALATM][bZ] = fZ;
TOTALATM++;
Create3DTextLabel(«Банкомат
Нажмите {529b43}’Y'», -1, fX, fY, fZ, 10.0, 0, 1);
SendClientMessage(playerid, -1, «Банкомат успешно создан!»);
}
}
if(response == EDIT_RESPONSE_CANCEL)
{
if(GetPVarInt(playerid, «bEDIT») == 1)
{
DestroyObject(BankObject);
SendClientMessage(playerid, -1, «Банкомат удален!»);
DeletePVar(playerid, «bEDIT»);
}
}[/code]

В конец мода:
[code]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("Банкомат Нажмите {529b43}'Y'", -1, bInfo[idx][bX], bInfo[idx][bY], bInfo[idx][bZ], 10.0, 0, 1); // Создаем 3D текст. } } return printf("[Система АТМ]: Было загружено - %d", TOTALATM); // Показываем сколько банкоматов было загружено. }[/code]

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

В [color=#0000FF]public[/color] OnDialogResponse:
[code] 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}Баланс
{529b43}[2] {ffffff}Снять наличные
{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}Баланс
{529b43}[2] {ffffff}Снять наличные
{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}Баланс
{529b43}[2] {ffffff}Снять наличные
{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));
}[/code]

В базе данных создайте таблицу ATM:
[code]CREATE TABLE `host.danilasar.ru`.`ATM` ( `bID` INT NOT NULL , `bX` FLOAT NOT NULL , `bY` FLOAT NOT NULL , `bZ` FLOAT NOT NULL , `bRX` FLOAT NOT NULL , `bRY` FLOAT NOT NULL , `bRZ` FLOAT NOT NULL , PRIMARY KEY (`bID`)) ENGINE = InnoDB;[/code]
Автор: RineGO
Переделал: danilasar (я)

От danilasar

Это я

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *