# HG changeset patch # User Wuzzy # Date 1535710180 -7200 # Node ID 7edaeca8f8165101d3307c1a5a08b947ed8ed716 # Parent 7284233d91327a769ba7539dfb979f912ee76e5d BRW: Add utilities and air weapons properly diff -r 7284233d9132 -r 7edaeca8f816 share/hedgewars/Data/Scripts/Multiplayer/Balanced_Random_Weapon.lua --- a/share/hedgewars/Data/Scripts/Multiplayer/Balanced_Random_Weapon.lua Fri Aug 31 11:12:41 2018 +0200 +++ b/share/hedgewars/Data/Scripts/Multiplayer/Balanced_Random_Weapon.lua Fri Aug 31 12:09:40 2018 +0200 @@ -27,10 +27,11 @@ local weapons = {} local weapons_values = {} local weapons_count = 0 -local airweapons = {} -local airweapons_values = {} local utilities = {} local utilities_values = {} +local utilities_count = 0 + +local gotten_air_weapons = {} local isUtility, isAirWeapon @@ -54,15 +55,22 @@ If 0 points are left, the algorithm terminates. ]] + local picked_items = {} local n = 3 --"points" to be allocated on weapons --pick random weapon and subtract cost - local r = GetRandom(weapons_count) + 1 - local picked_items = {} - table.insert(picked_items, weapons[r]) - n = n - weapons_values[r] - + if weapons_count > 0 then + local r = GetRandom(weapons_count) + 1 + table.insert(picked_items, weapons[r]) + n = n - weapons_values[r] + elseif utilities_count > 0 then + local r = GetRandom(utilities_count) + 1 + table.insert(picked_items, utilities[r]) + n = n - utilities_values[r] + else + return picked_items + end --choose any weapons or utilities to use up remaining n @@ -193,14 +201,17 @@ function onGameStart() trackTeams() + -- Add air weapons if MapHasBorder() == false then for a = 0, AmmoTypeMax do - if a ~= amNothing and a ~= amSkip then - local ammoCount = GetAmmo(a) + if isAirWeapon[a] then + local gotten = gotten_air_weapons[a] + local ammoCount, prob, delay, ammoInCrate = gotten[1], gotten[2], gotten[3], gotten[4] local cost = getCost(a, ammoCount) - if cost > 0 and isAirWeapon[a] then - table.insert(airweapons, a) - table.insert(airweapons_values, cost) + if cost > 0 then + table.insert(weapons, a) + table.insert(weapons_values, cost) + weapons_count = weapons_count + 1 end end end @@ -213,12 +224,13 @@ for a=0, AmmoTypeMax do if a ~= amNothing and a ~= amSkip then local ammoCount, prob, delay, ammoInCrate = GetAmmo(a) - local cost = getCost(a, ammoCount) if (not isAirWeapon[a]) then + local cost = getCost(a, ammoCount) if cost > 0 then if isUtility[a] then table.insert(utilities, a) - table.insert(utilities, cost) + table.insert(utilities_values, cost) + utilities_count = utilities_count + 1 else table.insert(weapons, a) table.insert(weapons_values, cost) @@ -226,7 +238,8 @@ end end else - prob = 0 + -- air weapons are handled in onGameStart + gotten_air_weapons[a] = { ammoCount, prob, delay, ammoInCrate } end local realAmmoCount if ammoCount ~= 9 then