Все вопросы по работе и настройке AMXX и его плагинов.
Модератор: liFe iS GoOD
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.
В данном разделе форума разрешено создавать темы, касающие только вопросов по AMX Mod X и его плагинам.
Don Corleone » 26 дек 2017, 19:01
Здравствуйте, подскажите как в плагине csflags, когда одна команда собрала все флажки, то идет рестарт N секунд и в этот время противника нельзя убить, а нужно сделать чтобы в этом момент только можно было на ножах сражаться
- Код: Выделить всё
new g_PlaceNames[MAX_CSFLAGS][16]
new g_FlagState[MAX_CSFLAGS] = {-1 ,...}
new Float:g_PlayerScore[33]
new Float:g_TeamScore[TEAMSNUM]
new g_TeamWins[TEAMSNUM]
new g_MapFlagsNum
new g_Radio[33]
new Float:g_OldMPTime
new Float:g_RestartTime
new g_LastWinner
new bool:g_MatchLastWin
new g_cvarMaxPoints
new g_cvarDomEnabled
new g_cvarMapEndTime
new g_cvarMaxWins
new g_cvarTieMatch
new g_cvarAllFlagsWin
new g_cvarUseRadio
new g_cvarRemoveDefObjectives
new g_cvarWinFrags
new g_cvarCaptureFrags
new g_cvarCaptureDelay
new g_cvarMatchRespawn
new g_cvarFreeze
new g_cvarVoteStartCommand
new bool:g_VoteCmdExecuted = false
new g_msgidScoreInfo
new g_msgidIcon
new g_msgidProgress
new g_msgidSayText
new g_fwTouch
new g_fwThink
new g_fwPThink
new g_ifw_FlagTaken
new g_ifw_RoundWon
new g_ifw_MatchWon
new g_MaxPlayers
new Float:g_TriggerOrigin[MAX_CSFLAGS][3]
new Float:g_mmSize[3][2][3] =
{
HITBOX_NORMAL,
HITBOX_LARGER,
HITBOX_LARGE
}
new g_Teams[2][] = {"Terrorists", "CTs"}
new g_NotifySound[2][] = {"csflags/t_notify.wav", "csflags/cs_notify.wav"}
public g_CSFlagsState
new bool:g_UpdateScoresHud
new bool:g_UpdateFlagsHud
new g_LastTeamScore[2] = {-1, ...}
new const g_ScoreHeaderFormat[2][] =
{
"Terrorists(%d) : %d",
"CTs(%d) : %d"
}
new bool:g_IsBot[33]
new bool:g_BotCapturing[33]
new const debugHeader[] =
{
"[CSFlags_Debug]"
}
new const debugLine[] =
{
"----------------------------------"
}
new debugMsg[160]
new Tabs[16] = {'^t', ...}
new lastFlagState = -1
new pDebugFile
public status_debug()
{
server_print("stopped: %d^nstarted: %d^nwait: %d^nforced end: %d^nshow score: %d^nmatch over: %d^nhud repeat: %d^n",
g_CSFlagsState & GAMESTATE_STOPPED > 0,
g_CSFlagsState & GAMESTATE_STARTED > 0,
g_CSFlagsState & GAMESTATE_WAIT > 0,
g_CSFlagsState & GAMESTATE_FORCEDEND > 0,
g_CSFlagsState & GAMESTATE_SHOWSCORE > 0,
g_CSFlagsState & GAMESTATE_MATCHOVER > 0,
g_CSFlagsState & GAMESTATE_HUDREPEAT > 0)
}
public plugin_init()
{
register_plugin("csflags", VERSION, "commonbullet")
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
register_logevent("event_game_commencing", 2, "1=Game_Commencing")
register_concmd("amx_csflags_restart", "csflags_restart_cmd", ADMIN_CSFLAGS)
register_concmd("amx_csflags_stop", "csflags_stop_cmd", ADMIN_CSFLAGS)
register_concmd("amx_csflags_status", "status_debug", ADMIN_CSFLAGS)
register_dictionary("csflags.txt")
g_cvarMaxWins = register_cvar("amx_csflags_max_wins", "3")
g_cvarMaxPoints = register_cvar("amx_csflags_max_points", "100")
g_cvarDomEnabled = register_cvar("amx_csflags_enabled", "1")
g_cvarMapEndTime = register_cvar("amx_csflags_mapendtime", "0.5")
g_cvarTieMatch = register_cvar("amx_csflags_tiematch", "0")
g_cvarAllFlagsWin = register_cvar("amx_csflags_allflags_win", "1")
g_cvarUseRadio = register_cvar("amx_csflags_useradio", "1")
g_cvarRemoveDefObjectives = register_cvar("amx_csflags_remove_map_obj", "1")
g_cvarWinFrags = register_cvar("amx_csflags_winfrags", "0")
g_cvarCaptureFrags = register_cvar("amx_csflags_capturefrags", "0")
g_cvarCaptureDelay = register_cvar("amx_csflags_capturedelay", "3")
g_cvarMatchRespawn = register_cvar("amx_csflags_respawn", "0")
g_cvarFreeze = register_cvar("amx_csflags_freeze", "0")
g_cvarVoteStartCommand = register_cvar("amx_csflags_vote_startcmd", "")
g_msgidProgress = get_user_msgid("BarTime2")
g_msgidScoreInfo = get_user_msgid("ScoreInfo")
g_msgidIcon = get_user_msgid("StatusIcon")
g_msgidSayText = get_user_msgid("SayText")
g_MaxPlayers = get_maxplayers()
if(get_pcvar_num(g_cvarDomEnabled)) {
if(load_config()) {
csflags_init()
}
}
register_concmd("csflags_trace_flags", "debug_flags")
register_concmd("csflags_trace_gamestate", "debug_gamestate")
new mapname[32]
new msg[128]
get_mapname(mapname, 31)
open_debug_file()
formatex(msg, 127, "***^nStarting Debug Section^nMap: %s^n***", mapname)
debug_print(0, msg)
close_debug_file()
}
public plugin_precache()
{
precache_model(MODEL_FLAGS)
precache_sound(g_NotifySound[0])
precache_sound(g_NotifySound[1])
new prsounds[4][] = {
SOUND_MATCHWIN_CT,
SOUND_MATCHWIN_T,
SOUND_WIN_CT,
SOUND_WIN_T
}
new cursound[72]
for (new i = 0; i < 4; i++) {
formatex(cursound, 71, "sound/%s", prsounds[i])
if(file_exists(cursound))
precache_sound(prsounds[i])
else
log_amx("%L Cound't find sound file %s to precache.", "MSG_HEADER", id, cursound)
}
}
public csflags_init()
{
g_CSFlagsState = 0
g_CSFlagsState |= GAMESTATE_STARTED
if(get_pcvar_num(g_cvarRemoveDefObjectives))
remove_default_objectives()
g_UpdateScoresHud = true
g_UpdateFlagsHud = true
set_task(INTERVAL_SCORE_UPDATE, "update_score", TASKID_SCORE_UPDATE, _, _, "b")
g_fwTouch = register_forward(FM_Touch, "forward_touch")
g_fwThink = register_forward(FM_Think, "flag_think")
g_fwPThink = register_forward(FM_PlayerPreThink, "player_think")
g_ifw_FlagTaken = CreateMultiForward(IFW_FLAGTAKEN, ET_IGNORE, FP_CELL) g_ifw_MatchWon = CreateMultiForward(IFW_MATCHWON, ET_IGNORE, FP_CELL) g_ifw_RoundWon = CreateMultiForward(IFW_ROUNDWON, ET_IGNORE, FP_CELL) set_task(11.0, "set_mapend_mptimelimit", TASKID_MAPEND, _, _, "d", 1)
}
csflags_pause(pausescore = 0)
{
if(pausescore)
remove_task(TASKID_SCORE_UPDATE)
}
csflags_reset(wins = 0, players = 0)
{
new flag
open_debug_file()
print_stack(0, "csflags_reset")
printvar_cell(0, "wins", wins)
printvar_cell(0, "players", players)
close_debug_file()
while((flag = engfunc(EngFunc_FindEntityByString, flag, "classname", CLASSNAME_CSFLAG))) {
set_pev(flag, pev_csf_flagstatus, 0)
set_pev(flag, pev_csf_flagowner, 0)
if(task_exists(TASKID_CAPTUREDELAY + flag))
remove_task(TASKID_CAPTUREDELAY + flag)
set_pev(flag, pev_csf_flagtoucher, 0)
}
g_TeamScore[ID_TEAM_CT] = 0.0
g_TeamScore[ID_TEAM_T] = 0.0
g_LastTeamScore[ID_TEAM_CT] = -1
g_LastTeamScore[ID_TEAM_T] = -1
if(wins) {
g_TeamWins[ID_TEAM_CT] = 0
g_TeamWins[ID_TEAM_T] = 0
}
if(players) {
for(new i = 1; i < 33; i++)
g_PlayerScore[i] = 0.0
}
for(new i = 0; i < MAX_CSFLAGS; i++)
g_FlagState[i] = -1
}
csflags_restart()
{
open_debug_file()
print_stack(0, "csflags_restart")
close_debug_file()
if(!g_fwTouch)
g_fwTouch = register_forward(FM_Touch, "forward_touch")
if(!g_fwThink)
g_fwThink = register_forward(FM_Think, "flag_think")
if(!g_fwPThink)
g_fwPThink = register_forward(FM_Think, "player_think")
if(!g_ifw_FlagTaken)
g_ifw_FlagTaken = CreateMultiForward(IFW_FLAGTAKEN, ET_IGNORE, FP_CELL) if(!g_ifw_MatchWon)
g_ifw_MatchWon = CreateMultiForward(IFW_MATCHWON, ET_IGNORE, FP_CELL) if(!g_ifw_RoundWon)
g_ifw_RoundWon = CreateMultiForward(IFW_ROUNDWON, ET_IGNORE, FP_CELL) g_UpdateScoresHud = true
g_UpdateFlagsHud = true
g_LastTeamScore[ID_TEAM_CT] = -1
g_LastTeamScore[ID_TEAM_T] = -1
g_MatchLastWin = false
if(!g_VoteCmdExecuted) {
start_vote_cmd()
}
if(!task_exists(TASKID_SCORE_UPDATE))
set_task(INTERVAL_SCORE_UPDATE, "update_score", TASKID_SCORE_UPDATE, _, _, "b")
g_CSFlagsState &= ~GAMESTATE_STOPPED
g_CSFlagsState |= GAMESTATE_STARTED
}
start_vote_cmd(Float:delay=6.0)
{
new imminentWin
new checkstr[2]
get_pcvar_string(g_cvarVoteStartCommand, checkstr, 1)
if(checkstr[0]) {
imminentWin = get_pcvar_flags(g_cvarMaxWins) - 1
if(imminentWin >= g_TeamWins[ID_TEAM_CT] || imminentWin >= g_TeamWins[ID_TEAM_T]) {
g_VoteCmdExecuted = true
set_task(delay, "exec_vote_cmd", 2121)
}
}
}
public exec_vote_cmd()
{
new voteCommand[64]
get_pcvar_string(g_cvarVoteStartCommand, voteCommand, 63)
server_cmd(voteCommand)
}
public csflags_restart_cmd(id, level, cid)
{
if(!cmd_access(id, level, cid, 0))
return PLUGIN_HANDLED
if(!get_pcvar_num(g_cvarDomEnabled))
console_print(id, "%L", id, "MSG_CONS_NOT_ENABLED")
csflags_reset()
csflags_stop(1)
if(load_config())
csflags_init()
else
console_print(id, "%L", id, "MSG_CONS_NOCFG")
return PLUGIN_HANDLED
}
public csflags_stop_cmd(id, level, cid)
{
if(!cmd_access(id, level, cid, 0))
return PLUGIN_HANDLED
csflags_stop(1)
return PLUGIN_HANDLED
}
csflags_stop(remove)
{
open_debug_file()
print_stack(0, "csflags_restart_cmd")
printvar_cell(0, "remove", remove)
close_debug_file()
if(g_CSFlagsState & GAMESTATE_STARTED) {
if(task_exists(TASKID_SCORE_UPDATE))
remove_task(TASKID_SCORE_UPDATE)
if(remove) {
remove_all_ents(CLASSNAME_CSFLAG)
remove_all_ents(CLASSNAME_TRIGGER_FLAG)
g_MapFlagsNum = 0
}
g_CSFlagsState = GAMESTATE_STOPPED | (g_CSFlagsState & GAMESTATE_SHOWSCORE)
}
}
team_win(team)
{
if(g_CSFlagsState & GAMESTATE_SHOWSCORE)
return PLUGIN_CONTINUE
csflags_pause(1)
new winlimit
new flag
g_TeamWins[team]++
debug_gamestate(0, "team_win(0-0)")
while((flag = engfunc(EngFunc_FindEntityByString, flag, "classname", CLASSNAME_CSFLAG))) {
new toucher
toucher = pev(flag, pev_csf_flagtoucher)
if(toucher) {
set_pev(flag, pev_csf_flagtoucher, 0)
if(task_exists(TASKID_CAPTUREDELAY + flag))
remove_task(TASKID_CAPTUREDELAY + flag)
msg_csf_icon(toucher, false)
msg_bar_progress(toucher, 100, true)
}
}
g_CSFlagsState |= GAMESTATE_SHOWSCORE
if(g_ifw_RoundWon) {
new retval
ExecuteForward(g_ifw_RoundWon, retval, team + 1)
}
winlimit = get_pcvar_num(g_cvarMaxWins)
if(g_CSFlagsState & GAMESTATE_WAIT) {
if(map_should_end()) {
set_task(11.0, "restore_mptimelimit", TASKID_RESTORE_MP)
csflags_stop(1)
g_MatchLastWin = true
}
}
if(winlimit && !g_MatchLastWin) {
if(g_TeamWins[team] >= winlimit && !(g_CSFlagsState & GAMESTATE_WAIT)) {
force_end()
csflags_stop(1)
g_MatchLastWin = true
}
}
if(g_MatchLastWin) {
g_CSFlagsState |= GAMESTATE_MATCHOVER
if(g_ifw_MatchWon) {
new retval
ExecuteForward(g_ifw_MatchWon, retval, team + 1)
}
}
g_LastWinner = (team + 1)
show_win_hud(team)
open_debug_file()
print_stack(0, "team_win")
printvar_cell(0, "team", team)
printvar_cell(0, "lastwin", g_MatchLastWin)
printvar_cell(0, "winlimit", winlimit)
printvar_cell(0, "g_TeamWins[team]", g_TeamWins[team])
printvar_cell(0, "g_LastWinner", g_LastWinner)
close_debug_file()
debug_gamestate(0, "team_win(0-1)")
if(get_pcvar_num(g_cvarMatchRespawn))
move_to_spawn()
return PLUGIN_CONTINUE
}
show_win_hud(team)
{
new message[256]
new Float:score[5]
new bestplayer[5]
new name[32]
new Float:currentscore
new players[32]
new playersnum
new count
new len
if(get_playersnum()) {
get_players(players, playersnum)
for(new i = 0; i < playersnum; i++) {
for(new p = 0; p < 5; p++) {
currentscore = g_PlayerScore[players[i]]
if(currentscore == 0.0)
continue
if(currentscore > score[p]) {
for(new q = 4; q > p && q > 0; q--) {
score[q] = score[q - 1]
bestplayer[q] = bestplayer[q - 1]
}
score[p] = currentscore
bestplayer[p] = players[i]
count++
break
}
}
}
count = (count > 5) ? 5 : count
}
len = format(message, 100, "%s^n", MSG_HEADER)
if(g_MatchLastWin) {
team = (g_TeamWins[ID_TEAM_CT] > g_TeamWins[ID_TEAM_T]) ? ID_TEAM_CT : ID_TEAM_T
len += format(message[len], 255 - len, "%L" , LANG_PLAYER, "HUD_TEAMWINNER", g_Teams[team])
}
else
len += format(message[len], 255 - len, "%L", LANG_PLAYER, "HUD_TEAMWINS", g_Teams[team])
len += format(message[len], 255 - len, "%L^n", LANG_PLAYER, "HUD_BESTSCORE")
for(new i = 0; i < count; i++) {
get_user_name(bestplayer[i], name, 31)
len += format(message[len], 255 - len, "^n%s - %d", name, floatround(g_PlayerScore[bestplayer[i]]))
}
set_hudmessage (255, 40, 20, 0.10, 0.30, 0, 0.1, 10.0, 0.0, 0.0, 3)
show_hudmessage(0, message)
if(!(g_CSFlagsState & GAMESTATE_HUDREPEAT)) {
if(!g_MatchLastWin) {
g_RestartTime = 35.0
set_task(1.0, "restart_counter", TASKID_RESTART_COUNTER, _, _, "b")
}
new t
for(new i = 0; i < playersnum; i++) {
if(!is_user_connected(players[i]))
continue
if((t = get_user_team(players[i]))) {
if((t - 1) == team) {
if(g_MatchLastWin) client_cmd(players[i], "spk %s", SOUND_MATCHWIN)
else client_cmd(players[i], "spk %s", SOUND_TEAMWIN)
}
else if((t - 1) == (team ^ 1)) {
if(g_MatchLastWin) client_cmd(players[i], "spk %s", SOUND_OPPONENT_MATCHWIN)
else client_cmd(players[i], "spk %s", SOUND_OPPONENT_WIN)
}
}
}
switch(team) {
case ID_TEAM_CT: {
if(g_MatchLastWin) client_cmd(0, "spk %s", SOUND_MATCHWIN_CT)
else client_cmd(0, "spk %s", SOUND_WIN_CT)
}
case ID_TEAM_T: {
if(g_MatchLastWin) client_cmd(0, "spk %s", SOUND_MATCHWIN_T)
else client_cmd(0, "spk %s", SOUND_WIN_T)
}
default: {}
}
}
}
public win_hud_repeat()
{
open_debug_file()
print_stack(0, "win_hud_repeat")
printvar_cell(0, "g_LastWinner", g_LastWinner)
close_debug_file()
if(g_LastWinner) {
show_win_hud(g_LastWinner)
g_LastWinner = 0
g_CSFlagsState &= ~GAMESTATE_HUDREPEAT
lastFlagState = g_CSFlagsState
open_debug_file()
print_stack(0, "win_hud_repeat(1,0)")
printvar_cell(0, "lastwin", g_MatchLastWin)
close_debug_file()
}
}
public restart_counter()
{
open_debug_file()
print_stack(0, "restart_counter")
printvar_float(0, "g_RestartTime", g_RestartTime)
close_debug_file()
if(g_RestartTime > 0.0) {
client_print(0, print_center, "%L", LANG_PLAYER, "MSG_COUNTER", floatround(g_RestartTime))
g_RestartTime -= 1.0
return PLUGIN_CONTINUE
}
remove_task(TASKID_RESTART_COUNTER)
client_print(0, print_center, "%L", LANG_PLAYER, "MSG_RESTARTED")
lastFlagState = g_CSFlagsState
debug_gamestate(0, "restart_counter-before")
server_print("--- %d", g_CSFlagsState)
g_CSFlagsState &= ~GAMESTATE_SHOWSCORE
server_print("--- %d", g_CSFlagsState)
lastFlagState = g_CSFlagsState
debug_gamestate(0, "restart_counter-after")
for(new i = 1; i <= g_MaxPlayers; i++) {
if(is_user_connected(i) && is_user_alive(i)) {
engfunc(EngFunc_SetClientMaxspeed, i, 250.0)
set_pev(i, pev_maxspeed, 250.0)
}
}
g_LastWinner = 0 csflags_reset()
csflags_restart()
return PLUGIN_CONTINUE
}
public event_game_commencing()
{
if(g_CSFlagsState & GAMESTATE_STARTED)
csflags_reset(1, 1)
}
public event_round_start()
{
if(g_CSFlagsState & GAMESTATE_SHOWSCORE ) {
g_CSFlagsState |= GAMESTATE_HUDREPEAT
set_task(0.2, "win_hud_repeat", TASKID_HUDREPEAT)
print_comment(0, "event_round_start calls win_hut_repeat", 0, true)
lastFlagState = g_CSFlagsState
}
if(get_pcvar_num(g_cvarRemoveDefObjectives) && (g_CSFlagsState & GAMESTATE_STARTED)) {
if(engfunc(EngFunc_FindEntityByString, 32, "classname", "hostage_entity"))
set_task(0.3, "take_for_a_walk", 2222)
}
}
public take_for_a_walk()
{
new hostage
while((hostage = engfunc(EngFunc_FindEntityByString, hostage, "classname", "hostage_entity"))) {
new Float:origin[3] = {8191.0, 8191.0, 8191.0}
engfunc(EngFunc_SetOrigin, hostage, origin)
}
}
remove_all_ents(const classname[])
{
new flag
while((flag = engfunc(EngFunc_FindEntityByString, flag, "classname", classname)))
engfunc(EngFunc_RemoveEntity, flag)
}
public radio_clear(const id[1])
{
g_Radio[id[0]] = 0
}
public hide_radio_icon(const id[1])
{
message_begin (MSG_ALL, 135)
write_byte (0)
write_byte (id[0])
message_end ()
}
public flag_captured(const info[])
{
new flag
new toucher
new flagid
new team
flag = info[0]
toucher = info[1]
flagid = pev(flag, pev_csf_flagid)
team = get_user_team(toucher)
if(team != 1 && team != 2)
return
if(g_BotCapturing[toucher]) {
g_BotCapturing[toucher] = false
engfunc(EngFunc_SetClientMaxspeed, toucher, 250.0)
set_pev(toucher, pev_maxspeed, 250.0)
}
set_pev(flag, pev_csf_flagowner, toucher)
set_pev(flag, pev_csf_flagtoucher, 0)
set_pev(flag, pev_csf_flagstatus, team)
g_FlagState[flagid] = team - 1
msg_csf_icon(toucher, false)
msg_bar_progress(toucher, 100, true)
if(get_pcvar_num(g_cvarCaptureFrags))
add_user_frags(toucher, get_pcvar_num(g_cvarCaptureFrags), team)
notify_flag_taken(toucher, flagid)
g_UpdateFlagsHud = true
if(get_pcvar_num(g_cvarAllFlagsWin)) {
new allflags = 1
for(new i = 1; i < g_MapFlagsNum; i++) {
if(g_FlagState[i] != g_FlagState[i -1]) {
allflags = 0
break
}
}
if(allflags) {
new wf
wf = get_pcvar_num(g_cvarWinFrags)
if(wf) add_user_frags(0, wf, team)
team_win(team - 1)
}
}
}
public player_think(id)
{
if(!(g_CSFlagsState & GAMESTATE_STARTED))
return FMRES_IGNORED
if(!(g_CSFlagsState & GAMESTATE_SHOWSCORE)) {
if(g_BotCapturing[id]) {
engfunc(EngFunc_SetClientMaxspeed, id, 0.1)
set_pev(id, pev_maxspeed, 0.1)
}
return FMRES_IGNORED
}
if(!(g_CSFlagsState & GAMESTATE_MATCHOVER)) {
if(is_user_alive(id)) {
if(get_pcvar_num(g_cvarFreeze)) {
engfunc(EngFunc_SetClientMaxspeed, id, 0.1)
set_pev(id, pev_maxspeed, 0.1)
}
set_pev(id, pev_button, (pev(id, pev_button) & ~IN_ATTACK) & ~IN_ATTACK2)
}
}
return FMRES_IGNORED
}
public flag_think(flag)
{
if(g_CSFlagsState & (GAMESTATE_SHOWSCORE | GAMESTATE_STOPPED)) {
if(lastFlagState != g_CSFlagsState) {
open_debug_file()
print_stack(0, "flag_think")
printvar_cell(0, "g_CSFlagsState & GAMESTATE_SHOWSCORE", g_CSFlagsState & GAMESTATE_SHOWSCORE)
printvar_cell(0, "g_CSFlagsState & GAMESTATE_STOPPED", g_CSFlagsState & GAMESTATE_STOPPED)
close_debug_file()
lastFlagState = g_CSFlagsState
}
return FMRES_IGNORED
}
if(!pev_valid(flag))
return FMRES_IGNORED
if(pev(flag, pev_csf_uniqueid) != CSFLAG_TYPEID)
return FMRES_IGNORED
if(pev(flag, pev_think_delay) < 4) {
set_pev(flag, pev_think_delay, pev(flag, pev_think_delay) + 1)
return FMRES_IGNORED
}
set_pev(flag, pev_think_delay, 0)
static classname[32]
static team
static owner
static toucher
pev(flag, pev_classname, classname, 31)
if(!equal(classname, CLASSNAME_CSFLAG))
return FMRES_IGNORED
if(!get_pcvar_flags(g_cvarDomEnabled))
csflags_stop(0)
toucher = pev(flag, pev_csf_flagtoucher)
if(toucher) {
if(!is_user_alive(toucher) || !is_touching(toucher, flag)) {
if(task_exists(TASKID_CAPTUREDELAY + flag)) {
remove_task(TASKID_CAPTUREDELAY + flag)
set_pev(flag, pev_csf_flagtoucher, 0)
msg_csf_icon(toucher, false)
msg_bar_progress(toucher, 100, true)
}
}
}
team = pev(flag, pev_csf_flagstatus)
if(team) {
owner = pev(flag, pev_csf_flagowner)
if(owner)
g_PlayerScore[owner] += 0.04
if(team == 1 || team == 2) {
new curScore
g_TeamScore[team - 1] += 0.04
curScore = floatround(g_TeamScore[team - 1])
if(g_LastTeamScore[team - 1] != curScore) {
g_UpdateScoresHud = true
g_LastTeamScore[team -1] = curScore
}
if(curScore >= floatround(get_pcvar_float(g_cvarMaxPoints))) {
if(curScore != floatround(g_TeamScore[(team - 1) ^ 1])) {
new wf
wf = get_pcvar_num(g_cvarWinFrags)
if(wf) add_user_frags(0, wf, team)
team_win(team - 1)
}
}
}
}
return FMRES_IGNORED
}
public client_connect(id)
{
if(is_user_bot(id)) {
g_IsBot[id] = true
}
}
public client_disconnect(id)
{
new flag
while((flag = engfunc(EngFunc_FindEntityByString, flag, "classname", CLASSNAME_CSFLAG))) {
if(pev(flag, pev_csf_flagowner) == id)
set_pev(flag, pev_csf_flagowner, 0)
if(pev(flag, pev_csf_flagtoucher) == id) {
if(task_exists(TASKID_CAPTUREDELAY + flag))
remove_task(TASKID_CAPTUREDELAY + flag)
set_pev(flag, pev_csf_flagtoucher, 0)
}
}
g_PlayerScore[id] = 0.0
if(is_user_bot(id)) {
g_IsBot[id] = false
g_BotCapturing[id] = false
}
}
is_touching(playerid, flagent)
{
static Float:pl_origin[3]
static hitbox
static flagid
hitbox = pev(flagent, pev_csf_hitbox)
pev(playerid, pev_origin, pl_origin)
flagid = pev(flagent, pev_csf_flagid)
if( (pl_origin[0] + 17.0 >= (g_TriggerOrigin[flagid][0] + g_mmSize[hitbox][HITBOX_MIN][0]) &&
pl_origin[0] - 17.0 <= (g_TriggerOrigin[flagid][0] + g_mmSize[hitbox][HITBOX_MAX][0])) &&
(pl_origin[1] + 17.0 >= (g_TriggerOrigin[flagid][1] + g_mmSize[hitbox][HITBOX_MIN][1]) &&
pl_origin[1] - 17.0 <= (g_TriggerOrigin[flagid][1] + g_mmSize[hitbox][HITBOX_MAX][1])) &&
(pl_origin[2] + 17.0 >= (g_TriggerOrigin[flagid][2] + g_mmSize[hitbox][HITBOX_MIN][2]) &&
pl_origin[2] - 17.0 <= (g_TriggerOrigin[flagid][2] + g_mmSize[hitbox][HITBOX_MAX][2])))
return 1
return 0
}
public forward_touch(ent2, ent1)
{
static toucher
static classname[32]
static team
static flag
if(!pev_valid(ent1) || !pev_valid(ent2))
return FMRES_IGNORED
if(pev(ent2, pev_csf_uniqueid) == TRIGGERFLAG_TYPEID && is_user_alive(ent1)) {
if(g_CSFlagsState & (GAMESTATE_SHOWSCORE | GAMESTATE_STOPPED | GAMESTATE_MATCHOVER))
return FMRES_IGNORED
pev(ent2, pev_classname, classname, 31)
if(!equal(classname, CLASSNAME_TRIGGER_FLAG))
return FMRES_IGNORED
team = get_user_team(ent1)
if(team < 1 || team > 2)
return FMRES_IGNORED
flag = pev(ent2, pev_csf_flagent)
if(!pev_valid(flag))
return FMRES_IGNORED
toucher = pev(flag, pev_csf_flagtoucher)
if(toucher) {
if(toucher != ent1 && get_user_team(toucher) != team) {
set_pev(flag, pev_csf_flagtoucher, 0)
if(task_exists(TASKID_CAPTUREDELAY + flag)) {
remove_task(TASKID_CAPTUREDELAY + flag)
msg_bar_progress(toucher, 100, true)
msg_csf_icon(toucher, false)
if(g_BotCapturing[toucher]) {
engfunc(EngFunc_SetClientMaxspeed, ent1, 250.0)
set_pev(toucher, pev_maxspeed, 250.0)
g_BotCapturing[toucher] = false
}
}
}
}
else if(pev(flag, pev_csf_flagstatus) != team) {
if(!is_touching(ent1, flag))
return FMRES_IGNORED
set_pev(flag, pev_csf_flagtoucher, ent1)
if(g_IsBot[ent1]) {
g_BotCapturing[ent1] = true
}
msg_csf_icon(ent1, true)
new info[2]
info[0] = flag
info[1] = ent1
if(task_exists(TASKID_CAPTUREDELAY + flag))
remove_task(TASKID_CAPTUREDELAY + flag)
msg_bar_progress(ent1, 0)
set_task(get_pcvar_float(g_cvarCaptureDelay),
"flag_captured", TASKID_CAPTUREDELAY + flag, info, 2)
}
}
return FMRES_IGNORED
}
msg_csf_icon(id, bool:show = true)
{
message_begin(MSG_ONE, g_msgidIcon, {0, 0, 0}, id)
write_byte((show ? 1 << 1: 0))
write_string(CSFLAGS_ICON_NAME)
if (show) {
write_byte(CSFLAGS_ICON_R)
write_byte(CSFLAGS_ICON_G)
write_byte(CSFLAGS_ICON_B)
}
message_end()
}
msg_bar_progress(id, pos, bool:kill = false)
{
message_begin(MSG_ONE, g_msgidProgress, {0, 0, 0}, id)
write_short(kill? 0 : get_pcvar_num(g_cvarCaptureDelay))
write_short(pos)
message_end()
}
notify_flag_taken(toucher, flagid)
{
new name[32]
new toucherteam
new sid[4]
new team
new id[1]
g_Radio[toucher] = 1
id[0] = toucher
set_task(4.0, "radio_clear", TASKID_RADIORANGE, id, 1)
set_task(1.5, "hide_radio_icon", TASKID_HIDERADIOICON, id, 1)
toucherteam = get_user_team(toucher)
get_user_name(toucher, name, 31)
num_to_str(toucher, sid, 3)
if(g_ifw_FlagTaken) {
new retval
ExecuteForward(g_ifw_FlagTaken, retval, toucher)
}
for(new i = 1; i <= g_MaxPlayers; i++) {
if(!is_user_connected(i))
continue
team = get_user_team(i)
if(get_pcvar_num(g_cvarUseRadio) && (team == 1 || team == 2)) {
if(team == toucherteam) {
message_begin(MSG_ONE_UNRELIABLE, 77, _,i)
if (is_running("czero")) {
write_byte (5)
write_string (sid)
write_string ("#Game_radio_location")
write_string (name)
write_string (g_PlaceNames[flagid])
}
else {
write_byte (3)
write_string ("#Game_radio")
write_string (name)
}
write_string(MSG_RADIO_POINTSECURED)
message_end()
message_begin (MSG_ONE, 135, _, i)
write_byte (1)
write_byte (toucher)
message_end ()
client_cmd(i, "spk %s", SOUND_FLAGTAKEN)
client_cmd(i, "spk %s", g_NotifySound[team - 1])
ml_client_print(i, "%L", LANG_PLAYER_C, "MSG_FLAGSTATE_NOTIFY", name, floatround(g_PlayerScore[toucher]), g_PlaceNames[flagid], (toucherteam == 2) ? (TEAM_DESC_CT) : TEAM_DESC_T)
}
else {
if((team - 1) == ((toucherteam - 1) ^ 1))
client_cmd(i, "spk %s", SOUND_OPPONENT_FLAGTAKEN)
ml_client_print(i, "%L", LANG_PLAYER_C, "MSG_FLAGSTATE_NOTIFY_OP", name, floatround(g_PlayerScore[toucher]), g_PlaceNames[flagid], (toucherteam == 2) ? (TEAM_DESC_CT) : TEAM_DESC_T)
}
}
}
}
ml_client_print(id, msg[],any:...)
{
new changeCount, num, i, j, argnum = numargs(), player
static newMsg[191], message[191], changed[8], players[32]
if(id) {
players[0] = id
num = 1
}
else get_players(players, num)
for(i = 0; i < num; i++) {
player = players[i]
changeCount = 0
if(!is_user_connected(player)) continue
for(j = 2;j < argnum;j++) {
if(getarg(j) == LANG_PLAYER_C) {
setarg(j,0,player);
changed[changeCount++] = j
}
}
vformat(newMsg,190,msg,3);
for(j=0;j<changeCount;j++) {
setarg(changed[j],0,LANG_PLAYER_C);
}
replace_all(newMsg,190,"%n","^x03") replace_all(newMsg,190,"%g","^x04") replace_all(newMsg,190,"%e","^x01") formatex(message,190,"^x01%s",newMsg)
message_begin(MSG_ONE, g_msgidSayText, _, player)
write_byte(player)
write_string(message)
message_end()
}
return 1
}
move_to_spawn()
{
new ctspawn
new tspawn
new spawn
new players[32]
new playersnum
new team
new Float:vec[3]
new bool:restore
restore = (get_pcvar_num(g_cvarMatchRespawn) == 2)
get_players(players, playersnum)
for(new i = 0; i < playersnum; i++) {
spawn = 0
if(players[i] && is_user_alive(players[i])) {
team = get_user_team(players[i])
switch(team) {
case 1 : {
if(tspawn == -1)
continue
tspawn = engfunc(EngFunc_FindEntityByString,
tspawn,
"classname",
"info_player_deathmatch")
spawn = tspawn
if(!tspawn)
tspawn = -1
}
case 2 : {
if(ctspawn == -1)
continue
ctspawn = engfunc(EngFunc_FindEntityByString,
ctspawn,
"classname",
"info_player_start")
spawn = ctspawn
if(!ctspawn)
ctspawn = -1
}
}
if(spawn) {
pev(spawn, pev_origin, vec)
engfunc(EngFunc_SetOrigin, players[i], vec)
set_pev(players[i], pev_fixangle, 1)
pev(spawn, pev_angles, vec)
set_pev(players[i], pev_angles, vec)
if(restore)
set_pev(players[i], pev_health, 100.0)
}
}
}
}
public update_score()
{
static headerCT[25]
static headerT[25]
static flagsTakenT[HUD_FLAGS_STRING_MAXSIZE]
static flagsTakenCT[HUD_FLAGS_STRING_MAXSIZE]
static scoreCT[25 + HUD_FLAGS_STRING_MAXSIZE]
static scoreT[25 + HUD_FLAGS_STRING_MAXSIZE]
new ind
if(g_UpdateScoresHud) {
formatex(headerT, 30, g_ScoreHeaderFormat[ID_TEAM_T], g_TeamWins[ID_TEAM_T], floatround(g_TeamScore[ID_TEAM_T]))
formatex(headerCT, 30, g_ScoreHeaderFormat[ID_TEAM_CT], g_TeamWins[ID_TEAM_CT], floatround(g_TeamScore[ID_TEAM_CT]))
}
if(g_UpdateFlagsHud) {
new flagsTakenCTLen
new flagsTakenTLen
flagsTakenT[0] = 0
flagsTakenCT[0] = 0
for(ind = 0; ind < MAX_CSFLAGS; ind++) {
if(g_FlagState[ind] == 1) {
flagsTakenCTLen += format(flagsTakenCT[flagsTakenCTLen],
HUD_FLAGS_STRING_MAXSIZE - flagsTakenCTLen,
"^n%s", g_PlaceNames[ind])
}
else if(g_FlagState[ind] == 0) {
flagsTakenTLen += format(flagsTakenT[flagsTakenTLen],
HUD_FLAGS_STRING_MAXSIZE - flagsTakenTLen,
"^n%s", g_PlaceNames[ind])
}
}
}
if(g_UpdateFlagsHud || g_UpdateScoresHud) {
formatex(scoreCT, 24 + HUD_FLAGS_STRING_MAXSIZE, "%s%s", headerCT, flagsTakenCT)
formatex(scoreT, 24 + HUD_FLAGS_STRING_MAXSIZE, "%s%s", headerT, flagsTakenT)
}
g_UpdateFlagsHud = false
g_UpdateScoresHud = false
for(ind = 1; ind <= g_MaxPlayers; ind++) {
if(is_user_connected(ind)) {
if(is_user_alive(ind)) {
set_hudmessage(255, 0, 0, 0.3, 0.0, 0, 6.0, INTERVAL_SCORE_UPDATE, 0.1, 0.2, 3)
show_hudmessage(ind, scoreT)
set_hudmessage(ind, 0, 255, 0.6, 0.0, 0, 6.0, INTERVAL_SCORE_UPDATE, 0.1, 0.2, 4)
show_hudmessage(ind, scoreCT)
}
else {
set_hudmessage(255, 0, 0, 0.3, 0.17, 0, 6.0, INTERVAL_SCORE_UPDATE, 0.1, 0.2, 3)
show_hudmessage(ind, scoreT)
set_hudmessage(ind, 0, 255, 0.6, 0.17, 0, 6.0, INTERVAL_SCORE_UPDATE, 0.1, 0.2, 4)
show_hudmessage(ind, scoreCT)
}
}
}
}
remove_default_objectives()
{
new objectives[6][] = {
"func_bomb_target",
"info_bomb_target",
"info_hostage_rescue",
"func_hostage_rescue",
"func_vip_safetyzone",
"func_escapezone"
}
for(new i = 0; i < 6; i++)
remove_all_ents(objectives[i])
}
add_user_frags(id, value, team)
{
new Float:frags
new players[32]
new playersnum
static const fnTeamFilter[3][] = { "", "TERRORIST", "CT" }
if(id) {
playersnum = 1
players[0] = id
}
else {
if(team > 0 && team < 2)
get_players(players, playersnum, "e", fnTeamFilter[team])
}
for(new i = 0; i < playersnum; i++) {
pev(players[i], pev_frags, frags)
frags += value
set_pev(players[i], pev_frags, frags)
message_begin(MSG_ALL, g_msgidScoreInfo)
write_byte(players[i])
write_short(floatround(frags))
write_short(CS_GET_USER_DEATHS_(players[i]))
write_short(0)
write_short(team)
message_end()
}
}
load_config()
{
new file[72]
if(get_configfile(file, 71)) {
new numbers[5][6]
new Float:origin[3]
new Float:angle[3]
new line[96]
new arg1[16]
new arg2[80]
new hitbox
new count
new flag
new trigger
new filepointer
filepointer = fopen(file, "r")
while(fgets(filepointer, line, 95) && count < MAX_CSFLAGS) {
if(!strlen(line) || line[0] == ';')
continue
parse(line, arg1, 15, arg2, 79)
if(!strlen(arg2))
continue
if(strlen(arg1))
copy(g_PlaceNames[count], 15, arg1)
else
formatex(g_PlaceNames[count], 15, "Flag[%d]", count)
parse (arg2,
numbers[0], 5,
numbers[1], 5,
numbers[2], 5,
numbers[3], 5,
numbers[4], 5)
origin[0] = str_to_float(numbers[0])
origin[1] = str_to_float(numbers[1])
origin[2] = str_to_float(numbers[2])
angle[1] = str_to_float(numbers[3])
hitbox = str_to_num(numbers[4])
engfunc(EngFunc_MakeVectors, angle)
flag = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "cycler_sprite"))
if(pev_valid(flag)) {
engfunc(EngFunc_SetOrigin, flag, origin)
set_pev(flag, pev_model, MODEL_FLAGS)
set_pev(flag, pev_framerate, 1.0)
dllfunc(DLLFunc_Spawn, flag)
set_pev(flag, pev_classname, CLASSNAME_CSFLAG)
set_pev(flag, pev_angles, angle)
set_pev(flag, pev_csf_uniqueid, CSFLAG_TYPEID)
set_pev(flag, pev_csf_flagid, count)
set_pev(flag, pev_csf_hitbox, hitbox)
trigger = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "trigger_multiple"))
if(pev_valid(trigger)) {
origin[2] += 48.0
engfunc(EngFunc_SetOrigin, trigger, origin)
dllfunc(DLLFunc_Spawn, trigger)
engfunc(EngFunc_SetSize, trigger, g_mmSize[hitbox][HITBOX_MIN], g_mmSize[hitbox][HITBOX_MAX])
set_pev(trigger, pev_csf_uniqueid, TRIGGERFLAG_TYPEID)
set_pev(trigger, pev_classname, CLASSNAME_TRIGGER_FLAG)
set_pev(trigger, pev_csf_flagent, flag)
set_pev(trigger, pev_csf_flagid, count)
set_pev(flag, pev_csf_trigger, trigger)
g_TriggerOrigin[count][0] = origin[0]
g_TriggerOrigin[count][1] = origin[1]
g_TriggerOrigin[count][2] = origin[2]
}
else {
fclose(filepointer)
return 0
}
if(count < MAX_CSFLAGS)
count++
}
else {
fclose(filepointer)
return 0
}
flag = 0
trigger = 0
}
fclose(filepointer)
if(count) {
g_MapFlagsNum = count
return 1
}
else
return 0
}
return 0
}
get_configfile(file[], len)
{
new map[36]
get_mapname(map, 35)
get_configsdir(file, len)
format(file[strlen(file)], len - strlen(file), FILE_DOMCFG, map)
return file_exists(file)
}
public force_end()
{
open_debug_file()
print_stack(0, "server_changelevel")
new Float:mplimit mplimit = get_cvar_float("mp_timelimit")
if (get_playersnum() && mplimit != 0.0) {
new Float:newlimit
newlimit = mplimit - float(get_timeleft() / 60) + get_pcvar_float(g_cvarMapEndTime)
g_CSFlagsState |= GAMESTATE_FORCEDEND
g_OldMPTime = mplimit
start_vote_cmd(0.0)
server_cmd("mp_timelimit %f", newlimit)
client_print(0,print_chat,"%s %s", MSG_HEADER, "%L", LANG_PLAYER, "MSG_CHANGEMAP_DELAY")
printvar_float(0, "mplimit", mplimit)
printvar_float(0, "newlimit", newlimit)
close_debug_file()
}
}
public server_changelevel(map[])
{
open_debug_file()
print_stack(0, "server_changelevel")
if((g_CSFlagsState & GAMESTATE_FORCEDEND || g_CSFlagsState & GAMESTATE_WAIT) && g_OldMPTime) {
if (get_cvar_num("mp_timelimit") == get_pcvar_num(g_cvarMapEndTime)) {
server_cmd("mp_timelimit %d", g_OldMPTime)
print_comment(0, "setting mp_timelimit to g_OldMPTime", 1)
}
}
close_debug_file()
}
public set_mapend_mptimelimit()
{
open_debug_file()
print_stack(0, "set_mapend_mplimit")
if( (g_CSFlagsState & GAMESTATE_STARTED) &&
!(g_CSFlagsState & (GAMESTATE_FORCEDEND | GAMESTATE_MATCHOVER | GAMESTATE_WAIT)) &&
get_playersnum() &&
g_OldMPTime == 0.0 &&
get_cvar_float("mp_timelimit") != 0.0 &&
get_pcvar_num(g_cvarDomEnabled)) {
if(!get_pcvar_num(g_cvarTieMatch)) {
if(!map_should_end()) {
g_CSFlagsState |= GAMESTATE_WAIT
g_OldMPTime = get_cvar_float("mp_timelimit")
server_cmd("mp_timelimit 0")
remove_task(TASKID_MAPEND) start_vote_cmd(0.0)
print_comment(0, "waiting for a winner", 1)
print_comment(0, "mp_timelimit = 0, gamestate |= GAMESTATE_WAIT", 1)
printvar_float(0, "g_OldMPTime", g_OldMPTime)
client_print(0, print_chat, "%L %L", LANG_PLAYER, "MSG_HEADER", LANG_PLAYER, "MSG_TIME_OVER")
}
else
print_comment(0, "map_should_end returned 1, won't mess with time")
}
else
print_comment(0, "Tie match enabled, won't mess with time", 1)
}
else {
print_comment(0, "At least one of these statements failed:", 1)
printvar_cell(0, "g_CSFlagsState & GAMESTATE_STARTED", g_CSFlagsState & GAMESTATE_STARTED)
printvar_cell(0, "!(g_CSFlagsState & GAMESTATE_FORCEDEND", !(g_CSFlagsState & GAMESTATE_FORCEDEND))
printvar_cell(0, "!(g_CSFlagsState & GAMESTATE_MATCHOVER)", !(g_CSFlagsState & GAMESTATE_MATCHOVER))
printvar_cell(0, "!(g_CSFlagsState & GAMESTATE_WAIT)", !(g_CSFlagsState & GAMESTATE_WAIT))
printvar_cell(0, "get_playersnum()", get_playersnum())
printvar_cell(0, "get_cvar_float(^"mp_timelimit^") != 0.0", get_cvar_float("mp_timelimit") != 0.0)
printvar_cell(0, "get_playersnum()", get_playersnum())
printvar_cell(0, "get_pcvar_num(g_cvarDomEnabled)", get_pcvar_num(g_cvarDomEnabled))
}
close_debug_file()
}
map_should_end()
{
new maxwins = get_pcvar_num(g_cvarMaxWins)
new tscore = g_TeamWins[ID_TEAM_T]
new ctscore = g_TeamWins[ID_TEAM_CT]
if((maxwins) ? (maxwins > ctscore && maxwins > tscore) || tscore == ctscore : tscore == ctscore)
return 0
return 1
}
public restore_mptimelimit()
{
open_debug_file()
print_stack(0, "restore_mplimit")
printvar_float(0, "g_OldMPTime", g_OldMPTime)
printvar_cell(0, "get_cvar_num(^"mp_timelimit^")", get_cvar_num("mp_timelimit"))
close_debug_file()
g_CSFlagsState = GAMESTATE_STOPPED
if (get_cvar_num("mp_timelimit") == 0)
server_cmd("mp_timelimit %f", g_OldMPTime)
}
public debug_gamestate(id, stack[])
{
open_debug_file()
if(stack[0])
print_stack(id, stack)
else
print_stack(id)
print_debug_cmd(id, "Game State tracing")
PRINT_MSG1(id, "GAMESTATE_STARTED: %d", g_CSFlagsState & GAMESTATE_STARTED ? 1 : 0)
PRINT_MSG1(id, "GAMESTATE_FORCEDEND: %d", g_CSFlagsState & GAMESTATE_FORCEDEND ? 1 : 0)
PRINT_MSG1(id, "GAMESTATE_HUDREPEAT: %d", g_CSFlagsState & GAMESTATE_HUDREPEAT ? 1 : 0)
PRINT_MSG1(id, "GAMESTATE_MATCHOVER: %d", g_CSFlagsState & GAMESTATE_MATCHOVER ? 1 : 0)
PRINT_MSG1(id, "GAMESTATE_SHOWSCORE: %d", g_CSFlagsState & GAMESTATE_SHOWSCORE ? 1 : 0)
PRINT_MSG1(id, "GAMESTATE_STOPPED: %d", g_CSFlagsState & GAMESTATE_STOPPED ? 1 : 0)
PRINT_MSG1(id, "GAMESTATE_WAIT: %d", g_CSFlagsState & GAMESTATE_WAIT ? 1 : 0)
close_debug_file()
}
open_debug_file()
{
if(!pDebugFile)
pDebugFile = fopen(DEBUG_FILE, "a+")
}
close_debug_file() {
if(pDebugFile) {
fclose(pDebugFile)
pDebugFile = 0
}
}
public debug_flags(id, stack[])
{
new flag
new trigger
new Float:vector[3]
new count
open_debug_file()
if(!stack[0])
print_stack(id, stack)
else
print_stack(id)
print_debug_cmd(id, "Flags Tracing")
while((flag = engfunc(EngFunc_FindEntityByString, flag, "classname", CLASSNAME_CSFLAG))) {
PRINT_MSG2(id, "***^nflagent: %d, flagid: %d", flag, pev(flag, pev_csf_flagid))
PRINT_MSG1(id, "Flag name: %s", g_PlaceNames[pev(flag, pev_csf_flagid)])
pev(flag, pev_origin, vector)
PRINT_MSG3(id, "Origin: %f %f %f", vector[0], vector[1], vector[2])
pev(flag, pev_angles, vector)
PRINT_MSG3(id, "Angles: %f %f %f", vector[0], vector[1], vector[2])
PRINT_MSG1(id, "Hitbox: %d", pev(flag, pev_csf_hitbox))
PRINT_MSG1(id, "Owner: %d", pev(flag, pev_csf_flagowner))
PRINT_MSG1(id, "Toucher: %d", pev(flag, pev_csf_flagtoucher))
PRINT_MSG1(id, "Status: %d", pev(flag, pev_csf_flagstatus))
PRINT_MSG1(id, "typeid: %d", pev(flag, pev_csf_uniqueid))
trigger = pev(flag, pev_csf_trigger)
PRINT_MSG1(id, "Flag trigger:", trigger)
if(pev_valid(trigger)) {
pev(trigger, pev_origin, vector)
PRINT_MSG3(id, "^tOrigin: %f %f %f", vector[0], vector[1], vector[2])
pev(trigger, pev_maxs, vector)
PRINT_MSG3(id, "^tMaxs(size): %f %f %f", vector[0], vector[1], vector[2])
pev(trigger, pev_mins, vector)
PRINT_MSG3(id, "^tMins(size): %f %f %f", vector[0], vector[1], vector[2])
PRINT_MSG1(id, "^tflagid(ref): %d", pev(trigger, pev_csf_flagid))
PRINT_MSG1(id, "^tflagent(ref): %d", pev(trigger, pev_csf_flagent))
PRINT_MSG1(id, "^ttypeid: %d", pev(trigger, pev_csf_uniqueid))
}
else
debug_print(id, "^t[invalid trigger entity]")
count++
}
PRINT_MSG1(id, "--- Found %d flags", count)
close_debug_file()
}
debug_print(id, const msg[])
{
if(id)
console_print(id, msg)
else
server_print(msg)
if(pDebugFile) {
fputs(pDebugFile, msg)
fputs(pDebugFile, "^n")
}
}
print_debug_cmd(id, cmd[])
{
PRINT_MSG3(id, "%s^n%s CMD: %s", debugLine, debugHeader, cmd)
}
print_stack(id, stack[] = "Unknown", bool:opendfile = false)
{
if(opendfile)
open_debug_file()
PRINT_MSG2(id, "^n%s Stack on %s", debugHeader, stack)
if(opendfile)
close_debug_file()
}
stock printvar_cell(id, const varname[], value)
{
PRINT_MSG2(id, "^t[cell] %s = %d", varname, value)
}
stock printvar_float(id, const varname[], Float:value)
{
PRINT_MSG2(id, "^t[float] %s = %f", varname, value)
}
stock printvar_string(id, const varname[], const value[])
{
PRINT_MSG2(id, "^t[string] %s = %s", varname, value)
}
stock printvar_cell_array(id, const varname[], const array[], length)
{
PRINT_MSG1(id, "^t[array] %s", varname)
for(new i; i < length; i++)
PRINT_MSG2(id, "^t^t[%d] = %d", array[i])
}
stock printvar_float_array(id, const varname[], const Float:array[], length)
{
PRINT_MSG1(id, "^t[array] %s", varname)
for(new i; i < length; i++)
PRINT_MSG2(id, "^t^t[%d] = %f", array[i])
}
stock printvar_string_array(id, const varname[], const array[][], length)
{
PRINT_MSG1(id, "^t[array] %s", varname)
for(new i; i < length; i++)
PRINT_MSG2(id, "^t^t[%d] = %s", array[i])
}
stock print_comment(id, const comment[], tabnum = 0, bool:opendfile = false)
{
new fmt[180]
new len
if(tabnum >= 16)
tabnum = 15
len = format(fmt, tabnum, Tabs)
len += format(fmt, 179, "** %s", comment)
if(opendfile)
open_debug_file()
debug_print(id, fmt)
if(opendfile)
close_debug_file()
}
-
Don Corleone
-
- Сообщения: 79
- Зарегистрирован: 23 окт 2016, 16:13
- Благодарил (а): 5 раз.
- Поблагодарили: 0 раз.
- Опыт программирования: Около 3 месяцев
- Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#
TheTenderMan » 26 дек 2017, 19:13
В коде копаться не хочу, а так подскажу, что реализовать можно с помощью функций:
- Код: Выделить всё
strip_user_weapon(id) give_item(id, "weapon_knife")
В это время противника нельзя убить
Возможно есть часть кода где выдается godmode, или логическая переменная отвечающая за это.
-
TheTenderMan
-
- Сообщения: 2
- Зарегистрирован: 13 сен 2017, 20:41
- Благодарил (а): 0 раз.
- Поблагодарили: 0 раз.
- Языки программирования: Pawn
Php
Вернуться в Вопросы по AMXX и его плагинам
Кто сейчас на конференции
Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 4