diff --git a/src/gs-entbase/server/light.qc b/src/gs-entbase/server/light.qc index c8b83e7b..bdc2639b 100644 --- a/src/gs-entbase/server/light.qc +++ b/src/gs-entbase/server/light.qc @@ -196,6 +196,8 @@ light::Spawned(void) void light::Respawn(void) { + InitPointTrigger(); + switch (serverkeyfloat("*bspversion")) { case BSPVER_PREREL: case BSPVER_Q1: diff --git a/src/gs-entbase/server/path_corner.qc b/src/gs-entbase/server/path_corner.qc index 27a760aa..089bd904 100644 --- a/src/gs-entbase/server/path_corner.qc +++ b/src/gs-entbase/server/path_corner.qc @@ -83,7 +83,7 @@ path_corner::path_corner(void) m_iFired = 0i; m_flSpeed = 0.0f; m_flYawSpeed = 0.0f; - m_flWait = 1.0f; + m_flWait = 0.0f; m_strOnPass = __NULL__; } @@ -232,9 +232,13 @@ path_corner::PathPassTrigger(entity activatingEntity, triggermode_t triggerMode) return; } + EntLog("%S (%d) has passed us.", \ + activatingEntity.classname, num_for_edict(activatingEntity)); + UseOutput(this, m_strOnPass); - if (!m_strMessage) + /* never trigger "" */ + if (!m_strMessage || m_strMessage == "") return; for (entity f = world; (f = find(f, ::targetname, m_strMessage));) { diff --git a/src/gs-entbase/server/path_track.qc b/src/gs-entbase/server/path_track.qc index cdbda5d6..faa82c7c 100644 --- a/src/gs-entbase/server/path_track.qc +++ b/src/gs-entbase/server/path_track.qc @@ -212,7 +212,7 @@ path_track::GetPathTarget(void) return targetname; } - if (!target) { + if (HasTriggerTarget() == false) { theTarget = targetname; } diff --git a/src/gs-entbase/server/scripted_sequence.qc b/src/gs-entbase/server/scripted_sequence.qc index c1565945..4bca8574 100644 --- a/src/gs-entbase/server/scripted_sequence.qc +++ b/src/gs-entbase/server/scripted_sequence.qc @@ -197,6 +197,8 @@ scripted_sequence::SpawnKey(string strKey, string strValue) void scripted_sequence::Respawn(void) { + InitPointTrigger(); + m_iEnabled = TRUE; target = m_oldstrTarget; diff --git a/src/gs-entbase/server/trigger_relay.qc b/src/gs-entbase/server/trigger_relay.qc index d522a2c5..2d01443f 100644 --- a/src/gs-entbase/server/trigger_relay.qc +++ b/src/gs-entbase/server/trigger_relay.qc @@ -108,6 +108,7 @@ trigger_relay::SpawnKey(string strKey, string strValue) void trigger_relay::Respawn(void) { + InitPointTrigger(); m_iEnabled = TRUE; m_iValue = FALSE; } @@ -116,15 +117,15 @@ void trigger_relay::Trigger(entity act, triggermode_t state) { if (m_iEnabled == FALSE) { - EntLog("trigger_relay (%s) has already been triggered", targetname); + EntLog("trigger_relay %S has already been triggered", targetname); return; } - if (HasSpawnFlags(TRLY_ONCE)) { + if (HasSpawnFlags(TRLY_ONCE) == true) { m_iEnabled = FALSE; } m_iValue = TRUE; - EntLog("trigger_relay (%s) will trigger %s with state %d", targetname, target, m_iTriggerState); + EntLog("trigger_relay %S will trigger %S with state %d", targetname, target, m_iTriggerState); UseTargets(act, m_iTriggerState, m_flDelay); } diff --git a/src/gs-entbase/shared/ambient_generic.qc b/src/gs-entbase/shared/ambient_generic.qc index d2e8eea1..a7c2a9c3 100644 --- a/src/gs-entbase/shared/ambient_generic.qc +++ b/src/gs-entbase/shared/ambient_generic.qc @@ -288,7 +288,8 @@ ambient_generic::UseNormal(entity act, triggermode_t state) msg_entity = this; multicast(origin, MULTICAST_PHS); } else { - if not (whichpack(strcat("sound/", m_strActivePath))) { + /* if the file doesn't exist, assume it's a SoundDef */ + if (FileExists(strcat("sound/", m_strActivePath)) == false) { Sound_Play(this, CHAN_BODY, m_strActivePath); } else { sound(this, CHAN_BODY, m_strActivePath, m_flVolume, m_flRadius, m_flPitch); diff --git a/src/server/NSGameRules.qc b/src/server/NSGameRules.qc index 2a0b792f..1a874a7a 100644 --- a/src/server/NSGameRules.qc +++ b/src/server/NSGameRules.qc @@ -90,20 +90,12 @@ void NSGameRules::PlayerConnect(NSClientPlayer pl) { if (Plugin_PlayerConnect(pl) == FALSE) - bprint(PRINT_HIGH, sprintf("%s connected\n", pl.netname)); + bprint(PRINT_HIGH, sprintf("%s^d connected.\n", pl.netname)); } void NSGameRules::PlayerDisconnect(NSClientPlayer pl) { - bprint(PRINT_HIGH, sprintf("%s disconnected\n", pl.netname)); - - /* make the client 'unusable' */ - pl.SetSolid(SOLID_NOT); - pl.SetMovetype(MOVETYPE_NONE); - pl.SetModelindex(0); - pl.SetHealth(0); - pl.SetTakedamage(DAMAGE_NO); - pl.SetTeam(0); + bprint(PRINT_HIGH, sprintf("%s^d disconnected.\n", pl.netname)); } void diff --git a/src/server/entry.qc b/src/server/entry.qc index 721952ee..e4dbc12d 100644 --- a/src/server/entry.qc +++ b/src/server/entry.qc @@ -69,11 +69,6 @@ ClientConnect(void) for (entity a = world; (a = find(a, ::classname, "player"));) playercount++; - - /* Force node init */ - if (playercount == 1) { - Nodes_Init(); - } } /** Called when a player leaves the server. At the end of the function the @@ -88,9 +83,16 @@ ClientDisconnect(void) /* this will hide/remove the player from other clients */ player pl = (player)self; + pl.SetSolid(SOLID_NOT); + pl.SetMovetype(MOVETYPE_NONE); + pl.SetModelindex(0); + pl.SetHealth(0); + pl.SetTakedamage(DAMAGE_NO); + pl.SetTeam(0); pl.Disappear(); pl.classname = ""; pl.flags = 0; + } /** Called by the `kill` console command. @@ -148,7 +150,7 @@ PutClientInServer(void) g_grMode.PlayerSpawn((NSClientPlayer)self); /* handle transitions */ - if (whichpack("data/trans.dat")) { + if (FileExists("data/trans.dat")) { for (entity a = world; (a = findfloat(a, ::identity, 1));) { NSEntity levelEnt = (NSEntity)a; @@ -159,6 +161,7 @@ PutClientInServer(void) } Plugin_PlayerEntered((NSClientPlayer)self); + bprint(PRINT_HIGH, sprintf("%s^d entered the game.\n", self.netname)); /* activate all game_playerspawn entities */ for (entity a = world; (a = find(a, ::targetname, "game_playerspawn"));) { @@ -402,6 +405,8 @@ init_respawn(void) InitEnd(); + Nodes_Init(); + remove(self); } @@ -695,7 +700,12 @@ SV_PerformLoad(float fh, float entcount, float playerslots) #ifdef REEDICT while ((e=nextent(e))) { if (edict_num(1) != e) - remove(e); + NSEntity toRemove = (NSEntity)e; + if (toRemove.Destroy) { + toRemove.Destroy(); + } else { + remove(e); + } } #else e = world; @@ -738,8 +748,13 @@ SV_PerformLoad(float fh, float entcount, float playerslots) loadent = (NSEntity)e; self = eold; } else { + NSEntity toRemove = (NSEntity)e; NSError("Could not spawn %s", cname); - remove(e); + if (toRemove.Destroy) { + toRemove.Destroy(); + } else { + remove(e); + } self = eold; continue; } diff --git a/src/server/mapcycle.qc b/src/server/mapcycle.qc index 08a4945b..a8aaf602 100644 --- a/src/server/mapcycle.qc +++ b/src/server/mapcycle.qc @@ -34,7 +34,7 @@ Mapcycle_Load(string filename) /* read the lines in, see if the map exists and define an enumerated alias */ while ((temp = fgets(fs_mapcycle))) { - if not (whichpack(strcat("maps/", temp, ".bsp"))) + if (FileExists(strcat("maps/", temp, ".bsp")) == false) continue; localcmd(sprintf("alias m%i \"map %s;alias nextmap m%i\"\n", mapcount, temp, mapcount + 1i)); diff --git a/src/server/vote.qc b/src/server/vote.qc index 17c38a6e..16a22871 100644 --- a/src/server/vote.qc +++ b/src/server/vote.qc @@ -258,7 +258,7 @@ CSEv_CallVote_s(string text) tokenize(text); switch (argv(0)) { case "map": - if not (whichpack(sprintf("maps/%s.bsp", argv(1)))) { + if (FileExists(sprintf("maps/%s.bsp", argv(1))) == false) { sprint(self, PRINT_CHAT, sprintf("Map '%s' not available on server.\n", argv(1))); break; } diff --git a/src/shared/NSPointTrigger.h b/src/shared/NSPointTrigger.h index 060c206a..6b16e1a9 100644 --- a/src/shared/NSPointTrigger.h +++ b/src/shared/NSPointTrigger.h @@ -27,4 +27,11 @@ public: /** Sets up a point entity trigger with no size. */ nonvirtual void InitPointTrigger(void); + + virtual void DebugDraw(void); + +#ifdef SERVER +private: + string m_strDebugTexture; +#endif }; diff --git a/src/shared/NSPointTrigger.qc b/src/shared/NSPointTrigger.qc index 5d78a471..9c99bf14 100644 --- a/src/shared/NSPointTrigger.qc +++ b/src/shared/NSPointTrigger.qc @@ -14,6 +14,14 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +void +NSPointTrigger::NSPointTrigger(void) +{ +#ifdef SERVER + m_strDebugTexture = __NULL__; +#endif +} + void NSPointTrigger::InitPointTrigger(void) { @@ -22,11 +30,19 @@ NSPointTrigger::InitPointTrigger(void) #ifdef SERVER m_bEnabled = (m_bStartDisabled) ? false : true; + m_strDebugTexture = strcat("textures/editor/", classname); #endif } - void -NSPointTrigger::NSPointTrigger(void) +NSPointTrigger::DebugDraw(void) { +#ifdef SERVER + R_BeginPolygon(m_strDebugTexture, 0, 0); + R_PolygonVertex(GetOrigin() + v_right * 16 - v_up * 16, [1,1], [1,1,1], 1.0f); + R_PolygonVertex(GetOrigin() - v_right * 16 - v_up * 16, [0,1], [1,1,1], 1.0f); + R_PolygonVertex(GetOrigin() - v_right * 16 + v_up * 16, [0,0], [1,1,1], 1.0f); + R_PolygonVertex(GetOrigin() + v_right * 16 + v_up * 16, [1,0], [1,1,1], 1.0f); + R_EndPolygon(); +#endif } diff --git a/src/shared/NSSurfacePropEntity.qc b/src/shared/NSSurfacePropEntity.qc index e69bf17f..0b7954a0 100644 --- a/src/shared/NSSurfacePropEntity.qc +++ b/src/shared/NSSurfacePropEntity.qc @@ -360,6 +360,7 @@ NSSurfacePropEntity::SpawnKey(string keyName, string setValue) } } + void NSSurfacePropEntity::Pain(void) {