From c0f97524ce7c6614821f49974fa0e99f2ddadbf9 Mon Sep 17 00:00:00 2001 From: Marco Hladik Date: Thu, 9 Jul 2020 10:42:34 +0200 Subject: [PATCH] Change 'impulse 240' for adding bots to 'sv bot_add', which is game-mode oriented and more flexible to mod authors. --- src/botlib/bot.h | 2 ++ src/server/cstrike/ammo.c | 12 +++++++----- src/server/cstrike/buy.c | 2 +- src/server/cstrike/gamerules.h | 1 + src/server/cstrike/gamerules_multiplayer.cpp | 20 ++++++++++++++++++++ src/server/cstrike/input.c | 10 ---------- src/server/cstrike/money.h | 4 ++-- src/server/cstrike/progs.src | 4 ++-- src/server/defs.h | 3 +-- src/server/entry.c | 8 ++++++-- src/server/gearbox/progs.src | 4 ++-- src/server/hunger/progs.src | 4 ++-- src/server/poke646/gamerules_multiplayer.cpp | 16 ++++++++++++++++ src/server/poke646/progs.src | 4 ++-- src/server/rewolf/gamerules_multiplayer.cpp | 16 ++++++++++++++++ src/server/rewolf/progs.src | 4 ++-- src/server/valve/gamerules.h | 1 + src/server/valve/gamerules_multiplayer.cpp | 16 ++++++++++++++++ src/server/valve/input.c | 3 --- src/server/valve/progs.src | 4 ++-- 20 files changed, 101 insertions(+), 37 deletions(-) diff --git a/src/botlib/bot.h b/src/botlib/bot.h index 3d0f8bd2..63c11f5e 100644 --- a/src/botlib/bot.h +++ b/src/botlib/bot.h @@ -26,3 +26,5 @@ class bot:player void(void) bot; virtual void(void) PickName; }; + +entity Bot_AddQuick(void); diff --git a/src/server/cstrike/ammo.c b/src/server/cstrike/ammo.c index 4bd1a915..8e5fb6dd 100644 --- a/src/server/cstrike/ammo.c +++ b/src/server/cstrike/ammo.c @@ -108,7 +108,7 @@ ammoinfo_t cs_ammoinfo[11] = { }; int -Ammo_BuyCaliber(player pl, int cal) +Ammo_BuyCaliber(player pl, int cal, int free) { int *ptr_ammo; int rv = 0; @@ -151,7 +151,10 @@ Ammo_BuyCaliber(player pl, int cal) break; *ptr_ammo += cs_ammoinfo[cal].a_size; - Money_AddMoney(pl, -cs_ammoinfo[cal].price); + + if (!free) + Money_AddMoney(pl, -cs_ammoinfo[cal].price); + rv = 1; } @@ -160,7 +163,6 @@ Ammo_BuyCaliber(player pl, int cal) /* We want to loop through all the possible weapons in case the server * enabled the ability to pick up more than one primary/secondary weapon */ - void CSEv_AmmoBuySecondary(void) { @@ -196,7 +198,7 @@ CSEv_AmmoBuySecondary(void) break; } - if (Ammo_BuyCaliber(pl, cal) == 1) { + if (Ammo_BuyCaliber(pl, cal, FALSE) == 1) { ps = 1; } } @@ -273,7 +275,7 @@ CSEv_AmmoBuyPrimary(void) break; } - if (Ammo_BuyCaliber(pl, cal) == 1) { + if (Ammo_BuyCaliber(pl, cal, FALSE) == 1) { ps = 1; } } diff --git a/src/server/cstrike/buy.c b/src/server/cstrike/buy.c index a74169c7..d09a8264 100644 --- a/src/server/cstrike/buy.c +++ b/src/server/cstrike/buy.c @@ -93,7 +93,7 @@ CSEv_BuyWeapon_f(float fWeapon) } } } - + Weapons_AddItem(pl, iWeapon, -1); Money_AddMoney(pl, -g_cstrikeWeaponPrice[iWeapon]); Sound_Play(pl, CHAN_ITEM, "buy.weapon"); diff --git a/src/server/cstrike/gamerules.h b/src/server/cstrike/gamerules.h index 4f02f4fd..2b16d211 100644 --- a/src/server/cstrike/gamerules.h +++ b/src/server/cstrike/gamerules.h @@ -53,6 +53,7 @@ class CSMultiplayerRules:CSGameRules virtual void(base_player) PlayerPreFrame; virtual void(base_player) PlayerDeath; virtual int(int) MaxItemPerSlot; + virtual float(base_player, string) ConsoleCommand; /* CS specific */ virtual void(void) CreateRescueZones; diff --git a/src/server/cstrike/gamerules_multiplayer.cpp b/src/server/cstrike/gamerules_multiplayer.cpp index afcd89cc..d001b448 100644 --- a/src/server/cstrike/gamerules_multiplayer.cpp +++ b/src/server/cstrike/gamerules_multiplayer.cpp @@ -892,6 +892,26 @@ CSMultiplayerRules::PlayerSpawn(base_player pl) forceinfokey(pl, "*team", "0"); } +float +CSMultiplayerRules::ConsoleCommand(base_player pp, string cmd) +{ + tokenize(cmd); + + switch (argv(0)) { + case "bot_add": + entity bot_ent = Bot_AddQuick(); + if (bot_ent) { + bot_ent.think = CSEv_JoinAuto; + bot_ent.nextthink = time; + } + break; + default: + return FALSE; + } + + return TRUE; +} + void CSMultiplayerRules::CSMultiplayerRules(void) { diff --git a/src/server/cstrike/input.c b/src/server/cstrike/input.c index 8c69cbb8..3cff262f 100644 --- a/src/server/cstrike/input.c +++ b/src/server/cstrike/input.c @@ -43,16 +43,6 @@ Game_Input(void) if (self.impulse == 100) { Flashlight_Toggle(); } - - if (self.impulse == 240) { - entity bot = Bot_AddQuick(); - if (bot) { - entity oself = self; - self = bot; - CSEv_JoinAuto(); - self = oself; - } - } if (cvar("sv_cheats") == 1) { player pl = (player)self; diff --git a/src/server/cstrike/money.h b/src/server/cstrike/money.h index 4997c58f..c81bdb91 100644 --- a/src/server/cstrike/money.h +++ b/src/server/cstrike/money.h @@ -21,7 +21,7 @@ void Money_AddMoney(base_player, int); void Money_QueTeamReward(int, int); void Money_GiveTeamReward(base_player); void Money_ResetTeamReward(void); -int Money_GetLosses(int); -int Money_HasBonus(int); void Money_HandleRoundReward(int) void Money_ResetRoundReward(void); +int Money_GetLosses(int); +int Money_HasBonus(int); diff --git a/src/server/cstrike/progs.src b/src/server/cstrike/progs.src index b59c9978..a3f60cc0 100755 --- a/src/server/cstrike/progs.src +++ b/src/server/cstrike/progs.src @@ -37,6 +37,8 @@ ../cstrike/item_c4bomb.cpp ../valve/items.cpp +../../botlib/include.src + ../cstrike/game_money.c ../cstrike/gamerules.cpp ../cstrike/gamerules_singleplayer.cpp @@ -50,8 +52,6 @@ ../valve/damage.c ../valve/rules.c -../../botlib/include.src - ../cstrike/input.c ../cstrike/spawn.c diff --git a/src/server/defs.h b/src/server/defs.h index b2fa731b..c3b85bd5 100644 --- a/src/server/defs.h +++ b/src/server/defs.h @@ -56,6 +56,7 @@ entity g_eAttacker; .float material; .float deaths; .float fStepTime; +.float gflags; /* in idTech the .owner field causes collisions to fail against set entity, * we don't want this all of the time. so use this as a fallback */ @@ -66,8 +67,6 @@ string startspot; string __fullspawndata; hashtable hashMaterials; -.float gflags; - enumflags { GF_CANRESPAWN, diff --git a/src/server/entry.c b/src/server/entry.c index 25630878..64af359c 100644 --- a/src/server/entry.c +++ b/src/server/entry.c @@ -133,10 +133,11 @@ void initents(void) { iprint("Initializing Entities"); + /* sound shader init */ Sound_Init(); if (serverkeyfloat("*bspversion") != 30) { - // Let's load materials.txt because someone thought this was the best idea + /* load materials.txt because someone thought this was the best idea */ filestream fileMaterial = fopen("sound/materials.txt", FILE_READ); hashMaterials = __NULL__; hashMaterials = hash_createtab(2, HASH_ADD); @@ -144,7 +145,7 @@ void initents(void) if (fileMaterial >= 0) { string sTemp; while ((sTemp = fgets(fileMaterial))) { - // Tokenize and just parse this stuff in + /* tokenize and just parse this stuff in */ if (tokenize_console(sTemp) == 2) { hash_add(hashMaterials, strtolower(argv(1)), str2chr(argv(0), 0)); } @@ -157,6 +158,7 @@ void initents(void) PMove_Init(); + /* TODO: turn these effects into sound shaders */ precache_sound("weapons/explode3.wav"); precache_sound("weapons/explode4.wav"); precache_sound("weapons/explode5.wav"); @@ -228,6 +230,8 @@ void initents(void) Decals_Init(); Sentences_Init(); + /* TODO: Make sure every entity calls Respawn inside the constructor, then + * remove this */ entity respawntimer = spawn(); respawntimer.think = init_respawn; respawntimer.nextthink = time + 0.1f; diff --git a/src/server/gearbox/progs.src b/src/server/gearbox/progs.src index 3c4f885e..5c01ed77 100755 --- a/src/server/gearbox/progs.src +++ b/src/server/gearbox/progs.src @@ -73,6 +73,8 @@ ../valve/ammo.cpp ../gearbox/ammo_op4.cpp +../../botlib/include.src + ../gearbox/gamerules.cpp ../valve/gamerules_singleplayer.cpp ../valve/gamerules_multiplayer.cpp @@ -82,8 +84,6 @@ ../valve/damage.c ../valve/rules.c -../../botlib/include.src - ../valve/input.c ../valve/spawn.c diff --git a/src/server/hunger/progs.src b/src/server/hunger/progs.src index 3b4a78ee..ceab8663 100755 --- a/src/server/hunger/progs.src +++ b/src/server/hunger/progs.src @@ -71,6 +71,8 @@ ../valve/ammo.cpp ../hunger/ammo_th.cpp +../../botlib/include.src + ../valve/gamerules.cpp ../valve/gamerules_singleplayer.cpp ../valve/gamerules_multiplayer.cpp @@ -79,8 +81,6 @@ ../valve/damage.c ../valve/rules.c -../../botlib/include.src - ../hunger/input.c ../valve/spawn.c diff --git a/src/server/poke646/gamerules_multiplayer.cpp b/src/server/poke646/gamerules_multiplayer.cpp index 24144f78..b711b105 100644 --- a/src/server/poke646/gamerules_multiplayer.cpp +++ b/src/server/poke646/gamerules_multiplayer.cpp @@ -103,3 +103,19 @@ HLMultiplayerRules::PlayerSpawn(base_player pp) Client_FixAngle(pl, pl.angles); } + +float +HLMultiplayerRules::ConsoleCommand(base_player pp, string cmd) +{ + tokenize(cmd); + + switch (argv(0)) { + case "bot_add": + Bot_AddQuick(); + break; + default: + return FALSE; + } + + return TRUE; +} diff --git a/src/server/poke646/progs.src b/src/server/poke646/progs.src index 9cc6ae1f..e77a88e0 100755 --- a/src/server/poke646/progs.src +++ b/src/server/poke646/progs.src @@ -69,6 +69,8 @@ ../valve/xen_plantlight.cpp ../poke646/ammo_p646.cpp +../../botlib/include.src + ../poke646/gamerules.cpp ../valve/gamerules_singleplayer.cpp ../poke646/gamerules_multiplayer.cpp @@ -77,8 +79,6 @@ ../valve/damage.c ../valve/rules.c -../../botlib/include.src - ../poke646/input.c ../valve/spawn.c diff --git a/src/server/rewolf/gamerules_multiplayer.cpp b/src/server/rewolf/gamerules_multiplayer.cpp index d549bca7..5919b9f6 100644 --- a/src/server/rewolf/gamerules_multiplayer.cpp +++ b/src/server/rewolf/gamerules_multiplayer.cpp @@ -109,3 +109,19 @@ HLMultiplayerRules::PlayerSpawn(base_player pp) Client_FixAngle(pl, pl.angles); } + +float +HLMultiplayerRules::ConsoleCommand(base_player pp, string cmd) +{ + tokenize(cmd); + + switch (argv(0)) { + case "bot_add": + Bot_AddQuick(); + break; + default: + return FALSE; + } + + return TRUE; +} diff --git a/src/server/rewolf/progs.src b/src/server/rewolf/progs.src index 1335b220..b468870d 100755 --- a/src/server/rewolf/progs.src +++ b/src/server/rewolf/progs.src @@ -24,6 +24,8 @@ ../valve/items.cpp +../../botlib/include.src + ../rewolf/gamerules.cpp ../valve/gamerules_singleplayer.cpp ../rewolf/gamerules_multiplayer.cpp @@ -33,8 +35,6 @@ ../valve/damage.c ../valve/rules.c -../../botlib/include.src - ../rewolf/input.c ../valve/spawn.c diff --git a/src/server/valve/gamerules.h b/src/server/valve/gamerules.h index b45d6976..c47cd570 100644 --- a/src/server/valve/gamerules.h +++ b/src/server/valve/gamerules.h @@ -43,4 +43,5 @@ class HLMultiplayerRules:HLGameRules /* client */ virtual void(base_player) PlayerSpawn; virtual void(base_player) PlayerDeath; + virtual float(base_player, string) ConsoleCommand; }; diff --git a/src/server/valve/gamerules_multiplayer.cpp b/src/server/valve/gamerules_multiplayer.cpp index 81b67510..8bcb9650 100644 --- a/src/server/valve/gamerules_multiplayer.cpp +++ b/src/server/valve/gamerules_multiplayer.cpp @@ -141,3 +141,19 @@ HLMultiplayerRules::PlayerSpawn(base_player pp) Client_FixAngle(pl, pl.angles); } + +float +HLMultiplayerRules::ConsoleCommand(base_player pp, string cmd) +{ + tokenize(cmd); + + switch (argv(0)) { + case "bot_add": + Bot_AddQuick(); + break; + default: + return FALSE; + } + + return TRUE; +} diff --git a/src/server/valve/input.c b/src/server/valve/input.c index 05f368ed..2fdfe9b8 100644 --- a/src/server/valve/input.c +++ b/src/server/valve/input.c @@ -49,9 +49,6 @@ void Game_Input(void) if (self.impulse == 100) { Flashlight_Toggle(); } - - if (self.impulse == 240) - Bot_AddQuick(); if (cvar("sv_cheats") == 1) { player pl = (player)self; diff --git a/src/server/valve/progs.src b/src/server/valve/progs.src index 812ca267..c1515e11 100755 --- a/src/server/valve/progs.src +++ b/src/server/valve/progs.src @@ -69,6 +69,8 @@ ../valve/xen_plantlight.cpp ../valve/ammo.cpp +../../botlib/include.src + ../valve/gamerules.cpp ../valve/gamerules_singleplayer.cpp ../valve/gamerules_multiplayer.cpp @@ -77,8 +79,6 @@ ../valve/damage.c ../valve/rules.c -../../botlib/include.src - ../valve/input.c ../valve/spawn.c