Плагин разлетания на куски, НО без крови

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
315
Реакции
104
Помог
2 раз(а)
Всем доброго времени суток.
Мне тут скинули интересную задачу - сделать так, чтоб после смерти игрок разлетался на куски + НЕ БЫЛО крови.
Кто-нибудь, подскажите хотя бы направление для отсева крови при убийстве... Дня 2-3 в свободное время искал по .inc файлам, ничего не нашел.

Код:
#include <amxmodx>
#include <hamsandwich>

public plugin_init() {
    register_plugin( "Meat", "1.0.0b", "SNauPeR" );
    RegisterHam(Ham_Killed, "player", "Ham_PlayerKilled_Pre", 0);
}

public Ham_PlayerKilled_Pre(const pVictim, const pKiller, const iCorpse) {
    if(!is_user_connected(pVictim) || pVictim == pKiller)
        return;
    
    SetHamParamInteger(3, 2);
}
 
Сообщения
702
Реакции
54
SNauPeR, есть такая тема у Yapb ботов, когда они по таймеру умерают (если все игроки умерли, а боты больше Х секунд тупят (что-то такое)), они разлетаются на куриные ножки :D
 
Сообщения
315
Реакции
104
Помог
2 раз(а)
ThePhoenix, благодарю за столь ценную информацию..!) А можно ли ссылочку на такой плагин? А то даже гугл бессилен )
 
Сообщения
315
Реакции
104
Помог
2 раз(а)
ThePhoenix, моя задача - сделать плагин БЕЗ крови, если это возможно. Поэтому и ищу инфу.
Может быть fl0wer wopox1337 steelzzz wellasgood BlackSignature и другие профи, смогут подсказать? Вопрос то интересный
14 Окт 2020
Как бэ у меня есть только 1 идея, возникшая когда вспомнил поломку турели на CSDM серверах.
В теории, можно сделать костыль... Блокировать смерть игрока, а гипсы создавать отдельным мессаджем. Но это некрасиво + нагрузка.
Может у кого есть другие идеи?
 
Сообщения
2,751
Реакции
3,017
Помог
61 раз(а)
m_Gib_bloodColor
m_Gib_cBloodDecals

Есть разные пути не спавнить кровь, даже кварами клиента и сервера.
 

RockTheStreet

Саппорт года
Сообщения
1,743
Реакции
344
Помог
40 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
SNauPeR, есть такая тема у Yapb ботов, когда они по таймеру умерают (если все игроки умерли, а боты больше Х секунд тупят (что-то такое)), они разлетаются на куриные ножки :D
Это немного не плагин amxx, поэтому тут не поможет.
 
Сообщения
702
Реакции
54
melfyk, я говорил к тому, что человек мог бы подсказать, раз смог сделать в ботах :) Извиняюсь, если не прав)
 
Сообщения
2,751
Реакции
3,017
Помог
61 раз(а)
SNauPeR каковы успехи? Если получилось, то поделись каким кодом.
 
Сообщения
315
Реакции
104
Помог
2 раз(а)
wopox1337, пару дней повозился, пока было время, не выходило, даже с вашими подсказками - сгорел. Так бы я уже релизнул код:dntknw:
на днях выходные будут, может займусь еще раз этим вопросом
 
Сообщения
2,751
Реакции
3,017
Помог
61 раз(а)
SNauPeR, попробуй так:


Один хороший человек подсказал готовый код.
Код:
#include <amxmodx>
#include <hamsandwich>
#include <reapi>
 
new g_iOldValues[MAX_PLAYERS + 1];
 
public plugin_init() {
    RegisterHam(Ham_Killed, "player", "Ham_PlayerKilled_Pre", 0);
    RegisterHookChain(RG_SpawnHeadGib, "SpawnHeadGib_Post", true);
    RegisterHookChain(RG_SpawnRandomGibs, "SpawnRandomGibs_Pre", false);
    RegisterHookChain(RG_SpawnRandomGibs, "SpawnRandomGibs_Post", true);
}
 
public SpawnHeadGib_Post(const pevVictim) {
    #pragma unused pevVictim
 
    if(!IsReapiHookOriginalWasCalled(RG_SpawnHeadGib)) return;
 
    set_member(GetHookChainReturn(ATYPE_INTEGER), m_Gib_bloodColor, -1);
}
 
public SpawnRandomGibs_Pre(const pevVictim, const cGibs, const human) {
    #pragma unused cGibs, human
    if((pevVictim <= 0 || pevVictim > MaxClients) || !is_user_connected(pevVictim)) return;
 
    g_iOldValues[pevVictim] = get_member(pevVictim, m_bloodColor);
 
    set_member(pevVictim, m_bloodColor, -1);
}
 
public SpawnRandomGibs_Post(const pevVictim, const cGibs, const human) {
    #pragma unused cGibs, human
 
    if((pevVictim <= 0 || pevVictim > MaxClients) || !is_user_connected(pevVictim)) return;
 
    set_member(pevVictim, m_bloodColor, g_iOldValues[pevVictim]);
}
 
public Ham_PlayerKilled_Pre(const pVictim, const pKiller, const iCorpse) {
    if(!is_user_connected(pVictim) || pVictim == pKiller)
        return;
    
    SetHamParamInteger(3, 2);
}
 
Сообщения
315
Реакции
104
Помог
2 раз(а)
wopox1337, SergeyPanov, компильнул, предварительно обновив на всякий случай ReApi+AmxM+ReGame+ReHLDS
Результат ниже.
Как же меня з...ли эти гибсы :wacko:
 
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
SNauPeR, а без какой именно крови надо? От игрока, струи от игрока, декали крови гибсов? Нужно ли удаление гибсов? А то код выше через пару смертей повиснет от кол-ва энтити.
 
Сообщения
315
Реакции
104
Помог
2 раз(а)
fl0wer, не уточняли, когда мне об этом писали. Ну я так понял, блокировать нужно именно всю кровь, чтоб оставались только куски
 
Сообщения
315
Реакции
104
Помог
2 раз(а)
wopox1337, Сергей, почти готово. Спасибо AnonymousAmx за подсказки)
SergeyPanov, вот практически готовый плагин (там только 1 недочет, ниже читайте)
Код:
#define MEAT_INTENSIVE 2 //[1 = мало мяса, 2 = среднее, 3 = кормим всю Африку]

#include amxmodx
#include fakemeta
#include hamsandwich
#include reapi

#if MEAT_INTENSIVE == 1
new g_pGibsModels[2];
#elseif MEAT_INTENSIVE == 2 || MEAT_INTENSIVE == 3
new g_pGibsModels[5];
#endif

public plugin_precache() {
    #if MEAT_INTENSIVE == 1
    g_pGibsModels[0] = engfunc(EngFunc_PrecacheModel, "models/gib_skull.mdl");
    g_pGibsModels[1] = engfunc(EngFunc_PrecacheModel, "models/gib_legbone.mdl");
    #else
    g_pGibsModels[0] = engfunc(EngFunc_PrecacheModel, "models/gib_skull.mdl");
    g_pGibsModels[1] = engfunc(EngFunc_PrecacheModel, "models/gib_legbone.mdl");
    g_pGibsModels[2] = engfunc(EngFunc_PrecacheModel, "models/gib_b_bone.mdl");
    g_pGibsModels[3] = engfunc(EngFunc_PrecacheModel, "models/gib_lung.mdl");
    g_pGibsModels[4] = engfunc(EngFunc_PrecacheModel, "models/gib_b_gib.mdl");
    #endif
}

public plugin_init() {
    register_plugin("Meat", "1.0.0", "SNauPeR");
    RegisterHookChain(RG_CBasePlayer_Spawn, "@SpawnPlayer_Post", true);
    RegisterHookChain(RG_CBasePlayer_Killed, "@KilledPlayer_Post", true);
}

@SpawnPlayer_Post(pId) {
    if(is_user_alive(pId)) set_member(pId, m_bloodColor, -1);
}

@KilledPlayer_Post(iVictim, iAttacker, iGib) {
    new Float:vecOrigin[3]; get_entvar(iVictim, var_origin, vecOrigin);
    #if MEAT_INTENSIVE == 1 || MEAT_INTENSIVE == 2
    for(new i; i < sizeof g_pGibsModels; i++) {
        engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, vecOrigin, 0);
        write_byte(TE_MODEL);
        engfunc(EngFunc_WriteCoord, vecOrigin[0]);
        engfunc(EngFunc_WriteCoord, vecOrigin[1]);
        engfunc(EngFunc_WriteCoord, vecOrigin[2]);
        write_coord(random_num(100, 400));
        write_coord(random_num(100, 400));
        write_coord(random_num(100, 400));
        write_angle(random(361));
        write_short(g_pGibsModels[i]);
        write_byte(1);
        write_byte(125);
        message_end();
    }
    #else
    for(new i, bool:bRepeat, iLen = sizeof(g_pGibsModels); i < iLen; i++) {
        if(i == (iLen - 1) && !bRepeat) {
            i = 0;
            bRepeat = true;
        }
        engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, vecOrigin, 0);
        write_byte(TE_MODEL);
        engfunc(EngFunc_WriteCoord, vecOrigin[0]);
        engfunc(EngFunc_WriteCoord, vecOrigin[1]);
        engfunc(EngFunc_WriteCoord, vecOrigin[2]);
        write_coord(random_num(100, 400));
        write_coord(random_num(100, 400));
        write_coord(random_num(100, 400));
        write_angle(random(361));
        write_short(g_pGibsModels[i]);
        write_byte(1);
        write_byte(125);
        message_end();
    }
    #endif
}
Плагин практически полностью убирает кровь. Но, какой НЕДОЧЕТ есть? При убийстве в голову образуется спрайт в виде полоски крови
DqKIIWJhHRY.jpg
Я предполагаю так: можно убрать анпрекешером кровь, то бишь спрайт. Но мне нужно знать что это за спрайт...
fl0wer, Александр, может вы что подскажите+по оптимизации?)
 
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
SNauPeR, делать мессагам бред, за струю отвечает функция BloodSplat, в которой TE_BLOODSTREAM, но она не единственная, есть ещё декали крови на мире.
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу