PDA

View Full Version : Need help with Multiple codes


streets
06-24-2010, 01:48
I'm still a noob at editing and stuff. And need some help if possible.

1) How to i create a system where if x amount of players type /ready or /start (Either one) it will initiate the game.

2) How do i set an admin level acess to certain plugins

fysiks
06-24-2010, 23:22
1) Make a function for chat command /ready and count them. If they are bigger than the required number then start the game.

2) Look at other plugins.

streets
06-30-2010, 04:29
Well i followed other plugins and looked for a while, saw this command and tried it.

register_clcmd("say /start", "Startgame")

and it just crashed the whole amxx for my server.

as you can tell im not very good at coding =/

and i've asked many people but yea...

p.s. im trying to get the /start command as a public command not an admin command

My to do list = http://www.handsofvengeance.com/forums/index.php?/topic/160-coders-needed/#entry1154

fysiks
06-30-2010, 16:17
register_clcmd("say /start", "Startgame")

and it just crashed the whole amxx for my server.

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.

streets
06-30-2010, 22:11
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.

streets
07-01-2010, 04:01
Sorry for double posting, i can't seem to edit my last post.

I finally got a system to work

register_concmd("say /start","StartCMD")
register_concmd("team_say /start","StartCMD")

&

if(Wave == -1)Start()
return PLUGIN_HANDLED

lmao thats what i wanted the whole time.

Thank you fysiks.


Next on my agenda is a map voting system.

Players Choose 1/2/3 Difficulty First then bring up a sub-menu A/b/c for specific map
1) Hard (9-12 Players)
---A ) TD_XXX
---B ) TD_XXX
2) Medium (5-8 Players)
---A ) TD_XXX
---B ) TD_XXX
3) Easy (1-4 Players)
---A ) TD_XXX
---B ) TD_XXX