nevagno
Умник
Здравствуйте! В этом уроке я попытаюсь научить создать систему, которая позволит изменять/создавать фракции из игры. Урок изначально для мода GF, но если правильно использовать, то получится и на остальных.
Найдём примерно такой код:
Команда создания фракции:
Изменение фракции:
Для удаления используй ClearFamily(family);
вот и все
Найдём примерно такой код:
PHP:
enum fInfo
{
FamilyTaken,
FamilyName[20],
FamilyMOTD[128],
FamilyColor[20],
FamilyLeader[MAX_PLAYER_NAME],
FamilyMembers,
Float:FamilySpawn[4], // запись спавна X,Y,Z,Angle
FamilyInterior, // запись интерьера
// здесь идёт запись в файл только место спавна и интерьер, вы можете добавить запись координат самой респы, оружия, патронов и т.д.
};
new FamilyInfo[10][fInfo];// 10меняем на максимум фракций
PHP:
if(strcmp(cmd, "/createfam", true) == 0)
{
if(IsPlayerConnected(playerid))
{
if(PlayerInfo[playerid][pAdmin] < 5) // проверка на 5 админку
{
SendClientMessage(playerid, COLOR_GRAD1, " У вас нет прав!");
return 1;
}
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD2, " /createfam: [айди новой фракции]");
return 1;
}
new id;
new str[MAX_PLAYER_NAME];
id = strval(tmp);
GetPlayerPos(playerid, FamilyInfo[id][FamilySpawn][0],FamilyInfo[id][FamilySpawn][1],FamilyInfo[id][FamilySpawn][2]);
GetPlayerFacingAngle(playerid, FamilyInfo[id][FamilySpawn][3]);
FamilyInfo[id][FamilyInterior] = GetPlayerInterior(playerid);
format(str, sizeof(str), "None");
FamilyInfo[id][FamilyTaken] = 0;
strmid(FamilyInfo[id][FamilyName], str, 0, strlen(str), 255);
strmid(FamilyInfo[id][FamilyMOTD], str, 0, strlen(str), 255);
strmid(FamilyInfo[id][FamilyLeader], str, 0, strlen(str), 255);
format(str, sizeof(str), "0xFF000069");
strmid(FamilyInfo[id][FamilyColor], str, 0, strlen(str), 255);
FamilyInfo[id][FamilyMembers] = 0;
SaveFamilies();
format(string, 126," Вы создали фракцию, ID:%d",id);
SendClientMessage(playerid, COLOR_GRAD1, string);
}
return 1;
}
PHP:
if(strcmp(cmd, "/editfam", true) == 0)
{
if(IsPlayerConnected(playerid))
{
if(PlayerInfo[playerid][pAdmin] < 5)
{
SendClientMessage(playerid, COLOR_GRAD1, " У вас нет прав!");
return 1;
}
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD2, " /editfam: [айди фракции] [что меняем?(1-спавн,2-интерьер)]");
return 1;
}
new id;
id = strval(tmp);
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD2, " /editfam: [айди фракции] [что меняем?(1-спавн,2-интерьер)]");
return 1;
}
new change;
change = strval(tmp);
if(change > 2 || change < 1) { SendClientMessage(playerid, COLOR_GREY, " [что меняем?(1-спавн,2-интерьер)]"); return 1; }
if(change == 1)
{
FamilyInfo[id][FamilyInterior] = GetPlayerInterior(playerid); // узнаёт ваш интерьер и записывает в переменную фракции.
}
if(change == 2)
{
GetPlayerPos(playerid, FamilyInfo[id][FamilySpawn][0],FamilyInfo[id][FamilySpawn][1],FamilyInfo[id][FamilySpawn][2]);// узнаёт ваши координаты и записывает в переменную фракции.
GetPlayerFacingAngle(playerid, FamilyInfo[id][FamilySpawn][3]);
}
SaveFamilies();
format(string, 126," Вы изменили фракцию, ID:%d",id);
SendClientMessage(playerid, COLOR_GRAD1, string);
}
return 1;
}
PHP:
if(strcmp(cmd, "/deletefam", true) == 0)
{
if(IsPlayerConnected(playerid))
{
if(PlayerInfo[playerid][pAdmin] < 5)
{
SendClientMessage(playerid, COLOR_GRAD1, " У вас нет прав!");
return 1;
}
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD2, " /deletefam: [айди фракции]");
return 1;
}
new id;
id = strval(tmp);
ClearFamily(id);
format(string, 126," Вы очистили фракцию, ID:%d",id);
SendClientMessage(playerid, COLOR_GRAD1, string);
}
return 1;
}
