diff --git a/[core]/es_extended/locales/cs.lua b/[core]/es_extended/locales/cs.lua index ca567e92..33268d1f 100644 --- a/[core]/es_extended/locales/cs.lua +++ b/[core]/es_extended/locales/cs.lua @@ -62,6 +62,7 @@ return { ["command_setgroup_group"] = "Název skupiny", ["commanderror_argumentmismatch"] = "Chybný počet hodnot (správně %s, potřebných %s)", ["commanderror_argumentmismatch_number"] = "Chybně zadaná hodnot #%s (správně, špatně)", + ["commanderror_argumentmismatch_positive_number"] = "Chybně zadaná hodnota #%s (zadáno záporné/nula, požadováno kladné číslo)", ["commanderror_argumentmismatch_string"] = "Invalid Argument #%s data type (passed number, wanted string)", ["commanderror_invaliditem"] = "Špatný předmět", ["commanderror_invalidweapon"] = "Špatná zbraň", diff --git a/[core]/es_extended/locales/de.lua b/[core]/es_extended/locales/de.lua index 185d5f85..67a954b6 100644 --- a/[core]/es_extended/locales/de.lua +++ b/[core]/es_extended/locales/de.lua @@ -67,6 +67,7 @@ return { ["commanderror_argumentmismatch"] = "Ungültiges Argument (gegeben %s, gewollt %s)", ["commanderror_argumentmismatch_number"] = "Ungültiges Argument #%s Datentyp (String gegeben, Nummer gefordert)", ["commanderror_argumentmismatch_string"] = "Ungültiges Argument #%s Datentyp (Nummer gegeben, String gefordert)", + ["commanderror_argumentmismatch_positive_number"] = "Ungültiges Argument #%s Datentyp (negativ/null übergeben, positive Zahl gewünscht)", ["commanderror_invaliditem"] = "Ungültiger Gegenstand", ["commanderror_invalidweapon"] = "Ungültige Waffe", ["commanderror_console"] = "Befehl kann nicht von der Konsole aus ausgeführt werden!", diff --git a/[core]/es_extended/locales/el.lua b/[core]/es_extended/locales/el.lua index c24310e2..25c004cc 100644 --- a/[core]/es_extended/locales/el.lua +++ b/[core]/es_extended/locales/el.lua @@ -67,6 +67,7 @@ return { ["commanderror_argumentmismatch"] = "Μη έγκυρος αριθμός ορισμάτων (δόθηκαν %s, αναμενόμενα %s)", ["commanderror_argumentmismatch_number"] = "Μη έγκυρος τύπος δεδομένων για το όρισμα #%s (δόθηκε συμβολοσειρά, αναμενόμενος αριθμός)", ["commanderror_argumentmismatch_string"] = "Μη έγκυρος τύπος δεδομένων για το όρισμα #%s (δόθηκε αριθμός, αναμενόμενη συμβολοσειρά)", + ["commanderror_argumentmismatch_positive_number"] = "Μη έγκυρος τύπος δεδομένων για το όρισμα #%s (δόθηκε αρνητικός/μηδέν, αναμενόμενος θετικός αριθμός)", ["commanderror_invaliditem"] = "Μη έγκυρο αντικείμενο", ["commanderror_invalidweapon"] = "Μη έγκυρο όπλο", ["commanderror_console"] = "Η εντολή δεν μπορεί να εκτελεστεί από την κονσόλα", diff --git a/[core]/es_extended/locales/en.lua b/[core]/es_extended/locales/en.lua index 4492a4ea..c7b0e547 100644 --- a/[core]/es_extended/locales/en.lua +++ b/[core]/es_extended/locales/en.lua @@ -69,6 +69,7 @@ return { ["commanderror_argumentmismatch"] = "Invalid Argument Count (passed %s, wanted %s)", ["commanderror_argumentmismatch_number"] = "Invalid Argument #%s data type (passed string, wanted number)", ["commanderror_argumentmismatch_string"] = "Invalid Argument #%s data type (passed number, wanted string)", + ["commanderror_argumentmismatch_positive_number"] = "Invalid Argument #%s data type (passed negative/zero, wanted positive number)", ["commanderror_invaliditem"] = "Invalid item", ["commanderror_invalidweapon"] = "Invalid weapon", ["commanderror_console"] = "Command Cannot be executed from console", diff --git a/[core]/es_extended/locales/es.lua b/[core]/es_extended/locales/es.lua index 7e0a1f14..a304f27e 100644 --- a/[core]/es_extended/locales/es.lua +++ b/[core]/es_extended/locales/es.lua @@ -67,6 +67,7 @@ return { ["commanderror_argumentmismatch"] = "Número de argumentos inválido (pasados %s, esperados %s)", ["commanderror_argumentmismatch_number"] = "Tipo de datos del argumento #%s inválido (pasado string, esperado número)", ["commanderror_argumentmismatch_string"] = "Tipo de datos del argumento #%s inválido (pasado número, esperado string)", + ["commanderror_argumentmismatch_positive_number"] = "Argumento inválido #%s tipo de datos (pasado negativo/cero, se requiere número positivo)", ["commanderror_invaliditem"] = "Objeto inválido", ["commanderror_invalidweapon"] = "Arma inválida", ["commanderror_console"] = "El comando no se puede ejecutar desde la consola", diff --git a/[core]/es_extended/locales/fi.lua b/[core]/es_extended/locales/fi.lua index ceb76da4..822622c5 100644 --- a/[core]/es_extended/locales/fi.lua +++ b/[core]/es_extended/locales/fi.lua @@ -58,6 +58,7 @@ return { ["commanderror_argumentmismatch"] = "Argumenttien määrä ei täsmää (hyväksytty %s, haluttu %s)", ["commanderror_argumentmismatch_number"] = "Argumentin #%s tyyppi ei täsmää (syötetty merkkijono, haluttu numero)", ["commanderror_argumentmismatch_string"] = "Invalid Argument #%s data type (passed number, wanted string)", + ["commanderror_argumentmismatch_positive_number"] = "Virheellinen argumentti #%s tietotyyppi (annettu negatiivinen/nolla, haluttu positiivinen luku)", ["commanderror_invaliditem"] = "Virheellinen esineen nimi", ["commanderror_invalidweapon"] = "Virheellinen ase", ["commanderror_console"] = "Komentoa ei voi suorittaa konsolissa", diff --git a/[core]/es_extended/locales/fr.lua b/[core]/es_extended/locales/fr.lua index 8870e1ee..4535e6d2 100644 --- a/[core]/es_extended/locales/fr.lua +++ b/[core]/es_extended/locales/fr.lua @@ -67,6 +67,7 @@ return { ["commanderror_argumentmismatch"] = "Le nombre d'arguments est invalide (Argument·s donné·s: %s, Argument·s demandé·s: %s)", ["commanderror_argumentmismatch_number"] = "Type de données de l'argument #%s invalide (Type donné: texte, Type demandé: nombre)", ["commanderror_argumentmismatch_string"] = "Type de données de l'argument #%s invalide (Type donné: nombre, Type demandé: texte)", + ["commanderror_argumentmismatch_positive_number"] = "Argument invalide #%s type de données (passé négatif/zéro, nombre positif requis)", ["commanderror_invaliditem"] = "Le nom de l'objet est invalide", ["commanderror_invalidweapon"] = "Le nom de l'arme est invalide", ["commanderror_console"] = "Cette commande ne peut pas être éxécutée depuis la console", diff --git a/[core]/es_extended/locales/he.lua b/[core]/es_extended/locales/he.lua index b11f3d31..ff2cd1aa 100644 --- a/[core]/es_extended/locales/he.lua +++ b/[core]/es_extended/locales/he.lua @@ -67,6 +67,7 @@ return { ["commanderror_argumentmismatch"] = "כמות וסוגי הארגומנטים אינם תואמים (נשלח %s, נדרש %s)", ["commanderror_argumentmismatch_number"] = "טיפוס ארגומנט #%s לא תקין (נשלח מחרוזת, נדרש מספר)", ["commanderror_argumentmismatch_string"] = "טיפוס ארגומנט #%s לא תקין (נשלח מספר, נדרש מחרוזת)", + ["commanderror_argumentmismatch_positive_number"] = "טיפוס ארגומנט #%s לא תקין (נשלח שלילי/אפס, נדרש מספר חיובי)", ["commanderror_invaliditem"] = "שם פריט לא חוקי", ["commanderror_invalidweapon"] = "נשק לא חוקי", ["commanderror_console"] = "לא ניתן להפעיל פקודה מהקונסול", diff --git a/[core]/es_extended/locales/hu.lua b/[core]/es_extended/locales/hu.lua index b0e05f76..8b05ea28 100644 --- a/[core]/es_extended/locales/hu.lua +++ b/[core]/es_extended/locales/hu.lua @@ -63,6 +63,7 @@ return { ["commanderror_argumentmismatch"] = "Érvénytelen argumentumszám (%s megadva, %s szükséges)", ["commanderror_argumentmismatch_number"] = "Érvénytelen argumentum #%s adat típus (szöveg megadva, szám szükséges)", ["commanderror_argumentmismatch_string"] = "Invalid Argument #%s data type (passed number, wanted string)", + ["commanderror_argumentmismatch_positive_number"] = "Érvénytelen argumentum #%s adattípus (negatív/nulla átadva, pozitív szám szükséges)", ["commanderror_invaliditem"] = "Érvénytelen tárgy", ["commanderror_invalidweapon"] = "Érvénytelen fegyver", ["commanderror_console"] = "Parancs nem használható konzolból", diff --git a/[core]/es_extended/locales/id.lua b/[core]/es_extended/locales/id.lua index f64361d2..22592d7d 100644 --- a/[core]/es_extended/locales/id.lua +++ b/[core]/es_extended/locales/id.lua @@ -67,6 +67,7 @@ return { ["commanderror_argumentmismatch"] = "Jumlah Argument Salah (passed %s, wanted %s)", ["commanderror_argumentmismatch_number"] = "Argument #%s salah tipe data (passed string, wanted number)", ["commanderror_argumentmismatch_string"] = "Argument #%s salah tipe data (passed number, wanted string)", + ["commanderror_argumentmismatch_positive_number"] = "Argument #%s salah tipe data (diberikan negatif/nol, diinginkan angka positif)", ["commanderror_invaliditem"] = "Barang salah", ["commanderror_invalidweapon"] = "Senjata salah", ["commanderror_console"] = "Perintah tidak dapat dieksekusi dari console", diff --git a/[core]/es_extended/locales/it.lua b/[core]/es_extended/locales/it.lua index 80378e1c..7bb56dc9 100644 --- a/[core]/es_extended/locales/it.lua +++ b/[core]/es_extended/locales/it.lua @@ -67,6 +67,7 @@ return { ["commanderror_argumentmismatch"] = "Conta argomenti non valida (passati %s, richiesti %s)", ["commanderror_argumentmismatch_number"] = "Argomento #%s di tipologia errata (passato testo, richiesto numero)", ["commanderror_argumentmismatch_string"] = "Invalid Argument #%s data type (passed number, wanted string)", + ["commanderror_argumentmismatch_positive_number"] = "Argomento #%s tipo di dato non valido (passato negativo/zero, richiesto numero positivo)", ["commanderror_invaliditem"] = "Oggetto non valido", ["commanderror_invalidweapon"] = "Arma non valida", ["commanderror_console"] = "Comando non eseguibile dalla console", diff --git a/[core]/es_extended/locales/nl.lua b/[core]/es_extended/locales/nl.lua index b03c1f9e..0ffaba44 100644 --- a/[core]/es_extended/locales/nl.lua +++ b/[core]/es_extended/locales/nl.lua @@ -59,6 +59,7 @@ return { ["commanderror_argumentmismatch"] = "Ongeldig aantal argumenten (geslaagd %s, gezocht %s)", ["commanderror_argumentmismatch_number"] = "Ongeldig argument #%s gegevenstype (doorgegeven string, gewenst nummer)", ["commanderror_argumentmismatch_string"] = "Invalid Argument #%s data type (doorgegeven string, gewenst nummer)", + ["commanderror_argumentmismatch_positive_number"] = "Ongeldig Argument #%s gegevenstype (doorgegeven negatief/nul, gewenst positief getal)", ["commanderror_invaliditem"] = "Ongeldig item", ["commanderror_invalidweapon"] = "Ongeldig wapen", ["commanderror_console"] = "Command kan niet worden uitgevoerd vanaf console.", diff --git a/[core]/es_extended/locales/pl.lua b/[core]/es_extended/locales/pl.lua index aa12acd2..5a85a92b 100644 --- a/[core]/es_extended/locales/pl.lua +++ b/[core]/es_extended/locales/pl.lua @@ -57,6 +57,7 @@ return { ["commanderror_argumentmismatch"] = "nieprawiłowa ilość argumentów (przeszło %s, wymagane %s)", ["commanderror_argumentmismatch_number"] = "nieprawidłowy typ argumentu #%s (przeszedł tekst, wymagany numer)", ["commanderror_argumentmismatch_string"] = "Invalid Argument #%s data type (passed number, wanted string)", + ["commanderror_argumentmismatch_positive_number"] = "Nieprawidłowy argument #%s typ danych (przekazano ujemny/zero, oczekiwano liczby dodatniej)", ["commanderror_invaliditem"] = "nieprawidłowa nazwa przedmiotu", ["commanderror_invalidweapon"] = "nieprawidłowa broń", ["commanderror_console"] = "podana komenda nie może zostać uruchomiona przez konsole", diff --git a/[core]/es_extended/locales/sl.lua b/[core]/es_extended/locales/sl.lua index 1d607c02..37093f6a 100644 --- a/[core]/es_extended/locales/sl.lua +++ b/[core]/es_extended/locales/sl.lua @@ -63,6 +63,7 @@ return { ["commanderror_argumentmismatch"] = "Neveljavno stetje argumentov (podano %s, zeleno %s)", ["commanderror_argumentmismatch_number"] = "Neveljaven podatkovni tip argumenta #%s (posredovan niz, zeleno stevilo)", ["commanderror_argumentmismatch_string"] = "Invalid Argument #%s data type (passed number, wanted string)", + ["commanderror_argumentmismatch_positive_number"] = "Neveljaven argument #%s tip podatkov (podano negativno/nič, zahtevano pozitivno število)", ["commanderror_invaliditem"] = "Neveljaven element", ["commanderror_invalidweapon"] = "Neveljavno orozje", ["commanderror_console"] = "Ukaza ni mogoce izvesti s konzole", diff --git a/[core]/es_extended/locales/sr.lua b/[core]/es_extended/locales/sr.lua index 2eece0a8..010cf04f 100644 --- a/[core]/es_extended/locales/sr.lua +++ b/[core]/es_extended/locales/sr.lua @@ -63,6 +63,7 @@ return { ["commanderror_argumentmismatch"] = "Nevazeci broj argumenata (položio %s, željeno %s)", ["commanderror_argumentmismatch_number"] = "Nevažeći argument #%s tip podataka (položeno, željeno)", ["commanderror_argumentmismatch_string"] = "Invalid Argument #%s data type (passed number, wanted string)", + ["commanderror_argumentmismatch_positive_number"] = "Nevaljan argument #%s tip podataka (prosleđen negativan/nula, potreban pozitivan broj)", ["commanderror_invaliditem"] = "Nevažeći item", ["commanderror_invalidweapon"] = "Nevažeće oružje", ["commanderror_console"] = "Komanda se ne može izvršiti iz konzole", diff --git a/[core]/es_extended/locales/sv.lua b/[core]/es_extended/locales/sv.lua index ad1c073c..fa2b8c4a 100644 --- a/[core]/es_extended/locales/sv.lua +++ b/[core]/es_extended/locales/sv.lua @@ -67,6 +67,7 @@ return { ["commanderror_argumentmismatch"] = "Invalid Argument Count (passed %s, wanted %s)", ["commanderror_argumentmismatch_number"] = "Invalid Argument #%s data type (passed string, wanted number)", ["commanderror_argumentmismatch_string"] = "Invalid Argument #%s data type (passed number, wanted string)", + ["commanderror_argumentmismatch_positive_number"] = "Ogiltigt argument #%s datatyp (skickade negativt/noll, ville ha positivt tal)", ["commanderror_invaliditem"] = "Ogiltigt föremål", ["commanderror_invalidweapon"] = "Ogiltigt vapen", ["commanderror_console"] = "Kommandot kan inte användas i konsolen", diff --git a/[core]/es_extended/locales/tr.lua b/[core]/es_extended/locales/tr.lua index fc97415a..30b2abb6 100644 --- a/[core]/es_extended/locales/tr.lua +++ b/[core]/es_extended/locales/tr.lua @@ -67,6 +67,7 @@ return { ["commanderror_argumentmismatch"] = "Geçersiz Argüman Sayısı (Verilen %s, İstenen %s)", ["commanderror_argumentmismatch_number"] = "Geçersiz Argüman #%s Veri Tipi (Verilen Metin, İstenen Sayı)", ["commanderror_argumentmismatch_string"] = "Geçersiz Argüman #%s Veri Tipi (Verilen Sayı, İstenen Metin)", + ["commanderror_argumentmismatch_positive_number"] = "Geçersiz Argüman #%s Veri Tipi (Verilen Negatif/Sıfır, İstenen Pozitif Sayı)", ["commanderror_invaliditem"] = "Geçersiz Eşya", ["commanderror_invalidweapon"] = "Geçersiz Silah", ["commanderror_console"] = "Komut Konsoldan Çalıştırılamaz", diff --git a/[core]/es_extended/locales/zh-cn.lua b/[core]/es_extended/locales/zh-cn.lua index 55534cf5..ab678c46 100644 --- a/[core]/es_extended/locales/zh-cn.lua +++ b/[core]/es_extended/locales/zh-cn.lua @@ -67,6 +67,7 @@ return { ["commanderror_argumentmismatch"] = "参数数量错误 (需%s个, 输入%s个)", ["commanderror_argumentmismatch_number"] = "参数#%s类型不符 (需数字类型)", ["commanderror_argumentmismatch_string"] = "参数#%s类型不符 (需文本类型)", + ["commanderror_argumentmismatch_positive_number"] = "参数#%s类型不符 (传入负数/零,需要正数)", ["commanderror_invaliditem"] = "错误: 无效物品标识", ["commanderror_invalidweapon"] = "错误: 无效武器标识", ["commanderror_console"] = "控制台无法执行此指令", diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index 1577708c..4ff790b0 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -64,16 +64,16 @@ function ESX.RegisterCommand(name, group, cb, allowConsole, suggestion) if not command.allowConsole and playerId == 0 then print(("[^3WARNING^7] ^5%s^0"):format(TranslateCap("commanderror_console"))) else - local xPlayer, error = ESX.Players[playerId], nil + local xPlayer, err = ESX.Players[playerId], nil if command.suggestion then if command.suggestion.validate then if #args ~= #command.suggestion.arguments then - error = TranslateCap("commanderror_argumentmismatch", #args, #command.suggestion.arguments) + err = TranslateCap("commanderror_argumentmismatch", #args, #command.suggestion.arguments) end end - if not error and command.suggestion.arguments then + if not err and command.suggestion.arguments then local newArgs = {} for k, v in ipairs(command.suggestion.arguments) do @@ -84,7 +84,7 @@ function ESX.RegisterCommand(name, group, cb, allowConsole, suggestion) if newArg then newArgs[v.name] = newArg else - error = TranslateCap("commanderror_argumentmismatch_number", k) + err = TranslateCap("commanderror_argumentmismatch_number", k) end elseif v.type == "player" or v.type == "playerId" then local targetPlayer = tonumber(args[k]) @@ -103,29 +103,29 @@ function ESX.RegisterCommand(name, group, cb, allowConsole, suggestion) newArgs[v.name] = targetPlayer end else - error = TranslateCap("commanderror_invalidplayerid") + err = TranslateCap("commanderror_invalidplayerid") end else - error = TranslateCap("commanderror_argumentmismatch_number", k) + err = TranslateCap("commanderror_argumentmismatch_number", k) end elseif v.type == "string" then local newArg = tonumber(args[k]) if not newArg then newArgs[v.name] = args[k] else - error = TranslateCap("commanderror_argumentmismatch_string", k) + err = TranslateCap("commanderror_argumentmismatch_string", k) end elseif v.type == "item" then if ESX.Items[args[k]] then newArgs[v.name] = args[k] else - error = TranslateCap("commanderror_invaliditem") + err = TranslateCap("commanderror_invaliditem") end elseif v.type == "weapon" then if ESX.GetWeapon(args[k]) then newArgs[v.name] = string.upper(args[k]) else - error = TranslateCap("commanderror_invalidweapon") + err = TranslateCap("commanderror_invalidweapon") end elseif v.type == "any" then newArgs[v.name] = args[k] @@ -140,19 +140,27 @@ function ESX.RegisterCommand(name, group, cb, allowConsole, suggestion) elseif v.type == "coordinate" then local coord = tonumber(args[k]:match("(-?%d+%.?%d*)")) if not coord then - error = TranslateCap("commanderror_argumentmismatch_number", k) + err = TranslateCap("commanderror_argumentmismatch_number", k) else newArgs[v.name] = coord end end end + + if ESX.IsFunctionReference(v.Validator?.validate) and not err then + local candidate = newArgs[v.name] + local ok, res = pcall(v.Validator.validate, candidate) + if not ok or res ~= true then + err = v.Validator.err or TranslateCap("commanderror_argumentmismatch") + end + end --backwards compatibility if v.validate ~= nil and not v.validate then - error = nil + err = nil end - if error then + if err then break end end @@ -161,11 +169,11 @@ function ESX.RegisterCommand(name, group, cb, allowConsole, suggestion) end end - if error then + if err then if playerId == 0 then - print(("[^3WARNING^7] %s^7"):format(error)) + print(("[^3WARNING^7] %s^7"):format(err)) else - xPlayer.showNotification(error) + xPlayer.showNotification(err) end else cb(xPlayer or false, args, function(msg) diff --git a/[core]/es_extended/server/modules/commands.lua b/[core]/es_extended/server/modules/commands.lua index a8c7d6a6..2320e82f 100644 --- a/[core]/es_extended/server/modules/commands.lua +++ b/[core]/es_extended/server/modules/commands.lua @@ -313,7 +313,10 @@ if not Config.CustomInventory then arguments = { { name = "playerId", help = TranslateCap("commandgeneric_playerid"), type = "player" }, { name = "item", help = TranslateCap("command_giveitem_item"), type = "item" }, - { name = "count", help = TranslateCap("command_giveitem_count"), type = "number" }, + { name = "count", help = TranslateCap("command_giveitem_count"), type = "number", Validator = { + validate = function(x) return x > 0 end, + err = TranslateCap("commanderror_argumentmismatch_positive_number", "count") + }}, }, } )