diff --git a/src/gs-entbase/server/func_healthcharger.qc b/src/gs-entbase/server/func_healthcharger.qc index 29026ec0..784a99c0 100644 --- a/src/gs-entbase/server/func_healthcharger.qc +++ b/src/gs-entbase/server/func_healthcharger.qc @@ -56,7 +56,7 @@ class func_healthcharger:NSRenderableEntity void func_healthcharger::Save(float handle) { - SaveFloat(handle, "user", num_for_edict(m_eUser)); + SaveEntity(handle, "user", m_eUser); SaveFloat(handle, "delay", m_flDelay); SaveFloat(handle, "check", m_flCheck); SaveString(handle, "snd_first", m_strSndFirst); @@ -70,7 +70,7 @@ func_healthcharger::Restore(string strKey, string strValue) { switch (strKey) { case "user": - m_eUser = edict_num(ReadFloat(strValue)); + m_eUser = ReadEntity(strValue); break; case "delay": m_flDelay = ReadFloat(strValue); diff --git a/src/gs-entbase/server/func_pushable.qc b/src/gs-entbase/server/func_pushable.qc index 8596b133..7afdaad3 100644 --- a/src/gs-entbase/server/func_pushable.qc +++ b/src/gs-entbase/server/func_pushable.qc @@ -49,8 +49,8 @@ class func_pushable:func_breakable void func_pushable::Save(float handle) { - SaveFloat(handle, "puller", num_for_edict(m_pPuller)); - SaveFloat(handle, "collbox", num_for_edict(m_eCollBox)); + SaveEntity(handle, "puller", m_pPuller); + SaveEntity(handle, "collbox", m_eCollBox); super::Save(handle); } @@ -59,10 +59,10 @@ func_pushable::Restore(string strKey, string strValue) { switch (strKey) { case "puller": - m_pPuller = edict_num(ReadFloat(strValue)); + m_pPuller = ReadEntity(strValue); break; case "collbox": - m_eCollBox = edict_num(ReadFloat(strValue)); + m_eCollBox = ReadEntity(strValue); break; default: super::Restore(strKey, strValue); diff --git a/src/gs-entbase/server/func_recharge.qc b/src/gs-entbase/server/func_recharge.qc index 870cc1e8..3239b082 100644 --- a/src/gs-entbase/server/func_recharge.qc +++ b/src/gs-entbase/server/func_recharge.qc @@ -56,7 +56,7 @@ class func_recharge:NSRenderableEntity void func_recharge::Save(float handle) { - SaveFloat(handle, "user", num_for_edict(m_eUser)); + SaveEntity(handle, "user", m_eUser); SaveFloat(handle, "delay", m_flDelay); SaveFloat(handle, "check", m_flCheck); SaveString(handle, "snd_first", m_strSndFirst); @@ -70,7 +70,7 @@ func_recharge::Restore(string strKey, string strValue) { switch (strKey) { case "user": - m_eUser = edict_num(ReadFloat(strValue)); + m_eUser = ReadEntity(strValue); break; case "delay": m_flDelay = ReadFloat(strValue); diff --git a/src/gs-entbase/server/infodecal.qc b/src/gs-entbase/server/infodecal.qc index 76db63c7..372fc399 100644 --- a/src/gs-entbase/server/infodecal.qc +++ b/src/gs-entbase/server/infodecal.qc @@ -53,7 +53,7 @@ class infodecal:NSPointTrigger void infodecal::Save(float handle) { - SaveFloat(handle, "child", num_for_edict(m_decChild)); + SaveEntity(handle, "child", m_decChild); SaveString(handle, "texture", m_strTexture); super::Save(handle); } @@ -63,7 +63,7 @@ infodecal::Restore(string strKey, string strValue) { switch (strKey) { case "child": - m_decChild = (decal)edict_num(ReadFloat(strValue)); + m_decChild = (decal)ReadEntity(strValue); break; case "texture": m_strTexture = ReadString(strValue); diff --git a/src/gs-entbase/server/momentarybase.qc b/src/gs-entbase/server/momentarybase.qc index c0e05921..f3311b10 100644 --- a/src/gs-entbase/server/momentarybase.qc +++ b/src/gs-entbase/server/momentarybase.qc @@ -73,7 +73,7 @@ NSMomentary::SetMoveState(int status) void NSMomentary::Save(float handle) { - SaveFloat(handle, "user", num_for_edict(m_eUser)); + SaveEntity(handle, "user", m_eUser); SaveVector(handle, "move_dir", m_vecMoveDir); SaveVector(handle, "pos1", m_vecPos1); SaveVector(handle, "pos2", m_vecPos2); @@ -90,7 +90,7 @@ NSMomentary::Restore(string strKey, string strValue) { switch (strKey) { case "user": - m_eUser = edict_num(ReadFloat(strValue)); + m_eUser = ReadEntity(strValue); break; case "move_dir": m_vecMoveDir = ReadVector(strValue); diff --git a/src/gs-entbase/server/multi_manager.qc b/src/gs-entbase/server/multi_manager.qc index 7e7f9576..c90332bf 100644 --- a/src/gs-entbase/server/multi_manager.qc +++ b/src/gs-entbase/server/multi_manager.qc @@ -49,7 +49,7 @@ void multi_manager_sub::Save(float handle) { SaveInt(handle, "m_iValue", m_iValue); - SaveFloat(handle, "m_eActivator", num_for_edict(m_eActivator)); + SaveEntity(handle, "m_eActivator", m_eActivator); SaveFloat(handle, "m_flUntilTriggered", m_flUntilTriggered); super::Save(handle); } @@ -62,10 +62,7 @@ multi_manager_sub::Restore(string strKey, string strValue) m_iValue = ReadInt(strValue); break; case "m_eActivator": - float num = ReadFloat(strValue); - - if (num) - m_eActivator = edict_num(num); + m_eActivator = ReadEntity(strValue); break; case "m_flUntilTriggered": m_flUntilTriggered = ReadFloat(strValue); @@ -105,22 +102,22 @@ multi_manager::Save(float handle) SaveString(handle, "m_strBuffer", m_strBuffer); SaveInt(handle, "m_iBusy", m_iBusy); SaveInt(handle, "m_iValue", m_iValue); - SaveFloat(handle, "m_eTriggers_0", num_for_edict(m_eTriggers[0])); - SaveFloat(handle, "m_eTriggers_1", num_for_edict(m_eTriggers[1])); - SaveFloat(handle, "m_eTriggers_2", num_for_edict(m_eTriggers[2])); - SaveFloat(handle, "m_eTriggers_3", num_for_edict(m_eTriggers[3])); - SaveFloat(handle, "m_eTriggers_4", num_for_edict(m_eTriggers[4])); - SaveFloat(handle, "m_eTriggers_5", num_for_edict(m_eTriggers[5])); - SaveFloat(handle, "m_eTriggers_6", num_for_edict(m_eTriggers[6])); - SaveFloat(handle, "m_eTriggers_7", num_for_edict(m_eTriggers[7])); - SaveFloat(handle, "m_eTriggers_8", num_for_edict(m_eTriggers[8])); - SaveFloat(handle, "m_eTriggers_9", num_for_edict(m_eTriggers[9])); - SaveFloat(handle, "m_eTriggers_10", num_for_edict(m_eTriggers[10])); - SaveFloat(handle, "m_eTriggers_11", num_for_edict(m_eTriggers[11])); - SaveFloat(handle, "m_eTriggers_12", num_for_edict(m_eTriggers[12])); - SaveFloat(handle, "m_eTriggers_13", num_for_edict(m_eTriggers[13])); - SaveFloat(handle, "m_eTriggers_14", num_for_edict(m_eTriggers[14])); - SaveFloat(handle, "m_eTriggers_15", num_for_edict(m_eTriggers[15])); + SaveEntity(handle, "m_eTriggers_0", m_eTriggers[0]); + SaveEntity(handle, "m_eTriggers_1", m_eTriggers[1]); + SaveEntity(handle, "m_eTriggers_2", m_eTriggers[2]); + SaveEntity(handle, "m_eTriggers_3", m_eTriggers[3]); + SaveEntity(handle, "m_eTriggers_4", m_eTriggers[4]); + SaveEntity(handle, "m_eTriggers_5", m_eTriggers[5]); + SaveEntity(handle, "m_eTriggers_6", m_eTriggers[6]); + SaveEntity(handle, "m_eTriggers_7", m_eTriggers[7]); + SaveEntity(handle, "m_eTriggers_8", m_eTriggers[8]); + SaveEntity(handle, "m_eTriggers_9", m_eTriggers[9]); + SaveEntity(handle, "m_eTriggers_10", m_eTriggers[10]); + SaveEntity(handle, "m_eTriggers_11", m_eTriggers[11]); + SaveEntity(handle, "m_eTriggers_12", m_eTriggers[12]); + SaveEntity(handle, "m_eTriggers_13", m_eTriggers[13]); + SaveEntity(handle, "m_eTriggers_14", m_eTriggers[14]); + SaveEntity(handle, "m_eTriggers_15", m_eTriggers[15]); super::Save(handle); } @@ -129,61 +126,61 @@ multi_manager::Restore(string strKey, string strValue) { switch (strKey) { case "m_strBuffer": - m_strBuffer = strValue; + m_strBuffer = ReadString(strValue); break; case "m_iBusy": - m_iBusy = stoi(strValue); + m_iBusy = ReadInt(strValue); break; case "m_iValue": - m_iValue = stoi(strValue); + m_iValue = ReadInt(strValue); break; case "m_eTriggers_0": - m_eTriggers[0] = (multi_manager_sub)edict_num(stof(strValue)); + m_eTriggers[0] = ReadEntity(strValue); break; case "m_eTriggers_1": - m_eTriggers[1] = (multi_manager_sub)edict_num(stof(strValue)); + m_eTriggers[1] = ReadEntity(strValue); break; case "m_eTriggers_2": - m_eTriggers[2] = (multi_manager_sub)edict_num(stof(strValue)); + m_eTriggers[2] = ReadEntity(strValue); break; case "m_eTriggers_3": - m_eTriggers[3] = (multi_manager_sub)edict_num(stof(strValue)); + m_eTriggers[3] = ReadEntity(strValue); break; case "m_eTriggers_4": - m_eTriggers[4] = (multi_manager_sub)edict_num(stof(strValue)); + m_eTriggers[4] = ReadEntity(strValue); break; case "m_eTriggers_5": - m_eTriggers[5] = (multi_manager_sub)edict_num(stof(strValue)); + m_eTriggers[5] = ReadEntity(strValue); break; case "m_eTriggers_6": - m_eTriggers[6] = (multi_manager_sub)edict_num(stof(strValue)); + m_eTriggers[6] = ReadEntity(strValue); break; case "m_eTriggers_7": - m_eTriggers[7] = (multi_manager_sub)edict_num(stof(strValue)); + m_eTriggers[7] = ReadEntity(strValue); break; case "m_eTriggers_8": - m_eTriggers[8] = (multi_manager_sub)edict_num(stof(strValue)); + m_eTriggers[8] = ReadEntity(strValue); break; case "m_eTriggers_9": - m_eTriggers[9] = (multi_manager_sub)edict_num(stof(strValue)); + m_eTriggers[9] = ReadEntity(strValue); break; case "m_eTriggers_10": - m_eTriggers[10] = (multi_manager_sub)edict_num(stof(strValue)); + m_eTriggers[10] = ReadEntity(strValue); break; case "m_eTriggers_11": - m_eTriggers[11] = (multi_manager_sub)edict_num(stof(strValue)); + m_eTriggers[11] = ReadEntity(strValue); break; case "m_eTriggers_12": - m_eTriggers[12] = (multi_manager_sub)edict_num(stof(strValue)); + m_eTriggers[12] = ReadEntity(strValue); break; case "m_eTriggers_13": - m_eTriggers[13] = (multi_manager_sub)edict_num(stof(strValue)); + m_eTriggers[13] = ReadEntity(strValue); break; case "m_eTriggers_14": - m_eTriggers[14] = (multi_manager_sub)edict_num(stof(strValue)); + m_eTriggers[14] = ReadEntity(strValue); break; case "m_eTriggers_15": - m_eTriggers[15] = (multi_manager_sub)edict_num(stof(strValue)); + m_eTriggers[15] = ReadEntity(strValue); break; default: super::Restore(strKey, strValue); diff --git a/src/gs-entbase/server/trigger_changelevel.qc b/src/gs-entbase/server/trigger_changelevel.qc index a6bfef87..28e431a1 100644 --- a/src/gs-entbase/server/trigger_changelevel.qc +++ b/src/gs-entbase/server/trigger_changelevel.qc @@ -102,7 +102,7 @@ trigger_changelevel::Save(float handle) SaveString(handle, "map", m_strMap); SaveString(handle, "landmark", m_strLandmark); SaveString(handle, "OnLevelChange", m_strOnLevelChange); - SaveFloat(handle, "activator", num_for_edict(m_activator)); + SaveEntity(handle, "activator", m_activator); super::Save(handle); } @@ -126,7 +126,7 @@ trigger_changelevel::Restore(string strKey, string strValue) m_strOnLevelChange = ReadString(strValue); break; case "activator": - m_activator = edict_num(ReadFloat(strValue)); + m_activator = ReadEntity(strValue); break; default: super::Restore(strKey, strValue); diff --git a/src/shared/NSIO.h b/src/shared/NSIO.h index 96cc07c2..f644b03d 100644 --- a/src/shared/NSIO.h +++ b/src/shared/NSIO.h @@ -56,6 +56,7 @@ class NSIO nonvirtual void(float, string, string) SaveString; nonvirtual void(float, string, vector) SaveVector; nonvirtual void(float, string, bool) SaveBool; + nonvirtual void(float, string, entity) SaveEntity; /* load game */ nonvirtual float(string) ReadFloat; @@ -63,6 +64,7 @@ class NSIO nonvirtual string(string) ReadString; nonvirtual vector(string) ReadVector; nonvirtual bool(string) ReadBool; + nonvirtual entity(string) ReadEntity; /* Handle incoming entities input messaging */ virtual void(entity, string, string) Input; diff --git a/src/shared/NSIO.qc b/src/shared/NSIO.qc index 4c0eaa18..b83f78fc 100644 --- a/src/shared/NSIO.qc +++ b/src/shared/NSIO.qc @@ -165,31 +165,39 @@ void NSIO::SaveBool(float handle, string key, bool value) { if (value) - fputs(handle, sprintf("%S \"%f\"\n", key, value)); + fputs(handle, sprintf("%S \"%f\"\n", key, value)); } void NSIO::SaveFloat(float handle, string key, float value) { if (value) - fputs(handle, sprintf("%S \"%f\"\n", key, value)); + fputs(handle, sprintf("%S \"%f\"\n", key, value)); } void NSIO::SaveInt(float handle, string key, int value) { if (value) - fputs(handle, sprintf("%S \"%i\"\n", key, value)); + fputs(handle, sprintf("%S \"%i\"\n", key, value)); } void NSIO::SaveString(float handle, string key, string value) { if (value && value != "") - fputs(handle, sprintf("%S %S\n", key, value)); + fputs(handle, sprintf("%S %S\n", key, value)); } void NSIO::SaveVector(float handle, string key, vector value) { if (value) - fputs(handle, sprintf("%S \"%v\"\n", key, value)); + fputs(handle, sprintf("%S \"%v\"\n", key, value)); +} +void +NSIO::SaveEntity(float handle, string key, entity targ) +{ + float value = num_for_edict(targ); + + if (value) + fputs(handle, sprintf("%S \"%f\"\n", key, value)); } float @@ -227,7 +235,17 @@ NSIO::ReadVector(string strValue) return stov(strValue); return __NULL__; } +entity +NSIO::ReadEntity(string strValue) +{ + if (strValue && strValue != "") { + float num = stof(strValue); + if (num) + return edict_num(num); + } + return __NULL__; +} void NSIO::Save(float handle)