Advertisement
Guest User

Untitled

a guest
May 27th, 2016
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 36.55 KB | None | 0 0
  1. GM.Net = (GAMEMODE or GM).Net or {}
  2. GM.Net.m_bVerbose = false
  3. GM.Net.m_tblProtocols = (GAMEMODE or GM).Net.m_tblProtocols or { Names = {}, IDs = {} }
  4. GM.Net.m_tblVarLookup = {
  5. Write = {
  6. ["UInt4"] = { func = net.WriteUInt, size = 4 },
  7. ["UInt8"] = { func = net.WriteUInt, size = 8 },
  8. ["UInt16"] = { func = net.WriteUInt, size = 16 },
  9. ["UInt32"] = { func = net.WriteUInt, size = 32 },
  10. ["Int4"] = { func = net.WriteInt, size = 4 },
  11. ["Int8"] = { func = net.WriteInt, size = 8 },
  12. ["Int16"] = { func = net.WriteInt, size = 16 },
  13. ["Int32"] = { func = net.WriteInt, size = 32 },
  14. ["Angle"] = { func = net.WriteAngle },
  15. ["Bit"] = { func = net.WriteBit },
  16. ["Bool"] = { func = net.WriteBool },
  17. ["Color"] = { func = net.WriteColor },
  18. ["Double"] = { func = net.WriteDouble },
  19. ["Entity"] = { func = net.WriteEntity },
  20. ["Float"] = { func = net.WriteFloat },
  21. ["Normal"] = { func = net.WriteNormal },
  22. ["String"] = { func = net.WriteString },
  23. ["Table"] = { func = net.WriteTable },
  24. ["Vector"] = { func = net.WriteVector },
  25. },
  26. Read = {
  27. ["UInt4"] = { func = net.ReadUInt, size = 4 },
  28. ["UInt8"] = { func = net.ReadUInt, size = 8 },
  29. ["UInt16"] = { func = net.ReadUInt, size = 16 },
  30. ["UInt32"] = { func = net.ReadUInt, size = 32 },
  31. ["Int4"] = { func = net.ReadInt, size = 4 },
  32. ["Int8"] = { func = net.ReadInt, size = 8 },
  33. ["Int16"] = { func = net.ReadInt, size = 16 },
  34. ["Int32"] = { func = net.ReadInt, size = 32 },
  35. ["Angle"] = { func = net.ReadAngle },
  36. ["Bit"] = { func = net.ReadBit },
  37. ["Bool"] = { func = net.ReadBool },
  38. ["Color"] = { func = net.ReadColor },
  39. ["Double"] = { func = net.ReadDouble },
  40. ["Entity"] = { func = net.ReadEntity },
  41. ["Float"] = { func = net.ReadFloat },
  42. ["Normal"] = { func = net.ReadNormal },
  43. ["String"] = { func = net.ReadString },
  44. ["Table"] = { func = net.ReadTable },
  45. ["Vector"] = { func = net.ReadVector },
  46. },
  47. }
  48.  
  49. function GM.Net:Initialize()
  50. net.Receive( "gm_netmsg", function( intMsgLen, ... )
  51. local id, name = net.ReadUInt( 8 ), net.ReadString()
  52. if not id or not name then return end
  53. if self.m_bVerbose then print( intMsgLen, id, name ) end
  54.  
  55. local event_data = GAMEMODE.Net:GetEventHandleByID( id, name )
  56. if not event_data then return end
  57. if event_data.meta then
  58. event_data.func( event_data.meta, intMsgLen, ... )
  59. else
  60. event_data.func( intMsgLen, ... )
  61. end
  62. end )
  63. end
  64.  
  65. function GM.Net:AddProtocol( strProtocol, intNetID )
  66. if self.m_tblProtocols.Names[strProtocol] then return end
  67. self.m_tblProtocols.Names[strProtocol] = { ID = intNetID, Events = {} }
  68. self.m_tblProtocols.IDs[intNetID] = self.m_tblProtocols.Names[strProtocol]
  69. end
  70.  
  71. function GM.Net:IsProtocol( strProtocol )
  72. return self.m_tblProtocols.Names[strProtocol] and true or false
  73. end
  74.  
  75. function GM.Net:RegisterEventHandle( strProtocol, strMsgName, funcHandle, tblHandleMeta )
  76. if not self:IsProtocol( strProtocol ) then
  77. return
  78. end
  79.  
  80. self.m_tblProtocols.Names[strProtocol].Events[strMsgName] = { func = funcHandle, meta = tblHandleMeta }
  81. end
  82.  
  83. function GM.Net:GetEventHandle( strProtocol, strMsgName )
  84. if not self:IsProtocol( strProtocol ) then return end
  85. return self.m_tblProtocols.Names[strProtocol].Events[strMsgName]
  86. end
  87.  
  88. function GM.Net:GetEventHandleByID( intNetID, strMsgName )
  89. return self.m_tblProtocols.IDs[intNetID].Events[strMsgName]
  90. end
  91.  
  92. function GM.Net:GetProtocolIDByName( strProtocol )
  93. return self.m_tblProtocols.Names[strProtocol].ID
  94. end
  95.  
  96. function GM.Net:NewEvent( strProtocol, strMsgName )
  97. if self.m_bVerbose then print( "New outbound net message: ".. strProtocol.. ":".. strMsgName ) end
  98. net.Start( "gm_netmsg" )
  99. net.WriteUInt( self:GetProtocolIDByName(strProtocol), 8 )
  100. net.WriteString( strMsgName )
  101. end
  102.  
  103. function GM.Net:FireEvent()
  104. if self.m_bVerbose then print( "Sending outbound net message to server." ) end
  105. net.SendToServer()
  106. end
  107.  
  108.  
  109. -- ----------------------------------------------------------------
  110. -- Core Gamemode Netcode
  111. -- ----------------------------------------------------------------
  112. GM.Net:AddProtocol( "game", 0 )
  113. GM.Net:AddProtocol( "ent", 255 )
  114.  
  115. --Player is ready for initial game data
  116. function GM.Net:SendPlayerReady()
  117. self:NewEvent( "game", "ready" )
  118. self:FireEvent()
  119. end
  120.  
  121. --The server is updating our in-game status
  122. GM.Net:RegisterEventHandle( "game", "g", function( intMsgLen, pPlayer )
  123. GAMEMODE.m_bInGame = net.ReadBit() == 1
  124. hook.Call( "GamemodeGameStatusChanged", GAMEMODE, GAMEMODE.m_bInGame )
  125. end )
  126.  
  127. --The server is loading the character we selected
  128. GM.Net:RegisterEventHandle( "game", "load", function( intMsgLen, pPlayer )
  129. hook.Call( "GamemodeLoadingCharacter", GAMEMODE )
  130. end )
  131.  
  132. --A game var has changed on the server
  133. GM.Net:RegisterEventHandle( "game", "v", function( intMsgLen, pPlayer )
  134. local key = net.ReadString()
  135. local varData = GAMEMODE.Net.m_tblVarLookup.Read[GAMEMODE.Player:GetGameVarType( key )]
  136. GAMEMODE.Player:SetGameVar( key, varData.func(varData.size) )
  137. end )
  138.  
  139. --A batched game var update was sent from the server
  140. GM.Net:RegisterEventHandle( "game", "v_batch", function( intMsgLen, pPlayer )
  141. local numVars = net.ReadUInt( 16 )
  142.  
  143. local key, varData
  144. for i = 1, numVars do
  145. key = net.ReadString()
  146. varData = GAMEMODE.Net.m_tblVarLookup.Read[GAMEMODE.Player:GetGameVarType( key )]
  147. GAMEMODE.Player:SetGameVar( key, varData.func(varData.size) )
  148. end
  149. end )
  150.  
  151. --A full game var update was sent from the server
  152. GM.Net:RegisterEventHandle( "game", "v_full", function( intMsgLen, pPlayer )
  153. local numVars = net.ReadUInt( 16 )
  154.  
  155. local key, varData
  156. for i = 1, numVars do
  157. key = net.ReadString()
  158. varData = GAMEMODE.Net.m_tblVarLookup.Read[GAMEMODE.Player:GetGameVarType( key )]
  159. GAMEMODE.Player:SetGameVar( key, varData.func(varData.size) )
  160. end
  161. end )
  162.  
  163. --A shared game var has changed on the server
  164. GM.Net:RegisterEventHandle( "game", "vs", function( intMsgLen, pPlayer )
  165. local playerOwner = net.ReadString()
  166. local key = net.ReadString()
  167. local varData = GAMEMODE.Net.m_tblVarLookup.Read[GAMEMODE.Player:GetSharedGameVarType( key )]
  168. GAMEMODE.Player:SetSharedGameVar( playerOwner, key, varData.func(varData.size) )
  169. end )
  170.  
  171. --A full shared game var update was sent from the server
  172. GM.Net:RegisterEventHandle( "game", "vs_full", function( intMsgLen, pPlayer )
  173. local playerOwner = net.ReadString()
  174. local numVars = net.ReadUInt( 16 )
  175.  
  176. local key, varData
  177. for i = 1, numVars do
  178. key = net.ReadString()
  179. varData = GAMEMODE.Net.m_tblVarLookup.Read[GAMEMODE.Player:GetSharedGameVarType( key )]
  180. GAMEMODE.Player:SetSharedGameVar( playerOwner, key, varData.func(varData.size) )
  181. end
  182. end )
  183.  
  184. --A combined update of entity owners was sent from the server
  185. GM.Net:RegisterEventHandle( "game", "e_owners", function( intMsgLen, pPlayer )
  186. local num = net.ReadUInt( 16 )
  187.  
  188. for i = 1, num do
  189. local entIdx = net.ReadUInt( 16 )
  190. local entOwner = net.ReadEntity()
  191. GAMEMODE:GetEntityOwnerTable()[entIdx] = entOwner
  192. end
  193. end )
  194.  
  195. --A single entity owner update was sent from the server
  196. GM.Net:RegisterEventHandle( "game", "e_owner", function( intMsgLen, pPlayer )
  197. GAMEMODE:GetEntityOwnerTable()[net.ReadUInt( 16 )] = net.ReadEntity()
  198. end )
  199.  
  200. --Send an npc dialog event to the server
  201. function GM.Net:SendNPCDialogEvent( strEventName, tblArgs )
  202. self:NewEvent( "game", "npcd" )
  203. net.WriteString( strEventName )
  204. net.WriteTable( tblArgs or {} )
  205. self:FireEvent()
  206. end
  207.  
  208. --Sever is sending us an open dialog event
  209. GM.Net:RegisterEventHandle( "game", "npcd_s", function( intMsgLen, pPlayer )
  210. GAMEMODE.Dialog:OpenDialog( net.ReadString() )
  211. end )
  212.  
  213. --Sever is sending us an open nwmenu event
  214. GM.Net:RegisterEventHandle( "game", "nw_menu", function( intMsgLen, pPlayer )
  215. GAMEMODE.Gui:ShowNWMenu( net.ReadString() )
  216. end )
  217.  
  218. --Server wants to show us a hint
  219. GM.Net:RegisterEventHandle( "game", "note", function( intMsgLen, pPlayer )
  220. GAMEMODE.HUD:AddNote( net.ReadString(), net.ReadUInt(4), net.ReadUInt(8) )
  221. end )
  222.  
  223. --Player wants to buy an item from an npc
  224. function GM.Net:RequestBuyNPCItem( strNPCID, strItemID, intAmount )
  225. self:NewEvent( "game", "npc_b" )
  226. net.WriteString( strNPCID )
  227. net.WriteString( strItemID )
  228. net.WriteUInt( intAmount, 8 )
  229. self:FireEvent()
  230. end
  231.  
  232. --Player wants to sell an item to an npc
  233. function GM.Net:RequestSellNPCItem( strNPCID, strItemID, intAmount )
  234. self:NewEvent( "game", "npc_s" )
  235. net.WriteString( strNPCID )
  236. net.WriteString( strItemID )
  237. net.WriteUInt( intAmount, 8 )
  238. self:FireEvent()
  239. end
  240.  
  241. --Server sent all character info to us
  242. GM.Net:RegisterEventHandle( "game", "char_f", function( intMsgLen, pPlayer )
  243. local numChars = net.ReadUInt( 4 )
  244. local chars = {}
  245.  
  246. for i = 1, numChars do
  247. chars[net.ReadUInt( 32 )] = {
  248. Name = {
  249. First = net.ReadString(),
  250. Last = net.ReadString(),
  251. },
  252. Model = net.ReadString(),
  253. Skin = net.ReadUInt( 8 ),
  254. }
  255. end
  256.  
  257. GAMEMODE.Char.m_tblCharacters = chars
  258. hook.Call( "GamemodeOnCharacterUpdate", GAMEMODE, GAMEMODE.Char.m_tblCharacters )
  259. end )
  260.  
  261. --Request to select a character
  262. function GM.Net:RequestSelectCharacter( intCharID )
  263. self:NewEvent( "game", "char_s" )
  264. net.WriteUInt( intCharID, 32 )
  265. self:FireEvent()
  266. end
  267.  
  268. --Request to submit a new character
  269. function GM.Net:RequestCreateCharacter( tblData )
  270. self:NewEvent( "game", "char_n" )
  271. net.WriteString( tblData.Name.First )
  272. net.WriteString( tblData.Name.Last )
  273. net.WriteString( tblData.Model )
  274. net.WriteUInt( tblData.Sex, 4 )
  275. net.WriteUInt( tblData.Skin, 8 )
  276. self:FireEvent()
  277. end
  278.  
  279. --Server sent us an error message while submitting a character
  280. GM.Net:RegisterEventHandle( "game", "char_e", function( intMsgLen, pPlayer )
  281. hook.Call( "GamemodeCharacterCreateError", GAMEMODE, net.ReadString() )
  282. end )
  283.  
  284. --Player wants to buy a custom license plate
  285. function GM.Net:RequestBuyPlate( strPlate )
  286. self:NewEvent( "game", "buy_lp" )
  287. net.WriteString( strPlate )
  288. self:FireEvent()
  289. end
  290.  
  291. --Player wants to submit a driving test
  292. function GM.Net:SubmitDrivingTest( tblAnswers )
  293. self:NewEvent( "game", "d_test" )
  294. net.WriteTable( tblAnswers )
  295. self:FireEvent()
  296. end
  297.  
  298. --Player wants to deposit funds in their bank account
  299. function GM.Net:RequestDepositBankFunds( entATM, intAmount )
  300. self:NewEvent( "game", "atm_dep" )
  301. net.WriteEntity( entATM )
  302. net.WriteUInt( intAmount, 32 )
  303. self:FireEvent()
  304. end
  305.  
  306. --Player wants to withdraw funds from their bank account
  307. function GM.Net:RequestWithdrawBankFunds( entATM, intAmount )
  308. self:NewEvent( "game", "atm_wdr" )
  309. net.WriteEntity( entATM )
  310. net.WriteUInt( intAmount, 32 )
  311. self:FireEvent()
  312. end
  313.  
  314. --Player wants to transfer funds from their bank account to another player's account
  315. function GM.Net:RequestBankTransfer( entATM, intAmount, strPhoneNum )
  316. self:NewEvent( "game", "atm_tfr" )
  317. net.WriteEntity( entATM )
  318. net.WriteUInt( intAmount, 32 )
  319. net.WriteString( strPhoneNum )
  320. self:FireEvent()
  321. end
  322.  
  323. --Update clientside fuel data for a car
  324. GM.Net:RegisterEventHandle( "game", "c_fuel", function( intMsgLen, pPlayer )
  325. GAMEMODE.Cars:UpdateCarFuel( net.ReadUInt(16), net.ReadUInt(8), net.ReadUInt(8) )
  326. end )
  327.  
  328. --Player wants to drop money on the ground
  329. function GM.Net:RequestDropMoney( intAmount, bOwnerless )
  330. self:NewEvent( "game", "d_money" )
  331. net.WriteUInt( intAmount, 32 )
  332. net.WriteBit( bOwnerless )
  333. self:FireEvent()
  334. end
  335.  
  336. -- ----------------------------------------------------------------
  337. -- Clothing Shop Netcode
  338. -- ----------------------------------------------------------------
  339. --Player wants to buy a new outfit
  340. function GM.Net:BuyCharacterClothing( intSkin, strModel )
  341. self:NewEvent( "game", "npcc_b" )
  342. net.WriteString( strModel )
  343. net.WriteUInt( intSkin, 8 )
  344. self:FireEvent()
  345. end
  346.  
  347. --Player wants to buy an item from the clothing accessories menu
  348. function GM.Net:BuyCharacterClothingItem( strItemID )
  349. self:NewEvent( "game", "buy_c_item" )
  350. net.WriteString( strItemID )
  351. self:FireEvent()
  352. end
  353.  
  354. -- ----------------------------------------------------------------
  355. -- Inventory Netcode
  356. -- ----------------------------------------------------------------
  357. GM.Net:AddProtocol( "inv", 1 )
  358.  
  359. --The server sent us a full inventory update
  360. GM.Net:RegisterEventHandle( "inv", "f", function( intMsgLen, pPlayer )
  361. local numItems = net.ReadUInt( 16 )
  362. local tbl = {}
  363.  
  364. if numItems == 0 then
  365. LocalPlayer():SetInventory( tbl )
  366. else
  367. for i = 1, numItems do
  368. tbl[net.ReadString()] = net.ReadUInt( 16 )
  369. end
  370.  
  371. LocalPlayer():SetInventory( tbl )
  372. end
  373.  
  374. GAMEMODE:PrintDebug( 0, "Got full inventory update" )
  375.  
  376. hook.Call( "GamemodeOnInventoryUpdated", GAMEMODE, LocalPlayer():GetInventory() or {} )
  377. end )
  378.  
  379. --The server sent us an update for a new item
  380. GM.Net:RegisterEventHandle( "inv", "s", function( intMsgLen, pPlayer )
  381. local itemName, itemAmount = net.ReadString(), net.ReadUInt( 16 )
  382. LocalPlayer():GetInventory()[itemName] = itemAmount > 0 and itemAmount or nil
  383.  
  384. GAMEMODE:PrintDebug( 0, "Got update for item ".. itemName.. " - amount ".. itemAmount )
  385. hook.Call( "GamemodeOnInventoryUpdated", GAMEMODE, LocalPlayer():GetInventory() or {} )
  386. end )
  387.  
  388. function GM.Net:RequestDropItem( strItemID, intAmount, bOwnerless )
  389. self:NewEvent( "inv", "d" )
  390. net.WriteString( strItemID )
  391. net.WriteUInt( intAmount, 8 )
  392. net.WriteBit( bOwnerless and true )
  393. self:FireEvent()
  394. end
  395.  
  396. function GM.Net:RequestUseItem( strItemID )
  397. self:NewEvent( "inv", "u" )
  398. net.WriteString( strItemID )
  399. self:FireEvent()
  400. end
  401.  
  402. function GM.Net:RequestEquipItem( strSlot, strItemID )
  403. self:NewEvent( "inv", "e" )
  404. net.WriteString( strSlot )
  405. net.WriteString( strItemID and strItemID or "nil" )
  406. self:FireEvent()
  407. end
  408.  
  409. --Player wants to craft an item
  410. function GM.Net:RequestCraftItem( strItemID )
  411. self:NewEvent( "inv", "craft" )
  412. net.WriteString( strItemID )
  413. self:FireEvent()
  414. end
  415.  
  416. --Player wants to abort crafting something
  417. function GM.Net:RequestAbortCraft()
  418. self:NewEvent( "inv", "c_abort" )
  419. self:FireEvent()
  420. end
  421.  
  422. --Server sent us current crafting data
  423. GM.Net:RegisterEventHandle( "inv", "c_start", function( intMsgLen, pPlayer )
  424. hook.Call( "GamemodeOnStartCrafting", GAMEMODE, net.ReadString(), net.ReadFloat() )
  425. end )
  426.  
  427. --Server sent us an end crafting event
  428. GM.Net:RegisterEventHandle( "inv", "c_end", function( intMsgLen, pPlayer )
  429. hook.Call( "GamemodeOnEndCrafting", GAMEMODE, net.ReadString() )
  430. end )
  431.  
  432. -- ----------------------------------------------------------------
  433. -- Bank Item Storage Netcode
  434. -- ----------------------------------------------------------------
  435. --Request to move an item from inventory to the bank
  436. function GM.Net:MoveItemToNPCBank( strItemID, intAmount )
  437. self:NewEvent( "inv", "npcb_d" )
  438. net.WriteString( strItemID )
  439. net.WriteUInt( intAmount, 8 )
  440. self:FireEvent()
  441. end
  442.  
  443. --Request to move an item from the bank to inventory
  444. function GM.Net:TakeItemFromBank( strItemID, intAmount )
  445. self:NewEvent( "inv", "npcb_w" )
  446. net.WriteString( strItemID )
  447. net.WriteUInt( intAmount, 8 )
  448. self:FireEvent()
  449. end
  450.  
  451. --Sever sent us an update about items in the bank
  452. GM.Net:RegisterEventHandle( "inv", "npcb_upd", function( intMsgLen, pPlayer )
  453. GAMEMODE.m_tblBankItems = net.ReadTable()
  454. hook.Call( "GamemodeOnGetBankUpdate", GAMEMODE, GAMEMODE.m_tblBankItems )
  455. end )
  456.  
  457. -- ----------------------------------------------------------------
  458. -- Bank Lost And Found Storage Netcode
  459. -- ----------------------------------------------------------------
  460. --Player wants to move an item from the lost and found to their inventory
  461. function GM.Net:TakeItemFromLostAndFound( strItemID, intAmount )
  462. self:NewEvent( "inv", "npcb_lw" )
  463. net.WriteString( strItemID )
  464. net.WriteUInt( intAmount, 8 )
  465. self:FireEvent()
  466. end
  467.  
  468. --Player wants to destroy an item in lost and found
  469. function GM.Net:DestroyLostAndFoundItem( strItemID )
  470. self:NewEvent( "inv", "npcb_ld" )
  471. net.WriteString( strItemID )
  472. self:FireEvent()
  473. end
  474.  
  475. --Send player an update about items in the bank
  476. GM.Net:RegisterEventHandle( "inv", "npcb_lupd", function( intMsgLen, pPlayer )
  477. GAMEMODE.m_tblLostItems = net.ReadTable()
  478. hook.Call( "GamemodeOnGetLostAndFoundUpdate", GAMEMODE, GAMEMODE.m_tblLostItems )
  479. end )
  480.  
  481. -- ----------------------------------------------------------------
  482. -- Vehicle Netcode
  483. -- ----------------------------------------------------------------
  484. GM.Net:AddProtocol( "veh", 2 )
  485.  
  486. --Player wants to buy a car
  487. function GM.Net:RequestBuyCar( strCarUID, intColorIDX )
  488. self:NewEvent( "veh", "b" )
  489. net.WriteString( strCarUID )
  490. net.WriteUInt( intColorIDX, 8 )
  491. self:FireEvent()
  492. end
  493.  
  494. --Player wants to sell a car
  495. function GM.Net:RequestSellCar( strCarUID )
  496. self:NewEvent( "veh", "s" )
  497. net.WriteString( strCarUID )
  498. self:FireEvent()
  499. end
  500.  
  501. --Player wants to spawn a car
  502. function GM.Net:RequestSpawnCar( strCarUID )
  503. self:NewEvent( "veh", "sp" )
  504. net.WriteString( strCarUID )
  505. self:FireEvent()
  506. end
  507.  
  508. --Player wants to stow a car
  509. function GM.Net:RequestStowCar()
  510. self:NewEvent( "veh", "st" )
  511. self:FireEvent()
  512. end
  513.  
  514. -- ----------------------------------------------------------------
  515. -- Jail Netcode
  516. -- ----------------------------------------------------------------
  517. GM.Net:AddProtocol( "jail", 3 )
  518.  
  519. --Player wants to send a player to jail
  520. function GM.Net:RequestJailPlayer( pPlayer, intTime, strReason )
  521. self:NewEvent( "jail", "t" )
  522. net.WriteEntity( pPlayer )
  523. net.WriteUInt( intTime, 32 )
  524. net.WriteString( strReason )
  525. self:FireEvent()
  526. end
  527.  
  528. --Player wants to free a player from jail
  529. function GM.Net:RequestFreePlayer( pPlayer, strReason )
  530. self:NewEvent( "jail", "f" )
  531. net.WriteEntity( pPlayer )
  532. net.WriteString( strReason )
  533. self:FireEvent()
  534. end
  535.  
  536. --Player wants to bail a player out of jail
  537. function GM.Net:RequestBailPlayer( pPlayer )
  538. self:NewEvent( "jail", "b" )
  539. net.WriteEntity( pPlayer )
  540. self:FireEvent()
  541. end
  542.  
  543. --Player wants to warrant another player
  544. function GM.Net:RequestWarrantPlayer( pPlayer, strReason )
  545. self:NewEvent( "jail", "w" )
  546. net.WriteEntity( pPlayer )
  547. net.WriteString( strReason )
  548. self:FireEvent()
  549. end
  550.  
  551. --Player wants to revoke another player's warrant
  552. function GM.Net:RequestRevokePlayerWarrant( pPlayer )
  553. self:NewEvent( "jail", "wr" )
  554. net.WriteEntity( pPlayer )
  555. self:FireEvent()
  556. end
  557.  
  558. -- ----------------------------------------------------------------
  559. -- Cop Computer Netcode
  560. -- ----------------------------------------------------------------
  561. GM.Net:AddProtocol( "cop_computer", 4 )
  562.  
  563. --Player wants to get another player's rap sheet
  564. function GM.Net:RequestPlayerRapSheet( pPlayer )
  565. self:NewEvent( "cop_computer", "r" )
  566. net.WriteEntity( pPlayer )
  567. self:FireEvent()
  568. end
  569.  
  570. --The server sent us a player's main rap sheet
  571. GM.Net:RegisterEventHandle( "cop_computer", "s", function( intMsgLen, pPlayer )
  572. local playerOwner = net.ReadEntity()
  573. local len = net.ReadUInt( 32 )
  574. local data = util.JSONToTable( util.Decompress(net.ReadData(len)) )
  575. hook.Call( "GamemodeGetRapSheet", GAMEMODE, playerOwner, data.JailData, data.LicenseData )
  576. end )
  577.  
  578. --Player wants to revoke another players drivers license
  579. function GM.Net:RequestRevokePlayerLicense( pPlayer, intDuration )
  580. self:NewEvent( "cop_computer", "rl" )
  581. net.WriteEntity( pPlayer )
  582. net.WriteUInt( intDuration, 16 )
  583. self:FireEvent()
  584. end
  585.  
  586. --Player wants to place a dot on another players drivers license
  587. function GM.Net:RequestDotPlayerLicense( pPlayer, strReason )
  588. self:NewEvent( "cop_computer", "d" )
  589. net.WriteEntity( pPlayer )
  590. net.WriteString( strReason )
  591. self:FireEvent()
  592. end
  593.  
  594. -- ----------------------------------------------------------------
  595. -- Ticket Netcode
  596. -- ----------------------------------------------------------------
  597. GM.Net:AddProtocol( "ticket", 5 )
  598.  
  599. --Player wants to ticket another player
  600. function GM.Net:RequestTicketPlayer( pPlayer, strReason, intPrice )
  601. self:NewEvent( "ticket", "gp" )
  602. net.WriteEntity( pPlayer )
  603. net.WriteString( strReason )
  604. net.WriteUInt( intPrice, 16 )
  605. self:FireEvent()
  606. end
  607.  
  608. --Players wants to leave a ticket on a car for the owner
  609. function GM.Net:RequestTicketCar( entVeh, strReason, intPrice )
  610. self:NewEvent( "ticket", "ge" )
  611. net.WriteEntity( entVeh )
  612. net.WriteString( strReason )
  613. net.WriteUInt( intPrice, 16 )
  614. self:FireEvent()
  615. end
  616.  
  617. --Player wants to pay off a ticket
  618. function GM.Net:RequestPayTicket( intTicketID )
  619. self:NewEvent( "ticket", "p" )
  620. net.WriteUInt( intTicketID, 8 )
  621. self:FireEvent()
  622. end
  623.  
  624. --Player wants to get a list of their unpaid tickets
  625. function GM.Net:RequestTicketList()
  626. self:NewEvent( "ticket", "rup" )
  627. self:FireEvent()
  628. end
  629.  
  630. --Server sent us a list of our unpaid tickets
  631. GM.Net:RegisterEventHandle( "ticket", "gt", function( intMsgLen, pPlayer )
  632. hook.Call( "GamemodeGetUnpaidTickets", GAMEMODE, net.ReadTable() )
  633. end )
  634.  
  635. -- ----------------------------------------------------------------
  636. -- Phone Netcode
  637. -- ----------------------------------------------------------------
  638. GM.Net:AddProtocol( "phone", 6 )
  639.  
  640. --Dial a number
  641. function GM.Net:DialPhoneNumber( strNumber )
  642. self:NewEvent( "phone", "dial" )
  643. net.WriteString( strNumber )
  644. self:FireEvent()
  645. end
  646.  
  647. --Player wants to end a call
  648. function GM.Net:HangUpPhone()
  649. self:NewEvent( "phone", "h_up" )
  650. self:FireEvent()
  651. end
  652.  
  653. --Player wants to accept an incoming call
  654. function GM.Net:AcceptCall()
  655. self:NewEvent( "phone", "accept" )
  656. self:FireEvent()
  657. end
  658.  
  659. --Server sent us an incoming call
  660. GM.Net:RegisterEventHandle( "phone", "inc", function( intMsgLen, pPlayer )
  661. hook.Call( "GamemodePhoneCallIncoming", GAMEMODE, net.ReadString() )
  662. end )
  663.  
  664. --Server is telling us our call went though and is now ringing
  665. GM.Net:RegisterEventHandle( "phone", "out", function( intMsgLen, pPlayer )
  666. hook.Call( "GamemodePhoneCallOutgoing", GAMEMODE, net.ReadString() )
  667. GAMEMODE.m_bPhoneCall = true
  668. end )
  669.  
  670. --Our call has started
  671. GM.Net:RegisterEventHandle( "phone", "start", function( intMsgLen, pPlayer )
  672. hook.Call( "GamemodePhoneCallStart", GAMEMODE, net.ReadString() )
  673. end )
  674.  
  675. --Our call has ended
  676. GM.Net:RegisterEventHandle( "phone", "end", function( intMsgLen, pPlayer )
  677. hook.Call( "GamemodePhoneCallEnd", GAMEMODE )
  678. GAMEMODE.m_bPhoneCall = false
  679. end )
  680.  
  681. --We dialed a bad number
  682. GM.Net:RegisterEventHandle( "phone", "err", function( intMsgLen, pPlayer )
  683. hook.Call( "GamemodePhoneBadNumber", GAMEMODE )
  684. end )
  685.  
  686. --We called a player that is already in a call with someone else
  687. GM.Net:RegisterEventHandle( "phone", "busy", function( intMsgLen, pPlayer )
  688. hook.Call( "GamemodePhoneBusy", GAMEMODE )
  689. end )
  690.  
  691. --TEXT MESSAGES
  692. -- -------------
  693.  
  694. --Player wants to send a message to someone
  695. function GM.Net:SendTextMessage( strNumber, strMsg )
  696. self:NewEvent( "phone", "s_txt" )
  697. net.WriteString( strNumber )
  698. net.WriteString( strMsg )
  699. self:FireEvent()
  700.  
  701. hook.Call( "GamemodePhoneSendTextMessage", GAMEMODE, strNumber, strMsg )
  702. end
  703.  
  704. --Player sent us a message
  705. GM.Net:RegisterEventHandle( "phone", "r_txt", function( intMsgLen, pPlayer )
  706. hook.Call( "GamemodePhoneGetTextMessage", GAMEMODE, net.ReadString(), net.ReadString() )
  707. end )
  708.  
  709. --SENDING IMAGES
  710. -- -------------
  711.  
  712. --Player wants to send an image to someone
  713. function GM.Net:SendImageMessage( strNumber, strImageData, strOrigPath, strOrigName )
  714. if self.m_bSendingImage then return end
  715. self.m_bSendingImage = true
  716.  
  717. self.m_strSendingData = strImageData
  718. self.m_intNumImageParts = math.ceil( #strImageData /65536 )
  719. self.m_intCurPart = 0
  720.  
  721. self:NewEvent( "phone", "s_jpg_header" )
  722. net.WriteString( strNumber )
  723. net.WriteUInt( self.m_intNumImageParts, 8 )
  724. self:FireEvent()
  725.  
  726. hook.Call( "GamemodePhoneSendImageMessage", GAMEMODE, strNumber, strImageData, strOrigPath, strOrigName )
  727. end
  728.  
  729. --Send the next part of the image data to the sever
  730. function GM.Net:SendImagePart()
  731. if self.m_intCurPart > self.m_intNumImageParts then return end
  732. self.m_intCurPart = self.m_intCurPart +1
  733.  
  734. local partData = self.m_strSendingData:sub(
  735. (self.m_intCurPart -1) *65536,
  736. self.m_intCurPart *65536
  737. )
  738.  
  739. self:NewEvent( "phone", "s_jpg_next_part" )
  740. net.WriteUInt( #partData, 32 )
  741. net.WriteData( partData, #partData )
  742. self:FireEvent()
  743. end
  744.  
  745. --Server wants the next part of the image data
  746. GM.Net:RegisterEventHandle( "phone", "s_jpg_next_part", function( intMsgLen, pPlayer )
  747. GAMEMODE.Net:SendImagePart()
  748. end )
  749.  
  750. --Server got all the parts of our image
  751. GM.Net:RegisterEventHandle( "phone", "s_jpg_done", function( intMsgLen, pPlayer )
  752. GAMEMODE.Net.m_bSendingImage = false
  753. end )
  754.  
  755. --GETTING IMAGES
  756. -- -------------
  757.  
  758. --Someone is sending us an image
  759. GM.Net:RegisterEventHandle( "phone", "r_jpg_header", function( intMsgLen, pPlayer )
  760. GAMEMODE.Net.m_bGettingImage = true
  761. GAMEMODE.Net.m_strGettingImageFrom = net.ReadString()
  762. GAMEMODE.Net.m_intNumGettingImageParts = net.ReadUInt( 8 )
  763. GAMEMODE.Net.m_intCurGettingImagePart = 0
  764. GAMEMODE.Net.m_strGettingImageData = ""
  765.  
  766. GAMEMODE.Net:RequestNextImagePart()
  767. end )
  768.  
  769. --Ask the server for the next part of the incoming image data
  770. function GM.Net:RequestNextImagePart()
  771. self:NewEvent( "phone", "r_jpg_next_part" )
  772. self:FireEvent()
  773. end
  774.  
  775. --Server has sent us the next part of the image data
  776. GM.Net:RegisterEventHandle( "phone", "r_jpg_next_part", function( intMsgLen, pPlayer )
  777. GAMEMODE.Net.m_intCurGettingImagePart = GAMEMODE.Net.m_intCurGettingImagePart +1
  778.  
  779. local size = net.ReadUInt( 32 )
  780. local partData = net.ReadData( size )
  781. GAMEMODE.Net.m_strGettingImageData = GAMEMODE.Net.m_strGettingImageData.. partData
  782.  
  783. if GAMEMODE.Net.m_intCurGettingImagePart >= GAMEMODE.Net.m_intNumGettingImageParts then
  784. GAMEMODE.Net.m_bGettingImage = false
  785. hook.Call( "GamemodePhoneGetImageMessage", GAMEMODE, GAMEMODE.Net.m_strGettingImageFrom, GAMEMODE.Net.m_strGettingImageData )
  786. GAMEMODE.Net.m_strGettingImageData = nil
  787. end
  788. end )
  789.  
  790. -- ----------------------------------------------------------------
  791. -- Drugs Netcode
  792. -- ----------------------------------------------------------------
  793. GM.Net:AddProtocol( "drugs", 7 )
  794.  
  795. GM.Net:RegisterEventHandle( "drugs", "n", function( intMsgLen, pPlayer )
  796. local effectName, idx = net.ReadString(), net.ReadUInt( 16 )
  797. local time, len, power = net.ReadDouble(), net.ReadDouble(), net.ReadDouble()
  798. GAMEMODE.Drugs:ApplyEffect( effectName, idx, time, len, power )
  799. end )
  800.  
  801. GM.Net:RegisterEventHandle( "drugs", "r", function( intMsgLen, pPlayer )
  802. GAMEMODE.Drugs:RemoveEffect( net.ReadString(), net.ReadUInt( 16 ) )
  803. end )
  804.  
  805. GM.Net:RegisterEventHandle( "drugs", "c", function( intMsgLen, pPlayer )
  806. GAMEMODE.Drugs:ClearDrugEffects()
  807. end )
  808.  
  809. -- ----------------------------------------------------------------
  810. -- Buddy Netcode
  811. -- ----------------------------------------------------------------
  812. GM.Net:AddProtocol( "buddy", 8 )
  813.  
  814. GM.Net:RegisterEventHandle( "buddy", "f_upd", function( intMsgLen, pPlayer )
  815. local num = net.ReadUInt( 16 )
  816. local buddies = {}
  817.  
  818. if num > 0 then
  819. for i = 1, num do
  820. buddies[net.ReadUInt( 32 )] = net.ReadTable()
  821. end
  822. end
  823.  
  824. GAMEMODE.Buddy:SetBuddyTable( buddies )
  825. hook.Call( "GamemodeOnBuddyUpdate", GAMEMODE )
  826. end )
  827.  
  828. GM.Net:RegisterEventHandle( "buddy", "upd", function( intMsgLen, pPlayer )
  829. local buddyID, hasData = net.ReadUInt( 32 ), net.ReadBit() == 1
  830. local data
  831.  
  832. if hasData then data = net.ReadTable() end
  833. GAMEMODE.Buddy:GetBuddyTable()[buddyID] = hasData and data or nil
  834. hook.Call( "GamemodeOnBuddyUpdate", GAMEMODE )
  835. end )
  836.  
  837. function GM.Net:RequestEditBuddyKey( intBuddyID, strKey, bValue )
  838. self:NewEvent( "buddy", "edit_key" )
  839. net.WriteUInt( intBuddyID, 32 )
  840. net.WriteString( strKey )
  841. net.WriteBit( bValue )
  842. self:FireEvent()
  843. end
  844.  
  845. function GM.Net:RequestAddBuddy( intBuddyID )
  846. self:NewEvent( "buddy", "add" )
  847. net.WriteUInt( intBuddyID, 32 )
  848. self:FireEvent()
  849. end
  850.  
  851. function GM.Net:RequestRemoveBuddy( intBuddyID )
  852. self:NewEvent( "buddy", "del" )
  853. net.WriteUInt( intBuddyID, 32 )
  854. self:FireEvent()
  855. end
  856.  
  857. -- ----------------------------------------------------------------
  858. -- Property Netcode
  859. -- ----------------------------------------------------------------
  860. GM.Net:AddProtocol( "property", 9 )
  861.  
  862. function GM.Net:RequestBuyProperty( strName )
  863. self:NewEvent( "property", "b" )
  864. net.WriteString( strName )
  865. self:FireEvent()
  866. end
  867.  
  868. function GM.Net:RequestSellProperty( strName )
  869. self:NewEvent( "property", "s" )
  870. net.WriteString( strName )
  871. self:FireEvent()
  872. end
  873.  
  874. --[[function GM.Net:RequestSetDoorTitle( strText )
  875. self:NewEvent( "property", "t" )
  876. net.WriteUInt( GAMEMODE.Property.NET_SET_TITLE, 8 )
  877. net.WriteString( strText )
  878. self:FireEvent()
  879. end]]--
  880.  
  881. function GM.Net:ReadProperty()
  882. local tbl = {}
  883. tbl.Name = net.ReadString()
  884. tbl.Owner = net.ReadEntity()
  885. tbl.ID = net.ReadUInt( 16 )
  886. tbl.Doors = {}
  887.  
  888. local count = net.ReadUInt( 8 )
  889. if count == 0 then return end
  890. for i = 1, count do
  891. local idx = net.ReadUInt( 32 )
  892. tbl.Doors[idx] = true
  893. GAMEMODE.Property.m_tblDoorCache[idx] = tbl
  894. end
  895.  
  896. GAMEMODE.Property.m_tblProperties[tbl.Name].Doors = tbl.Doors
  897. GAMEMODE.Property.m_tblProperties[tbl.Name].Owner = tbl.Owner
  898. GAMEMODE.Property.m_tblProperties[tbl.Name].ID = tbl.ID
  899. end
  900.  
  901. GM.Net:RegisterEventHandle( "property", "upd", function( intMsgLen, pPlayer )
  902. GAMEMODE.Net:ReadProperty()
  903. end )
  904.  
  905. GM.Net:RegisterEventHandle( "property", "fupd", function( intMsgLen, pPlayer )
  906. GAMEMODE.Property.m_tblDoorCache = {}
  907. local count = net.ReadUInt( 16 )
  908. if count == 0 then return end
  909.  
  910. for i = 1, count do
  911. GAMEMODE.Net:ReadProperty()
  912. end
  913. end )
  914.  
  915. --[[GM.Net:RegisterEventHandle( "property", "dmn", function( intMsgLen, pPlayer )
  916. --!REWRITE THIS FUNCTION!--
  917. SRP_CS_OpenDoorOptions( net.ReadEntity(), net.ReadTable() )
  918. --!REWRITE THIS FUNCTION!--
  919. end )]]--
  920.  
  921. -- ----------------------------------------------------------------
  922. -- Car Radios Netcode
  923. -- ----------------------------------------------------------------
  924. GM.Net:AddProtocol( "cradio", 10 )
  925.  
  926. GM.Net:RegisterEventHandle( "cradio", "p", function( intMsgLen, pPlayer )
  927. local ent, id = net.ReadEntity(), net.ReadUInt( 32 )
  928. local data = GAMEMODE.CarRadio.m_tblStations[id]
  929. GAMEMODE.CarRadio:StartStream( ent, data.Url.. (data.NoConcat and "" or id) )
  930. end )
  931.  
  932. GM.Net:RegisterEventHandle( "cradio", "pc", function( intMsgLen, pPlayer )
  933. GAMEMODE.CarRadio:StartStream( net.ReadEntity(), "http://yp.shoutcast.com/sbin/tunein-station.pls?id=".. net.ReadUInt(32) )
  934. end )
  935.  
  936. GM.Net:RegisterEventHandle( "cradio", "s", function( intMsgLen, pPlayer )
  937. GAMEMODE.CarRadio:StopStream( net.ReadEntity() )
  938. end )
  939.  
  940. GM.Net:RegisterEventHandle( "cradio", "fupd", function( intMsgLen, pPlayer )
  941. local num = net.ReadUInt( 16 )
  942. if num == 0 then return end
  943.  
  944. for i = 1, num do
  945. local ent, id = net.ReadEntity(), net.ReadUInt( 32 )
  946. local url = GAMEMODE.CarRadio.m_tblCarStreams[id] and GAMEMODE.CarRadio.m_tblStations[id].Url.. id or nil
  947. if not url then url = "http://yp.shoutcast.com/sbin/tunein-station.pls?id=".. id end
  948. GAMEMODE.CarRadio:StartStream( ent, url )
  949. end
  950. end )
  951.  
  952. function GM.Net:RequestPlayCarRadio( intID )
  953. self:NewEvent( "cradio", "rp" )
  954. net.WriteUInt( intID, 32 )
  955. self:FireEvent()
  956. end
  957.  
  958. function GM.Net:RequestPlayCustomCarRadio( intID )
  959. if not intID then return end
  960. self:NewEvent( "cradio", "rpc" )
  961. net.WriteUInt( intID, 32 )
  962. self:FireEvent()
  963. end
  964.  
  965. function GM.Net:RequestStopCarRadio()
  966. self:NewEvent( "cradio", "rs" )
  967. self:FireEvent()
  968. end
  969.  
  970. -- ----------------------------------------------------------------
  971. -- Item Radios Netcode
  972. -- ----------------------------------------------------------------
  973. GM.Net:AddProtocol( "iradio", 11 )
  974.  
  975. GM.Net:RegisterEventHandle( "iradio", "p", function( intMsgLen, pPlayer )
  976. local ent, id = net.ReadEntity(), net.ReadUInt( 32 )
  977. local data = GAMEMODE.CarRadio.m_tblStations[id]
  978. GAMEMODE.PropRadio:StartStream( ent, data.Url.. (data.NoConcat and "" or id) )
  979. end )
  980.  
  981. GM.Net:RegisterEventHandle( "iradio", "pc", function( intMsgLen, pPlayer )
  982. GAMEMODE.PropRadio:StartStream( net.ReadEntity(), "http://yp.shoutcast.com/sbin/tunein-station.pls?id=".. net.ReadUInt(32) )
  983. end )
  984.  
  985. GM.Net:RegisterEventHandle( "iradio", "s", function( intMsgLen, pPlayer )
  986. GAMEMODE.PropRadio:StopStream( net.ReadEntity() )
  987. end )
  988.  
  989. GM.Net:RegisterEventHandle( "iradio", "m", function( intMsgLen, pPlayer )
  990. GAMEMODE.Gui:ShowPropRadioMenu()
  991. end )
  992.  
  993. GM.Net:RegisterEventHandle( "iradio", "fupd", function( intMsgLen, pPlayer )
  994. local num = net.ReadUInt( 16 )
  995. if num == 0 then return end
  996.  
  997. for i = 1, num do
  998. local ent, id = net.ReadEntity(), net.ReadUInt( 32 )
  999. local url = GAMEMODE.PropRadio.m_tblPropStreams[id] and GAMEMODE.PropRadio.m_tblPropStreams[id].Url.. id or nil
  1000. if not url then url = "http://yp.shoutcast.com/sbin/tunein-station.pls?id=".. id end
  1001. GAMEMODE.PropRadio:StartStream( ent, url )
  1002. end
  1003. end )
  1004.  
  1005. function GM.Net:RequestPlayPropRadio( eEnt, intID )
  1006. self:NewEvent( "iradio", "rp" )
  1007. net.WriteEntity( eEnt )
  1008. net.WriteUInt( intID, 32 )
  1009. self:FireEvent()
  1010. end
  1011.  
  1012. function GM.Net:RequestPlayCustomPropRadio( eEnt, intID )
  1013. self:NewEvent( "iradio", "rpc" )
  1014. net.WriteEntity( eEnt )
  1015. net.WriteUInt( intID, 32 )
  1016. self:FireEvent()
  1017. end
  1018.  
  1019. function GM.Net:RequestStopPropRadio( eEnt )
  1020. self:NewEvent( "iradio", "rs" )
  1021. net.WriteEntity( eEnt )
  1022. self:FireEvent()
  1023. end
  1024.  
  1025. -- ----------------------------------------------------------------
  1026. -- Chat Radios Netcode
  1027. -- ----------------------------------------------------------------
  1028. GM.Net:AddProtocol( "chat_radio", 12 )
  1029.  
  1030. function GM.Net:RequestChangeChatRadioChannel( intNewChanID )
  1031. self:NewEvent( "chat_radio", "rs" )
  1032. net.WriteUInt( intNewChanID, 8 )
  1033. self:FireEvent()
  1034. end
  1035.  
  1036. function GM.Net:RequestMuteChatRadio( bMuted )
  1037. self:NewEvent( "chat_radio", "rm" )
  1038. net.WriteBit( bMuted )
  1039. self:FireEvent()
  1040. end
  1041.  
  1042. GM.Net:RegisterEventHandle( "chat_radio", "c", function( intMsgLen, pPlayer )
  1043. if net.ReadBit() == 0 then
  1044. GAMEMODE.ChatRadio:SetCurrentChannel( nil )
  1045. return
  1046. end
  1047.  
  1048. GAMEMODE.ChatRadio:SetCurrentChannel( net.ReadUInt(8) )
  1049. end )
  1050.  
  1051. -- ----------------------------------------------------------------
  1052. -- Weather Netcode
  1053. -- ----------------------------------------------------------------
  1054. GM.Net:AddProtocol( "weather", 13 )
  1055.  
  1056. GM.Net:RegisterEventHandle( "weather", "b_str", function( intMsgLen, pPlayer )
  1057. GAMEMODE.Weather:StartType( net.ReadString(), net.ReadUInt(32), net.ReadUInt(16) )
  1058. end )
  1059.  
  1060. GM.Net:RegisterEventHandle( "weather", "b_sto", function( intMsgLen, pPlayer )
  1061. GAMEMODE.Weather:StopType( net.ReadString() )
  1062. end )
  1063.  
  1064. GM.Net:RegisterEventHandle( "weather", "fupd", function( intMsgLen, pPlayer )
  1065. local num = net.ReadUInt( 8 )
  1066. if num == 0 then return end
  1067.  
  1068. for i = 1, num do
  1069. GAMEMODE.Weather:StartType( net.ReadString(), net.ReadUInt(32), net.ReadUInt(16) )
  1070. end
  1071. end )
  1072.  
  1073. GM.Net:RegisterEventHandle( "weather", "t", function( intMsgLen, pPlayer )
  1074. GAMEMODE.DayNight:SetTime( net.ReadUInt(32) )
  1075. end )
  1076.  
  1077. GM.Net:RegisterEventHandle( "weather", "d", function( intMsgLen, pPlayer )
  1078. GAMEMODE.DayNight:SetDay( net.ReadUInt(8) )
  1079. end )
  1080.  
  1081. GM.Net:RegisterEventHandle( "weather", "fupd_time", function( intMsgLen, pPlayer )
  1082. GAMEMODE.DayNight:SetDay( net.ReadUInt(8) )
  1083. GAMEMODE.DayNight:SetTime( net.ReadUInt(32) )
  1084. end )
  1085.  
  1086. -- ----------------------------------------------------------------
  1087. -- Economy Netcode
  1088. -- ----------------------------------------------------------------
  1089. GM.Net:AddProtocol( "econ", 14 )
  1090.  
  1091. GM.Net:RegisterEventHandle( "econ", "fupd_t", function( intMsgLen, pPlayer )
  1092. local numTaxes = net.ReadUInt( 8 )
  1093. for i = 1, numTaxes do
  1094. GAMEMODE.Econ:SetTaxRate( net.ReadString(), net.ReadFloat() )
  1095. end
  1096. end )
  1097.  
  1098. GM.Net:RegisterEventHandle( "econ", "upd_t", function( intMsgLen, pPlayer )
  1099. GAMEMODE.Econ:SetTaxRate( net.ReadString(), net.ReadFloat() )
  1100. end )
  1101.  
  1102. GM.Net:RegisterEventHandle( "econ", "upd_tb", function( intMsgLen, pPlayer )
  1103. local numTaxes = net.ReadUInt( 8 )
  1104. for i = 1, numTaxes do
  1105. GAMEMODE.Econ:SetTaxRate( net.ReadString(), net.ReadFloat() )
  1106. end
  1107. end )
  1108.  
  1109. GM.Net:RegisterEventHandle( "econ", "fupd_b", function( intMsgLen, pPlayer )
  1110. local numBills = net.ReadUInt( 8 )
  1111. if numBills <= 0 then
  1112. g_GamemodeUnPaidBills = {}
  1113. hook.Call( "GamemodeOnBillsUpdated", GAMEMODE, g_GamemodeUnPaidBills )
  1114. return
  1115. end
  1116.  
  1117. local bills = {}
  1118. for i = 1, numBills do
  1119. bills[net.ReadUInt( 8 )] = {
  1120. Type = net.ReadString(),
  1121. Name = net.ReadString(),
  1122. Cost = net.ReadUInt( 16 ),
  1123. LifeTime = net.ReadUInt( 32 ),
  1124. IssueTime = net.ReadUInt( 32 ),
  1125. MetaData = net.ReadBool() and net.ReadTable() or {},
  1126. }
  1127. end
  1128.  
  1129. g_GamemodeUnPaidBills = bills
  1130. hook.Call( "GamemodeOnBillsUpdated", GAMEMODE, g_GamemodeUnPaidBills )
  1131. end )
  1132.  
  1133. function GM.Net:RequestPayBill( intBillIDX )
  1134. self:NewEvent( "econ", "pay_b" )
  1135. net.WriteUInt( intBillIDX, 8 )
  1136. self:FireEvent()
  1137. end
  1138.  
  1139. function GM.Net:RequestBillUpdate()
  1140. self:NewEvent( "econ", "rbupd" )
  1141. self:FireEvent()
  1142. end
  1143.  
  1144. function GM.Net:RequestPayAllBills()
  1145. self:NewEvent( "econ", "pay_a" )
  1146. self:FireEvent()
  1147. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement