14.06.2016, 00:07
Код HTML:
LoadHouses(h)
{
if(!fexist("houses/m_h.ini"))return print("[Ошибка] Файл houses/m_h.ini не найден"); // Проверяем наличие файла в scriptfiles/houses (если не найден, в лог сервера выдаст ошибку)
new f=ini_openFile("houses/m_h.ini"); // открываем файл
ini_getInteger(f,"Amount",m_h); // получаем точное значение созданных домов
ini_closeFile(f); // закрываем этот файл
if(!fexist("houses/houses.ini"))return print("[Ошибка] Файл houses/houses.ini не найден"); // проверяем наличие файла houses.ini в той же директории.
f=ini_openFile("houses/houses.ini"); // открываем его
new str[128];
new string[256]; // создаем небольшой массив для дальнейшего форматирования строки (ключа в файле)
for(new h=1;h<=m_h;h++) // запускаем цикл
{
format(str,sizeof(str),"ID %d",h); // форматируем строку для ключа в файле
ini_getString(f,str,string); // получаем данные в виде строки
sscanf(string,"p<|>s[128]s[128]fffiiii",
HouseInfo[h][hDesc],
HouseInfo[h][hOwned],
HouseInfo[h][hEntrancex],
HouseInfo[h][hEntrancey],
HouseInfo[h][hEntrancez],
HouseInfo[h][hInt],
HouseInfo[h][hVirt],
HouseInfo[h][hValue],
HouseInfo[h][hLock],
HouseInfo[h][hHealthx],
HouseInfo[h][hHealthy],
HouseInfo[h][hHealthz],
HouseInfo[h][hArmourx],
HouseInfo[h][hArmoury],
HouseInfo[h][hArmourz],
HouseInfo[h][hHel],
HouseInfo[h][hArm],
HouseInfo[h][hRooms],
HouseInfo[h][hRent],
HouseInfo[h][hRentabil],
HouseInfo[h][hTakings],
HouseInfo[h][hDate],
HouseInfo[h][hLevel]); // распределяем данные по переменным (данные идут через символ "|", пример: Dom 1|2.612|213.132|2.321")
if(!strcmp(HouseInfo[h][hOwned],"None",true)) // Сравниваем строки если владелец дома == None значит дом не куплен (в дальнейшем при создании владелец дома будет равен None)
{
HouseInfo[h][hPick]=CreatePickup(1273,23,HouseInfo[h][hEntrancex],HouseInfo[h][hEntrancey],HouseInfo[h][hEntrancez],0); // Создаем пикап дома
format(string,sizeof(string),"{FBF8EF}[Дом {00FF00}продается{FBF8EF}]\nОписание: %s\nУровень: %d\nЦена: $%d",HouseInfo[h][hDesc],HouseInfo[h][hLevel],HouseInfo[h][hValue]); // Форматируем строку для 3D текста
HouseInfo[h][hText]=Create3DTextLabel(string,0xFFFFFFFF,HouseInfo[h][hEntrancex],HouseInfo[h][hEntrancey],HouseInfo[h][hEntrancez]+0.5,10.0,0,0); // Создаем 3D текст
}
else // Иначе, если владелец дома не равен None, значит дом куплен
{
HouseInfo[h][hPick]=CreatePickup(1272,23,HouseInfo[h][hEntrancex],HouseInfo[h][hEntrancey],HouseInfo[h][hEntrancez],0); // Создаем пикап дома (модель пикапа уже другая)
format(string,sizeof(string),"{FBF8EF}[Дом {00FF00}занят{FBF8EF}]\nОписание: %s\nВладелец: %s",HouseInfo[h][hDesc],HouseInfo[h][hOwned]); // форматируем строку
HouseInfo[h][hText]=Create3DTextLabel(string,0xFFFFFFFF,HouseInfo[h][hEntrancex],HouseInfo[h][hEntrancey],HouseInfo[h][hEntrancez]+0.5,10.0,0,0); // И создаем 3D текст с информацией
}
}
ini_closeFile(f); // Закрываем фай
return printf("Loaded %d houses",m_h); // В лог чата возвращаем кол-во загруженных домов
}
SaveHouse(h) // Функция для сохранения данных дома в файл
{
new f=ini_openFile("houses/houses.ini"); // открываем файл
new str[128];
new string[256]; // создаем массив для форматирования строки (для ключа, как в предыдущем случае)
format(str,128,"ID %d",h); // форматируем строку
format(string,sizeof(string),"%s|%s|%f|%f|%f|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d|",
HouseInfo[h][hDesc],//1
HouseInfo[h][hOwned],//2
HouseInfo[h][hEntrancex],//3
HouseInfo[h][hEntrancey],//4
HouseInfo[h][hEntrancez],//5
HouseInfo[h][hInt],//6
HouseInfo[h][hVirt],//7
HouseInfo[h][hValue],//8
HouseInfo[h][hLock],//9
HouseInfo[h][hHealthx],//10
HouseInfo[h][hHealthy],//11
HouseInfo[h][hHealthz],//12
HouseInfo[h][hArmourx],//13
HouseInfo[h][hArmoury],//14
HouseInfo[h][hArmourz],//15
HouseInfo[h][hHel],//16
HouseInfo[h][hArm],//17
HouseInfo[h][hRooms],//18
HouseInfo[h][hRent],//19
HouseInfo[h][hRentabil],//20
HouseInfo[h][hTakings],//21
HouseInfo[h][hDate],//22
HouseInfo[h][hLevel]);//23 // снова форматируем строку (уже с информацией о доме); вот тут кстати, вы я думаю заметили, информация через "|"
ini_setString(f,str,string); // записываем данные
ini_closeFile(f); // закрываем файл
return true;
}
Вот диалоги создания дома
Код HTML:
case DIALOG_CREATE_DESC://ОПИСАНИЕ ДОМА { if(response) // Если игрок нажал "Далее" { if(!strlen(inputtext))return ShowPlayerDialog(playerid,DIALOG_CREATE_DESC,DIALOG_STYLE_INPUT,"{EFFBFB}Создание дома[1/5]","Введите описание для дома.","Далее","Закрыть"); // Если игрок ничего не ввел то показываем ему диалог снова SetPVarString(playerid,"h_desc",inputtext); // Записываем в PVar описание чтобы в дальнейшем его использовать ShowPlayerDialog(playerid,DIALOG_CREATE_PRICE,DIALOG_STYLE_INPUT,"{EFFBFB}Создание дома[2/5]","Введите цену для дома.","Далее","Назад"); // Показываем следующий диалог - цена дома. } } case DIALOG_CREATE_PRICE://ЦЕНА ДОМА { if(response) // Если нажал "Да" { if(!strlen(inputtext))return ShowPlayerDialog(playerid,DIALOG_CREATE_PRICE,DIALOG_STYLE_INPUT,"{EFFBFB}Создание дома[2/5]","Введите цену для дома.","Далее","Назад"); SetPVarInt(playerid,"h_price",strval(inputtext)); // Сохраняем цену в PVar ShowPlayerDialog(playerid,DIALOG_CREATE_LVL,DIALOG_STYLE_INPUT,"{EFFBFB}Создание дома[3/5]","Введите уровень для дома.","Далее","Назад"); } else DeletePVar(playerid,"h_desc"),ShowPlayerDialog(playerid,DIALOG_CREATE_DESC,DIALOG_STYLE_INPUT,"{EFFBFB}Создание дома[1/5]","Введите описание для дома.","Далее","Закрыть"); } case DIALOG_CREATE_LVL://УРОВЕНЬ ДОМА { if(response) // Если нажал "Да" { if(!strlen(inputtext))return ShowPlayerDialog(playerid,DIALOG_CREATE_LVL,DIALOG_STYLE_INPUT,"{EFFBFB}Создание дома[3/5]","Введите уровень для дома.","Далее","Назад"); SetPVarInt(playerid,"h_lvl",strval(inputtext)); // Сохраняем lvl в PVar // string=""; // Очищаем массив (чтобы не было лишней информации for(new i;i<sizeof(HInts);i++) // запускаем цикл для формирования следующего диалога в котором будет список с доступными интерьерами { strcat(string,HInts[i][hiName]); // записываем в массив STR значение из HInts[i][hiName] strcat(string,"\n"); // Делаем переход на следующую строку т.к. стиль диалога = DIALOG_STYLE_LIST } ShowPlayerDialog(playerid,DIALOG_CREATE_INT,DIALOG_STYLE_LIST,"{EFFBFB}Создание дома[4/5]",string,"Далее","Назад"); // Показываем диалог с готовым списком интерьеров } else DeletePVar(playerid,"h_price"),ShowPlayerDialog(playerid,DIALOG_CREATE_PRICE,DIALOG_STYLE_INPUT,"{EFFBFB}Создание дома[2/5]","Введите цену для дома.","Далее","Назад"); } case DIALOG_CREATE_INT://ВЫБОР ИНТЕРЬЕРА { if(response) // если нажал "Далее" { SetPVarInt(playerid,"h_int",listitem); // Записываем в PVar номер списка (подсчет номера идет с 0 как в и массивах подсчет ячеек. ShowPlayerDialog(playerid,DIALOG_CREATE_CONF,DIALOG_STYLE_MSGBOX,"{EFFBFB}Создание дома[5/5]","Вы действительно хотите создать дом в этом месте?","Создать","Отмена"); // Показываем диалог подтверждения } else DeletePVar(playerid,"h_lvl"),ShowPlayerDialog(playerid,DIALOG_CREATE_LVL,DIALOG_STYLE_INPUT,"{EFFBFB}Создание дома[3/5]","Введите уровень для дома.","Далее","Назад"); } case DIALOG_CREATE_CONF://ПОДТВЕРДИТЬ { if(response) // если игрок нажал "Создать" { m_h++,SaveHouseAmount(); // Увеличиваем общее кол-во домов new Float:x[3],str[32]; // Создаем необходимые массивы (для определения координат и получения данных из PVar'a - описание дома, то, что вводили ранее) GetPlayerPos(playerid,x[0],x[1],x[2]),GetPVarString(playerid,"h_desc",str,32); // Определяем позиции игрока, заносим описание в str HouseInfo[m_h][hEntrancex]=x[0],HouseInfo[m_h][hEntrancey]=x[1],HouseInfo[m_h][hEntrancez]=x[2],HouseInfo[m_h][hValue]=GetPVarInt(playerid,"h_price"),HouseInfo[m_h][hLevel]=GetPVarInt(playerid,"h_lvl"), // Присваиваем переменным дома необходимые значения HouseInfo[m_h][hInt]=GetPVarInt(playerid,"h_int"),HouseInfo[m_h][hVirt]=m_h,strmid(HouseInfo[m_h][hDesc],str,0,32,32), strmid(HouseInfo[m_h][hOwned],"None",0,5,5); // Записываем владельца дома как None HouseInfo[m_h][hLock] = 1;//закрое дом HouseInfo[m_h][hPick]=CreatePickup(1273,23,x[0],x[1],x[2],0); // Создаем пикап format(string,sizeof(string),"{FBF8EF}[Дом {00FF00}продается{FBF8EF}]\nОписание: %s\nУровень: %d\nЦена: $%d",HouseInfo[m_h][hDesc],HouseInfo[m_h][hLevel],HouseInfo[m_h][hValue]); HouseInfo[m_h][hText]=Create3DTextLabel(string,0xFFFFFFFF,x[0],x[1],x[2]+0.5,10.0,0,0); // Создаем 3D текст с ин-цией player_SendTD(playerid,"~r~СООБЩЕНИЕ:~n~~n~~G~ДОМ УСПЕШНО СОЗДАН",5000);//5 секунд SaveHouse(m_h); // Сохраняем дом DeletePVar(playerid,"h_price"),DeletePVar(playerid,"h_desc"),DeletePVar(playerid,"h_int"),DeletePVar(playerid,"h_lvl"); // Удаляем уже не нужные нам PVar's } else DeletePVar(playerid,"h_price"),DeletePVar(playerid,"h_desc"),DeletePVar(playerid,"h_int"),DeletePVar(playerid,"h_lvl"); // Иначе если игрок нажал "Отмена" удаляем PVar's. }