Здравствуйте!Сегодня я расскажу,как сделать систему ранений.С шансом 1 к 2 игрок упадет в обморок.При падении игрок будет заморожен,а время будет выбрана случайно.Время определится от 1 до 15 секунд.
И так,начнем!
1.Создаем паблик.
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)
{
new ObmorokTime = random(45)+15;
new Obmorok = random (3);
2.Теперь,есть шанс того,что сила урона сможет убить игрока,а у него уже будет запущенна анимация,а это приведет к отмене вызова OnPlayerDeath.Что-бы этого не было,нужно сделать так,что-бы если у игрока меньше 10ХП,то скрипт не вызывается.
new Float:HP;
GetPlayerHealth(playerid, HP);
if (HP >=10 && GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
{
3.Через swith проверям упал игрок в обморок или нет.Если упал - очищаем ему текущую анимацию, на время ObmorokTime применяем к нему анимацию и таймер для сброса этой анимации в указанное время.
switch (Obmorok)
{
case 2:
{
ClearAnimations(playerid);
ApplyAnimation(playerid, "CRACK", "crckdeth2", 4.1, 0, 1, 1, 1, ObmorokTime*1000, 1);
SetTimerEx ("ClearAnimation", ObmorokTime*1000, false, "d", playerid);
4.Добавим информацию раненому и раневшему.
new string[128], victim[MAX_PLAYER_NAME], attacker[MAX_PLAYER_NAME];
GetPlayerName(playerid, victim, sizeof (victim));
if (issuerid != INVALID_PLAYER_ID)
{
GetPlayerName(issuerid, attacker, sizeof (attacker));
format(string, sizeof(string), "%s ранил Вас!", attacker);
SendClientMessage(playerid, 0xFF110000, string);
format(string, sizeof(string), "Вы ранили %s!", victim);
SendClientMessage(issuerid, 0xFF110000, string);
}
else
{
SendClientMessage(playerid, 0xFF110000, "Вы ранены!");
}
}
}
}
return 1;
}
Прикрепил скрипт,для тех кому лень самому писать.
FPDamage.pwn
И так,начнем!
1.Создаем паблик.
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)
{
new ObmorokTime = random(45)+15;
new Obmorok = random (3);
2.Теперь,есть шанс того,что сила урона сможет убить игрока,а у него уже будет запущенна анимация,а это приведет к отмене вызова OnPlayerDeath.Что-бы этого не было,нужно сделать так,что-бы если у игрока меньше 10ХП,то скрипт не вызывается.
new Float:HP;
GetPlayerHealth(playerid, HP);
if (HP >=10 && GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
{
3.Через swith проверям упал игрок в обморок или нет.Если упал - очищаем ему текущую анимацию, на время ObmorokTime применяем к нему анимацию и таймер для сброса этой анимации в указанное время.
switch (Obmorok)
{
case 2:
{
ClearAnimations(playerid);
ApplyAnimation(playerid, "CRACK", "crckdeth2", 4.1, 0, 1, 1, 1, ObmorokTime*1000, 1);
SetTimerEx ("ClearAnimation", ObmorokTime*1000, false, "d", playerid);
4.Добавим информацию раненому и раневшему.
new string[128], victim[MAX_PLAYER_NAME], attacker[MAX_PLAYER_NAME];
GetPlayerName(playerid, victim, sizeof (victim));
if (issuerid != INVALID_PLAYER_ID)
{
GetPlayerName(issuerid, attacker, sizeof (attacker));
format(string, sizeof(string), "%s ранил Вас!", attacker);
SendClientMessage(playerid, 0xFF110000, string);
format(string, sizeof(string), "Вы ранили %s!", victim);
SendClientMessage(issuerid, 0xFF110000, string);
}
else
{
SendClientMessage(playerid, 0xFF110000, "Вы ранены!");
}
}
}
}
return 1;
}
Прикрепил скрипт,для тех кому лень самому писать.
FPDamage.pwn
Вложения
Последнее редактирование модератором: