Иконка ресурса

CS:GO Death Camera 1.0

Нет прав для скачивания
Сообщения
184
Реакции
316
Помог
1 раз(а)
perforator добавил(а) новый ресурс:

CS:GO Death Camera - Показывает вам убившего вас игрока (смотрите видео)

Приближает камеру к убившему вас игроку, тем самым, показывая его местоположение на момент убийства.


Узнать больше об этом ресурсе...
 
Последнее редактирование модератором:
Сообщения
2,144
Реакции
1,223
Помог
44 раз(а)
Паблик pfn_test, который, вероятнее всего, использовался для теста - нигде не используется. Думаю, стоит его убрать или допилить тест для дебага.
 
Сообщения
2,713
Реакции
2,993
Помог
59 раз(а)
perforator, в описании не отражена информация о изменениях от PERF1337 в отличии оригинального плагина.
 
Сообщения
2,291
Реакции
1,737
Помог
31 раз(а)
Было бы интересно дополнить плагин, а именно информацией в hud "вас убил *ник* у него осталось столько-то ХП" или больше вывести полную стату: расстояние, куда вы попали и т.д
 

d3m37r4

111111
Сообщения
1,420
Реакции
1,162
Помог
10 раз(а)
Код:
    new ent = create_entity("info_target")
    if(!is_valid_ent(ent))
    {
        client_print(id, print_chat, "Error create entity")
        return
    }
Только что созданная ентити может быть невалидной?
 
Сообщения
104
Реакции
-5
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
perforator, это будет полезно, если убили сбоку и сзади. Спереди нету неообходимости.
 
Сообщения
184
Реакции
316
Помог
1 раз(а)
g521, А если прострелили через стену?
 
Сообщения
104
Реакции
-5
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
perforator, для этого режим наблюдателей
 
Сообщения
104
Реакции
-5
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Minni, в режиме наблюд. вид от 1-го лица, а это просто приближает, когда не видно в дали (в тёмке), для близи он не нужен
 
Сообщения
2,144
Реакции
1,223
Помог
44 раз(а)
а это просто приближает, когда не видно в дали (в тёмке), для близи он не нужен
Не используйте, если не нужен. Плагин нацелен на перенос фишки из GO в 1.6, и этим все сказано.

Не устраивает текущая работа плагина - делайте под себя или заказывайте оплачиваемую работу.
 
Сообщения
271
Реакции
347
Помог
15 раз(а)
Добавил показ урона и хитов, т.е. как в CS:GO.

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

#define PLUGIN  "CSGO DEATH CAM"
#define VERSION "1.0"
#define AUTHOR  "Sugisaki"

#define CLASS     "ent_camara"

#define CAMERA_MODEL     "models/arcticorangeT.mdl"
#define CAMERA_MINS Float: { -10.0, -10.0, 0.0 }
#define CAMERA_MAXS Float: { 10.0, 10.0, 25.0 }

new killer[33]
new las_obs[33]
new play[33]

new Float:g_freeze_origin[33][33][3]
new g_freeze_sequence[33][33]
new g_freeze_frame[33][33]
new g_freeze_framerate[33][33]
new Float:g_freeze_angles[33][33][3]
new g_freeze_gaitsequence[33][33]
new g_freeze_weaponmodel[33][33]

new bool:g_bfreeze[33]

new Float:g_DamageStats[33][33]
new g_TraceStats[33][33]

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    register_clcmd("say /dcam", "pfn_cam")
    register_think(CLASS, "pfn_camera_think")
    register_event("DeathMsg", "pfn_death", "a")
    register_forward(FM_AddToFullPack, "AddToFullPack", 1)
    register_event("TextMsg", "pfn_unfreeze", "b", "2&#Spec_Mode")
    RegisterHam(Ham_Spawn, "player", "OnSpawnPlayer", 1)
    register_touch("player", CLASS, "OnTouchCamera")
    RegisterHookChain(RG_CBasePlayer_TakeDamage, "CBasePlayer_TakeDamage", true)
    RegisterHookChain(RG_CBasePlayer_TraceAttack, "CBasePlayer_TraceAttack", false)
}

public CBasePlayer_TraceAttack(victim, attacker, Float:flDamage, Float:vecDir[3], tracehandle, bitsDamageType)
{
    g_TraceStats[attacker][victim]++
}

public CBasePlayer_TakeDamage(victim, inflictor, attacker, Float:damage)
{
    g_DamageStats[attacker][victim] += damage
}

public plugin_precache()
{
    precache_model(CAMERA_MODEL)
}
pfn_SpawnCamera(id, target)
{
    if(!is_user_connected(target))
        return

    freeze_map(id)
    new ent = create_entity("info_target")
    if(!is_valid_ent(ent))
    {
        client_print(id, print_chat, "Error create entity")
        return
    }
    new Float:origin[3], Float:angles[3], Float:o2[3]
    entity_get_vector(target, EV_VEC_origin, o2)
    entity_get_vector(id, EV_VEC_origin, origin)
    //entity_get_vector(id, EV_VEC_v_angle, angles)
    //angles[0] = angles[0] * -1.0
    entity_set_model(ent, CAMERA_MODEL)
    entity_set_int(ent, EV_INT_movetype, MOVETYPE_NOCLIP)
    entity_set_string(ent, EV_SZ_classname, CLASS)
    entity_set_int(ent, EV_INT_solid, SOLID_TRIGGER)
    entity_set_vector(ent, EV_VEC_origin, origin)
    entity_set_vector(ent, EV_VEC_angles, angles)
    entity_set_edict(ent, EV_ENT_owner, id)
  
  
    //set aim
    entity_set_aim(ent, o2)
    // set speed
    set_speed(ent, calculate_speed(id, target), o2)
    //
    attach_view(id, ent);
    entity_set_float(ent, EV_FL_nextthink, halflife_time() + 0.001)
    set_task(1.5, "pfn_remove_ent", id)

    //PERF1337
    new target_name[MAX_PLAYERS]
    get_user_name(target, target_name, charsmax(target_name))
    set_dhudmessage(.red = 0, .green = 255, .blue = 0, .x = -1.0, .y = -1.0, .effects = 0,
    .fxtime = 1.5, .holdtime = 1.5, .fadeintime = 0.1, .fadeouttime = 0.2)
    show_dhudmessage(id, "%s^nDamage taken: %.0f in %d hits^nDamage given: %.0f in %d hits", target_name, g_DamageStats[target][id], g_TraceStats[target][id], g_DamageStats[id][target], g_TraceStats[id][target])
    client_print(id, print_console, "%s | Damage taken: %.0f in %d hits | Damage given: %.0f in %d hits", target_name, g_DamageStats[target][id], g_TraceStats[target][id], g_DamageStats[id][target], g_TraceStats[id][target])
    //
}
public pfn_remove_ent(id)
{
    remove_task(id)
    new ent = find_ent_by_owner(-1, CLASS, id)
    if(is_valid_ent(ent))
    {
        remove_entity(ent)
    }
    arrayset(g_DamageStats[id], 0, sizeof(g_DamageStats[]))
    arrayset(g_TraceStats[id], 0, sizeof(g_TraceStats[]))
}
public pfn_camera_think(e)
{
    if(!is_valid_ent(e))
    {
        return;
    }

    if(get_entity_distance(e, killer[entity_get_edict(e, EV_ENT_owner)]) < 100)
    {
        entity_set_vector(e, EV_VEC_velocity, Float:{0.0,0.0,0.0})
    }
    entity_set_float(e, EV_FL_nextthink, halflife_time() + 0.001)
}
public pfn_test(id)
{
    new players[32], count
    get_players(players, count, "ae", "TERRORIST")
    new t = players[random(count)];
    ExecuteHam(Ham_TakeDamage, id, t, t, 101.0, DMG_BULLET);
}
public pfn_cam(id)
{
    play[id] = !play[id]
    client_print(id, print_chat, "Death camera %sactivated", play[id] ? "":"de")
}
public pfn_death()
{
    new k = read_data(1)
    new v = read_data(2)
    if(!is_user_connected(k) || v == k)
    {
        return
    }
    if(!play[v]) return 
    killer[v] = k
    set_task(0.1, "dead_post", v)
}
public dead_post(id)
{
    set_pev(id, pev_iuser1, OBS_NONE)
    las_obs[id] = pev(id, pev_iuser1);
    pfn_SpawnCamera(id, killer[id])
}

public AddToFullPack(es, e, ent, host, hostflags, player, pSet)
{
    if(!player)
    {
        return
    }
    if(g_bfreeze[host])
    {
        set_es(es, ES_Angles, g_freeze_angles[host][ent])
        set_es(es, ES_Origin, g_freeze_origin[host][ent])
        set_es(es, ES_Sequence, g_freeze_sequence[host][ent])
        set_es(es, ES_Frame, g_freeze_framerate[host][ent])
        set_es(es, ES_FrameRate, g_freeze_framerate[host][ent])
        set_es(es, ES_GaitSequence, g_freeze_gaitsequence[host][ent])
        set_es(es, ES_WeaponModel, g_freeze_weaponmodel[host][ent])
    }
}

freeze_map(id)
{
    static szWM[60]
    for(new i = 1; i <= get_maxplayers() ; i++)
    {
        if(!is_user_connected(i))
        {
            continue;
        }
        entity_get_vector(i, EV_VEC_origin, g_freeze_origin[id][i])
        g_freeze_sequence[id][i] = entity_get_int(i, EV_INT_sequence)
        g_freeze_frame[id][i] = entity_get_int(id, EV_FL_frame)
        g_freeze_framerate[id][i] = entity_get_int(id, EV_FL_framerate)
        entity_get_vector(i, EV_VEC_angles, g_freeze_angles[id][i])
        g_freeze_gaitsequence[id][i] = entity_get_int(i, EV_INT_gaitsequence)
        entity_get_string(i, EV_SZ_weaponmodel, szWM, charsmax(szWM))
        g_freeze_weaponmodel[id][i] = engfunc(EngFunc_ModelIndex, szWM);
    }
    g_bfreeze[id] = true
}
public pfn_unfreeze(id)
{
    g_bfreeze[id] = false
    attach_view(id, id)
}
public client_putinserver(id)
{
    g_bfreeze[id] = false
    play[id] = true
    arrayset(g_DamageStats[id], 0, sizeof(g_DamageStats[]))
    arrayset(g_TraceStats[id], 0, sizeof(g_TraceStats[]))
}
public OnSpawnPlayer(id)
{
    if(!is_user_alive(id))
    {
        return
    }
    pfn_unfreeze(id)
}
stock Float:calculate_speed(u1, u2)
{
    return (float(get_entity_distance(u1, u2)) / 0.3)

}
public OnTouchCamera(ted, ter)
{
    new id = pev(ter, pev_owner)
    if(ted == killer[id])
    {
        entity_set_vector(ter, EV_VEC_velocity, Float:{0.0,0.0,0.0})
    }
}










// CHR ENGINE
stock entity_set_aim(ent,const Float:origin2[3],bone=0)
{
    if(!pev_valid(ent))
        return 0;

    static Float:origin[3]
    origin[0] = origin2[0]
    origin[1] = origin2[1]
    origin[2] = origin2[2]

    static Float:ent_origin[3], Float:angles[3]

    if(bone)
        engfunc(EngFunc_GetBonePosition,ent,bone,ent_origin,angles)
    else
        pev(ent,pev_origin,ent_origin)

    origin[0] -= ent_origin[0]
    origin[1] -= ent_origin[1]
    origin[2] -= ent_origin[2]

    static Float:v_length
    v_length = vector_length(origin)

    static Float:aim_vector[3]
    aim_vector[0] = origin[0] / v_length
    aim_vector[1] = origin[1] / v_length
    aim_vector[2] = origin[2] / v_length

    static Float:new_angles[3]
    vector_to_angle(aim_vector,new_angles)

    new_angles[0] *= -1

    if(new_angles[1]>180.0) new_angles[1] -= 360
    if(new_angles[1]<-180.0) new_angles[1] += 360
    if(new_angles[1]==180.0 || new_angles[1]==-180.0) new_angles[1]=-179.999999

    set_pev(ent,pev_angles,new_angles)
    set_pev(ent,pev_fixangle,1)

    return 1;
}
set_speed(ent, Float:speed, Float:origin[3])
{
    static Float:origin1[3]
    pev(ent,pev_origin,origin1)

    static Float:new_velo[3]

    new_velo[0] = origin[0] - origin1[0]
    new_velo[1] = origin[1] - origin1[1]
    new_velo[2] = origin[2] - origin1[2]

    new Float:y
    y = new_velo[0]*new_velo[0] + new_velo[1]*new_velo[1] + new_velo[2]*new_velo[2]

    new Float:x
    if(y) x = floatsqroot(speed*speed / y)

    new_velo[0] *= x
    new_velo[1] *= x
    new_velo[2] *= x

    if(speed<0.0)
    {
        new_velo[0] *= -1
        new_velo[1] *= -1
        new_velo[2] *= -1
    }

    set_pev(ent,pev_velocity,new_velo)
}

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

#define PLUGIN  "CSGO DEATH CAM"
#define VERSION "1.0"
#define AUTHOR  "Sugisaki"

#define CLASS     "ent_camara"

#define CAMERA_MODEL     "models/arcticorangeT.mdl"
#define CAMERA_MINS Float: { -10.0, -10.0, 0.0 }
#define CAMERA_MAXS Float: { 10.0, 10.0, 25.0 }

new killer[33]
new las_obs[33]
new play[33]

new Float:g_freeze_origin[33][33][3]
new g_freeze_sequence[33][33]
new g_freeze_frame[33][33]
new g_freeze_framerate[33][33]
new Float:g_freeze_angles[33][33][3]
new g_freeze_gaitsequence[33][33]
new g_freeze_weaponmodel[33][33]

new bool:g_bfreeze[33]

new Float:g_DamageStats[33][33]
new g_TraceStats[33][33]

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    register_clcmd("say /dcam", "pfn_cam")
    register_think(CLASS, "pfn_camera_think")
    register_event("DeathMsg", "pfn_death", "a")
    register_forward(FM_AddToFullPack, "AddToFullPack", 1)
    register_event("TextMsg", "pfn_unfreeze", "b", "2&#Spec_Mode")
    RegisterHam(Ham_Spawn, "player", "OnSpawnPlayer", 1)
    register_touch("player", CLASS, "OnTouchCamera")
    RegisterHam(Ham_TraceAttack, "player", "HamTraceAttack")
    RegisterHam(Ham_TakeDamage, "player", "HamTakeDamage")
}

public HamTraceAttack(victim, attacker, Float:damage, Float:dir[3], traceresult, dmgbits)
{
    g_TraceStats[attacker][victim]++
}

public HamTakeDamage(victim, inflictor, attacker, Float:damage)
{
    g_DamageStats[attacker][victim] += damage
}

public plugin_precache()
{
    precache_model(CAMERA_MODEL)
}
pfn_SpawnCamera(id, target)
{
    if(!is_user_connected(target))
        return

    freeze_map(id)
    new ent = create_entity("info_target")
    if(!is_valid_ent(ent))
    {
        client_print(id, print_chat, "Error create entity")
        return
    }
    new Float:origin[3], Float:angles[3], Float:o2[3]
    entity_get_vector(target, EV_VEC_origin, o2)
    entity_get_vector(id, EV_VEC_origin, origin)
    //entity_get_vector(id, EV_VEC_v_angle, angles)
    //angles[0] = angles[0] * -1.0
    entity_set_model(ent, CAMERA_MODEL)
    entity_set_int(ent, EV_INT_movetype, MOVETYPE_NOCLIP)
    entity_set_string(ent, EV_SZ_classname, CLASS)
    entity_set_int(ent, EV_INT_solid, SOLID_TRIGGER)
    entity_set_vector(ent, EV_VEC_origin, origin)
    entity_set_vector(ent, EV_VEC_angles, angles)
    entity_set_edict(ent, EV_ENT_owner, id)
  
  
    //set aim
    entity_set_aim(ent, o2)
    // set speed
    set_speed(ent, calculate_speed(id, target), o2)
    //
    attach_view(id, ent);
    entity_set_float(ent, EV_FL_nextthink, halflife_time() + 0.001)
    set_task(1.5, "pfn_remove_ent", id)

    //PERF1337
    new target_name[MAX_PLAYERS]
    get_user_name(target, target_name, charsmax(target_name))
    set_dhudmessage(.red = 0, .green = 255, .blue = 0, .x = -1.0, .y = -1.0, .effects = 0,
    .fxtime = 1.5, .holdtime = 1.5, .fadeintime = 0.1, .fadeouttime = 0.2)
    show_dhudmessage(id, "%s^nDamage taken: %.0f in %d hits^nDamage given: %.0f in %d hits", target_name, g_DamageStats[target][id], g_TraceStats[target][id], g_DamageStats[id][target], g_TraceStats[id][target])
    client_print(id, print_console, "%s | Damage taken: %.0f in %d hits | Damage given: %.0f in %d hits", target_name, g_DamageStats[target][id], g_TraceStats[target][id], g_DamageStats[id][target], g_TraceStats[id][target])
    //
}
public pfn_remove_ent(id)
{
    remove_task(id)
    new ent = find_ent_by_owner(-1, CLASS, id)
    if(is_valid_ent(ent))
    {
        remove_entity(ent)
    }
    arrayset(g_DamageStats[id], 0, sizeof(g_DamageStats[]))
    arrayset(g_TraceStats[id], 0, sizeof(g_TraceStats[]))
}
public pfn_camera_think(e)
{
    if(!is_valid_ent(e))
    {
        return;
    }

    if(get_entity_distance(e, killer[entity_get_edict(e, EV_ENT_owner)]) < 100)
    {
        entity_set_vector(e, EV_VEC_velocity, Float:{0.0,0.0,0.0})
    }
    entity_set_float(e, EV_FL_nextthink, halflife_time() + 0.001)
}
public pfn_test(id)
{
    new players[32], count
    get_players(players, count, "ae", "TERRORIST")
    new t = players[random(count)];
    ExecuteHam(Ham_TakeDamage, id, t, t, 101.0, DMG_BULLET);
}
public pfn_cam(id)
{
    play[id] = !play[id]
    client_print(id, print_chat, "Death camera %sactivated", play[id] ? "":"de")
}
public pfn_death()
{
    new k = read_data(1)
    new v = read_data(2)
    if(!is_user_connected(k) || v == k)
    {
        return
    }
    if(!play[v]) return 
    killer[v] = k
    set_task(0.1, "dead_post", v)
}
public dead_post(id)
{
    set_pev(id, pev_iuser1, OBS_NONE)
    las_obs[id] = pev(id, pev_iuser1);
    pfn_SpawnCamera(id, killer[id])
}

public AddToFullPack(es, e, ent, host, hostflags, player, pSet)
{
    if(!player)
    {
        return
    }
    if(g_bfreeze[host])
    {
        set_es(es, ES_Angles, g_freeze_angles[host][ent])
        set_es(es, ES_Origin, g_freeze_origin[host][ent])
        set_es(es, ES_Sequence, g_freeze_sequence[host][ent])
        set_es(es, ES_Frame, g_freeze_framerate[host][ent])
        set_es(es, ES_FrameRate, g_freeze_framerate[host][ent])
        set_es(es, ES_GaitSequence, g_freeze_gaitsequence[host][ent])
        set_es(es, ES_WeaponModel, g_freeze_weaponmodel[host][ent])
    }
}

freeze_map(id)
{
    static szWM[60]
    for(new i = 1; i <= get_maxplayers() ; i++)
    {
        if(!is_user_connected(i))
        {
            continue;
        }
        entity_get_vector(i, EV_VEC_origin, g_freeze_origin[id][i])
        g_freeze_sequence[id][i] = entity_get_int(i, EV_INT_sequence)
        g_freeze_frame[id][i] = entity_get_int(id, EV_FL_frame)
        g_freeze_framerate[id][i] = entity_get_int(id, EV_FL_framerate)
        entity_get_vector(i, EV_VEC_angles, g_freeze_angles[id][i])
        g_freeze_gaitsequence[id][i] = entity_get_int(i, EV_INT_gaitsequence)
        entity_get_string(i, EV_SZ_weaponmodel, szWM, charsmax(szWM))
        g_freeze_weaponmodel[id][i] = engfunc(EngFunc_ModelIndex, szWM);
    }
    g_bfreeze[id] = true
}
public pfn_unfreeze(id)
{
    g_bfreeze[id] = false
    attach_view(id, id)
}
public client_putinserver(id)
{
    g_bfreeze[id] = false
    play[id] = true
    arrayset(g_DamageStats[id], 0, sizeof(g_DamageStats[]))
    arrayset(g_TraceStats[id], 0, sizeof(g_TraceStats[]))
}
public OnSpawnPlayer(id)
{
    if(!is_user_alive(id))
    {
        return
    }
    pfn_unfreeze(id)
}
stock Float:calculate_speed(u1, u2)
{
    return (float(get_entity_distance(u1, u2)) / 0.3)

}
public OnTouchCamera(ted, ter)
{
    new id = pev(ter, pev_owner)
    if(ted == killer[id])
    {
        entity_set_vector(ter, EV_VEC_velocity, Float:{0.0,0.0,0.0})
    }
}










// CHR ENGINE
stock entity_set_aim(ent,const Float:origin2[3],bone=0)
{
    if(!pev_valid(ent))
        return 0;

    static Float:origin[3]
    origin[0] = origin2[0]
    origin[1] = origin2[1]
    origin[2] = origin2[2]

    static Float:ent_origin[3], Float:angles[3]

    if(bone)
        engfunc(EngFunc_GetBonePosition,ent,bone,ent_origin,angles)
    else
        pev(ent,pev_origin,ent_origin)

    origin[0] -= ent_origin[0]
    origin[1] -= ent_origin[1]
    origin[2] -= ent_origin[2]

    static Float:v_length
    v_length = vector_length(origin)

    static Float:aim_vector[3]
    aim_vector[0] = origin[0] / v_length
    aim_vector[1] = origin[1] / v_length
    aim_vector[2] = origin[2] / v_length

    static Float:new_angles[3]
    vector_to_angle(aim_vector,new_angles)

    new_angles[0] *= -1

    if(new_angles[1]>180.0) new_angles[1] -= 360
    if(new_angles[1]<-180.0) new_angles[1] += 360
    if(new_angles[1]==180.0 || new_angles[1]==-180.0) new_angles[1]=-179.999999

    set_pev(ent,pev_angles,new_angles)
    set_pev(ent,pev_fixangle,1)

    return 1;
}
set_speed(ent, Float:speed, Float:origin[3])
{
    static Float:origin1[3]
    pev(ent,pev_origin,origin1)

    static Float:new_velo[3]

    new_velo[0] = origin[0] - origin1[0]
    new_velo[1] = origin[1] - origin1[1]
    new_velo[2] = origin[2] - origin1[2]

    new Float:y
    y = new_velo[0]*new_velo[0] + new_velo[1]*new_velo[1] + new_velo[2]*new_velo[2]

    new Float:x
    if(y) x = floatsqroot(speed*speed / y)

    new_velo[0] *= x
    new_velo[1] *= x
    new_velo[2] *= x

    if(speed<0.0)
    {
        new_velo[0] *= -1
        new_velo[1] *= -1
        new_velo[2] *= -1
    }

    set_pev(ent,pev_velocity,new_velo)
}

 
Последнее редактирование:
Сообщения
3
Реакции
1
I'm sorry, Sugisaki is a friend, I design that code in my community, it bothers me to see a little that they did not give him credits.
 
Сообщения
9
Реакции
1
can i compile with 1.8.2 version of amxx ? and i can use this on server with 1.8.2 version ?
 

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

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