diff --git a/.gitignore b/.gitignore
index 24204ea38..67f2e0f34 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,7 +7,7 @@
# admin
\[admin\]/admin/conf/reports.xml
-\[admin\]/admin/conf/IpToCountryCompact.csv
+\[admin\]/ip2c/conf/IpToCountryCompact.csv
# admin2
\[admin\]/admin2/admin.db
diff --git a/[admin]/admin/client/gui/admin_main.lua b/[admin]/admin/client/gui/admin_main.lua
index 2df430eed..38e5bf78c 100644
--- a/[admin]/admin/client/gui/admin_main.lua
+++ b/[admin]/admin/client/gui/admin_main.lua
@@ -1427,19 +1427,11 @@ end
function loadFlagImage( guiStaticImage, countryCode )
if countryCode then
- local flagFilename = "client\\images\\flags\\"..tostring ( countryCode )..".png"
- if getVersion().sortable and getVersion().sortable > "1.1.0" then
- -- 1.1
- if fileExists( flagFilename ) then
- if guiStaticImageLoadImage ( guiStaticImage, flagFilename ) then
- return
- end
+ local flagFilename = ":ip2c/client/images/flags/"..tostring ( countryCode )..".png"
+ if fileExists( flagFilename ) then
+ if guiStaticImageLoadImage ( guiStaticImage, flagFilename ) then
+ return
end
- else
- -- 1.0
- guiStaticImageLoadImage ( guiStaticImage, "client\\images\\empty.png" )
- guiStaticImageLoadImage ( guiStaticImage, flagFilename )
- return
end
end
guiStaticImageLoadImage ( guiStaticImage, "client\\images\\empty.png" )
diff --git a/[admin]/admin/meta.xml b/[admin]/admin/meta.xml
index cae1e50a0..3375b259b 100644
--- a/[admin]/admin/meta.xml
+++ b/[admin]/admin/meta.xml
@@ -13,7 +13,6 @@
-
@@ -46,7 +45,8 @@
-
+
+
@@ -76,201 +76,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/[admin]/admin2/server/admin_ip2c.lua b/[admin]/admin2/server/admin_ip2c.lua
deleted file mode 100644
index fd897ee88..000000000
--- a/[admin]/admin2/server/admin_ip2c.lua
+++ /dev/null
@@ -1,206 +0,0 @@
---[[**********************************
-*
-* Multi Theft Auto - Admin Panel
-*
-* admin_ip2c.lua
-*
-* Original File by lil_Toady
-*
-**************************************]]
-aCountries = {}
-
-function getPlayerCountry(player)
- local ip = getPlayerIP(player)
- local ip_group = tonumber(gettok(ip, 1, 46))
- local ip_code =
- (gettok(ip, 1, 46) * 16777216) + (gettok(ip, 2, 46) * 65536) + (gettok(ip, 3, 46) * 256) + (gettok(ip, 4, 46))
- if (not aCountries[ip_group]) then
- loadIPGroup(ip_group)
- end
- for id, group in ipairs(aCountries[ip_group]) do
- if ((group.rstart <= ip_code) and (ip_code <= group.rend)) then
- return group.rcountry
- end
- end
- return false
-end
-function getPlayerCountryName(player)
- local ip = getPlayerIP(player)
- local ip_group = tonumber(gettok(ip, 1, 46))
- local ip_code =
- (gettok(ip, 1, 46) * 16777216) + (gettok(ip, 2, 46) * 65536) + (gettok(ip, 3, 46) * 256) + (gettok(ip, 4, 46))
- if (not aCountries[ip_group]) then
- loadIPGroup(ip_group)
- end
- for id, group in ipairs(aCountries[ip_group]) do
- if ((group.rstart <= ip_code) and (ip_code <= group.rend)) then
- return group.rcountryname
- end
- end
- return false
-end
-
-local CountryCodes = {
- ["AC"] = "Ascension Island",
- ["AD"] = "Andorra",
- ["AE"] = "United Arab Emirates",
- ["AF"] = "Afghanistan",
- ["AG"] = "Antigua And Barbuda",
- ["AI"] = "Anguilla",
- ["AL"] = "Albania",
- ["AM"] = "Armenia",
- ["AN"] = "Netherlands Antilles",
- ["AO"] = "Angola",
- ["AQ"] = "Antarctica",
- ["AR"] = "Argentina",
- ["AS"] = "American Samoa",
- ["AT"] = "Austria",
- ["AU"] = "Australia",
- ["AW"] = "Aruba",
- ["AX"] = "Aland Islands",
- ["AZ"] = "Azerbaijan",
- ["BA"] = "Bosnia And Herzegovina",
- ["BB"] = "Barbados",
- ["BD"] = "Bangladesh",
- ["BE"] = "Belgium",
- ["BF"] = "Burkina Faso",
- ["BG"] = "Bulgaria",
- ["BH"] = "Bahrain",
- ["BI"] = "Burundi",
- ["BJ"] = "Benin",
- ["BM"] = "Bermuda",
- ["BN"] = "Brunei Darussalam",
- ["BO"] = "Bolivia",
- ["BR"] = "Brazil",
- ["BS"] = "Bahamas",
- ["BT"] = "Bhutan",
- ["BV"] = "Bouvet Island",
- ["BW"] = "Botswana",
- ["BY"] = "Belarus",
- ["BZ"] = "Belize",
- ["CA"] = "Canada",
- ["CC"] = "Cocos (Keeling) Islands",
- ["CD"] = "Congo, The Democratic Republic Of The",
- ["CF"] = "Central African Republic",
- ["CG"] = "Congo",
- ["CH"] = "Switzerland",
- ["CI"] = "Cote D'ivoire",
- ["CK"] = "Cook Islands",
- ["CL"] = "Chile",
- ["CM"] = "Cameroon",
- ["CN"] = "China",
- ["CO"] = "Colombia",
- ["CR"] = "Costa Rica",
- ["CS"] = "Serbia and Montenegro",
- ["CU"] = "Cuba",
- ["CV"] = "Cape Verde",
- ["CX"] = "Christmas Island",
- ["CY"] = "Cyprus",
- ["CZ"] = "Czech Republic",
- ["DE"] = "Germany",
- ["DJ"] = "Djibouti",
- ["DK"] = "Denmark",
- ["DM"] = "Dominica",
- ["DO"] = "Dominican Republic",
- ["DZ"] = "Algeria",
- ["EC"] = "Ecuador",
- ["EE"] = "Estonia",
- ["EG"] = "Egypt",
- ["EH"] = "Western Sahara",
- ["ER"] = "Eritrea",
- ["ES"] = "Spain",
- ["ET"] = "Ethiopia",
- ["EU"] = "Europe",
- ["FI"] = "Finland",
- ["FO"] = "Faroe Islands",
- ["FR"] = "France",
- ["GA"] = "Gabon",
- ["GB"] = "United Kingdom",
- ["GD"] = "Grenada",
- ["GL"] = "Greenland",
- ["GM"] = "Gambia",
- ["GW"] = "Guinea-Bissau",
- ["GY"] = "Guyana",
- ["HU"] = "Hungary",
- ["ID"] = "Indonesia",
- ["IE"] = "Ireland",
- ["IL"] = "Israel",
- ["IN"] = "India",
- ["IQ"] = "Iraq",
- ["IS"] = "Iceland",
- ["IT"] = "Italy",
- ["JA"] = "Japan",
- ["JM"] = "Jamaica",
- ["JP"] = "Japan",
- ["KW"] = "Kuwait",
- ["LT"] = "Lithuania",
- ["LU"] = "Luxembourg",
- ["LV"] = "Latvia",
- ["LY"] = "Libyan Arab Jamahiriya",
- ["MC"] = "Monaco",
- ["MG"] = "Madagascar",
- ["MH"] = "Marshall Islands",
- ["MIL"] = "United States",
- ["MT"] = "Malta",
- ["NG"] = "Nigeria",
- ["NL"] = "Netherlands",
- ["NO"] = "Norway",
- ["NR"] = "Nauru",
- ["PA"] = "Panama",
- ["PE"] = "Peru",
- ["PH"] = "Philippines",
- ["PK"] = "Pakistan",
- ["PL"] = "Poland",
- ["PR"] = "Puerto Rico",
- ["PS"] = "Palestinian Territory, Occupied",
- ["PT"] = "Portugal",
- ["QA"] = "Qatar",
- ["RE"] = "Reunion",
- ["RO"] = "Romania",
- ["RU"] = "Russian Federation",
- ["RW"] = "Rwanda",
- ["SE"] = "Sweden",
- ["SJ"] = "Svalbard And Jan Mayen",
- ["SL"] = "Sierra Leone",
- ["SO"] = "Somalia",
- ["SY"] = "Syrian Arab Republic",
- ["TD"] = "Chad",
- ["TO"] = "Tonga",
- ["TV"] = "Tuvalu",
- ["UA"] = "Ukraine",
- ["UK"] = "United Kingdom",
- ["UM"] = "United States Minor Outlying Islands",
- ["US"] = "United States",
- ["VN"] = "Vietnam",
- ["WF"] = "Wallis And Futuna",
- ["WS"] = "Samoa",
- ["YE"] = "Yemen",
- ["YT"] = "Mayotte",
- ["YU"] = "Yugoslavia",
- ["ZA"] = "South Africa",
- ["ZZ"] = "None"
-}
-function loadIPGroup(group)
- aCountries[group] = {}
- local node = xmlLoadFile("conf/ip2c/" .. group .. ".xml")
- if (node) then
- local ranges = 0
- while (true) do
- local range_node = xmlFindChild(node, "range", ranges)
- if (not range_node) then
- break
- end
- local rstart = tonumber(xmlNodeGetAttribute(range_node, "start"))
- local rend = tonumber(xmlNodeGetAttribute(range_node, "end"))
- local rcountry = xmlNodeGetAttribute(range_node, "country")
- local count = #aCountries[group] + 1
- aCountries[group][count] = {}
- aCountries[group][count].rstart = rstart
- aCountries[group][count].rend = rend
- aCountries[group][count].rcountry = rcountry
- aCountries[group][count].rcountryname = CountryCodes[rcountry]
- ranges = ranges + 1
- end
- xmlUnloadFile(node)
- end
-end
diff --git a/[admin]/admin2/server/admin_server.lua b/[admin]/admin2/server/admin_server.lua
index d2b996081..db62835d1 100644
--- a/[admin]/admin2/server/admin_server.lua
+++ b/[admin]/admin2/server/admin_server.lua
@@ -16,26 +16,84 @@ aStats = {}
aReports = {}
aWeathers = {}
+function aHandleIP2CUpdate()
+ local playersToUpdate = false
+ local playersTable = getElementsByType("player") -- cache result, save function call
+
+ for playerID = 1, #playersTable do
+ local playerElement = playersTable[playerID]
+
+ if not playersToUpdate then
+ playersToUpdate = {} -- create table only when there are at least one player
+ end
+
+ updatePlayerCountry(playerElement)
+ playersToUpdate[#playersToUpdate + 1] = playerElement
+ end
+
+ if not playersToUpdate then
+ return -- if there are no players, stop further code execution
+ end
+
+ for playerID = 1, #playersTable do
+ local playerElement = playersTable[playerID]
+ local hasAdminPermission = hasObjectPermissionTo(playerElement, "general.adminpanel")
+
+ if hasAdminPermission then
+
+ for playerToUpdateID = 1, #playersToUpdate do
+ local playerToUpdate = playersToUpdate[playerToUpdateID]
+
+ triggerClientEvent(playerElement, "aClientPlayerJoin", playerToUpdate,
+ false, false, false, false,
+ aPlayers[playerToUpdate].country,
+ aPlayers[playerToUpdate].countryname
+ )
+ end
+ end
+ end
+end
+
+function aHandleIp2cSetting()
+ local enabled = get("*useip2c")
+ if enabled and enabled == "true" then
+ local ip2c = getResourceFromName("ip2c")
+ if ip2c and getResourceState(ip2c) == "loaded" then
+ -- Persistent
+ startResource(ip2c, true)
+ end
+ elseif (not enabled) or (enabled == "false") then
+ local ip2c = getResourceFromName("ip2c")
+ if ip2c and getResourceState(ip2c) == "running" then
+ stopResource(ip2c)
+ end
+ end
+end
+
addEventHandler(
"onResourceStart",
root,
function(resource)
if (resource ~= getThisResource()) then
+ local resourceName = getResourceName(resource)
for id, player in ipairs(getElementsByType("player")) do
if (hasObjectPermissionTo(player, "general.tab_resources")) then
- triggerClientEvent(player, "aClientResourceStart", root, getResourceName(resource))
+ triggerClientEvent(player, "aClientResourceStart", root, resourceName)
end
end
+ if resourceName == "ip2c" then
+ aHandleIP2CUpdate()
+ end
return
end
aSetupACL()
aSetupCommands()
aSetupStorage()
-
for id, player in ipairs(getElementsByType("player")) do
aPlayerInitialize(player)
end
+ aHandleIp2cSetting()
end
)
@@ -44,11 +102,15 @@ addEventHandler(
root,
function(resource)
if (resource ~= getThisResource()) then
+ local resourceName = getResourceName(resource)
for id, player in ipairs(getElementsByType("player")) do
if (hasObjectPermissionTo(player, "general.tab_resources")) then
- triggerClientEvent(player, "aClientResourceStop", root, getResourceName(resource))
+ triggerClientEvent(player, "aClientResourceStop", root, resourceName)
end
end
+ if resourceName == "ip2c" then
+ aHandleIP2CUpdate()
+ end
else
aReleaseStorage()
end
@@ -70,6 +132,7 @@ addEventHandler(
getPlayerIP(source),
getPlayerUserName(source),
getPlayerSerial(source),
+ false,
aPlayers[source]["country"],
aPlayers[source]["countryname"]
)
@@ -87,13 +150,19 @@ addEventHandler(
end
)
+function updatePlayerCountry(player)
+ local isIP2CResourceRunning = getResourceFromName( "ip2c" )
+ isIP2CResourceRunning = isIP2CResourceRunning and getResourceState( isIP2CResourceRunning ) == "running"
+ aPlayers[player].country = isIP2CResourceRunning and exports.ip2c:getPlayerCountry(player) or false
+ aPlayers[player].countryname = isIP2CResourceRunning and exports.ip2c:getCountryName(aPlayers[player].country) or false
+end
+
function aPlayerInitialize(player)
aPlayers[player] = {}
- aPlayers[player].country = getPlayerCountry(player)
- aPlayers[player].countryname = getPlayerCountryName(player)
aPlayers[player].money = getPlayerMoney(player)
aPlayers[player].muted = isPlayerMuted(player)
aPlayers[player].frozen = isElementFrozen(player)
+ updatePlayerCountry(player)
end
function aAction(type, action, admin, player, data, more)
diff --git a/[admin]/admin2/client/images/flags/ac.png b/[admin]/ip2c/client/images/flags/ac.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/ac.png
rename to [admin]/ip2c/client/images/flags/ac.png
diff --git a/[admin]/ip2c/client/images/flags/ad.png b/[admin]/ip2c/client/images/flags/ad.png
new file mode 100644
index 000000000..780ccd514
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/ad.png differ
diff --git a/[admin]/admin2/client/images/flags/ae.png b/[admin]/ip2c/client/images/flags/ae.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/ae.png
rename to [admin]/ip2c/client/images/flags/ae.png
diff --git a/[admin]/admin2/client/images/flags/af.png b/[admin]/ip2c/client/images/flags/af.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/af.png
rename to [admin]/ip2c/client/images/flags/af.png
diff --git a/[admin]/admin2/client/images/flags/ag.png b/[admin]/ip2c/client/images/flags/ag.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/ag.png
rename to [admin]/ip2c/client/images/flags/ag.png
diff --git a/[admin]/admin2/client/images/flags/ai.png b/[admin]/ip2c/client/images/flags/ai.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/ai.png
rename to [admin]/ip2c/client/images/flags/ai.png
diff --git a/[admin]/admin2/client/images/flags/al.png b/[admin]/ip2c/client/images/flags/al.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/al.png
rename to [admin]/ip2c/client/images/flags/al.png
diff --git a/[admin]/admin2/client/images/flags/am.png b/[admin]/ip2c/client/images/flags/am.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/am.png
rename to [admin]/ip2c/client/images/flags/am.png
diff --git a/[admin]/admin2/client/images/flags/an.png b/[admin]/ip2c/client/images/flags/an.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/an.png
rename to [admin]/ip2c/client/images/flags/an.png
diff --git a/[admin]/ip2c/client/images/flags/ao.png b/[admin]/ip2c/client/images/flags/ao.png
new file mode 100644
index 000000000..4ace96b97
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/ao.png differ
diff --git a/[admin]/admin2/client/images/flags/aq.png b/[admin]/ip2c/client/images/flags/aq.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/aq.png
rename to [admin]/ip2c/client/images/flags/aq.png
diff --git a/[admin]/ip2c/client/images/flags/ar.png b/[admin]/ip2c/client/images/flags/ar.png
new file mode 100644
index 000000000..d924f9182
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/ar.png differ
diff --git a/[admin]/admin2/client/images/flags/as.png b/[admin]/ip2c/client/images/flags/as.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/as.png
rename to [admin]/ip2c/client/images/flags/as.png
diff --git a/[admin]/admin2/client/images/flags/at.png b/[admin]/ip2c/client/images/flags/at.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/at.png
rename to [admin]/ip2c/client/images/flags/at.png
diff --git a/[admin]/ip2c/client/images/flags/au.png b/[admin]/ip2c/client/images/flags/au.png
new file mode 100644
index 000000000..e8eb79d18
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/au.png differ
diff --git a/[admin]/ip2c/client/images/flags/aw.png b/[admin]/ip2c/client/images/flags/aw.png
new file mode 100644
index 000000000..d542b8d97
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/aw.png differ
diff --git a/[admin]/admin2/client/images/flags/ax.png b/[admin]/ip2c/client/images/flags/ax.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/ax.png
rename to [admin]/ip2c/client/images/flags/ax.png
diff --git a/[admin]/admin2/client/images/flags/az.png b/[admin]/ip2c/client/images/flags/az.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/az.png
rename to [admin]/ip2c/client/images/flags/az.png
diff --git a/[admin]/admin2/client/images/flags/ba.png b/[admin]/ip2c/client/images/flags/ba.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/ba.png
rename to [admin]/ip2c/client/images/flags/ba.png
diff --git a/[admin]/admin2/client/images/flags/bb.png b/[admin]/ip2c/client/images/flags/bb.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/bb.png
rename to [admin]/ip2c/client/images/flags/bb.png
diff --git a/[admin]/ip2c/client/images/flags/bd.png b/[admin]/ip2c/client/images/flags/bd.png
new file mode 100644
index 000000000..1455043d3
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/bd.png differ
diff --git a/[admin]/ip2c/client/images/flags/be.png b/[admin]/ip2c/client/images/flags/be.png
new file mode 100644
index 000000000..dc604184d
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/be.png differ
diff --git a/[admin]/admin2/client/images/flags/bf.png b/[admin]/ip2c/client/images/flags/bf.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/bf.png
rename to [admin]/ip2c/client/images/flags/bf.png
diff --git a/[admin]/ip2c/client/images/flags/bg.png b/[admin]/ip2c/client/images/flags/bg.png
new file mode 100644
index 000000000..cfe83495a
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/bg.png differ
diff --git a/[admin]/admin2/client/images/flags/bh.png b/[admin]/ip2c/client/images/flags/bh.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/bh.png
rename to [admin]/ip2c/client/images/flags/bh.png
diff --git a/[admin]/ip2c/client/images/flags/bi.png b/[admin]/ip2c/client/images/flags/bi.png
new file mode 100644
index 000000000..5b2d25a90
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/bi.png differ
diff --git a/[admin]/admin2/client/images/flags/bj.png b/[admin]/ip2c/client/images/flags/bj.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/bj.png
rename to [admin]/ip2c/client/images/flags/bj.png
diff --git a/[admin]/ip2c/client/images/flags/bl.png b/[admin]/ip2c/client/images/flags/bl.png
new file mode 100644
index 000000000..ff982d508
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/bl.png differ
diff --git a/[admin]/admin2/client/images/flags/bm.png b/[admin]/ip2c/client/images/flags/bm.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/bm.png
rename to [admin]/ip2c/client/images/flags/bm.png
diff --git a/[admin]/admin2/client/images/flags/bn.png b/[admin]/ip2c/client/images/flags/bn.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/bn.png
rename to [admin]/ip2c/client/images/flags/bn.png
diff --git a/[admin]/admin2/client/images/flags/bo.png b/[admin]/ip2c/client/images/flags/bo.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/bo.png
rename to [admin]/ip2c/client/images/flags/bo.png
diff --git a/[admin]/ip2c/client/images/flags/bq.png b/[admin]/ip2c/client/images/flags/bq.png
new file mode 100644
index 000000000..7024f0efa
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/bq.png differ
diff --git a/[admin]/ip2c/client/images/flags/br.png b/[admin]/ip2c/client/images/flags/br.png
new file mode 100644
index 000000000..c8fbd6b6f
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/br.png differ
diff --git a/[admin]/admin2/client/images/flags/bs.png b/[admin]/ip2c/client/images/flags/bs.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/bs.png
rename to [admin]/ip2c/client/images/flags/bs.png
diff --git a/[admin]/admin2/client/images/flags/bt.png b/[admin]/ip2c/client/images/flags/bt.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/bt.png
rename to [admin]/ip2c/client/images/flags/bt.png
diff --git a/[admin]/admin2/client/images/flags/bv.png b/[admin]/ip2c/client/images/flags/bv.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/bv.png
rename to [admin]/ip2c/client/images/flags/bv.png
diff --git a/[admin]/admin2/client/images/flags/bw.png b/[admin]/ip2c/client/images/flags/bw.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/bw.png
rename to [admin]/ip2c/client/images/flags/bw.png
diff --git a/[admin]/ip2c/client/images/flags/by.png b/[admin]/ip2c/client/images/flags/by.png
new file mode 100644
index 000000000..bce6972a8
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/by.png differ
diff --git a/[admin]/admin2/client/images/flags/bz.png b/[admin]/ip2c/client/images/flags/bz.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/bz.png
rename to [admin]/ip2c/client/images/flags/bz.png
diff --git a/[admin]/admin2/client/images/flags/ca.png b/[admin]/ip2c/client/images/flags/ca.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/ca.png
rename to [admin]/ip2c/client/images/flags/ca.png
diff --git a/[admin]/admin2/client/images/flags/cc.png b/[admin]/ip2c/client/images/flags/cc.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/cc.png
rename to [admin]/ip2c/client/images/flags/cc.png
diff --git a/[admin]/admin2/client/images/flags/cd.png b/[admin]/ip2c/client/images/flags/cd.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/cd.png
rename to [admin]/ip2c/client/images/flags/cd.png
diff --git a/[admin]/admin2/client/images/flags/cf.png b/[admin]/ip2c/client/images/flags/cf.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/cf.png
rename to [admin]/ip2c/client/images/flags/cf.png
diff --git a/[admin]/admin2/client/images/flags/cg.png b/[admin]/ip2c/client/images/flags/cg.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/cg.png
rename to [admin]/ip2c/client/images/flags/cg.png
diff --git a/[admin]/admin2/client/images/flags/ch.png b/[admin]/ip2c/client/images/flags/ch.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/ch.png
rename to [admin]/ip2c/client/images/flags/ch.png
diff --git a/[admin]/admin2/client/images/flags/ci.png b/[admin]/ip2c/client/images/flags/ci.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/ci.png
rename to [admin]/ip2c/client/images/flags/ci.png
diff --git a/[admin]/admin2/client/images/flags/ck.png b/[admin]/ip2c/client/images/flags/ck.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/ck.png
rename to [admin]/ip2c/client/images/flags/ck.png
diff --git a/[admin]/ip2c/client/images/flags/cl.png b/[admin]/ip2c/client/images/flags/cl.png
new file mode 100644
index 000000000..564e0a7a4
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/cl.png differ
diff --git a/[admin]/admin2/client/images/flags/cm.png b/[admin]/ip2c/client/images/flags/cm.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/cm.png
rename to [admin]/ip2c/client/images/flags/cm.png
diff --git a/[admin]/ip2c/client/images/flags/cn.png b/[admin]/ip2c/client/images/flags/cn.png
new file mode 100644
index 000000000..73e08190a
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/cn.png differ
diff --git a/[admin]/ip2c/client/images/flags/co.png b/[admin]/ip2c/client/images/flags/co.png
new file mode 100644
index 000000000..5bbd91cff
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/co.png differ
diff --git a/[admin]/admin2/client/images/flags/cr.png b/[admin]/ip2c/client/images/flags/cr.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/cr.png
rename to [admin]/ip2c/client/images/flags/cr.png
diff --git a/[admin]/admin2/client/images/flags/cs.png b/[admin]/ip2c/client/images/flags/cs.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/cs.png
rename to [admin]/ip2c/client/images/flags/cs.png
diff --git a/[admin]/admin2/client/images/flags/cu.png b/[admin]/ip2c/client/images/flags/cu.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/cu.png
rename to [admin]/ip2c/client/images/flags/cu.png
diff --git a/[admin]/admin2/client/images/flags/cv.png b/[admin]/ip2c/client/images/flags/cv.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/cv.png
rename to [admin]/ip2c/client/images/flags/cv.png
diff --git a/[admin]/ip2c/client/images/flags/cw.png b/[admin]/ip2c/client/images/flags/cw.png
new file mode 100644
index 000000000..1a70b471e
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/cw.png differ
diff --git a/[admin]/admin2/client/images/flags/cx.png b/[admin]/ip2c/client/images/flags/cx.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/cx.png
rename to [admin]/ip2c/client/images/flags/cx.png
diff --git a/[admin]/admin2/client/images/flags/cy.png b/[admin]/ip2c/client/images/flags/cy.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/cy.png
rename to [admin]/ip2c/client/images/flags/cy.png
diff --git a/[admin]/admin2/client/images/flags/cz.png b/[admin]/ip2c/client/images/flags/cz.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/cz.png
rename to [admin]/ip2c/client/images/flags/cz.png
diff --git a/[admin]/ip2c/client/images/flags/de.png b/[admin]/ip2c/client/images/flags/de.png
new file mode 100644
index 000000000..a077b8422
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/de.png differ
diff --git a/[admin]/admin2/client/images/flags/dj.png b/[admin]/ip2c/client/images/flags/dj.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/dj.png
rename to [admin]/ip2c/client/images/flags/dj.png
diff --git a/[admin]/admin2/client/images/flags/dk.png b/[admin]/ip2c/client/images/flags/dk.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/dk.png
rename to [admin]/ip2c/client/images/flags/dk.png
diff --git a/[admin]/admin2/client/images/flags/dm.png b/[admin]/ip2c/client/images/flags/dm.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/dm.png
rename to [admin]/ip2c/client/images/flags/dm.png
diff --git a/[admin]/admin2/client/images/flags/do.png b/[admin]/ip2c/client/images/flags/do.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/do.png
rename to [admin]/ip2c/client/images/flags/do.png
diff --git a/[admin]/admin2/client/images/flags/dz.png b/[admin]/ip2c/client/images/flags/dz.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/dz.png
rename to [admin]/ip2c/client/images/flags/dz.png
diff --git a/[admin]/ip2c/client/images/flags/ec.png b/[admin]/ip2c/client/images/flags/ec.png
new file mode 100644
index 000000000..8d9d5e33d
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/ec.png differ
diff --git a/[admin]/ip2c/client/images/flags/ee.png b/[admin]/ip2c/client/images/flags/ee.png
new file mode 100644
index 000000000..90d2684fe
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/ee.png differ
diff --git a/[admin]/admin2/client/images/flags/eg.png b/[admin]/ip2c/client/images/flags/eg.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/eg.png
rename to [admin]/ip2c/client/images/flags/eg.png
diff --git a/[admin]/admin2/client/images/flags/eh.png b/[admin]/ip2c/client/images/flags/eh.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/eh.png
rename to [admin]/ip2c/client/images/flags/eh.png
diff --git a/[admin]/admin2/client/images/flags/er.png b/[admin]/ip2c/client/images/flags/er.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/er.png
rename to [admin]/ip2c/client/images/flags/er.png
diff --git a/[admin]/ip2c/client/images/flags/es.png b/[admin]/ip2c/client/images/flags/es.png
new file mode 100644
index 000000000..6b4d8ecaa
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/es.png differ
diff --git a/[admin]/admin2/client/images/flags/et.png b/[admin]/ip2c/client/images/flags/et.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/et.png
rename to [admin]/ip2c/client/images/flags/et.png
diff --git a/[admin]/admin2/client/images/flags/eu.png b/[admin]/ip2c/client/images/flags/eu.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/eu.png
rename to [admin]/ip2c/client/images/flags/eu.png
diff --git a/[admin]/admin2/client/images/flags/fi.png b/[admin]/ip2c/client/images/flags/fi.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/fi.png
rename to [admin]/ip2c/client/images/flags/fi.png
diff --git a/[admin]/ip2c/client/images/flags/fj.png b/[admin]/ip2c/client/images/flags/fj.png
new file mode 100644
index 000000000..90e05f755
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/fj.png differ
diff --git a/[admin]/ip2c/client/images/flags/fk.png b/[admin]/ip2c/client/images/flags/fk.png
new file mode 100644
index 000000000..cdd504ffa
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/fk.png differ
diff --git a/[admin]/ip2c/client/images/flags/fm.png b/[admin]/ip2c/client/images/flags/fm.png
new file mode 100644
index 000000000..a6938d738
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/fm.png differ
diff --git a/[admin]/admin2/client/images/flags/fo.png b/[admin]/ip2c/client/images/flags/fo.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/fo.png
rename to [admin]/ip2c/client/images/flags/fo.png
diff --git a/[admin]/ip2c/client/images/flags/fr.png b/[admin]/ip2c/client/images/flags/fr.png
new file mode 100644
index 000000000..f98d26bcc
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/fr.png differ
diff --git a/[admin]/admin2/client/images/flags/ga.png b/[admin]/ip2c/client/images/flags/ga.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/ga.png
rename to [admin]/ip2c/client/images/flags/ga.png
diff --git a/[admin]/ip2c/client/images/flags/gb.png b/[admin]/ip2c/client/images/flags/gb.png
new file mode 100644
index 000000000..f029b8d64
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/gb.png differ
diff --git a/[admin]/admin2/client/images/flags/gd.png b/[admin]/ip2c/client/images/flags/gd.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/gd.png
rename to [admin]/ip2c/client/images/flags/gd.png
diff --git a/[admin]/ip2c/client/images/flags/ge.png b/[admin]/ip2c/client/images/flags/ge.png
new file mode 100644
index 000000000..2a7bc0b5c
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/ge.png differ
diff --git a/[admin]/ip2c/client/images/flags/gf.png b/[admin]/ip2c/client/images/flags/gf.png
new file mode 100644
index 000000000..f6adf3fd8
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/gf.png differ
diff --git a/[admin]/ip2c/client/images/flags/gg.png b/[admin]/ip2c/client/images/flags/gg.png
new file mode 100644
index 000000000..920d1502a
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/gg.png differ
diff --git a/[admin]/ip2c/client/images/flags/gh.png b/[admin]/ip2c/client/images/flags/gh.png
new file mode 100644
index 000000000..692e3d2e3
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/gh.png differ
diff --git a/[admin]/ip2c/client/images/flags/gi.png b/[admin]/ip2c/client/images/flags/gi.png
new file mode 100644
index 000000000..79565a927
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/gi.png differ
diff --git a/[admin]/admin2/client/images/flags/gl.png b/[admin]/ip2c/client/images/flags/gl.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/gl.png
rename to [admin]/ip2c/client/images/flags/gl.png
diff --git a/[admin]/admin2/client/images/flags/gm.png b/[admin]/ip2c/client/images/flags/gm.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/gm.png
rename to [admin]/ip2c/client/images/flags/gm.png
diff --git a/[admin]/ip2c/client/images/flags/gn.png b/[admin]/ip2c/client/images/flags/gn.png
new file mode 100644
index 000000000..9b3907615
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/gn.png differ
diff --git a/[admin]/ip2c/client/images/flags/gp.png b/[admin]/ip2c/client/images/flags/gp.png
new file mode 100644
index 000000000..8e44b5c6d
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/gp.png differ
diff --git a/[admin]/ip2c/client/images/flags/gq.png b/[admin]/ip2c/client/images/flags/gq.png
new file mode 100644
index 000000000..a81405b04
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/gq.png differ
diff --git a/[admin]/ip2c/client/images/flags/gr.png b/[admin]/ip2c/client/images/flags/gr.png
new file mode 100644
index 000000000..05db4a2ab
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/gr.png differ
diff --git a/[admin]/ip2c/client/images/flags/gs.png b/[admin]/ip2c/client/images/flags/gs.png
new file mode 100644
index 000000000..ac19bcb9d
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/gs.png differ
diff --git a/[admin]/ip2c/client/images/flags/gt.png b/[admin]/ip2c/client/images/flags/gt.png
new file mode 100644
index 000000000..117dd9cd6
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/gt.png differ
diff --git a/[admin]/ip2c/client/images/flags/gu.png b/[admin]/ip2c/client/images/flags/gu.png
new file mode 100644
index 000000000..1b1572e38
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/gu.png differ
diff --git a/[admin]/admin2/client/images/flags/gw.png b/[admin]/ip2c/client/images/flags/gw.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/gw.png
rename to [admin]/ip2c/client/images/flags/gw.png
diff --git a/[admin]/admin2/client/images/flags/gy.png b/[admin]/ip2c/client/images/flags/gy.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/gy.png
rename to [admin]/ip2c/client/images/flags/gy.png
diff --git a/[admin]/ip2c/client/images/flags/hk.png b/[admin]/ip2c/client/images/flags/hk.png
new file mode 100644
index 000000000..dae071c38
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/hk.png differ
diff --git a/[admin]/ip2c/client/images/flags/hm.png b/[admin]/ip2c/client/images/flags/hm.png
new file mode 100644
index 000000000..e8eb79d18
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/hm.png differ
diff --git a/[admin]/ip2c/client/images/flags/hn.png b/[admin]/ip2c/client/images/flags/hn.png
new file mode 100644
index 000000000..e9c06ba68
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/hn.png differ
diff --git a/[admin]/ip2c/client/images/flags/hr.png b/[admin]/ip2c/client/images/flags/hr.png
new file mode 100644
index 000000000..f9ab20009
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/hr.png differ
diff --git a/[admin]/ip2c/client/images/flags/ht.png b/[admin]/ip2c/client/images/flags/ht.png
new file mode 100644
index 000000000..e60abcf6c
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/ht.png differ
diff --git a/[admin]/ip2c/client/images/flags/hu.png b/[admin]/ip2c/client/images/flags/hu.png
new file mode 100644
index 000000000..f01594b6d
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/hu.png differ
diff --git a/[admin]/ip2c/client/images/flags/id.png b/[admin]/ip2c/client/images/flags/id.png
new file mode 100644
index 000000000..f8439fac3
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/id.png differ
diff --git a/[admin]/admin2/client/images/flags/ie.png b/[admin]/ip2c/client/images/flags/ie.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/ie.png
rename to [admin]/ip2c/client/images/flags/ie.png
diff --git a/[admin]/ip2c/client/images/flags/il.png b/[admin]/ip2c/client/images/flags/il.png
new file mode 100644
index 000000000..75f76033a
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/il.png differ
diff --git a/[admin]/ip2c/client/images/flags/im.png b/[admin]/ip2c/client/images/flags/im.png
new file mode 100644
index 000000000..217407f1b
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/im.png differ
diff --git a/[admin]/ip2c/client/images/flags/in.png b/[admin]/ip2c/client/images/flags/in.png
new file mode 100644
index 000000000..5daf19a52
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/in.png differ
diff --git a/[admin]/ip2c/client/images/flags/io.png b/[admin]/ip2c/client/images/flags/io.png
new file mode 100644
index 000000000..f91b813a7
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/io.png differ
diff --git a/[admin]/admin2/client/images/flags/iq.png b/[admin]/ip2c/client/images/flags/iq.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/iq.png
rename to [admin]/ip2c/client/images/flags/iq.png
diff --git a/[admin]/ip2c/client/images/flags/ir.png b/[admin]/ip2c/client/images/flags/ir.png
new file mode 100644
index 000000000..944337514
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/ir.png differ
diff --git a/[admin]/admin2/client/images/flags/is.png b/[admin]/ip2c/client/images/flags/is.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/is.png
rename to [admin]/ip2c/client/images/flags/is.png
diff --git a/[admin]/ip2c/client/images/flags/it.png b/[admin]/ip2c/client/images/flags/it.png
new file mode 100644
index 000000000..f3d60e1fc
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/it.png differ
diff --git a/[admin]/admin2/client/images/flags/ja.png b/[admin]/ip2c/client/images/flags/ja.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/ja.png
rename to [admin]/ip2c/client/images/flags/ja.png
diff --git a/[admin]/ip2c/client/images/flags/je.png b/[admin]/ip2c/client/images/flags/je.png
new file mode 100644
index 000000000..80ad0d1a0
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/je.png differ
diff --git a/[admin]/admin2/client/images/flags/jm.png b/[admin]/ip2c/client/images/flags/jm.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/jm.png
rename to [admin]/ip2c/client/images/flags/jm.png
diff --git a/[admin]/ip2c/client/images/flags/jo.png b/[admin]/ip2c/client/images/flags/jo.png
new file mode 100644
index 000000000..5dc3aa4ef
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/jo.png differ
diff --git a/[admin]/admin2/client/images/flags/jp.png b/[admin]/ip2c/client/images/flags/jp.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/jp.png
rename to [admin]/ip2c/client/images/flags/jp.png
diff --git a/[admin]/ip2c/client/images/flags/ke.png b/[admin]/ip2c/client/images/flags/ke.png
new file mode 100644
index 000000000..b006537fe
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/ke.png differ
diff --git a/[admin]/ip2c/client/images/flags/kg.png b/[admin]/ip2c/client/images/flags/kg.png
new file mode 100644
index 000000000..bebe95ec0
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/kg.png differ
diff --git a/[admin]/ip2c/client/images/flags/kh.png b/[admin]/ip2c/client/images/flags/kh.png
new file mode 100644
index 000000000..ab9e8635f
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/kh.png differ
diff --git a/[admin]/ip2c/client/images/flags/ki.png b/[admin]/ip2c/client/images/flags/ki.png
new file mode 100644
index 000000000..78798f9d3
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/ki.png differ
diff --git a/[admin]/ip2c/client/images/flags/km.png b/[admin]/ip2c/client/images/flags/km.png
new file mode 100644
index 000000000..1e063b596
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/km.png differ
diff --git a/[admin]/ip2c/client/images/flags/kn.png b/[admin]/ip2c/client/images/flags/kn.png
new file mode 100644
index 000000000..beb7fa576
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/kn.png differ
diff --git a/[admin]/ip2c/client/images/flags/kp.png b/[admin]/ip2c/client/images/flags/kp.png
new file mode 100644
index 000000000..4584c69c8
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/kp.png differ
diff --git a/[admin]/ip2c/client/images/flags/kr.png b/[admin]/ip2c/client/images/flags/kr.png
new file mode 100644
index 000000000..de79c0a84
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/kr.png differ
diff --git a/[admin]/admin2/client/images/flags/kw.png b/[admin]/ip2c/client/images/flags/kw.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/kw.png
rename to [admin]/ip2c/client/images/flags/kw.png
diff --git a/[admin]/ip2c/client/images/flags/ky.png b/[admin]/ip2c/client/images/flags/ky.png
new file mode 100644
index 000000000..f1af73b94
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/ky.png differ
diff --git a/[admin]/ip2c/client/images/flags/kz.png b/[admin]/ip2c/client/images/flags/kz.png
new file mode 100644
index 000000000..c81518556
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/kz.png differ
diff --git a/[admin]/ip2c/client/images/flags/la.png b/[admin]/ip2c/client/images/flags/la.png
new file mode 100644
index 000000000..7f31ecec9
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/la.png differ
diff --git a/[admin]/ip2c/client/images/flags/lb.png b/[admin]/ip2c/client/images/flags/lb.png
new file mode 100644
index 000000000..06aa8e6b5
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/lb.png differ
diff --git a/[admin]/ip2c/client/images/flags/lc.png b/[admin]/ip2c/client/images/flags/lc.png
new file mode 100644
index 000000000..4d4c421fd
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/lc.png differ
diff --git a/[admin]/ip2c/client/images/flags/li.png b/[admin]/ip2c/client/images/flags/li.png
new file mode 100644
index 000000000..f0ac0ef80
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/li.png differ
diff --git a/[admin]/ip2c/client/images/flags/lk.png b/[admin]/ip2c/client/images/flags/lk.png
new file mode 100644
index 000000000..87f6e67af
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/lk.png differ
diff --git a/[admin]/ip2c/client/images/flags/lr.png b/[admin]/ip2c/client/images/flags/lr.png
new file mode 100644
index 000000000..7bb38a64e
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/lr.png differ
diff --git a/[admin]/ip2c/client/images/flags/ls.png b/[admin]/ip2c/client/images/flags/ls.png
new file mode 100644
index 000000000..d5e8ba72e
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/ls.png differ
diff --git a/[admin]/admin2/client/images/flags/lt.png b/[admin]/ip2c/client/images/flags/lt.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/lt.png
rename to [admin]/ip2c/client/images/flags/lt.png
diff --git a/[admin]/admin2/client/images/flags/lu.png b/[admin]/ip2c/client/images/flags/lu.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/lu.png
rename to [admin]/ip2c/client/images/flags/lu.png
diff --git a/[admin]/admin2/client/images/flags/lv.png b/[admin]/ip2c/client/images/flags/lv.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/lv.png
rename to [admin]/ip2c/client/images/flags/lv.png
diff --git a/[admin]/ip2c/client/images/flags/ly.png b/[admin]/ip2c/client/images/flags/ly.png
new file mode 100644
index 000000000..127c8d08d
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/ly.png differ
diff --git a/[admin]/ip2c/client/images/flags/ma.png b/[admin]/ip2c/client/images/flags/ma.png
new file mode 100644
index 000000000..c25254996
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/ma.png differ
diff --git a/[admin]/admin2/client/images/flags/mc.png b/[admin]/ip2c/client/images/flags/mc.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/mc.png
rename to [admin]/ip2c/client/images/flags/mc.png
diff --git a/[admin]/ip2c/client/images/flags/md.png b/[admin]/ip2c/client/images/flags/md.png
new file mode 100644
index 000000000..0f60b5299
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/md.png differ
diff --git a/[admin]/ip2c/client/images/flags/me.png b/[admin]/ip2c/client/images/flags/me.png
new file mode 100644
index 000000000..660d7a321
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/me.png differ
diff --git a/[admin]/ip2c/client/images/flags/mf.png b/[admin]/ip2c/client/images/flags/mf.png
new file mode 100644
index 000000000..f98d26bcc
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/mf.png differ
diff --git a/[admin]/ip2c/client/images/flags/mg.png b/[admin]/ip2c/client/images/flags/mg.png
new file mode 100644
index 000000000..95f400188
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/mg.png differ
diff --git a/[admin]/admin2/client/images/flags/mh.png b/[admin]/ip2c/client/images/flags/mh.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/mh.png
rename to [admin]/ip2c/client/images/flags/mh.png
diff --git a/[admin]/admin2/client/images/flags/mil.png b/[admin]/ip2c/client/images/flags/mil.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/mil.png
rename to [admin]/ip2c/client/images/flags/mil.png
diff --git a/[admin]/ip2c/client/images/flags/mk.png b/[admin]/ip2c/client/images/flags/mk.png
new file mode 100644
index 000000000..bba855a2e
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/mk.png differ
diff --git a/[admin]/ip2c/client/images/flags/ml.png b/[admin]/ip2c/client/images/flags/ml.png
new file mode 100644
index 000000000..a05c3c945
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/ml.png differ
diff --git a/[admin]/ip2c/client/images/flags/mm.png b/[admin]/ip2c/client/images/flags/mm.png
new file mode 100644
index 000000000..f3a6bf359
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/mm.png differ
diff --git a/[admin]/ip2c/client/images/flags/mn.png b/[admin]/ip2c/client/images/flags/mn.png
new file mode 100644
index 000000000..a6ba7d141
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/mn.png differ
diff --git a/[admin]/ip2c/client/images/flags/mo.png b/[admin]/ip2c/client/images/flags/mo.png
new file mode 100644
index 000000000..7eeb89671
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/mo.png differ
diff --git a/[admin]/ip2c/client/images/flags/mp.png b/[admin]/ip2c/client/images/flags/mp.png
new file mode 100644
index 000000000..46ade4a09
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/mp.png differ
diff --git a/[admin]/ip2c/client/images/flags/mq.png b/[admin]/ip2c/client/images/flags/mq.png
new file mode 100644
index 000000000..f98d26bcc
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/mq.png differ
diff --git a/[admin]/ip2c/client/images/flags/mr.png b/[admin]/ip2c/client/images/flags/mr.png
new file mode 100644
index 000000000..d6306cd29
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/mr.png differ
diff --git a/[admin]/ip2c/client/images/flags/ms.png b/[admin]/ip2c/client/images/flags/ms.png
new file mode 100644
index 000000000..eda9c9484
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/ms.png differ
diff --git a/[admin]/admin2/client/images/flags/mt.png b/[admin]/ip2c/client/images/flags/mt.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/mt.png
rename to [admin]/ip2c/client/images/flags/mt.png
diff --git a/[admin]/ip2c/client/images/flags/mu.png b/[admin]/ip2c/client/images/flags/mu.png
new file mode 100644
index 000000000..b5eb8f3b7
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/mu.png differ
diff --git a/[admin]/ip2c/client/images/flags/mv.png b/[admin]/ip2c/client/images/flags/mv.png
new file mode 100644
index 000000000..37f55dd1d
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/mv.png differ
diff --git a/[admin]/ip2c/client/images/flags/mw.png b/[admin]/ip2c/client/images/flags/mw.png
new file mode 100644
index 000000000..9affbafcb
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/mw.png differ
diff --git a/[admin]/ip2c/client/images/flags/mx.png b/[admin]/ip2c/client/images/flags/mx.png
new file mode 100644
index 000000000..b8bb2ac47
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/mx.png differ
diff --git a/[admin]/ip2c/client/images/flags/my.png b/[admin]/ip2c/client/images/flags/my.png
new file mode 100644
index 000000000..e8900ace4
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/my.png differ
diff --git a/[admin]/ip2c/client/images/flags/mz.png b/[admin]/ip2c/client/images/flags/mz.png
new file mode 100644
index 000000000..f7aad8c36
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/mz.png differ
diff --git a/[admin]/ip2c/client/images/flags/na.png b/[admin]/ip2c/client/images/flags/na.png
new file mode 100644
index 000000000..65d0a698e
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/na.png differ
diff --git a/[admin]/ip2c/client/images/flags/nc.png b/[admin]/ip2c/client/images/flags/nc.png
new file mode 100644
index 000000000..0776ff8b5
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/nc.png differ
diff --git a/[admin]/ip2c/client/images/flags/ne.png b/[admin]/ip2c/client/images/flags/ne.png
new file mode 100644
index 000000000..cda821ceb
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/ne.png differ
diff --git a/[admin]/ip2c/client/images/flags/nf.png b/[admin]/ip2c/client/images/flags/nf.png
new file mode 100644
index 000000000..9a4766802
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/nf.png differ
diff --git a/[admin]/admin2/client/images/flags/ng.png b/[admin]/ip2c/client/images/flags/ng.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/ng.png
rename to [admin]/ip2c/client/images/flags/ng.png
diff --git a/[admin]/ip2c/client/images/flags/ni.png b/[admin]/ip2c/client/images/flags/ni.png
new file mode 100644
index 000000000..bfdbf2556
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/ni.png differ
diff --git a/[admin]/ip2c/client/images/flags/nl.png b/[admin]/ip2c/client/images/flags/nl.png
new file mode 100644
index 000000000..42e1ae741
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/nl.png differ
diff --git a/[admin]/admin2/client/images/flags/no.png b/[admin]/ip2c/client/images/flags/no.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/no.png
rename to [admin]/ip2c/client/images/flags/no.png
diff --git a/[admin]/ip2c/client/images/flags/np.png b/[admin]/ip2c/client/images/flags/np.png
new file mode 100644
index 000000000..cc3bb06fb
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/np.png differ
diff --git a/[admin]/admin2/client/images/flags/nr.png b/[admin]/ip2c/client/images/flags/nr.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/nr.png
rename to [admin]/ip2c/client/images/flags/nr.png
diff --git a/[admin]/ip2c/client/images/flags/nu.png b/[admin]/ip2c/client/images/flags/nu.png
new file mode 100644
index 000000000..84a41ad6c
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/nu.png differ
diff --git a/[admin]/ip2c/client/images/flags/nz.png b/[admin]/ip2c/client/images/flags/nz.png
new file mode 100644
index 000000000..ab751b98e
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/nz.png differ
diff --git a/[admin]/ip2c/client/images/flags/om.png b/[admin]/ip2c/client/images/flags/om.png
new file mode 100644
index 000000000..a6c07febb
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/om.png differ
diff --git a/[admin]/admin2/client/images/flags/pa.png b/[admin]/ip2c/client/images/flags/pa.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/pa.png
rename to [admin]/ip2c/client/images/flags/pa.png
diff --git a/[admin]/ip2c/client/images/flags/pe.png b/[admin]/ip2c/client/images/flags/pe.png
new file mode 100644
index 000000000..0a4623824
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/pe.png differ
diff --git a/[admin]/ip2c/client/images/flags/pf.png b/[admin]/ip2c/client/images/flags/pf.png
new file mode 100644
index 000000000..8261a793e
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/pf.png differ
diff --git a/[admin]/ip2c/client/images/flags/pg.png b/[admin]/ip2c/client/images/flags/pg.png
new file mode 100644
index 000000000..d2480dd9b
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/pg.png differ
diff --git a/[admin]/ip2c/client/images/flags/ph.png b/[admin]/ip2c/client/images/flags/ph.png
new file mode 100644
index 000000000..720249a44
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/ph.png differ
diff --git a/[admin]/ip2c/client/images/flags/pk.png b/[admin]/ip2c/client/images/flags/pk.png
new file mode 100644
index 000000000..20b24bf04
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/pk.png differ
diff --git a/[admin]/ip2c/client/images/flags/pl.png b/[admin]/ip2c/client/images/flags/pl.png
new file mode 100644
index 000000000..471bcf6c7
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/pl.png differ
diff --git a/[admin]/ip2c/client/images/flags/pm.png b/[admin]/ip2c/client/images/flags/pm.png
new file mode 100644
index 000000000..62d20ef37
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/pm.png differ
diff --git a/[admin]/ip2c/client/images/flags/pn.png b/[admin]/ip2c/client/images/flags/pn.png
new file mode 100644
index 000000000..3667babab
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/pn.png differ
diff --git a/[admin]/admin2/client/images/flags/pr.png b/[admin]/ip2c/client/images/flags/pr.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/pr.png
rename to [admin]/ip2c/client/images/flags/pr.png
diff --git a/[admin]/admin2/client/images/flags/ps.png b/[admin]/ip2c/client/images/flags/ps.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/ps.png
rename to [admin]/ip2c/client/images/flags/ps.png
diff --git a/[admin]/ip2c/client/images/flags/pt.png b/[admin]/ip2c/client/images/flags/pt.png
new file mode 100644
index 000000000..220324dc5
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/pt.png differ
diff --git a/[admin]/ip2c/client/images/flags/pw.png b/[admin]/ip2c/client/images/flags/pw.png
new file mode 100644
index 000000000..31fd2139a
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/pw.png differ
diff --git a/[admin]/ip2c/client/images/flags/py.png b/[admin]/ip2c/client/images/flags/py.png
new file mode 100644
index 000000000..6d0fdbf16
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/py.png differ
diff --git a/[admin]/admin2/client/images/flags/qa.png b/[admin]/ip2c/client/images/flags/qa.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/qa.png
rename to [admin]/ip2c/client/images/flags/qa.png
diff --git a/[admin]/admin2/client/images/flags/re.png b/[admin]/ip2c/client/images/flags/re.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/re.png
rename to [admin]/ip2c/client/images/flags/re.png
diff --git a/[admin]/admin2/client/images/flags/ro.png b/[admin]/ip2c/client/images/flags/ro.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/ro.png
rename to [admin]/ip2c/client/images/flags/ro.png
diff --git a/[admin]/ip2c/client/images/flags/rs.png b/[admin]/ip2c/client/images/flags/rs.png
new file mode 100644
index 000000000..2915ab9c8
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/rs.png differ
diff --git a/[admin]/ip2c/client/images/flags/ru.png b/[admin]/ip2c/client/images/flags/ru.png
new file mode 100644
index 000000000..f23bcd3b9
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/ru.png differ
diff --git a/[admin]/admin2/client/images/flags/rw.png b/[admin]/ip2c/client/images/flags/rw.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/rw.png
rename to [admin]/ip2c/client/images/flags/rw.png
diff --git a/[admin]/ip2c/client/images/flags/sa.png b/[admin]/ip2c/client/images/flags/sa.png
new file mode 100644
index 000000000..db4beea3e
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/sa.png differ
diff --git a/[admin]/ip2c/client/images/flags/sb.png b/[admin]/ip2c/client/images/flags/sb.png
new file mode 100644
index 000000000..688909c82
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/sb.png differ
diff --git a/[admin]/ip2c/client/images/flags/sc.png b/[admin]/ip2c/client/images/flags/sc.png
new file mode 100644
index 000000000..ed6c6c10b
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/sc.png differ
diff --git a/[admin]/ip2c/client/images/flags/sd.png b/[admin]/ip2c/client/images/flags/sd.png
new file mode 100644
index 000000000..fae8cf2c4
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/sd.png differ
diff --git a/[admin]/admin2/client/images/flags/se.png b/[admin]/ip2c/client/images/flags/se.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/se.png
rename to [admin]/ip2c/client/images/flags/se.png
diff --git a/[admin]/ip2c/client/images/flags/sg.png b/[admin]/ip2c/client/images/flags/sg.png
new file mode 100644
index 000000000..26a01063b
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/sg.png differ
diff --git a/[admin]/ip2c/client/images/flags/sh.png b/[admin]/ip2c/client/images/flags/sh.png
new file mode 100644
index 000000000..f029b8d64
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/sh.png differ
diff --git a/[admin]/ip2c/client/images/flags/si.png b/[admin]/ip2c/client/images/flags/si.png
new file mode 100644
index 000000000..6ddffda24
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/si.png differ
diff --git a/[admin]/admin2/client/images/flags/sj.png b/[admin]/ip2c/client/images/flags/sj.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/sj.png
rename to [admin]/ip2c/client/images/flags/sj.png
diff --git a/[admin]/ip2c/client/images/flags/sk.png b/[admin]/ip2c/client/images/flags/sk.png
new file mode 100644
index 000000000..2c0b13e14
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/sk.png differ
diff --git a/[admin]/admin2/client/images/flags/sl.png b/[admin]/ip2c/client/images/flags/sl.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/sl.png
rename to [admin]/ip2c/client/images/flags/sl.png
diff --git a/[admin]/ip2c/client/images/flags/sm.png b/[admin]/ip2c/client/images/flags/sm.png
new file mode 100644
index 000000000..1c834c098
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/sm.png differ
diff --git a/[admin]/ip2c/client/images/flags/sn.png b/[admin]/ip2c/client/images/flags/sn.png
new file mode 100644
index 000000000..6537ac9af
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/sn.png differ
diff --git a/[admin]/admin2/client/images/flags/so.png b/[admin]/ip2c/client/images/flags/so.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/so.png
rename to [admin]/ip2c/client/images/flags/so.png
diff --git a/[admin]/ip2c/client/images/flags/sr.png b/[admin]/ip2c/client/images/flags/sr.png
new file mode 100644
index 000000000..18ec41059
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/sr.png differ
diff --git a/[admin]/ip2c/client/images/flags/ss.png b/[admin]/ip2c/client/images/flags/ss.png
new file mode 100644
index 000000000..2c9487cf8
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/ss.png differ
diff --git a/[admin]/ip2c/client/images/flags/st.png b/[admin]/ip2c/client/images/flags/st.png
new file mode 100644
index 000000000..0d477a46c
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/st.png differ
diff --git a/[admin]/ip2c/client/images/flags/sv.png b/[admin]/ip2c/client/images/flags/sv.png
new file mode 100644
index 000000000..d8777444b
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/sv.png differ
diff --git a/[admin]/ip2c/client/images/flags/sx.png b/[admin]/ip2c/client/images/flags/sx.png
new file mode 100644
index 000000000..d859abe83
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/sx.png differ
diff --git a/[admin]/admin2/client/images/flags/sy.png b/[admin]/ip2c/client/images/flags/sy.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/sy.png
rename to [admin]/ip2c/client/images/flags/sy.png
diff --git a/[admin]/ip2c/client/images/flags/sz.png b/[admin]/ip2c/client/images/flags/sz.png
new file mode 100644
index 000000000..97cd27d95
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/sz.png differ
diff --git a/[admin]/ip2c/client/images/flags/tc.png b/[admin]/ip2c/client/images/flags/tc.png
new file mode 100644
index 000000000..445df9251
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/tc.png differ
diff --git a/[admin]/admin2/client/images/flags/td.png b/[admin]/ip2c/client/images/flags/td.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/td.png
rename to [admin]/ip2c/client/images/flags/td.png
diff --git a/[admin]/ip2c/client/images/flags/tf.png b/[admin]/ip2c/client/images/flags/tf.png
new file mode 100644
index 000000000..47e79e531
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/tf.png differ
diff --git a/[admin]/ip2c/client/images/flags/tg.png b/[admin]/ip2c/client/images/flags/tg.png
new file mode 100644
index 000000000..d14cd768c
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/tg.png differ
diff --git a/[admin]/ip2c/client/images/flags/th.png b/[admin]/ip2c/client/images/flags/th.png
new file mode 100644
index 000000000..81875542a
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/th.png differ
diff --git a/[admin]/ip2c/client/images/flags/tj.png b/[admin]/ip2c/client/images/flags/tj.png
new file mode 100644
index 000000000..c660e93de
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/tj.png differ
diff --git a/[admin]/ip2c/client/images/flags/tk.png b/[admin]/ip2c/client/images/flags/tk.png
new file mode 100644
index 000000000..ab751b98e
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/tk.png differ
diff --git a/[admin]/ip2c/client/images/flags/tl.png b/[admin]/ip2c/client/images/flags/tl.png
new file mode 100644
index 000000000..c95cbfd06
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/tl.png differ
diff --git a/[admin]/ip2c/client/images/flags/tm.png b/[admin]/ip2c/client/images/flags/tm.png
new file mode 100644
index 000000000..842aec2af
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/tm.png differ
diff --git a/[admin]/ip2c/client/images/flags/tn.png b/[admin]/ip2c/client/images/flags/tn.png
new file mode 100644
index 000000000..4a64300e0
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/tn.png differ
diff --git a/[admin]/admin2/client/images/flags/to.png b/[admin]/ip2c/client/images/flags/to.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/to.png
rename to [admin]/ip2c/client/images/flags/to.png
diff --git a/[admin]/ip2c/client/images/flags/tr.png b/[admin]/ip2c/client/images/flags/tr.png
new file mode 100644
index 000000000..27c87ba90
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/tr.png differ
diff --git a/[admin]/ip2c/client/images/flags/tt.png b/[admin]/ip2c/client/images/flags/tt.png
new file mode 100644
index 000000000..25c374f74
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/tt.png differ
diff --git a/[admin]/admin2/client/images/flags/tv.png b/[admin]/ip2c/client/images/flags/tv.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/tv.png
rename to [admin]/ip2c/client/images/flags/tv.png
diff --git a/[admin]/ip2c/client/images/flags/tw.png b/[admin]/ip2c/client/images/flags/tw.png
new file mode 100644
index 000000000..32f06032b
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/tw.png differ
diff --git a/[admin]/ip2c/client/images/flags/tz.png b/[admin]/ip2c/client/images/flags/tz.png
new file mode 100644
index 000000000..e1a9aaefa
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/tz.png differ
diff --git a/[admin]/admin2/client/images/flags/ua.png b/[admin]/ip2c/client/images/flags/ua.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/ua.png
rename to [admin]/ip2c/client/images/flags/ua.png
diff --git a/[admin]/ip2c/client/images/flags/ug.png b/[admin]/ip2c/client/images/flags/ug.png
new file mode 100644
index 000000000..6d7c16960
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/ug.png differ
diff --git a/[admin]/ip2c/client/images/flags/uk.png b/[admin]/ip2c/client/images/flags/uk.png
new file mode 100644
index 000000000..f029b8d64
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/uk.png differ
diff --git a/[admin]/admin2/client/images/flags/um.png b/[admin]/ip2c/client/images/flags/um.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/um.png
rename to [admin]/ip2c/client/images/flags/um.png
diff --git a/[admin]/admin2/client/images/flags/us.png b/[admin]/ip2c/client/images/flags/us.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/us.png
rename to [admin]/ip2c/client/images/flags/us.png
diff --git a/[admin]/ip2c/client/images/flags/uy.png b/[admin]/ip2c/client/images/flags/uy.png
new file mode 100644
index 000000000..d5fffb334
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/uy.png differ
diff --git a/[admin]/ip2c/client/images/flags/uz.png b/[admin]/ip2c/client/images/flags/uz.png
new file mode 100644
index 000000000..48d95e0c9
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/uz.png differ
diff --git a/[admin]/ip2c/client/images/flags/va.png b/[admin]/ip2c/client/images/flags/va.png
new file mode 100644
index 000000000..6d65b48f7
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/va.png differ
diff --git a/[admin]/ip2c/client/images/flags/vc.png b/[admin]/ip2c/client/images/flags/vc.png
new file mode 100644
index 000000000..b43d55243
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/vc.png differ
diff --git a/[admin]/ip2c/client/images/flags/ve.png b/[admin]/ip2c/client/images/flags/ve.png
new file mode 100644
index 000000000..c1083cf8b
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/ve.png differ
diff --git a/[admin]/ip2c/client/images/flags/vg.png b/[admin]/ip2c/client/images/flags/vg.png
new file mode 100644
index 000000000..f9cfc6cd1
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/vg.png differ
diff --git a/[admin]/ip2c/client/images/flags/vi.png b/[admin]/ip2c/client/images/flags/vi.png
new file mode 100644
index 000000000..0a3e3ba98
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/vi.png differ
diff --git a/[admin]/admin2/client/images/flags/vn.png b/[admin]/ip2c/client/images/flags/vn.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/vn.png
rename to [admin]/ip2c/client/images/flags/vn.png
diff --git a/[admin]/ip2c/client/images/flags/vu.png b/[admin]/ip2c/client/images/flags/vu.png
new file mode 100644
index 000000000..c38fb5590
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/vu.png differ
diff --git a/[admin]/admin2/client/images/flags/wf.png b/[admin]/ip2c/client/images/flags/wf.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/wf.png
rename to [admin]/ip2c/client/images/flags/wf.png
diff --git a/[admin]/admin2/client/images/flags/ws.png b/[admin]/ip2c/client/images/flags/ws.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/ws.png
rename to [admin]/ip2c/client/images/flags/ws.png
diff --git a/[admin]/ip2c/client/images/flags/xk.png b/[admin]/ip2c/client/images/flags/xk.png
new file mode 100644
index 000000000..69c074c5c
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/xk.png differ
diff --git a/[admin]/admin2/client/images/flags/ye.png b/[admin]/ip2c/client/images/flags/ye.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/ye.png
rename to [admin]/ip2c/client/images/flags/ye.png
diff --git a/[admin]/admin2/client/images/flags/yt.png b/[admin]/ip2c/client/images/flags/yt.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/yt.png
rename to [admin]/ip2c/client/images/flags/yt.png
diff --git a/[admin]/admin2/client/images/flags/yu.png b/[admin]/ip2c/client/images/flags/yu.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/yu.png
rename to [admin]/ip2c/client/images/flags/yu.png
diff --git a/[admin]/admin2/client/images/flags/za.png b/[admin]/ip2c/client/images/flags/za.png
similarity index 100%
rename from [admin]/admin2/client/images/flags/za.png
rename to [admin]/ip2c/client/images/flags/za.png
diff --git a/[admin]/ip2c/client/images/flags/zm.png b/[admin]/ip2c/client/images/flags/zm.png
new file mode 100644
index 000000000..122960890
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/zm.png differ
diff --git a/[admin]/ip2c/client/images/flags/zw.png b/[admin]/ip2c/client/images/flags/zw.png
new file mode 100644
index 000000000..97483ea66
Binary files /dev/null and b/[admin]/ip2c/client/images/flags/zw.png differ
diff --git a/[admin]/admin/conf/IpToCountryCompact.csv b/[admin]/ip2c/conf/IpToCountryCompact.csv
similarity index 100%
rename from [admin]/admin/conf/IpToCountryCompact.csv
rename to [admin]/ip2c/conf/IpToCountryCompact.csv
diff --git a/[admin]/ip2c/meta.xml b/[admin]/ip2c/meta.xml
new file mode 100644
index 000000000..6e8a423fb
--- /dev/null
+++ b/[admin]/ip2c/meta.xml
@@ -0,0 +1,272 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/[admin]/ip2c/server.lua b/[admin]/ip2c/server.lua
new file mode 100644
index 000000000..d65f66fa2
--- /dev/null
+++ b/[admin]/ip2c/server.lua
@@ -0,0 +1,342 @@
+--[[**********************************
+*
+* Multi Theft Auto - Admin Panel
+*
+* admin_ip2c.lua
+*
+* Original File by lil_Toady
+*
+**************************************]]
+
+--[[
+ This resource is optional.
+ If it is not started, other resources will not get player country info.
+]]
+
+local aCountries = {}
+local IP2C_FILENAME = "conf/IpToCountryCompact.csv"
+local IP2C_UPDATE_URL = "http://mirror-cdn.multitheftauto.com/mtasa/scripts/IpToCountryCompact.csv"
+local IP2C_UPDATE_INTERVAL_SECONDS = 60 * 60 * 24 * 1 -- Update no more than once a day
+
+-- [Exported]
+function getPlayerCountry ( player )
+ if not loadIPGroupsIsReady() then return false end
+ local ip = getPlayerIP(player)
+ local ip_group = tonumber ( gettok ( ip, 1, 46 ) )
+ local ip_code = ( gettok ( ip, 2, 46 ) * 65536 ) + ( gettok ( ip, 3, 46 ) * 256 ) + ( gettok ( ip, 4, 46 ) )
+ if ( not aCountries[ip_group] ) then
+ return false
+ end
+ for id, group in ipairs ( aCountries[ip_group] ) do
+ local buffer = ByteBuffer:new( group )
+ local rstart = buffer:readInt24()
+ if ip_code >= rstart then
+ local rend = buffer:readInt24()
+ if ip_code <= rend then
+ local rcountry = buffer:readBytes( 2 )
+ return rcountry ~= "ZZ" and rcountry
+ end
+ end
+ end
+ return false
+end
+
+-- Returns false if aCountries is not ready
+function loadIPGroupsIsReady ()
+ if not ipGroupsStatus then
+ ipGroupsStatus = "working"
+ CoroutineSleeper:new( loadIPGroupsWorker )
+ end
+ return ipGroupsStatus == "ready"
+end
+setTimer( loadIPGroupsIsReady, 1000, 1 )
+
+
+-- Load all IP groups from "conf/IpToCountryCompact.csv"
+function loadIPGroupsWorker ( cor )
+
+ -- Maybe update file using the 'internet'
+ checkForIp2cFileUpdate( cor )
+
+ -- Read file
+ unrelPosReset()
+ local tick = getTickCount()
+ local fileReader = FileLineReader:new( IP2C_FILENAME )
+ while true do
+ local line = fileReader:readLine()
+ if not line then
+ break
+ end
+
+ -- See if time to pause execution
+ if getTickCount() > tick + 50 then
+ cor:sleep(50)
+ tick = getTickCount()
+ end
+
+ -- Parse line
+ local parts = split( line, string.byte(',') )
+ if #parts > 2 then
+ local rstart = tonumber(parts[1])
+ local rend = tonumber(parts[2])
+ local rcountry = parts[3]
+
+ -- Relative to absolute numbers
+ rstart = unrelRange ( rstart )
+ rend = unrelRange ( rend )
+
+ -- Top byte is group
+ local group = math.floor( rstart / 0x1000000 )
+
+ -- Remove top byte from ranges
+ rstart = rstart - group * 0x1000000
+ rend = rend - group * 0x1000000
+
+ if not aCountries[group] then
+ aCountries[group] = {}
+ end
+ local count = #aCountries[group] + 1
+
+ -- Add country/IP range to aCountries
+ local buffer = ByteBuffer:new()
+ buffer:writeInt24( rstart )
+ buffer:writeInt24( rend )
+ buffer:writeBytes( rcountry, 2 )
+ aCountries[group][count] = buffer.data
+ end
+ end
+ ipGroupsStatus = "ready"
+ collectgarbage("collect")
+ return true
+end
+
+-- For squeezing data together
+ByteBuffer = {
+ new = function(self, indata)
+ local newItem = { data = indata or "", readPos = 1 }
+ return setmetatable(newItem, { __index = ByteBuffer })
+ end,
+
+ Copy = function(self)
+ return ByteBuffer:new(self.data)
+ end,
+
+ -- Write
+ writeInt24 = function(self,value)
+ local b0 = math.floor(value / 1) % 256
+ local b1 = math.floor(value / 256) % 256
+ local b2 = math.floor(value / 65536) % 256
+ self.data = self.data .. string.char(b0,b1,b2)
+ end,
+
+ writeBytes = function(self, chars, count)
+ self.data = self.data .. string.sub(chars,1,count)
+ end,
+
+ -- Read
+ readInt24 = function(self,value)
+ local b0,b1,b2 = string.byte(self.data, self.readPos, self.readPos+2)
+ self.readPos = self.readPos + 3
+ return b0 + b1 * 256 + b2 * 65536
+ end,
+
+ readBytes = function(self, count)
+ self.readPos = self.readPos + count
+ return string.sub(self.data, self.readPos - count, self.readPos - 1)
+ end,
+}
+
+
+-- Make a stream of absolute numbers relative to each other
+local relPos = 0
+function relPosReset()
+ relPos = 0
+end
+function relRange( v )
+ local rel = v - relPos
+ relPos = v
+ return rel
+end
+
+-- Make a stream of relative numbers absolute
+local unrelPos = 0
+function unrelPosReset()
+ unrelPos = 0
+end
+function unrelRange( v )
+ local unrel = v + unrelPos
+ unrelPos = unrel
+ return unrel
+end
+
+
+----------------------------------------------------------------------------------------
+-- Check MTA HQ for possible update of IpToCountry file
+----------------------------------------------------------------------------------------
+function checkForIp2cFileUpdate( cor )
+ -- Time for update?
+ local timeNow = getRealTime().timestamp
+ local lastUpdateTime = tonumber( get( "ip2cUpdateTime" ) ) or 0
+ local timeSinceUpdate = timeNow - lastUpdateTime
+ if ( timeSinceUpdate >= 0 and timeSinceUpdate < IP2C_UPDATE_INTERVAL_SECONDS ) then
+ return -- Not yet
+ end
+
+ set( "ip2cUpdateTime", timeNow )
+
+ -- Get md5
+ local fetchedMd5,errno = fetchRemoteContent( cor, IP2C_UPDATE_URL .. ".md5" );
+ if errno ~= 0 then return end
+
+ -- check md5 against current file
+ local currentMd5 = md5( fileLoadContent( IP2C_FILENAME ) );
+ if currentMd5 == string.upper(fetchedMd5) then
+ return -- We already have the latest file
+ end
+
+ -- Fetch remote ip2c file
+ local fetchedCsv,errno2 = fetchRemoteContent( cor, IP2C_UPDATE_URL );
+ if errno2 ~= 0 then return end
+
+ -- Check download was correct
+ local newMd5 = md5( fetchedCsv );
+ if newMd5 ~= string.upper(fetchedMd5) then
+ return -- Download error, or md5 file incorrect
+ end
+
+ -- Update file
+ fileSaveContent( IP2C_FILENAME, fetchedCsv );
+end
+
+
+----------------------------------------------------------------------------------------
+-- Fetch remote content and wait for response
+----------------------------------------------------------------------------------------
+function fetchRemoteContent( cor, url )
+ local dataOut,errnoOut = nil, nil
+ if fetchRemote( url, 2, function(data,errno) dataOut=data errnoOut=errno end ) then
+ while( errnoOut == nil ) do
+ cor:sleep(50)
+ end
+ end
+ return dataOut,errnoOut or -1
+end
+
+----------------------------------------------------------------------------------------
+-- Load file contents to a string
+----------------------------------------------------------------------------------------
+function fileLoadContent( filename )
+ local hFile = fileOpen( filename )
+ if ( hFile ) then
+ local data = fileRead( hFile, fileGetSize( hFile ) )
+ fileClose( hFile )
+ return data
+ else
+ return false
+ end
+end
+
+----------------------------------------------------------------------------------------
+-- Save a string to file
+----------------------------------------------------------------------------------------
+function fileSaveContent( filename, data )
+ local hFile = fileCreate( filename )
+ if ( hFile ) then
+ fileWrite( hFile, data )
+ fileClose( hFile )
+ return true
+ else
+ return false
+ end
+end
+
+----------------------------------------------------------------------------------------
+-- FileLineReader
+-- Read a file line by line
+----------------------------------------------------------------------------------------
+FileLineReader = {
+ -- filename is file to read
+ new = function(self, filename)
+ local obj = setmetatable({}, { __index = FileLineReader })
+ self.hFile = fileOpen( filename )
+ self.buffer = ""
+ return obj
+ end,
+
+ -- Close file
+ close = function(self)
+ if self.hFile then
+ fileClose( self.hFile )
+ end
+ self.hFile = nil
+ end,
+
+ -- Read line. Return false if EOF
+ readLine = function(self)
+ if not self.hFile then return false end
+ while true do
+ local endpos = string.find(self.buffer, "\n")
+ -- Found '\n' ?
+ if endpos then
+ local line = string.sub(self.buffer, 1, endpos - 1)
+ self.buffer = string.sub(self.buffer, endpos + 1)
+ return line
+ end
+ -- Get more bytes if possible
+ if fileIsEOF( self.hFile ) then
+ if string.len( self.buffer ) > 0 then
+ -- Last line has no '\n'
+ local line = self.buffer
+ self.buffer = ""
+ return line
+ end
+ self:close()
+ return false
+ end
+ self.buffer = self.buffer .. fileRead( self.hFile, 500 )
+ end
+ end,
+}
+
+----------------------------------------------------------------------------------------
+-- CoroutineSleeper
+-- Wrapper for coroutine which can sleep and automatically resume
+----------------------------------------------------------------------------------------
+CoroutineSleeper = {
+ -- myFunc is coroutine entry point
+ new = function(self, myFunc, ...)
+ local obj = setmetatable({}, { __index = CoroutineSleeper })
+ -- Use inner function to call myFunc, so we can auto :detach when finished
+ obj.handle = coroutine.create( function(obj2, ...)
+ myFunc(obj2, ...)
+ obj:detach()
+ end )
+ coroutine.resume(obj.handle,obj, ...)
+ return obj
+ end,
+
+ -- Remove ref to coroutine
+ detach = function(self)
+ self.handle = nil
+ end,
+
+ -- Check if still has ref to coroutine
+ isAttached = function(self)
+ return self.handle ~= nil
+ end,
+
+ -- Sleep for a bit, then automatically resume
+ sleep = function(self, ms)
+ if not self:isAttached() then return end
+ setTimer( function()
+ if not self:isAttached() then return end
+ local status = coroutine.status(self.handle)
+ if (status == "suspended") then
+ coroutine.resume(self.handle)
+ elseif (status == "dead") then
+ self.handle = nil
+ end
+ end, math.max( ms, 50 ), 1 )
+ coroutine.yield()
+ end,
+}
diff --git a/[admin]/ip2c/shared.lua b/[admin]/ip2c/shared.lua
new file mode 100644
index 000000000..fad3d796d
--- /dev/null
+++ b/[admin]/ip2c/shared.lua
@@ -0,0 +1,259 @@
+-- Country names object using 2-letter country codes to reference country name
+-- ISO 3166 Alpha-2 Format: [2 letter Country Code]: [Country Name]
+-- Sorted alphabetical by country name (special characters on bottom)
+local countryListAlpha2 = {
+ ["AF"] = "Afghanistan",
+ ["AL"] = "Albania",
+ ["DZ"] = "Algeria",
+ ["AS"] = "American Samoa",
+ ["AD"] = "Andorra",
+ ["AO"] = "Angola",
+ ["AI"] = "Anguilla",
+ ["AQ"] = "Antarctica",
+ ["AG"] = "Antigua and Barbuda",
+ ["AR"] = "Argentina",
+ ["AM"] = "Armenia",
+ ["AW"] = "Aruba",
+ ["AU"] = "Australia",
+ ["AT"] = "Austria",
+ ["AZ"] = "Azerbaijan",
+ ["BS"] = "Bahamas (the)",
+ ["BH"] = "Bahrain",
+ ["BD"] = "Bangladesh",
+ ["BB"] = "Barbados",
+ ["BY"] = "Belarus",
+ ["BE"] = "Belgium",
+ ["BZ"] = "Belize",
+ ["BJ"] = "Benin",
+ ["BM"] = "Bermuda",
+ ["BT"] = "Bhutan",
+ ["BO"] = "Bolivia (Plurinational State of)",
+ ["BQ"] = "Bonaire, Sint Eustatius and Saba",
+ ["BA"] = "Bosnia and Herzegovina",
+ ["BW"] = "Botswana",
+ ["BV"] = "Bouvet Island",
+ ["BR"] = "Brazil",
+ ["IO"] = "British Indian Ocean Territory (the)",
+ ["BN"] = "Brunei Darussalam",
+ ["BG"] = "Bulgaria",
+ ["BF"] = "Burkina Faso",
+ ["BI"] = "Burundi",
+ ["CV"] = "Cabo Verde",
+ ["KH"] = "Cambodia",
+ ["CM"] = "Cameroon",
+ ["CA"] = "Canada",
+ ["KY"] = "Cayman Islands (the)",
+ ["CF"] = "Central African Republic (the)",
+ ["TD"] = "Chad",
+ ["CL"] = "Chile",
+ ["CN"] = "China",
+ ["CX"] = "Christmas Island",
+ ["CC"] = "Cocos (Keeling) Islands (the)",
+ ["CO"] = "Colombia",
+ ["KM"] = "Comoros (the)",
+ ["CD"] = "Congo (the Democratic Republic of the)",
+ ["CG"] = "Congo (the)",
+ ["CK"] = "Cook Islands (the)",
+ ["CR"] = "Costa Rica",
+ ["HR"] = "Croatia",
+ ["CU"] = "Cuba",
+ ["CW"] = "Curaçao",
+ ["CY"] = "Cyprus",
+ ["CZ"] = "Czechia",
+ ["CI"] = "Côte d'Ivoire",
+ ["DK"] = "Denmark",
+ ["DJ"] = "Djibouti",
+ ["DM"] = "Dominica",
+ ["DO"] = "Dominican Republic (the)",
+ ["EC"] = "Ecuador",
+ ["EG"] = "Egypt",
+ ["SV"] = "El Salvador",
+ ["GQ"] = "Equatorial Guinea",
+ ["ER"] = "Eritrea",
+ ["EE"] = "Estonia",
+ ["SZ"] = "Eswatini",
+ ["ET"] = "Ethiopia",
+ ["FK"] = "Falkland Islands (the) [Malvinas]",
+ ["FO"] = "Faroe Islands (the)",
+ ["FJ"] = "Fiji",
+ ["FI"] = "Finland",
+ ["FR"] = "France",
+ ["GF"] = "French Guiana",
+ ["PF"] = "French Polynesia",
+ ["TF"] = "French Southern Territories (the)",
+ ["GA"] = "Gabon",
+ ["GM"] = "Gambia (the)",
+ ["GE"] = "Georgia",
+ ["DE"] = "Germany",
+ ["GH"] = "Ghana",
+ ["GI"] = "Gibraltar",
+ ["GR"] = "Greece",
+ ["GL"] = "Greenland",
+ ["GD"] = "Grenada",
+ ["GP"] = "Guadeloupe",
+ ["GU"] = "Guam",
+ ["GT"] = "Guatemala",
+ ["GG"] = "Guernsey",
+ ["GN"] = "Guinea",
+ ["GW"] = "Guinea-Bissau",
+ ["GY"] = "Guyana",
+ ["HT"] = "Haiti",
+ ["HM"] = "Heard Island and McDonald Islands",
+ ["VA"] = "Holy See (the)",
+ ["HN"] = "Honduras",
+ ["HK"] = "Hong Kong",
+ ["HU"] = "Hungary",
+ ["IS"] = "Iceland",
+ ["IN"] = "India",
+ ["ID"] = "Indonesia",
+ ["IR"] = "Iran (Islamic Republic of)",
+ ["IQ"] = "Iraq",
+ ["IE"] = "Ireland",
+ ["IM"] = "Isle of Man",
+ ["IL"] = "Israel",
+ ["IT"] = "Italy",
+ ["JM"] = "Jamaica",
+ ["JP"] = "Japan",
+ ["JE"] = "Jersey",
+ ["JO"] = "Jordan",
+ ["KZ"] = "Kazakhstan",
+ ["KE"] = "Kenya",
+ ["KI"] = "Kiribati",
+ ["KP"] = "Korea (the Democratic People's Republic of)",
+ ["KR"] = "Korea (the Republic of)",
+ ["KW"] = "Kuwait",
+ ["KG"] = "Kyrgyzstan",
+ ["LA"] = "Lao People's Democratic Republic (the)",
+ ["LV"] = "Latvia",
+ ["LB"] = "Lebanon",
+ ["LS"] = "Lesotho",
+ ["LR"] = "Liberia",
+ ["LY"] = "Libya",
+ ["LI"] = "Liechtenstein",
+ ["LT"] = "Lithuania",
+ ["LU"] = "Luxembourg",
+ ["MO"] = "Macao",
+ ["MG"] = "Madagascar",
+ ["MW"] = "Malawi",
+ ["MY"] = "Malaysia",
+ ["MV"] = "Maldives",
+ ["ML"] = "Mali",
+ ["MT"] = "Malta",
+ ["MH"] = "Marshall Islands (the)",
+ ["MQ"] = "Martinique",
+ ["MR"] = "Mauritania",
+ ["MU"] = "Mauritius",
+ ["YT"] = "Mayotte",
+ ["MX"] = "Mexico",
+ ["FM"] = "Micronesia (Federated States of)",
+ ["MD"] = "Moldova (the Republic of)",
+ ["MC"] = "Monaco",
+ ["MN"] = "Mongolia",
+ ["ME"] = "Montenegro",
+ ["MS"] = "Montserrat",
+ ["MA"] = "Morocco",
+ ["MZ"] = "Mozambique",
+ ["MM"] = "Myanmar",
+ ["NA"] = "Namibia",
+ ["NR"] = "Nauru",
+ ["NP"] = "Nepal",
+ ["NL"] = "Netherlands (the)",
+ ["NC"] = "New Caledonia",
+ ["NZ"] = "New Zealand",
+ ["NI"] = "Nicaragua",
+ ["NE"] = "Niger (the)",
+ ["NG"] = "Nigeria",
+ ["NU"] = "Niue",
+ ["NF"] = "Norfolk Island",
+ ["MP"] = "Northern Mariana Islands (the)",
+ ["NO"] = "Norway",
+ ["OM"] = "Oman",
+ ["PK"] = "Pakistan",
+ ["PW"] = "Palau",
+ ["PS"] = "Palestine, State of",
+ ["PA"] = "Panama",
+ ["PG"] = "Papua New Guinea",
+ ["PY"] = "Paraguay",
+ ["PE"] = "Peru",
+ ["PH"] = "Philippines (the)",
+ ["PN"] = "Pitcairn",
+ ["PL"] = "Poland",
+ ["PT"] = "Portugal",
+ ["PR"] = "Puerto Rico",
+ ["QA"] = "Qatar",
+ ["MK"] = "Republic of North Macedonia",
+ ["RO"] = "Romania",
+ ["RU"] = "Russian Federation (the)",
+ ["RW"] = "Rwanda",
+ ["RE"] = "Réunion",
+ ["BL"] = "Saint Barthélemy",
+ ["SH"] = "Saint Helena, Ascension and Tristan da Cunha",
+ ["KN"] = "Saint Kitts and Nevis",
+ ["LC"] = "Saint Lucia",
+ ["MF"] = "Saint Martin (French part)",
+ ["PM"] = "Saint Pierre and Miquelon",
+ ["VC"] = "Saint Vincent and the Grenadines",
+ ["WS"] = "Samoa",
+ ["SM"] = "San Marino",
+ ["ST"] = "Sao Tome and Principe",
+ ["SA"] = "Saudi Arabia",
+ ["SN"] = "Senegal",
+ ["RS"] = "Serbia",
+ ["SC"] = "Seychelles",
+ ["SL"] = "Sierra Leone",
+ ["SG"] = "Singapore",
+ ["SX"] = "Sint Maarten (Dutch part)",
+ ["SK"] = "Slovakia",
+ ["SI"] = "Slovenia",
+ ["SB"] = "Solomon Islands",
+ ["SO"] = "Somalia",
+ ["ZA"] = "South Africa",
+ ["GS"] = "South Georgia and the South Sandwich Islands",
+ ["SS"] = "South Sudan",
+ ["ES"] = "Spain",
+ ["LK"] = "Sri Lanka",
+ ["SD"] = "Sudan (the)",
+ ["SR"] = "Suriname",
+ ["SJ"] = "Svalbard and Jan Mayen",
+ ["SE"] = "Sweden",
+ ["CH"] = "Switzerland",
+ ["SY"] = "Syrian Arab Republic",
+ ["TW"] = "Taiwan",
+ ["TJ"] = "Tajikistan",
+ ["TZ"] = "Tanzania, United Republic of",
+ ["TH"] = "Thailand",
+ ["TL"] = "Timor-Leste",
+ ["TG"] = "Togo",
+ ["TK"] = "Tokelau",
+ ["TO"] = "Tonga",
+ ["TT"] = "Trinidad and Tobago",
+ ["TN"] = "Tunisia",
+ ["TR"] = "Turkey",
+ ["TM"] = "Turkmenistan",
+ ["TC"] = "Turks and Caicos Islands (the)",
+ ["TV"] = "Tuvalu",
+ ["UG"] = "Uganda",
+ ["UA"] = "Ukraine",
+ ["AE"] = "United Arab Emirates (the)",
+ ["GB"] = "United Kingdom of Great Britain and Northern Ireland (the)",
+ ["UM"] = "United States Minor Outlying Islands (the)",
+ ["US"] = "United States of America (the)",
+ ["UY"] = "Uruguay",
+ ["UZ"] = "Uzbekistan",
+ ["VU"] = "Vanuatu",
+ ["VE"] = "Venezuela (Bolivarian Republic of)",
+ ["VN"] = "Viet Nam",
+ ["VG"] = "Virgin Islands (British)",
+ ["VI"] = "Virgin Islands (U.S.)",
+ ["WF"] = "Wallis and Futuna",
+ ["EH"] = "Western Sahara",
+ ["YE"] = "Yemen",
+ ["ZM"] = "Zambia",
+ ["ZW"] = "Zimbabwe",
+ ["AX"] = "Åland Islands"
+}
+
+-- [Exported]
+function getCountryName( country )
+ return countryListAlpha2[ (string.upper(country)) ] or "Unknown"
+end
diff --git a/[gameplay]/scoreboard/dxscoreboard_countries.lua b/[gameplay]/scoreboard/dxscoreboard_countries.lua
index 3e44e8ca7..777cfb45d 100644
--- a/[gameplay]/scoreboard/dxscoreboard_countries.lua
+++ b/[gameplay]/scoreboard/dxscoreboard_countries.lua
@@ -12,23 +12,34 @@ end
showCountries = toboolean( get( "showCountries" ) ) or false
if showCountries then
- local isAdminResourceRunning = getResourceFromName( "admin" )
- isAdminResourceRunning = isAdminResourceRunning and getResourceState( isAdminResourceRunning ) == "running"
+ local isIP2CResourceRunning = getResourceFromName( "ip2c" )
+ isIP2CResourceRunning = isIP2CResourceRunning and getResourceState( isIP2CResourceRunning ) == "running"
local countryData = "Country"
- local defaultCountryIndicator = "N/A" -- If something somehow fails and setting is enabled in meta.xml
+ local defaultCountryIndicator = "N/A"
for i, player in ipairs( getElementsByType( "player" ) ) do
- local cCode = isAdminResourceRunning and exports.admin:getPlayerCountry( player ) or defaultCountryIndicator
- setElementData( player, countryData, {":admin/client/images/flags/" .. cCode:lower() .. ".png", cCode} )
+ local cCode = isIP2CResourceRunning and exports.ip2c:getPlayerCountry( player ) or defaultCountryIndicator
+ setElementData( player, countryData, {":ip2c/client/images/flags/" .. cCode:lower() .. ".png", cCode} )
end
function setScoreboardData()
- local cCode = isAdminResourceRunning and exports.admin:getPlayerCountry( source ) or defaultCountryIndicator
- setElementData( source, countryData, {":admin/client/images/flags/" .. cCode:lower() .. ".png", cCode} )
+ local cCode = isIP2CResourceRunning and exports.ip2c:getPlayerCountry( source ) or defaultCountryIndicator
+ setElementData( source, countryData, {":ip2c/client/images/flags/" .. cCode:lower() .. ".png", cCode} )
+ end
+
+ function setPlayersScoreboardData()
+ local isIP2CResourceRunning_ = getResourceFromName( "ip2c" )
+ isIP2CResourceRunning_ = isIP2CResourceRunning_ and getResourceState( isIP2CResourceRunning_ ) == "running"
+ for i, player in ipairs( getElementsByType( "player" ) ) do
+ local cCode = isIP2CResourceRunning_ and exports.ip2c:getPlayerCountry( player ) or defaultCountryIndicator
+ setElementData( player, countryData, {":ip2c/client/images/flags/" .. cCode:lower() .. ".png", cCode} )
+ end
end
addEventHandler( "onPlayerJoin", root, setScoreboardData )
+ addEventHandler("onResourceStart", root, function(resource) if getResourceName(resource)=="ip2c" then setPlayersScoreboardData() end end)
+ addEventHandler("onResourceStop", root, function(resource) if getResourceName(resource)=="ip2c" then setPlayersScoreboardData() end end)
end
-- Server staff can use the below command to spoof their country-code in TAB scoreboard to avoid undesired recognition by players.
@@ -51,11 +62,17 @@ addCommandHandler("setcountry",
return false
end
country_code = string.lower(country_code)
- local img = ":admin/client/images/flags/"..country_code..".png"
+ local img = ":ip2c/client/images/flags/"..country_code..".png"
if not fileExists(img) then
outputChatBox("* Sorry, '"..country_code.."' is not an existing country code.", thePlayer, 255, 100, 100)
return false
end
+ local isIP2CResourceRunning = getResourceFromName( "ip2c" )
+ isIP2CResourceRunning = isIP2CResourceRunning and getResourceState( isIP2CResourceRunning ) == "running"
+ if not isIP2CResourceRunning then
+ -- Warn the user that the country flags are not being fetched
+ outputChatBox("* IP2C resource is not running, player country flags are not being fetched!", thePlayer, 255, 255, 100)
+ end
country_code = string.upper(country_code)
setElementData(thePlayer, "Country", {img, country_code})
outputChatBox("* Your country has been set to "..country_code.."!", thePlayer, 100, 255, 100)