diff --git a/base/src/shared/pmove_water.qc b/base/src/shared/pmove_water.qc index 289385a1..8cbe5275 100644 --- a/base/src/shared/pmove_water.qc +++ b/base/src/shared/pmove_water.qc @@ -37,7 +37,7 @@ GamePMove_WaterMove(player target) } else if (target.underwater_time < time) { /* we've been underwater... for too long. */ if (target.pain_time < time) { - Damage_Apply(target, world, 5, DMG_DROWN, 0); + Damage_Apply(target, world, 5, 0, DMG_DROWN); target.pain_time = time + 1; } } @@ -57,12 +57,12 @@ GamePMove_WaterMove(player target) if (target.watertype == CONTENT_LAVA) { if (target.pain_time < time) { target.pain_time = time + 0.2; - Damage_Apply(target, world, 10*target.waterlevel, DMG_BURN, 0); + Damage_Apply(target, world, 10*target.waterlevel, 0, DMG_BURN); } } else if (target.watertype == CONTENT_SLIME) { if (target.pain_time < time) { target.pain_time = time + 1; - Damage_Apply(target, world, 4*target.waterlevel, DMG_ACID, 0); + Damage_Apply(target, world, 4*target.waterlevel, 0, DMG_ACID); } } #endif diff --git a/src/gs-entbase/shared/NSSurfacePropEntity.qc b/src/gs-entbase/shared/NSSurfacePropEntity.qc index 20976628..2ffbea66 100644 --- a/src/gs-entbase/shared/NSSurfacePropEntity.qc +++ b/src/gs-entbase/shared/NSSurfacePropEntity.qc @@ -32,100 +32,93 @@ NSSurfacePropEntity::Spawned(void) /* networking */ #ifdef SERVER + +#if INDEV +typedef enum +{ + NETFIELD_BYTE, + NETFIELD_SHORT, + NETFIELD_FLOAT, + NETFIELD_INT, + NETFIELD_COORD, + NETFIELD_ANGLE, + NETFIELD_ENTITY, + NETFIELD_STRING +} nettype_e; + +typedef struct +{ + .variant field; + .variant field_net; + int changedflag; + __variant defaultvalue; + nettype_e type; +} netinfo_t; + +const netinfo_t n_NSSurfacePropEntity[] = +{ + {origin[0], NSEntity::origin_net[0], SRFENT_CHANGED_ORIGIN, 0, NETFIELD_COORD}, + {origin[1], NSEntity::origin_net[1], SRFENT_CHANGED_ORIGIN, 0, NETFIELD_COORD}, + {origin[2], NSEntity::origin_net[2], SRFENT_CHANGED_ORIGIN, 0, NETFIELD_COORD}, + {angles[0], NSEntity::angles_net[0], SRFENT_CHANGED_ANGLES, 0, NETFIELD_ANGLE}, + {angles[1], NSEntity::angles_net[1], SRFENT_CHANGED_ANGLES, 0, NETFIELD_ANGLE}, + {angles[2], NSEntity::angles_net[2], SRFENT_CHANGED_ANGLES, 0, NETFIELD_ANGLE}, + {modelindex, NSEntity::modelindex_net, SRFENT_CHANGED_MODELINDEX, 0, NETFIELD_SHORT}, + {solid, NSEntity::solid_net, SRFENT_CHANGED_SOLID, 0, NETFIELD_BYTE}, + {movetype, NSEntity::movetype_net, SRFENT_CHANGED_MOVETYPE, 0, NETFIELD_BYTE}, + {flags, NSEntity::flags_net, SRFENT_CHANGED_FLAGS, 0, NETFIELD_FLOAT}, + {size[0], NSEntity::size_net[0], SRFENT_CHANGED_SIZE, 0, NETFIELD_SHORT}, + {size[1], NSEntity::size_net[1], SRFENT_CHANGED_SIZE, 0, NETFIELD_SHORT}, + {size[2], NSEntity::size_net[2], SRFENT_CHANGED_SIZE, 0, NETFIELD_SHORT}, + {frame, NSRenderableEntity::frame_net, SRFENT_CHANGED_FRAME, 0, NETFIELD_SHORT}, + {skin, NSRenderableEntity::skin_net, SRFENT_CHANGED_SKIN, 0, NETFIELD_BYTE}, + {effects, NSRenderableEntity::effects_net, SRFENT_CHANGED_EFFECTS, 0, NETFIELD_SHORT}, + {NSRenderableEntity::m_iBody, NSRenderableEntity::m_iBody_net, SRFENT_CHANGED_BODY, 0, NETFIELD_BYTE}, + {scale, NSEntity::scale_net, SRFENT_CHANGED_SCALE, 0, NETFIELD_FLOAT}, + {velocity[0], NSEntity::velocity_net[0], SRFENT_CHANGED_VELOCITY, 0, NETFIELD_ANGLE}, + {velocity[1], NSEntity::velocity_net[1], SRFENT_CHANGED_VELOCITY, 0, NETFIELD_ANGLE}, + {velocity[2], NSEntity::velocity_net[2], SRFENT_CHANGED_VELOCITY, 0, NETFIELD_ANGLE}, + {NSRenderableEntity::m_iRenderMode, NSRenderableEntity::m_iRenderMode_net, SRFENT_CHANGED_RENDERMODE, 0, NETFIELD_BYTE}, + {NSRenderableEntity::m_iRenderFX, NSRenderableEntity::m_iRenderFX_net, SRFENT_CHANGED_RENDERMODE, 0, NETFIELD_BYTE}, +}; + void NSSurfacePropEntity::EvaluateEntity(void) { - if (ATTR_CHANGED(origin)) { - SetSendFlags(SRFENT_CHANGED_ORIGIN); - } - if (ATTR_CHANGED(angles)) { - SetSendFlags(SRFENT_CHANGED_ANGLES); - } - if (ATTR_CHANGED(modelindex)) { - SetSendFlags(SRFENT_CHANGED_MODELINDEX); - } - if (ATTR_CHANGED(solid)) { - SetSendFlags(SRFENT_CHANGED_SOLID); - } - if (ATTR_CHANGED(movetype)) { - SetSendFlags(SRFENT_CHANGED_MOVETYPE); - } - if (ATTR_CHANGED(flags)) { - SetSendFlags(SRFENT_CHANGED_FLAGS); - } - if (ATTR_CHANGED(size)) { - SetSendFlags(SRFENT_CHANGED_SIZE); - } - if (ATTR_CHANGED(frame)) { - SetSendFlags(SRFENT_CHANGED_FRAME); - } - if (ATTR_CHANGED(skin)) { - SetSendFlags(SRFENT_CHANGED_SKIN); - } - if (ATTR_CHANGED(effects)) { - SetSendFlags(SRFENT_CHANGED_EFFECTS); - } - if (ATTR_CHANGED(m_iBody)) { - SetSendFlags(SRFENT_CHANGED_BODY); - } - if (ATTR_CHANGED(scale)) { - SetSendFlags(SRFENT_CHANGED_SCALE); - } - if (ATTR_CHANGED(velocity)) { - SetSendFlags(SRFENT_CHANGED_VELOCITY); - } - if (ATTR_CHANGED(m_flBoneControl1)) { - SetSendFlags(SRFENT_CHANGED_CONTROLLER); - } - if (ATTR_CHANGED(m_flBoneControl2)) { - SetSendFlags(SRFENT_CHANGED_CONTROLLER); - } - if (ATTR_CHANGED(m_flBoneControl3)) { - SetSendFlags(SRFENT_CHANGED_CONTROLLER); - } - if (ATTR_CHANGED(m_flBoneControl4)) { - SetSendFlags(SRFENT_CHANGED_CONTROLLER); - } - if (ATTR_CHANGED(m_flBoneControl5)) { - SetSendFlags(SRFENT_CHANGED_CONTROLLER); - } + for (int i = 0; i < n_NSSurfacePropEntity.length; i++) { + if (this.(n_NSSurfacePropEntity[i].field) != this.(n_NSSurfacePropEntity[i].field_net)) + SetSendFlags(n_NSSurfacePropEntity[i].changedflag); - SAVE_STATE(origin); - SAVE_STATE(angles); - SAVE_STATE(modelindex); - SAVE_STATE(solid); - SAVE_STATE(movetype); - SAVE_STATE(flags); - SAVE_STATE(size); - SAVE_STATE(frame); - SAVE_STATE(skin); - SAVE_STATE(effects); - SAVE_STATE(m_iBody); - SAVE_STATE(scale); - SAVE_STATE(velocity); - SAVE_STATE(m_flBoneControl1); - SAVE_STATE(m_flBoneControl2); - SAVE_STATE(m_flBoneControl3); - SAVE_STATE(m_flBoneControl4); - SAVE_STATE(m_flBoneControl5); + this.(n_NSSurfacePropEntity[i].field_net) = this.(n_NSSurfacePropEntity[i].field); + } +} +#endif - if (ATTR_CHANGED(m_iRenderMode)) { - SetSendFlags(SRFENT_CHANGED_RENDERMODE); - } - if (ATTR_CHANGED(m_iRenderFX)) { - SetSendFlags(SRFENT_CHANGED_RENDERMODE); - } - - if (ATTR_CHANGED(m_vecRenderColor)) { - SetSendFlags(SRFENT_CHANGED_RENDERCOLOR); - } - if (ATTR_CHANGED(m_flRenderAmt)) { - SetSendFlags(SRFENT_CHANGED_RENDERAMT); - } - SAVE_STATE(m_iRenderMode); - SAVE_STATE(m_iRenderFX); - SAVE_STATE(m_vecRenderColor); - SAVE_STATE(m_flRenderAmt); +void +NSSurfacePropEntity::EvaluateEntity(void) +{ + EVALUATE_FIELD(origin, SRFENT_CHANGED_ORIGIN) + EVALUATE_FIELD(angles, SRFENT_CHANGED_ANGLES) + EVALUATE_FIELD(modelindex, SRFENT_CHANGED_MODELINDEX) + EVALUATE_FIELD(solid, SRFENT_CHANGED_SOLID) + EVALUATE_FIELD(movetype, SRFENT_CHANGED_FLAGS) + EVALUATE_FIELD(flags, SRFENT_CHANGED_FLAGS) + EVALUATE_FIELD(size, SRFENT_CHANGED_SIZE) + EVALUATE_FIELD(frame, SRFENT_CHANGED_FRAME) + EVALUATE_FIELD(skin, SRFENT_CHANGED_SKIN) + EVALUATE_FIELD(effects, SRFENT_CHANGED_EFFECTS) + EVALUATE_FIELD(m_iBody, SRFENT_CHANGED_BODY) + EVALUATE_FIELD(scale, SRFENT_CHANGED_SCALE) + EVALUATE_FIELD(velocity, SRFENT_CHANGED_VELOCITY) + EVALUATE_FIELD(m_iRenderMode, SRFENT_CHANGED_RENDERMODE) + EVALUATE_FIELD(m_iRenderFX, SRFENT_CHANGED_RENDERMODE) + EVALUATE_FIELD(m_vecRenderColor, SRFENT_CHANGED_RENDERCOLOR) + EVALUATE_FIELD(m_flRenderAmt, SRFENT_CHANGED_RENDERAMT) + EVALUATE_FIELD(m_flBoneControl1, SRFENT_CHANGED_CONTROLLER) + EVALUATE_FIELD(m_flBoneControl2, SRFENT_CHANGED_CONTROLLER) + EVALUATE_FIELD(m_flBoneControl3, SRFENT_CHANGED_CONTROLLER) + EVALUATE_FIELD(m_flBoneControl4, SRFENT_CHANGED_CONTROLLER) + EVALUATE_FIELD(m_flBoneControl5, SRFENT_CHANGED_CONTROLLER) } /* Make sure StartFrame calls this */ diff --git a/src/server/defs.h b/src/server/defs.h index 8830043c..97e028d2 100644 --- a/src/server/defs.h +++ b/src/server/defs.h @@ -28,6 +28,20 @@ #include "route.h" #include "way.h" +/* helper macros */ +#define EVALUATE_FIELD(fieldname, changedflag) {\ + if (ATTR_CHANGED(fieldname)) { \ + SetSendFlags(changedflag); \ + } \ + SAVE_STATE(fieldname); \ + } +#define EVALUATE_VECTOR(fieldname, id, changedflag) {\ + if (VEC_CHANGED(fieldname, id)) { \ + SetSendFlags(changedflag); \ + } \ + SAVE_STATE(fieldname);\ + } + #define AREAPORTAL_CLOSED 0 #define AREAPORTAL_OPEN 1 diff --git a/src/server/gamerules.qc b/src/server/gamerules.qc index 78d21df3..5e1bdf13 100644 --- a/src/server/gamerules.qc +++ b/src/server/gamerules.qc @@ -39,17 +39,26 @@ CGameRules::ConsoleCommand(NSClientPlayer pl, string cmd) void CGameRules::PlayerConnect(NSClientPlayer pl) { - //print("ClientConnect!\n"); + if (Plugin_PlayerConnect(pl) == FALSE) + bprint(PRINT_HIGH, sprintf("%s connected\n", pl.netname)); } void CGameRules::PlayerDisconnect(NSClientPlayer pl) { - //print("ClientDisconnect!\n"); + 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); } + void CGameRules::PlayerKill(NSClientPlayer pl) { - //print("PlayerKill!\n"); + Damage_Apply(pl, pl, pl.health, 0, DMG_SKIP_ARMOR); } void CGameRules::PlayerDeath(NSClientPlayer pl) diff --git a/src/server/traceattack.qc b/src/server/traceattack.qc index 5a91def7..de24e134 100644 --- a/src/server/traceattack.qc +++ b/src/server/traceattack.qc @@ -169,7 +169,10 @@ NSTraceAttack::Fire(void) m_iMultiValue = 0; while (m_iShots > 0) { - vecDir = aim(m_eOwner, 100000); + if (m_eOwner.flags & FL_CLIENT) + vecDir = aim(m_eOwner, 100000); + else + vecDir = m_eOwner.v_angle; #ifndef BULLETPATTERNS vecDir += random(-1,1) * m_vecSpread[0] * v_right; diff --git a/src/shared/defs.h b/src/shared/defs.h index 1558fa52..5b4573bf 100644 --- a/src/shared/defs.h +++ b/src/shared/defs.h @@ -32,6 +32,7 @@ #define ATTR_CHANGED(x) (x ##_net != x) #define VEC_CHANGED(x,y) (x ##_net[y] != x[y]) + #include "global.h" #include "sound.h" diff --git a/src/shared/player_pmove.qc b/src/shared/player_pmove.qc index 798a70f4..f2f2bd33 100644 --- a/src/shared/player_pmove.qc +++ b/src/shared/player_pmove.qc @@ -189,7 +189,7 @@ NSClientPlayer::Physics_WaterMove(void) } else if (underwater_time < time) { /* we've been underwater... for too long. */ if (pain_time < time) { - Damage_Apply(this, world, 5, DMG_DROWN, 0); + Damage_Apply(this, world, 5, 0, DMG_DROWN); pain_time = time + 1; } } @@ -209,12 +209,12 @@ NSClientPlayer::Physics_WaterMove(void) if (watertype == CONTENT_LAVA) { if (pain_time < time) { pain_time = time + 0.2; - Damage_Apply(this, world, 10*waterlevel, DMG_BURN, 0); + Damage_Apply(this, world, 10 * waterlevel, 0, DMG_BURN); } } else if (watertype == CONTENT_SLIME) { if (pain_time < time) { pain_time = time + 1; - Damage_Apply(this, world, 4*waterlevel, DMG_ACID, 0); + Damage_Apply(this, world, 4 * waterlevel, 0, DMG_ACID); } } #endif diff --git a/src/shared/surfaceproperties.qc b/src/shared/surfaceproperties.qc index e94690cf..88c4e0b1 100644 --- a/src/shared/surfaceproperties.qc +++ b/src/shared/surfaceproperties.qc @@ -464,7 +464,7 @@ void SurfData_Impact(entity e, int fl, vector org, vector ang) { static void SurfData_Impact_SurfaceParm(entity e, int fl, vector org, vector ang) { -#if 1 +#ifndef NEW_MATERIALS switch (serverkeyfloat("*bspversion")) { case BSPVER_HL: float surf;