MSHost.cz
https://forum.mshost.cz:443/

Jednoduchy PM system
https://forum.mshost.cz:443/viewtopic.php?f=18&t=1087
Page 1 of 1

Author:  MIKI785 [ Wed 09. May 2012 20:19:09 ]
Post subject:  Jednoduchy PM system

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 :D

Page 1 of 1 All times are UTC + 1 hour [ DST ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/