Commit Graph

1123 Commits

Author SHA1 Message Date
Regalis
92a74808fe Fix to oxygen distribution logic: gaps used to move a fixed amount of oxygen between hulls every frame, causing the oxygen levels to fluctuate constantly. While it wasn't noticeable in regular sized hulls, smaller hulls created excessive amounts of NetworkEvents due to large fluctuations in the oxygen percentage.
Now the gaps make the oxygen percentages settle to the average value, and hulls have a minimum delay of 0.5s between the creation of NetworkEvents.
2017-04-18 21:37:23 +03:00
Regalis
f407a38c9e Fixed clients being able to vote for kicking multiple times by disconnecting and reconnecting 2017-04-18 19:46:57 +03:00
Regalis
67a3020430 Logging when clients use an item on themselves or hit someone with a melee weapon 2017-04-17 19:52:25 +03:00
Regalis
e4a7d31f78 If a recipient can't be found for a private message sent by a client, the server sends the "player not found" error message to the client 2017-04-17 19:48:29 +03:00
Regalis
7df4bff249 Fixed exceptions if a character is removed when an AI character is attacking it 2017-04-17 17:59:22 +03:00
Regalis
b24f0877a1 Fixed characters occasionally teleporting around at the clients' end after respawning. The position syncing logic assumed that all coordinates above the level are in sub-relative space, even though the world position of the respawn shuttle can also be above the level. 2017-04-17 17:56:17 +03:00
Regalis
8964c0df5c Syncing character skill levels 2017-04-13 00:35:36 +03:00
Regalis
1bd856b7a5 ItemComponent update events aren't created if the component isn't found in the item's component list (may happen if an event is created when setting a property of a component during initialization) 2017-04-12 23:47:26 +03:00
Regalis
f4c01f68ed Fixed incorrectly length in character position updates (1 bit off), clients read pad bits in position updates 2017-04-12 23:44:58 +03:00
Regalis
9a36df0f52 ItemComponent syncing fixes:
- Relay and lightcomponent states are synced (otherwise clients won't be notified if the state is, for example, toggled by a signal from a button).
- Clients don't play door sounds if a signal attempts to set the state to the same value as the predicted state, but DO play if a correction from the server changes the state from the predicted one.
- Clients are notified if a reactor receives a shutdown signal.
- Powercontainer updates are sent if the charge changes by 1%, not by 1 unit.
2017-04-11 20:38:07 +03:00
Regalis
347f549ac1 Reactors, sonars, nav terminals, pumps and batteries use similar delayed correction logic as doors and inventories.
I.e. the clients delay correcting the state of the item until the local player stops manipulating the state (atm the delay is 1 sec). Prevents pumping speeds, steering directions and whatnot from switching to an old state and back - now the corrections should not be visible to the players unless the client predicts the state wrong.
2017-04-11 00:48:53 +03:00
Regalis
fac31b4892 - Fixed railgun sounds not playing at the clients' end
- Server sends updates for batteries when their charge changes (not strictly necessary assuming the rest of the electrical grid stays in sync, but just in case)
- Reactor state is synced with clients if modified through the debug console
- Increased maximum item velocity to 64 units/s, all item are clamped to the max vel
2017-04-10 20:13:33 +03:00
Regalis
887735ff32 - DockingPort syncing fix: server waits until the port is locked before sending hull/gap IDs, clients can't lock the port until the server tells them to
- fixed crew commands being disabled in single player instead of multiplayer
- server-side ID error logging fix
2017-04-09 20:51:57 +03:00
Regalis
0301457a8f A fix to occasional "unknown object header" errors.
If an entity had been removed and it's ID taken by some other entity, clients who hadn't received a message about the removal and the new entity would end up reading ENTITY_POSITION messages for the new entity incorrectly. Reading an incorrect number of bits from the message would also prevent the clients from reading the rest of the data in the packet properly.

Now the server doesn't send position updates to clients during midround syncing (because there's no guarantee they know about the entity yet). Clients also force the read position to the correct place after reading a position update in case something goes wrong when reading the msg.
2017-04-09 19:04:49 +03:00
Regalis
4ee96e4fbe Fixed "collection was modified" exceptions if a huskified human dies in a fire 2017-04-09 18:32:13 +03:00
Regalis
e94a50a29a The server keeps track of which ID a client is going to switch to when midround syncing is done, and switches the ID immediately when the client is in sync (instead of waiting for the client to report the new ID).
Fixes clients occasionally getting kicked out the moment they're in sync, because their latest received ID is still set to the ID of the last unique event and the server thinks they're requesting some old event that doesn't necessarily exist anymore.

+ added a debug command that creates a ton of entity events
2017-04-08 20:10:15 +03:00
Regalis
f863eb331d Moved stun from AnimController to the character class, server notifies clients when the stun ends, husk infection included in character status messages 2017-04-07 19:56:25 +03:00
Regalis
af80a44970 Server doesn't apply distance effects to chat messages sent by someone without a character (e.g. a client in the lobby, the server itself) 2017-04-07 18:12:14 +03:00
juanjp600
84f8c6db22 Fixed positioning of new lines for rotated text
A fairly unimportant change, so I'll just commit it to new-netcode since I forgot to switch to master before making this change and I'm too lazy to just port things over :P
2017-04-06 17:49:08 -03:00
juanjp600
2873a79fe0 Merge branch 'new-netcode' of https://gitlab.com/poe.regalis/barotrauma into new-netcode 2017-04-06 16:50:20 -03:00
juanjp600
e1d5d63dbd Sync monster spawn settings 2017-04-06 16:50:11 -03:00
Regalis
77614dfa4e Merge branch 'master' into new-netcode
Conflicts:
	Subsurface/Source/Characters/Animation/Ragdoll.cs
2017-04-06 21:59:52 +03:00
Regalis
a2e21a78f9 Nicer looking explosions 2017-04-06 21:58:35 +03:00
Regalis
00b7193b6b Minor optimizations: GUITextBlocks don't reposition and wrap the text when only the position of the text block changes (almost killed my laptop by spamming a bit too many messages to the debug console), less unnecessary floor raycasts 2017-04-06 21:58:19 +03:00
Regalis
9330bd08de Clients don't switch from init events to normal until they receive the first normal event update (instead of switching when they receive the last init event they know about). Otherwise the client may switch to normal events too early, if the server has created new unique events the client doesn't know about yet. 2017-04-06 21:52:24 +03:00
Regalis
dc73880cd9 Fixed clients being unable to receive files if the download folder doesn't exist ツ 2017-04-06 20:13:44 +03:00
juanjp600
4ad373294c Update client.UnreceivedEntityEventCount on every event write
I noticed that if the main event IDs went over 10000 and there were more than 450 unique events, the server would sometimes skip the next event the client needed. Sometimes the client would also not realize that the last event it received was the final init event, so it would reject all further events because of a huge ID discrepancy. The init events will likely need to be reworked, but updating UnreceivedEntityEventCount seems to help somewhat.
2017-04-06 12:37:38 -03:00
Regalis
bfe043c154 Fixed door sounds playing twice client-side (first when the client activates the door and again when the correct state is received from the server) 2017-04-05 23:51:45 +03:00
Regalis
b1ef7ffd05 Replaced excessively paranoid filename validation regex in FileReceiver with Path.GetInvalidFileNameChars, server is notified if a client cancels a file transfer for whatever reason 2017-04-05 23:20:20 +03:00
Regalis
e1a2f6af62 Fixed the name of the server being overridden with "Server" every time a client selects the lobby screen 2017-04-05 21:57:00 +03:00
Regalis
7cb88e39e9 Attempt to fix ThrowOrIgnoreBadComparer exception in LightSource.FindRaycastHits.
Couldn't reproduce the crash, but I'm guessing it could be caused by CompareCCW not returning 0 if comparing a position to itself. (and if not, at least the exception is caught now)
2017-04-05 21:36:31 +03:00
Regalis
7700854935 Disabled AI crew commands in multiplayer, attempting to give commands to a character with no AIController doesn't crash the game 2017-04-05 21:09:24 +03:00
Regalis
3246e2c521 Limb physics aren't disabled when a character is frozen (only collider physics) -> frozen characters can still take damage from weapons 2017-04-05 17:53:31 +03:00
Regalis
8215c4d91b MemStates without a timestamp are removed from a character when using timestamp-based interpolation (there may still be ID-based states with a timestamp of 0.0 in the buffer when switching to timestamp-based interpolation, for example when the controlled character dies)
+ vice versa when switching from timestamp-based to ID-based
2017-04-04 21:32:53 +03:00
Regalis
0f8e6440ef Clients can access the inventories of incapacitated characters (e.g. put handcuffs on a stunned player, grab stuff from a dead character's inventory) 2017-04-04 21:18:03 +03:00
Regalis
b3bbdbf589 Explosion damage is reduced if there are walls or other solid obstacles between an explosion and a character 2017-04-04 19:54:28 +03:00
Regalis
b063cf3feb Fire sound fix: the sounds were freed after each round without ever loading them again. The sound objects still existed and had some buffer ID assigned though, causing an incorrect clip to be played or OpenAL errors to be thrown on successive rounds. (Now freed sounds always have a buffer ID of -1) 2017-04-03 20:59:02 +03:00
Regalis
6895cdbd7d Clients don't apply OnFire statuseffects to items. OnFire can cause items to explode, and because the client can't set the condition of the item to 0.0, it'll keep exploding until the server breaks the item. TODO: come up with a proper fix because now clients can't see oxy or fuel tanks exploding at their end. 2017-04-03 20:48:09 +03:00
Regalis
e75d596d34 Firesource syncing fixes 2017-04-03 20:22:59 +03:00
Regalis
43d29de45c Merge branch 'master' into new-netcode
Conflicts:
	Subsurface/Barotrauma.csproj
2017-04-03 18:36:22 +03:00
Regalis
2ca609855a Particle collision and project file fixes 2017-04-03 18:32:49 +03:00
Regalis
2f638a4c01 The initial loading screen is closed if an exception is thrown during loading. Causes the game to crash due to the unloaded content, but that's better than letting the game hang on the loading screen. 2017-03-30 21:56:05 +03:00
Regalis
c368d6ddf1 - fire particle tweaking
- water puts out fires more slowly and the speed depends on the height of the water surface relative to the position of the firesource (instead of the volume of the water in the room)
- the extents of the firesources are visualized when debugdraw is on
- any >0.0 damage to structures has a chance of spawning some "shrapnel" particles
2017-03-30 21:50:18 +03:00
Regalis
c58d7dfd73 Animated fire & smoke particles 2017-03-30 21:32:08 +03:00
Regalis
e661724cbb Debug console is added to GUIUpdateList after all other UI elements (because it's drawn on top of everything else) 2017-03-30 17:35:14 +03:00
Regalis
2b65392a3c BackgroundSpriteManager takes the rotation and pivot point of the sprites into account when determining which cells of the "sprite grid" the sprite occupies (-> partially visible sprites shouldn't be culled away anymore) 2017-03-29 23:28:09 +03:00
Regalis
2582680445 Fixed physics bodies staying active when a character is disabled in the constructor 2017-03-29 23:12:03 +03:00
Regalis
5bdd801da4 Having multiple sub files with the same name doesn't prevent clients from selecting or requesting the correct one 2017-03-28 21:01:44 +03:00
Regalis
2a5a2bc6f6 Fixed server not sending a status update for an item if the condition of the item changes directly from 100 to 0 2017-03-27 23:44:09 +03:00
Regalis
0e5de469d3 Fixed infinite loop in WrapText if the line length is smaller than an individual character, text scale is taken into account in GUITextBlock wrapping 2017-03-27 21:08:14 +03:00