Просмотр полной версии : [Мануал] [0.3z] Стрельба по частям тела
Salvacore
14.02.2014, 22:50
В самое начало мода:
#if !defined BODY_PART_TORSO
enum
{
BODY_PART_TORSO = 3,
BODY_PART_GROIN,
BODY_PART_LEFT_ARM,
BODY_PART_RIGHT_ARM,
BODY_PART_LEFT_LEG,
BODY_PART_RIGHT_LEG,
BODY_PART_HEAD
};
#endif
В OnPlayerTakeDamage:
if(issuerid != INVALID_PLAYER_ID) // если игрок не ударился сам
{
new weaponid = GetPlayerWeapon(issuerid);
if(19 <= weaponid <= 34 || weaponid == 38) // если урон от огнестрельного оружия
{
switch(bodypart)
{
case BODY_PART_TORSO: // туловище
{
new Float:health;
GetPlayerHealth(playerid, health);
SetPlayerHealth(playerid, health-50.0); // вместо 50.0 ставьте своё значение
SendClientMessage(playerid, 0x33AAFFFF, "Тебе выстрелили в живот."); // отправим сообщение раненому
}
case BODY_PART_GROIN: // пах
{
new Float:health;
GetPlayerHealth(playerid, health);
SetPlayerHealth(playerid, health-35.0); // вместо 35.0 ставьте своё значение
SendClientMessage(playerid, 0x33AAFFFF, "Увы,но тебе прострелили яйки :("); // отправим сообщение раненому
}
case BODY_PART_LEFT_ARM, BODY_PART_RIGHT_ARM, BODY_PART_LEFT_LEG, BODY_PART_RIGHT_LEG: // руки, ноги
{
new Float:health;
GetPlayerHealth(playerid, health);
SetPlayerHealth(playerid, health-20.0); // вместо 20.0 ставьте своё значение
SendClientMessage(playerid, 0x33AAFFFF, "В тебя попали! Беги!"); // отправим сообщение раненому
}
case BODY_PART_HEAD: // голова
{
new Float:health;
GetPlayerHealth(playerid, health);
SetPlayerHealth(playerid, health-90.0); // вместо 90.0 ставьте своё значение
SendClientMessage(playerid, 0x33AAFFFF, "Тебе засадили в голову!"); // отправим сообщение убитому
GameTextForPlayer(playerid, "~y~HEADSHOOOOOOOOT", 5000, 2); // вылезает надпись на экран убитому (как "потрачено")
GameTextForPlayer(issuerid, "~r~HEADSHOOOOOOOOT", 5000, 2); // вылезает надпись на экран стрелявшему (как "потрачено")
}
}
}
}
Нужный материал:
SetPlayerHealth (http://wiki.sa-mp.com/wiki/SetPlayerHealth)
SendClientMessage (http://wiki.sa-mp.com/wiki/SendClientMessage)
OnPlayerTakeDamage (http://wiki.sa-mp.com/wiki/OnPlayerTakeDamage)
ID Частей тела (http://wiki.sa-mp.com/wiki/Body_Parts)
GameTextForPlayer (http://wiki.sa-mp.com/wiki/GameTextForPlayer)
Автор: Daniel_Cortez и немного идеи и кода Salvador
Пригодится, +++ :spiteful:
Salvacore
14.02.2014, 23:02
Обновил(немного,даже не надо было постить -_-)
Убившему игроку тоже сделай))
case 9: // Голова
{
SetPlayerHealth(playerid, -150); // ставим своё значение
SendClientMessage(playerid, 0x33AAFFFF, "Тебе засадили в голову");//Отправим сообщение убитому
GameTextForPlayer(playerid, "~y~HEADSHOOOOOOOOT", 5000, 2);//Вылезает надпись на экран (Как потрачено)
GameTextForPlayer(issuerid, "~y~HEADSHOOOOOOOOT", 5000, 2);//Вылезает надпись на экран (Как потрачено)
}
Salvacore
14.02.2014, 23:13
Убившему игроку тоже сделай))
case 9: // Голова
{
SetPlayerHealth(playerid, -150); // ставим своё значение
SendClientMessage(playerid, 0x33AAFFFF, "Тебе засадили в голову");//Отправим сообщение убитому
GameTextForPlayer(playerid, "~y~HEADSHOOOOOOOOT", 5000, 2);//Вылезает надпись на экран (Как потрачено)
GameTextForPlayer(issuerid, "~y~HEADSHOOOOOOOOT", 5000, 2);//Вылезает надпись на экран (Как потрачено)
}
Обновил.
Daniel_Cortez
15.02.2014, 09:58
Урок обновлён.
Оттабулирован код, исправлен баг с неправильным определением оружия (оружие проверялось у игрока playerid, когда нужно было проверять у атакующего - issuerid). Добавлены константы для большей наглядности кода.
error 017: undefined symbol "bodypart"
:С
Seregamil
15.02.2014, 14:38
new Float:health;
GetPlayerHealth(playerid, health);
можно вынести из тела switch
health -= 20.0; // вместо 20.0 ставьте своё значение
SetPlayerHealth(playerid, health); // ставим своё значение
SetPlayerHealth(playerid, health - 20.0)
не?
Daniel_Cortez
15.02.2014, 15:18
new Float:health;
GetPlayerHealth(playerid, health);
можно вынести из тела switch
Допустим, но если попадёшь в голову не из огнестрельного оружия, у игрока будет взято ХП, но оно никак не будет использоваться. Итог - лишнее действие.
SetPlayerHealth(playerid, health - 20.0)
не?
Можно, но вариант с отниманием значения из переменной в отдельном действии проще для восприятия. Не забывай, этот раздел предназначен в первую очередь для новичков.
Salvacore
15.02.2014, 15:44
error 017: undefined symbol "bodypart"
:С
Обнови инклуды до 0.3z
Обнови инклуды до 0.3z
Это не спасло
error 017: undefined symbol "bodypart"
:С
Новые параметры в паблик добавили?
Seregamil
15.02.2014, 19:20
Допустим, но если попадёшь в голову не из огнестрельного оружия, у игрока будет взято ХП, но оно никак не будет использоваться. Итог - лишнее действие.
Можно, но вариант с отниманием значения из переменной в отдельном действии проще для восприятия. Не забывай, этот раздел предназначен в первую очередь для новичков.
Однако во всех остальных случаях будет создаваться новая переменная и получаться хр.
И что что для новичков, разве нынешнее племя настолько глупо, что не может понять использование моего варианта?
Можно, но вариант с отниманием значения из переменной в отдельном действии проще для восприятия. Не забывай, этот раздел предназначен в первую очередь для новичков.
Как раз для понимания лучше вариант его, ибо после подобных "примеров" люди пишут подобное
new level = PlayerInfo[playerid][pLevel];
format(blabla, sizeof(blabla), "%d", level);
SendClientMessageToAll(0xFF0000FF, blabla);
Надеюсь сам поймёшь что тут является, мягко говоря, не к месту :)
Пытаться объяснять понятно - дело хорошее, но надо же видеть меру. Показанный способ в уроке не используется в скриптах, а показанный Seregamil'ом пример не так уж и сложен в понимании и он уже используется везде. В общем, велосипед изобретаете.
А система требует доработки, как я вижу. По крайней мере в плане красоты и логичности кода
Snoop_Dog
15.02.2014, 22:24
Круто! +
Salvacore
16.02.2014, 05:50
Круто! +
Спасибо.
Круто сделал полезно 0.3z =D
Новые параметры в паблик добавили?
Неет, какие?)
- - - Добавлено - - -
Разобрался.
Salvacore
16.02.2014, 23:34
Неет, какие?)
- - - Добавлено - - -
Разобрался.
Слава богу :)
Если будут вопросы,задайте в разделе "Вопросы по скриптингу",будем рады ответить.
Salvacore
10.06.2014, 02:59
UP!
Кстати, очень даже работает как АНТИ-ГМ.
Если я ударю кулаком в туловище и выстрелю в туловище, то урон будет одинаковый, верно?
Неправильно как-то.
- Спасибо, исправил //DC
Salvacore
22.07.2014, 20:14
Ап, обновил автора.
Помогите если не сложно:
warning 219: local variable "weaponid" shadows a variable at a preceding level
Salvacore
01.08.2014, 11:02
Помогите если не сложно:
warning 219: local variable "weaponid" shadows a variable at a preceding level
У тебя уже есть переменная weaponid.
Делаем так...
Замени на это.
if(issuerid != INVALID_PLAYER_ID) // если игрок не ударился сам
{
new idgun = GetPlayerWeapon(issuerid);
if(19 <= idgun <= 34 || idgun == 38) // если урон от огнестрельного оружия
{
switch(bodypart)
{
case BODY_PART_TORSO: // туловище
{
new Float:health;
GetPlayerHealth(playerid, health);
SetPlayerHealth(playerid, health-50.0); // вместо 50.0 ставьте своё значение
SendClientMessage(playerid, 0x33AAFFFF, "Тебе выстрелили в живот."); // отправим сообщение раненому
}
case BODY_PART_GROIN: // пах
{
new Float:health;
GetPlayerHealth(playerid, health);
SetPlayerHealth(playerid, health-35.0); // вместо 35.0 ставьте своё значение
SendClientMessage(playerid, 0x33AAFFFF, "Увы,но тебе прострелили яйки :("); // отправим сообщение раненому
}
case BODY_PART_LEFT_ARM, BODY_PART_RIGHT_ARM, BODY_PART_LEFT_LEG, BODY_PART_RIGHT_LEG: // руки, ноги
{
new Float:health;
GetPlayerHealth(playerid, health);
SetPlayerHealth(playerid, health-20.0); // вместо 20.0 ставьте своё значение
SendClientMessage(playerid, 0x33AAFFFF, "В тебя попали! Беги!"); // отправим сообщение раненому
}
case BODY_PART_HEAD: // голова
{
new Float:health;
GetPlayerHealth(playerid, health);
SetPlayerHealth(playerid, health-90.0); // вместо 90.0 ставьте своё значение
SendClientMessage(playerid, 0x33AAFFFF, "Тебе засадили в голову!"); // отправим сообщение убитому
GameTextForPlayer(playerid, "~y~HEADSHOOOOOOOOT", 5000, 2); // вылезает надпись на экран убитому (как "потрачено")
GameTextForPlayer(issuerid, "~r~HEADSHOOOOOOOOT", 5000, 2); // вылезает надпись на экран стрелявшему (как "потрачено")
}
}
}
}
Было бы не плохо к этой системке еще прикрутить различный урон с различных оружий. Было бы вообще секс.
Salvacore
27.04.2015, 12:30
Было бы не плохо к этой системке еще прикрутить различный урон с различных оружий. Было бы вообще секс.
Я сделаю, если тебя будет возбуждать :3
Я сделаю, если тебя будет возбуждать :3
Ну если воспринимать это все так буквально, то я уже подрочил =)
underground
29.10.2016, 19:16
Как к примеру реализовать такое: у игрока есть бронежилет, и когда ему стреляют не в туловище, чтобы он не отнимался?
if(issuerid != INVALID_PLAYER_ID)
{
new weaponid = GetPlayerWeapon(issuerid);
if(19 <= weaponid <= 34 || weaponid == 38)
{
switch(bodypart)
{
case BODY_PART_TORSO:
{
new Float:armour;
GetPlayerArmour(playerid, armour);
if(floatcmp(armour, 0) == 1)
{
return 0;
}
}
}
}
}
Как-то так
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot