PDA

Просмотр полной версии : [Мануал] Динамическая информация о сервере



#Jason
18.10.2015, 22:52
Описание в самом конце.

В начало мода:

enum srInfo
{
srName[32],
srSite[32],
srAdmin[24]
}

new ServerInfo[srInfo];

в конец мода или в любое свободное место


forward LoadServerInfo();
public LoadServerInfo()
{
cache_get_field_content(0, "Name",CarsInfo[srName],connects,32);
cache_get_field_content(0, "Site",CarsInfo[srSite],connects,32);
cache_get_field_content(0, "Admin",CarsInfo[srAdmin],connects,24);
printf("[ Загрузка ... ] Данные о сервере успешно загружены.");
return true;
}

в OnGameModeInit

mysql_function_query(connects,"SELECT * FROM `serverinfo`",true,"LoadServerInfo","");
к Командам

CMD:sredit(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] < 6) return SendClientMessage(playerid, COLOR_WHITE, "[!] Вы не администратор."); // меняете на свою проверку
return ShowPlayerDialog(playerid,8001,DIALOG_STYLE_LIST,"{FFCC00}Редактирование сервера","Изменить название сервера\nИзменить название сайта\nИзменить администратора", "Далее", "Закрыть");
}
к Диалогам


case 8001:
{
if(!response) return true;
switch(listitem)
{
case 0:
{
ShowPlayerDialog(playerid, 8002, DIALOG_STYLE_INPUT, "{FFCC00}Изменить название сервера", "Введите новое название сервера", "Сменить", "Закрыть");
}
case 1:
{
ShowPlayerDialog(playerid, 8003, DIALOG_STYLE_INPUT, "{FFCC00}Изменить название сайта", "Введите новое сайта сервера", "Сменить", "Закрыть");
}
case 2:
{
ShowPlayerDialog(playerid, 8004, DIALOG_STYLE_INPUT, "{FFCC00}Изменить администратора", "Введите имя нового Гл.администратора", "Сменить", "Закрыть");
}
}
}
case 8002:
{
if(!response) return true;
SetString(ServerInfo[srName],inputtext);
format(string, 81, "UPDATE `serverinfo` SET `Name` = '%s'", inputtext);
mysql_function_query(connects, string, false, "", "");
}

case 8003:
{
if(!response) return true;
SetString(ServerInfo[srSite],inputtext);
format(string, 81, "UPDATE `serverinfo` SET `Site` = '%s'", inputtext);
mysql_function_query(connects, string, false, "", "");
}
case 8004:
{
if(!response) return true;
SetString(ServerInfo[srAdmin],inputtext);
format(string, MAX_PLAYER_NAME+32, "UPDATE `serverinfo` SET `Admin` = '%s'", inputtext);
mysql_function_query(connects, string, false, "", "");
}
SQL запрос

CREATE TABLE IF NOT EXISTS `serverinfo` (
`Name` varchar(32) NOT NULL,
`Site` varchar(32) NOT NULL,
`Admin` varchar(24) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;

INSERT INTO `serverinfo` (`Name`, `Site`, `Admin`) VALUES
('Server Role Play', 'www.sitename.ru', 'Jason_Carter');

В конец мода или в любое другое место.

stock SetName()
{
new chName, string[64];
switch(chName)
{
case 0:
{
format(string,44,"hostname %s | Client: 0.3.7",ServerInfo[srName]);
SendRconCommand(string);
chName++;
}
case 1:
{
format(string,46,"hostname Форум/сайт сервера: %s",ServerInfo[srSite]); //уже на свое усмотрение пишите.
SendRconCommand(string);
chName=0;
}
}
}

К таймерам добавьте следующее чтобы обновлять название.


SetName();
Пример использования:


SendClientMessageToAll(COLOR_LIGHTBLUE,"_________________________________________________________________");
SendClientMessageToAll(COLOR_WHITE,"Используйте {FF9900}/report{FFFFFF} для связи с администрацией");
SendClientMessageToAll(COLOR_WHITE,"Список свободных/занятых лидерок: {FF9900}/leaders");
SendClientMessageToAll(COLOR_WHITE,"Ваш верный путеводитель по серверу: {FF9900}/mm");
format(string,72,"Сайт нашего сервера: {FF0000}%s",ServerInfo[srSite]);
SendClientMessageToAll(COLOR_WHITE,string);
format(string,64,"Главный администратор: {FF0000}%s",ServerInfo[srAdmin]);
SendClientMessageToAll(COLOR_WHITE,string);
SendClientMessageToAll(COLOR_LIGHTBLUE,"_________________________________________________________________");

Если у кого то будут ошибки на SetString вставьте то что ниже в начало мода, у кого нету ошибок на эту функцию, значит данная функция уже есть в вашем моде.

#define SetString(%0,%1) (strmid(%0,%1,0,strlen(%1),255))

Вам только осталось изменить название вашего Сервера на переменную ServerInfo[srName], так как теперь она будет содержать название сервера и в любой момент вы сможете изменить это. Надеюсь вы поняли в чем суть системы, вам больше не придется изменять название сервера через pwn.

Автор: #Jason

$continue$
18.10.2015, 23:07
В запросах Вы используете многопоточные функции, а в загрузке однопоточные, где логика?



publics: LoadServerInfo()
{
new rows, field;
cache_get_data(rows, field);
cache_get_row(0,0,ServerInfo[srName], connects, 50);
cache_get_row(0,1,ServerInfo[srSite], connects, 50);
cache_get_row(0,2,ServerInfo[srAdmin], connects, 24);
printf("[ Загрузка ... ] Данные о сервере успешно загружены.");
return true;
}

Не подскажете, что такое publics?



publics: LoadServerInfo()

А, что такое SetString(...);


SetString(ServerInfo[srName],inputtext);

Откуда взялся массив string? И запрос, точно не в 200 символов.


format(string, 200, "UPDATE `serverinfo` SET `Name` = '%s'", inputtext);

Опять откуда массив string? И опять строка не в 155 символов


format(string,155,"Сайт нашего сервера: {FF0000}%s",ServerInfo[srSite]);
format(string,155,"Главный администратор: {FF0000}%s",ServerInfo[srAdmin]);

Советую скачать учебник Pro - Pawn.Ru (http://pro-pawn.ru/showthread.php?4082-%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA-Pro-Pawn-ru&highlight=%D1%83%D1%87%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA)
Советую почитать данный раздел:

http://i.imgur.com/jolvMtQ.png

Desulaid
18.10.2015, 23:11
https://cs7057.vk.me/c540102/v540102729/2aec2/kTIOTKNE5IE.jpg

#Jason
19.10.2015, 06:40
В запросах Вы используете многопоточные функции, а в загрузке однопоточные, где логика?

Не подскажете, что такое publics?

А, что такое SetString(...);

Откуда взялся массив string? И запрос, точно не в 200 символов.

Опять откуда массив string? И опять строка не в 155 символов

Советую скачать учебник Pro - Pawn.Ru (http://pro-pawn.ru/showthread.php?4082-%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA-Pro-Pawn-ru&highlight=%D1%83%D1%87%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA)
Советую почитать данный раздел:

http://i.imgur.com/jolvMtQ.png


Писалось на скорую руку в 12 часов ночи, если вам не нравится берите код переделывайте. Думаю это не составит труда.

wAx
19.10.2015, 07:15
Тему создал кто? Ты! Пару дней тебе на внесение изменений в код или тема будет закрыта, а после удалена. P.s. писал на скорую руку не отговорка...

#Jason
20.10.2015, 14:50
Тему создал кто? Ты! Пару дней тебе на внесение изменений в код или тема будет закрыта, а после удалена. P.s. писал на скорую руку не отговорка...

Поправил все.

$continue$
20.10.2015, 16:23
Поправил все.

Изменении почти ноль.
sizeof (http://wiki.sa-mp.com/wiki/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8_%D0%B4%D1%80%D1%83%D0%B3%D0%B8%D1%85_%D0%B7%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BE%D1%87%D0%BD%D1%8B%D1%85_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2_Pawn#sizeof), для кого придуман?
Многопоточной загрузки я таки не увидел.

Unreal
20.10.2015, 16:32
Изменении почти ноль.
sizeof (http://wiki.sa-mp.com/wiki/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8_%D0%B4%D1%80%D1%83%D0%B3%D0%B8%D1%85_%D0%B7%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BE%D1%87%D0%BD%D1%8B%D1%85_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2_Pawn#sizeof), для кого придуман?
Многопоточной загрузки я таки не увидел.
Вы о : (?)

cache_get_field_content
cache_get_field_content_int
cache_get_field_content_float

$continue$
20.10.2015, 17:04
Вы о : (?)

cache_get_field_content
cache_get_field_content_int
cache_get_field_content_float

Да.

#Jason
20.10.2015, 17:12
Да.

Сделал. sizeof не использую так как у меня в моде глобальный new string, а тут уже из за привычки нету sizeof.

$continue$
20.10.2015, 17:51
Описание в самом конце.

forward LoadServerInfo();
public LoadServerInfo()
{
cache_get_field_content(0, "Name",CarsInfo[srName],connects,32);
cache_get_field_content(0, "Site",CarsInfo[srSite],connects,32);
cache_get_field_content(0, "Admin",CarsInfo[srAdmin],connects,24);
printf("[ Загрузка ... ] Данные о сервере успешно загружены.");
return true;
}


В чем кайф вернуть единицу? Почему нет не каких уведомлении? (http://wiki.sa-mp.com/wiki/MySQL/R33#cache_get_data)
В своем коде - делайте, что хотите, но когда Вы выкладываете на форум, нужно соблюдать некий "стандарты форума" (Что, касательно sizeof)

Unreal
02.11.2015, 15:35
В чем кайф вернуть единицу?

Вы о: (?)

cache_get_field_content(0,

если да, то а что лучше использовать ?