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

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

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

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

> Правила форума

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

Название темы должно соответствовать содержанию. Темы с названием типа "Помогите", "Вопрос", "парни подскажите..." - будут удалены.
Все темы, не относящиеся к "Вопросам по модам и плагинам", будут удалены или перемещены в соответствующий раздел.

Правила оформления темы:
1. Помимо заголовка не забудьте верно сформулировать свой вопрос.
2. Выложите исходник (в тег кода + ) или ссылку на плагин который вызывает у вас вопросы.
3. Выложите лог с ошибками (если имеется) под спойлер

Плагин Nice Dispenser

, Помогите сделать Bind кнопки.
urpok
сообщение 29.12.2013, 18:51
Сообщение #1
Стаж: 13 лет

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

Народ, всем привет, и с наступающим Новым 2014 годом !!!

Есть такой плагин: Nice Dispenser
По умолчанию, в нём команда (чтобы его построить) на кнопку "G", это очень не удобно. Стоит на сервере CSDM, если он (плагин) активный, то тогда блокируется кнопка "G" (нельзя выкидывать оружие), но при этом, срабатывает Bind постройки Dispenser
Хотел бы чтобы кто-нибудь понимающий, смог помочь и сделать:
- Отвязать кнопку "G"
- Сделать возможность при написании в чат /dispenser постройку его.
- Соответственно, чтобы можно было пользоваться Bind'ом ( bind "моя_кнопка" "say /dispenser")

По логике вещей, вроде как не трудно, правильно ? Или я ошибаюсь ? Есть знающие как это сделать ?

Спасибо.
Dispenser
#include < amxmodx >
#include < amxmisc >

#include < fakemeta >
#include < hamsandwich >
#include < cstrike >
#include < engine >
#include < fun >

#pragma semicolon 1

#define PLUGIN_VERSION "#1.0.1"
#define BREAK_COMPUTER 6
#define HUD_DELAYTIME 0.2

enum
{
STATUS_BUILDING,
STATUS_ACTIVE
};

new const gDamageSounds[ ][ ] =
{
"debris/metal1.wav",
"debris/metal2.wav",
"debris/metal3.wav"
};

new const gDispenserClassname[ ] = "NiceDispenser";

new const gDispenserActive[ ] = "buttons/button_1.wav";
new const gDispenserMdl[ ] = "models/dispenser.mdl";
new const gMetalGibsMdl[ ] = "models/comp_gibs.mdl";
new const gHealingSprite[ ] = "sprites/laserbeam.spr";

new gHealingBeam;
new gMetalGibs;
new gMaxPlayers;
new gHudSync;

new gCvarEnabled;
new gDispenserCost;
new gCvarDispenserHealth;
new gCvarBuildTime;
new gCvarReplenishRadius;
new gCvarSpinDispenser;
new gCvarMaxHealth;
new gCvarMaxArmor;

new Float:gDispenserOrigin[ 33 ][ 3 ];
new gBeamcolor[ 33 ][ 3 ];

new Float:flLastHudSent[ 33 ];
new Float:gDispenserHealthOff[ 33 ];

new bool:bDispenserBuild[ 33 ];

public plugin_init( )
{
register_plugin( "Build Dispenser", PLUGIN_VERSION, "Name_ND" );

register_event( "TextMsg", "EVENT_TextMsg", "a", "2&#Game_C", "2&#Game_w", "2&#Game_will_restart_in" );
register_logevent( "LOG_RoundEnd", 2, "1=Round_End" );

RegisterHam( Ham_TakeDamage, "info_target", "bacon_TakeDamage", 1 );
RegisterHam( Ham_TraceAttack, "info_target", "bacon_TraceAttack" );
RegisterHam( Ham_Player_PreThink, "player", "bacon_PreThink" );

register_think( gDispenserClassname, "DispenserThink" );
register_clcmd( "drop", "CommandDispenserBuild" );

gCvarEnabled = register_cvar( "dispenser_enabled", "1" );
gDispenserCost = register_cvar( "dispenser_cost", "12000" );
gCvarDispenserHealth = register_cvar( "dispenser_health", "2000" );
gCvarBuildTime = register_cvar( "dispenser_buildtime", "4" );
gCvarReplenishRadius = register_cvar( "dispenser_radius", "300" );
gCvarSpinDispenser = register_cvar( "dispenser_spin", "1" );
gCvarMaxHealth = register_cvar( "dispenser_playermax_health", "250" );
gCvarMaxArmor = register_cvar( "dispenser_playermax_armor", "150" );

gMaxPlayers = get_maxplayers( );
gHudSync = CreateHudSyncObj( );
}

public client_connect( id )
{
bDispenserBuild[ id ] = false;
}

public plugin_precache( )
{
gHealingBeam = precache_model( gHealingSprite );
gMetalGibs = precache_model( gMetalGibsMdl );

precache_model( gDispenserMdl );
precache_sound( gDispenserActive );

new i;
for( i = 0; i < sizeof gDamageSounds; i++ )
{
precache_sound( gDamageSounds[ i ] );
}
}

public CommandDispenserBuild( id )
{
if( !is_user_alive( id ) || get_pcvar_num( gCvarEnabled ) != 1 )
{
return PLUGIN_CONTINUE;
}

if( !( pev( id, pev_flags ) & FL_ONGROUND ) )
{
client_print( id, print_chat, "[Nice Dispenser] Раздатчик можно строить только на земле." );

return PLUGIN_HANDLED;
}

if( bDispenserBuild[ id ] == true )
{
client_print( id, print_chat, "[Nice Dispenser] Ты уже построил раздатчик НР. Построить можно только один." );

return PLUGIN_HANDLED;
}

new iMoney = cs_get_user_money( id );
new iCost = get_pcvar_num( gDispenserCost );

if( iMoney < iCost )
{
client_print( id, print_chat, "[Nice Dispenser] У тебя нет денег для постройки раздатчика. Стоимость [%d $]", iCost );

return PLUGIN_HANDLED;
}

new Float:flPlayerOrigin[ 3 ];
pev( id, pev_origin, flPlayerOrigin );

new Float:flHealth = float( get_pcvar_num( gCvarDispenserHealth ) );

new iEntity = engfunc( EngFunc_CreateNamedEntity, engfunc( EngFunc_AllocString, "info_target" ) );

if( !pev_valid( iEntity ) )
{
return PLUGIN_HANDLED;
}

set_pev( iEntity, pev_classname, gDispenserClassname );
engfunc( EngFunc_SetModel, iEntity, gDispenserMdl );
engfunc( EngFunc_SetSize, iEntity, Float:{ -12.0, -10.0, -12.0 }, Float:{ 12.0, 10.0, 12.0 } );
set_pev( iEntity, pev_origin, flPlayerOrigin );
set_pev( iEntity, pev_solid, SOLID_NOT );
set_pev( iEntity, pev_movetype, MOVETYPE_TOSS );
set_pev( iEntity, pev_health, flHealth );
set_pev( iEntity, pev_takedamage, DAMAGE_YES );
set_pev( iEntity, pev_iuser2, id );
set_pev( iEntity, pev_iuser3, STATUS_BUILDING );
set_pev( iEntity, pev_nextthink, get_gametime( ) + 0.1 );

gDispenserOrigin[ id ][ 0 ] = flPlayerOrigin[ 0 ];
gDispenserOrigin[ id ][ 1 ] = flPlayerOrigin[ 1 ];
gDispenserOrigin[ id ][ 2 ] = flPlayerOrigin[ 2 ];

gDispenserHealthOff[ id ] = flHealth;
bDispenserBuild[ id ] = true;

set_task( float( get_pcvar_num( gCvarBuildTime ) ), "BuildDispenserSolid", iEntity );
cs_set_user_money( id, iMoney - iCost, 1 );
client_print( id, print_chat, "[Nice Dispenser] Ты построил раздатчик НР и брони." );

return PLUGIN_HANDLED;
}

public bacon_TakeDamage( ent, idinflictor, idattacker, Float:damage, damagebits )
{
new szClassname[ 32 ];
pev( ent, pev_classname, szClassname, charsmax( szClassname ) );

if( equal( szClassname, gDispenserClassname ) )
{
new iOwner = pev( ent, pev_iuser2 );

if( pev( ent, pev_health ) <= 0.0 )
{
new szName[ 32 ];
get_user_name( idattacker, szName, charsmax( szName ) );

new Float:flOrigin[ 3 ];
pev( ent, pev_origin, flOrigin );

UTIL_BreakModel( flOrigin, gMetalGibs, BREAK_COMPUTER );
set_pev( ent, pev_flags, pev( ent, pev_flags ) | FL_KILLME );

if( idattacker == iOwner )
{
client_print( iOwner, print_chat, "[Nice Dispenser] Ты взорвал свой раздатчик НР" );
}

else
{
client_print( iOwner, print_chat, "[Nice Dispenser] %s взорвал ваш раздатчик НР", szName );
}

client_cmd( iOwner, "speak ^"vox/bizwarn computer destroyed^"" );
bDispenserBuild[ iOwner ] = false;
}

gDispenserHealthOff[ iOwner ] = float( pev( ent, pev_health ) );
emit_sound( ent, CHAN_STATIC, gDamageSounds[ random_num( 0, charsmax( gDamageSounds ) ) ], VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
}
}

public bacon_TraceAttack( iVictim, iAttacker, Float:flDamage, Float:flDirection[ 3 ], iTr, iDamageBits )
{
new szClassname[ 32 ];
pev( iVictim, pev_classname, szClassname, charsmax( szClassname ) );

if( equal( szClassname, gDispenserClassname ) )
{
new Float:flEndOrigin[ 3 ];
get_tr2( iTr, TR_vecEndPos, flEndOrigin );

UTIL_Sparks( flEndOrigin );
}
}

public bacon_PreThink( id )
{
if( get_pcvar_num( gCvarEnabled ) != 0 )
{
if( is_user_alive( id ) && bDispenserBuild[ id ] == true )
{
new Float:flGameTime = get_gametime( );

if( flGameTime - flLastHudSent[ id ] > HUD_DELAYTIME )
{
flLastHudSent[ id ] = flGameTime;

set_hudmessage( gBeamcolor[ id ][ 0 ], gBeamcolor[ id ][ 1 ], gBeamcolor[ id ][ 2 ], 0.0, 0.21, 1, 6.0, HUD_DELAYTIME );
ShowSyncHudMsg( id, gHudSync, "[Раздатчик HP и AP]^n^nHP раздатчика: [%d]", floatround( gDispenserHealthOff[ id ] ) );
}
}
}
}

public DispenserThink( iEnt )
{
if( pev_valid( iEnt ) )
{
new iStatus = pev( iEnt, pev_iuser3 );
new iOwner = pev( iEnt, pev_iuser2 );

switch( iStatus )
{
case STATUS_BUILDING:
{
set_rendering( iEnt, kRenderFxDistort, 255, 255, 255, kRenderTransAdd, 70 );
}

case STATUS_ACTIVE:
{
new id;
for( id = 1; id <= gMaxPlayers; id++ )
{
if( is_user_connected( id ) && is_user_alive( id ) && cs_get_user_team( id ) == cs_get_user_team( iOwner ) )
{
new Float:flOrigin[ 3 ], iOrigin1[ 3 ], iOrigin2[ 3 ];
pev( id, pev_origin, flOrigin );

FVecIVec( gDispenserOrigin[ iOwner ], iOrigin1 );
FVecIVec( flOrigin, iOrigin2 );

if( get_distance_f( gDispenserOrigin[ iOwner ], flOrigin ) <= float( get_pcvar_num( gCvarReplenishRadius ) ) )
{
UTIL_GiveWeaponAmmo( id );

// people will ask why i didn't used if and else if...
// because i want to recharge health and armor and ammo in same time if needed :D

if( get_user_health( id ) < get_pcvar_num( gCvarMaxHealth ) )
{
set_user_health( id, get_user_health( id ) + 1 );
}

if( get_user_armor( id ) < get_pcvar_num( gCvarMaxArmor ) )
{
set_user_armor( id, get_user_armor( id ) + 1 );
}

UTIL_BeamEnts( iOrigin1, iOrigin2, gBeamcolor[ iOwner ][ 0 ], gBeamcolor[ iOwner ][ 1 ], gBeamcolor[ iOwner ][ 2 ] );
}
}
}
}
}

if( get_pcvar_num( gCvarSpinDispenser ) == 1 )
{
new Float:flAngles[ 3 ];
pev( iEnt, pev_angles, flAngles );

flAngles[ 1 ] += 1.0;

set_pev( iEnt, pev_angles, flAngles );
}

set_pev( iEnt, pev_nextthink, get_gametime( ) + 0.1 );
}
}

public BuildDispenserSolid( iEntity )
{
if( pev_valid( iEntity ) )
{
new iOwner = pev( iEntity, pev_iuser2 );

switch( cs_get_user_team( iOwner ) )
{
case CS_TEAM_T:
{
gBeamcolor[ iOwner ][ 0 ] = 255, gBeamcolor[ iOwner ][ 1 ] = 0, gBeamcolor[ iOwner ][ 2 ] = 0;
set_rendering( iEntity, kRenderFxGlowShell, gBeamcolor[ iOwner ][ 0 ], gBeamcolor[ iOwner ][ 1 ], gBeamcolor[ iOwner ][ 2 ], kRenderNormal, 3 );
}

case CS_TEAM_CT:
{
gBeamcolor[ iOwner ][ 0 ] = 0, gBeamcolor[ iOwner ][ 1 ] = 0, gBeamcolor[ iOwner ][ 2 ] = 255;
set_rendering( iEntity, kRenderFxGlowShell, gBeamcolor[ iOwner ][ 0 ], gBeamcolor[ iOwner ][ 1 ], gBeamcolor[ iOwner ][ 2 ], kRenderNormal, 3 );
}
}

set_pev( iEntity, pev_solid, SOLID_BBOX );
set_pev( iEntity, pev_iuser3, STATUS_ACTIVE );
engfunc( EngFunc_DropToFloor, iEntity );

emit_sound( iEntity, CHAN_STATIC, gDispenserActive, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
}
}

public EVENT_TextMsg( )
{
UTIL_DestroyDispensers( );
}

public LOG_RoundEnd( )
{
UTIL_DestroyDispensers( );
}

stock UTIL_DestroyDispensers( )
{
new iEnt = FM_NULLENT;

while( ( iEnt = find_ent_by_class( iEnt, gDispenserClassname ) ) )
{
new iOwner = pev( iEnt, pev_iuser2 );

bDispenserBuild[ iOwner ] = false;
set_pev( iEnt, pev_flags, pev( iEnt, pev_flags ) | FL_KILLME );
}
}

stock UTIL_BreakModel( Float:flOrigin[ 3 ], model, flags )
{
engfunc( EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, flOrigin, 0 );
write_byte( TE_BREAKMODEL );
engfunc( EngFunc_WriteCoord, flOrigin[ 0 ] );
engfunc( EngFunc_WriteCoord, flOrigin[ 1 ] );
engfunc( EngFunc_WriteCoord, flOrigin[ 2 ] );
write_coord( 16 );
write_coord( 16 );
write_coord( 16 );
write_coord( random_num( -20, 20 ) );
write_coord( random_num( -20, 20 ) );
write_coord( 10 );
write_byte( 10 );
write_short( model );
write_byte( 10 );
write_byte( 9 );
write_byte( flags );
message_end( );
}

stock UTIL_BeamEnts( iStart[ 3 ], iEnd[ 3 ], r, g, b )
{
message_begin( MSG_PVS, SVC_TEMPENTITY, iStart );
write_byte( TE_BEAMPOINTS );
write_coord( iStart[ 0 ] );
write_coord( iStart[ 1 ] );
write_coord( iStart[ 2 ] );
write_coord( iEnd[ 0 ] );
write_coord( iEnd[ 1 ] );
write_coord( iEnd[ 2 ] );
write_short( gHealingBeam );
write_byte( 5 );
write_byte( 2 );
write_byte( 1 );
write_byte( 80 );
write_byte( 1 );
write_byte( r );
write_byte( g );
write_byte( b );
write_byte( 130 );
write_byte( 0 );
message_end( );
}

stock UTIL_GiveWeaponAmmo( index )
{
new szCopyAmmoData[ 40 ];

switch( get_user_weapon( index ) )
{
case CSW_P228: copy( szCopyAmmoData, charsmax( szCopyAmmoData ), "ammo_357sig" );
case CSW_SCOUT, CSW_G3SG1, CSW_AK47: copy( szCopyAmmoData, charsmax( szCopyAmmoData ), "ammo_762nato" );
case CSW_XM1014, CSW_M3: copy( szCopyAmmoData, charsmax( szCopyAmmoData ), "ammo_buckshot" );
case CSW_MAC10, CSW_UMP45, CSW_USP: copy( szCopyAmmoData, charsmax( szCopyAmmoData ), "ammo_45acp" );
case CSW_SG550, CSW_GALIL, CSW_FAMAS, CSW_M4A1, CSW_SG552, CSW_AUG: copy( szCopyAmmoData, charsmax( szCopyAmmoData ), "ammo_556nato" );
case CSW_ELITE, CSW_GLOCK18, CSW_MP5NAVY, CSW_TMP: copy( szCopyAmmoData, charsmax( szCopyAmmoData ), "ammo_9mm" );
case CSW_AWP: copy( szCopyAmmoData, charsmax( szCopyAmmoData ), "ammo_338magnum" );
case CSW_M249: copy( szCopyAmmoData, charsmax( szCopyAmmoData ), "ammo_556natobox" );
case CSW_FIVESEVEN, CSW_P90: copy( szCopyAmmoData, charsmax( szCopyAmmoData ), "ammo_57mm" );
case CSW_DEAGLE: copy( szCopyAmmoData, charsmax( szCopyAmmoData ), "ammo_50ae" );
}

give_item( index, szCopyAmmoData );
}

stock UTIL_Sparks( Float:flOrigin[ 3 ] )
{
engfunc( EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, flOrigin, 0 );
write_byte( TE_SPARKS );
engfunc( EngFunc_WriteCoord, flOrigin[ 0 ] );
engfunc( EngFunc_WriteCoord, flOrigin[ 1 ] );
engfunc( EngFunc_WriteCoord, flOrigin[ 2 ] );
message_end( );
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя TarikYuzkiv
сообщение 29.12.2013, 19:25
Сообщение #2
Стаж: 13 лет

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

register_clcmd( "drop", "CommandDispenserBuild" );

-->

register_clcmd( "say /dispenser", "CommandDispenserBuild" );
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
urpok
сообщение 29.12.2013, 20:15
Сообщение #3
Стаж: 13 лет

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

Цитата(TarikYuzkiv @ 29.12.2013, 21:25) *
register_clcmd( "drop", "CommandDispenserBuild" );

-->

register_clcmd( "say /dispenser", "CommandDispenserBuild" );


Работает, спасибо большое.

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