Русское сообщество по скриптингу

Подсчитывание урона по каждому объекту.  [Решено]

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Подсчитывание урона по каждому объекту.

Сообщение LLInH9rA » 18 фев 2017, 21:19

Доброго времени суток. Сижу, чешу репу.
Есть 69 объектов, по которым игроки наносят урон. Урон по каждому объекту нужно считать отдельно.
Если использовать обычные условия, то это получается громоздкий велосипед. Ломал голову, думаю как сделать с switch. Как будет правильней сделать?

Код: Выделить всё
public MonsterTakeDamage(victim, weapon, attacker, Float:damage, damagebits)
{
    if(victim != blockID[attacker])
    {
        new classname[32];
        pev(victim, pev_classname, classname, 31);
        
        if
(equali(classname, "ent_1"))
        {
            gdamage[attacker][0] += damage;
        }
        else if(equali(classname, "ent_2"))
        {
            gdamage[attacker][1] += damage;
        }
        else if(equali(classname, "ent_2"))
        {
            gdamage[attacker][2] += damage;
        }
        else if и т.д...
    }
Аватара пользователя
LLInH9rA
 
Сообщения: 395
Зарегистрирован: 19 фев 2011, 16:57
Откуда: Ступино
Благодарил (а): 13 раз.
Поблагодарили: 67 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Half-Life
Sven Co-Op 4.8
C#
PHP5

Re: Подсчитывание урона по каждому объекту.

Сообщение Subb98 » 18 фев 2017, 21:24

Зачем такие сложности? Присваиваем какому-нибудь оффсету entity номер ячейки, например:

Код: Выделить всё
set_pev(ent, pev_user1, 10); // где 10 - index ячейки 

При нанесении урона entity получаем значение этого оффсета и записываем урон в нужную ячейку:

Код: Выделить всё
new char pev(entpev_user1); // получаем index ячейки
gdamage[attacker][char] += damage// прибавляем урон для этого объекта 
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: Подсчитывание урона по каждому объекту.

Сообщение LLInH9rA » 18 фев 2017, 21:44

Дело в том, что я пишу плагин под SC(Sven Co-Op), и эти объекты - монстры. Конечно можно пробежаться при старте циклом по всем, но в процессе игры появляются новые.

Добавлено спустя 16 минут 45 секунд:
Даже если при спавне каждому классу присваивать, то без условий не обойтись.

"monster_alien_babyvoltigore", "monster_alien_controller", "monster_alien_grunt",
"monster_alien_slave", "monster_alien_tor", "monster_alien_voltigore",
"monster_apache", "monster_assassin_repel", "monster_babycrab", "monster_babygarg",
"monster_barnacle", "monster_barney", "monster_barney_dead", "monster_bigmomma",
"monster_blkop_osprey", "monster_blkop_apache", "monster_bodyguard", "monster_bullchicken",
"monster_chumtoad", "monster_cleansuit_scientist", "monster_cockroach", "monster_flyer_flock",
"monster_gargantua", "monster_gman", "monster_gonome", "monster_grunt_ally_repel",
"monster_grunt_repel", "monster_handgrenade", "monster_headcrab", "monster_hevsuit_dead",
"monster_hgrunt_dead", "monster_houndeye", "monster_human_assassin", "monster_human_grunt",
"monster_human_grunt_ally", "monster_human_grunt_ally_dead", "monster_human_medic_ally",
"monster_human_torch_ally", "monster_hwgrunt", "monster_hwgrunt_repel", "monster_ichthyosaur",
"monster_kingpin", "monster_leech", "monster_male_assassin", "monster_medic_ally_repel",
"monster_miniturret", "monster_nihilanth", "monster_osprey", "monster_otis", "monster_otis_dead",
"monster_pitdrone", "monster_rat", "monster_robogrunt", "monster_robogrunt_repel", "monster_scientist",
"monster_scientist_dead", "monster_sentry", "monster_shockroach", "monster_shocktrooper",
"monster_sitting_scientist", "monster_snark", "monster_sqknest", "monster_stukabat", "monster_tentacle",
"monster_torch_ally_repel", "monster_turret", "monster_zombie", "monster_zombie_barney", "monster_zombie_soldier"
Аватара пользователя
LLInH9rA
 
Сообщения: 395
Зарегистрирован: 19 фев 2011, 16:57
Откуда: Ступино
Благодарил (а): 13 раз.
Поблагодарили: 67 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Half-Life
Sven Co-Op 4.8
C#
PHP5

Re: Подсчитывание урона по каждому объекту.

Сообщение Subb98 » 18 фев 2017, 22:05

LLInH9rA, я не знаком с этим модом, но не совсем понимаю, для чего цикл? Нельзя просто получить index entity в событии нанесения урона? И уже от него отталкиваться?
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: Подсчитывание урона по каждому объекту.

Сообщение EvilCoder » 18 фев 2017, 22:57

Эх, снова бы вспомнить pawn :)
Сравнивать строки через switch-case нельзя, только числа.
Как вариант, через #define присвоить такому то класснейму такое то число, и уже тогда сравнивать классы как числа через switch. Хотя, может и бред написал :-D
А вообще, нельзя ли просто при создании определённой энтити присвоить кол-во жизней столько, сколько надо? Обязательно урон менять? :)
Не забывайте, что у вас есть возможность отправлять жалобы на сообщения, присланные вам от других пользователей в ЛС.
Не пишите мне в ЛС: если вам нужна помощь на бесплатной основе. Любые вопросы на форум.
Принимаются заявки на вступление в группу Скриптеры
Аватара пользователя
EvilCoder
Администратор
 
Сообщения: 1960
Зарегистрирован: 20 апр 2010, 12:11
Благодарил (а): 44 раз.
Поблагодарили: 663 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6

Re: Подсчитывание урона по каждому объекту.

Сообщение LLInH9rA » 19 фев 2017, 01:01

EvilCoder,

Все объекты на картинке - это entity с разными classname'мами. Мне необходимо отловить урон по каждому, и посчитать раздельно для каждого classname'ма.

Например:

Код: Выделить всё

new damage_zoombie
;
new damage_headcrab;
new damage_bullchiken;

public отловили_урон(Атакующий, атакованый, урон)
{
    if(урон по зомби)
    {
        damage_zoombie = new damage_zoombie + урон
    
}
    else if(урон по хедкрабу)
    {
        damage_headcrab = new damage_headcrab + урон
    
}
    else if(урон по bullchiken)
    {
        damage_bullchiken = damage_bullchiken + урон
    
}
    и так далее...
}

 


Вопрос в чем? Как более правильно это реализовать? Как уйти от такого большого кол-ва условий? Вот в чем вопрос. 69 условий это как-то не очень.
Аватара пользователя
LLInH9rA
 
Сообщения: 395
Зарегистрирован: 19 фев 2011, 16:57
Откуда: Ступино
Благодарил (а): 13 раз.
Поблагодарили: 67 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Half-Life
Sven Co-Op 4.8
C#
PHP5

Re: Подсчитывание урона по каждому объекту.  [Решено]

Сообщение Mistrick » 19 фев 2017, 03:32

LLInH9rA, через trie.
Аватара пользователя
Mistrick
Скриптер
 
Сообщения: 2940
Зарегистрирован: 04 ноя 2012, 18:15
Благодарил (а): 43 раз.
Поблагодарили: 1247 раз.
Языки программирования: PAWN
С/С++(few above zero)

Re: Подсчитывание урона по каждому объекту.

Сообщение EvilCoder » 19 фев 2017, 09:28

Зачем подсчитывать урон, если можно дать определённому класснейму большое/маленькое количество жизней. Урон сам подсчитается :)
Не забывайте, что у вас есть возможность отправлять жалобы на сообщения, присланные вам от других пользователей в ЛС.
Не пишите мне в ЛС: если вам нужна помощь на бесплатной основе. Любые вопросы на форум.
Принимаются заявки на вступление в группу Скриптеры
Аватара пользователя
EvilCoder
Администратор
 
Сообщения: 1960
Зарегистрирован: 20 апр 2010, 12:11
Благодарил (а): 44 раз.
Поблагодарили: 663 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6

Re: Подсчитывание урона по каждому объекту.

Сообщение LLInH9rA » 19 фев 2017, 15:34

Mistrick, спасибо! То, что нужно. Пока тему не закрываю.
Аватара пользователя
LLInH9rA
 
Сообщения: 395
Зарегистрирован: 19 фев 2011, 16:57
Откуда: Ступино
Благодарил (а): 13 раз.
Поблагодарили: 67 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Half-Life
Sven Co-Op 4.8
C#
PHP5


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13