// weapon switching impulses
-bool autocvar_g_weaponswitch_debug;
-
#define X(slot) \
IMPULSE(weapon_group_##slot) \
{ \
{ \
.entity weaponentity = weaponentities[wepslot]; \
W_NextWeaponOnImpulse(this, slot, weaponentity); \
- if(wepslot == 0 && !autocvar_g_weaponswitch_debug) \
+ if(wepslot == 0 && autocvar_g_weaponswitch_debug != 1) \
break; \
} \
}
{ \
.entity weaponentity = weaponentities[wepslot]; \
W_CycleWeapon(this, this.cvar_cl_weaponpriorities[slot], dir, weaponentity); \
- if(wepslot == 0 && !autocvar_g_weaponswitch_debug) \
+ if(wepslot == 0 && autocvar_g_weaponswitch_debug != 1) \
break; \
} \
}
{ \
.entity weaponentity = weaponentities[slot]; \
W_SwitchWeapon(this, Weapons_from(WEP_FIRST + i), weaponentity); \
- if(slot == 0 && !autocvar_g_weaponswitch_debug) \
+ if(slot == 0 && autocvar_g_weaponswitch_debug != 1) \
break; \
} \
}
.entity weaponentity = weaponentities[slot];
W_NextWeapon(this, 0, weaponentity);
- if(slot == 0 && !autocvar_g_weaponswitch_debug)
+ if(slot == 0 && autocvar_g_weaponswitch_debug != 1)
break;
}
}
.entity weaponentity = weaponentities[slot];
W_PreviousWeapon(this, 0, weaponentity);
- if(slot == 0 && !autocvar_g_weaponswitch_debug)
+ if(slot == 0 && autocvar_g_weaponswitch_debug != 1)
break;
}
}
.entity weaponentity = weaponentities[slot];
W_NextWeapon(this, 1, weaponentity);
- if(slot == 0 && !autocvar_g_weaponswitch_debug)
+ if(slot == 0 && autocvar_g_weaponswitch_debug != 1)
break;
}
}
.entity weaponentity = weaponentities[slot];
W_PreviousWeapon(this, 1, weaponentity);
- if(slot == 0 && !autocvar_g_weaponswitch_debug)
+ if(slot == 0 && autocvar_g_weaponswitch_debug != 1)
break;
}
}
.entity weaponentity = weaponentities[slot];
W_NextWeapon(this, 2, weaponentity);
- if(slot == 0 && !autocvar_g_weaponswitch_debug)
+ if(slot == 0 && autocvar_g_weaponswitch_debug != 1)
break;
}
}
.entity weaponentity = weaponentities[slot];
W_PreviousWeapon(this, 2, weaponentity);
- if(slot == 0 && !autocvar_g_weaponswitch_debug)
+ if(slot == 0 && autocvar_g_weaponswitch_debug != 1)
break;
}
}
.entity weaponentity = weaponentities[slot];
W_LastWeapon(this, weaponentity);
- if(slot == 0 && !autocvar_g_weaponswitch_debug)
+ if(slot == 0 && autocvar_g_weaponswitch_debug != 1)
break;
}
}
.entity weaponentity = weaponentities[slot];
W_SwitchWeapon(this, w_getbestweapon(this, weaponentity), weaponentity);
- if(slot == 0 && !autocvar_g_weaponswitch_debug)
+ if(slot == 0 && autocvar_g_weaponswitch_debug != 1)
break;
}
}
.entity weaponentity = weaponentities[slot];
W_ThrowWeapon(this, weaponentity, W_CalculateProjectileVelocity(this, this.velocity, v_forward * 750, false), '0 0 0', true);
- if(slot == 0 && !autocvar_g_weaponswitch_debug)
+ if(slot == 0 && autocvar_g_weaponswitch_debug != 1)
break;
}
}
Weapon w = this.(weaponentity).m_weapon;
w.wr_reload(w, actor, weaponentity);
- if(slot == 0 && !autocvar_g_weaponswitch_debug)
+ if(slot == 0 && autocvar_g_weaponswitch_debug != 1)
break;
}
}
void ImpulseCommands(entity this)
{
- if (gameover) return;
+ if (game_stopped) return;
int imp = this.impulse;
if (!imp) return;
{
delete(this.personal);
this.personal = NULL;
+
+ if((g_cts || g_race) && autocvar_g_allow_checkpoints)
+ ClientKill(this);
}
sprint(this, "personal waypoint cleared\n");
}
{
delete(this.personal);
this.personal = NULL;
+ if((g_cts || g_race) && autocvar_g_allow_checkpoints)
+ ClientKill(this);
}
sprint(this, "all waypoints cleared\n");
}
IMPULSE(navwaypoint_spawn)
{
if (!autocvar_g_waypointeditor) return;
- waypoint_schedulerelink(waypoint_spawn(this.origin, this.origin, 0));
- bprint(strcat("Waypoint spawned at ", vtos(this.origin), "\n"));
+ vector org = this.origin;
+ bool sym = boolean(autocvar_g_waypointeditor_symmetrical);
+
+ LABEL(add_wp);
+ waypoint_schedulerelink(waypoint_spawn(org, org, 0));
+ bprint(strcat("Waypoint spawned at ", vtos(org), "\n"));
+ if(sym)
+ {
+ vector map_center = autocvar_g_waypointeditor_symmetrical_center;
+ org = this.origin;
+ org.x = map_center.x - (org.x - map_center.x);
+ org.y = map_center.y - (org.y - map_center.y);
+ if (vdist(org - this.origin, >, 10))
+ {
+ sym = false;
+ goto add_wp;
+ }
+ }
}
IMPULSE(navwaypoint_remove)
{
if (!autocvar_g_waypointeditor) return;
entity e = navigation_findnearestwaypoint(this, false);
+ bool sym = boolean(autocvar_g_waypointeditor_symmetrical);
+
+ LABEL(remove_wp);
if (!e) return;
if (e.wpflags & WAYPOINTFLAG_GENERATED) return;
+
+ if (e.wphardwired)
+ {
+ LOG_INFO("^1Warning: ^7Removal of hardwired waypoints is not allowed in the editor. Please remove links from/to this waypoint (", vtos(e.origin), ") by hand from maps/", mapname, ".waypoints.hardwired\n");
+ return;
+ }
+
+ entity wp_sym = NULL;
+ if (sym)
+ {
+ vector map_center = autocvar_g_waypointeditor_symmetrical_center;
+ vector org = this.origin;
+ org.x = map_center.x - (org.x - map_center.x);
+ org.y = map_center.y - (org.y - map_center.y);
+ FOREACH_ENTITY_CLASS("waypoint", !(it.wpflags & WAYPOINTFLAG_GENERATED), {
+ if(vdist(org - it.origin, <, 3))
+ {
+ wp_sym = it;
+ break;
+ }
+ });
+ }
bprint(strcat("Waypoint removed at ", vtos(e.origin), "\n"));
waypoint_remove(e);
+ if (sym && wp_sym)
+ {
+ e = wp_sym;
+ sym = false;
+ goto remove_wp;
+ }
}
IMPULSE(navwaypoint_relink)
IL_EACH(g_spawnpoints, true,
{
vector org = it.origin;
- tracebox(it.origin, STAT(PL_MIN, NULL), STAT(PL_MAX, NULL), it.origin - '0 0 512', MOVE_NOMONSTERS, NULL);
+ tracebox(it.origin, PL_MIN_CONST, PL_MAX_CONST, it.origin - '0 0 512', MOVE_NOMONSTERS, NULL);
setorigin(it, trace_endpos);
if (navigation_findnearestwaypoint(it, false))
{