Dymov1203
Умник
Доброго времени суток. Сегодня я хочу поделится идеей иной системы объявлений.
Это не команда,а более реалистичная система на 3D текстах. Подобной темы я не находил.
В данном решении Я покажу Вам как сделать новую систему объявлений на примере доски у отеля Джефферсона.
Это не команда,а более реалистичная система на 3D текстах. Подобной темы я не находил.
В данном решении Я покажу Вам как сделать новую систему объявлений на примере доски у отеля Джефферсона.
Для начала добавим переменную для текста и переменную которая будет проверять место для объявления,а так же define для диалогового окна:
PHP:
#define DIALOG_ADV 800 //800 - ID диалога,если используется,замените на свободный
#define COLOR_GREEN 0x32CD32AA//цвет для текста
new Text3D:AdversiteText[4];
new AdversiteCheck[4];
В OnGameModeInit добавим объект и наши 3D тексты:
PHP:
CreateObject(3077,2217.19995117,-1172.30004883,24.70000076,0.00000000,0.00000000,0.00000000); // Доска
AdversiteText[1] = Create3DTextLabel("Рекламное место свободно!",COLOR_GREEN ,2217.19995117,-1172.30004883,27.70000076,10.0,0);//Текст наверху доски
AdversiteText[2] = Create3DTextLabel("Рекламное место свободно!",COLOR_GREEN ,2217.19995117,-1172.30004883,26.70000076,10.0,0);//Текст по центру доски
AdversiteText[3] = Create3DTextLabel("Рекламное место свободно!",COLOR_GREEN ,2217.19995117,-1172.30004883,25.70000076,10.0,0);//Текст внизу доски
- В данном случае,на 1 доску помещается 3 текста,т.е. можно повесить 3 объявления.
____
Теперь сделаем взаимодействие. Я покажу действие по кнопке,Вы же можете сделать по команде:
В OnPlayerKeyStateChange пишем:
PHP:
if(newkeys == KEY_YES )//кнопка Y
{
if(IsPlayerInRangeOfPoint(playerid,1.5,2217.1870,-1171.6388,25.7266))//Если игрок нажал кнопку Y,и он рядом с доской
{
if(AdversiteCheck[1] == 1 && AdversiteCheck[2] == 1 && AdversiteCheck[3] == 1) return SendClientMessage (playerid,-1,"Все рекламные места заняты!");//проверка,не заняты ли места для объявлений
ShowPlayerDialog(playerid,DIALOG_ADV,DIALOG_STYLE_INPUT,"Написать объявление","Напишите свое объявление,и оно появится на доске.","Готово","Отмена");
}
}
В OnDialogResponse ставим всю основу:
Для начала,в начало паблика ставим переменные:
PHP:
new string[180], sendername[MAX_PLAYER_NAME];//Если есть,то не надо :D
PHP:
if(dialogid == DIALOG_ADV && response)
{
if(AdversiteCheck[1] != 1)//Если верхний текст не занят...
{//Крепим объявление
GetPlayerName(playerid, sendername, sizeof(sendername));//Узнаём имя
format(string, sizeof(string), "Объявление:\n{a19f98} %s. {ffffff}\nКонтакт:{5da130} %s", inputtext,sendername);
Update3DTextLabelText(AdversiteText[1], 0xFFFFFFFF,string);
AdversiteCheck[1] = 1;//Присваиваем проверке 1 значение 1
} else { //Если текст занят...
if(AdversiteCheck[2] != 1)//Проверяем не занят ли текст по середине
{//Если свободен,крепим объявление
GetPlayerName(playerid, sendername, sizeof(sendername));//Узнаём имя
format(string, sizeof(string), "Объявление:\n{a19f98} %s. {ffffff}\nКонтакт:{5da130} %s", inputtext,sendername);
Update3DTextLabelText(AdversiteText[2], 0xFFFFFFFF,string);
AdversiteCheck[2] = 1;//Присваиваем проверке 2 значение 1
} else {//Если предыдущие тексты заняты...
if(AdversiteCheck[3] != 1) //Проверяем последний текст
{//Если свободен,крепим объявление
GetPlayerName(playerid, sendername, sizeof(sendername));//Узнаём имя
format(string, sizeof(string), "Объявление:\n{a19f98} %s. {ffffff}\nКонтакт:{5da130} %s", inputtext,sendername);
Update3DTextLabelText(AdversiteText[3], 0xFFFFFFFF,string);
AdversiteCheck[3] = 1;//Присваиваем проверке 3 значение 1
} }
}
}
Немного криво,но постепенно исправлю.
Вы можете заменить текст, сделать и поставить дополнительные проверки (например,если нет клея,то не наклеить),сделать их платными,и много другое.
Выглядеть это будет вот так:
Разработка совместная:
SpiRiT - идея.
