La acest plugin CTF apare la steag o femeie care se mai si invarte , cum as putea modifica sa o scot / sa pun altceva in locul ei ?!
As mai dori ca jucatorul care a luat steag sa aibe glow
Acesta este pluginul
[NEREZOLVAT] [Modificare] Plugin CTF
Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com
- DozerRadu
- Membru, skill +1
- Posts: 114
- Joined: 25 Jun 2017, 00:57
- Detinator Steam: Da
- CS Status: ACTIVEZ AICI
- Detinator server CS: DA
- SteamID: rusuraduo
- Fond eXtream: 0
- Location: Sânnicolau Mare
- Has thanked: 23 times
- Been thanked: 2 times
Last edited by DozerRadu on 13 Jan 2023, 20:57, edited 1 time in total.
Viaţa însăşi este magie, iar dacă nu crezi asta, măcar încearcă să o trăieşti ca pe ceva magic.
©Rusu Radu
©Rusu Radu
- levin
- Scripter eXtreamCS
- Posts: 3844
- Joined: 24 Aug 2011, 12:24
- Detinator Steam: Da
- CS Status: ♅
- Detinator server CS: ☯∴
- SteamID: riseofevo
- Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy - Location: ҳ̸Ҳ̸ҳ
- Discord: devilclass
- Has thanked: 36 times
- Been thanked: 594 times
- Contact:
modifici modelu la flag și pentru glow folosești fm_set_rendering
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
- DozerRadu
- Membru, skill +1
- Posts: 114
- Joined: 25 Jun 2017, 00:57
- Detinator Steam: Da
- CS Status: ACTIVEZ AICI
- Detinator server CS: DA
- SteamID: rusuraduo
- Fond eXtream: 0
- Location: Sânnicolau Mare
- Has thanked: 23 times
- Been thanked: 2 times
Modelul de steag de l-am adăugat este doar de steag nu are femeie , habar nu am de unde a apărut.
Mi-a rezolvat Aneimar cu femeia să nu mai apară dar nici nu știu unde / ce a modificat.
Și cu glow mă poți ajuta tu te rog frumos , nu mă pricep
Edit : Acesta este pluginul fara femeie aceia
Mi-a rezolvat Aneimar cu femeia să nu mai apară dar nici nu știu unde / ce a modificat.
Și cu glow mă poți ajuta tu te rog frumos , nu mă pricep
Edit : Acesta este pluginul fara femeie aceia
Code: Select all
/*
* _______ _ _ __ __
* | _____/ | | | | \ \ __ / /
* | | | | | | | | / \ | |
* | | | |____| | | |/ __ \| |
* | | ___ | ______ | | / \ |
* | | |_ | | | | | | / \ |
* | | | | | | | | | | | |
* | |____| | | | | | | | | |
* |_______/ |_| |_| \_/ \_/
*
*
*
* Last Edited: 08-25-08
*
* ============
* Changelog:
* ============
*
* v3.1b
* -Flag Holders no longer get spawn protection
*
* v3.1a
* -de_ map objective respawn bug hard-fix
* -cs_ map objective respawn bug fix
* -Minor fixes
*
* v3.1
* -Added Infinite Ammo
* -Added Random option to weapons menu
* -Optimized amx_ctf_on function
*
* v3.0
* -Rewrite #2
*
* v2.0
* -Rewrite
*
* v1.0
* -Initial Release
*
*/
#define VERSION "3.1b"
#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <cstrike>
#include <csx>
#include <fakemeta>
//Remove the '//' on the next line for AMXX 1.76d compadability.
//#define amxx176d
//Max Distance from player->flag for touch to occur
#define PICKUP_DISTANCE 100.0
#define MAX_OBJECTIVES 10
#define MAX_OBJ_TYPES 8
//CTF CS Weapon Constants
#define CTF_SCOUT 1 //a
#define CTF_XM1014 2 //b
#define CTF_MAC10 4 //c
#define CTF_AUG 8 //d
#define CTF_UMP45 16 //e
#define CTF_SG550 32 //f
#define CTF_GALIL 64 //g
#define CTF_FAMAS 128 //h
#define CTF_AWP 256 //i
#define CTF_MP5NAVY 512 //j
#define CTF_M249 1024 //k
#define CTF_M3 2048 //l
#define CTF_M4A1 4096 //m
#define CTF_TMP 8192 //n
#define CTF_G3SG1 16384 //o
#define CTF_SG552 32768 //p
#define CTF_AK47 65536 //q
#define CTF_P90 131072 //r
#define CTF_P228 262144 //s
#define CTF_ELITE 524288 //t
#define CTF_FIVESEVEN 1048576 //u
#define CTF_USP 2097152 //v
#define CTF_GLOCK18 4194304 //w
#define CTF_DEAGLE 8388608 //x
#define CTF_VEST 16777216//y
#define CTF_VESTHELM 33554432//z
static const weapon_names[26][16] =
{
"Scout",
"XM1014",
"Mac10",
"Aug",
"UMP",
"SG550",
"Galil",
"Famas",
"AWP",
"MP5Navy",
"M249",
"M3",
"M4A1",
"TMP",
"G3SG1",
"SG552",
"AK47",
"P90",
"P228",
"Elite",
"Fiveseven",
"USP",
"Glock18",
"Deagle",
"VEST",
"VESTHELM"
}
//Map Objective Removal
new num_objectives
new Float:objective[MAX_OBJECTIVES][3]
new objective_type[MAX_OBJECTIVES]
new objective_solidity[MAX_OBJECTIVES]
new Float:objectiveminsize[MAX_OBJECTIVES][3]
new Float:objectivemaxsize[MAX_OBJECTIVES][3]
new bool:give_c4
static const map_objectives[MAX_OBJ_TYPES][24] =
{
"func_bomb_target",
"func_escapezone",
"func_hostage_rescue",
"func_vip_safetyzone",
"hostage_entity",
"info_bomb_target",
"info_hostage_rescue",
"info_vip_start"
}
//Map Objective Removal - de_ bug fix
new weapon[33][31]
new CsArmorType:armortype[33]
new armoramount[33]
new bool:killing
new WeaponNames[31][] =
{
"", //Blank
"weapon_p228",
"", //Nothing
"weapon_scout",
"weapon_hegrenade",
"weapon_xm1014",
"", //C4
"weapon_mac10",
"weapon_aug",
"weapon_smokegrenade",
"weapon_elite",
"weapon_fiveseven",
"weapon_ump45",
"weapon_sg550",
"weapon_galil",
"weapon_famas",
"weapon_usp",
"weapon_glock18",
"weapon_awp",
"weapon_mp5navy",
"weapon_m249",
"weapon_m3",
"weapon_m4a1",
"weapon_tmp",
"weapon_g3sg1",
"weapon_flashbang",
"weapon_deagle",
"weapon_sg552",
"weapon_ak47",
"", //Knife
"weapon_p90"
}
//CVAR Pointers
new togglecvar, respawntime, maxcaps, spawnprotection
#if !defined amxx176d
new allowableweapons, nades
#endif
new bool:play_sounds
//Flag
new Float:maxs[2][3] = {{-4800.0,-4800.0,-4800.0},{-4800.0,-4800.0,-4800.0}}
new Float:mins[2][3] = {{4800.0,4800.0,4800.0},{4800.0,4800.0,4800.0}}
new I_max[2][3]
new I_min[2][3]
// static const holo_model[] = "models/holo.mdl"
static const blue_flag_model[] = "models/blue_flag.mdl"
static const red_flag_model[] = "models/red_flag.mdl"
static const flag_captured[] = "PVPFlagCaptured.mp3"
static const flag_returned[] = "PVPFlagReturned.mp3"
static const flag_taken[] = "PVPFlagTaken.mp3"
new beamsprite
new flag_holder[2]
new flagstand_ents[2]
new bool:is_in_safezone[33]
new TScore, CTScore
new saytext_msgid
new maxplayers
//Weapon Menu
new bool:firsttime[33]
new bool:ask[33]
new weapon_picked[2][33]
new cur_offset[33]
new options_on_menu[8][33]
//Voting
new voterounddelay, votecvar, votelength, votedelay
new bool:roundend
new bool:voting
new bool:voted
new yes, no
public plugin_init()
{
register_plugin("GHW Capture The Flag",VERSION,"GHW_Chronic")
togglecvar = register_cvar("ctf_on","1")
#if defined amxx176d
register_cvar("ctf_weapons","abcdefghijklmnopqrstuvwxyz")
#else
allowableweapons = register_cvar("ctf_weapons","abcdefghijklmnopqrstuvwxyz")
#endif
#if defined amxx176d
register_cvar("ctf_nades","hhff")
#else
nades = register_cvar("ctf_nades","hhff")
#endif
respawntime = register_cvar("ctf_respawntime","3.0")
maxcaps = register_cvar("ctf_maxcaps","25")
votecvar = register_cvar("ctf_vote","1")
votelength = register_cvar("ctf_votelength","20.0")
votedelay = register_cvar("ctf_votedelay","180.0")
voterounddelay = register_cvar("ctf_voterounddelay","5.0")
spawnprotection = register_cvar("ctf_spawnprotection","1")
//register_clcmd("say /spawnme","respawn_player")
//register_clcmd("say_team /spawnme","respawn_player")
register_clcmd("say /guns","cmd_guns")
register_clcmd("say_team /guns","cmd_guns")
register_clcmd("say guns","cmd_guns")
register_clcmd("say_team guns","cmd_guns")
register_clcmd("say /ctfvote","say_vote_hook")
register_clcmd("say_team /ctfvote","say_vote_hook")
register_concmd("amx_ctf_addweap","cmd_addweap",ADMIN_BAN,"<Weapon> Un-Restricts a weapon from the weapons menu.")
register_concmd("amx_ctf_removeweap","cmd_delweap",ADMIN_BAN,"<Weapon> Restricts a weapon from the weapons menu.")
register_concmd("amx_ctf_set_tflag","cmd_set_tflag",ADMIN_BAN,"Sets your current location to the new T Flag Spawn Location.")
register_concmd("amx_ctf_set_ctflag","cmd_set_ctflag",ADMIN_BAN,"Sets your current location to the new CT Flag Spawn Location.")
register_concmd("amx_ctf_off","cmd_off",ADMIN_BAN,"Turn CTF Off")
register_concmd("amx_ctf_on","cmd_on",ADMIN_BAN,"Turn CTF On")
register_menucmd(register_menuid("WeaponMethodMenu"),(1<<0)|(1<<1)|(1<<2),"weapon_method_pushed")
register_menucmd(register_menuid("PrimaryWeaponSelect"),(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9),"prim_weapons_pushed")
register_menucmd(register_menuid("SecWeaponSelect"),(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7),"sec_weapons_pushed")
register_menucmd(register_menuid("ctfvote"),(1<<0)|(1<<1), "Key_Hook")
register_forward(FM_Think,"FM_Think_Hook")
register_forward(FM_PlayerPreThink,"FM_PlayerPreThink_Hook")
register_forward(FM_SetModel,"Hook_SetModel",1)
register_event("DeathMsg","DeathMsg","a")
register_event("SendAudio","endround","a","2=%!MRAD_terwin","2=%!MRAD_ctwin","2=%!MRAD_rounddraw")
register_logevent("newround",2,"1=Round_Start")
saytext_msgid = get_user_msgid("SayText")
maxplayers = get_maxplayers()
if(get_pcvar_num(togglecvar))
{
ctf_on()
}
}
/*
cmd_delweap cmd_addweap
*/
public cmd_delweap(id,level,cid)
{
if(!cmd_access(id,level,cid,2))
{
return PLUGIN_HANDLED
}
new arg[32]
read_argv(1,arg,31)
new cvar_value[32]
#if defined amxx176d
get_cvar_string("ctf_weapons",cvar_value,31)
#else
get_pcvar_string(allowableweapons,cvar_value,31)
#endif
new flags = read_flags(cvar_value)
for(new i=0;i<26;i++)
{
if(equali(arg,weapon_names[i]))
{
new remove_flag = power(2,i)
if(flags & remove_flag)
{
console_print(id,"[AMXX] Removing weapon %s from the choice list.",weapon_names[i])
flags -= remove_flag
get_flags(flags,cvar_value,31)
set_cvar_string("ctf_weapons",cvar_value)
}
else
{
console_print(id,"[AMXX] Weapon %s is already off choice list.",weapon_names[i])
}
break;
}
}
return PLUGIN_HANDLED
}
public cmd_addweap(id,level,cid)
{
if(!cmd_access(id,level,cid,2))
{
return PLUGIN_HANDLED
}
new arg[32]
read_argv(1,arg,31)
new cvar_value[32]
#if defined amxx176d
get_cvar_string("ctf_weapons",cvar_value,31)
#else
get_pcvar_string(allowableweapons,cvar_value,31)
#endif
for(new i=0;i<26;i++)
{
if(equali(arg,weapon_names[i]))
{
new flags = read_flags(cvar_value)
new add_flag = power(2,i)
if(!(flags & add_flag))
{
console_print(id,"[AMXX] Adding weapon %s to the choice list.",weapon_names[i])
flags += add_flag
get_flags(flags,cvar_value,31)
set_cvar_string("ctf_weapons",cvar_value)
}
else
{
console_print(id,"[AMXX] Weapon %s is already on choice list.",weapon_names[i])
}
break;
}
}
return PLUGIN_HANDLED
}
/*
Respawn on Team Select
*/
public client_putinserver(id)
{
set_task(1.0,"catch_jointeam",id,"",0,"b")
ask[id] = true
firsttime[id] = true
}
public catch_jointeam(id)
{
if(get_pcvar_num(togglecvar) && is_user_connected(id))
{
static CsTeams:team
team = cs_get_user_team(id)
if(team==CS_TEAM_T || team==CS_TEAM_T)
{
remove_task(id)
respawn_player(id)
}
}
else
{
remove_task(id)
}
}
/*
Base Respawn Code
*/
public respawn_player(id)
{
if(get_pcvar_num(togglecvar) && is_user_connected(id))
{
//Make the engine think he is spawning
set_pev(id,pev_deadflag,DEAD_RESPAWNABLE)
set_pev(id,pev_iuser1,0)
dllfunc(DLLFunc_Think,id)
//Move his body so if corpse is created it is not in map
engfunc(EngFunc_SetOrigin,id,Float:{-4800.0,-4800.0,-4800.0})
//Actual Spawn
set_task(0.5,"spawnagain",id)
}
}
public spawnagain(id)
{
//Make sure he didn't disconnect in the 0.5 seconds that have passed.
if(is_user_connected(id))
{
//Spawn player
spawn(id)
dllfunc(DLLFunc_Spawn,id)
set_task(1.0,"weapon_method_menu",id)
}
}
/*
CSDM Style weapons menu
*/
public weapon_method_menu(id)
{
if(is_user_bot(id))
{
weapon_picked[0][id] = 16
weapon_picked[1][id] = 23
give_weapons(id)
}
else if(firsttime[id])
{
firsttime[id] = false
prim_weapons_menu(id,0)
}
else
{
cur_offset[id] = 0
if(ask[id])
{
show_menu(id,(1<<0)|(1<<1)|(1<<2),"Weapon Selection Method^n^n1. Last Guns^n2. Last Guns + Save^n3. New Guns",-1,"WeaponMethodMenu")
}
else
{
give_weapons(id)
}
}
}
public weapon_method_pushed(id,key)
{
switch(key)
{
case 0:
{
ask[id] = true
give_weapons(id)
}
case 1:
{
new string[200]
format(string,199,"[red][CTF][/red] Type [green]guns[/green] to re-activate the gun menu.")
show_colored_message(id,string,199)
ask[id] = false
give_weapons(id)
}
case 2:
{
ask[id] = true
prim_weapons_menu(id,0)
}
}
return ;
}
public prim_weapons_menu(id,offset)
{
if(offset<0) offset = 0
new cvar_value[32]
#if defined amxx176d
get_cvar_string("ctf_weapons",cvar_value,31)
#else
get_pcvar_string(allowableweapons,cvar_value,31)
#endif
new flags = read_flags(cvar_value)
new keys, curnum, menu[2048]
for(new i=offset;i<19;i++)
{
if(i==18)
{
options_on_menu[curnum][id] = 24
keys += (1<<curnum)
curnum++
format(menu,2047,"%s^n%d. Random",menu,curnum)
break;
}
else if(flags & power(2,i))
{
options_on_menu[curnum][id] = i
keys += (1<<curnum)
curnum++
format(menu,2047,"%s^n%d. %s",menu,curnum,weapon_names[i])
if(curnum==8)
break;
}
}
format(menu,2047,"\ySelect Primary Weapon:\w^n^n%s^n",menu)
if(curnum==8 && offset<12)
{
keys += (1<<8)
format(menu,2047,"%s^n9. Next",menu)
}
if(offset)
{
keys += (1<<9)
format(menu,2047,"%s^n0. Back",menu)
}
show_menu(id,keys,menu,-1,"PrimaryWeaponSelect")
}
public prim_weapons_pushed(id,key)
{
if(key<8)
{
weapon_picked[0][id] = options_on_menu[key][id]
cur_offset[id] = 0
sec_weapons_menu(id,0)
}
else
{
if(key==8)
cur_offset[id] += 8
if(key==9)
cur_offset[id] -= 8
prim_weapons_menu(id,cur_offset[id])
}
return ;
}
public sec_weapons_menu(id,offset)
{
if(offset<0) offset = 0
new cvar_value[32]
#if defined amxx176d
get_cvar_string("ctf_weapons",cvar_value,31)
#else
get_pcvar_string(allowableweapons,cvar_value,31)
#endif
new flags = read_flags(cvar_value)
new keys, curnum, menu[2048]
for(new i=18;i<24;i++)
{
if(flags & power(2,i))
{
options_on_menu[curnum][id] = i
keys += (1<<curnum)
curnum++
format(menu,2047,"%s^n%d. %s",menu,curnum,weapon_names[i])
}
}
options_on_menu[curnum][id] = 25
keys += (1<<curnum)
curnum++
format(menu,2047,"%s^n%d. Random",menu,curnum)
format(menu,2047,"\ySelect Secondary Weapon:\w^n^n%s",menu)
show_menu(id,keys,menu,-1,"SecWeaponSelect")
}
public sec_weapons_pushed(id,key)
{
if(key<8)
{
weapon_picked[1][id] = options_on_menu[key][id]
}
give_weapons(id)
return ;
}
public give_weapons(id)
{
strip_user_weapons(id)
give_item(id,"weapon_knife")
new weapon[32]
new csw = csw_contant(weapon_picked[0][id])
get_weaponname(csw,weapon,31)
give_item(id,weapon)
cs_set_user_bpammo(id,csw,999)
csw = csw_contant(weapon_picked[1][id])
get_weaponname(csw,weapon,31)
give_item(id,weapon)
cs_set_user_bpammo(id,csw,999)
#if defined amxx176d
get_cvar_string("ctf_nades",weapon,31)
#else
get_pcvar_string(nades,weapon,31)
#endif
new he, flash, smoke
for(new i=0;i<strlen(weapon);i++)
{
switch(weapon[i])
{
case 'h': he++
case 'f': flash++
case 's': smoke++
}
}
if(he) give_item(id,"weapon_hegrenade"), cs_set_user_bpammo(id,CSW_HEGRENADE,he)
if(flash) give_item(id,"weapon_flashbang"), cs_set_user_bpammo(id,CSW_FLASHBANG,flash)
if(smoke) give_item(id,"weapon_smokegrenade"), cs_set_user_bpammo(id,CSW_SMOKEGRENADE,smoke)
#if defined amxx176d
get_cvar_string("ctf_weapons",weapon,31)
#else
get_pcvar_string(allowableweapons,weapon,31)
#endif
new flags = read_flags(weapon)
if(flags & CTF_VESTHELM) cs_set_user_armor(id,100,CS_ARMOR_VESTHELM)
else if(flags & CTF_VEST) cs_set_user_armor(id,100,CS_ARMOR_KEVLAR)
}
public csw_contant(weapon)
{
new num = 29
switch(weapon)
{
case 0: num = 3
case 1: num = 5
case 2: num = 7
case 3: num = 8
case 4: num = 12
case 5: num = 13
case 6: num = 14
case 7: num = 15
case 8: num = 18
case 9: num = 19
case 10: num = 20
case 11: num = 21
case 12: num = 22
case 13: num = 23
case 14: num = 24
case 15: num = 27
case 16: num = 28
case 17: num = 30
case 18: num = 1
case 19: num = 10
case 20: num = 11
case 21: num = 16
case 22: num = 17
case 23: num = 26
case 24:
{
new s_weapon[32]
#if defined amxx176d
get_cvar_string("ctf_weapons",s_weapon,31)
#else
get_pcvar_string(allowableweapons,s_weapon,31)
#endif
new flags = read_flags(s_weapon)
do
{
num = random_num(0,18)
if(!(num & flags))
{
num = -1
}
}
while(num==-1)
num = csw_contant(num)
}
case 25:
{
new s_weapon[32]
#if defined amxx176d
get_cvar_string("ctf_weapons",s_weapon,31)
#else
get_pcvar_string(allowableweapons,s_weapon,31)
#endif
new flags = read_flags(s_weapon)
do
{
num = random_num(18,23)
if(!(num & flags))
{
num = -1
}
}
while(num==-1)
num = csw_contant(num)
}
}
return num;
}
public cmd_guns(id)
{
ask[id] = true
weapon_method_menu(id)
}
/*
Weapon Despawn
*/
public Hook_SetModel(ent,model[])
{
if(get_pcvar_num(togglecvar) && pev_valid(ent) && ent>maxplayers)
{
if(containi(model,"models/w_")==0)
{
if(containi(model,"nade")!=-1 || containi(model,"flash")!=-1)
{
set_task(2.0,"remove_nade_ent",ent,model,31)
}
else
{
set_task(0.1,"remove_ent",ent,model,31)
}
}
}
}
public remove_ent(model[32],ent)
{
if(pev_valid(ent))
{
static model2[32]
pev(ent,pev_model,model2,31)
if(equal(model,model2)) engfunc(EngFunc_RemoveEntity,ent)
}
}
public remove_nade_ent(model[32],ent)
{
if(pev_valid(ent))
{
static model2[32]
pev(ent,pev_model,model2,31)
if(equal(model,model2))
{
static Float:velocity[3]
pev(ent,pev_velocity,velocity)
if(!velocity[0] && !velocity[1] && !velocity[2])
set_pev(ent,pev_flags,FL_KILLME)
}
}
}
/*
Base Setup - Spawn Protection & Flag Spawn
*/
public plugin_precache()
{
// precache_model(holo_model)
precache_model(red_flag_model)
precache_model(blue_flag_model)
beamsprite = precache_model("sprites/dot.spr")
precache_model("models/scientist.mdl")
if(get_pcvar_num(register_cvar("ctf_sounds","1")))
{
play_sounds = true
precache_sound(flag_captured)
precache_sound(flag_returned)
precache_sound(flag_taken)
}
}
public cmd_set_tflag(id,level,cid)
{
if(!cmd_access(id,level,cid,1))
{
return PLUGIN_HANDLED
}
setflagspawn(id,0)
console_print(id,"[CTF] T Flag Spawn Location Saved.")
return PLUGIN_HANDLED
}
public cmd_set_ctflag(id,level,cid)
{
if(!cmd_access(id,level,cid,1))
{
return PLUGIN_HANDLED
}
setflagspawn(id,1)
console_print(id,"[CTF] CT Flag Spawn Location Saved.")
return PLUGIN_HANDLED
}
public setflagspawn(id,team)
{
new bool:readfromfile = false
new configfile[200]
get_configsdir(configfile,199)
format(configfile,199,"%s/CTF_FlagSpawns.ini",configfile)
new mapname[32]
get_mapname(mapname,31)
new string[200]
format(string,199,"%s | T | ",mapname)
new Float:origin[3], Float:origin2[3]
switch(team)
{
case 0:
{
pev(flag_holder[1],pev_origin,origin2)
pev(id,pev_origin,origin)
engfunc(EngFunc_SetOrigin,flag_holder[0],origin)
}
case 1:
{
pev(flag_holder[0],pev_origin,origin)
pev(id,pev_origin,origin2)
engfunc(EngFunc_SetOrigin,flag_holder[1],origin2)
}
}
if(file_exists(configfile))
{
new read[200], trash, Fsize = file_size(configfile,1)
for(new i=0;i<Fsize;i++)
{
read_file(configfile,i,read,199,trash)
if(containi(read,string)==0)
{
format(string,199,"%s | T | %f %f %f | CT | %f %f %f",mapname,origin[0],origin[1],origin[2],origin2[0],origin2[1],origin2[2])
write_file(configfile,string,i)
readfromfile = true
break;
}
}
}
if(!readfromfile)
{
format(string,199,"%s | T | %f %f %f | CT | %f %f %f",mapname,origin[0],origin[1],origin[2],origin2[0],origin2[1],origin2[2])
write_file(configfile,string,-1)
}
}
public find_minmaxs()
{
new Float:origin[3], i
new ent = engfunc(EngFunc_FindEntityByString,maxplayers,"classname","info_player_deathmatch")
while(ent)
{
if(pev_valid(ent))
{
pev(ent,pev_origin,origin)
for(i=0;i<3;i++)
{
if(origin[i] < mins[0][i])
mins[0][i] = origin[i]
if(origin[i] > maxs[0][i])
maxs[0][i] = origin[i]
}
}
ent = engfunc(EngFunc_FindEntityByString,ent,"classname","info_player_deathmatch")
}
ent = engfunc(EngFunc_FindEntityByString,maxplayers,"classname","info_player_start")
while(ent)
{
if(pev_valid(ent))
{
pev(ent,pev_origin,origin)
for(i=0;i<3;i++)
{
if(origin[i] < mins[1][i])
mins[1][i] = origin[i]
if(origin[i] > maxs[1][i])
maxs[1][i] = origin[i]
}
}
ent = engfunc(EngFunc_FindEntityByString,ent,"classname","info_player_start")
}
maxs[0][2] += 70.0
mins[1][2] -= 70.0
maxs[0][0] += 32.0
mins[1][0] -= 32.0
maxs[0][1] += 32.0
mins[1][1] -= 32.0
new Float:T_origin[3], Float:CT_origin[3]
get_flagstand_origins(CT_origin,T_origin)
ent = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
set_pev(ent,pev_classname,"Flagstand_Model")
// engfunc(EngFunc_SetModel,ent,holo_model)
set_pev(ent,pev_effects,EF_BRIGHTLIGHT)
set_pev(ent,pev_renderfx,kRenderFxGlowShell)
set_pev(ent,pev_rendercolor,Float:{255.0,0.0,0.0})
set_pev(ent,pev_rendermode,kRenderNormal)
set_pev(ent,pev_renderamt,255.0)
set_pev(ent,pev_gaitsequence,0)
set_pev(ent,pev_sequence,0)
set_pev(ent,pev_framerate,0.7)
engfunc(EngFunc_SetOrigin,ent,T_origin)
engfunc(EngFunc_DropToFloor,ent)
pev(ent,pev_origin,origin)
origin[2] += 36.0
engfunc(EngFunc_SetOrigin,ent,origin)
set_pev(ent,pev_nextthink,1.0)
flagstand_ents[0] = ent
flag_holder[0] = ent
ent = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
set_pev(ent,pev_classname,"Flagstand_Model")
// engfunc(EngFunc_SetModel,ent,holo_model)
set_pev(ent,pev_effects,EF_BRIGHTLIGHT)
set_pev(ent,pev_renderfx,kRenderFxGlowShell)
set_pev(ent,pev_rendercolor,Float:{0.0,0.0,255.0})
set_pev(ent,pev_rendermode,kRenderNormal)
set_pev(ent,pev_renderamt,255.0)
set_pev(ent,pev_gaitsequence,0)
set_pev(ent,pev_sequence,0)
set_pev(ent,pev_framerate,0.7)
engfunc(EngFunc_SetOrigin,ent,CT_origin)
engfunc(EngFunc_DropToFloor,ent)
pev(ent,pev_origin,origin)
origin[2] += 36.0
engfunc(EngFunc_SetOrigin,ent,origin)
set_pev(ent,pev_nextthink,1.0)
flagstand_ents[1] = ent
flag_holder[1] = ent
for(new i=0;i<2;i++)
{
for(new j=0;j<3;j++)
{
I_max[i][j] = floatround(maxs[i][j])
I_min[i][j] = floatround(mins[i][j])
}
}
set_task(5.0,"create_beamsprites")
set_task(10.0,"create_beamsprites",1500,"",0,"b")
ent = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
set_pev(ent,pev_classname,"CTF_T_Flag")
engfunc(EngFunc_SetModel,ent,red_flag_model)
set_pev(ent,pev_movetype,MOVETYPE_FLY)
FM_Think_Hook(ent)
ent = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
set_pev(ent,pev_classname,"CTF_CT_Flag")
engfunc(EngFunc_SetModel,ent,blue_flag_model)
set_pev(ent,pev_movetype,MOVETYPE_FLY)
FM_Think_Hook(ent)
}
public get_flagstand_origins(Float:CT_origin[3],Float:T_origin[3])
{
new i
new Float:midpoint[2][3]
for(i=0;i<2;i++)
{
for(new j=0;j<3;j++)
{
midpoint[i][j] = (maxs[i][j] + mins[i][j]) / 2.0
}
}
new configfile[200]
get_configsdir(configfile,199)
format(configfile,199,"%s/CTF_FlagSpawns.ini",configfile)
T_origin[0] = midpoint[0][0]
T_origin[1] = midpoint[0][1]
T_origin[2] = midpoint[0][2]
CT_origin[0] = midpoint[1][0]
CT_origin[1] = midpoint[1][1]
CT_origin[2] = midpoint[1][2]
new mapname[32]
get_mapname(mapname,31)
new string[200]
format(string,199,"%s | T | ",mapname)
if(file_exists(configfile))
{
new read[200], trash, Fsize = file_size(configfile,1)
for(new i=0;i<Fsize;i++)
{
read_file(configfile,i,read,199,trash)
if(containi(read,string)==0)
{
format(read,199,read[strlen(string)])
replace_all(read,199," | CT |","")
strbreak(read,string,199,read,199)
T_origin[0] = str_to_float(string)
strbreak(read,string,199,read,199)
T_origin[1] = str_to_float(string)
strbreak(read,string,199,read,199)
T_origin[2] = str_to_float(string)
strbreak(read,string,199,read,199)
CT_origin[0] = str_to_float(string)
strbreak(read,string,199,read,199)
CT_origin[1] = str_to_float(string)
strbreak(read,string,199,read,199)
CT_origin[2] = str_to_float(string)
break;
}
}
}
return ;
}
public FM_Think_Hook(ent)
{
if(pev_valid(ent))
{
static classname[32]
pev(ent,pev_classname,classname,31)
if(equal(classname,"Flagstand_Model"))
{
static Float:angles[3]
pev(ent,pev_angles,angles)
angles[1] += 0.3
while(angles[1]>180.0) angles[1] -= 360.0
set_pev(ent,pev_angles,angles)
set_pev(ent,pev_nextthink,1.0)
}
else if(equal(classname,"CTF_T_Flag"))
{
Flag_Think_Hook(ent,0)
set_pev(ent,pev_nextthink,1.0)
}
else if(equal(classname,"CTF_CT_Flag"))
{
Flag_Think_Hook(ent,1)
set_pev(ent,pev_nextthink,1.0)
}
}
}
public create_beamsprites()
{
if(get_pcvar_num(spawnprotection))
{
//T Base
create_beam_message(I_max[0][0],I_max[0][1],I_max[0][2],I_max[0][0],I_min[0][1],I_max[0][2],255,0)
//create_beam_message(I_max[0][0],I_max[0][1],I_min[0][2],I_max[0][0],I_min[0][1],I_min[0][2],255,0)
create_beam_message(I_max[0][0],I_max[0][1],(I_max[0][2] + I_min[0][2]) / 2,I_max[0][0],I_min[0][1],(I_max[0][2] + I_min[0][2]) / 2,255,0)
create_beam_message(I_max[0][0],I_max[0][1],I_max[0][2],I_min[0][0],I_max[0][1],I_max[0][2],255,0)
//create_beam_message(I_max[0][0],I_max[0][1],I_min[0][2],I_min[0][0],I_max[0][1],I_min[0][2],255,0)
create_beam_message(I_max[0][0],I_max[0][1],(I_max[0][2] + I_min[0][2]) / 2,I_min[0][0],I_max[0][1],(I_max[0][2] + I_min[0][2]) / 2,255,0)
create_beam_message(I_min[0][0],I_max[0][1],I_max[0][2],I_min[0][0],I_min[0][1],I_max[0][2],255,0)
//create_beam_message(I_min[0][0],I_max[0][1],I_min[0][2],I_min[0][0],I_min[0][1],I_min[0][2],255,0)
create_beam_message(I_min[0][0],I_max[0][1],(I_max[0][2] + I_min[0][2]) / 2,I_min[0][0],I_min[0][1],(I_max[0][2] + I_min[0][2]) / 2,255,0)
create_beam_message(I_min[0][0],I_min[0][1],I_max[0][2],I_max[0][0],I_min[0][1],I_max[0][2],255,0)
//create_beam_message(I_min[0][0],I_min[0][1],I_min[0][2],I_max[0][0],I_min[0][1],I_min[0][2],255,0)
create_beam_message(I_min[0][0],I_min[0][1],(I_max[0][2] + I_min[0][2]) / 2,I_max[0][0],I_min[0][1],(I_max[0][2] + I_min[0][2]) / 2,255,0)
//CT Base
create_beam_message(I_max[1][0],I_max[1][1],I_max[1][2],I_max[1][0],I_min[1][1],I_max[1][2],0,255)
//create_beam_message(I_max[1][0],I_max[1][1],I_min[1][2],I_max[1][0],I_min[1][1],I_min[1][2],255,0)
create_beam_message(I_max[1][0],I_max[1][1],(I_max[1][2] + I_min[1][2]) / 2,I_max[1][0],I_min[1][1],(I_max[1][2] + I_min[1][2]) / 2,0,255)
create_beam_message(I_max[1][0],I_max[1][1],I_max[1][2],I_min[1][0],I_max[1][1],I_max[1][2],0,255)
//create_beam_message(I_max[1][0],I_max[1][1],I_min[1][2],I_min[1][0],I_max[1][1],I_min[1][2],255,0)
create_beam_message(I_max[1][0],I_max[1][1],(I_max[1][2] + I_min[1][2]) / 2,I_min[1][0],I_max[1][1],(I_max[1][2] + I_min[1][2]) / 2,0,255)
create_beam_message(I_min[1][0],I_max[1][1],I_max[1][2],I_min[1][0],I_min[1][1],I_max[1][2],0,255)
//create_beam_message(I_min[1][0],I_max[1][1],I_min[1][2],I_min[1][0],I_min[1][1],I_min[1][2],255,0)
create_beam_message(I_min[1][0],I_max[1][1],(I_max[1][2] + I_min[1][2]) / 2,I_min[1][0],I_min[1][1],(I_max[1][2] + I_min[1][2]) / 2,0,255)
create_beam_message(I_min[1][0],I_min[1][1],I_max[1][2],I_max[1][0],I_min[1][1],I_max[1][2],0,255)
//create_beam_message(I_min[1][0],I_min[1][1],I_min[1][2],I_max[1][0],I_min[1][1],I_min[1][2],255,0)
create_beam_message(I_min[1][0],I_min[1][1],(I_max[1][2] + I_min[1][2]) / 2,I_max[1][0],I_min[1][1],(I_max[1][2] + I_min[1][2]) / 2,0,255)
}
}
public create_beam_message(origin1_0,origin1_1,origin1_2,origin2_0,origin2_1,origin2_2,r,b)
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(0) //TE_BEAMPOINTS
write_coord(origin1_0)
write_coord(origin1_1)
write_coord(origin1_2)
write_coord(origin2_0)
write_coord(origin2_1)
write_coord(origin2_2)
write_short(beamsprite)
write_byte(1) // framestart
write_byte(1) // framerate
write_byte(110) // life in 0.1's
write_byte(5) // width
write_byte(0) // noise
write_byte(r)
write_byte(0)
write_byte(b)
write_byte(200) // brightness
write_byte(0) // speed
message_end()
}
public FM_PlayerPreThink_Hook(id)
{
if(is_user_alive(id) && !is_user_bot(id) && get_pcvar_num(spawnprotection) && get_pcvar_num(togglecvar) && id!=flag_holder[0] && id!=flag_holder[1])
{
static Float:origin[3]
pev(id,pev_origin,origin)
if(is_in_safezone[id])
{
new buttons = pev(id,pev_button)
if(buttons & IN_ATTACK) buttons -= IN_ATTACK
if(buttons & IN_ATTACK2) buttons -= IN_ATTACK2
set_pev(id,pev_button,buttons)
buttons = pev(id,pev_oldbuttons)
if(buttons & IN_ATTACK) buttons -= IN_ATTACK
if(buttons & IN_ATTACK2) buttons -= IN_ATTACK2
set_pev(id,pev_oldbuttons,buttons)
if(!((origin[0]<=maxs[0][0] && origin[0]>=mins[0][0] && origin[1]<=maxs[0][1] && origin[1]>=mins[0][1]) || (origin[0]<=maxs[1][0] && origin[0]>=mins[1][0] && origin[1]<=maxs[1][1] && origin[1]>=mins[1][1])))
{
unsafezone(id)
}
}
else if((origin[0]<=maxs[0][0] && origin[0]>=mins[0][0] && origin[1]<=maxs[0][1] && origin[1]>=mins[0][1]) || (origin[0]<=maxs[1][0] && origin[0]>=mins[1][0] && origin[1]<=maxs[1][1] && origin[1]>=mins[1][1]))
{
switch(cs_get_user_team(id))
{
case CS_TEAM_T: in_safezone(id,255,0,0)
case CS_TEAM_CT: in_safezone(id,0,0,255)
default: in_safezone(id,0,255,0)
}
}
}
}
public in_safezone(id,r,g,b)
{
set_user_godmode(id,1)
set_user_rendering(id,kRenderFxGlowShell,r,g,b,kRenderTransColor,50)
is_in_safezone[id] = true
message_begin(MSG_ONE,get_user_msgid("ScreenFade"),{0,0,0},id)
write_short(~0)
write_short(~0)
write_short(1<<12)
write_byte(r)
write_byte(g)
write_byte(b)
write_byte(100)
message_end()
new param[3]
param[0] = r
param[1] = g
param[2] = b
if(!task_exists(id + 20000)) set_task(8.0,"reflash",id + 20000,param,3,"b")
set_task(0.5,"reflash",id + 20000,param,3)
}
public reflash(param[3],id)
{
id -= 20000
if(!is_in_safezone[id] || !is_user_alive(id))
{
remove_task(id + 20000)
}
else
{
message_begin(MSG_ONE,get_user_msgid("ScreenFade"),{0,0,0},id)
write_short(~0)
write_short(~0)
write_short(1<<12)
write_byte(param[0])
write_byte(param[1])
write_byte(param[2])
write_byte(100)
message_end()
}
}
public unsafezone(id)
{
set_user_godmode(id)
set_user_rendering(id,kRenderFxNone,0,0,0,kRenderTransAlpha,255)
is_in_safezone[id] = false
message_begin(MSG_ONE,get_user_msgid("ScreenFade"),{0,0,0},id)
write_short(~0)
write_short(~0)
write_short(1<<12)
write_byte(0)
write_byte(0)
write_byte(0)
write_byte(1)
message_end()
remove_task(id + 20000)
}
/*
Flag Think
*/
public Flag_Think_Hook(ent,team)
{
if(pev_valid(flag_holder[team]))
{
static Float:origin[3], Float:origin2[3]
pev(flag_holder[team],pev_origin,origin)
origin[2] += 16.0
pev(ent,pev_origin,origin2)
if(get_distance_f(origin,origin2)>50.0)
engfunc(EngFunc_SetOrigin,ent,origin)
if(flag_holder[team]!=flagstand_ents[team] && flag_holder[(team + 1) % 2]==flagstand_ents[(team + 1) % 2])
{
pev(flagstand_ents[(team + 1) % 2],pev_origin,origin)
if(get_distance_f(origin2,origin)<PICKUP_DISTANCE)
{
new string[200]
new cvar_value = get_pcvar_num(maxcaps)
new ministring[4]
if(team)
{
ministring = "CT"
TScore++
if(cvar_value<=TScore)
{
format(string,199,"[red][CTF][/red] Game Over. [green]Ts[/green] won.")
show_colored_message(0,string,199)
endmap()
}
}
else
{
ministring = "T"
CTScore++
if(cvar_value<=CTScore)
{
format(string,199,"[red][CTF][/red] Game Over. [green]CTs[/green] won.")
show_colored_message(0,string,199)
endmap()
}
}
new name[32]
get_user_name(flag_holder[team],name,31)
format(string,199,"[red][CTF][/red] [green]%s[/green] captured the [green]%s[/green] flag.",name,ministring)
if(play_sounds) client_cmd(0,"mp3 play sound/%s",flag_captured)
show_colored_message(0,string,199)
flag_holder[team] = flagstand_ents[team]
write_hudmsg()
return ;
}
}
pev(flag_holder[team],pev_velocity,origin)
set_pev(ent,pev_velocity,origin)
}
if(flag_holder[team]==flagstand_ents[team] || !flag_holder[team])
{
static Float:origin[3]
static Float:flag_origin[3]
pev(ent,pev_origin,flag_origin)
static players[32], num
get_players(players,num,"ach")
for(new i=0;i<num;i++)
{
if(get_user_team(players[i])!=(team + 1))
{
pev(players[i],pev_origin,origin)
if(get_distance_f(origin,flag_origin)<PICKUP_DISTANCE)
{
new ministring[4]
if(team) ministring = "CT"
else ministring = "T"
flag_holder[team] = players[i]
new name[32]
new string[200]
get_user_name(players[i],name,31)
format(string,199,"[red][CTF][/red] [green]%s[/green] picked up the [green]%s[/green] flag.",name,ministring)
if(play_sounds) client_cmd(0,"mp3 play sound/%s",flag_taken)
show_colored_message(0,string,199)
flag_holder[team] = players[i]
write_hudmsg()
unsafezone(players[i])
break;
}
}
else if(!flag_holder[team])
{
pev(players[i],pev_origin,origin)
if(get_distance_f(origin,flag_origin)<PICKUP_DISTANCE)
{
new ministring[4]
if(team) ministring = "CT"
else ministring = "T"
flag_holder[team] = players[i]
new name[32]
new string[200]
get_user_name(players[i],name,31)
format(string,199,"[red][CTF][/red] [green]%s[/green] returned the [green]%s[/green] flag.",name,ministring)
if(play_sounds) client_cmd(0,"mp3 play sound/%s",flag_returned)
show_colored_message(0,string,199)
flag_holder[team] = flagstand_ents[team]
write_hudmsg()
break;
}
}
}
}
return ;
}
public client_disconnect(id)
{
if(read_data(2)==flag_holder[0])
{
flag_holder[0] = 0
new string[200]
format(string,199,"[red][CTF][/red] [green]UNKNOWN[/green] dropped the [green]T[/green] flag.")
if(play_sounds) client_cmd(0,"mp3 play sound/%s",flag_taken)
show_colored_message(0,string,199)
write_hudmsg()
}
else if(read_data(2)==flag_holder[1])
{
flag_holder[1] = 0
new string[200]
format(string,199,"[red][CTF][/red] [green]UNKNOWN[/green] dropped the [green]CT[/green] flag.")
if(play_sounds) client_cmd(0,"mp3 play sound/%s",flag_taken)
show_colored_message(0,string,199)
write_hudmsg()
}
}
public DeathMsg()
{
new victim = read_data(2)
if(is_user_connected(victim))
{
if(victim==flag_holder[0])
{
flag_holder[0] = 0
new name[32]
new string[200]
get_user_name(victim,name,31)
format(string,199,"[red][CTF][/red] [green]%s[/green] dropped the [green]T[/green] flag.",name)
show_colored_message(0,string,199)
write_hudmsg()
}
else if(victim==flag_holder[1])
{
flag_holder[1] = 0
new name[32]
new string[200]
get_user_name(victim,name,31)
format(string,199,"[red][CTF][/red] [green]%s[/green] dropped the [green]CT[/green] flag.",name)
show_colored_message(0,string,199)
write_hudmsg()
}
set_task(get_pcvar_float(respawntime),"respawn_player",victim)
}
}
public show_colored_message(id,string[],maxlen)
{
replace_all(string,maxlen,"[blue]","^x03")
replace_all(string,maxlen,"[/blue]","^x01")
replace_all(string,maxlen,"[red]","^x03")
replace_all(string,maxlen,"[/red]","^x01")
replace_all(string,maxlen,"[green]","^x04")
replace_all(string,maxlen,"[/green]","^x01")
format(string,maxlen,"^x04^x01%s",string)
static q
q++
if(!id)
{
static players[32], num
get_players(players,num,"ch")
for(new i=0;i<num;i++)
{
message_begin(MSG_ONE,saytext_msgid,{0,0,0},players[i])
write_byte(players[i])
write_string(string)
message_end()
}
}
else
{
message_begin(MSG_ONE,saytext_msgid,{0,0,0},id)
write_byte(id)
write_string(string)
message_end()
}
}
public write_hudmsg()
{
new flagloc[32]
if(!flag_holder[0])
{
format(flagloc,31,"On Ground")
}
else if(flag_holder[0]==flagstand_ents[0])
{
format(flagloc,31,"Base")
}
else if(is_user_alive(flag_holder[0]))
{
get_user_name(flag_holder[0],flagloc,31)
}
set_hudmessage(255, 0, 0, -1.0, 0.03, 0, 6.0, 12.0, 0.0, 0.0)
show_hudmessage(0,"[ %d ] T Flag: %s",TScore,flagloc)
if(!flag_holder[1])
{
format(flagloc,31,"On Ground")
}
else if(flag_holder[1]==flagstand_ents[0])
{
format(flagloc,31,"Base")
}
else if(is_user_alive(flag_holder[1]))
{
get_user_name(flag_holder[1],flagloc,31)
}
set_hudmessage(0, 0, 255, -1.0, 0.03, 0, 6.0, 12.0, 0.0, 0.0,3)
show_hudmessage(0,"_^n [ %d ] CT Flag: %s",CTScore,flagloc)
}
public endmap()
{
new trash
new map[32]
new configfile[200]
get_basedir(configfile,199)
format(configfile,199,"%s/maps.ini",configfile)
format(map,31,"de_dust")
if(file_exists(configfile)) read_file(configfile,random_num(0,file_size(configfile,1) - 1),map,31,trash)
if(!is_map_valid(map))
{
if(file_size(configfile,1)<3)
{
server_cmd("amx_map de_dust2;amx_map de_dust2_cz")
}
else
{
set_task(0.1,"endmap")
}
}
else server_cmd("amx_map %s",map)
}
/*
CTF Vote (From v2.0)
*/
public say_vote_hook(id)
{
if(!get_pcvar_num(votecvar))
{
client_print(id,print_chat,"[CTF] Voting disabled")
}
else if(roundend)
{
client_print(id,print_chat,"[CTF] Voting can't start. People are buying.")
}
else if(voting)
{
client_print(id,print_chat,"[CTF] Voting currently in progrss.")
}
else if(voted)
{
client_print(id,print_chat,"[CTF] Can't vote this soon after a vote.")
}
else if(get_pcvar_num(togglecvar))
{
voting=true
voted=true
show_menu(0,(1<<0)|(1<<1),"\bTurn CTF off?^n^n\w1. Yes^n\w2. No",-1,"ctfvote")
set_task(get_pcvar_float(votelength),"voting_over",0)
set_task(get_pcvar_float(votedelay),"voted_over")
}
else
{
voting=true
voted=true
show_menu(0,(1<<0)|(1<<1),"\bTurn CTF on?^n^n\w1. Yes^n\w2. No",-1,"ctfvote")
set_task(get_pcvar_float(votelength),"voting_over",1)
set_task(get_pcvar_float(votedelay),"voted_over")
}
}
public Key_Hook(id,key)
{
if(voting)
{
client_print(id,print_chat,"[CTF] Vote Accepted.")
if(!key) yes++
else no++
}
}
public voting_over(num)
{
if(num)
{
client_print(0,print_chat,"[CTF] Voting to turn CTF on results: Yes: %d | No: %d",yes,no)
if(yes>no)
{
ctf_on()
}
}
else
{
client_print(0,print_chat,"[CTF] Voting to turn CTF off results: Yes: %d | No: %d",yes,no)
if(yes>no)
{
ctf_off()
}
}
yes=0
no=0
voting=false
}
public voted_over()
{
voted=false
}
public endround()
{
roundend = true
set_task(7.0 + get_pcvar_float(voterounddelay),"roundstart")
}
public roundstart()
{
roundend = false
}
/*
Off / On Functions
*/
public ctf_off()
{
set_pcvar_num(togglecvar,0)
remove_task(1234)
remove_task(1500)
engfunc(EngFunc_SetOrigin,flagstand_ents[0],Float:{-4800.0,-4800.0,-4800.0})
engfunc(EngFunc_SetOrigin,flagstand_ents[1],Float:{-4800.0,-4800.0,-4800.0})
flag_holder[0] = flagstand_ents[0]
flag_holder[1] = flagstand_ents[1]
add_objectives()
for(new i=1;i<=32;i++)
{
if(is_user_alive(i) && is_in_safezone[i])
{
unsafezone(i)
}
}
}
public ctf_on()
{
set_pcvar_num(togglecvar,1)
set_task(10.0,"create_beamsprites",1500,"",0,"b")
if(!pev_valid(flagstand_ents[0]) || !pev_valid(flagstand_ents[1]))
{
set_task(0.5,"find_minmaxs")
}
else
{
new Float:T_origin[3], Float:CT_origin[3]
get_flagstand_origins(CT_origin,T_origin)
engfunc(EngFunc_SetOrigin,flagstand_ents[0],T_origin)
engfunc(EngFunc_SetOrigin,flagstand_ents[1],CT_origin)
engfunc(EngFunc_DropToFloor,flagstand_ents[0])
engfunc(EngFunc_DropToFloor,flagstand_ents[1])
pev(flagstand_ents[0],pev_origin,T_origin)
pev(flagstand_ents[1],pev_origin,CT_origin)
T_origin[2] += 36.0
CT_origin[2] += 36.0
engfunc(EngFunc_SetOrigin,flagstand_ents[0],T_origin)
engfunc(EngFunc_SetOrigin,flagstand_ents[1],CT_origin)
}
set_task(10.0,"write_hudmsg",1234,"",0,"b")
remove_objectives()
set_task(10.0,"ctf_restartround")
remove_task(5547)
remove_task(5548)
client_print(0,print_center,"[CTF] CTF Enabled. Round Restarting in 10 seconds.")
}
public ctf_restartround()
{
set_cvar_num("sv_restartround",1)
for(new i=1;i<=32;i++)
{
if(is_user_connected(i))
{
firsttime[i] = true
weapon_method_menu(i)
}
}
}
/*
Off / On Commands
*/
public cmd_off(id,level,cid)
{
if(!cmd_access(id,level,cid,1))
{
return PLUGIN_HANDLED
}
if(get_pcvar_num(togglecvar))
{
console_print(id,"[CTF] CTF Turned Off.")
ctf_off()
new string[200]
format(string,199,"[red][CTF][/red] CTF Turned [green]Off[/green].")
show_colored_message(0,string,199)
}
else
{
console_print(id,"[CTF] CTF Is Already Turned Off.")
}
return PLUGIN_HANDLED
}
public cmd_on(id,level,cid)
{
if(!cmd_access(id,level,cid,1))
{
return PLUGIN_HANDLED
}
if(!get_pcvar_num(togglecvar))
{
console_print(id,"[CTF] CTF Turned On.")
ctf_on()
new string[200]
format(string,199,"[red][CTF][/red] CTF Turned [green]On[/green].")
show_colored_message(0,string,199)
}
else
{
console_print(id,"[CTF] CTF Is Already Turned On.")
}
return PLUGIN_HANDLED
}
/*
Remove Map Objectives
*/
public remove_objectives()
{
new ent
for(new i=0;i<MAX_OBJ_TYPES;i++)
{
ent = engfunc(EngFunc_FindEntityByString,maxplayers,"classname",map_objectives[i])
while(ent)
{
if(pev_valid(ent))
{
objective_type[num_objectives] = i
pev(ent,pev_origin,objective[num_objectives])
pev(ent,pev_size,objectiveminsize[num_objectives],objectivemaxsize[num_objectives])
pev(ent,pev_solid,objective_solidity[num_objectives])
engfunc(EngFunc_RemoveEntity,ent)
num_objectives++
}
ent = engfunc(EngFunc_FindEntityByString,ent,"classname",map_objectives[i])
}
}
give_c4 = false
}
public add_objectives()
{
new ent
for(num_objectives--;num_objectives>=0;num_objectives--)
{
if(objective_type[num_objectives]==0 || objective_type[num_objectives]==5) give_c4 = true
ent = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,map_objectives[objective_type[num_objectives]]))
set_pev(ent,pev_classname,map_objectives[objective_type[num_objectives]])
set_pev(ent,pev_origin,objective[num_objectives])
set_pev(ent,pev_solid,objective_solidity[num_objectives])
engfunc(EngFunc_SetSize,ent,objectiveminsize[num_objectives],objectivemaxsize[num_objectives])
set_pev(ent,pev_size,objectiveminsize[num_objectives],objectivemaxsize[num_objectives])
dllfunc(DLLFunc_Spawn,ent)
dllfunc(DLLFunc_Think,ent)
for(new i=0;i<3;i++)
{
objective[num_objectives][i] = 0.0
objectiveminsize[num_objectives][i] = 0.0
objectivemaxsize[num_objectives][i] = 0.0
}
}
num_objectives=0
}
//All this handles de_ maps - making them re-work if ctf is turned off during runtime.
public newround()
{
if(give_c4) set_task(0.5,"manually_give_c4",5547)
}
public manually_give_c4()
{
if(!get_pcvar_num(togglecvar))
{
new found = 0
static start
if(start<1 || start>maxplayers) start = 1
for(;start<=maxplayers;start++)
{
if(is_user_alive(start) && cs_get_user_team(start)==CS_TEAM_T)
{
found = start
break;
}
}
if(!found)
{
for(start = 0;start<=maxplayers;start++)
{
if(is_user_alive(start) && cs_get_user_team(start)==CS_TEAM_T)
{
found = start
break;
}
}
}
if(found) give_item(found,"weapon_c4")
}
set_task(get_cvar_float("mp_roundtime") * 60.0,"force_endround",5548)
}
public bomb_planted() remove_task(5548)
public force_endround()
{
getweapons()
set_task(0.5,"killum")
}
public getweapons()
{
static i, i2
for(i=1;i<=maxplayers;i++)
{
arrayset(weapon[i],0,31)
if(is_user_alive(i) && cs_get_user_team(i)==CS_TEAM_T)
{
armoramount[i] = cs_get_user_armor(i,armortype[i])
for(i2=1;i2<=30;i2++)
{
if(i2!=2 && i2!=6 && i2!=29)
{
if(user_has_weapon(i,i2))
{
weapon[i][i2] = cs_get_user_bpammo(i,i2)
if(!weapon[i][i2]) weapon[i][i2] = 1
}
}
}
}
}
}
public killum()
{
killing=true
new msgblock = get_msg_block(get_user_msgid("DeathMsg"))
set_msg_block(get_user_msgid("DeathMsg"),BLOCK_SET)
new i
for(i=1;i<=maxplayers;i++)
{
if(is_user_alive(i) && cs_get_user_team(i)==CS_TEAM_T)
{
user_kill(i)
client_print(i,print_chat,"[AMXX] You Failed to complete map objective. Respawning.")
set_task(4.0,"spawnum",i)
}
}
set_msg_block(get_user_msgid("DeathMsg"),msgblock)
killing=false
set_task(4.5,"giveweapons")
}
public plugin_log()
{
if(killing)
{
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
public spawnum(id)
{
cs_set_user_deaths(id,cs_get_user_deaths(id) - 1)
set_user_frags(id,get_user_frags(id) + 1)
dllfunc(DLLFunc_Spawn,id)
}
public giveweapons()
{
new i, i2
for(i=1;i<=maxplayers;i++)
{
if(is_user_alive(i) && cs_get_user_team(i)==CS_TEAM_T)
{
cs_set_user_armor(i,armoramount[i],armortype[i])
strip_user_weapons(i)
for(i2=1;i2<=30;i2++)
{
if(i2!=2 && i2!=6 && i2!=29)
{
if(weapon[i][i2])
{
give_item(i,WeaponNames[i2])
cs_set_user_bpammo(i,i2,weapon[i][i2])
}
}
}
give_item(i,"weapon_knife")
}
}
}
Viaţa însăşi este magie, iar dacă nu crezi asta, măcar încearcă să o trăieşti ca pe ceva magic.
©Rusu Radu
©Rusu Radu
- levin
- Scripter eXtreamCS
- Posts: 3844
- Joined: 24 Aug 2011, 12:24
- Detinator Steam: Da
- CS Status: ♅
- Detinator server CS: ☯∴
- SteamID: riseofevo
- Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy - Location: ҳ̸Ҳ̸ҳ
- Discord: devilclass
- Has thanked: 36 times
- Been thanked: 594 times
- Contact:
Code: Select all
/*
* _______ _ _ __ __
* | _____/ | | | | \ \ __ / /
* | | | | | | | | / \ | |
* | | | |____| | | |/ __ \| |
* | | ___ | ______ | | / \ |
* | | |_ | | | | | | / \ |
* | | | | | | | | | | | |
* | |____| | | | | | | | | |
* |_______/ |_| |_| \_/ \_/
*
*
*
* Last Edited: 08-25-08
*
* ============
* Changelog:
* ============
*
* v3.1b
* -Flag Holders no longer get spawn protection
*
* v3.1a
* -de_ map objective respawn bug hard-fix
* -cs_ map objective respawn bug fix
* -Minor fixes
*
* v3.1
* -Added Infinite Ammo
* -Added Random option to weapons menu
* -Optimized amx_ctf_on function
*
* v3.0
* -Rewrite #2
*
* v2.0
* -Rewrite
*
* v1.0
* -Initial Release
*
*/
#define VERSION "3.1b"
#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <cstrike>
#include <csx>
#include <fakemeta_util>
#pragma tabsize 0
//Remove the '//' on the next line for AMXX 1.76d compadability.
//#define amxx176d
//Max Distance from player->flag for touch to occur
#define PICKUP_DISTANCE 100.0
#define MAX_OBJECTIVES 10
#define MAX_OBJ_TYPES 8
//CTF CS Weapon Constants
#define CTF_SCOUT 1 //a
#define CTF_XM1014 2 //b
#define CTF_MAC10 4 //c
#define CTF_AUG 8 //d
#define CTF_UMP45 16 //e
#define CTF_SG550 32 //f
#define CTF_GALIL 64 //g
#define CTF_FAMAS 128 //h
#define CTF_AWP 256 //i
#define CTF_MP5NAVY 512 //j
#define CTF_M249 1024 //k
#define CTF_M3 2048 //l
#define CTF_M4A1 4096 //m
#define CTF_TMP 8192 //n
#define CTF_G3SG1 16384 //o
#define CTF_SG552 32768 //p
#define CTF_AK47 65536 //q
#define CTF_P90 131072 //r
#define CTF_P228 262144 //s
#define CTF_ELITE 524288 //t
#define CTF_FIVESEVEN 1048576 //u
#define CTF_USP 2097152 //v
#define CTF_GLOCK18 4194304 //w
#define CTF_DEAGLE 8388608 //x
#define CTF_VEST 16777216//y
#define CTF_VESTHELM 33554432//z
static const weapon_names[26][16] =
{
"Scout",
"XM1014",
"Mac10",
"Aug",
"UMP",
"SG550",
"Galil",
"Famas",
"AWP",
"MP5Navy",
"M249",
"M3",
"M4A1",
"TMP",
"G3SG1",
"SG552",
"AK47",
"P90",
"P228",
"Elite",
"Fiveseven",
"USP",
"Glock18",
"Deagle",
"VEST",
"VESTHELM"
}
//Map Objective Removal
new num_objectives
new Float:objective[MAX_OBJECTIVES][3]
new objective_type[MAX_OBJECTIVES]
new objective_solidity[MAX_OBJECTIVES]
new Float:objectiveminsize[MAX_OBJECTIVES][3]
new Float:objectivemaxsize[MAX_OBJECTIVES][3]
new bool:give_c4
static const map_objectives[MAX_OBJ_TYPES][24] =
{
"func_bomb_target",
"func_escapezone",
"func_hostage_rescue",
"func_vip_safetyzone",
"hostage_entity",
"info_bomb_target",
"info_hostage_rescue",
"info_vip_start"
}
//Map Objective Removal - de_ bug fix
new weapon[33][31]
new CsArmorType:armortype[33]
new armoramount[33]
new bool:killing
new WeaponNames[31][] =
{
"", //Blank
"weapon_p228",
"", //Nothing
"weapon_scout",
"weapon_hegrenade",
"weapon_xm1014",
"", //C4
"weapon_mac10",
"weapon_aug",
"weapon_smokegrenade",
"weapon_elite",
"weapon_fiveseven",
"weapon_ump45",
"weapon_sg550",
"weapon_galil",
"weapon_famas",
"weapon_usp",
"weapon_glock18",
"weapon_awp",
"weapon_mp5navy",
"weapon_m249",
"weapon_m3",
"weapon_m4a1",
"weapon_tmp",
"weapon_g3sg1",
"weapon_flashbang",
"weapon_deagle",
"weapon_sg552",
"weapon_ak47",
"", //Knife
"weapon_p90"
}
//CVAR Pointers
new togglecvar, respawntime, maxcaps, spawnprotection
#if !defined amxx176d
new allowableweapons, nades
#endif
new bool:play_sounds
//Flag
new Float:maxs[2][3] = {{-4800.0,-4800.0,-4800.0},{-4800.0,-4800.0,-4800.0}}
new Float:mins[2][3] = {{4800.0,4800.0,4800.0},{4800.0,4800.0,4800.0}}
new I_max[2][3]
new I_min[2][3]
// static const holo_model[] = "models/holo.mdl"
static const blue_flag_model[] = "models/blue_flag.mdl"
static const red_flag_model[] = "models/red_flag.mdl"
static const flag_captured[] = "PVPFlagCaptured.mp3"
static const flag_returned[] = "PVPFlagReturned.mp3"
static const flag_taken[] = "PVPFlagTaken.mp3"
new beamsprite
new flag_holder[2]
new flagstand_ents[2]
new bool:is_in_safezone[33]
new TScore, CTScore
new saytext_msgid
new maxplayers
//Weapon Menu
new bool:firsttime[33]
new bool:ask[33]
new weapon_picked[2][33]
new cur_offset[33]
new options_on_menu[8][33]
//Voting
new voterounddelay, votecvar, votelength, votedelay
new bool:roundend
new bool:voting
new bool:voted
new yes, no
public plugin_init()
{
register_plugin("GHW Capture The Flag",VERSION,"GHW_Chronic")
togglecvar = register_cvar("ctf_on","1")
#if defined amxx176d
register_cvar("ctf_weapons","abcdefghijklmnopqrstuvwxyz")
#else
allowableweapons = register_cvar("ctf_weapons","abcdefghijklmnopqrstuvwxyz")
#endif
#if defined amxx176d
register_cvar("ctf_nades","hhff")
#else
nades = register_cvar("ctf_nades","hhff")
#endif
respawntime = register_cvar("ctf_respawntime","3.0")
maxcaps = register_cvar("ctf_maxcaps","25")
votecvar = register_cvar("ctf_vote","1")
votelength = register_cvar("ctf_votelength","20.0")
votedelay = register_cvar("ctf_votedelay","180.0")
voterounddelay = register_cvar("ctf_voterounddelay","5.0")
spawnprotection = register_cvar("ctf_spawnprotection","1")
//register_clcmd("say /spawnme","respawn_player")
//register_clcmd("say_team /spawnme","respawn_player")
register_clcmd("say /guns","cmd_guns")
register_clcmd("say_team /guns","cmd_guns")
register_clcmd("say guns","cmd_guns")
register_clcmd("say_team guns","cmd_guns")
register_clcmd("say /ctfvote","say_vote_hook")
register_clcmd("say_team /ctfvote","say_vote_hook")
register_concmd("amx_ctf_addweap","cmd_addweap",ADMIN_BAN,"<Weapon> Un-Restricts a weapon from the weapons menu.")
register_concmd("amx_ctf_removeweap","cmd_delweap",ADMIN_BAN,"<Weapon> Restricts a weapon from the weapons menu.")
register_concmd("amx_ctf_set_tflag","cmd_set_tflag",ADMIN_BAN,"Sets your current location to the new T Flag Spawn Location.")
register_concmd("amx_ctf_set_ctflag","cmd_set_ctflag",ADMIN_BAN,"Sets your current location to the new CT Flag Spawn Location.")
register_concmd("amx_ctf_off","cmd_off",ADMIN_BAN,"Turn CTF Off")
register_concmd("amx_ctf_on","cmd_on",ADMIN_BAN,"Turn CTF On")
register_menucmd(register_menuid("WeaponMethodMenu"),(1<<0)|(1<<1)|(1<<2),"weapon_method_pushed")
register_menucmd(register_menuid("PrimaryWeaponSelect"),(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9),"prim_weapons_pushed")
register_menucmd(register_menuid("SecWeaponSelect"),(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7),"sec_weapons_pushed")
register_menucmd(register_menuid("ctfvote"),(1<<0)|(1<<1), "Key_Hook")
register_forward(FM_Think,"FM_Think_Hook")
register_forward(FM_PlayerPreThink,"FM_PlayerPreThink_Hook")
register_forward(FM_SetModel,"Hook_SetModel",1)
register_event("DeathMsg","DeathMsg","a")
register_event("SendAudio","endround","a","2=%!MRAD_terwin","2=%!MRAD_ctwin","2=%!MRAD_rounddraw")
register_logevent("newround",2,"1=Round_Start")
saytext_msgid = get_user_msgid("SayText")
maxplayers = get_maxplayers()
if(get_pcvar_num(togglecvar))
{
ctf_on()
}
}
/*
cmd_delweap cmd_addweap
*/
public cmd_delweap(id,level,cid)
{
if(!cmd_access(id,level,cid,2))
{
return PLUGIN_HANDLED
}
new arg[32]
read_argv(1,arg,31)
new cvar_value[32]
#if defined amxx176d
get_cvar_string("ctf_weapons",cvar_value,31)
#else
get_pcvar_string(allowableweapons,cvar_value,31)
#endif
new flags = read_flags(cvar_value)
for(new i=0;i<26;i++)
{
if(equali(arg,weapon_names[i]))
{
new remove_flag = power(2,i)
if(flags & remove_flag)
{
console_print(id,"[AMXX] Removing weapon %s from the choice list.",weapon_names[i])
flags -= remove_flag
get_flags(flags,cvar_value,31)
set_cvar_string("ctf_weapons",cvar_value)
}
else
{
console_print(id,"[AMXX] Weapon %s is already off choice list.",weapon_names[i])
}
break;
}
}
return PLUGIN_HANDLED
}
public cmd_addweap(id,level,cid)
{
if(!cmd_access(id,level,cid,2))
{
return PLUGIN_HANDLED
}
new arg[32]
read_argv(1,arg,31)
new cvar_value[32]
#if defined amxx176d
get_cvar_string("ctf_weapons",cvar_value,31)
#else
get_pcvar_string(allowableweapons,cvar_value,31)
#endif
for(new i=0;i<26;i++)
{
if(equali(arg,weapon_names[i]))
{
new flags = read_flags(cvar_value)
new add_flag = power(2,i)
if(!(flags & add_flag))
{
console_print(id,"[AMXX] Adding weapon %s to the choice list.",weapon_names[i])
flags += add_flag
get_flags(flags,cvar_value,31)
set_cvar_string("ctf_weapons",cvar_value)
}
else
{
console_print(id,"[AMXX] Weapon %s is already on choice list.",weapon_names[i])
}
break;
}
}
return PLUGIN_HANDLED
}
/*
Respawn on Team Select
*/
public client_putinserver(id)
{
set_task(1.0,"catch_jointeam",id,"",0,"b")
ask[id] = true
firsttime[id] = true
}
public catch_jointeam(id)
{
if(get_pcvar_num(togglecvar) && is_user_connected(id))
{
static CsTeams:team
team = cs_get_user_team(id)
if(team==CS_TEAM_T || team==CS_TEAM_T)
{
remove_task(id)
respawn_player(id)
}
}
else
{
remove_task(id)
}
}
/*
Base Respawn Code
*/
public respawn_player(id)
{
if(get_pcvar_num(togglecvar) && is_user_connected(id))
{
//Make the engine think he is spawning
set_pev(id,pev_deadflag,DEAD_RESPAWNABLE)
set_pev(id,pev_iuser1,0)
dllfunc(DLLFunc_Think,id)
//Move his body so if corpse is created it is not in map
engfunc(EngFunc_SetOrigin,id,Float:{-4800.0,-4800.0,-4800.0})
//Actual Spawn
set_task(0.5,"spawnagain",id)
}
}
public spawnagain(id)
{
//Make sure he didn't disconnect in the 0.5 seconds that have passed.
if(is_user_connected(id))
{
//Spawn player
spawn(id)
dllfunc(DLLFunc_Spawn,id)
set_task(1.0,"weapon_method_menu",id)
}
}
/*
CSDM Style weapons menu
*/
public weapon_method_menu(id)
{
if(is_user_bot(id))
{
weapon_picked[0][id] = 16
weapon_picked[1][id] = 23
give_weapons(id)
}
else if(firsttime[id])
{
firsttime[id] = false
prim_weapons_menu(id,0)
}
else
{
cur_offset[id] = 0
if(ask[id])
{
show_menu(id,(1<<0)|(1<<1)|(1<<2),"Weapon Selection Method^n^n1. Last Guns^n2. Last Guns + Save^n3. New Guns",-1,"WeaponMethodMenu")
}
else
{
give_weapons(id)
}
}
}
public weapon_method_pushed(id,key)
{
switch(key)
{
case 0:
{
ask[id] = true
give_weapons(id)
}
case 1:
{
new string[200]
format(string,199,"[red][CTF][/red] Type [green]guns[/green] to re-activate the gun menu.")
show_colored_message(id,string,199)
ask[id] = false
give_weapons(id)
}
case 2:
{
ask[id] = true
prim_weapons_menu(id,0)
}
}
return ;
}
public prim_weapons_menu(id,offset)
{
if(offset<0) offset = 0
new cvar_value[32]
#if defined amxx176d
get_cvar_string("ctf_weapons",cvar_value,31)
#else
get_pcvar_string(allowableweapons,cvar_value,31)
#endif
new flags = read_flags(cvar_value)
new keys, curnum, menu[2048]
for(new i=offset;i<19;i++)
{
if(i==18)
{
options_on_menu[curnum][id] = 24
keys += (1<<curnum)
curnum++
format(menu,2047,"%s^n%d. Random",menu,curnum)
break;
}
else if(flags & power(2,i))
{
options_on_menu[curnum][id] = i
keys += (1<<curnum)
curnum++
format(menu,2047,"%s^n%d. %s",menu,curnum,weapon_names[i])
if(curnum==8)
break;
}
}
format(menu,2047,"\ySelect Primary Weapon:\w^n^n%s^n",menu)
if(curnum==8 && offset<12)
{
keys += (1<<8)
format(menu,2047,"%s^n9. Next",menu)
}
if(offset)
{
keys += (1<<9)
format(menu,2047,"%s^n0. Back",menu)
}
show_menu(id,keys,menu,-1,"PrimaryWeaponSelect")
}
public prim_weapons_pushed(id,key)
{
if(key<8)
{
weapon_picked[0][id] = options_on_menu[key][id]
cur_offset[id] = 0
sec_weapons_menu(id,0)
}
else
{
if(key==8)
cur_offset[id] += 8
if(key==9)
cur_offset[id] -= 8
prim_weapons_menu(id,cur_offset[id])
}
return ;
}
public sec_weapons_menu(id,offset)
{
if(offset<0) offset = 0
new cvar_value[32]
#if defined amxx176d
get_cvar_string("ctf_weapons",cvar_value,31)
#else
get_pcvar_string(allowableweapons,cvar_value,31)
#endif
new flags = read_flags(cvar_value)
new keys, curnum, menu[2048]
for(new i=18;i<24;i++)
{
if(flags & power(2,i))
{
options_on_menu[curnum][id] = i
keys += (1<<curnum)
curnum++
format(menu,2047,"%s^n%d. %s",menu,curnum,weapon_names[i])
}
}
options_on_menu[curnum][id] = 25
keys += (1<<curnum)
curnum++
format(menu,2047,"%s^n%d. Random",menu,curnum)
format(menu,2047,"\ySelect Secondary Weapon:\w^n^n%s",menu)
show_menu(id,keys,menu,-1,"SecWeaponSelect")
}
public sec_weapons_pushed(id,key)
{
if(key<8)
{
weapon_picked[1][id] = options_on_menu[key][id]
}
give_weapons(id)
return ;
}
public give_weapons(id)
{
strip_user_weapons(id)
give_item(id,"weapon_knife")
new weapon[32]
new csw = csw_contant(weapon_picked[0][id])
get_weaponname(csw,weapon,31)
give_item(id,weapon)
cs_set_user_bpammo(id,csw,999)
csw = csw_contant(weapon_picked[1][id])
get_weaponname(csw,weapon,31)
give_item(id,weapon)
cs_set_user_bpammo(id,csw,999)
#if defined amxx176d
get_cvar_string("ctf_nades",weapon,31)
#else
get_pcvar_string(nades,weapon,31)
#endif
new he, flash, smoke
for(new i=0;i<strlen(weapon);i++)
{
switch(weapon[i])
{
case 'h': he++
case 'f': flash++
case 's': smoke++
}
}
if(he) give_item(id,"weapon_hegrenade"), cs_set_user_bpammo(id,CSW_HEGRENADE,he)
if(flash) give_item(id,"weapon_flashbang"), cs_set_user_bpammo(id,CSW_FLASHBANG,flash)
if(smoke) give_item(id,"weapon_smokegrenade"), cs_set_user_bpammo(id,CSW_SMOKEGRENADE,smoke)
#if defined amxx176d
get_cvar_string("ctf_weapons",weapon,31)
#else
get_pcvar_string(allowableweapons,weapon,31)
#endif
new flags = read_flags(weapon)
if(flags & CTF_VESTHELM) cs_set_user_armor(id,100,CS_ARMOR_VESTHELM)
else if(flags & CTF_VEST) cs_set_user_armor(id,100,CS_ARMOR_KEVLAR)
}
public csw_contant(weapon)
{
new num = 29
switch(weapon)
{
case 0: num = 3
case 1: num = 5
case 2: num = 7
case 3: num = 8
case 4: num = 12
case 5: num = 13
case 6: num = 14
case 7: num = 15
case 8: num = 18
case 9: num = 19
case 10: num = 20
case 11: num = 21
case 12: num = 22
case 13: num = 23
case 14: num = 24
case 15: num = 27
case 16: num = 28
case 17: num = 30
case 18: num = 1
case 19: num = 10
case 20: num = 11
case 21: num = 16
case 22: num = 17
case 23: num = 26
case 24:
{
new s_weapon[32]
#if defined amxx176d
get_cvar_string("ctf_weapons",s_weapon,31)
#else
get_pcvar_string(allowableweapons,s_weapon,31)
#endif
new flags = read_flags(s_weapon)
do
{
num = random_num(0,18)
if(!(num & flags))
{
num = -1
}
}
while(num==-1)
num = csw_contant(num)
}
case 25:
{
new s_weapon[32]
#if defined amxx176d
get_cvar_string("ctf_weapons",s_weapon,31)
#else
get_pcvar_string(allowableweapons,s_weapon,31)
#endif
new flags = read_flags(s_weapon)
do
{
num = random_num(18,23)
if(!(num & flags))
{
num = -1
}
}
while(num==-1)
num = csw_contant(num)
}
}
return num;
}
public cmd_guns(id)
{
ask[id] = true
weapon_method_menu(id)
}
/*
Weapon Despawn
*/
public Hook_SetModel(ent,model[])
{
if(get_pcvar_num(togglecvar) && pev_valid(ent) && ent>maxplayers)
{
if(containi(model,"models/w_")==0)
{
if(containi(model,"nade")!=-1 || containi(model,"flash")!=-1)
{
set_task(2.0,"remove_nade_ent",ent,model,31)
}
else
{
set_task(0.1,"remove_ent",ent,model,31)
}
}
}
}
public remove_ent(model[32],ent)
{
if(pev_valid(ent))
{
static model2[32]
pev(ent,pev_model,model2,31)
if(equal(model,model2)) engfunc(EngFunc_RemoveEntity,ent)
}
}
public remove_nade_ent(model[32],ent)
{
if(pev_valid(ent))
{
static model2[32]
pev(ent,pev_model,model2,31)
if(equal(model,model2))
{
static Float:velocity[3]
pev(ent,pev_velocity,velocity)
if(!velocity[0] && !velocity[1] && !velocity[2])
set_pev(ent,pev_flags,FL_KILLME)
}
}
}
/*
Base Setup - Spawn Protection & Flag Spawn
*/
public plugin_precache()
{
// precache_model(holo_model)
precache_model(red_flag_model)
precache_model(blue_flag_model)
beamsprite = precache_model("sprites/dot.spr")
precache_model("models/scientist.mdl")
if(get_pcvar_num(register_cvar("ctf_sounds","1")))
{
play_sounds = true
precache_sound(flag_captured)
precache_sound(flag_returned)
precache_sound(flag_taken)
}
}
public cmd_set_tflag(id,level,cid)
{
if(!cmd_access(id,level,cid,1))
{
return PLUGIN_HANDLED
}
setflagspawn(id,0)
console_print(id,"[CTF] T Flag Spawn Location Saved.")
return PLUGIN_HANDLED
}
public cmd_set_ctflag(id,level,cid)
{
if(!cmd_access(id,level,cid,1))
{
return PLUGIN_HANDLED
}
setflagspawn(id,1)
console_print(id,"[CTF] CT Flag Spawn Location Saved.")
return PLUGIN_HANDLED
}
public setflagspawn(id,team)
{
new bool:readfromfile = false
new configfile[200]
get_configsdir(configfile,199)
format(configfile,199,"%s/CTF_FlagSpawns.ini",configfile)
new mapname[32]
get_mapname(mapname,31)
new string[200]
format(string,199,"%s | T | ",mapname)
new Float:origin[3], Float:origin2[3]
switch(team)
{
case 0:
{
pev(flag_holder[1],pev_origin,origin2)
pev(id,pev_origin,origin)
engfunc(EngFunc_SetOrigin,flag_holder[0],origin)
}
case 1:
{
pev(flag_holder[0],pev_origin,origin)
pev(id,pev_origin,origin2)
engfunc(EngFunc_SetOrigin,flag_holder[1],origin2)
}
}
if(file_exists(configfile))
{
new read[200], trash, Fsize = file_size(configfile,1)
for(new i=0;i<Fsize;i++)
{
read_file(configfile,i,read,199,trash)
if(containi(read,string)==0)
{
format(string,199,"%s | T | %f %f %f | CT | %f %f %f",mapname,origin[0],origin[1],origin[2],origin2[0],origin2[1],origin2[2])
write_file(configfile,string,i)
readfromfile = true
break;
}
}
}
if(!readfromfile)
{
format(string,199,"%s | T | %f %f %f | CT | %f %f %f",mapname,origin[0],origin[1],origin[2],origin2[0],origin2[1],origin2[2])
write_file(configfile,string,-1)
}
}
public find_minmaxs()
{
new Float:origin[3], i
new ent = engfunc(EngFunc_FindEntityByString,maxplayers,"classname","info_player_deathmatch")
while(ent)
{
if(pev_valid(ent))
{
pev(ent,pev_origin,origin)
for(i=0;i<3;i++)
{
if(origin[i] < mins[0][i])
mins[0][i] = origin[i]
if(origin[i] > maxs[0][i])
maxs[0][i] = origin[i]
}
}
ent = engfunc(EngFunc_FindEntityByString,ent,"classname","info_player_deathmatch")
}
ent = engfunc(EngFunc_FindEntityByString,maxplayers,"classname","info_player_start")
while(ent)
{
if(pev_valid(ent))
{
pev(ent,pev_origin,origin)
for(i=0;i<3;i++)
{
if(origin[i] < mins[1][i])
mins[1][i] = origin[i]
if(origin[i] > maxs[1][i])
maxs[1][i] = origin[i]
}
}
ent = engfunc(EngFunc_FindEntityByString,ent,"classname","info_player_start")
}
maxs[0][2] += 70.0
mins[1][2] -= 70.0
maxs[0][0] += 32.0
mins[1][0] -= 32.0
maxs[0][1] += 32.0
mins[1][1] -= 32.0
new Float:T_origin[3], Float:CT_origin[3]
get_flagstand_origins(CT_origin,T_origin)
ent = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
set_pev(ent,pev_classname,"Flagstand_Model")
// engfunc(EngFunc_SetModel,ent,holo_model)
set_pev(ent,pev_effects,EF_BRIGHTLIGHT)
set_pev(ent,pev_renderfx,kRenderFxGlowShell)
set_pev(ent,pev_rendercolor,Float:{255.0,0.0,0.0})
set_pev(ent,pev_rendermode,kRenderGlow)
set_pev(ent,pev_renderamt,65.0)
set_pev(ent,pev_gaitsequence,0)
set_pev(ent,pev_sequence,0)
set_pev(ent,pev_framerate,0.7)
engfunc(EngFunc_SetOrigin,ent,T_origin)
engfunc(EngFunc_DropToFloor,ent)
pev(ent,pev_origin,origin)
origin[2] += 36.0
engfunc(EngFunc_SetOrigin,ent,origin)
set_pev(ent,pev_nextthink,1.0)
flagstand_ents[0] = ent
flag_holder[0] = ent
ent = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
set_pev(ent,pev_classname,"Flagstand_Model")
// engfunc(EngFunc_SetModel,ent,holo_model)
set_pev(ent,pev_effects,EF_BRIGHTLIGHT)
set_pev(ent,pev_renderfx,kRenderFxGlowShell)
set_pev(ent,pev_rendercolor,Float:{0.0,0.0,255.0})
set_pev(ent,pev_rendermode,kRenderFxGlowShell)
set_pev(ent,pev_renderamt,65.0)
set_pev(ent,pev_gaitsequence,0)
set_pev(ent,pev_sequence,0)
set_pev(ent,pev_framerate,0.7)
engfunc(EngFunc_SetOrigin,ent,CT_origin)
engfunc(EngFunc_DropToFloor,ent)
pev(ent,pev_origin,origin)
origin[2] += 36.0
engfunc(EngFunc_SetOrigin,ent,origin)
set_pev(ent,pev_nextthink,1.0)
flagstand_ents[1] = ent
flag_holder[1] = ent
for(new i=0;i<2;i++)
{
for(new j=0;j<3;j++)
{
I_max[i][j] = floatround(maxs[i][j])
I_min[i][j] = floatround(mins[i][j])
}
}
set_task(5.0,"create_beamsprites")
set_task(10.0,"create_beamsprites",1500,"",0,"b")
ent = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
set_pev(ent,pev_classname,"CTF_T_Flag")
engfunc(EngFunc_SetModel,ent,red_flag_model)
set_pev(ent,pev_movetype,MOVETYPE_FLY)
FM_Think_Hook(ent)
ent = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
set_pev(ent,pev_classname,"CTF_CT_Flag")
engfunc(EngFunc_SetModel,ent,blue_flag_model)
set_pev(ent,pev_movetype,MOVETYPE_FLY)
FM_Think_Hook(ent)
}
public get_flagstand_origins(Float:CT_origin[3],Float:T_origin[3])
{
new i
new Float:midpoint[2][3]
for(i=0;i<2;i++)
{
for(new j=0;j<3;j++)
{
midpoint[i][j] = (maxs[i][j] + mins[i][j]) / 2.0
}
}
new configfile[200]
get_configsdir(configfile,199)
format(configfile,199,"%s/CTF_FlagSpawns.ini",configfile)
T_origin[0] = midpoint[0][0]
T_origin[1] = midpoint[0][1]
T_origin[2] = midpoint[0][2]
CT_origin[0] = midpoint[1][0]
CT_origin[1] = midpoint[1][1]
CT_origin[2] = midpoint[1][2]
new mapname[32]
get_mapname(mapname,31)
new string[200]
format(string,199,"%s | T | ",mapname)
if(file_exists(configfile))
{
new read[200], trash, Fsize = file_size(configfile,1)
for(new i=0;i<Fsize;i++)
{
read_file(configfile,i,read,199,trash)
if(containi(read,string)==0)
{
format(read,199,read[strlen(string)])
replace_all(read,199," | CT |","")
strbreak(read,string,199,read,199)
T_origin[0] = str_to_float(string)
strbreak(read,string,199,read,199)
T_origin[1] = str_to_float(string)
strbreak(read,string,199,read,199)
T_origin[2] = str_to_float(string)
strbreak(read,string,199,read,199)
CT_origin[0] = str_to_float(string)
strbreak(read,string,199,read,199)
CT_origin[1] = str_to_float(string)
strbreak(read,string,199,read,199)
CT_origin[2] = str_to_float(string)
break;
}
}
}
return ;
}
public FM_Think_Hook(ent)
{
if(pev_valid(ent))
{
static classname[32]
pev(ent,pev_classname,classname,31)
if(equal(classname,"Flagstand_Model"))
{
static Float:angles[3]
pev(ent,pev_angles,angles)
angles[1] += 0.3
while(angles[1]>180.0) angles[1] -= 360.0
set_pev(ent,pev_angles,angles)
set_pev(ent,pev_nextthink,1.0)
}
else if(equal(classname,"CTF_T_Flag"))
{
Flag_Think_Hook(ent,0)
set_pev(ent,pev_nextthink,1.0)
}
else if(equal(classname,"CTF_CT_Flag"))
{
Flag_Think_Hook(ent,1)
set_pev(ent,pev_nextthink,1.0)
}
}
}
public create_beamsprites()
{
if(get_pcvar_num(spawnprotection))
{
//T Base
create_beam_message(I_max[0][0],I_max[0][1],I_max[0][2],I_max[0][0],I_min[0][1],I_max[0][2],255,0)
//create_beam_message(I_max[0][0],I_max[0][1],I_min[0][2],I_max[0][0],I_min[0][1],I_min[0][2],255,0)
create_beam_message(I_max[0][0],I_max[0][1],(I_max[0][2] + I_min[0][2]) / 2,I_max[0][0],I_min[0][1],(I_max[0][2] + I_min[0][2]) / 2,255,0)
create_beam_message(I_max[0][0],I_max[0][1],I_max[0][2],I_min[0][0],I_max[0][1],I_max[0][2],255,0)
//create_beam_message(I_max[0][0],I_max[0][1],I_min[0][2],I_min[0][0],I_max[0][1],I_min[0][2],255,0)
create_beam_message(I_max[0][0],I_max[0][1],(I_max[0][2] + I_min[0][2]) / 2,I_min[0][0],I_max[0][1],(I_max[0][2] + I_min[0][2]) / 2,255,0)
create_beam_message(I_min[0][0],I_max[0][1],I_max[0][2],I_min[0][0],I_min[0][1],I_max[0][2],255,0)
//create_beam_message(I_min[0][0],I_max[0][1],I_min[0][2],I_min[0][0],I_min[0][1],I_min[0][2],255,0)
create_beam_message(I_min[0][0],I_max[0][1],(I_max[0][2] + I_min[0][2]) / 2,I_min[0][0],I_min[0][1],(I_max[0][2] + I_min[0][2]) / 2,255,0)
create_beam_message(I_min[0][0],I_min[0][1],I_max[0][2],I_max[0][0],I_min[0][1],I_max[0][2],255,0)
//create_beam_message(I_min[0][0],I_min[0][1],I_min[0][2],I_max[0][0],I_min[0][1],I_min[0][2],255,0)
create_beam_message(I_min[0][0],I_min[0][1],(I_max[0][2] + I_min[0][2]) / 2,I_max[0][0],I_min[0][1],(I_max[0][2] + I_min[0][2]) / 2,255,0)
//CT Base
create_beam_message(I_max[1][0],I_max[1][1],I_max[1][2],I_max[1][0],I_min[1][1],I_max[1][2],0,255)
//create_beam_message(I_max[1][0],I_max[1][1],I_min[1][2],I_max[1][0],I_min[1][1],I_min[1][2],255,0)
create_beam_message(I_max[1][0],I_max[1][1],(I_max[1][2] + I_min[1][2]) / 2,I_max[1][0],I_min[1][1],(I_max[1][2] + I_min[1][2]) / 2,0,255)
create_beam_message(I_max[1][0],I_max[1][1],I_max[1][2],I_min[1][0],I_max[1][1],I_max[1][2],0,255)
//create_beam_message(I_max[1][0],I_max[1][1],I_min[1][2],I_min[1][0],I_max[1][1],I_min[1][2],255,0)
create_beam_message(I_max[1][0],I_max[1][1],(I_max[1][2] + I_min[1][2]) / 2,I_min[1][0],I_max[1][1],(I_max[1][2] + I_min[1][2]) / 2,0,255)
create_beam_message(I_min[1][0],I_max[1][1],I_max[1][2],I_min[1][0],I_min[1][1],I_max[1][2],0,255)
//create_beam_message(I_min[1][0],I_max[1][1],I_min[1][2],I_min[1][0],I_min[1][1],I_min[1][2],255,0)
create_beam_message(I_min[1][0],I_max[1][1],(I_max[1][2] + I_min[1][2]) / 2,I_min[1][0],I_min[1][1],(I_max[1][2] + I_min[1][2]) / 2,0,255)
create_beam_message(I_min[1][0],I_min[1][1],I_max[1][2],I_max[1][0],I_min[1][1],I_max[1][2],0,255)
//create_beam_message(I_min[1][0],I_min[1][1],I_min[1][2],I_max[1][0],I_min[1][1],I_min[1][2],255,0)
create_beam_message(I_min[1][0],I_min[1][1],(I_max[1][2] + I_min[1][2]) / 2,I_max[1][0],I_min[1][1],(I_max[1][2] + I_min[1][2]) / 2,0,255)
}
}
public create_beam_message(origin1_0,origin1_1,origin1_2,origin2_0,origin2_1,origin2_2,r,b)
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(0) //TE_BEAMPOINTS
write_coord(origin1_0)
write_coord(origin1_1)
write_coord(origin1_2)
write_coord(origin2_0)
write_coord(origin2_1)
write_coord(origin2_2)
write_short(beamsprite)
write_byte(1) // framestart
write_byte(1) // framerate
write_byte(110) // life in 0.1's
write_byte(5) // width
write_byte(0) // noise
write_byte(r)
write_byte(0)
write_byte(b)
write_byte(200) // brightness
write_byte(0) // speed
message_end()
}
public FM_PlayerPreThink_Hook(id)
{
if(is_user_alive(id) && !is_user_bot(id) && get_pcvar_num(spawnprotection) && get_pcvar_num(togglecvar) && id!=flag_holder[0] && id!=flag_holder[1])
{
static Float:origin[3]
pev(id,pev_origin,origin)
if(is_in_safezone[id])
{
new buttons = pev(id,pev_button)
if(buttons & IN_ATTACK) buttons -= IN_ATTACK
if(buttons & IN_ATTACK2) buttons -= IN_ATTACK2
set_pev(id,pev_button,buttons)
buttons = pev(id,pev_oldbuttons)
if(buttons & IN_ATTACK) buttons -= IN_ATTACK
if(buttons & IN_ATTACK2) buttons -= IN_ATTACK2
set_pev(id,pev_oldbuttons,buttons)
if(!((origin[0]<=maxs[0][0] && origin[0]>=mins[0][0] && origin[1]<=maxs[0][1] && origin[1]>=mins[0][1]) || (origin[0]<=maxs[1][0] && origin[0]>=mins[1][0] && origin[1]<=maxs[1][1] && origin[1]>=mins[1][1])))
{
unsafezone(id)
}
}
else if((origin[0]<=maxs[0][0] && origin[0]>=mins[0][0] && origin[1]<=maxs[0][1] && origin[1]>=mins[0][1]) || (origin[0]<=maxs[1][0] && origin[0]>=mins[1][0] && origin[1]<=maxs[1][1] && origin[1]>=mins[1][1]))
{
switch(cs_get_user_team(id))
{
case CS_TEAM_T: in_safezone(id,255,0,0)
case CS_TEAM_CT: in_safezone(id,0,0,255)
default: in_safezone(id,0,255,0)
}
}
}
}
public in_safezone(id,r,g,b)
{
set_user_godmode(id,1)
set_user_rendering(id,kRenderFxGlowShell,r,g,b,kRenderTransColor,50)
is_in_safezone[id] = true
message_begin(MSG_ONE,get_user_msgid("ScreenFade"),{0,0,0},id)
write_short(~0)
write_short(~0)
write_short(1<<12)
write_byte(r)
write_byte(g)
write_byte(b)
write_byte(100)
message_end()
new param[3]
param[0] = r
param[1] = g
param[2] = b
if(!task_exists(id + 20000)) set_task(8.0,"reflash",id + 20000,param,3,"b")
set_task(0.5,"reflash",id + 20000,param,3)
}
public reflash(param[3],id)
{
id -= 20000
if(!is_in_safezone[id] || !is_user_alive(id))
{
remove_task(id + 20000)
}
else
{
message_begin(MSG_ONE,get_user_msgid("ScreenFade"),{0,0,0},id)
write_short(~0)
write_short(~0)
write_short(1<<12)
write_byte(param[0])
write_byte(param[1])
write_byte(param[2])
write_byte(100)
message_end()
}
}
public unsafezone(id)
{
set_user_godmode(id)
set_user_rendering(id,kRenderFxNone,0,0,0,kRenderTransAlpha,255)
is_in_safezone[id] = false
message_begin(MSG_ONE,get_user_msgid("ScreenFade"),{0,0,0},id)
write_short(~0)
write_short(~0)
write_short(1<<12)
write_byte(0)
write_byte(0)
write_byte(0)
write_byte(1)
message_end()
remove_task(id + 20000)
}
/*
Flag Think
*/
public Flag_Think_Hook(ent,team)
{
if(pev_valid(flag_holder[team]))
{
static Float:origin[3], Float:origin2[3]
pev(flag_holder[team],pev_origin,origin)
origin[2] += 16.0
pev(ent,pev_origin,origin2)
if(get_distance_f(origin,origin2)>50.0)
engfunc(EngFunc_SetOrigin,ent,origin)
if(flag_holder[team]!=flagstand_ents[team] && flag_holder[(team + 1) % 2]==flagstand_ents[(team + 1) % 2])
{
pev(flagstand_ents[(team + 1) % 2],pev_origin,origin)
if(get_distance_f(origin2,origin)<PICKUP_DISTANCE)
{
new string[200]
new cvar_value = get_pcvar_num(maxcaps)
new ministring[4]
if(team)
{
ministring = "CT"
TScore++
if(cvar_value<=TScore)
{
format(string,199,"[red][CTF][/red] Game Over. [green]Ts[/green] won.")
show_colored_message(0,string,199)
endmap()
}
}
else
{
ministring = "T"
CTScore++
if(cvar_value<=CTScore)
{
format(string,199,"[red][CTF][/red] Game Over. [green]CTs[/green] won.")
show_colored_message(0,string,199)
endmap()
}
}
new name[32]
get_user_name(flag_holder[team],name,31)
format(string,199,"[red][CTF][/red] [green]%s[/green] captured the [green]%s[/green] flag.",name,ministring)
if(play_sounds) client_cmd(0,"mp3 play sound/%s",flag_captured)
show_colored_message(0,string,199)
flag_holder[team] = flagstand_ents[team]
write_hudmsg()
return ;
}
}
pev(flag_holder[team],pev_velocity,origin)
set_pev(ent,pev_velocity,origin)
}
if(flag_holder[team]==flagstand_ents[team] || !flag_holder[team])
{
static Float:origin[3]
static Float:flag_origin[3]
pev(ent,pev_origin,flag_origin)
static players[32], num
get_players(players,num,"ach")
for(new i=0;i<num;i++)
{
if(get_user_team(players[i])!=(team + 1))
{
pev(players[i],pev_origin,origin)
if(get_distance_f(origin,flag_origin)<PICKUP_DISTANCE)
{
new ministring[4]
if(team) ministring = "CT"
else ministring = "T"
flag_holder[team] = players[i]
new name[32]
new string[200]
get_user_name(players[i],name,31)
format(string,199,"[red][CTF][/red] [green]%s[/green] picked up the [green]%s[/green] flag.",name,ministring)
if(play_sounds) client_cmd(0,"mp3 play sound/%s",flag_taken)
show_colored_message(0,string,199)
flag_holder[team] = players[i]
write_hudmsg()
unsafezone(players[i])
break;
}
}
else if(!flag_holder[team])
{
pev(players[i],pev_origin,origin)
if(get_distance_f(origin,flag_origin)<PICKUP_DISTANCE)
{
new ministring[4]
if(team) ministring = "CT"
else ministring = "T"
flag_holder[team] = players[i]
new name[32]
new string[200]
get_user_name(players[i],name,31)
format(string,199,"[red][CTF][/red] [green]%s[/green] returned the [green]%s[/green] flag.",name,ministring)
if(play_sounds) client_cmd(0,"mp3 play sound/%s",flag_returned)
show_colored_message(0,string,199)
flag_holder[team] = flagstand_ents[team]
write_hudmsg()
break;
}
}
}
}
return ;
}
public client_disconnect(id)
{
if(read_data(2)==flag_holder[0])
{
flag_holder[0] = 0
new string[200]
format(string,199,"[red][CTF][/red] [green]UNKNOWN[/green] dropped the [green]T[/green] flag.")
if(play_sounds) client_cmd(0,"mp3 play sound/%s",flag_taken)
show_colored_message(0,string,199)
write_hudmsg()
}
else if(read_data(2)==flag_holder[1])
{
flag_holder[1] = 0
new string[200]
format(string,199,"[red][CTF][/red] [green]UNKNOWN[/green] dropped the [green]CT[/green] flag.")
if(play_sounds) client_cmd(0,"mp3 play sound/%s",flag_taken)
show_colored_message(0,string,199)
write_hudmsg()
}
}
public DeathMsg()
{
new victim = read_data(2)
if(is_user_connected(victim))
{
if(victim==flag_holder[0])
{
flag_holder[0] = 0
new name[32]
new string[200]
get_user_name(victim,name,31)
format(string,199,"[red][CTF][/red] [green]%s[/green] dropped the [green]T[/green] flag.",name)
show_colored_message(0,string,199)
write_hudmsg()
}
else if(victim==flag_holder[1])
{
flag_holder[1] = 0
new name[32]
new string[200]
get_user_name(victim,name,31)
format(string,199,"[red][CTF][/red] [green]%s[/green] dropped the [green]CT[/green] flag.",name)
show_colored_message(0,string,199)
write_hudmsg()
}
set_task(get_pcvar_float(respawntime),"respawn_player",victim)
}
}
public show_colored_message(id,string[],maxlen)
{
replace_all(string,maxlen,"[blue]","^x03")
replace_all(string,maxlen,"[/blue]","^x01")
replace_all(string,maxlen,"[red]","^x03")
replace_all(string,maxlen,"[/red]","^x01")
replace_all(string,maxlen,"[green]","^x04")
replace_all(string,maxlen,"[/green]","^x01")
format(string,maxlen,"^x04^x01%s",string)
static q
q++
if(!id)
{
static players[32], num
get_players(players,num,"ch")
for(new i=0;i<num;i++)
{
message_begin(MSG_ONE,saytext_msgid,{0,0,0},players[i])
write_byte(players[i])
write_string(string)
message_end()
}
}
else
{
message_begin(MSG_ONE,saytext_msgid,{0,0,0},id)
write_byte(id)
write_string(string)
message_end()
}
}
public write_hudmsg()
{
new flagloc[32]
if(!flag_holder[0])
{
format(flagloc,31,"On Ground")
}
else if(flag_holder[0]==flagstand_ents[0])
{
format(flagloc,31,"Base")
}
else if(is_user_alive(flag_holder[0]))
{
get_user_name(flag_holder[0],flagloc,31)
}
set_hudmessage(255, 0, 0, -1.0, 0.03, 0, 6.0, 12.0, 0.0, 0.0)
show_hudmessage(0,"[ %d ] T Flag: %s",TScore,flagloc)
if(!flag_holder[1])
{
format(flagloc,31,"On Ground")
}
else if(flag_holder[1]==flagstand_ents[0])
{
format(flagloc,31,"Base")
}
else if(is_user_alive(flag_holder[1]))
{
get_user_name(flag_holder[1],flagloc,31)
}
set_hudmessage(0, 0, 255, -1.0, 0.03, 0, 6.0, 12.0, 0.0, 0.0,3)
show_hudmessage(0,"_^n [ %d ] CT Flag: %s",CTScore,flagloc)
}
public endmap()
{
new trash
new map[32]
new configfile[200]
get_basedir(configfile,199)
format(configfile,199,"%s/maps.ini",configfile)
format(map,31,"de_dust")
if(file_exists(configfile)) read_file(configfile,random_num(0,file_size(configfile,1) - 1),map,31,trash)
if(!is_map_valid(map))
{
if(file_size(configfile,1)<3)
{
server_cmd("amx_map de_dust2;amx_map de_dust2_cz")
}
else
{
set_task(0.1,"endmap")
}
}
else server_cmd("amx_map %s",map)
}
/*
CTF Vote (From v2.0)
*/
public say_vote_hook(id)
{
if(!get_pcvar_num(votecvar))
{
client_print(id,print_chat,"[CTF] Voting disabled")
}
else if(roundend)
{
client_print(id,print_chat,"[CTF] Voting can't start. People are buying.")
}
else if(voting)
{
client_print(id,print_chat,"[CTF] Voting currently in progrss.")
}
else if(voted)
{
client_print(id,print_chat,"[CTF] Can't vote this soon after a vote.")
}
else if(get_pcvar_num(togglecvar))
{
voting=true
voted=true
show_menu(0,(1<<0)|(1<<1),"\bTurn CTF off?^n^n\w1. Yes^n\w2. No",-1,"ctfvote")
set_task(get_pcvar_float(votelength),"voting_over",0)
set_task(get_pcvar_float(votedelay),"voted_over")
}
else
{
voting=true
voted=true
show_menu(0,(1<<0)|(1<<1),"\bTurn CTF on?^n^n\w1. Yes^n\w2. No",-1,"ctfvote")
set_task(get_pcvar_float(votelength),"voting_over",1)
set_task(get_pcvar_float(votedelay),"voted_over")
}
}
public Key_Hook(id,key)
{
if(voting)
{
client_print(id,print_chat,"[CTF] Vote Accepted.")
if(!key) yes++
else no++
}
}
public voting_over(num)
{
if(num)
{
client_print(0,print_chat,"[CTF] Voting to turn CTF on results: Yes: %d | No: %d",yes,no)
if(yes>no)
{
ctf_on()
}
}
else
{
client_print(0,print_chat,"[CTF] Voting to turn CTF off results: Yes: %d | No: %d",yes,no)
if(yes>no)
{
ctf_off()
}
}
yes=0
no=0
voting=false
}
public voted_over()
{
voted=false
}
public endround()
{
roundend = true
set_task(7.0 + get_pcvar_float(voterounddelay),"roundstart")
}
public roundstart()
{
roundend = false
}
/*
Off / On Functions
*/
public ctf_off()
{
set_pcvar_num(togglecvar,0)
remove_task(1234)
remove_task(1500)
engfunc(EngFunc_SetOrigin,flagstand_ents[0],Float:{-4800.0,-4800.0,-4800.0})
engfunc(EngFunc_SetOrigin,flagstand_ents[1],Float:{-4800.0,-4800.0,-4800.0})
flag_holder[0] = flagstand_ents[0]
flag_holder[1] = flagstand_ents[1]
add_objectives()
for(new i=1;i<=32;i++)
{
if(is_user_alive(i) && is_in_safezone[i])
{
unsafezone(i)
}
}
}
public ctf_on()
{
set_pcvar_num(togglecvar,1)
set_task(10.0,"create_beamsprites",1500,"",0,"b")
if(!pev_valid(flagstand_ents[0]) || !pev_valid(flagstand_ents[1]))
{
set_task(0.5,"find_minmaxs")
}
else
{
new Float:T_origin[3], Float:CT_origin[3]
get_flagstand_origins(CT_origin,T_origin)
engfunc(EngFunc_SetOrigin,flagstand_ents[0],T_origin)
engfunc(EngFunc_SetOrigin,flagstand_ents[1],CT_origin)
engfunc(EngFunc_DropToFloor,flagstand_ents[0])
engfunc(EngFunc_DropToFloor,flagstand_ents[1])
pev(flagstand_ents[0],pev_origin,T_origin)
pev(flagstand_ents[1],pev_origin,CT_origin)
T_origin[2] += 36.0
CT_origin[2] += 36.0
engfunc(EngFunc_SetOrigin,flagstand_ents[0],T_origin)
engfunc(EngFunc_SetOrigin,flagstand_ents[1],CT_origin)
}
set_task(10.0,"write_hudmsg",1234,"",0,"b")
remove_objectives()
set_task(10.0,"ctf_restartround")
remove_task(5547)
remove_task(5548)
client_print(0,print_center,"[CTF] CTF Enabled. Round Restarting in 10 seconds.")
}
public ctf_restartround()
{
set_cvar_num("sv_restartround",1)
for(new i=1;i<=32;i++)
{
if(is_user_connected(i))
{
firsttime[i] = true
weapon_method_menu(i)
}
}
}
/*
Off / On Commands
*/
public cmd_off(id,level,cid)
{
if(!cmd_access(id,level,cid,1))
{
return PLUGIN_HANDLED
}
if(get_pcvar_num(togglecvar))
{
console_print(id,"[CTF] CTF Turned Off.")
ctf_off()
new string[200]
format(string,199,"[red][CTF][/red] CTF Turned [green]Off[/green].")
show_colored_message(0,string,199)
}
else
{
console_print(id,"[CTF] CTF Is Already Turned Off.")
}
return PLUGIN_HANDLED
}
public cmd_on(id,level,cid)
{
if(!cmd_access(id,level,cid,1))
{
return PLUGIN_HANDLED
}
if(!get_pcvar_num(togglecvar))
{
console_print(id,"[CTF] CTF Turned On.")
ctf_on()
new string[200]
format(string,199,"[red][CTF][/red] CTF Turned [green]On[/green].")
show_colored_message(0,string,199)
}
else
{
console_print(id,"[CTF] CTF Is Already Turned On.")
}
return PLUGIN_HANDLED
}
/*
Remove Map Objectives
*/
public remove_objectives()
{
new ent
for(new i=0;i<MAX_OBJ_TYPES;i++)
{
ent = engfunc(EngFunc_FindEntityByString,maxplayers,"classname",map_objectives[i])
while(ent)
{
if(pev_valid(ent))
{
objective_type[num_objectives] = i
pev(ent,pev_origin,objective[num_objectives])
pev(ent,pev_size,objectiveminsize[num_objectives],objectivemaxsize[num_objectives])
pev(ent,pev_solid,objective_solidity[num_objectives])
engfunc(EngFunc_RemoveEntity,ent)
num_objectives++
}
ent = engfunc(EngFunc_FindEntityByString,ent,"classname",map_objectives[i])
}
}
give_c4 = false
}
public add_objectives()
{
new ent
for(num_objectives--;num_objectives>=0;num_objectives--)
{
if(objective_type[num_objectives]==0 || objective_type[num_objectives]==5) give_c4 = true
ent = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,map_objectives[objective_type[num_objectives]]))
set_pev(ent,pev_classname,map_objectives[objective_type[num_objectives]])
set_pev(ent,pev_origin,objective[num_objectives])
set_pev(ent,pev_solid,objective_solidity[num_objectives])
engfunc(EngFunc_SetSize,ent,objectiveminsize[num_objectives],objectivemaxsize[num_objectives])
set_pev(ent,pev_size,objectiveminsize[num_objectives],objectivemaxsize[num_objectives])
dllfunc(DLLFunc_Spawn,ent)
dllfunc(DLLFunc_Think,ent)
for(new i=0;i<3;i++)
{
objective[num_objectives][i] = 0.0
objectiveminsize[num_objectives][i] = 0.0
objectivemaxsize[num_objectives][i] = 0.0
}
}
num_objectives=0
}
//All this handles de_ maps - making them re-work if ctf is turned off during runtime.
public newround()
{
if(give_c4) set_task(0.5,"manually_give_c4",5547)
}
public manually_give_c4()
{
if(!get_pcvar_num(togglecvar))
{
new found = 0
static start
if(start<1 || start>maxplayers) start = 1
for(;start<=maxplayers;start++)
{
if(is_user_alive(start) && cs_get_user_team(start)==CS_TEAM_T)
{
found = start
break;
}
}
if(!found)
{
for(start = 0;start<=maxplayers;start++)
{
if(is_user_alive(start) && cs_get_user_team(start)==CS_TEAM_T)
{
found = start
break;
}
}
}
if(found) give_item(found,"weapon_c4")
}
set_task(get_cvar_float("mp_roundtime") * 60.0,"force_endround",5548)
}
public bomb_planted() remove_task(5548)
public force_endround()
{
getweapons()
set_task(0.5,"killum")
}
public getweapons()
{
static i, i2
for(i=1;i<=maxplayers;i++)
{
arrayset(weapon[i],0,31)
if(is_user_alive(i) && cs_get_user_team(i)==CS_TEAM_T)
{
armoramount[i] = cs_get_user_armor(i,armortype[i])
for(i2=1;i2<=30;i2++)
{
if(i2!=2 && i2!=6 && i2!=29)
{
if(user_has_weapon(i,i2))
{
weapon[i][i2] = cs_get_user_bpammo(i,i2)
if(!weapon[i][i2]) weapon[i][i2] = 1
}
}
}
}
}
}
public killum()
{
killing=true
new msgblock = get_msg_block(get_user_msgid("DeathMsg"))
set_msg_block(get_user_msgid("DeathMsg"),BLOCK_SET)
new i
for(i=1;i<=maxplayers;i++)
{
if(is_user_alive(i) && cs_get_user_team(i)==CS_TEAM_T)
{
user_kill(i)
client_print(i,print_chat,"[AMXX] You Failed to complete map objective. Respawning.")
set_task(4.0,"spawnum",i)
}
}
set_msg_block(get_user_msgid("DeathMsg"),msgblock)
killing=false
set_task(4.5,"giveweapons")
}
public plugin_log()
{
if(killing)
{
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
public spawnum(id)
{
cs_set_user_deaths(id,cs_get_user_deaths(id) - 1)
set_user_frags(id,get_user_frags(id) + 1)
dllfunc(DLLFunc_Spawn,id)
}
public giveweapons()
{
new i, i2
for(i=1;i<=maxplayers;i++)
{
if(is_user_alive(i) && cs_get_user_team(i)==CS_TEAM_T)
{
cs_set_user_armor(i,armoramount[i],armortype[i])
strip_user_weapons(i)
for(i2=1;i2<=30;i2++)
{
if(i2!=2 && i2!=6 && i2!=29)
{
if(weapon[i][i2])
{
give_item(i,WeaponNames[i2])
cs_set_user_bpammo(i,i2,weapon[i][i2])
}
}
}
give_item(i,"weapon_knife")
}
}
}
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
- DozerRadu
- Membru, skill +1
- Posts: 114
- Joined: 25 Jun 2017, 00:57
- Detinator Steam: Da
- CS Status: ACTIVEZ AICI
- Detinator server CS: DA
- SteamID: rusuraduo
- Fond eXtream: 0
- Location: Sânnicolau Mare
- Has thanked: 23 times
- Been thanked: 2 times
Cand ii dau compiler , imi da succes cu urmatoarele errori
Asa arata , steag este simplu fara acea femeie si nici glow nu are jucatorul. https://i.imgur.com/p964Puv.png
Code: Select all
AMX Mod X Compiler 1.9.0.5263
Copyright (c) 1997-2006 ITB CompuPhase
Copyright (c) 2004-2013 AMX Mod X Team
GHW_CTF.sma(1044) : warning 233: symbol "strbreak" is marked as deprecated: Use argbreak() instead
GHW_CTF.sma(1046) : warning 233: symbol "strbreak" is marked as deprecated: Use argbreak() instead
GHW_CTF.sma(1048) : warning 233: symbol "strbreak" is marked as deprecated: Use argbreak() instead
GHW_CTF.sma(1050) : warning 233: symbol "strbreak" is marked as deprecated: Use argbreak() instead
GHW_CTF.sma(1052) : warning 233: symbol "strbreak" is marked as deprecated: Use argbreak() instead
GHW_CTF.sma(1054) : warning 233: symbol "strbreak" is marked as deprecated: Use argbreak() instead
GHW_CTF.sma(1371) : warning 233: symbol "client_disconnect" is marked as deprecated: Use client_disconnected() instead.
Header size: 3712 bytes
Code size: 59848 bytes
Data size: 30128 bytes
Stack/heap size: 16384 bytes
Total requirements: 110072 bytes
7 Warnings.
Done.
Viaţa însăşi este magie, iar dacă nu crezi asta, măcar încearcă să o trăieşti ca pe ceva magic.
©Rusu Radu
©Rusu Radu
- CyBer[N]eTicK
- Membru, skill +1
- Posts: 190
- Joined: 29 May 2020, 05:35
- Detinator Steam: Da
- CS Status: Strong & Original
- Detinator server CS: BB.BLACKGAMES.RO
- SteamID: /id/cybernetick_cbk/
- Fond eXtream: 0
- Location: Albania, tirana
- Discord: cybernetick_cbk
- Has thanked: 21 times
- Been thanked: 18 times
- Contact:
AMX Mod X Compiler 1.9.0.5263 - Nu merge sa compilezi deoarece ai 1.9.0DozerRadu wrote: ↑31 Dec 2022, 12:07Cand ii dau compiler , imi da succes cu urmatoarele erroriAsa arata , steag este simplu fara acea femeie si nici glow nu are jucatorul. https://i.imgur.com/p964Puv.pngCode: Select all
AMX Mod X Compiler 1.9.0.5263 Copyright (c) 1997-2006 ITB CompuPhase Copyright (c) 2004-2013 AMX Mod X Team GHW_CTF.sma(1044) : warning 233: symbol "strbreak" is marked as deprecated: Use argbreak() instead GHW_CTF.sma(1046) : warning 233: symbol "strbreak" is marked as deprecated: Use argbreak() instead GHW_CTF.sma(1048) : warning 233: symbol "strbreak" is marked as deprecated: Use argbreak() instead GHW_CTF.sma(1050) : warning 233: symbol "strbreak" is marked as deprecated: Use argbreak() instead GHW_CTF.sma(1052) : warning 233: symbol "strbreak" is marked as deprecated: Use argbreak() instead GHW_CTF.sma(1054) : warning 233: symbol "strbreak" is marked as deprecated: Use argbreak() instead GHW_CTF.sma(1371) : warning 233: symbol "client_disconnect" is marked as deprecated: Use client_disconnected() instead. Header size: 3712 bytes Code size: 59848 bytes Data size: 30128 bytes Stack/heap size: 16384 bytes Total requirements: 110072 bytes 7 Warnings. Done.
La mine merge perfect, compileaza cu o alta versiune amxmodx sub 1.9.0
- DozerRadu
- Membru, skill +1
- Posts: 114
- Joined: 25 Jun 2017, 00:57
- Detinator Steam: Da
- CS Status: ACTIVEZ AICI
- Detinator server CS: DA
- SteamID: rusuraduo
- Fond eXtream: 0
- Location: Sânnicolau Mare
- Has thanked: 23 times
- Been thanked: 2 times
Am facut-o cu 1.8.1 dar din pacate tot nu functioneaza glow & steag e gol .CyBer[N]eTicK wrote: ↑31 Dec 2022, 12:25La mine merge perfect, compileaza cu o alta versiune amxmodx sub 1.9.0
Code: Select all
Welcome to the AMX Mod X 1.8.1-300 Compiler.
Copyright (c) 1997-2006 ITB CompuPhase, AMX Mod X Team
Header size: 3600 bytes
Code size: 59100 bytes
Data size: 30088 bytes
Stack/heap size: 16384 bytes; max. usage is unknown, due to recursion
Total requirements: 109172 bytes
Done.
Viaţa însăşi este magie, iar dacă nu crezi asta, măcar încearcă să o trăieşti ca pe ceva magic.
©Rusu Radu
©Rusu Radu
- levin
- Scripter eXtreamCS
- Posts: 3844
- Joined: 24 Aug 2011, 12:24
- Detinator Steam: Da
- CS Status: ♅
- Detinator server CS: ☯∴
- SteamID: riseofevo
- Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy - Location: ҳ̸Ҳ̸ҳ
- Discord: devilclass
- Has thanked: 36 times
- Been thanked: 594 times
- Contact:
glow e pe steag doar
Code: Select all
/*
* _______ _ _ __ __
* | _____/ | | | | \ \ __ / /
* | | | | | | | | / \ | |
* | | | |____| | | |/ __ \| |
* | | ___ | ______ | | / \ |
* | | |_ | | | | | | / \ |
* | | | | | | | | | | | |
* | |____| | | | | | | | | |
* |_______/ |_| |_| \_/ \_/
*
*
*
* Last Edited: 08-25-08
*
* ============
* Changelog:
* ============
*
* v3.1b
* -Flag Holders no longer get spawn protection
*
* v3.1a
* -de_ map objective respawn bug hard-fix
* -cs_ map objective respawn bug fix
* -Minor fixes
*
* v3.1
* -Added Infinite Ammo
* -Added Random option to weapons menu
* -Optimized amx_ctf_on function
*
* v3.0
* -Rewrite #2
*
* v2.0
* -Rewrite
*
* v1.0
* -Initial Release
*
*/
#define VERSION "3.1b"
#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <cstrike>
#include <csx>
#include <fakemeta_util>
#pragma tabsize 0
//Remove the '//' on the next line for AMXX 1.76d compadability.
//#define amxx176d
//Max Distance from player->flag for touch to occur
#define PICKUP_DISTANCE 100.0
#define MAX_OBJECTIVES 10
#define MAX_OBJ_TYPES 8
//CTF CS Weapon Constants
#define CTF_SCOUT 1 //a
#define CTF_XM1014 2 //b
#define CTF_MAC10 4 //c
#define CTF_AUG 8 //d
#define CTF_UMP45 16 //e
#define CTF_SG550 32 //f
#define CTF_GALIL 64 //g
#define CTF_FAMAS 128 //h
#define CTF_AWP 256 //i
#define CTF_MP5NAVY 512 //j
#define CTF_M249 1024 //k
#define CTF_M3 2048 //l
#define CTF_M4A1 4096 //m
#define CTF_TMP 8192 //n
#define CTF_G3SG1 16384 //o
#define CTF_SG552 32768 //p
#define CTF_AK47 65536 //q
#define CTF_P90 131072 //r
#define CTF_P228 262144 //s
#define CTF_ELITE 524288 //t
#define CTF_FIVESEVEN 1048576 //u
#define CTF_USP 2097152 //v
#define CTF_GLOCK18 4194304 //w
#define CTF_DEAGLE 8388608 //x
#define CTF_VEST 16777216//y
#define CTF_VESTHELM 33554432//z
static const weapon_names[26][16] =
{
"Scout",
"XM1014",
"Mac10",
"Aug",
"UMP",
"SG550",
"Galil",
"Famas",
"AWP",
"MP5Navy",
"M249",
"M3",
"M4A1",
"TMP",
"G3SG1",
"SG552",
"AK47",
"P90",
"P228",
"Elite",
"Fiveseven",
"USP",
"Glock18",
"Deagle",
"VEST",
"VESTHELM"
}
//Map Objective Removal
new num_objectives
new Float:objective[MAX_OBJECTIVES][3]
new objective_type[MAX_OBJECTIVES]
new objective_solidity[MAX_OBJECTIVES]
new Float:objectiveminsize[MAX_OBJECTIVES][3]
new Float:objectivemaxsize[MAX_OBJECTIVES][3]
new bool:give_c4
static const map_objectives[MAX_OBJ_TYPES][24] =
{
"func_bomb_target",
"func_escapezone",
"func_hostage_rescue",
"func_vip_safetyzone",
"hostage_entity",
"info_bomb_target",
"info_hostage_rescue",
"info_vip_start"
}
//Map Objective Removal - de_ bug fix
new weapon[33][31]
new CsArmorType:armortype[33]
new armoramount[33]
new bool:killing
new WeaponNames[31][] =
{
"", //Blank
"weapon_p228",
"", //Nothing
"weapon_scout",
"weapon_hegrenade",
"weapon_xm1014",
"", //C4
"weapon_mac10",
"weapon_aug",
"weapon_smokegrenade",
"weapon_elite",
"weapon_fiveseven",
"weapon_ump45",
"weapon_sg550",
"weapon_galil",
"weapon_famas",
"weapon_usp",
"weapon_glock18",
"weapon_awp",
"weapon_mp5navy",
"weapon_m249",
"weapon_m3",
"weapon_m4a1",
"weapon_tmp",
"weapon_g3sg1",
"weapon_flashbang",
"weapon_deagle",
"weapon_sg552",
"weapon_ak47",
"", //Knife
"weapon_p90"
}
//CVAR Pointers
new togglecvar, respawntime, maxcaps, spawnprotection
#if !defined amxx176d
new allowableweapons, nades
#endif
new bool:play_sounds
//Flag
new Float:maxs[2][3] = {{-4800.0,-4800.0,-4800.0},{-4800.0,-4800.0,-4800.0}}
new Float:mins[2][3] = {{4800.0,4800.0,4800.0},{4800.0,4800.0,4800.0}}
new I_max[2][3]
new I_min[2][3]
// static const holo_model[] = "models/holo.mdl"
static const blue_flag_model[] = "models/blue_flag.mdl"
static const red_flag_model[] = "models/red_flag.mdl"
static const flag_captured[] = "PVPFlagCaptured.mp3"
static const flag_returned[] = "PVPFlagReturned.mp3"
static const flag_taken[] = "PVPFlagTaken.mp3"
new beamsprite
new flag_holder[2]
new flagstand_ents[2]
new bool:is_in_safezone[33]
new TScore, CTScore
new saytext_msgid
new maxplayers
//Weapon Menu
new bool:firsttime[33]
new bool:ask[33]
new weapon_picked[2][33]
new cur_offset[33]
new options_on_menu[8][33]
//Voting
new voterounddelay, votecvar, votelength, votedelay
new bool:roundend
new bool:voting
new bool:voted
new yes, no
public plugin_init()
{
register_plugin("GHW Capture The Flag",VERSION,"GHW_Chronic")
togglecvar = register_cvar("ctf_on","1")
#if defined amxx176d
register_cvar("ctf_weapons","abcdefghijklmnopqrstuvwxyz")
#else
allowableweapons = register_cvar("ctf_weapons","abcdefghijklmnopqrstuvwxyz")
#endif
#if defined amxx176d
register_cvar("ctf_nades","hhff")
#else
nades = register_cvar("ctf_nades","hhff")
#endif
respawntime = register_cvar("ctf_respawntime","3.0")
maxcaps = register_cvar("ctf_maxcaps","25")
votecvar = register_cvar("ctf_vote","1")
votelength = register_cvar("ctf_votelength","20.0")
votedelay = register_cvar("ctf_votedelay","180.0")
voterounddelay = register_cvar("ctf_voterounddelay","5.0")
spawnprotection = register_cvar("ctf_spawnprotection","1")
//register_clcmd("say /spawnme","respawn_player")
//register_clcmd("say_team /spawnme","respawn_player")
register_clcmd("say /guns","cmd_guns")
register_clcmd("say_team /guns","cmd_guns")
register_clcmd("say guns","cmd_guns")
register_clcmd("say_team guns","cmd_guns")
register_clcmd("say /ctfvote","say_vote_hook")
register_clcmd("say_team /ctfvote","say_vote_hook")
register_concmd("amx_ctf_addweap","cmd_addweap",ADMIN_BAN,"<Weapon> Un-Restricts a weapon from the weapons menu.")
register_concmd("amx_ctf_removeweap","cmd_delweap",ADMIN_BAN,"<Weapon> Restricts a weapon from the weapons menu.")
register_concmd("amx_ctf_set_tflag","cmd_set_tflag",ADMIN_BAN,"Sets your current location to the new T Flag Spawn Location.")
register_concmd("amx_ctf_set_ctflag","cmd_set_ctflag",ADMIN_BAN,"Sets your current location to the new CT Flag Spawn Location.")
register_concmd("amx_ctf_off","cmd_off",ADMIN_BAN,"Turn CTF Off")
register_concmd("amx_ctf_on","cmd_on",ADMIN_BAN,"Turn CTF On")
register_menucmd(register_menuid("WeaponMethodMenu"),(1<<0)|(1<<1)|(1<<2),"weapon_method_pushed")
register_menucmd(register_menuid("PrimaryWeaponSelect"),(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9),"prim_weapons_pushed")
register_menucmd(register_menuid("SecWeaponSelect"),(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7),"sec_weapons_pushed")
register_menucmd(register_menuid("ctfvote"),(1<<0)|(1<<1), "Key_Hook")
register_forward(FM_Think,"FM_Think_Hook")
register_forward(FM_PlayerPreThink,"FM_PlayerPreThink_Hook")
register_forward(FM_SetModel,"Hook_SetModel",1)
register_event("DeathMsg","DeathMsg","a")
register_event("SendAudio","endround","a","2=%!MRAD_terwin","2=%!MRAD_ctwin","2=%!MRAD_rounddraw")
register_logevent("newround",2,"1=Round_Start")
saytext_msgid = get_user_msgid("SayText")
maxplayers = get_maxplayers()
if(get_pcvar_num(togglecvar))
{
ctf_on()
}
}
/*
cmd_delweap cmd_addweap
*/
public cmd_delweap(id,level,cid)
{
if(!cmd_access(id,level,cid,2))
{
return PLUGIN_HANDLED
}
new arg[32]
read_argv(1,arg,31)
new cvar_value[32]
#if defined amxx176d
get_cvar_string("ctf_weapons",cvar_value,31)
#else
get_pcvar_string(allowableweapons,cvar_value,31)
#endif
new flags = read_flags(cvar_value)
for(new i=0;i<26;i++)
{
if(equali(arg,weapon_names[i]))
{
new remove_flag = power(2,i)
if(flags & remove_flag)
{
console_print(id,"[AMXX] Removing weapon %s from the choice list.",weapon_names[i])
flags -= remove_flag
get_flags(flags,cvar_value,31)
set_cvar_string("ctf_weapons",cvar_value)
}
else
{
console_print(id,"[AMXX] Weapon %s is already off choice list.",weapon_names[i])
}
break;
}
}
return PLUGIN_HANDLED
}
public cmd_addweap(id,level,cid)
{
if(!cmd_access(id,level,cid,2))
{
return PLUGIN_HANDLED
}
new arg[32]
read_argv(1,arg,31)
new cvar_value[32]
#if defined amxx176d
get_cvar_string("ctf_weapons",cvar_value,31)
#else
get_pcvar_string(allowableweapons,cvar_value,31)
#endif
for(new i=0;i<26;i++)
{
if(equali(arg,weapon_names[i]))
{
new flags = read_flags(cvar_value)
new add_flag = power(2,i)
if(!(flags & add_flag))
{
console_print(id,"[AMXX] Adding weapon %s to the choice list.",weapon_names[i])
flags += add_flag
get_flags(flags,cvar_value,31)
set_cvar_string("ctf_weapons",cvar_value)
}
else
{
console_print(id,"[AMXX] Weapon %s is already on choice list.",weapon_names[i])
}
break;
}
}
return PLUGIN_HANDLED
}
/*
Respawn on Team Select
*/
public client_putinserver(id)
{
set_task(1.0,"catch_jointeam",id,"",0,"b")
ask[id] = true
firsttime[id] = true
}
public catch_jointeam(id)
{
if(get_pcvar_num(togglecvar) && is_user_connected(id))
{
static CsTeams:team
team = cs_get_user_team(id)
if(team==CS_TEAM_T || team==CS_TEAM_T)
{
remove_task(id)
respawn_player(id)
}
}
else
{
remove_task(id)
}
}
/*
Base Respawn Code
*/
public respawn_player(id)
{
if(get_pcvar_num(togglecvar) && is_user_connected(id))
{
//Make the engine think he is spawning
set_pev(id,pev_deadflag,DEAD_RESPAWNABLE)
set_pev(id,pev_iuser1,0)
dllfunc(DLLFunc_Think,id)
//Move his body so if corpse is created it is not in map
engfunc(EngFunc_SetOrigin,id,Float:{-4800.0,-4800.0,-4800.0})
//Actual Spawn
set_task(0.5,"spawnagain",id)
}
}
public spawnagain(id)
{
//Make sure he didn't disconnect in the 0.5 seconds that have passed.
if(is_user_connected(id))
{
//Spawn player
spawn(id)
dllfunc(DLLFunc_Spawn,id)
set_task(1.0,"weapon_method_menu",id)
}
}
/*
CSDM Style weapons menu
*/
public weapon_method_menu(id)
{
if(is_user_bot(id))
{
weapon_picked[0][id] = 16
weapon_picked[1][id] = 23
give_weapons(id)
}
else if(firsttime[id])
{
firsttime[id] = false
prim_weapons_menu(id,0)
}
else
{
cur_offset[id] = 0
if(ask[id])
{
show_menu(id,(1<<0)|(1<<1)|(1<<2),"Weapon Selection Method^n^n1. Last Guns^n2. Last Guns + Save^n3. New Guns",-1,"WeaponMethodMenu")
}
else
{
give_weapons(id)
}
}
}
public weapon_method_pushed(id,key)
{
switch(key)
{
case 0:
{
ask[id] = true
give_weapons(id)
}
case 1:
{
new string[200]
format(string,199,"[red][CTF][/red] Type [green]guns[/green] to re-activate the gun menu.")
show_colored_message(id,string,199)
ask[id] = false
give_weapons(id)
}
case 2:
{
ask[id] = true
prim_weapons_menu(id,0)
}
}
return ;
}
public prim_weapons_menu(id,offset)
{
if(offset<0) offset = 0
new cvar_value[32]
#if defined amxx176d
get_cvar_string("ctf_weapons",cvar_value,31)
#else
get_pcvar_string(allowableweapons,cvar_value,31)
#endif
new flags = read_flags(cvar_value)
new keys, curnum, menu[2048]
for(new i=offset;i<19;i++)
{
if(i==18)
{
options_on_menu[curnum][id] = 24
keys += (1<<curnum)
curnum++
format(menu,2047,"%s^n%d. Random",menu,curnum)
break;
}
else if(flags & power(2,i))
{
options_on_menu[curnum][id] = i
keys += (1<<curnum)
curnum++
format(menu,2047,"%s^n%d. %s",menu,curnum,weapon_names[i])
if(curnum==8)
break;
}
}
format(menu,2047,"\ySelect Primary Weapon:\w^n^n%s^n",menu)
if(curnum==8 && offset<12)
{
keys += (1<<8)
format(menu,2047,"%s^n9. Next",menu)
}
if(offset)
{
keys += (1<<9)
format(menu,2047,"%s^n0. Back",menu)
}
show_menu(id,keys,menu,-1,"PrimaryWeaponSelect")
}
public prim_weapons_pushed(id,key)
{
if(key<8)
{
weapon_picked[0][id] = options_on_menu[key][id]
cur_offset[id] = 0
sec_weapons_menu(id,0)
}
else
{
if(key==8)
cur_offset[id] += 8
if(key==9)
cur_offset[id] -= 8
prim_weapons_menu(id,cur_offset[id])
}
return ;
}
public sec_weapons_menu(id,offset)
{
if(offset<0) offset = 0
new cvar_value[32]
#if defined amxx176d
get_cvar_string("ctf_weapons",cvar_value,31)
#else
get_pcvar_string(allowableweapons,cvar_value,31)
#endif
new flags = read_flags(cvar_value)
new keys, curnum, menu[2048]
for(new i=18;i<24;i++)
{
if(flags & power(2,i))
{
options_on_menu[curnum][id] = i
keys += (1<<curnum)
curnum++
format(menu,2047,"%s^n%d. %s",menu,curnum,weapon_names[i])
}
}
options_on_menu[curnum][id] = 25
keys += (1<<curnum)
curnum++
format(menu,2047,"%s^n%d. Random",menu,curnum)
format(menu,2047,"\ySelect Secondary Weapon:\w^n^n%s",menu)
show_menu(id,keys,menu,-1,"SecWeaponSelect")
}
public sec_weapons_pushed(id,key)
{
if(key<8)
{
weapon_picked[1][id] = options_on_menu[key][id]
}
give_weapons(id)
return ;
}
public give_weapons(id)
{
strip_user_weapons(id)
give_item(id,"weapon_knife")
new weapon[32]
new csw = csw_contant(weapon_picked[0][id])
get_weaponname(csw,weapon,31)
give_item(id,weapon)
cs_set_user_bpammo(id,csw,999)
csw = csw_contant(weapon_picked[1][id])
get_weaponname(csw,weapon,31)
give_item(id,weapon)
cs_set_user_bpammo(id,csw,999)
#if defined amxx176d
get_cvar_string("ctf_nades",weapon,31)
#else
get_pcvar_string(nades,weapon,31)
#endif
new he, flash, smoke
for(new i=0;i<strlen(weapon);i++)
{
switch(weapon[i])
{
case 'h': he++
case 'f': flash++
case 's': smoke++
}
}
if(he) give_item(id,"weapon_hegrenade"), cs_set_user_bpammo(id,CSW_HEGRENADE,he)
if(flash) give_item(id,"weapon_flashbang"), cs_set_user_bpammo(id,CSW_FLASHBANG,flash)
if(smoke) give_item(id,"weapon_smokegrenade"), cs_set_user_bpammo(id,CSW_SMOKEGRENADE,smoke)
#if defined amxx176d
get_cvar_string("ctf_weapons",weapon,31)
#else
get_pcvar_string(allowableweapons,weapon,31)
#endif
new flags = read_flags(weapon)
if(flags & CTF_VESTHELM) cs_set_user_armor(id,100,CS_ARMOR_VESTHELM)
else if(flags & CTF_VEST) cs_set_user_armor(id,100,CS_ARMOR_KEVLAR)
}
public csw_contant(weapon)
{
new num = 29
switch(weapon)
{
case 0: num = 3
case 1: num = 5
case 2: num = 7
case 3: num = 8
case 4: num = 12
case 5: num = 13
case 6: num = 14
case 7: num = 15
case 8: num = 18
case 9: num = 19
case 10: num = 20
case 11: num = 21
case 12: num = 22
case 13: num = 23
case 14: num = 24
case 15: num = 27
case 16: num = 28
case 17: num = 30
case 18: num = 1
case 19: num = 10
case 20: num = 11
case 21: num = 16
case 22: num = 17
case 23: num = 26
case 24:
{
new s_weapon[32]
#if defined amxx176d
get_cvar_string("ctf_weapons",s_weapon,31)
#else
get_pcvar_string(allowableweapons,s_weapon,31)
#endif
new flags = read_flags(s_weapon)
do
{
num = random_num(0,18)
if(!(num & flags))
{
num = -1
}
}
while(num==-1)
num = csw_contant(num)
}
case 25:
{
new s_weapon[32]
#if defined amxx176d
get_cvar_string("ctf_weapons",s_weapon,31)
#else
get_pcvar_string(allowableweapons,s_weapon,31)
#endif
new flags = read_flags(s_weapon)
do
{
num = random_num(18,23)
if(!(num & flags))
{
num = -1
}
}
while(num==-1)
num = csw_contant(num)
}
}
return num;
}
public cmd_guns(id)
{
ask[id] = true
weapon_method_menu(id)
}
/*
Weapon Despawn
*/
public Hook_SetModel(ent,model[])
{
if(get_pcvar_num(togglecvar) && pev_valid(ent) && ent>maxplayers)
{
if(containi(model,"models/w_")==0)
{
if(containi(model,"nade")!=-1 || containi(model,"flash")!=-1)
{
set_task(2.0,"remove_nade_ent",ent,model,31)
}
else
{
set_task(0.1,"remove_ent",ent,model,31)
}
}
}
}
public remove_ent(model[32],ent)
{
if(pev_valid(ent))
{
static model2[32]
pev(ent,pev_model,model2,31)
if(equal(model,model2)) engfunc(EngFunc_RemoveEntity,ent)
}
}
public remove_nade_ent(model[32],ent)
{
if(pev_valid(ent))
{
static model2[32]
pev(ent,pev_model,model2,31)
if(equal(model,model2))
{
static Float:velocity[3]
pev(ent,pev_velocity,velocity)
if(!velocity[0] && !velocity[1] && !velocity[2])
set_pev(ent,pev_flags,FL_KILLME)
}
}
}
/*
Base Setup - Spawn Protection & Flag Spawn
*/
public plugin_precache()
{
// precache_model(holo_model)
precache_model(red_flag_model)
precache_model(blue_flag_model)
beamsprite = precache_model("sprites/dot.spr")
precache_model("models/scientist.mdl")
if(get_pcvar_num(register_cvar("ctf_sounds","1")))
{
play_sounds = true
precache_sound(flag_captured)
precache_sound(flag_returned)
precache_sound(flag_taken)
}
}
public cmd_set_tflag(id,level,cid)
{
if(!cmd_access(id,level,cid,1))
{
return PLUGIN_HANDLED
}
setflagspawn(id,0)
console_print(id,"[CTF] T Flag Spawn Location Saved.")
return PLUGIN_HANDLED
}
public cmd_set_ctflag(id,level,cid)
{
if(!cmd_access(id,level,cid,1))
{
return PLUGIN_HANDLED
}
setflagspawn(id,1)
console_print(id,"[CTF] CT Flag Spawn Location Saved.")
return PLUGIN_HANDLED
}
public setflagspawn(id,team)
{
new bool:readfromfile = false
new configfile[200]
get_configsdir(configfile,199)
format(configfile,199,"%s/CTF_FlagSpawns.ini",configfile)
new mapname[32]
get_mapname(mapname,31)
new string[200]
format(string,199,"%s | T | ",mapname)
new Float:origin[3], Float:origin2[3]
switch(team)
{
case 0:
{
pev(flag_holder[1],pev_origin,origin2)
pev(id,pev_origin,origin)
engfunc(EngFunc_SetOrigin,flag_holder[0],origin)
}
case 1:
{
pev(flag_holder[0],pev_origin,origin)
pev(id,pev_origin,origin2)
engfunc(EngFunc_SetOrigin,flag_holder[1],origin2)
}
}
if(file_exists(configfile))
{
new read[200], trash, Fsize = file_size(configfile,1)
for(new i=0;i<Fsize;i++)
{
read_file(configfile,i,read,199,trash)
if(containi(read,string)==0)
{
format(string,199,"%s | T | %f %f %f | CT | %f %f %f",mapname,origin[0],origin[1],origin[2],origin2[0],origin2[1],origin2[2])
write_file(configfile,string,i)
readfromfile = true
break;
}
}
}
if(!readfromfile)
{
format(string,199,"%s | T | %f %f %f | CT | %f %f %f",mapname,origin[0],origin[1],origin[2],origin2[0],origin2[1],origin2[2])
write_file(configfile,string,-1)
}
}
public find_minmaxs()
{
new Float:origin[3], i
new ent = engfunc(EngFunc_FindEntityByString,maxplayers,"classname","info_player_deathmatch")
while(ent)
{
if(pev_valid(ent))
{
pev(ent,pev_origin,origin)
for(i=0;i<3;i++)
{
if(origin[i] < mins[0][i])
mins[0][i] = origin[i]
if(origin[i] > maxs[0][i])
maxs[0][i] = origin[i]
}
}
ent = engfunc(EngFunc_FindEntityByString,ent,"classname","info_player_deathmatch")
}
ent = engfunc(EngFunc_FindEntityByString,maxplayers,"classname","info_player_start")
while(ent)
{
if(pev_valid(ent))
{
pev(ent,pev_origin,origin)
for(i=0;i<3;i++)
{
if(origin[i] < mins[1][i])
mins[1][i] = origin[i]
if(origin[i] > maxs[1][i])
maxs[1][i] = origin[i]
}
}
ent = engfunc(EngFunc_FindEntityByString,ent,"classname","info_player_start")
}
maxs[0][2] += 70.0
mins[1][2] -= 70.0
maxs[0][0] += 32.0
mins[1][0] -= 32.0
maxs[0][1] += 32.0
mins[1][1] -= 32.0
new Float:T_origin[3], Float:CT_origin[3]
get_flagstand_origins(CT_origin,T_origin)
ent = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
set_pev(ent,pev_classname,"Flagstand_Model")
// engfunc(EngFunc_SetModel,ent,holo_model)
set_pev(ent,pev_effects,EF_BRIGHTLIGHT)
set_pev(ent,pev_renderfx,kRenderFxGlowShell)
set_pev(ent,pev_rendercolor,Float:{255.0,0.0,0.0})
set_pev(ent,pev_rendermode,kRenderNormal)
set_pev(ent,pev_renderamt,35.0)
set_pev(ent,pev_gaitsequence,0)
set_pev(ent,pev_sequence,0)
set_pev(ent,pev_framerate,0.7)
engfunc(EngFunc_SetOrigin,ent,T_origin)
engfunc(EngFunc_DropToFloor,ent)
pev(ent,pev_origin,origin)
origin[2] += 36.0
engfunc(EngFunc_SetOrigin,ent,origin)
set_pev(ent,pev_nextthink,1.0)
flagstand_ents[0] = ent
flag_holder[0] = ent
ent = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
set_pev(ent,pev_classname,"Flagstand_Model")
// engfunc(EngFunc_SetModel,ent,holo_model)
set_pev(ent,pev_effects,EF_BRIGHTLIGHT)
set_pev(ent,pev_renderfx,kRenderFxGlowShell)
set_pev(ent,pev_rendercolor,Float:{0.0,0.0,255.0})
set_pev(ent,pev_rendermode,kRenderNormal)
set_pev(ent,pev_renderamt,35.0)
set_pev(ent,pev_gaitsequence,0)
set_pev(ent,pev_sequence,0)
set_pev(ent,pev_framerate,0.7)
engfunc(EngFunc_SetOrigin,ent,CT_origin)
engfunc(EngFunc_DropToFloor,ent)
pev(ent,pev_origin,origin)
origin[2] += 36.0
engfunc(EngFunc_SetOrigin,ent,origin)
set_pev(ent,pev_nextthink,1.0)
flagstand_ents[1] = ent
flag_holder[1] = ent
for(new i=0;i<2;i++)
{
for(new j=0;j<3;j++)
{
I_max[i][j] = floatround(maxs[i][j])
I_min[i][j] = floatround(mins[i][j])
}
}
set_task(5.0,"create_beamsprites")
set_task(10.0,"create_beamsprites",1500,"",0,"b")
ent = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
set_pev(ent,pev_classname,"CTF_T_Flag")
engfunc(EngFunc_SetModel,ent,red_flag_model)
set_pev(ent,pev_movetype,MOVETYPE_FLY)
FM_Think_Hook(ent)
ent = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
set_pev(ent,pev_classname,"CTF_CT_Flag")
engfunc(EngFunc_SetModel,ent,blue_flag_model)
set_pev(ent,pev_movetype,MOVETYPE_FLY)
FM_Think_Hook(ent)
}
public get_flagstand_origins(Float:CT_origin[3],Float:T_origin[3])
{
new i
new Float:midpoint[2][3]
for(i=0;i<2;i++)
{
for(new j=0;j<3;j++)
{
midpoint[i][j] = (maxs[i][j] + mins[i][j]) / 2.0
}
}
new configfile[200]
get_configsdir(configfile,199)
format(configfile,199,"%s/CTF_FlagSpawns.ini",configfile)
T_origin[0] = midpoint[0][0]
T_origin[1] = midpoint[0][1]
T_origin[2] = midpoint[0][2]
CT_origin[0] = midpoint[1][0]
CT_origin[1] = midpoint[1][1]
CT_origin[2] = midpoint[1][2]
new mapname[32]
get_mapname(mapname,31)
new string[200]
format(string,199,"%s | T | ",mapname)
if(file_exists(configfile))
{
new read[200], trash, Fsize = file_size(configfile,1)
for(new i=0;i<Fsize;i++)
{
read_file(configfile,i,read,199,trash)
if(containi(read,string)==0)
{
format(read,199,read[strlen(string)])
replace_all(read,199," | CT |","")
strbreak(read,string,199,read,199)
T_origin[0] = str_to_float(string)
strbreak(read,string,199,read,199)
T_origin[1] = str_to_float(string)
strbreak(read,string,199,read,199)
T_origin[2] = str_to_float(string)
strbreak(read,string,199,read,199)
CT_origin[0] = str_to_float(string)
strbreak(read,string,199,read,199)
CT_origin[1] = str_to_float(string)
strbreak(read,string,199,read,199)
CT_origin[2] = str_to_float(string)
break;
}
}
}
return ;
}
public FM_Think_Hook(ent)
{
if(pev_valid(ent))
{
static classname[32]
pev(ent,pev_classname,classname,31)
if(equal(classname,"Flagstand_Model"))
{
static Float:angles[3]
pev(ent,pev_angles,angles)
angles[1] += 0.3
while(angles[1]>180.0) angles[1] -= 360.0
set_pev(ent,pev_angles,angles)
set_pev(ent,pev_nextthink,1.0)
}
else if(equal(classname,"CTF_T_Flag"))
{
Flag_Think_Hook(ent,0)
set_pev(ent,pev_nextthink,1.0)
}
else if(equal(classname,"CTF_CT_Flag"))
{
Flag_Think_Hook(ent,1)
set_pev(ent,pev_nextthink,1.0)
}
}
}
public create_beamsprites()
{
if(get_pcvar_num(spawnprotection))
{
//T Base
create_beam_message(I_max[0][0],I_max[0][1],I_max[0][2],I_max[0][0],I_min[0][1],I_max[0][2],255,0)
//create_beam_message(I_max[0][0],I_max[0][1],I_min[0][2],I_max[0][0],I_min[0][1],I_min[0][2],255,0)
create_beam_message(I_max[0][0],I_max[0][1],(I_max[0][2] + I_min[0][2]) / 2,I_max[0][0],I_min[0][1],(I_max[0][2] + I_min[0][2]) / 2,255,0)
create_beam_message(I_max[0][0],I_max[0][1],I_max[0][2],I_min[0][0],I_max[0][1],I_max[0][2],255,0)
//create_beam_message(I_max[0][0],I_max[0][1],I_min[0][2],I_min[0][0],I_max[0][1],I_min[0][2],255,0)
create_beam_message(I_max[0][0],I_max[0][1],(I_max[0][2] + I_min[0][2]) / 2,I_min[0][0],I_max[0][1],(I_max[0][2] + I_min[0][2]) / 2,255,0)
create_beam_message(I_min[0][0],I_max[0][1],I_max[0][2],I_min[0][0],I_min[0][1],I_max[0][2],255,0)
//create_beam_message(I_min[0][0],I_max[0][1],I_min[0][2],I_min[0][0],I_min[0][1],I_min[0][2],255,0)
create_beam_message(I_min[0][0],I_max[0][1],(I_max[0][2] + I_min[0][2]) / 2,I_min[0][0],I_min[0][1],(I_max[0][2] + I_min[0][2]) / 2,255,0)
create_beam_message(I_min[0][0],I_min[0][1],I_max[0][2],I_max[0][0],I_min[0][1],I_max[0][2],255,0)
//create_beam_message(I_min[0][0],I_min[0][1],I_min[0][2],I_max[0][0],I_min[0][1],I_min[0][2],255,0)
create_beam_message(I_min[0][0],I_min[0][1],(I_max[0][2] + I_min[0][2]) / 2,I_max[0][0],I_min[0][1],(I_max[0][2] + I_min[0][2]) / 2,255,0)
//CT Base
create_beam_message(I_max[1][0],I_max[1][1],I_max[1][2],I_max[1][0],I_min[1][1],I_max[1][2],0,255)
//create_beam_message(I_max[1][0],I_max[1][1],I_min[1][2],I_max[1][0],I_min[1][1],I_min[1][2],255,0)
create_beam_message(I_max[1][0],I_max[1][1],(I_max[1][2] + I_min[1][2]) / 2,I_max[1][0],I_min[1][1],(I_max[1][2] + I_min[1][2]) / 2,0,255)
create_beam_message(I_max[1][0],I_max[1][1],I_max[1][2],I_min[1][0],I_max[1][1],I_max[1][2],0,255)
//create_beam_message(I_max[1][0],I_max[1][1],I_min[1][2],I_min[1][0],I_max[1][1],I_min[1][2],255,0)
create_beam_message(I_max[1][0],I_max[1][1],(I_max[1][2] + I_min[1][2]) / 2,I_min[1][0],I_max[1][1],(I_max[1][2] + I_min[1][2]) / 2,0,255)
create_beam_message(I_min[1][0],I_max[1][1],I_max[1][2],I_min[1][0],I_min[1][1],I_max[1][2],0,255)
//create_beam_message(I_min[1][0],I_max[1][1],I_min[1][2],I_min[1][0],I_min[1][1],I_min[1][2],255,0)
create_beam_message(I_min[1][0],I_max[1][1],(I_max[1][2] + I_min[1][2]) / 2,I_min[1][0],I_min[1][1],(I_max[1][2] + I_min[1][2]) / 2,0,255)
create_beam_message(I_min[1][0],I_min[1][1],I_max[1][2],I_max[1][0],I_min[1][1],I_max[1][2],0,255)
//create_beam_message(I_min[1][0],I_min[1][1],I_min[1][2],I_max[1][0],I_min[1][1],I_min[1][2],255,0)
create_beam_message(I_min[1][0],I_min[1][1],(I_max[1][2] + I_min[1][2]) / 2,I_max[1][0],I_min[1][1],(I_max[1][2] + I_min[1][2]) / 2,0,255)
}
}
public create_beam_message(origin1_0,origin1_1,origin1_2,origin2_0,origin2_1,origin2_2,r,b)
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(0) //TE_BEAMPOINTS
write_coord(origin1_0)
write_coord(origin1_1)
write_coord(origin1_2)
write_coord(origin2_0)
write_coord(origin2_1)
write_coord(origin2_2)
write_short(beamsprite)
write_byte(1) // framestart
write_byte(1) // framerate
write_byte(110) // life in 0.1's
write_byte(5) // width
write_byte(0) // noise
write_byte(r)
write_byte(0)
write_byte(b)
write_byte(200) // brightness
write_byte(0) // speed
message_end()
}
public FM_PlayerPreThink_Hook(id)
{
if(is_user_alive(id) && !is_user_bot(id) && get_pcvar_num(spawnprotection) && get_pcvar_num(togglecvar) && id!=flag_holder[0] && id!=flag_holder[1])
{
static Float:origin[3]
pev(id,pev_origin,origin)
if(is_in_safezone[id])
{
new buttons = pev(id,pev_button)
if(buttons & IN_ATTACK) buttons -= IN_ATTACK
if(buttons & IN_ATTACK2) buttons -= IN_ATTACK2
set_pev(id,pev_button,buttons)
buttons = pev(id,pev_oldbuttons)
if(buttons & IN_ATTACK) buttons -= IN_ATTACK
if(buttons & IN_ATTACK2) buttons -= IN_ATTACK2
set_pev(id,pev_oldbuttons,buttons)
if(!((origin[0]<=maxs[0][0] && origin[0]>=mins[0][0] && origin[1]<=maxs[0][1] && origin[1]>=mins[0][1]) || (origin[0]<=maxs[1][0] && origin[0]>=mins[1][0] && origin[1]<=maxs[1][1] && origin[1]>=mins[1][1])))
{
unsafezone(id)
}
}
else if((origin[0]<=maxs[0][0] && origin[0]>=mins[0][0] && origin[1]<=maxs[0][1] && origin[1]>=mins[0][1]) || (origin[0]<=maxs[1][0] && origin[0]>=mins[1][0] && origin[1]<=maxs[1][1] && origin[1]>=mins[1][1]))
{
switch(cs_get_user_team(id))
{
case CS_TEAM_T: in_safezone(id,255,0,0)
case CS_TEAM_CT: in_safezone(id,0,0,255)
default: in_safezone(id,0,255,0)
}
}
}
}
public in_safezone(id,r,g,b)
{
set_user_godmode(id,1)
set_user_rendering(id,kRenderFxGlowShell,r,g,b,kRenderTransColor,50)
is_in_safezone[id] = true
message_begin(MSG_ONE,get_user_msgid("ScreenFade"),{0,0,0},id)
write_short(~0)
write_short(~0)
write_short(1<<12)
write_byte(r)
write_byte(g)
write_byte(b)
write_byte(100)
message_end()
new param[3]
param[0] = r
param[1] = g
param[2] = b
if(!task_exists(id + 20000)) set_task(8.0,"reflash",id + 20000,param,3,"b")
set_task(0.5,"reflash",id + 20000,param,3)
}
public reflash(param[3],id)
{
id -= 20000
if(!is_in_safezone[id] || !is_user_alive(id))
{
remove_task(id + 20000)
}
else
{
message_begin(MSG_ONE,get_user_msgid("ScreenFade"),{0,0,0},id)
write_short(~0)
write_short(~0)
write_short(1<<12)
write_byte(param[0])
write_byte(param[1])
write_byte(param[2])
write_byte(100)
message_end()
}
}
public unsafezone(id)
{
set_user_godmode(id)
set_user_rendering(id,kRenderFxNone,0,0,0,kRenderTransAlpha,255)
is_in_safezone[id] = false
message_begin(MSG_ONE,get_user_msgid("ScreenFade"),{0,0,0},id)
write_short(~0)
write_short(~0)
write_short(1<<12)
write_byte(0)
write_byte(0)
write_byte(0)
write_byte(1)
message_end()
remove_task(id + 20000)
}
/*
Flag Think
*/
public Flag_Think_Hook(ent,team)
{
if(pev_valid(flag_holder[team]))
{
static Float:origin[3], Float:origin2[3]
pev(flag_holder[team],pev_origin,origin)
origin[2] += 16.0
pev(ent,pev_origin,origin2)
if(get_distance_f(origin,origin2)>50.0)
engfunc(EngFunc_SetOrigin,ent,origin)
if(flag_holder[team]!=flagstand_ents[team] && flag_holder[(team + 1) % 2]==flagstand_ents[(team + 1) % 2])
{
pev(flagstand_ents[(team + 1) % 2],pev_origin,origin)
if(get_distance_f(origin2,origin)<PICKUP_DISTANCE)
{
new string[200]
new cvar_value = get_pcvar_num(maxcaps)
new ministring[4]
if(team)
{
ministring = "CT"
TScore++
if(cvar_value<=TScore)
{
format(string,199,"[red][CTF][/red] Game Over. [green]Ts[/green] won.")
show_colored_message(0,string,199)
endmap()
}
}
else
{
ministring = "T"
CTScore++
if(cvar_value<=CTScore)
{
format(string,199,"[red][CTF][/red] Game Over. [green]CTs[/green] won.")
show_colored_message(0,string,199)
endmap()
}
}
new name[32]
get_user_name(flag_holder[team],name,31)
format(string,199,"[red][CTF][/red] [green]%s[/green] captured the [green]%s[/green] flag.",name,ministring)
if(play_sounds) client_cmd(0,"mp3 play sound/%s",flag_captured)
show_colored_message(0,string,199)
flag_holder[team] = flagstand_ents[team]
write_hudmsg()
return ;
}
}
pev(flag_holder[team],pev_velocity,origin)
set_pev(ent,pev_velocity,origin)
}
if(flag_holder[team]==flagstand_ents[team] || !flag_holder[team])
{
static Float:origin[3]
static Float:flag_origin[3]
pev(ent,pev_origin,flag_origin)
static players[32], num
get_players(players,num,"ach")
for(new i=0;i<num;i++)
{
if(get_user_team(players[i])!=(team + 1))
{
pev(players[i],pev_origin,origin)
if(get_distance_f(origin,flag_origin)<PICKUP_DISTANCE)
{
new ministring[4]
if(team) ministring = "CT"
else ministring = "T"
flag_holder[team] = players[i]
new name[32]
new string[200]
get_user_name(players[i],name,31)
format(string,199,"[red][CTF][/red] [green]%s[/green] picked up the [green]%s[/green] flag.",name,ministring)
if(play_sounds) client_cmd(0,"mp3 play sound/%s",flag_taken)
show_colored_message(0,string,199)
flag_holder[team] = players[i]
write_hudmsg()
unsafezone(players[i])
break;
}
}
else if(!flag_holder[team])
{
pev(players[i],pev_origin,origin)
if(get_distance_f(origin,flag_origin)<PICKUP_DISTANCE)
{
new ministring[4]
if(team) ministring = "CT"
else ministring = "T"
flag_holder[team] = players[i]
new name[32]
new string[200]
get_user_name(players[i],name,31)
format(string,199,"[red][CTF][/red] [green]%s[/green] returned the [green]%s[/green] flag.",name,ministring)
if(play_sounds) client_cmd(0,"mp3 play sound/%s",flag_returned)
show_colored_message(0,string,199)
flag_holder[team] = flagstand_ents[team]
write_hudmsg()
break;
}
}
}
}
return ;
}
public client_disconnect(id)
{
if(read_data(2)==flag_holder[0])
{
flag_holder[0] = 0
new string[200]
format(string,199,"[red][CTF][/red] [green]UNKNOWN[/green] dropped the [green]T[/green] flag.")
if(play_sounds) client_cmd(0,"mp3 play sound/%s",flag_taken)
show_colored_message(0,string,199)
write_hudmsg()
}
else if(read_data(2)==flag_holder[1])
{
flag_holder[1] = 0
new string[200]
format(string,199,"[red][CTF][/red] [green]UNKNOWN[/green] dropped the [green]CT[/green] flag.")
if(play_sounds) client_cmd(0,"mp3 play sound/%s",flag_taken)
show_colored_message(0,string,199)
write_hudmsg()
}
}
public DeathMsg()
{
new victim = read_data(2)
if(is_user_connected(victim))
{
if(victim==flag_holder[0])
{
flag_holder[0] = 0
new name[32]
new string[200]
get_user_name(victim,name,31)
format(string,199,"[red][CTF][/red] [green]%s[/green] dropped the [green]T[/green] flag.",name)
show_colored_message(0,string,199)
write_hudmsg()
}
else if(victim==flag_holder[1])
{
flag_holder[1] = 0
new name[32]
new string[200]
get_user_name(victim,name,31)
format(string,199,"[red][CTF][/red] [green]%s[/green] dropped the [green]CT[/green] flag.",name)
show_colored_message(0,string,199)
write_hudmsg()
}
set_task(get_pcvar_float(respawntime),"respawn_player",victim)
}
}
public show_colored_message(id,string[],maxlen)
{
replace_all(string,maxlen,"[blue]","^x03")
replace_all(string,maxlen,"[/blue]","^x01")
replace_all(string,maxlen,"[red]","^x03")
replace_all(string,maxlen,"[/red]","^x01")
replace_all(string,maxlen,"[green]","^x04")
replace_all(string,maxlen,"[/green]","^x01")
format(string,maxlen,"^x04^x01%s",string)
static q
q++
if(!id)
{
static players[32], num
get_players(players,num,"ch")
for(new i=0;i<num;i++)
{
message_begin(MSG_ONE,saytext_msgid,{0,0,0},players[i])
write_byte(players[i])
write_string(string)
message_end()
}
}
else
{
message_begin(MSG_ONE,saytext_msgid,{0,0,0},id)
write_byte(id)
write_string(string)
message_end()
}
}
public write_hudmsg()
{
new flagloc[32]
if(!flag_holder[0])
{
format(flagloc,31,"On Ground")
}
else if(flag_holder[0]==flagstand_ents[0])
{
format(flagloc,31,"Base")
}
else if(is_user_alive(flag_holder[0]))
{
get_user_name(flag_holder[0],flagloc,31)
}
set_hudmessage(255, 0, 0, -1.0, 0.03, 0, 6.0, 12.0, 0.0, 0.0)
show_hudmessage(0,"[ %d ] T Flag: %s",TScore,flagloc)
if(!flag_holder[1])
{
format(flagloc,31,"On Ground")
}
else if(flag_holder[1]==flagstand_ents[0])
{
format(flagloc,31,"Base")
}
else if(is_user_alive(flag_holder[1]))
{
get_user_name(flag_holder[1],flagloc,31)
}
set_hudmessage(0, 0, 255, -1.0, 0.03, 0, 6.0, 12.0, 0.0, 0.0,3)
show_hudmessage(0,"_^n [ %d ] CT Flag: %s",CTScore,flagloc)
}
public endmap()
{
new trash
new map[32]
new configfile[200]
get_basedir(configfile,199)
format(configfile,199,"%s/maps.ini",configfile)
format(map,31,"de_dust")
if(file_exists(configfile)) read_file(configfile,random_num(0,file_size(configfile,1) - 1),map,31,trash)
if(!is_map_valid(map))
{
if(file_size(configfile,1)<3)
{
server_cmd("amx_map de_dust2;amx_map de_dust2_cz")
}
else
{
set_task(0.1,"endmap")
}
}
else server_cmd("amx_map %s",map)
}
/*
CTF Vote (From v2.0)
*/
public say_vote_hook(id)
{
if(!get_pcvar_num(votecvar))
{
client_print(id,print_chat,"[CTF] Voting disabled")
}
else if(roundend)
{
client_print(id,print_chat,"[CTF] Voting can't start. People are buying.")
}
else if(voting)
{
client_print(id,print_chat,"[CTF] Voting currently in progrss.")
}
else if(voted)
{
client_print(id,print_chat,"[CTF] Can't vote this soon after a vote.")
}
else if(get_pcvar_num(togglecvar))
{
voting=true
voted=true
show_menu(0,(1<<0)|(1<<1),"\bTurn CTF off?^n^n\w1. Yes^n\w2. No",-1,"ctfvote")
set_task(get_pcvar_float(votelength),"voting_over",0)
set_task(get_pcvar_float(votedelay),"voted_over")
}
else
{
voting=true
voted=true
show_menu(0,(1<<0)|(1<<1),"\bTurn CTF on?^n^n\w1. Yes^n\w2. No",-1,"ctfvote")
set_task(get_pcvar_float(votelength),"voting_over",1)
set_task(get_pcvar_float(votedelay),"voted_over")
}
}
public Key_Hook(id,key)
{
if(voting)
{
client_print(id,print_chat,"[CTF] Vote Accepted.")
if(!key) yes++
else no++
}
}
public voting_over(num)
{
if(num)
{
client_print(0,print_chat,"[CTF] Voting to turn CTF on results: Yes: %d | No: %d",yes,no)
if(yes>no)
{
ctf_on()
}
}
else
{
client_print(0,print_chat,"[CTF] Voting to turn CTF off results: Yes: %d | No: %d",yes,no)
if(yes>no)
{
ctf_off()
}
}
yes=0
no=0
voting=false
}
public voted_over()
{
voted=false
}
public endround()
{
roundend = true
set_task(7.0 + get_pcvar_float(voterounddelay),"roundstart")
}
public roundstart()
{
roundend = false
}
/*
Off / On Functions
*/
public ctf_off()
{
set_pcvar_num(togglecvar,0)
remove_task(1234)
remove_task(1500)
engfunc(EngFunc_SetOrigin,flagstand_ents[0],Float:{-4800.0,-4800.0,-4800.0})
engfunc(EngFunc_SetOrigin,flagstand_ents[1],Float:{-4800.0,-4800.0,-4800.0})
flag_holder[0] = flagstand_ents[0]
flag_holder[1] = flagstand_ents[1]
add_objectives()
for(new i=1;i<=32;i++)
{
if(is_user_alive(i) && is_in_safezone[i])
{
unsafezone(i)
}
}
}
public ctf_on()
{
set_pcvar_num(togglecvar,1)
set_task(10.0,"create_beamsprites",1500,"",0,"b")
if(!pev_valid(flagstand_ents[0]) || !pev_valid(flagstand_ents[1]))
{
set_task(0.5,"find_minmaxs")
}
else
{
new Float:T_origin[3], Float:CT_origin[3]
get_flagstand_origins(CT_origin,T_origin)
engfunc(EngFunc_SetOrigin,flagstand_ents[0],T_origin)
engfunc(EngFunc_SetOrigin,flagstand_ents[1],CT_origin)
engfunc(EngFunc_DropToFloor,flagstand_ents[0])
engfunc(EngFunc_DropToFloor,flagstand_ents[1])
pev(flagstand_ents[0],pev_origin,T_origin)
pev(flagstand_ents[1],pev_origin,CT_origin)
T_origin[2] += 36.0
CT_origin[2] += 36.0
engfunc(EngFunc_SetOrigin,flagstand_ents[0],T_origin)
engfunc(EngFunc_SetOrigin,flagstand_ents[1],CT_origin)
}
set_task(10.0,"write_hudmsg",1234,"",0,"b")
remove_objectives()
set_task(10.0,"ctf_restartround")
remove_task(5547)
remove_task(5548)
client_print(0,print_center,"[CTF] CTF Enabled. Round Restarting in 10 seconds.")
}
public ctf_restartround()
{
set_cvar_num("sv_restartround",1)
for(new i=1;i<=32;i++)
{
if(is_user_connected(i))
{
firsttime[i] = true
weapon_method_menu(i)
}
}
}
/*
Off / On Commands
*/
public cmd_off(id,level,cid)
{
if(!cmd_access(id,level,cid,1))
{
return PLUGIN_HANDLED
}
if(get_pcvar_num(togglecvar))
{
console_print(id,"[CTF] CTF Turned Off.")
ctf_off()
new string[200]
format(string,199,"[red][CTF][/red] CTF Turned [green]Off[/green].")
show_colored_message(0,string,199)
}
else
{
console_print(id,"[CTF] CTF Is Already Turned Off.")
}
return PLUGIN_HANDLED
}
public cmd_on(id,level,cid)
{
if(!cmd_access(id,level,cid,1))
{
return PLUGIN_HANDLED
}
if(!get_pcvar_num(togglecvar))
{
console_print(id,"[CTF] CTF Turned On.")
ctf_on()
new string[200]
format(string,199,"[red][CTF][/red] CTF Turned [green]On[/green].")
show_colored_message(0,string,199)
}
else
{
console_print(id,"[CTF] CTF Is Already Turned On.")
}
return PLUGIN_HANDLED
}
/*
Remove Map Objectives
*/
public remove_objectives()
{
new ent
for(new i=0;i<MAX_OBJ_TYPES;i++)
{
ent = engfunc(EngFunc_FindEntityByString,maxplayers,"classname",map_objectives[i])
while(ent)
{
if(pev_valid(ent))
{
objective_type[num_objectives] = i
pev(ent,pev_origin,objective[num_objectives])
pev(ent,pev_size,objectiveminsize[num_objectives],objectivemaxsize[num_objectives])
pev(ent,pev_solid,objective_solidity[num_objectives])
engfunc(EngFunc_RemoveEntity,ent)
num_objectives++
}
ent = engfunc(EngFunc_FindEntityByString,ent,"classname",map_objectives[i])
}
}
give_c4 = false
}
public add_objectives()
{
new ent
for(num_objectives--;num_objectives>=0;num_objectives--)
{
if(objective_type[num_objectives]==0 || objective_type[num_objectives]==5) give_c4 = true
ent = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,map_objectives[objective_type[num_objectives]]))
set_pev(ent,pev_classname,map_objectives[objective_type[num_objectives]])
set_pev(ent,pev_origin,objective[num_objectives])
set_pev(ent,pev_solid,objective_solidity[num_objectives])
engfunc(EngFunc_SetSize,ent,objectiveminsize[num_objectives],objectivemaxsize[num_objectives])
set_pev(ent,pev_size,objectiveminsize[num_objectives],objectivemaxsize[num_objectives])
dllfunc(DLLFunc_Spawn,ent)
dllfunc(DLLFunc_Think,ent)
for(new i=0;i<3;i++)
{
objective[num_objectives][i] = 0.0
objectiveminsize[num_objectives][i] = 0.0
objectivemaxsize[num_objectives][i] = 0.0
}
}
num_objectives=0
}
//All this handles de_ maps - making them re-work if ctf is turned off during runtime.
public newround()
{
if(give_c4) set_task(0.5,"manually_give_c4",5547)
}
public manually_give_c4()
{
if(!get_pcvar_num(togglecvar))
{
new found = 0
static start
if(start<1 || start>maxplayers) start = 1
for(;start<=maxplayers;start++)
{
if(is_user_alive(start) && cs_get_user_team(start)==CS_TEAM_T)
{
found = start
break;
}
}
if(!found)
{
for(start = 0;start<=maxplayers;start++)
{
if(is_user_alive(start) && cs_get_user_team(start)==CS_TEAM_T)
{
found = start
break;
}
}
}
if(found) give_item(found,"weapon_c4")
}
set_task(get_cvar_float("mp_roundtime") * 60.0,"force_endround",5548)
}
public bomb_planted() remove_task(5548)
public force_endround()
{
getweapons()
set_task(0.5,"killum")
}
public getweapons()
{
static i, i2
for(i=1;i<=maxplayers;i++)
{
arrayset(weapon[i],0,31)
if(is_user_alive(i) && cs_get_user_team(i)==CS_TEAM_T)
{
armoramount[i] = cs_get_user_armor(i,armortype[i])
for(i2=1;i2<=30;i2++)
{
if(i2!=2 && i2!=6 && i2!=29)
{
if(user_has_weapon(i,i2))
{
weapon[i][i2] = cs_get_user_bpammo(i,i2)
if(!weapon[i][i2]) weapon[i][i2] = 1
}
}
}
}
}
}
public killum()
{
killing=true
new msgblock = get_msg_block(get_user_msgid("DeathMsg"))
set_msg_block(get_user_msgid("DeathMsg"),BLOCK_SET)
new i
for(i=1;i<=maxplayers;i++)
{
if(is_user_alive(i) && cs_get_user_team(i)==CS_TEAM_T)
{
user_kill(i)
client_print(i,print_chat,"[AMXX] You Failed to complete map objective. Respawning.")
set_task(4.0,"spawnum",i)
}
}
set_msg_block(get_user_msgid("DeathMsg"),msgblock)
killing=false
set_task(4.5,"giveweapons")
}
public plugin_log()
{
if(killing)
{
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
public spawnum(id)
{
cs_set_user_deaths(id,cs_get_user_deaths(id) - 1)
set_user_frags(id,get_user_frags(id) + 1)
dllfunc(DLLFunc_Spawn,id)
}
public giveweapons()
{
new i, i2
for(i=1;i<=maxplayers;i++)
{
if(is_user_alive(i) && cs_get_user_team(i)==CS_TEAM_T)
{
cs_set_user_armor(i,armoramount[i],armortype[i])
strip_user_weapons(i)
for(i2=1;i2<=30;i2++)
{
if(i2!=2 && i2!=6 && i2!=29)
{
if(weapon[i][i2])
{
give_item(i,WeaponNames[i2])
cs_set_user_bpammo(i,i2,weapon[i][i2])
}
}
}
give_item(i,"weapon_knife")
}
}
}
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
- DozerRadu
- Membru, skill +1
- Posts: 114
- Joined: 25 Jun 2017, 00:57
- Detinator Steam: Da
- CS Status: ACTIVEZ AICI
- Detinator server CS: DA
- SteamID: rusuraduo
- Fond eXtream: 0
- Location: Sânnicolau Mare
- Has thanked: 23 times
- Been thanked: 2 times
Multumesc frumos dar nu functioneaza.
Viaţa însăşi este magie, iar dacă nu crezi asta, măcar încearcă să o trăieşti ca pe ceva magic.
©Rusu Radu
©Rusu Radu
- levin
- Scripter eXtreamCS
- Posts: 3844
- Joined: 24 Aug 2011, 12:24
- Detinator Steam: Da
- CS Status: ♅
- Detinator server CS: ☯∴
- SteamID: riseofevo
- Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy - Location: ҳ̸Ҳ̸ҳ
- Discord: devilclass
- Has thanked: 36 times
- Been thanked: 594 times
- Contact:
n are cum
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)