From: Lyberta Date: Tue, 29 Aug 2017 23:42:35 +0000 (+0300) Subject: Merged Lyberta/URS2 into Lyberta/RandomStartWeapons. X-Git-Tag: xonotic-v0.8.5~2459^2~11 X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=commitdiff_plain;h=3369a05c91e8508a103a5ecadc37fd6520f71bf9;hp=fae8571d1cea793685b5bec766a2030da4f64363 Merged Lyberta/URS2 into Lyberta/RandomStartWeapons. --- diff --git a/balance-mario.cfg b/balance-mario.cfg index a8f59a8cd7..28100182ea 100644 --- a/balance-mario.cfg +++ b/balance-mario.cfg @@ -9,6 +9,13 @@ set g_start_ammo_rockets 0 set g_start_ammo_cells 0 set g_start_ammo_plasma 0 set g_start_ammo_fuel 0 +set g_random_start_weapons_count 0 +set g_random_start_weapons "machinegun mortar electro crylink vortex hagar devastator" +set g_random_start_shells 15 +set g_random_start_bullets 80 +set g_random_start_rockets 40 +set g_random_start_cells 30 +set g_random_start_plasma 30 set g_warmup_start_health 100 "starting values when being in warmup-stage" set g_warmup_start_armor 100 "starting values when being in warmup-stage" set g_warmup_start_ammo_shells 30 "starting values when being in warmup-stage" diff --git a/balance-nexuiz25.cfg b/balance-nexuiz25.cfg index 4967fa7e47..37099c1226 100644 --- a/balance-nexuiz25.cfg +++ b/balance-nexuiz25.cfg @@ -9,6 +9,13 @@ set g_start_ammo_rockets 0 set g_start_ammo_cells 0 set g_start_ammo_plasma 0 set g_start_ammo_fuel 0 +set g_random_start_weapons_count 0 +set g_random_start_weapons "machinegun mortar electro crylink vortex hagar devastator" +set g_random_start_shells 15 +set g_random_start_bullets 80 +set g_random_start_rockets 15 +set g_random_start_cells 25 +set g_random_start_plasma 25 set g_warmup_start_health 250 "starting values when being in warmup-stage" set g_warmup_start_armor 100 "starting values when being in warmup-stage" set g_warmup_start_ammo_shells 50 "starting values when being in warmup-stage" diff --git a/balance-overkill.cfg b/balance-overkill.cfg index 3f025655c8..3a321ce53d 100644 --- a/balance-overkill.cfg +++ b/balance-overkill.cfg @@ -9,6 +9,13 @@ set g_start_ammo_rockets 0 set g_start_ammo_cells 0 set g_start_ammo_plasma 0 set g_start_ammo_fuel 0 +set g_random_start_weapons_count 0 +set g_random_start_weapons "machinegun mortar electro crylink vortex hagar devastator" +set g_random_start_shells 15 +set g_random_start_bullets 80 +set g_random_start_rockets 40 +set g_random_start_cells 30 +set g_random_start_plasma 30 set g_warmup_start_health 100 "starting values when being in warmup-stage" set g_warmup_start_armor 100 "starting values when being in warmup-stage" set g_warmup_start_ammo_shells 30 "starting values when being in warmup-stage" diff --git a/balance-samual.cfg b/balance-samual.cfg index 52fd03dc7e..48c68d81be 100644 --- a/balance-samual.cfg +++ b/balance-samual.cfg @@ -9,6 +9,13 @@ set g_start_ammo_rockets 0 set g_start_ammo_cells 0 set g_start_ammo_plasma 0 set g_start_ammo_fuel 0 +set g_random_start_weapons_count 0 +set g_random_start_weapons "machinegun mortar electro crylink vortex hagar devastator" +set g_random_start_shells 15 +set g_random_start_bullets 80 +set g_random_start_rockets 40 +set g_random_start_cells 30 +set g_random_start_plasma 30 set g_warmup_start_health 100 "starting values when being in warmup-stage" set g_warmup_start_armor 100 "starting values when being in warmup-stage" set g_warmup_start_ammo_shells 30 "starting values when being in warmup-stage" diff --git a/balance-xdf.cfg b/balance-xdf.cfg index 4d26972067..562506283c 100644 --- a/balance-xdf.cfg +++ b/balance-xdf.cfg @@ -9,6 +9,13 @@ set g_start_ammo_rockets 0 set g_start_ammo_cells 0 set g_start_ammo_plasma 0 set g_start_ammo_fuel 0 +set g_random_start_weapons_count 0 +set g_random_start_weapons "machinegun mortar electro crylink vortex hagar devastator" +set g_random_start_shells 15 +set g_random_start_bullets 80 +set g_random_start_rockets 40 +set g_random_start_cells 30 +set g_random_start_plasma 30 set g_warmup_start_health 100 "starting values when being in warmup-stage" set g_warmup_start_armor 100 "starting values when being in warmup-stage" set g_warmup_start_ammo_shells 30 "starting values when being in warmup-stage" diff --git a/balance-xonotic.cfg b/balance-xonotic.cfg index fece8cd726..32924a72d2 100644 --- a/balance-xonotic.cfg +++ b/balance-xonotic.cfg @@ -9,6 +9,13 @@ set g_start_ammo_rockets 0 set g_start_ammo_cells 0 set g_start_ammo_plasma 0 set g_start_ammo_fuel 0 +set g_random_start_weapons_count 0 +set g_random_start_weapons "machinegun mortar electro crylink vortex hagar devastator" +set g_random_start_shells 15 +set g_random_start_bullets 80 +set g_random_start_rockets 40 +set g_random_start_cells 30 +set g_random_start_plasma 30 set g_warmup_start_health 100 "starting values when being in warmup-stage" set g_warmup_start_armor 100 "starting values when being in warmup-stage" set g_warmup_start_ammo_shells 30 "starting values when being in warmup-stage" diff --git a/balance-xpm.cfg b/balance-xpm.cfg index 9849726232..6901eda28a 100644 --- a/balance-xpm.cfg +++ b/balance-xpm.cfg @@ -9,6 +9,13 @@ set g_start_ammo_rockets 0 set g_start_ammo_cells 0 set g_start_ammo_plasma 0 set g_start_ammo_fuel 0 +set g_random_start_weapons_count 0 +set g_random_start_weapons "machinegun mortar electro crylink vortex hagar devastator" +set g_random_start_shells 15 +set g_random_start_bullets 80 +set g_random_start_rockets 40 +set g_random_start_cells 30 +set g_random_start_plasma 30 set g_warmup_start_health 100 "starting values when being in warmup-stage" set g_warmup_start_armor 100 "starting values when being in warmup-stage" set g_warmup_start_ammo_shells 30 "starting values when being in warmup-stage" diff --git a/qcsrc/common/t_items.qc b/qcsrc/common/t_items.qc index 9ea5a6543b..ba168fd6f5 100644 --- a/qcsrc/common/t_items.qc +++ b/qcsrc/common/t_items.qc @@ -682,6 +682,86 @@ void Item_ScheduleInitialRespawn(entity e) Item_ScheduleRespawnIn(e, max(0, game_starttime - time) + ((e.respawntimestart) ? e.respawntimestart : ITEM_RESPAWNTIME_INITIAL(e))); } +void GiveRandomWeapons(entity receiver, int num_weapons, string weapon_names, + float shells, float bullets, float rockets, float cells, float plasma) +{ + if (num_weapons == 0) + { + return; + } + int num_potential_weapons = tokenize_console(weapon_names); + for (int i = 0; i < num_weapons; ++i) + { + RandomSelection_Init(); + for (int j = 0; j < num_potential_weapons; ++j) + { + string weapon = argv(j); + FOREACH(Weapons, it != WEP_Null, + { + // Finding a weapon which player doesn't have. + if (!(receiver.weapons & it.m_wepset) && (it.netname == weapon)) + { + RandomSelection_AddEnt(it, 1, 1); + break; + } + }); + } + if (RandomSelection_chosen_ent == NULL) + { + return; + } + receiver.weapons |= RandomSelection_chosen_ent.m_wepset; + switch (RandomSelection_chosen_ent.ammo_field) + { + case (ammo_shells): + { + if (GetResourceAmount(receiver, RESOURCE_SHELLS) != 0) + { + break; + } + GiveResource(receiver, RESOURCE_SHELLS, shells); + break; + } + case (ammo_nails): + { + if (GetResourceAmount(receiver, RESOURCE_BULLETS) != 0) + { + break; + } + GiveResource(receiver, RESOURCE_BULLETS, bullets); + break; + } + case (ammo_rockets): + { + if (GetResourceAmount(receiver, RESOURCE_ROCKETS) != 0) + { + break; + } + GiveResource(receiver, RESOURCE_ROCKETS, rockets); + break; + } + case (ammo_cells): + { + if (GetResourceAmount(receiver, RESOURCE_CELLS) != 0) + { + break; + } + GiveResource(receiver, RESOURCE_CELLS, cells); + break; + } + case (ammo_plasma): + { + if (GetResourceAmount(receiver, RESOURCE_PLASMA) != 0) + { + break; + } + GiveResource(receiver, RESOURCE_PLASMA, plasma); + break; + } + } + } +} + float Item_GiveAmmoTo(entity item, entity player, int resource_type, float ammomax) { float amount = GetResourceAmount(item, resource_type); diff --git a/qcsrc/common/t_items.qh b/qcsrc/common/t_items.qh index fa78ff4b33..75f982c996 100644 --- a/qcsrc/common/t_items.qh +++ b/qcsrc/common/t_items.qh @@ -84,6 +84,19 @@ void Item_ScheduleRespawn(entity e); void Item_ScheduleInitialRespawn(entity e); +/// \brief Give several random weapons and ammo to the entity. +/// \param[in,out] receiver Entity to give weapons to. +/// \param[in] num_weapons Number of weapons to give. +/// \param[in] weapon_names Names of weapons to give separated by spaces. +/// \param[in] shells Amount of shells to give with shell-based weapon. +/// \param[in] bullets Amount of bullets to give with bullet-based weapon. +/// \param[in] rockets Amount of rockets to give with rocket-based weapon. +/// \param[in] cells Amount of cells to give with cell-based weapon. +/// \param[in] plasma Amount of plasma to give with plasma-based weapon. +/// \return No return. +void GiveRandomWeapons(entity receiver, int num_weapons, string weapon_names, + float shells, float bullets, float rockets, float cells, float plasma); + float Item_GiveAmmoTo(entity item, entity player, int resource_type, float ammomax); float Item_GiveTo(entity item, entity player); diff --git a/qcsrc/server/client.qc b/qcsrc/server/client.qc index 22543766be..f1f67a7924 100644 --- a/qcsrc/server/client.qc +++ b/qcsrc/server/client.qc @@ -545,6 +545,10 @@ void PutPlayerInServer(entity this) this.health = start_health; this.armorvalue = start_armorvalue; this.weapons = start_weapons; + GiveRandomWeapons(this, random_start_weapons_count, + cvar_string("g_random_start_weapons"), random_start_shells, + random_start_bullets, random_start_rockets, random_start_cells, + random_start_plasma); } SetSpectatee_status(this, 0); diff --git a/qcsrc/server/miscfunctions.qc b/qcsrc/server/miscfunctions.qc index 7bb8e922d5..ac2ed71595 100644 --- a/qcsrc/server/miscfunctions.qc +++ b/qcsrc/server/miscfunctions.qc @@ -643,6 +643,12 @@ void readplayerstartcvars() start_ammo_cells = cvar("g_start_ammo_cells"); start_ammo_plasma = cvar("g_start_ammo_plasma"); start_ammo_fuel = cvar("g_start_ammo_fuel"); + random_start_weapons_count = cvar("g_random_start_weapons_count"); + random_start_shells = cvar("g_random_start_shells"); + random_start_bullets = cvar("g_random_start_bullets"); + random_start_rockets = cvar("g_random_start_rockets"); + random_start_cells = cvar("g_random_start_cells"); + random_start_plasma = cvar("g_random_start_plasma"); } if (warmup_stage) @@ -711,6 +717,11 @@ void readplayerstartcvars() start_ammo_cells = max(0, start_ammo_cells); start_ammo_plasma = max(0, start_ammo_plasma); start_ammo_fuel = max(0, start_ammo_fuel); + random_start_shells = max(0, random_start_shells); + random_start_bullets = max(0, random_start_bullets); + random_start_rockets = max(0, random_start_rockets); + random_start_cells = max(0, random_start_cells); + random_start_plasma = max(0, random_start_plasma); warmup_start_ammo_shells = max(0, warmup_start_ammo_shells); warmup_start_ammo_nails = max(0, warmup_start_ammo_nails); diff --git a/qcsrc/server/miscfunctions.qh b/qcsrc/server/miscfunctions.qh index 1c01a57379..8dc3faa18a 100644 --- a/qcsrc/server/miscfunctions.qh +++ b/qcsrc/server/miscfunctions.qh @@ -188,6 +188,18 @@ float start_ammo_rockets; float start_ammo_cells; float start_ammo_plasma; float start_ammo_fuel; +/// \brief Number of random start weapons to give to players. +int random_start_weapons_count; +/// \brief Amount of shells to give with a shell-based random start weapon. +float random_start_shells; +/// \brief Amount of bullets to give with a bullet-based random start weapon. +float random_start_bullets; +/// \brief Amount of rockets to give with a rocket-based random start weapon. +float random_start_rockets; +/// \brief Amount of cells to give with a cell-based random start weapon. +float random_start_cells; +/// \brief Amount of plasma to give with a plasma-based random start weapon. +float random_start_plasma; float start_health; float start_armorvalue; WepSet warmup_start_weapons;