* actually ignore outfits from people you have filtered
* - change config path (why was it separate anyway?)
- fix return value of get_config_value
it would only work if you opened the menu once
* ask for migration when the editor is being opened
* use __index
* maybe unnecessary?
* fix wearing not refreshing the part in the editor
Had a scanthrough and made the following changes in the name of optimisation (even micro-optimisations) where possible:
- player.Get* -> player.Iterator
- ents.GetAll -> ents.Iterator
- ipairs -> for i=1,#tbl (only main uses of ipairs has been replaced, not every use)
- Vector:Distance -> Vector:DistToSqr
- Vector:Length -> Vector:LengthSqr
- net.Read/WriteEntity -> net.Read/WritePlayer where it is definitely intended to be a player
- Saved some GetConVar calls to local vars
- Localised/reused some Vector and Color objects
- Localised some functions where they are frequently used in a few files
- Misc minor styling cleanup (mostly spacing)
- BONUS: Fixed pac.ColorToNames being incorrect when used by some parts (some now use the new pac.VectorColorToNames func)
* Rewrote netstream
* Only add timer when queue empty
* Only update activitytimeout if queue is empty too
* Move activity timeout reset into successful write
* Move net read before return
* Add byte limit for sending data
* Combine to single networkstring
Decrease limit to 2048
* Change limit to be per second
Make messages unreliable
* Fix ratelimit used int for a float value
* Update convar descriptions
for controlling one named "type" of damage multiplier involving multiple parts (instead of proxies)
when multiple parts can be active at a time, it's probably simpler to have the option to cleanup like this instead of making a complex event setup to force all the others to hide for the reset on hide
pac.TryToAwakenDormantCameras calls Think recursively, which triggered seteventtrigger again in some setups
so stop the pac.TryToAwakenDormantCameras call if we're already running it, only do the recursive thinks once starting from the first calling part, and refresh after a second
yet another attempt at making cameras more usable with some better code but also raw hackery
-view camera when activating a pac_event related to it
-manually view camera via partmenu option, some other part classes have similar activation/preview actions
-better auto-switching between cameras in various cases
PART:SetSmallIcon(str) overrides the tiny event indicator on part icons
used when manually viewing a camera to display an eye showing that this camera is the one being viewed, might be used later
PART:GetReasonsHidden() gives a whole list of reasons as a table of part-indexed strings instead of doing early returns as soon as one reason is found. there are often multiple reasons, a common one is parent hiding
also added parent hiding reason to PART:GetReasonHidden()
use interpolated_multibone's friendlyname in nicename to reflect that we'll refer to interpolated_multibone as interpolator, and added a better nicename showing the nodes
event seen_by_player detects other players' eyeangle raycasts on an adjustable bounding box
-nsin makes a normalized sine ranging from 0 to 1, similar to what easy setup needs to do
-nsin2 is the same as nsin but half a pi radians less, so that the cycle's output starts at 0 (assuming 0, the starting value for timeex-based expressions) instead of 0.5
-ncos makes a normalized cosine
-ncos2 is ncos with pi radians less to start output at 0
shortened standard timeex-based fades to replace dual clamp fade-in-fade-out setups. they are normalized (0-1 range).
-ezfade(speed, starttime, endtime) resolves the fade equations by using a desired speed and the extrema. if not enough speed, it might not make the full transition and it'll crossfade before reaching 1
-ezfade_4pt(in_starttime, in_endtime, out_starttime, out_endtime) resolves the fade equations by using the four crossing points
new aliases to save a little bit of text space or perhaps be more meaningful to some:
-if_else = number_operator_alternative
-if_event = if_else_event = event_alternative
event_alternative now defaults the 2nd and 3rd args to 0 and 1. reflecting the event's state, if they are not specified
and server population-related inputs
ChatTyping updates when typing (outgoing networking is stopped when the part is removed and no more text parts requiring ChatTyping are present)
ChatSent reuses say event's existing data
like the NPC preferences settings, a filter for each "disposition friendliness"
more developed "DoNotKill" options
DoNotKill will now stop healing at the critical point, the same way that it damaged no further than the critical point (converge to critical health)
ReverseDoNotKill reverses the rule into a health-based filter : don't heal if health is below, don't damage if health is above (diverge from critical health)
skip some hitmarker code when none are assigned
new expression slots:
-expression on hide will send an expression once at OnHide, running the Think one last time. for lighter toggled setups, but not meant for "moving math"
-extras will compute at the start of the proxy's Think, then the corresponding var1(), var2() / extra1() etc. which are up to 5, can take the result so it's written more compactly in the main expression. optional argument uid / name can search and link to another proxy's extra expression to read it
preview output is a one-click thing to get visual feedback in the world / view panel. easier than setting up a text part.
ent_color series (rgba): should work with colorable parts and owner entity
pac_stopsound works for websound too, unlike console stopsound
clients can choose their own distance limits for sounds, shakes, sunbeams and 2D texts they see
shake also has duration and amplitude limits
new consent cvar for clients to exclude friendly or neutral NPCs from being damaged by hitscan and damage zone
added killicon for pac_bullet_emitter
combat parts reinitialize: from a spawnmenu options button, remotely request the refresh via a net message on multiplayer to make it work on dedicated servers