Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Система объявлений

Статус
В этой теме нельзя размещать новые ответы.

Dymov1203

Умник
Доброго времени суток. Сегодня я хочу поделится идеей иной системы объявлений.
Это не команда,а более реалистичная система на 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
                }  }
        }
}
Вот и всё!
Немного криво,но постепенно исправлю.
Вы можете заменить текст, сделать и поставить дополнительные проверки (например,если нет клея,то не наклеить),сделать их платными,и много другое.
Выглядеть это будет вот так:



Разработка совместная: ​
Dymov1203 - разработка кода.
SpiRiT - идея.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу