CBasePlayer_TakeDamage помогите допилить код

Статус
В этой теме нельзя размещать новые ответы.

neygomon

Его Темнейшество :j
Заблокированные
Пользователь
Регистрация
8 Июн 2017
Сообщения
819
Симпатии
388
Пол
Мужской
BeasT, ну ты можешь вообще массив создать с сообщениями глобальный...[DOUBLEPOST=1507963900][/DOUBLEPOST]
PHP:
new g_arrMessages[HIT_RIGHTLEG + 1][] =
{
    "-",
    "Привет голова",
    "Привет грудь",
    "Привет живот",
    "Привет левая рука",
    "Привет правая рука",
    "Привет левая нога",
    "Привет правая нога"
}
а потом где нужен вывод - просто: g_arrMessages[get_member(index, m_LastHitGroup)];
 

BalbuR

Пользователь
Регистрация
26 Июл 2017
Сообщения
131
Симпатии
25
Пол
Мужской
суть задания какая? вроде читаю один пост и не нахожу логику во втором
 

BeasT

Anubis
Пользователь
Регистрация
26 Июн 2017
Сообщения
393
Симпатии
55
Пол
Мужской
я к тому, что мне еще нужен будет подсчет сколько куда попаданий.
(делаю /me)[DOUBLEPOST=1507964045][/DOUBLEPOST]прошу прощения, что сразу не объяснил
 

BalbuR

Пользователь
Регистрация
26 Июл 2017
Сообщения
131
Симпатии
25
Пол
Мужской
new g_arrMessages[HIT_RIGHTLEG + 1][] = { "-", "Привет голова", "Привет грудь", "Привет живот", "Привет левая рука", "Привет правая рука", "Привет левая нога", "Привет правая нога" }
хелло ворлд

я к тому, что мне еще нужен будет подсчет сколько куда попаданий.
ну если попаданий по голове не было, то просто игнорить условием:
PHP:
// глобальное
enum _:HITBOXES {
GENERIC,   
HEAD,     
CHEST,   
STOMACH,
LEFTARM,
RIGHTARM,
LEFTLEG,
RIGHTLEG,
SHIELD
}
new g_aHits[id][HITBOXES];
// локальное
new len
if(g_aHits[id][HEAD])
formatex(szText[len], charsmax(szText) - len, "папал по фейсу %i раз^n", g_aHits[id][HEAD]);

if(g_aHits[id][CHEST])
formatex(szText[len], charsmax(szText) - len, "попал в грудь %i раз^n", g_aHits[id][CHEST]);

....
show_hudmessage(id, "%s", szText);
где g_aHits - глобальный счетчик для того же ham_takedamage или же damage_event'а
 

BeasT

Anubis
Пользователь
Регистрация
26 Июн 2017
Сообщения
393
Симпатии
55
Пол
Мужской
PHP:
#include <amxmodx>
#include <reapi>

enum _:HITBOXES {
GENERIC,   HEAD,     CHEST,   STOMACH,
LEFTARM,
RIGHTARM,
LEFTLEG,
RIGHTLEG,
SHIELD
}

new g_aHits[33][8]

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

RegisterHookChain(RG_CBasePlayer_TakeDamage, "CBasePlayer_TakeDamage", true)

register_clcmd("say /me", "CmdMe")
register_clcmd("say_team /me", "CmdMe")
}

public CBasePlayer_TakeDamage(const pevVictim, pevInflictor, pevAttacker, Float:damage, bitsDamageType)
{
    if(is_valid_player(pevAttacker))
    {
        if(pevAttacker != pevVictim && rg_is_player_can_takedamage(pevVictim, pevAttacker))
        {
           new value = get_member(pevAttacker, m_LastHitGroup);
           g_aHits[pevAttacker][value]
        }
        return;
    }
}

public CmdMe(id)
{
new len
if(g_aHits[id][HEAD])
len += formatex(szText[len], "папал по фейсу %i раз^n", g_aHits[id][HEAD]);

if(g_aHits[id][CHEST])
len += formatex(szText[len], "попал в грудь %i раз^n", g_aHits[id][CHEST]);
//и т.д.


    client_print_color(id,print_team_default, "%s", szText)
    return PLUGIN_HANDLED
}
Верно?
 
Последнее редактирование:

BalbuR

Пользователь
Регистрация
26 Июл 2017
Сообщения
131
Симпатии
25
Пол
Мужской
client_print_color(id,print_team_default, "%s", szText)
строка получится слишком длинной. Никогда не ставил такой длинный текст в клиент_принт.
Клиент_принт не воспринимает ^n как перенос строки, придется все это переносить вручную

new g_aHits[33][8]
=>
new g_aHits[33][sizeof HITBOXES]

Код:
if(g_aHits[id][HEAD])
len += formatex(szText[len], charsmax(szText) - len, "папал по фейсу %i раз^n", g_aHits[id][HEAD]);
//formatex(szText[len], charsmax(szText) - len, "папал по фейсу %i раз^n", g_aHits[id][HEAD]);

if(g_aHits[id][CHEST])
len += formatex(szText[len], charsmax(szText) - len, "попал в грудь %i раз^n", g_aHits[id][CHEST]);
//formatex(szText[len], charsmax(szText) - len, "попал в грудь %i раз^n", g_aHits[id][CHEST]);
 

BeasT

Anubis
Пользователь
Регистрация
26 Июн 2017
Сообщения
393
Симпатии
55
Пол
Мужской
не, ну это уже формальности, которые я конечно же поправлю.
В целом код верный получился?
 

georgeml

Скриптер
Постоялец
Регистрация
12 Сен 2017
Сообщения
595
Симпатии
314
C++:
len += formatex(szText[len],....
 
  • Мне нравится
Симпатии: BeasT

BeasT

Anubis
Пользователь
Регистрация
26 Июн 2017
Сообщения
393
Симпатии
55
Пол
Мужской
C++:
len += formatex(szText[len],....
поправил[DOUBLEPOST=1507966507][/DOUBLEPOST]
PHP:
#include <amxmodx>
#include <reapi>

enum _:HITBOXES
{
GENERIC, 
HEAD,   
CHEST, 
STOMACH,
LEFTARM,
RIGHTARM,
LEFTLEG,
RIGHTLEG,
SHIELD
}

new g_aHits[33][sizeof HITBOXES]

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

RegisterHookChain(RG_CBasePlayer_TakeDamage, "CBasePlayer_TakeDamage", true)

register_clcmd("say /me", "CmdMe")
register_clcmd("say_team /me", "CmdMe")
}

public CBasePlayer_TakeDamage(const pevVictim, pevInflictor, pevAttacker, Float:damage, bitsDamageType)
{
    if(is_valid_player(pevAttacker))
    {
        if(pevAttacker != pevVictim && rg_is_player_can_takedamage(pevVictim, pevAttacker))
        {
           new value = get_member(pevAttacker, m_LastHitGroup);
           g_aHits[pevAttacker][value]
        }
        return;
    }
}

public CmdMe(id)
{
new len

if(g_aHits[id][HEAD])
len += formatex(szText[len], charsmax(szText) - len, "папал по фейсу %i раз^n", g_aHits[id][HEAD]);

if(g_aHits[id][CHEST])
len += formatex(szText[len], charsmax(szText) - len, "попал в грудь %i раз^n", g_aHits[id][CHEST]); ;
//и т.д.


    client_print_color(id,print_team_default, "%s", szText)
    return PLUGIN_HANDLED
}
 

BalbuR

Пользователь
Регистрация
26 Июл 2017
Сообщения
131
Симпатии
25
Пол
Мужской
локально объявить не забудь
new szText[128];

в client_print'е можешь выводить текст начиная с N символа, раз уж начали работать через formatex
client_print(id, print_chat, "%s", szText[31] // вывести текст с 31 символа
 
  • Мне нравится
Симпатии: BeasT

BeasT

Anubis
Пользователь
Регистрация
26 Июн 2017
Сообщения
393
Симпатии
55
Пол
Мужской
в client_print'е можешь выводить текст начиная с N символа, раз уж начали работать через formatex
client_print(id, print_chat, "%s", szText[31] // вывести текст с 31 символа
не понял для чего?
 

BalbuR

Пользователь
Регистрация
26 Июл 2017
Сообщения
131
Симпатии
25
Пол
Мужской
  • Мне нравится
Симпатии: BeasT

BeasT

Anubis
Пользователь
Регистрация
26 Июн 2017
Сообщения
393
Симпатии
55
Пол
Мужской
если текст будет слишком длинный - для вывода на вторую строку чата. Т.е. тебе уже нужно будет использовать два раза client_print
не нужно ли мне случаем в enum с HEAD заменить на HIT_HEAD

ведь тут
Код:
new value = get_member(pevAttacker, m_LastHitGroup);
           g_aHits[pevAttacker][value]
я же буду получать
g_aHits[pevAttacker][HIT_HEAD]
?
 

neygomon

Его Темнейшество :j
Заблокированные
Пользователь
Регистрация
8 Июн 2017
Сообщения
819
Симпатии
388
Пол
Мужской
new g_aHits[33][sizeof HITBOXES]

пахнуло долбоебом...

enum не имеет размерности, ало
 

georgeml

Скриптер
Постоялец
Регистрация
12 Сен 2017
Сообщения
595
Симпатии
314
зачем enum, если все уже определено в amxconst.inc

Код:
#define HITBOXES 8
new g_aHits[33][HITBOXES];
.
.
g_aHits[pevAttacker][HIT_HEAD]
 

BalbuR

Пользователь
Регистрация
26 Июл 2017
Сообщения
131
Симпатии
25
Пол
Мужской
new g_aHits[33][sizeof HITBOXES]
я не был уверен, короче зря вообще написал это
не нужно ли мне случаем в enum с HEAD заменить на HIT_HEAD
тебе главное верные значения получить в твой массив, без разницы где определено в enum'е или же amxconst
 

BeasT

Anubis
Пользователь
Регистрация
26 Июн 2017
Сообщения
393
Симпатии
55
Пол
Мужской
PHP:
#include <amxmodx>
#include <reapi>

#define HITBOXES 8

new g_aHits[33][sizeof HITBOXES]

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

RegisterHookChain(RG_CBasePlayer_TakeDamage, "CBasePlayer_TakeDamage", true)

register_clcmd("say /me", "CmdMe")
register_clcmd("say_team /me", "CmdMe")
}

public CBasePlayer_TakeDamage(const pevVictim, pevInflictor, pevAttacker, Float:damage, bitsDamageType)
{
    if(is_valid_player(pevAttacker))
    {
        if(pevAttacker != pevVictim && rg_is_player_can_takedamage(pevVictim, pevAttacker))
        {
           new value = get_member(pevAttacker, m_LastHitGroup);
           g_aHits[pevAttacker][value]
        }
        return;
    }
}

public CmdMe(id)
{
    new len, szText[128]
   
    if(g_aHits[id][HIT_HEAD])
    len += formatex(szText[len], charsmax(szText) - len, " HS %i", g_aHits[id][HIT_HEAD])
   
    if(g_aHits[id][HIT_CHEST])
    len += formatex(szText[len], charsmax(szText) - len, " CH %i", g_aHits[id][HIT_CHEST])
   
    if(g_aHits[id][HIT_STOMACH])
    len += formatex(szText[len], charsmax(szText) - len, " ST %i", g_aHits[id][HIT_STOMACH])
   
    if(g_aHits[id][HIT_LEFTARM])
    len += formatex(szText[len], charsmax(szText) - len, " LA %i", g_aHits[id][HIT_LEFTARM])
   
    if(g_aHits[id][HIT_RIGHTARM])
    len += formatex(szText[len], charsmax(szText) - len, " RA %i", g_aHits[id][HIT_RIGHTARM])
   
    if(g_aHits[id][HIT_LEFTLEG])
    len += formatex(szText[len], charsmax(szText) - len, " LL %i", g_aHits[id][HIT_LEFTLEG])
   
    if(g_aHits[id][HIT_RIGHTLEG])
    len += formatex(szText[len], charsmax(szText) - len, " RL %i", g_aHits[id][HIT_RIGHTLEG])
   
    client_print_color(id,print_team_default, "%s", g_Hits[id], szText)
}
Т.е. так :Wacko2:
 

georgeml

Скриптер
Постоялец
Регистрация
12 Сен 2017
Сообщения
595
Симпатии
314
BeasT, new g_aHits[33][HITBOXES];
Обнулить после смерти не забудь) А то накопительный урон будет.. а, хотя.. я так и не понял, что это) сколько раз попал по всем игрокам?
 

BeasT

Anubis
Пользователь
Регистрация
26 Июн 2017
Сообщения
393
Симпатии
55
Пол
Мужской
BeasT, new g_aHits[33][HITBOXES];
Обнулить после смерти не забудь) А то накопительный урон будет.. а, хотя.. я так и не понял, что это) сколько раз попал по всем игрокам?
да, это сделаю) :)[DOUBLEPOST=1507970371][/DOUBLEPOST]ага, а как обнулить весь такой массив?
 

georgeml

Скриптер
Постоялец
Регистрация
12 Сен 2017
Сообщения
595
Симпатии
314
arrayset можно
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу