What other code did you use? You can't just use that alone. It will cause errors.
Show the code that you are using.
Also, don't link to places that require a password. It's a waste of time.
Nothing really i know minimal to nothing about coding.
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <fakemeta_util>
//admins lv
#define ADMIN_LEVEL ADMIN_KICK
//Version
#define Version "1.46"
//Max
#define Max_Paths 5
#define Max_Waves 30
#define Max_Levels 21
#define Max_Wps 20
#define Max_Sentrys 7
#define Max_CostumTargets 10
//ent names
#define Turret_Name "Turret"
#define Runner_Name "Runner"
#define Sprite_Name "TD"
//sprites
#define TP_SPAWN "sprites/rjet1.spr"
#define TP_END "sprites/glow01.spr"
//sentry
#define Sentry_Target pev_iuser4
#define Sentry_Type pev_iuser3
#define Sentry_Base pev_iuser2
#define Sentry_Owner pev_iuser1
#define Sentry_Cooldown pev_fuser4
#define Sentry_Level pev_fuser2
#define Base_Model "models/TD/base.mdl"
//runner
#define Runners_Level pev_iuser4
#define Runners_Target pev_iuser2
#define Runners_Path pev_iuser3
//Game
new Lifes,Wave = -1,TD,Money[33],Runners,ham
new Pcvars[21],MaxWaves,LastWPs[Max_Paths],Paths
new Reward_Cash[Max_Waves],max_players
new explosion
//Runners
new Float:WPs[Max_Paths][Max_Wps][3]
new Runner_Amount[Max_Waves]
new Runner_Money[Max_Waves]
new Runner_Models[Max_Waves][50]
new Runner_Speed[Max_Waves]
new Runner_Animation[Max_Waves]
new Float:Runner_Health[Max_Waves]
new Runner_Names[Max_Waves][20]
//max tower variables
new Players_towers[33]
new Players_ctowers[33]
new g_iMsg_ScoreInfo
//Non runners variables
new Sentry_Tna = 1
new Sentry_Tname[Max_CostumTargets][20]
new Sentry_Reward[Max_CostumTargets]
//Tower Stats
new Float:Sentry_Radius[Max_Sentrys][Max_Levels]
new Float:Sentry_Dmg[Max_Sentrys][Max_Levels]
new Float:Sentry_CD[Max_Sentrys][Max_Levels]
new Sentry_Cost[Max_Sentrys][Max_Levels]
new Sentry_Models[Max_Sentrys][40]
new Sentry_ASounds[Max_Sentrys][30]
new Sentry_Names[Max_Sentrys][20]
new Sentry_MaxLV[Max_Sentrys]
new Sentry_Costum[Max_Sentrys]
new Float:Sentry_Smax[Max_Sentrys][3]
public plugin_init()
{
register_plugin("Tower Defense", Version, "Fxfighter")
max_players = get_maxplayers()
//Console Cmds
register_concmd("td_start","StartCMD")
register_concmd("td_stop","EndGame")
register_clcmd("td_gun","Gun")
g_iMsg_ScoreInfo = get_user_msgid( "ScoreInfo" )
//Events
register_event("CurWeapon", "Event_CurWeapon", "be","1=1")
RegisterHam(Ham_Spawn, "player", "Spawn", 1)
//forewords
register_forward(FM_Touch, "Touch")
register_forward(FM_UpdateClientData, "forward_updateclientdata", 1)
register_forward(FM_Think, "Forward_Think")
if(!Runner_Amount[0])Load_Data(0)
//Stores som of the pcvar values so it wont catch it everyt time
//might not be able to update live but will increase performance a lot
Pcvars[20] = get_pcvar_num(Pcvars[20])
Pcvars[19] = get_pcvar_num(Pcvars[19])
Pcvars[18] = get_pcvar_num(Pcvars[18])
Pcvars[17] = get_pcvar_num(Pcvars[17])
Pcvars[16] = get_pcvar_num(Pcvars[16])
Pcvars[15] = get_pcvar_num(Pcvars[15])
Pcvars[14] = get_pcvar_num(Pcvars[14])
Pcvars[12] = get_pcvar_num(Pcvars[12])
Pcvars[11] = get_pcvar_num(Pcvars[11])
Pcvars[10] = get_pcvar_num(Pcvars[10])
Pcvars[9] = get_pcvar_num(Pcvars[9])
Pcvars[7] = get_pcvar_num(Pcvars[7])
Pcvars[8] = get_pcvar_num(Pcvars[8])
Pcvars[3] = get_pcvar_num(Pcvars[3])
Lifes = get_pcvar_num(Pcvars[1])
}
public Spawn(id)
{
Show_Cash(id)
if(TD == 2)Show_Stats()
}
public Create_Runner(id)
{
//create the runner
static Runner,i ,i2
for(i2=0;i2<=Paths;i2++)
{
i=i2
Runner = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
Runners += 1
engfunc(EngFunc_SetOrigin, Runner, WPs[i][0])
set_pev(Runner, pev_health, Runner_Health[Wave])
set_pev(Runner, pev_max_health, Runner_Health[Wave])
set_pev(Runner, pev_classname, Runner_Name)
engfunc(EngFunc_SetModel, Runner, Runner_Models[Wave])
set_pev(Runner, pev_controller_0, 125)
set_pev(Runner, pev_controller_1, 125)
set_pev(Runner, pev_controller_2, 125)
set_pev(Runner, pev_controller_3, 125)
static Float:maxs[3] = {16.0,16.0,36.0}
static Float:mins[3] = {-16.0,-16.0,-36.0}
engfunc(EngFunc_SetSize, Runner, mins, maxs)
if(Pcvars[12])set_pev(Runner, pev_solid, SOLID_SLIDEBOX)
if(Pcvars[9])set_pev(Runner, pev_gravity, 1.0)
set_pev(Runner, pev_animtime, 2.0)
set_pev(Runner, pev_framerate, 1.0)
set_pev(Runner, pev_sequence, 1)
set_pev(Runner,pev_movetype, MOVETYPE_PUSHSTEP)
set_pev(Runner,pev_fixangle, 1)
set_pev(Runner,Runners_Path, i)
if(Pcvars[3])set_pev(Runner,pev_takedamage,1)
set_pev(Runner, pev_nextthink, get_gametime() + 0.01)
set_pev(Runner, Runners_Target, 1)
set_pev(Runner, Runners_Level,Wave)
engfunc(EngFunc_DropToFloor, Runner)
dllfunc(DLLFunc_Think, Runner)
}
Show_Stats()
}
public Forward_Think(ent)
{
if(!pev_valid(ent))return
static classname[32]
pev(ent, pev_classname, classname, 31)
if(equal(classname, Turret_Name))Think_Sentry(ent)
else if(equal(classname, Runner_Name))Think_Runner(ent)
}
public Create_Tower(id,Type,Float:origin[])
{
new Base,Sentry = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
engfunc(EngFunc_SetOrigin, Sentry, origin)
new team = get_user_team(id)
//Create Base
if(Sentry_Costum[Type] >= 100)
{
Base = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "func_breakable"))
set_pev(Base, pev_classname, Turret_Name)
engfunc(EngFunc_SetModel, Base, Base_Model)
engfunc(EngFunc_SetSize, Base, {-20.0,-20.0,0.0}, {20.0,20.0,10.0})
engfunc(EngFunc_SetOrigin, Base, origin)
set_pev(Base,pev_movetype, MOVETYPE_TOSS)
set_pev(Base, pev_team, team)
set_pev(Base,Sentry_Owner,id)
set_pev(Base, pev_solid, SOLID_BBOX)
set_pev(Sentry, Sentry_Base, Base)
set_pev(Base, Sentry_Base, Sentry)
dllfunc(DLLFunc_Think, Base)
if(Pcvars[17])
{
set_pev(Sentry,pev_health,100.0)
set_pev(Sentry,pev_takedamage, 1)
}
if(!pev_valid(Base))return
}
set_pev(Sentry, pev_classname, Turret_Name)
engfunc(EngFunc_SetModel, Sentry, Sentry_Models[Type])
set_pev(Sentry, pev_controller_0, 125)
set_pev(Sentry, pev_controller_1, 125)
set_pev(Sentry, pev_controller_2, 125)
set_pev(Sentry, pev_controller_3, 125)
engfunc(EngFunc_SetSize, Sentry, {-16.0,-16.0,0.0}, Sentry_Smax[Type])
set_pev(Sentry, pev_friction, 1.0)
set_pev(Sentry, pev_animtime, 2.0)
set_pev(Sentry, pev_framerate, 1.0)
set_pev(Sentry, pev_team, team)
if(Sentry_Costum[Type] == 6||Sentry_Costum[Type] == 106)
{
set_pev(Sentry, pev_sequence, 0)
Players_ctowers[id]++
}
else set_pev(Sentry, pev_sequence, 2)
Players_towers[id]++
if(Pcvars[17])
{
set_pev(Sentry,pev_health,100.0)
set_pev(Sentry,pev_takedamage, 1)
}
set_pev(Sentry, pev_movetype, MOVETYPE_PUSHSTEP)
emit_sound(Sentry, CHAN_AUTO, "weapons/building.wav", 0.5, ATTN_NORM, 0, PITCH_NORM)
set_pev(Sentry, Sentry_Cooldown, 0.00)
set_pev(Sentry, Sentry_Type, Type)
set_pev(Sentry, pev_solid, SOLID_BBOX )
set_pev(Sentry, Sentry_Owner, id)
if(Sentry_Costum[Type] == 6||Sentry_Costum[Type] == 106)set_pev(Sentry,Sentry_Target,1)
dllfunc(DLLFunc_Think, Sentry)
set_pev(Sentry, pev_nextthink, get_gametime() + 3.10)
Money[id] -= Sentry_Cost[Type][0]
Show_Cash(id)
if(!ham)
{
RegisterHamFromEntity(Ham_TakeDamage,Sentry,"hook_TakeDamage")
ham = 1
}
}
public plugin_precache()
{
explosion = precache_model("sprites/explode1.spr")
precache_sound("weapons/turrset.wav")
precache_sound("weapons/building.wav")
precache_model("models/v_tfc_spanner.mdl")
precache_model("models/p_tfc_spanner.mdl")
precache_model(Base_Model)
precache_model("models/TD/turrett.mdl")
precache_model("models/TD/sentryt.mdl")
precache_model("models/TD/miniturrett.mdl")
precache_model(TP_SPAWN)
precache_model(TP_END)
if(!Runner_Amount[0])Load_Data(0)
new i
while(i != Max_Sentrys && Sentry_Models[i][0] != 0)
{
precache_model(Sentry_Models[i])
precache_sound(Sentry_ASounds[i])
i++
}
i=0
while(i != Max_Waves && Runner_Models[i][0] != 0)
{
precache_model(Runner_Models[i])
i++
}
return PLUGIN_CONTINUE
}
public Event_CurWeapon(id)
{
new weaponID = read_data(2)
if(!TD)return
if(weaponID != Pcvars[7] && weaponID != Pcvars[8])return
set_pev(id, pev_viewmodel2, "models/v_tfc_spanner.mdl")
set_pev(id, pev_weaponmodel2, "models/p_tfc_spanner.mdl")
}
public Sentry_Menu(id,M)
{
new menu = menu_create("Sentry Menu" , "Handle")
//Max_Sentrys
new text[20],nr[3]
if(!M)
{
menu_additem(menu ,"Build Tower", "0" , 0)
menu_additem(menu ,"Upgrade Tower", "1" , 0)
menu_additem(menu ,"Sell Tower", "2" , 0)
menu_additem(menu ,"Tower Info", "3" , 0)
nr[0] = get_pcvar_num(Pcvars[6])
if(nr[0] != 0)
{
formatex(text,14,"Buy Life %i$",nr[0])
menu_additem(menu ,text, "4" , 0)
}
}
else
{
new i
for(new i2;i2<Max_Sentrys;i2++)
{
i = i2
if(Sentry_Models[i][0] != 0)
{
formatex(nr,2,"%i",5+i)
formatex(text,19,"%s %i$",Sentry_Names[i],Sentry_Cost[i][0])
menu_additem(menu ,text, nr , 0)
}
}
}
menu_setprop(menu , MPROP_EXIT , MEXIT_ALL)
menu_display(id , menu , 0)
}
public Handle(id , menu , item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return
}
new szCommand[6] , szName[21]
new Access , callback
menu_item_getinfo(menu , item , Access , szCommand , 5 , szName , 20 , callback)
menu_destroy(menu)
if(!is_user_alive(id))return
new i=str_to_num(szCommand)
switch(i)
{
case 0:
{
Sentry_Menu(id,1)
return
}
case 1..3:
{
new Target,body
get_user_aiming(id,Target,body,200)
if(!Target)client_print(id,print_chat,"You most aim at a tower")
else if(pev(Target,Sentry_Owner) != id)client_print(id,print_chat,"Its not your tower")
else
{
new Float:Level,level,type = pev(Target, Sentry_Type)
pev(Target,Sentry_Level,Level)
level = floatround(Level)
switch(i)
{
case 1:
{
if(Sentry_MaxLV[type] == level)
{
client_print(id,print_chat,"[TD]You sentry is already on the max lv")
return
}
new price = Sentry_Cost[type][level+1]
if(Money[id] - price < 0)
{
client_print(id,print_chat,"[TD]Not enugh cash for you to upgrade it to lv %i it costs %i$",level+2,price)
return
}
Money[id] -= price
set_pev(Target,Sentry_Level, Level + 1.0)
emit_sound(Target, CHAN_AUTO, "weapons/turrset.wav", 0.5, ATTN_NORM, 0, PITCH_NORM)
client_print(id,print_chat,"[TD]Your tower has been upgraded to lv %i for a cost of %i$",level+2,price)
}
case 2:
{
new price = Sentry_Cost[type][level]
new Temp = floatround( float(price) * get_pcvar_float(Pcvars[2]))
Money[id] += Temp
new Base = pev(Target,Sentry_Base)
if(Base != 0)engfunc(EngFunc_RemoveEntity,Base)
engfunc(EngFunc_RemoveEntity,Target)
client_print(id,print_chat,"[TD]You sold you Tower for %i$",Temp)
Players_towers[id]--
if(Sentry_Costum[type] == 6||Sentry_Costum[type] == 106)Players_ctowers[id]--
}
case 3:
{
new Name[20]
get_user_name(pev(Target,Sentry_Owner),Name,1 9)
client_print(id,print_chat,"[TD]Name:%s Owner:%s lv:%i/%i Radius:%2.f Dmg:%2.f",Sentry_Names[type],Name,level+1,Sentry_MaxLV[type]+1,Sentry_Radius[type][level],Sentry_Dmg[type][level])
}
}
}
Show_Cash(id)
}
case 4:
{
new Cost = get_pcvar_num(Pcvars[6])
if(Money[id] < Cost)
{
client_print(id,print_chat,"[TD]Not enugh cash to buy a extra life cost:%i",Cost)
return
}
Money[id] -= Cost
Lifes += 1
Show_Stats()
new Name[20]
get_user_name(id,Name,19)
client_print(0,print_chat,"[TD]%s brught a life for %i$",Name,Cost)
Show_Cash(id)
}
default:{
i-=5
if(Pcvars[16] == Players_towers[id])client_print(id,print_chat,"[TD]Cant build more towers max %i",Pcvars[16])
else if(Pcvars[15] == Players_ctowers[id] && Sentry_Costum[i] == 6 || Sentry_Costum[i] == 106)client_print(id,print_chat,"[TD]Cant build more cash towers max %i",Pcvars[15])
else if(Sentry_Cost[i][0] > Money[id])client_print(id,print_chat,"[TD]Not enugh cash")
else if(!(pev(id,pev_flags) & FL_ONGROUND))client_print(id,print_chat,"[TD]Cant let you build in the air its to dangerus")
else
{
new Float:origin[3]
pev(id,pev_origin,origin)
origin[2] += Sentry_Smax[i][2] + 20.0
if(Is_Hull_Vacant(origin,pev(id, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN,id))
{
engfunc(EngFunc_SetOrigin, id, origin)
origin[2] -= Sentry_Smax[i][2] + 40.0
Create_Tower(id, i, origin)
}
else client_print(id,print_chat,"[TD]Cant let you build thare you will get stuck")
}
}
}
}
public Gun(id)
{
if(!(get_user_flags(id, 0) & ADMIN_LEVEL))return PLUGIN_CONTINUE
client_print(id,print_chat,"[TD]Gun %i",get_user_weapon(id) )
return PLUGIN_HANDLED
}
public forward_updateclientdata(id)
{
if(!is_user_alive(id)||!TD)return FMRES_IGNORED
static gun
gun = get_user_weapon(id)
if(gun != Pcvars[7] && gun != Pcvars[8])
{
client_cmd(id, "slot10")
return FMRES_IGNORED
}
static button;
button = pev(id, pev_button)
if(button & IN_ATTACK2)
{
button = (button & ~IN_ATTACK2 )
set_pev(id, pev_button, button)
Sentry_Menu(id,0)
return FMRES_SUPERCEDE
}
return FMRES_IGNORED
}
public Show_Cash(id)
{
set_hudmessage(255, 0, 0, 0.02, 0.37, 0, 6.0, 3600.0,0.1,0.1,4)
show_hudmessage(id, " Cash: %i",Money[id])
}
public Show_Stats()
{
set_hudmessage(255, 0, 0, 0.02, 0.2, 0, 6.0, 3600.0,0.1,0.1,2)
show_hudmessage(0, " Tower Defense ^n Wave: %i/%i ^n Lifes: %i ^n Runners: %i ",Wave+1,MaxWaves+1,Lifes,Runners)
}
public client_putinserver(id)Money[id] = get_pcvar_num(Pcvars[0])
public reward()
{
new id
for(new i =1;i<=max_players;i++)
{
id=i
if(is_user_connected(id))
{
Money[id] += Reward_Cash[Wave-1]
Show_Cash(id)
}
}
client_print(0,print_chat,"[TD]You have been rewarded with %i$ for surviving wave:%i",Reward_Cash[Wave-1],Wave)
}
public StartCMD(id)
{
if(get_user_flags(id, 0) & ADMIN_LEVEL && Wave == -1)Start()
return PLUGIN_HANDLED
}
public Start()
{
if(TD != 2)
{
server_print("[TD]Cant start because the map didnt load eny wps")
return
}
Wave+=1
if(!Wave)for(new i=1;i<=max_players;i++)if(is_user_connected(i))Show _Cash(i)
if(Wave == MaxWaves+1)
{
client_print(0,print_chat,"[TD]You Have Won The Game!")
EndGame(0)
Lifes = get_pcvar_num(Pcvars[1])
if(get_pcvar_num(Pcvars[5]) == 1)
{
new Float:Time = get_pcvar_float(Pcvars[4])
client_print(0,print_chat,"[TD]Restarting TD wave 1 will arive in %2.f seconds",Time)
set_task(Time,"Start")
}
}
else
{
new S
if(Paths+1 > 1)S = 115
client_print(0,print_chat,"[TD]Wave %i is coming! %i %s whit %2.f hp frome %i spawn%s",Wave+1,Runner_Amount[Wave],Runner_Names[Wave],Runner_Health[Wave],Paths+1,S)
if(Wave != 0 && Reward_Cash[Wave-1] != 0)reward()
set_task(1.0,"Create_Runner",99,"",0,"a",Runner_Amount[Wave])
set_task(float(Runner_Amount[Wave])+0.1+get_pcvar_num(Pcvars[4]),"Start")
}
Show_Stats
}
public EndGame(id)
{
if(id != 0)if(!(get_user_flags(id, 0) & ADMIN_LEVEL))return PLUGIN_CONTINUE
new Ent
if(task_exists(99))remove_task(99)
if(task_exists(999))remove_task(999)
if(task_exists(0))remove_task(0)
while((Ent = fm_find_ent_by_class(Ent, Turret_Name)) != 0)engfunc(EngFunc_RemoveEntity,Ent)
while((Ent = fm_find_ent_by_class(Ent, Runner_Name)) != 0)engfunc(EngFunc_RemoveEntity,Ent)
Wave = -1
Runners = 0
Lifes = get_pcvar_num(Pcvars[1])
arrayset(Money,get_pcvar_num(Pcvars[0]),max_players)
arrayset(Players_towers,0,max_players)
arrayset(Players_ctowers,0,max_players)
for(new i=1;i<=max_players;i++)if(is_user_connected(i))Show _Cash(i)
return PLUGIN_HANDLED
}
public Touch(ptr, ptd)
{
if(!pev_valid(ptr)||!pev_valid(ptd))return
static class1[32], class2[32]
pev(ptr, pev_classname, class1, 31)
pev(ptd, pev_classname, class2, 31)
if(equal(class1, Runner_Name))
{
if(ptd <= max_players)user_kill(ptd)
else if(equal(class2, Turret_Name))
{
static Base
Base = pev(ptd,Sentry_Base)
if(Base != 0)engfunc(EngFunc_RemoveEntity,Base)
if(Pcvars[20])
{
new Float:origin[3]
pev(ptd,pev_origin,origin)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(3)
write_coord(floatround(origin[0]))
write_coord(floatround(origin[1]))
write_coord(floatround(origin[2]))
write_short(explosion)
write_byte(80)
write_byte(10)
write_byte(0)
message_end()
}
engfunc(EngFunc_RemoveEntity,ptd)
}
}
else if(equal(class2,Runner_Name))
{
if(ptr <= max_players)user_kill(ptr)
else if(equal(class1, Turret_Name))
{
static Base
Base= pev(ptr,Sentry_Base)
if(Base != 0)engfunc(EngFunc_RemoveEntity,Base)
if(Pcvars[20])
{
new Float:origin[3]
pev(ptr,pev_origin,origin)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(3)
write_coord(floatround(origin[0]))
write_coord(floatround(origin[1]))
write_coord(floatround(origin[2]))
write_short(explosion)
write_byte(80)
write_byte(10)
write_byte(0)
message_end()
}
engfunc(EngFunc_RemoveEntity,ptr)
}
}
}
public client_disconnect(id)
{
new Ent,Float:origin[3]
while((Ent = fm_find_ent_by_class(Ent, Turret_Name)) != 0)
{
if(pev(Ent,Sentry_Owner) == id)
{
engfunc(EngFunc_RemoveEntity,Ent)
if(Pcvars[20])
{
pev(id,pev_origin,origin)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(3)
write_coord(floatround(origin[0]))
write_coord(floatround(origin[1]))
write_coord(floatround(origin[2]))
write_short(explosion)
write_byte(80)
write_byte(10)
write_byte(0)
message_end()
}
}
}
}
public Load_Data(id)
{
if(id != 0 && !(get_user_flags(id, 0) & ADMIN_LEVEL))return PLUGIN_CONTINUE
//info
new filename[81],mapname[30],mod[10],configsdir[30]
get_mapname(mapname, 29)
get_configsdir(configsdir, 29)
get_modname(mod,9)
//cs and cz is pretty much the same
if(equal(mod,"czero"))formatex(mod,9,"cstrike")
if(contain(mapname,"_cz"))replace(mapname, 29,"_cz","")
//Cvars.cfg
formatex(filename,80,"%s/TD/%s/WP/%s/Cvars.cfg",configsdir,mod, mapname)
if(!file_exists(filename))formatex(filename,8 0,"%s/TD/%s/Cvars.cfg",configsdir,mod)
if(!file_exists(filename))server_print("[TD]WARNING culdn't open Cvars.cfg for reading")
server_cmd("exec %s",filename)
//Cvars
register_cvar("td_version",Version,FCVAR_SERVER|FCVAR_UNLOGGED)
Pcvars[0] = register_cvar("td_startmoney","100")
Pcvars[1] = register_cvar("td_lifes_amount","50")
Pcvars[2] = register_cvar("td_sell","0.50")
Pcvars[3] = register_cvar("td_runner_takedmg","0")
Pcvars[4] = register_cvar("td_delay","20.0")
Pcvars[5] = register_cvar("td_restart","0")
Pcvars[6] = register_cvar("td_life_cost","300")
Pcvars[7] = register_cvar("td_build_gun", "0")
Pcvars[8] = register_cvar("td_build_gun2", "0")
Pcvars[9] = register_cvar("td_runner_gravity", "1")
Pcvars[10] = register_cvar("td_team_cash", "0")
Pcvars[11] = register_cvar("td_sound_cash", "1")
Pcvars[12] = register_cvar("td_runner_solid", "1")
Pcvars[14] = register_cvar("td_sprites", "1")
Pcvars[15] = register_cvar("td_max_ctowers", "5")
Pcvars[16] = register_cvar("td_max_towers", "20")
Pcvars[17] = register_cvar("td_sentry_takedmg", "0")
Pcvars[18] = register_cvar("td_sentry_kill_change", "1")
Pcvars[19] = register_cvar("td_sentry_ffa", "0")
Pcvars[20] = register_cvar("td_sentry_explodes", "1")
new File,tower,Settings[6][10],pointNum,Info[100]
//wps
formatex(filename, 80, "%s/TD/%s/WP/%s/waypoints.ini", configsdir,mod, mapname)
server_print("%s",filename)
if(!file_exists(filename))server_print("[TD]WARNING No waypoints for this map")
else
{
File = fopen(filename,"r")
if(File)
{
while(fgets(File,Info,29))
{
if(!Info[0]|| Info[0] == ';')continue;
if(Info[0] == ':')
{
pointNum = 0
tower++
}
else
{
parse(Info, Settings[0], 9, Settings[1], 9, Settings[2], 9)
WPs[tower][pointNum][0] = str_to_float(Settings[0])
WPs[tower][pointNum][1] = str_to_float(Settings[1])
WPs[tower][pointNum][2] = str_to_float(Settings[2])
pointNum++
}
}
//remove sprites when reloading config
if(get_pcvar_num(Pcvars[14]))
{
new i,Ent
if(TD!=0)while((Ent = fm_find_ent_by_class(Ent, Sprite_Name)) != 0)engfunc(EngFunc_RemoveEntity,Ent)
//create new sprites
Paths = tower
for(new i2;i2<=tower;i2++)
{
i = 0
while(WPs[i2][i][0] != 0.0)i++
LastWPs[i2] = i-1
//end
Ent= engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "env_sprite"))
set_pev(Ent,pev_classname,Sprite_Name)
set_pev(Ent,pev_rendermode,kRenderTransAdd)
set_pev(Ent,pev_renderamt,200.0)
set_pev(Ent,pev_framerate,10.0)
set_pev(Ent,pev_scale,1.5)
set_pev(Ent,pev_origin,WPs[i2][i-1])
set_pev(Ent,pev_model,TP_END)
dllfunc(DLLFunc_Spawn, Ent)
//spawn
Ent= engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "env_sprite"))
set_pev(Ent,pev_classname,Sprite_Name)
set_pev(Ent,pev_rendermode,kRenderTransAdd)
set_pev(Ent,pev_renderamt,200.0)
set_pev(Ent,pev_framerate,10.0)
set_pev(Ent,pev_scale,1.5)
set_pev(Ent,pev_origin,WPs[i2][0])
set_pev(Ent,pev_model,TP_SPAWN)
dllfunc(DLLFunc_Spawn, Ent)
}
}
TD = 2
}
else server_print("[TD]WARNING culdn't open wp file for reading")
fclose(File)
}
//target_entitys.ini
formatex(filename, 80, "%s/TD/%s/WP/%s/target_entitys.ini", configsdir,mod, mapname)
if(!file_exists(filename))formatex(filename, 80, "%s/TD/%s/target_entitys.ini", configsdir,mod)
if(file_exists(filename))
{
File = fopen(filename,"r")
if(File)
{
Sentry_Tname[0] = Runner_Name
pointNum = 1
while(fgets(File,Info,29))
{
if(!Info[0]|| Info[0] == ';')continue;
parse(Info, Sentry_Tname[pointNum], 19, Settings[0], 9)
Sentry_Reward[pointNum]= str_to_num(Settings[0])
pointNum++
}
Sentry_Tna = pointNum
}
else server_print("[TD]WARNING culdn't open target_entitys file for reading")
fclose(File)
}
//Sentrys.ini
formatex(filename, 80, "%s/TD/%s/WP/%s/Sentrys.ini", configsdir,mod, mapname)
if(!file_exists(filename))formatex(filename, 80, "%s/TD/%s/Sentrys.ini", configsdir,mod)
if(file_exists(filename))
{
File = fopen(filename,"r")
if(File)
{
pointNum = 0
while(fgets(File,Info,99))
{
if(!Info[0] || Info[0] == ';')continue;
parse(Info, Sentry_Names[pointNum], 19, Sentry_Models[pointNum], 39, Sentry_ASounds[pointNum], 29, Settings[0], 6, Settings[1], 6, Settings[2], 6, Settings[3],6)
Sentry_Smax[pointNum][0] = str_to_float(Settings[0])
Sentry_Smax[pointNum][1] = str_to_float(Settings[1])
Sentry_Smax[pointNum][2] = str_to_float(Settings[2])
Sentry_Costum[pointNum] = str_to_num(Settings[3])
pointNum++
}
}
else server_print("[TD]WARNING culdn't open Sentrys.ini for reading")
fclose(File)
}
else server_print("[TD]Warning can't find Sentrys.ini")
//Waves.ini
formatex(filename, 80, "%s/TD/%s/WP/%s/Waves.ini", configsdir,mod, mapname)
if(!file_exists(filename))formatex(filename, 80, "%s/TD/%s/Waves.ini", configsdir,mod)
if(file_exists(filename))
{
File = fopen(filename,"r")
if(File)
{
pointNum = 0
while(fgets(File,Info,99))
{
if(!Info[0] || Info[0] == ';')continue;
parse(Info, Runner_Names[pointNum], 19, Runner_Models[pointNum], 49, Settings[0], 9, Settings[1], 9, Settings[2], 9, Settings[3], 9, Settings[4], 9, Settings[5], 9)
Runner_Amount[pointNum] = str_to_num(Settings[0])
Runner_Speed[pointNum] = str_to_num(Settings[1])
Runner_Money[pointNum] = str_to_num(Settings[2])
Runner_Health[pointNum] = str_to_float(Settings[3])
Runner_Animation[pointNum] = str_to_num(Settings[4])
Reward_Cash[pointNum] = str_to_num(Settings[5])
pointNum++
}
}
else server_print("[TD]WARNING culdn't open Waves.ini for reading")
fclose(File)
}
else server_print("[TD]Warning can't find Waves.ini")
new i
while(Runner_Names[i][0] != 0)i++
MaxWaves = i-1
//Levels.ini
formatex(filename, 80, "%s/TD/%s/WP/%s/Levels.ini", configsdir,mod, mapname)
if(!file_exists(filename))formatex(filename, 80, "%s/TD/%s/Levels.ini", configsdir,mod)
if(file_exists(filename))
{
File = fopen(filename,"r")
if(File)
{
pointNum = 0
tower = 0
while(fgets(File,Info,99))
{
if(!Info[0] || Info[0] == ';')continue;
if(Info[0] == ':')
{
pointNum = 0
tower++
}
else
{
parse(Info, Settings[0], 9, Settings[1], 9, Settings[2], 9, Settings[3], 9)
Sentry_Cost[tower][pointNum] = str_to_num(Settings[0])
Sentry_Dmg[tower][pointNum] = str_to_float(Settings[1])
Sentry_CD[tower][pointNum] = str_to_float(Settings[2])
Sentry_Radius[tower][pointNum] = str_to_float(Settings[3])
pointNum++
}
}
}
else server_print("[TD]WARNING culdn't open Levels.ini for reading")
fclose(File)
}
else server_print("[TD]Warning can't find Levels.ini")
for(new i2;i2<Max_Sentrys-1;i2++)
{
i = 0
while(Sentry_Cost[i2][i] != 0)i++
Sentry_MaxLV[i2] = i-1
}
if(TD != 2)TD =1
return PLUGIN_CONTINUE
}
Think_Runner(ent){
static Float:Origin[3]
pev( ent, pev_origin, Origin)
static Target,Path
Path = pev(ent,Runners_Path)
Target = pev( ent, Runners_Target)
if(get_distance_f (WPs[Path][LastWPs[Path]], Origin) <= 50.0)
{
Lifes -= 1
Runners -= 1
Show_Stats()
engfunc(EngFunc_RemoveEntity,ent)
if(!Lifes)
{
client_print(0,print_chat,"[TD]You Have Lost the Match")
EndGame(0)
}
return
}
if(get_distance_f ( WPs[Path][Target], Origin) <= 50.0)set_pev(ent,Runners_Target,Target+1)
else
{
static Float:vec[3],Float:Targets[3],speed,level
level = pev( ent, Runners_Level)
speed = Runner_Speed[level]
vec[0] = WPs[Path][Target][0]
vec[1] = WPs[Path][Target][1]
vec[2] = WPs[Path][Target][2]
aim_at_origin(ent,WPs[Path][Target],Targets,0)
engfunc(EngFunc_MakeVectors, Targets)
global_get(glb_v_forward, Targets)
Targets[0] *= speed
Targets[1] *= speed
Targets[2] *= speed
set_pev(ent,pev_velocity, Targets)
static seq
seq = pev(ent,pev_sequence)
if(seq != Runner_Animation[level])
{
set_pev(ent,pev_sequence,Runner_Animation[level])
set_pev(ent,pev_frame,0.0)
}
static Float:targetangle[3]
aim_at_origin(ent,vec,targetangle,0)
pev(ent,pev_angles,vec)
if(turn_with_speed(vec,targetangle,70.0))set_ pev(ent,pev_angles,vec)
}
set_pev(ent, pev_nextthink, get_gametime() + 0.01)
dllfunc(DLLFunc_Think, ent)
}
public client_infochanged(id)
{
if(!Players_towers[id])return
new ent,team=get_user_team(id),base,type,Float:or igin[3]
while((ent = fm_find_ent_by_class(ent, Turret_Name)) != 0)
{
if(pev(ent,Sentry_Owner) == id)
{
if(team != pev(ent,pev_team))
{
switch(Pcvars[18])
{
case 0:set_pev(ent,pev_team,team)
case 1:
{
base = pev(ent,Sentry_Base)
if(base != 0)engfunc(EngFunc_RemoveEntity,base)
type = pev(ent,Sentry_Type)
Players_towers[id]--
if(type == 106||type == 6)Players_ctowers[id]--
if(Pcvars[20])
{
pev(ent,pev_origin,origin)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(3)
write_coord(floatround(origin[0]))
write_coord(floatround(origin[1]))
write_coord(floatround(origin[2]))
write_short(explosion)
write_byte(80)
write_byte(10)
write_byte(0)
message_end()
}
engfunc(EngFunc_RemoveEntity,ent)
}
}
}
else return
}
}
Money[id]=get_pcvar_num(Pcvars[0])
}
Think_Sentry(ent){
static Target,Float:Origin[3],level,type,i,i2
Target = pev(ent,Sentry_Target)
pev(ent,pev_origin,Origin)
level = pev(ent, Sentry_Level)
type = pev(ent,Sentry_Type)
//money tower
if(Sentry_Costum[type]== 6||Sentry_Costum[type]== 106)
{
new owner = pev(ent,Sentry_Owner)
Money[owner] += floatround(Sentry_Dmg[type][level])
Show_Cash(owner)
if(Pcvars[11])emit_sound(ent, CHAN_WEAPON, Sentry_ASounds[type], 0.25, ATTN_NORM, 0, PITCH_NORM)
set_pev(ent, pev_nextthink, get_gametime() + Sentry_CD[level][type])
return
}
//think
set_pev(ent, pev_nextthink, get_gametime() + 0.01)
//got a valid target
if(pev_valid(Target) && Target != 0)
{
static Float:Torigin[3],Float:Rorigin[3]
pev(Target,pev_origin,Torigin)
//target still in range?
if(get_distance_f ( Torigin, Origin) < Sentry_Radius[type][level])
{
//Is there a wall betwin the target and turret?
if(!fm_trace_line(ent,Origin,Torigin,Rorigin) || Origin[0] == Rorigin[0] && Origin[1] == Rorigin[1] && Origin[2] == Rorigin[2])
{
set_pev(ent,Sentry_Target, 0)
return
}
}
//turn to target
static Float:targetangle[3]
aim_at_origin(ent,Torigin,targetangle,1)
pev(ent,pev_angles,Torigin)
if(turn_with_speed(Torigin,targetangle,50.0)) set_pev(ent,pev_angles,Torigin)
//attack?
static Float:cooldown
pev(ent,Sentry_Cooldown,cooldown)
if(cooldown == 0.0)
{
set_pev(ent,pev_sequence, 1)
static Float:Health
pev(Target,pev_health,Health)
Health -= Sentry_Dmg[type][level]
if(Health < 1)
{
set_pev(ent,Sentry_Target,0)
if(Target <=max_players)
{
new id = pev(ent,Sentry_Owner)
new frags=get_user_frags(id)+1
set_pev(id,pev_frags,float(frags))
set_pev(Target,pev_frags,pev(Target,pev_frags )+1.0)
//new deathmsg
set_msg_block(get_user_msgid("DeathMsg"),BLOCK_ONCE)
user_kill(Target)
message_begin(MSG_ALL, get_user_msgid("DeathMsg"), {0,0,0}, 0)
write_byte(id)
write_byte(Target)
write_byte(0)
message_end()
//update scoreboard
message_begin( MSG_ALL, g_iMsg_ScoreInfo )
write_byte(id)
write_short(frags)
write_short(get_user_deaths(id));
write_short(0)
write_short(get_user_team(id));
message_end()
}
else set_pev(Target,pev_health,Health)
static classname[20],give
pev(Target,pev_classname,classname,19)
if(equal(classname,Runner_Name))
{
engfunc(EngFunc_RemoveEntity, Target)
Runners -= 1
give = Runner_Money[type]
}
else
{
for(i2 = 1;i2<Sentry_Tna;i2++)
{
i = i2
if(equal(classname,Sentry_Tname[i]))
{
give=Sentry_Reward[i]
break
}
}
}
if(!Pcvars[10])
{
static owner
owner = pev(ent,Sentry_Owner)
Money[owner] += give
Show_Cash(owner)
}
else
{
for(i2 = 1;i2<=max_players;i2++)
{
i = i2
if(is_user_connected(i))
{
Money[i] += give
Show_Cash(i)
}
}
}
set_pev(ent,pev_sequence, 2)
}
else set_pev(Target,pev_health,Health)
set_pev(ent, Sentry_Cooldown, Sentry_CD[type][level])
emit_sound(ent, CHAN_WEAPON, Sentry_ASounds[type], 0.5, ATTN_NORM, 0, PITCH_NORM)
}
else if(pev(ent,Sentry_Cooldown) == Sentry_CD[type][level] - 1 && Sentry_CD[type][level] != 1.0)
{
set_pev(ent,Sentry_Cooldown, cooldown-1.0)
set_pev(ent,pev_sequence, 2)
}
else if(cooldown > 0.0)set_pev(ent,Sentry_Cooldown, cooldown-1.0)
}
else
{
//find targets in range
if(pev(ent,pev_sequence)!= 2)set_pev(ent,pev_sequence, 2)
static Ent,classname[20],owner
while((Ent = engfunc(EngFunc_FindEntityInSphere, Ent, Origin, Sentry_Radius[type][level]))!= 0)
{
pev(Ent, pev_classname, classname, 19)
for(i2=0;i2<Sentry_Tna;i2++)
{
i = i2
//valid target?
if(equal(classname,Sentry_Tname[i]))
{
owner = pev(ent,Sentry_Owner)
//Dont attack owner
if(owner == Ent)continue
//dont attack targets whit same owner
if(owner == pev(Ent,Sentry_Owner))continue
//ffa off?
if(!Pcvars[19])
{
//target a player?
if(Ent <= max_players)
{
//dont target dead players
if(!is_user_alive(Ent))continue
owner=get_user_team(Ent)//pev_team dosent always return right for players
}
else owner = pev(Ent,pev_team)//get his team
//same team?
if(owner == pev(ent,pev_team))continue
}
//set_target
set_pev(ent,Sentry_Target,Ent)
return
}
}
}
}
}
//P3tsin
bool:turn_with_speed(Float:current[3],Float:ideal[3],Float:turnspeed){
new bool:dontneedtoturn
new Float:angle,Float:target,Float:delta
angle = current[1]
target = ideal[1]
angle -= floatround(angle / 360.0,floatround_floor) * 360.0
target -= floatround(target / 360.0,floatround_floor) * 360.0
delta = target-angle
if(delta < 0.0) delta += 360.0
if(delta < 0.2 || delta > 359.8) dontneedtoturn = true
else if(delta < 180.0)
{
if(angle+turnspeed > target)angle = target
else angle += turnspeed
}
else
{
if(angle-turnspeed < target)angle = target
else angle -= turnspeed
}
if(angle >= 360.0)angle -= 360.0
else if(angle < 0.0)angle += 360.0
current[0] = 0.0
current[1] = angle
current[2] = 0.0
return !dontneedtoturn
}
stock aim_at_origin(id,Float:target[3],Float:angles[3],Tower)
{
static Float:vec[3]
pev(id,pev_origin,vec)
vec[0] = target[0] - vec[0]
vec[1] = target[1] - vec[1]
vec[2] = target[2] - vec[2]
engfunc(EngFunc_VecToAngles,vec,angles)
angles[0] *= -1.0
angles[2] = 0.0
if(Tower)angles[1] -= 180
}
//alka
stock bool:Is_Hull_Vacant(const Float:Origin[3], Hull, id)
{
new tr
engfunc(EngFunc_TraceHull, Origin, Origin, 0, Hull, id, tr)
if(!get_tr2(tr, TR_StartSolid) || !get_tr2(tr, TR_AllSolid))return true
return false
}
public hook_TakeDamage(id, idinflictor, idattacker, Float:damage, damagebits)
{
new team
//is the attacker a player?
if(idattacker != 0 && idattacker <= max_players)team =get_user_team(idattacker)
//else use pev_team
else team = pev(idattacker,pev_team)
//block team dmg if ffa is off
if(team == pev(id,pev_team)&& !Pcvars[19])
{
SetHamParamFloat(4, 0.0)
return HAM_HANDLED
}
//get health
new Float:health
pev(id,pev_health,health)
//get base
new base = pev(id,Sentry_Base)
//if its going to die
if(health-damage<1)
{
//remove base if it got one
if(base != 0)engfunc(EngFunc_RemoveEntity,base)
//get tower type and lower the tower variables
new type = pev(id,Sentry_Type)
new owner = pev(id,Sentry_Owner)
Players_towers[owner]--
if(type == 106||type == 6)Players_ctowers[owner]--
//if explosion on
if(Pcvars[20])
{
new Float:origin[3]
pev(id,pev_origin,origin)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(3)
write_coord(floatround(origin[0]))
write_coord(floatround(origin[1]))
write_coord(floatround(origin[2]))
write_short(explosion)
write_byte(80)
write_byte(10)
write_byte(0)
message_end()
}
}
//set his base hp lower if its going to survive
else if(base!= 0)set_pev(base,pev_health,health-damage)
return HAM_IGNORED
}
//Console Cmds
register_concmd("td_start","StartCMD")
register_concmd("td_stop","EndGame")
register_clcmd("td_gun","Gun")
The plugin is the Tower Defense plugin - http://forums.alliedmods.net/showthread.php?p=633089
Sorry about that, didnt know it wasnt showing. I'll post on here later.
vBulletin® v3.8.7, Copyright ©2000-2024, vBulletin Solutions, Inc.