Guest User

Untitled

a guest
Sep 1st, 2018
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.97 KB | None | 0 0
  1. --[[
  2. Name: sv_player.lua
  3. For: TalosLife
  4. By: TalosLife
  5. ]]--
  6.  
  7. GM.Player = (GAMEMODE or GM).Player or {}
  8. GM.Player.m_tblPlayerData = (GAMEMODE or GM).Player.m_tblPlayerData or {}
  9.  
  10. function GM.Player:InitialSpawn( pPlayer )
  11. end
  12.  
  13. function GM.Player:Spawn( pPlayer )
  14. --This player just spawned or hasn't picked a character
  15. if not pPlayer.m_bGamemodeDataLoaded or not GAMEMODE.Char:GetPlayerCharacter( pPlayer ) then
  16. GAMEMODE:PlayerSpawnAsSpectator( pPlayer )
  17. pPlayer:Freeze( true )
  18. pPlayer:AllowFlashlight( false )
  19. return
  20. end
  21.  
  22. pPlayer:UnSpectate()
  23. pPlayer:Freeze( false )
  24. pPlayer:InitializeHands( "male07" )
  25. pPlayer:AllowFlashlight( true )
  26. self:UpdatePlayerMoveSpeed( pPlayer )
  27.  
  28. if not GAMEMODE.Jobs:PlayerHasJob( pPlayer ) then
  29. GAMEMODE.Jobs:SetPlayerJob( pPlayer, JOB_CIVILIAN, true ) --This shouldn't be needed, but just in case
  30. else --Setjob calls loadout, so do this so it doesn't happen twice in this case
  31. hook.Call( "PlayerLoadout", GAMEMODE, pPlayer )
  32.  
  33. if GAMEMODE.Jobs:GetPlayerJob( pPlayer ).PlayerSetModel then
  34. GAMEMODE.Jobs:GetPlayerJob( pPlayer ):PlayerSetModel( pPlayer )
  35. else --fallback to civ
  36. GAMEMODE.Jobs:GetJobByID( JOB_CIVILIAN ):PlayerSetModel( pPlayer )
  37. end
  38. end
  39.  
  40. --Find a spot to put them
  41. local foundSpot
  42. for k, v in pairs( GAMEMODE.Config.SpawnPoints ) do
  43. local found = ents.FindInSphere( v, 48 )
  44. for idx, ent in pairs( found ) do
  45. if GAMEMODE.Util.m_tblIgnoreSpawnEnts[ent:GetClass()] then
  46. found[idx] = nil
  47. end
  48. end
  49.  
  50. if table.Count( found ) == 0 then foundSpot = v break end
  51. end
  52.  
  53. if not foundSpot then
  54. local vec, _ = table.Random( GAMEMODE.Config.SpawnPoints )
  55. foundSpot = vec
  56. end
  57.  
  58. pPlayer:SetPos( foundSpot )
  59. pPlayer:SetHealth( 100 )
  60. end
  61.  
  62. function GM.Player:Loadout( pPlayer )
  63. local job = GAMEMODE.Jobs:GetPlayerJob( pPlayer )
  64. if not job then return end
  65.  
  66. for k, v in pairs( GAMEMODE.Config.GlobalLoadout ) do
  67. pPlayer:Give( v )
  68. end
  69.  
  70. job:PlayerLoadout( pPlayer )
  71. GAMEMODE.Inv:PlayerLoadout( pPlayer )
  72.  
  73. pPlayer:SelectWeapon( "weapon_srphands" )
  74. end
  75.  
  76. function GM.Player:PlayerDeath( pPlayer )
  77. self:ClearMoveSpeedModifiers( pPlayer )
  78. end
  79.  
  80. -- ----------------------------------------------------------------
  81. -- Player move speed modifiers
  82. -- ----------------------------------------------------------------
  83. function GM.Player:UpdatePlayerMoveSpeed( pPlayer )
  84. local newWalk, newRun = GAMEMODE.Config.DefWalkSpeed, GAMEMODE.Config.DefRunSpeed
  85.  
  86. if pPlayer.m_tblSpeedFlags then
  87. for k, v in pairs( pPlayer.m_tblSpeedFlags ) do
  88. newWalk = newWalk +v[1]
  89. newRun = newRun +v[2]
  90. end
  91. end
  92.  
  93. if newWalk > newRun then
  94. newRun = newWalk
  95. end
  96.  
  97. pPlayer:SetWalkSpeed( math.max(newWalk, 45) )
  98. pPlayer:SetRunSpeed( math.max(newRun, 45) )
  99. end
  100.  
  101. function GM.Player:ModifyMoveSpeed( pPlayer, strModifierID, intWalkMod, intRunMod )
  102. if not pPlayer.m_tblSpeedFlags then pPlayer.m_tblSpeedFlags = {} end
  103. pPlayer.m_tblSpeedFlags[strModifierID] = { intWalkMod, intRunMod }
  104. self:UpdatePlayerMoveSpeed( pPlayer )
  105. end
  106.  
  107. function GM.Player:GetMoveSpeedModifier( pPlayer, strModifierID )
  108. if not pPlayer.m_tblSpeedFlags then return end
  109. return pPlayer.m_tblSpeedFlags[strModifierID]
  110. end
  111.  
  112. function GM.Player:IsMoveSpeedModifierActive( pPlayer, strModifierID )
  113. if not pPlayer.m_tblSpeedFlags then return false end
  114. return pPlayer.m_tblSpeedFlags[strModifierID] and true
  115. end
  116.  
  117. function GM.Player:RemoveMoveSpeedModifier( pPlayer, strModifierID, bNoUpdate )
  118. if not pPlayer.m_tblSpeedFlags then return end
  119. pPlayer.m_tblSpeedFlags[strModifierID] = nil
  120. if not bNoUpdate then self:UpdatePlayerMoveSpeed( pPlayer ) end
  121. end
  122.  
  123. function GM.Player:ClearMoveSpeedModifiers( pPlayer )
  124. if not pPlayer.m_tblSpeedFlags then return end
  125. for k, v in pairs( pPlayer.m_tblSpeedFlags ) do
  126. self:RemoveMoveSpeedModifier( pPlayer, k, true )
  127. end
  128.  
  129. self:UpdatePlayerMoveSpeed( pPlayer )
  130. end
  131.  
  132. -- ----------------------------------------------------------------
  133. -- Player gamemode data
  134. -- ----------------------------------------------------------------
  135. function GM.Player:PlayerReadyForData( pPlayer )
  136. if pPlayer.m_bGamemodeDataLoaded then return end
  137. pPlayer.m_bGamemodeDataLoaded = true
  138.  
  139. GAMEMODE:PrintDebug( 0, tostring(pPlayer).. " is ready to load game data." )
  140.  
  141. self:LoadGameData( pPlayer, function()
  142. if not IsValid( pPlayer ) then return end --wow, lamer
  143. GAMEMODE:PrintDebug( 0, tostring(pPlayer).. " had their game data loaded." )
  144. hook.Call( "GamemodeOnPlayerReady", GAMEMODE, pPlayer )
  145.  
  146. --send them all of their characters in a short format for view in the selection menu
  147. GAMEMODE.Net:SendPlayerCharacters( pPlayer )
  148. end )
  149. end
  150.  
  151. function GM.Player:GetData( strSID64 )
  152. return self.m_tblPlayerData[strSID64]
  153. end
  154.  
  155. function GM.Player:LoadGameData( pPlayer, funcCallback )
  156. local dataProto = {
  157. Characters = {}, --Load this
  158. GameVars = {}, --Shared vars from server to this client
  159. SharedGameVars = {}, --Shared vars from server to all clients about this client
  160. }
  161.  
  162. self.m_tblPlayerData[pPlayer:SteamID64()] = dataProto
  163.  
  164. GAMEMODE.SQL:LoadPlayerID( pPlayer, function( intID )
  165. if not IsValid( pPlayer ) then return end
  166.  
  167. pPlayer:SetPlayerSQLID( intID )
  168. GAMEMODE.SQL:LoadPlayerCharacters( pPlayer, function( tblCharacters )
  169. if not IsValid( pPlayer ) then return end
  170. self.m_tblPlayerData[pPlayer:SteamID64()].Characters = tblCharacters
  171. self:DefineGameVars( pPlayer )
  172. funcCallback()
  173. end )
  174. end )
  175. end
  176.  
  177. function GM.Player:DefineGameVars( pPlayer )
  178. hook.Call( "GamemodeDefineGameVars", {}, pPlayer )
  179. end
  180.  
  181. --Game vars, these network only when changed, and are defined first with a type for better networking
  182. --Game vars must be defind on the server AND the client!
  183. function GM.Player:DefineGameVar( pPlayer, strVar, vaValue, strType, bDontNetwork )
  184. if not pPlayer:GetGamemodeData() then return end
  185. pPlayer:GetGamemodeData().GameVars[strVar] = { Type = strType, Value = vaValue, Defualt = vaValue }
  186.  
  187. if not bDontNetwork then
  188. GAMEMODE.Net:UpdateGameVar( pPlayer, strVar )
  189. end
  190.  
  191. GAMEMODE:PrintDebug( 0, tostring(pPlayer).. "::Game var ".. strVar.. " was defined." )
  192. end
  193.  
  194. function GM.Player:GetGameVarType( pPlayer, strVar )
  195. if not pPlayer:GetGamemodeData() then return end
  196. if not pPlayer:GetGamemodeData().GameVars[strVar] then return end
  197. return pPlayer:GetGamemodeData().GameVars[strVar].Type
  198. end
  199.  
  200. function GM.Player:GetGameVar( pPlayer, strVar, vaFallback )
  201. if not pPlayer:GetGamemodeData() then return vaFallback end
  202. if not pPlayer:GetGamemodeData().GameVars[strVar] then return vaFallback end
  203. return pPlayer:GetGamemodeData().GameVars[strVar].Value
  204. end
  205.  
  206. function GM.Player:SetGameVar( pPlayer, strVar, vaValue, bDontNetwork )
  207. if not pPlayer:GetGamemodeData() then return end
  208. if not pPlayer:GetGamemodeData().GameVars[strVar] then return end
  209. pPlayer:GetGamemodeData().GameVars[strVar].Value = vaValue
  210.  
  211. if not bDontNetwork then
  212. GAMEMODE.Net:UpdateGameVar( pPlayer, strVar )
  213. end
  214.  
  215. GAMEMODE:PrintDebug( 0, tostring(pPlayer).. "::Game var ".. strVar.. " was set to ".. tostring(vaValue) )
  216. end
  217.  
  218. --Shared game vars, these network only when changed, and are defined first with a type for better networking
  219. --Shared game vars must be defind on the server AND the client!
  220. --Shared game vars are sent to ALL clients
  221. function GM.Player:DefineSharedGameVar( pPlayer, strVar, vaValue, strType, bDontNetwork )
  222. if not pPlayer:GetGamemodeData() then return end
  223. pPlayer:GetGamemodeData().SharedGameVars[strVar] = { Type = strType, Value = vaValue, Defualt = vaValue }
  224.  
  225. if not bDontNetwork then
  226. GAMEMODE.Net:UpdateSharedGameVar( pPlayer, strVar )
  227. end
  228.  
  229. GAMEMODE:PrintDebug( 0, tostring(pPlayer).. "::Shared game var ".. strVar.. " was defined." )
  230. end
  231.  
  232. function GM.Player:GetSharedGameVarType( pPlayer, strVar )
  233. if not pPlayer:GetGamemodeData() then return end
  234. if not pPlayer:GetGamemodeData().SharedGameVars[strVar] then return end
  235. return pPlayer:GetGamemodeData().SharedGameVars[strVar].Type
  236. end
  237.  
  238. function GM.Player:GetSharedGameVar( pPlayer, strVar, vaFallback )
  239. if not pPlayer:GetGamemodeData() then return vaFallback end
  240. if not pPlayer:GetGamemodeData().SharedGameVars[strVar] then return vaFallback end
  241. return pPlayer:GetGamemodeData().SharedGameVars[strVar].Value
  242. end
  243.  
  244. function GM.Player:SetSharedGameVar( pPlayer, strVar, vaValue, bDontNetwork )
  245. if not pPlayer:GetGamemodeData() then return end
  246. if not pPlayer:GetGamemodeData().SharedGameVars[strVar] then return end
  247. pPlayer:GetGamemodeData().SharedGameVars[strVar].Value = vaValue
  248.  
  249. if not bDontNetwork then
  250. GAMEMODE.Net:UpdateSharedGameVar( pPlayer, strVar )
  251. end
  252.  
  253. GAMEMODE:PrintDebug( 0, tostring(pPlayer).. "::Shared game var ".. strVar.. " was set to ".. tostring(vaValue) )
  254. end
  255.  
  256. -- ----------------------------------------------------------------
  257. -- Player meta functions
  258. -- ----------------------------------------------------------------
  259. local pmeta = debug.getregistry().Player
  260. function pmeta:GetGamemodeData()
  261. return GAMEMODE.Player:GetData( self:SteamID64() )
  262. end
  263.  
  264. function pmeta:GetCharacters()
  265. return GAMEMODE.Char:GetPlayerCharacters( self )
  266. end
  267.  
  268. function pmeta:GetCharacter()
  269. return GAMEMODE.Char:GetPlayerCharacter( self )
  270. end
  271.  
  272. function pmeta:HasValidCharacter()
  273. if not self:GetGamemodeData() then return false end
  274. return GAMEMODE.Char:GetPlayerCharacter( self ) and true or false
  275. end
  276.  
  277. function pmeta:GetCharacterID()
  278. if not self:GetGamemodeData() then return end
  279. return self:GetGamemodeData().SelectedCharacter
  280. end
  281.  
  282. function pmeta:GetInventory()
  283. if not self:HasValidCharacter() then return end
  284. return self:GetCharacter().Inventory
  285. end
  286.  
  287. function pmeta:GetEquipment()
  288. if not self:HasValidCharacter() then return end
  289. return self:GetCharacter().Equipped
  290. end
  291.  
  292. function pmeta:GetEquipSlot( strSlotName )
  293. if not self:HasValidCharacter() then return end
  294. return self:GetCharacter().Equipped[strSlotName]
  295. end
  296.  
  297. function pmeta:GetMoney()
  298. if not self:HasValidCharacter() then return end
  299. return self:GetCharacter().Money.Wallet
  300. end
  301.  
  302. function pmeta:AddMoney( intAmount )
  303. if not self:HasValidCharacter() then return false end
  304. local char = self:GetGamemodeData().Characters[self:GetCharacterID()]
  305. char.Money.Wallet = char.Money.Wallet +intAmount
  306. GAMEMODE.Player:SetGameVar( self, "money_wallet", char.Money.Wallet )
  307. GAMEMODE.SQL:MarkDiffDirty( self, "money_wallet" )
  308.  
  309. return true
  310. end
  311.  
  312. function pmeta:TakeMoney( intAmount )
  313. if not self:HasValidCharacter() then return false end
  314. local char = self:GetGamemodeData().Characters[self:GetCharacterID()]
  315.  
  316. if char.Money.Wallet -intAmount < 0 then return false end
  317. char.Money.Wallet = char.Money.Wallet -intAmount
  318. GAMEMODE.Player:SetGameVar( self, "money_wallet", char.Money.Wallet )
  319. GAMEMODE.SQL:MarkDiffDirty( self, "money_wallet" )
  320.  
  321. return true
  322. end
  323.  
  324. function pmeta:CanAfford( intAmount )
  325. if not self:HasValidCharacter() then return false end
  326. return self:GetMoney() -intAmount >= 0
  327. end
  328.  
  329. function pmeta:GetBankMoney()
  330. if not self:HasValidCharacter() then return end
  331. return self:GetCharacter().Money.Bank
  332. end
  333.  
  334. function pmeta:AddBankMoney( intAmount )
  335. if not self:HasValidCharacter() then return false end
  336. local char = self:GetGamemodeData().Characters[self:GetCharacterID()]
  337. char.Money.Bank = char.Money.Bank +intAmount
  338. GAMEMODE.Player:SetGameVar( self, "money_bank", char.Money.Bank )
  339. GAMEMODE.SQL:MarkDiffDirty( self, "money_bank" )
  340.  
  341. return true
  342. end
  343.  
  344. function pmeta:TakeBankMoney( intAmount )
  345. if not self:HasValidCharacter() then return false end
  346. local char = self:GetGamemodeData().Characters[self:GetCharacterID()]
  347.  
  348. if char.Money.Bank -intAmount < 0 then return false end
  349. char.Money.Bank = char.Money.Bank -intAmount
  350. GAMEMODE.Player:SetGameVar( self, "money_bank", char.Money.Bank )
  351. GAMEMODE.SQL:MarkDiffDirty( self, "money_bank" )
  352.  
  353. return true
  354. end
  355.  
  356. function pmeta:GetTalkingNPC()
  357. return self.m_entTalkingNPC
  358. end
  359.  
  360. function pmeta:WithinTalkingRange()
  361. if not IsValid( self:GetTalkingNPC() ) then return false end
  362. return self:GetPos():Distance( self:GetTalkingNPC():GetPos() ) <= 200
  363. end
  364.  
  365. function pmeta:AddNote( strMsg, intIcon, intDuration )
  366. GAMEMODE.Net:SendHint( self, strMsg, intIcon, intDuration )
  367. end
  368.  
  369. function pmeta:IsIncapacitated()
  370. if not self:Alive() then return true end
  371. if self:IsRagdolled() then return true end
  372. if self:HasWeapon( "weapon_handcuffed" ) or self:HasWeapon( "weapon_ziptied" ) then return true end
  373. if GAMEMODE.Jail:IsPlayerInJail( self ) then return true end
  374. return false
  375. end
  376.  
  377. g_OldNick = g_OldNick or pmeta.Nick
  378. pmeta.RealNick = g_OldNick
  379. function pmeta:Nick()
  380. local first = GAMEMODE.Player:GetSharedGameVar( self, "name_first" )
  381. local last = GAMEMODE.Player:GetSharedGameVar( self, "name_last" )
  382.  
  383. if not first or first == "" then
  384. return g_OldNick( self )
  385. else
  386. return first.. " ".. last
  387. end
  388. end
  389.  
  390. g_OldName = g_OldName or pmeta.Name
  391. pmeta.RealName = g_OldNick
  392. function pmeta:Name()
  393. local first = GAMEMODE.Player:GetSharedGameVar( self, "name_first" )
  394. local last = GAMEMODE.Player:GetSharedGameVar( self, "name_last" )
  395.  
  396. if not first or first == "" then
  397. return g_OldName( self )
  398. else
  399. return first.. " ".. last
  400. end
  401. end
  402. --- THIS IS GSPEAK 2 WORK
  403.  
  404. g_OldGetName = g_OldGetName or pmeta.GetName
  405. pmeta.RealGetName = g_OldGetName
  406. function pmeta:GetName()
  407. local first = GAMEMODE.Player:GetSharedGameVar( self, "name_first" )
  408. local last = GAMEMODE.Player:GetSharedGameVar( self, "name_last" )
  409.  
  410. if not first or first == "" then
  411. return g_OldGetName( self )
  412. else
  413. return first.. " ".. last
  414. end
  415. end
  416.  
  417. -- THIS IS GSPEAK 2 WORK
  418.  
  419. --[[g_IsSuperAdmin = g_IsSuperAdmin or pmeta.IsSuperAdmin
  420. function pmeta:IsSuperAdmin( ... )
  421. if self:CheckGroup( "community_manager" ) then
  422. return true
  423. end
  424.  
  425. return g_IsSuperAdmin( self, ... )
  426. end]]--
  427.  
  428. g_CheckGroup = g_CheckGroup or pmeta.CheckGroup
  429. if g_CheckGroup then
  430. function pmeta:CheckGroup( strName, ... )
  431. if strName == "vip" and GAMEMODE.Config.VIPGroups[self:GetUserGroup()] then
  432. return true
  433. end
  434.  
  435. return g_CheckGroup( self, strName, ... )
  436. end
  437. end
  438.  
  439. concommand.Add( "srp_dev_give_money", function( pPlayer, strCmd, tblArgs )
  440. if not pPlayer:IsSuperAdmin() then return end
  441. local amount = math.max( tonumber(tblArgs[1] or 0), 0 )
  442. pPlayer:AddMoney( amount )
  443. end )
  444.  
  445. concommand.Add( "srp_dev_remove", function( pPlayer, strCmd, tblArgs )
  446. if not pPlayer:IsSuperAdmin() then return end
  447. local trEnt = pPlayer:GetEyeTrace().Entity
  448.  
  449. if IsValid( trEnt ) and not trEnt:IsPlayer() then
  450. trEnt:Remove()
  451. end
  452. end )
  453.  
  454. concommand.Add( "srp_dev_change_player_name", function( pPlayer, strCmd, tblArgs )
  455. if not pPlayer:IsSuperAdmin() or not pPlayer:CheckGroup( "community_manager" ) then return end
  456. local targetSID = tostring( tblArgs[1] or "" )
  457.  
  458. local foundPlayer
  459. for k, v in pairs( player.GetAll() ) do
  460. if v:SteamID() == targetSID then
  461. foundPlayer = v
  462. break
  463. end
  464. end
  465.  
  466. if not IsValid( foundPlayer ) then
  467. pPlayer:PrintMessage( HUD_PRINTCONSOLE, "Unable to locate a player with that steam id!" )
  468. return
  469. end
  470.  
  471. if not foundPlayer:HasValidCharacter() then
  472. pPlayer:PrintMessage( HUD_PRINTCONSOLE, "That player has not loaded a character yet!" )
  473. return
  474. end
  475.  
  476. local nameFirst, nameLast = tostring( tblArgs[2] or "" ), tostring( tblArgs[3] or "" )
  477.  
  478. if nameFirst:len() <= 0 or nameLast:len() <= 0 then
  479. pPlayer:PrintMessage( HUD_PRINTCONSOLE, "Cannot set a zero-length name!" )
  480. return
  481. end
  482.  
  483. pPlayer:PrintMessage( HUD_PRINTCONSOLE, "Changing ".. foundPlayer:Nick().. "'s name to ".. nameFirst.. " ".. nameLast.. "!" )
  484.  
  485. local id = GAMEMODE.SQL:GetPlayerPoolID( foundPlayer:SteamID64() )
  486. GAMEMODE.SQL:UpdateCharacterFirstName( id, foundPlayer:GetCharacterID(), nameFirst )
  487. GAMEMODE.SQL:UpdateCharacterLastName( id, foundPlayer:GetCharacterID(), nameLast )
  488. GAMEMODE.Player:SetSharedGameVar( foundPlayer, "name_first", nameFirst )
  489. GAMEMODE.Player:SetSharedGameVar( foundPlayer, "name_last", nameLast )
  490. foundPlayer:GetCharacter().Name.First = nameFirst
  491. foundPlayer:GetCharacter().Name.Last = nameLast
  492. end )
Advertisement
Add Comment
Please, Sign In to add comment