Commit Graph

1254 Commits

Author SHA1 Message Date
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
464078e565 Clients can't send wire positions to the server 2017-05-03 21:28:09 +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
eddc33dc89 Smoothly scrolling listboxes, items in the boxes can be partially visible 2017-04-30 17:57:01 +03:00
Regalis
d1d8284b94 Fixed some text overflows in the labels in the vanilla subs 2017-04-28 19:50:10 +03:00
Regalis
89941229f8 A reference to the character who triggered a signal is passed to all the recipients of the signal. Allows more accurate server logging: using doors, docking ports or turrets is now properly logged. 2017-04-28 18:10:47 +03:00
Regalis
64c109f13b Merge branch 'master' into new-netcode
Conflicts:
	Subsurface/Source/Characters/AI/EnemyAIController.cs
	Subsurface/Source/DebugConsole.cs
	Subsurface/Source/Items/Components/Machines/Radar.cs
	Subsurface/Source/Items/Item.cs
2017-04-27 21:33:44 +03:00
Regalis
6397bc432e UI tweaks 2017-04-27 21:08:20 +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
58de86a98f Heal and revive debug commands can also be used on other characters than the controlled one 2017-04-24 21:34:36 +03:00
Regalis
1dad5d9bf4 Passive sonar: when not active, the sonar shows nearby sources of sound and a faint outline of the structures around them. Now it's much easier to monitor how much noise the sub is making and to hide from enemies.
+ Changed the visuals of the sonar a bit. The current rendering method is very inefficient though, todo: write a shader
2017-04-24 21:13:54 +03:00
Regalis
5eb01d4c50 EnemyAIController tweaking:
- removed the "distance accumulator" which was used to make characters reset their attack target if they haven't moved enough within a specific interval. The intention was to make characters less likely to get stuck but it seems to cause more problems than it solves.
- more frequent target updates
- characters can target entities they're previously targeted from further away (even if the target isn't within range anymore)
2017-04-24 19:49:27 +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
645df3fde6 Crew command menu and the info menu can't be open at the same time, UI layout tweaking again 2017-04-23 21:06:30 +03:00
Regalis
1d41b4958c Item UI fix 2017-04-20 22:33:08 +03:00
Regalis
0709418ba3 Merge branch 'UI-overhaul'
Conflicts:
	Subsurface/Source/Screens/EditMapScreen.cs
2017-04-20 21:27:40 +03:00
Regalis
2cac176c87 More UI tweaking 2017-04-20 21:24:52 +03:00
Regalis
a5d605e29b Sub editor doesn't allow creating structures with zero width/height, fixed null exceptions when trying to remove a structure without wall sections 2017-04-20 18:02:20 +03:00
Regalis
499284dc91 UI layout tweaks 2017-04-20 17:39:32 +03:00
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
acaa8697c8 Small menu fixes: open menus are closed when opening another one in the sub editor (e.g. if the save dialog box is opened when one of the entity menus are open), switching to the correct tab from the settings menu when going through the "apply changes" dialog 2017-04-18 20:08:56 +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
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
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
34f0ae39b6 - Sliced sprites are scaled instead of tiling (so they work properly even if the UI element is smaller than the sprite)
- Option to use separate sprites for different states of a GUIComponent (e.g. hovered/pressed button)
- Option to configure "child styles" for the individual elements of a GUIComponent (e.g. the background frame and the handle of a scroll bar)
2017-04-09 21:26:35 +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
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