SuperMango
Ученик
Вообщем сделал я сисму ад для своего мода, решил и сюда выложить. Если что сорри за кривой код ))
Не описывал всё что к чему, опытные поймут. Новички пишите, расскажу. Мой вк:
Одна из первых работ, которая большая.
Как это всё работает:
Вы отправляете объявление /ad
Потом она находится в очереди.
Репортеры проверяют их /nmenu.
Затем отправляют в очередь, там каждые 15 сек отправляются сообщения.
Ко всем define
Ко всем new
Команда /ad
Ко всем диалогам
Диалог D_AD
Ко всем stock
GoAllAd(playerid); - тут мы ищем свободное место для рекламы
Ко всем диалогам
D_AD +1
Команда Nmenu
Ко всем диалогам
D_NMENU
Ко всем stock
CheckAd(playerid) - проверяем все объявление + редактируется ли оно. Если нету объявы, то -.
Ко всем диалогам
D_NMENU+1
D_NMENU+2
D_NMENU+3 - что мы хотим с ним сделать
D_NMENU+4
D_NMENU+5 - отправляем объявление в очередь
Система очередь
В OnGameModeInit
SendADList
Не описывал всё что к чему, опытные поймут. Новички пишите, расскажу. Мой вк:
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Одна из первых работ, которая большая.
Как это всё работает:
Вы отправляете объявление /ad
Потом она находится в очереди.
Репортеры проверяют их /nmenu.
Затем отправляют в очередь, там каждые 15 сек отправляются сообщения.
Ко всем define
PHP:
#define D_AD 1000
#define D_NMENU 1200
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}
};
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;
}
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;
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;
}
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,"Дальше","Назад");
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}Отправить объявление администрации","Продолжить","Назад");
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,"Отправить","Отмена");
}
}
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}Отправить объявление администрации","Продолжить","Назад");
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 сек об
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);
}
Последнее редактирование:
