Zdravim, zde vam ukazu jak vytvorit jednoduchy PM system. Bude to fungovat tak ze napisete /pm nick text.
Uplny zaklad scriptu je funkce a prikaz prirazeny k ni. Takze zaklad vypada takto:
Code:
function pm ()
end
addCommandHandler("pm", pm) --Prirazeni prikazu /pm k funkci pm()
Nyni do funkce pridame argumenty a najdeme hrace ktery ma zpravu obdrzet
Code:
function pm (odesilatel, cmd, nickPrijemce, text)
local prijemce = getPlayerFromName(nickPrijemce) --Zjisteni hrace podle nicku
end
addCommandHandler("pm", pm)
Avsak nastal problem, text je jako jeden argument, coz znamena ze muzeme poslat pouze jedno slovo, ale co by to bylo za PM system s jednim slovem, ze? Da se to celkem jednoduse vyresit pomoci table.concat. Zmenime parametr text na ... .
Code:
function pm (odesilatel, cmd, nickPrijemce, ...)
local text = table.concat({...}, " ") --Vytvorime tabulku obsahujici slova zpravy
local prijemce = getPlayerFromName(nickPrijemce)
end
addCommandHandler("pm", pm)
Takze nyni mame prichystaneho prijemce i text, takze muzeme udelat cely system, komentare jsou primo v kodu:
Code:
function pm (odesilatel, cmd, nickPrijemce, ...)
local text = table.concat({...}, " ") --Vytvoreni tabulky obsahujici zpravy
local prijemce = getPlayerFromName(nickPrijemce)
outputChatBox("PM od " .. getPlayerName(odesilatel) .. ": " .. text, prijemce, 0, 255, 0, true) --PM odeslana prijemci
outputChatBox("PM pro " .. getPlayerName(prijemce) ,, ": " .. text, odesilatel, 0, 255, 0, true) --Zprava pro odesilatele
end
addCommandHandler("pm", pm)
Takze to mame PM system hotov. Ted uz jen pokud se vyskytne to, ze hrac neni nalezen nebo odesilatel zapomene napsat zpravu tak udelame 'ochranu' proti tomuto
Code:
function pm (odesilatel, cmd, nickPrijemce, ...)
local text = table.concat({...}, " ") --Vytvoreni tabulky obsahujici zpravy
local prijemce = getPlayerFromName(nickPrijemce)
if prijemce then --Pokud byl nalezen prijemce
if zprava then --Pokud byla napsana zprava
outputChatBox("PM od " .. getPlayerName(odesilatel) .. ": " .. text, prijemce, 0, 255, 0, true) --PM odeslana prijemci
outputChatBox("PM pro " .. getPlayerName(prijemce) ,, ": " .. text, odesilatel, 0, 255, 0, true) --Zprava pro odesilatele
else
outputChatBox("Nenapsal jsi zadnou zpravu!", odesilatel, 255,0,0)
end
else
outputChatBox("Hrac \"" .. nickPrijemce .. "\" nebyl nalezen!", odeilatel, 255,0,0)
end
end
addCommandHandler("pm", pm)
Tak to je vse
Ovsem, nick se musi naprosto shodovat s hracovym nickem! Pokud chcete tomuto predejit a zadavat jen cast nicku bez ohledu na to zda ma v nicku HEX cody nebo velke/male znaky, pouzijte nasledujici kod:
Code:
function getPlayerFromName(name)
if name then
for i, player in ipairs(getElementsByType("player")) do
if string.find(getPlayerName(player):lower(), tostring(name):lower(), 1, true) then
return player
end
end
end
return false
end
--Autorem je TAPL
Toto nahradi funkci getPlayerFromName, takze uz nic editovat nemusite
Takhle kdyz budu mit nick treba #ff0000miki_cz tak staci zadat /pm miki zprava a PM se odesle
To je ode mne vse
___________________Ten nepodstatnej hlavni admin