• Пожалуйста, создайте название темы отражающее ее смысл
  • Для ускорения решения Вашего вопроса заполните обязательные поля и подробно опишите возникшую проблему

Помощь Падение сервера

Статус
В этой теме нельзя размещать новые ответы.
Если хотите открыть тему, нажмите кнопку Жалоба в первом сообщении.

Evgen

Участник
Сообщения
33
Реакции
4
Баллы
8
Всем привет. Прошу помощи, не могу понять уже принцип, при мгновенном убийстве сервер идёт в ребут с ошибкой (map "deathrun_arctic") IndexOfEdict: bad entity
На покаубрал эту функцию, падений нет.
C++:
#include < amxmodx >
#include < reapi >
#include < dhudmessage >
#include < fakemeta >
#include <hamsandwich>
#include < dr_mode >

#define GAME_NAME    "Шпион"
#define PERCENT_HEALTH 50
#define MG_KILL    20.0

new hash, Float: sOrigins[3], HookChain:gSpawned, gTrace, tId, Float: gKill;

public plugin_init(){
    register_plugin("DR:Game Spy", "1.0", "PAffAEJIkA :3");
    
    hash = dr_reg_game(GAME_NAME);
    DisableHookChain(gSpawned = RegisterHookChain(RG_CBasePlayer_Spawn, "PlayerSpawned", 1));
    
    new iEnt = rg_find_ent_by_class(-1, "info_player_start");
    get_entvar(iEnt, var_origin, sOrigins);
}   

public DR_Games(id, gameid){
    if(hash == gameid){
        dr_set_gameid(hash);
        
        dr_set_button(false);
        dr_set_bhop(true);
        dr_set_block(hash, 4);
        
        EnableHookChain(gSpawned);
        gTrace = register_forward(FM_TraceLine, "fw_TraceLine_Post", 0);
        
        tId = id;
        start_game();
    }
}

public DR_StopGame(gameid){
    if(hash == gameid){
        DisableHookChain(gSpawned);
        unregister_forward(FM_TraceLine, gTrace);
        
        set_invis(tId, false);
        dr_set_active_shop(tId, true);
        tId = false;
    }
}

public start_game(){
    new players[32], count;
    get_players(players, count, "ach");
    
    new szHealth = (count - 1) * PERCENT_HEALTH;
    set_entvar(tId, var_health, float(szHealth));
    
    for(new i = 0, player, TeamName: gTeam; i < count; i ++){
        player = players[i];
        gTeam = get_member(player, m_iTeam);
        
        if(gTeam != TEAM_CT)
            continue;
        
        give_weapon(player);
    }
    
    set_invis(tId, true);
    set_entvar(tId, var_origin, sOrigins);
    dr_set_active_shop(tId, false);
    
    gKill = 0.0;
    
    set_dhudmessage(random_num(100, 255), random_num(100, 255), random_num(100, 255), -1.0, 0.25, 0, 6.0, 8.0, 1.0, 1.5);
    show_dhudmessage(0, "На базу КТ попал шпион!");
}


public fw_TraceLine_Post (Float:v1[3], Float:v2[3], noMonsters, id){
    if(id != tId)
        return HC_CONTINUE;
    
    client_print(id, print_center, "Мгновенное убийство[E]: %s", gKill == 0.0 ? "Доступно" : "Недоступно");
    
    if(gKill > 0.0){
        if(gKill < get_gametime())
            gKill = 0.0;
        else
            return HC_CONTINUE;
    }
    
    if(~pev(id, pev_button) & IN_USE)
        return HC_CONTINUE;

    new tHit = get_tr(TR_pHit);
    if(!(1 <= tHit < 33) || !is_user_alive(tHit))
        return HC_CONTINUE;
    
    gKill = get_gametime() + MG_KILL;
    ExecuteHamB(Ham_Killed, tHit, id, 2);
    
    return HC_CONTINUE;
}

public PlayerSpawned(id)
    give_weapon(id);

set_invis(id, status){
    if(status){
        set_entvar(id, var_rendermode, kRenderFxGlowShell);
        set_entvar(id, var_renderamt, 0);
    }else{
        set_entvar(id, var_rendermode, kRenderNormal);
        set_entvar(id, var_renderamt, 100);
    }
    set_entvar(id, var_rendercolor, {0.0, 0.0, 0.0});
    set_entvar(id, var_renderfx, kRenderFxGlowShell);
}

give_weapon(id){
    if(!is_user_alive(id))
        return;
    
    rg_give_item(id, "weapon_usp", GT_APPEND);
    rg_set_user_bpammo(id, WeaponIdType:CSW_USP, 200);
}
 
Diff:
- new tHit = get_tr(TR_pHit);
+ new tHit = get_tr2(0, TR_pHit);
 
Evgen, Ночью и не понятно ничего.. Завтра глянем
 
C++:
#include < amxmodx >
#include < reapi >
#include < dhudmessage >
#include < fakemeta >
#include <hamsandwich>
#include < dr_mode >

#define GAME_NAME    "Шпион"
#define PERCENT_HEALTH 50
#define MG_KILL    20.0

new hash, Float: sOrigins[3], HookChain:gSpawned, gTrace, tId, Float: gKill;

public plugin_init(){
    register_plugin("DR:Game Spy", "1.0", "PAffAEJIkA :3");
    
    hash = dr_reg_game(GAME_NAME);
    DisableHookChain(gSpawned = RegisterHookChain(RG_CBasePlayer_Spawn, "PlayerSpawned", 1));
    
    new iEnt = rg_find_ent_by_class(-1, "info_player_start");
    get_entvar(iEnt, var_origin, sOrigins);
}   

public DR_Games(id, gameid){
    if(hash == gameid){
        dr_set_gameid(hash);
        
        dr_set_button(false);
        dr_set_bhop(true);
        dr_set_block(hash, 4);
        
        EnableHookChain(gSpawned);
        gTrace = register_forward(FM_TraceLine, "fw_TraceLine_Post", 1);
        
        tId = id;
        start_game();
    }
}

public DR_StopGame(gameid){
    if(hash == gameid){
        DisableHookChain(gSpawned);
        unregister_forward(FM_TraceLine, gTrace);
        
        set_invis(tId, false);
        dr_set_active_shop(tId, true);
        tId = false;
    }
}

public start_game(){
    new players[32], count;
    get_players(players, count, "ach");
    
    new szHealth = (count - 1) * PERCENT_HEALTH;
    set_entvar(tId, var_health, float(szHealth));
    
    for(new i = 0, player, TeamName: gTeam; i < count; i ++){
        player = players[i];
        gTeam = get_member(player, m_iTeam);
        
        if(gTeam != TEAM_CT)
            continue;
        
        give_weapon(player);
    }
    
    set_invis(tId, true);
    set_entvar(tId, var_origin, sOrigins);
    dr_set_active_shop(tId, false);
    
    gKill = 0.0;
    
    set_dhudmessage(random_num(100, 255), random_num(100, 255), random_num(100, 255), -1.0, 0.25, 0, 6.0, 8.0, 1.0, 1.5);
    show_dhudmessage(0, "На базу КТ попал шпион!");
}


public fw_TraceLine_Post (Float:v1[3], Float:v2[3], noMonsters, id, tr){
    if(id != tId)
        return HC_CONTINUE;
    
    client_print(id, print_center, "Мгновенное убийство[E]: %s", gKill == 0.0 ? "Доступно" : "Недоступно");
    
    if(gKill > 0.0){
        if(gKill < get_gametime())
            gKill = 0.0;
        else
            return HC_CONTINUE;
    }
    
    if(~pev(id, pev_button) & IN_USE)
        return HC_CONTINUE;

    new tHit = get_tr2(tr, TR_pHit);
    if(!(1 <= tHit < 33) || !is_user_alive(tHit))
        return HC_CONTINUE;
    
    gKill = get_gametime() + MG_KILL;
    ExecuteHamB(Ham_Killed, tHit, id, 2);
    
    return HC_CONTINUE;
}

public PlayerSpawned(id)
    give_weapon(id);

set_invis(id, status){
    if(status){
        set_entvar(id, var_rendermode, kRenderFxGlowShell);
        set_entvar(id, var_renderamt, 0);
    }else{
        set_entvar(id, var_rendermode, kRenderNormal);
        set_entvar(id, var_renderamt, 100);
    }
    set_entvar(id, var_rendercolor, {0.0, 0.0, 0.0});
    set_entvar(id, var_renderfx, kRenderFxGlowShell);
}

give_weapon(id){
    if(!is_user_alive(id))
        return;
    
    rg_give_item(id, "weapon_usp", GT_APPEND);
    rg_set_user_bpammo(id, WeaponIdType:CSW_USP, 200);
}
 
Статус
В этой теме нельзя размещать новые ответы.
Если хотите открыть тему, нажмите кнопку Жалоба в первом сообщении.
Назад
Сверху