Jump to content

[SOLVED] Sanity Aura Code Crashing


Recommended Posts

Okay, so I moved the line to my character's prefab file and the server did launch, however, immediately after selecting the character to load in nothing happens and the server essentially crashes. I will attach the logs just in case. Also, note I put exactly how the line is typed into the prefab file (with AddPrefabPostInit("flower", cute) being at the bottom) in my local master_postinit = function(inst) section.

I do like the concept of the "cute" mechanic being used as a function, it's neat that you've done this!

	local function wolyoFriendlyAnimalSanityAura (inst,observer)
	return observer.prefab == "wolyo" and TUNING.SANITYAURA_MED or nil
end

local function cute(inst)
    if inst.components.sanityaura == nil then
		if not inst.components.sanityaura then
			inst:AddComponent("sanityaura")
		end
		
		local origAuraFn = inst.sanityaura.aurafn
		if origAuraFn then
			inst.sanityaura.aurafn = function(inst, observer)
				return wolyoFriendlyAnimalSanityAura(inst, observer) or origAuraFn(inst, observer)
			end
		else
			inst.sanityaura.aurafn = wolyoFriendlyAnimalSanityAura(inst, observer)
		end
    end
end

AddPrefabPostInit("flower", cute)

While the idea of modding has always interested me, and quite honestly I've considered in the past really spending the time to learn, I just have so much going on and other areas I'm trying to develop to be able to truly focus on it. I just wanted to add my character to the game purely just to see if I could do it and honestly, I didn't expect to end up trying so many different things with it and I'm certainly having fun doing it!

 

1 hour ago, Ultroman said:

Willow's code is pretty spicy for a newcomer.

Anyways, is the first code you provided in the aura tutorial a line of rules or can it function on its own? Meaning are there additional lines I must add (such as the Willow sanity regen around fires that you mentioned, which I tried messing with before this thread but I couldn't even begin to grasp what was actually happening so I moved on to other options) or is the sequence itself include all the necessary lines for a sanity aura?

If so, would "players" be changed to, in my case, "wolyo"? I believe this was the option you mentioned that involves granting a sanity aura to specific entities that, as you said, targets "wolyo" and not every player or entity that comes near it. This option sounds a lot more doable on my part, and also I wouldn't know where to even begin on the Willow sanity concept :p

Also yes I believe CPU usage shouldn't be an issue for me lol

 

 

Again and again, I'm extremely thankful for your help and support.

client_log.txt

server_log.txt

server_log_caves.txt

Edited by Cthonicus
Link to comment
Share on other sites

Let's do it then!

I wrote a highly commented version of Willow's sanity-from-fires code, since @thomas4846 was interested, and @Cthonicus might learn something pertinent to their quest :)

Spoiler

-- This first line is confusing, but it's just that Klei has commented out the deltatime parameter
-- which was once used in the sanityfn. Now, we calculate a rate per second, and then the sanity-
-- component uses deltatime in its calculations instead. Just remove: --, dt)
-- Parameters: inst; the owner of the sanity-component.
local function sanityfn(inst)--, dt)
	-- This first line calculates the base delta per second we want to apply.
	-- Delta just means "the change in a value within a given timeframe".
	-- It sets the baseline for how much sanity Willow normally loses/gains
	-- without accounting for the fires.
	-- If she is freezing, she loses TUNING.SANITYAURA_LARGE per second. Otherwise, no change.
    local delta = inst.components.temperature:IsFreezing() and -TUNING.SANITYAURA_LARGE or 0
	
	-- Write the position of the sanity-component's owner (in your case the player character)
	-- to 3 values, x, y and z.
    local x, y, z = inst.Transform:GetWorldPosition()
	-- Maximum radius to look for fires.
    local max_rad = 10
	-- Retrieve a list of all the entities within the maximum radius which have the tag "fire".
    local ents = TheSim:FindEntities(x, y, z, max_rad, { "fire" })
	-- Iterate through the entities we found, using ipairs, so the first value we get is the
	-- index of the entity in the list, i, and the entity, v.
    for i, v in ipairs(ents) do
		-- If the entity has a burnable-component and it is currently burning...
        if v.components.burnable ~= nil and v.components.burnable:IsBurning() then
			-- Get the largest light-radius that the entity can emit, defaulting to 1 unit.
            local rad = v.components.burnable:GetLargestLightRadius() or 1
			-- Then, for sz below, they calculate a sanity change for the entity, using
			-- TUNING.SANITYAURA_TINY (‭0.10417‬), multiplied by the entity's radius divided by
			-- the maximum search-radius, with this latter division being capped at 1.0 by the
			-- math.min-call, so it doesn't go crazy near fires with a large radius.
			-- In easier words, the sanity it gives is directly linked to the maximum light radius
			-- of the burnable-component on the entity. The more light radius, the more sanity.
            local sz = TUNING.SANITYAURA_TINY * math.min(max_rad, rad) / max_rad
			-- Get the squared distance from the owner of the sanity component to the entity,
			-- and subtract 9. The explanation for this is written in the next comment below (by Klei).
            local distsq = inst:GetDistanceSqToInst(v) - 9
            -- shift the value so that a distance of 3 is the minimum
			-- Not Klei: What happens here, is that if an entity was 7 units away, it now only counts as
			-- being 4 units away, because 3 squared is (3*3) = 9, which is what they subtract. If an entity
			-- is 2 units away, it then counts it as being -1 unit away, meaning Willow would LOSE SANITY
			-- from this particular entity, if it was not for the math.max() call in this next line. It makes anything
			-- that still has a distance lower than 1 unit count as being 1 unit away.
			-- When we include both the subtraction AND the math.max()-call, what the coder is saying,
			-- is that entities closer than 3 (from subtraction) + 1 (from math.max) = 4 units, they all count as
			-- being 1 unit away. This is because dividing by e.g. 0.2 would multiply the value by 5 :)
			-- Note that they use squared distances, because if you want to calculate the distance between
			-- two vector3's, then you need a squareroot call. CPUs don't like squareroot calls. It's a
			-- recursive calculation which most programmers try to avoid, especially when making games
			-- where calculating distances is something that happens thousands of times per frame.

			-- ANYWAY, they add the following to delta:
			-- the light-radius-weighted sanity value we calculated, sz, divided by the (modified) squared distance
			-- to the entity, so they give more sanity the closer they are.
            delta = delta + sz / math.max(1, distsq)
        end
    end
    return delta
end

 

 

@Cthonicus Please edit your previous post. The quote is completely screwing up the forum page xD

See here

5e139c9c98dcd_2020-01-0621_45_06-Window.thumb.png.1a43447e1facc991b986daf572b977d1.png

 

4 hours ago, Cthonicus said:

I put exactly how the line is typed into the prefab file (with AddPrefabPostInit("flower", cute) being at the bottom) in my local master_postinit = function(inst) section.

We're not using AddPrefabPostinit anymore. Remove it. That's only for doing things in modmain.lua

Edited by Ultroman
Fixed major error in my explanation!
Link to comment
Share on other sites

13 minutes ago, Ultroman said:

Let's do it then!

I wrote a highly commented version of Willow's sanity-from-fires code, since @thomas4846 was interested, and @Cthonicus might learn something pertinent to their quest :)

  Reveal hidden contents


-- This first line is confusing, but it's just that Klei has commented out the deltatime parameter
-- which was once used in the sanityfn. Now, we calculate a rate per second, and then the sanity-
-- component uses deltatime in its calculations instead. Just remove: --, dt)
-- Parameters: inst; the owner of the sanity-component.
local function sanityfn(inst)--, dt)
	-- This first line calculates the base delta per second.
	-- Delta just means "the change in a value within a given timeframe".
	-- It just sets the baseline for how much sanity Willow normally loses/gains
	-- without accounting for the fires.
    local delta = inst.components.temperature:IsFreezing() and -TUNING.SANITYAURA_LARGE or 0
	
	-- Write the position of the sanity-component's owner (in your case the player character)
	-- to 3 values, x, y and z.
    local x, y, z = inst.Transform:GetWorldPosition()
	-- Maximum radius to look for fires.
    local max_rad = 10
	-- Retrieve a list of all the entities within the maximum radius which have the tag "fire".
    local ents = TheSim:FindEntities(x, y, z, max_rad, { "fire" })
	-- Iterate through the entities we found, using ipairs, so the first value we get is the
	-- index of the entity in the list, i, and the entity, v.
    for i, v in ipairs(ents) do
		-- If the entity has a burnable-component and it is currently burning...
        if v.components.burnable ~= nil and v.components.burnable:IsBurning() then
			-- Get the largest light-radius that the entity can emit, defaulting to 1 unit.
            local rad = v.components.burnable:GetLargestLightRadius() or 1
			-- Then, for sz below, they calculate a sanity change for the entity, using
			-- TUNING.SANITYAURA_TINY (‭0.10417‬), multiplied by the entity's radius divided by
			-- the maximum search-radius, with this latter division being capped at 1.0 by the
			-- math.min-call, so it doesn't go crazy near fires with a large radius.
			-- In easier words, the sanity it gives is directly linked to the maximum light radius
			-- of the burnable-component on the entity. The more light radius, the more sanity.
            local sz = TUNING.SANITYAURA_TINY * math.min(max_rad, rad) / max_rad
			-- Get the squared distance from the owner of the sanity component to the entity,
			-- and subtract 9. The explanation for this is written in the next comment below (by Klei).
            local distsq = inst:GetDistanceSqToInst(v) - 9
            -- shift the value so that a distance of 3 is the minimum
			-- Not Klei: What the coder is saying, is that they don't want entities closer than
			-- 3 units to give positive sanity. 3 squared is (3*3) = 9. They use squared distances,
			-- because if you want to calculate the distance between two vector3's, then you need
			-- a squareroot call. CPUs don't like squareroot calls. It's a recursive calculation
			-- which most programmers try to avoid, especially when making games where calculating
			-- distances is something that happens thousands of times per frame.
			-- ANYWAY, the result of subtracting 9, is that distsq can become negative, meaning Willow
			-- will instead LOSE SANITY from this particular entity, because she is too close to it.
			-- A nice little mechanic :)
			-- They then add to delta: the light-radius-weighted sanity value divided by the squared
			-- distance, but with the squared distance being capped at a maximum of 1 (can still be
			-- negative, though).
			-- This is interesting, because it means that fires between 3 and 4 units from her will
			-- give gradually more sanity the further she gets from the fire, while all fires farther
			-- than 4 units from her are not affected by this, but use the sz value directly.
            delta = delta + sz / math.max(1, distsq)
        end
    end
    return delta
end

 

 

@Cthonicus Please edit your previous post. The quote is completely screwing up the forum page xD

See here

5e139c9c98dcd_2020-01-0621_45_06-Window.thumb.png.1a43447e1facc991b986daf572b977d1.png

Thing is, I noticed it too, but when I went to edit the post it got worse and transformed into this, lol. I can't even click the edit button!

 

The explanation you've typed here is astounding! I actually feel like I can somewhat understand what is playing out here! I still don't think I can make much from it, but I definitely am getting a clearer understanding :D

  • Like 1
Link to comment
Share on other sites

2 minutes ago, Cthonicus said:

Thing is, I noticed it too, but when I went to edit the post it got worse and transformed into this, lol. I can't even click the edit button!

If you right-click the Edit button that you can't click, and select "Inspect" (in Chrome; it's called other things in other browsers), you can inspect the "top object". It will select it for you, so you can just press "Delete". Continue doing this, until you can click the "Edit" button. Just delete the entire quote. You don't need it anyway. You're answering me right after my post. It's fine. better than this craziness. It's some error that happens when quoting quotes.

5 minutes ago, Cthonicus said:

The explanation you've typed here is astounding! I actually feel like I can somewhat understand what is playing out here! I still don't think I can make much from it, but I definitely am getting a clearer understanding :D

I hope so. It really shouldn't be too hard to change. You can just remove their calculation and put in your own. For each bee, add 0.5 sanity. That gives you 2 sanity per second if you are within range of 4 bees.

I'll post a code example shortly.

Link to comment
Share on other sites

Here's my edition:

local maxSanityRateBonusPerEntity = TUNING.SANITYAURA_TINY

local function sanityfn(inst)
    local delta = 0
    local x, y, z = inst.Transform:GetWorldPosition()
    local max_rad = 10
    local ents = TheSim:FindEntities(x, y, z, max_rad, {
		"bee", "flower", "butterfly", "rabbit", "koalefant_summer",
		"koalefant_winter", "chester", "squid", "glommer", "hutch", "mole"
		})
	
    for i, v in ipairs(ents) do
		-- Determine whether the entity is dead, which they can only be if they have a health-component.
		-- Otherwise, we default to them not being seen as dead.
		local isDead = v.components.health != nil and v.components.health:IsDead() or false
		local distsq = inst:GetDistanceSqToInst(v)
		-- Add the maximum sanity rate divided by distance, so you get more sanity the closer
		-- you are to the entities, but cap it so distance cannot be lower than 1,
		-- because dividing by e.g. 0.2 would multiply the value by 5 :)
		-- And at the end there, if the entity is dead, it makes the character sad instead.
		delta = delta + maxSanityRateBonusPerEntity / math.max(1, distsq) * (isDead and -1 or 1)
    end
    return delta
end

 

Also, I just fixed a major error in my explanation of Willow's code!

And an error in my new code :)

Edited by Ultroman
Link to comment
Share on other sites

21 minutes ago, Ultroman said:

Here's my edition:


local maxSanityRateBonusPerEntity = TUNING.SANITYAURA_TINY

local function sanityfn(inst)
    local delta = 0
    local x, y, z = inst.Transform:GetWorldPosition()
    local max_rad = 10
    local ents = TheSim:FindEntities(x, y, z, max_rad, {
		"bee", "flower", "butterfly", "rabbit", "koalefant_summer",
		"koalefant_winter", "chester", "squid", "glommer", "hutch", "mole"
		})
	
    for i, v in ipairs(ents) do
		-- Determine whether the entity is dead, which they can only be if they have a health-component.
		-- Otherwise, we default to them not being seen as dead.
		local isDead = v.components.health != nil and v.components.health:IsDead() or false
		local distsq = inst:GetDistanceSqToInst(v)
		-- Add the maximum sanity rate divided by distance, so you get more sanity the closer
		-- you are to the entities, but cap it so distance cannot be lower than 1,
		-- because dividing by e.g. 0.2 would multiply the value by 5 :)
		And at the end there, if the entity is dead, it makes the character sad instead.
		delta = delta + maxSanityRateBonusPerEntity / math.max(1, distsq) * (isDead and -1 or 1)
    end
    return delta
end

 

Also, I just fixed a major error in my explanation of Willow's code!

And an error in my new code :)

I made the distance value after inst:GetDistanceSqToInst(v) 3 and I think the part where you explained the sad mechanic (which is very neat!) was just information so I added a -- to the beginning, and it wouldn't let me launch the server ;(

I placed this in my character's prefab file under the master function list, assuming that's where it goes(?)

 

Also, my code wasn't quite this, to say the least xD

Link to comment
Share on other sites

7 minutes ago, Cthonicus said:

I think the part where you explained the sad mechanic (which is very neat!) was just information so I added a -- to the beginning, and it wouldn't let me launch the server ;(

fixed 

7 minutes ago, Cthonicus said:

I made the distance value after inst:GetDistanceSqToInst(v) 3 and I think the part where you explained the sad mechanic (which is very neat!) was just information so I added a -- to the beginning, and it wouldn't let me launch the server ;(I placed this in my character's prefab file under the master function list, assuming that's where it goes(?)

What? Can I see your new wolyo.lua file?

Edited by Ultroman
Link to comment
Share on other sites

6 minutes ago, Ultroman said:

fixed 

I had made the change to the line (And at the end there, if the entity is dead, it makes the character sad instead.) when I noticed it just after you posted it, so I don't think that was what caused it to have an error :(

I'll attach the log if that helps!

client_log.txt

wolyo.lua

Edited by Cthonicus
Attached the .lua
Link to comment
Share on other sites

3 minutes ago, Cthonicus said:

I attached it to my last message just in case you didn't see it.

I guess the power of the log has come to an end lol

Well, the log logs what the code is telling it to log, so if you want to know more than what the log is telling you, you need to see in which context the log was made ;)

Link to comment
Share on other sites

16 minutes ago, Ultroman said:

I thought so. You haven't added the rest of the code from Willow to make this work.

This should work. I moved the huge function out of the masterpostinit, so you can see how that works, as well.

wolyo.lua

So I tried the file you sent me and it produced the same result of the server being unable to start :/

 

This is a stubborn code lol

 

Oh and for curiosity's sake, what did you change in that version of the .lua from mine? I see a position change and some added descriptive lines but I don't personally see any added strings :confused:

Link to comment
Share on other sites

8 minutes ago, Cthonicus said:

So I tried the file you sent me and it produced the same result of the server being unable to start :/

That's not the same result. Your server log (not your client log) will have a different error for us. Unless you're playing on a server without caves, which I'm sure you aren't, because there would be a lot more logs in your client log.

8 minutes ago, Cthonicus said:

Oh and for curiosity's sake, what did you change in that version of the .lua from mine? I see a position change and some added descriptive lines but I don't personally see any added strings :confused:

I added this to masterpostinit:

-- Use a custom sanity rate-calculation function.
inst.components.sanity.custom_rate_fn = sanityfn

The other lines for Willow are not important.

Edited by Ultroman
Link to comment
Share on other sites

17 minutes ago, Ultroman said:

That's not the same result. Your server log (not your client log) will have a different error for us. Unless you're playing on a server without caves, which I'm sure you aren't, because there would be a lot more logs in your client log.

I added this to masterpostinit:


-- Use a custom sanity rate-calculation function.
inst.components.sanity.custom_rate_fn = sanityfn

The other lines for Willow are not important.

Oh by "same result" I just meant the same type of crash as the previous one, which was also the server being unable to start.

And I see how that adding that function is definitely vital.

 

  • Like 1
Link to comment
Share on other sites

Can I see the server log?

If you don't know that there is a client log and a server log (and even a server log per shard, forest and cave), then I understand if you are confused :) If so, please see the newcomer post and jump down to the "Debugging" section.

Just saw that you actually put in exactly what you wrote in your previous message. I thought it was a formatting error.

local distsq = inst:GetDistanceSqToInst(v) 3

You can't do that. What were you trying to do?

Edited by Ultroman
Link to comment
Share on other sites

1 hour ago, Ultroman said:

Can I see the server log?

If you don't know that there is a client log and a server log (and even a server log per shard, forest and cave), then I understand if you are confused :) If so, please see the newcomer post and jump down to the "Debugging" section.

Just saw that you actually put in exactly what you wrote in your previous message. I thought it was a formatting error.


local distsq = inst:GetDistanceSqToInst(v) 3

You can't do that. What were you trying to do?

I don't have access to my computer at the moment so I'll get to the log when I can.

 

As for the 3 I put, I looked at Willow's code and judged that to be the proper way to input it, but clearly I am mistaken, whoops! I thought it was odd too but I guess I must have misinterpreted the line.

 

 

  • Like 1
Link to comment
Share on other sites

This version should work, with all entities 4 units away or closer giving maximum sanity bonus, and the effect getting weaker the farther away the entity is. And still the negative sanity if the entity is dead.

wolyo.lua

I have again corrected my explanation of Willow's code, which explains why subtracting 9 means 3 units, and why subtracting 9 results in everything 4 units and closer to yield maximum bonus without going over.

  • Thanks 1
Link to comment
Share on other sites

16 hours ago, Ultroman said:

This version should work, with all entities 4 units away or closer giving maximum sanity bonus, and the effect getting weaker the farther away the entity is. And still the negative sanity if the entity is dead.

wolyo.lua

I have again corrected my explanation of Willow's code, which explains why subtracting 9 means 3 units, and why subtracting 9 results in everything 4 units and closer to yield maximum bonus without going over.

Oh, I now see what you meant with the squared values. What I did was the math myself and not the let the code do it, hence why I put 3 :p

 

You're gonna hate me lol, but I tried the new .lua once more and it told me the server was unable to start. If you need any logs please let me know. To my understanding, according to your newcomer post regarding debugging, the client_log.txt would actually be used here I think.

I remember previously the sanity aura wouldn't work with flowers or moles for some reason, so I tried removing them but it made no difference. Just something interesting, I tried using Willow's sanity aura as is in her prefab file and the server launched perfectly fine. Maybe I can try to isolate the specific line that's causing the issue.

client_log.txt

(EDIT) I don't know if this is important or not, but I found that the "~" in the line v.components.health ~= nil once removed and replaced with a "!" does not cause the server to crash, but instead run seemingly normal. However, there is, of course, no sanity regen mechanic at work. So this variable is what is causing the crash?

Edited by Cthonicus
Link to comment
Share on other sites

1 hour ago, Cthonicus said:

(EDIT) I don't know if this is important or not, but I found that the "~" in the line v.components.health ~= nil once removed and replaced with a "!" does not cause the server to crash, but instead run seemingly normal. However, there is, of course, no sanity regen mechanic at work. So this variable is what is causing the crash?

You would only do this, if you have no knowledge about Lua syntax ;) In Lua, we use ~= instead of !=

Again, the client log is not helpful, since you're playing the game as a client (at least, if you're using caves, which you SHOULD when debugging, since you will then get the client log with client logs and the server log with server logs). I need your server log. That's the one that can tell us which line is producing the error.

  • Haha 1
Link to comment
Share on other sites

21 minutes ago, Ultroman said:

You would only do this, if you have no knowledge about Lua syntax ;) In Lua, we use ~= instead of !=

Again, the client log is not helpful, since you're playing the game as a client (at least, if you're using caves, which you SHOULD when debugging, since you will then get the client log with client logs and the server log with server logs). I need your server log. That's the one that can tell us which line is producing the error.

I honestly don't even know where I saw the "!". I could've sworn I saw it in Willow's, that's why I tried it. Really, I don't know how I misread that so poorly.

 

Anyways, I didn't attach the server logs because the server wouldn't even launch. You mentioned in the newcomer post to only use the server logs if the game crashes while the server is running with characters spawned in. " There is also a client_log.txt. If the game dies in the main menu or while loading the game or on the character select screen ". I could sent them regardless of that, I just need to make the crash occur again. Just a sec

server_log.txt

server_log_caves.txt

I'm looking at the one you uploaded and it too has a "!" instead of a "~". Is that supposed to be?

 

(EDIT) I'm now realising I believe I swapped the "!" with "~", not the other war around. THIS change is what caused the server to launch normally, but not have the aura in place.

Edited by Cthonicus
Link to comment
Share on other sites

45 minutes ago, Cthonicus said:

I honestly don't even know where I saw the "!". I could've sworn I saw it in Willow's, that's why I tried it. Really, I don't know how I misread that so poorly.

.....

(EDIT) I'm now realising I believe I swapped the "!" with "~", not the other war around. THIS change is what caused the server to launch normally, but not have the aura in place.

AH! So it was ME who was coding C# instead of Lua. I guess I have no knowledge of Lua syntax ;)

46 minutes ago, Cthonicus said:

Anyways, I didn't attach the server logs because the server wouldn't even launch. You mentioned in the newcomer post to only use the server logs if the game crashes while the server is running with characters spawned in. " There is also a client_log.txt. If the game dies in the main menu or while loading the game or on the character select screen ". I could sent them regardless of that, I just need to make the crash occur again.

That description could probably do with an update. Sorry about that. Nevertheless, there's only one way to be sure whether you have a server log or not, which is important when debugging to establish where the error occurred. The fact that you have a server log tells us that the server was started successfully, which it does before the host-player gets to the character-select screen. Once the host-player is at the character-select screen, the server has started and is waiting for the first player to join and pick a character, before it "unpauses" (starts its game timer, starts all entities, etc.).

Anyway, in your first server log, there it is:

[string "../mods/wolyo/scripts/prefabs/wolyo.lua"]:61: unexpected symbol near '!'
LUA ERROR stack traceback:
        =[C] in function 'assert'
        scripts/mainfunctions.lua(150,1)
        =(tail call) ?
        =[C] in function 'xpcall'
        scripts/mods.lua(161,1)
        scripts/mods.lua(603,1) in function 'RegisterPrefabs'
        scripts/gamelogic.lua(231,1) in function 'LoadAssets'
        scripts/gamelogic.lua(1057,1) in function 'DoResetAction'
        scripts/gamelogic.lua(1076,1) in function 'complete_callback'
        scripts/upsell.lua(13,1) in function 'UpdateGamePurchasedState'
        scripts/gamelogic.lua(1100,1) in function 'callback'
	...
        =[C] in function 'GetPersistentString'
        scripts/saveindex.lua(278,1) in function 'Load'
        scripts/gamelogic.lua(1117,1) in function 'callback'
        scripts/playerprofile.lua(997,1) in function 'Set'
        scripts/playerprofile.lua(852,1)
        =[C] in function 'GetPersistentString'
        scripts/playerprofile.lua(850,1) in function 'Load'
        scripts/gamelogic.lua(1116,1) in main chunk
        =[C] in function 'require'
        scripts/mainfunctions.lua(940,1)	

It is an ! on line 61. That should probably be a ~

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
  • Create New...