Fixes#646, #579, #863
Completely redoes the click code. Moves all click related code into code/_onclick for reference. Also moves hud datum code and all the screen object code I could find into code/_onclick/hud, as it is related. Item attack(), attackby(), afterattack(), and attack_self() have been moved into item_attack.dm for consistency.
Completely removes dummy objects and adds atom.Adjacent(user). This proc checks for border items and anything marked with throwpass for determining whether or not you can reach a given square. A turf helper, ClickCross(), was added to facilitate this.
Removes the monolithic Atom.Click() proc in favor of an overridable click handler attached to mobs. Click code no longer uses the : path operator as a consequence, and mob/lastDblClick has been moved to Client/next_click. A few end arounds were necessary (screen objects, buildmode, and spells), but this has been handled by repurposing Atom.Click(); if you have special click code, insert it in the object's Click() function and return 1 to prevent normal processing.
This update adds support for attack_ghost(); the previous "new" click handler had support for it but was never finished. I have taken the liberty of letting ghosts click portals, the gateway, and the teleporter to jump to the intended target square, and kept the previous default action of examine()ing every damn thing you click. It is to be suggested that you could do more with this proc when ghost interactions are enabled.
This update also adds support for double clicking. It is currently only used for ghosts and AIs, because the original (first) click still registers normally. For both of these, double clicking a square will jump you to it, and double clicking a mob will follow it. In the case of ghosts, double clicking bots and the singularity will also set you following it; if you double click your own corpse, you will re-enter it; this also works if your body is in a closet, sleeper, DNA scanner, etc. Default mobs ignore double clicks as normal.
-- NOTE --
There are two flags which were previously unused or misused by click code: USEDELAY and NODELAY. Ostensibly, USEDELAY would double the normal 1sec delay, and NODELAY would remove it.
Using either of these flags as intended would significantly affect the timing of the game. In particular, USEDELAY is currently applied to guns and about everything else that acts at range. I am adding USEDELAY as a half-second increase for now, but I have not put a significant amount of thought into it. I considered lowering the normal 1sec delay to .8sec to balance it, but the consequences of that on combat involve more calculations than I care to make.
NODELAY seems to never have been used, and I did not implement it, but I could do so trivially.
Using the dropdown menu / changing health / names of people in view variables now actually requires +VAREDIT.
Shuttle moving moved from +FUN to +ADMIN for convenience sake.
+ADMIN now required to view antagonists / law changes, before it was only required to check antags via verbs, which you could get around through the secrets menu.
+ADMIN Also now required to view all of the special information given about players in who menu (like antagonist status), but all admins can still see stealth keyed admins.
Added helper: /proc/findchar(haystack, needles, start=1, end=0)
works like findtext except it finds the first occurrence of one of the characters from the needles string, within haystack.
Permissions can now be removed as well as added, by replacing the + with a -. e.g. +BAN adds bans permissions, -BAN removes them. This applies to admin_ranks.txt and the permissions panel.
Verb overrides are now possible for admins_ranks. Specific verbs can be forced-on, or forced-off via keywords like +/client/proc/mimespeak or -/client/verb/ooc. This applies both to admin_ranks.txt and the permissions panel. SQL system is not compatible.
admin_ranks are now datums. This means admin_ranks actually behave more like permission groups as intended.
When you temporarily modify an admin's permissions via the permissions panel, their rank_name is appended with "([ckey])". This prevents modifications to their rights affecting everyone.
admin rank names now support - _ and @ characters (since ckeyEx() does not strip these).
SQL permissions system was modified. SQL databases will have to be updated or they will no longer work.
WARNING: admin_ranks.txt and admins.txt format has changed slightly! You will need to redo those txt files!
Resolves an issue where whitespace in names could cause a saveslot button to wrap to the next line.
Byond members:
can colour their name using the admin ooc-colour feature.
get a icon next to their name in ooc chat.
can choose their icon_state as a ghost.
get 8 saveslots
unlock_content tracks the return of IsByondMember(). This is to allow for easier testing/debug.
- Greatly decreased the goat attack damage. Fixes Issue 1310.
- Changed how the suffixes are assigned for mulebots. Fixes Issue 1204.
- Added some checks for occupants in sleepers/cryo/cloner pod, stops an exploit of being able to have a friend teleport you to the sleeper when you're in danger.
- Re-added advance proc call for debug flag.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5796 316c924e-a436-60f5-8080-3fe189b3f50e
http://forums.nanotrasen.com/viewtopic.php?f=16&t=12245#p189186
Ported all the random events to Pete/Gia's event system:
>Event system now supports weighting. default is 10. a weight of 5 is half as likely as default, 20 twice as likely....etc.
>Increased the frequency of events (dust happens over 60% of the time though)
>tidied up some ninja code: ninjas now get ~5 objectives. So they are hardmode.
>made the gravity toggle into a random event
>event system now supports round-start events
>event system now supports holiday events
>event system now supports events which can only happen after the round has lasted a certain number of ticks
>event system now supports max_occurrences for events. Setting any event's max_occurrences to 0 will stop it randomly occurring
>events now support being fed associative lists inside new(). This allows you to override their variables easily.
>wormhole events no longer cause loads of lag. They are extremely deadly. wormholes should be avoided
Other:
>replaced the procs for fetching candidates for ninjas and aliums with /proc/get_candidates(be_special_flag), it returns a list of active clients with that be_special preference enabled.
>minor fixes to minds
>your memories are displayed to you at Login()
>removed aliens_allowed
>removed ninjas_allowed
>pick_n_take() is now more efficient (uses Cut() rather than Remove()
Things I added:
- Made the pandemic call ..() instead of doing the checks itself.
- Made the staff of animation use more charge.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5720 316c924e-a436-60f5-8080-3fe189b3f50e
- Time to tidy up my old projects: Moved a few of my old, unfinished projects to unused: liquid simulation, brewing, heavy cables and logic gates/cables.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5621 316c924e-a436-60f5-8080-3fe189b3f50e
fixed giveruntimelog getruntimelog and getserverlog
Any admin with ADMIN rights can give anybody permission to view runtimes simply by typing .giveruntimelog The person given permission can then type .getruntimelog
Admins can type .getruntimelog without giving themselves permissions first
Moved a lot of the copypasta code into helper procs in __HELPERS/files.dm. There is one which allows a client to browse through folders on the server (in this case to look for logfiles). You can now also return to the directory you started at.
Note, for some weird reason, runtimes will no longer show in dreamdeamon. If this is a massive problem I can make it a compile option or something (or you can comment out the line if you're a coder). I know this is a massive pain but it sort of removes much of the effort in getting runtimes from other servers, since they all now have their runtimes saved in a way coders can easily access. It also sort of means we don't have to rely on people remembering to log runtimes and such. And all logs will be organised by month.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5466 316c924e-a436-60f5-8080-3fe189b3f50e
This should remove the half second delay that admins experience whenever they right click. The delay goes up as server load increases. I couldn't test this on an empty server tho, obviously.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5299 316c924e-a436-60f5-8080-3fe189b3f50e
You can now modify specialrole candidacy mid-round and it will save changes to your savefile.
Added a BE_NINJA flag. Doesn't do anything yet. If somebody wants to implement it, go for it.
Moved prefrences stuff from new_player to the folder /code/modules/client/
Renamed toggles so they appear in a nice order.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5146 316c924e-a436-60f5-8080-3fe189b3f50e
Toggling these preferences in-game will update your savefile. Meaning that your preferences will persist between rounds.
Added some savefile_version updating stuff. It's pretty crude. If you're changing any of the savefile stuff just ask and I can change it/help.
Removed some unused client vars
Ghosts no longer hear ambience. Simplified ambience code.
Simplified lobby music code. It will no longer cause a massive queue of events (which would eventually balloon in memory use)
Moved ooccolor and sound_adminhelp back to prefs. It's easier and allowed me to remove the setupclient() stuff completely.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5143 316c924e-a436-60f5-8080-3fe189b3f50e
The number of strikes a person gets is a define so hosts can modify it to their liking (I should probably move this to a config option but I can't be bothered to test it again). It defaults to 3 strikes, on the third strike you're out. It'll autoban you for 10 minutes.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5123 316c924e-a436-60f5-8080-3fe189b3f50e
Removed the last of the old promotion/demotion code.
Permissions panel accessible via player panel.
Uncommented the attack log verb. I mistakenly thought it wasn't used.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5102 316c924e-a436-60f5-8080-3fe189b3f50e
Likewise, removed the spawn_xeno verb and made an equivalent bit of code in the FUN section of the secrets panel.
Fixed the create_xeno proc. It was supposed to ask you which type of alien to spawn but it was sending the popup to src, which should have been usr.
Create_xeno can now spawn queens and larva.
Create_xeno is fed a ckey (optional) rather than a ghost mob. Which will make it more versatile and reliable should clients log out during popups and such.
Created an client.is_afk(duration) proc. If the client has been inactive for duration frames (11 frames is roughly 1 second), it will return the number of frames it has been inactive. Otherwise it returns 0. If no duration value is given it defults to 3000 which is roughly 5 minutes. There's a bunch of code I need to replace with this which I will do after I've got the rest of the admin rank stuff finished as that takes priority.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5040 316c924e-a436-60f5-8080-3fe189b3f50e
Player panel (for an individual mob) is available to all admins regardless of rights (like above, each link on the page has its own rights requirements)
Essentially, with no rights you can see these panels, but you cannot use most of the tools they link to. Additional rights increase your access to corresponding tools.
Removed some duplicate code in /datum/admins/Topic for subtle messages, traitor panel and a few others. There's a lot more to do in this regard but it can wait for now.
We're near the end of the disruption now. I sort of have a clear idea what I'm meant to be doing so work will speed up. Full documentation describing exactly what can and can't be done with each flag will be available soon.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5035 316c924e-a436-60f5-8080-3fe189b3f50e
- The current, file-based ban system is now a legacy system, the use of which is strongly discouraged for servers, which are constantly online.
- Added a database-based banning system, with a new baning panel, accessible through the 'banning panel' verb. Servers, which use this new banning system, will get the new panel up even if they use the old 'unban panel' or 'display job bans' verbs. These remain there for legacy support purposes. (Panel screenshot below)
- The most notable benefits of the new system are the ability to add offline bans, meaning the person does not have to be connected for a ban to be applied to their name. The second benefit is the ability to look up all previous bans that the person had.
- The major disadvantage is the complete incompatibility between the old and new system, meaning you have to either do a lot of copy-pasting or playing around in code to sync the old system with the new one. Servers upgrading to this system might want to consider a purge of all bans, if they don't want to go through this. Due to the incompatibility, there are no transition tools provided. Please contact me (errorage/rageroro) in #coderbus for help in syncing your database. The /tg/ legacy and database systems have been synced.
- The server configuration defaults to use the legacy system, as the new one requires the database to be set up. Please hash BAN_LEGACY_SYSTEM in config.txt as explained, to use the new system. If the database connection fails, the server reverts to the legacy system.
If any bugs or errors appear with either the legacy or new ban system, please let me know ASAP. The same applies if there are any syncronization problems between the legacy and new system, resulting in banned people unbanned or unbanned people banned.
Panel screenshot:
http://www.kamletos.si/new%20ban%20panel2.PNG
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5034 316c924e-a436-60f5-8080-3fe189b3f50e
Moved fun (admin-event stuff) up to badmin rank.
deadchat visibility defaults to on
removed update_admin()
fixed associate so it won't accidentally add people to the admins list multiple times.
toggling ooc on/off is now available to any admin regardless of rights.
mass deletion is now restricted to DEBUG or SERVER flags
ADMIN, SERVER, DEBUG can all use the delete verb
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5032 316c924e-a436-60f5-8080-3fe189b3f50e
Adminhelp now loops through all clients in var/list/admins rather than every client in the world.
Both SERVER and FUN can toggle random events on/off.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5029 316c924e-a436-60f5-8080-3fe189b3f50e
- Moved 'reload admins' into the SERVER permission. It already had a check for R_SERVER when it was run, so it being in the debug list was likely a typo. There should probably be an ADVANCEDADMIN permission type or something, that contains the admin-related tools that you don't want all admins to have access to. A 'game masters only' list of verbs, so to speak.
- Edited admin_ranks.txt and the other dm files accordingly.
- Standardized diagnostics.dm
PS: I really love permission based admin verb assignment. So much easier to work with!
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5012 316c924e-a436-60f5-8080-3fe189b3f50e
SERVER HOSTS:
This commit replaces the existing admin-rank system. It is now more customizable.
Admin.txt essentially works the same as it always has. Each line should look like:
ckey - admin rank
There is now however, an admin_ranks.txt. This textfile allows you to define ranks like so:
admin rank +ADMIN +FUN +BUILD
the +KEYWORD are flags adding permissions to that rank. There are brief descriptions in the text-file explaining what they do.
You can now name the ranks anything you like, and give them the permissions you want them to have. This allows, for instance, ranks like:
Game Admin on disciplinary +ADMIN +BAN
This would give that game admin only the tools they need to admin. They would not have access to 'fun' verbs which control events and antags.
There's lots of things you can do. For instance, a coder rank whom can debug stuff but cannot do admin tasks:
Codermin +DEBUG +VAREDIT +SERVER
There's lots you can do. As it evolves it will hopefully become more flexible.
admin_ranks.txt defaults to use the old admin rank names.
Apologies in advance as there will be a lot of anomalies, such as ranks losing verbs they once had. Please let me know about any problems. I can fix them quite easily simply by moving verbs between the lists or splitting the lists up into new flags.
CODERS:
There is now a check_rights(flags) proc.
It check is usr is and admin and has -at least one of- the rights specified.
It checks > usr < not src, so keep that in mind!
If you need to check if something other than usr has specific tights, you can do if(holder.rights & R_ADMIN) etc.
KNOWN ISSUES:
+FUN probably needs to be split up into +MOBS and +EVENTS
In-game promotion/demotion is currently disabled. It will be readded after everything else works ok.
Erro's sql rights changes stuff is currently commented out. It will be re-added.
There are still many many verbs which need updating.
Apologies in advance for any inconvenience.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4991 316c924e-a436-60f5-8080-3fe189b3f50e
>tried to make the comments less confusing.
>Removed the procs for rebuilding the lists (they weren't meant to be used and half were broken anyway).
>added a directory. It maps ckey to client like so directory[ckey] = client. It could be used for PMs, banning, and various other admin tools rather than using \ref[]
>var/list/admins is now a list of clients whom are admins.
>var/list/admin_datums is what var/list/admins used to be. A map from ckey -> admin datum
Most of this is so I can add modular admin ranks in a non-horrendous way and fix some existing issues.
>var/list/client_list is now var/list/clients (laziness sorry)
>removed some needless loops and stuff.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4951 316c924e-a436-60f5-8080-3fe189b3f50e
-You cannot spread diseases which are marked as SPECIAL or NON_CONTAGIOUS via blood injections.
-Carp no longer drift in space.
-Captain helmet now protects you from facehuggers.
-All humanoid aliens can now Regurgitate.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4946 316c924e-a436-60f5-8080-3fe189b3f50e
-Acces to asay chat, chatting included (asay comes with adminlogs alerts)
-Toggle adminhelp sound
-Deadmin themselves
-Answering adminhelps (They shouldn't be doing this acting like real admins)
-They can see prayers
Everything else is gone, VV, PP, subtle message, etc.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4903 316c924e-a436-60f5-8080-3fe189b3f50e
- No longer see antagonists via /who command.
- Now have the 'toggle adminhelp sound' verb.
Removed a bunch of the 'deadmin_self' verb from various admins and gave it to admin observers. All admins should have it now.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4895 316c924e-a436-60f5-8080-3fe189b3f50e
Removing:
-Erro code of r4861. Xsi gave me permission p-please don't kill me.
Proc added:
-Added a proc that checks the rank of the admin and compares it to a var given. If the check fails, returns a 0 and a "You need more acces" message. If not, returns an 1. admin_rank_check(var/rank, var/requested)
Admin option changes:
-You need to be at least a trialmin to change a var in VV.
-You need to be at least a trialmin to change the vars on the tator panel
-You need to be at least a trialmin to allow votes or start a custom one. (All admins can cancel votes)
-All mob transformations (of playerpanel and VV) and special options (like godmode), now requires trialmin status or higher.
-All admins can use aghost now.
-All admins can right click - VV if they are a ghosting.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4889 316c924e-a436-60f5-8080-3fe189b3f50e
-Moved "debug_controller" to badmin, so if the controller needs debugging a game admin can promote a coder to badmin and allow them to debug it.
-Fixed an issue with aliens having two different status tabs.
-Moved all facehugger icons to icons/mob/alien.dmi
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4862 316c924e-a436-60f5-8080-3fe189b3f50e
/obj/admins is now /datum/admins because that's what datums are for you silly people
Moved var/datum/marked_datum from /obj/ to /datum/admins
admin datums are persistent throughout the round. They are stored in the var/list/admins rather than the ranks. This is so admin preferences may be moved into the datum to have them persist even after Login/Logout/Disconnects.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4749 316c924e-a436-60f5-8080-3fe189b3f50e