Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upstream0708 #201

Merged
merged 290 commits into from
Aug 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
290 commits
Select commit Hold shift + click to select a range
eb861d1
Wrong magazine popup (#29046)
Errant-4 Jul 23, 2024
046aa54
Automatic changelog update
PJBot Jul 23, 2024
1f29a5a
Fix: Syndie borg can now wield DEsword (#30229)
TheKittehJesus Jul 23, 2024
629cd43
Automatic changelog update
PJBot Jul 23, 2024
4ff3445
Lowercase some prototypes names (#29990)
lzk228 Jul 23, 2024
918709c
Displacement maps big update (#30093)
TheShuEd Jul 23, 2024
e7aa976
Change drawdepth of some wall-mounted objects (#30274)
Ko4ergaPunk Jul 23, 2024
7381df4
Handless mobs can no longer wipe devices (#30149)
Scribbles0 Jul 23, 2024
ec071ce
Automatic changelog update
PJBot Jul 23, 2024
a32f9ff
Fix Reagent Grinder being able to do work without being powered (#30267)
bVelliquette Jul 23, 2024
4f8b634
Automatic changelog update
PJBot Jul 23, 2024
e1f3bdc
Add spicy rock pizza (#30116)
mkanke-real Jul 23, 2024
8b27ef8
Fix: Shelfs and Mannequin disassemble (#30313)
BombasterDS Jul 24, 2024
fc09540
Automatic changelog update
PJBot Jul 24, 2024
343496f
tweak(chameleon): Add clown suit to chameleon tech (#29307)
Brandon-Huu Jul 24, 2024
688a46f
Move some disabilities traits into a new category (#30102)
Killerqu00 Jul 24, 2024
c4dcc90
tweak(GunRequiresWield): State the requirement for gun wielding in th…
Brandon-Huu Jul 24, 2024
aa886ca
Make `NeedHand` modifiable for injectorSystem (#29870)
osjarw Jul 24, 2024
492fb52
fix(Meta): Resolve every issue. (#30308)
Brandon-Huu Jul 24, 2024
4536a52
Update Bagel (#30326)
lzk228 Jul 24, 2024
ee641c2
Update Marathon (#30328)
lzk228 Jul 24, 2024
bd4020b
Update Cluster (#30327)
lzk228 Jul 24, 2024
687e2c5
Update Fland (#30330)
lzk228 Jul 24, 2024
9def96d
Update Box (#30329)
lzk228 Jul 24, 2024
f210325
Update Atlas (#30331)
lzk228 Jul 24, 2024
620aed5
Fix QSI Link Range (#30332)
Cojoke-dot Jul 24, 2024
54e7600
Automatic changelog update
PJBot Jul 24, 2024
06d1366
Perma escape crate fills and spawner (#29497)
IProduceWidgets Jul 25, 2024
b6811d3
Medical borg add chem glasses (#27843)
marboww Jul 25, 2024
8f6326c
prevent borgs unlocking eachother and robotics console (#27888)
deltanedas Jul 25, 2024
0d12ce5
Automatic changelog update
PJBot Jul 25, 2024
b0cc97f
Fix Ripley control panel (#30325)
themias Jul 25, 2024
61efd12
Automatic changelog update
PJBot Jul 25, 2024
2d124c5
fix(train): Anchor botany machine, add second artifact spawner. (#30309)
Brandon-Huu Jul 25, 2024
8de6b74
fix borg light being on by default (#30342)
deltanedas Jul 25, 2024
50ba20c
fix(bounties): Make winter counts count as a single warm item. (#30306)
Brandon-Huu Jul 25, 2024
f56e4f6
Replace some to do with TODO (#30346)
lzk228 Jul 25, 2024
bcd7a7a
Space adder now butcherable, snake drops snake meat (#29629)
timurjavid Jul 25, 2024
e95aaef
Automatic changelog update
PJBot Jul 25, 2024
7388b91
Replace noSpawn: true with categories: [ HideSpawnMenu ] (#30100)
Plykiya Jul 25, 2024
2a7883b
Update vomit organ smite to not use Component.owner (#29926)
Plykiya Jul 25, 2024
e161a02
fix the bigest news admin notification typo in the game (#30349)
lzk228 Jul 25, 2024
6f77190
Update Saltern (#30357)
lzk228 Jul 25, 2024
769967a
Update Packed (#30358)
lzk228 Jul 25, 2024
d1663ca
Update Omega (#30356)
lzk228 Jul 25, 2024
818f43b
Update Meta (#30348)
lzk228 Jul 25, 2024
0a07203
Lets atmos build gas pipes in walls (#28707)
Plykiya Jul 25, 2024
ff581d4
Automatic changelog update
PJBot Jul 25, 2024
d5236d8
give nukie reinforcements full operative gear (#30173)
Ilya246 Jul 25, 2024
af47cbd
Automatic changelog update
PJBot Jul 25, 2024
4419999
twek(BoxStation): Reorganize atmos TEG room to be more user friendly.…
Brandon-Huu Jul 26, 2024
4e1fe97
tweak(StatusIcons): Hide revolutionary icons in the dark. (#30367)
Brandon-Huu Jul 26, 2024
333bb38
Add Identity Blocker to a Couple Things (#30305)
Cojoke-dot Jul 26, 2024
76096b2
Automatic changelog update
PJBot Jul 26, 2024
a99ae62
fix(cmd-Jobwhitelistadd): Fixed typo in Loc.GetString (#30355)
Brandon-Huu Jul 26, 2024
5905767
changed some radio colors to be more distinguishable (#30133)
Moomoobeef Jul 26, 2024
f083d08
Automatic changelog update
PJBot Jul 26, 2024
a7fa66e
Replayspawn logic fix (yes, again) (#30273)
Errant-4 Jul 26, 2024
811da0e
Automatic changelog update
PJBot Jul 26, 2024
eab5030
Add vox naming convention to Rules (#30284)
Errant-4 Jul 26, 2024
e72393d
Fix arcade machines (#30376)
themias Jul 26, 2024
18506e1
Automatic changelog update
PJBot Jul 26, 2024
b1d5436
fix(ExtinguisherCabinet): Fix cabinet whitelist to allow fire extingu…
Brandon-Huu Jul 26, 2024
582e6d2
Localization of the title of the job (#30353)
chavonadelal Jul 26, 2024
7c7f4a9
Fix zombie uncuffing (#30321)
themias Jul 26, 2024
e7aa779
Automatic changelog update
PJBot Jul 26, 2024
8f25058
Fix VGRoid grid spam (#29946)
metalgearsloth Jul 27, 2024
d5d8c14
Automatic changelog update
PJBot Jul 27, 2024
1149290
Security Clown Mask (#30249)
GoldenCan Jul 27, 2024
5485ae2
Automatic changelog update
PJBot Jul 27, 2024
45a481d
Oasis updoot (#30388)
IProduceWidgets Jul 27, 2024
b9090e8
Update Evac-Accordia (#30389)
IProduceWidgets Jul 27, 2024
1146f2f
Fix thieves rule not selecting more than one thief (#30393)
Plykiya Jul 27, 2024
9f6e5e8
Automatic changelog update
PJBot Jul 27, 2024
b66c286
Include whitelisting location in baby jail deny message (#30373)
Chief-Engineer Jul 27, 2024
f67f703
fix ninja not showing in round end (#30405)
deltanedas Jul 27, 2024
f49fc5a
Do not duplicate Job Greeting on antag selection (#30407)
Errant-4 Jul 27, 2024
de7df2a
Some plant mutations (#28993)
BombasterDS Jul 27, 2024
6a1efeb
Automatic changelog update
PJBot Jul 27, 2024
dc1be42
tweak(Chemical Dispenser): Give the chemical dispenser a hitbox (#30412)
Brandon-Huu Jul 27, 2024
d846a62
tweak(Core_map_Jobslots): Increase round start chemist slots from 1 t…
Brandon-Huu Jul 27, 2024
9bd623a
Makes security a bit brighter (#30369)
Flareguy Jul 27, 2024
54e42cc
tweak(NuclearBomb Keg): Give the nuclear bomb keg a hit box (#30415)
Brandon-Huu Jul 27, 2024
3283424
tweak(Radiation Suits): Increase damage taken by 1000% (#30392)
Brandon-Huu Jul 27, 2024
34a7aa7
Thief objectives for figurines and stamps ask for less items (#30390)
Spessmann Jul 27, 2024
845fa31
Automatic changelog update
PJBot Jul 27, 2024
e3d7c1b
Update Credits (#30420)
github-actions[bot] Jul 28, 2024
093054f
Move vgroid much closer (#29943)
metalgearsloth Jul 28, 2024
255b7f3
Automatic changelog update
PJBot Jul 28, 2024
7f9e065
Update SharedDoorSystem.cs to not use Component.Owner (#29963)
Plykiya Jul 28, 2024
925d1e3
Prevent gridfill from leaking (#30395)
IProduceWidgets Jul 28, 2024
404743f
Fix examine threading issues (#30160)
metalgearsloth Jul 28, 2024
3a10ffa
Makes the labeller automatically label PRs with shader changes (#30316)
deathride58 Jul 28, 2024
e1e2d26
Fix pancakes stacks (#30270)
lzk228 Jul 28, 2024
d9286dd
Automatic changelog update
PJBot Jul 28, 2024
4a9bd17
tweak(geras): Add a confirmation popup for gera transformation (#29215)
Brandon-Huu Jul 28, 2024
1d55a43
Make NoSlip component networked (#30425)
Plykiya Jul 28, 2024
ab84eee
Automatic changelog update
PJBot Jul 28, 2024
79fa810
Update stomach removal and lung removal smite to not use Component.Ow…
Plykiya Jul 28, 2024
2951ea2
Adjustet MobBaseAncestor class (#30424)
Katzenminer Jul 28, 2024
fce5269
Automatic changelog update
PJBot Jul 28, 2024
46c8cec
Update Marathon (Engineering revamp and small stuff) (#30429)
lzk228 Jul 28, 2024
da5918c
FINALLY FIX APPROVER IN CARGO INVOICE!!! (#29690)
lzk228 Jul 29, 2024
4a13212
Automatic changelog update
PJBot Jul 29, 2024
c4ef5e4
Update marathon (#30442)
lzk228 Jul 29, 2024
14a8e94
Fix punctuation in anchored / unanchored examine text (#30439)
Mervill Jul 29, 2024
0dd22c3
Change unused OpenScoreboardWindow to ToggleRoundEndSummaryWindow and…
JIPDawg Jul 29, 2024
c586561
Automatic changelog update
PJBot Jul 29, 2024
ec19f9f
Make the powered examine text fully client predicted (#30441)
Mervill Jul 29, 2024
0e4bc4c
Candles Crate (#29736)
githubuser508 Jul 29, 2024
a9fc5a4
Automatic changelog update
PJBot Jul 29, 2024
cf7e680
turns "nosmoking sign" into "no smoking sign" (#30444)
thecopbennet Jul 29, 2024
3db33d9
Increase the contents of the emergency oxygen and fire lockers (#29230)
Blackern5000 Jul 29, 2024
7244b9b
Automatic changelog update
PJBot Jul 29, 2024
6114a88
N2O color change (#30383)
laok233 Jul 29, 2024
7761f86
added wearable lizard plushie (#30400)
Moomoobeef Jul 29, 2024
16cbd1a
Automatic changelog update
PJBot Jul 29, 2024
8595f59
Bring kobold ghostrole chance inline with monkey (#30450)
TurboTrackerss14 Jul 29, 2024
961514d
Automatic changelog update
PJBot Jul 29, 2024
fcaf04d
bagel update (#30461)
Emisse Jul 29, 2024
83a56cc
Objects that only have a basic description won't have extra line in e…
Mervill Jul 30, 2024
c5f332e
added a defib to the courser (#30471)
Ian321 Jul 30, 2024
0bbb099
Automatic changelog update
PJBot Jul 30, 2024
502ceb6
Fix puppy ian steal target (#30474)
slarticodefast Jul 30, 2024
b16de9b
Automatic changelog update
PJBot Jul 30, 2024
85e3626
Add envelopes (#30298)
themias Jul 30, 2024
ca8ee5f
Automatic changelog update
PJBot Jul 30, 2024
18370c3
Four cooking recipes changed to use liquid egg instead of whole egg, …
TheKittehJesus Jul 30, 2024
2f42e1d
Vanquish inaccurate docs (#30449)
nikthechampiongr Jul 30, 2024
3104215
Automatic changelog update
PJBot Jul 30, 2024
031eb96
Make magic mirror do-after longer, add popups to notify the target (#…
Plykiya Jul 30, 2024
cc3d644
Automatic changelog update
PJBot Jul 30, 2024
669cc55
Allow the creation of recursive HTNs (#30138)
osjarw Jul 30, 2024
ad81c30
Lets Hamlet Dance (#30478)
Cojoke-dot Jul 30, 2024
16ec644
Automatic changelog update
PJBot Jul 30, 2024
92210ff
Fix ACC wire light not appearing (#30453)
themias Jul 30, 2024
fc65acc
Automatic changelog update
PJBot Jul 30, 2024
c4c4a93
fix lathe screen animations (#30479)
EmoGarbage404 Jul 30, 2024
0266ac0
Security biosuit sprite fix (#30151)
Flareguy Jul 30, 2024
517a62a
Recolor the defibrillator (#29964)
Blackern5000 Jul 30, 2024
7eec380
Automatic changelog update
PJBot Jul 30, 2024
9a46c24
tweak(SyndicateReinforcements): Replace combat knife with throwing kn…
Brandon-Huu Jul 30, 2024
2fc9a65
Update migration to remove maint detective armor (#30486)
TurboTrackerss14 Jul 30, 2024
a72445c
aHelp fixes and improvements (#28639)
Titian3 Jul 30, 2024
fda852d
Automatic changelog update
PJBot Jul 30, 2024
517598f
Fix climbing not ending when any contacts still exist (#30488)
DrSmugleaf Jul 30, 2024
648f94f
Fix fingerprint transfer on weapon attack (#30257)
themias Jul 30, 2024
89b8ec7
Automatic changelog update
PJBot Jul 30, 2024
0b95de1
Adding an AccessReader to a particle accelerator with engineering acc…
chavonadelal Jul 30, 2024
04b7b80
Automatic changelog update
PJBot Jul 30, 2024
247222b
Remove Walking out of Containers while You can't Walk (#30391)
Cojoke-dot Jul 30, 2024
5607c35
Automatic changelog update
PJBot Jul 30, 2024
1a672c9
add more logic gates prototypes for mapping (#30385)
lzk228 Jul 30, 2024
9e1e9b8
Localization of the Salvage Expedition Console (#30339)
chavonadelal Jul 30, 2024
ea13683
Another QSI Fix About Things Being in Places they Should not (#30241)
Cojoke-dot Jul 30, 2024
0fddee2
Automatic changelog update
PJBot Jul 30, 2024
f501bd5
Grappling gun's ReelRate can be changed (#30493)
Roudenn Jul 30, 2024
23b97bd
Added diamond into upgraded ore processor (#30499)
TheShuEd Jul 30, 2024
7fefcbc
Automatic changelog update
PJBot Jul 30, 2024
bea8c1a
Relocate TemperatureProtectionComponent (#30437)
TemporalOroboros Jul 30, 2024
50fcde2
Fix Viper yaml (#30513)
dvir001 Jul 30, 2024
524dad5
Rename CLF3 to "chlorine trifluoride" (#30510)
PJB3005 Jul 31, 2024
0ceb99d
Fix singularity overlay mouse position correction when zooming (#30509)
slarticodefast Jul 31, 2024
61e87cb
Automatic changelog update
PJBot Jul 31, 2024
b784edb
Fix aHelp menu sorting (#30518)
Titian3 Jul 31, 2024
f264da8
Automatic changelog update
PJBot Jul 31, 2024
778bfe3
Add test for anchored prototypes (#30526)
metalgearsloth Jul 31, 2024
5bc9c04
add(SharedDoAfterSystem): Add a IsRunning "Utility" function (#30512)
Brandon-Huu Jul 31, 2024
0432f21
Add sprite exporting (#29874)
metalgearsloth Jul 31, 2024
d09ed50
Automatic changelog update
PJBot Jul 31, 2024
3cecfd6
Skeletons no longer have fingerprints (#30530)
slarticodefast Jul 31, 2024
282292f
Automatic changelog update
PJBot Jul 31, 2024
5eb6425
A small addition to the documentation (#30506)
IgorAnt028 Jul 31, 2024
2575e44
Add pen clicking sound (#30531)
themias Jul 31, 2024
b5a6f85
Automatic changelog update
PJBot Jul 31, 2024
7a99c96
Fix exploding pen clicking (#30533)
themias Jul 31, 2024
52b32fa
Fix hypo pen clicking (#30535)
themias Jul 31, 2024
ba16100
Update RespiratorSystem.cs to not use Component.Owner (#30426)
Plykiya Aug 1, 2024
1ef4f26
Remove obsolete code from VomitSystem (#30544)
Mervill Aug 1, 2024
1d2b713
Meteors now leave behind a bit of ore (#30419)
Plykiya Aug 1, 2024
34450dc
Automatic changelog update
PJBot Aug 1, 2024
ad0aba5
Change Social Anxiety ----> Stutter (#29898)
PixeltheAertistContrib Aug 1, 2024
b5524bf
Automatic changelog update
PJBot Aug 1, 2024
1d79b92
Adds hand labelers to the ChemDrobe, LawDrobe, and PTech (#29958)
Plykiya Aug 1, 2024
ab05228
Automatic changelog update
PJBot Aug 1, 2024
4b73250
Remove obsolete code from LightningSystem (#30546)
Mervill Aug 1, 2024
2c26be6
Add support for printing reagents in lathes (#30476)
EmoGarbage404 Aug 1, 2024
27f3bea
Cutter machine & steel mozaic item tiles (#30431)
Ko4ergaPunk Aug 1, 2024
ff76214
Automatic changelog update
PJBot Aug 1, 2024
7da2fb1
Change from using obsolete method in ExplosionOverlay (#30550)
SlamBamActionman Aug 1, 2024
71ea151
added paramedic to train (#30556)
NakataRin Aug 1, 2024
2422a60
Update Marathon (#30534)
lzk228 Aug 1, 2024
dc5f951
Remove cubes from nukie outpost. (#30547)
IProduceWidgets Aug 1, 2024
ce3169e
Automatic changelog update
PJBot Aug 1, 2024
b8fc703
Detective's closet now has a hand labeler (#30501)
marboww Aug 1, 2024
1fcbaa1
Automatic changelog update
PJBot Aug 1, 2024
dceb562
add(TransferAmountWindow): QoL stuff (#30464)
Brandon-Huu Aug 2, 2024
e6b6754
Update MoverController.cs to not use Component.Owner (#29965)
Plykiya Aug 2, 2024
20cb65f
Fix double interaction popups (#30452)
metalgearsloth Aug 2, 2024
a2e945f
Automatic changelog update
PJBot Aug 2, 2024
c99cdf5
susbox locale fix (#30564)
NakataRin Aug 2, 2024
4179821
Show the player a server message when they get booted from the arriva…
Mervill Aug 2, 2024
745d90a
Revolver fixes for caseless ammo and wielding (#30117)
Kaga-404 Aug 2, 2024
67fc8af
Adjusts the lethality of meteor explosions (#29199)
WarMechanic Aug 2, 2024
0b253e9
Automatic changelog update
PJBot Aug 2, 2024
2c31e03
Fix borgs being unable to state laws or open other UIs without module…
slarticodefast Aug 2, 2024
fa5995d
Automatic changelog update
PJBot Aug 2, 2024
b4607ac
add flash bounty for revs (#29248)
deltanedas Aug 2, 2024
5dd3e9b
tweak(BurialSystem): Don't cancel doafter on keyup (#30507)
Brandon-Huu Aug 2, 2024
d13bcd1
WRU and FS autocompletion (#30508)
TropicalHibi Aug 2, 2024
bfd47ed
Automatic changelog update
PJBot Aug 2, 2024
c36b943
Add PR guidelines checkbox to PR template (#30283)
VasilisThePikachu Aug 2, 2024
378d1e5
Adjusts the Bingus steal target to include any of the named cats (#30…
IamVelcroboy Aug 2, 2024
85bcc74
Add percentage reading to chargers (#28500)
Plykiya Aug 2, 2024
533c968
Automatic changelog update
PJBot Aug 2, 2024
448f380
Remove duplicate cartridge rsi (#30498)
slarticodefast Aug 2, 2024
ccdbdee
Add DoAfter handling to `InteractWithOperator` (#30319)
osjarw Aug 2, 2024
1579c8a
Deploy foldable (#30000)
ShadowCommander Aug 2, 2024
8d23d36
Automatic changelog update
PJBot Aug 2, 2024
36038a1
Allow ai to understand if its handcuffed. (#30402)
IProduceWidgets Aug 2, 2024
029771d
'Spawn Here' Verb Forces Mind Transfer (#30568)
Aidenkrz Aug 2, 2024
ed4ae16
Add "fill levels" to spear in-hand/wielded/equipped sprites (#28865)
Tayrtahn Aug 2, 2024
ac4086f
apc touchup sprite (#30460)
Emisse Aug 2, 2024
af75258
Remove obsolete code from Food, Drink and Respirator systems. (#30560)
Mervill Aug 2, 2024
b97dcf2
Merge remote-tracking branch 'refs/remotes/wizards/master' into upstr…
Aug 2, 2024
c2b5a13
Update locale
Morb0 Aug 2, 2024
ca323db
fix snow wall locale (#2439)
NotSoDana Aug 2, 2024
fb17018
[Delta] Small Tweak (#2448)
meowstushka Aug 2, 2024
83b0734
Merge pull request #2446 from space-syndicate/upstream-sync
Morb0 Aug 2, 2024
d6de6d5
[Maps] Small Paper Tweak (#2450)
meowstushka Aug 3, 2024
d5b28ad
small locale fixes (#2445)
lzk228 Aug 3, 2024
f894d4d
Translate Upstream #2446 (#2451)
lapatison Aug 3, 2024
b0b65fd
[Maps] Terminal small bugfix (#2452)
NotSoDana Aug 4, 2024
8ff4a84
[Maps] Terminal hotfix (#2457)
Ko4ergaPunk Aug 5, 2024
3f0c763
[Maps] Pilgrim update #3 (#2456)
Ko4ergaPunk Aug 5, 2024
fc9edfb
Partially revert #2457 (#2458)
lzk228 Aug 5, 2024
956d88a
Make NPC zombies dont attack initial infecteds (#2367)
lzk228 Aug 5, 2024
0c06136
[Maps] Avrite update (#2461)
Ko4ergaPunk Aug 6, 2024
0b0f5f4
Translate new signs sprites (#2454)
kaiserGans Aug 6, 2024
9da6b66
[Maps] Delta Tweak (#2462)
meowstushka Aug 6, 2024
c76cf1c
[Maps] Delta Update (#2463)
meowstushka Aug 7, 2024
160c7a0
Merge branch 'master' of https://github.com/space-syndicate/space-sta…
Schrodinger71 Aug 7, 2024
25ffd74
Правки
Schrodinger71 Aug 7, 2024
ded52db
Fix YAML?
Schrodinger71 Aug 7, 2024
07b3cac
Fix YAMl2
Schrodinger71 Aug 7, 2024
94e7e45
Merge branch 'master' into upstream0708
Schrodinger71 Aug 7, 2024
85d8d3e
Merge branch 'master' into upstream0708
Schrodinger71 Aug 7, 2024
0c1832f
fix
Schrodinger71 Aug 7, 2024
b47e150
Merge branches 'upstream0708' and 'upstream0708' of https://github.co…
Schrodinger71 Aug 7, 2024
37985f0
add head for displacements
Schrodinger71 Aug 7, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 5 additions & 1 deletion .github/labeler.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,13 @@
- changed-files:
- any-glob-to-any-file: '**/*.xaml*'

"Changes: Shaders":
- changed-files:
- any-glob-to-any-file: '**/*.swsl'

"Changes: Localization":
- changed-files:
- any-glob-to-any-file: 'Resources/Locale/**/*.ftl'
- any-glob-to-any-file: '**/*.ftl'

"No C#":
- changed-files:
Expand Down
41 changes: 37 additions & 4 deletions Content.Client/Administration/UI/Bwoink/BwoinkControl.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,10 @@ public BwoinkControl()
var ach = AHelpHelper.EnsurePanel(a.SessionId);
var bch = AHelpHelper.EnsurePanel(b.SessionId);

// Pinned players first
if (a.IsPinned != b.IsPinned)
return a.IsPinned ? -1 : 1;

// First, sort by unread. Any chat with unread messages appears first. We just sort based on unread
// status, not number of unread messages, so that more recent unread messages take priority.
var aUnread = ach.Unread > 0;
Expand All @@ -99,15 +103,31 @@ public BwoinkControl()
if (a.Connected != b.Connected)
return a.Connected ? -1 : 1;

// Next, group by whether or not the players have participated in this round.
// The ahelp window shows all players that have connected since server restart, this groups them all towards the bottom.
if (a.ActiveThisRound != b.ActiveThisRound)
return a.ActiveThisRound ? -1 : 1;
// Sort connected players by New Player status, then by Antag status
if (a.Connected && b.Connected)
{
var aNewPlayer = a.OverallPlaytime <= TimeSpan.FromMinutes(_cfg.GetCVar(CCVars.NewPlayerThreshold));
var bNewPlayer = b.OverallPlaytime <= TimeSpan.FromMinutes(_cfg.GetCVar(CCVars.NewPlayerThreshold));

if (aNewPlayer != bNewPlayer)
return aNewPlayer ? -1 : 1;

if (a.Antag != b.Antag)
return a.Antag ? -1 : 1;
}

// Sort disconnected players by participation in the round
if (!a.Connected && !b.Connected)
{
if (a.ActiveThisRound != b.ActiveThisRound)
return a.ActiveThisRound ? -1 : 1;
}

// Finally, sort by the most recent message.
return bch.LastMessage.CompareTo(ach.LastMessage);
};


Bans.OnPressed += _ =>
{
if (_currentPlayer is not null)
Expand Down Expand Up @@ -253,7 +273,20 @@ private void SwitchToChannel(NetUserId? ch)

public void PopulateList()
{
// Maintain existing pin statuses
var pinnedPlayers = ChannelSelector.PlayerInfo.Where(p => p.IsPinned).ToDictionary(p => p.SessionId);

ChannelSelector.PopulateList();

// Restore pin statuses
foreach (var player in ChannelSelector.PlayerInfo)
{
if (pinnedPlayers.TryGetValue(player.SessionId, out var pinnedPlayer))
{
player.IsPinned = pinnedPlayer.IsPinned;
}
}

UpdateButtons();
}
}
Expand Down
6 changes: 5 additions & 1 deletion Content.Client/Administration/UI/Bwoink/BwoinkWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,11 @@ public BwoinkWindow()
}
};

OnOpen += () => Bwoink.PopulateList();
OnOpen += () =>
{
Bwoink.ChannelSelector.StopFiltering();
Bwoink.PopulateList();
};
}
}
}
236 changes: 124 additions & 112 deletions Content.Client/Administration/UI/CustomControls/PlayerListControl.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,154 +4,166 @@
using Content.Client.Verbs.UI;
using Content.Shared.Administration;
using Robust.Client.AutoGenerated;
using Robust.Client.GameObjects;
using Robust.Client.Graphics;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Input;
using Robust.Shared.Utility;

namespace Content.Client.Administration.UI.CustomControls
namespace Content.Client.Administration.UI.CustomControls;

[GenerateTypedNameReferences]
public sealed partial class PlayerListControl : BoxContainer
{
[GenerateTypedNameReferences]
public sealed partial class PlayerListControl : BoxContainer
{
private readonly AdminSystem _adminSystem;
private readonly AdminSystem _adminSystem;

private List<PlayerInfo> _playerList = new();
private readonly List<PlayerInfo> _sortedPlayerList = new();
private readonly IEntityManager _entManager;
private readonly IUserInterfaceManager _uiManager;

public event Action<PlayerInfo?>? OnSelectionChanged;
public IReadOnlyList<PlayerInfo> PlayerInfo => _playerList;
private PlayerInfo? _selectedPlayer;

public Func<PlayerInfo, string, string>? OverrideText;
public Comparison<PlayerInfo>? Comparison;
private List<PlayerInfo> _playerList = new();
private List<PlayerInfo> _sortedPlayerList = new();

private IEntityManager _entManager;
private IUserInterfaceManager _uiManager;
public Comparison<PlayerInfo>? Comparison;
public Func<PlayerInfo, string, string>? OverrideText;

private PlayerInfo? _selectedPlayer;
public PlayerListControl()
{
_entManager = IoCManager.Resolve<IEntityManager>();
_uiManager = IoCManager.Resolve<IUserInterfaceManager>();
_adminSystem = _entManager.System<AdminSystem>();
RobustXamlLoader.Load(this);
// Fill the Option data
PlayerListContainer.ItemPressed += PlayerListItemPressed;
PlayerListContainer.ItemKeyBindDown += PlayerListItemKeyBindDown;
PlayerListContainer.GenerateItem += GenerateButton;
PlayerListContainer.NoItemSelected += PlayerListNoItemSelected;
PopulateList(_adminSystem.PlayerList);
FilterLineEdit.OnTextChanged += _ => FilterList();
_adminSystem.PlayerListChanged += PopulateList;
BackgroundPanel.PanelOverride = new StyleBoxFlat { BackgroundColor = new Color(32, 32, 40) };
}

public PlayerListControl()
{
_entManager = IoCManager.Resolve<IEntityManager>();
_uiManager = IoCManager.Resolve<IUserInterfaceManager>();
_adminSystem = _entManager.System<AdminSystem>();
RobustXamlLoader.Load(this);
// Fill the Option data
PlayerListContainer.ItemPressed += PlayerListItemPressed;
PlayerListContainer.ItemKeyBindDown += PlayerListItemKeyBindDown;
PlayerListContainer.GenerateItem += GenerateButton;
PlayerListContainer.NoItemSelected += PlayerListNoItemSelected;
PopulateList(_adminSystem.PlayerList);
FilterLineEdit.OnTextChanged += _ => FilterList();
_adminSystem.PlayerListChanged += PopulateList;
BackgroundPanel.PanelOverride = new StyleBoxFlat {BackgroundColor = new Color(32, 32, 40)};
}
public IReadOnlyList<PlayerInfo> PlayerInfo => _playerList;

private void PlayerListNoItemSelected()
{
_selectedPlayer = null;
OnSelectionChanged?.Invoke(null);
}
public event Action<PlayerInfo?>? OnSelectionChanged;

private void PlayerListItemPressed(BaseButton.ButtonEventArgs? args, ListData? data)
{
if (args == null || data is not PlayerListData {Info: var selectedPlayer})
return;
private void PlayerListNoItemSelected()
{
_selectedPlayer = null;
OnSelectionChanged?.Invoke(null);
}

if (selectedPlayer == _selectedPlayer)
return;
private void PlayerListItemPressed(BaseButton.ButtonEventArgs? args, ListData? data)
{
if (args == null || data is not PlayerListData { Info: var selectedPlayer })
return;

if (args.Event.Function != EngineKeyFunctions.UIClick)
return;
if (selectedPlayer == _selectedPlayer)
return;

OnSelectionChanged?.Invoke(selectedPlayer);
_selectedPlayer = selectedPlayer;
if (args.Event.Function != EngineKeyFunctions.UIClick)
return;

// update label text. Only required if there is some override (e.g. unread bwoink count).
if (OverrideText != null && args.Button.Children.FirstOrDefault()?.Children?.FirstOrDefault() is Label label)
label.Text = GetText(selectedPlayer);
}
OnSelectionChanged?.Invoke(selectedPlayer);
_selectedPlayer = selectedPlayer;

private void PlayerListItemKeyBindDown(GUIBoundKeyEventArgs? args, ListData? data)
{
if (args == null || data is not PlayerListData { Info: var selectedPlayer })
return;
// update label text. Only required if there is some override (e.g. unread bwoink count).
if (OverrideText != null && args.Button.Children.FirstOrDefault()?.Children?.FirstOrDefault() is Label label)
label.Text = GetText(selectedPlayer);
}

if (args.Function != EngineKeyFunctions.UIRightClick || selectedPlayer.NetEntity == null)
return;
private void PlayerListItemKeyBindDown(GUIBoundKeyEventArgs? args, ListData? data)
{
if (args == null || data is not PlayerListData { Info: var selectedPlayer })
return;

_uiManager.GetUIController<VerbMenuUIController>().OpenVerbMenu(selectedPlayer.NetEntity.Value, true);
args.Handle();
}
if (args.Function != EngineKeyFunctions.UIRightClick || selectedPlayer.NetEntity == null)
return;

_uiManager.GetUIController<VerbMenuUIController>().OpenVerbMenu(selectedPlayer.NetEntity.Value, true);
args.Handle();
}

public void StopFiltering()
{
FilterLineEdit.Text = string.Empty;
}

public void StopFiltering()
private void FilterList()
{
_sortedPlayerList.Clear();
foreach (var info in _playerList)
{
FilterLineEdit.Text = string.Empty;
var displayName = $"{info.CharacterName} ({info.Username})";
if (info.IdentityName != info.CharacterName)
displayName += $" [{info.IdentityName}]";
if (!string.IsNullOrEmpty(FilterLineEdit.Text)
&& !displayName.ToLowerInvariant().Contains(FilterLineEdit.Text.Trim().ToLowerInvariant()))
continue;
_sortedPlayerList.Add(info);
}

private void FilterList()
{
_sortedPlayerList.Clear();
foreach (var info in _playerList)
{
var displayName = $"{info.CharacterName} ({info.Username})";
if (info.IdentityName != info.CharacterName)
displayName += $" [{info.IdentityName}]";
if (!string.IsNullOrEmpty(FilterLineEdit.Text)
&& !displayName.ToLowerInvariant().Contains(FilterLineEdit.Text.Trim().ToLowerInvariant()))
continue;
_sortedPlayerList.Add(info);
}
if (Comparison != null)
_sortedPlayerList.Sort((a, b) => Comparison(a, b));

if (Comparison != null)
_sortedPlayerList.Sort((a, b) => Comparison(a, b));
PlayerListContainer.PopulateList(_sortedPlayerList.Select(info => new PlayerListData(info)).ToList());
if (_selectedPlayer != null)
PlayerListContainer.Select(new PlayerListData(_selectedPlayer));
}

PlayerListContainer.PopulateList(_sortedPlayerList.Select(info => new PlayerListData(info)).ToList());
if (_selectedPlayer != null)
PlayerListContainer.Select(new PlayerListData(_selectedPlayer));
}

public void PopulateList(IReadOnlyList<PlayerInfo>? players = null)
{
players ??= _adminSystem.PlayerList;
public void PopulateList(IReadOnlyList<PlayerInfo>? players = null)
{
// Maintain existing pin statuses
var pinnedPlayers = _playerList.Where(p => p.IsPinned).ToDictionary(p => p.SessionId);

_playerList = players.ToList();
if (_selectedPlayer != null && !_playerList.Contains(_selectedPlayer))
_selectedPlayer = null;
players ??= _adminSystem.PlayerList;

FilterList();
}
_playerList = players.ToList();

private string GetText(PlayerInfo info)
// Restore pin statuses
foreach (var player in _playerList)
{
var text = $"{info.CharacterName} ({info.Username})";
if (OverrideText != null)
text = OverrideText.Invoke(info, text);
return text;
if (pinnedPlayers.TryGetValue(player.SessionId, out var pinnedPlayer))
{
player.IsPinned = pinnedPlayer.IsPinned;
}
}

private void GenerateButton(ListData data, ListContainerButton button)
{
if (data is not PlayerListData { Info: var info })
return;
if (_selectedPlayer != null && !_playerList.Contains(_selectedPlayer))
_selectedPlayer = null;

button.AddChild(new BoxContainer
{
Orientation = LayoutOrientation.Vertical,
Children =
{
new Label
{
ClipText = true,
Text = GetText(info)
}
}
});

button.AddStyleClass(ListContainer.StyleClassListContainerButton);
}
FilterList();
}


private string GetText(PlayerInfo info)
{
var text = $"{info.CharacterName} ({info.Username})";
if (OverrideText != null)
text = OverrideText.Invoke(info, text);
return text;
}

public record PlayerListData(PlayerInfo Info) : ListData;
private void GenerateButton(ListData data, ListContainerButton button)
{
if (data is not PlayerListData { Info: var info })
return;

var entry = new PlayerListEntry();
entry.Setup(info, OverrideText);
entry.OnPinStatusChanged += _ =>
{
FilterList();
};

button.AddChild(entry);
button.AddStyleClass(ListContainer.StyleClassListContainerButton);
}
}

public record PlayerListData(PlayerInfo Info) : ListData;
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<BoxContainer xmlns="https://spacestation14.io"
Orientation="Horizontal" HorizontalExpand="true">
<Label Name="PlayerEntryLabel" Text="" ClipText="True" HorizontalExpand="True" />
<TextureButton Name="PlayerEntryPinButton"
HorizontalAlignment="Right" />
</BoxContainer>
Loading
Loading