Prima ar fi eliminarea "laser sight" si "adrenaline" din meniul de iteme CT de la inceputul rundei , deci pur si simplu vreau sa nu mai apara in meniul acela.
A doua ar fi cu o putere de la T , mai exact teleportarea , as vrea sa nu pot sa ma teleportez in afara mapei , momentan daca ma teleportez in sus raman blocat in "cer" , nu stiu daca m-am facut bine inteles , cand vrei sa te teleportezi in afara mapei ... sa nu te lase pur si simplu.
Iar a treia si ultima problema ar fi cu "Team Swap" adica cand castiga CT nu inverseaza corect echipele , sau cateodata cand sunt 1 vs 1 pe server daca castiga CT ii baga pe ambii in aceias echipa , mai exact la T..
Sunt sigur ca toate aceste probleme sunt de la pluginul de baza , deoarece eu nu am bagat alte pluginuri. Acesta ii pluginul. Multumesc mult!
- | Afiseaza codul
/* - Credits: - Joropito - Team Menu - Pastout - Suicide Bomb - Exolent - Teleport */ #include < amxmodx > #include < cstrike > #include < hamsandwich > #include < fun > #include < fakemeta > #include < engine > #include < xs > #define PISTOL_WEAPONS_BIT (1<<CSW_GLOCK18|1<<CSW_USP|1<<CSW_DEAGLE|1<<CSW_P228|1<<CSW_FIVESEVEN|1<<CSW_ELITE) #define SHOTGUN_WEAPONS_BIT (1<<CSW_M3|1<<CSW_XM1014) #define SUBMACHINE_WEAPONS_BIT (1<<CSW_TMP|1<<CSW_MAC10|1<<CSW_MP5NAVY|1<<CSW_UMP45|1<<CSW_P90) #define RIFLE_WEAPONS_BIT (1<<CSW_FAMAS|1<<CSW_GALIL|1<<CSW_AK47|1<<CSW_SCOUT|1<<CSW_M4A1|1<<CSW_SG550|1<<CSW_SG552|1<<CSW_AUG|1<<CSW_AWP|1<<CSW_G3SG1) #define MACHINE_WEAPONS_BIT (1<<CSW_M249) #define PRIMARY_WEAPONS_BIT (SHOTGUN_WEAPONS_BIT|SUBMACHINE_WEAPONS_BIT|RIFLE_WEAPONS_BIT|MACHINE_WEAPONS_BIT) #define SECONDARY_WEAPONS_BIT (PISTOL_WEAPONS_BIT) #define IsPrimaryWeapon(%1) ( (1<<%1) & PRIMARY_WEAPONS_BIT ) #define IsSecondaryWeapon(%1) ( (1<<%1) & PISTOL_WEAPONS_BIT ) #define m_iVGUI 510 #define m_fGameHUDInitialized 349 #define m_fNextHudTextArgsGameTime 198 #define TEAM_MENU "#Team_Select" #define TEAM_MENU2 "#Team_Select_Spect" #define MIN_WEAPON CSW_P228 #define MAX_WEAPON CSW_P90 #define TEAM_NC CS_TEAM_T #define TEAM_HUMAN CS_TEAM_CT /* Constants */ enum (+=1000) { TASK_ADRENALINE = 1000, TASK_SUICIDE, TASK_POISON, TASK_INVISIBLE, TASK_STARTGAME } new const g_iMaxBPAmmo[ MAX_WEAPON + 1 ] = { 0, 52, 0, 90, 1, 32, 0, 100, 90, 1, 120, 100, 100, 90, 90, 90, 100, 120, 30, 120, 200, 32, 90, 120, 90, 2, 35, 90, 90, 0, 100 }; new const g_iMaxClipAmmo[ MAX_WEAPON + 1 ] = { 0, 13, 0, 10, 0, 7, 0, 30, 30, 0, 30, 20, 25, 30, 35, 25, 12, 20, 10, 30, 100, 8, 30, 30, 20, 0, 7, 30, 30, 0, 50 }; new const g_szWeaponClassnames[ MAX_WEAPON + 1 ][ ] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10", "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550", "weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249", "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552", "weapon_ak47", "weapon_knife", "weapon_p90" }; new const g_szWeaponNames[ MAX_WEAPON + 1 ][ ] = { "", "P228", "", "Schmidt Scout", "", "XM1014 (Auto-Shotgun)", "", "Mac-10", "AUG", "", "Dual Elites", "Five-Seven", "UMP-45", "SG-550", "Galil", "Famas", "USP", "Glock-18", "AWP", "MP5-Navy", "M249 (Para)", "M3 (Pump-Shotgun)", "M4A1", "TMP", "G3SG1", "", "Deagle", "SG-552", "AK-47", "", "P90" }; enum _:ItemsInfo { ITEM_LASER, // Done ITEM_SUICIDE, // Done ITEM_POISON, // Done ITEM_ADRENALINE, // Done ITEM_MEDKIT // Done }; new const g_szItemNames[ ItemsInfo ][ ] = { "Laser Sight", "Suicide Bomber \r(Bind Key Activated)", "Poison Scout Bullets \r(No Bind Key Activated)", "Adrenaline", "Medic Kit \r(Bind Key Activated)" }; new const g_szObjectives[ ][ ] = { "func_bomb_target", "info_bomb_target", "hostage_entity", "monster_scientist", "func_hostage_rescue", "info_hostage_rescue", "info_vip_start", "func_vip_safetyzone", "func_escapezone" } new const g_szPrefix[ ] = "[Nightcrawler]"; new const g_szNCModel[ ] = "models/player/nightcrawler/nightcrawler.mdl"; new const g_szNCModelT[ ] = "models/player/nightcrawler/nightcrawlerT.mdl"; new const g_szNCKnife_V[ ] = "models/nightcrawler/v_nightcrawler.mdl"; new const g_szLaserSprite[ ] = "sprites/zbeam4.spr"; new const g_szExplosionSprite[ ] = "sprites/zerogxplode.spr"; new const g_szSuicideBombSound[ ] = "weapons/c4_beep4.wav"; new const g_szTeleportSound[ ] = "warcraft3/blinkarrival.wav"; /* Booleans */ new bool:g_bRememberGuns[ 33 ]; new bool:g_bNCNextRound[ 33 ]; new bool:g_bHasLaser[ 33 ]; new bool:g_bAdrenalineActive[ 33 ]; new bool:g_bVisible[ 33 ]; /* Floats */ new Float:g_flWallOrigin[ 33 ][ 3 ]; new Float:g_flLastTeleportTime[ 33 ]; /* Integers */ new g_iPrimaryWeapon[ 33 ]; new g_iSecondaryWeapon[ 33 ]; new g_iChosenItem[ 33 ]; new g_iAdrenalineUses[ 33 ]; new g_iMedKitUses[ 33 ]; new g_iSuicideTime[ 33 ]; new g_iPoisonRemaining[ 33 ]; new g_iTeleportsRemaining[ 33 ]; new g_iTeamCount[ CsTeams ]; new g_iCurrentRound; new g_iMaxPlayers; new g_iLaserSprite; new g_iExplosionSprite; /* Menus */ new g_hWeaponMenu; new g_hPrimaryWeaponMenu; new g_hSecondaryWeaponMenu; new g_hItemsMenu; /* Messages */ new g_msgShowMenu; new g_msgVGUIMenu; new g_msgDeath; new g_msgScoreInfo; new g_msgStatusIcon; /* PCVARS */ new g_pNightcrawlerRatio; new g_pNightcrawlerVisibleTime; new g_pNightcrawlerHealth; new g_pNightcrawlerGravity; new g_pNightcrawlerSpeed; new g_pNightcrawlerTeleDelay; new g_pNightcrawlerTeleCount; new g_pMapLighting; new g_pAdrenalineUses; new g_pAdrenalineTime; new g_pAdrenalineSpeed; new g_pMedKitUses; new g_pSuicideRadius; new g_pSuicideDamage; new g_pSuicideTime; new g_pPoisonAmount; new g_pPoisonInterval; new g_pPoisonDamage; public plugin_precache() { precache_model( g_szNCModel ); precache_model( g_szNCKnife_V ); precache_sound( g_szSuicideBombSound ); precache_sound( g_szTeleportSound ); g_iLaserSprite = precache_model( g_szLaserSprite ); g_iExplosionSprite = precache_model( g_szExplosionSprite ); } public plugin_init() { register_plugin( "Nightcrawler Mod", "1.0", "H3avY Ra1n" ); register_clcmd( "jointeam", "CmdJoinTeam" ); register_clcmd( "joinclass", "CmdJoinTeam" ); register_clcmd( "say /guns", "CmdEnableGuns" ); register_clcmd( "item", "CmdUseItem" ); RegisterHam( Ham_Spawn, "player", "Ham_PlayerSpawn_Post", 1 ); RegisterHam( Ham_Killed, "player", "Ham_PlayerKilled_Post", 1 ); RegisterHam( Ham_TakeDamage, "player", "Ham_PlayerTakeDamage_Post", 1 ); register_forward( FM_Spawn, "Forward_Spawn_Post", 1 ); register_forward( FM_Touch, "Forward_Touch_Pre", 0 ); register_forward( FM_PlayerPreThink, "Forward_PlayerPreThink" ); register_forward( FM_AddToFullPack, "Forward_AddToFullPack_Post", 1 ); register_logevent( "LogEvent_BombSpawned", 3, "2=Spawned_With_The_Bomb" ); register_logevent( "LogEvent_RoundEnd", 2, "1=Round_End" ); register_event( "CurWeapon", "Event_CurWeapon", "be" ); register_menucmd( register_menuid( "Team_Select", 1 ), ( 1 << 0 ) | ( 1 << 1 ) | ( 1 << 4 ) | ( 1 << 5 ), "TeamSelectMenu_Handler" ); g_msgShowMenu = get_user_msgid( "ShowMenu" ); g_msgVGUIMenu = get_user_msgid( "VGUIMenu" ); g_msgScoreInfo = get_user_msgid( "ScoreInfo" ); g_msgDeath = get_user_msgid( "DeathMsg" ); g_msgStatusIcon = get_user_msgid( "StatusIcon" ); register_message( g_msgShowMenu, "Message_ShowMenu" ); register_message( g_msgVGUIMenu, "Message_VGUIMenu" ); register_message( g_msgStatusIcon, "Message_StatusIcon" ); g_pNightcrawlerRatio = register_cvar( "nc_ratio", "33" ); // Percentage g_pNightcrawlerVisibleTime = register_cvar( "nc_visible_time", "2" ); g_pNightcrawlerHealth = register_cvar( "nc_health", "150" ); g_pNightcrawlerGravity = register_cvar( "nc_gravity", "600" ); g_pNightcrawlerSpeed = register_cvar( "nc_speed", "280.0" ); g_pNightcrawlerTeleCount = register_cvar( "nc_teleport_count", "2" ); g_pNightcrawlerTeleDelay = register_cvar( "nc_teleport_delay", "2" ); g_pMapLighting = register_cvar( "nc_lighting", "g" ); g_pAdrenalineUses = register_cvar( "nc_adrenaline_uses", "2" ); g_pAdrenalineTime = register_cvar( "nc_adrenaline_time", "10" ); g_pAdrenalineSpeed = register_cvar( "nc_adrenaline_speed", "320" ); g_pSuicideDamage = register_cvar( "nc_suicide_damage", "80" ); g_pSuicideRadius = register_cvar( "nc_suicide_radius", "50" ); g_pSuicideTime = register_cvar( "nc_suicide_time", "3" ); g_pMedKitUses = register_cvar( "nc_medkit_uses", "2" ); g_pPoisonAmount = register_cvar( "nc_poison_amount", "3" ); g_pPoisonInterval = register_cvar( "nc_poison_interval", "1" ); g_pPoisonDamage = register_cvar( "nc_poison_damage", "5" ); g_iMaxPlayers = get_maxplayers(); set_task( 30.0, "Task_StartGame", TASK_STARTGAME ); CreateMenus(); } public Message_StatusIcon( iMsgID, iMsgDest, id ) { static szIcon[ 8 ]; get_msg_arg_string( 2, szIcon, 7 ); if( equal( szIcon, "buyzone" ) && get_msg_arg_int( 1 ) ) { set_pdata_int( id, 235, get_pdata_int( id, 235 ) & ~(1<<0) ); return PLUGIN_HANDLED; } return PLUGIN_CONTINUE; } public Forward_Spawn_Post( iEntity ) { new szClassname[ 32 ]; pev( iEntity, pev_classname, szClassname, charsmax( szClassname ) ); for( new i = 0; i < sizeof g_szObjectives; i++ ) { if( equali( szClassname, g_szObjectives[ i ] ) ) { remove_entity( iEntity ); break; } } } public Forward_Touch_Pre( iEnt, id ) { if( !is_user_alive( id ) ) return FMRES_IGNORED; new szClassname[ 32 ]; pev( iEnt, pev_classname, szClassname, charsmax( szClassname ) ); if( equali( szClassname, "worldspawn" ) || equali( szClassname, "func_wall" ) || equali( szClassname, "func_breakable" ) ) pev( id, pev_origin, g_flWallOrigin[ id ] ); else if( equali( szClassname, "weaponbox" ) || equali( szClassname, "armoury_entity" ) ) { if( cs_get_user_team( id ) == TEAM_NC ) return FMRES_SUPERCEDE; } return FMRES_IGNORED; } public client_putinserver( id ) { g_bRememberGuns[ id ] = false; g_bNCNextRound[ id ] = false; g_bHasLaser[ id ] = false; g_bAdrenalineActive[ id ] = false; g_bVisible[ id ] = true; g_iAdrenalineUses[ id ] = 0; g_iMedKitUses[ id ] = 0; g_iSuicideTime[ id ] = 0; g_iPoisonRemaining[ id ] = 0; g_iPrimaryWeapon[ id ] = 0; g_iSecondaryWeapon[ id ] = 0; g_iTeleportsRemaining[ id ] = 0; g_iChosenItem[ id ] = -1; new szLighting[ 3 ]; get_pcvar_string( g_pMapLighting, szLighting, 2 ); engfunc( EngFunc_LightStyle, 0, szLighting ); } public client_disconnect( id ) { remove_task( TASK_SUICIDE + id ); } public Forward_PlayerPreThink( id ) { if( !is_user_alive( id ) ) return; static CsTeams:iTeam; iTeam = cs_get_user_team( id ); if( iTeam == TEAM_HUMAN ) { if( !g_bHasLaser[ id ] ) { static iPlayers[ 32 ], iNum; get_players( iPlayers, iNum, "ae", "CT" ); if( iNum == 1 ) { g_bHasLaser[ id ] = true; } } if( g_bHasLaser[ id ] ) { static iTarget, iBody, iRed, iGreen, iBlue, iWeapon; get_user_aiming( id, iTarget, iBody ); iWeapon = get_user_weapon( id ); if( IsPrimaryWeapon( iWeapon ) || IsSecondaryWeapon( iWeapon ) ) { if( is_user_alive( iTarget ) && cs_get_user_team( iTarget ) == TEAM_NC ) { iRed = 255; iGreen = 0; iBlue = 0; } else { iRed = 0; iGreen = 255; iBlue = 0; } static iOrigin[ 3 ]; get_user_origin( id, iOrigin, 3 ); message_begin( MSG_BROADCAST, SVC_TEMPENTITY ); write_byte( TE_BEAMENTPOINT ); write_short( id | 0x1000 ); write_coord( iOrigin[ 0 ] ); write_coord( iOrigin[ 1 ] ); write_coord( iOrigin[ 2 ] ); write_short( g_iLaserSprite ); write_byte( 1 ); write_byte( 10 ); write_byte( 1 ); write_byte( 5 ); write_byte( 0 ); write_byte( iRed ); write_byte( iGreen ); write_byte( iBlue ); write_byte( 150 ); write_byte( 25 ); message_end( ); } } } else if( iTeam == TEAM_NC ) { static iButton; iButton = get_user_button( id ); if( iButton & IN_USE ) { static Float:fOrigin[ 3 ]; pev( id, pev_origin, fOrigin ); if( get_distance_f( fOrigin, g_flWallOrigin[ id ] ) > 10.0 ) return; if( pev( id, pev_flags ) & FL_ONGROUND ) return; if( iButton & IN_FORWARD ) { static Float:fVelocity[ 3 ]; velocity_by_aim( id, 240, fVelocity ); set_pev( id, pev_velocity, fVelocity ); } else if( iButton & IN_BACK ) { static Float:fVelocity[ 3 ]; velocity_by_aim( id, -240, fVelocity ); set_pev( id, pev_velocity, fVelocity ); } } } return; } public LogEvent_BombSpawned() { new szLogUser[ 80 ], szName[ 32 ]; read_logargv( 0, szLogUser, 79 ); parse_loguser( szLogUser, szName, 31 ); new id = get_user_index( szName ); engclient_cmd( id, "drop", "weapon_c4" ); new iBomb = find_ent_by_class( -1, "weapon_c4" ); if( iBomb ) { remove_entity( iBomb ); } } public LogEvent_RoundEnd() { g_iCurrentRound++; } //////////////////// ///* Ratio */// //////////////////// public CmdJoinTeam( id ) return PLUGIN_HANDLED; public TeamSelectMenu_Handler( id, iKey ) { new CsTeams:iTeam = cs_get_user_team( id ); CountTeams(); switch( iKey ) { case 0: // Join NC (Terrorists) { client_print( id, print_chat, "%s You cannot join the Night-Crawler team!", g_szPrefix ); return PLUGIN_HANDLED; } case 1: // Join Humans (CTs) { if( iTeam == TEAM_HUMAN ) return PLUGIN_HANDLED; if( task_exists( TASK_STARTGAME ) ) ForceTeam( id, TEAM_HUMAN ); else { CountTeams(); // ( Percent * Total Players / 100 ) - Current Amount of NCs new iNeeded = get_pcvar_num( g_pNightcrawlerRatio ) * ( g_iTeamCount[ TEAM_NC ] + g_iTeamCount[ TEAM_HUMAN ] ) / 100 - g_iTeamCount[ TEAM_NC ]; if( iNeeded == 0 && g_iTeamCount[ TEAM_HUMAN ] == 1 ) iNeeded = 1; if( iNeeded >= 1 ) ForceTeam( id, TEAM_NC ); else ForceTeam( id, TEAM_HUMAN ); } return PLUGIN_HANDLED; } case 5: { user_silentkill( id ); ForceTeam( id, CS_TEAM_SPECTATOR ); return PLUGIN_HANDLED; } } return PLUGIN_HANDLED; } public ForceTeam( id, CsTeams:iTeam ) { static iRestore, iVGUI, iMSGBlock; iRestore = get_pdata_int( id, m_iVGUI ); iVGUI = iRestore & ( 1 << 0 ); if( iVGUI ) set_pdata_int( id, m_iVGUI, iRestore & ~( 1 << 0 ) ); switch( iTeam ) { case CS_TEAM_SPECTATOR: { iMSGBlock = get_msg_block( g_msgShowMenu ); set_msg_block( g_msgShowMenu, BLOCK_ONCE ); dllfunc( DLLFunc_ClientPutInServer, id ); set_msg_block( g_msgShowMenu, iMSGBlock ); set_pdata_int( id, m_fGameHUDInitialized, 1 ); engclient_cmd( id, "jointeam", "6" ); } case CS_TEAM_T, CS_TEAM_CT: { iMSGBlock = get_msg_block( g_msgShowMenu ); set_msg_block( g_msgShowMenu, BLOCK_ONCE ); engclient_cmd( id, "jointeam", ( iTeam == CS_TEAM_CT ) ? "2" : "1" ); engclient_cmd( id, "joinclass", "1" ); set_msg_block( g_msgShowMenu, iMSGBlock ); } } if( iVGUI ) set_pdata_int( id, m_iVGUI, iRestore ); } public Message_VGUIMenu( iMSGId, iDest, id ) { static iMSGArg1; iMSGArg1 = get_msg_arg_int( 1 ); if( iMSGArg1 == 2 ) { show_menu( id, 51, TEAM_MENU2, -1 ); return PLUGIN_HANDLED; } return PLUGIN_CONTINUE; } public Message_ShowMenu( iMSGId, iDest, id ) { static iMSGArg1; iMSGArg1 = get_msg_arg_int( 1 ); if( iMSGArg1 != 531 && iMSGArg1 != 563 ) return PLUGIN_CONTINUE; show_menu( id, 51, TEAM_MENU2, -1 ); return PLUGIN_HANDLED; } public Event_CurWeapon( id ) { new iWeapon = read_data( 2 ); switch( cs_get_user_team( id ) ) { case TEAM_HUMAN: { if( IsPrimaryWeapon( iWeapon ) || IsSecondaryWeapon( iWeapon ) ) { if( cs_get_user_bpammo( id, iWeapon ) != g_iMaxBPAmmo[ iWeapon ] ) { cs_set_user_bpammo( id, iWeapon, g_iMaxBPAmmo[ iWeapon ] ); } if( g_bAdrenalineActive[ id ] ) { new iEnt = find_ent_by_owner( -1, g_szWeaponClassnames[ iWeapon ], id ); if( !pev_valid( iEnt ) ) return; cs_set_weapon_ammo( iEnt, g_iMaxClipAmmo[ iWeapon ] ); } } if( g_bAdrenalineActive[ id ] ) { set_user_maxspeed( id, get_pcvar_float( g_pAdrenalineSpeed ) ); } } case TEAM_NC: { if( iWeapon == CSW_KNIFE ) { set_pev( id, pev_viewmodel2, g_szNCKnife_V ); } } } } public CreateMenus() { g_hWeaponMenu = menu_create( "Weapons Menu", "WeaponMenu_Handler" ); menu_additem( g_hWeaponMenu, "New Weapons", "0" ); menu_additem( g_hWeaponMenu, "Previous Weapons", "1" ); menu_additem( g_hWeaponMenu, "2 + Don't Ask Again", "2" ); g_hPrimaryWeaponMenu = menu_create( "Primary Weapons", "PrimaryMenu_Handler" ); g_hSecondaryWeaponMenu = menu_create( "Secondary Weapons", "SecondaryMenu_Handler" ); new szInfo[ 3 ]; for( new i = MIN_WEAPON; i <= MAX_WEAPON; i++ ) { if( IsPrimaryWeapon( i ) ) { num_to_str( i, szInfo, charsmax( szInfo ) ); menu_additem( g_hPrimaryWeaponMenu, g_szWeaponNames[ i ], szInfo ); } else if( IsSecondaryWeapon( i ) ) { num_to_str( i, szInfo, charsmax( szInfo ) ); menu_additem( g_hSecondaryWeaponMenu, g_szWeaponNames[ i ], szInfo ); } else continue; } g_hItemsMenu = menu_create( "Choose an Item:", "ItemsMenu_Handler" ); for( new i = 0; i < ItemsInfo; i++ ) { num_to_str( i, szInfo, charsmax( szInfo ) ); if( i == ITEM_LASER ) { menu_additem( g_hItemsMenu, g_szItemNames[ i ], szInfo, _, menu_makecallback( "LaserItem_Callback" ) ); } else menu_additem( g_hItemsMenu, g_szItemNames[ i ], szInfo ); } } public LaserItem_Callback( id, hMenu, iItem ) { if( g_iCurrentRound == 0 ) return ITEM_DISABLED; new iFrags = get_user_frags( id ); new iDeaths = get_user_deaths( id ); new iPlayerFrags; new iPlayers[ 32 ], iNum; get_players( iPlayers, iNum, "ae", "CT" ); for( new i = 0, iPlayer; i < iNum; i++ ) { iPlayer = iPlayers[ i ]; if( !is_user_alive( iPlayer ) || iPlayer == id ) continue; iPlayerFrags = get_user_frags( iPlayer ); if( iPlayerFrags > iFrags ) return ITEM_DISABLED; else if( iPlayerFrags == iFrags ) { if( get_user_deaths( iPlayer ) < iDeaths ) return ITEM_DISABLED; } } return ITEM_ENABLED; } public Ham_PlayerSpawn_Post( id ) { if( !is_user_alive( id ) ) return HAM_IGNORED; strip_user_weapons( id ); give_item( id, "weapon_knife" ); new CsTeams:iTeam = cs_get_user_team( id ); if( g_bNCNextRound[ id ] ) { if( iTeam != TEAM_NC ) { cs_set_user_team( id, TEAM_NC ); ExecuteHamB( Ham_CS_RoundRespawn, id ); g_bNCNextRound[ id ] = false; return HAM_IGNORED; } g_bNCNextRound[ id ] = false; } switch( iTeam ) { case TEAM_NC: { cs_set_user_model( id, "nightcrawler" ); if( get_user_weapon( id ) == CSW_KNIFE ) set_pev( id, pev_viewmodel2, g_szNCKnife_V ); client_print( id, print_chat, "%s You are now invisible.", g_szPrefix ); set_user_health( id, get_pcvar_num( g_pNightcrawlerHealth ) ); set_user_gravity( id, get_pcvar_float( g_pNightcrawlerGravity ) / 800 ); set_user_maxspeed( id, get_pcvar_float( g_pNightcrawlerSpeed ) ); set_user_footsteps( id, 1 ); g_iTeleportsRemaining[ id ] = get_pcvar_num( g_pNightcrawlerTeleCount ); g_bVisible[ id ] = false; } case TEAM_HUMAN: { if( g_bRememberGuns[ id ] ) GiveWeapons( id ); else if( g_iPrimaryWeapon[ id ] == 0 || g_iSecondaryWeapon[ id ] == 0 ) { menu_display( id, g_hPrimaryWeaponMenu ); } else menu_display( id, g_hWeaponMenu ); set_user_footsteps( id, 0 ); cs_set_user_model( id, "gign" ); g_bVisible[ id ] = true; } } g_bNCNextRound[ id ] = false; return HAM_IGNORED; } public Ham_PlayerKilled_Post( iVictim, iKiller, iShouldGib ) { if( !is_user_alive( iKiller ) ) return HAM_IGNORED; switch( cs_get_user_team( iKiller ) ) { case TEAM_HUMAN: { if( cs_get_user_team( iVictim ) == TEAM_NC ) { client_print( iVictim, print_chat, "%s You were killed by a human and are now one also!", g_szPrefix ); cs_set_user_team( iVictim, TEAM_HUMAN ); if( !g_bNCNextRound[ iKiller ] ) { client_print( iKiller, print_chat, "%s You killed a Night-Crawler and will be one next round!", g_szPrefix ); g_bNCNextRound[ iKiller ] = true; } } } case TEAM_NC: { if( cs_get_user_team( iVictim ) == TEAM_HUMAN ) { client_print( iKiller, print_chat, "%s You killed a human!", g_szPrefix ); client_print( iVictim, print_chat, "%s You were killed by a Night-Crawler!", g_szPrefix ); } } } return HAM_IGNORED; } public Ham_PlayerTakeDamage_Post( iVictim, iInflictor, iAttacker, Float:flDamage, iBits ) { if( is_user_connected( iAttacker ) && cs_get_user_team( iVictim ) == TEAM_NC ) { remove_task( TASK_INVISIBLE + iVictim ); g_bVisible[ iVictim ] = true; set_task( get_pcvar_float( g_pNightcrawlerVisibleTime ), "Task_SetInvisible", iVictim + TASK_INVISIBLE ); if( g_iChosenItem[ iAttacker ] == ITEM_POISON && iInflictor == CSW_SCOUT ) { g_iPoisonRemaining[ iVictim ] = get_pcvar_num( g_pPoisonAmount ); remove_task( TASK_POISON + iVictim ); new szParams[ 2 ]; szParams[ 0 ] = iAttacker; set_task( get_pcvar_float( g_pPoisonInterval ), "Task_Poison", TASK_POISON + iVictim, szParams, 2 ); } } } public Task_Poison( szParams[ ], iTaskID ) { new iAttacker = szParams[ 0 ]; new id = iTaskID - TASK_POISON; ExecuteHam( Ham_TakeDamage, id, iAttacker, iAttacker, get_pcvar_float( g_pPoisonDamage ), DMG_GENERIC ); if( --g_iPoisonRemaining[ id ] > 0 ) { set_task( get_pcvar_float( g_pPoisonInterval ), "Task_PoisonHurt", iTaskID ); } } public GiveWeapons( id ) { new iPrimary = g_iPrimaryWeapon[ id ]; new iSecondary = g_iSecondaryWeapon[ id ]; give_item( id, g_szWeaponClassnames[ iPrimary ] ); give_item( id, g_szWeaponClassnames[ iSecondary ] ); cs_set_user_bpammo( id, iPrimary, g_iMaxBPAmmo[ iPrimary ] ); cs_set_user_bpammo( id, iSecondary, g_iMaxBPAmmo[ iSecondary ] ); } public WeaponMenu_Handler( id, hMenu, iItem ) { switch( iItem ) { case 0: menu_display( id, g_hPrimaryWeaponMenu, 0 ); case 1: { GiveWeapons( id ); menu_display( id, g_hItemsMenu, 0 ); } case 2: { GiveWeapons( id ); g_bRememberGuns[ id ] = true; menu_display( id, g_hItemsMenu, 0 ); } } } public PrimaryMenu_Handler( id, hMenu, iItem ) { if( iItem == MENU_EXIT ) { menu_display( id, g_hItemsMenu, 0 ); return PLUGIN_HANDLED; } new iAccess, hCallback; new szData[ 6 ]; menu_item_getinfo( hMenu, iItem, iAccess, szData, charsmax( szData ), _, _, hCallback ); g_iPrimaryWeapon[ id ] = str_to_num( szData ); menu_display( id, g_hSecondaryWeaponMenu, 0 ); return PLUGIN_HANDLED; } public SecondaryMenu_Handler( id, hMenu, iItem ) { if( iItem == MENU_EXIT ) { menu_display( id, g_hItemsMenu, 0 ); return PLUGIN_HANDLED; } new iAccess, hCallback; new szData[ 6 ]; menu_item_getinfo( hMenu, iItem, iAccess, szData, charsmax( szData ), _, _, hCallback ); g_iSecondaryWeapon[ id ] = str_to_num( szData ); GiveWeapons( id ); menu_display( id, g_hItemsMenu, 0 ); return PLUGIN_HANDLED; } public ItemsMenu_Handler( id, hMenu, iItem ) { g_iChosenItem[ id ] = iItem; switch( iItem ) { case ITEM_LASER: { g_bHasLaser[ id ] = true; } case ITEM_ADRENALINE: { client_print( id, print_chat, "%s Bind a key to 'item' to inject adrenaline.", g_szPrefix ); g_iAdrenalineUses[ id ] = get_pcvar_num( g_pAdrenalineUses ); } case ITEM_MEDKIT: { client_print( id, print_chat, "%s Bind a key to 'item' to use a medical kit.", g_szPrefix ); g_iMedKitUses[ id ] = get_pcvar_num( g_pMedKitUses ); } case ITEM_SUICIDE: { client_print( id, print_chat, "%s Bind a key to 'item' to start the countdown.", g_szPrefix ); } case ITEM_POISON: { client_print( id, print_chat, "%s All bullets fired with a scout will be poisonous.", g_szPrefix ); } } return PLUGIN_HANDLED; } public Task_StartGame() { new iPlayers[ 32 ], iNum; get_players( iPlayers, iNum ); new iNCAmount = ( get_pcvar_num( g_pNightcrawlerRatio ) * iNum ) / 100 - g_iTeamCount[ TEAM_NC ]; if( iNCAmount == 0 && iNum > 1 ) iNCAmount = 1; new iRandom; for( new i = 0; i < iNCAmount; i++ ) { iRandom = random( iNum ); cs_set_user_team( iPlayers[ iRandom ], TEAM_NC ); iPlayers[ iRandom ] = iPlayers[ --iNum ]; } server_cmd( "sv_restartround 1 " ); } public CmdEnableGuns( id ) { if( g_bRememberGuns[ id ] ) { client_print( id, print_chat, "%s Your gun menu has been re-enabled.", g_szPrefix ); g_bRememberGuns[ id ] = false; } else client_print( id, print_chat, "%s Your gun menu is already enabled!", g_szPrefix ); } public CmdUseItem( id ) { switch( cs_get_user_team( id ) ) { case TEAM_NC: { if( g_iTeleportsRemaining[ id ] > 0 ) { new Float:flGameTime = get_gametime(); new iDelay = get_pcvar_num( g_pNightcrawlerTeleDelay ); if( flGameTime - g_flLastTeleportTime[ id ] < iDelay ) { client_print( id, print_chat, "%s You must wait %i seconds inbetween teleports.", g_szPrefix, iDelay ); return; } else if( TeleportPlayer( id ) ) { g_iTeleportsRemaining[ id ]--; g_flLastTeleportTime[ id ] = get_gametime(); } } } case TEAM_HUMAN: { switch( g_iChosenItem[ id ] ) { case ITEM_ADRENALINE: { if( g_bAdrenalineActive[ id ] ) { client_print( id, print_chat, "%s Adrenaline is already active!", g_szPrefix ); } else if( g_iAdrenalineUses[ id ] > 0 ) { g_iAdrenalineUses[ id ]--; client_print( id, print_chat, "%s You have injected adrenaline!", g_szPrefix ); g_bAdrenalineActive[ id ] = true; set_user_maxspeed( id, get_pcvar_float( g_pAdrenalineSpeed ) ); set_task( get_pcvar_float( g_pAdrenalineTime ), "Task_RemoveAdrenaline", TASK_ADRENALINE + id ); } } case ITEM_MEDKIT: { if( g_iMedKitUses[ id ] > 0 ) { g_iMedKitUses[ id ]--; client_print( id, print_chat, "%s You have used one of your medical kits. You have %i more.", g_szPrefix, g_iMedKitUses[ id ] ); set_user_health( id, 100 ); } } case ITEM_SUICIDE: { if( task_exists( TASK_SUICIDE + id ) ) return; g_iSuicideTime[ id ] = get_pcvar_num( g_pSuicideTime ); Task_Suicide( TASK_SUICIDE + id ); set_task( 1.0, "Task_Suicide", TASK_SUICIDE + id, .flags="a", .repeat=g_iSuicideTime[ id ] ); } } } } } public Task_SetInvisible( iTaskID ) { new id = iTaskID - TASK_INVISIBLE; g_bVisible[ id ] = false; } public Task_Suicide( iTaskID ) { new id = iTaskID - TASK_SUICIDE; if( --g_iSuicideTime[ id ] == 0 ) { new Float:flOrigin[ 3 ]; pev( id, pev_origin, flOrigin ); user_kill( id ); message_begin( MSG_BROADCAST, SVC_TEMPENTITY ); write_byte( TE_EXPLOSION ); write_coord( floatround( flOrigin[ 0 ] ) ); write_coord( floatround( flOrigin[ 1 ] ) ); write_coord( floatround( flOrigin[ 2 ] ) ); write_short( g_iExplosionSprite ); write_byte( 30 ); write_byte( 30 ); write_byte( 0 ); message_end(); fm_radius_damage( id, flOrigin, get_pcvar_float( g_pSuicideDamage ), get_pcvar_float( g_pSuicideRadius ) ); } else emit_sound( id, CHAN_ITEM, g_szSuicideBombSound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM ); } // Taken from Jailbreak Mod by Pastout. stock fm_radius_damage( id, Float:flOrigin[ 3 ], Float:flDamage, Float:flRadius ) { new szClassname[ 33 ], CsTeams:iTeam; iTeam = cs_get_user_team( id ); static iEnt; iEnt = -1; while( ( iEnt = engfunc( EngFunc_FindEntityInSphere, iEnt, flOrigin, flRadius ) ) ) { pev( iEnt, pev_classname, szClassname, charsmax( szClassname ) ); if( !equali( szClassname, "player" ) || !is_user_alive( iEnt ) || cs_get_user_team( iEnt ) == iTeam ) continue; ExecuteHamB( Ham_TakeDamage, iEnt, 0, id, flDamage, DMG_GENERIC ); } } // Taken from Jailbreak Mod by Pastout stock createKill(id, attacker, weaponDescription[]) { new iFrags, iFrags2; if(id != attacker) { iFrags = get_user_frags(attacker); set_user_frags(attacker, iFrags + 1); //Kill the victim and block the messages set_msg_block(g_msgDeath,BLOCK_ONCE); set_msg_block(g_msgScoreInfo,BLOCK_ONCE); user_kill(id); //user_kill removes a frag, this gives it back iFrags2 = get_user_frags(id); set_user_frags(id, iFrags2 + 1); //Replaced HUD death message message_begin(MSG_ALL, g_msgDeath,{0,0,0},0); write_byte(attacker); write_byte(id); write_byte(0); write_string(weaponDescription); message_end(); //Update killers scorboard with new info message_begin(MSG_ALL, g_msgScoreInfo); write_byte(attacker); write_short(iFrags); write_short(get_user_deaths(attacker)); write_short(0); write_short(get_user_team(attacker)); message_end(); //Update victims scoreboard with correct info message_begin(MSG_ALL, g_msgScoreInfo); write_byte(id); write_short(iFrags2); write_short(get_user_deaths(id)); write_short(0); write_short(get_user_team(id)); message_end(); new szName[32], szName1[32]; get_user_name(id, szName, 31); get_user_name(attacker, szName1, 31); } } public Task_RemoveAdrenaline( iTaskID ) { new id = iTaskID - TASK_ADRENALINE; g_bAdrenalineActive[ id ] = false; if( is_user_alive( id ) ) set_user_maxspeed( id, 0.0 ); } public Forward_AddToFullPack_Post( es, e, iEntity, iHost, iHostFlags, iPlayer, pSet ) { if( is_user_alive( iEntity ) && is_user_alive( iHost ) && cs_get_user_team( iEntity ) == TEAM_NC && cs_get_user_team( iHost ) == TEAM_HUMAN ) { set_es( es, ES_RenderMode, kRenderTransAdd ); if( g_bVisible[ iEntity ] ) set_es( es, ES_RenderAmt, 255 ); else set_es( es, ES_RenderAmt, 0 ); } } CountTeams() { for( new i = 1; i <= g_iMaxPlayers; i++ ) { if( !is_user_connected( i ) ) continue; g_iTeamCount[ cs_get_user_team( i ) ]++; } } // Credits to NiHiLaNTh TeleportPlayer( iPlayer ) { new Float:vOrigin[ 3 ], Float:vViewOfs[ 3 ]; pev( iPlayer, pev_origin, vOrigin ); pev( iPlayer, pev_view_ofs, vViewOfs ); xs_vec_add( vOrigin, vViewOfs, vOrigin ); new Float:vViewAngle[ 3 ]; pev( iPlayer, pev_v_angle, vViewAngle ); new Float:vAimVector[ 3 ]; angle_vector( vViewAngle, ANGLEVECTOR_FORWARD, vAimVector ); xs_vec_normalize( vAimVector, vAimVector ); xs_vec_mul_scalar( vAimVector, 9999.0, vAimVector ); engfunc( EngFunc_TraceLine, vOrigin, vAimVector, 0, iPlayer, 0 ); get_tr2( 0, TR_vecEndPos, vAimVector ); get_tr2( 0, TR_vecPlaneNormal, vOrigin ); xs_vec_normalize( vOrigin, vOrigin ); xs_vec_mul_scalar( vOrigin, 36.0, vOrigin ); xs_vec_add( vAimVector, vOrigin, vOrigin ); new bool:bDucking = false; if( trace_hull( vOrigin, HULL_HUMAN, iPlayer ) ) { if( !trace_hull( vOrigin, HULL_HEAD, iPlayer ) ) { bDucking = true; } else { // player cannot duck or stand clearly, so try to move the origin so player can new iResetCount; test_new_origin: if( ++iResetCount > 4 ) { // too many tries to find a good origin. just set to fail. client_print( iPlayer, print_center, "You cannot teleport there! You will be stuck!" ); return 0; } for( new i = 0; i < 6; i++ ) { switch( i ) { case 0: { // check above x xs_vec_copy( vOrigin, vViewOfs ); vViewOfs[ 0 ] += 16.0; engfunc( EngFunc_TraceLine, vOrigin, vViewOfs, 0, iPlayer, 0 ); get_tr2( 0, TR_flFraction, vViewOfs[ 0 ] ); if( vViewOfs[ 0 ] != 1.0 ) { get_tr2( 0, TR_vecEndPos, vViewOfs ); vOrigin[ 0 ] = vViewOfs[ 0 ] - 16.0; goto test_new_origin; } } case 1: { // check below x xs_vec_copy( vOrigin, vViewOfs ); vViewOfs[ 0 ] -= 16.0; engfunc( EngFunc_TraceLine, vOrigin, vViewOfs, 0, iPlayer, 0 ); get_tr2( 0, TR_flFraction, vViewOfs[ 0 ] ); if( vViewOfs[ 0 ] != 1.0 ) { get_tr2( 0, TR_vecEndPos, vViewOfs ); vOrigin[ 0 ] = vViewOfs[ 0 ] + 16.0; goto test_new_origin; } } case 2: { // check above y xs_vec_copy( vOrigin, vViewOfs ); vViewOfs[ 1 ] += 16.0; engfunc( EngFunc_TraceLine, vOrigin, vViewOfs, 0, iPlayer, 0 ); get_tr2( 0, TR_flFraction, vViewOfs[ 0 ] ); if( vViewOfs[ 0 ] != 1.0 ) { get_tr2( 0, TR_vecEndPos, vViewOfs ); vOrigin[ 1 ] = vViewOfs[ 1 ] - 16.0; goto test_new_origin; } } case 3: { // check below y xs_vec_copy( vOrigin, vViewOfs ); vViewOfs[ 1 ] -= 16.0; engfunc( EngFunc_TraceLine, vOrigin, vViewOfs, 0, iPlayer, 0 ); get_tr2( 0, TR_flFraction, vViewOfs[ 0 ] ); if( vViewOfs[ 0 ] != 1.0 ) { get_tr2( 0, TR_vecEndPos, vViewOfs ); vOrigin[ 1 ] = vViewOfs[ 1 ] + 16.0; goto test_new_origin; } } case 4: { // check above z xs_vec_copy( vOrigin, vViewOfs ); vViewOfs[ 2 ] += 36.0; engfunc( EngFunc_TraceLine, vOrigin, vViewOfs, 0, iPlayer, 0 ); get_tr2( 0, TR_flFraction, vViewOfs[ 0 ] ); if( vViewOfs[ 0 ] != 1.0 ) { xs_vec_copy( vOrigin, vViewOfs ); vViewOfs[ 2 ] += 18.0; engfunc( EngFunc_TraceLine, vOrigin, vViewOfs, 0, iPlayer, 0 ); get_tr2( 0, TR_flFraction, vViewOfs[ 0 ] ); if( vViewOfs[ 0 ] != 1.0 ) { get_tr2( 0, TR_vecEndPos, vViewOfs ); vOrigin[ 2 ] = vViewOfs[ 2 ] - 36.0; goto test_new_origin; } bDucking = true; } } case 5: { // check below z xs_vec_copy( vOrigin, vViewOfs ); vViewOfs[ 2 ] -= 36.0; engfunc( EngFunc_TraceLine, vOrigin, vViewOfs, 0, iPlayer, 0 ); get_tr2( 0, TR_flFraction, vViewOfs[ 0 ] ); if( vViewOfs[ 0 ] != 1.0 ) { xs_vec_copy( vOrigin, vViewOfs ); vViewOfs[ 2 ] -= 18.0; engfunc( EngFunc_TraceLine, vOrigin, vViewOfs, 0, iPlayer, 0 ); get_tr2( 0, TR_flFraction, vViewOfs[ 0 ] ); if( vViewOfs[ 0 ] != 1.0 ) { get_tr2( 0, TR_vecEndPos, vViewOfs ); vOrigin[ 2 ] = vViewOfs[ 2 ] + 36.0; goto test_new_origin; } bDucking = true; } } } } } } if( engfunc( EngFunc_PointContents, vOrigin ) != CONTENTS_EMPTY ) { client_print( iPlayer, print_center, "You can't teleport there!" ); return 0; } if( bDucking ) { set_pev( iPlayer, pev_flags, pev( iPlayer, pev_flags ) | FL_DUCKING ); engfunc( EngFunc_SetSize, iPlayer, Float:{ -16.0, -16.0, -18.0 }, Float:{ 16.0, 16.0, 18.0 } ); } engfunc( EngFunc_SetOrigin, iPlayer, vOrigin ); return 1; }