Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Интервал между метанием гранат

Статус пользователя ssx
сообщение 19.6.2014, 14:18
Сообщение #1


Стаж: 12 лет

Сообщений: 2237
Благодарностей: 1343
Полезность: 836

Помогите написать плагин что бы бросать дымовые и флешки можно было с интервалом 15 секунд.

И что бы при респавне противника его не слепило первые 3 секунды.

Отредактировал: ssx, - 19.6.2014, 14:20


[Half-Life DM FFA] 78.152.169.100:27016
[CS 1.6 GunGame] 78.152.169.100:27018
[CS 1.6 DM AIM] 78.152.169.100:27017
[CS 1.6 DM FFA] 78.152.169.100:27015
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Bloo
сообщение 19.6.2014, 14:25
Сообщение #2


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

ssx, чем помочь то? :)
Может у вас наработки какие то есть, мысли. А то пока темы выглядит как "Напишите мне плагин"....
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 19.6.2014, 14:30
Сообщение #3


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

помочь написать или же написать за тебя?
самый простой способ - отловить момент использования гранаты, поменять оружие и блокировать смену оружия на гранату
так-то по большой части гораздо проще поставить уже готовый плагин, который блокирует покупку гранат более чем 1/2/1 (это если для паблика)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
letsplayer
сообщение 19.6.2014, 15:18
Сообщение #4
Стаж: 13 лет

Сообщений: 215
Благодарностей: 35
Полезность: 0

Держи, только тут обычная граната, подставь флэш вместо нее.
Код:
#include <amxmodx> 
#include <csx>
#include <hamsandwich>
#include <fakemeta>

#define PLUGIN "HeBlock"
#define VERSION "2.1"
#define AUTHOR "FromTheFuture"


const XO_CBASEPLAYERITEM = 4;
const m_pPlayer = 41;

const XO_CBASEPLAYERWEAPON = 4;
const m_flNextPrimaryAttack = 46;

new Float: g_fNextThrowTime[33];
new g_CvarTime;

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
g_CvarTime = register_cvar("amx_he_blocktime", "15.0");
RegisterHam( Ham_Weapon_PrimaryAttack, "weapon_hegrenade", "OnCHEGrenade_PrimaryAttack", false );
}

public OnCHEGrenade_PrimaryAttack( pEntity )
{
new id = get_pdata_cbase( pEntity , m_pPlayer , XO_CBASEPLAYERITEM );
new Float:flWaitTime = g_fNextThrowTime[id] - get_gametime();

if( flWaitTime > 0.0 )
{
client_print(id, print_center, "Please, wait %d seconds", floatround(flWaitTime));
return HAM_SUPERCEDE;
}
return HAM_IGNORED;
}

public grenade_throw(id, gid, wid)
{
if(wid == CSW_HEGRENADE)
{
g_fNextThrowTime[id] = get_gametime() + get_pcvar_float(g_CvarTime);
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя ssx
сообщение 19.6.2014, 16:36
Сообщение #5


Стаж: 12 лет

Сообщений: 2237
Благодарностей: 1343
Полезность: 836

Цитата(letsplayer @ 19.6.2014, 15:18) *
Держи, только тут обычная граната, подставь флэш вместо нее.
Скрытый текст
Код:
#include <amxmodx> 
#include <csx>
#include <hamsandwich>
#include <fakemeta>

#define PLUGIN "HeBlock"
#define VERSION "2.1"
#define AUTHOR "FromTheFuture"


const XO_CBASEPLAYERITEM = 4;
const m_pPlayer = 41;

const XO_CBASEPLAYERWEAPON = 4;
const m_flNextPrimaryAttack = 46;

new Float: g_fNextThrowTime[33];
new g_CvarTime;

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
g_CvarTime = register_cvar("amx_he_blocktime", "15.0");
RegisterHam( Ham_Weapon_PrimaryAttack, "weapon_hegrenade", "OnCHEGrenade_PrimaryAttack", false );
}

public OnCHEGrenade_PrimaryAttack( pEntity )
{
new id = get_pdata_cbase( pEntity , m_pPlayer , XO_CBASEPLAYERITEM );
new Float:flWaitTime = g_fNextThrowTime[id] - get_gametime();

if( flWaitTime > 0.0 )
{
client_print(id, print_center, "Please, wait %d seconds", floatround(flWaitTime));
return HAM_SUPERCEDE;
}
return HAM_IGNORED;
}

public grenade_throw(id, gid, wid)
{
if(wid == CSW_HEGRENADE)
{
g_fNextThrowTime[id] = get_gametime() + get_pcvar_float(g_CvarTime);
}
}



Спасибо огромное!!!

Цитата(Bloo @ 19.6.2014, 14:25) *
ssx, чем помочь то? :)
Может у вас наработки какие то есть, мысли. А то пока темы выглядит как "Напишите мне плагин"....


Мысль была только одна - надо отлов гранаты делать и как-то её блокировать .

Вам не зря показалось что "выглядит как "Напишите мне плагин"...." - так оно и есть.



[Half-Life DM FFA] 78.152.169.100:27016
[CS 1.6 GunGame] 78.152.169.100:27018
[CS 1.6 DM AIM] 78.152.169.100:27017
[CS 1.6 DM FFA] 78.152.169.100:27015
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ssx
сообщение 19.6.2014, 16:47
Сообщение #6


Стаж: 12 лет

Сообщений: 2237
Благодарностей: 1343
Полезность: 836

Цитата(letsplayer @ 19.6.2014, 15:18) *
Держи, только тут обычная граната, подставь флэш вместо нее.
Скрытый текст
Код:
#include <amxmodx> 
#include <csx>
#include <hamsandwich>
#include <fakemeta>

#define PLUGIN "HeBlock"
#define VERSION "2.1"
#define AUTHOR "FromTheFuture"


const XO_CBASEPLAYERITEM = 4;
const m_pPlayer = 41;

const XO_CBASEPLAYERWEAPON = 4;
const m_flNextPrimaryAttack = 46;

new Float: g_fNextThrowTime[33];
new g_CvarTime;

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
g_CvarTime = register_cvar("amx_he_blocktime", "15.0");
RegisterHam( Ham_Weapon_PrimaryAttack, "weapon_hegrenade", "OnCHEGrenade_PrimaryAttack", false );
}

public OnCHEGrenade_PrimaryAttack( pEntity )
{
new id = get_pdata_cbase( pEntity , m_pPlayer , XO_CBASEPLAYERITEM );
new Float:flWaitTime = g_fNextThrowTime[id] - get_gametime();

if( flWaitTime > 0.0 )
{
client_print(id, print_center, "Please, wait %d seconds", floatround(flWaitTime));
return HAM_SUPERCEDE;
}
return HAM_IGNORED;
}

public grenade_throw(id, gid, wid)
{
if(wid == CSW_HEGRENADE)
{
g_fNextThrowTime[id] = get_gametime() + get_pcvar_float(g_CvarTime);
}
}


Если я хочу дымовые и флешки метать с интервалом то мне надо написать вот так две строчки сразу?

Код
    RegisterHam( Ham_Weapon_PrimaryAttack, "weapon_flashbang", "OnCHEGrenade_PrimaryAttack", false );
    RegisterHam( Ham_Weapon_PrimaryAttack, "weapon_smokegrenade", "OnCHEGrenade_PrimaryAttack", false );


Отредактировал: ssx, - 19.6.2014, 16:47


[Half-Life DM FFA] 78.152.169.100:27016
[CS 1.6 GunGame] 78.152.169.100:27018
[CS 1.6 DM AIM] 78.152.169.100:27017
[CS 1.6 DM FFA] 78.152.169.100:27015
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
letsplayer
сообщение 19.6.2014, 16:49
Сообщение #7
Стаж: 13 лет

Сообщений: 215
Благодарностей: 35
Полезность: 0

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

#define PLUGIN "HeBlock"
#define VERSION "2.1"
#define AUTHOR "FromTheFuture"


const XO_CBASEPLAYERITEM = 4;
const m_pPlayer = 41;

const XO_CBASEPLAYERWEAPON = 4;
const m_flNextPrimaryAttack = 46;

new Float: g_fNextThrowTime[33];
new g_CvarTime;

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
g_CvarTime = register_cvar("amx_he_blocktime", "15.0");
RegisterHam( Ham_Weapon_PrimaryAttack, "weapon_flashbang", "OnCHEGrenade_PrimaryAttack", false );
RegisterHam( Ham_Weapon_PrimaryAttack, "weapon_smokegrenade", "OnCHEGrenade_PrimaryAttack", false );
}

public OnCHEGrenade_PrimaryAttack( pEntity )
{
new id = get_pdata_cbase( pEntity , m_pPlayer , XO_CBASEPLAYERITEM );
new Float:flWaitTime = g_fNextThrowTime[id] - get_gametime();

if( flWaitTime > 0.0 )
{
client_print(id, print_center, "Please, wait %d seconds", floatround(flWaitTime));
return HAM_SUPERCEDE;
}

g_fNextThrowTime[id] = get_gametime() + get_pcvar_float(g_CvarTime);
return HAM_IGNORED;
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
trollface
сообщение 20.6.2014, 7:23
Сообщение #8
Стаж: 12 лет

Сообщений: 1970
Благодарностей: 2423
Полезность: 0

letsplayer,
а что тут делает #include <csx>? ну и фейкмету можно заменить просто на new id = read_data(1)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Safety1st
сообщение 20.6.2014, 8:38
Сообщение #9
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Цитата(trollface @ 20.6.2014, 9:23) *
а что тут делает #include <csx>?

Обеспечивает форвард grenade_throw.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
trollface
сообщение 20.6.2014, 8:43
Сообщение #10
Стаж: 12 лет

Сообщений: 1970
Благодарностей: 2423
Полезность: 0

letsplayer,
откуда вы его взяли?;)
Код:
const XO_CBASEPLAYERWEAPON = 4; 
const m_flNextPrimaryAttack = 46;

нигде не используются)))
я бы сделал так(просто причесал через широкую расческу:D):
Код:
#include <amxmodx>
#include <hamsandwich>

#define PLUGIN "HeBlock"
#define VERSION "2.1"
#define AUTHOR "FromTheFuture"

new Float: g_fNextThrowTime[33];
new g_CvarTime;

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
g_CvarTime = register_cvar("amx_he_blocktime", "15.0");
RegisterHam( Ham_Weapon_PrimaryAttack, "weapon_flashbang", "OnCHEGrenade_PrimaryAttack", false );
RegisterHam( Ham_Weapon_PrimaryAttack, "weapon_smokegrenade", "OnCHEGrenade_PrimaryAttack", false );
}

public OnCHEGrenade_PrimaryAttack( pEntity )
{
new id = read_data(1);
new Float:flWaitTime = g_fNextThrowTime[id] - get_gametime();

if( flWaitTime > 0.0 )
{
client_print(id, print_center, "Please, wait %d seconds", floatround(flWaitTime));
return HAM_SUPERCEDE;
}

g_fNextThrowTime[id] = get_gametime() + get_pcvar_float(g_CvarTime);
return HAM_IGNORED;
}


Отредактировал: trollface, - 20.6.2014, 8:44
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 20.6.2014, 8:48
Сообщение #11
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Цитата(trollface @ 20.6.2014, 10:43) *
new id = read_data(1)

Это глупость. И заменил ты не нативу fakemeta, а нативу Ham'а ;)
--

Код
const m_flNextPrimaryAttack = 46;

letsplayer, можно оригинальную версию плагина увидеть? Этот offset я бы выставлял на 1-2 секунды как антиспам.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
trollface
сообщение 20.6.2014, 9:00
Сообщение #12
Стаж: 12 лет

Сообщений: 1970
Благодарностей: 2423
Полезность: 0

Safety1st,
Цитата
Это глупость.

работает же...
Цитата
И заменил ты не нативу fakemeta, а нативу Ham'а ;)

бывает blush.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 20.6.2014, 9:23
Сообщение #13
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Цитата(trollface @ 20.6.2014, 11:00) *
работает же...

Не у тебя ли с серверами постоянно проблемы? ;)

Как же конкретно это 'работает'? Натива read_data() никак не относится к вызову Ham-форвардов. Она предназначена для применения только в функциях, регистрирующихся с помощью register_event() :
Скрытый текст
Код
/* Gets value from client messages.
* When you are asking for string the array and length is needed (read_data(2,name,len)).
* Integer is returned by function (new me = read_data(3)).
* Float is set in second parameter (read_data(3,value)). */
native read_data(value, any:... );

Код
static cell AMX_NATIVE_CALL read_data(AMX *amx, cell *params) /* 3 param */
{
    if (params[0] == 0)
    {
        return g_events.getCurrentMsgType();
    }
    
    switch (*params / sizeof(cell))
    {
        case 1:
            return g_events.getArgInteger(params[1]);
        case 3:
            return set_amxstring(amx, params[2], g_events.getArgString(params[1]), *get_amxaddr(amx, params[3]));
        default:
            cell *fCell = get_amxaddr(amx, params[2]);
            REAL fparam = (REAL)g_events.getArgFloat(params[1]);
            fCell[0] = amx_ftoc(fparam);
            return (int)fparam;
    }
}
Что возвращает 'правильный' индекс игрока на тестовом сервере с одним игроком - это просто совпадение.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
letsplayer
сообщение 20.6.2014, 18:36
Сообщение #14
Стаж: 13 лет

Сообщений: 215
Благодарностей: 35
Полезность: 0

Цитата(Safety1st @ 20.6.2014, 10:48) *
letsplayer, можно оригинальную версию плагина увидеть? Этот offset я бы выставлял на 1-2 секунды как антиспам.

Код:
set_pdata_float(pEntity, m_flNextPrimaryAttack, flWaitTime, XO_CBASEPLAYERWEAPON);

Думаю, разберешься.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: