Доступ к готовым решениям

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

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

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

Мануал Динамическая система фракции [MYSQL R40]

DarkNeon

Начинающий
Пользователь
Регистрация
4 Янв 2018
Сообщения
19
Лучшие ответы
0
Репутация
5
Командный процессор: DC_CMD

Что в себя включает данная система:
Смена названия фракции:
Смена рангов:


Первым делом,заходим в нашу базу данных,затем создаём таблицу,к примеру с названием `ORGS`
Вписываем поля:

ID - Integer
NAME - Varchar [64]
RANK1- Varchar [32]
RANK2- Varchar [32]
RANK3- Varchar [32]
RANK4- Varchar [32]
RANK5- Varchar [32]
Дальше можете вставить и бюджет,и всё что угодно.

Не обращайте внимание на количество рангов,лично я поставил для своего мода столько,вы можете сделать по-другому.
Далее,нажимаем нажимаем `вставить` и вставляем вручную ваши ID и имена,ранги фракций и тд.

Идём в мод,объявляем трехмерный массив
PHP:
new F_RANKS[количество фракций][количество рангов][размер];
Итого получилось: 
new F_RANKS[7][5][32]; // 7 фракций,5 рангов
Создаём перечисление
PHP:
enum Orgs {
	ID,
	NAME[64]
};
new Org[7][Orgs];
Делаем калбек загрузки наших фракций
В OnGameModeInit:
PHP:
mysql_tquery(ваша база данных,"SELECT * FROM `ORGS`", "LOAD_ORG");
PHP:
forward LOAD_ORG();
public LOAD_ORG()
{
   new time = GetTickCount(); // это делается для того,чтобы узнать время загрузки фракций
	new row_counts;
	cache_get_row_count(row_counts); // узнаем сколько в таблице строк
	for(new i = 0; i < row_counts; i++) 
	{
	    new tt; // это делается для определения ID фракции
	    cache_get_value_name_int(i, "ID", tt);
	    cache_get_value_name(i, "NAME", Org[tt][NAME]);
	    
	    cache_get_value_name(i, "RANK1", F_RANKS[tt][0]);
	    cache_get_value_name(i, "RANK2", F_RANKS[tt][1]);
	    cache_get_value_name(i, "RANK3", F_RANKS[tt][2]);
	    cache_get_value_name(i, "RANK4", F_RANKS[tt][3]);
	    cache_get_value_name(i, "RANK5", F_RANKS[tt][4]);
	}
 	return printf("MYSQL: Фракции загружены за %d мс.",GetTickCount() - time);
}
Делаете что-то типо л-панели
PHP:
CMD:frcontrol(playerid)
{
    ShowPlayerDialog(playerid, ид диалога,у меня D_LEADER+1, DIALOG_STYLE_LIST, "Лид-меню", "{FFFFFF}[•] Изменить название фракции\n[•] Изменить название рангов\n[•] Изменить бюджет фракции\n[•] Оффлайн состав\n[•] Расформировать состав", "Выбрать", "Отмена");
	return 1;
}
OnDialogResponse
PHP:
case D_LEADER+1:
		{
		    if(response)
			{
				switch(listitem)
				{
				    case 0:
				    {
				        ShowPlayerDialog(playerid,D_LEADER+2,DIALOG_STYLE_INPUT,"Лид-меню","{3366FF}•{FFFFFF} Введите новое название организации,длиною 64 символа","Ввод","Назад");
					}
					case 1:
					{
     					new string[1024];
					    new frac = АккаунтДата[playerid][Фракция]; // Это делается для того,чтобы не писать длинную штуковину типо Org[АккаунтДата[playerid][ФРАКЦИЯ]][NAME]; , в этом можно запутаться
						for(new i; i < 5; i++) // указываем количество рангов
						{
							format(string,sizeof(string),"%s[№ %d]: %s\n",string,i+1,F_RANKS[frac][i]);
						}
						ShowPlayerDialog(playerid,D_LEADER+3,DIALOG_STYLE_LIST,"Лид-меню",string,"Изменить","Назад");

		case D_LEADER+3:
		{
			if(response)
			{
				SetPVarInt(playerid,"SETNAMERANK",listitem); // можно также и использовать массив
				ShowPlayerDialog(playerid,D_LEADER+4,DIALOG_STYLE_INPUT,"Лид-меню","{3366FF}•{FFFFFF} Введите название ранга,длиною 32 символа.\n{3366FF}•{FFFFFF} Не советуем ставить ранги с нецензурной бранью,за это выдается выговор","Ввод","Назад");
			}
			else cmd::frcontrol(playerid); // Возвращаем команду лид-панели игроку,если он нажал на escape или 'назад'
		}

		case D_LEADER+4:
		{
			if(response)
			{
				if(strlen(inputtext) < 3 || strlen(inputtext) > 32) return ShowPlayerDialog(playerid,D_LEADER+4,DIALOG_STYLE_INPUT,"Лид-меню","{3366FF}•{FFFFFF} Введите название ранга,длиною 32 символа.\n{3366FF}•{FFFFFF} Не советуем ставить ранги с нецензурной бранью,за это выдается выговор","Ввод","Назад");
                                new query[256];
				new frac = АккаунтДата[playerid][Фракция];
				new sl = GetPVarInt(playerid,"SETNAMERANK");
				strmid(F_RANKS[frac][sl],inputtext,0,32,32);
				сфкм(playerid,-1,"Ранг №%d изменен на %s", sl+1,inputtext);
				format(query, sizeof(query), "UPDATE `ORGS` SET  `RANK%d` = '%s' WHERE `id` = '%d'",sl+1,inputtext, frac);
    			       mysql_tquery(база данных, query, "", "");
				DeletePVarInt(playerid,"SETNAMERANK");
			}
		}
	}
		case D_LEADER+2:
		{
			if(response)
			{
				if(strlen(inputtext) < 3 || strlen(inputtext) > 64) return ShowPlayerDialog(playerid,D_LEADER+2,DIALOG_STYLE_INPUT,"Лид-меню","{3366FF}•{FFFFFF} Введите новое название организации,длиною 32 символа","Ввод","Назад");
                                new query[256];
				new frac = Аккаунта[playerid][pFrac];
				strmid(Org[frac][NAME],inputtext,0,64,64);
				сфкм(playerid,-1,"- Название фракции переименовано в %s",inputtext);
				format(query, sizeof(query), "UPDATE `ORGS` SET  `NAME` = '%s' WHERE ID = '%d'",inputtext, frac);
    			         mysql_tquery(база данных, query, "", "");
			}
		}
Отображаем ранги:
PHP:
CMD:radio(playerid,params[])
{

    if(sscanf(params, "s[128]", params[0])) return SendClientMessage(playerid, -1, "/r [текст]");
	new frac = АккаунтДата[playerid][Фракция];
	new string[144];
	format(string,sizeof(string),"{1c9ce4}[R][%d][%s] %s: {FFFFFF}%s",АккаунтДата[playerid][Ранг],F_RANKS[frac][АккаунтДата[playerid][Ранг] - 1],АккаунтДата[playerid][Имя],params[0]);
      Отправка Сообщения фракции(playerid,-1,string);
	return 1;
}
Отображаем название фракции:
PHP:
new frac = Аккаунта[playerid][pFrac];
format(string,sizeof(string),"{FFFFFF}имя: {3366FF}%s{FFFFFF}\n", Org[frac][NAME]);


Скриншоты:
Обратите внимание,что на скрине другое количество рангов,здесь я просто сменил все по-другому
 
Последнее редактирование:
Сверху Снизу