Перейти к содержанию
Авторизация  
#Rips

Создание фракций для new

Рекомендуемые сообщения

#Rips

Всем привет,вот урок по созданию фракции для модов с 0 или new.pwn ,данный урок это только основы,а не все команды.

Для начало создадим переменные в pInfo, загрузку игрового аккаунта и в сохранение аккаунта.

pLeader,


pMember,
pRank,
pModel

 

 

 

Что Вам понадобиться:

Инклуды как:
1. Командный процессор - DC_CMD
2. Задачик параметров в команде - sscanf2

Когда, прописали инклуды в мод нам нужно сделать enum:

enum fInfo
{
fName[36], // Название фракции
fColor, // Клист фракции
Float:fPosX, // Позиция
Float:fPosY, // Позиция
Float:fPosZ, // Позиция
Float:fPosA, // Угол поворота
fractionInt, // Интерьер
fractionVirt // Вирт.Мир
}
 

 

 

 

Когда, мы сделали enum нам нужно сделать static const stock FractionInfo, для чего? Чтобы записать параметры из enum FractionInfo

static const stock FractionInfo[28][fInfo] =
{
{"Гражданский", 0x00000000, 0.0,0.0,0.0,0.0, 0, 0}, 
{"Название", 0x00000000, 0.0,0.0,0.0,0.0, 0, 0},
{"Название", 0x00000000, 0.0,0.0,0.0,0.0, 0, 0},
{"Название", 0x00000000, 0.0,0.0,0.0,0.0, 0, 0},
{"Название", 0x00000000, 0.0,0.0,0.0,0.0, 0, 0},
{"Название", 0x00000000, 0.0,0.0,0.0,0.0, 0, 0},
{"Название", 0x00000000, 0.0,0.0,0.0,0.0, 0, 0},
{"Название", 0x00000000, 0.0,0.0,0.0,0.0, 0, 0},
{"Название", 0x00000000, 0.0,0.0,0.0,0.0, 0, 0},
{"Название", 0x00000000, 0.0,0.0,0.0,0.0, 0, 0},
{"Название", 0x00000000, 0.0,0.0,0.0,0.0, 0, 0},
{"Название", 0x00000000, 0.0,0.0,0.0,0.0, 0, 0},
{"Название", 0x00000000, 0.0,0.0,0.0,0.0, 0, 0},
{"Название", 0x00000000, 0.0,0.0,0.0,0.0, 0, 0},
{"Название", 0x00000000, 0.0,0.0,0.0,0.0, 0, 0},
{"Название", 0x00000000, 0.0,0.0,0.0,0.0, 0, 0},
{"Название", 0x00000000, 0.0,0.0,0.0,0.0, 0, 0},
{"Название", 0x00000000, 0.0,0.0,0.0,0.0, 0, 0},
{"Название", 0x00000000, 0.0,0.0,0.0,0.0, 0, 0},
{"Название", 0x00000000, 0.0,0.0,0.0,0.0, 0, 0},
{"Название", 0x00000000, 0.0,0.0,0.0,0.0, 0, 0},
{"Название", 0x00000000, 0.0,0.0,0.0,0.0, 0, 0},
{"Название", 0x00000000, 0.0,0.0,0.0,0.0, 0, 0},
{"Название", 0x00000000, 0.0,0.0,0.0,0.0, 0, 0},
{"Название", 0x00000000, 0.0,0.0,0.0,0.0, 0, 0},
{"Название", 0x00000000, 0.0,0.0,0.0,0.0, 0, 0},
{"Название", 0x00000000, 0.0,0.0,0.0,0.0, 0, 0},
{"Название", 0x00000000, 0.0,0.0,0.0,0.0, 0, 0}

Все спросят почему тут 28 ячейк? Потому что у нас 1 ячейка будет являться основным спавном игрока.(При регистрации)
};

 

Название - название фракции, которую хотите сделать

0x00000000 - Клист фракции

 

0.0(X), 0.0(Y), 0.0(Z), 0.0(Угол поворота)

0(Interior), 0(VirtualWorld)

 

 

 

Теперь нужно сделать ограничение на ранг, то есть нужно сделать static const stock с название rangFractionID

 

static const stock rangFractionID[27] = {10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,0};

Где 10 - максимальный ранг во фракции

 

 

 

Когда, это тоже сделали нам нужно создать static const stock ChangeSkin, где будут ID скинов во фракции

 

static const stock ChangeSkin[27][20] = // СКИНЫ ФРАКЦИЙ
{
{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,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}, //
{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,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}, //
{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,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}, //
{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,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}, //
{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,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}, //
{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,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}, //
{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,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}, //
{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,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}, //
{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,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}
};

 

static const stock ChangeSkin[27][20]

 

[20] - Количество ячейк для скинов

[27] - На сколько фракций делать ячейк

 

 

 

 

Когда, мы сделали static const stock ChangeSkin, нам необходимо сделать static const stock где будут храниться название рангов.

 

static const stock PlayerRank[27][18][36] =
{
{"","","","","","","","","","","","","","","","","",""},
{"","","","","","","","","","","","","","","","","",""},
{"","","","","","","","","","","","","","","","","",""},
{"","","","","","","","","","","","","","","","","",""},,
{"","","","","","","","","","","","","","","","","",""},
{"","","","","","","","","","","","","","","","","",""},
{"","","","","","","","","","","","","","","","","",""},
{"","","","","","","","","","","","","","","","","",""},
{"","","","","","","","","","","","","","","","","",""},
{"","","","","","","","","","","","","","","","","",""},
{"","","","","","","","","","","","","","","","","",""},
{"","","","","","","","","","","","","","","","","",""},
{"","","","","","","","","","","","","","","","","",""},
{"","","","","","","","","","","","","","","","","",""},
{"","","","","","","","","","","","","","","","","",""},
{"","","","","","","","","","","","","","","","","",""},
{"","","","","","","","","","","","","","","","","",""},
{"","","","","","","","","","","","","","","","","",""}, //
{"","","","","","","","","","","","","","","","","",""}, //
{"","","","","","","","","","","","","","","","","",""}, //
{"","","","","","","","","","","","","","","","","",""}, //
{"","","","","","","","","","","","","","","","","",""}, //
{"","","","","","","","","","","","","","","","","",""}, //
{"","","","","","","","","","","","","","","","","",""}, //
{"","","","","","","","","","","","","","","","","",""}, //
{"","","","","","","","","","","","","","","","","",""}, //
{"","","","","","","","","","","","","","","","","",""} //
};

[27] - Под количество фракций
[18] - Количество ячейк для названий рангов
[36] - Максимальная длина в ячейке

 

 

Теперь переходим в OnPlayerSpawn

Вставляем, проверку на фракцию:

new frac = PlayerInfo[playerid][pMember];
SetPlayerInterior(playerid, FractionInfo[frac][fractionInt]);
SetPlayerPos(playerid, FractionInfo[frac][fPosX],FractionInfo[frac][fPosY],FractionInfo[frac][fPosZ]);
SetPlayerFacingAngle(playerid, FractionInfo[frac][fPosA]);
SetPlayerVirtualWorld(playerid, FractionInfo[frac][fractionVirt]);

 

 

Делаем команду setleader, с помощью которой будет выдавать лидерские права игроку

CMD:setleader(playerid, params[])
{
    if(PlayerInfo[playerid][pAdmin] < 5) return 1;
    if(sscanf(params, "d", params[0])) return SCM(playerid, -1, "{FFA500}• [Подсказка]{FFFFFF}: /setleader [playerid]");
    //if(Login[params[0]] == false) return SCM(playerid, -1, "{FF0046}• [Ошибка]{FFFFFF}: Игрок не авторизирован!"); ПРОВЕРКУ НА ТО ЧТО ИГРОК НЕ АВТОРИЗИРОВАН
	if(PlayerInfo[params[0]][pAdmin] > 0 && PlayerInfo[params[0]][pAdmin] !=5) return SCM(playerid, -1, "{FF0046}• [Ошибка]{FFFFFF}: Администратор не может быть лидером!");
	new string[512+100];
	new str[64];
	for(new i;i!=sizeof(GetMember);i++) format(str,64,"%s\n",GetMember[i]), strcat(string, str);
	ShowPlayerDialog(playerid,10,DIALOG_STYLE_LIST,PlayerInfo[params[0]][pName],string,"Далее","Отмена");
	SetPVarInt(playerid,"actplayerid",params[0]);
	return 1;
}

Когда, Мы сделали команду переходим в public OnDialogResponse

Вставляем, данное действие:

case 10:
{
if(!response) return 1;
new fractionid = listitem;
SetPVarInt(playerid,"actfraction",fractionid);
new mes[256];
for(new i;i{
new skinid = ChangeSkin[fractionid];
if(!skinid) break;
if(!i) format(mes,sizeof(mes),"Скин %d [%d]",i+1,skinid);
else format(mes,sizeof(mes),"%s\nСкин %d [%d]",mes,i+1,skinid);
}
new actplayerid = GetPVarInt(playerid,"actplayerid");
ShowPlayerDialog(playerid,11,2,PlayerInfo[actplayerid][pName],mes,"Принять","Отмена");
return 1;
}

 

case 11:
{
if(!response) return DeletePVar(playerid, "actplayerid");
new actplayerid = GetPVarInt(playerid,"actplayerid");
new fractionid = GetPVarInt(playerid,"actfraction");
new skinid = ChangeSkin[fractionid][listitem];
new rank = rangFractionID[fractionid];
PlayerInfo[actplayerid][pMember] = fractionid+1;
PlayerInfo[actplayerid][pLeader] = fractionid+1;
PlayerInfo[actplayerid][pRank] = rank;
PlayerInfo[actplayerid][pModel] = skinid;
new string[160];
format(string, sizeof(string), "UPDATE `a_user` SET `pMember` = '%d', `pRank` = '%d', `pModel` = '%d', `pLeader` = '%d' WHERE `pID` = '%d'", fractionid+1,rank,skinid,fractionid+1,PlayerInfo[actplayerid][pID]);
mysql_function_query(mysql, string, false, "", "");
SetPlayerSkin(actplayerid,skinid);
new str[146];
format(str, sizeof(str), "[A] Администратор %s назначил игрока %s лидером фракции '%s'", PlayerInfo[playerid][pName], PlayerInfo[actplayerid][pName], GetMember[fractionid]);
SCMA(0xD3D3D3FF, str);
format(str, sizeof(str), "Администратор %s назначи Вас лидером организации '%s'", PlayerInfo[playerid][pName], GetMember[fractionid]);
SCM(actplayerid, 0x269BD8FF, str);
}

 

 

 

Если, будут ошибки на mysql_function_query то заменяйте на свою функцию. Если выдаст ошибка на GetMember, то создаем его:

 

static const stock GetMember[27][36] = {"null","null","null","null","null","null","null","null","null","null","null","null","null","null","null","null","null","null","null","null","null","null","null","null","null","null","null"};

[27] - Ячейк под фракции

[36] - Длина ячейки

 

Где написано null - прописываем туда название фракций

 

 

 

Если, будут ошибки прошу сообщить в данную тему.

  • Like 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
RickeyFlow

Я не вижу здесь мануала. Где готовое решение (Ссылка на файл)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.