shape1
shape2
shape3
shape4
shape7
shape8

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


Salev

Новичок
Пользователь
13.08.2017
1
12
0
25
Всем привет,вот урок по созданию фракции для модов с 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 скинов во фракции[spoiler='static const stock ChangeSkin']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<20;i++){new skinid = ChangeSkin[fractionid][i];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 - прописываем туда название фракций
 

SCMA - заменить на свою функцию админ чата

PlayerInfo - изменить на свой ENum с информацией об аккаунте

@Vlad_Trifonov, автор материала я(Андрей Рипс(#Salev/#Rips))
 
Последнее редактирование модератором:

Vlad_Trifonov

Гуру
Пользователь
13.03.2015
1 465
5
331
0
Код брать под тег "Код".
Устное предупреждение.
Укажите автора данного материала.
 

Remmi_Channel

Ничего особенного, просто создаю проект и помогаю
Пользователь
27.10.2015
362
1
37
0
22
Думаю будет  полезно для новичков.