1. Lua / Говнокод #28063

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    Писать однострочный код это плохо? А если в одном файле совместить серверную и клиентскую часть? Пример аддона из Garry's Mod https://steamcommunity.com/sharedfiles/filedetails/?id=2754127067
    AddCSLua("cl_init.lua")
    if istable( xdestore ) then if xdestore.Menu then xdestore.Menu:Remove() end  if xdestore.Unlock then xdestore.Unlock:Remove() end
    if xdestore.Namer then xdestore.Namer:Remove() end  if xdestore.Lock then xdestore.Lock:Remove() end end xdestore = {} xdestore.Players = {}
    
    	util.AddNetworkString( "XDEST_MenuS2COpen" ) util.AddNetworkString( "XDEST_MenuS2CClose" ) util.AddNetworkString( "XDEST_SendRes" )
    	util.AddNetworkString( "XDEST_MenuS2CUpdate" ) util.AddNetworkString( "XDEST_MenuS2CResult" ) util.AddNetworkString( "XDEST_MenuC2SClose" )
    	util.AddNetworkString( "XDEST_LockReset" ) util.AddNetworkString( "XDEST_MenuC2SAction" ) util.AddNetworkString( "XDEST_SendSnd" ) util.AddNetworkString( "XDEST_SendHint" )
    
    xdestore.AmmoMdl = {
    	[ "AR2" ] = "models/items/combine_rifle_cartridge01.mdl",
    	[ "AR2AltFire" ] = "models/items/combine_rifle_ammo01.mdl",
    	[ "Pistol" ] = "models/items/boxsrounds.mdl",
    	[ "SMG1" ] = "models/items/boxmrounds.mdl",
    	[ "357" ] = "models/items/357ammo.mdl",
    	[ "XBowBolt" ] = "models/items/crossbowrounds.mdl",
    	[ "Buckshot" ] = "models/items/boxbuckshot.mdl",
    	[ "RPG_Round" ] = "models/weapons/w_missile_closed.mdl",
    	[ "SMG1_Grenade" ] = "models/items/ar2_grenade.mdl",
    	[ "Grenade" ] = "models/items/grenadeammo.mdl",
    	[ "slam" ] = "models/weapons/w_slam.mdl"
    }
    xdestore.NonSWEP = {
    	[ "weapon_357" ] = "models/weapons/w_357.mdl",
    	[ "weapon_pistol" ] = "models/weapons/w_pistol.mdl",
    	[ "weapon_bugbait" ] = "models/weapons/w_bugbait.mdl",
    	[ "weapon_crossbow" ] = "models/weapons/w_crossbow.mdl",
    	[ "weapon_crowbar" ] = "models/weapons/w_crowbar.mdl",
    	[ "weapon_frag" ] = "models/weapons/w_grenade.mdl",
    	[ "weapon_physcannon" ] = "models/weapons/w_physics.mdl",
    	[ "weapon_ar2" ] = "models/weapons/w_irifle.mdl",
    	[ "weapon_rpg" ] = "models/weapons/w_rocket_launcher.mdl",
    	[ "weapon_slam" ] = "models/weapons/w_slam.mdl",
    	[ "weapon_shotgun" ] = "models/weapons/w_shotgun.mdl",
    	[ "weapon_smg1" ] = "models/weapons/w_smg1.mdl",
    	[ "weapon_stunstick" ] = "models/weapons/w_stunbaton.mdl",
    	[ "weapon_alyxgun" ] = "models/weapons/w_alyx_gun.mdl",
    	[ "weapon_annabelle" ] = "models/weapons/w_annabelle.mdl",
    	[ "weapon_physgun" ] = "models/weapons/w_physics.mdl"
    }
    xdestore.ValidAct = { [ "Take" ] = true, [ "Move" ] = true, [ "Store" ] = true, [ "Rename" ] = true, [ "TakeAll" ] = true, [ "Split" ] = true, [ "Lock" ] = true, [ "Unlock" ] = true }
    xdestore.ActToNum = { "Take", "Move", "Store", "TakeAll", "Rename", "Split", "Lock", "Unlock" }
    xdestore.LockType = { "Simple", "Complex", "Question", "Key Weapon", "Group", "Personal" }
    net.Receive( "XDEST_MenuS2COpen", function() local int = net.ReadFloat()  local tab = net.ReadString()  local con = net.ReadString()
    local ent = net.ReadEntity() xdestore:OpenMenu( ply, int, tab, con, ent ) end )
    net.Receive( "XDEST_MenuS2CClose", function() if xdestore.Menu then xdestore.Menu:Remove() end  if xdestore.Namer then xdestore.Namer:Remove() end
    if xdestore.Lock then xdestore.Lock:Remove() end  if xdestore.Unlock then xdestore.Unlock:Remove() end end )
    net.Receive( "XDEST_MenuS2CUpdate", function()
    	local tab = util.JSONToTable( net.ReadString() )  local con = util.JSONToTable( net.ReadString() )  local aa = net.ReadBool()  local bb = net.ReadBool()
    	if IsValid( xdestore.Menu ) then xdestore.Menu.V_DataStat = tab  xdestore.Menu.V_DataCont = con  xdestore.Menu:UpdateItems( aa, bb ) end
    end )
    net.Receive( "XDEST_MenuC2SClose", function( len, ply ) if len > 32 or !IsValid( ply ) then return end
    	local int = net.ReadFloat() if IsValid( ply ) and ply:IsPlayer() and !ply:IsBot() and isnumber( int ) then xdestore:CloseMenu( ply, int ) end
    end )
    net.Receive( "XDEST_MenuC2SAction", function( len, ply ) if len >= 4096 or !IsValid( ply ) then return end
    	if isnumber( ply.XDEST_Cool ) and ply.XDEST_Cool > CurTime() then xdestore:SendHint( ply, "You are doing too fast!", "resource/warning.wav", 0 ) end
    	ply.XDEST_Cool = CurTime()+0.25  if !IsValid( ply:GetNWEntity( "XDEST_Ent" ) ) or ply:GetNWEntity( "XDEST_Ent" ) == Entity( 0 ) then return end local self = ply:GetNWEntity( "XDEST_Ent" )
    	if ( ( !isstring( self.Base ) or self.Base != "xdest_base" ) and self:GetClass() != "xdest_base" and self:GetClass() != "weapon_xdest" )
    	or !isstring( self.XDEST_Data ) or !isstring( self.XDEST_Contain ) then return end
    	local act = net.ReadFloat()  local str = net.ReadString() if !isnumber( act ) then return end act = math.Round( act )
    	if !isstring( str ) then str = "_" end if isstring( xdestore.ActToNum[ act ] ) then act = xdestore.ActToNum[ act ] else return end  xdestore:SlotAction( ply, self, act, str )
    end )
    net.Receive( "XDEST_MenuS2CResult", function() local ply = LocalPlayer() local yes = net.ReadBool()  if IsValid( xdestore.Unlock ) then xdestore.Unlock:XDE_Result( yes ) end end )
    net.Receive( "XDEST_LockReset", function() local ent = net.ReadEntity() if IsValid( ent ) and ent != Entity( 0 ) then ent.XDE_Pass = nil end end )
    net.Receive( "XDEST_SendSnd", function() local str = net.ReadString() if !isstring( str ) or str == "!V" then return end surface.PlaySound( str ) end )
    net.Receive( "XDEST_SendRes", function() local str = net.ReadString()  local ply = LocalPlayer()  local ent = net.ReadEntity() if !IsValid( ent )
    or ent == Entity( 0 ) or !isstring( str ) or str == "" then return end if !isstring( ent.XDE_Pass ) then xdestore:SendHint( nil, "Access granted.", "", 0 ) end ent.XDE_Pass = str end )
    net.Receive( "XDEST_SendHint", function() local txt = net.ReadString()  local snd = net.ReadString()  local typ = net.ReadFloat()  xdestore:SendHint( nil, txt, snd, typ ) end )

    Запостил: Ivan_Evlasiev, 28 Февраля 2022

    Комментарии (1) RSS

    Добавить комментарий