Immortal116
Умник
Здравствуйте, ребята. С Вами Ильназ(Immortal116), я пишу первый мануал, речь будет идти о системе уровня розыска с сохранением.
Для начала в enum pInfo вставляем:
Дальше нужно обеспечить показ звездочек. Для этого в public OnPlayerConnect вставляем:
А также в этот же паблик вставляем это:
Теперь нужно тоже самое вставить в public OnPlayerSpawn, вот:
Можно сделать, чтобы после спавна появлялось сообщение о том, сколько у него звезд, делается так:
Ну, а теперь нужно сделать так, что если игрок убьет кого-нибудь, то ему дастся 1 уровень розыска.
Делается это так, в public OnPlayerDeath вставляем:
Теперь надо сделать так, чтобы когда игрока с уровнем розыска убивал законник, то его сажало в тюрьму, делается это так(Вставляем в public OnPlayerStateChange):
Теперь нужно добавить public CrimInRange(Float:radi, playerid,copid);, ко всем форвардам(forward):
И сам паблик, ко всем пабликам добавляйте:
Вроде все. Теперь само сохранение, в stock OnPlayerRegister:
Теперь в Ваш паблик или сток сохранения аккаунта, например stock SaveAccounts и т.п, вот код:
Теперь в stock OnPlayerLogin:
Самое главное и основное я рассказал вроде как. Пишите вопросы, если они у Вас есть. Буду рад Вам помочь.
И еще, если у Вас другая функция выдачи денег, то GiveMoney меняйте на свой, просто у меня античит стоит.
А также, Уважаемая Администрация, прошу поменять префикс на [Мануал].
Автор урока: Immortal116
Для начала в enum pInfo вставляем:
PHP:
pWanted,
PHP:
SetPlayerWantedLevel(playerid,PlayerInfo[playerid][pWanted]);
PHP:
PlayerInfo[playerid][pWanted] = 0;
PHP:
SetPlayerWantedLevel(playerid,PlayerInfo[playerid][pWanted]);
PHP:
if(PlayerInfo[playerid][pWanted] != 0)// Если у игрока больше 0 звезд
{
new string[64]; // объявляем string в 64 символа.
format(string, sizeof(string), "Ваш уровень розыска: %d.",PlayerInfo[playerid][pWanted]);// То ему(ей) выводится сообщение с информацией об уровне розыска.
SendClientMessage(playerid, COLOR_YELLOW, string);// Сам показ сообщение, то есть кому будет показываться, каким цветом.
SetPlayerWantedLevel(playerid, PlayerInfo[playerid][pWanted]);// Показ звезд наверху в текст драве как в сингле.
}
Делается это так, в public OnPlayerDeath вставляем:
PHP:
if(PlayerInfo[killerid][pJailed] == 0) // Если игрок не в тюрьму, то идет следующее действие
{
if(IsACop(killerid)) { SendDeathMessage(killerid, playerid, reason); return 1; } // Эта строка отвечает за проверку на законника, у меня фракции закона в public IsACop, если у Вас другой, то меняйте на свой, если же у Вас его нет, то тут два выхода, или пишете public что-то типо IsACop или указывайте проверку на фракции прямо тут. Если убийца законник, то выдается сообщение в киллстате и ему не дается уровень розыска.
if(PlayerInfo[killerid][pWanted] == 6) {SendDeathMessage(killerid, playerid, reason); return 1; }// Если у игрока уже 6 звезд, то выдается сообщение в киллстате и ему не дается уровень розыска.
Else // Но, если убийца – не законник или у него меньше 6 то выполняется действия(е), которое описано ниже.
{
PlayerInfo[killerid][pWanted] += 1;// Дается 1 уровень розыска.
SendClientMessage(killerid,COLOR_YELLOW,"Вы получили 1 уровень розыска. Причина: Убийство.");// Выводится сообщение убийце желтым цветом, что он получил 1 уровень розыска.
SetPlayerWantedLevel(killerid,PlayerInfo[killerid][pWanted]);// Функция для показа звезд сверху, как его называют некоторые текст драв звезд.
SendDeathMessage(killerid, playerid, reason);// Выводится сообщение в киллстате.
}
}
PHP:
if(PlayerInfo[playerid][pWanted] >= 1)//Если у игрока есть звезды
{
new price = PlayerInfo[playerid][pWanted] * 1000;//Объявим price, которая будет равна “уровень розыска умноженная на $1000”.
new count;// Объявляем count.
for(new i = 0; i < GetMaxPlayers(); i++)
{
if(IsPlayerConnected(i))
{
if(IsACop(i))
{
if(CrimInRange(20.0, playerid,i))// Думаю, то, что написано выше понятно в принцепе. А это проверка на радиус так сказать, если законник убил игрока с розыском в радиусе 20, то его посадит.
{
count = 1;// присваиваем переменную равную 1.
GiveMoney(i, price);// выдаем деньги законнику, который посадил игрока(помните new price, так вот, это и есть кол-во денег)
format(string, sizeof(string),"~w~Running Suspect ~r~Killed ~n~Bonus ~g~$%d", price);// выводим сообщение справа внизу, мол преступник посажен в тюрьму, и ты получил бонул в размере равную price.
GameTextForPlayer(i, string, 5000, 1);// Кому выводим сообщение и на сколько секунд. В нашем случаи на 5 секундочек.
PlayerPlaySound(i, 1058, 0.0, 0.0, 0.0);// Звук, который будет воспроизведен после того, как игрока посадят.
}
}
}
}
if(count == 1)// Если count равен 1(помните, мы присваивали игроку переменную), то выполняется действие, что я написал ниже.
{
GiveMoney(playerid, - price);// У игрока отнимаются деньги, то есть сумма, равная price.
PlayerInfo[playerid][pJailed] = 1;// Присваиваем игроку Jailed = 1.
PlayerInfo[playerid][pJailTime] = (WantedLevel[playerid])*(600);// Время, на сколько его посадит, то есть “кол-во звезд умноженная на 600 секунд”.
SetPlayerSkin(playerid, 268);// выдаем ему скин. ID: 268.
ResetPlayerWeapons(playerid);// Отнимаем все его оружие
SetPlayerInterior(playerid, 0);// Тут ставим id интерьера игроку после того, как его посадят.
PlayerInfo[playerid][pInt] = 6;// Интерьер
SetPlayerVirtualWorld(playerid, 1);//Виртуальный мир
SetPlayerPos(playerid, 0.0,0.0,0.0);// Тут координаты, где он окажется после того, как его посадят.
format(string, sizeof(string), "Вы были посаженны на %d секунд в тюрьму. Штраф: $%d.", PlayerInfo[playerid][pJailTime], price);// выдаем ему(ей) сообщение о том, что он(а) посажен(а) в тюрьму со штрафом.
SendClientMessage(playerid, COLOR_LIGHTRED, string);// Сама выдача сообщения, красным цветом.
PlayerInfo[playerid][pWanted] = 0;// Обнуляем звезды
SetPlayerWantedLevel(playerid, PlayerInfo[playerid][pWanted]);// Показываем кол-во звезд в текст драве.
}
}
}
PHP:
forward CrimInRange(Float:radi, playerid,copid);
PHP:
public CrimInRange(Float:radi, playerid,copid)
{
if(IsPlayerConnected(playerid)&&IsPlayerConnected(copid))
{
new Float:posx, Float:posy, Float:posz;
new Float:oldposx, Float:oldposy, Float:oldposz;
new Float:tempposx, Float:tempposy;
GetPlayerPos(playerid, oldposx, oldposy, oldposz);
GetPlayerPos(copid, posx, posy, posz);
tempposx = (oldposx -posx);
tempposy = (oldposy -posy);
if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)))
{
return 1;
}
}
return 0;
}
PHP:
ini_setInteger(iniFile, "Wanted", PlayerInfo[playerid][pWanted]);
PHP:
ini_setInteger(iniFile, "Wanted", PlayerInfo[playerid][pWanted]);
PHP:
ini_getInteger(iniFile, "Wanted", PlayerInfo[playerid][pWanted]);
И еще, если у Вас другая функция выдачи денег, то GiveMoney меняйте на свой, просто у меня античит стоит.
А также, Уважаемая Администрация, прошу поменять префикс на [Мануал].
Автор урока: Immortal116
Последнее редактирование:
