Страница 5 от 7
GoSpec [ /spec; /back; /change ]
Публикувано на: 11 Дек 2018, 05:10
от esc-Fiv3
Can you make that /spec command to be available only when you are dead? In that case you don't get one death for this command? And to be showed one chat message which say: You have to be dead to use /spec. Thanks!
GoSpec [ /spec; /back; /change ]
Публикувано на: 11 Дек 2018, 15:16
от OciXCrom
Код за потвърждение: Избери целия код
#include <amxmodx>
#include <cromchat>
#include <cstrike>
#include <hamsandwich>
#define PLUGIN_VERSION "1.2"
enum _:Cvars
{
gospec_spec_flag,
gospec_change_flag,
gospec_respawn
}
new g_eCvars[Cvars]
new CsTeams:g_iOldTeam[33],
g_iSpecFlag,
g_iChangeFlag
public plugin_init()
{
register_plugin("GoSpec", PLUGIN_VERSION, "OciXCrom")
register_cvar("@CRXGoSpec", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
register_dictionary("GoSpec.txt")
register_clcmd("say /spec", "GoSpec")
register_clcmd("say /back", "GoBack")
register_clcmd("say /change", "SwitchTeam")
g_eCvars[gospec_spec_flag] = register_cvar("gospec_spec_flag", "e")
g_eCvars[gospec_change_flag] = register_cvar("gospec_change_flag", "e")
g_eCvars[gospec_respawn] = register_cvar("gospec_respawn", "0")
CC_SetPrefix("[&x03GoSpec&x01]")
}
public plugin_cfg()
{
new szFlag[2]
get_pcvar_string(g_eCvars[gospec_spec_flag], szFlag, charsmax(szFlag))
g_iSpecFlag = szFlag[0] == EOS ? ADMIN_ALL : read_flags(szFlag)
get_pcvar_string(g_eCvars[gospec_change_flag], szFlag, charsmax(szFlag))
g_iChangeFlag = szFlag[0] == EOS ? ADMIN_ALL : read_flags(szFlag)
}
public GoSpec(id)
{
if(!HasAccess(id, g_iSpecFlag))
return PLUGIN_HANDLED
if(is_user_alive(id))
{
CC_SendMessage(id, "You have to be dead to use this command.")
return PLUGIN_HANDLED
}
new CsTeams:iTeam = cs_get_user_team(id)
if(iTeam == CS_TEAM_SPECTATOR)
CC_SendMessage(id, "%L", id, "GOSPEC_ALREADY_SPECTATOR")
else
{
g_iOldTeam[id] = iTeam
cs_set_user_team(id, CS_TEAM_SPECTATOR)
CC_SendMessage(id, "%L", id, "GOSPEC_NOW_SPECTATOR")
if(is_user_alive(id))
user_silentkill(id)
}
return PLUGIN_HANDLED
}
public GoBack(id)
{
if(!HasAccess(id, g_iSpecFlag))
return PLUGIN_HANDLED
if(cs_get_user_team(id) != CS_TEAM_SPECTATOR)
CC_SendMessage(id, "%L", id, "GOSPEC_NOT_SPECTATOR")
else
{
new iPlayers[32], iCT, iT
get_players(iPlayers, iCT, "e", "CT")
get_players(iPlayers, iT, "e", "TERRORIST")
if(iCT == iT)
{
cs_set_user_team(id, g_iOldTeam[id])
CC_SendMessage(id, "%L", id, "GOSPEC_TRANSFERED_TO_PREVIOUS")
}
else
{
cs_set_user_team(id, iCT > iT ? CS_TEAM_T : CS_TEAM_CT)
CC_SendMessage(id, "%L", id, "GOSPEC_TRANSFERED_TO_LESS")
}
if(get_pcvar_num(g_eCvars[gospec_respawn]))
ExecuteHamB(Ham_CS_RoundRespawn, id)
}
return PLUGIN_HANDLED
}
public SwitchTeam(id)
{
if(!HasAccess(id, g_iChangeFlag))
return PLUGIN_HANDLED
new CsTeams:iTeam = cs_get_user_team(id)
if(iTeam == CS_TEAM_SPECTATOR)
CC_SendMessage(id, "%L", id, "GOSPEC_CANT_USE")
else
{
cs_set_user_team(id, cs_get_user_team(id) == CS_TEAM_CT ? CS_TEAM_T : CS_TEAM_CT)
CC_SendMessage(id, "%L", id, "GOSPEC_TRANSFERED_TO_OPPOSITE")
if(is_user_alive(id))
{
user_silentkill(id)
if(get_pcvar_num(g_eCvars[gospec_respawn]))
ExecuteHamB(Ham_CS_RoundRespawn, id)
}
}
return PLUGIN_HANDLED
}
bool:HasAccess(id, iFlag)
{
if(iFlag == ADMIN_ALL || get_user_flags(id) & iFlag)
return true
else
{
CC_SendMessage(id, "%L", id, "GOSPEC_NO_ACCESS")
return false
}
#if AMXX_VERSION_NUM < 183
return false
#endif
}
GoSpec [ /spec; /back; /change ]
Публикувано на: 11 Дек 2018, 23:24
от esc-Fiv3
It works! Thanks!
GoSpec [ /spec; /back; /change ]
Публикувано на: 12 Дек 2018, 23:01
от Just
Може ли да се нарпави /spec; и /back да се ползва от всички играчи а change само от админите.
GoSpec [ /spec; /back; /change ]
Публикувано на: 12 Дек 2018, 23:09
от OciXCrom
Погледни кваровете.
GoSpec [ /spec; /back; /change ]
Публикувано на: 13 Дек 2018, 05:14
от esc-Fiv3
Found a bug: if I use /spec command and then I use /back, it doesn't load my player model that I set. If i type : /spec and then I leave the server and after I come back, the same thing..it doesn't load my player model
GoSpec [ /spec; /back; /change ]
Публикувано на: 14 Дек 2018, 14:07
от OciXCrom
Try adding
cs_reset_user_model(id) after each
cs_set_user_team line and see if it works. If not, you should update to the latest AMXX version.
GoSpec [ /spec; /back; /change ]
Публикувано на: 14 Дек 2018, 14:47
от esc-Fiv3
So I have to replace cs_set_user_team with cs_reset_user_model(id)? Or I just add cs_reset_user_model(id) like this:
Код за потвърждение: Избери целия код
else
{
g_iOldTeam[id] = iTeam
cs_set_user_team(id, CS_TEAM_SPECTATOR)
cs_reset_user_model(id)
CC_SendMessage(id, "%L", id, "GOSPEC_NOW_SPECTATOR")
if(is_user_alive(id))
user_silentkill(id)
}
GoSpec [ /spec; /back; /change ]
Публикувано на: 14 Дек 2018, 14:57
от OciXCrom
No, don't replace, just add it like you did.
GoSpec [ /spec; /back; /change ]
Публикувано на: 14 Дек 2018, 15:40
от esc-Fiv3
I did it. It works fine, except when you go spec, there is the default skin. But when you use /back and /change it works fine. I don't think that is posible to set a skin for /spec
so thanks for this.