Existing user? Sign in
Sign up
Games
Servers
Useful
User
Pass
2FA
[rezolvat]Problema plugin .
Freakz Forum Index
->
Trash Bin
->
CS 2006-2019 (Archived)
->
Plugins - Help / Support
Author
Message
983
CraZzy - 7Up
[CrazzyRO]
Status: Offline
(since 20-12-2018 20:01)
Joined: 26 Jun 2013
Posts: 605
,
Topics: 36
Location:
Severin .
Reputation:
150
Votes
: 23
Posted: 02-02-2015, 14:48:47
| Translate post to:
... (
Click for more languages
)
Nume*: dr_fixround
Descriere problema*: Am pus 2 boti la spec , si pluginul daca vreun tero iese de pe server , ii muta la Tero si raman blocati , player reusind astfel sa faca xp de pe urma lor .
Spoiler:
/*
Death Run fix round by P.Of.Pw
ver. 2.0
News in v2.0:
[ro]
- fixare cateva greseli
- optimizare
- mai multa redabilitate
[en]
- fixed some mistake
- optimization
- more readability
[ro] De asemenea 'decomentati' linia 163 din DeathrunManager.sma [ set_task( 15.0, "CheckTerrorists", _, _, _, "b" ); ]
Cum sa decomentati ?
R: deschideti DeathrunManager.sma si modificati set_task( 15.0, "CheckTerrorists", _, _, _, "b" );
in
//set_task( 15.0, "CheckTerrorists", _, _, _, "b" );
* Optional
[en]
Also uncomment this line from DeathrunManager.sma
set_task( 15.0, "CheckTerrorists", _, _, _, "b" );
How to uncomment ?
R: open the DeathrunManager.sma and change this line set_task( 15.0, "CheckTerrorists", _, _, _, "b" );
to:
//set_task( 15.0, "CheckTerrorists", _, _, _, "b" );
*** Optional ***
*/
/*
-- Optional:
-- Decomentati aceste lini ; Uncomment these lines
*/
// bonus: in fraguri ; frags bonus ( pentru Ts nou; for new Terroris )
#define BONUS_FRAGS
// bonus: nu face
dmg
la prima cazatura; no first fall
dmg
pentru Ts nou; for new Terroris )
#define BONUS_NO_FIRST_FALLDMG
// creaza un jurnal ; create a logs file (addons\amxmodx\logs\dr_last_t_disc.txt)
#define LOGS
// cate fraguri primeste ; how many frags receives ( pentru Ts nou; for new Terroris )
#define FRAGS_NUM 10
// pentru unstuck ; for unstuck
#define START_DISTANCE 32
#define MAX_ATTEMPTS 128
#include < amxmodx >
#include < hamsandwich >
#include < fakemeta >
#include < fun >
#include < engine >
#pragma tabsize 0
/*================================================================================
[Start...]
=================================================================================*/
enum Coord_e { Float:x, Float:y, Float:z }
enum CsTeams
{
CS_TEAM_UNASSIGNED = 0,
CS_TEAM_T = 1,
CS_TEAM_CT = 2,
CS_TEAM_SPECTATOR = 3
}
#define TASK_TEAM 59813
#define ID_TEAM (taskid - TASK_TEAM)
new const CS_TEAM_NAMES[ ][ ] = { "UNASSIGNED", "TERRORIST", "CT", "SPECTATOR" }
const OFFSET_EXTRALNX = 5
const OFFSET_CSTEAMS = 114
#define DMG_FALL (1<<5)
#define GetPlayerHullSize(%1) ( ( pev ( %1, pev_flags ) & FL_DUCKING ) ? HULL_HEAD : HULL_HUMAN )
#define FIRST_ID 1
#define IsValidConnected(%1) ( FIRST_ID <= %1 <= g_iMaxPlayers && g_iIsConnected[ %1 ] )
#define MarkUserAlive(%1) g_bAlive |= 1<<(%1 & 31)
#define ClearUserAlive(%1) g_bAlive &= ~( 1<<(%1 & 31) )
#define IsAlive(%1) g_bAlive & 1<<(%1 & 31)
new g_bAlive
new Float:g_fTeamsUpdates
new g_iMaxPlayers
new g_iMsgTeamInfo
new g_iMsgSayText
#if defined BONUS_NO_FIRST_FALLDMG
new g_iIsNewTs[ 33 ]
#endif
new g_iIsConnected[ 33 ]
#if defined BONUS_FRAGS
new g_iMsgScoreInfo
#endif
new Float:g_iOrigin[ 33 ][ 3 ]
/*================================================================================
[Init]
=================================================================================*/
public plugin_init( )
{
register_plugin( "[DR 700] FIX Round", "2.0", "P.Of.Pw" )
register_cvar( "dr_fixround", "2.0/P.Of.Pw", FCVAR_SERVER | FCVAR_SPONLY )
RegisterHam( Ham_Spawn, "player", "Ham_CBasePlayer_Spawn_Post", 1 )
RegisterHam( Ham_Killed, "player", "Ham_CBasePlayer_Killed_Post", 1 )
#if defined BONUS_NO_FIRST_FALLDMG
RegisterHam( Ham_TakeDamage, "player", "Ham_CBasePlayer_TakeDamage" )
#endif
register_forward( FM_ClientDisconnect, "fw_ClientDisconnect" )
g_iMaxPlayers = get_maxplayers( )
g_iMsgTeamInfo = get_user_msgid( "TeamInfo" )
g_iMsgSayText = get_user_msgid( "SayText" )
#if defined BONUS_FRAGS
g_iMsgScoreInfo = get_user_msgid( "ScoreInfo" )
#endif
}
/*================================================================================
[Client put in server]
=================================================================================*/
public client_putinserver( id )
{
g_iIsConnected[ id ] = true
ClearUserAlive( id )
}
/*================================================================================
[Ham player spawn post forward]
=================================================================================*/
public Ham_CBasePlayer_Spawn_Post( id )
{
#if defined BONUS_NO_FIRST_FALLDMG
g_iIsNewTs[ id ] = false
#endif
remove_task( id+TASK_TEAM )
if( is_user_alive( id ) )
{
MarkUserAlive( id)
}
else
{
ClearUserAlive( id )
}
}
/*================================================================================
[Ham player killed forward]
=================================================================================*/
public Ham_CBasePlayer_Killed_Post( id )
{
if( is_user_alive( id ) )
{
MarkUserAlive( id)
}
else
{
ClearUserAlive( id )
}
}
/*================================================================================
[Ham player damage forward]
=================================================================================*/
#if defined BONUS_NO_FIRST_FALLDMG
public Ham_CBasePlayer_TakeDamage( id, inflictor, attacker, Float:damage, damage_type )
{
if( g_iIsNewTs[ id ] && damage_type & DMG_FALL )
{
g_iIsNewTs[ id ] = false
return HAM_SUPERCEDE
}
return HAM_IGNORED
}
#endif
/*================================================================================
[Eng get user origin] ; not very good method ;(
=================================================================================*/
public client_PreThink( id )
{
if( IsValidConnected( id ) && IsAlive( id ) )
entity_get_vector( id, EV_VEC_origin, g_iOrigin[ id ] )
}
/*================================================================================
[Fm client disconnecting]
=================================================================================*/
public fw_ClientDisconnect( id )
{
check_round( id )
remove_task( id+TASK_TEAM )
g_iIsConnected[ id ] = false
ClearUserAlive( id )
#if defined BONUS_NO_FIRST_FALLDMG
g_iIsNewTs[ id ] = false
#endif
}
/*================================================================================
[Set new Ts]
=================================================================================*/
public check_round( leaving_player )
{
static iPlayersnum, id
iPlayersnum = fnGetPlaying( )
if( iPlayersnum < 2 )
return;
static iTnum
iTnum = fnGetTeamCount( CS_TEAM_T )
if( !iTnum || iTnum < 1 )
{
static iCTnum
iCTnum = fnGetTeamCount( CS_TEAM_CT )
if( !iCTnum || iCTnum == 1 )
return;
id = fnGetRandomPlayer( )
while( ( id == leaving_player ) ) { }
if( !is_user_alive( id ) )
ExecuteHamB( Ham_CS_RoundRespawn, id )
set_terrorist_team( id )
#if defined BONUS_NO_FIRST_FALLDMG
g_iIsNewTs[ id ] = true
#endif
DispatchSpawn( id )
//g_iOrigin[ leaving_player ][ 2 ] += 20
entity_set_vector( id, EV_VEC_origin, g_iOrigin[ leaving_player ] )
entity_set_vector( id, EV_VEC_velocity, Float:{ 0.0, 0.0, 0.0 } )
new name[ 32 ]
get_user_name( id, name, 31 )
entity_get_vector( id, EV_VEC_origin, g_iOrigin[ id ] )
if( IsUserStuck( id, g_iOrigin[ id ], entity_get_int( id, EV_INT_flags ) ) )
{
UTIL_UnstickPlayer( id, START_DISTANCE, MAX_ATTEMPTS )
}
set_task( 3.0, "check_user_stuck", id )
ColorChatSimple( 0, "^4[DR] ^3%s ^1este ^4puscarias^3 nou!", name )
#if defined BONUS_FRAGS
set_user_frags( id, get_user_frags( id ) + FRAGS_NUM )
set_user_frags_update( id )
#endif
#if defined LOGS
static buffer[ 150 ]
new name_leav[ 32 ]
get_user_name( leaving_player, name_leav, 31 )
formatex( buffer, charsmax( buffer ), "%s a fost mutat la TS, deoarece teroristul %s s-a deconectat!", name, name_leav )
log_to_file( "dr_last_t_disc.txt", buffer )
#endif
}
}
public check_user_stuck( id )
{
new Float:newOrigin[ 3 ]
entity_get_vector( id, EV_VEC_origin, newOrigin )
if( IsUserStuck( id, newOrigin, entity_get_int( id, EV_INT_flags ) ) )
{
UTIL_UnstickPlayer( id, START_DISTANCE, MAX_ATTEMPTS )
}
}
/*================================================================================
[Fn stocks]
=================================================================================*/
fnGetPlaying( )
{
static iPlaying, id, CsTeams:team
iPlaying = 0
for( id = 1; id <= g_iMaxPlayers; id++ )
{
if( IsValidConnected( id ) )
{
team = fm_cs_get_user_team( id )
if( team != CS_TEAM_UNASSIGNED && team != CS_TEAM_SPECTATOR )
iPlaying++
}
}
return iPlaying;
}
fnGetRandomPlayer( const flags[ ] = "", const teamORname[ ] = "" )
{
new players[ 32 ], pnum
get_players( players, pnum, flags, teamORname )
return ( pnum > 0 ) ? players[ random( pnum ) ] : 0
}
fnGetTeamCount( CsTeams:iTeam )
{
new iPlayers[ 32 ], iPlayerCount
new iTeamPlayers[ CsTeams ]
get_players( iPlayers, iPlayerCount )
for ( new i = 0; i < iPlayerCount; i++ )
iTeamPlayers[ fm_cs_get_user_team( iPlayers[ i ] ) ]++
return iTeamPlayers[ iTeam ]
}
/*================================================================================
[......]
=================================================================================*/
set_terrorist_team( id )
{
if( fm_cs_get_user_team( id ) != CS_TEAM_T )
{
remove_task( id+TASK_TEAM )
fm_cs_set_user_team( id, CS_TEAM_T )
user_team_update( id )
}
}
ColorChatSimple( id, const fmt[ ], any:... )
{
new szMsg[ 192 ]
szMsg[ 0 ] = 0x04
vformat( szMsg[ 1 ], charsmax( szMsg ) - 1, fmt, 3 )
new MSG_TARGET = id ? MSG_ONE_UNRELIABLE : MSG_ALL
message_begin( MSG_TARGET, g_iMsgSayText, _, id )
{
write_byte( id ? id : 1 )
write_string( szMsg )
}
message_end()
}
/*================================================================================
[Stocks]
=================================================================================*/
stock CsTeams:fm_cs_get_user_team( id )
{
return CsTeams:get_pdata_int( id, OFFSET_CSTEAMS, OFFSET_EXTRALNX )
}
stock fm_cs_set_user_team( id, { CsTeams, _ }:team )
{
set_pdata_int( id, OFFSET_CSTEAMS, _:team, OFFSET_EXTRALNX )
}
stock user_team_update( id )
{
static Float:current_time
current_time = get_gametime( )
if( current_time - g_fTeamsUpdates >= 0.1 )
{
set_task( 0.1, "set_user_team_msg", id+TASK_TEAM )
g_fTeamsUpdates = current_time + 0.1
}
else
{
set_task( ( g_fTeamsUpdates + 0.1 ) - current_time, "set_user_team_msg", id+TASK_TEAM )
g_fTeamsUpdates = g_fTeamsUpdates + 0.1
}
}
public set_user_team_msg( taskid )
{
emessage_begin( MSG_ALL, g_iMsgTeamInfo )
ewrite_byte( ID_TEAM )
ewrite_string( CS_TEAM_NAMES[ _:fm_cs_get_user_team( ID_TEAM ) ] )
emessage_end( )
}
#if defined BONUS_FRAGS
set_user_frags_update( id )
{
message_begin( MSG_ALL, g_iMsgScoreInfo )
write_byte( id )
write_short( get_user_frags( id ) )
write_short( get_user_deaths( id ) )
write_short( 0 )
write_short( get_user_team( id ) )
message_end( )
}
#endif
// by Arkshine
bool:IsUserStuck( const id, const Float:vOrigin[ 3 ], const iFlags )
return bool:( trace_hull( vOrigin, iFlags & FL_DUCKING ? HULL_HEAD : HULL_HUMAN, id, IGNORE_MONSTERS ) & 2 )
UTIL_UnstickPlayer( const id, const i_StartDistance, const i_MaxAttempts )
{
if( !is_user_alive( id ) ) return -1;
static Float:vf_OriginalOrigin[ Coord_e ], Float:vf_NewOrigin[ Coord_e ]
static i_Attempts, i_Distance
pev( id, pev_origin, vf_OriginalOrigin )
i_Distance = i_StartDistance
while( i_Distance < 1000 )
{
i_Attempts = i_MaxAttempts
while( i_Attempts-- )
{
vf_NewOrigin[ x ] = random_float( vf_OriginalOrigin[ x ] - i_Distance, vf_OriginalOrigin[ x ] + i_Distance )
vf_NewOrigin[ y ] = random_float( vf_OriginalOrigin[ y ] - i_Distance, vf_OriginalOrigin[ y ] + i_Distance )
vf_NewOrigin[ z ] = random_float( vf_OriginalOrigin[ z ] - i_Distance, vf_OriginalOrigin[ z ] + i_Distance )
engfunc( EngFunc_TraceHull, vf_NewOrigin, vf_NewOrigin, DONT_IGNORE_MONSTERS, GetPlayerHullSize( id ), id, 0 )
if( get_tr2( 0, TR_InOpen ) && !get_tr2( 0, TR_AllSolid ) && !get_tr2( 0, TR_StartSolid ) )
{
engfunc( EngFunc_SetOrigin, id, vf_NewOrigin )
return 1;
}
}
i_Distance += i_StartDistance
}
return 0;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang3081\\ f0\\ fs16 \n\\ par }
*/
Poze : -
0
0
Back to top
destroi112
[DEV]
Status: Offline
(since 12-03-2020 22:13)
Joined: 24 May 2014
Posts: 4042
,
Topics: 119
Location:
---------
Reputation:
515.9
Votes
: 118
Posted: 02-02-2015, 15:06:38
| Translate post to:
... (
Click for more languages
)
Este din dr.manager nu din acest plugin ,cred.
EDIT:Incearca asa daca nu trimite-mi dr.manager sau posteaza-l aici:
Spoiler:
/*
Death Run fix round by P.Of.Pw
ver. 2.0
News in v2.0:
[ro]
- fixare cateva greseli
- optimizare
- mai multa redabilitate
[en]
- fixed some mistake
- optimization
- more readability
[ro] De asemenea 'decomentati' linia 163 din DeathrunManager.sma [ set_task( 15.0, "CheckTerrorists", _, _, _, "b" ); ]
Cum sa decomentati ?
R: deschideti DeathrunManager.sma si modificati set_task( 15.0, "CheckTerrorists", _, _, _, "b" );
in
//set_task( 15.0, "CheckTerrorists", _, _, _, "b" );
* Optional
[en]
Also uncomment this line from DeathrunManager.sma
set_task( 15.0, "CheckTerrorists", _, _, _, "b" );
How to uncomment ?
R: open the DeathrunManager.sma and change this line set_task( 15.0, "CheckTerrorists", _, _, _, "b" );
to:
//set_task( 15.0, "CheckTerrorists", _, _, _, "b" );
*** Optional ***
*/
/*
-- Optional:
-- Decomentati aceste lini ; Uncomment these lines
*/
// bonus: in fraguri ; frags bonus ( pentru Ts nou; for new Terroris )
#define BONUS_FRAGS
// bonus: nu face
dmg
la prima cazatura; no first fall
dmg
pentru Ts nou; for new Terroris )
#define BONUS_NO_FIRST_FALLDMG
// creaza un jurnal ; create a logs file (addons\amxmodx\logs\dr_last_t_disc.txt)
#define LOGS
// cate fraguri primeste ; how many frags receives ( pentru Ts nou; for new Terroris )
#define FRAGS_NUM 10
// pentru unstuck ; for unstuck
#define START_DISTANCE 32
#define MAX_ATTEMPTS 128
#include < amxmodx >
#include < hamsandwich >
#include < fakemeta >
#include < fun >
#include < engine >
#pragma tabsize 0
/*================================================================================
[Start...]
=================================================================================*/
enum Coord_e { Float:x, Float:y, Float:z }
enum CsTeams
{
CS_TEAM_UNASSIGNED = 0,
CS_TEAM_T = 1,
CS_TEAM_CT = 2,
CS_TEAM_SPECTATOR = 3
}
#define TASK_TEAM 59813
#define ID_TEAM (taskid - TASK_TEAM)
new const CS_TEAM_NAMES[ ][ ] = { "UNASSIGNED", "TERRORIST", "CT", "SPECTATOR" }
const OFFSET_EXTRALNX = 5
const OFFSET_CSTEAMS = 114
#define DMG_FALL (1<<5)
#define GetPlayerHullSize(%1) ( ( pev ( %1, pev_flags ) & FL_DUCKING ) ? HULL_HEAD : HULL_HUMAN )
#define FIRST_ID 1
#define IsValidConnected(%1) ( FIRST_ID <= %1 <= g_iMaxPlayers && g_iIsConnected[ %1 ] )
#define MarkUserAlive(%1) g_bAlive |= 1<<(%1 & 31)
#define ClearUserAlive(%1) g_bAlive &= ~( 1<<(%1 & 31) )
#define IsAlive(%1) g_bAlive & 1<<(%1 & 31)
new g_bAlive
new Float:g_fTeamsUpdates
new g_iMaxPlayers
new g_iMsgTeamInfo
new g_iMsgSayText
#if defined BONUS_NO_FIRST_FALLDMG
new g_iIsNewTs[ 33 ]
#endif
new g_iIsConnected[ 33 ]
#if defined BONUS_FRAGS
new g_iMsgScoreInfo
#endif
new Float:g_iOrigin[ 33 ][ 3 ]
/*================================================================================
[Init]
=================================================================================*/
public plugin_init( )
{
register_plugin( "[DR 700] FIX Round", "2.0", "P.Of.Pw" )
register_cvar( "dr_fixround", "2.0/P.Of.Pw", FCVAR_SERVER | FCVAR_SPONLY )
RegisterHam( Ham_Spawn, "player", "Ham_CBasePlayer_Spawn_Post", 1 )
RegisterHam( Ham_Killed, "player", "Ham_CBasePlayer_Killed_Post", 1 )
#if defined BONUS_NO_FIRST_FALLDMG
RegisterHam( Ham_TakeDamage, "player", "Ham_CBasePlayer_TakeDamage" )
#endif
register_forward( FM_ClientDisconnect, "fw_ClientDisconnect" )
g_iMaxPlayers = get_maxplayers( )
g_iMsgTeamInfo = get_user_msgid( "TeamInfo" )
g_iMsgSayText = get_user_msgid( "SayText" )
#if defined BONUS_FRAGS
g_iMsgScoreInfo = get_user_msgid( "ScoreInfo" )
#endif
}
/*================================================================================
[Client put in server]
=================================================================================*/
public client_putinserver( id )
{
g_iIsConnected[ id ] = true
ClearUserAlive( id )
}
/*================================================================================
[Ham player spawn post forward]
=================================================================================*/
public Ham_CBasePlayer_Spawn_Post( id )
{
#if defined BONUS_NO_FIRST_FALLDMG
g_iIsNewTs[ id ] = false
#endif
remove_task( id+TASK_TEAM )
if( is_user_alive( id ) )
{
MarkUserAlive( id)
}
else
{
ClearUserAlive( id )
}
}
/*================================================================================
[Ham player killed forward]
=================================================================================*/
public Ham_CBasePlayer_Killed_Post( id )
{
if( is_user_alive( id ) )
{
MarkUserAlive( id)
}
else
{
ClearUserAlive( id )
}
}
/*================================================================================
[Ham player damage forward]
=================================================================================*/
#if defined BONUS_NO_FIRST_FALLDMG
public Ham_CBasePlayer_TakeDamage( id, inflictor, attacker, Float:damage, damage_type )
{
if( g_iIsNewTs[ id ] && damage_type & DMG_FALL )
{
g_iIsNewTs[ id ] = false
return HAM_SUPERCEDE
}
return HAM_IGNORED
}
#endif
/*================================================================================
[Eng get user origin] ; not very good method ;(
=================================================================================*/
public client_PreThink( id )
{
if( IsValidConnected( id ) && IsAlive( id ) )
entity_get_vector( id, EV_VEC_origin, g_iOrigin[ id ] )
}
/*================================================================================
[Fm client disconnecting]
=================================================================================*/
public fw_ClientDisconnect( id )
{
check_round( id )
remove_task( id+TASK_TEAM )
g_iIsConnected[ id ] = false
ClearUserAlive( id )
#if defined BONUS_NO_FIRST_FALLDMG
g_iIsNewTs[ id ] = false
#endif
}
/*================================================================================
[Set new Ts]
=================================================================================*/
public check_round( leaving_player )
{
static iPlayersnum, id
iPlayersnum = fnGetPlaying( )
if( iPlayersnum < 2 )
return;
static iTnum
iTnum = fnGetTeamCount( CS_TEAM_T )
if( !iTnum || iTnum < 1 )
{
static iCTnum
iCTnum = fnGetTeamCount( CS_TEAM_CT )
if( !iCTnum || iCTnum == 1 )
return;
id = fnGetRandomPlayer( )
while( ( id == leaving_player ) ) { }
if( !is_user_alive( id ) && get_user_team != 0 )
ExecuteHamB( Ham_CS_RoundRespawn, id )
set_terrorist_team( id )
#if defined BONUS_NO_FIRST_FALLDMG
g_iIsNewTs[ id ] = true
#endif
DispatchSpawn( id )
//g_iOrigin[ leaving_player ][ 2 ] += 20
entity_set_vector( id, EV_VEC_origin, g_iOrigin[ leaving_player ] )
entity_set_vector( id, EV_VEC_velocity, Float:{ 0.0, 0.0, 0.0 } )
new name[ 32 ]
get_user_name( id, name, 31 )
entity_get_vector( id, EV_VEC_origin, g_iOrigin[ id ] )
if( IsUserStuck( id, g_iOrigin[ id ], entity_get_int( id, EV_INT_flags ) ) )
{
UTIL_UnstickPlayer( id, START_DISTANCE, MAX_ATTEMPTS )
}
set_task( 3.0, "check_user_stuck", id )
ColorChatSimple( 0, "^4[DR] ^3%s ^1este ^4puscarias^3 nou!", name )
#if defined BONUS_FRAGS
set_user_frags( id, get_user_frags( id ) + FRAGS_NUM )
set_user_frags_update( id )
#endif
#if defined LOGS
static buffer[ 150 ]
new name_leav[ 32 ]
get_user_name( leaving_player, name_leav, 31 )
formatex( buffer, charsmax( buffer ), "%s a fost mutat la TS, deoarece teroristul %s s-a deconectat!", name, name_leav )
log_to_file( "dr_last_t_disc.txt", buffer )
#endif
}
}
public check_user_stuck( id )
{
new Float:newOrigin[ 3 ]
entity_get_vector( id, EV_VEC_origin, newOrigin )
if( IsUserStuck( id, newOrigin, entity_get_int( id, EV_INT_flags ) ) )
{
UTIL_UnstickPlayer( id, START_DISTANCE, MAX_ATTEMPTS )
}
}
/*================================================================================
[Fn stocks]
=================================================================================*/
fnGetPlaying( )
{
static iPlaying, id, CsTeams:team
iPlaying = 0
for( id = 1; id <= g_iMaxPlayers; id++ )
{
if( IsValidConnected( id ) )
{
team = fm_cs_get_user_team( id )
if( team != CS_TEAM_UNASSIGNED && team != CS_TEAM_SPECTATOR )
iPlaying++
}
}
return iPlaying;
}
fnGetRandomPlayer( const flags[ ] = "", const teamORname[ ] = "" )
{
new players[ 32 ], pnum
get_players( players, pnum, flags, teamORname )
return ( pnum > 0 ) ? players[ random( pnum ) ] : 0
}
fnGetTeamCount( CsTeams:iTeam )
{
new iPlayers[ 32 ], iPlayerCount
new iTeamPlayers[ CsTeams ]
get_players( iPlayers, iPlayerCount )
for ( new i = 0; i < iPlayerCount; i++ )
iTeamPlayers[ fm_cs_get_user_team( iPlayers[ i ] ) ]++
return iTeamPlayers[ iTeam ]
}
/*================================================================================
[......]
=================================================================================*/
set_terrorist_team( id )
{
if( fm_cs_get_user_team( id ) != CS_TEAM_T )
{
remove_task( id+TASK_TEAM )
fm_cs_set_user_team( id, CS_TEAM_T )
user_team_update( id )
}
}
ColorChatSimple( id, const fmt[ ], any:... )
{
new szMsg[ 192 ]
szMsg[ 0 ] = 0x04
vformat( szMsg[ 1 ], charsmax( szMsg ) - 1, fmt, 3 )
new MSG_TARGET = id ? MSG_ONE_UNRELIABLE : MSG_ALL
message_begin( MSG_TARGET, g_iMsgSayText, _, id )
{
write_byte( id ? id : 1 )
write_string( szMsg )
}
message_end()
}
/*================================================================================
[Stocks]
=================================================================================*/
stock CsTeams:fm_cs_get_user_team( id )
{
return CsTeams:get_pdata_int( id, OFFSET_CSTEAMS, OFFSET_EXTRALNX )
}
stock fm_cs_set_user_team( id, { CsTeams, _ }:team )
{
set_pdata_int( id, OFFSET_CSTEAMS, _:team, OFFSET_EXTRALNX )
}
stock user_team_update( id )
{
static Float:current_time
current_time = get_gametime( )
if( current_time - g_fTeamsUpdates >= 0.1 )
{
set_task( 0.1, "set_user_team_msg", id+TASK_TEAM )
g_fTeamsUpdates = current_time + 0.1
}
else
{
set_task( ( g_fTeamsUpdates + 0.1 ) - current_time, "set_user_team_msg", id+TASK_TEAM )
g_fTeamsUpdates = g_fTeamsUpdates + 0.1
}
}
public set_user_team_msg( taskid )
{
emessage_begin( MSG_ALL, g_iMsgTeamInfo )
ewrite_byte( ID_TEAM )
ewrite_string( CS_TEAM_NAMES[ _:fm_cs_get_user_team( ID_TEAM ) ] )
emessage_end( )
}
#if defined BONUS_FRAGS
set_user_frags_update( id )
{
message_begin( MSG_ALL, g_iMsgScoreInfo )
write_byte( id )
write_short( get_user_frags( id ) )
write_short( get_user_deaths( id ) )
write_short( 0 )
write_short( get_user_team( id ) )
message_end( )
}
#endif
// by Arkshine
bool:IsUserStuck( const id, const Float:vOrigin[ 3 ], const iFlags )
return bool:( trace_hull( vOrigin, iFlags & FL_DUCKING ? HULL_HEAD : HULL_HUMAN, id, IGNORE_MONSTERS ) & 2 )
UTIL_UnstickPlayer( const id, const i_StartDistance, const i_MaxAttempts )
{
if( !is_user_alive( id ) ) return -1;
static Float:vf_OriginalOrigin[ Coord_e ], Float:vf_NewOrigin[ Coord_e ]
static i_Attempts, i_Distance
pev( id, pev_origin, vf_OriginalOrigin )
i_Distance = i_StartDistance
while( i_Distance < 1000 )
{
i_Attempts = i_MaxAttempts
while( i_Attempts-- )
{
vf_NewOrigin[ x ] = random_float( vf_OriginalOrigin[ x ] - i_Distance, vf_OriginalOrigin[ x ] + i_Distance )
vf_NewOrigin[ y ] = random_float( vf_OriginalOrigin[ y ] - i_Distance, vf_OriginalOrigin[ y ] + i_Distance )
vf_NewOrigin[ z ] = random_float( vf_OriginalOrigin[ z ] - i_Distance, vf_OriginalOrigin[ z ] + i_Distance )
engfunc( EngFunc_TraceHull, vf_NewOrigin, vf_NewOrigin, DONT_IGNORE_MONSTERS, GetPlayerHullSize( id ), id, 0 )
if( get_tr2( 0, TR_InOpen ) && !get_tr2( 0, TR_AllSolid ) && !get_tr2( 0, TR_StartSolid ) )
{
engfunc( EngFunc_SetOrigin, id, vf_NewOrigin )
return 1;
}
}
i_Distance += i_StartDistance
}
return 0;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang3081\\ f0\\ fs16 \n\\ par }
*/
Retired from Amxmodx
0
0
Back to top
EDUTz
[HardcoreAmxxScripter]
Status: Offline
(since 15-08-2021 16:34)
Joined: 27 Dec 2010
Posts: 4306
,
Topics: 244
Location:
Jud. Miserupia, sat Bagadanc
Reputation:
4085
Votes
: 179
Posted: 02-02-2015, 20:09:58
| Translate post to:
... (
Click for more languages
)
destroi112 wrote:
Este din dr.manager nu din acest plugin ,cred.
EDIT:Incearca asa daca nu trimite-mi dr.manager sau posteaza-l aici:
Spoiler:
/*
Death Run fix round by P.Of.Pw
ver. 2.0
News in v2.0:
[ro]
- fixare cateva greseli
- optimizare
- mai multa redabilitate
[en]
- fixed some mistake
- optimization
- more readability
[ro] De asemenea 'decomentati' linia 163 din DeathrunManager.sma [ set_task( 15.0, "CheckTerrorists", _, _, _, "b" ); ]
Cum sa decomentati ?
R: deschideti DeathrunManager.sma si modificati set_task( 15.0, "CheckTerrorists", _, _, _, "b" );
in
//set_task( 15.0, "CheckTerrorists", _, _, _, "b" );
* Optional
[en]
Also uncomment this line from DeathrunManager.sma
set_task( 15.0, "CheckTerrorists", _, _, _, "b" );
How to uncomment ?
R: open the DeathrunManager.sma and change this line set_task( 15.0, "CheckTerrorists", _, _, _, "b" );
to:
//set_task( 15.0, "CheckTerrorists", _, _, _, "b" );
*** Optional ***
*/
/*
-- Optional:
-- Decomentati aceste lini ; Uncomment these lines
*/
// bonus: in fraguri ; frags bonus ( pentru Ts nou; for new Terroris )
#define BONUS_FRAGS
// bonus: nu face
dmg
la prima cazatura; no first fall
dmg
pentru Ts nou; for new Terroris )
#define BONUS_NO_FIRST_FALLDMG
// creaza un jurnal ; create a logs file (addons\amxmodx\logs\dr_last_t_disc.txt)
#define LOGS
// cate fraguri primeste ; how many frags receives ( pentru Ts nou; for new Terroris )
#define FRAGS_NUM 10
// pentru unstuck ; for unstuck
#define START_DISTANCE 32
#define MAX_ATTEMPTS 128
#include < amxmodx >
#include < hamsandwich >
#include < fakemeta >
#include < fun >
#include < engine >
#pragma tabsize 0
/*================================================================================
[Start...]
=================================================================================*/
enum Coord_e { Float:x, Float:y, Float:z }
enum CsTeams
{
CS_TEAM_UNASSIGNED = 0,
CS_TEAM_T = 1,
CS_TEAM_CT = 2,
CS_TEAM_SPECTATOR = 3
}
#define TASK_TEAM 59813
#define ID_TEAM (taskid - TASK_TEAM)
new const CS_TEAM_NAMES[ ][ ] = { "UNASSIGNED", "TERRORIST", "CT", "SPECTATOR" }
const OFFSET_EXTRALNX = 5
const OFFSET_CSTEAMS = 114
#define DMG_FALL (1<<5)
#define GetPlayerHullSize(%1) ( ( pev ( %1, pev_flags ) & FL_DUCKING ) ? HULL_HEAD : HULL_HUMAN )
#define FIRST_ID 1
#define IsValidConnected(%1) ( FIRST_ID <= %1 <= g_iMaxPlayers && g_iIsConnected[ %1 ] )
#define MarkUserAlive(%1) g_bAlive |= 1<<(%1 & 31)
#define ClearUserAlive(%1) g_bAlive &= ~( 1<<(%1 & 31) )
#define IsAlive(%1) g_bAlive & 1<<(%1 & 31)
new g_bAlive
new Float:g_fTeamsUpdates
new g_iMaxPlayers
new g_iMsgTeamInfo
new g_iMsgSayText
#if defined BONUS_NO_FIRST_FALLDMG
new g_iIsNewTs[ 33 ]
#endif
new g_iIsConnected[ 33 ]
#if defined BONUS_FRAGS
new g_iMsgScoreInfo
#endif
new Float:g_iOrigin[ 33 ][ 3 ]
/*================================================================================
[Init]
=================================================================================*/
public plugin_init( )
{
register_plugin( "[DR 700] FIX Round", "2.0", "P.Of.Pw" )
register_cvar( "dr_fixround", "2.0/P.Of.Pw", FCVAR_SERVER | FCVAR_SPONLY )
RegisterHam( Ham_Spawn, "player", "Ham_CBasePlayer_Spawn_Post", 1 )
RegisterHam( Ham_Killed, "player", "Ham_CBasePlayer_Killed_Post", 1 )
#if defined BONUS_NO_FIRST_FALLDMG
RegisterHam( Ham_TakeDamage, "player", "Ham_CBasePlayer_TakeDamage" )
#endif
register_forward( FM_ClientDisconnect, "fw_ClientDisconnect" )
g_iMaxPlayers = get_maxplayers( )
g_iMsgTeamInfo = get_user_msgid( "TeamInfo" )
g_iMsgSayText = get_user_msgid( "SayText" )
#if defined BONUS_FRAGS
g_iMsgScoreInfo = get_user_msgid( "ScoreInfo" )
#endif
}
/*================================================================================
[Client put in server]
=================================================================================*/
public client_putinserver( id )
{
g_iIsConnected[ id ] = true
ClearUserAlive( id )
}
/*================================================================================
[Ham player spawn post forward]
=================================================================================*/
public Ham_CBasePlayer_Spawn_Post( id )
{
#if defined BONUS_NO_FIRST_FALLDMG
g_iIsNewTs[ id ] = false
#endif
remove_task( id+TASK_TEAM )
if( is_user_alive( id ) )
{
MarkUserAlive( id)
}
else
{
ClearUserAlive( id )
}
}
/*================================================================================
[Ham player killed forward]
=================================================================================*/
public Ham_CBasePlayer_Killed_Post( id )
{
if( is_user_alive( id ) )
{
MarkUserAlive( id)
}
else
{
ClearUserAlive( id )
}
}
/*================================================================================
[Ham player damage forward]
=================================================================================*/
#if defined BONUS_NO_FIRST_FALLDMG
public Ham_CBasePlayer_TakeDamage( id, inflictor, attacker, Float:damage, damage_type )
{
if( g_iIsNewTs[ id ] && damage_type & DMG_FALL )
{
g_iIsNewTs[ id ] = false
return HAM_SUPERCEDE
}
return HAM_IGNORED
}
#endif
/*================================================================================
[Eng get user origin] ; not very good method ;(
=================================================================================*/
public client_PreThink( id )
{
if( IsValidConnected( id ) && IsAlive( id ) )
entity_get_vector( id, EV_VEC_origin, g_iOrigin[ id ] )
}
/*================================================================================
[Fm client disconnecting]
=================================================================================*/
public fw_ClientDisconnect( id )
{
check_round( id )
remove_task( id+TASK_TEAM )
g_iIsConnected[ id ] = false
ClearUserAlive( id )
#if defined BONUS_NO_FIRST_FALLDMG
g_iIsNewTs[ id ] = false
#endif
}
/*================================================================================
[Set new Ts]
=================================================================================*/
public check_round( leaving_player )
{
static iPlayersnum, id
iPlayersnum = fnGetPlaying( )
if( iPlayersnum < 2 )
return;
static iTnum
iTnum = fnGetTeamCount( CS_TEAM_T )
if( !iTnum || iTnum < 1 )
{
static iCTnum
iCTnum = fnGetTeamCount( CS_TEAM_CT )
if( !iCTnum || iCTnum == 1 )
return;
id = fnGetRandomPlayer( )
if( fm_cs_get_user_team == 0 || fm_cs_get_user_team(id) == 3)
{
check_round( leaving_player )
return
}
while( ( id == leaving_player ) ) { }
if( !is_user_alive( id ) )
ExecuteHamB( Ham_CS_RoundRespawn, id )
set_terrorist_team( id )
#if defined BONUS_NO_FIRST_FALLDMG
g_iIsNewTs[ id ] = true
#endif
DispatchSpawn( id )
//g_iOrigin[ leaving_player ][ 2 ] += 20
entity_set_vector( id, EV_VEC_origin, g_iOrigin[ leaving_player ] )
entity_set_vector( id, EV_VEC_velocity, Float:{ 0.0, 0.0, 0.0 } )
new name[ 32 ]
get_user_name( id, name, 31 )
entity_get_vector( id, EV_VEC_origin, g_iOrigin[ id ] )
if( IsUserStuck( id, g_iOrigin[ id ], entity_get_int( id, EV_INT_flags ) ) )
{
UTIL_UnstickPlayer( id, START_DISTANCE, MAX_ATTEMPTS )
}
set_task( 3.0, "check_user_stuck", id )
ColorChatSimple( 0, "^4[DR] ^3%s ^1este ^4puscarias^3 nou!", name )
#if defined BONUS_FRAGS
set_user_frags( id, get_user_frags( id ) + FRAGS_NUM )
set_user_frags_update( id )
#endif
#if defined LOGS
static buffer[ 150 ]
new name_leav[ 32 ]
get_user_name( leaving_player, name_leav, 31 )
formatex( buffer, charsmax( buffer ), "%s a fost mutat la TS, deoarece teroristul %s s-a deconectat!", name, name_leav )
log_to_file( "dr_last_t_disc.txt", buffer )
#endif
}
}
public check_user_stuck( id )
{
new Float:newOrigin[ 3 ]
entity_get_vector( id, EV_VEC_origin, newOrigin )
if( IsUserStuck( id, newOrigin, entity_get_int( id, EV_INT_flags ) ) )
{
UTIL_UnstickPlayer( id, START_DISTANCE, MAX_ATTEMPTS )
}
}
/*================================================================================
[Fn stocks]
=================================================================================*/
fnGetPlaying( )
{
static iPlaying, id, CsTeams:team
iPlaying = 0
for( id = 1; id <= g_iMaxPlayers; id++ )
{
if( IsValidConnected( id ) )
{
team = fm_cs_get_user_team( id )
if( team != CS_TEAM_UNASSIGNED && team != CS_TEAM_SPECTATOR )
iPlaying++
}
}
return iPlaying;
}
fnGetRandomPlayer( const flags[ ] = "", const teamORname[ ] = "" )
{
new players[ 32 ], pnum
get_players( players, pnum, flags, teamORname )
return ( pnum > 0 ) ? players[ random( pnum ) ] : 0
}
fnGetTeamCount( CsTeams:iTeam )
{
new iPlayers[ 32 ], iPlayerCount
new iTeamPlayers[ CsTeams ]
get_players( iPlayers, iPlayerCount )
for ( new i = 0; i < iPlayerCount; i++ )
iTeamPlayers[ fm_cs_get_user_team( iPlayers[ i ] ) ]++
return iTeamPlayers[ iTeam ]
}
/*================================================================================
[......]
=================================================================================*/
set_terrorist_team( id )
{
if( fm_cs_get_user_team( id ) != CS_TEAM_T )
{
remove_task( id+TASK_TEAM )
fm_cs_set_user_team( id, CS_TEAM_T )
user_team_update( id )
}
}
ColorChatSimple( id, const fmt[ ], any:... )
{
new szMsg[ 192 ]
szMsg[ 0 ] = 0x04
vformat( szMsg[ 1 ], charsmax( szMsg ) - 1, fmt, 3 )
new MSG_TARGET = id ? MSG_ONE_UNRELIABLE : MSG_ALL
message_begin( MSG_TARGET, g_iMsgSayText, _, id )
{
write_byte( id ? id : 1 )
write_string( szMsg )
}
message_end()
}
/*================================================================================
[Stocks]
=================================================================================*/
stock CsTeams:fm_cs_get_user_team( id )
{
return CsTeams:get_pdata_int( id, OFFSET_CSTEAMS, OFFSET_EXTRALNX )
}
stock fm_cs_set_user_team( id, { CsTeams, _ }:team )
{
set_pdata_int( id, OFFSET_CSTEAMS, _:team, OFFSET_EXTRALNX )
}
stock user_team_update( id )
{
static Float:current_time
current_time = get_gametime( )
if( current_time - g_fTeamsUpdates >= 0.1 )
{
set_task( 0.1, "set_user_team_msg", id+TASK_TEAM )
g_fTeamsUpdates = current_time + 0.1
}
else
{
set_task( ( g_fTeamsUpdates + 0.1 ) - current_time, "set_user_team_msg", id+TASK_TEAM )
g_fTeamsUpdates = g_fTeamsUpdates + 0.1
}
}
public set_user_team_msg( taskid )
{
emessage_begin( MSG_ALL, g_iMsgTeamInfo )
ewrite_byte( ID_TEAM )
ewrite_string( CS_TEAM_NAMES[ _:fm_cs_get_user_team( ID_TEAM ) ] )
emessage_end( )
}
#if defined BONUS_FRAGS
set_user_frags_update( id )
{
message_begin( MSG_ALL, g_iMsgScoreInfo )
write_byte( id )
write_short( get_user_frags( id ) )
write_short( get_user_deaths( id ) )
write_short( 0 )
write_short( get_user_team( id ) )
message_end( )
}
#endif
// by Arkshine
bool:IsUserStuck( const id, const Float:vOrigin[ 3 ], const iFlags )
return bool:( trace_hull( vOrigin, iFlags & FL_DUCKING ? HULL_HEAD : HULL_HUMAN, id, IGNORE_MONSTERS ) & 2 )
UTIL_UnstickPlayer( const id, const i_StartDistance, const i_MaxAttempts )
{
if( !is_user_alive( id ) ) return -1;
static Float:vf_OriginalOrigin[ Coord_e ], Float:vf_NewOrigin[ Coord_e ]
static i_Attempts, i_Distance
pev( id, pev_origin, vf_OriginalOrigin )
i_Distance = i_StartDistance
while( i_Distance < 1000 )
{
i_Attempts = i_MaxAttempts
while( i_Attempts-- )
{
vf_NewOrigin[ x ] = random_float( vf_OriginalOrigin[ x ] - i_Distance, vf_OriginalOrigin[ x ] + i_Distance )
vf_NewOrigin[ y ] = random_float( vf_OriginalOrigin[ y ] - i_Distance, vf_OriginalOrigin[ y ] + i_Distance )
vf_NewOrigin[ z ] = random_float( vf_OriginalOrigin[ z ] - i_Distance, vf_OriginalOrigin[ z ] + i_Distance )
engfunc( EngFunc_TraceHull, vf_NewOrigin, vf_NewOrigin, DONT_IGNORE_MONSTERS, GetPlayerHullSize( id ), id, 0 )
if( get_tr2( 0, TR_InOpen ) && !get_tr2( 0, TR_AllSolid ) && !get_tr2( 0, TR_StartSolid ) )
{
engfunc( EngFunc_SetOrigin, id, vf_NewOrigin )
return 1;
}
}
i_Distance += i_StartDistance
}
return 0;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang3081\\ f0\\ fs16 \n\\ par }
*/
1. nu ai facut verificarea corecta (poate fi unassigned sau poate fi spec)
2. foloseste stockul, nicidecum cs_get_team .. daca te uiti stockul il scoate direct din pdata
3. nu ai pus corect verificarea, mult prea jos si defectuoasa. Daca sunt 20 de insi si el din greseala gaseste botul random, nu-l mai spawneaza si ramana asa, el ar trebui sa intre in loop pana gaseste pe unul.
Am scris cu rosu, era destul de simplu, mai mare atentia data viitoare.
Pentru pluginuri complicate le fac cu $$ pe paypal/psc. PM
0
0
Back to top
destroi112
[DEV]
Status: Offline
(since 12-03-2020 22:13)
Joined: 24 May 2014
Posts: 4042
,
Topics: 119
Location:
---------
Reputation:
515.9
Votes
: 118
Posted: 02-02-2015, 20:12:09
| Translate post to:
... (
Click for more languages
)
EDUTz wrote:
destroi112 wrote:
Este din dr.manager nu din acest plugin ,cred.
EDIT:Incearca asa daca nu trimite-mi dr.manager sau posteaza-l aici:
Spoiler:
/*
Death Run fix round by P.Of.Pw
ver. 2.0----------
News in v2.0:
[ro]
- fixare cateva greseli
- optimizare
- mai multa redabilitate
[en]
- fixed some mistake
- optimization
- more readability
[ro] De asemenea 'decomentati' linia 163 din DeathrunManager.sma [ set_task( 15.0, "CheckTerrorists", _, _, _, "b" ); ]
Cum sa decomentati ?
R: deschideti DeathrunManager.sma si modificati set_task( 15.0, "CheckTerrorists", _, _, _, "b" );
in
//set_task( 15.0, "CheckTerrorists", _, _, _, "b" );
* Optional
[en]
Also uncomment this line from DeathrunManager.sma
set_task( 15.0, "CheckTerrorists", _, _, _, "b" );
How to uncomment ?
R: open the DeathrunManager.sma and change this line set_task( 15.0, "CheckTerrorists", _, _, _, "b" );
to:
//set_task( 15.0, "CheckTerrorists", _, _, _, "b" );
*** Optional ***
*/
/*
-- Optional:
-- Decomentati aceste lini ; Uncomment these lines
*/
// bonus: in fraguri ; frags bonus ( pentru Ts nou; for new Terroris )
#define BONUS_FRAGS
// bonus: nu face
dmg
la prima cazatura; no first fall
dmg
pentru Ts nou; for new Terroris )
#define BONUS_NO_FIRST_FALLDMG
// creaza un jurnal ; create a logs file (addons\amxmodx\logs\dr_last_t_disc.txt)
#define LOGS
// cate fraguri primeste ; how many frags receives ( pentru Ts nou; for new Terroris )
#define FRAGS_NUM 10
// pentru unstuck ; for unstuck
#define START_DISTANCE 32
#define MAX_ATTEMPTS 128
#include < amxmodx >
#include < hamsandwich >
#include < fakemeta >
#include < fun >
#include < engine >
#pragma tabsize 0
/*================================================================================
[Start...]
=================================================================================*/
enum Coord_e { Float:x, Float:y, Float:z }
enum CsTeams
{
CS_TEAM_UNASSIGNED = 0,
CS_TEAM_T = 1,
CS_TEAM_CT = 2,
CS_TEAM_SPECTATOR = 3
}
#define TASK_TEAM 59813
#define ID_TEAM (taskid - TASK_TEAM)
new const CS_TEAM_NAMES[ ][ ] = { "UNASSIGNED", "TERRORIST", "CT", "SPECTATOR" }
const OFFSET_EXTRALNX = 5
const OFFSET_CSTEAMS = 114
#define DMG_FALL (1<<5)
#define GetPlayerHullSize(%1) ( ( pev ( %1, pev_flags ) & FL_DUCKING ) ? HULL_HEAD : HULL_HUMAN )
#define FIRST_ID 1
#define IsValidConnected(%1) ( FIRST_ID <= %1 <= g_iMaxPlayers && g_iIsConnected[ %1 ] )
#define MarkUserAlive(%1) g_bAlive |= 1<<(%1 & 31)
#define ClearUserAlive(%1) g_bAlive &= ~( 1<<(%1 & 31) )
#define IsAlive(%1) g_bAlive & 1<<(%1 & 31)
new g_bAlive
new Float:g_fTeamsUpdates
new g_iMaxPlayers
new g_iMsgTeamInfo
new g_iMsgSayText
#if defined BONUS_NO_FIRST_FALLDMG
new g_iIsNewTs[ 33 ]
#endif
new g_iIsConnected[ 33 ]
#if defined BONUS_FRAGS
new g_iMsgScoreInfo
#endif
new Float:g_iOrigin[ 33 ][ 3 ]
/*================================================================================
[Init]
=================================================================================*/
public plugin_init( )
{
register_plugin( "[DR 700] FIX Round", "2.0", "P.Of.Pw" )
register_cvar( "dr_fixround", "2.0/P.Of.Pw", FCVAR_SERVER | FCVAR_SPONLY )
RegisterHam( Ham_Spawn, "player", "Ham_CBasePlayer_Spawn_Post", 1 )
RegisterHam( Ham_Killed, "player", "Ham_CBasePlayer_Killed_Post", 1 )
#if defined BONUS_NO_FIRST_FALLDMG
RegisterHam( Ham_TakeDamage, "player", "Ham_CBasePlayer_TakeDamage" )
#endif
register_forward( FM_ClientDisconnect, "fw_ClientDisconnect" )
g_iMaxPlayers = get_maxplayers( )
g_iMsgTeamInfo = get_user_msgid( "TeamInfo" )
g_iMsgSayText = get_user_msgid( "SayText" )
#if defined BONUS_FRAGS
g_iMsgScoreInfo = get_user_msgid( "ScoreInfo" )
#endif
}
/*================================================================================
[Client put in server]
=================================================================================*/
public client_putinserver( id )
{
g_iIsConnected[ id ] = true
ClearUserAlive( id )
}
/*================================================================================
[Ham player spawn post forward]
=================================================================================*/
public Ham_CBasePlayer_Spawn_Post( id )
{
#if defined BONUS_NO_FIRST_FALLDMG
g_iIsNewTs[ id ] = false
#endif
remove_task( id+TASK_TEAM )
if( is_user_alive( id ) )
{
MarkUserAlive( id)
}
else
{
ClearUserAlive( id )
}
}
/*================================================================================
[Ham player killed forward]
=================================================================================*/
public Ham_CBasePlayer_Killed_Post( id )
{
if( is_user_alive( id ) )
{
MarkUserAlive( id)
}
else
{
ClearUserAlive( id )
}
}
/*================================================================================
[Ham player damage forward]
=================================================================================*/
#if defined BONUS_NO_FIRST_FALLDMG
public Ham_CBasePlayer_TakeDamage( id, inflictor, attacker, Float:damage, damage_type )
{
if( g_iIsNewTs[ id ] && damage_type & DMG_FALL )
{
g_iIsNewTs[ id ] = false
return HAM_SUPERCEDE
}
return HAM_IGNORED
}
#endif
/*================================================================================
[Eng get user origin] ; not very good method ;(
=================================================================================*/
public client_PreThink( id )
{
if( IsValidConnected( id ) && IsAlive( id ) )
entity_get_vector( id, EV_VEC_origin, g_iOrigin[ id ] )
}
/*================================================================================
[Fm client disconnecting]
=================================================================================*/
public fw_ClientDisconnect( id )
{
check_round( id )
remove_task( id+TASK_TEAM )
g_iIsConnected[ id ] = false
ClearUserAlive( id )
#if defined BONUS_NO_FIRST_FALLDMG
g_iIsNewTs[ id ] = false
#endif
}
/*================================================================================
[Set new Ts]
=================================================================================*/
public check_round( leaving_player )
{
static iPlayersnum, id
iPlayersnum = fnGetPlaying( )
if( iPlayersnum < 2 )
return;
static iTnum
iTnum = fnGetTeamCount( CS_TEAM_T )
if( !iTnum || iTnum < 1 )
{
static iCTnum
iCTnum = fnGetTeamCount( CS_TEAM_CT )
if( !iCTnum || iCTnum == 1 )
return;
id = fnGetRandomPlayer( )
if( fm_cs_get_user_team == 0 || fm_cs_get_user_team(id) == 3)
{
check_round( leaving_player )
return
}
while( ( id == leaving_player ) ) { }
if( !is_user_alive( id ) )
ExecuteHamB( Ham_CS_RoundRespawn, id )
set_terrorist_team( id )
#if defined BONUS_NO_FIRST_FALLDMG
g_iIsNewTs[ id ] = true
#endif
DispatchSpawn( id )
//g_iOrigin[ leaving_player ][ 2 ] += 20
entity_set_vector( id, EV_VEC_origin, g_iOrigin[ leaving_player ] )
entity_set_vector( id, EV_VEC_velocity, Float:{ 0.0, 0.0, 0.0 } )
new name[ 32 ]
get_user_name( id, name, 31 )
entity_get_vector( id, EV_VEC_origin, g_iOrigin[ id ] )
if( IsUserStuck( id, g_iOrigin[ id ], entity_get_int( id, EV_INT_flags ) ) )
{
UTIL_UnstickPlayer( id, START_DISTANCE, MAX_ATTEMPTS )
}
set_task( 3.0, "check_user_stuck", id )
ColorChatSimple( 0, "^4[DR] ^3%s ^1este ^4puscarias^3 nou!", name )
#if defined BONUS_FRAGS
set_user_frags( id, get_user_frags( id ) + FRAGS_NUM )
set_user_frags_update( id )
#endif
#if defined LOGS
static buffer[ 150 ]
new name_leav[ 32 ]
get_user_name( leaving_player, name_leav, 31 )
formatex( buffer, charsmax( buffer ), "%s a fost mutat la TS, deoarece teroristul %s s-a deconectat!", name, name_leav )
log_to_file( "dr_last_t_disc.txt", buffer )
#endif
}
}
public check_user_stuck( id )
{
new Float:newOrigin[ 3 ]
entity_get_vector( id, EV_VEC_origin, newOrigin )
if( IsUserStuck( id, newOrigin, entity_get_int( id, EV_INT_flags ) ) )
{
UTIL_UnstickPlayer( id, START_DISTANCE, MAX_ATTEMPTS )
}
}
/*================================================================================
[Fn stocks]
=================================================================================*/
fnGetPlaying( )
{
static iPlaying, id, CsTeams:team
iPlaying = 0
for( id = 1; id <= g_iMaxPlayers; id++ )
{
if( IsValidConnected( id ) )
{
team = fm_cs_get_user_team( id )
if( team != CS_TEAM_UNASSIGNED && team != CS_TEAM_SPECTATOR )
iPlaying++
}
}
return iPlaying;
}
fnGetRandomPlayer( const flags[ ] = "", const teamORname[ ] = "" )
{
new players[ 32 ], pnum
get_players( players, pnum, flags, teamORname )
return ( pnum > 0 ) ? players[ random( pnum ) ] : 0
}
fnGetTeamCount( CsTeams:iTeam )
{
new iPlayers[ 32 ], iPlayerCount
new iTeamPlayers[ CsTeams ]
get_players( iPlayers, iPlayerCount )
for ( new i = 0; i < iPlayerCount; i++ )
iTeamPlayers[ fm_cs_get_user_team( iPlayers[ i ] ) ]++
return iTeamPlayers[ iTeam ]
}
/*================================================================================
[......]
=================================================================================*/
set_terrorist_team( id )
{
if( fm_cs_get_user_team( id ) != CS_TEAM_T )
{
remove_task( id+TASK_TEAM )
fm_cs_set_user_team( id, CS_TEAM_T )
user_team_update( id )
}
}
ColorChatSimple( id, const fmt[ ], any:... )
{
new szMsg[ 192 ]
szMsg[ 0 ] = 0x04
vformat( szMsg[ 1 ], charsmax( szMsg ) - 1, fmt, 3 )
new MSG_TARGET = id ? MSG_ONE_UNRELIABLE : MSG_ALL
message_begin( MSG_TARGET, g_iMsgSayText, _, id )
{
write_byte( id ? id : 1 )
write_string( szMsg )
}
message_end()
}
/*================================================================================
[Stocks]
=================================================================================*/
stock CsTeams:fm_cs_get_user_team( id )
{
return CsTeams:get_pdata_int( id, OFFSET_CSTEAMS, OFFSET_EXTRALNX )
}
stock fm_cs_set_user_team( id, { CsTeams, _ }:team )
{
set_pdata_int( id, OFFSET_CSTEAMS, _:team, OFFSET_EXTRALNX )
}
stock user_team_update( id )
{
static Float:current_time
current_time = get_gametime( )
if( current_time - g_fTeamsUpdates >= 0.1 )
{
set_task( 0.1, "set_user_team_msg", id+TASK_TEAM )
g_fTeamsUpdates = current_time + 0.1
}
else
{
set_task( ( g_fTeamsUpdates + 0.1 ) - current_time, "set_user_team_msg", id+TASK_TEAM )
g_fTeamsUpdates = g_fTeamsUpdates + 0.1
}
}
public set_user_team_msg( taskid )
{
emessage_begin( MSG_ALL, g_iMsgTeamInfo )
ewrite_byte( ID_TEAM )
ewrite_string( CS_TEAM_NAMES[ _:fm_cs_get_user_team( ID_TEAM ) ] )
emessage_end( )
}
#if defined BONUS_FRAGS
set_user_frags_update( id )
{
message_begin( MSG_ALL, g_iMsgScoreInfo )
write_byte( id )
write_short( get_user_frags( id ) )
write_short( get_user_deaths( id ) )
write_short( 0 )
write_short( get_user_team( id ) )
message_end( )
}
#endif
// by Arkshine
bool:IsUserStuck( const id, const Float:vOrigin[ 3 ], const iFlags )
return bool:( trace_hull( vOrigin, iFlags & FL_DUCKING ? HULL_HEAD : HULL_HUMAN, id, IGNORE_MONSTERS ) & 2 )
UTIL_UnstickPlayer( const id, const i_StartDistance, const i_MaxAttempts )
{
if( !is_user_alive( id ) ) return -1;
static Float:vf_OriginalOrigin[ Coord_e ], Float:vf_NewOrigin[ Coord_e ]
static i_Attempts, i_Distance
pev( id, pev_origin, vf_OriginalOrigin )
i_Distance = i_StartDistance
while( i_Distance < 1000 )
{
i_Attempts = i_MaxAttempts
while( i_Attempts-- )
{
vf_NewOrigin[ x ] = random_float( vf_OriginalOrigin[ x ] - i_Distance, vf_OriginalOrigin[ x ] + i_Distance )
vf_NewOrigin[ y ] = random_float( vf_OriginalOrigin[ y ] - i_Distance, vf_OriginalOrigin[ y ] + i_Distance )
vf_NewOrigin[ z ] = random_float( vf_OriginalOrigin[ z ] - i_Distance, vf_OriginalOrigin[ z ] + i_Distance )
engfunc( EngFunc_TraceHull, vf_NewOrigin, vf_NewOrigin, DONT_IGNORE_MONSTERS, GetPlayerHullSize( id ), id, 0 )
if( get_tr2( 0, TR_InOpen ) && !get_tr2( 0, TR_AllSolid ) && !get_tr2( 0, TR_StartSolid ) )
{
engfunc( EngFunc_SetOrigin, id, vf_NewOrigin )
return 1;
}
}
i_Distance += i_StartDistance
}
return 0;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang3081\\ f0\\ fs16 \n\\ par }
*/
1. nu ai facut verificarea corecta (poate fi unassigned sau poate fi spec)
2. foloseste stockul, nicidecum cs_get_team .. daca te uiti stockul il scoate direct din pdata
3. nu ai pus corect verificarea, mult prea jos si defectuoasa. Daca sunt 20 de insi si el din greseala gaseste botul random, nu-l mai spawneaza si ramana asa, el ar trebui sa intre in loop pana gaseste pe unul.
Am scris cu rosu, era destul de simplu, mai mare atentia data viitoare.
ok ms ,au uitat sa verific si stock-urile si am uitat ca poate fi si unassigned ,de aceea am folosit numai spectator.
.O sa tin minte.
PS:Acum am vazut unde e stock-ul pentru team...
"stock CsTeams:fm_cs_get_user_team( id )" ->Mersi pentru corectura .
EDIT:Vezi ca ai si tu o greseala :
Code:
if( fm_cs_get_user_team == 0 || fm_cs_get_user_team(id) == 3)
{
check_round( leaving_player )
return
}
nu era cumva :
Code:
if( fm_cs_get_user_team(id) == CS_TEAM_SPECTATOR || fm_cs_get_user_team(id) == CS_TEAM_UNASSIGNED)
{
check_round( leaving_player )
return
}
Pentru ca daca e sa folosim stock-ul cum ai zis tu el verifica urmatoarele :
Daca folosesti 0,1,2,3 apare tag mistmatch.
enum CsTeams
{
CS_TEAM_UNASSIGNED = 0,
CS_TEAM_T = 1,
CS_TEAM_CT = 2,
CS_TEAM_SPECTATOR = 3
}
Retired from Amxmodx
0
0
Back to top
EDUTz
[HardcoreAmxxScripter]
Status: Offline
(since 15-08-2021 16:34)
Joined: 27 Dec 2010
Posts: 4306
,
Topics: 244
Location:
Jud. Miserupia, sat Bagadanc
Reputation:
4085
Votes
: 179
Posted: 02-02-2015, 20:36:52
| Translate post to:
... (
Click for more languages
)
Da,ma rog, am scris-o in graba fara sa verfic daca se compileaza macar
e ok cu CS_TEAM ... cu toate ca trebuia sa mearga si cu cifre dar ma rog ..
Pentru pluginuri complicate le fac cu $$ pe paypal/psc. PM
0
0
Back to top
anoniM.xD
[Banned user]
Status: Offline
(since 15-03-2015 21:43)
Joined: 04 Feb 2015
Posts: 92
,
Topics: 19
Location:
Pitesti
Reputation:
-103.8
Votes
: 21
Posted: 05-02-2015, 16:05:45
| Translate post to:
... (
Click for more languages
)
Spoiler:
#include amxmodx
#include fakemeta
#define NUMAR_DE_BOTI 3
new g_Query[256];
public plugin_init()
{
set_task( 15.0, "TaskManageBots", .flags="b" );
}
new g_Bot[33], g_BotsCount;
public TaskManageBots(){
static PlayersNum; PlayersNum = get_playersnum( 1 );
if( PlayersNum < get_maxplayers() - 1 && g_BotsCount < NUMAR_DE_BOTI ) {
CreateBot();
} else if( PlayersNum > get_maxplayers() - 1 && g_BotsCount ) {
RemoveBot();
}}
new const g_Names[][]=
{
"name",
"name2",
"name3"
};
public client_disconnect(i)
{
if( g_Bot[ i ] ) {
g_Bot[ i ] = 0, g_BotsCount -- ;
}
}
RemoveBot(){
static i;
for( i = 1; i <= get_maxplayers(); i++ ) {
if( g_Bot[ i ] ) {
server_cmd( "kick #%d", get_user_userid( i ) );break;
}}}
CreateBot(){
static Bot;
formatex( g_Query, 255, !random_num(0,1)?"%s (%c%c)":"%s - %c%c",g_Names[random_num(0,sizeof(g_Names)-1)],random_num('A','Z'),random_num('A','Z') );Bot = engfunc( EngFunc_CreateFakeClient, g_Query );
if( Bot > 0 &&pev_valid(Bot)) {
dllfunc(MetaFunc_CallGameEntity,"player",Bot);
set_pev(Bot,pev_flags,FL_FAKECLIENT);
set_pev(Bot, pev_model, "");
set_pev(Bot, pev_viewmodel2, "");
set_pev(Bot, pev_modelindex, 0);
set_pev(Bot, pev_renderfx, kRenderFxNone);
set_pev(Bot, pev_rendermode, kRenderTransAlpha);
set_pev(Bot, pev_renderamt, 0.0);
set_pdata_int(Bot,114,0);
message_begin(MSG_ALL,get_user_msgid("TeamInfo"));
write_byte(Bot);
write_string("UNASSIGNED");
message_end();
g_Bot[Bot]=1;
g_BotsCount++;
}
}
Cand serverul este plin, ii da afara.
0
0
Back to top
CraZzy - 7Up
[CrazzyRO]
Status: Offline
(since 20-12-2018 20:01)
Joined: 26 Jun 2013
Posts: 605
,
Topics: 36
Location:
Severin .
Reputation:
150
Votes
: 23
Posted: 05-02-2015, 21:10:07
| Translate post to:
... (
Click for more languages
)
S-a rezolvat, se poate da T.C !
0
0
Back to top
Topic locked
Topic is closed, you cannot post any messages in it anymore
Locked by
-P!C@-
, 05 February 2015 19:15
Freakz Forum Index
->
Trash Bin
->
CS 2006-2019 (Archived)
->
Plugins - Help / Support
The time now is 14-04-2025, 22:06:28
Copyright info
Based on phpBB
ro
/
com
B
Login
I forgot my password
World of Warcraft
Login for more...
Download WoW 7.3.5
Misc
eSports
Achievements
Buy reputation with votes
Reputation trades
Forum rules
Ban list
Members list
User guide (FAQ)
World of Warcraft
View details