PDA

Просмотр полной версии : [FS] HeadShot и звуки при убийстве



Geebrox
27.09.2015, 17:40
Описание:

Определяется выстрел в голову и воспроизводится звук HeadShot, если игрок был убит не выстрелом в голову, то просто воспроизводятся разный звуки. Отдельно звуки из скрипта тоже можете скачать.

Скрипт:

Создаем массив для хранение имен игроков, в дальнейшим можете использовать этот массив если захотите.

new name[MAX_PLAYERS][MAX_PLAYER_NAME];
В public OnPlayerConnect(playerid)

GetPlayerName(playerid, name[playerid], MAX_PLAYER_NAME);
SetPVarInt(playerid, "headshot", INVALID_PLAYER_ID);
В public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)

if(issuerid != INVALID_PLAYER_ID)
{
if(bodypart == 9) SetPVarInt(playerid, "headshot", issuerid);
else SetPVarInt(playerid, "headshot", INVALID_PLAYER_ID);
}
В public OnPlayerDeath(playerid, killerid, reason)

new string[102];
SetPVarInt(playerid, "kills", 0);
SetPVarInt(killerid, "kills", GetPVarInt(killerid, "kills")+1);
if(GetPVarInt(playerid, "headshot") == killerid)
{
PlayAudioStreamForPlayer(playerid, "http://geebrox.esy.es/sounds/cs/1.wav");
PlayAudioStreamForPlayer(killerid, "http://geebrox.esy.es/sounds/cs/1.wav");
GameTextForPlayer(playerid, "~r~HeadShot", 3000, 5);
GameTextForPlayer(killerid, "~g~HeadShot", 3000, 5);
format(string, sizeof(string), "%s {8B7D6B}убил {CD950C}%s {8B7D6B}с выстрелом в голову!", name[killerid], name[playerid]);
SendClientMessageToAll(0xCD950CFF, string);
SetPVarInt(playerid, "headshot", INVALID_PLAYER_ID);
}
else if(GetPVarInt(killerid, "kills") > 1)
{
format(string, 37, "http://geebrox.esy.es/sounds/cs/%d.wav", random(8)+1);
PlayAudioStreamForPlayer(killerid, string);
format(string, 12, "~g~Kills: %d!", GetPVarInt(killerid, "kills"));
GameTextForPlayer(killerid, string, 3000, 5);
}

Дополнение:


ФС:

Ссылка: RGhost (http://rghost.net/7Z2JSRYzS)
Пароль: geebrox

Звуки из скрипта:


Ссылка: RGhost (http://rghost.net/7sKGYHDMC)
Пароль: geebrox


Авторские права: Запрещено копировать в другие источники!

Роуди.
27.09.2015, 20:37
Жесть какая-то, почему сразу в OnPlayerTakeDamage нельзя установить 0.0 ХП при попадание в голову?:dntknw:

Да и вообще

if(issuerid != INVALID_PLAYER_ID)
{
#define BODY_PART_HEAD 9

if(bodypart == BODY_PART_HEAD)
{
PlayAudioStreamForPlayer(playerid, "http://geebrox.esy.es/sounds/cs/1.wav");
PlayAudioStreamForPlayer(issuerid, "http://geebrox.esy.es/sounds/cs/1.wav");

GameTextForPlayer(playerid, "~r~HeadShot", 3000, 5);
GameTextForPlayer(issuerid, "~g~HeadShot", 3000, 5);
SetPlayerHealth(playerid, 0);

static const
frm_string[] = "\
%s {8B7D6B}убил {CD950C}%s {8B7D6B}с выстрелом в голову!";
new string_one[sizeof(frm_string)-2+MAX_PLAYER_NAME-2+MAX_PLAYER_NAME];

format(string_one, sizeof(string_one), frm_string, name[issuerid], name[playerid]);
SendClientMessageToAll(0xCD950CFF, string_one);
}
}
UPDATE: Кстати, по твоему коду можно HEADSHOT поставить даже с m4..

wAx
27.09.2015, 21:41
в этой строке
PHP код:
%s {8B7D6B}убил {CD950C}%s {8B7D6B}с выстрелом в голову!
нету ста символов..
потому что там больше 100 символов...

а вот я, к примеру, не увидел смысла в этом участке кода

SetPVarInt(playerid, "kills", 0);
SetPVarInt(killerid, "kills", GetPVarInt(killerid, "kills")+1)

и соответственно в его ответвлении

else if(GetPVarInt(killerid, "kills") > 1)
{
format(string, 37, "http://geebrox.esy.es/sounds/cs/%d.wav", random(8)+1);
PlayAudioStreamForPlayer(killerid, string);
format(string, 12, "~g~Kills: %d!", GetPVarInt(killerid, "kills"));
GameTextForPlayer(killerid, string, 3000, 5);
}

Роуди.
27.09.2015, 21:49
потому что там больше 100 символов...

а вот я, к примеру, не увидел смысла в этом участке кода

SetPVarInt(playerid, "kills", 0);
SetPVarInt(killerid, "kills", GetPVarInt(killerid, "kills")+1)

Точно не считал, но реально оказалось больше 100 :D Просто всегда юзаю способ от Кортеза и не парюсь с этим:)

Geebrox
28.09.2015, 15:25
Жесть какая-то, почему сразу в OnPlayerTakeDamage нельзя установить 0.0 ХП при попадание в голову?:dntknw:

Да и вообще

if(issuerid != INVALID_PLAYER_ID)
{
#define BODY_PART_HEAD 9

if(bodypart == BODY_PART_HEAD)
{
PlayAudioStreamForPlayer(playerid, "http://geebrox.esy.es/sounds/cs/1.wav");
PlayAudioStreamForPlayer(issuerid, "http://geebrox.esy.es/sounds/cs/1.wav");

GameTextForPlayer(playerid, "~r~HeadShot", 3000, 5);
GameTextForPlayer(issuerid, "~g~HeadShot", 3000, 5);
SetPlayerHealth(playerid, 0);

static const
frm_string[] = "\
%s {8B7D6B}убил {CD950C}%s {8B7D6B}с выстрелом в голову!";
new string_one[sizeof(frm_string)-2+MAX_PLAYER_NAME-2+MAX_PLAYER_NAME];

format(string_one, sizeof(string_one), frm_string, name[issuerid], name[playerid]);
SendClientMessageToAll(0xCD950CFF, string_one);
}
}
UPDATE: Кстати, по твоему коду можно HEADSHOT поставить даже с m4..

Ага а потом всегда с 1 выстрелом в голову убивать игроков у которых даже полная броня и хп, вот твойй код жесть!

- - - Добавлено - - -


потому что там больше 100 символов...

а вот я, к примеру, не увидел смысла в этом участке кода

SetPVarInt(playerid, "kills", 0);
SetPVarInt(killerid, "kills", GetPVarInt(killerid, "kills")+1)

и соответственно в его ответвлении

else if(GetPVarInt(killerid, "kills") > 1)
{
format(string, 37, "http://geebrox.esy.es/sounds/cs/%d.wav", random(8)+1);
PlayAudioStreamForPlayer(killerid, string);
format(string, 12, "~g~Kills: %d!", GetPVarInt(killerid, "kills"));
GameTextForPlayer(killerid, string, 3000, 5);
}

Какой именно смысл тебе нужен? Игрок умирает, счет убийств обнуляется, а к убийце прибавляеться +1 к убийстве. а вот if(GetPVarInt(killerid, "kills") > 1) сделал для того чтобы сразу после 1 убийства звук не воспроизводился, ибо каша получется со звуками, вот после 2 убийств начнется воспроизведение звуков.
Символов считал специальной прогой для измерении строк, так что там точно 100!

Daniel_Cortez
28.09.2015, 17:22
Ага а потом всегда с 1 выстрелом в голову убивать игроков у которых даже полная броня и хп, вот твойй код жесть!
С каких пор бронежилет спасает от пули в голову?

По теме: разве PlayAudioStreamForPlayer не будет создавать у игроков лаги после каждого хедшота?
И что помешало использовать здесь INVALID_PLAYER_ID вместо 65535?


if(issuerid != 65535)
{
if(bodypart == 9) SetPVarInt(playerid, "headshot", issuerid);
else SetPVarInt(playerid, "headshot", INVALID_PLAYER_ID);
}

Что интересно, пару строк спустя константа таки используется.

Geebrox
28.09.2015, 18:32
С каких пор бронежилет спасает от пули в голову?

По теме: разве PlayAudioStreamForPlayer не будет создавать у игроков лаги после каждого хедшота?
И что помешало использовать здесь INVALID_PLAYER_ID вместо 65535?


if(issuerid != 65535)
{
if(bodypart == 9) SetPVarInt(playerid, "headshot", issuerid);
else SetPVarInt(playerid, "headshot", INVALID_PLAYER_ID);
}

Что интересно, пару строк спустя константа таки используется.

бронижилет в некоторых рп серверах идет как и каска. а в чем разница между 65535 и инвалидом? ни в чем! вот и я использую где как удобно, кому не нравится пусть поменяет, ибо тут сидят не такие уж безоптные скриптеры которые не знают даже как поменять инвалида P.S. "Инвэйлд" для особо грамотных

Daniel_Cortez
28.09.2015, 21:47
бронижилет в некоторых рп серверах идет как и каска.
Так пусть на этих "некоторых" серверах и убирают обнуление ХП. Почему все должны под них подстраиваться? Делов-то закомментировать одну строку.


а в чем разница между 65535 и инвалидом?
В том, что со следующей версией SA:MP число может измениться, а имя константы всегда остаётся прежним.
Вы мне напоминаете одного человека, он тоже в размерах массивов ставил 500 вместо MAX_PLAYERS. Всё твердил, что ему так удобно.
А потом вышла новая версия сервера на 1000 игроков и тому быдлокодеру пришлось обшаривать весь мод и заменять 500 на 1000.


ни в чем! вот и я использую где как удобно, кому не нравится пусть поменяет
Сайтом ошиблись, г-и не здесь.


"Инвэйлд" для особо грамотных
Упрекаете самого себя в ошибках? А вот это уже что-то новое. Кстати, транскрипция всё равно неправильная.

gangzone.ini
28.09.2015, 22:56
Ага а потом всегда с 1 выстрелом в голову убивать игроков у которых даже полная броня и хп, вот твойй код жесть!

- - - Добавлено - - -



Какой именно смысл тебе нужен? Игрок умирает, счет убийств обнуляется, а к убийце прибавляеться +1 к убийстве. а вот if(GetPVarInt(killerid, "kills") > 1) сделал для того чтобы сразу после 1 убийства звук не воспроизводился, ибо каша получется со звуками, вот после 2 убийств начнется воспроизведение звуков.
Символов считал специальной прогой для измерении строк, так что там точно 100!

120 символов тут...

wAx
28.09.2015, 22:57
120 символов тут...

102 xD, но суть ведь не в этом...

gangzone.ini
28.09.2015, 23:02
102 xD, но суть ведь не в этом...

Неправельно сложила) 102*

Geebrox
29.09.2015, 13:18
Так пусть на этих "некоторых" серверах и убирают обнуление ХП. Почему все должны под них подстраиваться? Делов-то закомментировать одну строку.
А может я сделал для "некоторых" серверов, это моя задумка. Почему я должен изменять ее? Или начать голосование, кто за то чтобы я изменил свою личную задумку для тех жирнож**ых которым лень поменять 2 строчки в скрипте?



Сайтом ошиблись, г-и не здесь.
Я и не искал Г-И, у меня есть свой стиль скриптинга, не знаю как у остальных. Или все пользователи этого портала должны кодить по Вашим правилам и стилям?



Упрекаете самого себя в ошибках? А вот это уже что-то новое. Кстати, транскрипция всё равно неправильная.
Я не упрекал, просто есть такие быдлы, которые находят даже не значительные и вообще бесмысленные "ошибки" и начинают до**ить автора, якобы они "святые"

Daniel_Cortez
29.09.2015, 17:20
А может я сделал для "некоторых" серверов, это моя задумка. Почему я должен изменять ее? Или начать голосование, кто за то чтобы я изменил свою личную задумку для тех жирнож**ых которым лень поменять 2 строчки в скрипте?
По поводу изменений - это распространённая практика затачивать свои работы под большинство. Во всяком случае, добавить пару слэшей, чтобы закомментировать строку, легче, чем сделать новую. Но дело ваше.
А логика по типу "кому не нравится - пусть сам доделывает" - это как раз стандартная логика тех, кто сидит на г-и, и выражает она ваше нежелание работать над кодом, как будто вы просто выбросили его на свалку, и наплевательское отношение к тем, кто будет сим кодом пользоваться. Поэтому здесь такая логика отнюдь не приветствуется.



Я и не искал Г-И, у меня есть свой стиль скриптинга, не знаю как у остальных. Или все пользователи этого портала должны кодить по Вашим правилам и стилям?
В этом и состоит политика портала: учить пользователей писать код по одному стандарту, а не кто во что горазд.
Многие рекомендации к написанию кода собраны в одной теме:

http://pro-pawn.ru/showthread.php?8347
Здесь собраны рекомендации, опирающиеся на самые очевидные принципы скриптинга (например, стиль наименования функций и констант тот же, что и в стандартных инклудах SA:MP).
Кроме того, некоторые рекомендации основываются, как минимум, на здравом смысле (и ежу понятно, что неправильная табуляция и глобальные переменные с короткими названиями - это зло).

Для тех, кто выкладывает здесь свои труды, выполнение работ по стандарту - это опыт в скриптинге и в программировании в целом.
В свою очередь, новичкам тоже легче читать и разбирать код, написанный в одном стиле, знакомом с самых первых разбираемых примеров. Собственно, портал и создан для обучения, а не для выкладывания абы каких работ и выпрашивания репутации.
Кроме того, так гораздо легче использовать в своих проектах сразу несколько сторонних работ, если они создавались по одним правилам.
Поэтому вы можете адекватно отреагировать на стороннюю критику и рекомендации и постараться улучшить свой код. Это если вы желаете чему-то научиться.
Либо можете и дальше отмахиваться от любой критики и голословно твердить в ответ критикующему, якобы ему не к чему больше придраться. Выбор за вами.



Я не упрекал, просто есть такие быдлы, которые находят даже не значительные и вообще бесмысленные "ошибки" и начинают до**ить автора, якобы они "святые"
Хотелось бы заметить, до вас здесь никто на оскорбления не переходил.

Geebrox
29.09.2015, 18:08
Учту Ваши рекомендации в следующих релизах своих скриптов

Роуди.
30.09.2015, 22:11
И все же я не пойму, почему Вы не используете только паблик OnPlayerTakeDamage?

Geebrox
01.10.2015, 16:20
Я уже ранее ответил на Ваш вопрос
Даже в самых распространенных шутерах игрок не умирает с 1 выстрела в голову (умирает только в том случае если выстрел был произведен из исключительных типов оружии). Я смогу тоже сделать исключительные типы оружии из которых можно убить с 1 выстрела или сделать проверку на кол-во хп игрока, но стоит ли оно того?