Всем привет,вот урок по созданию фракции для модов с 0 или new.pwn ,данный урок это только основы,а не все команды.
Для начало создадим переменные в pInfo, загрузку игрового аккаунта и в сохранение аккаунта.
Что Вам понадобиться:
Инклуды как:
1. Командный процессор - DC_CMD
2. Задачик параметров в команде - sscanf2
Когда, прописали инклуды в мод нам нужно сделать enum:
Когда, мы сделали enum нам нужно сделать static const stock FractionInfo, для чего? Чтобы записать параметры из enum FractionInfo
Все спросят почему тут 28 ячейк? Потому что у нас 1 ячейка будет являться основным спавном игрока.(При регистрации)
Теперь нужно сделать ограничение на ранг, то есть нужно сделать static const stock с название rangFractionID
Когда, мы сделали static const stock ChangeSkin, нам необходимо сделать static const stock где будут храниться название рангов.
Теперь переходим в OnPlayerSpawn
Вставляем, проверку на фракцию:
Делаем команду setleader, с помощью которой будет выдавать лидерские права игроку
Когда, Мы сделали команду переходим в public OnDialogResponse
Вставляем, данное действие:
Если, будут ошибки на mysql_function_query то заменяйте на свою функцию. Если выдаст ошибка на GetMember, то создаем его:
SCMA - заменить на свою функцию админ чата
PlayerInfo - изменить на свой ENum с информацией об аккаунте
@Vlad_Trifonov, автор материала я(Андрей Рипс(#Salev/#Rips))
Для начало создадим переменные в 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 // Вирт.Мир}
Код:
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}};
Название - название фракции, которую хотите сделать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;}
Вставляем, данное действие:
Код:
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))
Последнее редактирование модератором: