Ко всем const
Код:
const MAX_AZS = 1;// Сколько азс в моде.
Сделаем переменную
Код:
local AZSInfo = {}; local vidTopliwa = array(getPlayerSlots(), 0);
В onScriptInit вставим
Код:
for(local i=0; i<MAX_AZS; i++) { AZSInfo[i] <- {}; AZSInfo[i].AZSOwned <- 0;// есть владелец или нет AZSInfo[i].AZSOwner <- 0;// владелец AZSInfo[i].AZSEntranceX <- 0;// коры AZSInfo[i].AZSEntranceY <- 0; AZSInfo[i].AZSEntranceZ <- 0; AZSInfo[i].AZSLevel <- 0;// уровень бизнеса AZSInfo[i].AZSCena <- 0;// цена бизнеса AZSInfo[i].AZSTill <- 0;// касса AZSInfo[i].AZSProd <- 0;// сколько продуктов в наличии AZSInfo[i].AZSMaxProd <- 0;// максимальное число прод AZSInfo[i].AZSCenaDis <- 0; AZSInfo[i].AZSCena92 <- 0; AZSInfo[i].AZSCena95 <- 0; }
В onPlayerJoin
Код:
users[playerid].azskey <- 255;
В onPlayerRegister
Код:
pFile.setKey("Property", "AZSkey", "255");
В onPlayerLogin
Код:
users[playerid].azskey = pFile.getKey("Property", "AZSkey").tointeger();
В savePlayers
Код:
pFile.setKey("Property", "AZSkey", users[i].azskey.tostring());
Далее сделаем команды
В onPlayerCommand
Код:
//===================================< AZS >================================================= if(cmd[0] == "/buyazs") { if(users[playerid].azskey != 255) return sendPlayerMessage(playerid, "[Ошибка] У вас уже есть АЗС!",Red); for(local a = 0; a < AZSInfo.len(); a++) { if(playerToPoint(playerid, 2.0, AZSInfo[a].AZSEntranceX, AZSInfo[a].AZSEntranceY, AZSInfo[a].AZSEntranceZ) && AZSInfo[a].AZSOwned == 0) { if(users[playerid].level < AZSInfo[a].AZSLevel) return sendPlayerMessage(playerid, " Вы должны быть "+AZSInfo[a].AZSLevel+" уровня чтобы купить АЗС.",Red); if(users[playerid].money >= AZSInfo[a].AZSCena) { users[playerid].azskey = a; AZSInfo[a].AZSOwned = 1; AZSInfo[a].AZSOwner = getPlayerName(playerid); local amount = AZSInfo[a].AZSCena; givePlayerMoney(playerid, -amount);users[playerid].money -= amount; sendPlayerMessage(playerid, "* Поздравляем, Вы только что приобрели АЗС.",Lemon); sendPlayerMessage(playerid, "* Информация - /azs",Lemon); saveCFG();updateLabel(); savePlayers(); return true; } else { sendPlayerMessage(playerid, "[Ошибка] Недостаточно средств!",Red); return true; } } } return true; } if(cmd[0] == "/azs") { if(users[playerid].azskey == 255) return sendPlayerMessage(playerid, "[Ошибка] У вас уже нет АЗС!",Red); showPlayerDialog(playerid, 5, 2, "АЗС инфо", "Информация\nСменить цену за литр\nСнять деньги с кассы", "Да", "Нет"); } //
Далее сделаем диалоги. В onDialogResponse
Код:
if(dialogid == 5) { if(response) { if(listitem == 0) { if(users[playerid].azskey == 255) return sendPlayerMessage(playerid, "[Ошибка] У вас уже нет АЗС!",Red); local azs = users[playerid].azskey; showPlayerDialog(playerid, 6, 0, "АЗС Информация ", "Касса: "+AZSInfo[azs].AZSTill+" \nЦены за 1 литр \nДизтопливо "+AZSInfo[azs].AZSCenaDis+" \nАи-92 "+AZSInfo[azs].AZSCena92+" \nАи-95 "+AZSInfo[azs].AZSCena95, "Назад","Отмена"); } if(listitem == 1) { if(users[playerid].azskey == 255) return sendPlayerMessage(playerid, "[Ошибка] У вас уже нет АЗС!",Red); showPlayerDialog(playerid, 7, 2, "Выберите топливо", "Дизтопливо\nАи-92\nАи-95", "Да", "Отмена"); } if(listitem == 2) { if(users[playerid].azskey == 255) return sendPlayerMessage(playerid, "[Ошибка] У вас уже нет АЗС!",Red); local azs = users[playerid].azskey; local summa = AZSInfo[azs].AZSTill; givePlayerMoney(playerid, summa); users[playerid].money += summa; AZSInfo[azs].AZSTill = 0; saveCFG(); updateLabel(); savePlayers(); sendPlayerMessage(playerid, "* Вы сняли $"+summa,Lemon); } } else { showPlayerDialog(playerid, 5, 2, "АЗС инфо", "Информация\nСменить цену за литр\nСнять деньги с кассы", "Да", "Отмена"); } } if(dialogid == 6) { if(response) { showPlayerDialog(playerid, 5, 2, "АЗС инфо", "Информация\nСменить цену за литр\nСнять деньги с кассы", "Да", "Отмена"); } else { } } if(dialogid == 7) { if(response) { if(listitem == 0) { showPlayerDialog(playerid, 8, 1, "Цену за литр", "Какая будет цена?", "Да", "Отмена"); vidTopliwa = 1; } if(listitem == 1) { showPlayerDialog(playerid, 8, 1, "Цену за литр", "Какая будет цена?", "Да", "Отмена"); vidTopliwa = 2; } if(listitem == 2) { showPlayerDialog(playerid, 8, 1, "Цену за литр", "Какая будет цена?", "Да", "Отмена"); vidTopliwa = 3; } } else { showPlayerDialog(playerid, 5, 2, "АЗС инфо", "Информация\nСменить цену за литр\nСнять деньги с кассы", "Да", "Отмена"); } } if(dialogid == 8) { if(response) { local cena = split(inputtext, " "); local azs = users[playerid].azskey; if(vidTopliwa == 1) { AZSInfo[azs].AZSCenaDis = cena[0].tointeger(); saveCFG(); } if(vidTopliwa == 2) { AZSInfo[azs].AZSCena92 = cena[0].tointeger(); saveCFG(); } if(vidTopliwa == 3) { AZSInfo[azs].AZSCena95 = cena[0].tointeger(); saveCFG(); } saveCFG(); updateLabel(); showPlayerDialog(playerid, 5, 2, "АЗС инфо", "Информация\nСменить цену за литр\nСнять деньги с кассы", "Да", "Отмена"); } else { showPlayerDialog(playerid, 5, 2, "АЗС инфо", "Информация\nСменить цену за литр\nСнять деньги с кассы", "Да", "Отмена"); } }
Затем загрузка и сохранение файла
Код:
function loadAZS() { local myfile = file("azs.cfg", "rb+"); local arrCoords = array(13); local fileContent = myfile.readFile(); local aFileContent = split(fileContent, "\n"); if(myfile) { local idx = 0; while(idx < AZSInfo.len()) { arrCoords = split(aFileContent[idx], "|"); AZSInfo[idx].AZSOwned = arrCoords[0].tointeger(); AZSInfo[idx].AZSOwner = arrCoords[1].tostring(); AZSInfo[idx].AZSEntranceX = arrCoords[2].tofloat(); AZSInfo[idx].AZSEntranceY = arrCoords[3].tofloat(); AZSInfo[idx].AZSEntranceZ = arrCoords[4].tofloat(); AZSInfo[idx].AZSLevel = arrCoords[5].tointeger(); AZSInfo[idx].AZSCena = arrCoords[6].tointeger(); AZSInfo[idx].AZSTill = arrCoords[7].tointeger(); AZSInfo[idx].AZSProd = arrCoords[8].tointeger(); AZSInfo[idx].AZSMaxProd = arrCoords[9].tointeger(); AZSInfo[idx].AZSCenaDis = arrCoords[10].tointeger(); AZSInfo[idx].AZSCena92 = arrCoords[11].tointeger(); AZSInfo[idx].AZSCena95 = arrCoords[12].tointeger(); log("AZS № "+ idx +"|Owner: "+ AZSInfo[idx].AZSOwner +" Till: "+ AZSInfo[idx].AZSTill); idx++; } log("|AZS: "+MAX_AZS); } return true; } addEvent("scriptInit", loadAZS); function saveCFG() { local idx=0; local myfile2; local str; while (idx < AZSInfo.len()) { str = format(AZSInfo[idx].AZSOwned+"|" +AZSInfo[idx].AZSOwner+"|" +AZSInfo[idx].AZSEntranceX+"|" +AZSInfo[idx].AZSEntranceY+"|" +AZSInfo[idx].AZSEntranceZ+"|" +AZSInfo[idx].AZSLevel+"|" +AZSInfo[idx].AZSCena+"|" +AZSInfo[idx].AZSTill+"|" +AZSInfo[idx].AZSProd+"|" +AZSInfo[idx].AZSMaxProd+"|" +AZSInfo[idx].AZSCenaDis+"|" +AZSInfo[idx].AZSCena92+"|" +AZSInfo[idx].AZSCena95+"\r\n"); if(idx == 0) { myfile2 = file("azs.cfg", "wb+"); } else { myfile2 = file("azs.cfg", "ab+"); } myfile2.writeline(str); idx++; } idx = 0; return true; }
Далее сделаем 3D текст
Код:
function LoadLabel() { for(local a = 0; a< AZSInfo.len(); a++) { if(AZSInfo[a].AZSOwned == 1) azsLabel = create3DLabel(" АЗС № "+(a+1)+"\n Владелец "+AZSInfo[a].AZSOwner+"\n Цена за 1 литр \n Дизтопливо: $ "+AZSInfo[a].AZSCenaDis+"\n Аи-92: $ "+AZSInfo[a].AZSCena92+"\n Аи-95: $ "+AZSInfo[a].AZSCena95, AZSInfo[a].AZSEntranceX, AZSInfo[a].AZSEntranceY, AZSInfo[a].AZSEntranceZ, 0xB4B5B7FF, true, 50.0); else azsLabel = create3DLabel(" АЗС № "+(a+1)+" Продается \n Цена "+AZSInfo[a].AZSCena+"\n Уровень"+AZSInfo[a].AZSLevel+"\n Цена за 1 литр \n Дизтопливо: $ "+AZSInfo[a].AZSCenaDis+"\n Аи-92: $ "+AZSInfo[a].AZSCena92+"\n Аи-95: $ "+AZSInfo[a].AZSCena95, AZSInfo[a].AZSEntranceX, AZSInfo[a].AZSEntranceY, AZSInfo[a].AZSEntranceZ, 0xB4B5B7FF, true, 50.0); } } addEvent("scriptInit", LoadLabel);
Обновление 3D текста
Код:
function updateLabel() { delete3DLabel(azsLabel); for(local a = 0; a< AZSInfo.len(); a++) { if(AZSInfo[a].AZSOwned == 1) azsLabel = create3DLabel(" АЗС № "+(a+1)+"\n Владелец "+AZSInfo[a].AZSOwner+"\n Цена за 1 литр \n Дизтопливо: $ "+AZSInfo[a].AZSCenaDis+"\n Аи-92: $ "+AZSInfo[a].AZSCena92+"\n Аи-95: $ "+AZSInfo[a].AZSCena95, AZSInfo[a].AZSEntranceX, AZSInfo[a].AZSEntranceY, AZSInfo[a].AZSEntranceZ, 0xB4B5B7FF, true, 50.0); else azsLabel = create3DLabel(" АЗС № "+(a+1)+" Продается \n Цена "+AZSInfo[a].AZSCena+"\n Уровень"+AZSInfo[a].AZSLevel+"\n Цена за 1 литр \n Дизтопливо: $ "+AZSInfo[a].AZSCenaDis+"\n Аи-92: $ "+AZSInfo[a].AZSCena92+"\n Аи-95: $ "+AZSInfo[a].AZSCena95, AZSInfo[a].AZSEntranceX, AZSInfo[a].AZSEntranceY, AZSInfo[a].AZSEntranceZ, 0xB4B5B7FF, true, 50.0); } }
Иконку на карте
Код:
function LoadBlips() { for(local a = 0; a< AZSInfo.len(); a++) { local azsblip = createBlip(83, AZSInfo[a].AZSEntranceX, AZSInfo[a].AZSEntranceY, AZSInfo[a].AZSEntranceZ, true); } } addEvent("scriptInit", LoadBlips);
Ну и в конце мода
Код:
class file extends file { function readFile() { local fullStr = ""; while (!this.eos ()) { local c = this.readn ('c'); fullStr += c.tochar(); if (this.eos ()) return fullStr; } return fullStr; } function writeline(line) { foreach(char in line) { this.writen(char, 'c'); } this.writen('\n', 'c'); } }
В папку files помещаем файл azs.cfg
Подробнее про файл и как добавить новую азс в следующей теме
Теги: Система АЗС,iv-mp