From 9ea54f942ec2a5a488644d5471d3db2bb3cdf842 Mon Sep 17 00:00:00 2001 From: revolucas Date: Sat, 10 Sep 2016 06:30:48 -0400 Subject: [PATCH] CSE_AlifeOnlineOfflineGroup: switch_online/switch_offline. Verify members are offline before adding online and visa versa. If a specific member is already online (from scripting needs) and add_online is called it will cause crash with duplicate ID error since it net_spawns twice. --- src/xrGame/alife_online_offline_group.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/xrGame/alife_online_offline_group.cpp b/src/xrGame/alife_online_offline_group.cpp index a53de79084a..5e819dd0c82 100644 --- a/src/xrGame/alife_online_offline_group.cpp +++ b/src/xrGame/alife_online_offline_group.cpp @@ -231,7 +231,8 @@ void CSE_ALifeOnlineOfflineGroup::switch_online () MEMBERS::iterator I = m_members.begin(); MEMBERS::iterator E = m_members.end(); for ( ; I != E; ++I){ - alife().add_online ((*I).second, false); + if ((*I).second->m_bOnline == false) + alife().add_online((*I).second, false); } alife().scheduled().remove (this); @@ -257,8 +258,11 @@ void CSE_ALifeOnlineOfflineGroup::switch_offline () MEMBERS::iterator I = m_members.begin(); MEMBERS::iterator E = m_members.end(); for ( ; I != E; ++I){ - (*I).second->clear_client_data(); - alife().remove_online ((*I).second, false); + if ((*I).second->m_bOnline == true) + { + (*I).second->clear_client_data(); + alife().remove_online ((*I).second, false); + } } alife().scheduled().add (this);