AMXX - Death Armor Drop

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
46
Реакции
5
как убрать сияние ?

Код:
#include <amxmodx>
#include <reapi>
#include <engine>

new const g_sEntClassName[] = "classname_kevlar";

public plugin_init() {
    register_plugin("AMXX - Death Armor Drop", "1.1b", "Alejandro-.");
    RegisterHookChain(RG_CSGameRules_RestartRound, "RG_StartRound", false);
    register_touch(g_sEntClassName, "player", "fw_TouchKevlar");
    register_event("DeathMsg", "DeathMsg", "a");
}
public RG_StartRound() {
    new iEnt = 0;
    while((iEnt = rg_find_ent_by_class(iEnt, g_sEntClassName)) > 0) {
        remove_entity(iEnt);
    }
}
public DeathMsg() {
    new index = read_data(1);
    new victim = read_data(2);
    if (!is_user_connected(index) || !is_user_connected(victim)) return;
    new ArmorType:iArmorType;
    new iArmor = rg_get_user_armor(victim, iArmorType);
    if (iArmorType == ARMOR_NONE) return;
    if (!iArmor) return;
    static Float:fOrigin[3];
    get_entvar(victim, var_origin, fOrigin);
    createKevlarWeapon(fOrigin, iArmorType, iArmor);
}
stock createKevlarWeapon(Float:fOrigin[3], ArmorType:iArmorType, iArmor) {
    new iEnt = rg_create_entity("armoury_entity");
    if(!iEnt) return;
    fOrigin[2] -= 36;
    set_entvar(iEnt, var_classname, g_sEntClassName);
    set_entvar(iEnt, var_origin, fOrigin);
    set_entvar(iEnt, var_armorvalue, iArmor);
    set_entvar(iEnt, var_armortype, iArmorType);
    entity_set_model(iEnt, "models/w_kevlar.mdl");
    set_entvar(iEnt, var_solid, SOLID_BBOX);
    set_entvar(iEnt, var_movetype, MOVETYPE_FLY);
    entity_set_size(iEnt, Float:{ -23.160000, -13.660000, -0.050000 }, Float:{ 11.470000, 12.780000, 6.720000 });
    drop_to_floor(iEnt);
    rg_set_user_rendering(iEnt, kRenderFxGlowShell, Float:{255.0, 255.0, 255.0}, kRenderFxNone, 27.0);
}  
public fw_TouchKevlar(iEnt, index) {
    if (!is_user_alive(index)) return PLUGIN_HANDLED;
    new ArmorType:iEntArmorType = get_entvar(iEnt, var_armortype);
    new iEntArmor = any:get_entvar(iEnt, var_armorvalue);
    new iArmor = rg_get_user_armor(index);
    if (iArmor >= 100) return PLUGIN_HANDLED;
    rg_set_user_armor(index, clamp((iArmor + iEntArmor), 0, 100), iEntArmorType);
    client_print(index, print_center, "You Got +%i Armor", iArmor);
    remove_entity(iEnt);
    return PLUGIN_HANDLED;
}
stock rg_set_user_rendering(const pPlayer, const iFx, const Float:flColor[3] = {0.0, 0.0, 0.0}, const iRender, const Float:flAmount) {
    set_entvar(pPlayer, var_renderfx, iFx);
    set_entvar(pPlayer, var_rendercolor, flColor);
    set_entvar(pPlayer, var_rendermode, iRender);
    set_entvar(pPlayer, var_renderamt, flAmount);
}
 
Сообщения
3,050
Реакции
1,739
Помог
80 раз(а)
Shadowless, удали строчки 44 и с 57 по 62
 
Последнее редактирование модератором:
Сообщения
336
Реакции
414
Помог
7 раз(а)
Не тестировал

Код:
#include <amxmodx>
#include <fakemeta>
#include <reapi>

new const g_sEntClassName[] = "classname_kevlar";
new const g_sEntModel[] = "models/w_kevlar.mdl";

public plugin_init() {
    register_plugin("Death Armor Drop", "0.0.1", "Albertio");

    RegisterHookChain(RG_CSGameRules_CleanUpMap, "CSGameRules_CleanUpMap_Post", true);
    RegisterHookChain(RG_CSGameRules_DeathNotice, "CSGameRules_DeathNotice_Post", true);
}

public CSGameRules_CleanUpMap_Post() {
    new iEnt = NULLENT;
        
    while((iEnt = rg_find_ent_by_class(iEnt, g_sEntClassName)) > 0)
        if(!is_nullent(iEnt))
            set_entvar(iEnt, var_flags, FL_KILLME);
}

public CSGameRules_DeathNotice_Post(const iVictim) {
    new ArmorType:iArmorType;
    new iArmor = rg_get_user_armor(iVictim, iArmorType);

    if(!iArmor || iArmorType == ARMOR_NONE)
        return;

    static iEnt;
    iEnt = rg_create_entity("armoury_entity");

    if(is_nullent(iEnt))
        return;

    static Float:fOrigin[3];
    get_entvar(iVictim, var_origin, fOrigin);
    
    engfunc(EngFunc_SetOrigin, iEnt, fOrigin);
    engfunc(EngFunc_SetModel, iEnt, g_sEntModel);
    engfunc(EngFunc_SetSize, iEnt, Float:{-23.160000, -13.660000, -0.050000}, Float:{11.470000, 12.780000, 6.720000});

    set_entvar(iEnt, var_classname, g_sEntClassName);
    set_entvar(iEnt, var_armorvalue, iArmor);
    set_entvar(iEnt, var_armortype, iArmorType);
    set_entvar(iEnt, var_solid, SOLID_TRIGGER);
    set_entvar(iEnt, var_movetype, MOVETYPE_TOSS);

    SetTouch(iEnt, "Kevlar_Touch");
}

public Kevlar_Touch(iEnt, iPlayer) {
    if(is_nullent(iEnt) || !is_user_alive(iPlayer))
        return;

    new ArmorType:iEntArmorType = get_entvar(iEnt, var_armortype);
    new iEntArmor = floatround(Float:get_entvar(iEnt, var_armorvalue));
    new iArmor = rg_get_user_armor(iPlayer);

    if(iArmor >= 100)
        return;

    rg_set_user_armor(iPlayer, clamp((iArmor + iEntArmor), 0, 100), iEntArmorType);
    client_print(iPlayer, print_center, "You Got +%d Armor", iArmor);

    set_entvar(iEnt, var_flags, FL_KILLME);
}
 
Сообщения
46
Реакции
5
так правильно будет

Код:
#include <amxmodx>
#include <reapi>
#include <engine>

new const g_sEntClassName[] = "classname_kevlar";
new cvar_plugin_enabled, cvar_shining_enabled, cvar_msg_enabled;

public plugin_init() {
    register_plugin("AMXX - Death Armor Drop", "1.1b", "Alejandro-.");
    RegisterHookChain(RG_CSGameRules_RestartRound, "RG_StartRound", false);
    register_touch(g_sEntClassName, "player", "fw_TouchKevlar");
    register_event("DeathMsg", "DeathMsg", "a");
    cvar_plugin_enabled = register_cvar("amx_droparmor", "1");
    cvar_shining_enabled = register_cvar("amx_kevlar_shining", "0");
    cvar_msg_enabled = register_cvar("amx_armor_msg", "1");
}
public RG_StartRound() {
    if (get_pcvar_num(cvar_plugin_enabled) == 1) {
        new iEnt = 0;
        while ((iEnt = rg_find_ent_by_class(iEnt, g_sEntClassName)) > 0) {
            remove_entity(iEnt);
        }
    }
}
public DeathMsg() {
    if (get_pcvar_num(cvar_plugin_enabled) == 1) {
        new index = read_data(1);
        new victim = read_data(2);
        if (!is_user_connected(index) || !is_user_connected(victim)) return;
        new ArmorType:iArmorType;
        new iArmor = rg_get_user_armor(victim, iArmorType);
        if (iArmorType == ARMOR_NONE) return;
        if (!iArmor) return;
        static Float:fOrigin[3];
        get_entvar(victim, var_origin, fOrigin);
        createKevlarWeapon(fOrigin, iArmorType, iArmor);
    }
}
stock createKevlarWeapon(Float:fOrigin[3], ArmorType:iArmorType, iArmor) {
    new iEnt = rg_create_entity("armoury_entity");
    if (!iEnt) return;
    fOrigin[2] -= 36;
    set_entvar(iEnt, var_classname, g_sEntClassName);
    set_entvar(iEnt, var_origin, fOrigin);
    set_entvar(iEnt, var_armorvalue, iArmor);
    set_entvar(iEnt, var_armortype, iArmorType);
    entity_set_model(iEnt, "models/w_kevlar.mdl");
    set_entvar(iEnt, var_solid, SOLID_BBOX);
    set_entvar(iEnt, var_movetype, MOVETYPE_FLY);
    entity_set_size(iEnt, Float:{ -23.160000, -13.660000, -0.050000 }, Float:{ 11.470000, 12.780000, 6.720000 });
    drop_to_floor(iEnt);
    if (get_pcvar_num(cvar_shining_enabled) == 1) {
        rg_set_user_rendering(iEnt, kRenderFxGlowShell, Float:{ 255.0, 255.0, 255.0 }, kRenderFxNone, 27.0);
    }
}
public fw_TouchKevlar(iEnt, index) {
    if (!is_user_alive(index)) return PLUGIN_HANDLED;
    new ArmorType:iEntArmorType = get_entvar(iEnt, var_armortype);
    new iEntArmor = any:get_entvar(iEnt, var_armorvalue);
    new iArmor = rg_get_user_armor(index);
    if (iArmor >= 100) return PLUGIN_HANDLED;
    rg_set_user_armor(index, clamp((iArmor + iEntArmor), 0, 100), iEntArmorType);
    if (get_pcvar_num(cvar_msg_enabled) == 1) {
        client_print(index, print_center, "You Got +%i Armor", iArmor);
    }
    remove_entity(iEnt);
    return PLUGIN_HANDLED;
}
stock rg_set_user_rendering(const pPlayer, const iFx, const Float:flColor[3] = { 0.0, 0.0, 0.0 }, const iRender, const Float:flAmount) {
    set_entvar(pPlayer, var_renderfx, iFx);
    set_entvar(pPlayer, var_rendercolor, flColor);
    set_entvar(pPlayer, var_rendermode, iRender);
    set_entvar(pPlayer, var_renderamt, flAmount);
}

/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
 *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 *\\ {\\ \\ rtf1\\ \\ ansi\\ \\ deff0\\ {\\ \\ fonttbl\\ {\\ \\ f0\\ \\ fnil Tahoma;\\ }\\ }\n\\ par \\ \\ viewkind4\\ \\ uc1\\ \\ pard\\ \\ lang1049\\ \\ f0\\ \\ fs16 *\\ \\ \\ {\\ \\ \\ \\ rtf1\\ \\ \\ \\ ansi\\ \\ \\ \\ deff0\\ \\ \\ {\\ \\ \\ \\ fonttbl\\ \\ \\ {\\ \\ \\ \\ f0\\ \\ \\ \\ fnil Tahoma;\\ \\ \\ }\\ \\ \\ }\n\\ par \\ \\ par \\ \\ \\ \\ viewkind4\\ \\ \\ \\ uc1\\ \\ \\ \\ pard\\ \\ \\ \\ lang1049\\ \\ \\ \\ f0\\ \\ \\ \\ fs16 \n\\ par \\ \\ par \\ \\ \\ \\ par \\ \\ \\ }\n\\ par \\ \\ par \\ }\n\\ par }
 */
 
Сообщения
336
Реакции
414
Помог
7 раз(а)
Vaqtincha, неплохой вариант, особенно то, что нет тача. Но лично мое мнение, лучше "очищать" кастомные энтити в CleanUpMap, чем RestartRound
 
Сообщения
46
Реакции
5
Не тестировал

Код:
#include <amxmodx>
#include <fakemeta>
#include <reapi>

new const g_sEntClassName[] = "classname_kevlar";
new const g_sEntModel[] = "models/w_kevlar.mdl";

public plugin_init() {
    register_plugin("Death Armor Drop", "0.0.1", "Albertio");

    RegisterHookChain(RG_CSGameRules_CleanUpMap, "CSGameRules_CleanUpMap_Post", true);
    RegisterHookChain(RG_CSGameRules_DeathNotice, "CSGameRules_DeathNotice_Post", true);
}

public CSGameRules_CleanUpMap_Post() {
    new iEnt = NULLENT;
       
    while((iEnt = rg_find_ent_by_class(iEnt, g_sEntClassName)) > 0)
        if(!is_nullent(iEnt))
            set_entvar(iEnt, var_flags, FL_KILLME);
}

public CSGameRules_DeathNotice_Post(const iVictim) {
    new ArmorType:iArmorType;
    new iArmor = rg_get_user_armor(iVictim, iArmorType);

    if(!iArmor || iArmorType == ARMOR_NONE)
        return;

    static iEnt;
    iEnt = rg_create_entity("armoury_entity");

    if(is_nullent(iEnt))
        return;

    static Float:fOrigin[3];
    get_entvar(iVictim, var_origin, fOrigin);
   
    engfunc(EngFunc_SetOrigin, iEnt, fOrigin);
    engfunc(EngFunc_SetModel, iEnt, g_sEntModel);
    engfunc(EngFunc_SetSize, iEnt, Float:{-23.160000, -13.660000, -0.050000}, Float:{11.470000, 12.780000, 6.720000});

    set_entvar(iEnt, var_classname, g_sEntClassName);
    set_entvar(iEnt, var_armorvalue, iArmor);
    set_entvar(iEnt, var_armortype, iArmorType);
    set_entvar(iEnt, var_solid, SOLID_TRIGGER);
    set_entvar(iEnt, var_movetype, MOVETYPE_TOSS);

    SetTouch(iEnt, "Kevlar_Touch");
}

public Kevlar_Touch(iEnt, iPlayer) {
    if(is_nullent(iEnt) || !is_user_alive(iPlayer))
        return;

    new ArmorType:iEntArmorType = get_entvar(iEnt, var_armortype);
    new iEntArmor = floatround(Float:get_entvar(iEnt, var_armorvalue));
    new iArmor = rg_get_user_armor(iPlayer);

    if(iArmor >= 100)
        return;

    rg_set_user_armor(iPlayer, clamp((iArmor + iEntArmor), 0, 100), iEntArmorType);
    client_print(iPlayer, print_center, "You Got +%d Armor", iArmor);

    set_entvar(iEnt, var_flags, FL_KILLME);
}
не работает, совместим с "Lie Flat Optimized" ,но по моему когда у игрока нету брони оно свиоравно создаёт кевлар на полу

Код:
#include <amxmodx>
#include <fakemeta>
#include <reapi>

new const g_sEntClassName[] = "classname_kevlar";
new const g_sEntModel[] = "models/w_kevlar.mdl";

public plugin_init() {
    register_plugin("Death Armor Drop", "0.0.1", "Albertio");

    RegisterHookChain(RG_CSGameRules_CleanUpMap, "CSGameRules_CleanUpMap_Post", true);
    RegisterHookChain(RG_CSGameRules_DeathNotice, "CSGameRules_DeathNotice_Post", true);
}

public CSGameRules_CleanUpMap_Post() {
    new iEnt = NULLENT;
        
    while((iEnt = rg_find_ent_by_class(iEnt, g_sEntClassName)) > 0)
        if(!is_nullent(iEnt))
            set_entvar(iEnt, var_flags, FL_KILLME);
}

public CSGameRules_DeathNotice_Post(const iVictim) {
    new ArmorType:iArmorType;
    new iArmor = rg_get_user_armor(iVictim, iArmorType);

    if(!iArmor || iArmorType == ARMOR_NONE)
        return;

    static iEnt;
    iEnt = rg_create_entity("armoury_entity");

    if(is_nullent(iEnt))
        return;

    static Float:fOrigin[3];
    get_entvar(iVictim, var_origin, fOrigin);
    
    engfunc(EngFunc_SetOrigin, iEnt, fOrigin);
    engfunc(EngFunc_SetModel, iEnt, g_sEntModel);
    engfunc(EngFunc_SetSize, iEnt, Float:{-23.160000, -13.660000, -0.050000}, Float:{11.470000, 12.780000, 6.720000});

    set_entvar(iEnt, var_classname, g_sEntClassName);
    set_entvar(iEnt, var_armorvalue, iArmor);
    set_entvar(iEnt, var_armortype, iArmorType);
    set_entvar(iEnt, var_solid, SOLID_TRIGGER);
    set_entvar(iEnt, var_movetype, MOVETYPE_TOSS);

    SetTouch(iEnt, "Kevlar_Touch");
}

public Kevlar_Touch(iEnt, iPlayer) {
    if(is_nullent(iEnt) || !is_user_alive(iPlayer))
        return;

    new ArmorType:iEntArmorType = get_entvar(iEnt, var_armortype);
    new iEntArmor = floatround(Float:get_entvar(iEnt, var_armorvalue));
    new iArmor = rg_get_user_armor(iPlayer);

    if(iArmor >= 100)
        return;

    rg_set_user_armor(iPlayer, clamp((iArmor + iEntArmor), 0, 100), iEntArmorType);
    set_hudmessage(255, 255, 255, -1.0, 0.20, 0, 2.0, 2.0, 0.0, 0.0, 4);
    show_hudmessage(iPlayer, "You Got +%i Armor", iArmor);
   //client_print(iPlayer, print_center, "You Got +%d Armor", iArmor);
    set_entvar(iEnt, var_flags, FL_KILLME);
}
 

Download all Attachments

Сообщения
676
Реакции
578
Предупреждения
8
Помог
9 раз(а)
Albertio, А лично для меня нет особой разницы тк CleanUpMap вызывается с RestartRound

PS: Да страшно подумать как раньше без этого "полезного" хука жили и кодили 😂
 
Сообщения
1,055
Реакции
212
Предупреждения
9
Помог
6 раз(а)
Vaqtincha, никак) и щас можно увидеть через одно место делают
 
Сообщения
594
Реакции
350
Предупреждения
1
Помог
9 раз(а)
Shadowless, когда я был основателем на своем проекте, те, кто наглели, получали бан
:hunter:
 
Сообщения
676
Реакции
578
Предупреждения
8
Помог
9 раз(а)
Shadowless, мы же скинули насколько решений. А в чем проблема то?
 
Сообщения
336
Реакции
414
Помог
7 раз(а)
Shadowless, если мне не изменяет память, мы тебе ничего не обязаны. К тому же мы тебе уже дали много вариантов. Извини меня, но из за наглости я точно не буду помогать.
 
Сообщения
46
Реакции
5
Shadowless, если мне не изменяет память, мы тебе ничего не обязаны. К тому же мы тебе уже дали много вариантов. Извини меня, но из за наглости я точно не буду помогать.
у тебя с логикой проблема дорогой , где ты видишь наглость ? может хорошо прочтёшь и увидишь слово - PLEASE ?
 
Сообщения
365
Реакции
9
Помог
5 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
у тебя с логикой проблема дорогой , где ты видишь наглость ? может хорошо прочтёшь и увидишь слово - PLEASE ?
Начнём с первого у каждого человека своё восприятие этого мира, если его мышление отличается от твоего, это не значит что у него проблема с логикой, во вторых темболее он был вежлив с тобой и человек произнёс "извинения", а это уже о много говорит о воспитание и желание уйти без конфликта на хорошей ноте, в третьих ты сейчас показываешь себя невежливым по отношению к нему, просишь помощи, и сам наступаешь на свой грабли, создаёшь дискуссию, слышал старую поговорку "не кусай руку которая тебя кормит". И так же ребята по возможности дали свой ответы, и у каждого свой дела, может у кого семья, дети, отношения с девушкой, имей терпение, гляди может завтра кто другой отписал бы тебе, тебя же никто не говорит "иди нафиг отсюда, че пришёл?", к тебе с уважением отнеслись , а ты как мальчишка 16 летний, "у тебя что не так с логикой начал ему писать?" ну что за ерунда надо же совесть иметь человеческую, а не разговаривать так, если ты считаешь себя умней других, мой совет: промолчи, ты же один фиг не пойдёшь ему морду бить? Так какой смысл создавать ситуаций, из которой никто не хочет слышать и слушать, самый лучший вариант, когда нету возможности что бы человек шел тебе на встречу в диалоги, самому отойти в сторону😉
 
Сообщения
46
Реакции
5
Shadowless, мы же скинули насколько решений. А в чем проблема то?
только этот совместим с твоим плагинам
28 Май 2023
Начнём с первого у каждого человека своё восприятие этого мира, если его мышление отличается от твоего, это не значит что у него проблема с логикой, во вторых темболее он был вежлив с тобой и человек произнёс "извинения", а это уже о много говорит о воспитание и желание уйти без конфликта на хорошей ноте, в третьих ты сейчас показываешь себя невежливым по отношению к нему, просишь помощи, и сам наступаешь на свой грабли, создаёшь дискуссию, слышал старую поговорку "не кусай руку которая тебя кормит". И так же ты ребята по возможности дали свой ответы, и у каждого свой дела, может у кого семья, дети, отношения с девушкой, имей терпение, гляди может завтра кто другой отписал бы тебе, тебя же никто не говорит "иди нафиг отсюда, че пришёл?", к тебе с уважением отнеслись , а ты как мальчишка 16 летний, "у тебя что не так с логикой начал ему писать?" ну что за ерунда надо же совесть иметь человеческую, а не разговаривать так , если ты считаешь себя умней других, мой совет: промолчи, ты же один фиг не пойдёшь ему морду бить? Так какой смысл создавать ситуаций, из которой никто не хочет слышать и слушать, самый лучший вариант, когда нету возможности что бы человек шел тебе на встречу в диалоги, самому отойти в сторону
1, просьба не наглость
2, он не извинялся
3, а зачем извиняться он ничево плахова не сделал
4, он проста дважды игнариравал мои REPLY
5. мог проста сказать не помогу и всё
6. и плз не нада мне тут пудрить мазги о логики и о вежливости... GOOD BYE...
 
Статус
В этой теме нельзя размещать новые ответы.

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

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