PDA

Просмотр полной версии : [Вопрос] Система News



Dima_Tushin
16.01.2017, 22:01
Здравствуйте делал систему News и столкнулся с проблемой сохранения текста при редактирование объявления

Описание ошибки: Мы отправляем сообщение к фракции 2 сообщение например /ad 1 | /ad 2 потом мы редактируем эти 2 сообщения как отредактировали все хорошо работает как нужно как доходит дело до отправки например сообщение 1 (( /ad 1 )) мы отправили в чате появилось потом как пошел черед отправки сообщения под номером 2 (( /ad 2 )) вы ходит сообщение под номером 1 (( /ad 1 )) и получается должно отправиться (( /ad 2 )) так как 2 сообщение отправили а отправилось под номером 1 то есть по циклу у меня сохраняется ID текста и получается когда у меня 2 сообщение я отправляю 1 там текст (( 1 )) я его отправил а потом очередь до 2 у меня отправляется тоже (( 1 )) а должно (( 2 )) как исправить?


enum nInfo
{
nName[90],//Ник отправителя
nText[90],//Текст отправителя
}
new NewsInfo[15][nInfo];//Количество объявлений
new TotalNews[1];
new NewsPrislal[MAX_PLAYERS][128];
new LSNewsCena = 500;

if(strcmp(cmd, "/n", true) == 0 || strcmp(cmd, "/npanel", true) == 0)
{
new npanel[] = "[0] Объявления";
ShowPlayerDialog(playerid, 28, DIALOG_STYLE_LIST, "[ News Menu]", npanel, "Далее", "Отмена");
return 1;
}
if(strcmp(cmd, "/advertise", true) == 0 || strcmp(cmd, "/ad", true) == 0)
{
new length = strlen(cmdtext);
while((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[64];
while((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: (/ad)vertise [текст]");
NewsPrislal[playerid] = result;
new okroz[90];
format(okroz, sizeof(okroz), "{B8B8B8}Вы собираетесь отправить объявление:\n{57D900}%s\n\n{B8B8B8}Стоимость{00FF5E} %i вирт\n\n\n{56839C}Объявление будет подано после проверки!\n{56839C}Спасибо что вы пользуетесь услугами LS News", result, LSNewsCena);
ShowPlayerDialog(playerid, 32, DIALOG_STYLE_MSGBOX, "{FFFFFF}Проверка", okroz, "Отправить", "Отмена");
return 1;
}

/*************************************NEWS*****************************/
case 28:
{
if(response)
{
switch(listitem)
{
case 0: Newss(playerid);
}
}
else
{
return 1;
}
}
case 29:
{
if(response)
{
SetPVarInt(playerid, "News", listitem + 1);
ShowPlayerDialog(playerid, 30, DIALOG_STYLE_LIST, "Объявление", "[1] Отправить объявление\n[2] Редактировать объявление", "Далее", "Отмена");
}
else
{
return 1;
}
}
case 30:
{
if(response)
{
switch(listitem)
{
case 0:
{
new okroz[90];
format(okroz, sizeof(okroz), "Объявление: %s. Прислал: %s. Телефон: %i", NewsInfo[GetPVarInt(playerid, "News")][nText], NewsInfo[GetPVarInt(playerid, "News")][nName] /*NewsInfo[TotalNews]][nTelefon]*/);
SendClientMessageToAll(COLOR_GREEN, okroz);
format(okroz, sizeof(okroz), "Отредактировал сотрудник LS News: %s", PlayerInfo[playerid][pName]);
SendClientMessageToAll(COLOR_GREEN, okroz);
TotalNews[0]--;
DeletePVar(playerid, "News");
Newss(playerid);
}
case 1:
{
new okroz[90];
format(okroz, sizeof(okroz), "Объявление: %s. Прислал: %s", NewsInfo[GetPVarInt(playerid, "News")][nText], NewsInfo[GetPVarInt(playerid, "News")][nName]);
ShowPlayerDialog(playerid, 31, 1, "Объявления", okroz, "Принять", "Назад");
}
}
}
else
{
DeletePVar(playerid, "News");
Newss(playerid);
return 1;
}
}
case 31:
{
if(response)
{
if(!strlen(inputtext))
{
new okroz[90];
format(okroz, sizeof(okroz), "Объявление: %s. Прислал: %s", NewsInfo[GetPVarInt(playerid, "News")][nText], NewsInfo[GetPVarInt(playerid, "News")][nName]);
ShowPlayerDialog(playerid, 32, 1, "Объявления", okroz, "Принять", "Назад");
return 1;
}
strmid(NewsInfo[GetPVarInt(playerid, "News")][nText], inputtext, 0, 128, 128);
SendClientMessage(playerid, COLOR_BLUE, "Объявление отредактировано и сохранено!");
ShowPlayerDialog(playerid, 30, DIALOG_STYLE_LIST, "Объявление", "[1] Отправить объявление\n[2] Редактировать объявление", "Далее", "Отмена");
}
else
{
return 1;
}
}
case 32:
{
if(response)
{
new okroz[15];
if(PlayerInfo[playerid][pMoney] < LSNewsCena) return SendClientMessage(playerid, COLOR_WHITE, "У вас нет столько денег");
PlayerInfo[playerid][pMoney] -= LSNewsCena;//Отняли деньги
TotalNews[0]++;
//FrackBank[0][fLSNews] += LSNewsCena;
//NewsInfo[TotalNews[0]][nTelefon] = PlayerInfo[playerid][pNomerTelefon];
strmid(NewsInfo[TotalNews[0]][nText], NewsPrislal[playerid], 0, 128, 128);
strmid(NewsInfo[TotalNews[0]][nName], PlayerInfo[playerid][pName], 0, MAX_PLAYER_NAME, MAX_PLAYER_NAME);
format(okroz, sizeof(okroz), "~r~$-%i", LSNewsCena);
GameTextForPlayer(playerid, okroz, 3000, 1);
SendClientMessage(playerid, COLOR_WHITE, "Ваше объявление будит подано после проверки!");
}
else
{
return 1;
}
}

stock Newss(playerid)
{
new string[150], okrozz[150];
for(new i = 1; i <= TotalNews[0]; i++)
{
format(string, sizeof(string), "[%d] Текст: %s Прислала: %s\n", i, NewsInfo[i][nText], NewsInfo[i][nName]);
strcat(okrozz, string);
}
if(TotalNews[0] == 0) return ShowPlayerDialog(playerid, 9999, DIALOG_STYLE_MSGBOX, "Объявление", "|\tНовых объявлений нет\t|", "Готово", "");
ShowPlayerDialog(playerid, 29, DIALOG_STYLE_LIST, "Объявление", okrozz, "Далее", "Отмена");
return 1;
}

Dima_Tushin
18.01.2017, 18:02
не кто не знает?

qwezert
18.01.2017, 18:17
не кто не знает?
Честно - обьяснение так себе да и сама система вроде как нелогична. Зачем тогда нужна БД?
Я бы сделал например так - Создал в БД таблицу с новостями, при добавлении новости игроком - добавлял бы ее в таблицу и ставил флаг - не отмодерированная. Как только новость проверили и отправили - менял бы флаг на - отмодерированная. Очень удобно, быстро, все новости достаются по идишнику и редактируются по идишнику. Очищать таблицу можно при перезагрузке мода в 4 часа например.
Работать так с массивами для редактирования и сохранения новостей - зашквар. ИМХО

Dima_Tushin
18.01.2017, 19:47
Решил проблему. Модератор закройте тему или удалите.