Страница 1 от 1

HNS Block Return 0.1

Публикувано на: 06 Апр 2017, 10:38
от Misz
Автор: Garey

Описание:
  • Плъгин, създаден за Hide'N'Seek модове.
  • Олекотен до максимално по моите възможности.
  • Не позволява Т играч да блокира CT играч, ако CT играчът е поел повече от 49 damage след блока.
Какво всъщност прави плъгинът?
  • Ако CT играчът е скочил върху T играч и е поел повече от 49 damage, той бива върнат на мястото от което е скочил по интересен начин.

ВАЖНА ИНФОРМАЦИЯ:
  • Текущият плъгин създава проблеми под ReHLDS платформи.
Changelog:
  • Версия 0.1 - Основа и създаване.
Бъдещи промени:
  • Добавяне на cvar и звук за контролиране на поетият damage и на звука.
  • Очакам предложения
Начин на инсталация:
  • Файлът antiblock.sma отива в папката scripting и оттам го компилирате локално. След това го инсталирате, премествате компилирания файл в папката plugins и пишете името му в plugins.ini.
Изтегляне:
antiblock.rar
(1.48 KiB) Свалено 420 пъти
antiblock.rar
(1.48 KiB) Свалено 420 пъти

Re: HNS Block Return 0.1

Публикувано на: 06 Апр 2017, 13:38
от OciXCrom
Правило №2: Забранено е качването на компилирани плъгини, тоест .amxx файлове. Когато качвате плъгин във форума, предоставяйте само .sma файла/кода и нужните ресурси. Изключение се прави при заявките, поточно когато трябва да се даде линк към друг сайт, който може да съдържа .amxx файл.**
Моля, премахни .amxx файла от архива, както и в другата ти тема.
Ти ли си правил плъгина?

Re: HNS Block Return 0.1

Публикувано на: 06 Апр 2017, 21:04
от Huehue
Мисля, че не се толерира тук представянето на чужд труд като твой. Плъгина е руски и го има в нета, качен от друг човек.

Код за потвърждение: Избери целия код

/*
 *
 * HNS Block Return
 *
 * Copyright 2016 Garey <[email protected]>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 * MA 02110-1301, USA.
 *
 *
 */
 
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
 
new Array:g_arFlPlayerOrigin[33]
new Array:g_arFlPlayerAngle[33]
new bool:g_bIsTouched[33];
new bool:g_bIsBlocked[33];
new iToucher[33];
new g_iMaxPlayers;
new cvarFX;
 
public plugin_precache()
{
    precache_sound("ambience/rewind.wav")
}
 
public plugin_init()
{
    register_plugin("Block Return", "0.1", "Garey");
 
    cvarFX = register_cvar("hns_block_fx", "1");
 
    g_iMaxPlayers = get_maxplayers();
 
    for(new i = 1; i <= g_iMaxPlayers; i++)
    {
        g_arFlPlayerOrigin[i] = ArrayCreate(3);
        g_arFlPlayerAngle[i] = ArrayCreate(3);
    }
 
    RegisterHam( Ham_Player_PreThink, "player", "fwd_PlayerPreThink", 0 );
    RegisterHam( Ham_Touch, "player", "fwd_TouchPlayer", 0 );
    RegisterHam( Ham_TakeDamage, "player", "Ham_TakeDamagePlayer" );
}
 
public fwd_TouchPlayer( id, entity )
{
    if( get_user_team( id ) != 2 || !is_user_alive( entity ))
        return;
 
    if( get_user_team( entity ) != 1 )
        return;
 
    new flVelocity[3]
    pev(id, pev_velocity, flVelocity);
    // Check if player was in Air
    if(flVelocity[2] != 0.0)
    {
        g_bIsTouched[id] = true;
        iToucher[id] = entity;
    }
}
 
 
public Ham_TakeDamagePlayer(iVictim, iInflictor, iAttacker, Float:flDamage, iDamageBits)
{
    if( is_user_alive(iVictim) && flDamage >= 50.0 && iDamageBits & DMG_FALL )
    {
        if( get_user_team(iVictim) == 2 )
        {
            if(g_bIsTouched[iVictim] && is_user_alive(iToucher[iVictim]))
            {
                iToucher[iVictim] = 0;
                g_bIsBlocked[iVictim] = true;
                if(get_pcvar_num(cvarFX))
                emit_sound(iVictim, CHAN_AUTO, "ambience/rewind.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
                set_pev(iVictim, pev_movetype, MOVETYPE_NOCLIP)
                return HAM_SUPERCEDE;
            }
        }
    }
    return HAM_IGNORED;
}
 
public fwd_PlayerPreThink( id )
{
    static flPlayerOrigin[3], flPlayerAngles[3], LastFrames[33]
 
    if(is_user_alive(id))
    {
        if(!g_bIsBlocked[id])
        {
            pev(id, pev_origin, flPlayerOrigin);
            pev(id, pev_v_angle, flPlayerAngles);
 
            if((pev(id, pev_flags) & FL_ONGROUND) || pev(id, pev_movetype) == MOVETYPE_FLY)
            {
                if(LastFrames[id] > 10)
                {
                    g_bIsTouched[id] = false;
                    ArrayClear(g_arFlPlayerOrigin[id]);
                    ArrayClear(g_arFlPlayerAngle[id]);
                    LastFrames[id] = 0;
                }
                else
                {
                    ArrayPushArray(g_arFlPlayerOrigin[id], flPlayerOrigin);
                    ArrayPushArray(g_arFlPlayerAngle[id], flPlayerAngles);
                    LastFrames[id]++;
                }
            }
            else
            {
                ArrayPushArray(g_arFlPlayerOrigin[id], flPlayerOrigin);
                ArrayPushArray(g_arFlPlayerAngle[id], flPlayerAngles);
            }
        }
        else
        {
            new Length = ArraySize(g_arFlPlayerOrigin[id])-1;
 
            if(Length)
            {
                ArrayGetArray(g_arFlPlayerOrigin[id], Length, flPlayerOrigin);
                ArrayGetArray(g_arFlPlayerAngle[id], Length, flPlayerAngles);
 
                ArrayDeleteItem(g_arFlPlayerOrigin[id], Length);
                ArrayDeleteItem(g_arFlPlayerAngle[id], Length);
 
                set_pev(id, pev_origin, flPlayerOrigin)
                set_pev(id, pev_angles, flPlayerAngles)
                set_pev(id, pev_fixangle, 1)
            }
            else
            {
                set_pev(id,pev_movetype,MOVETYPE_WALK)
                set_pev(id,pev_velocity,Float:{0.0,0.0,0.0})
                set_pev(id,pev_flags,pev(id,pev_flags)|FL_DUCKING)
                g_bIsBlocked[id] = false;
            }
        }
    }
    else
    {
        LastFrames[id] = 0;
    }
}