-
Üdv.
Lenne két kérdésem.
1. Hogyan lehet lekérni például egy parancsnál, hogy a parancshoz tartozó paraméter az integer vagy string és utána pedig ha például string akkor annak a feltételnek megfelelően dolgozzon tovább a kód.
2. Hogyan lehet megvizsgálni azt, hogy pl. egy karakterláncból például \"pottyoslabda\" csak annyit írok be a paraméterhez, hogy pottyos és ha nincs több pottyos nevezetű karakterlánc akkor ugye a labda -ra ugorjon és azt használja.
-
1.:
function isint(n) -- http://lua-users.org/lists/lua-l/2008-11/msg00102.html
return n==math.floor(n)
end
if tonumber(parameter_1) and isint(tonumber(parameter_1)) then
-- egész szám
elseif not tonumber(parameter_1) then
--szöveg
end
-
Köszönöm szépen, nagyon hasznos. :)
-
2.-at kicsit érthetőbben le tudod írni mert nekem nem nagyon jött le, hogy mit szeretnél.
-
Én úgy értelmeztem ,hogy a 2.-ban erre gondolsz:
str = \"pöttyöslabda\"
para1 = \"pöttyös\"
if string.find(str, para1) then
-- a para1 szerepel az str-ben
else
-- a para1 nem szerepel az str-bben
end
http://lua-users.org/wiki/StringLibraryTutorial
-
Köszönöm Oxsotus nagyon hasznos ez kell nekem.
Akadt még pár kérdésem mégpedig:
Tömbből is lehet keresni ezzel az string.find -el?
Ilyenre gondolok:
local array = { \"almafa\", \"körtefa\", \"diófa\", \"meggyfa\" }
Illetve a megtalált eredménnyel tovább szeretnék dolgozni azt, hogyan rakjam bele egy változóba?
-
Köszönöm Oxsotus nagyon hasznos ez kell nekem.
Akadt még pár kérdésem mégpedig:
Tömbből is lehet keresni ezzel az string.find -el?
Ilyenre gondolok:
local array = { \"almafa\", \"körtefa\", \"diófa\", \"meggyfa\" }
Illetve a megtalált eredménnyel tovább szeretnék dolgozni azt, hogyan rakjam bele egy változóba?
local str = \"pöttyöslabda\"
local parameters = { \"almafa\", \"körtefa\", \"diófa\", \"meggyfa\" }
for k,v in ipairs(array) do
if str:find(parameters[v]) then
outputChatBox(v)
end
end
-
Köszönöm Oxsotus nagyon hasznos ez kell nekem.
Akadt még pár kérdésem mégpedig:
Tömbből is lehet keresni ezzel az string.find -el?
Ilyenre gondolok:
local array = { \"almafa\", \"körtefa\", \"diófa\", \"meggyfa\" }
Illetve a megtalált eredménnyel tovább szeretnék dolgozni azt, hogyan rakjam bele egy változóba?
local str = \"pöttyöslabda\"
local parameters = { \"almafa\", \"körtefa\", \"diófa\", \"meggyfa\" }
for k,v in ipairs(array) do
if str:find(parameters[v]) then
outputChatBox(v)
end
end
[/quote]
Elkészítettem parancsként de mindig hibát kapok rá valami nem jó.
local str = \"pöttyöslabda\"
local parameters = { \"almafa\", \"körtefa\", \"diófa\", \"meggyfa\" }
addCommandHandler(\"asd\",
function(playerSource)
for k,v in ipairs(parameters) do
if str:find(parameters[v]) then
outputChatBox(v, playerSource)
else
outputChatBox(\"Nincs ilyen\", playerSource)
end
end
end
)
Ez pedig a hiba kód:
bad argument #1 to \'find\' (string expected, got nil)
-
if str:find(parameters[v]) then helyett if str:find(v) then
-
Igen így ez a hiba megszűnt viszont nem úgy működik mint amire én törekszem.
A következő a helyzet:
Végigfut a ciklus és meg is nézi a keresési eredményeket ha megtalálja ki is írja viszont ettől függetlenül a többinek a helyére is ír ha nem az van azon a helyen amit keresek az str változóban. Például a 3. helyre van beírva, hogy diófa de az előző két helyre pedig odaírja, hogy \"Ilyen nincs\" ami ugye az else alatt található szöveg és természetesen a 4. helyre is ez kerül. Viszont nekem pont, hogy csak egyszer kéne, hogy kiírja ha az egész tömbben nincs az a karakterlánc amit keresek.
Viszont arra lenne szükségem itt, hogy a karakterlánc egy részéből is megtalálja azt ami kell. Amint azt már fentebb vázoltam. Szóval ha csak annyit írok be, hogy dió akkor a diófára találjon rá. De ha nem csak diófa van a tömbben hanem diópálinka is akkor szintén az else alatti szöveg jelenjen meg de ha annyit keresek, hogy dióp így már a jót adja ki...
Ez lenne a fő célom ezt szeretném megvalósítani.
-
Ha jól írtam át, ez működni fog:
local str = \"pöttyöslabda\"
local parameters = { \"almafa\", \"körtefa\", \"diófa\", \"meggyfa\" }
addCommandHandler(\"asd\",
function(playerSource)
local i = 0
local r = nil
for k,v in ipairs(parameters) do
if str:find(v) then
i = i + 1
r = v
end
end
if i == 1 then
outputChatBox(r, playerSource)
else
outputChatBox(\"Nincs ilyen\", playerSource)
end
end
)
-
Köszönöm szépen mindenkinek a segítséget sikerült megoldani mindent.
A témát lezárom.
-
Ja elírtam.
if str:find(v) then
nem pedig parameters[v]