AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Need help with Multiple codes (https://forums.alliedmods.net/showthread.php?t=130446)

streets 06-24-2010 01:48

Need help with Multiple codes
 
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

Re: Need help with Multiple codes
 
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

Re: Need help with Multiple codes
 
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/foru...ded/#entry1154

fysiks 06-30-2010 16:17

Re: Need help with Multiple codes
 
Quote:

Originally Posted by streets (Post 1224395)
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

Re: Need help with Multiple codes
 
Quote:

Originally Posted by fysiks (Post 1224879)
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.

Code:

/* 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,19)
      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,80,"%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:origin[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
}

Code:


 
//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

Re: Need help with Multiple codes
 
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


All times are GMT -4. The time now is 14:48.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.