share/hedgewars/Data/Scripts/Multiplayer/Balanced_Random_Weapon.lua
changeset 13717 ed22eb551a75
parent 13716 6d57f5f61c09
child 13718 7284233d9132
equal deleted inserted replaced
13716:6d57f5f61c09 13717:ed22eb551a75
    24 HedgewarsScriptLoad("/Scripts/Locale.lua")
    24 HedgewarsScriptLoad("/Scripts/Locale.lua")
    25 HedgewarsScriptLoad("/Scripts/Tracker.lua")
    25 HedgewarsScriptLoad("/Scripts/Tracker.lua")
    26 
    26 
    27 local weapons = {}
    27 local weapons = {}
    28 local weapons_values = {}
    28 local weapons_values = {}
       
    29 local weapons_count = 0
    29 local airweapons = {}
    30 local airweapons = {}
    30 local airweapons_values = {}
    31 local airweapons_values = {}
    31 local utilities = {}
    32 local utilities = {}
    32 local utilities_values = {}
    33 local utilities_values = {}
    33 
    34 
    55 ]]
    56 ]]
    56 
    57 
    57     local n = 3   --"points" to be allocated on weapons
    58     local n = 3   --"points" to be allocated on weapons
    58 
    59 
    59     --pick random weapon and subtract cost
    60     --pick random weapon and subtract cost
    60     local r = GetRandom(table.maxn(weapons_values)) + 1
    61     local r = GetRandom(weapons_count) + 1
    61     local picked_items = {}
    62     local picked_items = {}
    62     table.insert(picked_items, weapons[r])
    63     table.insert(picked_items, weapons[r])
    63     n = n - weapons_values[r]
    64     n = n - weapons_values[r]
    64 
    65 
    65 
    66 
    66     --choose any weapons or utilities to use up remaining n
    67     --choose any weapons or utilities to use up remaining n
    67 
    68 
    68     while n > 0 do
    69     while n > 0 do
    69         local items = {}
    70         local items = {}
    70         local items_values = {}
    71         local items_values = {}
       
    72         local items_count = 0
    71 
    73 
    72         for i, w in pairs(weapons_values) do
    74         for i, w in pairs(weapons_values) do
    73             local used = false
    75             local used = false
    74             if w <= n then
    76             if w <= n then
    75                 --check that this weapon hasn't been given already
    77                 --check that this weapon hasn't been given already
    79                     end
    81                     end
    80                 end
    82                 end
    81                 if not used then
    83                 if not used then
    82                     table.insert(items_values, w)
    84                     table.insert(items_values, w)
    83                     table.insert(items, weapons[i])
    85                     table.insert(items, weapons[i])
       
    86                     items_count = items_count + 1
    84                 end
    87                 end
    85             end
    88             end
    86         end
    89         end
    87 
    90 
    88         for i, w in pairs(utilities_values) do
    91         for i, w in pairs(utilities_values) do
    95                     end
    98                     end
    96                 end
    99                 end
    97                 if not used then
   100                 if not used then
    98                     table.insert(items_values, w)
   101                     table.insert(items_values, w)
    99                     table.insert(items, utilities[i])
   102                     table.insert(items, utilities[i])
   100                 end
   103                     items_count = items_count + 1
   101             end
   104                 end
   102         end
   105             end
   103 
   106         end
   104         local r = GetRandom(table.maxn(items_values)) + 1
   107 
   105         table.insert(picked_items, items[r])
   108         if items_count > 0 then
   106         n = n - items_values[r]
   109             local r = GetRandom(items_count) + 1
       
   110             table.insert(picked_items, items[r])
       
   111             n = n - items_values[r]
       
   112         else
       
   113             break
       
   114         end
   107     end
   115     end
   108 
   116 
   109     return picked_items
   117     return picked_items
   110 end
   118 end
   111 
   119 
   212                         table.insert(utilities, a)
   220                         table.insert(utilities, a)
   213                         table.insert(utilities, cost)
   221                         table.insert(utilities, cost)
   214                     else
   222                     else
   215                         table.insert(weapons, a)
   223                         table.insert(weapons, a)
   216                         table.insert(weapons_values, cost)
   224                         table.insert(weapons_values, cost)
       
   225                         weapons_count = weapons_count + 1
   217                     end
   226                     end
   218                 end
   227                 end
   219             else
   228             else
   220                 prob = 0
   229                 prob = 0
   221             end
   230             end