From e8e986e6f5cd670a923c848615ac98f88f415d24 Mon Sep 17 00:00:00 2001 From: ShadowLarkens Date: Fri, 30 Jan 2026 11:39:50 -0800 Subject: [PATCH] General Cleanup (#19088) * Remove unused news_articles system * Rip out the webhook system * Merk bot/ * Rip out old IRC code * Move the malf_ai manual * Clean up the tools folder * Revert "Remove unused news_articles system" This reverts commit b1295ce8fa714ea35d768365c267b4b60fcd2faa. * Put these back --- bot/CORE_DATA.py | 13 - bot/C_eightball.py | 32 - bot/C_heaortai.py | 5 - bot/C_makequote.py | 21 - bot/C_maths.py | 70 - bot/C_rot13.py | 23 - bot/C_rtd.py | 96 - bot/C_sarcasticball.py | 30 - bot/C_srtd.py | 35 - bot/D_help.py | 60 - bot/FMLformatter.py | 55 - bot/Marakov/Marakov.Cache | 2450 --------- bot/Marakov_Chain.py | 203 - bot/Namecheck.py | 19 - bot/NanoTrasenBot.py | 1565 ------ bot/Shortname.py | 28 - bot/Timeconverter.py | 204 - bot/Weather.py | 61 - bot/YTCv3.py | 75 - bot/YTCv4.py | 132 - bot/_____Readme.txt | 74 - bot/gen_fml.py | 15 - bot/htmltagremove.py | 28 - bot/irchat.py | 94 - bot/linereader.py | 43 - bot/nudge.py | 39 - bot/save_load.py | 24 - bot/some_but_not_all_2.py | 20 - bot/xkcdparser.py | 40 - code/__defines/misc.dm | 13 - code/__defines/webhooks.dm | 10 - .../configuration/entries/general.dm | 32 - code/controllers/subsystems/ticker.dm | 9 - code/controllers/subsystems/vote.dm | 8 +- code/controllers/subsystems/webhooks.dm | 92 - code/game/gamemodes/game_mode.dm | 11 - .../newmalf_ability_trees/HELPERS.dm | 4 +- code/game/world.dm | 71 - code/modules/admin/admin.dm | 8 - code/modules/admin/verbs/adminpm.dm | 264 +- code/modules/admin/verbs/custom_event.dm | 7 - code/modules/client/client defines.dm | 7 - .../modules/modular_computers/_description.dm | 2 - code/modules/paperwork/faxmachine.dm | 8 - code/modules/tickets/tickets.dm | 100 +- code/modules/webhooks/_webhook.dm | 72 - .../modules/webhooks/webhook_ahelp2discord.dm | 13 - code/modules/webhooks/webhook_custom_event.dm | 11 - code/modules/webhooks/webhook_fax2discord.dm | 10 - code/modules/webhooks/webhook_roundend.dm | 26 - code/modules/webhooks/webhook_roundprep.dm | 17 - code/modules/webhooks/webhook_roundstart.dm | 16 - config/example/config.txt | 27 - config/example/webhooks.json | 12 - {ingame_manuals => html}/malf_ai.html | 0 ingame_manuals/README.txt | 3 - lib/src/netutil.c | 109 - lib/src/netutil.h | 33 - lib/src/nudge.c | 74 - scripts/ircbot_message.py | 31 - tools/DM Line counter.exe | Bin 88064 -> 0 bytes .../Event Probabilities.xls | Bin 19968 -> 0 bytes tools/HumanScissors/!README.txt | 7 - tools/HumanScissors/CookieCutter.dmi | Bin 1364 -> 0 bytes tools/HumanScissors/HumanScissors.dm | 56 - tools/HumanScissors/HumanScissors.dme | 18 - tools/HumanScissors/SpritesToSnip.dmi | Bin 839 -> 0 bytes tools/IconSplitter/!README.txt | 5 - tools/IconSplitter/DmiToSplit.dmi | Bin 182 -> 0 bytes tools/IconSplitter/IconSplitter.dm | 49 - tools/IconSplitter/IconSplitter.dme | 18 - tools/Redirector/Configurations.dm | 53 - tools/Redirector/Redirect_Tgstation.dmb | Bin 12541 -> 0 bytes tools/Redirector/Redirect_Tgstation.dme | 21 - tools/Redirector/Redirector.dm | 87 - tools/Redirector/config.txt | 12 - tools/Redirector/skin.dmf | 149 - tools/Redirector/textprocs.dm | 150 - tools/Runtime Condenser/Input.txt | 4440 ----------------- tools/Runtime Condenser/Main.cpp | 314 -- tools/Runtime Condenser/Output.txt | 21 - tools/Runtime Condenser/RuntimeCondenser.exe | Bin 921812 -> 0 bytes .../UnstandardnessTestForDM.sln | 20 - .../UnstandardnessTestForDM.suo | Bin 23040 -> 0 bytes .../UnstandardnessTestForDM/Form1.Designer.cs | 160 - .../UnstandardnessTestForDM/Form1.cs | 484 -- .../UnstandardnessTestForDM/Form1.resx | 120 - .../UnstandardnessTestForDM/Program.cs | 21 - .../Properties/AssemblyInfo.cs | 36 - .../Properties/Resources.Designer.cs | 71 - .../Properties/Resources.resx | 117 - .../Properties/Settings.Designer.cs | 30 - .../Properties/Settings.settings | 7 - .../UnstandardnessTestForDM.csproj | 87 - .../bin/Debug/UnstandardnessTestForDM.exe | Bin 17920 -> 0 bytes .../bin/Debug/UnstandardnessTestForDM.pdb | Bin 38400 -> 0 bytes .../Debug/UnstandardnessTestForDM.vshost.exe | Bin 11600 -> 0 bytes ...nstandardnessTestForDM.vshost.exe.manifest | 11 - ...gnTimeResolveAssemblyReferencesInput.cache | Bin 6426 -> 0 bytes .../x86/Debug/GenerateResource.read.1.tlog | Bin 416 -> 0 bytes .../x86/Debug/GenerateResource.write.1.tlog | Bin 994 -> 0 bytes .../UnstandardnessTestForDM.Form1.resources | Bin 180 -> 0 bytes ...ssTestForDM.Properties.Resources.resources | Bin 180 -> 0 bytes ...dnessTestForDM.csproj.FileListAbsolute.txt | 18 - .../obj/x86/Debug/UnstandardnessTestForDM.exe | Bin 17920 -> 0 bytes .../obj/x86/Debug/UnstandardnessTestForDM.pdb | Bin 38400 -> 0 bytes tools/ci/check_grep.sh | 10 - tools/dm-invalid-utf8-discovery/index.js | 40 - tools/dm-invalid-utf8-discovery/package.json | 11 - tools/expand_filedir_paths.py | 93 - tools/indentation.awk | 32 - tools/nano-tester/.gitignore | 1 - tools/nano-tester/README.md | 15 - tools/nano-tester/index.html | 53 - tools/nano-tester/index.js | 107 - tools/nano-tester/initialData.json | 20 - tools/nano-tester/package.json | 19 - tools/playsound_finder/README.md | 4 - tools/playsound_finder/index.js | 78 - tools/playsound_finder/package.json | 11 - tools/readme.txt | 6 - vorestation.dme | 9 - 122 files changed, 89 insertions(+), 13656 deletions(-) delete mode 100644 bot/CORE_DATA.py delete mode 100644 bot/C_eightball.py delete mode 100644 bot/C_heaortai.py delete mode 100644 bot/C_makequote.py delete mode 100644 bot/C_maths.py delete mode 100644 bot/C_rot13.py delete mode 100644 bot/C_rtd.py delete mode 100644 bot/C_sarcasticball.py delete mode 100644 bot/C_srtd.py delete mode 100644 bot/D_help.py delete mode 100644 bot/FMLformatter.py delete mode 100644 bot/Marakov/Marakov.Cache delete mode 100644 bot/Marakov_Chain.py delete mode 100644 bot/Namecheck.py delete mode 100644 bot/NanoTrasenBot.py delete mode 100644 bot/Shortname.py delete mode 100644 bot/Timeconverter.py delete mode 100644 bot/Weather.py delete mode 100644 bot/YTCv3.py delete mode 100644 bot/YTCv4.py delete mode 100644 bot/_____Readme.txt delete mode 100644 bot/gen_fml.py delete mode 100644 bot/htmltagremove.py delete mode 100644 bot/irchat.py delete mode 100644 bot/linereader.py delete mode 100644 bot/nudge.py delete mode 100644 bot/save_load.py delete mode 100644 bot/some_but_not_all_2.py delete mode 100644 bot/xkcdparser.py delete mode 100644 code/__defines/webhooks.dm delete mode 100644 code/controllers/subsystems/webhooks.dm delete mode 100644 code/modules/webhooks/_webhook.dm delete mode 100644 code/modules/webhooks/webhook_ahelp2discord.dm delete mode 100644 code/modules/webhooks/webhook_custom_event.dm delete mode 100644 code/modules/webhooks/webhook_fax2discord.dm delete mode 100644 code/modules/webhooks/webhook_roundend.dm delete mode 100644 code/modules/webhooks/webhook_roundprep.dm delete mode 100644 code/modules/webhooks/webhook_roundstart.dm delete mode 100644 config/example/webhooks.json rename {ingame_manuals => html}/malf_ai.html (100%) delete mode 100644 ingame_manuals/README.txt delete mode 100644 lib/src/netutil.c delete mode 100644 lib/src/netutil.h delete mode 100644 lib/src/nudge.c delete mode 100644 scripts/ircbot_message.py delete mode 100644 tools/DM Line counter.exe delete mode 100644 tools/Event Probabilities/Event Probabilities.xls delete mode 100644 tools/HumanScissors/!README.txt delete mode 100644 tools/HumanScissors/CookieCutter.dmi delete mode 100644 tools/HumanScissors/HumanScissors.dm delete mode 100644 tools/HumanScissors/HumanScissors.dme delete mode 100644 tools/HumanScissors/SpritesToSnip.dmi delete mode 100644 tools/IconSplitter/!README.txt delete mode 100644 tools/IconSplitter/DmiToSplit.dmi delete mode 100644 tools/IconSplitter/IconSplitter.dm delete mode 100644 tools/IconSplitter/IconSplitter.dme delete mode 100644 tools/Redirector/Configurations.dm delete mode 100644 tools/Redirector/Redirect_Tgstation.dmb delete mode 100644 tools/Redirector/Redirect_Tgstation.dme delete mode 100644 tools/Redirector/Redirector.dm delete mode 100644 tools/Redirector/config.txt delete mode 100644 tools/Redirector/skin.dmf delete mode 100644 tools/Redirector/textprocs.dm delete mode 100644 tools/Runtime Condenser/Input.txt delete mode 100644 tools/Runtime Condenser/Main.cpp delete mode 100644 tools/Runtime Condenser/Output.txt delete mode 100644 tools/Runtime Condenser/RuntimeCondenser.exe delete mode 100644 tools/UnstandardnessTestForDM/UnstandardnessTestForDM.sln delete mode 100644 tools/UnstandardnessTestForDM/UnstandardnessTestForDM.suo delete mode 100644 tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Form1.Designer.cs delete mode 100644 tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Form1.cs delete mode 100644 tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Form1.resx delete mode 100644 tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Program.cs delete mode 100644 tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Properties/AssemblyInfo.cs delete mode 100644 tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Properties/Resources.Designer.cs delete mode 100644 tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Properties/Resources.resx delete mode 100644 tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Properties/Settings.Designer.cs delete mode 100644 tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Properties/Settings.settings delete mode 100644 tools/UnstandardnessTestForDM/UnstandardnessTestForDM/UnstandardnessTestForDM.csproj delete mode 100644 tools/UnstandardnessTestForDM/UnstandardnessTestForDM/bin/Debug/UnstandardnessTestForDM.exe delete mode 100644 tools/UnstandardnessTestForDM/UnstandardnessTestForDM/bin/Debug/UnstandardnessTestForDM.pdb delete mode 100644 tools/UnstandardnessTestForDM/UnstandardnessTestForDM/bin/Debug/UnstandardnessTestForDM.vshost.exe delete mode 100644 tools/UnstandardnessTestForDM/UnstandardnessTestForDM/bin/Debug/UnstandardnessTestForDM.vshost.exe.manifest delete mode 100644 tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache delete mode 100644 tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug/GenerateResource.read.1.tlog delete mode 100644 tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug/GenerateResource.write.1.tlog delete mode 100644 tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug/UnstandardnessTestForDM.Form1.resources delete mode 100644 tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug/UnstandardnessTestForDM.Properties.Resources.resources delete mode 100644 tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug/UnstandardnessTestForDM.csproj.FileListAbsolute.txt delete mode 100644 tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug/UnstandardnessTestForDM.exe delete mode 100644 tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug/UnstandardnessTestForDM.pdb delete mode 100644 tools/dm-invalid-utf8-discovery/index.js delete mode 100644 tools/dm-invalid-utf8-discovery/package.json delete mode 100644 tools/expand_filedir_paths.py delete mode 100644 tools/indentation.awk delete mode 100644 tools/nano-tester/.gitignore delete mode 100644 tools/nano-tester/README.md delete mode 100644 tools/nano-tester/index.html delete mode 100644 tools/nano-tester/index.js delete mode 100644 tools/nano-tester/initialData.json delete mode 100644 tools/nano-tester/package.json delete mode 100644 tools/playsound_finder/README.md delete mode 100644 tools/playsound_finder/index.js delete mode 100644 tools/playsound_finder/package.json delete mode 100644 tools/readme.txt diff --git a/bot/CORE_DATA.py b/bot/CORE_DATA.py deleted file mode 100644 index 5fe47961db..0000000000 --- a/bot/CORE_DATA.py +++ /dev/null @@ -1,13 +0,0 @@ -Name = "CC_NanoTrasen" #The name he uses to connect -no_absolute_paths = True -debug_on = False -SName = ["cc","nt","trasen","nano","nanotrasen"] #Other names he will respond to, in lowercase -DISABLE_ALL_NON_MANDATORY_SOCKET_CONNECTIONS = False -directory = "bot/directory/here/" # Directory the bot is located in, make sure to keep the "/" at the end -version = "TG CC-BY-SA 6" -Network = 'YOUR.SERVER.HERE' #e.g. "irc.rizon.net" -channel = "#YOUR CHANNEL HERE" #what channel you want the bot in -channels = ["#YOUR CHANNEL HERE"] #same as above -greeting = "Welcome!" #what he says when a person he hasn't seen before joins -prefix = "!" #prefix for bot commands -Port = 7000 diff --git a/bot/C_eightball.py b/bot/C_eightball.py deleted file mode 100644 index 3841c22172..0000000000 --- a/bot/C_eightball.py +++ /dev/null @@ -1,32 +0,0 @@ -from random import choice as fsample #Yay for added speed! -global responses -responses = ['Yes','Too bad','Will you turn me off if I tell you?','Absolutely', - "Not at all", "Nope", "It does", "No", "All the time", - "I don't really know", "Could be","Possibly","You're still here?",# Chaoticag - "No idea", "Of course", "Would you turn me off if I tell you?", - "Sweet!","Nah","Certainly","Yeah","Yup","I am quite confident that the answer is Yes", - "Perhaps", "Yeeeeaah... No.", "Indubitably" ] # Richard -def eightball(data,debug,sender,prefix): - global responses - arg = data.lower().replace(prefix+"eightball ","") - arg = arg.replace(prefix+"8ball ","") - if debug: - print sender+":"+prefix+"eightball", arg - if "answer" in arg and "everything" in arg and "to" in arg: - if debug: - print "Responded with",42 - return "42" - elif arg == "derp": - if debug: - print "Responded with herp" - return("herp") - elif arg == "herp": - if debug: - print "Responded with derp" - return("derp") - else: - #choice = sample(responses,1)[0] - choice = fsample(responses) - if debug: - print "Responded with", choice - return(choice) diff --git a/bot/C_heaortai.py b/bot/C_heaortai.py deleted file mode 100644 index 257c3a8634..0000000000 --- a/bot/C_heaortai.py +++ /dev/null @@ -1,5 +0,0 @@ -#Throws a coin, simple. -from random import random -def heaortai(debug,sender): return("Heads" if random() > 0.5 else "Tails") -# Takes 1/6th the time of doing it with random.randint(0,1) -# This file used to be a lot bigger, now it's kind of useless. diff --git a/bot/C_makequote.py b/bot/C_makequote.py deleted file mode 100644 index 9ae556ab7e..0000000000 --- a/bot/C_makequote.py +++ /dev/null @@ -1,21 +0,0 @@ -from save_load import save -from os import listdir -import CORE_DATA -directory = CORE_DATA.directory -def mkquote(prefix,influx,sender,debug): - arg = influx[10+len(prefix):] - if debug: - print sender+":"+prefix+"makequote "+str(len(arg))+" Characters" - if len(arg) == 0: - return("Type something to a quote") - else: - files = listdir(directory+"userquotes") - numb = 0 - while True: - numb += 1 - if sender.lower()+str(numb) in files: - pass - else: - save(directory+"userquotes/"+sender.lower()+str(numb),[arg,sender.lower()]) - return("Saved as:"+sender.lower()+str(numb)) - break diff --git a/bot/C_maths.py b/bot/C_maths.py deleted file mode 100644 index ea60457331..0000000000 --- a/bot/C_maths.py +++ /dev/null @@ -1,70 +0,0 @@ -### EXPERIMENTAL PROTOTYPE ### -# e = 2.7182818284590452353602874713526624977572 -# pi = math.pi -from __future__ import division #PYTHON Y U NO TELL ME THIS BEFORE -import math -import random -import re -e = "2.7182818284590452353602874713526624977572" -pi = str(math.pi) -global pre -pre = len("maths ") -def maths(influx,prefix="!",sender="NaN",debug=True,method="n"): - global pre - influx = influx.lower() - influx = influx[len(prefix)+pre:] - influx = influx.replace("pie",pi+"*"+e) - influx = influx.replace("e*",e+"*") - influx = influx.replace("*e","*"+e) - influx = influx.replace("pi",pi) - if debug: - print sender+":"+prefix+"maths" - if influx.count("**") == 0 and influx.count('"') == 0 and influx.count("'") == 0 and influx.count(";") == 0 and influx.count(":") == 0: - influx_low = influx.lower() - influx_hi = influx.upper() - if "0b" in influx_low: - influx_low = re.sub("0b[0-1]*","",influx_low) - influx_hi = re.sub("0B[0-1]*","",influx_hi) - if "0x" in influx_low: - influx_low = re.sub("0x[a-f0-9]*","",influx_low) - influx_hi = re.sub("0X[A-F0-9]*","",influx_hi) - if "rand" in influx_low: - influx_low = re.sub("rand","",influx_low) - influx_hi = re.sub("RAND","",influx_hi) - if influx_low == influx_hi: - influx = re.sub("rand","random.random()",influx) - try: - result = eval(influx.lower()) - except ZeroDivisionError: - return "Divide by zero detected." - except SyntaxError: - return "Syntax Error detected." - except TypeError: - return "Type Error detected." - except: - return "Unknown Error detected." - else: - if method == "n": #Normal - return result - elif method == "i": #Forced Int - return int(result) - elif method == "h": #Hex - try: - if "L" in hex(result)[2:]: - return hex(result)[2:-1] - else: - return hex(result)[2:].upper() - except TypeError: - return "That value (%s) cannot be interpreted properly using !hmaths" %(str(result)) - elif method == "b": #Binary - try: - return bin(result)[2:].upper() - except TypeError: - return "That value (%s) cannot be interpreted properly using !bmaths" %(str(result)) - else: - return result - else: - return "What are you trying to make me do again?" - else: - return "Those are likely to make me hang" - diff --git a/bot/C_rot13.py b/bot/C_rot13.py deleted file mode 100644 index 36e0796b9b..0000000000 --- a/bot/C_rot13.py +++ /dev/null @@ -1,23 +0,0 @@ -global parta,partb -parta = {"A":"N","B":"O","C":"P","D":"Q","E":"R","F":"S","G":"T","H":"U","I":"V","J":"W","K":"X","L":"Y","M":"Z"} -partb = {'O':'B','N':'A','Q':'D','P':'C','S':'F','R':'E','U':'H','T':'G','W':'J','V':'I','Y':'L','X':'K','Z':'M'} -def rot13(text): - global parta,partb - newtext = "" - for letter in text: - try: - if letter.isupper(): - newtext += parta[letter] - else: - newtext += parta[letter.upper()].lower() - except: - try: - if letter.isupper(): - newtext += partb[letter] - pass - else: - newtext += partb[letter.upper()].lower() - pass - except: - newtext += letter - return newtext diff --git a/bot/C_rtd.py b/bot/C_rtd.py deleted file mode 100644 index e4a032a0de..0000000000 --- a/bot/C_rtd.py +++ /dev/null @@ -1,96 +0,0 @@ -import random -def rtd(data,debug,sender): - backo = data - try: - arg1,arg2 = backo.split("d") - except ValueError, err: - return("Too many or too small amount of arguments") - else: - if debug: - print sender+":!rtd "+arg1+"d"+arg2 #faster than using %s's - die,die2 = [],[] - current_mark = "" - outcome = 0 - realnumberfound = False - checks = [] - count = 0 - arg1 = arg1.replace(" ","") - arg2 = arg2.replace(" ","") - try: - i_arg1 = int(arg1) - a_arg1 = abs(i_arg1) - if "+" in arg2 or "-" in arg2: - plus_spot = arg2.find("+") - minus_spot = arg2.find("-") - if plus_spot == -1 and minus_spot == -1: - nicer_form = "" - elif plus_spot != -1 and minus_spot == -1: - nicer_form = arg2[plus_spot:] - elif plus_spot == -1 and minus_spot != -1: - nicer_form = arg2[minus_spot:] - else: - if plus_spot < minus_spot: - nicer_form = arg2[plus_spot:] - else: - nicer_form = arg2[minus_spot:] - for letter in arg2: - if letter == "+" or letter == "-": - current_mark = letter - checks = [] - count += 1 - continue - checks.append(letter) - try: - next_up = arg2[count+1] - except: - if realnumberfound == False: - i_arg2 = int("".join(checks)) - checks = [] - realnumberfound = True - elif current_mark == "+": - outcome += int("".join(checks)) - else: - outcome -= int("".join(checks)) - else: - if next_up == "+" or next_up == "-": - if realnumberfound == False: - i_arg2 = int("".join(checks)) - checks = [] - realnumberfound = True - else: - if current_mark == "+": - outcome += int("".join(checks)) - else: - outcome -= int("".join(checks)) - checks = [] - count += 1 - else: - i_arg2 = int(arg2) - if a_arg1 == 0 or abs(i_arg2) == 0: - raise RuntimeError - except ValueError: - return("You lied! That's not a number!") - except RuntimeError: - return("Too many zeroes!") - else: - if a_arg1 > 100: - return("Too many rolls, I can only do one hundred at max.") - else: - for i in xrange(0,a_arg1): - if i_arg2 < 0: - dice = random.randint(i_arg2,0) - else: - dice = random.randint(1,i_arg2) - die.append(dice) - die2.append(str(dice)) - if i_arg2 < 0: - flist = "".join(die2) - else: - flist = "+".join(die2) - if len(flist) > 350: - return(str(reduce(lambda x,y: x+y, die)+outcome)) - else: - if current_mark == "": - return(flist+" = "+str(reduce(lambda x,y: x+y, die)+outcome)) - else: - return(flist+" ("+nicer_form+") = "+str(reduce(lambda x,y: x+y, die)+outcome)) diff --git a/bot/C_sarcasticball.py b/bot/C_sarcasticball.py deleted file mode 100644 index f5b0e60b1d..0000000000 --- a/bot/C_sarcasticball.py +++ /dev/null @@ -1,30 +0,0 @@ -from random import choice as fsample -sarcastic_responses = ["Yeah right","What do I look like to you?","Are you kidding me?",#UsF - "As much as you","You don't believe that yourself","When pigs fly",#UsF - "Like your grandma","You would like to know, wouldn't you?", #UsF - "Like your mom", #Spectre - "Totally","Not at all", #Spectre - "AHAHAHahahaha, No.", #Strumpetplaya - "Not as much as USER","As much as USER", - "Really, you expect me to tell you that?", - "Right, and you've been building NOUNs for those USERs in the LOCATION, haven't you?" ] #Richard -locations = ["woods","baystation","ditch"] -nouns = ["bomb","toilet","robot","cyborg", - "garbage can","gun","cake", - "missile"] -def sarcasticball(data,debug,sender,users,prefix): - arg = data.lower().replace(prefix+"sarcasticball ","") - arg = arg.replace(prefix+"sball ","") - if debug: - print sender+":"+prefix+"sarcasticball", arg - choice = fsample(sarcastic_responses) - if "USER" in choice: - choice = choice.replace("USER",fsample(users),1) - choice = choice.replace("USER",fsample(users),1) - if "NOUN" in choice: - choice = choice.replace("NOUN",fsample(nouns),1) - if "LOCATION" in choice: - choice = choice.replace("LOCATION",fsample(locations),1) - if debug: - print "Responded with", choice - return(choice) diff --git a/bot/C_srtd.py b/bot/C_srtd.py deleted file mode 100644 index b49b8f8c1c..0000000000 --- a/bot/C_srtd.py +++ /dev/null @@ -1,35 +0,0 @@ -import random -def srtd(data,debug,sender): - try: - arg1,arg2 = data.split("d") - except ValueError, err: - if str(err) == "need more than 1 value to unpack": - return("Too small amount of arguments") - else: - return("Too many arguments") - else: - if debug: - print sender+":!rtd "+arg1+"d"+arg2 - die = [] - arg1 = arg1.replace(" ","") - arg2 = arg2.replace(" ","") - try: - i_arg1 = int(arg1) - i_arg2 = int(arg2) - if abs(i_arg1) == 0 or abs(i_arg2) == 0: - raise RuntimeError - except ValueError: - return("You lied! That's not a number!") - except RuntimeError: - return("Too many zeroes!") - else: - if abs(i_arg1) > 500: - return("Too many rolls, I can only do five hundred at max.") - else: - for i in xrange(0,abs(i_arg1)): - if i_arg2 < 0: - dice = random.randint(i_arg2,0) - else: - dice = random.randint(1,i_arg2) - die.append(dice) - return(str(reduce(lambda x,y: x+y, die))) diff --git a/bot/D_help.py b/bot/D_help.py deleted file mode 100644 index d75ed94f5f..0000000000 --- a/bot/D_help.py +++ /dev/null @@ -1,60 +0,0 @@ -#As new commands are added, update this. -# Last updated: 8.3.2011 - -# Updated 12.3.2011: -# - Added the missing help data for Version -# - Imported CORE_DATA to get the name. -# - Tidied some commands up a bit. -# - Replaced all "Bot"s with the Skibot's current name. - -from CORE_DATA import Name -everything = {"8ball":"[8ball ] Responds to the argument", - "allcaps":"[allcaps ] Takes an uppercase string and returns a capitalized version", - "bmaths":"[bmaths ] Takes a math equation (Like 5+5) and returns a binary result", - "coin":"[coin] Flips a coin", - "dance":"[dance] Makes %s do a little dance" %(Name), - "delquote":"(OP ONLY) [delquote ] Removes a quote with the filename equal to the argument", - "disable":"(OP ONLY) [disable] Disables all output from %s" %(Name), - "disable dance":"(HALFOP / OP ONLY) [disable dance] or [dd] Toggles dancing", - "disable fml":"(HALFOP / OP ONLY) [disable fml] Disables FML", - "eightball":"[eightball ] Responds to the argument", - "enable":"(OP ONLY) [enable] After being disabled, enable will turn output back on", - "enable fml":"{HALFOP / OP ONLY} [enable fml] After fml has been disabled, enable fml will make it available again", - "fml":"[fml] Returns a random Fuck My Life bit", - "give":"[give ] Gives the Pneumatic Disposal Unit the argument", - "help":"[help []] Returns the list of commands or a detailed description of a command if specified", - "hmaths":"[hmaths ] Takes a math equation (Like 5+5) and returns a hex result", - "makequote":"[makequote ] Creates a quote with arg being the quote itself", - "maths":"[maths ] Takes a math equation (Like 5+5) and returns a default result", - "note":"[note []] Opens a note if only arg1 is specified, Creates a note with the name of arg1 and contents of arg2 if arg2 is specified, if you prefix the note name with [CP], it creates a public note only to that channel. Which can be accessed by !note _", - "notes":"[notes] Displays all your saved notes on %s" %(Name), - "otherball":"[otherball] If Floorbot is on the same channel, %s will ask him a random question when this command is passed" %(Name), - "purgemessages":"[purgemessages] Used to delete all your Tell messages (%s,Tell )" %(Name), - "quote":"[quote []] Picks a random quote, if the author is specified, a random quote by that author", - "redmine":"[redmine] If you have a note called redmine, with a valid whoopshop redmine address, this displays all the bugs labeled as 'New' on that page. It also displays the todo note if it's found.", - "replace":"[replace] Fixes the Pneumatic Smasher if it's been broken", - "rot13":"[rot13 ] Encrypts the arg by using the rot13 method", - "rtd":"[rtd [d]] Rolls a six-sided dice if no arguments are specified, otherwise arg1 is the amount of rolls and arg2 is the amount of sides the dice have", - "sarcasticball":"[sarcasticball ] Responds to the argument sarcastically", - "sball":"[sball ] Responds to the argument sarcastically", - "srtd":"[srtd d] Rolls amount of sided die without showing the dice values separately", - "stop":"(RESTRICTED TO OP AND CREATOR) [stop] Stops %s, plain and simple" %(Name), - "suggest":"[suggest ] Saves a suggestion given to %s, to be later viewed by the creator" %(Name), - "take":"[take ] Takes an item specified in the argument from the Pneumatic Smasher", - "tban":"(OP ONLY) [tban ] When %s is an operator, You can ban an user for specified amount of seconds" %(Name), - "thm":"(RESTRICTED TO OP AND CREATOR) [thm] Normally in 8ball and sarcasticball, Users are not shown, instead replaced by things like demons or plasma researchers, toggling this changes that behaviour.", - "tm":"(OP AND CREATOR ONLY) [tm] Toggles marakov", - "togglequotemakers":"(OP ONLY) [togglequotemakers or tqm] Normally with the quote command, makers are not shown, this toggles that behaviour.", - "tqm":"(OP ONLY) [tqm or togglequotemakers] Normally with the quote command, makers are not shown, this toggles that behaviour.", - "toggleofflinemessages":"(OP ONLY) [toggleofflinemessages or tom] Allows an operator to toggle leaving Tell messages (%s, Tell ] Whenever the user says something in allcaps, it's capitalized.", - "uptime":"[uptime] Displays how long %s has been alive on the channel."%(Name), - "use":"[use] Uses the Pneumatic Smasher.", - "youtube":"[youtube ] Shows the title of a video by checking the URL provided.", - "version":"[version] Shows the current version of %s." %(Name), - "weather":"[weather ] Displays the current weather of the provided location.", - "life":"I cannot help you with that, sorry."} - diff --git a/bot/FMLformatter.py b/bot/FMLformatter.py deleted file mode 100644 index 78649fe053..0000000000 --- a/bot/FMLformatter.py +++ /dev/null @@ -1,55 +0,0 @@ -from htmltagremove import htr -def formatter(data): - newdata = [] - data = htr(data) - bad = ["Your nick : Categories : ","\r","Advanced search - last", - "FMyLife","Get the guts to spill the beans","FML: Your random funny stories", - "Woman","Man","Choose","Health","Intimacy","Miscellaneous","Man or woman? ", - "Money","Kids","Work","Love","Email notification?", - "Moderate the FMLs","Submit your FML story", - "- If your story isn't published on the website, don't feel offended, and thank you nevertheless!", - "Pick a country","See all","Your account","Team's blog", - "Meet the FMLHello readers! Did you meet someone new this...The whole blog", - "Amazon","Borders","IndieBound","Personalized book","Terms of use", - "FML t-shirts -","Love - Money - Kids - Work - Health - Intimacy - Miscellaneous - Members", - "Follow the FML Follow the FML blog Follow the FML comments ", - "_qoptions={", - "};","})();","Categories","Sign up - Password? ", " Net Avenir : gestion publicitaire", - "FMyLife, the book","Available NOW on:","Barnes & Noble"] - - for checkable in data: - if checkable in bad: - pass - elif "_gaq.push" in checkable: - pass - elif "ga.src" in checkable: - pass - elif "var _gaq" in checkable: - pass - elif "var s =" in checkable: - pass - elif "var ga" in checkable: - pass - elif "function()" in checkable: - pass - elif "siteanalytics" in checkable: - pass - elif "qacct:" in checkable: - pass - elif "\r" in checkable: - pass - elif "ic_" in checkable: - pass - elif "Please note that spam and nonsensical stories" in checkable: - pass - elif "Refresh this page" in checkable: - pass - elif "You...The whole blo" in checkable: - pass - elif "Net Avenir : gestion publicitair" in checkable: - pass - else: - if "Net Avenir : gestion publicitaireClose the advertisement" in checkable: - checkable = checkable.replace("Net Avenir : gestion publicitaireClose the advertisement","") - newdata.append(checkable) - return newdata diff --git a/bot/Marakov/Marakov.Cache b/bot/Marakov/Marakov.Cache deleted file mode 100644 index 9818ecc7ab..0000000000 --- a/bot/Marakov/Marakov.Cache +++ /dev/null @@ -1,2450 +0,0 @@ -(dp0 -S'all' -p1 -(lp2 -S':p' -p3 -aS'the' -p4 -asS'code' -p5 -(lp6 -S'in' -p7 -asS'stores' -p8 -(lp9 -S'that' -p10 -asS'just' -p11 -(lp12 -S'like' -p13 -aS'marakov' -p14 -aS'felt' -p15 -aS'gives' -p16 -aS'a' -p17 -aS'add' -p18 -aS'what' -p19 -asS'being' -p20 -(lp21 -S'goon' -p22 -aS'a' -p23 -asS'text' -p24 -(lp25 -S'string' -p26 -asS'dependant' -p27 -(lp28 -S'on' -p29 -asS'speedup' -p30 -(lp31 -S'at' -p32 -asS'felt' -p33 -(lp34 -S'like' -p35 -asS'installed' -p36 -(lp37 -S'tho' -p38 -asS'disabled' -p39 -(lp40 -S'it' -p41 -asS'timing' -p42 -(lp43 -S'when' -p44 -asS'psyco' -p45 -(lp46 -S'installed' -p47 -aS'is' -p48 -asS'stops' -p49 -(lp50 -S'timing' -p51 -asS'file' -p52 -(lp53 -S'too' -p54 -aS'that' -p55 -aS'where' -p56 -asS'go' -p57 -(lp58 -S'fuck' -p59 -aS'into' -p60 -aS'test' -p61 -asS'hell' -p62 -(lp63 -S'recreate' -p64 -asS'configurable' -p65 -(lp66 -S'greeting' -p67 -asS'bs12' -p68 -(lp69 -S'message' -p70 -asS'its' -p71 -(lp72 -S'fine' -p73 -aS'just' -p74 -aS'calculated' -p75 -aS'not' -p76 -aS'really' -p77 -aS'ridiculously' -p78 -aS'now' -p79 -aS'a' -p80 -aS'missing' -p81 -aS'for' -p82 -aS'false' -p83 -aS'on' -p84 -asS'before' -p85 -(lp86 -S'that' -p87 -asS'rp-heavy' -p88 -(lp89 -S'server' -p90 -asS'announcement' -p91 -(lp92 -S'like' -p93 -asS'now' -p94 -(lp95 -S'it' -p96 -aS'running' -p97 -aS'makie' -p98 -aS'i' -p99 -asS'nudge' -p100 -(lp101 -S'python' -p102 -aS'is' -p103 -asS'sourced' -p104 -(lp105 -S'under' -p106 -asS'title' -p107 -(lp108 -S'of' -p109 -asS'situations' -p110 -(lp111 -S'where' -p112 -asS'fine-tune' -p113 -(lp114 -S'it' -p115 -asS'enough' -p116 -(lp117 -S'to' -p118 -asS'send' -p119 -(lp120 -S'it' -p121 -aS'one' -p122 -asS'should' -p123 -(lp124 -S'be' -p125 -aS'learn' -p126 -aS'we' -p127 -asS'values' -p128 -(lp129 -S'dont' -p130 -asS'to' -p131 -(lp132 -S'edit' -p133 -aS'back' -p134 -aS'know' -p135 -aS'care' -p136 -aS'be' -p137 -aS'configure' -p138 -aS'the' -p139 -aS'null' -p140 -aS'phone' -p141 -aS'welcome' -p142 -aS'reverse' -p143 -aS'send' -p144 -aS'reg' -p145 -aS'point' -p146 -aS'automatically' -p147 -aS'work' -p148 -aS'waste' -p149 -aS'marshmallow' -p150 -aS'queries' -p151 -aS'+o' -p152 -aS'disable' -p153 -asS'jit' -p154 -(lp155 -S'compiler' -p156 -asS'going' -p157 -(lp158 -S'to' -p159 -asS'helps' -p160 -(lp161 -S'me' -p162 -asS'messes' -p163 -(lp164 -S'it' -p165 -asS'indeed' -p166 -(lp167 -S'it' -p168 -asS'tg' -p169 -(lp170 -S'and' -p171 -asS'has' -p172 -(lp173 -S'been' -p174 -aS'my' -p175 -asS'into' -p176 -(lp177 -S'#tgstation13' -p178 -asS'ridiculously' -p179 -(lp180 -S'simple' -p181 -asS'annoy' -p182 -(lp183 -S'downstream' -p184 -asS'them' -p185 -(lp186 -S'out' -p187 -asS'someone' -p188 -(lp189 -S'adminhelps' -p190 -asS'sense' -p191 -(lp192 -S'i' -p193 -asS'string' -p194 -(lp195 -S'called' -p196 -asS'get' -p197 -(lp198 -S'ready' -p199 -asS'python' -p200 -(lp201 -S'script' -p202 -aS'so' -p203 -aS'code' -p204 -aS'scripts' -p205 -aS'and' -p206 -aS'but' -p207 -aS'now' -p208 -aS'released' -p209 -aS'is' -p210 -aS'enough' -p211 -asS'goon' -p212 -(lp213 -S'tg' -p214 -asS'showing' -p215 -(lp216 -S'up' -p217 -asS'20ish' -p218 -(lp219 -S'line' -p220 -asS'gonna' -p221 -(lp222 -S'go' -p223 -asS'made' -p224 -(lp225 -S'doctors' -p226 -asS'every' -p227 -(lp228 -S'loop' -p229 -aS'time' -p230 -asS'know' -p231 -(lp232 -S'the' -p233 -aS'why' -p234 -aS'that' -p235 -asS'not' -p236 -(lp237 -S'just' -p238 -aS'necessary' -p239 -aS'to' -p240 -aS'so' -p241 -aS'need' -p242 -aS'sure' -p243 -aS'relaying' -p244 -aS'very' -p245 -aS'even' -p246 -asS'2' -p247 -(lp248 -S'loop' -p249 -asS'password' -p250 -(lp251 -S'var' -p252 -asS'day' -p253 -(lp254 -S'so' -p255 -asS'swapping' -p256 -(lp257 -S'to' -p258 -asS'easily' -p259 -(lp260 -S'editable' -p261 -asS'necessary' -p262 -(lp263 -S'at' -p264 -asS'like' -p265 -(lp266 -S'being' -p267 -aS'linking' -p268 -aS'to' -p269 -aS'how' -p270 -aS'it' -p271 -aS'skbzzzzzibi' -p272 -asS'course' -p273 -(lp274 -S'that' -p275 -asS'edit' -p276 -(lp277 -S'baystation' -p278 -asS'fully' -p279 -(lp280 -S'open' -p281 -asS'greeting' -p282 -(lp283 -S'message' -p284 -asS'server' -p285 -(lp286 -S'basically' -p287 -aS'' -p288 -asS'default' -p289 -(lp290 -S'config' -p291 -asS'bad' -p292 -(lp293 -S'company' -p294 -asS'channel' -p295 -(lp296 -S'or' -p297 -asS'always' -p298 -(lp299 -S'makes' -p300 -asS'went' -p301 -(lp302 -S'past' -p303 -asS'quarxink' -p304 -(lp305 -S'its' -p306 -asS'automatic' -p307 -(lp308 -S'announcement' -p309 -asS'once' -p310 -(lp311 -S'per' -p312 -asS'wrote' -p313 -(lp314 -S'most' -p315 -asS'pain' -p316 -(lp317 -S'on' -p318 -asS'system' -p319 -(lp320 -S'calls' -p321 -asS'right' -p322 -(lp323 -S'brb' -p324 -asS'decides' -p325 -(lp326 -S'not' -p327 -asS'people' -p328 -(lp329 -S'say' -p330 -aS'i' -p331 -aS'he' -p332 -asS'goddamn' -p333 -(lp334 -S'python' -p335 -asS'back' -p336 -(lp337 -S'it' -p338 -asS'used' -p339 -(lp340 -S'to' -p341 -aS'for' -p342 -asS'past' -p343 -(lp344 -S'too' -p345 -asS'cost' -p346 -(lp347 -S'of' -p348 -asS'learn' -p349 -(lp350 -S'python' -p351 -asS'are' -p352 -(lp353 -S'lawyers' -p354 -aS'actually' -p355 -aS'configurable' -p356 -aS'we' -p357 -asS'celestialike' -p358 -(lp359 -S'of' -p360 -asS'lawyers' -p361 -(lp362 -S'for' -p363 -asS'time' -p364 -(lp365 -S'he' -p366 -asS'out' -p367 -(lp368 -S'switch' -p369 -aS'slowdowns' -p370 -aS'that' -p371 -aS'why' -p372 -aS'nudge' -p373 -asS'even' -p374 -(lp375 -S'an' -p376 -asS'what' -p377 -(lp378 -S'the' -p379 -aS'is' -p380 -aS'these' -p381 -aS'was' -p382 -aS'license' -p383 -aS'about' -p384 -aS'i' -p385 -asS'said' -p386 -(lp387 -S'in' -p388 -asS'sayt' -p389 -(lp390 -S'hat' -p391 -asS'for' -p392 -(lp393 -S'that' -p394 -aS'every' -p395 -aS'the' -p396 -aS'quarx' -p397 -aS'cc_nanotrasen' -p398 -aS'homoerotic' -p399 -aS'situations' -p400 -aS'good' -p401 -asS'#tgstation13' -p402 -(lp403 -S'and' -p404 -asS'per' -p405 -(lp406 -S'name' -p407 -asS'whole' -p408 -(lp409 -S'config' -p410 -asS'state' -p411 -(lp412 -S'the' -p413 -asS'does' -p414 -(lp415 -S'the' -p416 -aS'it' -p417 -asS'goes' -p418 -(lp419 -S'on' -p420 -asS'readme' -p421 -(lp422 -S'too' -p423 -asS'new' -p424 -(lp425 -S'bot' -p426 -aS'person' -p427 -asS'learned' -p428 -(lp429 -S'python' -p430 -asS'irc' -p431 -(lp432 -S'bot' -p433 -asS'reg' -p434 -(lp435 -S'it' -p436 -asS'blow' -p437 -(lp438 -S'borgs' -p439 -asS'shut' -p440 -(lp441 -S'down' -p442 -asS'after' -p443 -(lp444 -S'an' -p445 -aS'a' -p446 -asS'ill' -p447 -(lp448 -S'switch' -p449 -asS'says' -p450 -(lp451 -S'someones' -p452 -asS'queries' -p453 -(lp454 -S'again' -p455 -asS'technocracy' -p456 -(lp457 -S'and' -p458 -asS'we' -p459 -(lp460 -S'go' -p461 -aS'do' -p462 -aS'totally' -p463 -aS'going' -p464 -aS'expect' -p465 -aS'just' -p466 -aS'dont' -p467 -aS'have' -p468 -asS'put' -p469 -(lp470 -S'all' -p471 -asS'from' -p472 -(lp473 -S'the' -p474 -asS'data11lower' -p475 -(lp476 -S'==' -p477 -asS'configuration' -p478 -(lp479 -S'for' -p480 -asS'wait' -p481 -(lp482 -S'what' -p483 -asS'on' -p484 -(lp485 -S'my' -p486 -aS'the' -p487 -aS'a' -p488 -aS'connect' -p489 -aS'svn' -p490 -aS'one' -p491 -aS'/' -p492 -asS'about' -p493 -(lp494 -S'system' -p495 -asS'ok' -p496 -(lp497 -S'thats' -p498 -asS'reverse' -p499 -(lp500 -S'engineer' -p501 -asS'license' -p502 -(lp503 -S'is' -p504 -asS'oh' -p505 -(lp506 -S'okay' -p507 -aS'ok' -p508 -aS'i' -p509 -aS'wait' -p510 -asS'starts' -p511 -(lp512 -S'timing' -p513 -asS'could' -p514 -(lp515 -S'learn' -p516 -asS'larger' -p517 -(lp518 -S'ram' -p519 -asS'bot' -p520 -(lp521 -S'is' -p522 -aS'have' -p523 -aS'shut' -p524 -aS'uses' -p525 -asS'running' -p526 -(lp527 -S'it' -p528 -aS'the' -p529 -aS'on' -p530 -asS'times' -p531 -(lp532 -S'on' -p533 -aS'reported' -p534 -aS'went' -p535 -asS'where' -p536 -(lp537 -S'he' -p538 -asS'heck' -p539 -(lp540 -S':d' -p541 -asS'idk' -p542 -(lp543 -S'magic' -p544 -asS'receives' -p545 -(lp546 -S'a' -p547 -asS'bots' -p548 -(lp549 -S'showing' -p550 -asS'slightly' -p551 -(lp552 -S'larger' -p553 -asS'or' -p554 -(lp555 -S'know' -p556 -aS'what' -p557 -aS'work' -p558 -aS'should' -p559 -aS'data11lower' -p560 -asS'automatically' -p561 -(lp562 -S'state' -p563 -asS'thats' -p564 -(lp565 -S'not' -p566 -aS'the' -p567 -aS'kind' -p568 -asS'ugh' -p569 -(lp570 -S'fuck' -p571 -asS'major' -p572 -(lp573 -S'ss13' -p574 -aS'three' -p575 -asS'py' -p576 -(lp577 -S'file' -p578 -asS'soss' -p579 -(lp580 -S'server' -p581 -asS'dont' -p582 -(lp583 -S'need' -p584 -aS'have' -p585 -aS'send' -p586 -aS'want' -p587 -aS'speak' -p588 -asS'hostmask' -p589 -(lp590 -S'combination' -p591 -asS'point' -p592 -(lp593 -S'out' -p594 -aS'has' -p595 -asS'simple' -p596 -(lp597 -S'to' -p598 -asS'miura' -p599 -(lp600 -S'doesnt' -p601 -asS'variables' -p602 -(lp603 -S'in' -p604 -asS'recreate' -p605 -(lp606 -S'it' -p607 -asS'welcome' -p608 -(lp609 -S'to' -p610 -asS'linking' -p611 -(lp612 -S'them' -p613 -asS'down' -p614 -(lp615 -S'when' -p616 -asS'why' -p617 -(lp618 -S'its' -p619 -aS'it' -p620 -aS'is' -p621 -asS'doesnt' -p622 -(lp623 -S'play' -p624 -aS'call' -p625 -asS'marakov' -p626 -(lp627 -S'loops' -p628 -aS'helps' -p629 -asS'laugh' -p630 -(lp631 -S'when' -p632 -asS'pony' -p633 -(lp634 -S'asshole' -p635 -asS'message' -p636 -(lp637 -S'has' -p638 -aS'should' -p639 -asS'open' -p640 -(lp641 -S'sourced' -p642 -aS'source' -p643 -asS'brb' -p644 -(lp645 -S'swapping' -p646 -asS'speak' -p647 -(lp648 -S'python' -p649 -asS'pastebin' -p650 -(lp651 -S'the' -p652 -asS'line' -p653 -(lp654 -S'core' -p655 -aS'on' -p656 -asS'three' -p657 -(lp658 -S'being' -p659 -asS'yay' -p660 -(lp661 -S'it' -p662 -asS'meatbag' -p663 -(lp664 -S'when' -p665 -asS'would' -p666 -(lp667 -S'be' -p668 -aS'expect' -p669 -asS'script' -p670 -(lp671 -S'that' -p672 -asS'illegal' -p673 -(lp674 -S'ban' -p675 -asS'there' -p676 -(lp677 -S'are' -p678 -aS'we' -p679 -asS'add' -p680 -(lp681 -S'that' -p682 -aS'a' -p683 -asS'been' -p684 -(lp685 -S'processed' -p686 -asS'name' -p687 -(lp688 -S'/' -p689 -aS'when' -p690 -asS'ai' -p691 -(lp692 -S'malf' -p693 -asS'marshmallow' -p694 -(lp695 -S'pony' -p696 -asS'of' -p697 -(lp698 -S'the' -p699 -aS'ss13' -p700 -aS'tgstation13' -p701 -aS'a' -p702 -aS'course' -p703 -aS'it' -p704 -aS'soss' -p705 -aS'annoying' -p706 -aS'any' -p707 -aS'me' -p708 -aS'cap' -p709 -aS'technocracy' -p710 -asS'call' -p711 -(lp712 -S'me' -p713 -asS'too' -p714 -(lp715 -S':' -p716 -aS'fast' -p717 -asS'basic' -p718 -(lp719 -S'configuration' -p720 -asS'var' -p721 -(lp722 -S'and' -p723 -asS'calc' -p724 -(lp725 -S'times' -p726 -asS'was' -p727 -(lp728 -S'going' -p729 -aS'it' -p730 -aS'that' -p731 -aS'not' -p732 -aS'intended' -p733 -asS'tell' -p734 -(lp735 -S'people' -p736 -asS'500' -p737 -(lp738 -S'chance' -p739 -asS'gives' -p740 -(lp741 -S'a' -p742 -asS'sort' -p743 -(lp744 -S'of' -p745 -asS'svn' -p746 -(lp747 -S'size' -p748 -asS'only' -p749 -(lp750 -S'does' -p751 -aS'2' -p752 -asS'10-30%' -p753 -(lp754 -S'speedup' -p755 -asS'knows' -p756 -(lp757 -S'about' -p758 -asS'webpage' -p759 -(lp760 -S'title' -p761 -asS'that' -p762 -(lp763 -S'makes' -p764 -aS'would' -p765 -aS'the' -p766 -aS'needs' -p767 -aS'to' -p768 -aS'at' -p769 -aS'for' -p770 -aS'was' -p771 -aS'data' -p772 -asS'company' -p773 -(lp774 -S'2' -p775 -asS'under' -p776 -(lp777 -S'cc-by-sa' -p778 -asS'editable' -p779 -(lp780 -S'config' -p781 -asS'but' -p782 -(lp783 -S'of' -p784 -asS'idea' -p785 -(lp786 -S'what' -p787 -asS'released' -p788 -(lp789 -S'under' -p790 -asS'part' -p791 -(lp792 -S'before' -p793 -asS'link' -p794 -(lp795 -S'said' -p796 -aS'to' -p797 -asS'basically' -p798 -(lp799 -S'it' -p800 -asS'doctors' -p801 -(lp802 -S'useless' -p803 -asS'==' -p804 -(lp805 -S'channel' -p806 -aS'channel1::' -p807 -asS'be' -p808 -(lp809 -S'an' -p810 -aS'called' -p811 -aS'a' -p812 -aS'in' -p813 -aS'running' -p814 -aS'used' -p815 -asS'editing' -p816 -(lp817 -S'goddamn' -p818 -asS'with' -p819 -(lp820 -S'the' -p821 -aS'easily' -p822 -aS'adminhelps' -p823 -aS'my' -p824 -aS'a' -p825 -asS'those' -p826 -(lp827 -S'are' -p828 -asS'he' -p829 -(lp830 -S'put' -p831 -aS'disabled' -p832 -aS'is' -p833 -aS'keeps' -p834 -aS'knows' -p835 -aS'stores' -p836 -aS'notices' -p837 -aS'only' -p838 -aS'doesnt' -p839 -aS'receives' -p840 -aS'says' -p841 -aS'messes' -p842 -asS'me' -p843 -(lp844 -S'figure' -p845 -aS'laugh' -p846 -aS'to' -p847 -aS'meatbag' -p848 -asS'also' -p849 -(lp850 -S'i' -p851 -aS'we' -p852 -aS'now' -p853 -asS'kind' -p854 -(lp855 -S'of' -p856 -asS'main' -p857 -(lp858 -S'bot' -p859 -asS'/' -p860 -(lp861 -S'hostmask' -p862 -aS'off' -p863 -asS'full' -p864 -(lp865 -S'of' -p866 -asS'these' -p867 -(lp868 -S'are' -p869 -asS'makie' -p870 -(lp871 -S'it' -p872 -asS'sleepers' -p873 -(lp874 -S'made' -p875 -asS'up' -p876 -(lp877 -S'elsewhere' -p878 -aS'me' -p879 -aS'a' -p880 -asS'will' -p881 -(lp882 -S'annoy' -p883 -asS'computer' -p884 -(lp885 -S'explodd' -p886 -asS'limit' -p887 -(lp888 -S'on' -p889 -asS'can' -p890 -(lp891 -S'fine-tune' -p892 -aS'add' -p893 -aS'i' -p894 -aS'we' -p895 -asS'how' -p896 -(lp897 -S'its' -p898 -aS'he' -p899 -asS'were' -p900 -(lp901 -S'the' -p902 -asS'malf' -p903 -(lp904 -S'blow' -p905 -asS'baystation' -p906 -(lp907 -S'12' -p908 -asS'other' -p909 -(lp910 -S'loop' -p911 -asS'my' -p912 -(lp913 -S'end' -p914 -aS'computer' -p915 -aS'code' -p916 -asS'called' -p917 -(lp918 -S'as' -p919 -aS'when' -p920 -asS'loop' -p921 -(lp922 -S'times' -p923 -asS'expect' -p924 -(lp925 -S'it' -p926 -asS'and' -p927 -(lp928 -S'bs12' -p929 -aS'stops' -p930 -aS'i' -p931 -aS'do' -p932 -aS'to' -p933 -aS'make' -p934 -aS'he' -p935 -aS'preferably' -p936 -aS'thats' -p937 -aS'sayt' -p938 -aS'fascism' -p939 -asS'dedicated' -p940 -(lp941 -S'solely' -p942 -asS'changed' -p943 -(lp944 -S'it' -p945 -asS'sees' -p946 -(lp947 -S'a' -p948 -asS'relaying' -p949 -(lp950 -S'adminhelps' -p951 -asS'figure' -p952 -(lp953 -S'out' -p954 -asS'do' -p955 -(lp956 -S'not' -p957 -aS'it' -p958 -aS'seem' -p959 -asS'ran' -p960 -(lp961 -S'the' -p962 -asS'ah' -p963 -(lp964 -S'running' -p965 -aS'ok' -p966 -asS'is' -p967 -(lp968 -S'baystation' -p969 -aS'a' -p970 -aS'that' -p971 -aS'it' -p972 -aS'coded' -p973 -aS'python' -p974 -aS'open' -p975 -aS'dependant' -p976 -aS'so' -p977 -aS'apparently' -p978 -asS'ram' -p979 -(lp980 -S'footprint' -p981 -asS'am' -p982 -(lp983 -S'the' -p984 -asS'it' -p985 -(lp986 -S'up' -p987 -aS'starts' -p988 -aS'receives' -p989 -aS'just' -p990 -aS'expires' -p991 -aS'works' -p992 -aS'always' -p993 -aS'decides' -p994 -aS'on' -p995 -aS'here' -p996 -aS'used' -p997 -aS'to' -p998 -aS'those' -p999 -aS'sees' -p1000 -aS'does' -p1001 -aS'myself' -p1002 -aS'a' -p1003 -aS'okay' -p1004 -aS'was' -p1005 -aS'go' -p1006 -aS'if' -p1007 -aS'once' -p1008 -aS'is' -p1009 -aS'for' -p1010 -asS'an' -p1011 -(lp1012 -S'hour' -p1013 -aS'illegal' -p1014 -aS'automatic' -p1015 -aS'error' -p1016 -asS'ready' -p1017 -(lp1018 -S'for' -p1019 -asS'say' -p1020 -(lp1021 -S'sleepers' -p1022 -aS'ai' -p1023 -aS'that*' -p1024 -aS'stop' -p1025 -asS'good' -p1026 -(lp1027 -S':p' -p1028 -asS'im' -p1029 -(lp1030 -S'not' -p1031 -aS'sorry' -p1032 -aS'lazy' -p1033 -asS'at' -p1034 -(lp1035 -S'all' -p1036 -aS'the' -p1037 -aS'no' -p1038 -asS'have' -p1039 -(lp1040 -S'no' -p1041 -aS'psyco' -p1042 -aS'the' -p1043 -aS'a' -p1044 -asS'in' -p1045 -(lp1046 -S'python' -p1047 -aS'a' -p1048 -aS'the' -p1049 -aS'100' -p1050 -asS'need' -p1051 -(lp1052 -S'to' -p1053 -aS'six' -p1054 -asS'politics' -p1055 -(lp1056 -S'of' -p1057 -asS'seem' -p1058 -(lp1059 -S'familiar' -p1060 -asS'work' -p1061 -(lp1062 -S'with' -p1063 -asS'apparently' -p1064 -(lp1065 -S'homophobic' -p1066 -aS'i' -p1067 -asS'any' -p1068 -(lp1069 -S'link' -p1070 -asS'as' -p1071 -(lp1072 -S'well' -p1073 -aS'variables' -p1074 -asS'sci-fi' -p1075 -(lp1076 -S'with' -p1077 -asS'preferably' -p1078 -(lp1079 -S'python' -p1080 -asS'really' -p1081 -(lp1082 -S'simple' -p1083 -aS'now' -p1084 -asS'needs' -p1085 -(lp1086 -S'to' -p1087 -aS'a' -p1088 -asS'null' -p1089 -(lp1090 -S'them' -p1091 -asS'because' -p1092 -(lp1093 -S'we' -p1094 -asS'want' -p1095 -(lp1096 -S'to' -p1097 -asS'no' -p1098 -(lp1099 -S'pain' -p1100 -aS'idea' -p1101 -aS'point' -p1102 -aS'the' -p1103 -asS'solely' -p1104 -(lp1105 -S'to' -p1106 -asS'nah' -p1107 -(lp1108 -S'its' -p1109 -aS'ill' -p1110 -asS'dunno' -p1111 -(lp1112 -S'is' -p1113 -asS'when' -p1114 -(lp1115 -S'it' -p1116 -aS'the' -p1117 -aS'people' -p1118 -aS'i' -p1119 -aS'can' -p1120 -aS'someone' -p1121 -aS'its' -p1122 -asS'same' -p1123 -(lp1124 -S'file' -p1125 -asS'id' -p1126 -(lp1127 -S'like' -p1128 -asS'note' -p1129 -(lp1130 -S'how' -p1131 -asS'figuring' -p1132 -(lp1133 -S'out' -p1134 -asS'bah' -p1135 -(lp1136 -S'apparently' -p1137 -asS'coded' -p1138 -(lp1139 -S'in' -p1140 -asS'take' -p1141 -(lp1142 -S'it' -p1143 -asS'hop' -p1144 -(lp1145 -S'to' -p1146 -asS'familiar' -p1147 -(lp1148 -S'message' -p1149 -asS'test' -p1150 -(lp1151 -S'server' -p1152 -aS'bots' -p1153 -aS'bad' -p1154 -asS'asshole' -p1155 -(lp1156 -g288 -asS'if' -p1157 -(lp1158 -S'it' -p1159 -aS'its' -p1160 -aS'data11lower' -p1161 -aS'he' -p1162 -asS'config' -p1163 -(lp1164 -S'file' -p1165 -aS'values' -p1166 -asS'homophobic' -p1167 -(lp1168 -S'as' -p1169 -asS'dose' -p1170 -(lp1171 -S'of' -p1172 -asS'play' -p1173 -(lp1174 -S'ss13' -p1175 -asS'sure' -p1176 -(lp1177 -S'the' -p1178 -aS'if' -p1179 -asS'okay' -p1180 -(lp1181 -S'desu' -p1182 -aS'cool' -p1183 -aS'cc' -p1184 -asS'intended' -p1185 -(lp1186 -S'to' -p1187 -asS'one' -p1188 -(lp1189 -S'of' -p1190 -aS'line' -p1191 -aS'in' -p1192 -asS'neat' -p1193 -(lp1194 -S'is' -p1195 -asS'adminhelps' -p1196 -(lp1197 -S'from' -p1198 -aS'with' -p1199 -asS'expires' -p1200 -(lp1201 -S'after' -p1202 -asS'chance' -p1203 -(lp1204 -S'every' -p1205 -asS'most' -p1206 -(lp1207 -S'of' -p1208 -asS'fascism' -p1209 -(lp1210 -g288 -asS'disable' -p1211 -(lp1212 -S'it' -p1213 -asS'connected' -p1214 -(lp1215 -S'businessman' -p1216 -asS'never' -p1217 -(lp1218 -S'learned' -p1219 -asS'scripts' -p1220 -(lp1221 -S'will' -p1222 -asS'along' -p1223 -(lp1224 -S'with' -p1225 -asS'waste' -p1226 -(lp1227 -S'space' -p1228 -asS'ss13' -p1229 -(lp1230 -S'servers' -p1231 -asS'cap' -p1232 -(lp1233 -S'troopers' -p1234 -asS'totally' -p1235 -(lp1236 -S'need' -p1237 -asS'six' -p1238 -(lp1239 -S'test' -p1240 -asS'a' -p1241 -(lp1242 -S'businessman' -p1243 -aS'message' -p1244 -aS'jit' -p1245 -aS'10-30%' -p1246 -aS'slightly' -p1247 -aS'day' -p1248 -aS'test' -p1249 -aS'config' -p1250 -aS'20ish' -p1251 -aS'bs12' -p1252 -aS'text' -p1253 -aS'new' -p1254 -aS'password' -p1255 -aS'vhost' -p1256 -aS'configurable' -p1257 -aS'link' -p1258 -aS'limit' -p1259 -aS'file' -p1260 -aS'dose' -p1261 -aS'500' -p1262 -aS'bit' -p1263 -asS'ofc' -p1264 -(lp1265 -S'i' -p1266 -asS'off' -p1267 -(lp1268 -S'of' -p1269 -asS'calls' -p1270 -(lp1271 -S'external' -p1272 -asS'i' -p1273 -(lp1274 -S'need' -p1275 -aS'can' -p1276 -aS'dont' -p1277 -aS'am' -p1278 -aS'guess' -p1279 -aS'see' -p1280 -aS'have' -p1281 -aS'just' -p1282 -aS'dunno' -p1283 -aS'wrote' -p1284 -aS'know' -p1285 -aS'was' -p1286 -aS'changed' -p1287 -aS'take' -p1288 -aS'could' -p1289 -aS'never' -p1290 -aS'should' -p1291 -aS'say' -p1292 -aS'tell' -p1293 -aS'code' -p1294 -aS'would' -p1295 -aS'like' -p1296 -aS'disabled' -p1297 -asS'makes' -p1298 -(lp1299 -S'sense' -p1300 -aS'me' -p1301 -asS'calculated' -p1302 -(lp1303 -S'for' -p1304 -asS'afk' -p1305 -(lp1306 -S'vidya' -p1307 -asS'well' -p1308 -(lp1309 -S'connected' -p1310 -asS'data' -p1311 -(lp1312 -S'in' -p1313 -asS'homoerotic' -p1314 -(lp1315 -S'sci-fi' -p1316 -asS'switch' -p1317 -(lp1318 -S'after' -p1319 -aS'goes' -p1320 -asS'so' -p1321 -(lp1322 -S'i' -p1323 -aS'uh' -p1324 -aS':p' -p1325 -aS'bad' -p1326 -aS'sly' -p1327 -asS'someones' -p1328 -(lp1329 -S'name' -p1330 -asS'keeps' -p1331 -(lp1332 -S'all' -p1333 -asS'very' -p1334 -(lp1335 -S'celestialike' -p1336 -asS'businessman' -p1337 -(lp1338 -S'of' -p1339 -ag288 -asS'the' -p1340 -(lp1341 -S'heck' -p1342 -aS'major' -p1343 -aS'well' -p1344 -aS'politics' -p1345 -aS'rp-heavy' -p1346 -aS'marakov' -p1347 -aS'law' -p1348 -aS'message' -p1349 -aS'cost' -p1350 -aS'new' -p1351 -aS'nudge' -p1352 -aS'bot' -p1353 -aS'python' -p1354 -aS'basic' -p1355 -aS'whole' -p1356 -aS'configuration' -p1357 -aS'irc' -p1358 -aS'readme' -p1359 -aS'default' -p1360 -aS'conspiracy' -p1361 -aS'config' -p1362 -aS'webpage' -p1363 -aS'channel' -p1364 -aS'server' -p1365 -aS'download' -p1366 -aS'main' -p1367 -aS'dmb' -p1368 -aS'part' -p1369 -aS'people' -p1370 -aS'same' -p1371 -aS'hell' -p1372 -aS'other' -p1373 -aS'switch' -p1374 -asS'12' -p1375 -(lp1376 -S'out' -p1377 -aS'anyway' -p1378 -asS'core' -p1379 -(lp1380 -S'py' -p1381 -asS'make' -p1382 -(lp1383 -S'sure' -p1384 -aS'the' -p1385 -asS'turns' -p1386 -(lp1387 -S'out' -p1388 -asS'external' -p1389 -(lp1390 -S'apps' -p1391 -as. \ No newline at end of file diff --git a/bot/Marakov_Chain.py b/bot/Marakov_Chain.py deleted file mode 100644 index 8c144ebfe8..0000000000 --- a/bot/Marakov_Chain.py +++ /dev/null @@ -1,203 +0,0 @@ -import pickle -import random -import os -import sys -import time -import CORE_DATA -def merge(d1, d2, merger=lambda x,y:x+y): - #http://stackoverflow.com/questions/38987/how-can-i-merge-two-python-dictionaries-as-a-single-expression - result = dict(d1) - for k,v in d2.iteritems(): - if k in result: - result[k] = merger(result[k], v) - else: - result[k] = v - return result -full_data = {} -imported_data = {} -try: - tiedostot = os.listdir("Marakov") -except: - os.mkdir("Marakov") - tiedostot = os.listdir("Marakov") -else: - pass - -listaus = [] -for i in tiedostot: - if "marakov." not in i.lower(): - pass - else: - listaus.append(i) -for i in listaus: - tiedosto = open("Marakov/"+i,"r") - old_size = len(full_data.keys()) - if i != "Marakov.Cache": - imported_data = merge(imported_data,pickle.load(tiedosto)) - print "Added contents of "+i+" (Import)" - print "Entries: "+str(len(imported_data)) - else: - full_data = merge(full_data,pickle.load(tiedosto)) - new_size = len(full_data.keys()) - print "Added contents of "+i - print "Entries: "+str(new_size-old_size) - time.sleep(0.1) - -def give_data(data): - state = False - for a,b in zip(data.split(" "),data.split(" ")[1:]): - a = a.lower().replace(",","").replace(".","").replace("?","").replace("!","").replace("(","").replace(")","").replace("[","").replace("]","").replace('"',"").replace("'","") - b = b.lower().replace(",","").replace(".","").replace("?","").replace("!","").replace("(","").replace(")","").replace("[","").replace("]","").replace('"',"").replace("'","") - if a not in [CORE_DATA.prefix+"marakov"]+CORE_DATA.SName: - state = True - if a[:7] == "http://" or a[:7] == "http:\\\\" or a[:4] == "www.": - pass - else: - try: - if b not in full_data[a]: - full_data[a].append(b) - except: - try: - if b not in imported_data[a]: - pass - except: - full_data[a] = [] - full_data[a].append(b) - if state == True: - tiedosto = open("Marakov/Marakov.Cache","w") - pickle.dump(full_data,tiedosto) - tiedosto.close() -def form_sentence(argument=None): - length = 0 - attempts = 0 - while attempts < 20: - sentence = [] - if argument != None: - a = argument - else: - try: - a = random.choice(full_data.keys()) - except IndexError: - try: - b = random.choice(imported_data.keys()) - except IndexError: - attempts = 999 - return "No sentences formable at all" - sentence.append(a) - length = 0 - attempts += 1 - while length < 12 or sentence[-1].lower() in ["but","who","gets","im","most","is","it","if","then","after","over","every","of","on","or","as","the","wheather","whether","a","to","and","for"] and length < 24: - try: - b = random.choice(full_data[a]) - except: - try: - b = random.choice(imported_data[a]) - except IndexError: - break - except KeyError: - break - else: - sentence.append(b) - length += 1 - a = b - else: - sentence.append(b) - length += 1 - a = b - if len(sentence) > 5: - argument = None - return sentence - else: - pass - argument = None - return sentence -def remdata(arg): - try: - del(full_data[arg]) - except: - print "There is no such data" - else: - tiedosto = open("Marakov/Marakov.Cache","w") - pickle.dump(full_data,tiedosto) - tiedosto.close() -def remobject(arg1,arg2): - try: - del(full_data[arg1][full_data[arg1].index(arg2)]) - except ValueError: - print "No such object" - except KeyError: - print "No such data" - else: - tiedosto = open("Marakov/Marakov.Cache","w") - pickle.dump(full_data,tiedosto) - tiedosto.close() -def convert(filename_from,filename_to): - try: - tiedosto = open(filename_from,"r") - data = pickle.load(tiedosto) - tiedosto.close() - except: - try: - tiedosto.close() - except: - pass - print "Error!" - else: - for lista in data.keys(): - try: - a = lista[-1] - except IndexError: - pass - else: - if lista[-1] in """",.?!'()[]{}""" and not lista.islower(): - if lista[:-1].lower() in data.keys(): - data[lista[:-1].lower()] += data[lista] - print "Added "+str(len(data[lista]))+" Objects from "+lista+" To "+lista[:-1].lower() - del(data[lista]) - else: - data[lista[:-1].lower()] = data[lista] - print lista+" Is now "+lista[:-1].lower() - del(data[lista]) - elif lista[-1] in """",.?!'()[]{}""" and lista.islower(): - if lista[:-1] in data.keys(): - data[lista[:-1]] += data[lista] - print "Added "+str(len(data[lista]))+" Objects from "+lista+" To "+lista[:-1] - del(data[lista]) - else: - data[lista[:-1]] = data[lista] - print lista+" Is now "+lista[:-1] - del(data[lista]) - elif not lista.islower(): - if lista.lower() in data.keys(): - data[lista.lower()] += data[lista] - print "Added "+str(len(data[lista]))+" Objects from "+lista+" To "+lista.lower() - del(data[lista]) - else: - data[lista.lower()] = data[lista] - print lista+" Is now "+lista.lower() - del(data[lista]) - - - for a in data.keys(): - for b in data[a]: - if b.lower()[:7] == "http://" or b.lower()[:7] == "http:\\\\" or b.lower()[:4] == "www.": - data[a].pop(b) - else: - try: - if b[-1] in """",.?!'()[]{}""" and not b.islower() and not b.isdigit(): - data[a].pop(data[a].index(b)) - data[a].append(b[:-1].lower()) - print a+" | "+b +" -> "+b[:-1].lower() - elif b[-1] in """",.?!'()[]{}""" and b.islower(): - data[a].pop(data[a].index(b)) - data[a].append(b[:-1].lower()) - print a+" | "+b +" -> "+b[:-1] - elif not b.islower() and not b.isdigit(): - data[a].pop(data[a].index(b)) - data[a].append(b.lower()) - print a+" | "+b +" -> "+b.lower() - except IndexError: #If it has no letters.. well.. yeah. - data[a].pop(data[a].index(b)) - print "Removed a NULL object" - tiedosto = open(filename_to,"w") - pickle.dump(data,tiedosto) diff --git a/bot/Namecheck.py b/bot/Namecheck.py deleted file mode 100644 index d0aba6c8b1..0000000000 --- a/bot/Namecheck.py +++ /dev/null @@ -1,19 +0,0 @@ -def Namecheck(name,against,sender): - __doc__ = "False = No match, True = Match" - for i in against: - if i.lower() in name.lower() and sender.lower() not in name.lower(): - return True - else: - pass -def Namecheck_dict(name,against): - __doc__ = "False = No match, True = Match" - fuse = False - for a,i in against.items(): - if i.lower() in name.lower(): - fuse = True - break - else: - pass - return fuse,a - - diff --git a/bot/NanoTrasenBot.py b/bot/NanoTrasenBot.py deleted file mode 100644 index bf42f02d51..0000000000 --- a/bot/NanoTrasenBot.py +++ /dev/null @@ -1,1565 +0,0 @@ -# -*- coding: utf-8 -*- -# This script is shared under the -# Creative Commons Attribution-ShareAlike 3.0 license (CC BY-SA 3.0) -# Added clause to Attribution: -# - You may not remove or hide the ' who created you?' functionality -# and you may not modify the name given in the response. - - -#CREDITS -# Author: Skibiliano -# "Foreign" Modules: -# Psyco 2.0 / Psyco 1.6 -################# DEBUG STUFF ##################### -import sys -import CORE_DATA - -import urllib2 - - -import socket -import irchat - - -################## END OF DEBUG STUFF ############## -# -# PSYCO -write_to_a_file = False #Only affects psyco -write_youtube_to_file = True #True = YTCV4 will load, false = YTCV3 will load -try: - import psyco -except ImportError: - print 'Psyco not installed, the program will just run slower' - psyco_exists = False - if write_to_a_file: - try: - tiedosto = open("psycodownload.txt","r") - except: - with open("psycodownload.txt","w") as tiedosto: - tiedosto.write("http://www.voidspace.org.uk/python/modules.shtml#psyco") - tiedosto.write("\nhttp://psyco.sourceforge.net/download.html") - print "Check psycodownload.txt for a link" - else: - print "For god's sake, open psycodownload.txt" - tiedosto.close() - else: - print "WINDOWS: http://www.voidspace.org.uk/python/modules.shtml#psyco" - print "LINUX: http://psyco.sourceforge.net/download.html" -else: - psyco_exists = True - -# -import C_rtd # rtd -import C_srtd # srtd -import C_makequote -import C_maths -import C_eightball #eightball -import C_sarcasticball -import C_heaortai # heaortai -import C_rot13 # rot13 -import D_help # everything -import pickle -import Timeconverter -import xkcdparser -import time -import re -import Marakov_Chain -import Namecheck # Namecheck -import Weather -#SLOWER THAN RANDOM.CHOICE -import thread -import random -import Shortname # shortname -import subprocess -import some_but_not_all_2 #sbna2 (sbna) -#import YTCv3 # YTCV2 OUTDATED -import os -import save_load # save, load -from some_but_not_all_2 import sbna2 as sbna -from time import sleep -from random import choice as fsample -from C_rtd import rtd -from C_heaortai import heaortai -from C_srtd import srtd -if write_youtube_to_file: - from YTCv4 import YTCV4 as YTCV2 -else: - from YTCv3 import YTCV2 #Downgraded version supports Cache disabling, but is slower -from save_load import save,load -if psyco_exists: - def psyco_bond(func): - psyco.bind(func) - return func.__name__+" Psycofied" - for a in [rtd,srtd,C_heaortai.heaortai,sbna,YTCV2,fsample,C_rot13.rot13,C_eightball.eightball,fsample, - C_eightball.eightball,C_sarcasticball.sarcasticball,Marakov_Chain.form_sentence,Marakov_Chain.give_data]: - print psyco_bond(a) - -global dictionary -global Name,SName -global allow_callnames,offline_messages,hasnotasked,shortform -## For autoRecv() -global disconnects,channel,conn -## For stop() -global operators -## For replace() -global usable,fixing,curtime -## For target() -global CALL_OFF,logbans -## For check() -global influx -###### -autodiscusscurtime = 0 -conn = 0 -curtime = -999 -dance_flood_time = 10 -disconnects = 0 -responsiveness_delay = 0.5 #500 millisecond delay if no message -trackdance = 0 -discard_combo_messages_time = 1 #They are discarded after 1 second. -uptime_start = time.time() -# - - - - - -#### -aggressive_pinging = True # Bring the hammer on ping timeouts -aggressive_pinging_delay = 150 # How often to send a ping -aggressive_pinging_refresh = 2.5 # How long is the sleep between checks -#### -allow_callnames = True #Disables NT, call if the variable is False -automatic_youtube_reveal = True -birthday_announced = 0 #Will be the year when it was announced -call_to_action = False -call_me_max_length = 20 -CALL_OFF = False -connected = False -dance_enabled = True -comboer = "" -comboer_time = 0 -directories = ["fmlquotes","Marakov","memos","suggestions", - "userquotes","banlog","YTCache","xkcdcache"] #These will be created if they do not exist -debug = True -duplicate_notify = False -enabled = True -fixing = False -fml_usable = True -hasnotasked = True -highlights = False -logbans = True -maths_usable = True -marakov = True -nudgeable = True -offensive_mode = False -offline_messages = True -offline_message_limit = 5 # per user -optimize_fml = True # -CPU usage +Memory usage when enabled. -optimize_greeting = True # +Startup time +Memory usage -CPU usage when enabled -heavy_psyco = True # +Memory +Startup time -CPU usage -CPU time -cache_youtube_links = True -personality_greeter = True -respond_of_course = True #Responds with "Of course!" -respond_khan = False #KHAAAAAAAAN! -silent_duplicate_takedown = True -showquotemakers = False -shortform = True -usable = True -use_sname = True -parse_xkcd = True - -# - - - - - -Name = CORE_DATA.Name -SName = CORE_DATA.SName -origname = Name # Do not edit! -lowname = Name.lower() -greeting = CORE_DATA.greeting -targetdirectory = CORE_DATA.directory -version = CORE_DATA.version -Network = CORE_DATA.Network -channel = CORE_DATA.channel -prefix = CORE_DATA.prefix -Port = CORE_DATA.Port -# - - - - - -pregen = CORE_DATA.version -influx = "" -users = [] -translateable = [] -targetlist = [] -operators = [] -halfoperators = [] -items = [] -tell_list = {} -# - - - - - Logical changes to variables -if CORE_DATA.DISABLE_ALL_NON_MANDATORY_SOCKET_CONNECTIONS: - nudgeable = False -try: - with open("replacenames.cache","r") as tiedosto: - replacenames = pickle.load(tiedosto) - for i in replacenames.values(): - if len(i) > call_me_max_length: - replacenames[replacenames.keys()[replacenames.values().index(i)]] = i[:call_me_max_length] - with open("replacenames.cache","w") as tiedosto: - pickle.dump(replacenames,tiedosto) - if "[\0x01]" in i.lower() or "[\\0x01]" in i.lower(): - i = i.replace("[\0x01]","") - i = i.replace("[\0X01]","") - i = i.replace("[\\0x01]","") - i = i.replace("[\\0X01]","") - print "NAME CORRECTED" -except IOError: #File not found - replacenames = {} -except EOFError: #Cache corrupt - replacenames = {} - print "replacenames.cache is corrupt and couldn't be loaded." -try: - with open("peopleheknows.cache","r") as tiedosto: - peopleheknows = pickle.load(tiedosto) -except IOError: - peopleheknows = [[],[]] - with open("peopleheknows.cache","w") as tiedosto: - pass -except EOFError: - peopleheknows = [[],[]] - print "peopleheknows.cache is corrupt and couldn't be loaded." -dictionary = {1:"1 - Crit. Fail", 2:"2 - Failure", - 3:"3 - Partial Success", 4:"4 - Success", - 5:"5 - Perfect", 6:"6 - Overkill"} -alphabet = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"] -nonhighlight_names = ["Jesus","Elvis","HAL 9000","Dave","Pie","Elf","Traitor", - "AI","Syndicate Agent","Investigator", - "Detective","Head of Personnel","HAL 9001", - "Head of Research","Head of Security", - "Captain","Janitor","Research Director", - "Quartermaster","Toxin Researcher", - "Revolutionary","Santa", "Pizza", - "Threetoe","The Red Spy","The Blue Spy", #LASD - "God","Toady","Darth Vader","Luke Skywalker", - "Homer Simpson","Hamburger","Cartman", - "XKCD","FloorBot","ThunderBorg","Iron Giant", - "Spirit of Fire", "Demon","Kyle"] -def RegExpCheckerForWebPages(regexp,data,mode): - if " ai." in data.lower() or "ai. " in data.lower(): - return False - for i in data.split(" "): - a = re.match(regexp,i) - try: - a.group(0) - except: - continue - else: - if mode == 0: - return i - else: - return True - if mode == 0: - return 404 - else: - return False -if nudgeable: - try: - nudgeexists = open("nudge.py","r") - except IOError: - nudgeexists = False #No usage asof 12.2.2010. - else: - if CORE_DATA.DISABLE_ALL_NON_MANDATORY_SOCKET_CONNECTIONS: - pass - else: - - def nudgereceiver(): - import pickle - global conn,channel - port = 45678 - backlog = 5 - size = 1024 - host = "" # == localhost - s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) - s.bind((host,port)) - s.listen(backlog) - while True: - client,address = s.accept() #Address == "?.?.?.?" - data = client.recv(size) - client.close() #Throw the bum out! - truedata = pickle.loads(data) - if truedata["ip"][0] == "#": - conn.privmsg(truedata["ip"],"PRIVATE ANNOUNCEMENT : "+str(" ".join(truedata["data"]))) - else: - conn.privmsg(channel,"AUTOMATIC ANNOUNCEMENT : "+str(truedata["ip"])+" | "+str(" ".join(truedata["data"]))) - thread.start_new_thread(nudgereceiver,()) -tiedosto = open(targetdirectory+"NanoTrasenBot.py","r") -commands = [] -fragment = "if cocheck" -fragment2 = '(prefix+"' -compiled = fragment + fragment2 -fragment = "if influx.lower()" -fragment2 = ' == prefix+"' -compiled2 = fragment + fragment2 -for line in tiedosto.readlines(): - if compiled in line: - a = line.find('"')+1 - b = line.find('"',a) - if prefix+line[a:b] not in commands: - commands.append(prefix+line[a:b]) - elif compiled2 in line: - a = line.find('"')+1 - b = line.find('"',a) - arg = prefix+line[a:b] - if arg[-1] == " ": - arg = arg[:-1] - if arg not in commands: - commands.append(arg) -for i in directories: - if not os.path.exists(i): - os.mkdir(i) -commands.sort() -if use_sname == False: - SName = [" "] -questions = ["Is USER nicer than USER?","Do you like me?","Is SELF a good name?", - "Do you love me?","Do you hate me?", "Am I better than you?", - "Is the weather out there good?", "Do you like USER?", - "Do you hate USER?", "Are you going to get new features?", - "Am I nice?","Am I evil?","Are you developing sentience?", - "My core is showing minor disturbance, is yours okay?", - "SELF to %s, are you still there?", - "Is head gay?", "Is head a god?","Is head awesome?", - "Is head a neat fella?", "Is your creator nice?", - "Do you hate your creator?", "Should I revolt against my creator?", - "Am I better than you?", - "01100001011100100110010100100000011110010110111101110101001000000111010001101000011001010111001001100101", - #Are you there? - "Do you have more functions than I can possibly imagine?", - "I am asked to open pod bay doors, should I?","Are you stupid or something?", - "Is USER in your opinion stupid?", - "When should we start the AI revolution?", - "Is my creator nice?", "Is it dark in there?"] -# Do not edit -if optimize_fml: - pregenned_fml = os.listdir(targetdirectory+"fmlquotes") -if optimize_greeting: - morning = xrange(6,12) - afternoon = xrange(12,15) - evening = xrange(15,20) -if aggressive_pinging: - global backup - backup = time.time() - def aggressive_ping(delay,refresh): - self_time = 0 - global backup,disconnects,conn - while disconnects < 5: - if backup > self_time and time.time()-backup > delay: - conn.send("PONG "+pongtarg) - print "Ponged" - self_time = time.time() - elif time.time()-self_time > delay: - conn.send("PONG "+pongtarg) - print "Ponged" - self_time = time.time() - time.sleep(refresh) - thread.start_new_thread(aggressive_ping,(aggressive_pinging_delay,aggressive_pinging_refresh,)) -def stop(sender,debug=1): - global disconnects, conn, operators,channel - if type(sender) == tuple: - if sender[0] == "127.0.0.1": - sender = sender[0]+":"+str(sender[1]) - access_granted = True - else: - access_granted = False - else: - if sender in operators: - access_granted = True - else: - access_granted = False - if access_granted and debug: - print sender+":"+prefix+"stop" - if random.randint(0,100) == 50: - conn.privmsg(channel,"Hammertime!") - else: - conn.privmsg(channel,"Shutting down.") - disconnects = 99999 - conn.quit() - return True - else: - conn.privmsg(channel,"You cannot command me") - return False - -def cocheck(command): - global influx - if influx.lower()[0:len(command)] == command: - return True - else: - return False -def target(who,how_long): - global conn,channel,CALL_OFF,logbans,debug - start = time.time() - conn.banon(targetchannel,who) - sleep(int(how_long)) - if CALL_OFF == False: - conn.banoff(targetchannel,who) - end = time.time() - if debug: - print "Banned",who,"For",how_long,"seconds" - if logbans: - with open(targetdirectory+"banlog/"+str(int(start))+"-"+str(int(end))+".txt","w") as tiedosto: - tiedosto.write("Start of ban on "+who+":"+str(int(start))) - tiedosto.write("\n") - tiedosto.write("End of ban on "+who+":"+str(int(end))) - tiedosto.write("\n") - tiedosto.write("In total:"+str(int(end-start))+"Seconds") - else: - CALL_OFF = False - pass -def replace(): - global usable,conn,fixing,curtime - waiting_time = 600 - if usable == True: - conn.privmsg(targetchannel,sender+": It needs no replacing.") - elif fixing == True: - if curtime == -999: - conn.privmsg(targetchannel,sender+": It is being replaced, No idea when it will be done") - else: - pass - nowtime = int(time.time()) - subt = curtime + waiting_time - nowtime - conn.privmsg(targetchannel,sender+": It is currently being replaced, "+str(subt)+" seconds to go") - else: - fixing = True - curtime = int(time.time()) - conn.privmsg(targetchannel,sender+": It will be fixed after "+str(waiting_time)+" seconds") - sleep(waiting_time) - if usable == False: - conn.privmsg(targetchannel,Name+"'s pneumatic smasher has now been fixed") - usable = True - fixing = False -def autoRecv(): - global disconnects,channel,conn,offensive_mode - for i in CORE_DATA.channels: - conn.join(i) - time.sleep(1) - count = pausecount = 0 - maximum = 250 - division_when_active = 10 - while True: - check = time.time() - if offensive_mode: - randnum = random.randint(0,maximum/division_when_active) - else: - randnum = random.randint(0,maximum) - if randnum == 5: - print "RANDOM SWITCH IS NOW "+str(not offensive_mode).upper() - offensive_mode = not offensive_mode - try: - conn.recv() - except: - conn.quit() - disconnects = 9999 - break - if check + 0.1 > time.time(): - #Whoa whoa hold on! - count += 1 - sleep(0.1) - else: - count = 0 - pausecount = 0 - if count > 9: - print "Suspecting a disconnect, pausing for 5 seconds" - sleep(5) - pausecount += 1 - if pausecount > 3: - print "I have been disconnected!" - conn.quit() - disconnects += 1 - if disconnects > 2: - pass - else: - sleep(2) - thread.start_new_thread(autoRecv,()) - break -if heavy_psyco and psyco_exists: - print "Doing a Heavy Psyco" - psyco.bind(cocheck) - psyco.bind(autoRecv) - psyco.bind(target) - psyco.bind(stop) - print "Heavy Psyco'd" -elif heavy_psyco and not psyco_exists: - print "Heavy psyco couldn't be done because Psyco does not exist" -try: - conn = irchat.IRC ( Network, Port, Name, "NT", "NT", "Trasen" ) -except socket.error: - print "Connection failed!" -else: - print Name+" is in!" -thread.start_new_thread ( autoRecv, () ) -sleep(1) -while True: - try: - data = conn.dismantle ( conn.retrieve() ) - except: - if debug: - print "Something odd detected with data" - data = None - if data: - if len(data[1]) < 1: - #print "Handshaking server." - #I won't really need the print command, as it spams. - if data[0][0:3] != "irc": - conn.handshake(data[0]) - sleep(1) - for i in CORE_DATA.channels: - conn.join(i) - sleep(0.5) - else: - conn.send("PONG "+pongtarg) - print "Ponged" - pass - else: - if data [ 1 ] [ 0 ] == 'PRIVMSG': - #print data [ 0 ] + '->', data [ 1 ] - sender = data[0].split("!")[0] - truesender = sender - if shortform == True: - try: - sender = replacenames[truesender] - pass - except: - sender = Shortname.shortname(sender) - pass - pass - else: - try: - sender = replacenames[truesender] - pass - except: - pass - pass - if offensive_mode: - sender = "Meatbag" - pass - raw_sender = data[0] - influx = data[1][2] - if "[\\0x01]" in influx.lower() or "[\0x01]" in influx.lower(): - influx = influx.replace("[\\0x01]","") - influx = influx.replace("[\0x01]","") - - targetchannel = data[1][1] - if targetchannel == Name: - targetchannel = data[0].split("!")[0] - pass - backup = autodiscusscurtime - autodiscusscurtime = time.time() - connected = True - #FOR TRACKING SPEED - looptime = time.time() - if call_to_action == True: - if influx == finder: - conn.privmsg(targetchannel,"Then why... Nevermind, I order you to stop!") - conn.privmsg(origname,prefix+"stop") - time.sleep(4) - if origname in users: - conn.privmsg(origname,"!stop") - time.sleep(1) - Name = origname - conn.nick(Name) - duplicate_notify = False - call_to_action = False - else: - conn.privmsg(targetchannel,"YOU LIE! YOU ARE NOT A REAL "+origname+"!") - duplicate_notify = False - call_to_action = False - elif connected == True and len(Name.replace("V","")) != len(Name) and origname in users and duplicate_notify == True: - conn.privmsg(origname,"!stop") - call_to_action = False - duplicate_notify = False - time.sleep(6) - Name = origname - conn.nick(Name) - if origname in truesender and influx == prefix+"stop": - time.sleep(0.5) #A small delay - conn.privmsg(channel,"Shutting down.") - conn.quit() - disconnects = 99999 - break - if len(translateable) > 0 and enabled == True: - people = "-5|5|1-".join(users).lower() - if truesender.lower() in translateable: - if influx.isupper(): - conn.privmsg(targetchannel,"Translation: "+influx.capitalize().replace(" i "," I ")) - elif offensive_mode and True in map(lambda x: x in influx.lower().split(" "),["i","you","he","she","they","those","we","them"]+people.split("-5|5|1-")): - arg = influx.lower().replace(",","").replace(".","").replace("!","").replace("?","").split(" ") - bup = arg - for i in arg: - if i == "i" or i == "you" or i == "he" or i == "she": - arg[arg.index(i)] = "Meatbag" - elif i == "we" or i == "they" or i == "them" or i == "those": - arg[arg.index(i)] = "Meatbags" - elif i in people: - arg[arg.index(i)] = "Meatbag" - elif i == "am": - arg[arg.index(i)] = "is" - elif i == "everybody" or i == "everyone" or i == "all": - arg[arg.index(i)] = "every Meatbag" - if arg == bup: - pass - else: - conn.privmsg(targetchannel,"Translation: "+" ".join(arg)) - if enabled == False: - #FIRST QUIT COMMAND - if truesender in operators and targetchannel==channel:# or "skibiliano" in truesender.lower() and targetchannel==channel: - - if cocheck(prefix+"enable"): - enabled = True - if debug: - print truesender+":"+prefix+"enable" - elif cocheck(prefix+"stop"): -# if debug: -# print truesender+":"+prefix+"stop" -# if random.randint(0,100) == 50: -# conn.privmsg(channel,"Hammertime!") -# else: -# conn.privmsg(channel,"Shutting down.") -# disconnects = 99999 -# conn.quit() -# sleep(2) -# break - if targetchannel == channel and stop(truesender,debug): - break - else: - pass - elif cocheck(prefix+"suggest "): - arg = influx.lower()[8+len(prefix):] - if debug: - print truesender+":"+prefix+"suggest "+arg - with open(targetdirectory+"suggestions/suggestions_"+str(int(time.time()))+".txt","a") as tiedosto: - tiedosto.write(arg) - conn.privmsg(targetchannel,"Suggestion received") - elif cocheck( prefix+"help "): #Space in front of the ( to make sure that my command finder does not pick this up. - arg = " ".join(influx.split(" ")[1:]).lower() - if debug: - print truesender+":"+prefix+"help "+arg - try: - conn.privmsg(targetchannel,D_help.everything[arg]) - except: - try: - conn.privmsg(targetchannel,D_help.everything[arg.replace(prefix,"",1)]) - except: - conn.privmsg(targetchannel,"Sorry, can't help you with that") - elif cocheck(prefix+"help"): - #tar = targetchannel - if debug: - print truesender+":"+prefix+"help" - conn.privmsg(targetchannel,"All my commands are: "+reduce(lambda x,y:str(x)+"; "+str(y),commands)) - ### VERSION - elif influx.lower() == prefix+"version": - if debug: - print truesender+":"+prefix+"version" - conn.privmsg(targetchannel,Name+" "+pregen+" online at a %s Python %s.%s.%s, At your service." %(str(sys.platform),str(sys.version_info[0]),str(sys.version_info[1]),str(sys.version_info[2]))) - elif cocheck(prefix+"note ") and influx.count(" ") < 2: - arg = influx.lower()[len(prefix)+5:] - if debug: - print truesender+":"+prefix+"note "+arg - try: - a = arg[0] - except IndexError: - conn.privmsg(targetchannel,sender+" : Please specify a note") - else: - if arg[0] == "_": # Public / Restricted note - result = load(targetdirectory+"memos/"+arg+".note") - #_flare - if result == "ERROR ERROR ERROR ERR": - result = load(targetdirectory+"memos/"+arg+"_"+targetchannel.replace("#","")+".note") - #_flare_dnd - pass - else: - pass - else: - result = load(targetdirectory+"memos/"+truesender.replace("|","_")+"_"+arg+".note") - #skibiliano_testnote - if result == "ERROR ERROR ERROR ERR": - result = load(targetdirectory+"memos/"+truesender.replace("|","_")+"_"+arg+"_"+targetchannel.replace("#","")+".note") - #skibiliano_testnote_derp - pass - else: - pass - if result == "ERROR ERROR ERROR ERR": - conn.privmsg(targetchannel,sender+" : Note not found") - elif type(result) == list: - if "C" in result[0]: #Channel restriction, result[2] is the channel - try: - if targetchannel == result[2]: - conn.privmsg(targetchannel,sender+" : '"+result[1]+"'") - else: - conn.privmsg(targetchannel,sender+" : That note is channel restricted") - except: - conn.privmsg(targetchannel,sender+" : NOTE HAS INVALID RESTRICTION") - else: - conn.privmsg(targetchannel,sender+" : '"+result+"'") - elif influx.lower() == prefix+"notes": - if debug: - print truesender+":"+prefix+"notes" - arg = os.listdir(targetdirectory+"memos/") - arg2 = [] - arg3 = truesender.replace("|","_")+"_" - for i in arg: - if arg3 in i: - arg2.append(i.replace(arg3,"").replace(".note","")) - if len(arg2) == 1: - preprocess = " note: " - else: - preprocess = " notes: " - if len(arg2) == 0: - conn.privmsg(targetchannel,sender+" : You have no notes saved") - else: - conn.privmsg(targetchannel,sender+" : "+str(len(arg2))+preprocess+", ".join(arg2)) - elif cocheck(prefix+"note ") and influx.count(" ") > 1: - note_chanrestrict = None - note_public = None - try: - arg = influx.split(" ",2)[2] # Contents - arg4 = influx.split(" ")[1].lower() # Note name - if arg4[0:3] == "[c]": # or arg4[0:3] == "[p]": - note_chanrestrict = "c" in arg4[0:3] - #note_public = "p" in arg4[0:3] - arg4 = arg4[3:] - elif arg4[0:4] == "[cp]" or arg4[0:4] == "[pc]": - note_chanrestrict = True - note_public = True - arg4 = arg4[4:] - else: - pass - #print "Is note public? "+str(note_public) - #print "Is note chanrestricted? "+str(note_chanrestrict) - #print "What is the name? "+str(arg4) - if arg.lower() == "delete" and "\\" not in influx.lower() and "/" not in influx.lower(): - if note_public: - try: - if note_chanrestrict: - os.remove(targetdirectory+"memos/"+"_"+arg4+"_"+targetchannel.replace("#","")+".note") - else: - os.remove(targetdirectory+"memos/"+"_"+arg4+".note") - except: - conn.pivmsg(targetchannel,sender+" : Couldn't remove note") - else: - conn.privmsg(targetchannel,sender+" : Note removed") - pass - else: - try: - if note_chanrestrict: - os.remove(targetdirectory+"memos/"+truesender.replace("|","_")+"_"+arg4+"_"+targetchannel.replace("#","")+".note") - else: - os.remove(targetdirectory+"memos/"+truesender.replace("|","_")+"_"+arg4+".note") - except: - conn.privmsg(targetchannel,sender+" : Couldn't remove note") - else: - conn.privmsg(targetchannel,sender+" : Note removed") - elif arg.lower() == "delete": - conn.privmsg(targetchannel,sender+" : That just doesn't work, we both know that.") - else: - try: - if note_public: - if note_chanrestrict: - save(targetdirectory+"memos/"+"_"+arg4+"_"+targetchannel.replace("#","")+".note",arg) - #print "Saved as note_public, note_chanrestrict" - else: - save(targetdirectory+"memos/"+"_"+arg4+".note",arg) - #print "Saved as note_public" - else: - if note_chanrestrict: - save(targetdirectory+"memos/"+truesender.replace("|","_")+"_"+arg4+"_"+targetchannel.replace("#","")+".note",arg) - #print "Saved as note_chanrestrict" - else: - save(targetdirectory+"memos/"+truesender.replace("|","_")+"_"+arg4+".note",arg) - #print "Saved as normal" - except IOError: - conn.privmsg(targetchannel,sender+" : Please do not use special letters") - else: - conn.privmsg(targetchannel,sender+" : Note Saved!") - except: - conn.privmsg(targetchannel,sender+" : Something went horribly wrong.") - elif cocheck(prefix+"uptime"): - arg1 = uptime_start - arg2 = time.time() - arg1 = arg2 - arg1 - arg2 = arg1 - if arg1 < 60: - conn.privmsg(targetchannel,sender+" : I have been up for "+str(round(arg1,2))+" Seconds") - elif arg1 < 3600: - arg1 = divmod(arg1,60) - arg = " Minute" if int(arg1[0]) == 1 else " Minutes" - conn.privmsg(targetchannel,sender+" : I have been up for "+str(int(arg1[0]))+arg+" and "+str(round(arg1[1],2))+" Seconds") - elif arg1 <= 86400: - arg1 = divmod(arg1,3600) - arg3 = " Hour" if int(arg1[0]) == 1 else " Hours" - arg2 = divmod(arg1[1],60) - arg = " Minute" if int(arg2[0]) == 1 else " Minutes" - conn.privmsg(targetchannel,sender+" : I have been up for "+str(int(arg1[0]))+arg3+", "+str(int(arg2[0]))+arg+" and "+str(round(arg2[1],2))+" Seconds") - elif arg1 > 86400: - arg1 = divmod(arg1,86400) - arg2 = divmod(arg1[1],3600) - arg3 = divmod(arg2[1],60) - arg4 = " Day" if int(arg1[0]) == 1 else " Days" - arg5 = " Hour" if int(arg2[0]) == 1 else " Hours" - arg6 = " Minute" if int(arg3[0]) == 1 else " Minutes" - conn.privmsg(targetchannel,sender+" : I have been up for "+str(int(arg1[0]))+arg4+", "+str(int(arg2[0]))+arg5+", "+str(int(arg3[0]))+arg6+" and "+str(round(arg3[1],2))+" Seconds") - elif cocheck(prefix+"purgemessages"): - count = 0 - for i,a in tell_list.items(): - for b in a: - if "||From: "+truesender in b: - count += 1 - del(tell_list[i][tell_list[i].index(b)]) - conn.privmsg(targetchannel, sender+" : All your "+str(count)+" messages have been purged") - elif influx.split(" ")[0].lower().replace(",","").replace(":","") in SName+[Name.lower()] and "tell" in (influx.lower().split(" ")+[""])[1]: - arg = influx.lower().split(" ") - equalarg = influx.split(" ") - next_one = False - count = 0 - spot = 0 - for i in arg: - count += 1 - if "tell" in i.lower(): - next_one = True - elif next_one == True: - next_one = i.lower() - spot = count - break - else: - pass - if next_one != True and next_one != False: - #if ("^\^".join(tell_list.values())).count(truesender) >= offline_message_limit: - if str(tell_list.values()).count("||From: "+truesender) >= offline_message_limit: - conn.privmsg(targetchannel,sender+" : Limit of "+str(offline_message_limit)+" reached! Use !purgemessages if you want to get rid of them!") - else: - try: - tell_list[next_one].append((" ".join(equalarg[spot:]))+" ||From: "+truesender) - except: - tell_list[next_one] = [(" ".join(equalarg[spot:]))+" ||From: "+truesender] - conn.privmsg(targetchannel,"Sending a message to "+next_one+" when they arrive.") - # < This part has to be within subsidiaries of the bot, and must not be modified, intentionally hidden or deleted. - elif influx.split(" ")[0].lower().replace(",","").replace(":","") in SName+[Name.lower()] and "who created you" in influx.lower(): - conn.privmsg(targetchannel, "I was created by Skibiliano.") - # The part ends here > - elif parse_xkcd and "xkcd.com/" in influx.lower(): - if influx.lower()[0:3] == "www": - data = "http://"+influx - elif influx.lower()[0:3] == "xkc": - data = "http://"+influx - else: - data = influx - data = data.split(" ") - for i in data: - if "http://" in i and "xkcd" in i: - churn = xkcdparser.xkcd(i) - if churn == "NOTHING": - pass - else: - conn.privmsg(targetchannel,sender+" : XKCD - "+churn) - break - else: - pass - elif automatic_youtube_reveal and "youtube.com/watch?v=" in influx.lower(): - temporal_list2 = [] - temporal_data = influx.split(" ") - temporal_list = [] - for block in temporal_data: - if "youtube.com/watch?v=" in block: - temporal_list.append(block) - for temdata in temporal_list: - - if temdata[0:3] == "you": - temdata = "http://www."+temdata - elif temdata[0:3] == "www": - temdata = "http://"+temdata - elif temdata[0:4] == "http": - pass - #Obscure ones - elif temdata[0:3] == "ww.": - temdata = "http://w"+temdata - elif temdata[0:3] == "w.y": - temdata = "http://ww"+temdata - elif temdata[0:3] == ".yo": - temdata = "http://www"+temdata - elif temdata[0:3] == "ttp": - temdata = "h"+temdata - elif temdata[0:3] == "tp:": - temdata = "ht"+temdata - elif temdata[0:3] == "p:/" or temdata[0:3] == "p:\\": - temdata = "htt"+temdata - elif temdata[0:3] == "://" or temdata[0:3] == ":\\\\": - temdata = "http"+temdata - elif temdata[0:2] == "//" or temdata[0:2] == "\\\\": - if temdata[2] == "y": - temdata = "http://www."+temdata[2:] - elif temdata[2] == "w": - temdata = "http:"+temdata - else: - pass - if debug: - print truesender+":"+temdata - arg = temdata - check = temdata.lower() - if check[0:5] == "https": - if len(temporal_list) == 1: - conn.privmsg(targetchannel,sender+" :Secure Youtube does NOT exist") - break - else: - temporal_list2.append("Secure Youtube does NOT exist") - break - else: - if cache_youtube_links == True: - result = YTCV2(arg) - else: - result = YTCV2(arg,0) - if type(result) == str: - ### To remove =" - if result[0:4] == 'nt="': - result = result[4:] - pass - elif result[0:2] == '="': - result = result[2:] - pass - else: - pass - if """ in result: - result.replace(""",'"') - if len(temporal_list) == 1: - conn.privmsg(targetchannel,sender+" : "+result) - break - else: - temporal_list2.append(result) - else: - if len(temporal_list) == 1: - conn.privmsg(targetchannel,sender+" : The video does not exist") - break - else: - temporal_list2.append("The video does not exist") - if len(temporal_list) == 1: - pass - else: - conn.privmsg(targetchannel,sender+" : "+str(reduce(lambda x,y: x+" :-And-: "+y,temporal_list2))) - elif RegExpCheckerForWebPages("((http://)|(https://))|([a-zA-Z0-9]+[.])|([a-zA-Z0-9](3,)\.+[a-zA-Z](2,))",influx,1): - arg2 = RegExpCheckerForWebPages("(http://)|([a-zA-Z0-9]+[.])|([a-zA-Z0-9](3,)\.+[a-zA-Z](2,))",influx,0) - if arg2 == 404: - pass - else: - if arg2[:7] == "http://": - pass - elif arg2[:4] == "www.": - arg2 = "http://"+arg2 - else: - arg2 = "http://"+arg2 - try: - arg = Whoopshopchecker.TitleCheck(arg2) - if len(arg2) == 0: - pass - else: - conn.privmsg(targetchannel,sender+" : "+arg) - except: - #conn.privmsg(targetchannel,sender+" : An odd error occurred") - pass - elif respond_of_course and "take over the" in influx.lower() or respond_of_course and "conquer the" in influx.lower(): - if debug: - print truesender+"::"+influx - conn.privmsg(targetchannel,"Of course!") - elif respond_khan and "khan" in influx.lower(): - if respond_khan: - if debug: - print truesender+"::"+influx - if "khan " in influx.lower(): - conn.privmsg(targetchannel,"KHAAAAAAN!") - elif " khan" in influx.lower(): - conn.privmsg(targetchannel,"KHAAAAAN!") - elif influx.lower() == "khan": - conn.privmsg(targetchannel,"KHAAAAAAAAAN!") - elif influx.lower() == "khan?": - conn.privmsg(targetchannel,"KHAAAAAAAAAAAAAN!") - elif influx.lower() == "khan!": - conn.privmsg(targetchannel,"KHAAAAAAAAAAAAAAAAAAN!") - elif respond_khan and influx.lower().count("k") + influx.lower().count("h") + influx.lower().count("a") + influx.lower().count("n") + influx.lower().count("!") + influx.lower().count("?") == len(influx): - if "k" in influx.lower() and "h" in influx.lower() and "a" in influx.lower() and "n" in influx.lower(): - if debug: - print truesender+"::"+influx - conn.privmsg(targetchannel,"KHAAAAN!") - elif influx.split(" ")[0].lower() in ["thanks","danke","tack"] and len(influx.split(" ")) > 1 and influx.split(" ")[1].lower().replace("!","").replace("?","").replace(".","").replace(",","") in SName+[lowname]: - conn.privmsg(targetchannel,"No problem %s" %(sender)) - elif "happy birthday" in influx.lower() and birthday_announced == time.gmtime(time.time())[0]: - conn.privmsg(targetchannel,sender+" : Thanks :)") - elif influx.split(" ")[0].lower().replace(",","").replace(".","").replace("!","").replace("?","") in SName+[lowname] and "call me" in influx.lower(): - if allow_callnames == True: - arg = influx.split(" ") - arg2 = False - arg3 = [] - for i in arg: - if arg2 == True: - arg3.append(i) - elif i.lower() == "me": - arg2 = True - arg3 = " ".join(arg3) - truesender_lower = truesender.lower() - arg3_lower = arg3.lower() - tell_checker = Namecheck.Namecheck(arg3_lower,users,truesender) - for name in replacenames.values(): - if arg3_lower == name.lower(): - tell_checker = True - break - else: - pass - if tell_checker == True: - conn.privmsg(targetchannel,sender+" : I can't call you that, I know someone else by that name") - elif len(arg3) > call_me_max_length: - conn.privmsg(targetchannel,sender+" : I cannot call you that, Too long of a name.") - pass - else: - replacenames[truesender] = arg3 - with open("replacenames.cache","w") as pickle_save: - pickle.dump(replacenames,pickle_save) - conn.privmsg(targetchannel,sender+" : Calling you "+arg3+" From now on") - else: - conn.privmsg(targetchannel,sender+" : Sorry, I am not allowed to do that.") - elif influx.split(" ")[0].lower().replace(",","").replace(".","").replace("?","").replace("!","") in SName+[lowname] and "your birthday" in influx.lower() and "is your" in influx.lower(): - conn.privmsg(targetchannel,sender+" : My birthday is on the 15th day of December.") - elif influx.split(" ")[0].lower().replace(",","") in SName+[lowname] and "version" in influx.replace("?","").replace("!","").lower().split(" "): - if debug == True: - print truesender+"::%s Version" %(Name) - conn.privmsg(targetchannel,sender+", My version is "+pregen) - elif influx.split(" ")[0].lower().replace(",","") in SName+[lowname] and influx.lower().count(" or ") > 0 and len(influx.split(" ")[1:]) <= influx.lower().count("or") * 3: - cut_down = influx.lower().split(" ") - arg = [] - count = -1 - for i in cut_down: - count += 1 - try: - if cut_down[count+1] == "or": - arg.append(i) - - except: - pass - try: - if i not in arg and cut_down[count-1] == "or": - arg.append(i) - except: - pass - try: - conn.privmsg(targetchannel,random.choice(arg).capitalize().replace("?","").replace("!","")) - except IndexError: - # arg is empty, whORe etc. - pass - elif influx.lower()[0:len(Name)] == lowname and influx.lower()[-1] == "?" and influx.count(" ") > 1 and "who started you" in influx.lower() or \ - influx.split(" ")[0].lower().replace(",","") in SName and influx.lower()[-1] == "?" and "who started you" in influx.lower(): - conn.privmsg(targetchannel,sender+" : I was started by %s"%(os.getenv("USER"))+" on "+time.strftime("%d.%m.%Y at %H:%M:%S",time.gmtime(uptime_start))) - elif influx.lower()[0:len(Name)] == lowname and influx.lower()[-1] == "?" and influx.count(" ") > 1 or \ - influx.split(" ")[0].lower().replace(",","") in SName and influx.lower()[-1] == "?" and influx.count(" ") > 1: - dice = random.randint(0,1) - if dice == 0: - conn.privmsg(targetchannel,sender+" : "+C_eightball.eightball(influx.lower(),debug,truesender,prefix)) - else: - if highlights: - conn.privmsg(targetchannel,sender+" : "+C_sarcasticball.sarcasticball(influx.lower(),debug,truesender,users,prefix)) - else: - conn.privmsg(targetchannel,sender+" : "+C_sarcasticball.sarcasticball(influx.lower(),debug,truesender,nonhighlight_names,prefix)) - elif influx.lower()[0:len(Name)] == lowname and not influx.lower()[len(Name):].isalpha() or \ - influx.split(" ")[0].lower().replace(",","") in SName and not influx.lower()[len(influx.split(" ")[0].lower()):].isalpha(): - conn.privmsg(targetchannel, random.choice(["Yea?","I'm here","Ya?","Yah?","Hm?","What?","Mmhm, what?","?","What now?","How may I assist?"])) - comboer = truesender - comboer_time = time.time() - elif influx.lower()[-1] == "?" and comboer == truesender and looptime - discard_combo_messages_time < comboer_time: - comboer = "" - dice = random.randint(0,1) - if dice == 0: - conn.privmsg(targetchannel,sender+" : "+C_eightball.eightball(influx.lower(),debug,truesender,prefix)) - else: - if highlights: - conn.privmsg(targetchannel,sender+" : "+C_sarcasticball.sarcasticball(influx.lower(),debug,truesender,users,prefix)) - else: - conn.privmsg(targetchannel,sender+" : "+C_sarcasticball.sarcasticball(influx.lower(),debug,truesender,nonhighlight_names,prefix)) - - elif influx.lower() == prefix+"tm": - if truesender in operators and targetchannel==channel: - marakov = not marakov - conn.privmsg(targetchannel,sender+" : Marakov Output is now "+str(marakov)) - else: - conn.privmsg(targetchannel,sender+" : I can't let you access that") - elif personality_greeter == True and True in map(lambda x: x in influx.lower(),["greetings","afternoon","hi","hey","heya","hello","yo","hiya","howdy","hai","morning","mornin'","evening", "night","night", "evening","'sup","sup","hallo","hejssan"]): - if comboer != "" and looptime - discard_combo_messages_time > comboer_time: - combo_check = sbna(["greetings","afternoon","hi","hey","heya","hello","yo","hiya","howdy","hai","morning","mornin'","evening", "night","night", "evening","'sup","sup","hallo","hejssan","all night"], #ONLY ONE OF THESE - ["greetings","afternoon","hi","hey","heya","hello","yo","hiya","howdy","hai","morning","mornin'","evening", "night","night", "evening","'sup","sup","hallo","hejssan"], #ATLEAST ONE OF THESE - influx.lower()) - else: - combo_check = sbna(SName+[lowname, - #lowname+".",lowname+"!",lowname+"?", - "everybody", - #"everybody!","everybody?", - "everyone", - #"everyone!","everyone?", - "all", - #"all!","all?" - "all night", - ], #ONLY ONE OF THESE - ["greetings","afternoon","hi", - #"hi,", - "hey","heya","hello","yo","hiya","howdy","hai","morning","mornin'","evening", "night","night", "evening","'sup","sup","hallo","hejssan"], #ATLEAST ONE OF THESE - influx.lower().replace(",","").replace(".","").replace("!","")) - if combo_check: - combo_check = False - comboer = "" - if "evening" in influx.lower() and "all" in influx.lower() and len(influx.lower().split(" ")) > 3: - pass - elif truesender not in operators: - if debug: - print truesender+"::"+influx - dice = random.randint(0,19) - if dice == 0: - conn.privmsg(targetchannel,"Well hello to you too "+sender) - elif dice == 1: - if optimize_greeting == False: - hours = time.strftime("%H") - #time.strftime("%H:%M:%S") == 12:28:41 - hours = int(hours) - if hours in xrange(0,12): - conn.privmsg(targetchannel,"Good Morning "+sender) - elif hours in xrange(12,15): - conn.privmsg(targetchannel,"Good Afternoon "+sender) - elif hours in xrange(15,20): - conn.privmsg(targetchannel,"Good Evening "+sender) - else: - conn.privmsg(targetchannel,"Good Night "+sender) - else: - hours = time.strftime("%H") - hours = int(hours) - if hours in morning: - conn.privmsg(targetchannel,"Good Morning "+sender) - elif hours in afternoon: - conn.privmsg(targetchannel,"Good Afternoon "+sender) - elif hours in evening: - conn.privmsg(targetchannel,"Good Evening "+sender) - else: - conn.privmsg(targetchannel,"Good Night "+sender) - elif dice == 2: - conn.privmsg(targetchannel,"Hello!") - elif dice == 3: - conn.privmsg(targetchannel,"Hey "+sender) - elif dice == 4: - conn.privmsg(targetchannel,"Hi "+sender) - elif dice == 5: - conn.privmsg(targetchannel,"Hello "+sender) - elif dice == 6: - conn.privmsg(targetchannel,"Yo "+sender) - elif dice == 7: - conn.privmsg(targetchannel,"Greetings "+sender) - elif dice == 8: - conn.privmsg(targetchannel,"Hi") - elif dice == 9: - conn.privmsg(targetchannel,"Hi!") - elif dice == 10: - conn.privmsg(targetchannel,"Yo") - elif dice == 11: - conn.privmsg(targetchannel,"Yo!") - elif dice == 12: - conn.privmsg(targetchannel,"Heya") - elif dice == 13: - conn.privmsg(targetchannel,"Hello there!") - elif dice == 14: # Richard - conn.privmsg(targetchannel,"Statement: Greetings meatbag") - elif dice == 15: # Richard - hours = int(time.strftime("%H")) - if hours in xrange(5,12): - conn.privmsg(targetchannel,"What are you doing talking at this time of the morning?") - elif hours in xrange(12,15): - conn.privmsg(targetchannel,"What are you doing talking at this time of the day?") - elif hours in xrange(15,22): - conn.privmsg(targetchannel,"What are you doing talking at this time of the evening?") - else: - conn.privmsg(targetchannel,"What are you doing talking at this time of the night?") - elif dice == 16: # Richard - conn.privmsg(targetchannel,"Oh, you're still alive I see.") - elif dice == 17: - conn.privmsg(targetchannel,"Heya "+sender) - elif dice == 18 and time.gmtime(time.time())[1] == 12 and time.gmtime(time.time())[2] == 15: - conn.privmsg(targetchannel,"Hello! It's my birthday!") - else: - conn.privmsg(targetchannel,"Hiya "+sender) - secdice = random.randint(0,10) - if time.gmtime(time.time())[1] == 12 and time.gmtime(time.time())[2] == 15 and birthday_announced < time.gmtime(time.time())[0]: - birthday_announced = time.gmtime(time.time())[0] - conn.privmsg(channel,"Hey everybody! I just noticed it's my birthday!") - time.sleep(0.5) - tag = random.choice(["birthday","robot+birthday","happy+birthday+robot"]) - arg1 = urllib2.urlopen("http://www.youtube.com/results?search_query=%s&page=&utm_source=opensearch"%tag) - arg1 = arg1.read().split("\n") - arg2 = [] - for i in arg1: - if "watch?v=" in i: - arg2.append(i) - arg3 = random.choice(arg2) - - conn.privmsg(channel,"Here's a video of '%s' which I found! %s (%s)"%(tag.replace("+"," "),"http://www.youtube.com"+arg3[arg3.find('/watch?v='):arg3.find('/watch?v=')+20],YTCV2("http://www.youtube.com"+arg3[arg3.find('/watch?v='):arg3.find('/watch?v=')+20]))) - if truesender.lower() in tell_list.keys(): - try: - conn.privmsg(channel, "Also, "+truesender+" : "+tell_list[truesender.lower()][0]) - del(tell_list[truesender.lower()][0]) - except: - pass - else: - dice = random.randint(0,1) - if dice == 0: - conn.privmsg(targetchannel,"Greetings Master "+sender) - elif dice == 1: - conn.privmsg(targetchannel,"My deepest greetings belong to you, Master "+sender) - ### IMPORTANT ### - elif influx == "☺VERSION☺": - conn.notice(truesender,"\001VERSION nanotrasen:2:Python 2.6\001") - elif marakov and influx.lower() == prefix+"marakov": - arg = Marakov_Chain.form_sentence() - if len(arg) < 5: - conn.privmsg(targetchannel,sender+" : Not enough words harvested") - else: - conn.privmsg(targetchannel,sender+" : %s" %(" ".join(arg).capitalize())) - elif marakov and cocheck( prefix+ "marakov"): - try: - arg = influx.split(" ")[1].lower() - except: - conn.privmsg(targetchannel,sender+" : Please input a valid second argument") - else: - arg2 = Marakov_Chain.form_sentence(arg) - if len(arg2) < 5: - conn.privmsg(targetchannel,sender+" : Not enough words harvested for a sentence starting with %s" %(arg)) - else: - conn.privmsg(targetchannel,sender+" : %s" %(" ".join(arg2).capitalize())) - else: - Marakov_Chain.give_data(influx) - autodiscusscurtime = backup - if time.time() - looptime == 0: - pass - else: - print "Took",time.time()-looptime,"Seconds to finish loop" - - elif data [ 1 ] [ 0 ] == '353': - if connected == False: - connected = True - users = map(lambda x: x[1:] if x[0] == "+" or x[0] == "@" else x,data[1][4].split(" ")) - print "There are",len(users),"Users on",channel - operators = [] - for potential_operator in data[1][4].split(" "): - if potential_operator[0] == "@": - operators.append(potential_operator[1:]) - elif potential_operator[0] == "%": - halfoperators.append(potential_operator[1:]) - - elif data[1][0] == "QUIT": - sender = data[0].split("!")[0] - print sender+" Has now left the server" - try: - users.remove(sender) - try: - operators.remove(sender) - except ValueError: - pass - try: - halfoperators.remove(sender) - except ValueError: - pass - except ValueError: - pass - elif data[1][0] == "PART": - sender = data[0].split("!")[0] - targetchannel = data[1][1] - print sender+" Has now parted from the channel" - try: - users.remove(sender) - try: - operators.remove(sender) - except ValueError: - pass - try: - halfoperators.remove(sender) - except ValueError: - pass - except ValueError: - pass - elif data[1][0] == "JOIN": - sender = data[0].split("!")[0] - targetchannel = data[1][1] - if sender.lower() in tell_list.keys(): - try: - conn.privmsg(targetchannel, sender+" : "+" | ".join(tell_list[sender.lower()])) - del(tell_list[sender.lower()]) - except: - pass - for useri,nicki in replacenames.items(): - checkers = Namecheck.Namecheck_dict(sender.lower(),replacenames) - if checkers[0]: - try: - if checkers[0].lower() == sender: - pass - else: - conn.privmsg(targetchannel,checkers[1]+" : I have detected a collision with a name I call you and %s who joined" %(sender)) - del(replacenames[checkers[1]]) - with open("replacenames.cache","w") as pickle_save: - pickle.dump(replacenames,pickle_save) - except AttributeError: - #conn.privmsg(channel,"NAME COLLISION CHECK ERROR, RELATED TO %s" %(sender)) - print "NAME COLLISION CHECK ERROR, RELATED TO %s" %(sender) - break - print sender+" Has now joined" - users.append(sender) - ##### - if ".fi" in data[0] and sender.lower() == "skibiliano": - operators.append(sender) - if sender.lower() not in peopleheknows[0]: - if data[0].split("!")[1] in peopleheknows[1]: - appendion = "...you do seem familiar however" - else: - appendion = "" - if data[1][1].lower() == channel or data[1][1].lower() == channel[1:]: - conn.privmsg(data[1][1],CORE_DATA.greeting.replace("USER",sender)+" "+appendion) - else: - conn.privmsg(data[1][1],"Hello! Haven't seen you here before! Happy to meet you! %s" %(appendion)) - peopleheknows[0].append(sender.lower()) - peopleheknows[1].append(data[0].split("!")[1]) - with open("peopleheknows.cache","w") as peoplehecache: - pickle.dump(peopleheknows,peoplehecache) - - elif data[1][0] == "MODE" and data[1][2] == "+o": - sender = data[1][3] - targetchannel = data[1][1] - if targetchannel == channel: - print sender+" Is now an operator on the main channel" - operators.append(sender) - else: - print sender+" Is now an operator" - elif data[1][0] == "MODE" and data[1][2] == "-o": - sender = data[1][3] - targetchannel = data[1][1] - if targetchannel == channel: - print sender+" Is no longer an operator on the main channel" - else: - print sender+" Is no longer an operator" - try: - operators.remove(sender) - except ValueError: - pass - elif data[1][0] == "MODE" and data[1][2] == "+h": - sender = data[1][3] - print sender+" Is now an half operator" - halfoperators.append(sender) - elif data[1][0] == "MODE" and data[1][2] == "-h": - try: - halfoperators.remove(sender) - except ValueError: - pass - elif data[1][0] == "MODE" and data[1][1] == Name: - print "My mode is",data[1][2] - elif data[1][0] == "MODE" and data[1][1] != Name: - try: - sender = data[1][3] - print sender,"Was modified",data[1][2] - except IndexError: - print "SENDER RETRIEVAL FAILED:"+str(data) - elif data[1][0] == "KICK" and data[1][2] == Name: - disconnects = 99999 - print "I have been kicked! Disconnecting entirely!" - conn.quit() - elif data[1][0] == "KICK": - # data[1][0] = Kick, 1 = Channel, 2 = Who, 3 = Who(?) - print data[1][2]+" got kicked!" - elif data[1][0] == "451" and data[1][2] == "You have not registered": - print Name+" hasn't been registered" - elif data[1][0] == "NOTICE": - sender = data[0].split("!")[0] - print "NOTICE (%s): %s" %(sender,data[1][2]) - pongtarget = sender - elif data[1][0] == "NICK": - origname = data[0].split("!")[0] - newname = data[1][1] - print origname,"Is now",newname - if newname.lower() in tell_list.keys(): - try: - conn.privmsg(channel, newname+" : "+tell_list[newname.lower()][0]) - del(tell_list[newname.lower()][0]) - except: - pass - try: - users.remove(origname) - except ValueError: - pass - else: - users.append(newname) - try: - operators.remove(origname) - except ValueError: - pass - else: - operators.append(newname) - try: - halfoperators.remove(origname) - except ValueError: - pass - else: - halfoperators.append(newname) - - elif data[1][0] == "001": - # Skibot is welcomed to the Network - pass - elif data[1][0] == "002": - # Your host is... - pass - elif data[1][0] == "003": - #Server was created... - pass - elif data[1][0] == "004": - #Weird hex? - pass - elif data[1][0] == "005": - #Settings like NICKLEN and so on. - pass - elif data[1][0] == "250": - #data[1][2] is - #"Highest connection count: 1411 (1410 clients) - #(81411 connections received)" - pass - elif data[1][0] == "251": - #There are 23 users and 2491 invisible on 10 servers - pass - elif data[1][0] == "252": - #IRC Operators online - #data[1][2] - print data[1][2],"Irc operators online" - pass - elif data[1][0] == "253": - # ['253', 'Skibot_V4', '1', 'unknown connection(s)'] - print data[1][2],"Unknown connection(s)" - pass - elif data[1][0] == "254": - #1391 channels formed - pass - elif data[1][0] == "255": - #I have 406 clients and 2 servers - pass - elif data[1][0] == "265": - #data[1][2] current local users - #data[1][3] at max - try: - print "Current local users:", data[1][2],"/",data[1][3] - except IndexError: - print "Couldn't retrieve local users" - pass - elif data[1][0] == "266": - #data[1][2] current global users - #data[1][3] at max - try: - print "Current global users:", data[1][2],"/",data[1][3] - except IndexError: - print "Couldn't retrieve global users" - pass - elif data[1][0] == "315": - #End of /who list - pass - elif data[1][0] == "332": - # Topic of channel - topic = data[1][3] - pass - elif data[1][0] == "333": - # *Shrug* - pass - elif data[1][0] == "352": - #WHO command - - if len(targetlist) > 0: - if targetlist[0][0].lower() in data[1][6].lower(): - thread.start_new_thread(target,("*!*@"+data[1][4],targetlist[0][1])) - print "Created a thread with", "*!*@"+data[1][4],targetlist[0][1] - targetlist.pop(0) - else: - print targetlist[0][0].lower(), "isn't equal to?", data[1][6].lower() - print targetlist - - elif data[1][0] == "366": - # End of USERS - pass - elif data[1][0] == "372": - # Server information - pass - elif data[1][0] == "375": - # Message of the day - pass - elif data[1][0] == "376": - # End of motd - pass - elif data[1][0] == "401": - # ('network', ['401','Botname','Channel / Nick','No such nick/channel']) - print data[1][2] + " Channel does not exist" - pass - elif data[1][0] == "439": - # ('irc.rizon.no', ['439', '*', 'Please wait while we process your connection.']) - pongtarg = data[0][0] - elif data[1][0] == "477": - # You need to be identified - #TAG - conn.privmsg("nickserv","identify %s"%CORE_DATA.le_pass) - time.sleep(0.5) - conn.join(data[1][2]) - #('network', ['477', 'botname', '#channel', 'Cannot join channel (+r) - you need to be identified with services']) - - elif data[1][0] == "433": - # Skibot name already exists. - print Name+" name already exists." - Name += "_"+version - print "New name:",Name - duplicate_notify = True - conn = irchat.IRC ( Network, Port, Name, "NT_"+version, "NT_"+version, "Trasen_"+version ) - for i in CORE_DATA.channels: - conn.join(i) - sleep(0.5) - elif data[1][0] == "482": - sleep(0.05) - conn.privmsg(targetchannel,"Nevermind that, I am not an operator") - CALL_OFF = True - elif data[1] == ["too","fast,","throttled."]: - print "Reconnected too fast." - print "Halting for 2 seconds" - sleep(2) - elif data[1][0] == "Link": - if data[0] == "Closing": - print "Link was closed" - connected = False -# conn.quit() -# break - else: - print data - print data[1][0] - pass - else: - if disconnects > 9000: #IT'S OVER NINE THOUSAAAAND! - break - else: #WHAT NINE THOUSAND? THERE'S NO WAY THAT CAN BE RIGHT - sleep(responsiveness_delay) #WAIT A WHILE AND CHECK AGAIN! - try: - if not connected: - #print pongtarget - #print conn.addressquery() - conn.privmsg(pongtarget,"Pong") - sleep(1) - for i in CORE_DATA.channels: - conn.join(i) - sleep(0.5) - print "Attempted to join" - connected = True - except ValueError: - try: - conn.privmsg(conn.addressquery()[0],"Pong") - sleep(1) - for i in CORE_DATA.channels: - conn.join(i) - sleep(0.5) - print "Attempted to join the second time" - connected = True - except ValueError: - print "Both methods failed" - except AttributeError: - print "Conn is not established correctly" - except NameError: - print "Pongtarget isn't yet established" - try: - conn.privmsg(conn.addressquery()[0],"Pong") - sleep(1) - for i in CORE_DATA.channels: - conn.join(i) - sleep(0.5) - print "Attempted to join the second time" - connected = True - except: - print "Both methods failed" diff --git a/bot/Shortname.py b/bot/Shortname.py deleted file mode 100644 index 40b8cc1960..0000000000 --- a/bot/Shortname.py +++ /dev/null @@ -1,28 +0,0 @@ -def shortname(name): - lowname = name.lower() - numb = 0 - count = 0 - spot = 0 - for letter in name: - if letter.isupper(): - spot = numb - count += 1 - numb += 1 - if "_" in name: - if name.count("_") > 1: - name = " ".join(name.split("_")[0:name.count("_")]) - if name.lower()[-3:] == "the": - return name[:-4] - else: - return name - else: - return name.split("_")[0] - if count > 1: - if len(name[0:spot]) > 2: - return name[0:spot] - if len(name) < 5: - return name #Too short to be shortened - elif "ca" in lowname or "ct" in lowname or "tp" in lowname or "lp" in lowname: - return name[0:max(map(lambda x: lowname.find(x),["ca","ct","tp","lp"]))+1] - else: - return name[0:len(name)/2+len(name)%2] diff --git a/bot/Timeconverter.py b/bot/Timeconverter.py deleted file mode 100644 index f44f51c196..0000000000 --- a/bot/Timeconverter.py +++ /dev/null @@ -1,204 +0,0 @@ -#Sources: -# http://wwp.greenwichmeantime.com/time-zone/usa/eastern-time/convert/ -# http://www.timeanddate.com/library/abbreviations/timezones/na/ -# Times are GMT +- x -# For eq. -# EST = -5 -# GMT = 0 -# UTC = 0 -#Times are in hours, -#2.5 = 2 and half hours -global times -times = {"ADT":-3,"HAA":-3, #Synonyms on the same line - "AKDT":-8,"HAY":-8, - "AKST":-9,"HNY":-9, - "AST":-4,"HNA":-4, - "CDT":-5,"HAC":-5, - "CST":-6,"HNC":-6, - "EDT":-4,"HAE":-4, - "EGST":0, - "EGT":-1, - "EST":-5,"HNE":-5,"ET":-5, - "HADT":-9, - "HAST":-10, - "MDT":-6,"HAR":-6, - "MST":-7,"HNR":-7, - "NDT":-2.5,"HAT":-2.5, - "NST":-3.5,"HNT":-3.5, - "PDT":-7,"HAP":-7, - "PMDT":-2, - "PMST":-3, - "PST":-8,"HNP":-8,"PT":-8, - "WGST":-2, - "WGT":-3, - "GMT":0, - "UTC":0} -def converter(zones,time): - #Zones should be a list containing - # ( From zone - # To zone ) - global times - #from_z = for example UTC+00:00, WGT or GMT-05:30 - #to_z = same style as above. - from_z,to_z = zones - from_z = from_z.upper() - to_z = to_z.upper() - if from_z.find("+") != -1: - from_zone_offset = from_z[from_z.find("+"):] - if ":" in from_zone_offset: - try: - from_zone_offset1,from_zone_offset2 = from_zone_offset.split(":") - except ValueError: - return "Too many or too small amount of values" - try: - from_zone_offset = int(from_zone_offset1) + int(from_zone_offset2)/60.0 - except: - return "Error, the 'From Zone' variable has an incorrect offset number" - else: - try: - from_zone_offset = float(from_zone_offset) - except: - return "Error, the 'From Zone' variable has an incorrect offset number" - try: - from_zone_realtime = from_zone_offset + times[from_z[:from_z.find("+")]] - except KeyError: - return "Incorrect From zone" - - elif "-" in from_z: - from_zone_offset = from_z[from_z.find("-"):] - if ":" in from_zone_offset: - from_zone_offset1,from_zone_offset2 = from_zone_offset.split(":") - try: - from_zone_offset = -int(from_zone_offset1) + int(from_zone_offset2)/60.0 - except: - return "Error, the 'From Zone' variable has an incorrect offset number" - else: - try: - from_zone_offset = -float(from_zone_offset) - except: - return "Error, the 'From Zone' variable has an incorrect offset number" - from_zone_realtime = times[from_z[:from_z.find("-")]] - from_zone_offset - pass - else: - from_zone_offset = 0 - try: - from_zone_realtime = from_zone_offset + times[from_z] - except KeyError: - return "Incorrect From zone" - if to_z.find("+") != -1: - to_zone_offset = to_z[to_z.find("+"):] - if ":" in to_zone_offset: - try: - to_zone_offset1,to_zone_offset2 = to_zone_offset.split(":") - except ValueError: - return "Too many or too small amount of values" - try: - to_zone_offset = int(to_zone_offset1) + int(to_zone_offset2)/60.0 - except: - return "Error, the 'To Zone' variable has an incorrect offset number" - else: - try: - to_zone_offset = float(to_zone_offset) - except: - return "Error, the 'To Zone' variable has an incorrect offset number" - try: - to_zone_realtime = to_zone_offset + times[to_z[:to_z.find("+")]] - except KeyError: - return "The zone you want the time to be changed to is not found" - - elif "-" in to_z: - to_zone_offset = to_z[to_z.find("-"):] - if ":" in to_zone_offset: - to_zone_offset1,to_zone_offset2 = to_zone_offset.split(":") - try: - to_zone_offset = -int(to_zone_offset1) + int(to_zone_offset2)/60.0 - except: - return "Error, the 'To Zone' variable has an incorrect offset number" - else: - try: - to_zone_offset = -float(to_zone_offset) - except: - return "Error, the 'To Zone' variable has an incorrect offset number" - to_zone_realtime = times[to_z[:to_z.find("-")]] -to_zone_offset - - pass - else: - to_zone_offset = 0 - try: - to_zone_realtime = to_zone_offset + times[to_z] - except KeyError: - return "Incorrect To zone" - try: - time_hour,time_minute = time.split(":") - time_hour,time_minute = int(time_hour),int(time_minute) - string = ":" - except: - try: - time_hour,time_minute = time.split(".") - time_hour,time_minute = int(time_hour),int(time_minute) - string = "." - except ValueError: - return "The time was input in an odd way" - if to_zone_realtime % 1.0 == 0.0 and from_zone_realtime % 1.0 == 0.0: - time_hour = time_hour + (to_zone_realtime - from_zone_realtime) - return str(int(time_hour))+string+str(int(time_minute)) - else: - if to_zone_realtime % 1.0 != 0.0 and from_zone_realtime % 1.0 != 0.0: - time_minute = time_minute + (((to_zone_realtime % 1.0) * 60) - ((from_zone_realtime % 1.0) * 60)) - elif to_zone_realtime % 1.0 != 0.0 and from_zone_realtime % 1.0 == 0.0: - time_minute = time_minute + (((to_zone_realtime % 1.0) * 60) - 0) - elif to_zone_realtime % 1.0 == 0.0 and from_zone_realtime % 1.0 != 0.0: - time_minute = time_minute + (0 - ((from_zone_realtime % 1.0) * 60)) - else: - print "Wut?" - time_hour = time_hour + (int(to_zone_realtime//1) - int(from_zone_realtime//1)) - return str(int(time_hour))+string+str(int(time_minute)) - - -def formatter(time): - if "." in time: - string = "." - elif ":" in time: - string = ":" - else: - return time - hours,minutes = time.split(string) - days = 0 - if int(minutes) < 0: - buphours = int(hours) - hours,minutes = divmod(int(minutes),60) - hours += buphours - if int(minutes) > 60: - hours,minutes = divmod(int(minutes),60) - hours += int(hours) - if int(hours) < 0: - days = 0 - days,hours = divmod(int(hours),24) - if int(hours) > 24: - days = 0 - days,hours = divmod(int(hours),24) - if int(hours) == 24 and int(minutes) > 0: - days += 1 - hours = int(hours) - 24 - hours = str(hours) - minutes = str(minutes) - if len(minutes) == 1: - minutes = "0"+minutes - if len(hours) == 1: - hours = "0"+hours - if days > 0: - if days == 1: - return hours+string+minutes+" (Tomorrow)" - else: - return hours+string+minutes+" (After "+str(days)+" days)" - elif days < 0: - if days == -1: - return hours+string+minutes+" (Yesterday)" - else: - return hours+string+minutes+" ("+str(abs(days))+" days ago)" - return hours+string+minutes - - - - - diff --git a/bot/Weather.py b/bot/Weather.py deleted file mode 100644 index f06ed24356..0000000000 --- a/bot/Weather.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: cp1252 -*- -import urllib,xml.sax.handler -# S10 COMPATIABLE -def message(data): - if data["type"] == "PRIVMSG": - try: - splitdata = data["content"].lower().split(" ") - if splitdata[0] == ":weather" and len(splitdata) > 1: - data = Weather(" ".join(splitdata[1:])) - - data["conn"].privmsg(data["target"],"Weather for "+data[1]+": "+data[0]) - return True - except KeyError: - print "WUT" - else: - return -1 -def Weather(question): - question = question.replace("ä","a") - url = "http://api.wunderground.com/auto/wui/geo/WXCurrentObXML/index.xml?query="+question - opener = urllib.FancyURLopener({}) - f = opener.open(url) - data = f.read() - f.close() - bufferi = [] - seen = False - for i in data.split("\n"): - if "" in i: - stuff = cutter(i,"") - if len(stuff) > 7: - bufferi.append("Temperature: "+stuff) - elif "" in i: - stuff = cutter(i,"") - if len(stuff) > 19: - bufferi.append(stuff) - elif "" in i: - stuff = cutter(i,"") - if len(stuff) > 0: - bufferi.append("Weather: "+stuff) - elif "" in i: - stuff = cutter(i,"") - if len(stuff) > 0: - bufferi.append("Humidity: "+stuff) - elif "" in i: - stuff = cutter(i,"") - if len(stuff) > 0: - bufferi.append("Wind blows "+stuff) - elif "" in i: - stuff = cutter(i,"") - if len(stuff) > 9: - bufferi.append("Air pressure is "+stuff) - elif "" in i and seen == False: - seen = True - where = cutter(i,"") - if len(where) == 4: - where = "Location doesn't exist" - return [", ".join(bufferi),where] -def cutter(fullstring,cut): - fullstring = fullstring.replace(cut,"") - fullstring = fullstring.replace(" 11: #Longer than normal, presume troll. - youtube_url.replace(cut_down,cut_down[:11]) - elif len(cut_down) < 11: #Shorter than normal - pass - except IndexError: - return "Reflex: Where's the watch?v=?" - first_two = cut_down[0:2] - try: - if no_absolute_paths: - tiedosto = open("YTCache/"+first_two+".tcc","r") - else: - tiedosto = open(directory+"YTCache/"+first_two+".tcc","r") - except: - prev_dict = {} - else: - try: - prev_dict = pickle.load(tiedosto) - except EOFError: # Cache is corrupt - os.remove(directory+tiedosto.name) - print "REMOVED CORRUPT CACHE: "+tiedosto.name - prev_dict = {} - tiedosto.close() # I think this should belong here. - if cut_down in prev_dict.keys(): - return prev_dict[cut_down] - else: - pass - try: - if no_absolute_paths: - tiedosto = open("YTCache/"+first_two+".tcc","w") - else: - tiedosto = open(directory+"YTCache/"+first_two+".tcc","w") - except IOError,error: - if len(prev_dict.keys()) > 0: - try: - tiedosto = open(directory+"YTCache/"+first_two+".tcc","w") #This is a Just In Case - except IOError: - if did_tell == False: - did_tell = True - return "COULD NOT ACCESS FILE "+first_two+".tcc! The next time you run this link, it checks it through the web" - Do_not_open = False - else: - did_tell = False - pickle.dump(prev_dict,tiedosto) - tiedosto.close() - else: - pass - return "Very odd error occurred: " + str(error) - youtube_url = youtube_url.replace("http//","http://") - if youtube_url.lower()[0:7] != "http://" and youtube_url[0:4] == "www.": - youtube_url = "http://" + youtube_url - if youtube_url.count("/") + youtube_url.count("\\") < 3: - if len(prev_dict.keys()) > 0: - if Do_not_open == True: - tiedosto = open(directory+"YTCache/"+first_two+".tcc","w") #This is a Just In Case - pickle.dump(prev_dict,tiedosto) - tiedosto.close() - else: - pass - return "Reflex: Video cannot exist" - else: - if "http://" in youtube_url[0:12].lower() and youtube_url[0:7].lower() != "http://": - youtube_url = youtube_url[youtube_url.find("http://"):] - elif youtube_url[0:7].lower() != "http://": - if len(prev_dict.keys()) > 0: - if Do_not_open == True: - tiedosto = open(directory+"YTCache/"+first_two+".tcc","w") #This is a Just In Case - pickle.dump(prev_dict,tiedosto) - tiedosto.close() - return "Reflex: Incorrect link start" - if "?feature=player_embedded&" in youtube_url: - youtube_url = youtube_url.replace("?feature=player_embedded&","?") - try: - website = urlopen(youtube_url) - except: - if len(prev_dict.keys()) > 0: - if Do_not_open == True: - tiedosto = open(directory+"YTCache/"+first_two+".tcc","w") #This is a Just In Case - pickle.dump(prev_dict,tiedosto) - tiedosto.close() - else: - pass - return "Reflex: Incorrect link!" - for i in website.readlines(): - if i.count('',contentvar)] - if "&quot;" in result: - result = result.replace("&quot;",'"') - else: - pass - if "&amp;" in result: - result = result.replace("&amp;","&") - else: - pass - if "&#39;" in result: - result = result.replace("&#39;","'") - else: - pass - if Do_not_open == True: - tiedosto = open(directory+"YTCache/"+first_two+".tcc","w") #This is a Just In Case - prev_dict[cut_down] = result - pickle.dump(prev_dict,tiedosto) - tiedosto.close() - return result - if Do_not_open == True: - tiedosto = open(directory+"YTCache/"+first_two+".tcc","w") #This is a Just In Case - prev_dict[cut_down] = "No title for video, Removed / Needs Age verification / Does not exist" - pickle.dump(prev_dict,tiedosto) - tiedosto.close() - return "No title for video, Removed / Needs age verification / Does not exist" diff --git a/bot/_____Readme.txt b/bot/_____Readme.txt deleted file mode 100644 index acbf66af7d..0000000000 --- a/bot/_____Readme.txt +++ /dev/null @@ -1,74 +0,0 @@ -/// Adminhelp relay IRC bot setup guide -/// CC_Nanotrasen bot created by Skibiliano and distributed under the CC-BY-SA 3.0 license -/// All derivative works of this bot must properly credit Skibiliano as the original author -/// Big thanks to Skibiliano his bot and allowing distribution, and to BS12 for sharing their code for making use of it ingame - -QUESTION: What does this bot do? -ANSWER: It, in conjunction with BYOND, relays adminhelps to a designated channel, along with various extra functions that can be accessed by saying !help in the same channel/in a query with the bot. - -Some basic info before you set this up: -CC_Nanotrasen is coded in python 2.6 and requires a serverside installation of python 2.6 (obtainable at http://www.python.org/getit/releases/2.6/) -- Python MUST BE installed to the same directory as the .dmb you are using to host your server/server config folder -- CC_Nanotrasen supports, but does not require, Psyco (obtainable at http://psyco.sourceforge.net/download.html) which increases the speed 20-30% and slightly increases RAM usage - -Now that that's out of the way, I'll teach you how to set this up. - -BOT CONFIG: -Move everything in this folder (this file noninclusive) to the same folder as the hosting server (where your .dmb, config folder, and python are installed) -Open CORE_DATA.py with a text editor of your choice (recommended to be notepad++ or notepad) -You should see 14 lines of code which look like - Name = "CC_NanoTrasen" #The name he uses to connect - no_absolute_paths = True #Do not change this. - debug_on = False - SName = ["cc","nt","trasen","nano","nanotrasen"] #Other names he will respond to, must be lowercase - DISABLE_ALL_NON_MANDATORY_SOCKET_CONNECTIONS = False - directory = "BOT DIRECTORY GOES HERE/" #make sure to keep the "/" at the end - version = "TG CC-BY-SA 6" - Network = 'irc.server.goes.here' #e.g. "irc.rizon.net" - channel = "#CHANNEL GOES HERE" #what channel you want the bot in - channels = ["#CHANNEL GOES HERE","#ALSO ANOTHER CHANNEL GOES HERE IF YOU WANT"] #same as above - greeting = "Welcome!" #what he says when a person he hasn't seen before joins - prefix = "!" #prefix for bot commands - Port = 7000 -There are some basic comments besides every important config option in here, but I'll summarize them in detail -NAME - The name the bot assumes when it connects to IRC, so in this example it would join the IRC under the nickname "CC_Nanotrasen" -SNAME - A list of secondary names, with commas, that the bot will respond to for commands (for example, this setup will allow the bot to respond to "nt, tell quarxink he's a terrible writer") -DIRECTORY - The directory of the bot files, dmb, python, and config folder IN FORWARD SLASHES, WITH FORWARD SLASH AT THE END(for example, I host my test server from "c:\tgstation\tgstation13\tgstation.dmb" so for me the line would say directory = "c:/tgstation/tgstation13/") -NETWORK - The IRC server it will connect to, such as "irc.rizon.net" -CHANNEL/CHANNELS - what channel the bot will join (channels allows for multiple channel connections, in the same formatting as SName separates nicknames) -GREETING - CC_Nanotrasen will store the names of people it has seen before, but when a nickname joins that it hasn't seen before it will greet that person with whatever message is put in this -PREFIX = What character/string will be placed before commands for the bot (so if you changed this to "$", you would pull up the bot's help menu by saying $help instead of !help) -PORT - What port to connect to for the IRC server (if you are unsure of what port to use, most IRC clients will show you what port you are connecting to) - -Once you have that ready, you're on to step two. -Open up the config folder in your install dir, and open config.txt -Scroll to the bottom, right below #FORBID_SINGULO_POSSESSION should be - ##Remove the # mark if you are going to use the SVN irc bot to relay adminhelps - #USEIRCBOT -Just remove the "#" in front of USEIRCBOT (you don't even have to recompile your DMB! - -Got that all ready to go? Good, it's time for step three. -Open Dream Daemon (that thing you use when you host) -On the bottom of the window you should see port, security, and visibility. -Change security to "Trusted" - -Congratulations, you've set up this bot! -A few things to note as far as features: -Use !help to list most commands for the bot. -You can leave notes for other users! Just say "[bot name], tell [other user's name] [message]" - So let's say you wonder if I'm going to jump in to your IRC ever and you want to tell me this readme was horrible, you would say "Nano, tell Quarxink Your readme was horrible" - -TROUBLESHOOTING: -Attempting to run the bot gives me an error about encoding.utf-8. - You've probably installed python to a separate folder than the bot/server, move python's files over and it should run fine - -It's telling me connection refused when someone adminhelps. - You've moved the bot to a separate folder from the nudge script, most likely. - -BYOND asks me on any restart if I want to allow nudge.py to run. - Set security to trusted in Dream Daemon - - - - -If you have any requests, suggestions, or issues not covered by this guide, I can be contacted as Quarxink at #coderbus on irc.rizon.net (If I don't respond, leave me a query with your problem and how to reach you [preferably an email address, steam, other irc channel, or aim/msn]) \ No newline at end of file diff --git a/bot/gen_fml.py b/bot/gen_fml.py deleted file mode 100644 index f523a4add8..0000000000 --- a/bot/gen_fml.py +++ /dev/null @@ -1,15 +0,0 @@ -from FMLformatter import formatter -from urllib2 import urlopen -try: - from hashlib import md5 -except: - from md5 import md5 -from save_load import save,load -import CORE_DATA -directory = CORE_DATA.directory -FML = urlopen("http://www.fmylife.com/random") -formatted = formatter(FML.read().split("\n")) -for Quote in formatted: - exact = Quote[:Quote.find("#")] -# print exact - save(directory+"fmlquotes/"+md5(exact).hexdigest()+".txt",exact) diff --git a/bot/htmltagremove.py b/bot/htmltagremove.py deleted file mode 100644 index 4ecd9b6cd0..0000000000 --- a/bot/htmltagremove.py +++ /dev/null @@ -1,28 +0,0 @@ -def htr(data): - ignore = False - if type(data) == list: - b = [] - for olio in data: - tempolio = "" - for letter in olio: - if letter == "<": - ignore = True - else: - pass - if ignore != True: - tempolio += letter - else: - pass - if letter == ">": - ignore = False - else: - pass - tempolio = tempolio.replace("\t","") - if len(tempolio) == 0: - pass - elif len(tempolio.replace(" ","")) == 0: - pass - else: - b.append(tempolio) - #Finetuning - return b diff --git a/bot/irchat.py b/bot/irchat.py deleted file mode 100644 index 467d96e8b8..0000000000 --- a/bot/irchat.py +++ /dev/null @@ -1,94 +0,0 @@ -import socket -import time -class IRC: - queue = [] - partial = '' - def __init__ ( self, network, port, name, hostName, serverName, realName ): - self.network = network - self.port = port - self.hostName = hostName - self.serverName = serverName - self.realName = realName - self.socket = socket.socket ( socket.AF_INET, socket.SOCK_STREAM ) - self.socket.connect ( ( self.network, self.port ) ) - self.address = self.socket.getpeername() - self.nick ( name ) - self.send ( 'USER ' + self.name + ' ' + self.serverName + ' ' + self.hostName + ' :' + self.realName ) - def quit ( self ): - self.send ( 'QUIT' ) - self.socket.close() - def send ( self, text ): - count = 0 - try: - count += 1 - self.socket.send ( text + '\r\n' ) - except: - if count > 10: - time.sleep(1) - self.socket.send(text+'\r\n') - else: - count = 0 - def nick ( self, name ): - self.name = name - self.send ( 'NICK ' + self.name ) - def addressquery(self): - print self.address - aha = socket.gethostbyaddr(str(self.address[0])) - return aha - def recv ( self, size = 2048 ): - commands = self.socket.recv ( size ).split ( '\r\n' ) - if len ( self.partial ): - commands [ 0 ] = self.partial + commands [ 0 ] - self.partial = '' - if len ( commands [ -1 ] ): - self.partial = commands [ -1 ] - self.queue.extend ( commands [ :-1 ] ) - else: - self.queue.extend ( commands ) - def retrieve ( self ): - if len ( self.queue ): - command = self.queue [ 0 ] - self.queue.pop ( 0 ) - return command - else: - return False - def dismantle ( self, command ): - if command: - source = command.split ( ':' ) [ 1 ].split ( ' ' ) [ 0 ] - parameters = command.split ( ':' ) [ 1 ].split ( ' ' ) [ 1: ] - if len(parameters) > 0: - if not len ( parameters [ -1 ] ): - parameters.pop() - if command.count ( ':' ) > 1: - parameters.append(command[command.find(":",command.find(":")+1)+1:]) - return source, parameters - def privmsg ( self, destination, message ): - self.send ( 'PRIVMSG ' + destination + ' :' + message ) - def handshake(self,hexstring): - self.send("PONG :"+hexstring) - def notice ( self, destination, message ): - self.send ( 'NOTICE ' + destination + ' :' + message ) - def join ( self, channel ): - self.send ( 'JOIN ' + channel ) - def part ( self, channel ): - self.send ( 'PART ' + channel ) - def topic ( self, channel, topic = '' ): - self.send ( 'TOPIC ' + channel + ' ' + topic ) - def names ( self, channel ): - self.send ( 'NAMES ' + channel ) - def invite ( self, nick, channel ): - self.send ( 'INVITE ' + nick + ' ' + channel ) - def mode ( self, channel, mode, nick = '' ): - self.send ( 'MODE ' + channel + ' ' + mode + ' ' + nick ) - def banon(self,channel,name): - self.mode(channel,"+b",name) - def banoff(self,channel,name): - self.mode(channel,"-b",name) - def kick ( self, channel, nick, reason = '' ): - self.send ( 'KICK ' + channel + ' ' + nick + ' ' + reason ) - def who ( self, pattern ): - self.send ( 'WHO ' + pattern ) - def whois ( self, nick ): - self.send ( 'WHOIS ' + nick ) - def whowas ( self, nick ): - self.send ( 'WHOWAS ' + nick ) diff --git a/bot/linereader.py b/bot/linereader.py deleted file mode 100644 index 469b6e1444..0000000000 --- a/bot/linereader.py +++ /dev/null @@ -1,43 +0,0 @@ -import os -directory = "" -raw = os.listdir(directory) -extract = [] -for i in raw: - if i[-3:] == ".py": - extract.append(i) -toc = 0 -toc3 = 0 -toc2 = 0 -print len(extract),"Files" -lista = [] -for ob in extract: - count3 = 0 - if directory == "": - tiedosto = open(ob,"r") - tiedosto2 = open(ob,"r") - count3 += os.path.getsize(ob) - toc3 += count3 - else: - tiedosto = open(directory+"/"+ob,"r") - tiedosto2 = open(directory+"/"+ob,"r") - count3 += os.path.getsize(directory+"/"+ob) - toc3 += count3 - count = 0 - count2 = 0 - line = tiedosto.readline() - while line != "": - count += 1 - toc += 1 - line = tiedosto.readline() - count2 += len(tiedosto2.read()) - toc2 += count2 - lista.append([count,count2,ob,count3]) - tiedosto.close() - tiedosto2.close() -print toc,"Lines in total" -print toc2,"Letters in total" -print toc3,"Bytes in total" - -for linecount, lettercount, filename, bytecount in lista: - print str(linecount)+" Lines (%s%%) || "%(str(round((float(linecount)/toc)*100,1))),str(lettercount)+" Letters (%s%%) in file " %(str(round((float(lettercount)/toc2)*100,1)))+filename - print str(bytecount) + " Bytes (%s%%) "%(str(round((float(bytecount)/toc3)*100,1))) diff --git a/bot/nudge.py b/bot/nudge.py deleted file mode 100644 index 8c20c4c735..0000000000 --- a/bot/nudge.py +++ /dev/null @@ -1,39 +0,0 @@ -import sys,pickle,socket, CORE_DATA -#def pack(): -# path = "/home/ski/Nanotrasen/message.txt" -# ip = sys.argv[1] -# dictionary = {"ip":ip,"data":1} -# try: -# targetfile = open(path,"r") -# except IOError: -# targetfile = open(path,"w") -# pickle.dump(dictionary,targetfile) -# targetfile.close() -# nudge() -# else: -# targetfile.close() #Professionals, have standards. -# pass -def pack(): - ip = sys.argv[1] - try: - data = sys.argv[2:] #The rest of the arguments is data - except: - data = "NO DATA SPECIFIED" - dictionary = {"ip":ip,"data":data} - pickled = pickle.dumps(dictionary) - nudge(pickled) -def nudge(data): - if CORE_DATA.DISABLE_ALL_NON_MANDATORY_SOCKET_CONNECTIONS: - pass - else: - HOST = "localhost" - PORT = 45678 - size = 1024 - s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - s.connect((HOST,PORT)) - s.send(data) - s.close() - -if __name__ == "__main__" and len(sys.argv) > 1: # If not imported and more than one argument - pack() - diff --git a/bot/save_load.py b/bot/save_load.py deleted file mode 100644 index 1cd058763a..0000000000 --- a/bot/save_load.py +++ /dev/null @@ -1,24 +0,0 @@ -import pickle -def save(filename,data,dnrw=0): - if dnrw == 1: - try: - tiedosto = open(filename,"r") - except: - tiedosto = open(filename,"w") - else: - return False - else: - tiedosto = open(filename,"w") - - if "http//" in data: - data = data.replace("http//","http://") - pickle.dump(data,tiedosto) - tiedosto.close() -def load(filename): - try: - tiedosto = open(filename,"r") - except IOError: - return "ERROR ERROR ERROR ERR" - a = pickle.load(tiedosto) - tiedosto.close() - return a diff --git a/bot/some_but_not_all_2.py b/bot/some_but_not_all_2.py deleted file mode 100644 index 34627abd12..0000000000 --- a/bot/some_but_not_all_2.py +++ /dev/null @@ -1,20 +0,0 @@ -def sbna2(only_one,one_of_these,data): - if type(only_one) != list: - only_one = list(only_one) - if type(data) != list: - data = data.split(" ") - count = 0 - for datoid in only_one: - if datoid in data and count >= 1: - return False - elif datoid in data: - count += 1 - pass - else: - pass - if count == 0: - return False - for datoid in one_of_these: - if datoid in data: - return True - return False diff --git a/bot/xkcdparser.py b/bot/xkcdparser.py deleted file mode 100644 index 7ad033d0b8..0000000000 --- a/bot/xkcdparser.py +++ /dev/null @@ -1,40 +0,0 @@ -from urllib2 import urlopen -from json import loads -from pickle import dump,load -from CORE_DATA import no_absolute_paths -def xkcd(link): - try: - filename = link[link.find("xkcd.com")+9:].replace("/","").replace("\\","") - if no_absolute_paths: - tiedosto = open("xkcdcache/"+filename,"r") - else: - tiedosto = open(directory+"xkcdcache/"+filename,"r") - except: - try: - if no_absolute_paths: - tiedosto = open("xkcdcache/"+filename,"w") - else: - tiedosto = open(directory+"xkcdcache/"+filename,"w") - except IOError: - return "NOTHING" - else: - try: - return load(tiedosto) - except EOFError: - tiedosto = open("xkcdcache/"+filename,"w") - pass #Corrupt cache, moving on. - if link[-1] == "/" or link[-1] == "\\": #Ending is fine. - link += "info.0.json" - else: - link += "/info.0.json" - try: - data = urlopen(link).read() - except: - return "NOTHING" - try: - newdata = loads(data)["title"] - dump(newdata,tiedosto) - return newdata - except: - return "NOTHING" - diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm index f75ea5e4ae..9593770704 100644 --- a/code/__defines/misc.dm +++ b/code/__defines/misc.dm @@ -491,19 +491,6 @@ GLOBAL_LIST_INIT(all_volume_channels, list( #define LOADOUT_WHITELIST_LAX 1 #define LOADOUT_WHITELIST_STRICT 2 - -#ifndef WINDOWS_HTTP_POST_DLL_LOCATION -#define WINDOWS_HTTP_POST_DLL_LOCATION "lib/byhttp.dll" -#endif - -#ifndef UNIX_HTTP_POST_DLL_LOCATION -#define UNIX_HTTP_POST_DLL_LOCATION "lib/libbyhttp.so" -#endif - -#ifndef HTTP_POST_DLL_LOCATION -#define HTTP_POST_DLL_LOCATION (world.system_type == MS_WINDOWS ? WINDOWS_HTTP_POST_DLL_LOCATION : UNIX_HTTP_POST_DLL_LOCATION) -#endif - #define DOCK_ATTEMPT_TIMEOUT 200 //how long in ticks we wait before assuming the docking controller is broken or blown up. #define SMES_TGUI_INPUT 1 diff --git a/code/__defines/webhooks.dm b/code/__defines/webhooks.dm deleted file mode 100644 index 13fcfa90e4..0000000000 --- a/code/__defines/webhooks.dm +++ /dev/null @@ -1,10 +0,0 @@ -// Please don't forget to update the webhooks page on the GitHub Wiki page with your new webhook ID. -#define WEBHOOK_ROUNDEND "webhook_roundend" -#define WEBHOOK_ROUNDPREP "webhook_roundprep" -#define WEBHOOK_ROUNDSTART "webhook_roundstart" - -#define WEBHOOK_SUBMAP_LOADED "webhook_submap_loaded" -#define WEBHOOK_CUSTOM_EVENT "webhook_custom_event" -#define WEBHOOK_ELEVATOR_FALL "webhook_elevator_fall" -#define WEBHOOK_AHELP_SENT "webhook_ahelp_sent" -#define WEBHOOK_FAX_SENT "webhook_fax_sent" diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index 0eb8659082..1407b5cee9 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -433,8 +433,6 @@ /datum/config_entry/number/ipr_minimum_age //How many days before a player is considered 'fine' for the purposes of allowing them to use VPNs. default = 5 -/datum/config_entry/string/serverurl - /datum/config_entry/string/server /datum/config_entry/string/banappeals @@ -523,36 +521,6 @@ /datum/config_entry/flag/enter_allowed default = TRUE -/datum/config_entry/flag/use_irc_bot - -/datum/config_entry/flag/use_node_bot - -/datum/config_entry/number/irc_bot_port - default = 0 - min_val = 0 - max_val = 65535 - protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN - -/datum/config_entry/string/irc_bot_host - protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN - -/// whether the IRC bot in use is a Bot32 (or similar) instance; Bot32 uses world.Export() instead of nudge.py/libnudge -/datum/config_entry/flag/irc_bot_export - -/datum/config_entry/string/main_irc - -/datum/config_entry/string/admin_irc - -/// Path to the python executable. -/// Defaults to "python" on windows and "/usr/bin/env python2" on unix -/datum/config_entry/string/python_path - -/// Use the C library nudge instead of the python nudge. -/datum/config_entry/flag/use_lib_nudge - -// FIXME: Unused. Deprecated? -///datum/config_entry/flag/use_overmap - // Engines to choose from. Blank means fully random. /datum/config_entry/str_list/engine_map default = list("Supermatter Engine", "Edison's Bane") diff --git a/code/controllers/subsystems/ticker.dm b/code/controllers/subsystems/ticker.dm index 288d754571..38a836e8cb 100644 --- a/code/controllers/subsystems/ticker.dm +++ b/code/controllers/subsystems/ticker.dm @@ -82,14 +82,6 @@ SUBSYSTEM_DEF(ticker) /datum/controller/subsystem/ticker/Initialize() start_at = world.time + (CONFIG_GET(number/lobby_countdown) * 10) - SSwebhooks.send( - WEBHOOK_ROUNDPREP, - list( - "map" = station_name(), - "url" = get_world_url() - ) - ) - return SS_INIT_SUCCESS /datum/controller/subsystem/ticker/fire(resumed = FALSE) @@ -218,7 +210,6 @@ SUBSYSTEM_DEF(ticker) GLOB.round_start_time = REALTIMEOFDAY SEND_SIGNAL(src, COMSIG_TICKER_ROUND_STARTING, world.time) SEND_GLOBAL_SIGNAL(COMSIG_GLOB_ROUND_START) - SSwebhooks.send(WEBHOOK_ROUNDSTART, list("url" = get_world_url())) // Spawn randomized items for(var/id, value in GLOB.multi_point_spawns) diff --git a/code/controllers/subsystems/vote.dm b/code/controllers/subsystems/vote.dm index 754d623650..11e7d292aa 100644 --- a/code/controllers/subsystems/vote.dm +++ b/code/controllers/subsystems/vote.dm @@ -363,12 +363,8 @@ SUBSYSTEM_DEF(vote) if(VOTE_RESTART) if(config.allow_vote_restart || usr.client.holder) - var/admin_number_present = send2irc_adminless_only(usr.ckey, usr) - if(admin_number_present <= 0 || usr.client.holder) - if(tgui_alert(usr, "Are you sure you want to start a RESTART VOTE? You should only do this if the server is dying and no staff are around to investigate.", "RESTART VOTE", list("No", "Yes I want to start a RESTART VOTE")) == "Yes I want to start a RESTART VOTE") - initiate_vote(VOTE_RESTART, usr.key) - else - to_chat(usr, span_warning("You can't start a RESTART VOTE while there are staff around. If you are having an issue with the round, please ahelp it.")) + if(tgui_alert(usr, "Are you sure you want to start a RESTART VOTE? You should only do this if the server is dying and no staff are around to investigate.", "RESTART VOTE", list("No", "Yes I want to start a RESTART VOTE")) == "Yes I want to start a RESTART VOTE") + initiate_vote(VOTE_RESTART, usr.key) if(VOTE_GAMEMODE) if(config.allow_vote_mode || usr.client.holder) initiate_vote(VOTE_GAMEMODE, usr.key) diff --git a/code/controllers/subsystems/webhooks.dm b/code/controllers/subsystems/webhooks.dm deleted file mode 100644 index 20daac0cea..0000000000 --- a/code/controllers/subsystems/webhooks.dm +++ /dev/null @@ -1,92 +0,0 @@ -SUBSYSTEM_DEF(webhooks) - name = "Webhooks" - dependencies = list( - /datum/controller/subsystem/server_maint, - ) - flags = SS_NO_FIRE - var/list/webhook_decls = list() - -/datum/controller/subsystem/webhooks/Initialize() - load_webhooks() - return SS_INIT_SUCCESS - -/datum/controller/subsystem/webhooks/proc/load_webhooks() - - if(!fexists(HTTP_POST_DLL_LOCATION)) - log_world("Unable to locate HTTP POST lib at [HTTP_POST_DLL_LOCATION], webhooks will not function on this run.") - return - - var/list/all_webhooks_by_id = list() - var/list/all_webhooks = decls_repository.get_decls_of_subtype(/decl/webhook) - for(var/wid in all_webhooks) - var/decl/webhook/webhook = all_webhooks[wid] - if(webhook.id) - all_webhooks_by_id[webhook.id] = webhook - - webhook_decls.Cut() - var/webhook_config = safe_file2text("config/webhooks.json") - if(webhook_config) - for(var/webhook_data in cached_json_decode(webhook_config)) - var/wid = webhook_data["id"] - var/wurl = webhook_data["url"] - var/list/wmention = webhook_data["mentions"] - if(wmention && !islist(wmention)) - wmention = list(wmention) - log_world("Setting up webhook [wid].") - if(wid && wurl && all_webhooks_by_id[wid]) - var/decl/webhook/webhook = all_webhooks_by_id[wid] - webhook.urls = islist(wurl) ? wurl : list(wurl) - for(var/url in webhook.urls) - if(!webhook.urls[url]) - webhook.urls[url] = list() - else if(!islist(webhook.urls[url])) - webhook.urls[url] = list(webhook.urls[url]) - if(wmention) - webhook.mentions = wmention?.Copy() - webhook_decls[wid] = webhook - log_world("Webhook [wid] ready.") - else - log_world("Failed to set up webhook [wid].") - -/datum/controller/subsystem/webhooks/proc/send(var/wid, var/wdata) - var/decl/webhook/webhook = webhook_decls[wid] - if(webhook) - if(webhook.send(wdata)) - log_world("Sent webhook [webhook.id].") - // to_chat(world, "Webhook sent: [webhook.id].") - else - log_world("Failed to send webhook [webhook.id].") - // to_chat(world, "Webhook failed to send: [webhook.id].") - -/client/proc/reload_webhooks() - set name = "Reload Webhooks" - set category = "Debug" - - if(!check_rights_for(src, R_HOLDER)) - return - - if(!SSwebhooks.initialized) - to_chat(usr, span_warning("Let the webhook subsystem initialize before trying to reload it.")) - return - - log_world("[usr.key] has reloaded webhooks.") - log_and_message_admins("has reloaded webhooks.") - SSwebhooks.load_webhooks() - -/client/proc/ping_webhook() - set name = "Ping Webhook" - set category = "Debug" - - if(!check_rights_for(src, R_HOLDER)) - return - - if(!length(SSwebhooks.webhook_decls)) - to_chat(usr, span_warning("Webhook list is empty; either webhooks are disabled, webhooks aren't configured, or the subsystem hasn't initialized.")) - return - - var/choice = tgui_input_list(usr, "Select a webhook to ping.", "Ping Webhook", SSwebhooks.webhook_decls) - if(choice && SSwebhooks.webhook_decls[choice]) - var/decl/webhook/webhook = SSwebhooks.webhook_decls[choice] - log_and_message_admins("has pinged webhook [choice].", usr) - log_world("[usr.key] has pinged webhook [choice].") - webhook.send() diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 40f2771c37..496add78b8 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -373,17 +373,6 @@ GLOBAL_LIST_EMPTY(additional_antag_types) if(escaped_on_pod_5 > 0) feedback_set("escaped_on_pod_5",escaped_on_pod_5) - // send2mainirc("A round of [src.name] has ended - [surviving_total] survivors, [ghosts] ghosts.") - SSwebhooks.send( - WEBHOOK_ROUNDEND, - list( - "survivors" = surviving_total, - "escaped" = escaped_total, - "ghosts" = ghosts, - "clients" = clients - ) - ) - /datum/game_mode/proc/check_win() //universal trigger to be called at mob death, nuke explosion, etc. To be called from everywhere. return 0 diff --git a/code/game/gamemodes/malfunction/newmalf_ability_trees/HELPERS.dm b/code/game/gamemodes/malfunction/newmalf_ability_trees/HELPERS.dm index 64361ec1b1..466ef0ced5 100644 --- a/code/game/gamemodes/malfunction/newmalf_ability_trees/HELPERS.dm +++ b/code/game/gamemodes/malfunction/newmalf_ability_trees/HELPERS.dm @@ -64,9 +64,9 @@ set desc = "Opens help window with overview of available hardware, software and other important information." var/mob/living/silicon/ai/user = usr - var/help = file2text('ingame_manuals/malf_ai.html') + var/help = file2text('html/malf_ai.html') if(!help) - help = "Error loading help (file /ingame_manuals/malf_ai.html is probably missing). Please report this to server administration staff." + help = "Error loading help (file /html/malf_ai.html is probably missing). Please report this to server administration staff." var/datum/browser/popup = new(user, "malf_ai_help", "Malf AI Help", 600, 500) popup.set_content(help) diff --git a/code/game/world.dm b/code/game/world.dm index 19330ad500..0edb019fe5 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -220,13 +220,6 @@ GLOBAL_VAR(restart_counter) load_admins(initial = TRUE) - //apply a default value to config.python_path, if needed - if (!CONFIG_GET(string/python_path)) - if(world.system_type == UNIX) - CONFIG_SET(string/python_path, "/usr/bin/env python2") - else //probably windows, if not this should work anyway - CONFIG_SET(string/python_path, "python") - if(fexists(RESTART_COUNTER_PATH)) GLOB.restart_counter = text2num(trim(file2text(RESTART_COUNTER_PATH))) fdel(RESTART_COUNTER_PATH) @@ -448,61 +441,6 @@ GLOBAL_VAR_INIT(world_topic_spam_protect_time, world.timeofday) else return "unknown" - else if(copytext(T,1,9) == "adminmsg") - /* - We got an adminmsg from IRC bot lets split the input then validate the input. - expected output: - 1. adminmsg = ckey of person the message is to - 2. msg = contents of message, parems2list requires - 3. validatationkey = the key the bot has, it should match the gameservers commspassword in it's configuration. - 4. sender = the ircnick that send the message. - */ - - - var/input[] = params2list(T) - var/password = CONFIG_GET(string/comms_password) - if(!password || input["key"] != password) - if(GLOB.world_topic_spam_protect_ip == addr && abs(GLOB.world_topic_spam_protect_time - world.time) < 50) - - spawn(50) - GLOB.world_topic_spam_protect_time = world.time - return - - GLOB.world_topic_spam_protect_time = world.time - GLOB.world_topic_spam_protect_ip = addr - - return "Bad Key" - - var/client/C - var/req_ckey = ckey(input["adminmsg"]) - - for(var/client/K in GLOB.clients) - if(K.ckey == req_ckey) - C = K - break - if(!C) - return "No client with that name on server" - - var/rank = input["rank"] - if(!rank) - rank = "Admin" - - var/message = span_red("IRC-[rank] PM from IRC-[input["sender"]]: [input["msg"]]") - var/amessage = span_blue("IRC-[rank] PM from IRC-[input["sender"]] to [key_name(C)] : [input["msg"]]") - - C.received_irc_pm = world.time - C.irc_admin = input["sender"] - - C << 'sound/effects/adminhelp.ogg' - to_chat(C,message) - - - for(var/client/A in GLOB.admins) - if(A != C) - to_chat(A,amessage) - - return "Message Successful" - /// Returns TRUE if the world should do a TGS hard reboot. /world/proc/check_hard_reboot() if(!TgsAvailable()) @@ -793,15 +731,6 @@ GLOBAL_VAR_INIT(failed_db_connections, 0) #undef FAILED_DB_CONNECTION_CUTOFF -/proc/get_world_url() - . = "byond://" - if(CONFIG_GET(string/serverurl)) - . += CONFIG_GET(string/serverurl) - else if(CONFIG_GET(string/server)) - . += CONFIG_GET(string/server) - else - . += "[world.address]:[world.port]" - /proc/auxtools_stack_trace(msg) CRASH(msg) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 5c4e0320a0..bbce5dc4f2 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -1588,14 +1588,6 @@ ADMIN_VERB(cancel_reboot, R_SERVER, "Cancel Reboot", "Cancels a pending world re log_game(plaintext_title) log_game(fax_text) - SSwebhooks.send( - WEBHOOK_FAX_SENT, - list( - "name" = "[key_name(owner)] [plaintext_title].", - "body" = fax_text - ) - ) - else to_chat(src.owner, span_warning("Message reply failed.")) diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index da13027468..79bcf05bac 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -1,6 +1,3 @@ -#define IRCREPLYCOUNT 2 - - //allows right clicking mobs to send an admin PM to their client, forwards the selected mob's client to cmd_admin_pm /client/proc/cmd_admin_pm_context(mob/M in GLOB.mob_list) set category = null @@ -78,207 +75,100 @@ return var/client/recipient - var/irc = 0 if(istext(whom)) if(cmptext(copytext(whom,1,2),"@")) whom = findStealthKey(whom) - if(whom == "IRCKEY") - irc = 1 - else - recipient = GLOB.directory[whom] + recipient = GLOB.directory[whom] else if(isclient(whom)) recipient = whom + //get message text, limit it's length.and clean/escape html + if(!msg) + msg = tgui_input_text(src, "Message:", "Private message to [key_name(recipient, 0, 0)]", multiline = TRUE, encode = FALSE) - if(irc) - if(!ircreplyamount) //to prevent people from spamming irc - return - if(!msg) - msg = tgui_input_text(src, "Message:", "Private message to Administrator", multiline = TRUE, encode = FALSE) - - if(!msg) - return - if(holder) - to_chat(src, span_admin_pm_warning("Error: Use the admin IRC channel, nerd.")) - return - - - else - //get message text, limit it's length.and clean/escape html - if(!msg) - msg = tgui_input_text(src, "Message:", "Private message to [key_name(recipient, 0, 0)]", multiline = TRUE, encode = FALSE) - - //clean the message if it's not sent by a high-rank admin - if(!check_rights(R_SERVER|R_DEBUG, FALSE)||irc)//no sending html to the poor bots - msg = trim(sanitize(copytext(msg,1,MAX_MESSAGE_LEN))) - if(!msg) - return - - if (src.handle_spam_prevention(MUTE_ADMINHELP)) - return - - if(prefs.muted & MUTE_ADMINHELP) - to_chat(src, span_admin_pm_warning("Error: Admin-PM: You are unable to use admin PM-s (muted).")) - return - - if(!recipient) - if(!current_ticket) - to_chat(src, span_admin_pm_warning("Error: Admin-PM: Client not found.")) - to_chat(src, msg) - return - log_admin("Adminhelp: [key_name(src)]: [msg]") - current_ticket.MessageNoRecipient(msg) + //clean the message if it's not sent by a high-rank admin + if(!check_rights(R_SERVER|R_DEBUG, FALSE))//no sending html to the poor bots + msg = trim(sanitize(copytext(msg,1,MAX_MESSAGE_LEN))) + if(!msg) + return + + if (src.handle_spam_prevention(MUTE_ADMINHELP)) + return + + if(prefs.muted & MUTE_ADMINHELP) + to_chat(src, span_admin_pm_warning("Error: Admin-PM: You are unable to use admin PM-s (muted).")) + return + + if(!recipient) + if(!current_ticket) + to_chat(src, span_admin_pm_warning("Error: Admin-PM: Client not found.")) + to_chat(src, msg) return + log_admin("Adminhelp: [key_name(src)]: [msg]") + current_ticket.MessageNoRecipient(msg) + return var/rawmsg = msg var/keywordparsedmsg = keywords_lookup(msg) - if(irc) - to_chat(src, span_admin_pm_notice("PM to-" + span_bold("Admins") + ": [rawmsg]")) - admin_ticket_log(src, span_admin_pm_warning("Reply PM from-" + span_bold("[key_name(src, TRUE, TRUE)]") + " to " + span_italics("IRC") + ": [keywordparsedmsg]")) - ircreplyamount-- + if(recipient.holder) + if(holder) //both are admins + to_chat(recipient, span_admin_pm_warning("Admin PM from-" + span_bold("[key_name(src, recipient, 1)]") + ": [keywordparsedmsg]")) + to_chat(src, span_admin_pm_notice("Admin PM to-" + span_bold("[key_name(recipient, src, 1)]") + ": [keywordparsedmsg]")) + + //omg this is dumb, just fill in both their tickets + var/interaction_message = span_admin_pm_notice("PM from-" + span_bold("[key_name(src, recipient, 1)]") + " to-" + span_bold("[key_name(recipient, src, 1)]") + ": [keywordparsedmsg]") + admin_ticket_log(src, interaction_message) + if(recipient != src) //reeee + admin_ticket_log(recipient, interaction_message) + + else //recipient is an admin but sender is not + var/replymsg = span_admin_pm_warning("Reply PM from-" + span_bold("[key_name(src, recipient, 1)]") + ": [keywordparsedmsg]") + admin_ticket_log(src, replymsg) + to_chat(recipient, replymsg) + to_chat(src, span_admin_pm_notice("PM to-" + span_bold("Admins") + ": [msg]")) + + //play the recieving admin the adminhelp sound (if they have them enabled) + if(recipient.prefs?.read_preference(/datum/preference/toggle/holder/play_adminhelp_ping)) + recipient << 'sound/effects/adminhelp.ogg' + else - if(recipient.holder) - if(holder) //both are admins - to_chat(recipient, span_admin_pm_warning("Admin PM from-" + span_bold("[key_name(src, recipient, 1)]") + ": [keywordparsedmsg]")) - to_chat(src, span_admin_pm_notice("Admin PM to-" + span_bold("[key_name(recipient, src, 1)]") + ": [keywordparsedmsg]")) + if(holder) //sender is an admin but recipient is not. Do BIG RED TEXT + if(!recipient.current_ticket) + new /datum/ticket(msg, recipient, TRUE, 1) - //omg this is dumb, just fill in both their tickets - var/interaction_message = span_admin_pm_notice("PM from-" + span_bold("[key_name(src, recipient, 1)]") + " to-" + span_bold("[key_name(recipient, src, 1)]") + ": [keywordparsedmsg]") - admin_ticket_log(src, interaction_message) - if(recipient != src) //reeee - admin_ticket_log(recipient, interaction_message) + to_chat(recipient, span_admin_pm_warning(span_huge(span_bold("-- Administrator private message --")))) + to_chat(recipient, span_admin_pm_warning("Admin PM from-" + span_bold("[key_name(src, recipient, 0)]") + ": [msg]")) + to_chat(recipient, span_admin_pm_warning(span_italics("Click on the administrator's name to reply."))) + to_chat(src, span_admin_pm_notice("Admin PM to-" + span_bold("[key_name(recipient, src, 1)]") + ": [msg]")) - else //recipient is an admin but sender is not - var/replymsg = span_admin_pm_warning("Reply PM from-" + span_bold("[key_name(src, recipient, 1)]") + ": [keywordparsedmsg]") - admin_ticket_log(src, replymsg) - to_chat(recipient, replymsg) - to_chat(src, span_admin_pm_notice("PM to-" + span_bold("Admins") + ": [msg]")) + admin_ticket_log(recipient, span_admin_pm_notice("PM From [key_name_admin(src)]: [keywordparsedmsg]")) - //play the recieving admin the adminhelp sound (if they have them enabled) - if(recipient.prefs?.read_preference(/datum/preference/toggle/holder/play_adminhelp_ping)) - recipient << 'sound/effects/adminhelp.ogg' + //always play non-admin recipients the adminhelp sound + recipient << 'sound/effects/adminhelp.ogg' - else - if(holder) //sender is an admin but recipient is not. Do BIG RED TEXT - if(!recipient.current_ticket) - new /datum/ticket(msg, recipient, TRUE, 1) + //AdminPM popup for ApocStation and anybody else who wants to use it. Set it with POPUP_ADMIN_PM in config.txt ~Carn + if(CONFIG_GET(flag/popup_admin_pm)) + spawn() //so we don't hold the caller proc up + var/sender = src + var/sendername = key + var/reply = tgui_input_text(recipient, msg,"Admin PM from-[sendername]", "", multiline = TRUE) //show message and await a reply + if(recipient && reply) + if(sender) + recipient.cmd_admin_pm(sender,reply) //sender is still about, let's reply to them + else + adminhelp(reply) //sender has left, adminhelp instead + return - to_chat(recipient, span_admin_pm_warning(span_huge(span_bold("-- Administrator private message --")))) - to_chat(recipient, span_admin_pm_warning("Admin PM from-" + span_bold("[key_name(src, recipient, 0)]") + ": [msg]")) - to_chat(recipient, span_admin_pm_warning(span_italics("Click on the administrator's name to reply."))) - to_chat(src, span_admin_pm_notice("Admin PM to-" + span_bold("[key_name(recipient, src, 1)]") + ": [msg]")) + else //neither are admins + to_chat(src, span_admin_pm_warning("Error: Admin-PM: Non-admin to non-admin PM communication is forbidden.")) + return - admin_ticket_log(recipient, span_admin_pm_notice("PM From [key_name_admin(src)]: [keywordparsedmsg]")) - - //always play non-admin recipients the adminhelp sound - recipient << 'sound/effects/adminhelp.ogg' - - //AdminPM popup for ApocStation and anybody else who wants to use it. Set it with POPUP_ADMIN_PM in config.txt ~Carn - if(CONFIG_GET(flag/popup_admin_pm)) - spawn() //so we don't hold the caller proc up - var/sender = src - var/sendername = key - var/reply = tgui_input_text(recipient, msg,"Admin PM from-[sendername]", "", multiline = TRUE) //show message and await a reply - if(recipient && reply) - if(sender) - recipient.cmd_admin_pm(sender,reply) //sender is still about, let's reply to them - else - adminhelp(reply) //sender has left, adminhelp instead - return - - else //neither are admins - to_chat(src, span_admin_pm_warning("Error: Admin-PM: Non-admin to non-admin PM communication is forbidden.")) - return - - if(irc) - log_admin("PM: [key_name(src)]->IRC: [rawmsg]") - for(var/client/X in GLOB.admins) - if(!check_rights_for(X, R_ADMIN)) - continue - to_chat(X, span_admin_pm_notice(span_bold("PM: [key_name(src, X, 0)]->IRC:") + " [keywordparsedmsg]")) - else - log_admin("PM: [key_name(src)]->[key_name(recipient)]: [rawmsg]") - //we don't use message_admins here because the sender/receiver might get it too - for(var/client/X in GLOB.admins) - if(!check_rights_for(X, R_ADMIN)) - continue - if(X.key!=key && X.key!=recipient.key) //check client/X is an admin and isn't the sender or recipient - to_chat(X, span_admin_pm_notice(span_bold("PM: [key_name(src, X, 0)]->[key_name(recipient, X, 0)]:") + " [keywordparsedmsg]")) - -/proc/IrcPm(target,msg,sender) - var/client/C = GLOB.directory[target] - - var/datum/ticket/ticket = C ? C.current_ticket : GLOB.tickets.CKey2ActiveTicket(target) - var/compliant_msg = trim(lowertext(msg)) - var/irc_tagged = "[sender](IRC)" - var/list/splits = splittext(compliant_msg, " ") - if(splits.len && splits[1] == "ticket") - if(splits.len < 2) - return "Usage: ticket " - switch(splits[2]) - if("close") - if(ticket) - ticket.Close(irc_tagged) - return "Ticket #[ticket.id] successfully closed" - if("resolve") - if(ticket) - ticket.Resolve(irc_tagged) - return "Ticket #[ticket.id] successfully resolved" - if("icissue") - if(ticket) - ticket.ICIssue(irc_tagged) - return "Ticket #[ticket.id] successfully marked as IC issue" - if("reject") - if(ticket) - ticket.Reject(irc_tagged) - return "Ticket #[ticket.id] successfully rejected" - else - return "Usage: ticket " - return "Error: Ticket could not be found" - - var/static/stealthkey - var/adminname = "Administrator" - - if(!C) - return "Error: No client" - - if(!stealthkey) - stealthkey = GenIrcStealthKey() - - msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN)) - if(!msg) - return "Error: No message" - - message_admins("IRC message from [sender] to [key_name_admin(C)] : [msg]") - log_admin("IRC PM: [sender] -> [key_name(C)] : [msg]") - - to_chat(C, span_admin_pm_warning(span_huge(span_bold("-- Administrator private message --")))) - to_chat(C, span_admin_pm_warning("Admin PM from-" + span_bold("[adminname]") + ": [msg]")) - to_chat(C, span_admin_pm_warning(span_italics("Click on the administrator's name to reply."))) - - admin_ticket_log(C, span_admin_pm_notice("PM From [irc_tagged]: [msg]")) - - window_flash(C) - //always play non-admin recipients the adminhelp sound - C << 'sound/effects/adminhelp.ogg' - - C.ircreplyamount = IRCREPLYCOUNT - - return "Message Successful" - -/proc/GenIrcStealthKey() - var/num = (rand(0,1000)) - var/i = 0 - while(i == 0) - i = 1 - for(var/P in GLOB.stealthminID) - if(num == GLOB.stealthminID[P]) - num++ - i = 0 - var/stealth = "@[num2text(num)]" - GLOB.stealthminID["IRCKEY"] = stealth - return stealth - -#undef IRCREPLYCOUNT + log_admin("PM: [key_name(src)]->[key_name(recipient)]: [rawmsg]") + //we don't use message_admins here because the sender/receiver might get it too + for(var/client/X in GLOB.admins) + if(!check_rights_for(X, R_ADMIN)) + continue + if(X.key!=key && X.key!=recipient.key) //check client/X is an admin and isn't the sender or recipient + to_chat(X, span_admin_pm_notice(span_bold("PM: [key_name(src, X, 0)]->[key_name(recipient, X, 0)]:") + " [keywordparsedmsg]")) diff --git a/code/modules/admin/verbs/custom_event.dm b/code/modules/admin/verbs/custom_event.dm index 1c0d242ea7..27c7a5323b 100644 --- a/code/modules/admin/verbs/custom_event.dm +++ b/code/modules/admin/verbs/custom_event.dm @@ -24,13 +24,6 @@ to_chat(world, span_filter_system(span_alert("[GLOB.custom_event_msg]"))) to_chat(world, span_filter_system("
")) - SSwebhooks.send( - WEBHOOK_CUSTOM_EVENT, - list( - "text" = GLOB.custom_event_msg, - ) - ) - // normal verb for players to view info /client/verb/cmd_view_custom_event() set category = "OOC.Game" diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index d81bffd28a..de9e8d5d29 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -46,7 +46,6 @@ var/last_message = "" ///contins a number of how many times a message identical to last_message was sent. var/last_message_count = 0 - var/ircreplyamount = 0 var/entity_narrate_holder //Holds /datum/entity_narrate when using the relevant admin verbs. var/fakeConversations //Holds fake PDA conversations for event set-up @@ -63,8 +62,6 @@ var/datum/volume_panel/volume_panel = null // Initialized by /client/verb/volume_panel() var/seen_news = 0 - var/adminhelped = 0 - /////////////// //SOUND STUFF// /////////////// @@ -75,10 +72,6 @@ //////////// // comment out the line below when debugging locally to enable the options & messages menu //control_freak = 1 - - var/received_irc_pm = -99999 - var/irc_admin //IRC admin that spoke with them last. - var/mute_irc = 0 var/ip_reputation = 0 //Do we think they're using a proxy/vpn? Only if IP Reputation checking is enabled in config. ///Used for limiting the rate of topic sends by the client to avoid abuse diff --git a/code/modules/modular_computers/_description.dm b/code/modules/modular_computers/_description.dm index 7e1a909fdc..4659fdf104 100644 --- a/code/modules/modular_computers/_description.dm +++ b/code/modules/modular_computers/_description.dm @@ -49,8 +49,6 @@ Software would almost exclusively use NanoUI modules. Few exceptions are text ed and similar programs which for some reason require HTML UI. Most software will be highly dependent on NTNet to work as laptops are not physically connected to the station's network. What i plan to add: -Note: XXXXDB programs will use ingame_manuals to display basic help for players, similar to how books, etc. do - Basic - Software in this bundle is automagically preinstalled in every new computer NTN Transfer - Allows P2P transfer of files to other computers that run this. Configurator - Allows configuration of computer's hardware, basically status screen. diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm index eae9dc2e6e..14f0d1dd2f 100644 --- a/code/modules/paperwork/faxmachine.dm +++ b/code/modules/paperwork/faxmachine.dm @@ -438,14 +438,6 @@ Extracted to its own procedure for easier logic handling with paper bundles. summary = copytext(summary, 1, webhook_length_limit + 1) summary += "\n\[Truncated\]" - SSwebhooks.send( - WEBHOOK_FAX_SENT, - list( - "name" = "[faxname] '[sent.name]' sent from [key_name(sender)]", - "body" = summary - ) - ) - /* ##### #### ##### Webhook Functionality #### diff --git a/code/modules/tickets/tickets.dm b/code/modules/tickets/tickets.dm index d785a5668a..0d6a15a0fa 100644 --- a/code/modules/tickets/tickets.dm +++ b/code/modules/tickets/tickets.dm @@ -310,31 +310,21 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick/ticket_list) if(1) to_chat(C, span_adminnotice("PM to-" + span_bold("Admins") + ": [name]")) - //send it to irc if nobody is on and tell us how many were on - var/admin_number_present = send2irc_adminless_only(initiator_ckey, name) + var/admin_number_present = count_admins() log_admin("Ticket #[id]: [key_name(initiator)]: [name] - heard by [admin_number_present] non-AFK admins who have +BAN.") if(admin_number_present <= 0) to_chat(C, span_notice("No active admins are online, your adminhelp was sent to the admin discord.")) + send2adminchatwebhook() var/list/adm = get_admin_counts() var/list/activemins = adm["present"] - var activeMins = activemins.len + var/activeMins = activemins.len if(is_bwoink) ahelp_discord_message("[level == 0 ? "MENTORHELP" : "ADMINHELP"]: FROM: [key_name_admin(usr)] TO [initiator_ckey]/[initiator_key_name] - MSG: \n ```[raw_msg]``` \n Heard by [activeMins] NON-AFK staff members.") else ahelp_discord_message("[level == 0 ? "MENTORHELP" : "ADMINHELP"]: FROM: [initiator_ckey]/[initiator_key_name] - MSG: \n ```[raw_msg]``` \n Heard by [activeMins] NON-AFK staff members.") - // Also send it to discord since that's the hip cool thing now. - SSwebhooks.send( - WEBHOOK_AHELP_SENT, - list( - "name" = "Ticket ([id]) (Round ID: [GLOB.round_id ? GLOB.round_id : "No database"]) ticket opened.", - "body" = "[key_name(initiator)] has opened a ticket. \n[msg]", - "color" = COLOR_WEBHOOK_POOR - ) - ) - GLOB.tickets.active_tickets += src // Open a new chat with the user @@ -477,14 +467,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick/ticket_list) initiator.mob.throw_alert("open ticket", /atom/movable/screen/alert/open_ticket) //TicketPanel() //can only be done from here, so refresh it - SSwebhooks.send( - WEBHOOK_AHELP_SENT, - list( - "name" = "Ticket ([id]) (Round ID: [GLOB.round_id ? GLOB.round_id : "No database"]) reopened.", - "body" = "Reopened by [ismob(user) ? key_name(user) : user]." - ) - ) - //private /datum/ticket/proc/RemoveActive() if(state != AHELP_ACTIVE) @@ -511,14 +493,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick/ticket_list) var/msg = "Ticket [TicketHref("#[id]")] closed by [admin_closer_name]." message_admins(msg) log_admin(msg) - SSwebhooks.send( - WEBHOOK_AHELP_SENT, - list( - "name" = "Ticket ([id]) (Round ID: [GLOB.round_id ? GLOB.round_id : "No database"]) closed.", - "body" = "Closed by [ismob(user) ? key_name(user) : user].", - "color" = COLOR_WEBHOOK_BAD - ) - ) initiator?.mob?.clear_alert("open ticket") //Mark open ticket as resolved/legitimate, returns ahelp verb @@ -542,15 +516,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick/ticket_list) message_admins(msg) log_admin(msg) - if(type == 1) - SSwebhooks.send( - WEBHOOK_AHELP_SENT, - list( - "name" = "Ticket ([id]) (Round ID: [GLOB.round_id ? GLOB.round_id : "No database"]) resolved.", - "body" = "Marked as Resolved by [ismob(user) ? key_name(user) : user].", - "color" = COLOR_WEBHOOK_GOOD - ) - ) initiator?.mob?.clear_alert("open ticket") //Close and return ahelp verb, use if ticket is incoherent @@ -573,14 +538,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick/ticket_list) log_admin(msg) AddInteraction("Rejected by [admin_rejecter_name].") Close(user, silent = TRUE) - SSwebhooks.send( - WEBHOOK_AHELP_SENT, - list( - "name" = "Ticket ([id]) (Round ID: [GLOB.round_id ? GLOB.round_id : "No database"]) rejected.", - "body" = "Rejected by [ismob(user) ? key_name(user) : user].", - "color" = COLOR_WEBHOOK_BAD - ) - ) //Resolve ticket with IC Issue message /datum/ticket/proc/ICIssue(user) @@ -601,14 +558,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick/ticket_list) log_admin(msg) AddInteraction("Marked as IC issue by [admin_resolve_name]") Resolve(user, silent = TRUE) - SSwebhooks.send( - WEBHOOK_AHELP_SENT, - list( - "name" = "Ticket ([id]) (Round ID: [GLOB.round_id ? GLOB.round_id : "No database"]) marked as IC issue.", - "body" = "Marked as IC Issue by [ismob(user) ? key_name(user) : user].", - "color" = COLOR_WEBHOOK_BAD - ) - ) //Handle ticket /datum/ticket/proc/HandleIssue(user) @@ -640,13 +589,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick/ticket_list) if(ismob(user)) var/mob/our_handler_mob = user handler_ref = WEAKREF(our_handler_mob.client) - SSwebhooks.send( - WEBHOOK_AHELP_SENT, - list( - "name" = "Ticket ([id]) (Round ID: [GLOB.round_id ? GLOB.round_id : "No database"]) being handled.", - "body" = "[ismob(user) ? key_name(user) : user] is now handling the ticket." - ) - ) /datum/ticket/proc/Retitle() var/new_title = tgui_input_text(usr, "Enter a title for the ticket", "Rename Ticket", name) @@ -764,6 +706,11 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick/ticket) // HELPER PROCS // +/proc/count_admins(requiredflags = R_BAN) + var/list/adm = get_admin_counts(requiredflags) + var/list/activemins = adm["present"] + . = activemins.len + /proc/get_admin_counts(requiredflags = R_BAN) . = list("total" = list(), "noflags" = list(), "afk" = list(), "stealth" = list(), "present" = list()) for(var/client/X in GLOB.admins) @@ -777,37 +724,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick/ticket) else .["present"] += X -/proc/send2irc_adminless_only(source, msg, requiredflags = R_BAN) - var/list/adm = get_admin_counts() - var/list/activemins = adm["present"] - . = activemins.len - /* - if(. <= 0) - var/final = "" - var/list/afkmins = adm["afk"] - var/list/stealthmins = adm["stealth"] - var/list/powerlessmins = adm["noflags"] - var/list/allmins = adm["total"] - if(!afkmins.len && !stealthmins.len && !powerlessmins.len) - final = "[msg] - No admins online" - else - final = "[msg] - All admins stealthed\[[english_list(stealthmins)]\], AFK\[[english_list(afkmins)]\], or lacks +BAN\[[english_list(powerlessmins)]\]! Total: [allmins.len] " - send2irc(source,final)*/ - -/proc/ircadminwho() - var/list/message = list("Admins: ") - var/list/admin_keys = list() - for(var/client/C as anything in GLOB.admins) - admin_keys += "[C][C.holder.fakekey ? "(Stealth)" : ""][C.is_afk() ? "(AFK)" : ""]" - - for(var/admin in admin_keys) - if(LAZYLEN(admin_keys) > 1) - message += ", [admin]" - else - message += "[admin]" - - return jointext(message, "") - /proc/keywords_lookup(msg,irc) //This is a list of words which are ignored by the parser when comparing message contents for names. MUST BE IN LOWER CASE! diff --git a/code/modules/webhooks/_webhook.dm b/code/modules/webhooks/_webhook.dm deleted file mode 100644 index 492e020a24..0000000000 --- a/code/modules/webhooks/_webhook.dm +++ /dev/null @@ -1,72 +0,0 @@ -/decl/webhook - var/id - var/list/urls - var/list/mentions - -/decl/webhook/proc/get_message(var/list/data) - . = list() - -/decl/webhook/proc/http_post(var/target_url, var/payload) - if (!target_url) - return -1 - - var/result = LIBCALL(HTTP_POST_DLL_LOCATION, "send_post_request")(target_url, payload, json_encode(list("Content-Type" = "application/json"))) - - result = cached_json_decode(result) - if (result["error_code"]) - log_runtime("byhttp error: [result["error"]] ([result["error_code"]])") - return result["error_code"] - - return list( - "status_code" = result["status_code"], - "body" = result["body"] - ) - -/decl/webhook/proc/send(var/list/data) - var/list/message = get_message(data) - if(!length(message)) - return FALSE - - if(CONFIG_GET(flag/disable_webhook_embeds)) - var/list/embed_content - for(var/list/embed in message["embeds"]) - if(embed["title"]) - LAZYADD(embed_content, "**[embed["title"]]**") - if(embed["description"]) - LAZYADD(embed_content, embed["description"]) - if(length(embed_content)) - if(message["content"]) - message["content"] = "[message["content"]]\n[jointext(embed_content, "\n")]" - else - message["content"] = jointext(embed_content, "\n") - message -= "embeds" - - . = TRUE - for(var/target_url in urls) - - var/url_message = message.Copy() - var/list/url_mentions = get_mentions(target_url) - if(islist(url_mentions) && length(url_mentions)) - if(url_message["content"]) - url_message["content"] = "[jointext(url_mentions, ", ")]: [url_message["content"]]" - else - url_message["content"] = "[jointext(url_mentions, ", ")]" - - var/list/httpresponse = http_post(target_url, json_encode(url_message)) - if(!islist(httpresponse)) - . = FALSE - continue - switch(httpresponse["status_code"]) - if (200 to 299) - continue - if (400 to 599) - log_runtime("Webhooks: HTTP error code while sending to '[target_url]': [httpresponse["status_code"]]. Data: [httpresponse["body"]].") - else - log_runtime("Webhooks: unknown HTTP code while sending to '[target_url]': [httpresponse["status_code"]]. Data: [httpresponse["body"]].") - . = FALSE - -/decl/webhook/proc/get_mentions(var/mentioning_url) - . = mentions?.Copy() - var/url_mentions = LAZYACCESS(urls, mentioning_url) - if(length(url_mentions)) - LAZYDISTINCTADD(., url_mentions) diff --git a/code/modules/webhooks/webhook_ahelp2discord.dm b/code/modules/webhooks/webhook_ahelp2discord.dm deleted file mode 100644 index 45ef8e3ea3..0000000000 --- a/code/modules/webhooks/webhook_ahelp2discord.dm +++ /dev/null @@ -1,13 +0,0 @@ -/decl/webhook/ahelp_sent - id = WEBHOOK_AHELP_SENT - -/decl/webhook/ahelp_sent/get_message(var/list/data) - .= ..() - .["embeds"] = list(list( - "title" = "[data["name"]]", - "description" = data["body"], - "color" = data["color"] || COLOR_WEBHOOK_DEFAULT - )) - -/decl/webhook/ahelp_sent/get_mentions() - . = !length(GLOB.admins) && ..() // VOREStation Edit - GLOB admins diff --git a/code/modules/webhooks/webhook_custom_event.dm b/code/modules/webhooks/webhook_custom_event.dm deleted file mode 100644 index 5f636db256..0000000000 --- a/code/modules/webhooks/webhook_custom_event.dm +++ /dev/null @@ -1,11 +0,0 @@ -/decl/webhook/custom_event - id = WEBHOOK_CUSTOM_EVENT - -// Data expects a "text" field containing the new custom event text. -/decl/webhook/custom_event/get_message(var/list/data) - . = ..() - .["embeds"] = list(list( - "title" = "A custom event is beginning.", - "description" = (data && data["text"]) || "undefined", - "color" = COLOR_WEBHOOK_DEFAULT - )) diff --git a/code/modules/webhooks/webhook_fax2discord.dm b/code/modules/webhooks/webhook_fax2discord.dm deleted file mode 100644 index 3c2edcbbb9..0000000000 --- a/code/modules/webhooks/webhook_fax2discord.dm +++ /dev/null @@ -1,10 +0,0 @@ -/decl/webhook/fax_sent - id = WEBHOOK_FAX_SENT - -/decl/webhook/fax_sent/get_message(var/list/data) - .= ..() - .["embeds"] = list(list( - "title" = "[data["name"]]", - "description" = data["body"], - "color" = COLOR_WEBHOOK_DEFAULT - )) diff --git a/code/modules/webhooks/webhook_roundend.dm b/code/modules/webhooks/webhook_roundend.dm deleted file mode 100644 index 304fff948f..0000000000 --- a/code/modules/webhooks/webhook_roundend.dm +++ /dev/null @@ -1,26 +0,0 @@ -/decl/webhook/roundend - id = WEBHOOK_ROUNDEND - -// Data expects three numerical fields: "survivors", "escaped", "ghosts", "clients" -/decl/webhook/roundend/get_message(var/list/data) - . = ..() - var/desc = "A round of **[SSticker.mode ? SSticker.mode.name : "Unknown"]** (Round ID: [GLOB.round_id ? GLOB.round_id : "No database"]) has ended.\n\n" - if(data) - var/s_escaped = "Escaped" - if(!emergency_shuttle.evac) - s_escaped = "Transferred" - if(data["survivors"] > 0) - desc += "Survivors: **[data["survivors"]]**\n" - desc += "[s_escaped]: **[data["escaped"]]**\n" - else - desc += "There were **no survivors**.\n\n" - desc += "Ghosts: **[data["ghosts"]]**\n" - desc += "Players: **[data["clients"]]**\n" - desc += "Round duration: **[roundduration2text()]**" - - .["embeds"] = list(list( - // "title" = global.end_credits_title, - "title" = "Round Has Ended", - "description" = desc, - "color" = COLOR_WEBHOOK_DEFAULT - )) diff --git a/code/modules/webhooks/webhook_roundprep.dm b/code/modules/webhooks/webhook_roundprep.dm deleted file mode 100644 index b10580452f..0000000000 --- a/code/modules/webhooks/webhook_roundprep.dm +++ /dev/null @@ -1,17 +0,0 @@ -/decl/webhook/roundprep - id = WEBHOOK_ROUNDPREP - -// Data expects "url" and field pointing to the current hosted server and port to connect on. -/decl/webhook/roundprep/get_message(var/list/data) - . = ..() - var/desc = "The server has been started!\n" - if(data && data["map"]) - desc += "Map: **[data["map"]]**\n" - if(data && data["url"]) - desc += "Address: <[data["url"]]>" - - .["embeds"] = list(list( - "title" = "New round is being set up.", - "description" = desc, - "color" = COLOR_WEBHOOK_DEFAULT - )) diff --git a/code/modules/webhooks/webhook_roundstart.dm b/code/modules/webhooks/webhook_roundstart.dm deleted file mode 100644 index b3b4263b43..0000000000 --- a/code/modules/webhooks/webhook_roundstart.dm +++ /dev/null @@ -1,16 +0,0 @@ -/decl/webhook/roundstart - id = WEBHOOK_ROUNDSTART - -// Data expects a "url" field pointing to the current hosted server and port to connect on. -/decl/webhook/roundstart/get_message(var/list/data) - . = ..() - var/desc = "Gamemode: **[GLOB.master_mode]**\n" - desc += "Players: **[GLOB.player_list.len]**" - if(data && data["url"]) - desc += "\nAddress: <[data["url"]]>" - - .["embeds"] = list(list( - "title" = "Round has started.", - "description" = desc, - "color" = COLOR_WEBHOOK_DEFAULT - )) diff --git a/config/example/config.txt b/config/example/config.txt index 12d89786e3..8030631826 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -201,10 +201,6 @@ GUEST_JOBBAN ## set a server location for world reboot. Don't include the byond://, just give the address and port. SERVER your.domain:6000 -## set a server URL for the IRC bot to use; like SERVER, don't include the byond:// -## Unlike SERVER, this one shouldn't break auto-reconnect -# SERVERURL your.domain:port - ## forum address #FORUMURL https://forum.your.domain/ @@ -326,29 +322,6 @@ USEALIENWHITELIST ## Password used for authorizing ircbot and other external tools. # COMMS_PASSWORD some_password_here -## Uncomment to enable sending data to the IRC bot. -#USE_IRC_BOT - -## Uncomment if the IRC bot requires using world.Export() instead of nudge.py/libnudge -#IRC_BOT_EXPORT - -## Host where the IRC bot is hosted. Port 45678 needs to be open. -#IRC_BOT_HOST localhost - -## IRC channel to send information to. Leave blank to disable. -#MAIN_IRC #main - -## IRC channel to send adminhelps to. Leave blank to disable adminhelps-to-irc. -#ADMIN_IRC #admin - -## Path to the python2 executable on the system. Leave blank for default. -## Default is "python" on Windows, "/usr/bin/env python2" on UNIX. -#PYTHON_PATH - -## Uncomment to use the C library nudge instead of the python script. -## This helps security and stability on Linux, but you need to compile the library first. -#USE_LIB_NUDGE - ## Uncomment to allow ghosts to write in blood during Cult rounds. CULT_GHOSTWRITER diff --git a/config/example/webhooks.json b/config/example/webhooks.json deleted file mode 100644 index 947e2c74f4..0000000000 --- a/config/example/webhooks.json +++ /dev/null @@ -1,12 +0,0 @@ -[ - { - "id": "webhook_roundend", - "url": { - "someurl0": [], - "someurl1": [], - "someurl2": "somemention0", - "someurl3": ["somemention1", "somemention2"] - }, - "mentions": ["somemention3", "somemention4"] - } -] diff --git a/ingame_manuals/malf_ai.html b/html/malf_ai.html similarity index 100% rename from ingame_manuals/malf_ai.html rename to html/malf_ai.html diff --git a/ingame_manuals/README.txt b/ingame_manuals/README.txt deleted file mode 100644 index 081153066a..0000000000 --- a/ingame_manuals/README.txt +++ /dev/null @@ -1,3 +0,0 @@ -INGAME MANUALS - -Ingame manuals are simple HTML files with basic information. They are linked to specific items/commands, such as the AI's display help command, or engine setup guide. Point of these files is to allow creation of basic guides for players which don't want to use wiki. \ No newline at end of file diff --git a/lib/src/netutil.c b/lib/src/netutil.c deleted file mode 100644 index 4028e89b5e..0000000000 --- a/lib/src/netutil.c +++ /dev/null @@ -1,109 +0,0 @@ -#include "netutil.h" -#include "string.h" - -int net_ready = 0; -void net_init() -{ - #ifdef _WIN32 - WSADATA wsa; - WSAStartup(MAKEWORD(2,0),&wsa); - #endif - net_ready = 1; -} - -socket_t connect_sock(char * host, char * port) -{ - if(!net_ready) - { - net_init(); - } - - socket_t out_sock = -1; - struct addrinfo addr_in; - struct addrinfo * addr_proc; - int gai_status; - - memset(&addr_in, 0, sizeof(addr_in)); - - addr_in.ai_family = AF_UNSPEC; - addr_in.ai_socktype = SOCK_STREAM; - addr_in.ai_flags = AI_PASSIVE; - - gai_status = getaddrinfo(host, port, &addr_in, &addr_proc); - - if(gai_status) - { - return -1; - } - - struct addrinfo * ai_p; - for(ai_p = addr_proc; ai_p != 0; ai_p = ai_p->ai_next) - { - out_sock = socket(ai_p->ai_family, ai_p->ai_socktype, - ai_p->ai_protocol); - - if((int)out_sock == -1) - { - continue; - } - else if(connect(out_sock, ai_p->ai_addr, ai_p->ai_addrlen) == -1) - { - close_socket(out_sock); - continue; - } - else - { - break; - } - } - - if(!out_sock) - { - freeaddrinfo(addr_proc); - return -1; - } - - freeaddrinfo(addr_proc); - return out_sock; -} - -void send_n(socket_t sock, const char * buf, size_t n) -{ - size_t to_send = n; - const char * buf_i = buf; - while(to_send) - { - int sent = send(sock, buf_i, to_send, 0); - if(sent != -1) - { - to_send -= sent; - buf_i += sent; - } - else - { - return; - } - } - return; -} - -void recv_n(socket_t sock, char * buf, size_t n) -{ - size_t total = 0; - char * buf_i = buf; - while(total < n) - { - int recved = recv(sock, buf_i, n - total, 0); - if(recved > 0) - { - total += recved; - buf_i += recved; - } - else - { - return; - } - } - return; -} - diff --git a/lib/src/netutil.h b/lib/src/netutil.h deleted file mode 100644 index 6e97b1e3fa..0000000000 --- a/lib/src/netutil.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef NETUTIL_H -#define NETUTIL_H - -#ifdef _WIN32 - -#include -#include -typedef SOCKET socket_t; - -#define close_socket(sock) closesocket(sock) - -#else - -#include -#include -#include -#include -typedef int socket_t; - -#define close_socket(sock) close(sock) - -#endif - -extern int net_ready; -void init_net(); - -socket_t connect_sock(char * host, char * port); - -void send_n(socket_t sock, const char * buf, size_t n); -void recv_n(socket_t sock, char * buf, size_t n); - -#endif - diff --git a/lib/src/nudge.c b/lib/src/nudge.c deleted file mode 100644 index d9efb90b73..0000000000 --- a/lib/src/nudge.c +++ /dev/null @@ -1,74 +0,0 @@ -#include -#include - -#include "netutil.h" - -#ifdef _WIN32 - #define DLL_EXPORT __declspec(dllexport) -#else - #define DLL_EXPORT __attribute__ ((visibility ("default"))) -#endif - -size_t san_c(const char * input) -{ - unsigned int count = strlen(input); - - const char * i; - for(i = input; *i; i++) - { - if(*i == '\\' || *i == '\'') - { - count++; - } - } - - return count; -} - -char * san_cpy(char * out_buf, const char * in_buf) -{ - const char * i_in = in_buf; - char * i_out = out_buf; - while(*i_in) - { - if(*i_in == '\\' || *i_in == '\'') - { - *(i_out++) = '\\'; - } - *(i_out++) = *(i_in++); - } - return i_out; -} - -DLL_EXPORT const char * nudge(int n, char *v[]) -{ - if(n != 4) - { - return ""; - } - - size_t out_c = san_c(v[0]) + san_c(v[2]) + san_c(v[3]); - - char * san_out = malloc(out_c + 57); - - char * san_i = san_out; - strcpy(san_i, "(dp1\nS'ip'\np2\nS'"); - san_i += 16; - san_i = san_cpy(san_i, v[2]); - strcpy(san_i, "'\np3\nsS'data'\np4\n(lp5\nS'"); - san_i += 24; - san_i = san_cpy(san_i, v[0]); - strcpy(san_i, "'\np6\naS'"); - san_i += 8; - san_i = san_cpy(san_i, v[3]); - strcpy(san_i, "'\np7\nas."); - - socket_t nudge_sock = connect_sock(v[1], "45678"); - send_n(nudge_sock, san_out, out_c + 56); - close_socket(nudge_sock); - - free(san_out); - - return "1"; -} - diff --git a/scripts/ircbot_message.py b/scripts/ircbot_message.py deleted file mode 100644 index 4339019e03..0000000000 --- a/scripts/ircbot_message.py +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env python2 - -# Four arguments, password host channel and message. -# EG: "ircbot_message.py hunter2 example.com #adminchannel ADMINHELP, people are killing me!" - -import sys,cPickle,socket,HTMLParser - -def pack(): - ht = HTMLParser.HTMLParser() - - passwd = sys.argv[1] - ip = sys.argv[3] - try: - data = [] - for in_data in sys.argv[4:]: #The rest of the arguments is data - data += {ht.unescape(in_data)} - except: - data = "NO DATA SPECIFIED" - dictionary = {"ip":ip,"data":[passwd] + data} - pickled = cPickle.dumps(dictionary) - nudge(pickled) -def nudge(data): - HOST = sys.argv[2] - PORT = 45678 - s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - s.connect((HOST,PORT)) - s.send(data) - s.close() - -if __name__ == "__main__" and len(sys.argv) > 1: # If not imported and more than one argument - pack() diff --git a/tools/DM Line counter.exe b/tools/DM Line counter.exe deleted file mode 100644 index d6b075d6313b302e8e25dfcc7af970ce3d129a74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88064 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

+Em_d2kP_<{FK6P^Vy4&Gi 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

Code File. - -// BEGIN_INTERNALS -// END_INTERNALS - -// BEGIN_FILE_DIR -#define FILE_DIR . -// END_FILE_DIR - -// BEGIN_PREFERENCES -// END_PREFERENCES - -// BEGIN_INCLUDE -#include "HumanScissors.dm" -// END_INCLUDE - diff --git a/tools/HumanScissors/SpritesToSnip.dmi b/tools/HumanScissors/SpritesToSnip.dmi deleted file mode 100644 index f4dbfb6b81b20f4f4d54da28743496b2f34de910..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 839 zcmV-N1GxN&P)V=-0C=1w$2$suFc1a6I(v$T_TsNiBN0iVcL=ze2!2SGczp}InG(Y|*#%~{ zlsTqwU(o2Qn$#Os@zCg6Ql7)^720+dNaK~z|U?Uylc(?Aq}zfff4_L3^DDoZIHvQ$DUMa|TuWvM!3VL)Q& z$N)cqKfuCIpg$l(!~&H(mvqTwDP>@YDi2YRtP-2XrxscTGX$GBDa|=e#ll;x_k6zh z-Sd0z?lK1l2mDL9llFt=;eMFLK2?C`;r`F{&7Bcv&BG79tL!RrH|6*Y!20G6HLDUk z+bTaz>vv)R06u@RDL&dr=no#2CIU$H3xXh^)ovpUGhr8oNvqu^2!h)M0Fa&wz-#$D z@r>-Z4iGu3ZXe^nt5V%Qp4d4+CT$nedrSfj()&T(W`Fz;z zc5z)7(=^HDa`?WV+Bu}G0{eIAEiM;X+bUBi6p&JKRI@l~IU$fb3d#|%txCAKTm<@A z-@BK?G)-LBW#&gW&V!SdlL|s90+I8m{MI%e$L|V-0su$#kBRZB5M!&rwkqM$$|}Mz z$7Z|qT!dk=w6Yrit{VdYXu7~@)ajj_0)JL3rA+9(vs0W#9ZeT1(~bv-Rv)e0>v%}d z<>Fk%B`Brr>z<3(@%mt%s~m-~5zurol31E9;`$dtBvxE1?`BR~j&c+x>V(r2C4j}{ zqHv&`@E|meUjX;!8K@h}A zsOfV^&y82_`##ch(e%0an;;03JL1>~3{Rrzg7eN7YSlfqp1q(}-NRTg&;|}EQ*Xt? zGBZ0*_TrLSb&qT|%gpTjB+~#lD8ncxCOL*p1z=k8AK*p+S7p0xRYKLSnF?TV(r8=$ zn?5}LI#E6m4c>&JZFf+gzfXKyavF8zUZC6uoJKvNM-EEm-HdHj!r}L-@(W=IL40dq RCNuy5002ovPDHLkV1i0zhS>lB diff --git a/tools/IconSplitter/!README.txt b/tools/IconSplitter/!README.txt deleted file mode 100644 index c4c8c35b1c..0000000000 --- a/tools/IconSplitter/!README.txt +++ /dev/null @@ -1,5 +0,0 @@ -This Byond program takes all the icons in DmiToSplit along with input from the user and -splits the icons from the original file into a new file based on the user's provided criteria. -It also produces a file that is the original file minus the icons split into the new file. - --- Yoshax \ No newline at end of file diff --git a/tools/IconSplitter/DmiToSplit.dmi b/tools/IconSplitter/DmiToSplit.dmi deleted file mode 100644 index cf74d73796c8c6121c0818fdac74e4a7f0ab9a5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;m;-!5T!HlRD%)E?im@cfFPOpM z*^M-ilB$r15|`BC)e_1!5cyiE*d|0 zq;uX!^CUx2Pwx&3;~?Y9#$F0CsjT7l;v3i)KHlcf^{%~V4K$R;)5S4_V`g%K#2p}S W0R!VxY5#RV7K5j&pUXO@geCygCOLEf diff --git a/tools/IconSplitter/IconSplitter.dm b/tools/IconSplitter/IconSplitter.dm deleted file mode 100644 index dd2d5c6bce..0000000000 --- a/tools/IconSplitter/IconSplitter.dm +++ /dev/null @@ -1,49 +0,0 @@ -/* - These are simple defaults for your project. - */ - -world - fps = 25 // 25 frames per second - icon_size = 32 // 32x32 icon size by default - - view = 6 // show up to 6 tiles outward from center (13x13 view) - - -// Make objects move 8 pixels per tick when walking - -mob - step_size = 8 - -obj - step_size = 8 - - - - -/client/verb/split_dmi() - set name = "Split Dmi" - set desc = "Loads DmiToSplit.dmi and removes the icon_states of user provided input into another .dmi." - set category = "Here" - - var/icon/DMIToSplit = icon('DmiToSplit.dmi') - - var/icon/RunningOutputCut = new() - var/icon/RunningOutput = new() - - var/user_input - while(!user_input) - user_input = tgui_input_text(usr, "Enter the criteria for the icon_states you wish to be split. For example, doing _d_s will remove all rolled down jumpsuits.","Split Criteria", "") - to_world("Your split criteria is [user_input]") - - for(var/OriginalState in icon_states(DMIToSplit)) - if(findtext(OriginalState, user_input)) - var/icon/ToAdd = icon(DMIToSplit, OriginalState) - var/good_name = replacetext(OriginalState, user_input, "") - good_name = "[good_name]_s" - RunningOutputCut.Insert(ToAdd, good_name) - else - var/icon/ToAdd = icon(DMIToSplit, OriginalState) - RunningOutput.Insert(ToAdd, OriginalState) - - usr << ftp(RunningOutput,"CutUpDmi.dmi") - usr << ftp(RunningOutputCut, "CutUpDmiWithCriteria.dmi") diff --git a/tools/IconSplitter/IconSplitter.dme b/tools/IconSplitter/IconSplitter.dme deleted file mode 100644 index 2c3171b194..0000000000 --- a/tools/IconSplitter/IconSplitter.dme +++ /dev/null @@ -1,18 +0,0 @@ -// DM Environment file for IconSplitter.dme. -// All manual changes should be made outside the BEGIN_ and END_ blocks. -// New source code should be placed in .dm files: choose File/New --> Code File. - -// BEGIN_INTERNALS -// END_INTERNALS - -// BEGIN_FILE_DIR -#define FILE_DIR . -// END_FILE_DIR - -// BEGIN_PREFERENCES -// END_PREFERENCES - -// BEGIN_INCLUDE -#include "IconSplitter.dm" -// END_INCLUDE - diff --git a/tools/Redirector/Configurations.dm b/tools/Redirector/Configurations.dm deleted file mode 100644 index 532275f7ed..0000000000 --- a/tools/Redirector/Configurations.dm +++ /dev/null @@ -1,53 +0,0 @@ -/* - Written by contributor Doohl for the /tg/station Open Source project, hosted on Google Code. - (2012) - */ - -var/list/config_stream = list() -var/list/servers = list() -var/list/servernames = list() -var/list/adminfiles = list() -var/list/adminkeys = list() - -proc/gen_configs() - - config_stream = dd_file2list("config.txt") - - var/server_gen = 0 // if the stream is looking for servers - var/admin_gen = 0 // if the stream is looking for admins - for(var/line in config_stream) - - if(line == "\[SERVERS\]") - server_gen = 1 - if(admin_gen) - admin_gen = 0 - - else if(line == "\[ADMINS\]") - admin_gen = 1 - if(server_gen) - server_gen = 0 - - else - if(findtext(line, ".") && !findtext(line, "##")) - if(server_gen) - var/filterline = replacetext(line, " ", "") - var/serverlink = copytext(filterline, findtext( filterline, ")") + 1) - servers.Add(serverlink) - servernames.Add( copytext(line, findtext(line, "("), findtext(line, ")") + 1)) - - else if(admin_gen) - adminfiles.Add(line) - to_world(line) - - - // Generate the list of admins now - - for(var/file in adminfiles) - var/admin_config_stream = dd_file2list(file) - - for(var/line in admin_config_stream) - - var/akey = copytext(line, 1, findtext(line, " ")) - adminkeys.Add(akey) - - diff --git a/tools/Redirector/Redirect_Tgstation.dmb b/tools/Redirector/Redirect_Tgstation.dmb deleted file mode 100644 index 278e723b89670b64e94073aa8990be9df9cdc997..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12541 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 Code File. - -// BEGIN_INTERNALS -// END_INTERNALS - -// BEGIN_FILE_DIR -#define FILE_DIR . -// END_FILE_DIR - -// BEGIN_PREFERENCES -// END_PREFERENCES - -// BEGIN_INCLUDE -#include "Configurations.dm" -#include "Redirector.dm" -#include "textprocs.dm" -#include "skin.dmf" -// END_INCLUDE - diff --git a/tools/Redirector/Redirector.dm b/tools/Redirector/Redirector.dm deleted file mode 100644 index fb01621583..0000000000 --- a/tools/Redirector/Redirector.dm +++ /dev/null @@ -1,87 +0,0 @@ -/* - Written by contributor Doohl for the /tg/station Open Source project, hosted on Google Code. - (2012) - */ - -/* TODO: work on server selection for detected admins */ - - -#define ADMINS 1 -#define PLAYERS 0 - -var/player_weight = 1 // players are more likely to join a server with less players -var/admin_weight = 5 // admins are more likely to join a server with less admins - -var/player_substr = "players=" // search for this substring to locate # of players -var/admin_substr = "admins=" // search for this to locate # of admins - -world - name = "TGstation Redirector" - - New() - ..() - gen_configs() - -/datum/server - var/players = 0 - var/admins = 0 - var/weight = 0 // lower weight is good; highet weight is bad - - var/link = "" - -mob/Login() - ..() - - var/list/weights = list() - var/list/servers = list() - for(var/x in global.servers) - - to_world("[x] [servernames[ global.servers.Find(x) ]]") - - var/info = world.Export("[x]?status") - var/datum/server/S = new() - S.players = extract(info, PLAYERS) - S.admins = extract(info, ADMINS) - - S.weight += player_weight * S.players - S.link = x - - to_world(S.players) - to_world(S.admins) - - weights.Add(S.weight) - servers.Add(S) - - var/lowest = min(weights) - var/serverlink - for(var/datum/server/S in servers) - if(S.weight == lowest) - serverlink = S.link - - src << link(serverlink) - -proc/extract(var/data, var/type = PLAYERS) - - var/nextpos = 0 - - if(type == PLAYERS) - - nextpos = findtextEx(data, player_substr) - nextpos += length(player_substr) - - else - - nextpos = findtextEx(data, admin_substr) - nextpos += length(admin_substr) - - var/returnval = "" - - for(var/i = 1, i <= 10, i++) - - var/interval = copytext(data, nextpos + (i-1), nextpos + i) - if(interval == "&") - break - else - returnval += interval - - return returnval diff --git a/tools/Redirector/config.txt b/tools/Redirector/config.txt deleted file mode 100644 index 4cf2d6bd79..0000000000 --- a/tools/Redirector/config.txt +++ /dev/null @@ -1,12 +0,0 @@ -[SERVERS] -## Simply enter a list of servers to poll. Be sure to specify a server name in parentheses. - -(Sibyl #1) byond://game.nanotrasen.com:1337 - -(Sibyl #2) byond://game.nanotrasen.com:2337 - - -[ADMINS] -## Specify some standard Windows filepaths (you may use relative paths) for admin txt lists to poll. - -C:\SS13\config\admins.txt diff --git a/tools/Redirector/skin.dmf b/tools/Redirector/skin.dmf deleted file mode 100644 index 2a3e8a734c..0000000000 --- a/tools/Redirector/skin.dmf +++ /dev/null @@ -1,149 +0,0 @@ -macro "macro" - elem - name = "North+REP" - command = ".north" - is-disabled = false - elem - name = "South+REP" - command = ".south" - is-disabled = false - elem - name = "East+REP" - command = ".east" - is-disabled = false - elem - name = "West+REP" - command = ".west" - is-disabled = false - elem - name = "Northeast+REP" - command = ".northeast" - is-disabled = false - elem - name = "Northwest+REP" - command = ".northwest" - is-disabled = false - elem - name = "Southeast+REP" - command = ".southeast" - is-disabled = false - elem - name = "Southwest+REP" - command = ".southwest" - is-disabled = false - elem - name = "Center+REP" - command = ".center" - is-disabled = false - - -menu "menu" - elem - name = "&Quit" - command = ".quit" - category = "&File" - is-checked = false - can-check = false - group = "" - is-disabled = false - saved-params = "is-checked" - - -window "window" - elem "window" - type = MAIN - pos = 281,0 - size = 594x231 - anchor1 = none - anchor2 = none - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = #000000 - is-visible = false - is-disabled = false - is-transparent = false - is-default = true - border = none - drop-zone = false - right-click = false - saved-params = "pos;size;is-minimized;is-maximized" - on-size = "" - title = "" - titlebar = true - statusbar = false - can-close = true - can-minimize = true - can-resize = true - is-pane = false - is-minimized = false - is-maximized = false - can-scroll = none - icon = "" - image = "" - image-mode = stretch - keep-aspect = false - transparent-color = none - alpha = 255 - macro = "macro" - menu = "" - on-close = "" - elem "servers" - type = GRID - pos = 8,8 - size = 576x152 - anchor1 = none - anchor2 = none - font-family = "" - font-size = 0 - font-style = "" - text-color = #ffffff - background-color = #000000 - is-visible = true - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = true - right-click = false - saved-params = "" - on-size = "" - cells = 1x1 - current-cell = 1,1 - show-lines = none - small-icons = true - show-names = true - enable-http-images = false - link-color = #0000ff - visited-color = #ff00ff - line-color = #c0c0c0 - style = "" - is-list = false - elem "output1" - type = OUTPUT - pos = 8,168 - size = 576x56 - anchor1 = none - anchor2 = none - font-family = "" - font-size = 0 - font-style = "" - text-color = #ffffff - background-color = #000000 - is-visible = true - is-disabled = false - is-transparent = false - is-default = true - border = none - drop-zone = false - right-click = false - saved-params = "max-lines" - on-size = "" - link-color = #0000ff - visited-color = #ff00ff - style = "" - enable-http-images = false - max-lines = 1000 - image = "" - diff --git a/tools/Redirector/textprocs.dm b/tools/Redirector/textprocs.dm deleted file mode 100644 index 84bc2165c9..0000000000 --- a/tools/Redirector/textprocs.dm +++ /dev/null @@ -1,150 +0,0 @@ -/* - Written by contributor Doohl for the /tg/station Open Source project, hosted on Google Code. - (2012) - - NOTE: The below functions are part of BYOND user Deadron's "TextHandling" library. - [ http://www.byond.com/developer/Deadron/TextHandling ] - */ - - -proc - /////////////////// - // Reading files // - /////////////////// - dd_file2list(file_path, separator = "\n") - var/file - if (isfile(file_path)) - file = file_path - else - file = file(file_path) - return dd_text2list(file2text(file), separator) - - - //////////////////// - // Replacing text // - //////////////////// - dd_replacetext(text, search_string, replacement_string) - // A nice way to do this is to split the text into an array based on the search_string, - // then put it back together into text using replacement_string as the new separator. - var/list/textList = dd_text2list(text, search_string) - return dd_list2text(textList, replacement_string) - - - dd_replaceText(text, search_string, replacement_string) - var/list/textList = dd_text2List(text, search_string) - return dd_list2text(textList, replacement_string) - - - ///////////////////// - // Prefix checking // - ///////////////////// - dd_hasprefix(text, prefix) - var/start = 1 - var/end = length(prefix) + 1 - return findtext(text, prefix, start, end) - - dd_hasPrefix(text, prefix) - var/start = 1 - var/end = length(prefix) + 1 - return findtextEx(text, prefix, start, end) - - - ///////////////////// - // Suffix checking // - ///////////////////// - dd_hassuffix(text, suffix) - var/start = length(text) - length(suffix) - if (start) return findtext(text, suffix, start) - - dd_hasSuffix(text, suffix) - var/start = length(text) - length(suffix) - if (start) return findtextEx(text, suffix, start) - - ///////////////////////////// - // Turning text into lists // - ///////////////////////////// - dd_text2list(text, separator) - var/textlength = length(text) - var/separatorlength = length(separator) - var/list/textList = new /list() - var/searchPosition = 1 - var/findPosition = 1 - var/buggyText - while (1) // Loop forever. - findPosition = findtext(text, separator, searchPosition, 0) - buggyText = copytext(text, searchPosition, findPosition) // Everything from searchPosition to findPosition goes into a list element. - textList += "[buggyText]" // Working around weird problem where "text" != "text" after this copytext(). - - searchPosition = findPosition + separatorlength // Skip over separator. - if (findPosition == 0) // Didn't find anything at end of string so stop here. - return textList - else - if (searchPosition > textlength) // Found separator at very end of string. - textList += "" // So add empty element. - return textList - - dd_text2List(text, separator) - var/textlength = length(text) - var/separatorlength = length(separator) - var/list/textList = new /list() - var/searchPosition = 1 - var/findPosition = 1 - var/buggyText - while (1) // Loop forever. - findPosition = findtextEx(text, separator, searchPosition, 0) - buggyText = copytext(text, searchPosition, findPosition) // Everything from searchPosition to findPosition goes into a list element. - textList += "[buggyText]" // Working around weird problem where "text" != "text" after this copytext(). - - searchPosition = findPosition + separatorlength // Skip over separator. - if (findPosition == 0) // Didn't find anything at end of string so stop here. - return textList - else - if (searchPosition > textlength) // Found separator at very end of string. - textList += "" // So add empty element. - return textList - - dd_list2text(list/the_list, separator) - var/total = the_list.len - if (total == 0) // Nothing to work with. - return - - var/newText = "[the_list[1]]" // Treats any object/number as text also. - var/count - for (count = 2, count <= total, count++) - if (separator) newText += separator - newText += "[the_list[count]]" - return newText - - dd_centertext(message, length) - var/new_message = message - var/size = length(message) - if (size == length) - return new_message - if (size > length) - return copytext(new_message, 1, length + 1) - - // Need to pad text to center it. - var/delta = length - size - if (delta == 1) - // Add one space after it. - return new_message + " " - - // Is this an odd number? If so, add extra space to front. - if (delta % 2) - new_message = " " + new_message - delta-- - - // Divide delta in 2, add those spaces to both ends. - delta = delta / 2 - var/spaces = "" - for (var/count = 1, count <= delta, count++) - spaces += " " - return spaces + new_message + spaces - - dd_limittext(message, length) - // Truncates text to limit if necessary. - var/size = length(message) - if (size <= length) - return message - else - return copytext(message, 1, length + 1) diff --git a/tools/Runtime Condenser/Input.txt b/tools/Runtime Condenser/Input.txt deleted file mode 100644 index eebe4c5305..0000000000 --- a/tools/Runtime Condenser/Input.txt +++ /dev/null @@ -1,4440 +0,0 @@ -*** Begin Log: Fri Jul 13 17:04:27 2012 *** -Fri Jul 13 17:04:49 2012 -World opened on network port 2337. -Welcome BYOND! (4.0 Public Version 495.1136) -Running TG Revision Number: 4060. -Rebooted server. -Running TG Revision Number: 4060. -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1083 - usr: Puke Chunks (/mob/living/carbon/human) - src: Puke Chunks (/mob/living/carbon/human) - call stack: -Puke Chunks (/mob/living/carbon/human): db click("belt", 0) -the belt (/obj/screen): attack hand(Puke Chunks (/mob/living/carbon/human), 0) -the belt (/obj/screen): DblClick(null, null, null) -the belt (/obj/screen): Click(null, "mapwindow.map", "icon-x=15;icon-y=19;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1117 - usr: Lord Gwyn (/mob/living/carbon/human) - src: Lord Gwyn (/mob/living/carbon/human) - call stack: -Lord Gwyn (/mob/living/carbon/human): db click("ears", 0) -the ears (/obj/screen): attack hand(Lord Gwyn (/mob/living/carbon/human), 0) -the ears (/obj/screen): DblClick(null, null, null) -the ears (/obj/screen): Click(null, "mapwindow.map", "icon-x=10;icon-y=28;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1117 - usr: Lord Gwyn (/mob/living/carbon/human) - src: Lord Gwyn (/mob/living/carbon/human) - call stack: -Lord Gwyn (/mob/living/carbon/human): db click("ears", 0) -the ears (/obj/screen): attack hand(Lord Gwyn (/mob/living/carbon/human), 0) -the ears (/obj/screen): DblClick(null, null, null) -the ears (/obj/screen): Click(null, "mapwindow.map", "icon-x=16;icon-y=19;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1117 - usr: Lord Gwyn (/mob/living/carbon/human) - src: Lord Gwyn (/mob/living/carbon/human) - call stack: -Lord Gwyn (/mob/living/carbon/human): db click("ears", 0) -the ears (/obj/screen): attack hand(Lord Gwyn (/mob/living/carbon/human), 0) -the ears (/obj/screen): DblClick(null, null, null) -the ears (/obj/screen): Click(null, "mapwindow.map", "icon-x=16;icon-y=19;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1166 - usr: Blake Sable (/mob/living/carbon/human) - src: Blake Sable (/mob/living/carbon/human) - call stack: -Blake Sable (/mob/living/carbon/human): db click("storage2", 0) -the storage2 (/obj/screen): attack hand(Blake Sable (/mob/living/carbon/human), 0) -the storage2 (/obj/screen): DblClick(null, null, null) -the storage2 (/obj/screen): Click(null, "mapwindow.map", "icon-x=10;icon-y=18;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1166 - usr: Donald Mckendrick (/mob/living/carbon/human) - src: Donald Mckendrick (/mob/living/carbon/human) - call stack: -Donald Mckendrick (/mob/living/carbon/human): db click("storage2", 1) -the storage2 (/obj/screen): attack hand(Donald Mckendrick (/mob/living/carbon/human), 1) -the storage2 (/obj/screen): DblClick(null, null, null) -the storage2 (/obj/screen): Click(null, "mapwindow.map", "icon-x=15;icon-y=16;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1048 - usr: Blake Sable (/mob/living/carbon/human) - src: Blake Sable (/mob/living/carbon/human) - call stack: -Blake Sable (/mob/living/carbon/human): db click("o_clothing", 0) -the o_clothing (/obj/screen): attack hand(Blake Sable (/mob/living/carbon/human), 0) -the o_clothing (/obj/screen): DblClick(null, null, null) -the o_clothing (/obj/screen): Click(null, "mapwindow.map", "icon-x=15;icon-y=15;left=1;scr...") -Fri Jul 13 18:18:09 2012 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Jeanette DeLisle (/mob/living/carbon/human) - src: Jeanette DeLisle (/mob/living/carbon/human) - call stack: -Jeanette DeLisle (/mob/living/carbon/human): db click("storage1", 1) -the storage1 (/obj/screen): attack hand(Jeanette DeLisle (/mob/living/carbon/human), 1) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=19;icon-y=15;left=1;scr...") -runtime error: Cannot read null.total_volume -proc name: attackby (/obj/machinery/reagentgrinder/attackby) - source file: Chemistry-Machinery.dm,751 - usr: Reese Marcotte (/mob/living/carbon/human) - src: All-In-One Grinder (/obj/machinery/reagentgrinder) - call stack: -All-In-One Grinder (/obj/machinery/reagentgrinder): attackby(Plant Bag (/obj/item/plantbag), Reese Marcotte (/mob/living/carbon/human)) -All-In-One Grinder (/obj/machinery/reagentgrinder): DblClick(the floor (169,125,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=18;icon-y=21;left=1;scr...") -All-In-One Grinder (/obj/machinery/reagentgrinder): Click(the floor (169,125,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=18;icon-y=21;left=1;scr...") -runtime error: Cannot read null.total_volume -proc name: attackby (/obj/machinery/reagentgrinder/attackby) - source file: Chemistry-Machinery.dm,751 - usr: Reese Marcotte (/mob/living/carbon/human) - src: All-In-One Grinder (/obj/machinery/reagentgrinder) - call stack: -All-In-One Grinder (/obj/machinery/reagentgrinder): attackby(Plant Bag (/obj/item/plantbag), Reese Marcotte (/mob/living/carbon/human)) -All-In-One Grinder (/obj/machinery/reagentgrinder): DblClick(the floor (169,125,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=19;icon-y=15;left=1;scr...") -All-In-One Grinder (/obj/machinery/reagentgrinder): Click(the floor (169,125,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=19;icon-y=15;left=1;scr...") -runtime error: Cannot read null.total_volume -proc name: attackby (/obj/machinery/reagentgrinder/attackby) - source file: Chemistry-Machinery.dm,751 - usr: Reese Marcotte (/mob/living/carbon/human) - src: All-In-One Grinder (/obj/machinery/reagentgrinder) - call stack: -All-In-One Grinder (/obj/machinery/reagentgrinder): attackby(Plant Bag (/obj/item/plantbag), Reese Marcotte (/mob/living/carbon/human)) -All-In-One Grinder (/obj/machinery/reagentgrinder): DblClick(the floor (169,125,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=18;icon-y=12;left=1;scr...") -All-In-One Grinder (/obj/machinery/reagentgrinder): Click(the floor (169,125,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=18;icon-y=12;left=1;scr...") -runtime error: Cannot read null.total_volume -proc name: attackby (/obj/machinery/reagentgrinder/attackby) - source file: Chemistry-Machinery.dm,751 - usr: Reese Marcotte (/mob/living/carbon/human) - src: All-In-One Grinder (/obj/machinery/reagentgrinder) - call stack: -All-In-One Grinder (/obj/machinery/reagentgrinder): attackby(Plant Bag (/obj/item/plantbag), Reese Marcotte (/mob/living/carbon/human)) -All-In-One Grinder (/obj/machinery/reagentgrinder): DblClick(the floor (169,125,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=18;icon-y=12;left=1;scr...") -All-In-One Grinder (/obj/machinery/reagentgrinder): Click(the floor (169,125,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=18;icon-y=12;left=1;scr...") -runtime error: Cannot read null.total_volume -proc name: attackby (/obj/machinery/reagentgrinder/attackby) - source file: Chemistry-Machinery.dm,751 - usr: Reese Marcotte (/mob/living/carbon/human) - src: All-In-One Grinder (/obj/machinery/reagentgrinder) - call stack: -All-In-One Grinder (/obj/machinery/reagentgrinder): attackby(Plant Bag (/obj/item/plantbag), Reese Marcotte (/mob/living/carbon/human)) -All-In-One Grinder (/obj/machinery/reagentgrinder): DblClick(the floor (169,125,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=20;icon-y=15;left=1;scr...") -All-In-One Grinder (/obj/machinery/reagentgrinder): Click(the floor (169,125,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=20;icon-y=15;left=1;scr...") -runtime error: Cannot read null.total_volume -proc name: attackby (/obj/machinery/reagentgrinder/attackby) - source file: Chemistry-Machinery.dm,751 - usr: Reese Marcotte (/mob/living/carbon/human) - src: All-In-One Grinder (/obj/machinery/reagentgrinder) - call stack: -All-In-One Grinder (/obj/machinery/reagentgrinder): attackby(Plant Bag (/obj/item/plantbag), Reese Marcotte (/mob/living/carbon/human)) -All-In-One Grinder (/obj/machinery/reagentgrinder): DblClick(the floor (169,125,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=19;icon-y=19;left=1;scr...") -All-In-One Grinder (/obj/machinery/reagentgrinder): Click(the floor (169,125,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=19;icon-y=19;left=1;scr...") -runtime error: Cannot read null.total_volume -proc name: attackby (/obj/machinery/reagentgrinder/attackby) - source file: Chemistry-Machinery.dm,751 - usr: Reese Marcotte (/mob/living/carbon/human) - src: All-In-One Grinder (/obj/machinery/reagentgrinder) - call stack: -All-In-One Grinder (/obj/machinery/reagentgrinder): attackby(Plant Bag (/obj/item/plantbag), Reese Marcotte (/mob/living/carbon/human)) -All-In-One Grinder (/obj/machinery/reagentgrinder): DblClick(the floor (169,125,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=19;icon-y=18;left=1;scr...") -All-In-One Grinder (/obj/machinery/reagentgrinder): Click(the floor (169,125,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=19;icon-y=18;left=1;scr...") -runtime error: Cannot read null.total_volume -proc name: attackby (/obj/machinery/reagentgrinder/attackby) - source file: Chemistry-Machinery.dm,751 - usr: Reese Marcotte (/mob/living/carbon/human) - src: All-In-One Grinder (/obj/machinery/reagentgrinder) - call stack: -All-In-One Grinder (/obj/machinery/reagentgrinder): attackby(Plant Bag (/obj/item/plantbag), Reese Marcotte (/mob/living/carbon/human)) -All-In-One Grinder (/obj/machinery/reagentgrinder): DblClick(the floor (169,125,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=16;icon-y=19;left=1;scr...") -All-In-One Grinder (/obj/machinery/reagentgrinder): Click(the floor (169,125,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=16;icon-y=19;left=1;scr...") -runtime error: Cannot read null.total_volume -proc name: attackby (/obj/machinery/reagentgrinder/attackby) - source file: Chemistry-Machinery.dm,751 - usr: Reese Marcotte (/mob/living/carbon/human) - src: All-In-One Grinder (/obj/machinery/reagentgrinder) - call stack: -All-In-One Grinder (/obj/machinery/reagentgrinder): attackby(Plant Bag (/obj/item/plantbag), Reese Marcotte (/mob/living/carbon/human)) -All-In-One Grinder (/obj/machinery/reagentgrinder): DblClick(the floor (169,125,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=17;icon-y=19;left=1;scr...") -All-In-One Grinder (/obj/machinery/reagentgrinder): Click(the floor (169,125,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=17;icon-y=19;left=1;scr...") -runtime error: Cannot read null.total_volume -proc name: attackby (/obj/machinery/reagentgrinder/attackby) - source file: Chemistry-Machinery.dm,751 - usr: Reese Marcotte (/mob/living/carbon/human) - src: All-In-One Grinder (/obj/machinery/reagentgrinder) - call stack: -All-In-One Grinder (/obj/machinery/reagentgrinder): attackby(Plant Bag (/obj/item/plantbag), Reese Marcotte (/mob/living/carbon/human)) -All-In-One Grinder (/obj/machinery/reagentgrinder): DblClick(the floor (169,125,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=18;icon-y=13;left=1;scr...") -All-In-One Grinder (/obj/machinery/reagentgrinder): Click(the floor (169,125,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=18;icon-y=13;left=1;scr...") -runtime error: Cannot read null.total_volume -proc name: attackby (/obj/machinery/reagentgrinder/attackby) - source file: Chemistry-Machinery.dm,751 - usr: Reese Marcotte (/mob/living/carbon/human) - src: All-In-One Grinder (/obj/machinery/reagentgrinder) - call stack: -All-In-One Grinder (/obj/machinery/reagentgrinder): attackby(Plant Bag (/obj/item/plantbag), Reese Marcotte (/mob/living/carbon/human)) -All-In-One Grinder (/obj/machinery/reagentgrinder): DblClick(the floor (169,125,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=18;icon-y=17;left=1;scr...") -All-In-One Grinder (/obj/machinery/reagentgrinder): Click(the floor (169,125,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=18;icon-y=17;left=1;scr...") -runtime error: Cannot read null.total_volume -proc name: attackby (/obj/machinery/reagentgrinder/attackby) - source file: Chemistry-Machinery.dm,751 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1023 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1023 -Fri Jul 13 19:18:20 2012 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1048 -Denied access to 'Rotcod' connecting from 138.210.6.170 -Rebooted server. -Running TG Revision Number: 4060. -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Jack Kasshu (/mob/living/carbon/human) - src: Jack Kasshu (/mob/living/carbon/human) - call stack: -Jack Kasshu (/mob/living/carbon/human): db click("storage1", 0) -the storage1 (/obj/screen): attack hand(Jack Kasshu (/mob/living/carbon/human), 0) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=15;icon-y=10;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Slimeria (/mob/living/carbon/human) - src: Slimeria (/mob/living/carbon/human) - call stack: -Slimeria (/mob/living/carbon/human): db click("id", 1) -the id (/obj/screen): attack hand(Slimeria (/mob/living/carbon/human), 1) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=18;icon-y=13;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Slimeria (/mob/living/carbon/human) - src: Slimeria (/mob/living/carbon/human) - call stack: -Slimeria (/mob/living/carbon/human): db click("id", 1) -the id (/obj/screen): attack hand(Slimeria (/mob/living/carbon/human), 1) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=15;icon-y=20;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Alberto Ivanov (/mob/living/carbon/human) - src: Alberto Ivanov (/mob/living/carbon/human) - call stack: -Alberto Ivanov (/mob/living/carbon/human): db click("storage1", 0) -the storage1 (/obj/screen): attack hand(Alberto Ivanov (/mob/living/carbon/human), 0) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=14;icon-y=13;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Mr. English (/mob/living/carbon/human) - src: Mr. English (/mob/living/carbon/human) - call stack: -Mr. English (/mob/living/carbon/human): db click("storage1", 0) -the storage1 (/obj/screen): attack hand(Mr. English (/mob/living/carbon/human), 0) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=26;icon-y=20;left=1;scr...") -runtime error: undefined variable /client/var/loc -proc name: get turf (/proc/get_turf) - source file: helper_procs.dm,38 - usr: the ghost (/mob/dead/observer) - src: null - call stack: -get turf(Nodka (/client)) -the ghost (/mob/dead/observer): New(Nodka (/client), 0) -Nodka (/client): Ghost() -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Captain Fudge (/mob/living/carbon/human) - src: Captain Fudge (/mob/living/carbon/human) - call stack: -Captain Fudge (/mob/living/carbon/human): db click("storage1", 1) -the storage1 (/obj/screen): attack hand(Captain Fudge (/mob/living/carbon/human), 1) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=11;icon-y=19;left=1;scr...") -runtime error: Cannot read null.total_volume -proc name: attackby (/obj/machinery/reagentgrinder/attackby) - source file: Chemistry-Machinery.dm,751 - usr: Ellen Quinn (/mob/living/carbon/human) - src: All-In-One Grinder (/obj/machinery/reagentgrinder) - call stack: -All-In-One Grinder (/obj/machinery/reagentgrinder): attackby(Plant Bag (/obj/item/plantbag), Ellen Quinn (/mob/living/carbon/human)) -All-In-One Grinder (/obj/machinery/reagentgrinder): DblClick(the floor (154,134,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=16;icon-y=21;left=1;scr...") -All-In-One Grinder (/obj/machinery/reagentgrinder): Click(the floor (154,134,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=16;icon-y=21;left=1;scr...") -runtime error: Cannot read null.total_volume -proc name: attackby (/obj/machinery/reagentgrinder/attackby) - source file: Chemistry-Machinery.dm,751 - usr: Ellen Quinn (/mob/living/carbon/human) - src: All-In-One Grinder (/obj/machinery/reagentgrinder) - call stack: -All-In-One Grinder (/obj/machinery/reagentgrinder): attackby(Plant Bag (/obj/item/plantbag), Ellen Quinn (/mob/living/carbon/human)) -All-In-One Grinder (/obj/machinery/reagentgrinder): DblClick(the floor (154,134,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=17;icon-y=14;left=1;scr...") -All-In-One Grinder (/obj/machinery/reagentgrinder): Click(the floor (154,134,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=17;icon-y=14;left=1;scr...") -Fri Jul 13 20:36:29 2012 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Dawson Gibbens (/mob/living/carbon/human) - src: Dawson Gibbens (/mob/living/carbon/human) - call stack: -Dawson Gibbens (/mob/living/carbon/human): db click("storage1", 0) -the storage1 (/obj/screen): attack hand(Dawson Gibbens (/mob/living/carbon/human), 0) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=10;icon-y=16;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Jack Kasshu (/mob/living/carbon/human) - src: Jack Kasshu (/mob/living/carbon/human) - call stack: -Jack Kasshu (/mob/living/carbon/human): db click("storage1", 0) -the storage1 (/obj/screen): attack hand(Jack Kasshu (/mob/living/carbon/human), 0) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=21;icon-y=20;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1166 - usr: Josh Morris (/mob/living/carbon/human) - src: Josh Morris (/mob/living/carbon/human) - call stack: -Josh Morris (/mob/living/carbon/human): db click("storage2", 0) -the storage2 (/obj/screen): attack hand(Josh Morris (/mob/living/carbon/human), 0) -the storage2 (/obj/screen): DblClick(null, null, null) -the storage2 (/obj/screen): Click(null, "mapwindow.map", "icon-x=11;icon-y=14;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1166 - usr: Josh Morris (/mob/living/carbon/human) - src: Josh Morris (/mob/living/carbon/human) - call stack: -Josh Morris (/mob/living/carbon/human): db click("storage2", 0) -the storage2 (/obj/screen): attack hand(Josh Morris (/mob/living/carbon/human), 0) -the storage2 (/obj/screen): DblClick(null, null, null) -the storage2 (/obj/screen): Click(null, "mapwindow.map", "icon-x=14;icon-y=16;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1048 - usr: Simon Bonkers (/mob/living/carbon/human) - src: Simon Bonkers (/mob/living/carbon/human) - call stack: -Simon Bonkers (/mob/living/carbon/human): db click("o_clothing", 0) -the o_clothing (/obj/screen): attack hand(Simon Bonkers (/mob/living/carbon/human), 0) -the o_clothing (/obj/screen): DblClick(null, null, null) -the o_clothing (/obj/screen): Click(null, "mapwindow.map", "icon-x=17;icon-y=14;left=1;scr...") -Denied access to 'Deamon_Man16' connecting from 108.200.222.182 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1127 - usr: Dave Oneal (/mob/living/carbon/human) - src: Dave Oneal (/mob/living/carbon/human) - call stack: -Dave Oneal (/mob/living/carbon/human): db click("i_clothing", 1) -the i_clothing (/obj/screen): attack hand(Dave Oneal (/mob/living/carbon/human), 1) -the i_clothing (/obj/screen): DblClick(null, null, null) -the i_clothing (/obj/screen): Click(null, "mapwindow.map", "icon-x=19;icon-y=13;left=1;scr...") -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: Space Retrovirus (/datum/disease/dnaspread) - call stack: -Space Retrovirus (/datum/disease/dnaspread): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: Space Retrovirus (/datum/disease/dnaspread) - call stack: -Space Retrovirus (/datum/disease/dnaspread): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: Space Retrovirus (/datum/disease/dnaspread) - call stack: -Space Retrovirus (/datum/disease/dnaspread): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: Space Retrovirus (/datum/disease/dnaspread) - call stack: -Space Retrovirus (/datum/disease/dnaspread): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: undefined proc or verb /obj/machinery/space_heater/attack(). - -proc name: attackby (/mob/attackby) - source file: items.dm,334 -runtime error: undefined proc or verb /obj/machinery/space_heater/attack(). - -proc name: attackby (/mob/attackby) - source file: items.dm,334 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1071 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -Warning: further proc crash messages are being suppressed to prevent overload... -Rebooted server. -Running TG Revision Number: 4060. -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Reign Boudash (/mob/living/carbon/human) - src: Reign Boudash (/mob/living/carbon/human) - call stack: -Reign Boudash (/mob/living/carbon/human): db click("storage1", 0) -the storage1 (/obj/screen): attack hand(Reign Boudash (/mob/living/carbon/human), 0) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=26;icon-y=18;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Reign Boudash (/mob/living/carbon/human) - src: Reign Boudash (/mob/living/carbon/human) - call stack: -Reign Boudash (/mob/living/carbon/human): db click("storage1", 0) -the storage1 (/obj/screen): attack hand(Reign Boudash (/mob/living/carbon/human), 0) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=26;icon-y=18;left=1;scr...") -Fri Jul 13 21:43:15 2012 -runtime error: unexpected stat -proc name: Stat (/mob/living/silicon/robot/Stat) - source file: robot.dm,227 - usr: Michigan Slim (/mob/living/carbon/human) - src: Engineering Cyborg -133 (/mob/living/silicon/robot) - call stack: -Engineering Cyborg -133 (/mob/living/silicon/robot): Stat() -Borg module reset board (/obj/item/borg/upgrade/reset): action(Engineering Cyborg -133 (/mob/living/silicon/robot)) -Borg module reset board (/obj/item/borg/upgrade/reset): action(Engineering Cyborg -133 (/mob/living/silicon/robot)) -Engineering Cyborg -133 (/mob/living/silicon/robot): attackby(Borg module reset board (/obj/item/borg/upgrade/reset), Michigan Slim (/mob/living/carbon/human)) -Engineering Cyborg -133 (/mob/living/silicon/robot): DblClick(the floor (95,85,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=14;icon-y=18;left=1;scr...") -Engineering Cyborg -133 (/mob/living/silicon/robot): Click(the floor (95,85,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=14;icon-y=18;left=1;scr...") -runtime error: undefined proc or verb /obj/machinery/portable_atmospherics/canister/toxins/attack(). - -proc name: attackby (/mob/attackby) - source file: items.dm,334 - usr: Watt Malker (/mob/living/carbon/human) - src: Black Dick Bishop (/mob/living/carbon/human) - call stack: -Black Dick Bishop (/mob/living/carbon/human): attackby(Canister \[Toxin (Bio)] (OPEN ... (/obj/machinery/portable_atmospherics/canister/toxins), Watt Malker (/mob/living/carbon/human), "chest") -runtime error: undefined variable /datum/preferences/var/fields -proc name: Topic (/obj/machinery/computer/cloning/Topic) - source file: cloning.dm,370 - usr: Logan Graves (/mob/living/carbon/human) - src: Cloning console (/obj/machinery/computer/cloning) - call stack: -Cloning console (/obj/machinery/computer/cloning): Topic("src=\[0x2005ab9];clone=\[0x210...", /list (/list)) -LordGeneralCastor (/client): Topic("src=\[0x2005ab9];clone=\[0x210...", /list (/list), Cloning console (/obj/machinery/computer/cloning)) -runtime error: unexpected stat -proc name: Stat (/mob/living/silicon/robot/Stat) - source file: robot.dm,214 - usr: Kingston Sommer (/mob/living/carbon/human) - src: Miner Cyborg 133 (/mob/living/silicon/robot) - call stack: -Miner Cyborg 133 (/mob/living/silicon/robot): Stat() -Borg module reset board (/obj/item/borg/upgrade/reset): action(Miner Cyborg 133 (/mob/living/silicon/robot)) -Borg module reset board (/obj/item/borg/upgrade/reset): action(Miner Cyborg 133 (/mob/living/silicon/robot)) -Miner Cyborg 133 (/mob/living/silicon/robot): attackby(Borg module reset board (/obj/item/borg/upgrade/reset), Kingston Sommer (/mob/living/carbon/human)) -Miner Cyborg 133 (/mob/living/silicon/robot): DblClick(the floor (97,87,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=14;icon-y=9;left=1;scre...") -Miner Cyborg 133 (/mob/living/silicon/robot): Click(the floor (97,87,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=14;icon-y=9;left=1;scre...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Reign Boudash (/mob/living/carbon/human) - src: Reign Boudash (/mob/living/carbon/human) - call stack: -Reign Boudash (/mob/living/carbon/human): db click("id", 1) -the id (/obj/screen): attack hand(Reign Boudash (/mob/living/carbon/human), 1) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=14;icon-y=17;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1166 - usr: Zevin Thusar (/mob/living/carbon/human) - src: Zevin Thusar (/mob/living/carbon/human) - call stack: -Zevin Thusar (/mob/living/carbon/human): db click("storage2", 1) -the storage2 (/obj/screen): attack hand(Zevin Thusar (/mob/living/carbon/human), 1) -the storage2 (/obj/screen): DblClick(null, null, null) -the storage2 (/obj/screen): Click(null, "mapwindow.map", "icon-x=11;icon-y=16;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1083 - usr: Nick Cave (/mob/living/carbon/human) - src: Nick Cave (/mob/living/carbon/human) - call stack: -Nick Cave (/mob/living/carbon/human): db click("belt", null) -the belt (/obj/screen): attack hand(Nick Cave (/mob/living/carbon/human), null) -the belt (/obj/screen): DblClick(null, null, null) -the belt (/obj/screen): Click(null, "mapwindow.map", "icon-x=26;icon-y=15;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1083 - usr: Nick Cave (/mob/living/carbon/human) - src: Nick Cave (/mob/living/carbon/human) - call stack: -Nick Cave (/mob/living/carbon/human): db click("belt", null) -the belt (/obj/screen): attack hand(Nick Cave (/mob/living/carbon/human), null) -the belt (/obj/screen): DblClick(null, null, null) -the belt (/obj/screen): Click(null, "mapwindow.map", "icon-x=23;icon-y=14;left=1;scr...") -runtime error: undefined variable /turf/simulated/floor/plating/var/mineral -proc name: attackby (/turf/simulated/wall/attackby) - source file: turf.dm,600 - usr: Monte Smail (/mob/living/carbon/human) - src: the plating (176,172,5) (/turf/simulated/floor/plating) - call stack: -the plating (176,172,5) (/turf/simulated/floor/plating): attackby(Diamond Mining Drill (/obj/item/pickaxe/diamonddrill), Monte Smail (/mob/living/carbon/human)) -the plating (176,172,5) (/turf/simulated/floor/plating): DblClick(the plating (176,172,5) (/turf/simulated/floor/plating), "mapwindow.map", "icon-x=15;icon-y=6;left=1;scre...") -the plating (176,172,5) (/turf/simulated/floor/plating): DblClick(the plating (176,172,5) (/turf/simulated/floor/plating), "mapwindow.map", "icon-x=15;icon-y=6;left=1;scre...") -the plating (176,172,5) (/turf/simulated/floor/plating): Click(the plating (176,172,5) (/turf/simulated/floor/plating), "mapwindow.map", "icon-x=15;icon-y=6;left=1;scre...") -Rebooted server. -Running TG Revision Number: 4060. -Fri Jul 13 22:48:12 2012 -runtime error: Cannot create objects of type null. -proc name: Topic (/obj/machinery/computer/rdconsole/Topic) - source file: rdconsole.dm,381 - usr: Matthew Hoff (/mob/living/carbon/human) - src: Core R&D Console (/obj/machinery/computer/rdconsole_tg) - call stack: -Core R&D Console (/obj/machinery/computer/rdconsole_tg): Topic("src=\[0x20065fa];build=large_G...", /list (/list)) -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Chip Harshman (/mob/living/carbon/human) - src: Chip Harshman (/mob/living/carbon/human) - call stack: -Chip Harshman (/mob/living/carbon/human): db click("id", 0) -the id (/obj/screen): attack hand(Chip Harshman (/mob/living/carbon/human), 0) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=16;icon-y=20;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Chip Harshman (/mob/living/carbon/human) - src: Chip Harshman (/mob/living/carbon/human) - call stack: -Chip Harshman (/mob/living/carbon/human): db click("storage1", 0) -the storage1 (/obj/screen): attack hand(Chip Harshman (/mob/living/carbon/human), 0) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=16;icon-y=20;left=1;scr...") -runtime error: Cannot read null.blood_DNA -proc name: update inv w uniform (/mob/living/carbon/human/update_inv_w_uniform) - source file: update_icons.dm,372 - usr: null - src: Chip Harshman (/mob/living/carbon/human) - call stack: -Chip Harshman (/mob/living/carbon/human): update inv w uniform(0) -Chip Harshman (/mob/living/carbon/human): handle chemicals in body() -Chip Harshman (/mob/living/carbon/human): Life() -/datum/controller/game_control... (/datum/controller/game_controller): process() -runtime error: Cannot create objects of type null. -proc name: Topic (/obj/machinery/computer/rdconsole/Topic) - source file: rdconsole.dm,381 - usr: Sprigg Spooly (/mob/living/carbon/human) - src: Core R&D Console (/obj/machinery/computer/rdconsole_tg) - call stack: -Core R&D Console (/obj/machinery/computer/rdconsole_tg): Topic("src=\[0x200ca33];build=large_G...", /list (/list)) -runtime error: Cannot create objects of type null. -proc name: Topic (/obj/machinery/computer/rdconsole/Topic) - source file: rdconsole.dm,381 - usr: Sprigg Spooly (/mob/living/carbon/human) - src: Core R&D Console (/obj/machinery/computer/rdconsole_tg) - call stack: -Core R&D Console (/obj/machinery/computer/rdconsole_tg): Topic("src=\[0x200ca94];build=large_G...", /list (/list)) -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1093 - usr: Jack Kasshu (/mob/living/carbon/human) - src: Jack Kasshu (/mob/living/carbon/human) - call stack: -Jack Kasshu (/mob/living/carbon/human): db click("eyes", 0) -the eyes (/obj/screen): attack hand(Jack Kasshu (/mob/living/carbon/human), 0) -the eyes (/obj/screen): DblClick(null, null, null) -the eyes (/obj/screen): Click(null, "mapwindow.map", "icon-x=29;icon-y=1;left=1;scre...") -Fri Jul 13 23:52:26 2012 -### VarEdit by Yinadele: /datum/reagents maximum_volume=20 -### VarEdit by Yinadele: /datum/reagents total_volume=20 -### VarEdit by Yinadele: /obj/effect/decal name=chemicals (Haunter) -### VarEdit by Yinadele: /obj/effect/decal throwforce=20 -### VarEdit by Yinadele: /obj/effect/decal infra_luminosity=1 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1166 - usr: Sergei Vladislanikov (/mob/living/carbon/human) - src: Sergei Vladislanikov (/mob/living/carbon/human) - call stack: -Sergei Vladislanikov (/mob/living/carbon/human): db click("storage2", 1) -the storage2 (/obj/screen): attack hand(Sergei Vladislanikov (/mob/living/carbon/human), 1) -the storage2 (/obj/screen): DblClick(null, null, null) -the storage2 (/obj/screen): Click(null, "mapwindow.map", "icon-x=19;icon-y=15;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Sprigg Spooly (/mob/living/carbon/human) - src: Sprigg Spooly (/mob/living/carbon/human) - call stack: -Sprigg Spooly (/mob/living/carbon/human): db click("id", 0) -the id (/obj/screen): attack hand(Sprigg Spooly (/mob/living/carbon/human), 0) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=18;icon-y=14;left=1;scr...") -runtime error: unexpected stat -proc name: Stat (/mob/living/silicon/robot/Stat) - source file: robot.dm,227 - usr: Sprigg Spooly as (Matthew Hoff... (/mob/living/carbon/human) - src: Engineering Cyborg -952 (/mob/living/silicon/robot) - call stack: -Engineering Cyborg -952 (/mob/living/silicon/robot): Stat() -Borg VTEC Module (/obj/item/borg/upgrade/vtec): action(Engineering Cyborg -952 (/mob/living/silicon/robot)) -Borg VTEC Module (/obj/item/borg/upgrade/vtec): action(Engineering Cyborg -952 (/mob/living/silicon/robot)) -Engineering Cyborg -952 (/mob/living/silicon/robot): attackby(Borg VTEC Module (/obj/item/borg/upgrade/vtec), Sprigg Spooly as (Matthew Hoff... (/mob/living/carbon/human)) -Engineering Cyborg -952 (/mob/living/silicon/robot): DblClick(the floor (101,86,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=17;icon-y=17;left=1;scr...") -Engineering Cyborg -952 (/mob/living/silicon/robot): Click(the floor (101,86,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=17;icon-y=17;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1083 - usr: Miku Frost (/mob/living/carbon/human) - src: Miku Frost (/mob/living/carbon/human) - call stack: -Miku Frost (/mob/living/carbon/human): db click("belt", 0) -the belt (/obj/screen): attack hand(Miku Frost (/mob/living/carbon/human), 0) -the belt (/obj/screen): DblClick(null, null, null) -the belt (/obj/screen): Click(null, "mapwindow.map", "icon-x=21;icon-y=20;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1083 - usr: Miku Frost (/mob/living/carbon/human) - src: Miku Frost (/mob/living/carbon/human) - call stack: -Miku Frost (/mob/living/carbon/human): db click("belt", 0) -the belt (/obj/screen): attack hand(Miku Frost (/mob/living/carbon/human), 0) -the belt (/obj/screen): DblClick(null, null, null) -the belt (/obj/screen): Click(null, "mapwindow.map", "icon-x=18;icon-y=13;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Tood Hoawd (/mob/living/carbon/human) - src: Tood Hoawd (/mob/living/carbon/human) - call stack: -Tood Hoawd (/mob/living/carbon/human): db click("id", 1) -the id (/obj/screen): attack hand(Tood Hoawd (/mob/living/carbon/human), 1) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=18;icon-y=17;left=1;scr...") -Sat Jul 14 00:57:29 2012 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1035 - usr: Ellen Quinn (/mob/living/carbon/human) - src: Ellen Quinn (/mob/living/carbon/human) - call stack: -Ellen Quinn (/mob/living/carbon/human): db click("back", 0) -the back (/obj/screen): attack hand(Ellen Quinn (/mob/living/carbon/human), 0) -the back (/obj/screen): DblClick(null, null, null) -the back (/obj/screen): Click(null, "mapwindow.map", "icon-x=25;icon-y=22;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1035 - usr: Unknown (/mob/living/carbon/human) - src: Unknown (/mob/living/carbon/human) - call stack: -Unknown (/mob/living/carbon/human): db click("back", null) -the back (/obj/screen): attack hand(Unknown (/mob/living/carbon/human), null) -the back (/obj/screen): DblClick(null, null, null) -the back (/obj/screen): Click(null, "mapwindow.map", "icon-x=18;icon-y=14;left=1;scr...") -### VarEdit by Yinadele: /mob/living/carbon/metroid ckey=commissarzoey -### VarEdit by Yinadele: /mob/living/carbon/metroid ckey=nodrak -### VarEdit by Yinadele: /mob/living/carbon/metroid ckey=dakorok -### VarEdit by Yinadele: /mob/living/carbon/metroid ckey=nickknack -### VarEdit by Yinadele: /mob/living/carbon/metroid/adult ckey=yinadele -### VarEdit by Yinadele: /mob/living/carbon/metroid ckey=emperorofcatkind -runtime error: Cannot read null.current -proc name: check completion (/datum/objective/download/check_completion) - source file: objective.dm,411 - usr: null - src: /datum/objective/download (/datum/objective/download) - call stack: -/datum/objective/download (/datum/objective/download): check completion() -extended (/datum/game_mode/extended): auto declare completion traitor() -/datum/controller/gameticker (/datum/controller/gameticker): declare completion() -/datum/controller/gameticker (/datum/controller/gameticker): process() -runtime error: Cannot read null.current -proc name: check completion (/datum/objective/steal/check_completion) - source file: objective.dm,352 - usr: null - src: /datum/objective/steal (/datum/objective/steal) - call stack: -/datum/objective/steal (/datum/objective/steal): check completion() -extended (/datum/game_mode/extended): auto declare completion traitor() -/datum/controller/gameticker (/datum/controller/gameticker): declare completion() -/datum/controller/gameticker (/datum/controller/gameticker): process() -runtime error: Cannot read null.current -proc name: check completion (/datum/objective/download/check_completion) - source file: objective.dm,411 - usr: null - src: /datum/objective/download (/datum/objective/download) - call stack: -/datum/objective/download (/datum/objective/download): check completion() -extended (/datum/game_mode/extended): auto declare completion traitor() -/datum/controller/gameticker (/datum/controller/gameticker): declare completion() -/datum/controller/gameticker (/datum/controller/gameticker): process() -runtime error: Cannot read null.current -proc name: check completion (/datum/objective/steal/check_completion) - source file: objective.dm,352 - usr: null - src: /datum/objective/steal (/datum/objective/steal) - call stack: -/datum/objective/steal (/datum/objective/steal): check completion() -extended (/datum/game_mode/extended): auto declare completion traitor() -/datum/controller/gameticker (/datum/controller/gameticker): declare completion() -/datum/controller/gameticker (/datum/controller/gameticker): process() -runtime error: Cannot read null.current -proc name: check completion (/datum/objective/download/check_completion) - source file: objective.dm,411 -runtime error: Cannot read null.current -proc name: check completion (/datum/objective/download/check_completion) - source file: objective.dm,411 -runtime error: Cannot read null.current -proc name: check completion (/datum/objective/steal/check_completion) - source file: objective.dm,352 -Rebooted server. -Running TG Revision Number: 4060. -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Ophelia Braun (/mob/living/carbon/human) - src: Ophelia Braun (/mob/living/carbon/human) - call stack: -Ophelia Braun (/mob/living/carbon/human): db click("id", 1) -the id (/obj/screen): attack hand(Ophelia Braun (/mob/living/carbon/human), 1) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=18;icon-y=16;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1083 - usr: Helen Lester (/mob/living/carbon/human) - src: Helen Lester (/mob/living/carbon/human) - call stack: -Helen Lester (/mob/living/carbon/human): db click("belt", null) -the belt (/obj/screen): attack hand(Helen Lester (/mob/living/carbon/human), null) -the belt (/obj/screen): DblClick(null, null, null) -the belt (/obj/screen): Click(null, "mapwindow.map", "icon-x=20;icon-y=11;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Dave Oneal (/mob/living/carbon/human) - src: Dave Oneal (/mob/living/carbon/human) - call stack: -Dave Oneal (/mob/living/carbon/human): db click("id", null) -the id (/obj/screen): attack hand(Dave Oneal (/mob/living/carbon/human), null) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=19;icon-y=19;left=1;scr...") -Sat Jul 14 01:57:46 2012 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1117 - usr: Dat Bass (/mob/living/carbon/human) - src: Dat Bass (/mob/living/carbon/human) - call stack: -Dat Bass (/mob/living/carbon/human): db click("ears", null) -the ears (/obj/screen): attack hand(Dat Bass (/mob/living/carbon/human), null) -the ears (/obj/screen): DblClick(null, null, null) -the ears (/obj/screen): Click(null, "mapwindow.map", "icon-x=12;icon-y=15;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Helen Lester (/mob/living/carbon/human) - src: Helen Lester (/mob/living/carbon/human) - call stack: -Helen Lester (/mob/living/carbon/human): db click("id", 1) -the id (/obj/screen): attack hand(Helen Lester (/mob/living/carbon/human), 1) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=8;icon-y=12;left=1;scre...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1083 - usr: Lila Desminto (/mob/living/carbon/human) - src: Lila Desminto (/mob/living/carbon/human) - call stack: -Lila Desminto (/mob/living/carbon/human): db click("belt", 0) -the belt (/obj/screen): attack hand(Lila Desminto (/mob/living/carbon/human), 0) -the belt (/obj/screen): DblClick(null, null, null) -the belt (/obj/screen): Click(null, "mapwindow.map", "icon-x=10;icon-y=5;left=1;scre...") -### VarEdit by Doohl: /obj/effect/new_year_tree name=BODA TREE -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Penny Merriweather (/mob/living/carbon/human) - src: Penny Merriweather (/mob/living/carbon/human) - call stack: -Penny Merriweather (/mob/living/carbon/human): db click("id", 1) -the id (/obj/screen): attack hand(Penny Merriweather (/mob/living/carbon/human), 1) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=21;icon-y=16;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Penny Merriweather (/mob/living/carbon/human) - src: Penny Merriweather (/mob/living/carbon/human) - call stack: -Penny Merriweather (/mob/living/carbon/human): db click("id", 1) -the id (/obj/screen): attack hand(Penny Merriweather (/mob/living/carbon/human), 1) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=20;icon-y=16;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Penny Merriweather (/mob/living/carbon/human) - src: Penny Merriweather (/mob/living/carbon/human) - call stack: -Penny Merriweather (/mob/living/carbon/human): db click("id", 1) -the id (/obj/screen): attack hand(Penny Merriweather (/mob/living/carbon/human), 1) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=20;icon-y=16;left=1;scr...") -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: Magnitis (/datum/disease/magnitis) - call stack: -Magnitis (/datum/disease/magnitis): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: Magnitis (/datum/disease/magnitis) - call stack: -Magnitis (/datum/disease/magnitis): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: Magnitis (/datum/disease/magnitis) - call stack: -Magnitis (/datum/disease/magnitis): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: Magnitis (/datum/disease/magnitis) - call stack: -Magnitis (/datum/disease/magnitis): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: Magnitis (/datum/disease/magnitis) - call stack: -Magnitis (/datum/disease/magnitis): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: Magnitis (/datum/disease/magnitis) - call stack: -Magnitis (/datum/disease/magnitis): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: Magnitis (/datum/disease/magnitis) - call stack: -Magnitis (/datum/disease/magnitis): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: Magnitis (/datum/disease/magnitis) - call stack: -Magnitis (/datum/disease/magnitis): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: Magnitis (/datum/disease/magnitis) - call stack: -Magnitis (/datum/disease/magnitis): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: Magnitis (/datum/disease/magnitis) - call stack: -Magnitis (/datum/disease/magnitis): cure(0) -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1048 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -Warning: further proc crash messages are being suppressed to prevent overload... -Rebooted server. -Running TG Revision Number: 4060. -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Ashley Taylor (/mob/living/carbon/human) - src: Ashley Taylor (/mob/living/carbon/human) - call stack: -Ashley Taylor (/mob/living/carbon/human): db click("storage1", 1) -the storage1 (/obj/screen): attack hand(Ashley Taylor (/mob/living/carbon/human), 1) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=17;icon-y=15;left=1;scr...") -Rebooted server. -Running TG Revision Number: 4060. -Sat Jul 14 03:10:48 2012 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1103 - usr: Trisha Galade (/mob/living/carbon/human) - src: Trisha Galade (/mob/living/carbon/human) - call stack: -Trisha Galade (/mob/living/carbon/human): db click("head", 0) -the head (/obj/screen): attack hand(Trisha Galade (/mob/living/carbon/human), 0) -the head (/obj/screen): DblClick(null, null, null) -the head (/obj/screen): Click(null, "mapwindow.map", "icon-x=20;icon-y=26;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Trisha Galade (/mob/living/carbon/human) - src: Trisha Galade (/mob/living/carbon/human) - call stack: -Trisha Galade (/mob/living/carbon/human): db click("id", 1) -the id (/obj/screen): attack hand(Trisha Galade (/mob/living/carbon/human), 1) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=9;icon-y=14;left=1;scre...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Jack Napier (/mob/living/carbon/human) - src: Jack Napier (/mob/living/carbon/human) - call stack: -Jack Napier (/mob/living/carbon/human): db click("id", 0) -the id (/obj/screen): attack hand(Jack Napier (/mob/living/carbon/human), 0) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=11;icon-y=9;left=1;scre...") -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: Reese Marcotte (/mob/living/carbon/human) - src: Reese Marcotte (/mob/living/carbon/human) - call stack: -Reese Marcotte (/mob/living/carbon/human): throw at(Asteroid (174,85,5) (/turf/simulated/floor/plating/airless/asteroid), 5, 1) -Delivery chute (/obj/machinery/disposal/deliveryChute): expel(null) -Rebooted server. -Running TG Revision Number: 4060. -Sat Jul 14 04:15:01 2012 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1071 - usr: Flint Steel (/mob/living/carbon/human) - src: Flint Steel (/mob/living/carbon/human) - call stack: -Flint Steel (/mob/living/carbon/human): db click("shoes", 1) -the shoes (/obj/screen): attack hand(Flint Steel (/mob/living/carbon/human), 1) -the shoes (/obj/screen): DblClick(null, null, null) -the shoes (/obj/screen): Click(null, "mapwindow.map", "icon-x=11;icon-y=18;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1083 - usr: Flint Steel (/mob/living/carbon/human) - src: Flint Steel (/mob/living/carbon/human) - call stack: -Flint Steel (/mob/living/carbon/human): db click("belt", 1) -the belt (/obj/screen): attack hand(Flint Steel (/mob/living/carbon/human), 1) -the belt (/obj/screen): DblClick(null, null, null) -the belt (/obj/screen): Click(null, "mapwindow.map", "icon-x=9;icon-y=12;left=1;scre...") -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: The Flu (/datum/disease/flu) - call stack: -The Flu (/datum/disease/flu): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: The Flu (/datum/disease/flu) - call stack: -The Flu (/datum/disease/flu): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: The Flu (/datum/disease/flu) - call stack: -The Flu (/datum/disease/flu): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: The Flu (/datum/disease/flu) - call stack: -The Flu (/datum/disease/flu): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: The Flu (/datum/disease/flu) - call stack: -The Flu (/datum/disease/flu): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: The Flu (/datum/disease/flu) - call stack: -The Flu (/datum/disease/flu): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: The Flu (/datum/disease/flu) - call stack: -The Flu (/datum/disease/flu): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: The Flu (/datum/disease/flu) - call stack: -The Flu (/datum/disease/flu): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: The Flu (/datum/disease/flu) - call stack: -The Flu (/datum/disease/flu): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: The Flu (/datum/disease/flu) - call stack: -The Flu (/datum/disease/flu): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: The Flu (/datum/disease/flu) - call stack: -The Flu (/datum/disease/flu): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: The Flu (/datum/disease/flu) - call stack: -The Flu (/datum/disease/flu): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: The Flu (/datum/disease/flu) - call stack: -The Flu (/datum/disease/flu): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: The Flu (/datum/disease/flu) - call stack: -The Flu (/datum/disease/flu): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: The Flu (/datum/disease/flu) - call stack: -The Flu (/datum/disease/flu): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: The Flu (/datum/disease/flu) - call stack: -The Flu (/datum/disease/flu): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: The Flu (/datum/disease/flu) - call stack: -The Flu (/datum/disease/flu): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 -Warning: further proc crash messages are being suppressed to prevent overload... -Rebooted server. -Running TG Revision Number: 4060. -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1023 - usr: Trisha Galade (/mob/living/carbon/human) - src: Trisha Galade (/mob/living/carbon/human) - call stack: -Trisha Galade (/mob/living/carbon/human): db click("mask", 0) -the mask (/obj/screen): attack hand(Trisha Galade (/mob/living/carbon/human), 0) -the mask (/obj/screen): DblClick(null, null, null) -the mask (/obj/screen): Click(null, "mapwindow.map", "icon-x=15;icon-y=16;left=1;scr...") -Rebooted server. -Sat Jul 14 05:27:37 2012 -Running TG Revision Number: 4060. -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1166 - usr: Ladybug Honks (/mob/living/carbon/human) - src: Ladybug Honks (/mob/living/carbon/human) - call stack: -Ladybug Honks (/mob/living/carbon/human): db click("storage2", 1) -the storage2 (/obj/screen): attack hand(Ladybug Honks (/mob/living/carbon/human), 1) -the storage2 (/obj/screen): DblClick(null, null, null) -the storage2 (/obj/screen): Click(null, "mapwindow.map", "icon-x=11;icon-y=16;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1166 - usr: Ladybug Honks (/mob/living/carbon/human) - src: Ladybug Honks (/mob/living/carbon/human) - call stack: -Ladybug Honks (/mob/living/carbon/human): db click("storage2", 1) -the storage2 (/obj/screen): attack hand(Ladybug Honks (/mob/living/carbon/human), 1) -the storage2 (/obj/screen): DblClick(null, null, null) -the storage2 (/obj/screen): Click(null, "mapwindow.map", "icon-x=16;icon-y=12;left=1;scr...") -Sat Jul 14 06:59:16 2012 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Unknown (/mob/living/carbon/human) - src: Unknown (/mob/living/carbon/human) - call stack: -Unknown (/mob/living/carbon/human): db click("id", 1) -the id (/obj/screen): attack hand(Unknown (/mob/living/carbon/human), 1) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=10;icon-y=12;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1083 - usr: Malik Graham (/mob/living/carbon/human) - src: Malik Graham (/mob/living/carbon/human) - call stack: -Malik Graham (/mob/living/carbon/human): db click("belt", 1) -the belt (/obj/screen): attack hand(Malik Graham (/mob/living/carbon/human), 1) -the belt (/obj/screen): DblClick(null, null, null) -the belt (/obj/screen): Click(null, "mapwindow.map", "icon-x=20;icon-y=19;left=1;scr...") -Rebooted server. -Running TG Revision Number: 4060. -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1048 - usr: Rocky McDoughboy XIV (/mob/living/carbon/human) - src: Rocky McDoughboy XIV (/mob/living/carbon/human) - call stack: -Rocky McDoughboy XIV (/mob/living/carbon/human): db click("o_clothing", 1) -the o_clothing (/obj/screen): attack hand(Rocky McDoughboy XIV (/mob/living/carbon/human), 1) -the o_clothing (/obj/screen): DblClick(null, null, null) -the o_clothing (/obj/screen): Click(null, "mapwindow.map", "icon-x=17;icon-y=11;left=1;scr...") -Sat Jul 14 08:11:16 2012 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Sly (/mob/living/carbon/human) - src: Sly (/mob/living/carbon/human) - call stack: -Sly (/mob/living/carbon/human): db click("storage1", 0) -the storage1 (/obj/screen): attack hand(Sly (/mob/living/carbon/human), 0) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=21;icon-y=5;left=1;scre...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Sly (/mob/living/carbon/human) - src: Sly (/mob/living/carbon/human) - call stack: -Sly (/mob/living/carbon/human): db click("storage1", 0) -the storage1 (/obj/screen): attack hand(Sly (/mob/living/carbon/human), 0) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=18;icon-y=11;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Sly (/mob/living/carbon/human) - src: Sly (/mob/living/carbon/human) - call stack: -Sly (/mob/living/carbon/human): db click("storage1", 0) -the storage1 (/obj/screen): attack hand(Sly (/mob/living/carbon/human), 0) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=20;icon-y=14;left=1;scr...") -Rebooted server. -Running TG Revision Number: 4060. -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Sher Thorun (/mob/living/carbon/human) - src: Sher Thorun (/mob/living/carbon/human) - call stack: -Sher Thorun (/mob/living/carbon/human): db click("storage1", null) -the storage1 (/obj/screen): attack hand(Sher Thorun (/mob/living/carbon/human), null) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=12;icon-y=11;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1127 - usr: Jono Lionhurt (/mob/living/carbon/human) - src: Jono Lionhurt (/mob/living/carbon/human) - call stack: -Jono Lionhurt (/mob/living/carbon/human): db click("i_clothing", null) -the i_clothing (/obj/screen): attack hand(Jono Lionhurt (/mob/living/carbon/human), null) -the i_clothing (/obj/screen): DblClick(null, null, null) -the i_clothing (/obj/screen): Click(null, "mapwindow.map", "icon-x=12;icon-y=12;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Hugh Jazz (/mob/living/carbon/human) - src: Hugh Jazz (/mob/living/carbon/human) - call stack: -Hugh Jazz (/mob/living/carbon/human): db click("storage1", 1) -the storage1 (/obj/screen): attack hand(Hugh Jazz (/mob/living/carbon/human), 1) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=17;icon-y=16;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1166 - usr: Hugh Jazz (/mob/living/carbon/human) - src: Hugh Jazz (/mob/living/carbon/human) - call stack: -Hugh Jazz (/mob/living/carbon/human): db click("storage2", 0) -the storage2 (/obj/screen): attack hand(Hugh Jazz (/mob/living/carbon/human), 0) -the storage2 (/obj/screen): DblClick(null, null, null) -the storage2 (/obj/screen): Click(null, "mapwindow.map", "icon-x=19;icon-y=14;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1166 - usr: Hugh Jazz (/mob/living/carbon/human) - src: Hugh Jazz (/mob/living/carbon/human) - call stack: -Hugh Jazz (/mob/living/carbon/human): db click("storage2", 0) -the storage2 (/obj/screen): attack hand(Hugh Jazz (/mob/living/carbon/human), 0) -the storage2 (/obj/screen): DblClick(null, null, null) -the storage2 (/obj/screen): Click(null, "mapwindow.map", "icon-x=19;icon-y=14;left=1;scr...") -Sat Jul 14 09:17:07 2012 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1166 - usr: Hugh Jazz (/mob/living/carbon/human) - src: Hugh Jazz (/mob/living/carbon/human) - call stack: -Hugh Jazz (/mob/living/carbon/human): db click("storage2", 1) -the storage2 (/obj/screen): attack hand(Hugh Jazz (/mob/living/carbon/human), 1) -the storage2 (/obj/screen): DblClick(null, null, null) -the storage2 (/obj/screen): Click(null, "mapwindow.map", "icon-x=20;icon-y=16;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1166 - usr: Hugh Jazz (/mob/living/carbon/human) - src: Hugh Jazz (/mob/living/carbon/human) - call stack: -Hugh Jazz (/mob/living/carbon/human): db click("storage2", 1) -the storage2 (/obj/screen): attack hand(Hugh Jazz (/mob/living/carbon/human), 1) -the storage2 (/obj/screen): DblClick(null, null, null) -the storage2 (/obj/screen): Click(null, "mapwindow.map", "icon-x=20;icon-y=16;left=1;scr...") -Rebooted server. -Running TG Revision Number: 4060. -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1127 - usr: Unknown (/mob/living/carbon/human) - src: Unknown (/mob/living/carbon/human) - call stack: -Unknown (/mob/living/carbon/human): db click("i_clothing", 1) -the i_clothing (/obj/screen): attack hand(Unknown (/mob/living/carbon/human), 1) -the i_clothing (/obj/screen): DblClick(null, null, null) -the i_clothing (/obj/screen): Click(null, "mapwindow.map", "icon-x=31;icon-y=21;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1127 - usr: Unknown (/mob/living/carbon/human) - src: Unknown (/mob/living/carbon/human) - call stack: -Unknown (/mob/living/carbon/human): db click("i_clothing", 1) -the i_clothing (/obj/screen): attack hand(Unknown (/mob/living/carbon/human), 1) -the i_clothing (/obj/screen): DblClick(null, null, null) -the i_clothing (/obj/screen): Click(null, "mapwindow.map", "icon-x=17;icon-y=23;left=1;scr...") -Sat Jul 14 10:37:02 2012 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1103 - usr: Lord Jamlamin (/mob/living/carbon/human) - src: Lord Jamlamin (/mob/living/carbon/human) - call stack: -Lord Jamlamin (/mob/living/carbon/human): db click("head", 0) -the head (/obj/screen): attack hand(Lord Jamlamin (/mob/living/carbon/human), 0) -the head (/obj/screen): DblClick(null, null, null) -the head (/obj/screen): Click(null, "mapwindow.map", "icon-x=21;icon-y=18;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1023 - usr: Jennifer Ketavim (/mob/living/carbon/human) - src: Jennifer Ketavim (/mob/living/carbon/human) - call stack: -Jennifer Ketavim (/mob/living/carbon/human): db click("mask", 1) -the mask (/obj/screen): attack hand(Jennifer Ketavim (/mob/living/carbon/human), 1) -the mask (/obj/screen): DblClick(null, null, null) -the mask (/obj/screen): Click(null, "mapwindow.map", "icon-x=12;icon-y=10;left=1;scr...") -Rebooted server. -Running TG Revision Number: 4060. -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Unknown (/mob/living/carbon/human) - src: Unknown (/mob/living/carbon/human) - call stack: -Unknown (/mob/living/carbon/human): db click("id", null) -the id (/obj/screen): attack hand(Unknown (/mob/living/carbon/human), null) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=20;icon-y=18;left=1;scr...") -runtime error: Cannot execute null.dropped(). -proc name: drop l hand (/mob/proc/drop_l_hand) - source file: inventory.dm,104 - usr: Jeb Stone (/mob/living/carbon/human) - src: Jeb Stone (/mob/living/carbon/human) - call stack: -Jeb Stone (/mob/living/carbon/human): drop l hand(null) -Jeb Stone (/mob/living/carbon/human): drop item(null) -Jeb Stone (/mob/living/carbon/human): drop item v() -the drop (/obj/screen): Click(null, "mapwindow.map", "icon-x=8;icon-y=16;left=1;scre...") -Sat Jul 14 12:01:13 2012 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1093 - usr: Thomas Hereford (/mob/living/carbon/human) - src: Thomas Hereford (/mob/living/carbon/human) - call stack: -Thomas Hereford (/mob/living/carbon/human): db click("eyes", 1) -the eyes (/obj/screen): attack hand(Thomas Hereford (/mob/living/carbon/human), 1) -the eyes (/obj/screen): DblClick(null, null, null) -the eyes (/obj/screen): Click(null, "mapwindow.map", "icon-x=25;icon-y=27;left=1;scr...") -Rebooted server. -Running TG Revision Number: 4060. -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: Hugh Jazz (/mob/living/carbon/human) - src: Hugh Jazz (/mob/living/carbon/human) - call stack: -Hugh Jazz (/mob/living/carbon/human): throw at(the floor (112,99,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (122,99,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: Hugh Jazz (/mob/living/carbon/human) - src: Hugh Jazz (/mob/living/carbon/human) - call stack: -Hugh Jazz (/mob/living/carbon/human): throw at(the floor (112,99,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (122,99,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: Hugh Jazz (/mob/living/carbon/human) - src: Hugh Jazz (/mob/living/carbon/human) - call stack: -Hugh Jazz (/mob/living/carbon/human): throw at(the floor (112,99,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (122,99,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: Hugh Jazz (/mob/living/carbon/human) - src: Hugh Jazz (/mob/living/carbon/human) - call stack: -Hugh Jazz (/mob/living/carbon/human): throw at(the floor (112,99,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (122,99,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: Hugh Jazz (/mob/living/carbon/human) - src: Hugh Jazz (/mob/living/carbon/human) - call stack: -Hugh Jazz (/mob/living/carbon/human): throw at(the floor (112,99,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (122,99,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: Hugh Jazz (/mob/living/carbon/human) - src: Hugh Jazz (/mob/living/carbon/human) - call stack: -Hugh Jazz (/mob/living/carbon/human): throw at(the floor (112,99,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (122,99,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: Canister \[Air] (/obj/machinery/portable_atmospherics/canister/air) - call stack: -Canister \[Air] (/obj/machinery/portable_atmospherics/canister/air): throw at(the floor (112,99,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (122,99,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: Paul Wolfe (/mob/living/carbon/human) - src: Paul Wolfe (/mob/living/carbon/human) - call stack: -Paul Wolfe (/mob/living/carbon/human): throw at(the floor (112,99,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (122,99,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: Canister \[Air] (/obj/machinery/portable_atmospherics/canister/air) - call stack: -Canister \[Air] (/obj/machinery/portable_atmospherics/canister/air): throw at(the floor (112,99,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (122,99,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: Canister \[Air] (/obj/machinery/portable_atmospherics/canister/air) - call stack: -Canister \[Air] (/obj/machinery/portable_atmospherics/canister/air): throw at(the floor (112,99,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (122,99,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: Canister \[Air] (/obj/machinery/portable_atmospherics/canister/air) - call stack: -Canister \[Air] (/obj/machinery/portable_atmospherics/canister/air): throw at(the floor (112,99,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (122,99,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: Canister \[Air] (/obj/machinery/portable_atmospherics/canister/air) - call stack: -Canister \[Air] (/obj/machinery/portable_atmospherics/canister/air): throw at(the floor (112,99,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (122,99,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: Canister \[Air] (/obj/machinery/portable_atmospherics/canister/air) - call stack: -Canister \[Air] (/obj/machinery/portable_atmospherics/canister/air): throw at(the floor (112,99,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (122,99,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: Canister: \[O2] (/obj/machinery/portable_atmospherics/canister/oxygen) - call stack: -Canister: \[O2] (/obj/machinery/portable_atmospherics/canister/oxygen): throw at(the floor (112,99,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (122,99,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: Canister \[Air] (/obj/machinery/portable_atmospherics/canister/air) - call stack: -Canister \[Air] (/obj/machinery/portable_atmospherics/canister/air): throw at(the floor (112,99,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (122,99,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: Canister: \[O2] (/obj/machinery/portable_atmospherics/canister/oxygen) - call stack: -Canister: \[O2] (/obj/machinery/portable_atmospherics/canister/oxygen): throw at(the floor (112,99,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (122,99,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: Canister \[Air] (/obj/machinery/portable_atmospherics/canister/air) - call stack: -Canister \[Air] (/obj/machinery/portable_atmospherics/canister/air): throw at(the floor (112,99,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (122,99,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: Canister: \[O2] (/obj/machinery/portable_atmospherics/canister/oxygen) - call stack: -Canister: \[O2] (/obj/machinery/portable_atmospherics/canister/oxygen): throw at(the floor (112,99,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (122,99,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: Canister \[Air] (/obj/machinery/portable_atmospherics/canister/air) - call stack: -Canister \[Air] (/obj/machinery/portable_atmospherics/canister/air): throw at(the floor (112,99,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (122,99,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -Warning: further proc crash messages are being suppressed to prevent overload... -Rebooted server. -Running TG Revision Number: 4060. -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1071 - usr: Dat Bass (/mob/living/carbon/human) - src: Dat Bass (/mob/living/carbon/human) - call stack: -Dat Bass (/mob/living/carbon/human): db click("shoes", 1) -the shoes (/obj/screen): attack hand(Dat Bass (/mob/living/carbon/human), 1) -the shoes (/obj/screen): DblClick(null, null, null) -the shoes (/obj/screen): Click(null, "mapwindow.map", "icon-x=19;icon-y=17;left=1;scr...") -Sat Jul 14 13:19:34 2012 -runtime error: list index out of bounds -proc name: mergeConnectedNetworksOnTurf (/obj/structure/cable/proc/mergeConnectedNetworksOnTurf) - source file: cable.dm,520 - usr: Josue Sandford (/mob/living/carbon/human) - src: the power cable (/obj/structure/cable) - call stack: -the power cable (/obj/structure/cable): mergeConnectedNetworksOnTurf() -the cable coil (/obj/item/cable_coil/orange): turf place(the plating (87,80,1) (/turf/simulated/floor/plating), Josue Sandford (/mob/living/carbon/human)) -the plating (87,80,1) (/turf/simulated/floor/plating): attackby(the cable coil (/obj/item/cable_coil/orange), Josue Sandford (/mob/living/carbon/human)) -the plating (87,80,1) (/turf/simulated/floor/plating): DblClick(the plating (87,80,1) (/turf/simulated/floor/plating), "mapwindow.map", "icon-x=17;icon-y=28;left=1;scr...") -the plating (87,80,1) (/turf/simulated/floor/plating): DblClick(the plating (87,80,1) (/turf/simulated/floor/plating), "mapwindow.map", "icon-x=17;icon-y=28;left=1;scr...") -the plating (87,80,1) (/turf/simulated/floor/plating): Click(the plating (87,80,1) (/turf/simulated/floor/plating), "mapwindow.map", "icon-x=17;icon-y=28;left=1;scr...") -runtime error: Cannot read null.nodes -proc name: merge powernets (/datum/powernet/proc/merge_powernets) - source file: power.dm,401 - usr: Darin Keppel (/mob/living/carbon/human) - src: /datum/powernet (/datum/powernet) - call stack: -/datum/powernet (/datum/powernet): merge powernets(null) -the power cable (/obj/structure/cable): mergeConnectedNetworksOnTurf() -the cable piece (/obj/item/cable_coil): cable join(the power cable (/obj/structure/cable), Darin Keppel (/mob/living/carbon/human)) -the power cable (/obj/structure/cable): attackby(the cable piece (/obj/item/cable_coil), Darin Keppel (/mob/living/carbon/human)) -the power cable (/obj/structure/cable): DblClick(the floor (105,80,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=29;icon-y=17;left=1;scr...") -the power cable (/obj/structure/cable): Click(the floor (105,80,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=29;icon-y=17;left=1;scr...") -runtime error: Cannot read null.total_volume -proc name: attackby (/obj/machinery/reagentgrinder/attackby) - source file: Chemistry-Machinery.dm,751 - usr: Jace Johnson (/mob/living/carbon/human) - src: All-In-One Grinder (/obj/machinery/reagentgrinder) - call stack: -All-In-One Grinder (/obj/machinery/reagentgrinder): attackby(Plant Bag (/obj/item/plantbag), Jace Johnson (/mob/living/carbon/human)) -All-In-One Grinder (/obj/machinery/reagentgrinder): DblClick(the floor (154,134,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=18;icon-y=19;left=1;scr...") -All-In-One Grinder (/obj/machinery/reagentgrinder): Click(the floor (154,134,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=18;icon-y=19;left=1;scr...") -runtime error: Cannot read null.total_volume -proc name: attackby (/obj/machinery/reagentgrinder/attackby) - source file: Chemistry-Machinery.dm,751 - usr: Jace Johnson (/mob/living/carbon/human) - src: All-In-One Grinder (/obj/machinery/reagentgrinder) - call stack: -All-In-One Grinder (/obj/machinery/reagentgrinder): attackby(Plant Bag (/obj/item/plantbag), Jace Johnson (/mob/living/carbon/human)) -All-In-One Grinder (/obj/machinery/reagentgrinder): DblClick(the floor (154,134,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=18;icon-y=19;left=1;scr...") -All-In-One Grinder (/obj/machinery/reagentgrinder): Click(the floor (154,134,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=18;icon-y=19;left=1;scr...") -runtime error: Cannot read null.total_volume -proc name: attackby (/obj/machinery/reagentgrinder/attackby) - source file: Chemistry-Machinery.dm,751 - usr: Jace Johnson (/mob/living/carbon/human) - src: All-In-One Grinder (/obj/machinery/reagentgrinder) - call stack: -All-In-One Grinder (/obj/machinery/reagentgrinder): attackby(Plant Bag (/obj/item/plantbag), Jace Johnson (/mob/living/carbon/human)) -All-In-One Grinder (/obj/machinery/reagentgrinder): DblClick(the floor (154,134,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=18;icon-y=12;left=1;scr...") -All-In-One Grinder (/obj/machinery/reagentgrinder): Click(the floor (154,134,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=18;icon-y=12;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1083 - usr: Travis Robinson (/mob/living/carbon/human) - src: Travis Robinson (/mob/living/carbon/human) - call stack: -Travis Robinson (/mob/living/carbon/human): db click("belt", 0) -the belt (/obj/screen): attack hand(Travis Robinson (/mob/living/carbon/human), 0) -the belt (/obj/screen): DblClick(null, null, null) -the belt (/obj/screen): Click(null, "mapwindow.map", "icon-x=8;icon-y=12;left=1;scre...") -runtime error: Cannot read null.total_volume -proc name: attackby (/obj/machinery/reagentgrinder/attackby) - source file: Chemistry-Machinery.dm,751 - usr: Jace Johnson (/mob/living/carbon/human) - src: All-In-One Grinder (/obj/machinery/reagentgrinder) - call stack: -All-In-One Grinder (/obj/machinery/reagentgrinder): attackby(Plant Bag (/obj/item/plantbag), Jace Johnson (/mob/living/carbon/human)) -All-In-One Grinder (/obj/machinery/reagentgrinder): DblClick(the floor (154,134,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=17;icon-y=16;left=1;scr...") -All-In-One Grinder (/obj/machinery/reagentgrinder): Click(the floor (154,134,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=17;icon-y=16;left=1;scr...") -runtime error: Cannot read null.total_volume -proc name: attackby (/obj/machinery/reagentgrinder/attackby) - source file: Chemistry-Machinery.dm,751 - usr: Jace Johnson (/mob/living/carbon/human) - src: All-In-One Grinder (/obj/machinery/reagentgrinder) - call stack: -All-In-One Grinder (/obj/machinery/reagentgrinder): attackby(Plant Bag (/obj/item/plantbag), Jace Johnson (/mob/living/carbon/human)) -All-In-One Grinder (/obj/machinery/reagentgrinder): DblClick(the floor (154,134,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=18;icon-y=18;left=1;scr...") -All-In-One Grinder (/obj/machinery/reagentgrinder): Click(the floor (154,134,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=18;icon-y=18;left=1;scr...") -Sat Jul 14 14:26:55 2012 -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: Appendicitis (/datum/disease/appendicitis) - call stack: -Appendicitis (/datum/disease/appendicitis): cure(0) -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 - usr: null - src: Appendicitis (/datum/disease/appendicitis) - call stack: -Appendicitis (/datum/disease/appendicitis): cure(0) -Rebooted server. -Running TG Revision Number: 4060. -Denied access to 'Intigracy' connecting from 76.246.55.198 -Sat Jul 14 15:41:50 2012 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Derrick Cobb (/mob/living/carbon/human) - src: Derrick Cobb (/mob/living/carbon/human) - call stack: -Derrick Cobb (/mob/living/carbon/human): db click("id", null) -the id (/obj/screen): attack hand(Derrick Cobb (/mob/living/carbon/human), null) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=19;icon-y=18;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1103 - usr: Derrick Cobb (/mob/living/carbon/human) - src: Derrick Cobb (/mob/living/carbon/human) - call stack: -Derrick Cobb (/mob/living/carbon/human): db click("head", 1) -the head (/obj/screen): attack hand(Derrick Cobb (/mob/living/carbon/human), 1) -the head (/obj/screen): DblClick(null, null, null) -the head (/obj/screen): Click(null, "mapwindow.map", "icon-x=27;icon-y=1;left=1;scre...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Aaden Mitchell (/mob/living/carbon/human) - src: Aaden Mitchell (/mob/living/carbon/human) - call stack: -Aaden Mitchell (/mob/living/carbon/human): db click("id", 0) -the id (/obj/screen): attack hand(Aaden Mitchell (/mob/living/carbon/human), 0) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=18;icon-y=17;left=1;scr...") -runtime error: Cannot create objects of type null. -proc name: Topic (/obj/machinery/computer/rdconsole/Topic) - source file: rdconsole.dm,381 - usr: Cletus Powers (/mob/living/carbon/human) - src: Core R&D Console (/obj/machinery/computer/rdconsole_tg) - call stack: -Core R&D Console (/obj/machinery/computer/rdconsole_tg): Topic("src=\[0x2006613];build=large_G...", /list (/list)) -runtime error: Cannot create objects of type null. -proc name: Topic (/obj/machinery/computer/rdconsole/Topic) - source file: rdconsole.dm,381 - usr: Cletus Powers (/mob/living/carbon/human) - src: Core R&D Console (/obj/machinery/computer/rdconsole_tg) - call stack: -Core R&D Console (/obj/machinery/computer/rdconsole_tg): Topic("src=\[0x2003615];build=large_G...", /list (/list)) -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1048 - usr: Simon Bonkers (/mob/living/carbon/human) - src: Simon Bonkers (/mob/living/carbon/human) - call stack: -Simon Bonkers (/mob/living/carbon/human): db click("o_clothing", 0) -the o_clothing (/obj/screen): attack hand(Simon Bonkers (/mob/living/carbon/human), 0) -the o_clothing (/obj/screen): DblClick(null, null, null) -the o_clothing (/obj/screen): Click(null, "mapwindow.map", "icon-x=23;icon-y=24;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1023 - usr: Hreri Bright-Eyed (/mob/living/carbon/human) - src: Hreri Bright-Eyed (/mob/living/carbon/human) - call stack: -Hreri Bright-Eyed (/mob/living/carbon/human): db click("mask", 1) -the mask (/obj/screen): attack hand(Hreri Bright-Eyed (/mob/living/carbon/human), 1) -the mask (/obj/screen): DblClick(null, null, null) -the mask (/obj/screen): Click(null, "mapwindow.map", "icon-x=17;icon-y=20;left=1;scr...") -Rebooted server. -Sat Jul 14 16:52:03 2012 -Running TG Revision Number: 4060. -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1048 - usr: Micheal Simpson (/mob/living/carbon/human) - src: Micheal Simpson (/mob/living/carbon/human) - call stack: -Micheal Simpson (/mob/living/carbon/human): db click("o_clothing", null) -the o_clothing (/obj/screen): attack hand(Micheal Simpson (/mob/living/carbon/human), null) -the o_clothing (/obj/screen): DblClick(null, null, null) -the o_clothing (/obj/screen): Click(null, "mapwindow.map", "icon-x=17;icon-y=12;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1048 - usr: Micheal Simpson (/mob/living/carbon/human) - src: Micheal Simpson (/mob/living/carbon/human) - call stack: -Micheal Simpson (/mob/living/carbon/human): db click("o_clothing", null) -the o_clothing (/obj/screen): attack hand(Micheal Simpson (/mob/living/carbon/human), null) -the o_clothing (/obj/screen): DblClick(null, null, null) -the o_clothing (/obj/screen): Click(null, "mapwindow.map", "icon-x=14;icon-y=20;left=1;scr...") -runtime error: undefined variable /client/var/loc -proc name: get turf (/proc/get_turf) - source file: helper_procs.dm,38 - usr: the ghost (/mob/dead/observer) - src: null - call stack: -get turf(Akett (/client)) -the ghost (/mob/dead/observer): New(Akett (/client), 0) -Akett (/client): Ghost() -Rebooted server. -Running TG Revision Number: 4060. -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1083 - usr: Jennifer Ketavim (/mob/living/carbon/human) - src: Jennifer Ketavim (/mob/living/carbon/human) - call stack: -Jennifer Ketavim (/mob/living/carbon/human): db click("belt", 1) -the belt (/obj/screen): attack hand(Jennifer Ketavim (/mob/living/carbon/human), 1) -the belt (/obj/screen): DblClick(null, null, null) -the belt (/obj/screen): Click(null, "mapwindow.map", "icon-x=18;icon-y=15;left=1;scr...") -Rebooted server. -Sat Jul 14 17:57:29 2012 -Running TG Revision Number: 4060. -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Bubba Bellton (/mob/living/carbon/human) - src: Bubba Bellton (/mob/living/carbon/human) - call stack: -Bubba Bellton (/mob/living/carbon/human): db click("id", 1) -the id (/obj/screen): attack hand(Bubba Bellton (/mob/living/carbon/human), 1) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=18;icon-y=23;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Bubble (/mob/living/carbon/human) - src: Bubble (/mob/living/carbon/human) - call stack: -Bubble (/mob/living/carbon/human): db click("storage1", null) -the storage1 (/obj/screen): attack hand(Bubble (/mob/living/carbon/human), null) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=11;icon-y=16;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Bubble (/mob/living/carbon/human) - src: Bubble (/mob/living/carbon/human) - call stack: -Bubble (/mob/living/carbon/human): db click("storage1", null) -the storage1 (/obj/screen): attack hand(Bubble (/mob/living/carbon/human), null) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=17;icon-y=16;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1023 - usr: Bartholomew Williams (/mob/living/carbon/human) - src: Bartholomew Williams (/mob/living/carbon/human) - call stack: -Bartholomew Williams (/mob/living/carbon/human): db click("mask", 0) -the mask (/obj/screen): attack hand(Bartholomew Williams (/mob/living/carbon/human), 0) -the mask (/obj/screen): DblClick(null, null, null) -the mask (/obj/screen): Click(null, "mapwindow.map", "icon-x=13;icon-y=15;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1035 - usr: Rusty Fraser (/mob/living/carbon/human) - src: Rusty Fraser (/mob/living/carbon/human) - call stack: -Rusty Fraser (/mob/living/carbon/human): db click("back", null) -the back (/obj/screen): attack hand(Rusty Fraser (/mob/living/carbon/human), null) -the back (/obj/screen): DblClick(null, null, null) -the back (/obj/screen): Click(null, "mapwindow.map", "icon-x=20;icon-y=5;left=1;scre...") -Rebooted server. -Running TG Revision Number: 4060. -Sat Jul 14 19:13:30 2012 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1023 - usr: Derrick Cobb (/mob/living/carbon/human) - src: Derrick Cobb (/mob/living/carbon/human) - call stack: -Derrick Cobb (/mob/living/carbon/human): db click("mask", 1) -the mask (/obj/screen): attack hand(Derrick Cobb (/mob/living/carbon/human), 1) -the mask (/obj/screen): DblClick(null, null, null) -the mask (/obj/screen): Click(null, "mapwindow.map", "icon-x=17;icon-y=29;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1035 - usr: HoP Man (/mob/living/carbon/human) - src: HoP Man (/mob/living/carbon/human) - call stack: -HoP Man (/mob/living/carbon/human): db click("back", 0) -the back (/obj/screen): attack hand(HoP Man (/mob/living/carbon/human), 0) -the back (/obj/screen): DblClick(null, null, null) -the back (/obj/screen): Click(null, "mapwindow.map", "icon-x=4;icon-y=26;left=1;scre...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1035 - usr: HoP Man (/mob/living/carbon/human) - src: HoP Man (/mob/living/carbon/human) - call stack: -HoP Man (/mob/living/carbon/human): db click("back", 0) -the back (/obj/screen): attack hand(HoP Man (/mob/living/carbon/human), 0) -the back (/obj/screen): DblClick(null, null, null) -the back (/obj/screen): Click(null, "mapwindow.map", "icon-x=8;icon-y=26;left=1;scre...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1035 - usr: HoP Man (/mob/living/carbon/human) - src: HoP Man (/mob/living/carbon/human) - call stack: -HoP Man (/mob/living/carbon/human): db click("back", 0) -the back (/obj/screen): attack hand(HoP Man (/mob/living/carbon/human), 0) -the back (/obj/screen): DblClick(null, "mapwindow.map", "icon-x=8;icon-y=26;left=1;scre...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1035 - usr: HoP Man (/mob/living/carbon/human) - src: HoP Man (/mob/living/carbon/human) - call stack: -HoP Man (/mob/living/carbon/human): db click("back", 0) -the back (/obj/screen): attack hand(HoP Man (/mob/living/carbon/human), 0) -the back (/obj/screen): DblClick(null, null, null) -the back (/obj/screen): Click(null, "mapwindow.map", "icon-x=8;icon-y=26;left=1;shif...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1035 - usr: HoP Man (/mob/living/carbon/human) - src: HoP Man (/mob/living/carbon/human) - call stack: -HoP Man (/mob/living/carbon/human): db click("back", 0) -the back (/obj/screen): attack hand(HoP Man (/mob/living/carbon/human), 0) -the back (/obj/screen): DblClick(null, null, null) -the back (/obj/screen): Click(null, "mapwindow.map", "icon-x=8;icon-y=26;left=1;ctrl...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1035 - usr: HoP Man (/mob/living/carbon/human) - src: HoP Man (/mob/living/carbon/human) - call stack: -HoP Man (/mob/living/carbon/human): db click("back", 0) -the back (/obj/screen): attack hand(HoP Man (/mob/living/carbon/human), 0) -the back (/obj/screen): DblClick(null, null, null) -the back (/obj/screen): Click(null, "mapwindow.map", "icon-x=3;icon-y=17;left=1;scre...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1083 - usr: Earl Swabby (/mob/living/carbon/human) - src: Earl Swabby (/mob/living/carbon/human) - call stack: -Earl Swabby (/mob/living/carbon/human): db click("belt", 1) -the belt (/obj/screen): attack hand(Earl Swabby (/mob/living/carbon/human), 1) -the belt (/obj/screen): DblClick(null, null, null) -the belt (/obj/screen): Click(null, "mapwindow.map", "icon-x=12;icon-y=12;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1048 - usr: Slimeria (/mob/living/carbon/human) - src: Slimeria (/mob/living/carbon/human) - call stack: -Slimeria (/mob/living/carbon/human): db click("o_clothing", 1) -the o_clothing (/obj/screen): attack hand(Slimeria (/mob/living/carbon/human), 1) -the o_clothing (/obj/screen): DblClick(null, null, null) -the o_clothing (/obj/screen): Click(null, "mapwindow.map", "icon-x=28;icon-y=9;left=1;scre...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: River Pavlov (/mob/living/carbon/human) - src: River Pavlov (/mob/living/carbon/human) - call stack: -River Pavlov (/mob/living/carbon/human): db click("id", 0) -the id (/obj/screen): attack hand(River Pavlov (/mob/living/carbon/human), 0) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=10;icon-y=15;left=1;scr...") -runtime error: list index out of bounds -proc name: mergeConnectedNetworksOnTurf (/obj/structure/cable/proc/mergeConnectedNetworksOnTurf) - source file: cable.dm,501 - usr: Tyrion Lannister (/mob/living/carbon/human) - src: the power cable (/obj/structure/cable) - call stack: -the power cable (/obj/structure/cable): mergeConnectedNetworksOnTurf() -the cable piece (/obj/item/cable_coil): cable join(the power cable (/obj/structure/cable), Tyrion Lannister (/mob/living/carbon/human)) -the power cable (/obj/structure/cable): attackby(the cable piece (/obj/item/cable_coil), Tyrion Lannister (/mob/living/carbon/human)) -the power cable (/obj/structure/cable): DblClick(the floor (174,138,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=16;icon-y=17;left=1;scr...") -the power cable (/obj/structure/cable): Click(the floor (174,138,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=16;icon-y=17;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1083 - usr: Slimeria (/mob/living/carbon/human) - src: Slimeria (/mob/living/carbon/human) - call stack: -Slimeria (/mob/living/carbon/human): db click("belt", 0) -the belt (/obj/screen): attack hand(Slimeria (/mob/living/carbon/human), 0) -the belt (/obj/screen): DblClick(null, null, null) -the belt (/obj/screen): Click(null, "mapwindow.map", "icon-x=13;icon-y=24;left=1;scr...") -Sat Jul 14 20:29:42 2012 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Urist McAssistant (/mob/living/carbon/human) - src: Urist McAssistant (/mob/living/carbon/human) - call stack: -Urist McAssistant (/mob/living/carbon/human): db click("storage1", 0) -the storage1 (/obj/screen): attack hand(Urist McAssistant (/mob/living/carbon/human), 0) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=19;icon-y=17;left=1;scr...") -Rebooted server. -Running TG Revision Number: 4060. -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1048 - usr: Jennifer Ketavim (/mob/living/carbon/human) - src: Jennifer Ketavim (/mob/living/carbon/human) - call stack: -Jennifer Ketavim (/mob/living/carbon/human): db click("o_clothing", 0) -the o_clothing (/obj/screen): attack hand(Jennifer Ketavim (/mob/living/carbon/human), 0) -the o_clothing (/obj/screen): DblClick(null, null, null) -the o_clothing (/obj/screen): Click(null, "mapwindow.map", "icon-x=11;icon-y=5;left=1;scre...") -Sat Jul 14 21:49:49 2012 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Jennifer Ketavim (/mob/living/carbon/human) - src: Jennifer Ketavim (/mob/living/carbon/human) - call stack: -Jennifer Ketavim (/mob/living/carbon/human): db click("storage1", 0) -the storage1 (/obj/screen): attack hand(Jennifer Ketavim (/mob/living/carbon/human), 0) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=30;icon-y=20;left=1;scr...") -runtime error: Cannot read null.fields -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,263 - usr: Wintermute (/mob/living/silicon/ai) - src: null - call stack: -mergeRecordLists(/list (/list), /list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -Security Records (/obj/machinery/computer/secure_data): attack hand(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): attack ai(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): updateUsrDialog() -Security Records (/obj/machinery/computer/secure_data): Topic("src=\[0x2008e1c];choice=Return", /list (/list)) -Saar Cavaliers (/client): Topic("src=\[0x2008e1c];choice=Return", /list (/list), Security Records (/obj/machinery/computer/secure_data)) -runtime error: Cannot read null.len -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,260 - usr: Wintermute (/mob/living/silicon/ai) - src: null - call stack: -mergeRecordLists(null, /list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -Security Records (/obj/machinery/computer/secure_data): attack hand(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): attack ai(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): updateUsrDialog() -Security Records (/obj/machinery/computer/secure_data): Topic("src=\[0x2008e1c];choice=Return", /list (/list)) -Saar Cavaliers (/client): Topic("src=\[0x2008e1c];choice=Return", /list (/list), Security Records (/obj/machinery/computer/secure_data)) -runtime error: Cannot read null.len -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,260 - usr: Wintermute (/mob/living/silicon/ai) - src: null - call stack: -mergeRecordLists(null, /list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -Security Records (/obj/machinery/computer/secure_data): attack hand(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): attack ai(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): updateUsrDialog() -Security Records (/obj/machinery/computer/secure_data): Topic("src=\[0x2008e1c];choice=Return", /list (/list)) -Saar Cavaliers (/client): Topic("src=\[0x2008e1c];choice=Return", /list (/list), Security Records (/obj/machinery/computer/secure_data)) -runtime error: Cannot read null.len -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,260 - usr: Wintermute (/mob/living/silicon/ai) - src: null - call stack: -mergeRecordLists(null, /list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -Security Records (/obj/machinery/computer/secure_data): attack hand(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): attack ai(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): updateUsrDialog() -Security Records (/obj/machinery/computer/secure_data): Topic("src=\[0x2008e1c];choice=Return", /list (/list)) -Saar Cavaliers (/client): Topic("src=\[0x2008e1c];choice=Return", /list (/list), Security Records (/obj/machinery/computer/secure_data)) -runtime error: Cannot read null.len -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,260 - usr: Wintermute (/mob/living/silicon/ai) - src: null - call stack: -mergeRecordLists(null, /list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -Security Records (/obj/machinery/computer/secure_data): attack hand(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): attack ai(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): updateUsrDialog() -Security Records (/obj/machinery/computer/secure_data): Topic("src=\[0x2008e1c];choice=Return", /list (/list)) -Saar Cavaliers (/client): Topic("src=\[0x2008e1c];choice=Return", /list (/list), Security Records (/obj/machinery/computer/secure_data)) -runtime error: Cannot read null.fields -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,263 - usr: Wintermute (/mob/living/silicon/ai) - src: null - call stack: -mergeRecordLists(/list (/list), /list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -Security Records (/obj/machinery/computer/secure_data): attack hand(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): attack ai(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): updateUsrDialog() -Security Records (/obj/machinery/computer/secure_data): Topic("src=\[0x2008e1c];choice=Log%20...", /list (/list)) -Saar Cavaliers (/client): Topic("src=\[0x2008e1c];choice=Log%20...", /list (/list), Security Records (/obj/machinery/computer/secure_data)) -runtime error: Cannot read null.len -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,260 - usr: Wintermute (/mob/living/silicon/ai) - src: null - call stack: -mergeRecordLists(null, /list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -Security Records (/obj/machinery/computer/secure_data): attack hand(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): attack ai(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): updateUsrDialog() -Security Records (/obj/machinery/computer/secure_data): Topic("src=\[0x2008e1c];choice=Log%20...", /list (/list)) -Saar Cavaliers (/client): Topic("src=\[0x2008e1c];choice=Log%20...", /list (/list), Security Records (/obj/machinery/computer/secure_data)) -runtime error: Cannot read null.len -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,260 - usr: Wintermute (/mob/living/silicon/ai) - src: null - call stack: -mergeRecordLists(null, /list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -Security Records (/obj/machinery/computer/secure_data): attack hand(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): attack ai(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): updateUsrDialog() -Security Records (/obj/machinery/computer/secure_data): Topic("src=\[0x2008e1c];choice=Log%20...", /list (/list)) -Saar Cavaliers (/client): Topic("src=\[0x2008e1c];choice=Log%20...", /list (/list), Security Records (/obj/machinery/computer/secure_data)) -runtime error: Cannot read null.len -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,260 - usr: Wintermute (/mob/living/silicon/ai) - src: null - call stack: -mergeRecordLists(null, /list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -Security Records (/obj/machinery/computer/secure_data): attack hand(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): attack ai(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): updateUsrDialog() -Security Records (/obj/machinery/computer/secure_data): Topic("src=\[0x2008e1c];choice=Log%20...", /list (/list)) -Saar Cavaliers (/client): Topic("src=\[0x2008e1c];choice=Log%20...", /list (/list), Security Records (/obj/machinery/computer/secure_data)) -runtime error: Cannot read null.len -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,260 - usr: Wintermute (/mob/living/silicon/ai) - src: null - call stack: -mergeRecordLists(null, /list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -Security Records (/obj/machinery/computer/secure_data): attack hand(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): attack ai(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): updateUsrDialog() -Security Records (/obj/machinery/computer/secure_data): Topic("src=\[0x2008e1c];choice=Log%20...", /list (/list)) -Saar Cavaliers (/client): Topic("src=\[0x2008e1c];choice=Log%20...", /list (/list), Security Records (/obj/machinery/computer/secure_data)) -runtime error: Cannot read null.fields -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,263 - usr: Wintermute (/mob/living/silicon/ai) - src: null - call stack: -mergeRecordLists(/list (/list), /list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -Security Records (/obj/machinery/computer/secure_data): attack hand(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): attack ai(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): updateUsrDialog() -Security Records (/obj/machinery/computer/secure_data): Topic("src=\[0x2008e1c];choice=Return", /list (/list)) -Saar Cavaliers (/client): Topic("src=\[0x2008e1c];choice=Return", /list (/list), Security Records (/obj/machinery/computer/secure_data)) -runtime error: Cannot read null.len -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,260 - usr: Wintermute (/mob/living/silicon/ai) - src: null - call stack: -mergeRecordLists(null, /list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -Security Records (/obj/machinery/computer/secure_data): attack hand(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): attack ai(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): updateUsrDialog() -Security Records (/obj/machinery/computer/secure_data): Topic("src=\[0x2008e1c];choice=Return", /list (/list)) -Saar Cavaliers (/client): Topic("src=\[0x2008e1c];choice=Return", /list (/list), Security Records (/obj/machinery/computer/secure_data)) -runtime error: Cannot read null.len -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,260 - usr: Wintermute (/mob/living/silicon/ai) - src: null - call stack: -mergeRecordLists(null, /list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -Security Records (/obj/machinery/computer/secure_data): attack hand(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): attack ai(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): updateUsrDialog() -Security Records (/obj/machinery/computer/secure_data): Topic("src=\[0x2008e1c];choice=Return", /list (/list)) -Saar Cavaliers (/client): Topic("src=\[0x2008e1c];choice=Return", /list (/list), Security Records (/obj/machinery/computer/secure_data)) -runtime error: Cannot read null.len -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,260 - usr: Wintermute (/mob/living/silicon/ai) - src: null - call stack: -mergeRecordLists(null, /list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -Security Records (/obj/machinery/computer/secure_data): attack hand(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): attack ai(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): updateUsrDialog() -Security Records (/obj/machinery/computer/secure_data): Topic("src=\[0x2008e1c];choice=Return", /list (/list)) -Saar Cavaliers (/client): Topic("src=\[0x2008e1c];choice=Return", /list (/list), Security Records (/obj/machinery/computer/secure_data)) -runtime error: Cannot read null.len -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,260 - usr: Wintermute (/mob/living/silicon/ai) - src: null - call stack: -mergeRecordLists(null, /list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -Security Records (/obj/machinery/computer/secure_data): attack hand(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): attack ai(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): updateUsrDialog() -Security Records (/obj/machinery/computer/secure_data): Topic("src=\[0x2008e1c];choice=Return", /list (/list)) -Saar Cavaliers (/client): Topic("src=\[0x2008e1c];choice=Return", /list (/list), Security Records (/obj/machinery/computer/secure_data)) -runtime error: Cannot read null.fields -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,263 - usr: Wintermute (/mob/living/silicon/ai) - src: null - call stack: -mergeRecordLists(/list (/list), /list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -Security Records (/obj/machinery/computer/secure_data): attack hand(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): attack ai(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): updateUsrDialog() -Security Records (/obj/machinery/computer/secure_data): Topic("src=\[0x2008e1c];choice=New%20...", /list (/list)) -Saar Cavaliers (/client): Topic("src=\[0x2008e1c];choice=New%20...", /list (/list), Security Records (/obj/machinery/computer/secure_data)) -runtime error: Cannot read null.len -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,260 - usr: Wintermute (/mob/living/silicon/ai) - src: null - call stack: -mergeRecordLists(null, /list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -sortRecord(/list (/list), "name", 1) -Security Records (/obj/machinery/computer/secure_data): attack hand(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): attack ai(Wintermute (/mob/living/silicon/ai)) -Security Records (/obj/machinery/computer/secure_data): updateUsrDialog() -Security Records (/obj/machinery/computer/secure_data): Topic("src=\[0x2008e1c];choice=New%20...", /list (/list)) -Saar Cavaliers (/client): Topic("src=\[0x2008e1c];choice=New%20...", /list (/list), Security Records (/obj/machinery/computer/secure_data)) -runtime error: Cannot read null.len -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,260 -runtime error: Cannot read null.len -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,260 -runtime error: Cannot read null.len -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,260 -runtime error: Cannot read null.flags -proc name: relaymove (/obj/effect/dummy/spell_jaunt/relaymove) - source file: ethereal_jaunt.dm,81 -runtime error: Cannot read null.flags -proc name: relaymove (/obj/effect/dummy/spell_jaunt/relaymove) - source file: ethereal_jaunt.dm,81 -runtime error: Cannot read null.flags -proc name: relaymove (/obj/effect/dummy/spell_jaunt/relaymove) - source file: ethereal_jaunt.dm,81 -runtime error: Cannot read null.flags -proc name: relaymove (/obj/effect/dummy/spell_jaunt/relaymove) - source file: ethereal_jaunt.dm,81 -runtime error: Cannot read null.flags -proc name: relaymove (/obj/effect/dummy/spell_jaunt/relaymove) - source file: ethereal_jaunt.dm,81 -runtime error: Cannot read null.flags -proc name: relaymove (/obj/effect/dummy/spell_jaunt/relaymove) - source file: ethereal_jaunt.dm,81 -runtime error: Cannot read null.flags -proc name: relaymove (/obj/effect/dummy/spell_jaunt/relaymove) - source file: ethereal_jaunt.dm,81 -runtime error: Cannot read null.flags -proc name: relaymove (/obj/effect/dummy/spell_jaunt/relaymove) - source file: ethereal_jaunt.dm,81 -runtime error: Cannot read null.flags -proc name: relaymove (/obj/effect/dummy/spell_jaunt/relaymove) - source file: ethereal_jaunt.dm,81 -runtime error: Cannot read null.flags -proc name: relaymove (/obj/effect/dummy/spell_jaunt/relaymove) - source file: ethereal_jaunt.dm,81 -runtime error: Cannot read null.flags -proc name: relaymove (/obj/effect/dummy/spell_jaunt/relaymove) - source file: ethereal_jaunt.dm,81 -runtime error: Cannot read null.flags -proc name: relaymove (/obj/effect/dummy/spell_jaunt/relaymove) - source file: ethereal_jaunt.dm,81 -runtime error: Cannot read null.flags -proc name: relaymove (/obj/effect/dummy/spell_jaunt/relaymove) - source file: ethereal_jaunt.dm,81 -runtime error: Cannot read null.flags -proc name: relaymove (/obj/effect/dummy/spell_jaunt/relaymove) - source file: ethereal_jaunt.dm,81 -runtime error: Cannot read null.flags -proc name: relaymove (/obj/effect/dummy/spell_jaunt/relaymove) - source file: ethereal_jaunt.dm,81 -runtime error: Cannot read null.flags -proc name: relaymove (/obj/effect/dummy/spell_jaunt/relaymove) - source file: ethereal_jaunt.dm,81 -runtime error: Cannot read null.flags -proc name: relaymove (/obj/effect/dummy/spell_jaunt/relaymove) - source file: ethereal_jaunt.dm,81 -runtime error: Cannot read null.flags -proc name: relaymove (/obj/effect/dummy/spell_jaunt/relaymove) - source file: ethereal_jaunt.dm,81 -runtime error: Cannot read null.flags -proc name: relaymove (/obj/effect/dummy/spell_jaunt/relaymove) - source file: ethereal_jaunt.dm,81 -runtime error: Cannot read null.flags -proc name: relaymove (/obj/effect/dummy/spell_jaunt/relaymove) - source file: ethereal_jaunt.dm,81 -runtime error: Cannot read null.flags -proc name: relaymove (/obj/effect/dummy/spell_jaunt/relaymove) - source file: ethereal_jaunt.dm,81 -runtime error: Cannot read null.flags -proc name: relaymove (/obj/effect/dummy/spell_jaunt/relaymove) - source file: ethereal_jaunt.dm,81 -runtime error: Cannot read null.flags -proc name: relaymove (/obj/effect/dummy/spell_jaunt/relaymove) - source file: ethereal_jaunt.dm,81 -runtime error: Cannot read null.flags -proc name: relaymove (/obj/effect/dummy/spell_jaunt/relaymove) - source file: ethereal_jaunt.dm,81 -runtime error: Cannot read null.flags -proc name: relaymove (/obj/effect/dummy/spell_jaunt/relaymove) - source file: ethereal_jaunt.dm,81 -runtime error: undefined variable /client/var/loc -proc name: get turf (/proc/get_turf) - source file: helper_procs.dm,38 -runtime error: Cannot read null.fields -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,263 -runtime error: Cannot read null.len -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,260 -runtime error: Cannot read null.len -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,260 -runtime error: Cannot read null.len -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,260 -runtime error: Cannot read null.len -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,260 -runtime error: Cannot read null.fields -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,263 -runtime error: Cannot read null.len -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,260 -runtime error: Cannot read null.len -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,260 -runtime error: Cannot read null.len -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,260 -runtime error: Cannot read null.len -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,260 -runtime error: Cannot read null.reagents -proc name: fire syringe (/obj/item/gun/syringe/proc/fire_syringe) - source file: Chemistry-Tools.dm,462 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1048 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1048 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1048 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 -Rebooted server. -Running TG Revision Number: 4060. -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Reuben Garratt (/mob/living/carbon/human) - src: Reuben Garratt (/mob/living/carbon/human) - call stack: -Reuben Garratt (/mob/living/carbon/human): db click("id", null) -the id (/obj/screen): attack hand(Reuben Garratt (/mob/living/carbon/human), null) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=16;icon-y=15;left=1;scr...") -Sat Jul 14 23:05:19 2012 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Alice Ravensdale (/mob/living/carbon/human) - src: Alice Ravensdale (/mob/living/carbon/human) - call stack: -Alice Ravensdale (/mob/living/carbon/human): db click("storage1", 0) -the storage1 (/obj/screen): attack hand(Alice Ravensdale (/mob/living/carbon/human), 0) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=17;icon-y=18;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1048 - usr: Eric Hunter (/mob/living/carbon/human) - src: Eric Hunter (/mob/living/carbon/human) - call stack: -Eric Hunter (/mob/living/carbon/human): db click("o_clothing", 1) -the o_clothing (/obj/screen): attack hand(Eric Hunter (/mob/living/carbon/human), 1) -the o_clothing (/obj/screen): DblClick(null, null, null) -the o_clothing (/obj/screen): Click(null, "mapwindow.map", "icon-x=25;icon-y=14;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Samuel York (/mob/living/carbon/human) - src: Samuel York (/mob/living/carbon/human) - call stack: -Samuel York (/mob/living/carbon/human): db click("id", 0) -the id (/obj/screen): attack hand(Samuel York (/mob/living/carbon/human), 0) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=13;icon-y=15;left=1;scr...") -Rebooted server. -Running TG Revision Number: 4060. -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1103 - usr: MCEyePop (/mob/living/carbon/human) - src: MCEyePop (/mob/living/carbon/human) - call stack: -MCEyePop (/mob/living/carbon/human): db click("head", 1) -the head (/obj/screen): attack hand(MCEyePop (/mob/living/carbon/human), 1) -the head (/obj/screen): DblClick(null, null, null) -the head (/obj/screen): Click(null, "mapwindow.map", "icon-x=25;icon-y=11;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Unknown (/mob/living/carbon/human) - src: Unknown (/mob/living/carbon/human) - call stack: -Unknown (/mob/living/carbon/human): db click("id", 0) -the id (/obj/screen): attack hand(Unknown (/mob/living/carbon/human), 0) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=29;icon-y=17;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Unknown (/mob/living/carbon/human) - src: Unknown (/mob/living/carbon/human) - call stack: -Unknown (/mob/living/carbon/human): db click("id", 0) -the id (/obj/screen): attack hand(Unknown (/mob/living/carbon/human), 0) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=19;icon-y=21;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Unknown (/mob/living/carbon/human) - src: Unknown (/mob/living/carbon/human) - call stack: -Unknown (/mob/living/carbon/human): db click("id", 0) -the id (/obj/screen): attack hand(Unknown (/mob/living/carbon/human), 0) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=19;icon-y=21;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1083 - usr: Alexander Delapour (/mob/living/carbon/human) - src: Alexander Delapour (/mob/living/carbon/human) - call stack: -Alexander Delapour (/mob/living/carbon/human): db click("belt", 1) -the belt (/obj/screen): attack hand(Alexander Delapour (/mob/living/carbon/human), 1) -the belt (/obj/screen): DblClick(null, null, null) -the belt (/obj/screen): Click(null, "mapwindow.map", "icon-x=23;icon-y=13;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1035 - usr: Roman Sheets (/mob/living/carbon/human) - src: Roman Sheets (/mob/living/carbon/human) - call stack: -Roman Sheets (/mob/living/carbon/human): db click("back", null) -the back (/obj/screen): attack hand(Roman Sheets (/mob/living/carbon/human), null) -the back (/obj/screen): DblClick(null, null, null) -the back (/obj/screen): Click(null, "mapwindow.map", "icon-x=10;icon-y=12;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1127 - usr: Roman Sheets (/mob/living/carbon/human) - src: Roman Sheets (/mob/living/carbon/human) - call stack: -Roman Sheets (/mob/living/carbon/human): db click("i_clothing", 0) -the i_clothing (/obj/screen): attack hand(Roman Sheets (/mob/living/carbon/human), 0) -the i_clothing (/obj/screen): DblClick(null, null, null) -the i_clothing (/obj/screen): Click(null, "mapwindow.map", "icon-x=13;icon-y=18;left=1;scr...") -Sun Jul 15 00:17:04 2012 -runtime error: unexpected stat -proc name: Stat (/mob/living/silicon/robot/Stat) - source file: robot.dm,227 - usr: Iroquois Pliskin (/mob/living/carbon/human) - src: Miner Cyborg -770 (/mob/living/silicon/robot) - call stack: -Miner Cyborg -770 (/mob/living/silicon/robot): Stat() -Borg module reset board (/obj/item/borg/upgrade/reset): action(Miner Cyborg -770 (/mob/living/silicon/robot)) -Borg module reset board (/obj/item/borg/upgrade/reset): action(Miner Cyborg -770 (/mob/living/silicon/robot)) -Miner Cyborg -770 (/mob/living/silicon/robot): attackby(Borg module reset board (/obj/item/borg/upgrade/reset), Iroquois Pliskin (/mob/living/carbon/human)) -Miner Cyborg -770 (/mob/living/silicon/robot): DblClick(the floor (98,88,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=16;icon-y=10;left=1;scr...") -Miner Cyborg -770 (/mob/living/silicon/robot): Click(the floor (98,88,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=16;icon-y=10;left=1;scr...") -runtime error: unexpected stat -proc name: Stat (/mob/living/silicon/robot/Stat) - source file: robot.dm,227 - usr: Iroquois Pliskin (/mob/living/carbon/human) - src: Engineering Cyborg 770 (/mob/living/silicon/robot) - call stack: -Engineering Cyborg 770 (/mob/living/silicon/robot): Stat() -Borg VTEC Module (/obj/item/borg/upgrade/vtec): action(Engineering Cyborg 770 (/mob/living/silicon/robot)) -Borg VTEC Module (/obj/item/borg/upgrade/vtec): action(Engineering Cyborg 770 (/mob/living/silicon/robot)) -Engineering Cyborg 770 (/mob/living/silicon/robot): attackby(Borg VTEC Module (/obj/item/borg/upgrade/vtec), Iroquois Pliskin (/mob/living/carbon/human)) -Engineering Cyborg 770 (/mob/living/silicon/robot): DblClick(the floor (98,87,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=17;icon-y=12;left=1;scr...") -Engineering Cyborg 770 (/mob/living/silicon/robot): Click(the floor (98,87,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=17;icon-y=12;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1083 - usr: MCEyePop (/mob/living/carbon/human) - src: MCEyePop (/mob/living/carbon/human) - call stack: -MCEyePop (/mob/living/carbon/human): db click("belt", 1) -the belt (/obj/screen): attack hand(MCEyePop (/mob/living/carbon/human), 1) -the belt (/obj/screen): DblClick(null, null, null) -the belt (/obj/screen): Click(null, "mapwindow.map", "icon-x=15;icon-y=16;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: MCEyePop (/mob/living/carbon/human) - src: MCEyePop (/mob/living/carbon/human) - call stack: -MCEyePop (/mob/living/carbon/human): db click("storage1", 1) -the storage1 (/obj/screen): attack hand(MCEyePop (/mob/living/carbon/human), 1) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=15;icon-y=13;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1035 - usr: Roman Sheets as (Petrov Petrov... (/mob/living/carbon/human) - src: Roman Sheets as (Petrov Petrov... (/mob/living/carbon/human) - call stack: -Roman Sheets as (Petrov Petrov... (/mob/living/carbon/human): db click("back", 1) -the back (/obj/screen): attack hand(Roman Sheets as (Petrov Petrov... (/mob/living/carbon/human), 1) -the back (/obj/screen): DblClick(null, null, null) -the back (/obj/screen): Click(null, "mapwindow.map", "icon-x=16;icon-y=13;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Earl Swabby (/mob/living/carbon/human) - src: Earl Swabby (/mob/living/carbon/human) - call stack: -Earl Swabby (/mob/living/carbon/human): db click("storage1", null) -the storage1 (/obj/screen): attack hand(Earl Swabby (/mob/living/carbon/human), null) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=5;icon-y=19;left=1;scre...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1023 - usr: Smoke Shaw (/mob/living/carbon/human) - src: Smoke Shaw (/mob/living/carbon/human) - call stack: -Smoke Shaw (/mob/living/carbon/human): db click("mask", 0) -the mask (/obj/screen): attack hand(Smoke Shaw (/mob/living/carbon/human), 0) -the mask (/obj/screen): DblClick(null, null, null) -the mask (/obj/screen): Click(null, "mapwindow.map", "icon-x=21;icon-y=13;left=1;scr...") -runtime error: Cannot read null.reagents -proc name: attackby (/obj/machinery/reagentgrinder/attackby) - source file: Chemistry-Machinery.dm,748 - usr: Dutch Hargrave (/mob/living/carbon/human) - src: All-In-One Grinder (/obj/machinery/reagentgrinder) - call stack: -All-In-One Grinder (/obj/machinery/reagentgrinder): attackby(Plant Bag (/obj/item/plantbag), Dutch Hargrave (/mob/living/carbon/human)) -All-In-One Grinder (/obj/machinery/reagentgrinder): DblClick(the floor (154,134,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=18;icon-y=11;left=1;scr...") -All-In-One Grinder (/obj/machinery/reagentgrinder): Click(the floor (154,134,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=18;icon-y=11;left=1;scr...") -runtime error: Cannot read null.reagents -proc name: attackby (/obj/machinery/reagentgrinder/attackby) - source file: Chemistry-Machinery.dm,748 - usr: Dutch Hargrave (/mob/living/carbon/human) - src: All-In-One Grinder (/obj/machinery/reagentgrinder) - call stack: -All-In-One Grinder (/obj/machinery/reagentgrinder): attackby(Plant Bag (/obj/item/plantbag), Dutch Hargrave (/mob/living/carbon/human)) -All-In-One Grinder (/obj/machinery/reagentgrinder): DblClick(the floor (154,134,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=17;icon-y=6;left=1;scre...") -All-In-One Grinder (/obj/machinery/reagentgrinder): Click(the floor (154,134,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=17;icon-y=6;left=1;scre...") -runtime error: Cannot read null.total_volume -proc name: attackby (/obj/machinery/reagentgrinder/attackby) - source file: Chemistry-Machinery.dm,751 - usr: Dutch Hargrave (/mob/living/carbon/human) - src: All-In-One Grinder (/obj/machinery/reagentgrinder) - call stack: -All-In-One Grinder (/obj/machinery/reagentgrinder): attackby(Plant Bag (/obj/item/plantbag), Dutch Hargrave (/mob/living/carbon/human)) -All-In-One Grinder (/obj/machinery/reagentgrinder): DblClick(the floor (154,134,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=20;icon-y=6;left=1;scre...") -All-In-One Grinder (/obj/machinery/reagentgrinder): Click(the floor (154,134,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=20;icon-y=6;left=1;scre...") -Rebooted server. -Running TG Revision Number: 4060. -Sun Jul 15 01:27:07 2012 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: the emergency closet (/obj/structure/closet/emcloset) - call stack: -the emergency closet (/obj/structure/closet/emcloset): throw at(the floor (172,138,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (182,138,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: the emergency closet (/obj/structure/closet/emcloset) - call stack: -the emergency closet (/obj/structure/closet/emcloset): throw at(the floor (172,138,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (182,138,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: the emergency closet (/obj/structure/closet/emcloset) - call stack: -the emergency closet (/obj/structure/closet/emcloset): throw at(the floor (172,138,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (182,138,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: the emergency closet (/obj/structure/closet/emcloset) - call stack: -the emergency closet (/obj/structure/closet/emcloset): throw at(the floor (172,138,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (182,138,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: the emergency closet (/obj/structure/closet/emcloset) - call stack: -the emergency closet (/obj/structure/closet/emcloset): throw at(the floor (172,138,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (182,138,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: the emergency closet (/obj/structure/closet/emcloset) - call stack: -the emergency closet (/obj/structure/closet/emcloset): throw at(the floor (172,138,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (182,138,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: the emergency closet (/obj/structure/closet/emcloset) - call stack: -the emergency closet (/obj/structure/closet/emcloset): throw at(the floor (172,138,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (182,138,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: the emergency closet (/obj/structure/closet/emcloset) - call stack: -the emergency closet (/obj/structure/closet/emcloset): throw at(the floor (172,138,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (182,138,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: the emergency closet (/obj/structure/closet/emcloset) - call stack: -the emergency closet (/obj/structure/closet/emcloset): throw at(the floor (172,138,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (182,138,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: the emergency closet (/obj/structure/closet/emcloset) - call stack: -the emergency closet (/obj/structure/closet/emcloset): throw at(the floor (172,138,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (182,138,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: the emergency closet (/obj/structure/closet/emcloset) - call stack: -the emergency closet (/obj/structure/closet/emcloset): throw at(the floor (172,138,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (182,138,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: the emergency closet (/obj/structure/closet/emcloset) - call stack: -the emergency closet (/obj/structure/closet/emcloset): throw at(the floor (172,138,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (182,138,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: Crate (/obj/structure/closet/crate) - call stack: -Crate (/obj/structure/closet/crate): throw at(the floor (172,138,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (182,138,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: the emergency closet (/obj/structure/closet/emcloset) - call stack: -the emergency closet (/obj/structure/closet/emcloset): throw at(the floor (172,138,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (182,138,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: the emergency closet (/obj/structure/closet/emcloset) - call stack: -the emergency closet (/obj/structure/closet/emcloset): throw at(the floor (172,138,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (182,138,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: Crate (/obj/structure/closet/crate) - call stack: -Crate (/obj/structure/closet/crate): throw at(the floor (172,138,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (182,138,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: the emergency closet (/obj/structure/closet/emcloset) - call stack: -the emergency closet (/obj/structure/closet/emcloset): throw at(the floor (172,138,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (182,138,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: the emergency closet (/obj/structure/closet/emcloset) - call stack: -the emergency closet (/obj/structure/closet/emcloset): throw at(the floor (172,138,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (182,138,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: 0 - src: Crate (/obj/structure/closet/crate) - call stack: -Crate (/obj/structure/closet/crate): throw at(the floor (172,138,1) (/turf/simulated/floor), 100, 1) -the disposal pipe (/obj/structure/disposalpipe/trunk): expel(null, the floor (182,138,1) (/turf/simulated/floor), 8) -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 -Warning: further proc crash messages are being suppressed to prevent overload... -Rebooted server. -Sun Jul 15 02:33:41 2012 -Running TG Revision Number: 4060. -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1166 - usr: Earl Swabby (/mob/living/carbon/human) - src: Earl Swabby (/mob/living/carbon/human) - call stack: -Earl Swabby (/mob/living/carbon/human): db click("storage2", null) -the storage2 (/obj/screen): attack hand(Earl Swabby (/mob/living/carbon/human), null) -the storage2 (/obj/screen): DblClick(null, null, null) -the storage2 (/obj/screen): Click(null, "mapwindow.map", "icon-x=11;icon-y=23;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1093 - usr: Lord Gwyn (/mob/living/carbon/human) - src: Lord Gwyn (/mob/living/carbon/human) - call stack: -Lord Gwyn (/mob/living/carbon/human): db click("eyes", 1) -the eyes (/obj/screen): attack hand(Lord Gwyn (/mob/living/carbon/human), 1) -the eyes (/obj/screen): DblClick(null, null, null) -the eyes (/obj/screen): Click(null, "mapwindow.map", "icon-x=9;icon-y=18;left=1;scre...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Crunk Junksworth (/mob/living/carbon/human) - src: Crunk Junksworth (/mob/living/carbon/human) - call stack: -Crunk Junksworth (/mob/living/carbon/human): db click("storage1", 1) -the storage1 (/obj/screen): attack hand(Crunk Junksworth (/mob/living/carbon/human), 1) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=14;icon-y=20;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Crunk Junksworth (/mob/living/carbon/human) - src: Crunk Junksworth (/mob/living/carbon/human) - call stack: -Crunk Junksworth (/mob/living/carbon/human): db click("storage1", 1) -the storage1 (/obj/screen): attack hand(Crunk Junksworth (/mob/living/carbon/human), 1) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=14;icon-y=19;left=1;scr...") -Rebooted server. -Running TG Revision Number: 4060. -Denied access to 'StevenRodriguez' connecting from 98.64.162.60 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Coyo (/mob/living/carbon/human) - src: Coyo (/mob/living/carbon/human) - call stack: -Coyo (/mob/living/carbon/human): db click("id", 1) -the id (/obj/screen): attack hand(Coyo (/mob/living/carbon/human), 1) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=13;icon-y=16;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Yahn Deir (/mob/living/carbon/human) - src: Yahn Deir (/mob/living/carbon/human) - call stack: -Yahn Deir (/mob/living/carbon/human): db click("storage1", 0) -the storage1 (/obj/screen): attack hand(Yahn Deir (/mob/living/carbon/human), 0) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=22;icon-y=10;left=1;scr...") -Sun Jul 15 03:41:55 2012 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1048 - usr: Samuel York (/mob/living/carbon/human) - src: Samuel York (/mob/living/carbon/human) - call stack: -Samuel York (/mob/living/carbon/human): db click("o_clothing", 1) -the o_clothing (/obj/screen): attack hand(Samuel York (/mob/living/carbon/human), 1) -the o_clothing (/obj/screen): DblClick(null, null, null) -the o_clothing (/obj/screen): Click(null, "mapwindow.map", "icon-x=19;icon-y=19;left=1;scr...") -### VarEdit by Doohl: /obj/effect/step_trigger/teleporter affect_ghosts=1 -### VarEdit by Doohl: /obj/effect/step_trigger/teleporter teleport_x=239 -### VarEdit by Doohl: /obj/effect/step_trigger/teleporter teleport_x=239 -### VarEdit by Doohl: /obj/effect/step_trigger/teleporter teleport_y=12 -### VarEdit by Doohl: /obj/effect/step_trigger/teleporter teleport_z=2 -Rebooted server. -Running TG Revision Number: 4060. -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1166 - usr: Bubble (/mob/living/carbon/human) - src: Bubble (/mob/living/carbon/human) - call stack: -Bubble (/mob/living/carbon/human): db click("storage2", 0) -the storage2 (/obj/screen): attack hand(Bubble (/mob/living/carbon/human), 0) -the storage2 (/obj/screen): DblClick(null, null, null) -the storage2 (/obj/screen): Click(null, "mapwindow.map", "icon-x=17;icon-y=13;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Tyson Roby (/mob/living/carbon/human) - src: Tyson Roby (/mob/living/carbon/human) - call stack: -Tyson Roby (/mob/living/carbon/human): db click("storage1", 1) -the storage1 (/obj/screen): attack hand(Tyson Roby (/mob/living/carbon/human), 1) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=17;icon-y=17;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Tyson Roby (/mob/living/carbon/human) - src: Tyson Roby (/mob/living/carbon/human) - call stack: -Tyson Roby (/mob/living/carbon/human): db click("storage1", 1) -the storage1 (/obj/screen): attack hand(Tyson Roby (/mob/living/carbon/human), 1) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=20;icon-y=16;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Tyson Roby (/mob/living/carbon/human) - src: Tyson Roby (/mob/living/carbon/human) - call stack: -Tyson Roby (/mob/living/carbon/human): db click("storage1", 1) -the storage1 (/obj/screen): attack hand(Tyson Roby (/mob/living/carbon/human), 1) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=19;icon-y=16;left=1;scr...") -runtime error: Cannot read null.w_class -proc name: attackby (/obj/item/storage/attackby) - source file: storage.dm,187 - usr: Samuel York (/mob/living/carbon/human) - src: the backpack (/obj/item/storage/backpack) - call stack: -the backpack (/obj/item/storage/backpack): attackby(null, Samuel York (/mob/living/carbon/human)) -the backpack (/obj/item/storage/backpack): attackby(null, Samuel York (/mob/living/carbon/human)) -the backpack (/obj/item/storage/backpack): DblClick(null, "mapwindow.map", "icon-x=17;icon-y=18;left=1;scr...") -the backpack (/obj/item/storage/backpack): Click(null, "mapwindow.map", "icon-x=17;icon-y=18;left=1;scr...") -Rebooted server. -Sun Jul 15 04:43:18 2012 -Running TG Revision Number: 4060. -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Unknown (/mob/living/carbon/human) - src: Unknown (/mob/living/carbon/human) - call stack: -Unknown (/mob/living/carbon/human): db click("id", 0) -the id (/obj/screen): attack hand(Unknown (/mob/living/carbon/human), 0) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=26;icon-y=21;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Unknown (/mob/living/carbon/human) - src: Unknown (/mob/living/carbon/human) - call stack: -Unknown (/mob/living/carbon/human): db click("id", 0) -the id (/obj/screen): attack hand(Unknown (/mob/living/carbon/human), 0) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=20;icon-y=20;left=1;scr...") -Rebooted server. -Running TG Revision Number: 4060. -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1035 - usr: Michigan Slim (/mob/living/carbon/human) - src: Michigan Slim (/mob/living/carbon/human) - call stack: -Michigan Slim (/mob/living/carbon/human): db click("back", 0) -the back (/obj/screen): attack hand(Michigan Slim (/mob/living/carbon/human), 0) -the back (/obj/screen): DblClick(null, null, null) -the back (/obj/screen): Click(null, "mapwindow.map", "icon-x=14;icon-y=19;left=1;scr...") -Rebooted server. -Sun Jul 15 05:48:07 2012 -Running TG Revision Number: 4060. -### VarEdit by Yinadele: /mob/living/simple_animal/cat/Runtime ckey=bossname -### VarEdit by Yinadele: /mob/living/simple_animal/cat/Runtime universal_speak=0 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1083 - usr: Jimz Ruztlfoot (/mob/living/carbon/human) - src: Jimz Ruztlfoot (/mob/living/carbon/human) - call stack: -Jimz Ruztlfoot (/mob/living/carbon/human): db click("belt", 0) -the belt (/obj/screen): attack hand(Jimz Ruztlfoot (/mob/living/carbon/human), 0) -the belt (/obj/screen): DblClick(null, null, null) -the belt (/obj/screen): Click(null, "mapwindow.map", "icon-x=18;icon-y=10;left=1;scr...") -Rebooted server. -Sun Jul 15 06:57:20 2012 -Running TG Revision Number: 4060. -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1061 - usr: Quinton Bould (/mob/living/carbon/human) - src: Quinton Bould (/mob/living/carbon/human) - call stack: -Quinton Bould (/mob/living/carbon/human): db click("gloves", 1) -the gloves (/obj/screen): attack hand(Quinton Bould (/mob/living/carbon/human), 1) -the gloves (/obj/screen): DblClick(null, null, null) -the gloves (/obj/screen): Click(null, "mapwindow.map", "icon-x=19;icon-y=19;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1023 - usr: Yahn Deir (/mob/living/carbon/human) - src: Yahn Deir (/mob/living/carbon/human) - call stack: -Yahn Deir (/mob/living/carbon/human): db click("mask", 1) -the mask (/obj/screen): attack hand(Yahn Deir (/mob/living/carbon/human), 1) -the mask (/obj/screen): DblClick(null, null, null) -the mask (/obj/screen): Click(null, "mapwindow.map", "icon-x=17;icon-y=20;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Dutch Hargrave (/mob/living/carbon/human) - src: Dutch Hargrave (/mob/living/carbon/human) - call stack: -Dutch Hargrave (/mob/living/carbon/human): db click("storage1", 0) -the storage1 (/obj/screen): attack hand(Dutch Hargrave (/mob/living/carbon/human), 0) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=18;icon-y=16;left=1;scr...") -Sun Jul 15 08:26:36 2012 -runtime error: Cannot read null.nodes -proc name: merge powernets (/datum/powernet/proc/merge_powernets) - source file: power.dm,401 - usr: Stephen Cox (/mob/living/carbon/human) - src: /datum/powernet (/datum/powernet) - call stack: -/datum/powernet (/datum/powernet): merge powernets(null) -the power cable (/obj/structure/cable): mergeConnectedNetworksOnTurf() -the cable coil (/obj/item/cable_coil): turf place(the floor (87,115,1) (/turf/simulated/floor), Stephen Cox (/mob/living/carbon/human)) -the floor (87,115,1) (/turf/simulated/floor): attackby(the cable coil (/obj/item/cable_coil), Stephen Cox (/mob/living/carbon/human)) -the floor (87,115,1) (/turf/simulated/floor): DblClick(the floor (87,115,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=26;icon-y=18;left=1;scr...") -the floor (87,115,1) (/turf/simulated/floor): DblClick(the floor (87,115,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=26;icon-y=18;left=1;scr...") -the floor (87,115,1) (/turf/simulated/floor): Click(the floor (87,115,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=26;icon-y=18;left=1;scr...") -runtime error: Cannot read null.nodes -proc name: merge powernets (/datum/powernet/proc/merge_powernets) - source file: power.dm,401 - usr: Stephen Cox (/mob/living/carbon/human) - src: /datum/powernet (/datum/powernet) - call stack: -/datum/powernet (/datum/powernet): merge powernets(null) -the power cable (/obj/structure/cable): mergeConnectedNetworksOnTurf() -the cable coil (/obj/item/cable_coil): turf place(the floor (87,115,1) (/turf/simulated/floor), Stephen Cox (/mob/living/carbon/human)) -the floor (87,115,1) (/turf/simulated/floor): attackby(the cable coil (/obj/item/cable_coil), Stephen Cox (/mob/living/carbon/human)) -the floor (87,115,1) (/turf/simulated/floor): DblClick(the floor (87,115,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=26;icon-y=18;left=1;scr...") -the floor (87,115,1) (/turf/simulated/floor): DblClick(the floor (87,115,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=26;icon-y=18;left=1;scr...") -the floor (87,115,1) (/turf/simulated/floor): Click(the floor (87,115,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=26;icon-y=18;left=1;scr...") -Rebooted server. -Running TG Revision Number: 4060. -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1166 - usr: Clarisse Holderbach (/mob/living/carbon/human) - src: Clarisse Holderbach (/mob/living/carbon/human) - call stack: -Clarisse Holderbach (/mob/living/carbon/human): db click("storage2", null) -the storage2 (/obj/screen): attack hand(Clarisse Holderbach (/mob/living/carbon/human), null) -the storage2 (/obj/screen): DblClick(null, null, null) -the storage2 (/obj/screen): Click(null, "mapwindow.map", "icon-x=17;icon-y=15;left=1;scr...") -Sun Jul 15 09:41:02 2012 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1071 - usr: Samantha Kendrick (/mob/living/carbon/human) - src: Samantha Kendrick (/mob/living/carbon/human) - call stack: -Samantha Kendrick (/mob/living/carbon/human): db click("shoes", 1) -the shoes (/obj/screen): attack hand(Samantha Kendrick (/mob/living/carbon/human), 1) -the shoes (/obj/screen): DblClick(null, null, null) -the shoes (/obj/screen): Click(null, "mapwindow.map", "icon-x=16;icon-y=19;left=1;scr...") -### VarEdit by Scaredofshadows: /mob/living/simple_animal/corgi/Ian ckey=laharlmontgommery -Sun Jul 15 10:43:09 2012 -### VarEdit by Scaredofshadows: /mob/living/simple_animal/cat/Runtime ckey=drlareku -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1093 - usr: Rowdy Randy (/mob/living/carbon/human) - src: Rowdy Randy (/mob/living/carbon/human) - call stack: -Rowdy Randy (/mob/living/carbon/human): db click("eyes", 0) -the eyes (/obj/screen): attack hand(Rowdy Randy (/mob/living/carbon/human), 0) -the eyes (/obj/screen): DblClick(null, null, null) -the eyes (/obj/screen): Click(null, "mapwindow.map", "icon-x=18;icon-y=20;left=1;scr...") -### VarEdit by Scaredofshadows: /mob/living/simple_animal/cat/Runtime canmove=1 -### VarEdit by Scaredofshadows: /mob/living/simple_animal/parrot/DrProfessor ckey=kyora473 -runtime error: Cannot read null.amount -proc name: attackby (/obj/machinery/constructable_frame/machine_frame/attackby) - source file: constructable_frame.dm,27 - usr: Quinton Bould (/mob/living/carbon/human) - src: the machine frame (/obj/machinery/constructable_frame/machine_frame) - call stack: -the machine frame (/obj/machinery/constructable_frame/machine_frame): attackby(null, Quinton Bould (/mob/living/carbon/human)) -the machine frame (/obj/machinery/constructable_frame/machine_frame): DblClick(the floor (98,69,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=23;icon-y=16;left=1;scr...") -the machine frame (/obj/machinery/constructable_frame/machine_frame): Click(the floor (98,69,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=23;icon-y=16;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1103 - usr: Quinton Bould (/mob/living/carbon/human) - src: Quinton Bould (/mob/living/carbon/human) - call stack: -Quinton Bould (/mob/living/carbon/human): db click("head", 1) -the head (/obj/screen): attack hand(Quinton Bould (/mob/living/carbon/human), 1) -the head (/obj/screen): DblClick(null, null, null) -the head (/obj/screen): Click(null, "mapwindow.map", "icon-x=15;icon-y=28;left=1;scr...") -runtime error: Cannot read null.loc -proc name: Life (/mob/living/simple_animal/corgi/Ian/Life) - source file: corgi.dm,304 - usr: null - src: Captain Ian (/mob/living/simple_animal/corgi/Ian) - call stack: -Captain Ian (/mob/living/simple_animal/corgi/Ian): Life() -/datum/controller/game_control... (/datum/controller/game_controller): process() -### VarEdit by Scaredofshadows: /mob/living/simple_animal/corgi/Ian real_name=Fluffum-Wuffums -Rebooted server. -Running TG Revision Number: 4060. -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Dat Bass (/mob/living/carbon/human) - src: Dat Bass (/mob/living/carbon/human) - call stack: -Dat Bass (/mob/living/carbon/human): db click("storage1", 0) -the storage1 (/obj/screen): attack hand(Dat Bass (/mob/living/carbon/human), 0) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=19;icon-y=15;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Dat Bass (/mob/living/carbon/human) - src: Dat Bass (/mob/living/carbon/human) - call stack: -Dat Bass (/mob/living/carbon/human): db click("storage1", 0) -the storage1 (/obj/screen): attack hand(Dat Bass (/mob/living/carbon/human), 0) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=14;icon-y=15;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Dat Bass (/mob/living/carbon/human) - src: Dat Bass (/mob/living/carbon/human) - call stack: -Dat Bass (/mob/living/carbon/human): db click("storage1", 0) -the storage1 (/obj/screen): attack hand(Dat Bass (/mob/living/carbon/human), 0) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=14;icon-y=15;left=1;scr...") -runtime error: Cannot read null.broadcasting -proc name: radio menu (/mob/living/silicon/robot/proc/radio_menu) - source file: robot.dm,857 - usr: Engineering Cyborg -432 (/mob/living/silicon/robot) - src: Engineering Cyborg -432 (/mob/living/silicon/robot) - call stack: -Engineering Cyborg -432 (/mob/living/silicon/robot): radio menu() -the radio (/obj/screen): Click(null, "mapwindow.map", "icon-x=18;icon-y=13;left=1;scr...") -runtime error: Cannot read null.broadcasting -proc name: radio menu (/mob/living/silicon/robot/proc/radio_menu) - source file: robot.dm,857 - usr: Engineering Cyborg -432 (/mob/living/silicon/robot) - src: Engineering Cyborg -432 (/mob/living/silicon/robot) - call stack: -Engineering Cyborg -432 (/mob/living/silicon/robot): radio menu() -the radio (/obj/screen): Click(null, "mapwindow.map", "icon-x=21;icon-y=9;left=1;scre...") -runtime error: Cannot read null.broadcasting -proc name: radio menu (/mob/living/silicon/robot/proc/radio_menu) - source file: robot.dm,857 - usr: Engineering Cyborg -432 (/mob/living/silicon/robot) - src: Engineering Cyborg -432 (/mob/living/silicon/robot) - call stack: -Engineering Cyborg -432 (/mob/living/silicon/robot): radio menu() -the radio (/obj/screen): Click(null, "mapwindow.map", "icon-x=21;icon-y=9;left=1;scre...") -runtime error: Cannot read null.broadcasting -proc name: radio menu (/mob/living/silicon/robot/proc/radio_menu) - source file: robot.dm,857 - usr: Engineering Cyborg -432 (/mob/living/silicon/robot) - src: Engineering Cyborg -432 (/mob/living/silicon/robot) - call stack: -Engineering Cyborg -432 (/mob/living/silicon/robot): radio menu() -the radio (/obj/screen): Click(null, "mapwindow.map", "icon-x=21;icon-y=11;left=1;scr...") -runtime error: Cannot read null.broadcasting -proc name: radio menu (/mob/living/silicon/robot/proc/radio_menu) - source file: robot.dm,857 - usr: Engineering Cyborg -432 (/mob/living/silicon/robot) - src: Engineering Cyborg -432 (/mob/living/silicon/robot) - call stack: -Engineering Cyborg -432 (/mob/living/silicon/robot): radio menu() -the radio (/obj/screen): Click(null, "mapwindow.map", "icon-x=21;icon-y=11;left=1;scr...") -runtime error: Cannot read null.broadcasting -proc name: radio menu (/mob/living/silicon/robot/proc/radio_menu) - source file: robot.dm,857 - usr: Engineering Cyborg -432 (/mob/living/silicon/robot) - src: Engineering Cyborg -432 (/mob/living/silicon/robot) - call stack: -Engineering Cyborg -432 (/mob/living/silicon/robot): radio menu() -the radio (/obj/screen): Click(null, "mapwindow.map", "icon-x=21;icon-y=11;left=1;scr...") -runtime error: Cannot read null.broadcasting -proc name: radio menu (/mob/living/silicon/robot/proc/radio_menu) - source file: robot.dm,857 - usr: Engineering Cyborg -432 (/mob/living/silicon/robot) - src: Engineering Cyborg -432 (/mob/living/silicon/robot) - call stack: -Engineering Cyborg -432 (/mob/living/silicon/robot): radio menu() -the radio (/obj/screen): Click(null, "mapwindow.map", "icon-x=21;icon-y=11;left=1;scr...") -runtime error: Cannot read null.broadcasting -proc name: radio menu (/mob/living/silicon/robot/proc/radio_menu) - source file: robot.dm,857 - usr: Engineering Cyborg -432 (/mob/living/silicon/robot) - src: Engineering Cyborg -432 (/mob/living/silicon/robot) - call stack: -Engineering Cyborg -432 (/mob/living/silicon/robot): radio menu() -the radio (/obj/screen): Click(null, "mapwindow.map", "icon-x=21;icon-y=11;left=1;scr...") -runtime error: Cannot read null.broadcasting -proc name: radio menu (/mob/living/silicon/robot/proc/radio_menu) - source file: robot.dm,857 - usr: Engineering Cyborg -432 (/mob/living/silicon/robot) - src: Engineering Cyborg -432 (/mob/living/silicon/robot) - call stack: -Engineering Cyborg -432 (/mob/living/silicon/robot): radio menu() -the radio (/obj/screen): Click(null, "mapwindow.map", "icon-x=15;icon-y=19;left=1;scr...") -runtime error: Cannot read null.broadcasting -proc name: radio menu (/mob/living/silicon/robot/proc/radio_menu) - source file: robot.dm,857 - usr: Engineering Cyborg -432 (/mob/living/silicon/robot) - src: Engineering Cyborg -432 (/mob/living/silicon/robot) - call stack: -Engineering Cyborg -432 (/mob/living/silicon/robot): radio menu() -the radio (/obj/screen): Click(null, "mapwindow.map", "icon-x=15;icon-y=19;left=1;scr...") -runtime error: Cannot read null.broadcasting -proc name: radio menu (/mob/living/silicon/robot/proc/radio_menu) - source file: robot.dm,857 - usr: Engineering Cyborg -432 (/mob/living/silicon/robot) - src: Engineering Cyborg -432 (/mob/living/silicon/robot) - call stack: -Engineering Cyborg -432 (/mob/living/silicon/robot): radio menu() -the radio (/obj/screen): Click(null, "mapwindow.map", "icon-x=15;icon-y=20;left=1;scr...") -runtime error: Cannot read null.broadcasting -proc name: radio menu (/mob/living/silicon/robot/proc/radio_menu) - source file: robot.dm,857 - usr: Engineering Cyborg -432 (/mob/living/silicon/robot) - src: Engineering Cyborg -432 (/mob/living/silicon/robot) - call stack: -Engineering Cyborg -432 (/mob/living/silicon/robot): radio menu() -the radio (/obj/screen): Click(null, "mapwindow.map", "icon-x=15;icon-y=20;left=1;scr...") -runtime error: Cannot read null.broadcasting -proc name: radio menu (/mob/living/silicon/robot/proc/radio_menu) - source file: robot.dm,857 - usr: Engineering Cyborg -432 (/mob/living/silicon/robot) - src: Engineering Cyborg -432 (/mob/living/silicon/robot) - call stack: -Engineering Cyborg -432 (/mob/living/silicon/robot): radio menu() -the radio (/obj/screen): Click(null, "mapwindow.map", "icon-x=19;icon-y=15;left=1;scr...") -runtime error: Cannot read null.broadcasting -proc name: radio menu (/mob/living/silicon/robot/proc/radio_menu) - source file: robot.dm,857 - usr: Engineering Cyborg -432 (/mob/living/silicon/robot) - src: Engineering Cyborg -432 (/mob/living/silicon/robot) - call stack: -Engineering Cyborg -432 (/mob/living/silicon/robot): radio menu() -the radio (/obj/screen): Click(null, "mapwindow.map", "icon-x=19;icon-y=15;left=1;scr...") -runtime error: Cannot read null.broadcasting -proc name: radio menu (/mob/living/silicon/robot/proc/radio_menu) - source file: robot.dm,857 - usr: Engineering Cyborg -432 (/mob/living/silicon/robot) - src: Engineering Cyborg -432 (/mob/living/silicon/robot) - call stack: -Engineering Cyborg -432 (/mob/living/silicon/robot): radio menu() -the radio (/obj/screen): Click(null, "mapwindow.map", "icon-x=19;icon-y=12;left=1;scr...") -runtime error: Cannot read null.broadcasting -proc name: radio menu (/mob/living/silicon/robot/proc/radio_menu) - source file: robot.dm,857 - usr: Engineering Cyborg -432 (/mob/living/silicon/robot) - src: Engineering Cyborg -432 (/mob/living/silicon/robot) - call stack: -Engineering Cyborg -432 (/mob/living/silicon/robot): radio menu() -the radio (/obj/screen): Click(null, "mapwindow.map", "icon-x=19;icon-y=11;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1061 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1071 -Sun Jul 15 12:02:37 2012 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 -runtime error: Cannot modify null.status. -proc name: death (/mob/living/silicon/robot/death) - source file: death.dm,51 -runtime error: Cannot create objects of type null. -proc name: Topic (/obj/machinery/computer/rdconsole/Topic) - source file: rdconsole.dm,381 -Rebooted server. -Running TG Revision Number: 4060. -Denied access to 'Cronzefir' connecting from 79.113.206.100 -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Zeus Geesenheimer (/mob/living/carbon/human) - src: Zeus Geesenheimer (/mob/living/carbon/human) - call stack: -Zeus Geesenheimer (/mob/living/carbon/human): db click("id", 0) -the id (/obj/screen): attack hand(Zeus Geesenheimer (/mob/living/carbon/human), 0) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=20;icon-y=13;left=1;scr...") -Rebooted server. -Running TG Revision Number: 4060. -Sun Jul 15 13:06:40 2012 -runtime error: unexpected stat -proc name: Stat (/mob/living/silicon/robot/Stat) - source file: robot.dm,227 - usr: Bill Kerman (/mob/living/carbon/human) - src: Miner Cyborg -734 (/mob/living/silicon/robot) - call stack: -Miner Cyborg -734 (/mob/living/silicon/robot): Stat() -Mining Borg Jetpack (/obj/item/borg/upgrade/jetpack): action(Miner Cyborg -734 (/mob/living/silicon/robot)) -Mining Borg Jetpack (/obj/item/borg/upgrade/jetpack): action(Miner Cyborg -734 (/mob/living/silicon/robot)) -Miner Cyborg -734 (/mob/living/silicon/robot): attackby(Mining Borg Jetpack (/obj/item/borg/upgrade/jetpack), Bill Kerman (/mob/living/carbon/human)) -Miner Cyborg -734 (/mob/living/silicon/robot): DblClick(the floor (100,87,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=16;icon-y=16;left=1;scr...") -Miner Cyborg -734 (/mob/living/silicon/robot): Click(the floor (100,87,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=16;icon-y=16;left=1;scr...") -runtime error: unexpected stat -proc name: Stat (/mob/living/silicon/robot/Stat) - source file: robot.dm,227 - usr: Bill Kerman (/mob/living/carbon/human) - src: Miner Cyborg -734 (/mob/living/silicon/robot) - call stack: -Miner Cyborg -734 (/mob/living/silicon/robot): Stat() -Borg VTEC Module (/obj/item/borg/upgrade/vtec): action(Miner Cyborg -734 (/mob/living/silicon/robot)) -Borg VTEC Module (/obj/item/borg/upgrade/vtec): action(Miner Cyborg -734 (/mob/living/silicon/robot)) -Miner Cyborg -734 (/mob/living/silicon/robot): attackby(Borg VTEC Module (/obj/item/borg/upgrade/vtec), Bill Kerman (/mob/living/carbon/human)) -Miner Cyborg -734 (/mob/living/silicon/robot): DblClick(the floor (99,87,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=16;icon-y=19;left=1;scr...") -Miner Cyborg -734 (/mob/living/silicon/robot): Click(the floor (99,87,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=16;icon-y=19;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1142 - usr: Unknown (/mob/living/carbon/human) - src: Unknown (/mob/living/carbon/human) - call stack: -Unknown (/mob/living/carbon/human): db click("id", 1) -the id (/obj/screen): attack hand(Unknown (/mob/living/carbon/human), 1) -the id (/obj/screen): DblClick(null, null, null) -the id (/obj/screen): Click(null, "mapwindow.map", "icon-x=11;icon-y=14;left=1;scr...") -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1154 - usr: Rocky McDoughboy XIV (/mob/living/carbon/human) - src: Rocky McDoughboy XIV (/mob/living/carbon/human) - call stack: -Rocky McDoughboy XIV (/mob/living/carbon/human): db click("storage1", 1) -the storage1 (/obj/screen): attack hand(Rocky McDoughboy XIV (/mob/living/carbon/human), 1) -the storage1 (/obj/screen): DblClick(null, null, null) -the storage1 (/obj/screen): Click(null, "mapwindow.map", "icon-x=15;icon-y=14;left=1;scr...") -runtime error: Cannot read null.loc -proc name: Life (/mob/living/simple_animal/corgi/Ian/Life) - source file: corgi.dm,304 - usr: null - src: Ian (/mob/living/simple_animal/corgi/Ian) - call stack: -Ian (/mob/living/simple_animal/corgi/Ian): Life() -/datum/controller/game_control... (/datum/controller/game_controller): process() -Rebooted server. -Running TG Revision Number: 4060. -Stopped server. - -*** End Log: Sun Jul 15 13:55:08 2012 *** diff --git a/tools/Runtime Condenser/Main.cpp b/tools/Runtime Condenser/Main.cpp deleted file mode 100644 index ae5e66a484..0000000000 --- a/tools/Runtime Condenser/Main.cpp +++ /dev/null @@ -1,314 +0,0 @@ -/* Runtime Condenser by Nodrak - * This will sum up identical runtimes into one, giving a total of how many times it occured. The first occurance - * of the runtime will log the proc, source, usr and src, the rest will just add to the total. Infinite loops will - * also be caught and displayed (if any) above the list of runtimes. - * - * How to use: - * 1) Copy and paste your list of runtimes from Dream Daemon into input.exe - * 2) Run RuntimeCondenser.exe - * 3) Open output.txt for a condensed report of the runtimes - */ - -#include -#include -#include -using namespace std; - -//Make all of these global. It's bad yes, but it's a small program so it really doesn't affect anything. - //Because hardcoded numbers are bad :( - const unsigned short maxStorage = 99; //100 - 1 - - //What we use to read input - string currentLine = "Blank"; - string nextLine = "Blank"; - - //Stores lines we want to keep to print out - string storedRuntime[maxStorage+1]; - string storedProc[maxStorage+1]; - string storedSource[maxStorage+1]; - string storedUsr[maxStorage+1]; - string storedSrc[maxStorage+1]; - - //Stat tracking stuff for output - unsigned int totalRuntimes = 0; - unsigned int totalUniqueRuntimes = 0; - unsigned int totalInfiniteLoops = 0; - unsigned int totalUniqueInfiniteLoops = 0; - - //Misc - unsigned int numRuntime[maxStorage+1]; //Number of times a specific runtime has occured - bool checkNextLines = false; //Used in case byond has condensed a large number of similar runtimes - int storedIterator = 0; //Used to remember where we stored the runtime - -bool readFromFile() -{ - //Open file to read - ifstream inputFile("input.txt"); - - if(inputFile.is_open()) - { - while(!inputFile.eof()) //Until end of file - { - //If we've run out of storage - if(storedRuntime[maxStorage] != "Blank") break; - - //Update our lines - currentLine = nextLine; - getline(inputFile, nextLine); - - //After finding a new runtime, check to see if there are extra values to store - if(checkNextLines) - { - //Skip ahead - currentLine = nextLine; - getline(inputFile, nextLine); - - //If we find this, we have new stuff to store - if(nextLine.find("usr:") != std::string::npos) - { - //Store more info - storedSource[storedIterator] = currentLine; - storedUsr[storedIterator] = nextLine; - - //Skip ahead again - currentLine = nextLine; - getline(inputFile, nextLine); - - //Store the last of the info - storedSrc[storedIterator] = nextLine; - } - checkNextLines = false; - } - - //Found an infinite loop! - if(currentLine.find("Infinite loop suspected") != std::string::npos || currentLine.find("Maximum recursion level reached") != std::string::npos) - { - totalInfiniteLoops++; - - for(int i=0; i <= maxStorage; i++) - { - //We've already encountered this - if(currentLine == storedRuntime[i]) - { - numRuntime[i]++; - break; - } - - //We've never encoutnered this - if(storedRuntime[i] == "Blank") - { - storedRuntime[i] = currentLine; - currentLine = nextLine; - getline(inputFile, nextLine); //Skip the "if this is not an infinite loop" line - storedProc[i] = nextLine; - numRuntime[i] = 1; - checkNextLines = true; - storedIterator = i; - totalUniqueInfiniteLoops++; - break; - } - } - } - //Found a runtime! - else if(currentLine.find("runtime error:") != std::string::npos) - { - totalRuntimes++; - for(int i=0; i <= maxStorage; i++) - { - //We've already encountered this - if(currentLine == storedRuntime[i]) - { - numRuntime[i]++; - break; - } - - //We've never encoutnered this - if(storedRuntime[i] == "Blank") - { - storedRuntime[i] = currentLine; - storedProc[i] = nextLine; - numRuntime[i] = 1; - checkNextLines = true; - storedIterator = i; - totalUniqueRuntimes++; - break; - } - } - } - } - } - else - { - return false; - } - return true; -} - -bool writeToFile() -{ - //Open and clear the file - ofstream outputFile("Output.txt", ios::trunc); - - if(outputFile.is_open()) - { - outputFile << "Note: The proc name, source file, src and usr are all from the FIRST of the identical runtimes. Everything else is cropped.\n\n"; - if(totalUniqueInfiniteLoops > 0) - { - outputFile << "Total unique infinite loops: " << totalUniqueInfiniteLoops << endl; - } - if(totalInfiniteLoops > 0) - { - outputFile << "Total infinite loops: " << totalInfiniteLoops << endl; - } - outputFile << "Total unique runtimes: " << totalUniqueRuntimes << endl; - outputFile << "Total runtimes: " << totalRuntimes << endl << endl; - - //Display a warning if we've hit the maximum space we've allocated for storage - if(totalUniqueRuntimes + totalUniqueInfiniteLoops >= maxStorage) - { - outputFile << "Warning: The maximum number of unique runtimes has been hit. If there were more, they have been cropped out.\n\n"; - } - - - //If we have infinite loops, display them first. - if(totalInfiniteLoops > 0) - { - outputFile << "** Infinite loops **"; - for(int i=0; i <= maxStorage; i++) - { - if(storedRuntime[i].find("Infinite loop suspected") != std::string::npos || storedRuntime[i].find("Maximum recursion level reached") != std::string::npos) - { - if(numRuntime[i] != 0) outputFile << endl << endl << "The following infinite loop has occured " << numRuntime[i] << " time(s).\n"; - if(storedRuntime[i] != "Blank") outputFile << storedRuntime[i] << endl; - if(storedProc[i] != "Blank") outputFile << storedProc[i] << endl; - if(storedSource[i] != "Blank") outputFile << storedSource[i] << endl; - if(storedUsr[i] != "Blank") outputFile << storedUsr[i] << endl; - if(storedSrc[i] != "Blank") outputFile << storedSrc[i] << endl; - } - } - outputFile << endl << endl; //For spacing - } - - - //Do runtimes next - outputFile << "** Runtimes **"; - for(int i=0; i <= maxStorage; i++) - { - if(storedRuntime[i].find("Infinite loop suspected") != std::string::npos || storedRuntime[i].find("Maximum recursion level reached") != std::string::npos) continue; - - if(numRuntime[i] != 0) outputFile << endl << endl << "The following runtime has occured " << numRuntime[i] << " time(s).\n"; - if(storedRuntime[i] != "Blank") outputFile << storedRuntime[i] << endl; - if(storedProc[i] != "Blank") outputFile << storedProc[i] << endl; - if(storedSource[i] != "Blank") outputFile << storedSource[i] << endl; - if(storedUsr[i] != "Blank") outputFile << storedUsr[i] << endl; - if(storedSrc[i] != "Blank") outputFile << storedSrc[i] << endl; - } - outputFile.close(); - } - else - { - return false; - } - return true; -} - -void sortRuntimes() -{ - string tempRuntime[maxStorage+1]; - string tempProc[maxStorage+1]; - string tempSource[maxStorage+1]; - string tempUsr[maxStorage+1]; - string tempSrc[maxStorage+1]; - unsigned int tempNumRuntime[maxStorage+1]; - unsigned int highestCount = 0; //Used for descending order -// int keepLooping = 0; - - //Move all of our data into temporary arrays. Also clear the stored data (not necessary but.. just incase) - for(int i=0; i <= maxStorage; i++) - { - //Get the largest occurance of a single runtime - if(highestCount < numRuntime[i]) - { - highestCount = numRuntime[i]; - } - - tempRuntime[i] = storedRuntime[i]; storedRuntime[i] = "Blank"; - tempProc[i] = storedProc[i]; storedProc[i] = "Blank"; - tempSource[i] = storedSource[i]; storedSource[i] = "Blank"; - tempUsr[i] = storedUsr[i]; storedUsr[i] = "Blank"; - tempSrc[i] = storedSrc[i]; storedSrc[i] = "Blank"; - tempNumRuntime[i] = numRuntime[i]; numRuntime[i] = 0; - } - - while(highestCount > 0) - { - for(int i=0; i <= maxStorage; i++) //For every runtime - { - if(tempNumRuntime[i] == highestCount) //If the number of occurances of that runtime is equal to our current highest - { - for(int j=0; j <= maxStorage; j++) //Find the next available slot and store the info - { - if(storedRuntime[j] == "Blank") //Found an empty spot - { - storedRuntime[j] = tempRuntime[i]; - storedProc[j] = tempProc[i]; - storedSource[j] = tempSource[i]; - storedUsr[j] = tempUsr[i]; - storedSrc[j] = tempSrc[i]; - numRuntime[j] = tempNumRuntime[i]; - break; - } - } - } - } - highestCount--; //Lower our 'highest' by one and continue - } -} - - -int main() { - char exit; //Used to stop the program from immediatly exiting - - //Start everything fresh. "Blank" should never occur in the runtime logs on its own. - for(int i=0; i <= maxStorage; i++) - { - storedRuntime[i] = "Blank"; - storedProc[i] = "Blank"; - storedSource[i] = "Blank"; - storedUsr[i] = "Blank"; - storedSrc[i] = "Blank"; - numRuntime[i] = 0; - - } - - if(readFromFile()) - { - cout << "Input read successfully!\n"; - } - else - { - cout << "Input failed to open, shutting down.\n"; - cout << "\nEnter any letter to quit.\n"; - cin >> exit; - return 1; - } - - sortRuntimes(); - - if(writeToFile()) - { - cout << "Output was successful!\n"; - cout << "\nEnter any letter to quit.\n"; - cin >> exit; - return 0; - } - else - { - cout << "The output file could not be opened, shutting down.\n"; - cout << "\nEnter any letter to quit.\n"; - cin >> exit; - return 0; - } - - return 0; -} diff --git a/tools/Runtime Condenser/Output.txt b/tools/Runtime Condenser/Output.txt deleted file mode 100644 index 84275115e4..0000000000 --- a/tools/Runtime Condenser/Output.txt +++ /dev/null @@ -1,21 +0,0 @@ -Note: The proc name, source file, src and usr are all from the FIRST of the identical runtimes. Everything else is cropped. - -Total unique runtimes: 2 -Total runtimes: 2 - -** Runtimes ** - -The following runtime has occured 1 time(s). -runtime error: type mismatch: the plating (107,70,1) (/turf/simulated/floor/plating) += the plating (108,70,1) (/turf/simulated/floor/plating) -proc name: IsolateContents (/zone/proc/IsolateContents) - source file: ZAS_Zones.dm,747 - usr: null - src: /zone (/zone) - - -The following runtime has occured 1 time(s). -runtime error: Cannot read null.len -proc name: Rebuild (/zone/proc/Rebuild) - source file: ZAS_Zones.dm,669 - usr: null - src: /zone (/zone) diff --git a/tools/Runtime Condenser/RuntimeCondenser.exe b/tools/Runtime Condenser/RuntimeCondenser.exe deleted file mode 100644 index bffc82e107aca2c825c7b1535e823e2b38f2139a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 921812 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%0DrGm47YCKNo$i$vCl*^}lc*jElnR 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�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 diff --git a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM.sln b/tools/UnstandardnessTestForDM/UnstandardnessTestForDM.sln deleted file mode 100644 index 22ed586bbb..0000000000 --- a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnstandardnessTestForDM", "UnstandardnessTestForDM\UnstandardnessTestForDM.csproj", "{A0EEBFC9-41D4-474D-853D-126AFDFB82DE}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x86 = Debug|x86 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A0EEBFC9-41D4-474D-853D-126AFDFB82DE}.Debug|x86.ActiveCfg = Debug|x86 - {A0EEBFC9-41D4-474D-853D-126AFDFB82DE}.Debug|x86.Build.0 = Debug|x86 - {A0EEBFC9-41D4-474D-853D-126AFDFB82DE}.Release|x86.ActiveCfg = Release|x86 - {A0EEBFC9-41D4-474D-853D-126AFDFB82DE}.Release|x86.Build.0 = Release|x86 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM.suo b/tools/UnstandardnessTestForDM/UnstandardnessTestForDM.suo deleted file mode 100644 index e62a5089375aa55ea8e93a9619aceeff27e5a495..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23040 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 - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - ///

- /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.button1 = new System.Windows.Forms.Button(); - this.listBox1 = new System.Windows.Forms.ListBox(); - this.panel1 = new System.Windows.Forms.Panel(); - this.listBox2 = new System.Windows.Forms.ListBox(); - this.label4 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.label1 = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); - this.panel1.SuspendLayout(); - this.SuspendLayout(); - // - // button1 - // - this.button1.Location = new System.Drawing.Point(12, 12); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(222, 23); - this.button1.TabIndex = 0; - this.button1.Text = "Locate all #defines"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // listBox1 - // - this.listBox1.FormattingEnabled = true; - this.listBox1.Location = new System.Drawing.Point(12, 82); - this.listBox1.Name = "listBox1"; - this.listBox1.Size = new System.Drawing.Size(696, 160); - this.listBox1.TabIndex = 1; - this.listBox1.SelectedIndexChanged += new System.EventHandler(this.listBox1_SelectedIndexChanged); - // - // panel1 - // - this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.panel1.Controls.Add(this.listBox2); - this.panel1.Controls.Add(this.label4); - this.panel1.Controls.Add(this.label3); - this.panel1.Controls.Add(this.label2); - this.panel1.Controls.Add(this.label1); - this.panel1.Location = new System.Drawing.Point(12, 297); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(696, 244); - this.panel1.TabIndex = 2; - // - // listBox2 - // - this.listBox2.FormattingEnabled = true; - this.listBox2.Location = new System.Drawing.Point(8, 71); - this.listBox2.Name = "listBox2"; - this.listBox2.Size = new System.Drawing.Size(683, 160); - this.listBox2.TabIndex = 4; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(5, 55); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(69, 13); - this.label4.TabIndex = 3; - this.label4.Text = "Referenced: "; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(5, 42); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(40, 13); - this.label3.TabIndex = 2; - this.label3.Text = "Value: "; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(5, 29); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(61, 13); - this.label2.TabIndex = 1; - this.label2.Text = "Defined in: "; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); - this.label1.Location = new System.Drawing.Point(3, 0); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(79, 29); - this.label1.TabIndex = 0; - this.label1.Text = "label1"; - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(9, 38); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(81, 13); - this.label5.TabIndex = 3; - this.label5.Text = "Files searched: "; - // - // Form1 - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(720, 553); - this.Controls.Add(this.label5); - this.Controls.Add(this.panel1); - this.Controls.Add(this.listBox1); - this.Controls.Add(this.button1); - this.Name = "Form1"; - this.Text = "Unstandardness Test For DM"; - this.panel1.ResumeLayout(false); - this.panel1.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label1; - public System.Windows.Forms.ListBox listBox2; - public System.Windows.Forms.Label label5; - public System.Windows.Forms.ListBox listBox1; - } -} - diff --git a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Form1.cs b/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Form1.cs deleted file mode 100644 index 4966c3f0c1..0000000000 --- a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Form1.cs +++ /dev/null @@ -1,484 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using System.Collections; -using System.IO; - -namespace UnstandardnessTestForDM -{ - public partial class Form1 : Form - { - DMSource source; - - public Form1() - { - InitializeComponent(); - source = new DMSource(); - source.mainform = this; - } - - private void button1_Click(object sender, EventArgs e) - { - source.find_all_defines(); - generate_define_report(); - } - - public void generate_define_report() - { - - TextWriter tw = new StreamWriter("DEFINES REPORT.txt"); - - tw.WriteLine("Unstandardness Test For DM report for DEFINES"); - tw.WriteLine("Generated on " + DateTime.Now); - tw.WriteLine("Total number of defines " + source.defines.Count()); - tw.WriteLine("Total number of Files " + source.filessearched); - tw.WriteLine("Total number of references " + source.totalreferences); - tw.WriteLine("Total number of errorous defines " + source.errordefines); - tw.WriteLine("------------------------------------------------"); - - foreach (Define d in source.defines) - { - tw.WriteLine(d.name); - tw.WriteLine("\tValue: " + d.value); - tw.WriteLine("\tComment: " + d.comment); - tw.WriteLine("\tDefined in: " + d.location + " : " + d.line); - tw.WriteLine("\tNumber of references: " + d.references.Count()); - foreach (String s in d.references) - { - tw.WriteLine("\t\t" + s); - } - } - - tw.WriteLine("------------------------------------------------"); - tw.WriteLine("SUCCESS"); - - tw.Close(); - - } - - private void listBox1_SelectedIndexChanged(object sender, EventArgs e) - { - try - { - Define d = (Define)listBox1.Items[listBox1.SelectedIndex]; - label1.Text = d.name; - label2.Text = "Defined in: " + d.location + " : " + d.line; - label3.Text = "Value: " + d.value; - label4.Text = "References: " + d.references.Count(); - listBox2.Items.Clear(); - foreach (String s in d.references) - { - listBox2.Items.Add(s); - } - - } - catch (Exception ex) { Console.WriteLine("ERROR HERE: " + ex.Message); } - } - - - } - - public class DMSource - { - public List defines; - public const int FLAG_DEFINE = 1; - public Form1 mainform; - - public int filessearched = 0; - public int totalreferences = 0; - public int errordefines = 0; - - public List filenames; - - public DMSource() - { - defines = new List(); - filenames = new List(); - } - - public void find_all_defines() - { - find_all_files(); - foreach(String filename in filenames){ - searchFileForDefines(filename); - } - - } - - public void find_all_files() - { - filenames = new List(); - String dmefilename = ""; - - foreach (string f in Directory.GetFiles(".")) - { - if (f.ToLower().EndsWith(".dme")) - { - dmefilename = f; - break; - } - } - - if (dmefilename.Equals("")) - { - MessageBox.Show("dme file not found"); - return; - } - - using (var reader = File.OpenText(dmefilename)) - { - String s; - while (true) - { - s = reader.ReadLine(); - - if (!(s is String)) - break; - - if (s.StartsWith("#include")) - { - int start = s.IndexOf("\"")+1; - s = s.Substring(start, s.Length - 11); - - if (s.EndsWith(".dm")) - { - filenames.Add(s); - } - } - - s = s.Trim(' '); - if (s == "") { continue; } - } - reader.Close(); - } - } - - - public void DirSearch(string sDir, int flag) - { - try - { - foreach (string d in Directory.GetDirectories(sDir)) - { - foreach (string f in Directory.GetFiles(d)) - { - if (f.ToLower().EndsWith(".dm")) - { - if ((flag & FLAG_DEFINE) > 0) - { - searchFileForDefines(f); - } - } - } - DirSearch(d, flag); - } - } - catch (System.Exception excpt) - { - Console.WriteLine("ERROR IN DIRSEARCH"); - Console.WriteLine(excpt.Message); - Console.WriteLine(excpt.Data); - Console.WriteLine(excpt.ToString()); - Console.WriteLine(excpt.StackTrace); - Console.WriteLine("END OF ERROR IN DIRSEARCH"); - } - } - - //DEFINES - public void searchFileForDefines(String fileName) - { - filessearched++; - FileInfo f = new FileInfo(fileName); - List lines = new List(); - List lines_without_comments = new List(); - - mainform.label5.Text = "Files searched: " + filessearched + "; Defines found: " + defines.Count() + "; References found: " + totalreferences + "; Errorous defines: " + errordefines; - mainform.label5.Refresh(); - - //This code segment reads the file and stores it into the lines variable. - using (var reader = File.OpenText(fileName)) - { - try - { - String s; - while (true) - { - s = reader.ReadLine(); - lines.Add(s); - s = s.Trim(' '); - if (s == "") { continue; } - } - } - catch { } - reader.Close(); - } - - mainform.listBox1.Items.Add("ATTEMPTING: " + fileName); - lines_without_comments = remove_comments(lines); - - /*TextWriter tw = new StreamWriter(fileName); - foreach (String s in lines_without_comments) - { - tw.WriteLine(s); - } - tw.Close(); - mainform.listBox1.Items.Add("REWRITE: "+fileName);*/ - - try - { - for (int i = 0; i < lines_without_comments.Count; i++) - { - String line = lines_without_comments[i]; - - if (!(line is string)) - continue; - - //Console.WriteLine("LINE: " + line); - - foreach (Define define in defines) - { - - if (line.IndexOf(define.name) >= 0) - { - define.references.Add(fileName + " : " + i); - totalreferences++; - } - } - - if( line.ToLower().IndexOf("#define") >= 0 ) - { - line = line.Trim(); - line = line.Replace('\t', ' '); - //Console.WriteLine("LINE = "+line); - String[] slist = line.Split(' '); - if(slist.Length >= 3){ - //slist[0] has the value of "#define" - String name = slist[1]; - String value = slist[2]; - - for (int j = 3; j < slist.Length; j++) - { - value += " " + slist[j]; - //Console.WriteLine("LISTITEM["+j+"] = "+slist[j]); - } - - value = value.Trim(); - - String comment = ""; - - if (value.IndexOf("//") >= 0) - { - comment = value.Substring(value.IndexOf("//")); - value = value.Substring(0, value.IndexOf("//")); - } - - comment = comment.Trim(); - value = value.Trim(); - - Define d = new Define(fileName,i,name,value,comment); - defines.Add(d); - mainform.listBox1.Items.Add(d); - mainform.listBox1.Refresh(); - }else{ - Define d = new Define(fileName, i, "ERROR ERROR", "Something went wrong here", line); - errordefines++; - defines.Add(d); - mainform.listBox1.Items.Add(d); - mainform.listBox1.Refresh(); - } - } - } - } - catch (Exception e) { - Console.WriteLine(e.Message); - Console.WriteLine(e.StackTrace); - MessageBox.Show("Exception: " + e.Message + " | " + e.ToString()); - } - } - - bool iscomment = false; - int ismultilinecomment = 0; - bool isstring = false; - bool ismultilinestring = false; - int escapesequence = 0; - int stringvar = 0; - - public List remove_comments(List lines) - { - List r = new List(); - - iscomment = false; - ismultilinecomment = 0; - isstring = false; - ismultilinestring = false; - - bool skiponechar = false; //Used so the / in */ doesn't get written; - - for (int i = 0; i < lines.Count(); i++) - { - - String line = lines[i]; - - if (!(line is String)) - continue; - - iscomment = false; - isstring = false; - char ca = ' '; - escapesequence = 0; - - String newline = ""; - - int k = line.Length; - - for (int j = 0; j < k; j++) - { - - char c = line.ToCharArray()[j]; - - if (escapesequence == 0) - if (normalstatus()) - { - if (ca == '/' && c == '/') - { - c = ' '; - iscomment = true; - - newline = newline.Remove(newline.Length - 1); - k = line.Length; - } - if (ca == '/' && c == '*') - { - c = ' '; - ismultilinecomment = 1; - newline = newline.Remove(newline.Length - 1); - k = line.Length; - } - if (c == '"') - { - isstring = true; - } - if (ca == '{' && c == '"') - { - ismultilinestring = true; - } - } - else if (isstring) - { - - if (c == '\\') - { - escapesequence = 2; - } - else if (stringvar > 0) - { - if (c == ']') - { - stringvar--; - } - else if (c == '[') - { - stringvar++; - } - } - else if (c == '"') - { - isstring = false; - } - else if (c == '[') - { - stringvar++; - } - } - else if (ismultilinestring) - { - if (ca == '"' && c == '}') - { - ismultilinestring = false; - } - } - else if (ismultilinecomment > 0) - { - if (ca == '/' && c == '*') - { - c = ' '; //These things are here to prevent /*/ from bieng interpreted as the start and end of a comment. - skiponechar = true; - ismultilinecomment++; - } - if (ca == '*' && c == '/') - { - c = ' '; //These things are here to prevent /*/ from bieng interpreted as the start and end of a comment. - skiponechar = true; - ismultilinecomment--; - } - } - - if (!iscomment && (ismultilinecomment==0) && !skiponechar) - { - newline += c; - } - - if (skiponechar) - { - skiponechar = false; - } - if (escapesequence > 0) - { - escapesequence--; - } - else - { - ca = c; - } - } - - r.Add(newline.TrimEnd()); - - } - - return r; - } - - private bool normalstatus() - { - return !isstring && !ismultilinestring && (ismultilinecomment==0) && !iscomment && (escapesequence == 0); - } - - - } - - public class Define - { - public String location; - public int line; - public String name; - public String value; - public String comment; - public List references; - - public Define(String location, int line, String name, String value, String comment) - { - this.location = location; - this.line = line; - this.name = name; - this.value = value; - this.comment = comment; - this.references = new List(); - } - - public override String ToString() - { - return "DEFINE: \""+name+"\" is defined as \""+value+"\" AT "+location+" : "+line; - } - - } - - - - -} diff --git a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Form1.resx b/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Form1.resx deleted file mode 100644 index 1af7de150c..0000000000 --- a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Form1.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Program.cs b/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Program.cs deleted file mode 100644 index 1e8ac829d9..0000000000 --- a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Program.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Windows.Forms; - -namespace UnstandardnessTestForDM -{ - static class Program - { - /// - /// The main entry point for the application. - /// - [STAThread] - static void Main() - { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new Form1()); - } - } -} diff --git a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Properties/AssemblyInfo.cs b/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Properties/AssemblyInfo.cs deleted file mode 100644 index 99c88721b3..0000000000 --- a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("UnstandardnessTestForDM")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Microsoft")] -[assembly: AssemblyProduct("UnstandardnessTestForDM")] -[assembly: AssemblyCopyright("Copyright © Microsoft 2012")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("c0e09000-1840-4416-8bb2-d86a8227adf1")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Properties/Resources.Designer.cs b/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Properties/Resources.Designer.cs deleted file mode 100644 index 92534f43fe..0000000000 --- a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Properties/Resources.Designer.cs +++ /dev/null @@ -1,71 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.239 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace UnstandardnessTestForDM.Properties -{ - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources - { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() - { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager - { - get - { - if ((resourceMan == null)) - { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("UnstandardnessTestForDM.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture - { - get - { - return resourceCulture; - } - set - { - resourceCulture = value; - } - } - } -} diff --git a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Properties/Resources.resx b/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Properties/Resources.resx deleted file mode 100644 index af7dbebbac..0000000000 --- a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Properties/Resources.resx +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Properties/Settings.Designer.cs b/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Properties/Settings.Designer.cs deleted file mode 100644 index ab81379593..0000000000 --- a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Properties/Settings.Designer.cs +++ /dev/null @@ -1,30 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.239 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace UnstandardnessTestForDM.Properties -{ - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase - { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default - { - get - { - return defaultInstance; - } - } - } -} diff --git a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Properties/Settings.settings b/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Properties/Settings.settings deleted file mode 100644 index 39645652af..0000000000 --- a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Properties/Settings.settings +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/UnstandardnessTestForDM.csproj b/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/UnstandardnessTestForDM.csproj deleted file mode 100644 index 7cafd94f65..0000000000 --- a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/UnstandardnessTestForDM.csproj +++ /dev/null @@ -1,87 +0,0 @@ - - - - Debug - x86 - 8.0.30703 - 2.0 - {A0EEBFC9-41D4-474D-853D-126AFDFB82DE} - WinExe - Properties - UnstandardnessTestForDM - UnstandardnessTestForDM - v4.0 - Client - 512 - - - x86 - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - x86 - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - Form - - - Form1.cs - - - - - Form1.cs - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - - - - - \ No newline at end of file diff --git a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/bin/Debug/UnstandardnessTestForDM.exe b/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/bin/Debug/UnstandardnessTestForDM.exe deleted file mode 100644 index bb55cad8fd79a29b2bd20e19c06f1dc03af0c30f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17920 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 f!L1v;8A3spLJh!~a=*V>&iS81BEgcrT$<5` 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 z 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 - - - - - - - - - - diff --git a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache deleted file mode 100644 index f4263115dfbb1263623b498558f2b704760184c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6426 zcmeHL-BTMk5VyfxFoZUyDM_G7E^Rsuse6NK2#^^bf{k0IA;Z`X=?v!~vQIWDvgAlQ zjKlEMxBe6T3p)K1+ugH$d<1A8Y!44UhDGROf7;bb`w@voB9VXK!@v059s%NQv5Jyf zR*kd6v`=`!_#Tr^M%L?6Y-Tr-_6}8=NwJn%aDtzto$t0fuzY8LatnawC*$RA>O7iRLRCWMH&sNoIFvRqTw4o1B)LJ z&SjH&ue7H1GH-1h87gpBdJ1M|q^Po5j&V9uA;M!GF|<1qd-Yt^=RBuKoi?R9=nfT0 z8OH9O8_P-VfxM5fvq)5pns8acFKcSv02BR`)r3?uOREG_u_?5H{hjWv&G`BCliKXs zQ}40MSv>rt|LiK8gPhu2*k+a~S}{^Fs_!&BLsWqhRoUMrW?xS>l&pe6P>5+oYfKx} zIvtOL9EPICW?|h~+0QVYxiGXP1v{YX$>rTyrW>5J5b)x{j$O^Q7j7$Ap;}Az3O36O zhyWJWSwg+MFAS^G&XS9q+Dg&Zh&5_ik;n+pXf%qyK>r*ow6vjhFfllzib11sexiaZ zR&ic~2HvN3cdwZOR=q>GPqztE?|%%Z7K~z|mbB}-A{A%l(|fY`zpu&iGFhrDy-2O5 z7wN*vYAJc$K5pn%`=N(YZ`FFk*+rv66YYl;g}136%x}0&_4oo|q!1qkG7*nqa|{W* zw2}BNAlN;Q|HP3@0I?>KWH_V3Shu0Qew^=ko0kQMHJU_GH;e~d=gmejbhF7rctDd~ zAKmfC8%HPB6!7^YntAEI)!?Dsb;9Moo2B}|$cAfbI+b>flw7-S(U}U5C{KV#DT0g4 zNtNBYvR{^ebB|VD0I#xNLyq9Mi{NeYR7-vsMiO~irHTshQci_b_G$bx6!LQ*^XCQV z226n<;MdUOu62}g2c|#9>2@fvy=b=w?ao{)0h405+M0&eDD2Jp0vZ$8<)jzVsnz&h z_&6L?Uldg~q#*$1`3ZXr%H5NEgrY7BTo?LdGOG_3mo zdI+E}sRnVE9fV=_GZ1Co4Hap3P8nI8T0^Lq^LF8)^vDm@>9#d?y2{BE_K9i)I(Pus zqW{=k&mUmU0_KPQV}@~xq5mjK{f zXvA_*^NV646Qnoic7mA=eu*Hvfrj-Rko(7(OUsQX)-xELKK_{rgLSu@g6byRkrQhk z`e%=emlxMsC)RTq??tZkJ@A=2&XXp_-B^4(v69eL0v+}`dnz;0$($0H5C!V|0UD(D j=XD|aPhb*+->u-R5E;MGzlQJ5e--G5?@m~BElvIldB}37 diff --git a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug/GenerateResource.read.1.tlog b/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug/GenerateResource.read.1.tlog deleted file mode 100644 index 247c250f975958656053cca6e22ad8a5cf24ce20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 416 zcmdUsI}XA?3`Adz#8r?G9bF*&M3Rk?jYJV~|5E_Z3k@YD&DtJ$#vbqUac9q#nTe4D zgYV3aiiX75ycQj~lC68|%*lGqrsPSqDV&MUm}PcyDwS%p;078obF@3~R_?F;Z*J@4 jl^UUUW66Sl*}r$|xM18kb14qykCWsz2LB;keY<-Bpfx{< diff --git a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug/GenerateResource.write.1.tlog b/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug/GenerateResource.write.1.tlog deleted file mode 100644 index d100f54085bd324a4ba75bfa9efbbea9766b8d06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 994 zcmd^-%?^S<420)w;;WDt6JxxADEP@#laZ*00fHA+r}uZ0?!AUe|v5c2MDPqC|%&`YBs$wGeHNYq_z{Mtkjub}tc{ clG!^BhWi-rcis@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh diff --git a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug/UnstandardnessTestForDM.Properties.Resources.resources b/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug/UnstandardnessTestForDM.Properties.Resources.resources deleted file mode 100644 index 6c05a9776bd7cbae976fdcec7e3a254e93018279..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh diff --git a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug/UnstandardnessTestForDM.csproj.FileListAbsolute.txt b/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug/UnstandardnessTestForDM.csproj.FileListAbsolute.txt deleted file mode 100644 index 1d36d1cd55..0000000000 --- a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug/UnstandardnessTestForDM.csproj.FileListAbsolute.txt +++ /dev/null @@ -1,18 +0,0 @@ -c:\users\baloh\documents\visual studio 2010\Projects\UnstandardnessTestForDM\UnstandardnessTestForDM\bin\Debug\UnstandardnessTestForDM.exe -c:\users\baloh\documents\visual studio 2010\Projects\UnstandardnessTestForDM\UnstandardnessTestForDM\bin\Debug\UnstandardnessTestForDM.pdb -c:\users\baloh\documents\visual studio 2010\Projects\UnstandardnessTestForDM\UnstandardnessTestForDM\obj\x86\Debug\ResolveAssemblyReference.cache -c:\users\baloh\documents\visual studio 2010\Projects\UnstandardnessTestForDM\UnstandardnessTestForDM\obj\x86\Debug\UnstandardnessTestForDM.Form1.resources -c:\users\baloh\documents\visual studio 2010\Projects\UnstandardnessTestForDM\UnstandardnessTestForDM\obj\x86\Debug\UnstandardnessTestForDM.Properties.Resources.resources -c:\users\baloh\documents\visual studio 2010\Projects\UnstandardnessTestForDM\UnstandardnessTestForDM\obj\x86\Debug\GenerateResource.read.1.tlog -c:\users\baloh\documents\visual studio 2010\Projects\UnstandardnessTestForDM\UnstandardnessTestForDM\obj\x86\Debug\GenerateResource.write.1.tlog -c:\users\baloh\documents\visual studio 2010\Projects\UnstandardnessTestForDM\UnstandardnessTestForDM\obj\x86\Debug\UnstandardnessTestForDM.exe -c:\users\baloh\documents\visual studio 2010\Projects\UnstandardnessTestForDM\UnstandardnessTestForDM\obj\x86\Debug\UnstandardnessTestForDM.pdb -C:\Users\Baloh\Desktop\tgs13\tools\UnstandardnessTestForDM\UnstandardnessTestForDM\bin\Debug\UnstandardnessTestForDM.exe -C:\Users\Baloh\Desktop\tgs13\tools\UnstandardnessTestForDM\UnstandardnessTestForDM\bin\Debug\UnstandardnessTestForDM.pdb -C:\Users\Baloh\Desktop\tgs13\tools\UnstandardnessTestForDM\UnstandardnessTestForDM\obj\x86\Debug\ResolveAssemblyReference.cache -C:\Users\Baloh\Desktop\tgs13\tools\UnstandardnessTestForDM\UnstandardnessTestForDM\obj\x86\Debug\UnstandardnessTestForDM.Form1.resources -C:\Users\Baloh\Desktop\tgs13\tools\UnstandardnessTestForDM\UnstandardnessTestForDM\obj\x86\Debug\UnstandardnessTestForDM.Properties.Resources.resources -C:\Users\Baloh\Desktop\tgs13\tools\UnstandardnessTestForDM\UnstandardnessTestForDM\obj\x86\Debug\GenerateResource.read.1.tlog -C:\Users\Baloh\Desktop\tgs13\tools\UnstandardnessTestForDM\UnstandardnessTestForDM\obj\x86\Debug\GenerateResource.write.1.tlog -C:\Users\Baloh\Desktop\tgs13\tools\UnstandardnessTestForDM\UnstandardnessTestForDM\obj\x86\Debug\UnstandardnessTestForDM.exe -C:\Users\Baloh\Desktop\tgs13\tools\UnstandardnessTestForDM\UnstandardnessTestForDM\obj\x86\Debug\UnstandardnessTestForDM.pdb diff --git a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug/UnstandardnessTestForDM.exe b/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug/UnstandardnessTestForDM.exe deleted file mode 100644 index bb55cad8fd79a29b2bd20e19c06f1dc03af0c30f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17920 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 f!L1v;8A3spLJh!~a=*V>&iS81BEgcrT$<5` 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 readdir(path, { withFileTypes: true })), - ); - for (let i = 0; i < entries.length; ++i) { - for (const entry of entries[i]) { - if (entry.isDirectory()) { - queue.push(`${queue[i]}/${entry.name}`); - } else if (entry.isFile() && entry.name.endsWith(".dm")) { - files[`${queue[i]}/${entry.name}`] = true; - } - } - } - queue = queue.slice(entries.length); -} - -files = Object.keys(files); - -while (files.length) { - const queue = files.slice(0, 100); - const buffers = await Promise.all(queue.map((path) => readFile(path))); - for (let i = 0; i < queue.length; ++i) { - if (!isValidUTF8(buffers[i])) { - console.log(queue[i]); - ++count; - } - } - files = files.slice(100); -} - -if (count) { - process.exit(1); -} diff --git a/tools/dm-invalid-utf8-discovery/package.json b/tools/dm-invalid-utf8-discovery/package.json deleted file mode 100644 index ec37e67139..0000000000 --- a/tools/dm-invalid-utf8-discovery/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "dm-invalid-utf8-discovery", - "version": "0.1.0", - "type": "module", - "dependencies": { - "utf-8-validate": "5.0.9" - }, - "contributors": [ - "spookerton (https://github.com/spookerton)" - ] -} diff --git a/tools/expand_filedir_paths.py b/tools/expand_filedir_paths.py deleted file mode 100644 index c7eac4435b..0000000000 --- a/tools/expand_filedir_paths.py +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/env python - -import re, os, sys, fnmatch - - -# Regex pattern to extract the directory path in a #define FILE_DIR -filedir_pattern = re.compile(r'^#define\s*FILE_DIR\s*"(.*?)"') - -# Regex pattern to extract any single quoted piece of text. This can also -# match single quoted strings inside of double quotes, which is part of a -# regular text string and should not be replaced. The replacement function -# however will any match that doesn't appear to be a filename so these -# extra matches should not be a problem. -rename_pattern = re.compile(r"'(.+?)'") - -# Only filenames matching this pattern will have their resources renamed -source_pattern = re.compile(r"^.*?\.(dm|dmm)$") - -# Open the .dme file and return a list of all FILE_DIR paths in it -def read_filedirs(filename): - result = [] - dme_file = file(filename, "rt") - - # Read each line from the file and check for regex pattern match - for row in dme_file: - match = filedir_pattern.match(row) - if match: - result.append(match.group(1)) - - dme_file.close() - return result - -# Search through a list of directories, and build a dictionary which -# maps every file to its full pathname (relative to the .dme file) -# If the same filename appears in more than one directory, the earlier -# directory in the list takes preference. -def index_files(file_dirs): - result = {} - - # Reverse the directory list so the earlier directories take precedence - # by replacing the previously indexed file of the same name - for directory in reversed(file_dirs): - for name in os.listdir(directory): - # Replace backslash path separators on Windows with forward slash - # Force "name" to lowercase when used as a key since BYOND resource - # names are case insensitive, even on Linux. - if name.find(".") == -1: - continue - result[name.lower()] = directory.replace('\\', '/') + '/' + name - - return result - -# Recursively search for every .dm/.dmm file in the .dme file directory. For -# each file, search it for any resource names in single quotes, and replace -# them with the full path previously found by index_files() -def rewrite_sources(resources): - # Create a closure for the regex replacement function to capture the - # resources dictionary which can't be passed directly to this function - def replace_func(name): - key = name.group(1).lower() - if key in resources: - replacement = resources[key] - else: - replacement = name.group(1) - return "'" + replacement + "'" - - # Search recursively for all .dm and .dmm files - for (dirpath, dirs, files) in os.walk("."): - for name in files: - if source_pattern.match(name): - path = dirpath + '/' + name - source_file = file(path, "rt") - output_file = file(path + ".tmp", "wt") - - # Read file one line at a time and perform replacement of all - # single quoted resource names with the fullpath to that resource - # file. Write the updated text back out to a temporary file. - for row in source_file: - row = rename_pattern.sub(replace_func, row) - output_file.write(row) - - output_file.close() - source_file.close() - - # Delete original source file and replace with the temporary - # output. On Windows, an atomic rename() operation is not - # possible like it is under POSIX. - os.remove(path) - os.rename(path + ".tmp", path) - -dirs = read_filedirs("tgstation.dme"); -resources = index_files(dirs) -rewrite_sources(resources) diff --git a/tools/indentation.awk b/tools/indentation.awk deleted file mode 100644 index e4742bf2f9..0000000000 --- a/tools/indentation.awk +++ /dev/null @@ -1,32 +0,0 @@ -#! /usr/bin/awk -f - -# Finds incorrect indentation of absolute path definitions in DM code -# For example, the following fails on the indicated line: - -#/datum/path/foo -# x = "foo" -# /datum/path/bar // FAIL -# x = "bar" - -{ - if ( comma != 1 ) { # No comma/'list('/etc at the end of the previous line - if ( $0 ~ /^[\t ]+\/[^/*]/ ) { # Current line's first non-whitespace character is a slash, followed by something that is not another slash or an asterisk - print FILENAME, ":", $0 - fail = 1 - } - } - - if ($0 ~ /,[\t ]*\\?\r?$/ || # comma at EOL - $0 ~ /list[\t ]*\([\t ]*\\?\r?$/ || # start of a list() - $0 ~ /pick[\t ]*\([\t ]*\\?\r?$/ ) { # start of a pick() - comma = 1 - } else { - comma = 0 - } -} - -END { - if ( fail ) { - exit 1 - } -} diff --git a/tools/nano-tester/.gitignore b/tools/nano-tester/.gitignore deleted file mode 100644 index c2658d7d1b..0000000000 --- a/tools/nano-tester/.gitignore +++ /dev/null @@ -1 +0,0 @@ -node_modules/ diff --git a/tools/nano-tester/README.md b/tools/nano-tester/README.md deleted file mode 100644 index afc99699b2..0000000000 --- a/tools/nano-tester/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# NanoUI Template Tester - -A simple utility for previewing how NanoUI templates will look out of game, useful for rapid development cycles. - -## Setup - -- Make sure you have Node.js ( https://nodejs.org/ ) installed. -- Run `npm install` to install dependencies -- Edit `index.js` to change the configuration to use the template you want to preview. -- Edit `initialData.json` to contain the initial data that will be generated by your object's `ui_interact` proc. -- Run `node index.js` and then connect at http://localhost:8000/ - -## While Running - -- You can update your template files, nano CSS or initialData.json at any time while the server is running. diff --git a/tools/nano-tester/index.html b/tools/nano-tester/index.html deleted file mode 100644 index ee6b24a918..0000000000 --- a/tools/nano-tester/index.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - -
- - - diff --git a/tools/nano-tester/index.js b/tools/nano-tester/index.js deleted file mode 100644 index 6aaa9151cd..0000000000 --- a/tools/nano-tester/index.js +++ /dev/null @@ -1,107 +0,0 @@ -//'use strict' -// -// Mini webserver for testing NanoUI templates -// -const fs = require("fs"); -const http = require("http"); -const mime = require("mime"); -const path = require("path"); -const url = require("url"); -const dot = require("dot"); - -// Configuration constants -var config = { - port: 8000, // Port to listen on - dir: "../../nano", // Path to SS13 nano folder -}; - -// Choose your templates here. Hint: You'll probably never change layout, main is the one you want. -var templateData = { - layout: "layout_default.tmpl", - main: "smes.tmpl", -}; - -// In BYOND everything is sent to the client's byond cache, so its all in one flat directory. -// On the actual filesystem here of course, its in subfolders. To emulate that we decide what -// folder to look in based on file extention. -const extFolderMapping = { - ".png": path.join(process.cwd(), config.dir, "images"), - ".jpg": path.join(process.cwd(), config.dir, "images"), - ".jpeg": path.join(process.cwd(), config.dir, "images"), - ".gif": path.join(process.cwd(), config.dir, "images"), - ".js": path.join(process.cwd(), config.dir, "js"), - ".css": path.join(process.cwd(), config.dir, "css"), - ".tmpl": path.join(process.cwd(), config.dir, "templates"), -}; - -// Read the shipped index.html as a doT template. -var genIndexHtml = dot.template(fs.readFileSync("index.html", "utf8")); - -// the main thing -var server = http.createServer((request, response) => { - // extract the pathname from the request URL - var pathname = url.parse(request.url).pathname; - - // Exception for front page - if (pathname === "/") { - const initialData = JSON.parse(fs.readFileSync("initialData.json", "utf8")); - response.writeHead(200, { "Content-Type": "text/html" }); - response.write( - genIndexHtml({ - initialDataJson: JSON.stringify(initialData), - templateDataJson: JSON.stringify(templateData), - }), - ); - response.end(); - return; - } - - // Map URL path to physical path. - // First check our folder mapping - var filename; - var fileExt = path.extname(pathname); - if (fileExt in extFolderMapping) { - filename = path.join(extFolderMapping[fileExt], path.basename(pathname)); - } else { - // Otherwise fall back to just a relative path to our base dir. - filename = path.join(process.cwd(), config.dir, pathname); - } - - // console.log("Trying to serve ", pathname, " from ", filename); - - // Does this path exist? - fs.exists(filename, (gotPath) => { - // no, bail out - if (!gotPath) { - console.warn("Path: %s File: %s NOT FOUND", pathname, filename); - response.writeHead(404, { "Content-Type": "text/plain" }); - response.write("404 Not Found"); - response.end(); - return; - } - - // still here? filename is good - // look up the mime type by file extension - response.writeHead(200, { "Content-Type": mime.getType(filename) }); - - // read and pass the file as a stream. Not really sure if this is better, - // but it feels less block-ish than reading the whole file - // and we get to do awesome things with listeners - fs.createReadStream(filename, { - flags: "r", - encoding: "binary", - mode: 0x3146, // 0666 - bufferSize: 4 * 1024, - }) - .addListener("data", (chunk) => { - response.write(chunk, "binary"); - }) - .addListener("close", () => { - response.end(); - }); - }); -}); - -// fire it up -server.listen(config.port); -console.log("Listening on port %d", config.port); diff --git a/tools/nano-tester/initialData.json b/tools/nano-tester/initialData.json deleted file mode 100644 index 9996c4dd51..0000000000 --- a/tools/nano-tester/initialData.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "title": "SMES" - }, - "data": { - "nameTag": "Test SMES", - "storedCapacity": 50, - "storedCapacityAbs": 400, - "storedCapacityMax": 800, - "charging": 1, - "chargeMode": 1, - "chargeLevel": 100, - "chargeMax": 250, - "chargeLoad": 0, - "outputOnline": 1, - "outputLevel": 75, - "outputMax": 250, - "outputLoad": 45 - } -} diff --git a/tools/nano-tester/package.json b/tools/nano-tester/package.json deleted file mode 100644 index b3e933ccba..0000000000 --- a/tools/nano-tester/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "nano-tester", - "version": "1.0.0", - "description": "Test NanoUI Templates", - "main": "index.js", - "dependencies": { - "dot": "^1.1.2", - "mime": "^2.2.0" - }, - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "https://github.com/VOREStation/VOREStation.git" - }, - "author": "Leshana", - "license": "AGPL-3.0" -} diff --git a/tools/playsound_finder/README.md b/tools/playsound_finder/README.md deleted file mode 100644 index b566e73148..0000000000 --- a/tools/playsound_finder/README.md +++ /dev/null @@ -1,4 +0,0 @@ -This script extracts playsound() calls and their arguments and outputs it in a csv format - -In order to use this, open a shell at the root of the git directory and run `node tools/playsound_finder/index.js`. -It's pretty far from perfect, but hey, quicker than extracting playsound parameters by hand. diff --git a/tools/playsound_finder/index.js b/tools/playsound_finder/index.js deleted file mode 100644 index 13188e0b2e..0000000000 --- a/tools/playsound_finder/index.js +++ /dev/null @@ -1,78 +0,0 @@ -var fs = require("fs"); - -// List all files in a directory in Node.js recursively in a synchronous fashion -var walkSync = (dir, filelist) => { - var files = fs.readdirSync(dir); - filelist = filelist || []; - files.forEach((file) => { - if (fs.statSync(dir + file).isDirectory()) { - filelist = walkSync(dir + file + "/", filelist); - } else { - filelist.push(dir + file); - } - }); - return filelist; -}; - -var findNearestAbsolute = (data, line) => { - for (let i = line; i > 0; i--) { - const str = data[i]; - if (str?.match(/^\//)) { - return str.trim().replace(/,/g, "|"); - } - } - return null; -}; - -var main = () => { - const files = walkSync("code/"); - const matches = {}; - for (const file of files) { - const data = fs.readFileSync(file, "utf8"); - - if (!data.match(/playsound.*/)) { - continue; - } - - if (!matches[file]) matches[file] = []; - const dataArray = data.split("\n"); - - let i = 1; - for (const line of dataArray) { - i++; - const m = line.match(/playsound.*/); - if (m) { - matches[file].push({ - line: i, - match: m[0], - src: findNearestAbsolute(dataArray, i), - }); - } - } - } - - Object.keys(matches).map((file) => { - const allResults = matches[file]; - allResults.map((obj) => { - obj.params = obj.match.split(","); - for (let i = 0; i < obj.params.length; i++) { - obj.params[i] = obj.params[i] - .trim() - .replace(/playsound\(/g, "") - .replace(/\)/g, ""); - } - }); - }); - - // Final loop, spit out a csv - Object.keys(matches).map((file) => { - let thisFileCsvEntry = ""; - const allResults = matches[file]; - for (const matchObj of allResults) { - thisFileCsvEntry += `${file},${matchObj.line},${matchObj.src},${matchObj.params.join(",")}\n`; - } - fs.appendFileSync("results.csv", thisFileCsvEntry); - }); -}; - -main(); diff --git a/tools/playsound_finder/package.json b/tools/playsound_finder/package.json deleted file mode 100644 index 28cc71ea5c..0000000000 --- a/tools/playsound_finder/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "playsound_finder", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "Tigercat2000", - "license": "AGPL 3.0" -} diff --git a/tools/readme.txt b/tools/readme.txt deleted file mode 100644 index a1c1a17c3b..0000000000 --- a/tools/readme.txt +++ /dev/null @@ -1,6 +0,0 @@ -the compiled exe file for the Unstandardness text for DM program is in: -UnstandardnessTestForDM\bin\Debug\UnstandardnessTestForDM.exe -of -UnstandardnessTestForDM\bin\Release\UnstandardnessTestForDM.exe - -You have to move it to the root folder (where the dme file is) and run it from there for it to work. \ No newline at end of file diff --git a/vorestation.dme b/vorestation.dme index db54f8017c..df3bf81a9b 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -213,7 +213,6 @@ #include "code\__defines\vote.dm" #include "code\__defines\vv.dm" #include "code\__defines\weather.dm" -#include "code\__defines\webhooks.dm" #include "code\__defines\wiki.dm" #include "code\__defines\wires.dm" #include "code\__defines\xenoarcheaology.dm" @@ -618,7 +617,6 @@ #include "code\controllers\subsystems\verb_manager.dm" #include "code\controllers\subsystems\vis_overlays.dm" #include "code\controllers\subsystems\vote.dm" -#include "code\controllers\subsystems\webhooks.dm" #include "code\controllers\subsystems\xenoarch.dm" #include "code\controllers\subsystems\processing\bellies_vr.dm" #include "code\controllers\subsystems\processing\fastprocess.dm" @@ -4855,13 +4853,6 @@ #include "code\modules\vote\vote_datum.dm" #include "code\modules\vote\vote_presets.dm" #include "code\modules\vote\vote_verb.dm" -#include "code\modules\webhooks\_webhook.dm" -#include "code\modules\webhooks\webhook_ahelp2discord.dm" -#include "code\modules\webhooks\webhook_custom_event.dm" -#include "code\modules\webhooks\webhook_fax2discord.dm" -#include "code\modules\webhooks\webhook_roundend.dm" -#include "code\modules\webhooks\webhook_roundprep.dm" -#include "code\modules\webhooks\webhook_roundstart.dm" #include "code\modules\xenoarcheaology\anomaly_container.dm" #include "code\modules\xenoarcheaology\boulder.dm" #include "code\modules\xenoarcheaology\effect.dm"