From 5f8c6dfd9a55b7a3ff9efe36c7a0aae8d01f3178 Mon Sep 17 00:00:00 2001 From: Mloc-Argent Date: Mon, 7 Apr 2014 19:42:06 +0100 Subject: [PATCH 01/10] voting: failed gamemode votes will undelay too Moved the undelay code in voting.dm out of the success check, as failures should get undelayed too. Signed-off-by: Mloc-Argent --- code/controllers/voting.dm | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/code/controllers/voting.dm b/code/controllers/voting.dm index 8b1f719bc1..ef1e41dd53 100644 --- a/code/controllers/voting.dm +++ b/code/controllers/voting.dm @@ -163,13 +163,14 @@ datum/controller/vote restart = 1 else master_mode = . - if(!going) - going = 1 - world << "The round will start soon." if("crew_transfer") if(. == "Initiate Crew Transfer") init_shift_change(null, 1) + if(mode == "gamemode") //fire this even if the vote fails. + if(!going) + going = 1 + world << "The round will start soon." if(restart) world << "World restarting due to vote..." From a538357b3ecb2b7d9774b537a801f5f0ab8e914d Mon Sep 17 00:00:00 2001 From: Mike Date: Tue, 6 May 2014 16:43:16 -0400 Subject: [PATCH 02/10] Fixed cell chargers being infinite energy sources --- code/game/machinery/cell_charger.dm | 11 +++++++---- code/global.dm | 3 ++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index a9dcdc537d..7632e9cb6e 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -10,6 +10,7 @@ power_channel = EQUIP var/obj/item/weapon/cell/charging = null var/chargelevel = -1 + var/efficiency = 0.875 //<1.0 means some power is lost in the charging process, >1.0 means free energy. proc updateicon() icon_state = "ccharger[charging ? 1 : 0]" @@ -91,8 +92,10 @@ //world << "ccpt [charging] [stat]" if(!charging || (stat & (BROKEN|NOPOWER)) || !anchored) return - - use_power(200) //this used to use CELLRATE, but CELLRATE is fucking awful. feel free to fix this properly! - charging.give(175) //inefficiency. - + + var/power_used = 100000 //for 200 units of charge. Yes, thats right, 100 kW. Is something wrong with CELLRATE? + + power_used = charging.give(power_used*CELLRATE*efficiency) + use_power(power_used) + updateicon() diff --git a/code/global.dm b/code/global.dm index b7f6e3e4c0..07eaf211e3 100644 --- a/code/global.dm +++ b/code/global.dm @@ -115,7 +115,8 @@ var/list/reg_dna = list( ) var/mouse_respawn_time = 5 //Amount of time that must pass between a player dying as a mouse and repawning as a mouse. In minutes. -var/CELLRATE = 0.002 // multiplier for watts per tick <> cell storage (eg: 0.02 means if there is a load of 1000 watts, 20 units will be taken from a cell per second) +var/CELLRATE = 0.002 // multiplier for watts per tick <> cell storage (eg: 0.02 means if there is a load of 1000 watts, 20 units will be taken from a cell per second) + //It's a conversion constant. power_used*CELLRATE = charge_provided, or charge_used/CELLRATE = power_provided var/CHARGELEVEL = 0.0005 // Cap for how fast cells charge, as a percentage-per-tick (0.01 means cellcharge is capped to 1% per second) var/shuttle_z = 2 //default From 59cb5af50eb50b418db17a233c6265faf45fe9c1 Mon Sep 17 00:00:00 2001 From: Mike Date: Tue, 6 May 2014 16:45:54 -0400 Subject: [PATCH 03/10] Updated PACMAN comments. --- code/modules/power/pacman2.dm | 2 +- code/modules/power/port_gen.dm | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/power/pacman2.dm b/code/modules/power/pacman2.dm index 89d65a6ae2..ad9d9b155d 100644 --- a/code/modules/power/pacman2.dm +++ b/code/modules/power/pacman2.dm @@ -1,7 +1,7 @@ //This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05 -//Baseline portable generator. Has all the default handling. Not intended to be used on it's own (since it generates unlimited power). +//PACMAN variant that can run on the small plasma tanks. /obj/machinery/power/port_gen/pacman2 name = "Pacman II" desc = "P.A.C.M.A.N. type II portable generator. Uses liquid plasma as a fuel source." diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 57cc6a04bd..7f18f75fc7 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -93,6 +93,7 @@ display round(lastgen) and plasmatank amount else usr << "\blue The generator is off." +//A power generator that runs on solid plasma sheets. /obj/machinery/power/port_gen/pacman name = "P.A.C.M.A.N.-type Portable Generator" var/sheets = 0 From 36dbb67ceb032446f04cbfed438a64968bff50ad Mon Sep 17 00:00:00 2001 From: Mike Date: Tue, 6 May 2014 20:12:40 -0400 Subject: [PATCH 04/10] Fixed air alarm heaters using 1000x less power... ...than they should. Note that MAX_ENERGY_CHANGE is 1000, so air alarm heaters will now draw a maximum of 1 kW instead of 1 W, much more befitting of a heater. --- code/game/machinery/alarm.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index c781bb20c9..04da621a45 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -187,8 +187,8 @@ var/heat_capacity = gas.heat_capacity() var/energy_used = min( abs( heat_capacity*(gas.temperature - target_temperature) ), MAX_ENERGY_CHANGE) - //Use power. Assuming that each power unit represents 1000 watts.... - use_power(energy_used/1000, ENVIRON) + //Use power. Assuming that each power unit represents 1 watts.... + use_power(energy_used, ENVIRON) //We need to cool ourselves. if(environment.temperature > target_temperature) From 1861c7607fec2580430c798d351f281e05ca13ba Mon Sep 17 00:00:00 2001 From: Ccomp5950 Date: Tue, 6 May 2014 21:38:47 -0500 Subject: [PATCH 05/10] Stops muzzled folks from talking. --- code/modules/mob/living/carbon/human/say.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index 066d5a5fd8..32a64a145b 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -14,6 +14,9 @@ if(stat == 2) return say_dead(message) + if (istype(wear_mask, /obj/item/clothing/mask/muzzle)) //Todo: Add this to speech_problem_flag checks. + return + if(copytext(message,1,2) == "*") return emote(copytext(message,2)) From b7d455a64bf3b1cab47d2b01781c3b6364ef0944 Mon Sep 17 00:00:00 2001 From: Ccomp5950 Date: Wed, 7 May 2014 01:41:19 -0500 Subject: [PATCH 06/10] [Bugfix] Fixes partial prints. Playays will now no longer leave complete prints from touching an item once. Instead they will leave a partial print, that has a high chance of leaving more and more with each touch. You have a 1/100 chance of leaving a full set of prints on your first touch. Fixes #4176 --- code/game/atoms.dm | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 917ecfe9a3..47903bbc30 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -317,7 +317,43 @@ its easier to just keep the beam vertical. var/full_print = md5(H.dna.uni_identity) // Add the fingerprints - fingerprints[full_print] = full_print + // + if(fingerprints[full_print]) + switch(stringpercent(fingerprints[full_print])) //tells us how many stars are in the current prints. + + if(28 to 32) + if(prob(1)) + fingerprints[full_print] = full_print // You rolled a one buddy. + else + fingerprints[full_print] = stars(full_print, rand(0,40)) // 24 to 32 + + if(24 to 27) + if(prob(3)) + fingerprints[full_print] = full_print //Sucks to be you. + else + fingerprints[full_print] = stars(full_print, rand(15, 55)) // 20 to 29 + + if(20 to 23) + if(prob(5)) + fingerprints[full_print] = full_print //Had a good run didn't ya. + else + fingerprints[full_print] = stars(full_print, rand(30, 70)) // 15 to 25 + + if(16 to 19) + if(prob(5)) + fingerprints[full_print] = full_print //Welp. + else + fingerprints[full_print] = stars(full_print, rand(40, 100)) // 0 to 21 + + if(0 to 15) + if(prob(5)) + fingerprints[full_print] = stars(full_print, rand(0,50)) // small chance you can smudge. + else + fingerprints[full_print] = full_print + + else + fingerprints[full_print] = stars(full_print, rand(0, 20)) //Initial touch, not leaving much evidence the first time. + return 1 else From 073059e0dca2e1616b843cf7c36b0e7668954c48 Mon Sep 17 00:00:00 2001 From: Mloc-Argent Date: Wed, 7 May 2014 17:33:05 +0100 Subject: [PATCH 07/10] tools: adding the patched/fixed MapPatcher.jar Allows for easier map conflict resolution. Prompts the user for confirmation on a tile conflict instead of dying. Signed-off-by: Mloc-Argent --- tools/mapmerge/MapPatcher.jar | Bin 10136 -> 10673 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tools/mapmerge/MapPatcher.jar b/tools/mapmerge/MapPatcher.jar index 5cbaad488c146d8a7453f114260dbccfe61e7861..a8bc3560b4436b033d72da4248847b5c056bafcf 100644 GIT binary patch literal 10673 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 literal 10136 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 I_ Date: Wed, 7 May 2014 13:53:38 -0500 Subject: [PATCH 08/10] AdminPM fixes Invisimins won't show what their rank is it will simply say "Admin" Non-staff won't get to see the adminlink (?) People receiving adminPM's won't get the wrong version of it allowing them to only reply to themselves. Removed the commented out stuffs. --- code/modules/admin/verbs/adminpm.dm | 75 +++-------------------------- 1 file changed, 8 insertions(+), 67 deletions(-) diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 7e1b2cad97..efea3d1609 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -35,7 +35,8 @@ //takes input from cmd_admin_pm_context, cmd_admin_pm_panel or /client/Topic and sends them a PM. //Fetching a message if needed. src is the sender and C is the target client -/client/proc/cmd_admin_pm(var/client/C, var/msg) + +/client/proc/cmd_admin_pm(var/client/C, var/msg = null) if(prefs.muted & MUTE_ADMINHELP) src << "Error: Private-Message: You are unable to use PM-s (muted)." return @@ -45,14 +46,6 @@ else adminhelp(msg) //admin we are replying to left. adminhelp instead return - /*if(C && C.last_pm_recieved + config.simultaneous_pm_warning_timeout > world.time && holder) - //send a warning to admins, but have a delay popup for mods - if(holder.rights & R_ADMIN) - src << "\red Simultaneous PMs warning: that player has been PM'd in the last [config.simultaneous_pm_warning_timeout / 10] seconds by: [C.ckey_last_pm]" - else - if(alert("That player has been PM'd in the last [config.simultaneous_pm_warning_timeout / 10] seconds by: [C.ckey_last_pm]","Simultaneous PMs warning","Continue","Cancel") == "Cancel") - return*/ - //get message text, limit it's length.and clean/escape html if(!msg) msg = input(src,"Message:", "Private message to [key_name(C, 0, holder ? 1 : 0)]") as text|null @@ -85,7 +78,10 @@ else recieve_color = "maroon" send_pm_type = holder.rank + " " - recieve_pm_type = holder.rank + if(!C.holder && holder && holder.fakekey) + recieve_pm_type = "Admin" + else + recieve_pm_type = holder.rank else if(!C.holder) src << "Error: Admin-PM: Non-admin to non-admin PM communication is forbidden." @@ -112,70 +108,15 @@ adminhelp(reply) //sender has left, adminhelp instead return - recieve_message = "[recieve_pm_type] PM from-[get_options_bar(C, 1, C.holder ? 1 : 0, 1)]: [msg]" + recieve_message = "[recieve_pm_type] PM from-[get_options_bar(src, C.holder ? 1 : 0, C.holder ? 1 : 0, 1)]: [msg]" C << recieve_message - src << "[send_pm_type]PM to-[get_options_bar(C, 1, holder ? 1 : 0, 1)]: [msg]" - - /*if(holder && !C.holder) - C.last_pm_recieved = world.time - C.ckey_last_pm = ckey*/ + src << "[send_pm_type]PM to-[get_options_bar(C, holder ? 1 : 0, holder ? 1 : 0, 1)]: [msg]" //play the recieving admin the adminhelp sound (if they have them enabled) //non-admins shouldn't be able to disable this if(C.prefs.toggles & SOUND_ADMINHELP) C << 'sound/effects/adminhelp.ogg' - /* - if(C.holder) - if(holder) //both are admins - if(holder.rank == "Moderator") //If moderator - C << "Mod PM from-[key_name(src, C, 1)]: [msg]" - src << "Mod PM to-[key_name(C, src, 1)]: [msg]" - else - C << "Admin PM from-[key_name(src, C, 1)]: [msg]" - src << "Admin PM to-[key_name(C, src, 1)]: [msg]" - - else //recipient is an admin but sender is not - C << "Reply PM from-[key_name(src, C, 1)]: [msg]" - src << "PM to-Admins: [msg]" - - //play the recieving admin the adminhelp sound (if they have them enabled) - if(C.prefs.toggles & SOUND_ADMINHELP) - C << 'sound/effects/adminhelp.ogg' - - else - if(holder) //sender is an admin but recipient is not. Do BIG RED TEXT - if(holder.rank == "Moderator") - C << "Mod PM from-[key_name(src, C, 0)]: [msg]" - C << "Click on the moderators's name to reply." - src << "Mod PM to-[key_name(C, src, 1)]: [msg]" - else - C << "-- Administrator private message --" - C << "Admin PM from-[key_name(src, C, 0)]: [msg]" - C << "Click on the administrator's name to reply." - src << "Admin PM to-[key_name(C, src, 1)]: [msg]" - - //always play non-admin recipients the adminhelp sound - C << '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.popup_admin_pm) - spawn() //so we don't hold the caller proc up - var/sender = src - var/sendername = key - var/reply = input(C, msg,"Admin PM from-[sendername]", "") as text|null //show message and await a reply - if(C && reply) - if(sender) - C.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 - src << "Error: Admin-PM: Non-admin to non-admin PM communication is forbidden." - return - */ - log_admin("PM: [key_name(src)]->[key_name(C)]: [msg]") //we don't use message_admins here because the sender/receiver might get it too From 535840f0aea4dd011f25225ad5c978a59965c7ce Mon Sep 17 00:00:00 2001 From: Ccomp5950 Date: Thu, 8 May 2014 00:18:06 -0500 Subject: [PATCH 09/10] Bugfix: Brand new players will have a client.player_age of 0 Before: When a client is created it's player_age variable is set to "Requires Database", then a select query is ran against the database to see if they have been seen before if they have logged in before this will have a row for them and it will set player age. However if there is no row for them it doesn't change player_age from default. After: Before we check for an entry in the database we set their player_age to zero, we already checked we have a database connection so we know we will be able to pull this information and if we can't then it means they are a new player. Set their player_age to zero and be done with it. What this does: Brand new players will no longer be able to bypass the jobs minimal age limit. --- code/modules/client/client procs.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 7382f33ffe..90c891ae24 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -191,6 +191,7 @@ var/DBQuery/query = dbcon.NewQuery("SELECT id, datediff(Now(),firstseen) as age FROM erro_player WHERE ckey = '[sql_ckey]'") query.Execute() var/sql_id = 0 + player_age = 0 // New players won't have an entry so knowing we have a connection we set this to zero to be updated if their is a record. while(query.NextRow()) sql_id = query.item[1] player_age = text2num(query.item[2]) From 1f6ec81e4039e35e298b642624a23e5fda8efcd0 Mon Sep 17 00:00:00 2001 From: Ccomp5950 Date: Thu, 8 May 2014 00:52:04 -0500 Subject: [PATCH 10/10] Jobs you can't select are struckthrough instead of just being red. Before: It's going to be kinda confusing when a new player goes to setup their jobs and they see this: http://i.imgur.com/miK9Isk.png Specifically "unavailable occupations are in red" and then a list of days till they can play that role but also RED [NEVER] which to a new player migth cause confusion thinking they can never play that role. After: Remove the red and add a strikethrough ( http://i.imgur.com/BQ90xr6.png ) to show "these jobs are unavailable" while making the other jobs look, well more available. --- code/modules/client/preferences.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 6a4a81e141..e85d70705f 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -418,7 +418,7 @@ datum/preferences var/HTML = "" HTML += "
" - HTML += "Choose occupation chances
Unavailable occupations are in red.

" + HTML += "Choose occupation chances
Unavailable occupations are crossed out.

" HTML += "
\[Done\]

" // Easier to press up here. HTML += "
" // Table within a table for alignment, also allows you to easily add more colomns. HTML += "" @@ -443,11 +443,11 @@ datum/preferences var/rank = job.title lastJob = job if(jobban_isbanned(user, rank)) - HTML += "[rank]" + HTML += "[rank]" continue if(!job.player_old_enough(user.client)) var/available_in_days = job.available_in_days(user.client) - HTML += "[rank]" + HTML += "[rank]" continue if((job_civilian_low & ASSISTANT) && (rank != "Assistant")) HTML += "[rank]"
\[BANNED]
\[BANNED]
\[IN [(available_in_days)] DAYS]
\[IN [(available_in_days)] DAYS]