obj/flag icon = 'flag.dmi'
var/list/teams=list("R"=list(),"B"=list())
GM/verb/Start_CTF() set category = "GM" if(!CTF_Status) switch(input("Start CTF?") in list("Yes","No")) if("Yes") world << "<font color = yellow><b>**Capture the Flag event has Started!!!</font></b>" CTF_Status = 1 else return
proc/CTF_Players() return length(teams["R"])+length(teams["B"])
mob/verb/Join_Capture_The_Flag() if(!CTF_Status) src << "There is no CTF game going on." return 0 if(CTF_Players() <= maxplayers) if(length(team["R"])==length(team["B"])) var/teamcolor=pick("R","B") world<<"[src.name] has been picked to join [teamcolor]!" teams[teamcolor]+=src src<<"You are Player[CTF_Players()]" if(teamcolor=="R") src.Move(locate(locate(x,y,z),src.dir)) else src.Move(locate(locate(x,y,z),src.dir)) return 1 if(length(team["R"])<length(team["B"])) var/teamcolor="R" world<<"[src.name] has been picked to join [teamcolor]!" teams[teamcolor]+=src src<<"You are Player[CTF_Players()]" src.Move(locate(locate(x,y,z),src.dir)) return 1 if(length(team["R"])>length(team["B"])) var/teamcolor="B" world<<"[src.name] has been picked to join [teamcolor]!" teams[teamcolor]+=src src<<"You are Player[CTF_Players()]" src.Move(locate(locate(x,y,z),src.dir)) return 1 else src<<"CTF is full. No more players are allowed in. You'll have to wait for the next game."
obj/flag var/team density = 1
mob Bump(atom/A) if(istype(A,/obj/flag)) var/obj/flag if(team != src.team)
if(flag.Move(src))
src << "You pick up \an [team] flag!" else src << "You cannot pick this up!" else src << "You cannot pick up your own flag!" Enter(atom/movable/A) if(src.contents.len) return return 1
mob/proc/Death() var/obj/Flag = locate() in src if(Flag) Flag.Move(locate(x,y,z))
DeathCheck() hits+=1 usr.mhit+=1 spawn(1) usr.Unlock() if(le<=0) if(icon=='Barrier.dmi') del src if(mode == "Boss Battle" && src.boss == 1) world << "<B><U><FONT COLOR = R>WORLD ANNOUNCEMENT:</B> <font color=R>[usr] has defeated the boss [src]!" world << "[usr] won 1 event point!" src.boss = 0 usr.events += 1 else usr<<"You have defeated [src]!" src<<"[usr] has defeated you." src.le=src.mle if(usr.le==usr.mle) usr.pkills+=1 if(usr.le<=4) usr.cckills+=1 usr.kills+=1 src.deaths+=1 if(usr.team=="B") Bscore+=1 if(usr.team=="R") Rscore+=1 if(usr.team=="G") greenscore+=1 if(usr.team=="Y") yellowscore+=1 if(usr.team=="RB") rainbowscore+=1 if(usr.npc==1) del(src) spawn(1) chartype="" overlays=null icon=null barr=0 direction="right" loc=locate(,,) status="g" canmove=1 delayattack=0 shotdelay=0 LockShow() usr.Unlock()
mob/Stat() statpanel("Scores") stat("Kills",kills) stat("Deaths",deaths) stat("Perfect Kills",pkills) stat("Close Call Kills",cckills) stat("Event Points",events) stat("Chat Points",chat) statpanel("Random Scores") stat("Deflects",deflects) stat("Suicides",suicides) stat("Melee Weapon Uses",melee) stat("Melee Weapon Hits",mhit) stat("Projectile Weapon Uses",projectile) stat("Projectile Weapon Hits",phit) stat("Times been hit",hits) stat("Times dodged projectiles",pdodge) stat("Jumps",jumps) stat("Dashes",dashes) statpanel("World Scores") stat("B team",Bscore) stat("Green team",greenscore) stat("R team",Rscore) stat("Yellow team",yellowscore) stat("Rainbow team",rainbowscore) if(mode=="PTB") statpanel("Bases") for(var/mob/base/B/B in world) stat("B",B.le) for(var/mob/base/R/R in world) stat("R",R.le) for(var/mob/base/Yellow/Y in world) stat("Yellow",Y.le) for(var/mob/base/Green/G in world) stat("Green",G.le)
|
You want to look at the initial() proc and Bump() proc for the flag returning to its original location when bumped into.
As for the score system, two simple world variables should do the trick. Every time someone of the opposite team "captures" or *enters their base with the opposing team's flag in their contents, add a score to the appropriate team.
* hint: look up the Entered() proc