Русское сообщество по скриптингу

DM не возроздаються игроки или остаются мертвыми  [Решено]

Все вопросы по работе и настройке AMXX и его плагинов.

Модератор: liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только вопросов по AMX Mod X и его плагинам.

DM не возроздаються игроки или остаются мертвыми  [Решено]

Сообщение Печенька » 04 янв 2017, 17:25

Добрый день. Ребят есть ли решение, данной проблемы Вы должны зарегистрироваться, чтобы видеть ссылки. первый пункт. Казалось, что вот этот плагин должен вести себя иначе, но все тот же баг. Решение которое предложили в вышеупомянутой теме результата не дал. :(
Код: Выделить всё
#include amxmodx
#include hamsandwich
#include func_core

#define PL_NAME                            "Deathmatch"
#define PL_VERSION                        "0.0.1 Reload"
#define PL_AUTHOR                        "OverGame"

#define PL_TIME_SPAWN                    5.0                        //Время, через которое спавнить игрока (после смерти).
#define PL_TASK_SPAWN                    1990                    //Индекс задачи для спавна игрока (client+ид).

public plugin_init() {
    register_plugin( PL_NAME, PL_VERSION, PL_AUTHOR );
    RegisterHam( Ham_Killed, "player", "Ham_PlayerKilled_Post", true );
}

public Ham_PlayerKilled_Post( victim )
    if( fc_user_connected( victim ) ) set_task( PL_TIME_SPAWN, "Func_UserSpawn", victim+PL_TASK_SPAWN );
    
public client_disconnect
( client ) remove_task( client+PL_TASK_SPAWN );

public Func_UserSpawn( client ) {
    client -= PL_TASK_SPAWN;
    if( !fc_user_connected( client ) || fc_user_alive( client ) ) return PLUGIN_CONTINUE;
    if( fc_get_user_team( client ) == CS_TEAM_T || fc_get_user_team( client ) == CS_TEAM_CT )
        ExecuteHamB( Ham_CS_RoundRespawn, client );
    return PLUGIN_CONTINUE;
}

Может, есть более стабильный плагин? К сожалению я не нашел. Или какое нибудь другое решение.
Буду рад любой помощи, может есть информация которую, можно почитать. Одним словом заранее спасибо.
Аватара пользователя
Печенька
 
Сообщения: 26
Зарегистрирован: 09 фев 2016, 16:13
Благодарил (а): 11 раз.
Поблагодарили: 1 раз.

Re: DM не возроздаються игроки или остаются мертвыми

Сообщение Печенька » 10 янв 2017, 19:08

Данный плагин исправил вышеупомянутую ситуацию.
Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <hamsandwich>

#define TASK_PLAYER_RESPAWN 865537

new     g_iKnifeDM,              g_iTime_Respawn,             g_iMessage_Mode,
        g_iMessage_Time,         g_iRadio_Check,              g_iLogo_Check,
        g_iFonarik_Check,         g_iGiveHealth_Enable,        g_iGiveHealth,         
        g_iGiveHealth_Hs
,         g_iHealth_All,                g_iHealth_Max,
        g_iSpawn_Protect,        g_iSpawn_Protect_Time,         g_iStrip_Wpns;

#pragma semicolon 1
public plugin_init()
{
    register_plugin("KnifeDM Mod", "1.0", "ShaTalKiN");
    
    RegisterHam
(Ham_Killed, "player", "Ham_PlayerKilled", 1);
    RegisterHam(Ham_Spawn, "player", "Ham_PlayerSpawn", 1);
    
    register_clcmd
("radio1",   "RadioCheck");
    register_clcmd("radio2",   "RadioCheck");
    register_clcmd("radio3",   "RadioCheck");
    
    register_impulse
(201,        "LogoCheck");
    register_impulse(100,        "FonarikCheck");
    
    RegisterCvars
();
    
    new szConfigsDir
[64];
    get_configsdir(szConfigsDir, 63);
    server_cmd("exec %s/knifedm_mod.cfg", szConfigsDir);
    register_dictionary("knifedm_mod.txt");
}

public Ham_PlayerSpawn(id)
{
    if(!is_user_connected(id)) return;
    
    if
(get_pcvar_num(g_iKnifeDM))
    {
        if(task_exists(id+TASK_PLAYER_RESPAWN)) remove_task(id+TASK_PLAYER_RESPAWN);
        if(get_pcvar_num(g_iStrip_Wpns))
        {
            fm_strip_user_weapons(id, 1);
            fm_give_item(id, "weapon_knife");
        }
        if(get_pcvar_num(g_iSpawn_Protect))
        {
            fm_set_user_godmode(id, 1);
            switch(get_user_team(id))
            {
                case 1: fm_set_user_rendering(id, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 0);
                case 2: fm_set_user_rendering(id, kRenderFxGlowShell, 0, 0, 255, kRenderNormal, 0);
            }
            set_task(get_pcvar_float(g_iSpawn_Protect_Time), "DisableProtect", id);
        }
    }
}

public DisableProtect(id)
{
    if(!is_user_connected(id)) return;
    
    fm_set_user_godmode
(id, 0);
    fm_set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 0);
}

public Ham_PlayerKilled(iVictim, iAttacker)
{
    if(get_pcvar_num(g_iKnifeDM))
    {
        set_task(get_pcvar_float(g_iTime_Respawn), "Respawn", iVictim+TASK_PLAYER_RESPAWN, _,_, "b");
        
        if
(get_user_team(iAttacker) == 1 && get_user_team(iVictim) == 2 || get_user_team(iAttacker) == 2 && get_user_team(iVictim) == 1)
        {
            if(get_pcvar_num(g_iGiveHealth_Enable))
            {
                if(get_pcvar_num(g_iGiveHealth_Enable) == 1)
                {
                    if(get_pdata_int(iVictim, 75, 5) != HIT_HEAD)
                    {
                        set_pev(iAttacker, pev_health, pev(iAttacker, pev_health) + get_pcvar_float(g_iGiveHealth));
                        set_task(0.1, "CheckHealth", iAttacker);
                    }
                    if(get_pdata_int(iVictim, 75, 5) == HIT_HEAD)
                    {
                        set_pev(iAttacker, pev_health, pev(iAttacker, pev_health) + get_pcvar_float(g_iGiveHealth_Hs));
                        set_task(0.1, "CheckHealth", iAttacker);
                    }
                }
                if(get_pcvar_num(g_iGiveHealth_Enable) == 2)
                {
                    set_pev(iAttacker, pev_health, get_pcvar_float(g_iHealth_All));
                }
            }
        }
    }
}
    
        
public client_putinserver
(id)
{
    if(get_pcvar_num(g_iKnifeDM))
    {
        set_task(get_pcvar_float(g_iTime_Respawn), "Respawn", id+TASK_PLAYER_RESPAWN, _,_, "b");
        if(get_pcvar_num(g_iMessage_Mode))
        {
            set_task(get_pcvar_float(g_iMessage_Time), "MessageModInfo", id);
        }
    }
}

public client_disconnect(id) if(task_exists(id+TASK_PLAYER_RESPAWN)) remove_task(id+TASK_PLAYER_RESPAWN);

public Respawn(id)
{
    id -= TASK_PLAYER_RESPAWN;
    if(!is_user_alive(id))
    {
        switch(get_user_team(id)) 
        
{
            case 1,2:
            {
                ExecuteHam(Ham_CS_RoundRespawn, id);
                if(task_exists(id+TASK_PLAYER_RESPAWN)) remove_task(id+TASK_PLAYER_RESPAWN);
            }
        }
    }
}

public MessageModInfo(id)
{
    ChatColor(id, "%L", id, "KNIFEDM_INFO_1");
    ChatColor(id, "%L", id, "KNIFEDM_INFO_2");
}

public RadioCheck(id)
{
    if(get_pcvar_num(g_iKnifeDM))
    {
        if(!get_pcvar_num(g_iRadio_Check))
        {
            ChatColor(id, "%L", id, "KNIFEDM_MESSAGE_RADIO");
            return PLUGIN_HANDLED;
        }
    }
    return PLUGIN_CONTINUE;
}

public LogoCheck(id)
{
    if(get_pcvar_num(g_iKnifeDM))
    {
        if(!get_pcvar_num(g_iLogo_Check))
        {
            ChatColor(id, "%L", id, "KNIFEDM_MESSAGE_LOGO");
            return PLUGIN_HANDLED;
        }
    }
    return PLUGIN_CONTINUE;
}

public FonarikCheck(id)
{
    if(get_pcvar_num(g_iKnifeDM))
    {
        if(!get_pcvar_num(g_iFonarik_Check))
        {
            ChatColor(id, "%L", id, "KNIFEDM_MESSAGE_FONARIK");
            return PLUGIN_HANDLED;
        }
    }
    return PLUGIN_CONTINUE;
}

public CheckHealth(id)
{
    new const szDisableMapTypes[][] = {"35hp_", "35h", "35"};
    new szMapname[32];
    get_mapname(szMapname, charsmax(szMapname));
    for(new i; i < sizeof szDisableMapTypes; i++)
    if(equali(szMapname, szDisableMapTypes[i], strlen(szDisableMapTypes[i])))
    {
        if(get_user_health(id) > get_pcvar_float(g_iHealth_Max))
        {
            set_pev(id, pev_health, get_pcvar_float(g_iHealth_Max));
        }
   }
}

public RegisterCvars()
{
    g_iKnifeDM                = register_cvar("knfdm_enable",                 "1");
    g_iTime_Respawn            = register_cvar("knfdm_time_respawn",             "1.0");
    g_iMessage_Mode         = register_cvar("knfdm_message_mode",             "1");
    g_iMessage_Time            = register_cvar("knfdm_message_time",             "20.0");
    g_iRadio_Check            = register_cvar("knfdm_radio_enable",             "0");
    g_iLogo_Check            = register_cvar("knfdm_logo_enable",             "0");
    g_iFonarik_Check        = register_cvar("knfdm_fonarik_enable",         "0");
    g_iGiveHealth_Enable    = register_cvar("knfdm_give_hp_enable",         "1");
    g_iGiveHealth            = register_cvar("knfdm_give_hp",                 "5.0");
    g_iGiveHealth_Hs        = register_cvar("knfdm_give_hp_hs",             "10.0");
    g_iHealth_All            = register_cvar("knfdm_hp_all",                    "35.0");
    g_iHealth_Max            = register_cvar("knfdm_max_hp",                 "35.0");
    g_iSpawn_Protect        = register_cvar("knfdm_spawn_protect",             "1");
    g_iSpawn_Protect_Time    = register_cvar("knfdm_spawn_protect_time",     "2.0");
    g_iStrip_Wpns            = register_cvar("knfdm_strip_user_wpn",            "1");
}

stock ChatColor(const id, const input[], any:...)
{
    new count = 1, players[32];
    static msg[191];
    vformat(msg, 190, input, 3);
    replace_all(msg, 190, "!g", "^4");
    replace_all(msg, 190, "!y", "^1");
    replace_all(msg, 190, "!t", "^3"); 
    if
(id)players[0] = id; else get_players(players, count, "ch");
    {
        for (new i = 0; i < count; i++)
        {
            if (is_user_connected(players[i]))
            {
                message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
                write_byte(players[i]);
                write_string(msg);
                message_end();
            }
        }
    }
}

public fm_set_user_rendering(pPlayer, iRenderFx, iRed, iGreen, iBlue, iRenderMode, iRenderAmt)
{
    new Float:flRenderColor[3];
    flRenderColor[0] = float(iRed);
    flRenderColor[1] = float(iGreen);
    flRenderColor[2] = float(iBlue);
    set_pev(pPlayer, pev_renderfx, iRenderFx);
    set_pev(pPlayer, pev_rendercolor, flRenderColor);
    set_pev(pPlayer, pev_rendermode, iRenderMode);
    set_pev(pPlayer, pev_renderamt, float(iRenderAmt));
}

stock fm_strip_user_weapons(pPlayer, iType = 0)
{
    static iEntity, iszWeaponStrip = 0;
    if(iszWeaponStrip || (iszWeaponStrip = engfunc(EngFunc_AllocString, "player_weaponstrip"))) iEntity = engfunc(EngFunc_CreateNamedEntity, iszWeaponStrip);
    if(!pev_valid(iEntity)) return 0;
    if(iType && get_user_weapon(pPlayer) != CSW_KNIFE) engclient_cmd(pPlayer, "weapon_knife");
    dllfunc(DLLFunc_Spawn, iEntity);
    dllfunc(DLLFunc_Use, iEntity, pPlayer);
    engfunc(EngFunc_RemoveEntity, iEntity);
    return 1;
}

stock fm_give_item(id, const szItem[])
{
    new iEntity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, szItem));
    if(!pev_valid(iEntity)) return 0;
    new Float:vecOrigin[3];
    pev(id, pev_origin, vecOrigin);
    set_pev(iEntity, pev_origin, vecOrigin);
    set_pev(iEntity, pev_spawnflags, pev(iEntity, pev_spawnflags) | SF_NORESPAWN);
    dllfunc(DLLFunc_Spawn, iEntity);
    new iSolid = pev(iEntity, pev_solid);
    dllfunc(DLLFunc_Touch, iEntity, id);
    if(pev(iEntity, pev_solid) == iSolid)
    {
        engfunc(EngFunc_RemoveEntity, iEntity);
        return -1;
    }
    return iEntity;
}

stock fm_set_user_godmode(index, godmode = 0)
{
    set_pev(index, pev_takedamage, godmode == 1 ? DAMAGE_NO : DAMAGE_AIM);
    return 1;
}
Аватара пользователя
Печенька
 
Сообщения: 26
Зарегистрирован: 09 фев 2016, 16:13
Благодарил (а): 11 раз.
Поблагодарили: 1 раз.


Вернуться в Вопросы по AMXX и его плагинам

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1