What I’m currently trying to do is make a table of email addresses (as keys) that hold person_records (as values). Where the person_record holds 6 or so things in it. The problem I’m getting is that when I try to assign the email address as a key to a table it complains and says table index is nil… This is what I have so far:
random_record = split(line, ",")
person_record = {first_name = random_record[1], last_name = random_record[2], email_address = random_record[3], street_address = random_record[4], city = random_record[5], state = random_record[6]}
email_table[person_record.email_address] = person_record
I wrote my own split function that basically takes a line of input and pulls out the 6 comma seperated values and stores them in a table (random_record)
I get an error when I try to say email_table[person_record.email_address] = person_record.
But when I print out person_record.email_address it’s NOT nil, it prints out the string I stored in it.. I’m so confused.
function split(str, pat)
local t = {} -- NOTE: use {n = 0} in Lua-5.0
local fpat = "(.-)" .. pat
local last_end = 1
local s, e, cap = str:find(fpat, 1)
while s do
if s ~= 1 or cap ~= "" then
table.insert(t,cap)
end
last_end = e+1
s, e, cap = str:find(fpat, last_end)
end
if last_end <= #str then
cap = str:sub(last_end)
table.insert(t, cap)
end
return t
end
According to the fontspec
package’s user manual (2017/03/31 v2.6a, Section 5.1, p. 12)
Fonts known to LuaTEX […] may be loaded by their standard names as you’d speak them out loud, such as Times New Roman or Adobe Garamond. […]
The simplest example might be something like
setmainfont{Cambria}[...]
[…] The ‘font name’ can be found in various ways, such as by looking in the name listed in a application likeFont Book
on Mac OS X.
My operating system is Mac OS X. The following screenshot shows the Times New Roman font in in my Font Book
application.
The following screenshot shows the Avenir
font name in my Font Book
application.
The following LaTeX document sets the main font of the document to Times New Roman
.
documentclass{report}
usepackage{fontspec}
setmainfont{Times New Roman}
begin{document}
Hello, world!
end{document}
Processing this document with the LuaLaTeX format (i.e. with the LuaLaTeX «engine») results in the following pdf, as expected:
However, replacing ‘Times New Roman’ with ‘Avenir’ and reprocessing the document with the LuaLaTeX format results in no pdf, and the following error message:
ERROR: table index is nil.
— TeX said —
scan_stop:
l.3 setmainfont{Avenir}— HELP —
From the .log file…The lua interpreter ran into a problem, so the remainder of this lua chunk will be ignored.
What’s the problem? Why doesn’t the Avenir example work whereas the Times New Roman one does?
Operating System: macOS Sierra Version 10.12.5
MacTex distribution: MacTeX-2017
LuaTeX: Version 1.0.4
-
#1
В этой теме я научу читать и понимать ошибки, возникающие в коде
от криворукости
из-за невнимательности.
1. Разбор структуры ошибок. Структура у всех ошибок одинаковая и состоит из названия файла, строки, описания ошибки и трассировки ошибки.
Рассмотрим на примере
Код:
[ERROR] addons/ttt weapon placer/lua/weapons/gmod_tool/stools/tttweaponplacer.lua:119: Tried to use a NULL entity!
1. SetModel - [C]:-1
2. SpawnEntity - addons/ttt weapon placer/lua/weapons/gmod_tool/stools/tttweaponplacer.lua:119
3. LeftClick - addons/ttt weapon placer/lua/weapons/gmod_tool/stools/tttweaponplacer.lua:142
4. unknown - gamemodes/sandbox/entities/weapons/gmod_tool/shared.lua:251
Название файла — где произошла ошибка:
Код:
addons/ttt weapon placer/lua/weapons/gmod_tool/stools/tttweaponplacer.lua
Строка ошибки: 119
Описание ошибки: Tried to use a NULL entity!
Трассировка — показывает какие функции и в каких файлах предшествуют нашей ошибке:
Код:
1. SetModel - [C]:-1
2. SpawnEntity - addons/ttt weapon placer/lua/weapons/gmod_tool/stools/tttweaponplacer.lua:119
3. LeftClick - addons/ttt weapon placer/lua/weapons/gmod_tool/stools/tttweaponplacer.lua:142
4. unknown - gamemodes/sandbox/entities/weapons/gmod_tool/shared.lua:251
2. Описания ошибок. Чтобы понять как решить задачу, нам надо понять что произошло. В этом нам всегда помогает описание ошибки. Ниже я привожу типичные описания ошибок, наиболее часто встречающихся при разработке. (Список не полный и я буду рад вашим дополнениям)
- Tried to use a NULL entity! — означает, что пытаешься использовать несуществующую энтити. Проверь что у тебя в переменной.
- Tried to use a NULL physics object! — вызванная энтити пытается быть физичной, но у неё нет модели.
- attempt to index global ‘MutantSpawns’ (a nil value) — попытка использовать в коде неинициализированную переменную. Проще говоря, переменная пуста, а к ней происходит обращение.
- bad argument #1 to ‘FindByClass’ (string expected, got userdata) — неверный аргумент №1. Там должна быть строка, а получена userdata.
- bad argument #1 to ‘pairs’ (table expected, got nil) — тоже неверный аргумент, должна быть таблица, а получено нулевое значение.
- bad argument #1 to ‘JSONToTable’ (string expected, got no value) — ещё одна похожая херня, должна быть строка, а получено нулевое значение.
- attempt to compare nil with number — сравнение числа и нулевой переменной.
- table index is nil — попытка обращения к нулевому элементу.
- Couldn’t include file ‘shared.lua’ (File not found) — не найден файл shared.lua
- Calling net.Start with unpooled message name! [http://goo.gl/qcx0y] — попытка вызвать функцию net.Start с неизвестным идентификатором. Решается строкой util.AddNetworkString(«ваш идентификатор»)
3. Отсутствие ошибок.
Бывают случаи, когда не понятно почему не запускается сам мод. Такое случается когда в коде происходит фатальная ошибка и мод вообще не загружается. Это можно определить по такой строке:
Код:
Couldn't Load Init Script: 'darkrp/gamemode/init.lua'
В этом случае необходимо проверить последние изменения в коде и отменить их при необходимости. Скорее всего дело в пропущенных скобках, нарушающих синтаксис.
Если же сам мод работает, а не запускается определённые аддоны, то это может быть следствием:
- перекрытия кода (переопределение переменных, функций и пр. в этом или другом файле)
- файл со скриптом не был подключен
- нефатальное нарушение синтаксиса
Последнее редактирование: 7 Янв 2019
-- FUNCTIONS / METHODS -- local cFunc = {}; -- Local Functions local cSetting = {}; -- Local Settings MainMenu_Newgame = {}; MainMenu_Newgame.__index = MainMenu_Newgame; --[[ ]] -- /////////////////////////////// -- ///// New ////// -- ///// Returns: Object ////// -- /////////////////////////////// function MainMenu_Newgame:New(...) local obj = setmetatable({}, {__index = self}); if obj.Constructor then obj:Constructor(...); end return obj; end -- /////////////////////////////// -- ///// Render ////// -- ///// Returns: Object ////// -- /////////////////////////////// function MainMenu_Newgame:Render() if(self.enabled) then self.rm:dxDrawRectangle(439, 254, 1102, 356, tocolor(0, 0, 0, 194), falses) self.rm:dxDrawText(strings.mainmenu.newgame.lobbyname, 449, 264, 536, 295, tocolor(255, 255, 255, 255), 0.2, fontManager.fonts.agency, "center", "center", false, false, true, false, false) self.rm:dxDrawRectangle(439, 227, 1102, 27, tocolor(0, 245, 201, 127), true) self.rm:dxDrawText(strings.mainmenu.newgame.newlobby, 439, 227, 1540, 254, tocolor(255, 255, 255, 255), 0.2, fontManager.fonts.agency, "center", "center", false, false, true, false, false) self.rm:dxDrawText(strings.mainmenu.newgame.password, 449, 313, 536, 344, tocolor(255, 255, 255, 255), 0.2, fontManager.fonts.agency, "center", "center", false, false, true, false, false) self.rm:dxDrawText(strings.mainmenu.newgame.playercount, 797, 264, 884, 295, tocolor(255, 255, 255, 255), 0.2, fontManager.fonts.agency, "center", "center", false, false, true, false, false) self.rm:dxDrawText(strings.mainmenu.newgame.rounds, 449, 407, 536, 438, tocolor(255, 255, 255, 255), 0.2, fontManager.fonts.agency, "center", "center", false, false, true, false, false) self.rm:dxDrawText(strings.mainmenu.newgame.roundlenght, 661, 409, 748, 440, tocolor(255, 255, 255, 255), 0.2, fontManager.fonts.agency, "center", "center", false, false, true, false, false) self.rm:dxDrawText(strings.mainmenu.newgame.seconds, 852, 414, 866, 435, tocolor(255, 255, 255, 255), 0.2, fontManager.fonts.agency, "center", "center", false, false, true, false, false) self.rm:dxDrawText(strings.mainmenu.newgame.map, 1000, 268, 1069, 295, tocolor(255, 255, 255, 255), 0.2, fontManager.fonts.agency, "center", "center", false, false, true, false, false) self.rm:dxDrawText(strings.mainmenu.newgame.preview, 894, 305, 976, 473, tocolor(255, 255, 255, 255), 0.2, fontManager.fonts.agency, "center", "center", false, false, true, false, false) local map = guiGetText(self.guiele.combobox4) if(fileExists("files/images/maps/"..map..".jpg")) then self.rm:dxDrawImage(1015, 305, 264, 165, "files/images/maps/"..map..".jpg", 0, 0, 0, tocolor(255, 255, 255, 255), true) end self.rm:dxDrawRectangle(1279, 553, 246, 48, tocolor(255, 255, 255, 73), true) self.rm:dxDrawText(strings.mainmenu.newgame.startgame, 1282, 553, 1530, 601, getColorFromBool(getElementData(self.guiele.startgame, "hover"), 255, 255, 255, 255, 255, 255, 255, 150), 0.4, fontManager.fonts.agency, "center", "center", false, false, true, false, false) end end -- /////////////////////////////// -- ///// AddEvents ////// -- ///// Returns: void ////// -- /////////////////////////////// function MainMenu_Newgame:AddEvents() self.startGameFunc = function() local sLobbyName = guiGetText(self.guiele.edit1); local sPassword = guiGetText(self.guiele.edit2); local iPlayers = tonumber(guiGetText(self.guiele.combobox1)); local iRounds = tonumber(guiGetText(self.guiele.combobox2)); local iRoundLenght = tonumber(guiGetText(self.guiele.combobox3)); local sMap = guiGetText(self.guiele.combobox4); local bFriendlyFire = guiCheckBoxGetSelected(self.guiele.checkbox1); if(#sLobbyName > 3 and #sPassword > 3 and (iPlayers) and (iRounds) and (iRoundLenght) and #sMap > 1) then triggerServerEvent("onPlayerLobbyCreate", getLocalPlayer(), sLobbyName, sha256(sPassword), iPlayers, iRounds, iRoundLenght, sMap, bFriendlyFire); else messageBox:Show(strings.messagebox.newgame.failTitle, strings.messagebox.newgame.failMessage, strings.messagebox.newgame.failButton, "error", false); end end addEventHandler("onClientGUIClick", self.guiele.startgame, self.startGameFunc) end -- /////////////////////////////// -- ///// BuildGui ////// -- ///// Returns: void ////// -- /////////////////////////////// function MainMenu_Newgame:BuildGui() self.guiele.checkbox1 = self.rm:guiCreateCheckBox(449, 457, 152, 34, "Friendly fire", true, false) self.guiele.edit1 = self.rm:guiCreateEdit(553, 264, 205, 35, "", false) self.guiele.edit2 = self.rm:guiCreateEdit(553, 309, 205, 35, "", false) self.guiele.startgame = self.rm:guiCreateButton(1279, 553, 1530-1279, 601-553, "", false, nil, true, rstrings.sounds.buttons.hover, rstrings.sounds.buttons.click); guiSetAlpha(self.guiele.startgame, 0) self.guiele.combobox1 = self.rm:guiCreateComboBox(894, 271, 77, 212, "", false) for index, val in ipairs(self.players) do guiComboBoxAddItem(self.guiele.combobox1, val) end; self.guiele.combobox2 = self.rm:guiCreateComboBox(553, 413, 79, 211, "", false) for index, val in ipairs(self.rounds) do guiComboBoxAddItem(self.guiele.combobox2, val) end; self.guiele.combobox3 = self.rm:guiCreateComboBox(768, 414, 79, 215, "", false) for index, val in ipairs(self.roundLenght) do guiComboBoxAddItem(self.guiele.combobox3, val) end; self.guiele.combobox4 = self.rm:guiCreateComboBox(1069, 272, 156, 271, "", false) for index, val in ipairs(self.maps) do guiComboBoxAddItem(self.guiele.combobox4, val) end; self:AddEvents(); for index, ele in pairs(self.guiele) do if(self.guitext[index]) then guiSetText(ele, self.guitext[index]) end guiSetFont(ele, fontManager.guiFonts.agency) end end -- /////////////////////////////// -- ///// DestroyGui ////// -- ///// Returns: void ////// -- /////////////////////////////// function MainMenu_Newgame:DestroyGui() for index, ele in pairs(self.guiele) do self.guitext[index] = (guiGetText(ele) or false) destroyElement(ele); end end -- /////////////////////////////// -- ///// Toggle ////// -- ///// Returns: void ////// -- /////////////////////////////// function MainMenu_Newgame:Toggle() if(self.enabled) then self.enabled = false; self:DestroyGui(); else self.enabled = true; self:BuildGui(); end end -- /////////////////////////////// -- ///// Constructor ////// -- ///// Returns: void ////// -- /////////////////////////////// function MainMenu_Newgame:Constructor(...) -- Instanzen self.guiele = {}; self.guitext = {}; self.enabled = false; self.rm = RenderManager:New(g.aesx, g.aesy); self.players = {2, 4, 6, 8, 10, 12, 14, 16, 32, 64, 128, 256}; self.rounds = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 40, 80, 160, 240}; self.roundLenght = {30, 60, 90, 120, 240, 480}; self.maps = {"prophunt-airport"}; -- Funktionen -- Events outputDebugString("[CALLING] MainMenu_Newgame: Constructor"); end -- EVENT HANDLER --
Are you having trouble to understand the error that Lua (CS2D console) gives to you? Fear not because Dousea is here for you! This thread is going to explain what errors you’d expect while scripting. Note that maybe not all errors have been identified by me so please.. contact if you find anything. Enough with the useless chit-chat, let’s go to the fun part.
Just a note, use CTRL+F to find your error here.
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
General Syntax
These are the errors that are commonly given for general syntax error.
Keep in mind
that you either forgot or accidentally inserted a word or a symbol that doesn’t match with Lua’s syntax.
Quote:
‘X’ expected near ‘Y’
X
: a word or a symbol.
Y
: a word or a symbol.
Lua is expecting
X
near
Y
.
Code:
if (not a)
a = {true} — ‘then’ expected near ‘a’
end
print(a][1]) — ‘)’ expected near ‘]’
Quote:
‘X’ expected (to close ‘Z’ at line W) near ‘Y’
W
: line that contains
Z
.
X
: a word or a symbol.
Y
: a word or a symbol.
Z
: a word or a symbol.
Lua is expecting
X
near
Y
to close
Z
at line
W
.
Code:
if (true) then
print(«it’s true!») — ‘end’ expected (to close ‘if’ at line 1) near ‘<eof>’
Quote:
unexpected symbol near ‘X’
X
: a word or a symbol.
Lua is not expecting any symbol near
X
.
Code:
print(«a»)) — unexpected symbol near ‘)’
Quote:
malformed number near ‘X’
X
: a word or a symbol.
There’s malformed number near
X
. You either try to concatenate a literal number with strings without brackets or accidentally inserted a word or a symbol after a number.
Code:
print(1..»st») — malformed number near ‘1..’
Quote:
unfinished string near ‘X’
X
: a word or a symbol.
You forgot to finish a string near
X
.
Code:
print(«I forgot to close this string) — unfinished string near ‘<eof>’
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Arithmetic
Arithmetic operation is a weakness for some scripters. These are the errors for arithmetic operations failures.
Keep in mind
that Lua provides automatic conversion for strings to numbers whenever a number is expected. Arithmetic only can be performed with numbers, and strings with following condition: only numerical constant inside the string, no other char.
Quote:
attempt to perform arithmetic on Y ‘X’ (a Z value)
X
: variable that is attempted to be performed with arithmetic.
Y
: either
local
,
global
, or
field
, based on
X
.
Z
: either
nil
,
boolean
,
number
,
string
,
function
,
userdata
,
thread
, or
table
, based on
X
.
You’re trying to perform arithmetic on
X
, while
X
is a
Z
value that couldn’t perform any arithmetic.
Code:
a = {}
b = «b»
print(a — 0) — attempt to perform arithmetic on global ‘a’ (a table value)
print(4 / b) — attempt to perform arithmetic on global ‘b’ (a string value)
Quote:
attempt to perform arithmetic on a X value
X
: either
nil
,
boolean
,
number
,
string
,
function
,
userdata
,
thread
, or
table
.
You’re trying to perform arithmetic on a literal or table value that couldn’t perform any arithmetic.
Code:
a = {}
a[10] = «string»
print(a[10] — 1) — attempt to perform arithmetic on a string value
print(«1» % {}) — attempt to perform arithmetic on a table value
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Concatenation
These are the errors that given when a concatenation error occured. Concatenation is only for strings and numbers.
Keep in mind
that Lua automatically converts numbers to strings whenever a string expected. Therefore, string concatenation accepts numbers besides strings.
Quote:
attempt to concatenate Y ‘X’ (a Z value)
X
: variable that is attempted to be concatenated.
Y
: either
local
,
global
, or
field
, based on
X
.
Z
: either
nil
,
boolean
,
number
,
string
,
function
,
userdata
,
thread
, or
table
, based on
X
.
You’re trying to concatenate
X
, while
X
is a
Z
value that is unconcatenatable.
Code:
a = {}
print(a .. » is a table») — attempt to concatenate global ‘a’ (a table value)
print(«a.b = » .. a.b) — attempt to concatenate field ‘b’ (a nil value)
Quote:
attempt to concatenate a X value
X
: either
nil
,
boolean
,
number
,
string
,
function
,
userdata
,
thread
, or
table
.
You’re trying to concatenate a literal or table value that is unconcatenatable.
Code:
a = {}
print(«Can I concatenate » .. true .. «?») — attempt to concatenate a boolean value
print(«a[1] = » .. a[1]) — attempt to concatenate a nil value
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Length Operator
Errors of these are given because you’re messing with length operator that’s denoted by
#
tag.
Keep in mind
that values that have length are strings and tables. The length of a string is its number of bytes (each character is one byte), while the length of a table is only permitted if the table is a sequence, a set of its keys are all numeric and equal to {1..n} where n is a non-negative integer (n is its length).
Quote:
attempt to get length of Y ‘X’ (a Z value)
X
: variable that is attempted to get its length.
Y
: either
local
,
global
, or
field
, based on
X
.
Z
: either
nil
,
boolean
,
number
,
string
,
function
,
userdata
,
thread
, or
table
, based on
X
.
You’re trying to get the length of
X
, while
X
is a
Z
value that doesn’t have any sort of length.
Code:
print(#a) — attempt to get length of global ‘a’ (a nil value)
Quote:
attempt to get length of a X value
X
: either
nil
,
boolean
,
number
,
string
,
function
,
userdata
,
thread
, or
table
.
You’re trying to get length of a literal or table value that doesn’t have any sort of length.
Code:
a = {}
a[97] = false
print(#nil) — attempt to get length of a nil value
print(#a[1]) — attempt to get length of a boolean value
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Table Index
These are the errors for table indexing.
Keep in mind
that all variables can act as keys in tables, but only two literal values can act as ones, number and string.
Quote:
attempt to index Y ‘X’ (a Z value)
X
: variable that is attempted to be indexed.
Y
: either
local
,
global
, or
field
, based on
X
.
Z
: either
nil
,
boolean
,
number
,
string
,
function
,
userdata
,
thread
, or
table
, based on
X
.
You’re trying to index
X
, while
X
is a
Z
value that couldn’t be indexed.
Code:
a = io.open(«test.txt»)
print(a[1]) — attempt to index global ‘a’ (a userdata value)
print(b.b) — attempt to index global ‘b’ (a nil value)
Quote:
attempt to index a X value
X
: either
nil
,
boolean
,
number
,
string
,
function
,
userdata
,
thread
, or
table
.
You’re trying to index a literal or table value that couldn’t be indexed.
Code:
a = {}
a[98] = true
print(a[1].index) — attempt to index a boolean value
print((«a»)[1]) — attempt to index a string value
You’re trying to set a value to nil index of a table.
Code:
a[nil] = true — table index is nil
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Function Calls
These errors are given to you if you’re doing something weird with function calls.
Keep in mind
that function calls are only for, well, functions. Built-in functions give you an error if you’re trying to send invalid arguments.
Quote:
attempt to call Y ‘X’ (a Z value)
X
: variable that is attempted to be called.
Y
: either
local
,
global
, or
field
, based on
X
.
Z
: either
nil
,
boolean
,
number
,
string
,
function
,
userdata
,
thread
, or
table
, based on
X
.
You’re trying to call
X
, while
X
is a
Z
value that couldn’t be called.
Code:
print(a()) — attempt to call global ‘a’ (a nil value)
Quote:
attempt to call a X value
X
: either
nil
,
boolean
,
number
,
string
,
function
,
userdata
,
thread
, or
table
.
You’re trying to call a literal or table value that couldn’t be called.
Code:
a = {}
a.ortimh = «user»
a.ortimh() — attempt to call a string value
io.openfile(«file») — attempt to call a nil value
Quote:
bad argument #X to ‘Z’ (Y expected)
X
: position of the argument.
Y
: either
nil
,
boolean
,
number
,
string
,
function
,
userdata
,
thread
,
table
, or
value
.
Z
: a word or a symbol.
You’re trying to send an invalid value at argument position #
X
to
Z
function while argument #
X
of the function is expecting
Y
.
Code:
a = {}
b = setmetatable(a, «__add») — bad argument #2 to ‘setmetatable’ (nil or table expected)
Quote:
bad argument #X to ‘W’ (Y expected, got Z)
W
: a word or a symbol.
X
: position of the argument.
Y
: either
nil
,
boolean
,
number
,
string
,
function
,
userdata
,
thread
,
table
, or
value
.
Z
: either
nil
,
boolean
,
number
,
string
,
function
,
userdata
,
thread
,
table
, or
no value
.
You’re trying to send
Z
at argument position #
X
to
W
function while argument #
X
of the function is expecting
Y
.
Code:
print(table.concat()) — bad argument #1 to ‘concat’ (table expected, got no value)
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
You’ve read one, or some, or all of the errors meanings. These are several statements/questions that may lurk in your head currently.
I don’t understand these errors meanings.
Sorry for the inconvenience. I’m trying to give the best-short explanation for you to understand it better without useless words being used. Errors that Lua give are pretty explanatory.
I always get «attempt to concatenate a boolean value» error while I don’t have any boolean value?
Maybe you’re trying to send invalid arguments to CS2D functions such as player, thus resulting a false value.
Flacko has written:
Some cs2d functions such as player() return false on error (wrong parameter or invalid player ID)
Here’s an example of how this error can occur:
Code:
function joinhook(id)
msg2(id, «Welcome, » .. player(id — 1, «name») .. «!@C») — attempt to concatenate a boolean value, if id = 1
end
addhook(«join», «joinhook»)
I’m getting «attempt to call a nil value» every X, without giving me which file that causes the error!
Maybe that’s because you’re adding a hook while the function you add to the hook is nil or not exist. You either need to delete the «adding hook» part or create a function for that hook. Here’s an example of how this error can occur:
Code:
function joinhook(id)
msg2(id, «Welcome, » .. player(id, «name») .. «!@C»)
end
addhook(«join», «welcomehook») — attempt to call a nil value
What do ?, <eof> and <name> mean?
? means unknown, <eof> means end of file, and <name> could mean a lot such as identifier.
Let’s hope that you find your solutions to your problems!
edited 11×, last 07.07.16 01:41:40 pm
I’m awesome … and I really like cookies.
-- FUNCTIONS / METHODS -- local cFunc = {}; -- Local Functions local cSetting = {}; -- Local Settings MainMenu_Newgame = {}; MainMenu_Newgame.__index = MainMenu_Newgame; --[[ ]] -- /////////////////////////////// -- ///// New ////// -- ///// Returns: Object ////// -- /////////////////////////////// function MainMenu_Newgame:New(...) local obj = setmetatable({}, {__index = self}); if obj.Constructor then obj:Constructor(...); end return obj; end -- /////////////////////////////// -- ///// Render ////// -- ///// Returns: Object ////// -- /////////////////////////////// function MainMenu_Newgame:Render() if(self.enabled) then self.rm:dxDrawRectangle(439, 254, 1102, 356, tocolor(0, 0, 0, 194), falses) self.rm:dxDrawText(strings.mainmenu.newgame.lobbyname, 449, 264, 536, 295, tocolor(255, 255, 255, 255), 0.2, fontManager.fonts.agency, "center", "center", false, false, true, false, false) self.rm:dxDrawRectangle(439, 227, 1102, 27, tocolor(0, 245, 201, 127), true) self.rm:dxDrawText(strings.mainmenu.newgame.newlobby, 439, 227, 1540, 254, tocolor(255, 255, 255, 255), 0.2, fontManager.fonts.agency, "center", "center", false, false, true, false, false) self.rm:dxDrawText(strings.mainmenu.newgame.password, 449, 313, 536, 344, tocolor(255, 255, 255, 255), 0.2, fontManager.fonts.agency, "center", "center", false, false, true, false, false) self.rm:dxDrawText(strings.mainmenu.newgame.playercount, 797, 264, 884, 295, tocolor(255, 255, 255, 255), 0.2, fontManager.fonts.agency, "center", "center", false, false, true, false, false) self.rm:dxDrawText(strings.mainmenu.newgame.rounds, 449, 407, 536, 438, tocolor(255, 255, 255, 255), 0.2, fontManager.fonts.agency, "center", "center", false, false, true, false, false) self.rm:dxDrawText(strings.mainmenu.newgame.roundlenght, 661, 409, 748, 440, tocolor(255, 255, 255, 255), 0.2, fontManager.fonts.agency, "center", "center", false, false, true, false, false) self.rm:dxDrawText(strings.mainmenu.newgame.seconds, 852, 414, 866, 435, tocolor(255, 255, 255, 255), 0.2, fontManager.fonts.agency, "center", "center", false, false, true, false, false) self.rm:dxDrawText(strings.mainmenu.newgame.map, 1000, 268, 1069, 295, tocolor(255, 255, 255, 255), 0.2, fontManager.fonts.agency, "center", "center", false, false, true, false, false) self.rm:dxDrawText(strings.mainmenu.newgame.preview, 894, 305, 976, 473, tocolor(255, 255, 255, 255), 0.2, fontManager.fonts.agency, "center", "center", false, false, true, false, false) local map = guiGetText(self.guiele.combobox4) if(fileExists("files/images/maps/"..map..".jpg")) then self.rm:dxDrawImage(1015, 305, 264, 165, "files/images/maps/"..map..".jpg", 0, 0, 0, tocolor(255, 255, 255, 255), true) end self.rm:dxDrawRectangle(1279, 553, 246, 48, tocolor(255, 255, 255, 73), true) self.rm:dxDrawText(strings.mainmenu.newgame.startgame, 1282, 553, 1530, 601, getColorFromBool(getElementData(self.guiele.startgame, "hover"), 255, 255, 255, 255, 255, 255, 255, 150), 0.4, fontManager.fonts.agency, "center", "center", false, false, true, false, false) end end -- /////////////////////////////// -- ///// AddEvents ////// -- ///// Returns: void ////// -- /////////////////////////////// function MainMenu_Newgame:AddEvents() self.startGameFunc = function() local sLobbyName = guiGetText(self.guiele.edit1); local sPassword = guiGetText(self.guiele.edit2); local iPlayers = tonumber(guiGetText(self.guiele.combobox1)); local iRounds = tonumber(guiGetText(self.guiele.combobox2)); local iRoundLenght = tonumber(guiGetText(self.guiele.combobox3)); local sMap = guiGetText(self.guiele.combobox4); local bFriendlyFire = guiCheckBoxGetSelected(self.guiele.checkbox1); if(#sLobbyName > 3 and #sPassword > 3 and (iPlayers) and (iRounds) and (iRoundLenght) and #sMap > 1) then triggerServerEvent("onPlayerLobbyCreate", getLocalPlayer(), sLobbyName, sha256(sPassword), iPlayers, iRounds, iRoundLenght, sMap, bFriendlyFire); else messageBox:Show(strings.messagebox.newgame.failTitle, strings.messagebox.newgame.failMessage, strings.messagebox.newgame.failButton, "error", false); end end addEventHandler("onClientGUIClick", self.guiele.startgame, self.startGameFunc) end -- /////////////////////////////// -- ///// BuildGui ////// -- ///// Returns: void ////// -- /////////////////////////////// function MainMenu_Newgame:BuildGui() self.guiele.checkbox1 = self.rm:guiCreateCheckBox(449, 457, 152, 34, "Friendly fire", true, false) self.guiele.edit1 = self.rm:guiCreateEdit(553, 264, 205, 35, "", false) self.guiele.edit2 = self.rm:guiCreateEdit(553, 309, 205, 35, "", false) self.guiele.startgame = self.rm:guiCreateButton(1279, 553, 1530-1279, 601-553, "", false, nil, true, rstrings.sounds.buttons.hover, rstrings.sounds.buttons.click); guiSetAlpha(self.guiele.startgame, 0) self.guiele.combobox1 = self.rm:guiCreateComboBox(894, 271, 77, 212, "", false) for index, val in ipairs(self.players) do guiComboBoxAddItem(self.guiele.combobox1, val) end; self.guiele.combobox2 = self.rm:guiCreateComboBox(553, 413, 79, 211, "", false) for index, val in ipairs(self.rounds) do guiComboBoxAddItem(self.guiele.combobox2, val) end; self.guiele.combobox3 = self.rm:guiCreateComboBox(768, 414, 79, 215, "", false) for index, val in ipairs(self.roundLenght) do guiComboBoxAddItem(self.guiele.combobox3, val) end; self.guiele.combobox4 = self.rm:guiCreateComboBox(1069, 272, 156, 271, "", false) for index, val in ipairs(self.maps) do guiComboBoxAddItem(self.guiele.combobox4, val) end; self:AddEvents(); for index, ele in pairs(self.guiele) do if(self.guitext[index]) then guiSetText(ele, self.guitext[index]) end guiSetFont(ele, fontManager.guiFonts.agency) end end -- /////////////////////////////// -- ///// DestroyGui ////// -- ///// Returns: void ////// -- /////////////////////////////// function MainMenu_Newgame:DestroyGui() for index, ele in pairs(self.guiele) do self.guitext[index] = (guiGetText(ele) or false) destroyElement(ele); end end -- /////////////////////////////// -- ///// Toggle ////// -- ///// Returns: void ////// -- /////////////////////////////// function MainMenu_Newgame:Toggle() if(self.enabled) then self.enabled = false; self:DestroyGui(); else self.enabled = true; self:BuildGui(); end end -- /////////////////////////////// -- ///// Constructor ////// -- ///// Returns: void ////// -- /////////////////////////////// function MainMenu_Newgame:Constructor(...) -- Instanzen self.guiele = {}; self.guitext = {}; self.enabled = false; self.rm = RenderManager:New(g.aesx, g.aesy); self.players = {2, 4, 6, 8, 10, 12, 14, 16, 32, 64, 128, 256}; self.rounds = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 40, 80, 160, 240}; self.roundLenght = {30, 60, 90, 120, 240, 480}; self.maps = {"prophunt-airport"}; -- Funktionen -- Events outputDebugString("[CALLING] MainMenu_Newgame: Constructor"); end -- EVENT HANDLER --