Ludo Posted February 15, 2012 Share Posted February 15, 2012 Hi everyone. I have a little problem with a script, because it gives me these errors: ERROR: Infinite/too long execution (script_name) Aborting; infinite running script in script_name This script is for get the country code of a player who joins. Anyway here is my script: IPList = { ["31.201.76.0 - 31.201.76.255"] = "AD", --A list of table values (about 1300) } function getPlayerCountry(player) theIP = getPlayerIP(player) IP1 = tostring(math.adjust(tonumber(gettok(theIP, 1, 46)))) IP2 = tostring(math.adjust(tonumber(gettok(theIP, 2, 46)))) IP3 = tostring(math.adjust(tonumber(gettok(theIP, 3, 46)))) IP4 = tostring(math.adjust(tonumber(gettok(theIP, 4, 46)))) IP = tonumber(tostring(IP1..IP2..IP3..IP4)) for ip1, ip2 in pairs(IPList) do if ip1 and ip2 then IPStart = tostring(gettok(ip1, 1, 45)) IPEnd = tostring(gettok(ip1, 2, 45)) IPCode = tostring(ip2) if IPStart ~= "" and IPEnd ~= "" and IPCode ~= "" then IPS1 = tostring(math.adjust(tonumber(gettok(IPStart, 1, 46)))) IPS2 = tostring(math.adjust(tonumber(gettok(IPStart, 2, 46)))) IPS3 = tostring(math.adjust(tonumber(gettok(IPStart, 3, 46)))) IPS4 = tostring(math.adjust(tonumber(gettok(IPStart, 4, 46)))) IPE1 = tostring(math.adjust(tonumber(gettok(IPEnd, 1, 46)))) IPE2 = tostring(math.adjust(tonumber(gettok(IPEnd, 2, 46)))) IPE3 = tostring(math.adjust(tonumber(gettok(IPEnd, 3, 46)))) IPE4 = tostring(math.adjust(tonumber(gettok(IPEnd, 4, 46)))) IPS = tonumber(tostring(IPS1..IPS2..IPS3..IPS4)) IPE = tonumber(tostring(IPE1..IPE2..IPE3..IPE4)) if IP >= IPS and IP <= IPE then flag = IPCode end end end end return flag or "N/A" end math.adjust is a function i use for adjust the numbers, anyway that is not the problem cause i get the errors also if I don 't use it. Can anyone help me please? Link to comment
Sparrow Posted February 15, 2012 Share Posted February 15, 2012 in what line are the error(s)? Link to comment
Ludo Posted February 15, 2012 Author Share Posted February 15, 2012 in what line are the error(s)? The errors are in no line. The debugscript just give that i posted Link to comment
GTX Posted February 15, 2012 Share Posted February 15, 2012 Try this: IPList = { ["31.201.76.*"] = "AD", --A list of table values (about 1300) } function getPlayerCountry(player) theIP = getPlayerIP(player) IP1 = tostring(math.adjust(tonumber(gettok(theIP, 1, 46)))) IP2 = tostring(math.adjust(tonumber(gettok(theIP, 2, 46)))) IP3 = tostring(math.adjust(tonumber(gettok(theIP, 3, 46)))) IP4 = tostring(math.adjust(tonumber(gettok(theIP, 4, 46)))) IP = tonumber(tostring(IP1..IP2..IP3..IP4)) for ip1, ip2 in pairs(IPList) do if ip1 and ip2 then IPStart = tostring(gettok(ip1, 1, 45)) IPEnd = tostring(gettok(ip1, 2, 45)) IPCode = tostring(ip2) if IPStart ~= "" and IPEnd ~= "" and IPCode ~= "" then IPS1 = tostring(math.adjust(tonumber(gettok(IPStart, 1, 46)))) IPS2 = tostring(math.adjust(tonumber(gettok(IPStart, 2, 46)))) IPS3 = tostring(math.adjust(tonumber(gettok(IPStart, 3, 46)))) IPS4 = tostring(math.adjust(tonumber(gettok(IPStart, 4, 46)))) IPE1 = tostring(math.adjust(tonumber(gettok(IPEnd, 1, 46)))) IPE2 = tostring(math.adjust(tonumber(gettok(IPEnd, 2, 46)))) IPE3 = tostring(math.adjust(tonumber(gettok(IPEnd, 3, 46)))) IPE4 = tostring(math.adjust(tonumber(gettok(IPEnd, 4, 46)))) IPS = tonumber(tostring(IPS1..IPS2..IPS3..IPS4)) IPE = tonumber(tostring(IPE1..IPE2..IPE3..IPE4)) if IP >= IPS and IP <= IPE then flag = IPCode end end end end return flag or "N/A" end Link to comment
Ludo Posted February 15, 2012 Author Share Posted February 15, 2012 Try this: IPList = { ["31.201.76.*"] = "AD", --A list of table values (about 1300) } function getPlayerCountry(player) theIP = getPlayerIP(player) IP1 = tostring(math.adjust(tonumber(gettok(theIP, 1, 46)))) IP2 = tostring(math.adjust(tonumber(gettok(theIP, 2, 46)))) IP3 = tostring(math.adjust(tonumber(gettok(theIP, 3, 46)))) IP4 = tostring(math.adjust(tonumber(gettok(theIP, 4, 46)))) IP = tonumber(tostring(IP1..IP2..IP3..IP4)) for ip1, ip2 in pairs(IPList) do if ip1 and ip2 then IPStart = tostring(gettok(ip1, 1, 45)) IPEnd = tostring(gettok(ip1, 2, 45)) IPCode = tostring(ip2) if IPStart ~= "" and IPEnd ~= "" and IPCode ~= "" then IPS1 = tostring(math.adjust(tonumber(gettok(IPStart, 1, 46)))) IPS2 = tostring(math.adjust(tonumber(gettok(IPStart, 2, 46)))) IPS3 = tostring(math.adjust(tonumber(gettok(IPStart, 3, 46)))) IPS4 = tostring(math.adjust(tonumber(gettok(IPStart, 4, 46)))) IPE1 = tostring(math.adjust(tonumber(gettok(IPEnd, 1, 46)))) IPE2 = tostring(math.adjust(tonumber(gettok(IPEnd, 2, 46)))) IPE3 = tostring(math.adjust(tonumber(gettok(IPEnd, 3, 46)))) IPE4 = tostring(math.adjust(tonumber(gettok(IPEnd, 4, 46)))) IPS = tonumber(tostring(IPS1..IPS2..IPS3..IPS4)) IPE = tonumber(tostring(IPE1..IPE2..IPE3..IPE4)) if IP >= IPS and IP <= IPE then flag = IPCode end end end end return flag or "N/A" end Ehm you didn' t change anything except that * Anyway it doesn 't work Link to comment
Xeno Posted February 15, 2012 Share Posted February 15, 2012 What's the name of your script? (file) Link to comment
Ludo Posted February 15, 2012 Author Share Posted February 15, 2012 What's the name of your script? (file) Its name is join_quit_changenick(folder)/client.lua(file) Why anyway? Link to comment
Xeno Posted February 15, 2012 Share Posted February 15, 2012 Aborting; infinite running script in script_name script_name Try changing the name of the folder. Seems stupid, but try it Link to comment
Ludo Posted February 15, 2012 Author Share Posted February 15, 2012 Aborting; infinite running script in script_name script_name Try changing the name of the folder. Seems stupid, but try it I did it. But i keep having the same error. Anyway i typed "script_name" for don' t put the whole long name.. Link to comment
Scooby Posted February 15, 2012 Share Posted February 15, 2012 sometimes no script name is given when this happens. i doubt the name of the file matters. this can also occur if the loop is taking too long... its possible running ur adjust function 10,000 times is too much for the loop. silly question but have u tried with a smaller loop to see if the function is working? Link to comment
Ludo Posted February 15, 2012 Author Share Posted February 15, 2012 no script name is given when this happens.i doubt the name of the file matters. this can also occur if the loop is taking too long... its possible running ur adjust function 10,000 times is too much for the loop. silly question but have u tried with a smaller loop to see if the function is working? I hope I understood that you said: If you mean a smaller table, yes i did and the script works good. With this table it gives me this errors. Anyway i tried 4 different things: 1 - Table of about 700 lines - Error 2 - Table of about 700 lines using "break" - Good 3 - Table of about 1300 lines - Error 4 - Table of about 1300 lines using "break" - Error Link to comment
Scooby Posted February 15, 2012 Share Posted February 15, 2012 ok so it works ok then with less lines??? say 300? Link to comment
Ludo Posted February 15, 2012 Author Share Posted February 15, 2012 ok so it works ok then with less lines??? say 300? Yes it works good with less lines. I tested with about 700, but I used "break" after country = IPCode. I don 't know if that affect the work of the script Link to comment
Scooby Posted February 15, 2012 Share Posted February 15, 2012 well the efficiency of ur whole loop needs improving... is there anything in ur math.adjust function u can improve on to make more efficient? im not really sure of the purpose of this... what do u adjust it to? Link to comment
Ludo Posted February 15, 2012 Author Share Posted February 15, 2012 For example if the Ip is 95.100.4.20 it becomes 95100004020 I need this function or the script won' t work. Anyway i did another function before that, using a different system without table.adjust and it gives me the same error anyway.. Link to comment
Scooby Posted February 15, 2012 Share Posted February 15, 2012 wow all that just to remove the dots... u do know thats what gettok does? so really the function isnt needed. if u havent resolved this by tonight, i'll fix it for u. but i have to go out for a couple of hours now and ul have probably sorted it by then. good luck... i'll check back in a bit. Link to comment
drk Posted February 15, 2012 Share Posted February 15, 2012 Try: IPList = { ["31.201.76.*"] = "AD", } function getPlayerCountry(player) theIP = getPlayerIP(player) IP1 = tostring(math.adjust(tonumber(gettok(theIP, 1, 46)))) IP2 = tostring(math.adjust(tonumber(gettok(theIP, 2, 46)))) IP3 = tostring(math.adjust(tonumber(gettok(theIP, 3, 46)))) IP4 = tostring(math.adjust(tonumber(gettok(theIP, 4, 46)))) IP = tonumber(tostring(IP1...IP2...IP3...IP4)) for ip1, ip2 in pairs(IPList) do if ip1 and ip2 then IPStart = tostring(gettok(ip1, 1, 45)) IPEnd = tostring(gettok(ip1, 2, 45)) IPCode = tostring(ip2) if IPStart ~= "" and IPEnd ~= "" and IPCode ~= "" then IPS1 = tostring(math.adjust(tonumber(gettok(IPStart, 1, 46)))) IPS2 = tostring(math.adjust(tonumber(gettok(IPStart, 2, 46)))) IPS3 = tostring(math.adjust(tonumber(gettok(IPStart, 3, 46)))) IPS4 = tostring(math.adjust(tonumber(gettok(IPStart, 4, 46)))) IPE1 = tostring(math.adjust(tonumber(gettok(IPEnd, 1, 46)))) IPE2 = tostring(math.adjust(tonumber(gettok(IPEnd, 2, 46)))) IPE3 = tostring(math.adjust(tonumber(gettok(IPEnd, 3, 46)))) IPE4 = tostring(math.adjust(tonumber(gettok(IPEnd, 4, 46)))) IPS = tonumber(tostring(IPS1...IPS2...IPS3...IPS4)) IPE = tonumber(tostring(IPE1...IPE2...IPE3...IPE4)) if IP >= IPS and IP <= IPE then flag = IPCode end end end end return flag or "N/A" end Link to comment
Ludo Posted February 15, 2012 Author Share Posted February 15, 2012 Man it isn' t don't needed. And yes, i know what gettok does. Maybe you didn' t understand that I tiped... If the ip is 5.100.4.20, with math.adjust it becomes: 005.100.004.020, then using gettok i remove the points and i do a string containin 005100004020. I hope you have understood now.. For Draken: Try: IPList = { ["31.201.76.*"] = "AD", } function getPlayerCountry(player) theIP = getPlayerIP(player) IP1 = tostring(math.adjust(tonumber(gettok(theIP, 1, 46)))) IP2 = tostring(math.adjust(tonumber(gettok(theIP, 2, 46)))) IP3 = tostring(math.adjust(tonumber(gettok(theIP, 3, 46)))) IP4 = tostring(math.adjust(tonumber(gettok(theIP, 4, 46)))) IP = tonumber(tostring(IP1...IP2...IP3...IP4)) for ip1, ip2 in pairs(IPList) do if ip1 and ip2 then IPStart = tostring(gettok(ip1, 1, 45)) IPEnd = tostring(gettok(ip1, 2, 45)) IPCode = tostring(ip2) if IPStart ~= "" and IPEnd ~= "" and IPCode ~= "" then IPS1 = tostring(math.adjust(tonumber(gettok(IPStart, 1, 46)))) IPS2 = tostring(math.adjust(tonumber(gettok(IPStart, 2, 46)))) IPS3 = tostring(math.adjust(tonumber(gettok(IPStart, 3, 46)))) IPS4 = tostring(math.adjust(tonumber(gettok(IPStart, 4, 46)))) IPE1 = tostring(math.adjust(tonumber(gettok(IPEnd, 1, 46)))) IPE2 = tostring(math.adjust(tonumber(gettok(IPEnd, 2, 46)))) IPE3 = tostring(math.adjust(tonumber(gettok(IPEnd, 3, 46)))) IPE4 = tostring(math.adjust(tonumber(gettok(IPEnd, 4, 46)))) IPS = tonumber(tostring(IPS1...IPS2...IPS3...IPS4)) IPE = tonumber(tostring(IPE1...IPE2...IPE3...IPE4)) if IP >= IPS and IP <= IPE then flag = IPCode end end end end return flag or "N/A" end Someone already posted this.. and it doesn' t work, thank you anyway. Link to comment
drk Posted February 15, 2012 Share Posted February 15, 2012 It isn't the same, but ok. Link to comment
Scooby Posted February 16, 2012 Share Posted February 16, 2012 I understand better now thx.. ok if ur still having problems.. try this: function getPlayerCountry(player) local IPStart,IPEnd,IPS,IPE local IP = getCodedIP(getPlayerIP(player)) for k,v in pairs(IPList) do IPStart = tostring(gettok(k, 1, 45)) IPEnd = tostring(gettok(k, 2, 45)) IPS = getCodedIP(IPStart) IPE = getCodedIP(IPEnd) if IP >= IPS and IP <= IPE then return v end end return "N/A" end function getCodedIP(ip) local temp1,temp2 = "","" for a = 1,4 do temp1 = tonumber(gettok(ip, a, 46)) if temp1 < 10 then temp1 = "00" .. temp1 else if temp1 < 100 then temp1 = "0" .. temp1 end end temp2 = temp2 .. temp1 end return temp2 end ive made a function to do what u said urs did since u didnt provide one. this should work however i dont have 1300 ip's to test it on, so ul have to let me know. this converts a normal ip into a 12 digit number like u said, and then compares it with the ips in the table. then returns the flag string from the table if the number is between start and end numbers, or returns the string N/A if nothing is found. Link to comment
Ludo Posted February 16, 2012 Author Share Posted February 16, 2012 Scooby thank you again, but the script didn' t work.. I still get the same errors; Infinite running script and Infinite/too long execution. I think the problem is cause the table has too much values.. Correct me if I' m wrong. Link to comment
Scooby Posted February 16, 2012 Share Posted February 16, 2012 1300 is a lot to search through but i would think u should be able to manage a loop of that size unless ur trying to run this function on few people at the same time (ie: get the locations of all players at once) then its never gonna work. u can of course slow the loop down with various methods but then the string returned will be delayed. have u thought about having a look how its done in the admin resource? since country flags are shown there too. theres definitely a better way than looping through all these ip's in the table. Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now