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

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

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

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

Система /ad || DC_CMD

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

SuperMango

Ученик
Вообщем сделал я сисму ад для своего мода, решил и сюда выложить. Если что сорри за кривой код ))
Не описывал всё что к чему, опытные поймут. Новички пишите, расскажу. Мой вк:
Одна из первых работ, которая большая.

Как это всё работает:

Вы отправляете объявление /ad
Потом она находится в очереди.
Репортеры проверяют их /nmenu.
Затем отправляют в очередь, там каждые 15 сек отправляются сообщения.

Ко всем define
PHP:
#define D_AD                    1000
#define D_NMENU                 1200
Ко всем new

PHP:
new adlist[10][3][144] = {
	{"0","0","0"},
	{"0","0","0"},
	{"0","0","0"},
	{"0","0","0"},
	{"0","0","0"},
	{"0","0","0"},
	{"0","0","0"},
	{"0","0","0"},
	{"0","0","0"},
	{"0","0","0"}
};

new AllAd[20][3][144] = {
	{"-","Пусто",0},
	{"-","Пусто",0},
	{"-","Пусто",0},
	{"-","Пусто",0},
	{"-","Пусто",0},
	{"-","Пусто",0},
	{"-","Пусто",0},
	{"-","Пусто",0},
	{"-","Пусто",0},
	{"-","Пусто",0},
	{"-","Пусто",0},
	{"-","Пусто",0},
	{"-","Пусто",0},
	{"-","Пусто",0},
	{"-","Пусто",0},
	{"-","Пусто",0},
	{"-","Пусто",0},
	{"-","Пусто",0},
	{"-","Пусто",0},
	{"-","Пусто",0}
};
Команда /ad
PHP:
CMD:ad(playerid, params[])
{
    if(PlayerLogged[playerid] == false) return true; // проверка на вход игрока в игру
    return ShowPlayerDialog(playerid, D_AD, DIALOG_STYLE_LIST, "{DCCC1E}Подача объявления", "{346AF3}1.{FFFFFF} Подать объявление","Далее","Отмена");
}
Ко всем диалогам
Диалог D_AD
PHP:
		case D_AD:
		{
		    if(!response) return 1;
		    switch(listitem)
		    {
		        case 0:
		        {
					GoAllAd(playerid);
					return 1;
		        }
			}
			return 1;
		}
Ко всем stock
GoAllAd(playerid); - тут мы ищем свободное место для рекламы
PHP:
stock GoAllAd(playerid)
{
    for(new i = 0; i < 19; i++)
	{
	    if(!strcmp(AllAd[i][0], "-", true, 10 )) // если -, то свободно
	    {
	        format(string, 257, "{ffffff}Введите объявление, которые хотите подать.\nНомер объявление будет: %d", i+1);
       		SetPVarInt(playerid, "AD",i);
			return ShowPlayerDialog(playerid, D_AD+1, DIALOG_STYLE_INPUT, "{DCCC1E}Объявление", string, "Принять","Отмена");
	    }
	}
	return 1;
}
Ко всем диалогам
D_AD +1
PHP:
 if(!response) return 1;
		    if(!strlen(inputtext) || strval(inputtext) >= 90)
			{
			    SendClientMessage(playerid,COLOR_GREY,"Необходимо ввести объявление. И не больше 90 букв.");
			    GoAllAd(playerid);
			    return 1;
			}
			new passtring[144],passtring2[144];
			mysql_real_escape_string(inputtext, passtring, dbHandle, 144); // Если вы сможете по другому преобразовать inputtext то дерзайте. А то у меня в моде не работало никак.
			mysql_real_escape_string(GN(playerid), passtring2, dbHandle, 144); 
			AllAd[GetPVarInt(playerid,"AD")][0] = passtring2;
			AllAd[GetPVarInt(playerid,"AD")][1] = passtring;
            SendClientMessage(playerid,COLOR_GREY,"{DCCC1E}Вы успешно подали объявление. Ожидайте пока его проверят.");
			return 1;
Команда Nmenu
PHP:
CMD:nmenu(playerid, params[]) return cmd_nm(playerid, params);
CMD:nm(playerid, params[])
{
    if(PlayerLogged[playerid] == false) return true;
    if(PlayerInfo[playerid][pMember] != 4) return SendClientMessage(playerid, COLOR_GREY, "Вам не доступна данная команда"); // проверка на фракцию
    JobDuty(playerid);
	ShowPlayerDialog(playerid, D_NMENU, DIALOG_STYLE_LIST, "{DCCC1E}Новостное меню", "{346AF3}1.{FFFFFF} Редактировать объявление\n{346AF3}2.{FFFFFF} Меню эфира", "Выбрать", "Отмена");
	return 1;
}
Ко всем диалогам
D_NMENU
PHP:
if(!response) return true;
      		switch(listitem)
		    {
		        case 0: CheckAd(playerid); // нам надо только вот это
		        case 1: 
				{
					if(IsPlayerInAnyVehicle(playerid))
					{
					    ShowPlayerDialog(playerid, D_NMENU+10, DIALOG_STYLE_LIST, "{DCCC1E}Меню эфира", "{346AF3}1.{FFFFFF} Начать/Закончить эфир\n{346AF3}2. {FFFFFF}Начать/зкончить принимать звонки в эфир", "Выбрать", "Отмена");
						return 1;
					}
					else
					{
					    return SendClientMessage(playerid, COLOR_GREY, "Вы не находитесь в новостном автомобиле");
					}
				}
		        case 2: return 1;
			}
Ко всем stock

CheckAd(playerid) - проверяем все объявление + редактируется ли оно. Если нету объявы, то -.
PHP:
stock CheckAd(playerid)
{
	new sctring[3000],str[144];
    for(new i; i < 19; i++)
	{
 		if(strval(AllAd[i][2]) == 0 && strcmp(AllAd[i][0], "-", true, 10 )) { format(str, 144,"{ffffff}Прислал: {DCCC1E}%s{04EC42}[Свободно]\n",AllAd[i][0]); strcat(sctring,str); }
 		else if(strval(AllAd[i][2]) == 1 && strcmp(AllAd[i][0], "-", true, 10 )) { format(str, 144,"{ffffff}Прислал: {DCCC1E}%s{346AF3}[Редактируется]\n",AllAd[i][0]); strcat(sctring,str); } 
		if(!strcmp(AllAd[i][0], "-", true, 10 )) { format(str, 144,"-\n"); strcat(sctring,str); }
	}
    return ShowPlayerDialog(playerid,D_NMENU+1,DIALOG_STYLE_LIST,"{DCCC1E}Проверка объявления",sctring,"Проверка","Отмена");
}
Ко всем диалогам

D_NMENU+1
PHP:
if(!response) return true;
      		switch(listitem) // Узнаем, какое объявление выбрал игрок и присваиваем значение выбранного в PVar
		    {
		        case 0: SetPVarInt(playerid,"ListAD", 0);
		        case 1: SetPVarInt(playerid,"ListAD", 1);
		        case 2: SetPVarInt(playerid,"ListAD", 2);
		        case 3: SetPVarInt(playerid,"ListAD", 3);
		        case 4: SetPVarInt(playerid,"ListAD", 4);
		        case 5: SetPVarInt(playerid,"ListAD", 5);
		        case 6: SetPVarInt(playerid,"ListAD", 6);
		        case 7: SetPVarInt(playerid,"ListAD", 7);
		        case 8: SetPVarInt(playerid,"ListAD", 8);
		        case 9: SetPVarInt(playerid,"ListAD", 9);
		        case 10: SetPVarInt(playerid,"ListAD", 10);
		        case 11: SetPVarInt(playerid,"ListAD", 11);
		        case 12: SetPVarInt(playerid,"ListAD", 12);
		        case 13: SetPVarInt(playerid,"ListAD", 13);
		        case 14: SetPVarInt(playerid,"ListAD", 14);
		        case 15: SetPVarInt(playerid,"ListAD", 15);
		        case 16: SetPVarInt(playerid,"ListAD", 16);
		        case 17: SetPVarInt(playerid,"ListAD", 17);
		        case 18: SetPVarInt(playerid,"ListAD", 18);
		        case 19: SetPVarInt(playerid,"ListAD", 19);
			}
			if(!strcmp(AllAd[GetPVarInt(playerid,"ListAD")][0], "-", true, 10 ))
			{
			    CheckAd(playerid);
                return SendClientMessage(playerid, COLOR_GREY, "Объявление нету"); // Если нету объявления
			}
			if(strval(AllAd[GetPVarInt(playerid,"ListAD")][2]) == 1)
            {
                CheckAd(playerid);
                return SendClientMessage(playerid, COLOR_BLUE, "{346AF3}Данное объявление кем-то редактируется.");  // Если редактируется объявление
            }
			format(string, 128, "{ffffff}Объявление номер: {DCCC1E}%d\n{ffffff}Прислал: {DCCC1E}%s\n\n{346AF3}%s", GetPVarInt(playerid,"ListAD")+1, AllAd[GetPVarInt(playerid,"ListAD")][0], AllAd[GetPVarInt(playerid,"ListAD")][1]);
			return ShowPlayerDialog(playerid,D_NMENU+2,DIALOG_STYLE_MSGBOX,"{DCCC1E}Объявление",string,"Дальше","Назад");
D_NMENU+2
PHP:
if(!response) return CheckAd(playerid);
		    if(strval(AllAd[GetPVarInt(playerid,"ListAD")][2]) == 1)
            {
                CheckAd(playerid);
                return SendClientMessage(playerid, COLOR_BLUE, "{346AF3}Данное объявление кем-то редактируется."); // если объявление редактурется x2
            }
            AllAd[GetPVarInt(playerid,"ListAD")][2] = "1";// делаем так, чтобы оно редактировалось
            return ShowPlayerDialog(playerid,D_NMENU+3,DIALOG_STYLE_LIST, AllAd[GetPVarInt(playerid,"ListAD")][1],"{346AF3}1. {FFFFFF}Редактировать объявление\n{346AF3}2. {FFFFFF}Отправить объявление\n{346AF3}3. {FFFFFF}Отправить объявление администрации","Продолжить","Назад");
D_NMENU+3 - что мы хотим с ним сделать
PHP:
if(!response)
			{
				AllAd[GetPVarInt(playerid,"ListAD")][2] = "0";
				CheckAd(playerid); // выходим в все объявления
				return 1;
			}
      		switch(listitem)
		    {
				case 0:
				{
				    format(string, 128, "{346AF3}%s", AllAd[GetPVarInt(playerid,"ListAD")][1]);
					return ShowPlayerDialog(playerid,D_NMENU+4,DIALOG_STYLE_INPUT,"{DCCC1E}Объявление",string,"Изменить","Отмена");
				}
				case 1:
				{
				    format(string, 199, "{ffffff}Вы хотите отправить это объявление в очередь:\n{346AF3}%s", AllAd[GetPVarInt(playerid,"ListAD")][1]);
					return ShowPlayerDialog(playerid,D_NMENU+5,DIALOG_STYLE_MSGBOX,"{DCCC1E}Объявление",string,"Отправить","Отмена");
				}
			}
D_NMENU+4
PHP:
if(!response) return ShowPlayerDialog(playerid,D_NMENU+3,DIALOG_STYLE_LIST, AllAd[GetPVarInt(playerid,"ListAD")][1],"{346AF3}1. {FFFFFF}Редактировать объявление\n{346AF3}2. {FFFFFF}Отправить объявление\n{346AF3}3. {FFFFFF}Отправить объявление администрации","Продолжить","Назад");
 			new passtring[144];
			mysql_real_escape_string(inputtext, passtring, dbHandle, 144);
			AllAd[GetPVarInt(playerid,"ListAD")][1] = passtring;  // просто редактируем объявление
            SendClientMessage(playerid, COLOR_BLUE,"{DCCC1E}Данное объявление успешно отредактировано.");
            return ShowPlayerDialog(playerid,D_NMENU+3,DIALOG_STYLE_LIST, AllAd[GetPVarInt(playerid,"ListAD")][1],"{346AF3}1. {FFFFFF}Редактировать объявление\n{346AF3}2. {FFFFFF}Отправить объявление\n{346AF3}3. {FFFFFF}Отправить объявление администрации","Продолжить","Назад");
D_NMENU+5 - отправляем объявление в очередь
PHP:
if(!response) return ShowPlayerDialog(playerid,D_NMENU+3,DIALOG_STYLE_LIST, AllAd[GetPVarInt(playerid,"ListAD")][1],"{346AF3}1. {FFFFFF}Редактировать объявление\n{346AF3}2. {FFFFFF}Отправить объявление\n{346AF3}3. {FFFFFF}Отправить объявление администрации","Продолжить","Назад");
			for(new i = 0; i < 10; i++)
			{
			    if(strlen(adlist[i][0]) <= 1)
				{
					adlist[i][0] = AllAd[GetPVarInt(playerid,"ListAD")][1]; // добавляем в очередь
					adlist[i][1] = AllAd[GetPVarInt(playerid,"ListAD")][0]; // добавляем в очередь
				 	new passtring[144];
					mysql_real_escape_string(GN(playerid), passtring, dbHandle, 144);
					adlist[i][2] = passtring;
					AllAd[GetPVarInt(playerid,"ListAD")][0] = "-"; // очищаем место для объявлений
					AllAd[GetPVarInt(playerid,"ListAD")][1] = "Нету"; // очищаем место для объявлений
					AllAd[GetPVarInt(playerid,"ListAD")][2] = "0"; // очищаем место для объявлений
					format(string, 128, "{DCCC1E}Объявление отправлено. Его номер в очереди: %d", i+1);
					return SendClientMessage(playerid, COLOR_BLUE, string);
				}
			}
Система очередь
В OnGameModeInit
PHP:
SetTimer("SendADList",15*1000,0); // каждые 15 сек об
SendADList
PHP:
public SendADList()
{
	if(strlen(adlist[0][0]) < 2) return SetTimer("SendADList",15*1000,0);
	format(string, 256, "{55B94E}LV NEWS || %s. Отправил %s", adlist[0][0], adlist[0][1]);
	SendAllMessage(COLOR_BLUE, string);
	format(string, 256, "{55B94E}Отредактировал объявление %s", adlist[0][2]);
	SendAllMessage(COLOR_BLUE, string);
	adlist[0][0] = adlist[1][0], adlist[0][1] = adlist[1][1], adlist[0][2] = adlist[1][2]; // перемещаем объявления
	adlist[1][0] = adlist[2][0], adlist[1][1] = adlist[2][1], adlist[1][2] = adlist[2][2];
	adlist[2][0] = adlist[3][0], adlist[2][1] = adlist[3][1], adlist[2][2] = adlist[3][2];
	adlist[3][0] = adlist[4][0], adlist[3][1] = adlist[4][1], adlist[3][2] = adlist[4][2];
	adlist[4][0] = adlist[5][0], adlist[4][1] = adlist[5][1], adlist[4][2] = adlist[5][2];
	adlist[5][0] = adlist[6][0], adlist[5][1] = adlist[6][1], adlist[5][2] = adlist[6][2];
	adlist[6][0] = adlist[7][0], adlist[6][1] = adlist[7][1], adlist[6][2] = adlist[7][2];
	adlist[7][0] = adlist[8][0], adlist[7][1] = adlist[8][1], adlist[7][2] = adlist[8][2];
	adlist[8][0] = adlist[9][0], adlist[8][1] = adlist[9][1], adlist[8][2] = adlist[9][2];
	adlist[9][0] = "0";
	return SetTimer("SendADList",15*1000,0);
}
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу