Free wallhang + team switch
Hello I added furien mod by ConnorMcLeod on my server, everything works fine except the auto switch teams when CT (Anti Furiens) win the round (even if I added in furien.ini SWITCH_TEAMS 1). So I added another plugin that would switch the teams for me that looks like this:
PHP Code:
public ct_win( ) {
set_task( 1.5 ,"SwitchTeams" );
} public SwitchTeams( ) { new iPlayers[32], iNum; get_players(iPlayers, iNum, "h");
if( iNum ) { new id; for(--iNum; iNum>=0; iNum--) { id = iPlayers[iNum]; switch( cs_get_user_team(id) ) { case CS_TEAM_T: cs_set_user_team( id, CS_TEAM_CT ); case CS_TEAM_CT: cs_set_user_team( id, CS_TEAM_T ); } } } }
1.The plugin works but my problem is another one:
I have furien_wallhang from furien mod. I tried to edit in order to give free wallhang to every furien (TERO) at the beginning of the round.
I managed to accomplish that but I have a problem with the switch teams plugin.
My code looks like this:
PHP Code:
#include <amxmodx> #include <engine> #include <fakemeta> #include <hamsandwich>
#include "furien.inc" #include "furien_shop.inc"
#define VERSION "0.0.2"
#define XTRA_OFS_PLAYER 5 #define m_Activity 73 #define m_IdealActivity 74 #define m_flNextAttack 83 #define m_afButtonPressed 246
#define FIRST_PLAYER_ID 1 #define MAX_PLAYERS 32
#define PLAYER_JUMP 6
#define ACT_HOP 7
//#define FBitSet(%1,%2) (%1 & %2)
new g_iMaxPlayers #define IsPlayer(%1) ( FIRST_PLAYER_ID <= %1 <= g_iMaxPlayers )
#define IsHidden(%1) IsPlayer(%1)
#define KNIFE_DRAW 3
new g_bHasWallHang #define SetUserWallHang(%1) g_bHasWallHang |= 1<<(%1&31) #define RemoveUserWallHang(%1) g_bHasWallHang &= ~(1<<(%1&31)) #define HasUserWallHang(%1) g_bHasWallHang & 1<<(%1&31)
new g_bHanged #define SetUserHanged(%1) g_bHanged |= 1<<(%1&31) #define RemoveUserHanged(%1) g_bHanged &= ~(1<<(%1&31)) #define IsUserHanged(%1) g_bHanged & 1<<(%1&31)
new Float:g_fVecMins[MAX_PLAYERS+1][3] new Float:g_fVecMaxs[MAX_PLAYERS+1][3] new Float:g_fVecOrigin[MAX_PLAYERS+1][3]
new bool:g_bRoundEnd
public plugin_init() { register_plugin("Furien WallHang", VERSION, "ConnorMcLeod")
RegisterHam(Ham_Player_Jump, "player", "Player_Jump") RegisterHam(Ham_Touch, "func_wall", "World_Touch") RegisterHam(Ham_Touch, "func_breakable", "World_Touch") RegisterHam(Ham_Touch, "worldspawn", "World_Touch")
g_iMaxPlayers = get_maxplayers()
register_event("HLTV", "Event_HLTV_New_Round", "a", "1=0", "2=0") }
public Event_HLTV_New_Round() { g_bRoundEnd = false }
public Logevent_Round_End() { g_bRoundEnd = true g_bHanged = 0 }
public client_putinserver( id ) {
SetUserWallHang( id )
}
public furien_round_restart() { g_bHanged = 0 }
public Player_Jump(id) { if( g_bRoundEnd || ~HasUserWallHang(id) || ~IsUserHanged(id) || !is_user_alive(id) ) { return HAM_IGNORED }
if( (pev(id, pev_flags) & FL_WATERJUMP) || pev(id, pev_waterlevel) >= 2 ) { return HAM_IGNORED }
static afButtonPressed ; afButtonPressed = get_pdata_int(id, m_afButtonPressed)
if( ~afButtonPressed & IN_JUMP ) { return HAM_IGNORED }
RemoveUserHanged(id)
new Float:fVecVelocity[3]
velocity_by_aim(id, 600, fVecVelocity) set_pev(id, pev_velocity, fVecVelocity)
set_pdata_int(id, m_Activity, ACT_HOP) set_pdata_int(id, m_IdealActivity, ACT_HOP) set_pev(id, pev_gaitsequence, PLAYER_JUMP) set_pev(id, pev_frame, 0.0) set_pdata_int(id, m_afButtonPressed, afButtonPressed & ~IN_JUMP)
return HAM_SUPERCEDE }
public client_PostThink(id) { if( HasUserWallHang(id) && IsUserHanged(id) ) { engfunc(EngFunc_SetSize, id, g_fVecMins[ id ], g_fVecMaxs[ id ]) engfunc(EngFunc_SetOrigin, id, g_fVecOrigin[ id ]) set_pev(id, pev_velocity, 0) set_pdata_float(id, m_flNextAttack, 1.0, XTRA_OFS_PLAYER) } }
public World_Touch(iEnt, id) { if( !g_bRoundEnd && IsPlayer(id) && HasUserWallHang(id) && ~IsUserHanged(id) && is_user_alive(id) && pev(id, pev_button) & IN_USE && ~pev(id, pev_flags) & FL_ONGROUND ) { SetUserHanged(id) pev(id, pev_mins, g_fVecMins[id]) pev(id, pev_maxs, g_fVecMaxs[id]) pev(id, pev_origin, g_fVecOrigin[id]) } }
The initial plugin had those lines:
PHP Code:
public furien_team_change( /*iFurien */ ) { if( !g_iCost[Furien] || !g_iCost[AntiFurien] ) { g_bHasWallHang = 0 g_bHanged = 0 } }
But because I'm not using the auto switch teams from the furien mod (because it isen't working) I don't know how to write those two lines g_bHasWallHang = 0 / g_bHanged = 0.
If I don't write them when I'm hanged to a wall when the round ends and the teams change, they do change but I still remain hanged to the wall. Basically if ,for example, I am TERO and lose the round I die hanged to the wall and revive still hanged to the wall as a CT.
2. I am also having a very big trouble with the bomb on furien mod, I don't know why but when the bomb explodes it kills everybody furiens and anti-furiens. I haven't change anything in the original furien mod plugins. I installed it from scratch and still the same problem.
Sorry for my bad English and Thank you in advance.
|