mam taki problem, chciałem przerobić ten plugin, tak żeby zamiast noża było m4, ak47, awp, deagle, usp i he, najpierw przerobiłem go tak tylko żeby było tylko m4 i działał, potem chciałem dodać inne bronie, pierwsza runda mogę korzystać ze wszystkich broni, potem kiedy wpisałem kill jest respawn w tej samej rundzie (bo ustawiłem km_respawn1) i tutaj pojawia się problem bo cały serwer pada, jest coś w pluginie co go ogranicza, czy to wina innego pluginu, czy ja źle dopisałem bornie chociaż jak weszli za pierwszym razem, każdy miał do wyboru daną broń
plugin działał normalnie z botami, jak sprawdzałem u siebie w domu, były wszystkie bronie i po wpisaniu kill albo ginięciu, następował respawn bez żadnych błędów
#include <amxmodx>
#include <hamsandwich>
#include <cstrike>
#include <engine>
#include <fun>
#define PLUGIN "Knife Management"
#define VERSION "3.3"
#define AUTHOR "Jon"
#define InTeam(%1) ( CS_TEAM_UNASSIGNED < cs_get_user_team(%1) < CS_TEAM_SPECTATOR )
// - // - // - // - // - // - // - //
enum _:MapTypes ( <<= 1 )
{
TYPE_1HP = 1, TYPE_35HP, TYPE_ACER, TYPE_WIRE
}
enum _:Timers
{
Float:RESPAWN, Float:NEXTUSE, Float:LASTUSE
}
const g_iKeysFreeHitMenu = MENU_KEY_1 | MENU_KEY_2;
const TASK_CHECKMENU = 3491;
const TASK_CHECKHEALTH = 3488;
new g_pRespawn;
new g_pFreeHits;
new g_pCamera;
new g_pRemoveBomb;
new g_pStabAcerMaps;
new g_pGhostChat;
new g_iMapType;
new g_iMsgSayText;
new g_iButtonCount[ 33 ];
new g_iFreeHitCount[ 33 ];
new g_iRequester[ 33 ];
new g_szFreeHitMenu[ 128 ];
new Float:g_fTimers[ 33 ][ Timers ];
new bool:g_bSpawned[ 33 ];
new bool:g_bCamera[ 33 ];
// - // - // - // - // - // - // - //
public plugin_precache()
{
precache_model( "models/rpgrocket.mdl" );
new iEnt = create_entity( "info_map_parameters" );
DispatchKeyValue( iEnt, "buying", "3" );
DispatchSpawn( iEnt );
RegisterHam( Ham_Spawn, "armoury_entity", "FwdArmouryEntitySpawn" );
}
public plugin_init()
{
register_plugin( PLUGIN, VERSION, AUTHOR );
register_cvar( "km_version", VERSION, FCVAR_SERVER | FCVAR_SPONLY );
g_pRespawn = register_cvar( "km_respawn", "0" );
g_pFreeHits = register_cvar( "km_freehits", "2" );
g_pCamera = register_cvar( "km_camera", "1" );
g_pRemoveBomb = register_cvar( "km_removebomb", "0" );
g_pStabAcerMaps = register_cvar( "km_stabacer", "0" );
g_pGhostChat = register_cvar( "km_ghostchat", "1" );
g_iMsgSayText = get_user_msgid( "SayText" );
register_impulse( 201, "FwdSprayImpulse" );
RegisterHam( Ham_Weapon_PrimaryAttack, "weapon_knife", "FwdKnifePrimaryAttack" );
RegisterHam( Ham_Spawn, "player", "FwdPlayerSpawnPost", 1 );
RegisterHam( Ham_Killed, "player", "FwdPlayerKilled" );
RegisterHam( Ham_ObjectCaps, "player", "FwdObjectCaps" );
register_clcmd( "say", "CmdSay" );
register_clcmd( "say /cam", "CmdCamera" );
register_clcmd( "say /camera", "CmdCamera" );
register_clcmd( "say /respawn", "CmdRespawn" );
if( get_pcvar_num( g_pRemoveBomb ) )
{
remove_entity_name( "func_bomb_target" );
remove_entity_name( "info_bomb_target" );
}
// - Because the block buying method doesn't work the first round
server_cmd( "sv_restart 1" );
}
public plugin_cfg()
{
new szMap[ 33 ];
get_mapname( szMap, 32 );
if( containi( szMap, "1hp" ) != -1 && !equal( szMap, "1hp" ) )
{
g_iMapType = TYPE_1HP;
}
if( containi( szMap, "35hp" ) != -1 )
{
g_iMapType |= TYPE_35HP;
}
if( containi( szMap, "acer" ) != -1 )
{
g_iMapType |= TYPE_ACER;
}
if( containi( szMap, "wire" ) != -1 )
{
g_iMapType |= TYPE_WIRE;
}
new iLen = charsmax( g_szFreeHitMenu );
add( g_szFreeHitMenu, iLen, "\yGive a free hit to \r%s?^n^n" );
add( g_szFreeHitMenu, iLen, "1. \wYes^n" );
add( g_szFreeHitMenu, iLen, "\r2. \wNo" );
register_menucmd( register_menuid( "FreeHitMenu" ), g_iKeysFreeHitMenu, "HandleFreeHitMenu" );
}
public client_disconnect( iClient )
{
g_bCamera[ iClient ] = false;
g_bSpawned[ iClient ] = false;
}
public client_PreThink( iClient )
{
if( !get_pcvar_num( g_pRespawn ) || is_user_alive( iClient ) || !InTeam( iClient ) )
{
return PLUGIN_CONTINUE;
}
if( g_fTimers[ iClient ][ RESPAWN ] <= get_gametime() )
{
ExecuteHamB( Ham_CS_RoundRespawn, iClient );
}
return PLUGIN_CONTINUE;
}
public FwdPlayerSpawnPost( iClient )
{
if( !is_user_alive( iClient ) )
{
return HAM_IGNORED;
}
strip_user_weapons( iClient );
give_item( iClient, "weapon_knife" );
g_iButtonCount[ iClient ] = 0;
g_iFreeHitCount[ iClient ] = 0;
if( !g_bSpawned[ iClient ] && get_pcvar_num( g_pFreeHits ) )
{
g_bSpawned[ iClient ] = true;
GreenPrint( iClient, "If you want to request a free hit, press your +use key 3 times while aiming at an enemy." );
}
if( g_bCamera[ iClient ] )
{
set_view( iClient, CAMERA_3RDPERSON );
}
if( g_iMapType & ( TYPE_35HP | TYPE_1HP ) )
{
remove_task( iClient + TASK_CHECKHEALTH );
set_task( 1.0, "TaskCheckHealth", iClient + TASK_CHECKHEALTH );
}
return HAM_IGNORED;
}
public FwdArmouryEntitySpawn( iEnt )
{
remove_entity( iEnt );
}
public FwdPlayerKilled( iClient )
{
if( is_user_connected( iClient ) )
{
if( g_bCamera[ iClient ] )
{
set_view( iClient, CAMERA_NONE );
}
if( get_pcvar_num( g_pRespawn ) )
{
g_fTimers[ iClient ][ RESPAWN ] = get_gametime( ) + 1.5;
}
}
}
public FwdKnifePrimaryAttack( iEnt )
{
if( get_pcvar_num( g_pStabAcerMaps ) && g_iMapType & TYPE_ACER )
{
ExecuteHamB( Ham_Weapon_SecondaryAttack, iEnt );
return HAM_SUPERCEDE;
}
return HAM_IGNORED;
}
public FwdObjectCaps( iClient )
{
if( !is_user_connected( iClient ) || !( entity_get_int( iClient, EV_INT_button ) & IN_USE ) )
{
return HAM_IGNORED;
}
new iFreeHits = get_pcvar_num( g_pFreeHits );
if( !iFreeHits )
{
return HAM_IGNORED;
}
new iTarget, iBody;
get_user_aiming( iClient, iTarget, iBody );
if( is_user_connected( iTarget ) && cs_get_user_team( iClient ) != cs_get_user_team( iTarget ) )
{
new Float:fTime = get_gametime( );
if( g_fTimers[ iClient ][ NEXTUSE ] <= fTime )
{
if( g_fTimers[ iClient ][ LASTUSE ] <= fTime - 1.5 )
{
g_iButtonCount[ iClient ] = 0;
return HAM_IGNORED;
}
g_iButtonCount[ iClient ]++;
g_fTimers[ iClient ][ NEXTUSE ] = fTime + 0.25;
g_fTimers[ iClient ][ LASTUSE ] = fTime;
if( g_iButtonCount[ iClient ] == 3 )
{
if( g_iFreeHitCount[ iClient ] >= iFreeHits )
{
GreenPrint( iClient, "You can only request free hits %i times per round.", iFreeHits );
}
else if( g_iRequester[ iTarget ] > 0 )
{
GreenPrint( iClient, "This player is already treating another free hit request." );
}
else if( get_user_health( iClient ) > 65 )
{
GreenPrint( iClient, "Your health must be below 65 to request a free hit." );
}
else if( get_user_health( iTarget ) <= 65 )
{
new szName[ 33 ];
get_user_name( iTarget, szName, 32 );
GreenPrint( iClient, "%s already has 65 HP or less.", szName );
}
else
{
g_iFreeHitCount[ iClient ]++;
g_iRequester[ iTarget ] = iClient;
new szMenu[ 128 ], szName[ 33 ];
get_user_name( iClient, szName, 32 );
formatex( szMenu, 127, g_szFreeHitMenu, szName );
show_menu( iClient, g_iKeysFreeHitMenu, g_szFreeHitMenu, 5, "FreeHitMenu" );
set_task( 5.0, "TaskCheckMenu", iClient + TASK_CHECKMENU );
GreenPrint( iClient, "Request sent.." );
}
}
}
}
return HAM_IGNORED;
}
public FwdSprayImpulse( iClient )
{
if( g_iMapType & TYPE_WIRE )
{
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
public CmdSay( iClient )
{
if( get_pcvar_num( g_pGhostChat ) )
{
new szMsg[ 192 ];
read_args( szMsg, 191 );
remove_quotes( szMsg );
if( szMsg[ 0 ] )
{
new szName[ 33 ];
get_user_name( iClient, szName, 32 );
format( szMsg, 191, "^x01%s^x03%s^x01 : %s", is_user_alive( iClient ) ? "" : "*DEAD* ", szName, szMsg );
UTIL_SayText( 0, iClient, szMsg );
return PLUGIN_HANDLED_MAIN;
}
}
return PLUGIN_CONTINUE;
}
public CmdCamera( iClient )
{
if( get_pcvar_num( g_pCamera ) )
{
if( ( g_bCamera[ iClient ] = !g_bCamera[ iClient ] ) )
{
if( is_user_alive( iClient ) )
{
set_view( iClient, CAMERA_3RDPERSON )
}
GreenPrint( iClient, "Camera enabled." );
}
else
{
set_view( iClient, CAMERA_NONE );
GreenPrint( iClient, "Camera disabled." );
}
}
}
public CmdRespawn( iClient )
{
if( get_pcvar_num( g_pRespawn ) && !is_user_alive( iClient ) && InTeam( iClient ) )
{
set_hudmessage( 0, 255, 0, -1.0, -1.0, 1, 0.0, 4.0, 0.0, 0.0, -1 )
show_hudmessage( iClient, "Press primary attack button to respawn." );
}
}
public HandleFreeHitMenu( iClient, iKey )
{
new szNameTarget[ 33 ], szNameReq[ 33 ];
get_user_name( iClient, szNameTarget, 32 );
get_user_name( g_iRequester[ iClient ], szNameReq, 32 );
switch( iKey )
{
case 0:
{
entity_set_float( iClient, EV_FL_health, entity_get_float( g_iRequester[ iClient ], EV_FL_health ) )
GreenPrint( 0, "%s accepted a free hit request from %s. They now have the same health.", szNameTarget, szNameReq );
}
case 1:
{
GreenPrint( 0, "%s declined a free hit request from %s.", szNameTarget, szNameReq );
}
}
g_iRequester[ iClient ] = 0;
remove_task( iClient + TASK_CHECKMENU );
}
public TaskCheckHealth( iClient )
{
iClient -= TASK_CHECKHEALTH;
new iHealth = get_user_health( iClient );
if( g_iMapType & TYPE_1HP && iHealth != 1 )
{
entity_set_float( iClient, EV_FL_health, 1.0 );
}
else if( g_iMapType & TYPE_35HP && iHealth != 35 )
{
entity_set_float( iClient, EV_FL_health, 35.0 );
}
}
public TaskCheckMenu( iClient )
{
iClient -= TASK_CHECKMENU;
new szNameTarget[ 33 ], szNameReq[ 33 ];
get_user_name( iClient, szNameTarget, 32 );
get_user_name( g_iRequester[ iClient ], szNameReq, 32 );
GreenPrint( 0, "%s didn't answer %s's free hit request.", szNameTarget, szNameReq );
g_iRequester[ iClient ] = 0;
}
GreenPrint( const iClient, const szText[], any:... )
{
new szMsg[ 192 ], iLen = formatex( szMsg, 191, "^x04[KM]^x01 " );
vformat( szMsg[ iLen ], 191 - iLen, szText, 3 );
UTIL_SayText( iClient, 1, szMsg );
}
UTIL_SayText( const iClient, const iSender, const szMsg[] )
{
message_begin( iClient ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, g_iMsgSayText, _, iClient );
write_byte( iSender );
write_string( szMsg );
message_end();
}podbijam, w regulaminie chyba nic nie ma że nie można podbijać, chyba że nie zauważyłem
Użytkownik toxic edytował ten post 26.08.2011 21:27


Dodatki SourceMod



Temat jest zamknięty









