From 6665424d9782a0cea43b65d549faaa166b3da874 Mon Sep 17 00:00:00 2001
From: Allanis <allanis@saracraft.net>
Date: Sun, 28 Apr 2013 09:23:16 +0100
Subject: [PATCH] [Add] Couple more commodities.

---
 dat/commodity.xml         | 18 ++++++++++++++++++
 dat/missions/cargo.lua    | 15 ++++++++++++---
 dat/missions/es_cargo.lua | 14 +++++++++++---
 dat/planet.xml            |  8 +++++++-
 scripts/ai/merchant.lua   | 22 ++++++++++++++--------
 src/ai.c                  | 22 ++++++++++++++++------
 src/mission.h             |  2 +-
 7 files changed, 79 insertions(+), 22 deletions(-)

diff --git a/dat/commodity.xml b/dat/commodity.xml
index 04636d2..e675783 100644
--- a/dat/commodity.xml
+++ b/dat/commodity.xml
@@ -11,6 +11,24 @@
   <high>240</high>
   <medium>210</medium>
   <low>180</low>
+</commodity>
+ <commodity name="Industrial Goods">
+  <description>Your basic industrial goods. From cutting lasers to prcessed metals.</description>
+  <high>420</high>
+  <medium>340</medium>
+  <low>280</low>
+</commodity>
+ <commodity name="Medicine">
+  <description>An assortment of medicines sutable for curing all sorts of ailments.</description>
+  <high>900</high>
+  <medium>750</medium>
+  <low>550</low>
+</commodity>
+ <commodity name="Luxury Goods">
+  <description>All kinds of high quality luxary goods.</description>
+  <high>760</high>
+  <medium>630</medium>
+  <low>470</low>
 </commodity>
 <commodity name = "Parcels">
 </commodity>
diff --git a/dat/missions/cargo.lua b/dat/missions/cargo.lua
index c83ad74..680ba67 100644
--- a/dat/missions/cargo.lua
+++ b/dat/missions/cargo.lua
@@ -43,10 +43,19 @@ function create()
 
   -- More mission specifics.
   carg_mass = rnd.int(10, 30)
-  i = rnd.int(1)
-  if i == 0 then carg_type = "Food"
-  elseif i == 1 then carg_type = "Ore"
+  i = rnd.int(12)                                                              
+    if i < 5 then                                                               
+      carg_type = "Food"                                                              
+    elseif i < 8 then                                                           
+      carg_type = "Ore"                                                               
+    elseif i < 10 then                                                          
+      carg_type = "Industrial Goods"                                                  
+    elseif i < 12 then                                                          
+      carg_type = "Luxary Goods"                                                      
+    else                                                                          
+      carg_type = "Medicine"
   end
+  
   misn.setDesc(string.format(misn_desc, planet, system, carg_mass, carg_type))
   reward = misn_dist * carg_mass * (250+rnd.int(150)) +
       carg_mass * (150+rnd.int(75)) +
diff --git a/dat/missions/es_cargo.lua b/dat/missions/es_cargo.lua
index 5a7d431..0775c05 100644
--- a/dat/missions/es_cargo.lua
+++ b/dat/missions/es_cargo.lua
@@ -42,9 +42,17 @@ function create()
 
   -- More mission specifics.
   carg_mass = rnd.int(10, 30)
-  i = rnd.int(1)
-  if i == 0 then carg_type = "Food"
-  elseif i == 1 then carg_type = "Ore"
+  i = rnd.int(12)                                                                
+  if i < 5 then                                                               
+    carg_type = "Food"                                                         
+  elseif i < 8 then                                                           
+    carg_type = "Ore"                                                         
+  elseif i < 10 then                                                          
+    carg_type = "Industrial Goods"                                            
+  elseif i < 12 then                                                          
+    carg_type = "Luxary Goods"                                                
+  else                                                                        
+    carg_type = "Medicine" 
   end
 
   misn.setDesc(string.format(misn_desc, carg_mass, carg_type, planet, system))
diff --git a/dat/planet.xml b/dat/planet.xml
index 294ca76..0505c15 100644
--- a/dat/planet.xml
+++ b/dat/planet.xml
@@ -17,6 +17,8 @@
    <commodities>
     <commodity>Food</commodity>
     <commodity>Ore</commodity>
+    <commodity>Industrial Goods</commodity>
+    <commodity>Medicine</commodity>
    </commodities>
   </general>
   <GFX>
@@ -63,7 +65,8 @@
     <main>5</main>
    </tech>
    <commodities>
-    <commodity>Food</commodity>
+     <commodity>Food</commodity>
+     <commodity>Medicine</commodity>
    </commodities>
   </general>
   <GFX>
@@ -103,6 +106,9 @@
    <commodities>
     <commodity>Food</commodity>
     <commodity>Ore</commodity>
+    <commodity>Industrial Goods</commodity>
+    <commodity>Medicine</commodity>
+    <commodity>Luxury Goods</commodity>
    </commodities>
   </general>
   <GFX>
diff --git a/scripts/ai/merchant.lua b/scripts/ai/merchant.lua
index effa9b4..b60e2bd 100644
--- a/scripts/ai/merchant.lua
+++ b/scripts/ai/merchant.lua
@@ -41,15 +41,21 @@ function attacked(attacker)
 end
 
 function create()
- ai.setcredits(ai.rnd(200, ai.shipprice()/100))
+  ai.setcredits(ai.rnd(200, ai.shipprice()/100))
 
- num = ai.rnd(0,1)
- if num == 0 then
-  cargo = "Food"
- elseif num == 1 then
-  cargo = "Ore"
- end
- ai.setcargo(cargo, ai.rnd(0, ai.cargofree()))
+  num = ai.rnd(12)
+  if num < 5 then
+    cargo = "Food"
+  elseif num < 8 then
+    cargo = "Ore"
+  elseif num < 10 then
+    cargo = "Industrial Goods"
+  elseif num < 12 then
+    cargo = "Luxary Goods"
+  else
+    cargo = "Medicine"
+  end
+  ai.setcargo(cargo, ai.rnd(0, ai.cargofree()))
 end
 
 -- Runs away.
diff --git a/src/ai.c b/src/ai.c
index 7469b17..26c0927 100644
--- a/src/ai.c
+++ b/src/ai.c
@@ -952,14 +952,24 @@ static int ai_shipprice(lua_State* L) {
 
 // Return a number between low and high.
 static int ai_rng(lua_State* L) {
-  MIN_ARGS(2);
+  int o;
 
-  int l, h;
+  o = lua_gettop(L);
 
-  if(lua_isnumber(L,1)) l = (int)lua_tonumber(L, 1);
-  if(lua_isnumber(L,1)) h = (int)lua_tonumber(L, 2);
+  if(o == 0) lua_pushnumber(L, RNGF()); // Random double 0 <= x <= 1.
+  else if(o == 1) { // Random int o <= x <= param.
+    if(lua_isnumber(L, -1))
+      lua_pushnumber(L, RNG(0, (int)lua_tonumber(L, -1)));
+    else return 0;
+  }
+  else if(o >= 2) { // Random int param 1 <= x <= param 2.
+    if(lua_isnumber(L, -1) && lua_isnumber(L, -2))
+      lua_pushnumber(L,
+          RNG((int)lua_tonumber(L, -2), (int)lua_tonumber(L, -1)));
+    else return 0;
+  }
+  else return 0;
 
-  lua_pushnumber(L, RNG(l,h));
-  return 1;
+  return 1; // Unless it's returned 0 already it'll always return a param.
 }
 
diff --git a/src/mission.h b/src/mission.h
index bf70523..8892105 100644
--- a/src/mission.h
+++ b/src/mission.h
@@ -65,7 +65,7 @@ extern Mission player_missions[MISSION_MAX];
 Mission* missions_computer(int* n, int faction, char* planet, char* system);
 // Player accepted mission - mission computer.
 void mission_accept(Mission* mission);
-void mission_bar(int faction, char* planet, char* system);
+void missions_bar(int faction, char* planet, char* system);
 
 // Misc.
 int mission_getID(MissionData* misn);