Advertisement
Guest User

Untitled

a guest
Sep 25th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.43 KB | None | 0 0
  1. GM.StorageUnitPrice = 15000
  2. GM.StorageMaxItemWeight = 250
  3. GM.StorageUnitTerm = GM:MonthsToSeconds(1); // 1 month game time :P
  4.  
  5. //todo: NPC base and Storage service NPC tommorow
  6.  
  7. //todo: MySQL integration
  8.  
  9. //todo: CL side storage service
  10.  
  11. function PLAYER:SaveStorage( )
  12. local slotTable = {};
  13. for _, NULL in pairs(self.StorageItems) do
  14. for k, v in pairs(self.StorageItems) do //loop through the sub-table
  15. local Slot = v[4];
  16. if !slotTable[Slot] then slotTable[Slot] = v[5].." "; end
  17.  
  18. if !string.find(slotTable[Slot], v[5]) then
  19. slotTable[Slot] = slotTable[Slot].." "..v[5];
  20. end
  21. end
  22. end
  23.  
  24. for i = 1, self.StorageSlots do
  25. storageTerm( self, i, true ); // check the terms
  26. end
  27.  
  28. for k, v in pairs(slotTable) do
  29. local storageItems = sql.QueryValue("SELECT Storage FROM crp_s_i WHERE SteamID='"..self:SteamID().."' AND Slot='"..k.."'");
  30. if storageItems then
  31. sql.Query("UPDATE crp_s_i SET `Storage`='"..v.."', `Slot`='"..k.."' WHERE SteamID='"..self:SteamID().."'"); //What items are stored?
  32. else
  33. sql.Query("INSERT INTO crp_s_i (Storage, Slot, SteamID) VALUES ('"..v.."', '"..k.."', '"..self:SteamID().."')");
  34. end
  35. end
  36.  
  37. local Slots = sql.QueryValue("SELECT StorageSlots FROM crp_s_i WHERE SteamID='"..self:SteamID().."'");
  38. if Slots then
  39. sql.Query("UPDATE crp_s_i SET `StorageSlots`='"..self.StorageSlots.."' WHERE SteamID='"..self:SteamID().."'"); //How many slots are purchased?
  40. else
  41. sql.Query("INSERT INTO crp_s_i (StorageSlots, SteamID) VALUES ('"..self.StorageSlots.."', '"..self:SteamID().."')");
  42. end
  43.  
  44. local storedAmount = sql.QueryValue("SELECT StoredItems FROM crp_s_i WHERE SteamID='"..self:SteamID().."'");
  45. if storedAmount then
  46. sql.Query("UPDATE crp_s_i SET `StoredItems`='"..self.StoredItems.."' WHERE SteamID='"..self:SteamID().."'"); //How many Items are stored?!
  47. else
  48. sql.Query("INSERT INTO crp_s_i (StoredItems, SteamID) VALUES ('"..self.StoredItems.."', '"..self:SteamID().."')");
  49. end
  50. end
  51.  
  52. function PLAYER:LoadStorage( )
  53. local StorageItems = {};
  54. self.StoredItems = 0;
  55. self.Term = {};
  56.  
  57. local Results = tonumber(sql.QueryValue("SELECT StoredItems FROM crp_s_i WHERE SteamID='"..self:SteamID().."'"));
  58. if Results then
  59. if (Results < 1) then return; end //THERE WAS NOTHING STORED!
  60. self.StoredItems = Results;
  61. end
  62.  
  63. local Slots = tonumber(sql.QueryValue("SELECT StorageSlots FROM crp_s_i WHERE SteamID='"..self:SteamID().."'"));
  64. if Slots then
  65. if (Slots < 1) then return; end //THERE WAS NOTHING STORED!
  66. self.StorageSlots = Slots;
  67. end
  68.  
  69. for i = 1, Slots do
  70. local Query = sql.QueryValue("SELECT Storage FROM crp_s_i WHERE SteamID='"..self:SteamID().."' AND Slot='"..i.."'");
  71. if !Query then return; end
  72. StorageItems[i] = Query;
  73. storageTerm(Player, i);
  74. end
  75.  
  76. timer.Create("sDuration"..self.ID, 1, 0,
  77. function()
  78. for i = 1, self.StorageSlots do
  79. if !self or !self:IsPlayer() or !self:IsValid() then return; end
  80.  
  81. if self.Term - 1 <= 0 then
  82. if self:AutoPay("Storage", Bool) then
  83. if !self:HasMoney(GAMEMODE.StorageUnitPrice * self:MyBill("Storage")) then
  84. //prompt mybill failure! :P
  85. return;
  86. end
  87.  
  88. self:AddMoney(-(GAMEMODE.StorageUnitPrice * self:MyBill("Storage")));
  89. AddTerm(self, i);
  90. end
  91. //prompt for payment - this aint free!
  92. return;
  93. end
  94.  
  95. self.Term[i] = self.Term[i] - 1;
  96. end
  97. end)
  98.  
  99. local startPoint = 0;
  100. for k, v in pairs(StorageItems) do
  101. if (v && v != "") then
  102. for i = 1, Results do
  103. local String = string.sub(v, startPoint);
  104. local S, F = string.find(String, " ");
  105. local ID = tonumber(string.sub(String, startPoint, S));
  106. startPoint = F;
  107.  
  108. local Name = COBALT_ITEMS[ID].Name;
  109. local Model = COBALT_ITEMS[ID].Model;
  110. local Weight = COBALT_ITEMS[ID].Weight;
  111. addToStorage(Player, Name, Model, Weight, k, ID);
  112. end
  113. end
  114. end
  115. end
  116.  
  117. //todo: Change base gamemode from sandbox to base once we have the sandbox scoreboard, or maybe keep it the same depending on sandbox hook over writing and so on
  118.  
  119. local function addTerm( Player, Slot, termLength )
  120. Player.Term[Slot] = GAMEMODE.StorageUnitTerm * termLength;
  121.  
  122. if !timer.IsTimer("sDuration") then
  123. timer.Create("sDuration"..Player.ID, 1, 0,
  124. function()
  125. for i = 1, Player.StorageSlots do
  126. if !Player or !Player:IsPlayer() or !Player:IsValid() then return; end
  127.  
  128. if Player.Term - 1 <= 0 then
  129. if Player:AutoPay("Storage", Bool) then
  130. if !Player:HasMoney(GAMEMODE.StorageUnitPrice * Player:MyBill("Storage")) then
  131. //prompt mybill failure! :P
  132. return;
  133. end
  134.  
  135. Player:AddMoney(-(GAMEMODE.StorageUnitPrice * Player:MyBill("Storage")));
  136. AddTerm(Player, i);
  137. end
  138. //prompt for payment - this aint free!
  139. return;
  140. end
  141.  
  142. Player.Term[i] = Player.Term[i] - 1;
  143. end
  144. end)
  145. end
  146. end
  147.  
  148. local function storageTerm( Player, Slot, onDisconnect )
  149. if (onDisconnect && onDisconnect == true) then
  150. local Term = sql.QueryValue("SELECT Term FROM crp_s_i WHERE SteamID='"..Player:SteamID().."' AND Slot='"..Slot.."'");
  151. if Term then
  152. sql.Query("UPDATE crp_s_i SET `Term`='"..Player.Term[Slot].."' WHERE SteamID='"..Player:SteamID().."' AND Slot='"..Slot.."'");
  153. else
  154. sql.Query("INSERT INTO crp_s_i (Term, SteamID, Slot) VALUES ('"..Player.Term[Slot].."', '"..Slot.."', '"..Player:SteamID().."')");
  155. end
  156.  
  157. return;
  158. end
  159.  
  160. local Term = tonumber(sql.QueryValue("SELECT Term FROM crp_s_i WHERE SteamID='"..Player:SteamID().."' AND Slot='"..Slot.."'"));
  161. Player.Term[Slot] = Term;
  162. end
  163.  
  164. local function addToStorage( Player, Name, Model, Weight, Slot, ID )
  165. local totalWeight = 0;
  166. for _, NULL in pairs(Player.StorageItems) do
  167. for k, v in pairs(Player.StorageItems) do //loop through the sub-table
  168. if v[4] == Slot then
  169. local itemWeight = v[3];
  170. totalWeight = totalWeight + itemWeight;
  171. end
  172. end
  173. end
  174.  
  175. if totalWeight > GAMEMODE.StorageMaxItemWeight then
  176. //error message
  177. return;
  178. end
  179.  
  180. Player.StoredItems = Player.StoredItems + 1; // more stored items : D
  181. Player.StorageItems[Player.StoredItems] = {Name, Model, Weight, Slot, ID};
  182. end
  183.  
  184. local function removeFromStorage( Player, cmd, args )
  185. local Slot = tonumber(args[1]);
  186. Player.StoredItems = Player.StoredItems - 1
  187. for k, v in pairs(Player.StoredItems) do
  188. if v[4] == Slot then
  189. table.remove(Player.StoredItems, k);
  190. end
  191. end
  192.  
  193. sql.Query("DELETE FROM crp_s_i WHERE SteamID='"..Player:SteamID().."' AND Slot='"..Slot.."'"); //finally delete the stored items from the database :)
  194. end
  195. concommand.Add("crp_sdel", removeFromStorage)
  196.  
  197. local function buyStorageSlot( Player, cmd, args ) // The Item ID for weight and the term of storage
  198. local Items = args[1];
  199. local Term = tonumber(args[2]);
  200.  
  201. if !Player:HasMoney(GAMEMODE.StorageUnitPrice * Term) then return; end
  202. Player:AddMoney(-(GAMEMODE.StorageUnitPrice * Term));
  203. local Weight = 0;
  204. local Name = "N/A";
  205. local Model = "N/A";
  206. for _, null in pairs(Items) do
  207. for k, v in pairs(Items) do
  208. if k == "Weight" then
  209. Weight = Weight + v;
  210. end
  211.  
  212. if (Weight > GAMEMODE.StorageMaxItemWeight) then return; end
  213.  
  214. if k == "Name" then
  215. Name = v;
  216. end
  217.  
  218. if k == "Model" then
  219. Model = v;
  220. end
  221.  
  222. addToStorage( Player, Name, Model, Weight );
  223. end
  224. end
  225.  
  226. Player.StorageSlots = Player.StorageSlots + 1;
  227. addTerm(Player, Player.StorageSlots, Term);
  228. end
  229. concommand.Add("crp_nstore", buyStorageSlot)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement