The ah monsters server is basically dead , I originally made that server probably 4 years ago , As I probably told you a long time ago, to run aside my crazy coop. I wanted a BS , monsters overkill game with constant game play similar to serious SAM.
After I lost the crazy coop server , Any development and projects got pushed into the Ah monsters server , And thinly onto the TVA or Sigma server. This somewhat degraded the game play on those servers ,From a killing cartoon play to a sort of optional sandbox.
Random stuff was added until it made no sense, Drawing guns , Stat systems , Accounts , Cheats , And weird stuff that didn’t have a place, Its probably not to to far from what it was originally , But it’s not interesting to anyone anymore I guess.
AkaCross decided he liked how the original version of the server ran , So he took my backup and runs his own slightly updated version using the original setup.
Lately, The only purpose to hosting it is that it occupies the chat link server , And that it costs me nothing , Since I am already running the machine to host the tva server and other services, Since AH Monsters is usally empty , I just test my stuff where there is people, The sigma server.
So since I put in a lot of backend work in the server I thought I would share some of it , technically a lot of it is already shared privately among friends, But maybe , At the least I can share all the work behind it and maybe officially share the individual mods.
While I don’t really mind sharing the work, I am worried about the take and run issue, That people will take the mods just to have them and not support my development on my own servers etc. that’s sort of a slightly mut point if none plays on them lol, also as such at least some of these mods , Have no use other then educational outside of my setup.
the base game type runs on jcoopz1 , but any game rules supporting gametype *should* work as well.
The first mod I will talk about is called Essentials,
Made about a year ago ,This basically became the processing core of the entire server.
when you kill something , spawn, pick up a weapon , sent a custom command , a chat text , end the level , switch maps, die. this interacts with that is various ways.
The account system you see when you join the server?
its powered by this mod. that statistics systems , uses gamerules to intercept things you kill, Every weapons you pickup, your score, admin assignments , and other values. the data is saved to a single ini file in a random access database format using dynamic arrays. I posted the longer explaination and implementation before that can be used standalone.
Example:
playerdatadb=(Player=”player.*Emo*_OR_*OI*.Killstats”,Property=”aompak.aom_doctorA”,Value=”6″)
The usage of fields in the database strut is self explanatory, But for the layman , Player is a mod/player/entity , Property is the property reference to save/load , and value is the value of that reference.
For kills , the entity is “player.%playername%” , The property in this case declare the killtype , and the value indicates the number of kills of those type.
For Weapons/Inventory , The canpickupinventory gamerule is used to catch anytime you touch or receive a pickup.Again similar formatting:
playerdatadb=(Player=”*Emo*_OR_*OI*.inventory”,Property=”UnrealShare.Eightball”,Value=”1889999″)
The mod currently wont account for used up ammo, and while it saves charges of pickups , its was not important for me to completely make that functional.
But bob , How did you know who is who for a account?
This was hard to work out , After some experimenting , The safest way was every playername that ever joins has there own data saved. Any player that joins basically ops into the system by claiming there names by setting a password. That password lets them reclaim there account , Should there client id change , or they use another computer.
I don’t use client cookies or client settings , T0o easy to lose. The password is the 2 factor.
Once they login there current client id (Or maybe there ip address for older clients) is saved to the database on the server, Next time they join server if client id + Player name matches no action is necessary, Inventory is reloaded and privileges are assigned. Please note changing your player name results in a new account- There is not a easy way to transfer a account.This is this way so you can play multiple profiles , or multiple users from one connection etc. Your password however can be changed at anytime in game.
The database ( and any mod referencing it) can access and write to it arbitrarily. So any 3rd party mods that rely on authentication already have the means available.
Built in offline message support.Wtf bob is this some mmorpg now?
Do to the built in account system , It’s possible to leave basic offline messages in another players “Inbox”. Its rudementy at this time but you have the ability to leave someone who is not on the server but has a account a message , And they will see it next time they login with there account. They can clear the mesages(s). messages have issues with spaces at this time.
here is the code to add mail support
So It’s a Database , That’s Cool But What Else Does It Do?
It also has its own hookmutator system built in, I designed the mod to run as a server actor to be persistent over all game modes , Since some game modes dont have hook mutator lists and I dont trust url options between gamemode via voting.
hook mutators lists are not uncommon, But does your hookmutator list have level specific filtering and support for using generic actors as mutators? This one does.
not only does is support mutators, Generic actors( Like server “actors, pawns listeners etc” ,But it lets you choose when they run, Or don’t using the “MAP=,MAP!=” map=nyleve will result in the mutator only spawned on nylve, while map!=dark will result in the mutator not spawned on dark,unr
Thats Handy Bob , My Game type Already Does that tho!
But Can Your Mutator Rollback admin set commands? huh wat?
Yes, Although currently disabled- There is a game rule that intercepts every admin commands and serves as a auto loader for non loaded actors- If you reference a object / class that not in sandbox , It will attempt to reload it so your mesh actually works when you use set player pawn mesh wooden box.
Rolling back…?
While again primitive, It works for the more important stuff. People bs’ng the server, etc.
before a set command is executed , a get command is issued , and the results , users , property , and command are saved to another array.
Example:
undoarray=(Player=”x21-(DOG)-“,Action=”set cannonbolt damage 999999999″,OldValue=”60.000000″,shortprop=”cannonbolt damage”)
Simply executing “admin undo” will revert the last execution, you can not “redo” tho atm.
Are you paranoid bob, why would you need to undo?
Nope , But this bleeds into the next topic, chat commands. This is how the server became a sandbox. We can intercept the chat , so we do so for account commands etc, So why not add cheats, While I wont get to into the mod specifics of this , /fly./walk./ghost./summon,/god work in chat. Although a nice hidden secret for trusted users , I decided since it is a test server , To just inform everyone when the first time they ever join, They are shown help when they join , and at any time they can type /help to get the full help from all mutators.
Some other available commands that i may get into later:
/mail /nicksrv /createlogin /plogin/butcher /keyit /advance /supersummon /spawnmass /pawns /stats /autovoteend /getmapspots /savespot /gotospot /viewspot /removespot /traceaim /teltrace /getmutators /tpaccept / tpahere /thdeny /.tpa /tpyes
Teleporting.??
Players teleporting. in coop , In a sandbox , It would be preferred for players to teleport where they want to. For this we have about 4 different methods. /summonp would be madness for non admin players, So we have /tphere (playername/partname/playerid) this is how we remedy that issue , You want some one to teleport to you? Request them for approval. Then can approve with /tpaccept and they will be teleported to you. It works the same way with /tpa to goto another player. requests are serialized- many players can request you to teleport to them- each /tpa move to the first request.
“spots”?
This interest for this idea was renewed from ugoldmp , But I used to have a implementation in btoolsssf of somthing similar long ago. You basically can save some vector location to the server and any one can go to that using /gotospot # the plan was to make this multimap based there is a database value player.pendinglocation declared somewhere – If you are the only user on the server , Used /gotospot # , and that spot was saved on a differnt map , the server would switch the map and telport you there after you joined. good for bases , or play areas,testing , etc.
admin exit catching,
back when i used sql for this before i couldnt use natives anymore, I had to have a safe way to close the database , and somtime admins close server using admin exit , So i decided to use this to start a countdown to warn players and give mods a chance to save there place , could use it to bring back setting at restart.
Crashmap tracking.
The server sometimes crashes on a map or is restarted,while I covered this before in depth in a seprate post , the basics of it is the batch file sends the mod a argument to tell if it crashed based on running.ini being present , and the mod can decide if it wants to reload the map is left off at.
if you want to read more about crash detection handling read this. ,
essentials part 1b – toasty.
toasty227 is built into this package for the purposes of testing, there exists a standalone version with explanations here
part 1c – .Giveitems
the giveitem code is honestly based on code from tomkatrebel that hase been adapted to work at a gamrule.it provides a functionality to add weapons to the default loadout.
part1d -swapdropper
swapdropper is a DWk ( drop when killed) mutator that functions simalarly to dzmap mutates psi inventory. the basic concept is somthing is killed and monsters come out of the corpse. dzmap mut does this well but limits the drops class to “pickups” since it utilizes the dropwhenkilled built into scripted pawns , and relies on fake items that are coded to spawn monster classes ( limited to scripted pawns as well).
swapdroper doesn’t limit you to anything.
it utilizes gamerules “pawnKill” to caught the death of a pawn – and when i mean pawn i mean *PAWN*, player and monsters. it can conditionaly do either a part name match – so your icepupae also spawn your subactors along with normal pupae, exact string match or a isa to staight up bulk catch a entire species.( think – isa “playerpawn” etc).
this has the bonus of not effecting dropwhenkilled of pawn! it can run side by side of dzmapmut or other dwk mutatoras for double caous , and wont cause mapbreaking replacments on “required” pickups drops.
you can drop a unlimited count of anything(drop is root class actor!) when something or anything is arbitrarily killed. you can drop 3 pupaue everytime a pupae dies and destroy you server if you want. , a woodenbox or explosionring when a player dies etc, its interesting- did i mention you can do retarted things … like spawn bots/ more monsters/ mutators ? how about spawning a monsterspawne/r mutatoror /gamtype/landmine/triggereddeath everytime a player dies ? wtfretartville!!!!
part1e -mcoopGR
do you like playing as a monster???? if you have jmdm installed? if you do and you run this mod , it will lets jcoop plyers join using some monsternames!
part1f -whitelist
you want peace and quiet? screw everyone else and whitelist your players with this mod.
part1g -hitsoundsmh
did you really hit them with that longshot?
this gamerules mod will tell you when you shot a monster , another teammate ,or you are shot.
it requires some sound file i probably didnt include, but its quake3 sounds.
shot sound are user togglable via chat commands
/hitsoundsvoldown /hitsoundsvolup /togglehitsounds
most of the other submods inclicluded are probably obsolete or not worth documenting.
Essentials is just a base i built many things into.
You can download the full essentials project package here incase you want to run it.
source codefor browsing is here
Next chapter we will be talking about some other homebrew mods that i made for the server.