Skip to content

Commit 1103153

Browse files
authored
Persistent client (#1218)
* simple replacement first * small * fixes * psosessbyplayer * make null safe * tweak * balls * fuck dude im so dumb * fixes
1 parent e4a2c73 commit 1103153

File tree

70 files changed

+215
-150
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+215
-150
lines changed

code/__DEFINES/_helpers.dm

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,6 @@
2424
// Custom types that we define don't get a unique id, but this is useful for identifying
2525
// types that don't normally have a way to run istype() on them.
2626
#define TYPEID(thing) copytext(REF(thing), 4, 6)
27+
28+
/// Abstraction over using mob.client to just check if there's a connected player.
29+
#define HAS_CONNECTED_PLAYER(mob) (mob.client)

code/__HELPERS/game.dm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@
294294

295295
ghost_player.client.prefs.safe_transfer_prefs_to(new_character)
296296
new_character.dna.update_dna_identity()
297-
new_character.key = ghost_player.key
297+
new_character.PossessByPlayer(ghost_player.ckey)
298298

299299
return new_character
300300

code/__HELPERS/roundend.dm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -652,7 +652,7 @@
652652

653653
/datum/controller/subsystem/ticker/proc/give_show_report_button(client/C)
654654
var/datum/action/report/R = new
655-
C.player_details.player_actions += R
655+
C.persistent_client.player_actions += R
656656
R.Grant(C.mob)
657657
to_chat(C,"<span class='infoplain'><a href='?src=[REF(R)];report=1'>Show roundend report again</a></span>")
658658

code/controllers/subsystem/achievements.dm

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ SUBSYSTEM_DEF(achievements)
3030

3131
for(var/i in GLOB.clients)
3232
var/client/C = i
33-
if(!C.player_details.achievements.initialized)
34-
C.player_details.achievements.InitializeData()
33+
if(!C.persistent_client.achievements.initialized)
34+
C.persistent_client.achievements.InitializeData()
3535

3636
return ..()
3737

@@ -40,8 +40,8 @@ SUBSYSTEM_DEF(achievements)
4040

4141
/datum/controller/subsystem/achievements/proc/save_achievements_to_db()
4242
var/list/cheevos_to_save = list()
43-
for(var/ckey in GLOB.player_details)
44-
var/datum/player_details/PD = GLOB.player_details[ckey]
43+
for(var/ckey in GLOB.persistent_clients_by_ckey)
44+
var/datum/persistent_client/PD = GLOB.persistent_clients_by_ckey[ckey]
4545
if(!PD || !PD.achievements)
4646
continue
4747
cheevos_to_save += PD.achievements.get_changed_data()

code/controllers/subsystem/blackbox.dm

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,8 @@ SUBSYSTEM_DEF(blackbox)
8383
if (MS.rc_msgs.len)
8484
record_feedback("tally", "radio_usage", MS.rc_msgs.len, "request console")
8585

86-
for(var/player_key in GLOB.player_details)
87-
var/datum/player_details/PD = GLOB.player_details[player_key]
88-
record_feedback("tally", "client_byond_version", 1, PD.byond_version)
86+
for(var/datum/persistent_client/PC as anything in GLOB.persistent_clients)
87+
record_feedback("tally", "client_byond_version", 1, PC.full_byond_version())
8988

9089
/datum/controller/subsystem/blackbox/Shutdown()
9190
sealed = FALSE

code/controllers/subsystem/vote.dm

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ SUBSYSTEM_DEF(vote)
142142
V.Grant(C.mob)
143143
V.name = "Vote: [current_vote.name]"
144144

145-
C.player_details.player_actions += V
145+
C.persistent_client.player_actions += V
146146
generated_actions += V
147147

148148
if(C.prefs.toggles & SOUND_ANNOUNCEMENTS)
@@ -260,11 +260,11 @@ SUBSYSTEM_DEF(vote)
260260

261261
// We also need to remove our action from the player actions when we're cleaning up.
262262
/datum/action/vote/Remove(mob/removed_from)
263-
if(removed_from.client)
264-
removed_from.client?.player_details.player_actions -= src
263+
if(removed_from.persistent_client)
264+
removed_from.persistent_client?.player_actions -= src
265265

266266
else if(removed_from.ckey)
267-
var/datum/player_details/associated_details = GLOB.player_details[removed_from.ckey]
268-
associated_details?.player_actions -= src
267+
var/datum/persistent_client/persistent_client = GLOB.persistent_clients_by_ckey[removed_from.ckey]
268+
persistent_client?.player_actions -= src
269269

270270
return ..()

code/datums/achievements/_achievement_data.dm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,4 +146,4 @@
146146
set name = "Check achievements"
147147
set desc = "See all of your achievements!"
148148

149-
player_details.achievements.ui_interact(usr)
149+
persistent_client.achievements.ui_interact(usr)

code/datums/brain_damage/imaginary_friend.dm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
var/list/mob/dead/observer/candidates = poll_candidates_for_mob("Do you want to play as [owner.real_name]'s imaginary friend?", ROLE_PAI, null, 7.5 SECONDS, friend, POLL_IGNORE_IMAGINARYFRIEND)
5151
if(LAZYLEN(candidates))
5252
var/mob/dead/observer/C = pick(candidates)
53-
friend.key = C.key
53+
friend.PossessByPlayer(C.ckey)
5454
friend_initialized = TRUE
5555
else
5656
qdel(src)

code/datums/brain_damage/split_personality.dm

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
var/list/mob/dead/observer/candidates = poll_candidates_for_mob("Do you want to play as [owner.real_name]'s split personality?", ROLE_PAI, null, 7.5 SECONDS, stranger_backseat, POLL_IGNORE_SPLITPERSONALITY)
3737
if(LAZYLEN(candidates))
3838
var/mob/dead/observer/C = pick(candidates)
39-
stranger_backseat.key = C.key
39+
stranger_backseat.PossessByPlayer(C.ckey)
4040
log_game("[key_name(stranger_backseat)] became [key_name(owner)]'s split personality.")
4141
message_admins("[ADMIN_LOOKUPFLW(stranger_backseat)] became [ADMIN_LOOKUPFLW(owner)]'s split personality.")
4242
else
@@ -92,7 +92,7 @@
9292
owner.computer_id = null
9393
owner.lastKnownIP = null
9494

95-
new_backseat.ckey = owner.ckey
95+
new_backseat.PossessByPlayer(owner.ckey)
9696

9797
new_backseat.name = owner.name
9898

@@ -208,7 +208,7 @@
208208
var/list/mob/dead/observer/candidates = poll_candidates_for_mob("Do you want to play as [owner.real_name]'s brainwashed mind?", null, null, 7.5 SECONDS, stranger_backseat)
209209
if(LAZYLEN(candidates))
210210
var/mob/dead/observer/C = pick(candidates)
211-
stranger_backseat.key = C.key
211+
stranger_backseat.PossessByPlayer(C.ckey)
212212
else
213213
qdel(src)
214214

code/datums/components/spirit_holding.dm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@
6868

6969
var/mob/dead/observer/chosen_spirit = pick(candidates)
7070
bound_spirit = new(parent)
71-
bound_spirit.ckey = chosen_spirit.ckey
71+
bound_spirit.PossessByPlayer(chosen_spirit.ckey)
7272
bound_spirit.fully_replace_character_name(null, "The spirit of [parent]")
7373
bound_spirit.status_flags |= GODMODE
7474
bound_spirit.copy_languages(awakener, LANGUAGE_MASTER) //Make sure the sword can understand and communicate with the awakener.

0 commit comments

Comments
 (0)