- wget -nv -O data/maps/stormkeep.waypoints https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints
- wget -nv -O data/maps/stormkeep.waypoints.cache https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints.cache
- - EXPECT=b4bfc34b5a52ba950de9814c2c52c1c3
+ - EXPECT=f69ef2a13dbe594a0284660e60bdc903
- HASH=$(${ENGINE} +exec serverbench.cfg
| tee /dev/stderr
| grep '^:'
set g_balance_mortar_primary_edgedamage 25
set g_balance_mortar_primary_force 250
set g_balance_mortar_primary_health 15
-set g_balance_mortar_primary_lifetime 5
+set g_balance_mortar_primary_lifetime 20
set g_balance_mortar_primary_lifetime_stick 0
set g_balance_mortar_primary_radius 120
set g_balance_mortar_primary_refire 0.8
set g_balance_mortar_secondary_edgedamage 30
set g_balance_mortar_secondary_force 250
set g_balance_mortar_secondary_health 30
-set g_balance_mortar_secondary_lifetime 5
+set g_balance_mortar_secondary_lifetime 20
set g_balance_mortar_secondary_lifetime_bounce 0.5
set g_balance_mortar_secondary_lifetime_stick 0
set g_balance_mortar_secondary_radius 120
set g_balance_vortex_primary_damagefalloff_halflife 0
set g_balance_vortex_primary_damagefalloff_maxdist 0
set g_balance_vortex_primary_damagefalloff_mindist 0
-set g_balance_vortex_primary_force 400
+set g_balance_vortex_primary_force 200
set g_balance_vortex_primary_refire 1.5
set g_balance_vortex_reload_ammo 0
set g_balance_vortex_reload_time 2
set g_balance_rifle_secondary_bullethail 0
set g_balance_rifle_secondary_burstcost 0
set g_balance_rifle_secondary_damage 20
-set g_balance_rifle_secondary_headshot_multiplier 0
set g_balance_rifle_secondary_force 50
+set g_balance_rifle_secondary_headshot_multiplier 0
set g_balance_rifle_secondary_refire 0.9
set g_balance_rifle_secondary_reload 0
set g_balance_rifle_secondary_shots 4
// ===================================
-// banning - server/command/ipban.qc
+// banning - server/ipban.qc
// ===================================
alias ban "qc_cmd_sv ban ${* ?}" // Ban an IP address or a range of addresses (like 1.2.3)
alias banlist "qc_cmd_sv banlist ${* ?}" // List all existing bans
alias unban "qc_cmd_sv unban ${* ?}" // Remove an existing ban
alias unmute "qc_cmd_sv unmute ${* ?}" // Unmute a client (Remove an existing muting ban)
-// other aliases for ban commands
-alias bans "banlist"
+// alternative aliases for ban commands
+alias bans "qc_cmd_sv banlist ${* ?}"
+alias muteban "qc_cmd_sv mute ${* ?}"
+alias unmuteban "qc_cmd_sv unmute ${* ?}"
+
// Client
s = strcat(blinkcolor, _("Teamnumbers are unbalanced!"));
tm = GetTeam(myteam, false);
if (tm && tm.team != NUM_SPECTATOR && tm.team_size == ts_max)
- s = strcat(s, sprintf(_(" Press ^3%s%s to adjust"), getcommandkey(_("team selection"), "scoreboard_team_selection"), blinkcolor));
+ s = strcat(s, sprintf(_(" Press ^3%s%s to adjust"), getcommandkey(_("team selection"), "team_selection_show"), blinkcolor));
InfoMessage(s);
}
}
// e.g. -teams,rc,cts,lms/kills ?+rc/kills
#define SCOREBOARD_DEFAULT_COLUMNS \
"ping pl fps name |" \
-" -teams,rc,cts,inv,lms/kills +ft,tdm/kills ?+rc,inv/kills" \
-" -teams,lms/deaths +ft,tdm/deaths" \
+" -teams,rc,cts,inv,lms/kills +ft,tdm,tmayhem/kills ?+rc,inv/kills" \
+" -teams,lms/deaths +ft,tdm,tmayhem/deaths" \
" +tdm/sum" \
-" -teams,lms,rc,cts,inv,ka/suicides +ft,tdm/suicides ?+rc,inv/suicides" \
-" -cts,dm,tdm,ka,ft/frags" /* tdm already has this in "score" */ \
-" +tdm,ft,dom,ons,as/teamkills"\
+" -teams,lms,rc,cts,inv,ka/suicides +ft,tdm,tmayhem/suicides ?+rc,inv/suicides" \
+" -cts,dm,tdm,ka,ft,mayhem,tmayhem/frags" /* tdm already has this in "score" */ \
+" +tdm,ft,dom,ons,as,tmayhem/teamkills"\
" -rc,cts,nb/dmg -rc,cts,nb/dmgtaken" \
" +ctf/pickups +ctf/fckills +ctf/returns +ctf/caps +ons/takes +ons/caps" \
" +lms/lives +lms/rank" \
" +kh/kckills +kh/losses +kh/caps" \
" ?+rc/laps ?+rc/time +rc,cts/fastest" \
" +as/objectives +nb/faults +nb/goals" \
-" +ka/pickups +ka/bckills +ka/bctime +ft/revivals" \
+" +ka,tka/pickups +ka,tka/bckills +ka,tka/bctime +ft/revivals" \
" +dom/ticks +dom/takes" \
" -lms,rc,cts,inv,nb/score"
void func_ladder_init(entity this)
{
+ string m = this.model;
EXACTTRIGGER_INIT;
+ // restore the model string unset in WarpZoneLib_ExactTrigger_Init()
+ // see: https://gitlab.com/xonotic/xonotic-data.pk3dir/-/issues/2838
+ this.model = m;
BITSET_ASSIGN(this.effects, EF_NODEPTHTEST);
func_ladder_link(this);
setthink(this, func_ladder_think);
KEYBIND_HEADER(_("Teamplay"));
KEYBIND_DEF("team_auto" , _("auto-join team"));
- KEYBIND_DEF("scoreboard_team_selection" , _("team selection"));
+ KEYBIND_DEF("team_selection_show" , _("team selection"));
KEYBIND_DEF("spec" , _("spectate"));
KEYBIND_EMPTY_LINE();
// Check for water/slime/lava and dangerous edges
// (only when the bot is on the ground or jumping intentionally)
-// returns true for danger
-bool havocbot_checkdanger(entity this, vector dst_ahead)
+// returns a number > 0 for danger
+int havocbot_checkdanger(entity this, vector dst_ahead)
{
vector dst_down = dst_ahead - '0 0 3000';
traceline(this.origin + this.view_ofs, dst_ahead, true, NULL);
if (trace_endpos.z < this.origin.z + this.mins.z)
{
if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_SKY)
- return true;
+ return 1;
else if (trace_endpos.z < min(this.origin.z + this.mins.z, this.goalcurrent.origin.z) - 100)
- return true;
+ return 1;
else
{
s = pointcontents(trace_endpos + '0 0 1');
if (s != CONTENT_SOLID)
{
if (s == CONTENT_LAVA || s == CONTENT_SLIME)
- return true;
+ return 1;
else if (tracebox_hits_trigger_hurt(dst_ahead, this.mins, this.maxs, trace_endpos))
{
// the traceline check isn't enough but is good as optimization,
tracebox(dst_ahead, this.mins, this.maxs, dst_down, true, this);
if (tracebox_hits_trigger_hurt(dst_ahead, this.mins, this.maxs, trace_endpos))
{
- return true;
+ return 2;
}
}
}
offset = (vdist(this.velocity, >, 32) ? this.velocity * 0.2 : flatdir * 32);
vector dst_ahead = this.origin + this.view_ofs + offset;
bool unreachable = false;
- if (havocbot_checkdanger(this, dst_ahead))
+ int r = havocbot_checkdanger(this, dst_ahead);
+ if (r == 1)
+ danger_detected = true;
+ else if (r == 2)
{
if (destorg.z > this.origin.z + jumpstepheightvec.z)
{
// Do not hard code aliases for these, instead create them in commands.cfg... also: keep in alphabetical order, please ;)
#define BAN_COMMANDS(request, arguments, command) \
- BAN_COMMAND("ban", BanCommand_ban(request, arguments, command), "Ban an IP address or a range of addresses (like 1.2.3)") \
- BAN_COMMAND("banlist", BanCommand_banlist(request), "List all existing bans") \
- BAN_COMMAND("kickban", BanCommand_kickban(request, arguments, command), "Disconnect a client and ban it at the same time") \
- BAN_COMMAND("mute", BanCommand_mute(request, arguments, command), "Disallow a client from talking by muting them") \
- BAN_COMMAND("playban", BanCommand_playban(request, arguments, command), "Force to spectate a client permanently") \
- BAN_COMMAND("unban", BanCommand_unban(request, arguments), "Remove an existing ban") \
- BAN_COMMAND("unmute", BanCommand_unmute(request, arguments), "Unmute a client") \
- BAN_COMMAND("unvoteban", BanCommand_unvoteban(request, arguments), "Remove an existing voting ban") \
- BAN_COMMAND("unplayban", BanCommand_unplayban(request, arguments), "Remove an existing forced to spectate ban") \
- BAN_COMMAND("voteban", BanCommand_voteban(request, arguments, command), "Disallow a client from voting") \
+ BAN_COMMAND("ban", BanCommand_ban(request, arguments, command), "Ban an IP address or a range of addresses (like 1.2.3)") \
+ BAN_COMMAND("banlist", BanCommand_banlist(request), "List all existing bans") \
+ BAN_COMMAND("kickban", BanCommand_kickban(request, arguments, command), "Disconnect a client and ban it at the same time") \
+ BAN_COMMAND("mute", BanCommand_mute(request, arguments, command), "Disallow a client from talking by muting them") \
+ BAN_COMMAND("playban", BanCommand_playban(request, arguments, command), "Force to spectate a client permanently") \
+ BAN_COMMAND("unban", BanCommand_unban(request, arguments), "Remove an existing ban") \
+ BAN_COMMAND("unmute", BanCommand_unmute(request, arguments), "Unmute a client") \
+ BAN_COMMAND("unvoteban", BanCommand_unvoteban(request, arguments), "Remove an existing voting ban") \
+ BAN_COMMAND("unplayban", BanCommand_unplayban(request, arguments), "Remove an existing forced to spectate ban") \
+ BAN_COMMAND("voteban", BanCommand_voteban(request, arguments, command), "Disallow a client from voting") \
/* nothing */
void BanCommand_macro_help()
else if (teamplay && !autocvar_sv_spectate && !(Player_GetForcedTeamIndex(caller) > 0))
{
TRANSMUTE(Observer, caller); // really?
- stuffcmd(caller, "scoreboard_team_selection\n");
+ stuffcmd(caller, "team_selection_show\n");
}
}