From 1b84cc030fc9734b0fb20ed665afd0c503631f08 Mon Sep 17 00:00:00 2001 From: div0 Date: Thu, 11 Jun 2009 17:02:24 +0000 Subject: [PATCH] - fix aimtotarget in bot scripting - seeker lifetime is now a cvar - complain if a trigger_items requests an invalid item - bot scripting: support hook and chat buttons git-svn-id: svn://svn.icculus.org/nexuiz/trunk@6983 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/bots_scripting.qc | 25 +++++++++++++++++++++- data/qcsrc/server/constants.qh | 2 +- data/qcsrc/server/g_triggers.qc | 9 ++++---- data/qcsrc/server/t_items.qc | 32 +++++++++++++++++------------ data/qcsrc/server/w_seeker.qc | 2 +- data/weapons.cfg | 3 ++- data/weaponsHavoc.cfg | 3 ++- 7 files changed, 54 insertions(+), 22 deletions(-) diff --git a/data/qcsrc/server/bots_scripting.qc b/data/qcsrc/server/bots_scripting.qc index 394250430..6e46a147a 100755 --- a/data/qcsrc/server/bots_scripting.qc +++ b/data/qcsrc/server/bots_scripting.qc @@ -268,7 +268,7 @@ void bot_queuecommand(entity bot, string cmdstring, string parm) } return; } - print("ERROR: No such command\n"); + print("ERROR: No such command '", cmdstring, "'\n"); } void bot_cmdhelp(string scmd) @@ -489,6 +489,8 @@ float bot_cmd_select_weapon() if(client_hasweapon(self, id, TRUE, FALSE)) self.switchweapon = id; + else + return CMD_STATUS_ERROR; return CMD_STATUS_FINISHED; } @@ -701,6 +703,7 @@ float bot_cmd_aimtarget() if(tokens==1) { self.v_angle = vectoangles(v - (self.origin + self.view_ofs)); + self.v_angle_x = -self.v_angle_x; return CMD_STATUS_FINISHED; } @@ -711,6 +714,7 @@ float bot_cmd_aimtarget() self.bot_cmd_aim_begin = self.v_angle; self.bot_cmd_aim_end = vectoangles(v - (self.origin + self.view_ofs)); + self.bot_cmd_aim_end_x = -self.bot_cmd_aim_end_x; self.bot_cmd_aim_begintime = time; self.bot_cmd_aim_endtime = time + step; @@ -731,6 +735,7 @@ float bot_cmd_aimtarget() #define BOT_CMD_KEY_USE 128 #define BOT_CMD_KEY_HOOK 256 #define BOT_CMD_KEY_CROUCH 512 +#define BOT_CMD_KEY_CHAT 1024 float bot_presskeys() { @@ -764,6 +769,12 @@ float bot_presskeys() if(self.bot_cmd_keys & BOT_CMD_KEY_USE) self.BUTTON_USE = TRUE; + if(self.bot_cmd_keys & BOT_CMD_KEY_HOOK) + self.BUTTON_HOOK = TRUE; + + if(self.bot_cmd_keys & BOT_CMD_KEY_CHAT) + self.BUTTON_CHAT = TRUE; + return TRUE; } @@ -843,6 +854,18 @@ float bot_cmd_keypress_handler(string key, float enabled) else self.bot_cmd_keys &~= BOT_CMD_KEY_USE; break; + case "hook": + if(enabled) + self.bot_cmd_keys |= BOT_CMD_KEY_HOOK; + else + self.bot_cmd_keys &~= BOT_CMD_KEY_HOOK; + break; + case "chat": + if(enabled) + self.bot_cmd_keys |= BOT_CMD_KEY_CHAT; + else + self.bot_cmd_keys &~= BOT_CMD_KEY_CHAT; + break; default: break; } diff --git a/data/qcsrc/server/constants.qh b/data/qcsrc/server/constants.qh index 8c88d3496..da1c46480 100644 --- a/data/qcsrc/server/constants.qh +++ b/data/qcsrc/server/constants.qh @@ -1,5 +1,5 @@ string CVAR_CHECK_DEFAULT = "265422ea51f974b6529d2414fb9e9d75"; -string CVAR_CHECK_WEAPONS = "e85f111d2e89ae3a36fb432de7d2266a"; +string CVAR_CHECK_WEAPONS = "b0200324f7019e035dc04342c43d9628"; float FALSE = 0; float TRUE = 1; diff --git a/data/qcsrc/server/g_triggers.qc b/data/qcsrc/server/g_triggers.qc index c6498feb7..3377bbebf 100644 --- a/data/qcsrc/server/g_triggers.qc +++ b/data/qcsrc/server/g_triggers.qc @@ -162,8 +162,11 @@ void multi_trigger() if (self.wait > 0) { - self.think = multi_wait; - self.nextthink = time + self.wait; + if(self.wait > 0.01) + { + self.think = multi_wait; + self.nextthink = time + self.wait; + } } else { // we can't just remove (self) here, because this is a touch function @@ -265,8 +268,6 @@ void spawnfunc_trigger_multiple() self.noise = "misc/trigger1.wav"; } - if (!self.wait) - self.wait = 0.2; self.use = multi_use; EXACTTRIGGER_INIT; diff --git a/data/qcsrc/server/t_items.qc b/data/qcsrc/server/t_items.qc index 497f58951..4b7992516 100644 --- a/data/qcsrc/server/t_items.qc +++ b/data/qcsrc/server/t_items.qc @@ -1384,22 +1384,28 @@ void spawnfunc_target_items (void) n = tokenize_console(self.netname); for(i = 0; i < n; ++i) { - if(argv(i) == "unlimited_ammo") self.items |= IT_UNLIMITED_AMMO; - if(argv(i) == "unlimited_weapon_ammo") self.items |= IT_UNLIMITED_WEAPON_AMMO; - if(argv(i) == "unlimited_superweapons") self.items |= IT_UNLIMITED_SUPERWEAPONS; - if(argv(i) == "strength") self.items |= IT_STRENGTH; - if(argv(i) == "invincible") self.items |= IT_INVINCIBLE; - if(argv(i) == "jetpack") self.items |= IT_JETPACK; - if(argv(i) == "fuel_regen") self.items |= IT_FUEL_REGEN; - for(j = WEP_FIRST; j <= WEP_LAST; ++j) + if (argv(i) == "unlimited_ammo") self.items |= IT_UNLIMITED_AMMO; + else if(argv(i) == "unlimited_weapon_ammo") self.items |= IT_UNLIMITED_WEAPON_AMMO; + else if(argv(i) == "unlimited_superweapons") self.items |= IT_UNLIMITED_SUPERWEAPONS; + else if(argv(i) == "strength") self.items |= IT_STRENGTH; + else if(argv(i) == "invincible") self.items |= IT_INVINCIBLE; + else if(argv(i) == "jetpack") self.items |= IT_JETPACK; + else if(argv(i) == "fuel_regen") self.items |= IT_FUEL_REGEN; + else { - e = get_weaponinfo(j); - if(argv(i) == e.netname) + for(j = WEP_FIRST; j <= WEP_LAST; ++j) { - self.weapons |= e.weapons; - if(self.spawnflags == 0 || self.spawnflags == 2) - weapon_action(e.weapon, WR_PRECACHE); + e = get_weaponinfo(j); + if(argv(i) == e.netname) + { + self.weapons |= e.weapons; + if(self.spawnflags == 0 || self.spawnflags == 2) + weapon_action(e.weapon, WR_PRECACHE); + break; + } } + if(j > WEP_LAST) + print("target_items: invalid item ", argv(i), "\n"); } } } diff --git a/data/qcsrc/server/w_seeker.qc b/data/qcsrc/server/w_seeker.qc index 8ce33634c..1e505f5ab 100644 --- a/data/qcsrc/server/w_seeker.qc +++ b/data/qcsrc/server/w_seeker.qc @@ -326,7 +326,7 @@ void Seeker_Fire_Tag() missile.bot_dodgerating = 50; missile.touch = Seeker_Tag_Touch; missile.think = Seeker_Tag_Think; - missile.nextthink = time + 15; + missile.nextthink = time + cvar("g_balance_seeker_tag_lifetime"); missile.movetype = MOVETYPE_FLY; missile.solid = SOLID_BBOX; missile.owner = self; diff --git a/data/weapons.cfg b/data/weapons.cfg index c344080fd..0a7469aa5 100644 --- a/data/weapons.cfg +++ b/data/weapons.cfg @@ -3,7 +3,7 @@ // // And... don't forget to edit weaponsHavoc.cfg too. -set cvar_check_weapons e85f111d2e89ae3a36fb432de7d2266a +set cvar_check_weapons b0200324f7019e035dc04342c43d9628 // NOTE: this only replaces weapons on the map // use g_start_weapon_* to also replace the on-startup weapons! @@ -345,6 +345,7 @@ set g_balance_seeker_tag_animtime 0.3 set g_balance_seeker_tag_refire 0.7 set g_balance_seeker_tag_health 5 set g_balance_seeker_tag_damageforcescale 4 +set g_balance_seeker_tag_lifetime 15 set g_balance_seeker_missile_delay 0.25 //set g_balance_seeker_missile_activate_delay 0.1 diff --git a/data/weaponsHavoc.cfg b/data/weaponsHavoc.cfg index e0e74e403..85ea8a1c3 100644 --- a/data/weaponsHavoc.cfg +++ b/data/weaponsHavoc.cfg @@ -1,4 +1,4 @@ -set cvar_check_weapons e85f111d2e89ae3a36fb432de7d2266a +set cvar_check_weapons b0200324f7019e035dc04342c43d9628 // NOTE: this only replaces weapons on the map // use g_start_weapon_* to also replace the on-startup weapons! @@ -340,6 +340,7 @@ set g_balance_seeker_tag_animtime 0.3 set g_balance_seeker_tag_refire 0.7 set g_balance_seeker_tag_health 5 set g_balance_seeker_tag_damageforcescale 4 +set g_balance_seeker_tag_lifetime 15 set g_balance_seeker_missile_delay 0.25 //set g_balance_seeker_missile_activate_delay 0.1 -- 2.39.2