• Problems That Don't Need Their Own Thread v3.0
    5,003 replies, posted
[QUOTE=bigdogmat;49772968]Oh I didn't notice, his example table must be wrong.[/QUOTE] you wouldn't normally have a table with keys as tables unless you intentionally do so
[QUOTE=TrenchFroast;49772979]you wouldn't normally have a table with keys as tables unless you intentionally do so[/QUOTE] And..? I was stating that the table structure in the example isn't the one he's using, and so I missed what he was printing as I was somewhat going off the example
[QUOTE=bigdogmat;49773097]And..? I was stating that the table structure in the example isn't the one he's using, and so I missed what he was printing as I was somewhat going off the example[/QUOTE] and i was just stating something (that is true btw, do you think people go around making tables with tables as keys) so as to have something in consideration, it wasn't extremely related to the example but whatever
[QUOTE=funnygamemake;49772829]Okay so heres the scenario So Im loading my Main table data from the players data, but for each key in the main table they have their own table,[B][U] for example[/U][/B] [CODE]GMI.Businesses = { Lemonade = { name = 'lemonade', price = 1, amount = 0, income = 1, timerlength = 1, timerstart = false }, Mail = { name = 'Mail', price = 20, amount = 0, income = 6, timerlength = 60, timerstart = false } }[/CODE] but when I load the data, then try and print the data with this [CODE]for k, v in pairs(business) do --business is the players data verison of the GMI.Business print(" ~"..k) for key, val in pairs(v) do print(' '..key.." : ".. val ) end end[/CODE] [B]i get an error of[/B] [B]So I changed the print out to this[/B] [CODE]for k, v in pairs(business) do --business is the players data verison of the GMI.Business print(k) for key, val in pairs(v) do print(key) end end[/CODE] [B]and the output was this [/B] So my question is, how can I get it to actually print the table instead of the (table: 0x29780108)[/QUOTE] try this [code] GMI.Businesses = { ["Lemonade"] = { name = "Lemonade", price = 1, amount = 0, income = 1, timerlength = 1, timerstart = false }, ["Mail"] = { name = "Mail", price = 20, amount = 0, income = 6, timerlength = 60, timerstart = false } } [/code]
[QUOTE=Z0mb1n3;49773115]suggestion[/QUOTE] that is exactly the same table, except you surrounded the keys with [" "]
[QUOTE=TrenchFroast;49773109]and i was just stating something (that is true btw, do you think people go around making tables with tables as keys) so as to have something in consideration, it wasn't extremely related to the example but whatever[/QUOTE] But that still has nothing to do with what I posted, only way it's using a table as the key is if he's doing so and not knowing it or he posted the wrong example.
[QUOTE=bigdogmat;49773180]But that still has nothing to do with what I posted, only way it's using a table as the key is if he's doing so and not knowing it or he posted the wrong example.[/QUOTE] eh forget about it i'm just tired
it broke again after I just got it to work with somehow [QUOTE]for key, val in pairs(business) do for k,v in pairs(key) do print(k.." : "..v) end end[/QUOTE] Do you think it might be the way the table is first saved? because I dont know if JSONToTable can a table with in a table(but still be able to fetch all the tables.) so when I load the table its just not fetching the table values due to the JSONToTables this is the line I use to load the table data [CODE]util.JSONToTable(ply:GetPData('GMI_Business', '{}'))[/CODE] this is the line I use to save the table data [CODE]ply:SetPData('GMI_Business', util.TableToJSON(business))[/CODE]
Is there a way to check if a certain addon is active?
[QUOTE=MaxShadow;49774561]Is there a way to check if a certain addon is active?[/QUOTE] If the addon creates any global variables, you can simply check whether the global variable is set. This is usually the case with all object oriented addons as they will create a global table somewhere in the code.
[QUOTE=geferon;49771155]You sure that the model that you are teying to modify has bodygroups?[/QUOTE] Im 100% positive, ;-; Ill show you the code [code] --#NoSimplerr# clothesShopShirtbodygroups = { {0,"Los Santos T-Shirt",100}, {1,"Grand Theft Gmod T-Shirt",100}, {4,"Duster/Trenchcoat",100}, {5,"Hawaii Shirt",100}, {6,"Red Leather Jacket",100}, {7,"Brown Suit Jacket",100}, {8,"Black Suit Jacket",100} } clothesShopPantsbodygroups = { {0,"Cackeys",100}, {1,"Jeans",100}, {3,"Gym Pants",100}, {4,"Brown Dresspants",100} } concommand.Add("opentestguishop", function() local clothingPanel = vgui.Create( "DFrame" ) clothingPanel:SetPos( 0,0 ) clothingPanel:SetSize( 300, ScrH() ) clothingPanel:SetTitle( "" ) clothingPanel:SetVisible( true ) clothingPanel:SetDraggable( false ) clothingPanel:ShowCloseButton( false ) clothingPanel:MakePopup() clothingPanel.Paint = function( self, w, h ) draw.RoundedBox( 0, 0, 0, w, h, Color( 40, 40, 40, 250 ) ) end local icon = vgui.Create( "DModelPanel" ) icon:SetSize( 800, 600 ) icon:Center() icon:SetModel( LocalPlayer():GetModel() ) -- you can only change colors on playermodels icon:GetEntity():SetBodygroup(0,LocalPlayer():GetBodygroup(0)) icon:GetEntity():SetBodygroup(1,LocalPlayer():GetBodygroup(1)) function icon:LayoutEntity( Entity ) return end -- disables default rotation function icon.Entity:GetPlayerColor() return LocalPlayer():GetColor() end --we need to set it to a Vector not a Color, so the values are normal RGB values divided by 255. local ShirtsTab = vgui.Create("DCollapsibleCategory", clothingPanel) ShirtsTab:SetPos( 5,5 ) ShirtsTab:SetSize( 290, 100 ) -- Keep the second number at 50 ShirtsTab:SetExpanded( 0 ) -- Expanded when popped up ShirtsTab:SetLabel( "" ) ShirtsTab.Paint = function( self, w, h) draw.RoundedBox( 0, 0, 0, w, h, Color( 100, 100, 100, 250 ) ) draw.SimpleTextOutlined( "Shirts & Jackets", "Trebuchet18", w/2, 10, Color(255,255,255,255), TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER, 1, Color(0,0,0,255) ) end ShirtsTabContent = vgui.Create( "DIconLayout" ) ShirtsTabContent:SetSpaceY( 4 ) ShirtsTab:SetContents( ShirtsTabContent ) shirtButtons = {} for i,v in ipairs(clothesShopShirtbodygroups)do shirtButtons[#shirtButtons+1] = ShirtsTabContent:Add( "DButton" ) shirtButtons[#shirtButtons]:SetParent( ShirtsTabContent ) shirtButtons[#shirtButtons]:SetText( "" ) shirtButtons[#shirtButtons]:SetPos( 25, 50 ) shirtButtons[#shirtButtons]:SetSize( 300, 30 ) shirtButtons[#shirtButtons].Paint = function( self, w, h) draw.RoundedBox( 0, 0, 0, w, h, Color( 180, 180, 180, 250 ) ) draw.SimpleTextOutlined( v[2].." - "..v[3], "Trebuchet18", w/2, h/2, Color(255,255,255,255), TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER, 1, Color(0,0,0,255) ) end shirtButtons[#shirtButtons].DoClick = function() icon:GetEntity:SetBodygroup(0,v[1]) end end local PantsTab = vgui.Create("DCollapsibleCategory", clothingPanel) PantsTab:SetPos( 5,110 ) PantsTab:SetSize( 290, 100 ) -- Keep the second number at 50 PantsTab:SetExpanded( 0 ) -- Expanded when popped up PantsTab:SetLabel( "" ) PantsTab.Paint = function( self, w, h) draw.RoundedBox( 0, 0, 0, w, h, Color( 100, 100, 100, 250 ) ) local x,y,w,h = ShirtsTab:GetBounds() PantsTab:SetPos((x),(y+10)+h) draw.SimpleTextOutlined( "Pants & Shoes", "Trebuchet18", w/2, 10, Color(255,255,255,255), TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER, 1, Color(0,0,0,255) ) end PantsTabContent = vgui.Create( "DIconLayout" ) PantsTabContent:SetSpaceY( 4 ) PantsTab:SetContents( PantsTabContent ) pantsButtons = {} for i,v in ipairs(clothesShopPantsbodygroups)do pantsButtons[#pantsButtons+1] = PantsTabContent:Add( "DButton" ) pantsButtons[#pantsButtons]:SetParent( PantsTabContent ) pantsButtons[#pantsButtons]:SetText( "" ) pantsButtons[#pantsButtons]:SetPos( 25, 50 ) pantsButtons[#pantsButtons]:SetSize( 300, 30 ) pantsButtons[#pantsButtons].Paint = function( self, w, h) draw.RoundedBox( 0, 0, 0, w, h, Color( 180, 180, 180, 250 ) ) draw.SimpleTextOutlined( v[2].." - "..v[3], "Trebuchet18", w/2, h/2, Color(255,255,255,255), TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER, 1, Color(0,0,0,255) ) end pantsButtons[#pantsButtons].DoClick = function() RunConsoleCommand( "say", "Hi" ) end end local closeButton = vgui.Create("DButton", clothingPanel) closeButton:SetPos( 5,225 ) closeButton:SetSize( 290, 30 ) -- Keep the second number at 50 closeButton:SetText( "" ) closeButton.Paint = function( self, w, h) draw.RoundedBox( 0, 0, 0, w, h, Color( 100, 0, 0, 250 ) ) draw.SimpleTextOutlined( "Close Menu", "Trebuchet24", w/2, h/2, Color(255,255,255,255), TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER, 1, Color(0,0,0,255) ) local x,y,w,h = PantsTab:GetBounds() closeButton:SetPos((x),(y+10)+h) end closeButton.DoClick = function() clothingPanel:Remove() icon:Remove() end local buyButton = vgui.Create("DButton", clothingPanel) buyButton:SetPos( 5,225 ) buyButton:SetSize( 290, 30 ) -- Keep the second number at 50 buyButton:SetText( "" ) buyButton.Paint = function( self, w, h) draw.RoundedBox( 0, 0, 0, w, h, Color( 0, 100, 0, 250 ) ) draw.SimpleTextOutlined( "Buy Clothes", "Trebuchet24", w/2, h/2, Color(255,255,255,255), TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER, 1, Color(0,0,0,255) ) local x,y,w,h = closeButton:GetBounds() buyButton:SetPos((x),(y+10)+h) end end) [/code]
Is there a way to force a "hook.Add" execute after another "hook.Add" of the same type? I have a gore mod that creates a ragdoll when "OnNPCKilled" is executed, and my mod needs to do something with that ragdoll on "OnNPCKilled". So far it's working fine. However, if my hook (the second one) is executed before the other, it wont work (because the ragdoll is not created yet), and I want to make sure that doesn't happen. Is it possible? (I can't use OnEntityCreated, because I need the reference to the NPC that dies, and it isn't stored in the corpse)
[QUOTE=MaxShadow;49776189]Is there a way to force a "hook.Add" execute after another "hook.Add" of the same type? I have a gore mod that creates a ragdoll when "OnNPCKilled" is executed, and my mod needs to do something with that ragdoll on "OnNPCKilled". So far it's working fine. However, if my hook (the second one) is executed before the other, it wont work (because the ragdoll is not created yet), and I want to make sure that doesn't happen. Is it possible? (I can't use OnEntityCreated, because I need the reference to the NPC that dies, and it isn't stored in the corpse)[/QUOTE] By default there isn't, though you could call both from the same hook.Add and just order it that way. Also you [I]could [/I]use OnEntityCreated and stored the reference NPC on the corpse entity.
The thing is that the gore mod is not mine, and I can't modify it. I'm trying to add compatibility. I need to store the created ragdoll corpse in a table, but only if the NPC who died is included in another table. If I use OnEntityCreated, I can't tell if the NPC was in my table or not. I need to do it in OnNPCKilled, but right after the other hook is executed. Anyway, after experimenting a bit, I noticed that adding an "A" to my hook's name breaks it (and the other too). Apparently, all "hook.Add" are ordered alphabetically (by their names) before executing them, so I can control the order of execution by changing the name of my hook. This solves my problem :D
Maybe I'm just dumb but for some reason I can't use SetSubMaterial on a viewmodel. [code] for k, v in pairs(ply:GetViewModel():GetMaterials()) do ply:GetViewModel():SetSubMaterial(k - 1, 'models/wireframe') end [/code] This appears to do nothing at all ^
I have a problem with my timer. [CODE] if ( self.Owner:HasWeapon( self.Data.Class ) ) then local weap = ents.Create( self.Data.Class ) weap:SetPos( self.Owner:TraceFromEyes( 100 ).HitPos + Vector( 0, 0, 15 ) ) weap:Spawn() SPropProtection.PlayerMakePropOwner( self.Owner, weap ) timer.Simple( math.random( 10, 20 ), function() if ( IsValid( weap ) ) then weap:Fadeout( 2 ) end end )[/CODE] In the code you're crafting a weapon, e.g. a pistol. If you already have one, you drop it on the ground and it will then fade after some time. This works fine, however, how do I cancel the timer for the fadeout if a player picks up the weapon? Perhaps there's a whole other way of doing this with the same results? I do apologize if I'm missing information and what not, I am new to all of this.
[QUOTE=Zakko;49776470]I have a problem with my timer. [CODE] if ( self.Owner:HasWeapon( self.Data.Class ) ) then local weap = ents.Create( self.Data.Class ) weap:SetPos( self.Owner:TraceFromEyes( 100 ).HitPos + Vector( 0, 0, 15 ) ) weap:Spawn() SPropProtection.PlayerMakePropOwner( self.Owner, weap ) timer.Simple( math.random( 10, 20 ), function() if ( IsValid( weap ) ) then weap:Fadeout( 2 ) end end )[/CODE] In the code you're crafting a weapon, e.g. a pistol. If you already have one, you drop it on the ground and it will then fade after some time. This works fine, however, how do I cancel the timer for the fadeout if a player picks up the weapon? Perhaps there's a whole other way of doing this with the same results? I do apologize if I'm missing information and what not, I am new to all of this.[/QUOTE] Don't create a simple timer. Use this instead: [url]https://wiki.garrysmod.com/page/timer/Create[/url] Then you can stop it with timer.Remove( name )
[QUOTE=MaxShadow;49776506]Don't create a simple timer. Use this instead: [url]https://wiki.garrysmod.com/page/timer/Create[/url] Then you can stop it with timer.Remove( name )[/QUOTE] Thank you. I managed to replace the timer line with [CODE] timer.Create( "gms_weaponcreate", 30, 0, function() if ( IsValid( weap ) ) then weap:Fadeout( 2 ) end end )[/CODE] I seem to be unable to find the function for when a player picks up the weapon. E.g. #OnPlayerPickup# timer.Remove( gms_weaponcreate ) What do I add at "OnPlayerPickup"?
[QUOTE=MaxShadow;49776315]The thing is that the gore mod is not mine, and I can't modify it. I'm trying to add compatibility. I need to store the created ragdoll corpse in a table, but only if the NPC who died is included in another table. If I use OnEntityCreated, I can't tell if the NPC was in my table or not. I need to do it in OnNPCKilled, but right after the other hook is executed. Anyway, after experimenting a bit, I noticed that adding an "A" to my hook's name breaks it (and the other too). Apparently, all "hook.Add" are ordered alphabetically (by their names) before executing them, so I can control the order of execution by changing the name of my hook. This solves my problem :D[/QUOTE] That's actually really good to know.
[QUOTE=MaxShadow;49776315]Anyway, after experimenting a bit, I noticed that adding an "A" to my hook's name breaks it (and the other too). Apparently, all "hook.Add" are ordered alphabetically (by their names) before executing them, so I can control the order of execution by changing the name of my hook. This solves my problem :D[/QUOTE] doesn't work that way; you got a random result that happened to be what you wanted [editline]19th February 2016[/editline] [url]https://github.com/garrynewman/garrysmod/blob/master/garrysmod/lua/includes/modules/hook.lua#L77[/url]
So I'm currently creating an anti-spam addon and I have the chat commands in the main lua file. I was wondering how I could give said chat commands their own file or make an "API" out of them. Below is a pastebin to the code, as I didn't want to make a long post. [url]http://pastebin.com/zrhz6fau[/url]
[QUOTE=MaxShadow;49776315]The thing is that the gore mod is not mine, and I can't modify it. I'm trying to add compatibility. I need to store the created ragdoll corpse in a table, but only if the NPC who died is included in another table. If I use OnEntityCreated, I can't tell if the NPC was in my table or not. I need to do it in OnNPCKilled, but right after the other hook is executed. Anyway, after experimenting a bit, I noticed that adding an "A" to my hook's name breaks it (and the other too). Apparently, all "hook.Add" are ordered alphabetically (by their names) before executing them, so I can control the order of execution by changing the name of my hook. This solves my problem :D[/QUOTE] As zerf already said they aren't, but still why can't you tell if it was in your table?
[QUOTE=zerf;49776934]doesn't work that way; you got a random result that happened to be what you wanted [editline]19th February 2016[/editline] [url]https://github.com/garrynewman/garrysmod/blob/master/garrysmod/lua/includes/modules/hook.lua#L77[/url][/QUOTE] I tested it a few times, and the hooks were always executed in alphabetical order. Look at this: [CODE]function Add( event_name, name, func ) if ( !isfunction( func ) ) then return end if ( !isstring( event_name ) ) then return end if (Hooks[ event_name ] == nil) then Hooks[ event_name ] = {} end Hooks[ event_name ][ name ] = func -- This end[/CODE] I found that when you insert a value into a table directly with a string key, lua logically inserts it with an alphabetical order, just like it does with numerical keys. It can be seen in this example: [CODE]lua_run testtable = {} lua_run testtable["B"] = "B" lua_run testtable["A"] = "A" lua_run testtable["C"] = "C" lua_run PrintTable(testtable) Output: A = A B = B C = C[/CODE] Thats why when "for k, v in pairs( HookTable ) do " is executed, the table is already ordered alphabetically. [editline]20th February 2016[/editline] [QUOTE=bigdogmat;49777741]As zerf already said they aren't, but still why can't you tell if it was in your table?[/QUOTE] I couldn't because the reference to the NPC is not stored into the ragdoll, and I can't make it work that way because the mod is not mine. If I use OnEntityCreated, I have the reference to the ragdoll, but not the NPC, so I can't check if it was in my table or not.
[QUOTE=MaxShadow;49778444] [CODE]lua_run testtable = {} lua_run testtable["B"] = "B" lua_run testtable["A"] = "A" lua_run testtable["C"] = "C" lua_run PrintTable(testtable) Output: A = A B = B C = C[/CODE] [/QUOTE] You were just lucky. The order is based on the hash code of strings inside it. Since you are using single characters, their hash code is heavily influenced by their ascii code, and that is why it seems to work. Try inserting random strings of random length, and you will see.
I tested it a bit more: [CODE]] lua_run testtable["asgfdgdf"] = "C" ] lua_run testtable["asgfdgda"] = "C" ] lua_run testtable["asgfdgdz"] = "C" ] lua_run testtable["asgfagdz"] = "C" ] lua_run testtable["asgfzgdz"] = "C" ] lua_run testtable["ASGFZGDZ"] = "C" ] lua_run testtable["ASG"] = "C" ] lua_run testtable["BSDAG"] = "C" ] lua_run PrintTable(testtable) Output: A = A ASG = C ASGFZGDZ = C B = B BSDAG = C C = C asgfagdz = C asgfdgda = C asgfdgdf = C asgfdgdz = C asgfzgdz = C[/CODE] It always seem to be ordered alphabetically. Perhaps you're right, but it seems like most of the time the ASCII code influences it enought to keep an alphabetical order. Anyway, as long as the name of the hooks in both mods don't change, it will be executed in the order I want, so my problem is solved.
[QUOTE=MexicanR;49777064]So I'm currently creating an anti-spam addon and I have the chat commands in the main lua file. I was wondering how I could give said chat commands their own file or make an "API" out of them. Below is a pastebin to the code, as I didn't want to make a long post. [url]http://pastebin.com/zrhz6fau[/url][/QUOTE] (Off topic) You seem to have quite a long list of elseif statements, and a lot of repetitive commands with different variables inside. You might wanna take a look at [URL="https://facepunch.com/showthread.php?t=1504473"]this[/URL] thread, you can make 84 lines into 20 or less (And it wouldn't require as much effort when adding chat commands)
[QUOTE=MDave;49778508]You were just lucky. The order is based on the hash code of strings inside it. Since you are using single characters, their hash code is heavily influenced by their ascii code, and that is why it seems to work. Try inserting random strings of random length, and you will see.[/QUOTE] [QUOTE=MaxShadow;49778530]I tested it a bit more: [CODE]] lua_run testtable["asgfdgdf"] = "C" ] lua_run testtable["asgfdgda"] = "C" ] lua_run testtable["asgfdgdz"] = "C" ] lua_run testtable["asgfagdz"] = "C" ] lua_run testtable["asgfzgdz"] = "C" ] lua_run testtable["ASGFZGDZ"] = "C" ] lua_run testtable["ASG"] = "C" ] lua_run testtable["BSDAG"] = "C" ] lua_run PrintTable(testtable) Output: A = A ASG = C ASGFZGDZ = C B = B BSDAG = C C = C asgfagdz = C asgfdgda = C asgfdgdf = C asgfdgdz = C asgfzgdz = C[/CODE] It always seem to be ordered alphabetically. Perhaps you're right, but it seems like most of the time the ASCII code influences it enought to keep an alphabetical order. Anyway, as long as the name of the hooks in both mods don't change, it will be executed in the order I want, so my problem is solved.[/QUOTE] PrintTable sorts its keys alphabetically. [url=https://github.com/garrynewman/garrysmod/blob/f0880b84b9dcae406e92ea2277120005524602df/garrysmod/lua/includes/util.lua#L44]https://github.com/garrynewman/garrysmod/blob/f0880b84b9dcae406e92ea2277120005524602df/garrysmod/lua/includes/util.lua#L44[/url]
What am I doing wrong? sprites/strider_blackball works, but sprites/splodesprite doesn't, and neither does any sprite I like the look of in the texture browser. I grabbed splodesprite from [url]https://wiki.garrysmod.com/page/render/DrawSprite[/url] so I figured it would work. [lua] AddCSLuaFile(); ENT.Base = "base_anim"; ENT.Type = "anim"; ENT.Spawnable = false; ENT.PrintName = "Tombstone"; ENT.Purpose = "Celebrating and marking a player's clumsy death"; ENT.Author = "Lexi" ENT.RenderGroup = RENDERGROUP_BOTH DEFINE_BASECLASS "base_entity"; function ENT:Initialize() self:SetModel("models/gibs/hgibs.mdl"); self:SetMoveType(MOVETYPE_NONE); self:SetSolid(SOLID_NONE); end local behindGlow = Material("sprites/splodesprite"); function ENT:Draw() self:DrawModel(); end function ENT:DrawTranslucent() local obbs = self:OBBMaxs(); local size = obbs:Length() * 4; render.SetMaterial(behindGlow) render.DrawSprite(self:GetPos(), size, size); end [/lua] [img]http://i.imgur.com/C5xCaJN.jpg[/img] [editline]20th February 2016[/editline] ...Huh, I just checked the code on [url]https://wiki.garrysmod.com/page/render/DrawSprite[/url] and turns out it [i]doesn't[/i] work. Is there some witchcraft I can do to make it actually do alphas? [img]http://i.imgur.com/af37D1A.png[/img]
[QUOTE=!cake;49778792]PrintTable sorts its keys alphabetically. [url=https://github.com/garrynewman/garrysmod/blob/f0880b84b9dcae406e92ea2277120005524602df/garrysmod/lua/includes/util.lua#L44]https://github.com/garrynewman/garrysmod/blob/f0880b84b9dcae406e92ea2277120005524602df/garrysmod/lua/includes/util.lua#L44[/url][/QUOTE] Oh... that explains it then. I tried printing the keys with "pairs" and I got this: [CODE]B asgfdgdz ASG A asgfzgdz asgfdgda BSDAG ASGFZGDZ asgfdgdf C asgfagdz[/CODE] Definitely not an alphabetical order :v: So it was luck then. Well thanks for clearing it. I was just trying to be informative. I guess I'm back with my original problem :/
[QUOTE=MaxShadow;49778964] - hook thing - [/QUOTE] Well, you could remove the original mods hook, then call it from yours manually. Just make extra sure to make it appearent in the stacktrace, or something like that, so the original mod author does not have to go crazy while he tries to debug his code based on users reporting that the mod is broken.
Sorry, you need to Log In to post a reply to this thread.