Quest Status Admin Nou
Acest quest este adaptat dupa ce am gasit pe net: majoritatea quest-urilor similare nu erau complet functionale, mai ales la dezactivarea bonusurilor.
Functia de dezactivare:
Foloseste affect.remove_all_collect()
Sterge toate efectele de tip atribute
Revine la valorile normale din sistemul automat
Functia Instant Bonus:
Aplica rapid bonusurile predefinite
Curat si eficient, fara cod complicat
Functia Manual Bonus:
Permite introducerea valorilor fiecarui bonus (max 15000)
Numeroteaza bonusul curent si valideaza input-ul
Enter sau 0 trece la urmatorul bonus fara sa aplice nimic
Securitate prin parola si cuvant cheie:
Cuvant cheie predefinit pentru initializare
Tu setezi parola in joc
La reload sau reboot, parola trebuie setata din nou
Schimbarea parolei necesita cuvantul cheie si parola veche
Quest-ul poate fi folosit doar de cel care il detine ca item
Ce face quest-ul:
Aplicare instant sau manuala a bonusurilor proprii
Dezactivare completa a bonusurilor aplicate
Securitate completa prin parola si cuvant cheie
Avantaje:
Curat si usor de folosit
Functional si dupa reload
Previne bug-uri cauzate de valori mari
Observatii:
Ideal pentru aplicarea rapida a bonusurilor proprii
Nu sunt expert in Lua sau quest-uri, dar am vrut sa vin cu ceva imbunatatit si functional
Daca cineva poate adapta sau curata codul mai mult, este bine venit
Sper sa fie folositor cuiva
Asa mai invat si eu ceva
*Poze / Video:
https://postimg.cc/gallery/rpmVqZd

*Link download / Code:
Code:
--[[
Creat de l3oogie / Vaduva Liviu Bogdan
Quest: Status Admin cu sistem de parola complet integrat
Descriere: Quest adaptat după diverse surse online, funcțional și securizat.
Permite GM-ului să își seteze bonusuri instant sau manual și să dezactiveze toate bonusurile.
Include sistem de parolă cu cuvânt secret și posibilitate de schimbare.
]]
quest statusadminnou begin
state start begin
when 70018.use with pc.is_gm() begin
------------------------------------------------------------------
--[[ SECTIUNE 1: Preluare nume personaj ]]
------------------------------------------------------------------
local numec = pc.get_name()
-- numec = numele personajului care folosește quest-ul
-- Utilizat pentru a personaliza mesajele afișate.
------------------------------------------------------------------
--[[ SECTIUNE 2: Mesaje informative ]]
------------------------------------------------------------------
-- Subsectiune 2.1: Mesaje introductive
local infointro = {
"[ENTER]In caz ca nu esti un membru fondator[ENTER]Nu vei putea accesa aceste comenzi speciale[ENTER][ENTER]",
"Ce optiune doresti sa alegi?[ENTER]",
"Introduce-ti parola corecta:"
}
-- infointro[1] = mesaj introductiv
-- infointro[2] = mesaj pentru alegerea optiunii
-- infointro[3] = mesaj de cerere parola
-- Subsectiune 2.2: Mesaje de avertizare
local infoimp = {
"Atentie!:[ENTER]Daca cumva introduci valori prea mari, pot aparea buguri[ENTER]Sfatul meu este sa nu exagerezi cu Valoarea Bonusurilor!!!!"
}
-- infoimp[1] = avertizare la introducerea de valori mari
-- Subsectiune 2.3: Mesaje activate / dezactivate
local intrbactdzct = {
"Doresti sa-ti activezi statusul de Administrator?[ENTER][ENTER]",
"Doresti sa-ti dezactivezi statusul de Administrator?[ENTER][ENTER]"
}
-- intrbactdzct[1] = confirmare activare
-- intrbactdzct[2] = confirmare dezactivare
-- Subsectiune 2.4: Optiuni principale
local actdzcti = {"Instant Status", "Activeaza Manual", "Dezactiveaza", "Inchide"}
local dasinu = {"Sigur", "Renunta"}
-- actdzcti = optiuni din meniul principal al quest-ului
-- dasinu = optiuni confirmare (da/nu)
------------------------------------------------------------------
--[[ SECTIUNE 3: Lista bonusuri (bonus_list) ]]
------------------------------------------------------------------
local bonus_list = {
{apply.MOV_SPEED, "Viteza de miscare", 350, "Creste viteza de deplasare"},
{apply.ATT_SPEED, "Viteza de atac", 350, "Creste viteza atacurilor"},
{apply.CRITICAL_PCT, "Sansa de lovitura critica", 500, "Creste sansele de lovitura critica"},
{apply.PENETRATE_PCT, "Sansa de lovitura patrunzatoare", 500, "Creste sansele de lovitura patrunzatoare"},
{apply.DEF_GRADE_BONUS, "Aparare magica", 500, "Creste apararea magica"},
{apply.RESIST_MAGIC, "Rezistenta la magie", 500, "Reducerea daunelor magice primite"},
{apply.MAX_HP, "Max HP", 450000, "Creste viata maxima"},
{2, "Max SP", 500, "Creste energia magica (SP)"},
{4, "INT", 10000, "Creste inteligenta personajului"},
{apply.STR, "STR", 20000, "Creste forta fizica"},
{apply.DEX, "DEX", 5000, "Creste agilitatea"},
{apply.HP_REGEN, "Regenerare HP", 5000, "Viteza regenerare HP"},
{apply.SP_REGEN, "Regenerare SP", 5000, "Viteza regenerare SP"},
{apply.POISON_PCT, "Sansa de otrava", 2500, "Sanse de a aplica otravire"},
{apply.STUN_PCT, "Sansa de STUN", 2500, "Sanse de a aplica STUN"},
{apply.SLOW_PCT, "Sansa de incetinire", 2500, "Sanse de a incetini inamicii"},
{apply.ATTBONUS_HUMAN, "Tare impotriva semi-oamenilor", 5000, "Creste damage-ul impotriva semi-oamenilor"},
{apply.IMMUNE_SLOW, "Imun la incetinire", 1, "Imunitate la efectele de incetinire"},
{apply.IMMUNE_STUN, "Imun la STUN", 1, "Imunitate la STUN"},
{apply.POISON_REDUCE, "Reducere otrava", 2500, "Reduce efectul de otrava primit"},
{apply.BLOCK, "Sansa de blocare", 2500, "Sanse de a bloca atacurile inamice"},
{apply.MANA_BURN_PCT, "Sansa de a arde mana", 2500, "Sanse de a arde mana inamicilor"},
{apply.DODGE, "Sansa de evitare atac", 2500, "Sanse de a evita atacurile"},
{apply.RESIST_SWORD, "Rezistenta la sabia", 2500, "Reducerea daunelor de la sabie"},
{apply.RESIST_TWOHAND, "Rezistenta la doua maini", 2500, "Reducerea daunelor de la arme doua maini"},
{apply.RESIST_DAGGER, "Rezistenta la pumnal", 2500, "Reducerea daunelor de la pumnale"},
{apply.RESIST_BELL, "Rezistenta la clopot", 2500, "Reducerea daunelor de la clopote"},
{apply.RESIST_FAN, "Rezistenta la evantai", 2500, "Reducerea daunelor de la evantaie"},
{apply.RESIST_BOW, "Rezistenta la sageata", 2500, "Reducerea daunelor de la sageata"},
{apply.RESIST_FIRE, "Rezistenta la foc", 2500, "Reducerea daunelor de foc"},
{apply.RESIST_ELEC, "Rezistenta la fulger", 2500, "Reducerea daunelor de fulger"},
{apply.RESIST_MAGIC, "Rezistenta la magie", 2500, "Reducerea daunelor magice"},
{apply.RESIST_WIND, "Rezistenta la vant", 2500, "Reducerea daunelor de vant"},
{apply.REFLECT_MELEE, "Reflectare atac corporal", 2500, "Reflecta o parte din damage-ul fizic primit"},
{71, "Paguba competentei", 15000, "Reducere daune competenta"},
{72, "Paguba medie", 15000, "Reducere daune medie"},
{73, "Rezistenta la paguba competentei", 15000, "Reducere daune competenta primita"},
{73, "Rezistenta la paguba medie", 15000, "Reducere daune medie primita"},
{9, "CAST_SPEED", 5000, "Creste viteza de castare a skill-urilor"}
}
-- Bonus_list = tabel care contine:
-- [1] = codul bonusului (apply.* sau id numeric)
-- [2] = nume afisat
-- [3] = valoare implicita
-- [4] = descriere
-- Exemple de modificare: poti adauga un bonus nou cu apply.X si valoare implicita.
-- Poti schimba valoarea implicita pentru a modifica puterea initiala a bonusului instant.
------------------------------------------------------------------
--[[ SECTIUNE 4: Cuvant secret ]]
------------------------------------------------------------------
local secretWord = "Test!@#"
-- Cuvantul secret permite initializarea parolei si schimbarea ei.
-- Important pentru securitate: doar cine stie cuvantul poate seta sau schimba parola.
------------------------------------------------------------------
--[[ SECTIUNE 5: Initializare parola ]]
------------------------------------------------------------------
if not StatusAdminPassword then
-- Daca quest-ul nu are parola setata, solicita setarea ei
say_title_center("Quest-ul a fost reinitializat! Trebuie sa setezi o parola pentru prima utilizare.")
say_title_center("Introdu cuvantul secret pentru a putea seta parola:")
local inputSecret = input()
if inputSecret ~= secretWord then
say_title_center("Cuvantul secret este incorect! Nu poti seta parola.")
return
end
say_title_center("Introdu parola initiala:")
local init_pw = input()
say_title_center("Confirma parola initiala:")
local confirm_init = input()
if init_pw == "" then
say_title_center("Parola nu poate fi goala! Quest-ul nu va functiona pana nu setezi o parola valida.")
return
end
if init_pw ~= confirm_init then
say_title_center("Parolele nu coincid! Quest-ul nu va functiona pana nu setezi corect parola.")
return
end
StatusAdminPassword = init_pw
say_title_center("Parola a fost setata cu succes! Acum poti folosi quest-ul normal.")
return
end
------------------------------------------------------------------
--[[ SECTIUNE 6: Introducere parola la acces quest ]]
------------------------------------------------------------------
say_title_center("")
say_verde2(numec)
say_galben(infointro[1])
say_rosu(infointro[3])
local pws = input()
if pws == StatusAdminPassword then
-- Meniu principal: Continua / Schimba parola / Renunta
local opt = select("Continua", "Schimba parola", "Renunta")
------------------------------------------------------------------
--[[ SECTIUNE 7: Continuare quest ]]
------------------------------------------------------------------
if opt == 1 then
say_title_center("")
say_galben(numec)
say_verde2(infointro[2])
local alg = select(actdzcti[1], actdzcti[2], actdzcti[3], actdzcti[4])
------------------------------------------------------------------
--[[ SECTIUNE 7.1: Instant Status ]]
------------------------------------------------------------------
if alg == 1 then
say_title_center("")
say_verde2(numec)
say_galben(intrbactdzct[1])
local sel = select(dasinu[1], dasinu[2])
if sel == 1 then
-- Aplica toate bonusurile din lista cu valorile implicite
for i, b in ipairs(bonus_list) do
affect.add_collect(b[1], b[3], 60*60*24*365*60)
end
-- Afiseaza bonusurile aplicate
local page_count = 0
for i, b in ipairs(bonus_list) do
if page_count == 0 then
say_size(450, 500)
say_title_center("")
say_important(numec.."[ENTER][ENTER]")
say_reward("Ai aplicat Urmatoarele Bonusuri:")
end
say(b[2] .. ": " .. b[3] .. " (" .. b[4] .. ")")
page_count = page_count + 1
if page_count >= 15 then
wait()
page_count = 0
end
end
end
------------------------------------------------------------------
--[[ SECTIUNE 7.2: Manual Activation ]]
------------------------------------------------------------------
elseif alg == 2 then
say_title_center("")
say_verde2(numec)
say_galben(intrbactdzct[1])
local sel = select(dasinu[1], dasinu[2])
if sel == 1 then
-- Permite introducerea manuala a valorilor bonusurilor
for i, b in ipairs(bonus_list) do
while true do
say_size(450, 500)
say_title_center("")
say_rosu(infoimp[1])
say_verde2("Aici introduci valorile bonusurilor.[ENTER][ENTER]")
say_galben("Bonus " .. i .. ": " .. b[2] .. " (" .. b[4] .. ")")
say("Valoare permisa: 0 - 15000, Enter sau spatiu trece la urmatorul bonus.")
local vb = input()
if vb == nil or vb == "" or vb == " " then break end
local num = tonumber(vb)
if num == nil or num < 0 or num > 15000 then
say_size(450, 500)
say_title_center("")
say_rosu("[EROARE] Valoare invalida!")
say_galben("Ai introdus: " .. tostring(vb))
say_verde2("Trebuie sa fie un numar intre 0 si 15000.")
else
affect.add_collect(b[1], num, 60*60*24*365*60)
break
end
end
end
end
------------------------------------------------------------------
--[[ SECTIUNE 7.3: Dezactivare Status ]]
------------------------------------------------------------------
elseif alg == 3 then
say_title_center("")
say_verde2(numec)
say_galben(intrbactdzct[2])
local act = select(dasinu[1], dasinu[2])
if act == 1 then
-- Sterge toate bonusurile aplicate de acest quest
affect.remove_all_collect()
say_title_center("")
say_verde2(numec)
say_reward("Statusul de Administrator a fost dezactivat!")
end
end
------------------------------------------------------------------
--[[ SECTIUNE 8: Schimbare parola ]]
------------------------------------------------------------------
elseif opt == 2 then
say_title_center("Introdu cuvantul secret pentru a schimba parola:")
local inputSecret = input()
if inputSecret ~= secretWord then
say_title_center("Cuvantul secret este incorect! Nu poti schimba parola.")
return
end
say_title_center("Schimbare parola Panou Status Admin")
say("Introdu parola veche:")
local old_pw = input()
if old_pw ~= StatusAdminPassword then
say_title_center("Parola veche este incorecta!")
return
end
say_title_center("Introdu parola noua:")
local new_pw = input()
say_title_center("Confirma parola noua:")
local confirm_pw = input()
if new_pw == "" then
say_title_center("Parola nu poate fi goala!")
return
end
if new_pw ~= confirm_pw then
say_title_center("Parolele nu coincid. Incearca din nou!")
return
end
StatusAdminPassword = new_pw
say_title_center("Parola a fost schimbata cu succes!")
------------------------------------------------------------------
--[[ SECTIUNE 9: Renunta ]]
------------------------------------------------------------------
elseif opt == 3 then
return
end
------------------------------------------------------------------
--[[ SECTIUNE 10: Parola gresita ]]
------------------------------------------------------------------
else
say_title_center("")
say_rosu("[EROR] Parola gresita!")
say_galben("Ai introdus: " .. pws)
say_verde2("Incearca iar.")
end
end
end
end

