Implements hooks, an easier way to write code to be called at startup/roundstart/roundend.

Current hooks are "startup", "roundstart", and "roundend".
Most stuff in world/New() has been moved over to the startup hook.
Roundstart and roundend have no hooks yet.

Removed the unused "newbanjob.dm" file and associated verbs/topics.
Bumped RECOMMENDED_VERSION up to 501.

Signed-off-by: Mloc-Argent <colmohici@gmail.com>
This commit is contained in:
Mloc-Argent
2013-11-25 21:16:09 +00:00
parent bad8dbf695
commit 33805e639b
21 changed files with 119 additions and 117 deletions

View File

@@ -77,6 +77,7 @@
#include "code\controllers\_DynamicAreaLighting_TG.dm"
#include "code\controllers\configuration.dm"
#include "code\controllers\failsafe.dm"
#include "code\controllers\hooks.dm"
#include "code\controllers\lighting_controller.dm"
#include "code\controllers\master_controller.dm"
#include "code\controllers\shuttle_controller.dm"
@@ -650,7 +651,6 @@
#include "code\modules\admin\holder2.dm"
#include "code\modules\admin\IsBanned.dm"
#include "code\modules\admin\NewBan.dm"
#include "code\modules\admin\newbanjob.dm"
#include "code\modules\admin\player_notes.dm"
#include "code\modules\admin\player_panel.dm"
#include "code\modules\admin\topic.dm"

View File

@@ -14,6 +14,20 @@ What are the archived variables for?
#define QUANTIZE(variable) (round(variable,0.0001))
#define TRANSFER_FRACTION 5 //What fraction (1/#) of the air difference to try and transfer
/hook/startup/proc/createGasOverlays()
plmaster = new /obj/effect/overlay()
plmaster.icon = 'icons/effects/tile_effects.dmi'
plmaster.icon_state = "plasma"
plmaster.layer = FLY_LAYER
plmaster.mouse_opacity = 0
slmaster = new /obj/effect/overlay()
slmaster.icon = 'icons/effects/tile_effects.dmi'
slmaster.icon_state = "sleeping_agent"
slmaster.layer = FLY_LAYER
slmaster.mouse_opacity = 0
return 1
/datum/gas/sleeping_agent/specific_heat = 40 //These are used for the "Trace Gases" stuff, but is buggy.
/datum/gas/oxygen_agent_b/specific_heat = 300

View File

@@ -42,7 +42,7 @@ var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Al
/////Initial Building/////
//////////////////////////
/proc/make_datum_references_lists()
/hook/startup/proc/makeDatumRefLists()
var/list/paths
//Hair - Initialise all /datum/sprite_accessory/hair into an list indexed by hair-style name
@@ -97,6 +97,8 @@ var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Al
if(S.flags & WHITELISTED)
whitelisted_species += S.name
return 1
/* // Uncomment to debug chemical reaction list.
/client/verb/debug_chemical_list()

View File

@@ -1,3 +1,6 @@
/hook/startup/proc/createDatacore()
data_core = new /obj/effect/datacore()
return 1
/obj/effect/datacore/proc/manifest(var/nosleep = 0)
spawn()

View File

@@ -14,6 +14,10 @@
if(prob(50))
rate = -rate
/hook/startup/proc/createSun()
sun = new /datum/sun()
return 1
// calculate the sun's position given the time of day
/datum/sun/proc/calc_position()

View File

@@ -56,7 +56,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
/*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/
var/list/teleportlocs = list()
proc/process_teleport_locs()
/hook/startup/proc/setupTeleportLocs()
for(var/area/AR in world)
if(istype(AR, /area/shuttle) || istype(AR, /area/syndicate_station) || istype(AR, /area/wizard_station)) continue
if(teleportlocs.Find(AR.name)) continue
@@ -65,20 +65,13 @@ proc/process_teleport_locs()
teleportlocs += AR.name
teleportlocs[AR.name] = AR
var/not_in_order = 0
do
not_in_order = 0
if(teleportlocs.len <= 1)
break
for(var/i = 1, i <= (teleportlocs.len - 1), i++)
if(sorttext(teleportlocs[i], teleportlocs[i+1]) == -1)
teleportlocs.Swap(i, i+1)
not_in_order = 1
while(not_in_order)
teleportlocs = sortAssoc(teleportlocs)
return 1
var/list/ghostteleportlocs = list()
proc/process_ghost_teleport_locs()
/hook/startup/proc/setupGhostTeleportLocs()
for(var/area/AR in world)
if(ghostteleportlocs.Find(AR.name)) continue
if(istype(AR, /area/turret_protected/aisat) || istype(AR, /area/derelict) || istype(AR, /area/tdome))
@@ -89,17 +82,9 @@ proc/process_ghost_teleport_locs()
ghostteleportlocs += AR.name
ghostteleportlocs[AR.name] = AR
var/not_in_order = 0
do
not_in_order = 0
if(ghostteleportlocs.len <= 1)
break
for(var/i = 1, i <= (ghostteleportlocs.len - 1), i++)
if(sorttext(ghostteleportlocs[i], ghostteleportlocs[i+1]) == -1)
ghostteleportlocs.Swap(i, i+1)
not_in_order = 1
while(not_in_order)
ghostteleportlocs = sortAssoc(ghostteleportlocs)
return 1
/*-----------------------------------------------------------------------------*/

View File

@@ -140,6 +140,10 @@ var/const/RADIO_MAGNETS = "9"
var/global/datum/controller/radio/radio_controller
/hook/startup/proc/createRadioController()
radio_controller = new /datum/controller/radio()
return 1
datum/controller/radio
var/list/datum/radio_frequency/frequencies = list()

View File

@@ -12,6 +12,10 @@ var/global/Holiday = null
//////////////////////////////////////////////////////////////////////////////////////////////////////////
// ~Carn
/hook/startup/proc/updateHoliday()
Get_Holiday()
return 1
//sets up the Holiday global variable. Shouldbe called on game configuration or something.
/proc/Get_Holiday()
if(!Holiday) return // Holiday stuff was not enabled in the config!

View File

@@ -131,6 +131,7 @@ var/global/datum/controller/gameticker/ticker
data_core.manifest()
current_state = GAME_STATE_PLAYING
callHook("roundstart")
//here to initialize the random events nicely at round start
setup_economy()
@@ -323,6 +324,8 @@ var/global/datum/controller/gameticker/ticker
declare_completion()
spawn(50)
callHook("roundend")
if (mode.station_was_nuked)
feedback_set_details("end_proper","nuke")
if(!delay_end)

View File

@@ -2,6 +2,11 @@
var/list/whitelist = list()
/hook/startup/proc/loadWhitelist()
if(config.usewhitelist)
load_whitelist()
return 1
/proc/load_whitelist()
whitelist = file2list(WHITELISTFILE)
if(!whitelist.len) whitelist = null
@@ -11,9 +16,14 @@ var/list/whitelist = list()
return 0
return ("[M.ckey]" in whitelist)
var/list/alien_whitelist = list()
/var/list/alien_whitelist = list()
proc/load_alienwhitelist()
/hook/startup/proc/loadAlienWhitelist()
if(config.usealienwhitelist)
load_alienwhitelist()
return 1
/proc/load_alienwhitelist()
var/text = file2text("config/alienwhitelist.txt")
if (!text)
diary << "Failed to load config/alienwhitelist.txt\n"

View File

@@ -58,6 +58,9 @@ var/savefile/Banlist
CMinutes = (world.realtime / 10) / 60
return 1
/hook/startup/proc/loadBans()
return LoadBans()
/proc/LoadBans()
Banlist = new("data/banlist.bdb")

View File

@@ -1014,14 +1014,6 @@ var/global/floorIsLava = 0
message_admins("\blue [key_name_admin(usr)] toggled guests game entering [guests_allowed?"":"dis"]allowed.", 1)
feedback_add_details("admin_verb","TGU") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/unjobban_panel()
set name = "Unjobban Panel"
set category = "Admin"
if (src.holder)
src.holder.unjobbanpanel()
feedback_add_details("admin_verb","UJBP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return
/datum/admins/proc/output_ai_laws()
var/ai_number = 0
for(var/mob/living/silicon/S in mob_list)

View File

@@ -11,6 +11,10 @@
/proc/investigate_subject2file(var/subject)
return file("[INVESTIGATE_DIR][subject].html")
/hook/startup/proc/resetInvestigate()
investigate_reset()
return 1
/proc/investigate_reset()
if(fdel(INVESTIGATE_DIR)) return 1
return 0

View File

@@ -53,6 +53,10 @@ var/list/admin_ranks = list() //list of all ranks with associated rights
#endif
/hook/startup/proc/loadAdmins()
load_admins()
return 1
/proc/load_admins()
//clear the datums references
admin_datums.Cut()

View File

@@ -74,9 +74,7 @@ var/list/admin_verbs_admin = list(
)
var/list/admin_verbs_ban = list(
/client/proc/unban_panel,
/client/proc/jobbans,
/client/proc/unjobban_panel,
// /client/proc/DB_ban_panel
/client/proc/jobbans
)
var/list/admin_verbs_sounds = list(
/client/proc/play_local_sound,

View File

@@ -50,6 +50,10 @@ DEBUG
jobban_loadbanfile()
*/
/hook/startup/proc/loadJobBans()
jobban_loadbanfile()
return 1
/proc/jobban_loadbanfile()
if(config.ban_legacy_system)
var/savefile/S=new("data/job_full.ban")
@@ -101,15 +105,6 @@ DEBUG
text2file(formatted_log,"data/ban_unban_log.txt")
/proc/jobban_updatelegacybans()
if(!jobban_runonce)
log_admin("Updating jobbanfile!")
// Updates bans.. Or fixes them. Either way.
for(var/T in jobban_keylist)
if(!T) continue
jobban_runonce++ //don't run this update again
/proc/jobban_remove(X)
for (var/i = 1; i <= length(jobban_keylist); i++)
if( findtext(jobban_keylist[i], "[X]") )

View File

@@ -874,19 +874,6 @@
if("Cancel")
return
else if(href_list["unjobbanf"])
if(!check_rights(R_BAN)) return
var/banfolder = href_list["unjobbanf"]
Banlist.cd = "/base/[banfolder]"
var/key = Banlist["key"]
if(alert(usr, "Are you sure you want to unban [key]?", "Confirmation", "Yes", "No") == "Yes")
if (RemoveBanjob(banfolder))
unjobbanpanel()
else
alert(usr,"This ban has already been lifted / does not exist.","Error","Ok")
unjobbanpanel()
else if(href_list["mute"])
if(!check_rights(R_MOD,0) && !check_rights(R_ADMIN)) return

View File

@@ -4,11 +4,16 @@
return
/proc/send2mainirc(var/msg)
if(config.use_irc_bot && config.main_irc && config.irc_bot_host)
ext_python("ircbot_message.py", "[config.comms_password] [config.irc_bot_host] [config.main_irc] [msg]")
if(config.main_irc)
send2irc(config.main_irc, msg)
return
/proc/send2adminirc(var/msg)
if(config.use_irc_bot && config.admin_irc && config.irc_bot_host)
ext_python("ircbot_message.py", "[config.comms_password] [config.irc_bot_host] [config.admin_irc] [msg]")
if(config.admin_irc)
send2irc(config.admin_irc, msg)
return
/hook/startup/proc/ircNotify()
send2mainirc("Server starting up on [config.server? "byond://[config.server]" : "byond://[world.address]:[world.port]"]")
return 1

View File

@@ -13,6 +13,10 @@ var/datum/paiController/paiController // Global handler for pAI candidates
var/ready = 0
/hook/startup/proc/paiControllerSetup()
paiController = new /datum/paiController()
return 1
/datum/paiController
var/list/pai_candidates = list()

View File

@@ -79,6 +79,9 @@
// rebuild all power networks from scratch
/hook/startup/proc/buildPowernets()
return makepowernets()
/proc/makepowernets()
for(var/datum/powernet/PN in powernets)
del(PN)
@@ -101,6 +104,8 @@
if(!M.powernet) continue // APCs have powernet=0 so they don't count as network nodes directly
M.powernet.nodes[M] = M
return 1
// returns a list of all power-related objects (nodes, cable, junctions) in turf,
// excluding source, that match the direction d

View File

@@ -7,7 +7,7 @@
#define RECOMMENDED_VERSION 495
#define RECOMMENDED_VERSION 501
/world/New()
//logs
var/date_string = time2text(world.realtime, "YYYY/MM-Month/DD-Day")
@@ -22,59 +22,13 @@
if(byond_version < RECOMMENDED_VERSION)
world.log << "Your server's byond version does not meet the recommended requirements for this server. Please update BYOND"
make_datum_references_lists() //initialises global lists for referencing frequently used datums (so that we only ever do it once)
load_configuration()
load_mode()
load_motd()
load_admins()
load_mods()
LoadBansjob()
if(config.usewhitelist)
load_whitelist()
if(config.usealienwhitelist)
load_alienwhitelist()
jobban_loadbanfile()
jobban_updatelegacybans()
LoadBans()
if(config && config.server_name != null && config.server_suffix && world.port > 0)
// dumb and hardcoded but I don't care~
config.server_name += " #[(world.port % 1000) / 100]"
investigate_reset()
Get_Holiday() //~Carn, needs to be here when the station is named so :P
src.update_status()
makepowernets()
sun = new /datum/sun()
radio_controller = new /datum/controller/radio()
data_core = new /obj/effect/datacore()
paiController = new /datum/paiController()
if(!setup_database_connection())
world.log << "Your server failed to establish a connection with the feedback database."
else
world.log << "Feedback database connection established."
if(!setup_old_database_connection())
world.log << "Your server failed to establish a connection with the SQL database."
else
world.log << "SQL database connection established."
plmaster = new /obj/effect/overlay()
plmaster.icon = 'icons/effects/tile_effects.dmi'
plmaster.icon_state = "plasma"
plmaster.layer = FLY_LAYER
plmaster.mouse_opacity = 0
slmaster = new /obj/effect/overlay()
slmaster.icon = 'icons/effects/tile_effects.dmi'
slmaster.icon_state = "sleeping_agent"
slmaster.layer = FLY_LAYER
slmaster.mouse_opacity = 0
callHook("startup")
src.update_status()
@@ -82,15 +36,10 @@
sleep_offline = 1
send2mainirc("Server starting up on [config.server? "byond://[config.server]" : "byond://[world.address]:[world.port]"]")
master_controller = new /datum/controller/game_controller()
spawn(1)
master_controller.setup()
process_teleport_locs() //Sets up the wizard teleport locations
process_ghost_teleport_locs() //Sets up ghost teleport locations.
spawn(3000) //so we aren't adding to the round-start lag
if(config.ToRban)
ToRban_autoupdate()
@@ -184,6 +133,10 @@
#undef INACTIVITY_KICK
/hook/startup/proc/loadMode()
world.load_mode()
return 1
/world/proc/load_mode()
var/list/Lines = file2list("data/mode.txt")
if(Lines.len)
@@ -196,9 +149,15 @@
fdel(F)
F << the_mode
/hook/startup/proc/loadMOTD()
world.load_motd()
return 1
/world/proc/load_motd()
join_motd = file2text("config/motd.txt")
/world/proc/load_configuration()
config = new /datum/configuration()
config.load("config/config.txt")
@@ -208,6 +167,11 @@
// apply some settings from config..
abandon_allowed = config.respawn
/hook/startup/proc/loadMods()
world.load_mods()
return 1
/world/proc/load_mods()
if(config.admin_legacy_system)
var/text = file2text("config/moderators.txt")
@@ -290,6 +254,13 @@
var/failed_db_connections = 0
var/failed_old_db_connections = 0
/hook/startup/proc/connectDB()
if(!setup_database_connection())
world.log << "Your server failed to establish a connection with the feedback database."
else
world.log << "Feedback database connection established."
return 1
proc/setup_database_connection()
if(failed_db_connections > FAILED_DB_CONNECTION_CUTOFF) //If it failed to establish a connection more than 5 times in a row, don't bother attempting to conenct anymore.
@@ -325,7 +296,12 @@ proc/establish_db_connection()
return 1
/hook/startup/proc/connectOldDB()
if(!setup_old_database_connection())
world.log << "Your server failed to establish a connection with the SQL database."
else
world.log << "SQL database connection established."
return 1
//These two procs are for the old database, while it's being phased out. See the tgstation.sql file in the SQL folder for more information.
proc/setup_old_database_connection()