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

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

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

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

Система группировок (MySQL R7)

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

Softwаrе

Ученик
Система группировок[ALL]

Решил выложить свою систему группировок (банд).
Система написана на MySQL R7, динамическое создание группировок.
Функционал:

- создание банды из игры.
- смена спавна банды
- смена имени банды
- смена скина.

Ко всем переменным добавляем:

PHP:
enum // Dialog's
{
  	d_creategangname,
   	d_gangname,
	d_ganginfo,
 	d_gangskin,
 	d_gangstats
};
#define MAX_CLAN 200
enum cInfo
{
	id,
	Name[MAX_PLAYER_NAME],
	Level,
	Driftscore,
	Money,
	Maxplayer,
	Skin,
	Float:	SpawnX,
	Float:	SpawnY,
	Float:	SpawnZ,
	Float:	SpawnA,
};
new CInfo[MAX_CLAN][cInfo];
new TOTALCLAN;

Ко всем дефайнам:

PHP:
#define PlayerName(%0)	PlayerInfo[%0][Name]
#define TABLE_CLAN 		"clan"
#define f(%1, 		 	format(%1,sizeof(%1),
#define publics:%0(%1) 	forward %0(%1); public %0(%1)
В public OnPlayerSpawn:

PHP:
    if(GetPVarInt(playerid, "ClanMember") == 0) SetPlayerSkin(playerid, GetPVarInt(playerid, "Skin"));
    else SetPlayerSkin(playerid, CInfo[GetPVarInt(playerid, "ClanMember")][Skin]);
    if(GetPVarInt(playerid, "ClanMember") != 0)
    {
  		SetPlayerPos(playerid,CInfo[GetPVarInt(playerid, "ClanMember")][SpawnX],CInfo[GetPVarInt(playerid, "ClanMember")][SpawnY],CInfo[GetPVarInt(playerid, "ClanMember")][SpawnZ]);
		SetPlayerFacingAngle(playerid, CInfo[GetPVarInt(playerid, "ClanMember")][SpawnA]);
		SetPlayerInterior(playerid,0);
		SetPlayerVirtualWorld(playerid, 0);
		return 1;
    }
Ко всем диалогам в OnDialogResponse:

PHP:
 		case d_gangstats:
        {
            switch(listitem)
            {
                case 0:
				{
					if(GetPVarInt(playerid, "ClanLeader") != 0) return SendMes(playerid, color_red, "Ты и так управляющий %s",CInfo[GetPVarInt(playerid, "ClanLeader")][Name]);
	 				if(GetPVarInt(playerid, "ClanMember") != 0) return SendMes(playerid, color_red, "Ты и так уже в %s",CInfo[GetPVarInt(playerid, "ClanMember")][Name]);
	 				if(GetPVarInt(playerid, "Money") < 200000) return SendClientMessage(playerid, color_grey, "У тебя нету денег для создания банды, нужно $200.000");
	 				if(GetPVarInt(playerid, "Level") < 50) return SendClientMessage(playerid, color_grey, "У тебя не достаточно опыта для реководства бандой, нужен 50лвл.");
	 				ShowPlayerDialog(playerid,d_creategangname,DIALOG_STYLE_INPUT,"{FF0000}Создание банды",
					""W"Тебе доступна функция создания своей группировки.\n\
					Для создания группировки необходимо иметь на руках "L"$"R"200"L" 000 и 50 уровень\n\
					"W"Если вы не передумали в создании группировки, введите имя вашей будущей банды в поле ниже:\n\n\
					"L"Возможности:\n"R"-"W" Смена названия банды, транспорта, места появления, одежды\n\
					 "R"-"W" Война за территории между кланами и многое другое..","Создать","Отмена");
				}
                case 1:
                {
                    if(GetPVarInt(playerid, "ClanLeader") != 0)
					{
						new listitems[] = "Смена spawn'a\nСмена названия\nСмена одежды";
						f(stringj,"{FF0000}Редактор %s", CInfo[GetPVarInt(playerid, "ClanLeader")][Name]);
						ShowPlayerDialog(playerid, d_ganginfo, DIALOG_STYLE_LIST, stringj, listitems, "Принять", "Отмена");
					}
					else SendClientMessage(playerid, color_grey, "У тебя нет доступа к этому меню");
                }
                case 2: return 1;
            }
            return 1;
        }
		case d_ganginfo:
		{
		    if(response == 1)
		    {
			    if(listitem == 0)
			    {
			        new str[250];
			        new leader = GetPVarInt(playerid, "ClanLeader");
		   			if(GetPlayerInterior(playerid) != 0) return SendClientMessage(playerid, color_white,"Тут невозможно создать спавн!");
					GetPlayerPos(playerid,CInfo[leader][SpawnX],CInfo[leader][SpawnY],CInfo[leader][SpawnZ]);
					GetPlayerFacingAngle(playerid,CInfo[leader][SpawnA]);
					f(str, "UPDATE `"TABLE_CLAN"` SET `SpawnX` = %f, `SpawnY` = %f, `SpawnZ` = %f, `SpawnA` = %f WHERE `id` = '%i'",
					CInfo[leader][SpawnX], CInfo[leader][SpawnY], CInfo[leader][SpawnZ], CInfo[leader][SpawnA], leader), mysql_query(str, -1, -1, PAWNO_*****);
					SendMes(playerid, color_red, "Спавн банды %s был изменён",CInfo[leader][Name]);
				}
				if(listitem == 1)
				{
			    	ShowPlayerDialog(playerid,d_gangname,DIALOG_STYLE_INPUT,"{FF0000}Смена имени банды","{FFFFFF}Введите имя банды!","Сменить","Отмена");
				}
				if(listitem == 2)
				{
			    	ShowPlayerDialog(playerid,d_gangskin,DIALOG_STYLE_INPUT,"{FF0000}Смена скина банды","{FFFFFF}Введите id cкина для банды","Сменить","Отмена");
				}
   			}
   			return 1;
		}
		case d_gangname:
		{
		    if(response == 1)
		    {
		        strmid(CInfo[GetPVarInt(playerid, "ClanLeader")][Name], inputtext, 0, strlen(inputtext), MAX_PLAYER_NAME);
		        CInfo[GetPVarInt(playerid, "ClanLeader")][Name] = strval(inputtext);
		        format(CInfo[GetPVarInt(playerid, "ClanLeader")][Name],32,inputtext);
				SetClanStr(GetPVarInt(playerid, "ClanLeader"), "Name", inputtext);
				SendMes(playerid, color_red, "Новое имя банды : (ID:%d) %s",GetPVarInt(playerid, "ClanLeader"),inputtext);
			}
			return 1;
		}
		case d_gangskin:
		{
		    if(response == 1)
		    {
				new str[250];
			    CInfo[GetPVarInt(playerid, "ClanLeader")][Skin] = strval(inputtext);
				f(str, "UPDATE `"TABLE_CLAN"` SET `Skin` = %i WHERE `id` = '%i'",
				CInfo[GetPVarInt(playerid, "ClanLeader")][Skin], GetPVarInt(playerid, "ClanLeader")), mysql_query(str, -1, -1, PAWNO_*****);
			    SetPlayerSkin(playerid, CInfo[GetPVarInt(playerid, "ClanLeader")][Skin]);
			    SendMes(playerid, color_red, "Вы сменили скин банды на: %i",CInfo[GetPVarInt(playerid, "ClanLeader")][Skin]);
			}
			return 1;
		}
		case d_creategangname:
		{
		    if(response == 1)
		    {
		        TOTALCLAN++;
				static query_mysql[350];
				CInfo[TOTALCLAN][id] = TOTALCLAN;
				CInfo[TOTALCLAN][Level] = 0;
				CInfo[TOTALCLAN][Driftscore] = 0;
				CInfo[TOTALCLAN][Money] = 0;
				CInfo[TOTALCLAN][Maxplayer] = 10;
				CInfo[TOTALCLAN][SpawnX] = 1672.4862;
				CInfo[TOTALCLAN][SpawnY] = -2275.4907;
				CInfo[TOTALCLAN][SpawnZ] = -1.2467;
				CInfo[TOTALCLAN][SpawnA] = 259.1288;
				SetPVarInt(playerid, "ClanLeader", TOTALCLAN);
				SetPVarInt(playerid, "ClanMember", TOTALCLAN);
				strmid(CInfo[TOTALCLAN][Name], inputtext, 0, strlen(inputtext), MAX_PLAYER_NAME);
				f(query_mysql, "INSERT INTO `"TABLE_CLAN"` (`id`, `Name`, `Level`, `Driftscore`, `Money`, `Maxplayer`, `Skin`, `SpawnX`, `SpawnY`, `SpawnZ`, `SpawnA`) VALUES ('%i', '%s', '0', '0', '0', '10', '%i', '1672.4862', '-2275.4907', '-1.2467', '259.1288')",
				TOTALCLAN, inputtext, GetPlayerSkin(playerid)), mysql_function_query(PAWNO_*****, query_mysql, false, "","");
    			SendMes(playerid, color_red, "Ты успешно создал свою группировку! Её номер: "A"%i",TOTALCLAN);
    			SendMes(playerid, color_red, "Название твоей группировки: "A"%s",inputtext);
    			SendMes(playerid, color_red, "Для управления ею используй "A"'Главное меню "L">> "A"Разное "L">> "A"Группировка'");
			}
			return 1;
		}
В конец мода, загрузка группировок из БД:

PHP:
publics: LoadClanInfo()
{
    new time = GetTickCount();
    new temp[32],rows,fields;
    cache_get_data(rows,fields,PAWNO_*****);
    if(rows)
    {
        for(new idx = 1; idx <= rows; idx++)
        {
            cache_get_field_content(0,"id",temp,PAWNO_*****), CInfo[idx][id] = strval(temp);
            cache_get_field_content(0,"Name",CInfo[idx][Name],PAWNO_*****);
         	cache_get_field_content(0,"Level",temp,PAWNO_*****), CInfo[idx][Level] = strval(temp);
            cache_get_field_content(0,"Driftscore",temp,PAWNO_*****), CInfo[idx][Driftscore] = strval(temp);
            cache_get_field_content(0,"Money",temp,PAWNO_*****), CInfo[idx][Money] = strval(temp);
            cache_get_field_content(0,"Maxplayer",temp,PAWNO_*****), CInfo[idx][Maxplayer] = strval(temp);
            cache_get_field_content(0,"Skin",temp,PAWNO_*****), CInfo[idx][Skin] = strval(temp);
            cache_get_field_content(0,"SpawnX",temp,PAWNO_*****), CInfo[idx][SpawnX] = floatstr(temp);
            cache_get_field_content(0,"SpawnY",temp,PAWNO_*****), CInfo[idx][SpawnY] = floatstr(temp);
            cache_get_field_content(0,"SpawnZ",temp,PAWNO_*****), CInfo[idx][SpawnZ] = floatstr(temp);
    		cache_get_field_content(0,"SpawnA",temp,PAWNO_*****), CInfo[idx][SpawnA] = floatstr(temp);
            TOTALCLAN++;
		}
    }
    printf(" [SMSG]: Успешная загрузка 'LoadClan' - загружено %d за %d м.с", TOTALCLAN,GetTickCount() - time);
}

stock SetClanInt(idx, stolb[], znach)
{
	new query[128];
	f(query, "UPDATE "TABLE_CLAN" SET  %s = '%i' WHERE id = '%i' LIMIT 1", stolb, znach, idx);
	return mysql_query(query, -1, -1, PAWNO_*****);
}
stock SetClanStr(idx, stolb[], znach[])
{
	new query[128];
	f(query, "UPDATE "TABLE_CLAN" SET  %s = '%s' WHERE id = '%i' LIMIT 1", stolb, znach, idx);
	return mysql_query(query, -1, -1, PAWNO_*****);
}
Таблица:

PHP:
CREATE TABLE `clan` (
  `id` int(20) NOT NULL auto_increment,
  `Name` varchar(32) character set utf8 NOT NULL default 'None',
  `Level` int(11) NOT NULL default '0',
  `Driftscore` int(11) NOT NULL default '0',
  `Money` int(11) NOT NULL default '0',
  `Maxplayer` int(11) NOT NULL default '10',
  `Skin` int(11) NOT NULL default '0',
  `SpawnX` varchar(32) character set utf8 NOT NULL default '0.0',
  `SpawnY` varchar(32) character set utf8 NOT NULL default '0.0',
  `SpawnZ` varchar(32) character set utf8 NOT NULL default '0.0',
  `SpawnA` varchar(32) character set utf8 NOT NULL default '0.0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=16 DEFAULT CHARSET=cp1251 COLLATE=cp1251_bin AUTO_INCREMENT=16 ;
Автор: JoinT.
Если что-то забыл пишите, будет дополнено,жду ваших комментариев.
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу