Поиск Дистанция к бомбплейсу

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
1,543
Реакции
1,543
Предупреждения
1
Помог
2 раз(а)
Когда-то находил я такой плагин,который показывает через стены спрайт,где находится бомбплейс.
Не знаю,как там определяется это все в каждой карте.
Наверное отдельно ставят на каждую карту эти метки для вывода спрайта.

Созрела одна реализация,с которой можно провернуть благодаря этому плагину
 
Сообщения
75
Реакции
82
Помог
6 раз(а)
Не благодари )
Код:
#include <amxmodx>
#include <fakemeta>
#include <reapi>
#include <xs>

new SpriteCode = 1337;

new const SPRITE_MODEL[] = "sprites/bomb.spr";
new const SPRITE_COLOR[3] = { 255, 255, 0 };

const Float: SPRITE_WALL_OFFSET = 10.0;
const Float: SPRITE_SCALE = 0.3;
const Float: SPRITE_SCALE_UNIT = 0.0005;
const Float: UNITS_TO_METER = 40.0;

public plugin_init()
{ 
    new iBombPlace = NULLENT;
    while ((iBombPlace = rg_find_ent_by_class(iBombPlace, "func_bomb_target")))
    {
        CreateSprite(iBombPlace);
    }
  
    register_forward(FM_AddToFullPack, "AddToFullPack", true);
}

public plugin_precache()
{
    precache_model(SPRITE_MODEL);
}

public AddToFullPack(iState, iE, iEntity, iHost, iHostFlags, iPlayer, pSet)
{
    if(get_entvar(iEntity, var_chain) != SpriteCode)
        return;

    static iTrace;

    static Float: flFraction;
    static Float: flDistance;
    static Float: flScale;
    static Float: flFov;
    static Float: flFrame;

    static Float: vecStart[3];
    static Float: vecEnd[3];
    static Float: vecViewOfs[3];
    static Float: vecViewAngle[3];
    static Float: vecEndPos[3];

    iTrace = create_tr2();

    get_entvar(iHost, var_origin, vecStart);
    get_entvar(iEntity, var_origin, vecEnd);
    get_entvar(iHost, var_view_ofs, vecViewOfs);
    get_entvar(iHost, var_v_angle, vecViewAngle);
    get_entvar(iHost, var_fov, flFov);

    engfunc(EngFunc_TraceLine, vecStart, vecEnd, IGNORE_MONSTERS, iEntity, iTrace);

    xs_vec_sub(vecStart, vecEnd, vecStart);

    flFrame = xs_vec_len(vecStart) / UNITS_TO_METER;

    get_entvar(iHost, var_origin, vecStart);
    get_entvar(iEntity, var_origin, vecEnd);

    vecStart[2] += vecViewOfs[2];

    engfunc(EngFunc_TraceLine, vecStart, vecEnd, IGNORE_MONSTERS, iHost, iTrace);
    get_tr2(0, TR_flFraction, flFraction);
  
    get_tr2(iTrace, TR_vecEndPos, vecEndPos);
    get_tr2(iTrace, TR_vecPlaneNormal, vecEnd);
      
    xs_vec_mul_scalar(vecEnd, SPRITE_WALL_OFFSET, vecEnd);
    xs_vec_add(vecEnd, vecEndPos, vecEnd);

    flDistance = get_distance_f(vecStart, vecEnd);

    free_tr2(iTrace);

    flScale = SPRITE_SCALE + (SPRITE_SCALE_UNIT * flDistance);

    set_es(iState, ES_Origin, vecEnd);
    set_es(iState, ES_Frame, flFrame);
    set_es(iState, ES_Scale, flScale);
    set_es(iState, ES_RenderColor, SPRITE_COLOR);
    set_es(iState, ES_MoveType, MOVETYPE_TOSS);
}

CreateSprite(iBombPlace)
{
    if (is_nullent(iBombPlace))
        return NULLENT;
  
    new Float:fMaxs[3];    get_entvar(iBombPlace, var_absmax, fMaxs);
    new Float:fMins[3];    get_entvar(iBombPlace, var_absmin, fMins);
    new Float: vecOrigin[3];
  
    vecOrigin[0] = (fMins[0] + fMaxs[0]) * 0.5;
    vecOrigin[1] = (fMins[1] + fMaxs[1]) * 0.5;
    vecOrigin[2] = (fMins[2] + fMaxs[2]) * 0.5;
  
    new iSprite = rg_create_entity("env_sprite", true);

    if(is_nullent(iSprite))
        return NULLENT;
  
    engfunc(EngFunc_SetModel, iSprite, SPRITE_MODEL);
    engfunc(EngFunc_SetOrigin, iSprite, vecOrigin);

    SetEntityRender(iSprite, kRenderFxNoDissipation, Float: { 0.0, 0.0, 0.0 }, kRenderGlow, 255.0);

    set_entvar(iSprite, var_chain, SpriteCode);
    set_entvar(iSprite, var_effects, get_entvar(iSprite, var_effects) | EF_FORCEVISIBILITY);

    return iSprite;
}

SetEntityRender(iEntity, iFx = kRenderFxNone, Float: flColor[3] = { 255.0, 255.0, 255.0 }, iRender = kRenderNormal, Float: flAmount = 16.0)
{
    set_entvar(iEntity, var_renderfx, iFx);
    set_entvar(iEntity, var_rendercolor, flColor);
    set_entvar(iEntity, var_rendermode, iRender);
    set_entvar(iEntity, var_renderamt, flAmount);
}
1686990566437.png
 

Download all Attachments

Последнее редактирование:
Сообщения
1,543
Реакции
1,543
Предупреждения
1
Помог
2 раз(а)
Ого.Спасибо всем 👍
 
Сообщения
1,543
Реакции
1,543
Предупреждения
1
Помог
2 раз(а)
Уже сделал это )

Что я вообще задумал.
Если тебя не затруднит,сделай что-бы спрайт отображался только когда бомба установлена и показывался на соответствующимся бомбплейсе.
И отображался спрайт только КТ
Для Т - отображать спрайт дистацию от брошенной бомбы на земле
Даже лучше с цветом вот так
от 255 метров к 100 - красный спрайт
от 100 метров к 50 - желтый спрайт
от 50 метров к 1 - зелёный спрайт
Что-бы спрайт не мешал потом возле бомбы,меньше 1 метра - то лучше вообще не показывать его ( а то оно скорее всего будет мешать при дефузе ).
Отошел на 1 метр от бомбы - заново показывать его
Взрыв - ну тут понятно
Я думаю нет нужны постоянно показывать эти спрайты,даже когда бомба не установлена ( темболее за обеи команды )

Может это пригодится для других пользователей,а я в свою очередь докину это всё как обновление в Bomb Real Timer
Более того, поработаю возможно и над другим спрайтом ,а туда докину соответствующий значёк модели

Этот

Спасибо
И если можно, то без реапи версию

789.jpg
 
Последнее редактирование:
  • Нравится
Реакции: devl
Сообщения
775
Реакции
293
Помог
11 раз(а)
Кстати, я не проверял. Но...
Я находил в инете 2 плагина. 1 показывал, где находится бомбплейс, а второй зм подарки, который показывал , сколько осталось до подарка.

1 плагин использовал пресинк
2 плагин использовал фуллпак

Я не знаю, что там по нагрузке, но визуально, плагин на пресинке, будто лагает, т.е. обновление спрайта идёт не гладкое, в отличии от фулл пака. Хотя там тоже есть свои минусы. Проверял свой плагин на карте 2000 баксов. у меня плагин показывает, где выпал флаг. Там тоже было к чему докопаться.

Какой метод использовать для релиза я не знаю, но высказал то что замечал. Возможно это поможет.
18 Июн 2023
 
Статус
В этой теме нельзя размещать новые ответы.

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

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