Commit Graph

444 Commits

Author SHA1 Message Date
Regalis
33b3e5374b Fixed a null exception if the server log UI hasn't been opened and the max number of lines is reached 2017-05-29 17:15:26 +03:00
Regalis
dc80ee810c Separate servelog message type for inventory usage 2017-05-28 22:36:55 +03:00
Regalis
09785184b3 Speech bubbles aren't shown above dead characters 2017-05-26 19:43:55 +03:00
Regalis
c40c3a1a98 Clients don't modify the colors of the texts in the netlobby sub list, only their alpha 2017-05-25 18:27:47 +03:00
Regalis
d6c700b535 Spawning extra cargo 2017-05-24 18:43:21 +03:00
Regalis
53bfbb3ea7 Fixed stack overflow when attempting to cancel a file transfer client-side 2017-05-20 15:35:55 +03:00
Regalis
e3b595b9e0 Cleanup (removing unused variables & other redundancies, rethrowing exceptions instead of wrapping them in a new exception instance) 2017-05-20 15:35:13 +03:00
Regalis
9c1a76707f conflict fix 2017-05-17 18:56:45 +03:00
Regalis
095054182e Merge branch 'master' into new-netcode
Conflicts:
	Subsurface/Source/GUI/GUITextBlock.cs
	Subsurface/Source/GameMain.cs
	Subsurface/Source/Items/Components/Machines/Radar.cs
	Subsurface/Source/Networking/GameClient.cs
2017-05-17 18:51:22 +03:00
Regalis
ad90cf804d - respawn, fabricator & deconstructor logging
- fixed listbox child hiding 4 real now
- dockingport logging fix (name of the sub instead of submarine.ToString)
2017-05-09 21:39:39 +03:00
Regalis
63b5ad1821 Friendlier serverlog message type labels 2017-05-09 21:07:29 +03:00
Regalis
d0065cdd97 Having a hidden child in a listbox doesn't prevent successive children from being rendered, server log can be filtered by message type 2017-05-09 21:02:42 +03:00
Regalis
c2d918073e Serverlog message types (which atm only determine the color of the message) 2017-05-09 19:56:12 +03:00
Regalis
bee570e2e3 - the server log view is not cleared when saving the log (but old messages are removed when going over the max number of lines)
- log can be viewed in the server lobby, not just in-game
- logging pump, reactor & battery state usage
- GUIListBox.MouseRect doesn't return an empty rect anymore -> listboxes without selectable content can be scrolled with the mouse wheel
2017-05-08 21:30:54 +03:00
Regalis
7dad837733 Server limits chatmessage length and the number of chatmessages written in one packet 2017-05-08 19:06:05 +03:00
Regalis
152a92e600 Server removes events if no clients are playing. Otherwise the server would keep creating new events indefinitely and midround-joining clients would instantly get kicked out because they're missing very old events.
+ fixed server not sending midroung sync messages if the list of new (non-unique) events is empty
2017-05-05 00:14:30 +03:00
Regalis
ba49f59204 Some cleanup (mostly removing redundancies from the GameMain class) 2017-05-03 00:27:13 +03:00
Regalis
ab4e8cee83 The server ignores lastRecvIDs in SYNC_IDS messages if the IDs aren't valid (earlier than the client's previous ID, or more recent than the newest ID).
Should be safer than clamping to the valid range - an incorrectly read packet or a message sent just before switching from midround syncing to normal won't cause the IDs to jump to the newest ID and prevent clients from receiving further msgs/events.
2017-05-02 22:46:37 +03:00
Regalis
d1c633385b Unique event IDs start from 1 (otherwise the server/clients will think event #0 has been already received) 2017-05-02 22:21:58 +03:00
Regalis
d0b52d92fe Event ID wraparound fixes 2017-05-02 22:18:36 +03:00
Regalis
06db2fed86 Fixed clients incrementing their lastReceivedID every time they receive an empty entity event (even if the event has already been received) 2017-05-02 22:15:18 +03:00
Regalis
6c770afd6a Clients aren't allowed to use the same name as the server, changed radio msg color back to yellow 2017-05-02 18:36:12 +03:00
Regalis
511f24cc47 Merge branch 'master' into new-netcode
Conflicts:
	Subsurface/Source/GameMain.cs
	Subsurface/Source/Networking/ChatMessage.cs
	Subsurface/Source/Networking/NetworkMember.cs
	Subsurface/Source/Screens/NetLobbyScreen.cs
2017-05-01 19:25:07 +03:00
Regalis
f92c2df9f7 TextBoxes align text to the right and hide any overflowing text at the left if the width of the box is exceeded 2017-04-30 18:14:25 +03:00
Regalis
90f354f6d7 Clients notify the server when they "give in" (i.e. kill their character when unconscious) 2017-04-26 23:39:41 +03:00
Regalis
3e5f8a43a0 Merge branch 'master' into new-netcode
Conflicts:
	Subsurface/Source/GUI/GUIButton.cs
	Subsurface/Source/GameSession/CrewManager.cs
	Subsurface/Source/GameSession/GameSession.cs
	Subsurface/Source/Items/Item.cs
	Subsurface/Source/Networking/GameServer.cs
	Subsurface/Source/Screens/MainMenuScreen.cs
	Subsurface/Source/Screens/ServerListScreen.cs
2017-04-24 19:10:51 +03:00
Regalis
df7daa5925 Fixed incorrectly positioned character info boxes in the info menu 2017-04-24 19:08:25 +03:00
Regalis
31f7eca717 Merge branch 'master' into new-netcode
Conflicts:
	Subsurface/Source/GUI/GUIButton.cs
	Subsurface/Source/GameSession/CrewManager.cs
	Subsurface/Source/GameSession/GameSession.cs
	Subsurface/Source/Items/Item.cs
	Subsurface/Source/Networking/GameServer.cs
	Subsurface/Source/Screens/MainMenuScreen.cs
	Subsurface/Source/Screens/ServerListScreen.cs
2017-04-23 21:40:11 +03:00
Regalis
2cac176c87 More UI tweaking 2017-04-20 21:24:52 +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
9a5777183f Separate sprites for horizontal and vertical scrollbars, style tweaking 2017-04-18 19:24:13 +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
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
dc6ed7daf1 Separate component style for item UIs + option to select the style in the item config files, removed a bunch of hard-coded UI element color changes 2017-04-10 18:11: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
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
3844dd9dac GUIStyle logic changes: instead of having a predetermined GUIComponentStyle for each type of GUIComponent, any GUIComponent can use any style. The GUIComponent constructors take the name of the style as a parameter, and if no style is specified, the default style for the GUIComponent in question will be used. 2017-04-08 16:46:53 +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
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
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
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
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
1a3c18c727 EntitySpawner sends spawn/removal messages to clients using EntityEvents.
EntityEvents and EntitySpawner used to work independently of each other, with separate IDs, and there was no guarantee that spawning and events would happen in the correct order. For example, a client could fail to read events during midround syncing because the entity has been removed, or read an event for an incorrect entity because the entity has been removed and the ID taken by some other entity.
2017-03-27 21:05:32 +03:00
Regalis
3306a1ab96 EntitySpawner only writes a limited number of entities per packet 2017-03-26 17:19:29 +03:00
Regalis
827644b72c Revert ccc0956, there was nothing wrong with the ID comparison 2017-03-24 22:10:48 +02:00
Regalis
dfd24045f8 EntityEventManagers send an empty event if the entity doesn't exist anymore when writing the message (may happen, for example, when a client is still waiting for some message about the item when it's destroyed in a deconstructor).
Not sending the events at all would be a better solution, but then we'd need to shift the IDs of all the consecutive events and make sure it doesn't mess anything up with any of the clients. Not necessarily worth the effort, considering how rare these "empty events" are.
2017-03-24 19:12:09 +02:00