Jump to content
  • Announcements

    • Xmat

      Pravidlo pro postování v TTT

      Do sekce Tipy, triky, tutoriály nepatří žádné dotazy.   Postujte sem vaše návody, tipy a různé další věci jež uznáte za vhodné sdělit zdejšímu osazenstvu, ale veškeré dotazy směřujte do sekce Všeobecná diskuse.
    • Replik

      Seznam návodů a důležitých témat v této sekci

      Pro lepší přehlednost jsem vytvořil tento seznam, který vás, méně zkušené, lépe provede touto sekcí. Věřím, že zde najdete, co hledáte. Vypsané jsou návody, které jsou oficiálně uznané jako návody. Běžné diskuze, které neposkytují postupy a rady zvěřejněny nejsou.   Instalace vlastního MaNGOS Serveru Díky těmto návodům budete (měli by jste být) schopni vytvořit a následně spustit váš vlastní server. Nastavení je pro verze s i bez datadisku.   Instalace MaNGOS Serveru (bez datadisku TBC) - Autor Benny Instalace MaNGOS Serveru (s datadiskem TBC) - Autor Malfik Instalace MaNGOS Serveru v prostředí Linux - Autor charlie Instalace MaNGOS Serveru v prostředí Linux - Autor kupkoid   Chyby a jejich řešení při přihlašování k serveru - Autor Cybe   Zálohování uživatelských dat   Dávkový soubor (BAT soubor) pro vytvoření SQL záloh - Autor Replik   Kompilování - tvoření vlastních release (revizí)   Tvorba kompilací pro Win32 (MangoScript) - Autor bLuma   Ostatní - těžko zařaditelné, ale neznamená to, že nejsou dobré   VIP Systém - Autor charlie Tvorba Webových stránek pro MaNGOS - Autor zahuba Tvorba teleportačních NPC (MangoScript) - Autor Replik Registrační web (původně předělaná SPORA) Funkční pro Antrix i MaNGOS - Autor Replik Nastavení a spuštění Minimanager pro MaNGOS - Autor BlackMartin Nastavení MaNGOS Website - Autor Artorius   Samozřejmě jsou zde i jiné návody, ale tyto jsou nejvíce používané, proto věřím, že vám budou nápomocné. Tuto sekci budeme upravovat podle potřeby. Pokud by jste něco nenašli nebo si nevěděli rady, hledejte na fóru a teprve potom založte vlastní topik. Pokud nějaký autor vytvoří kvalitní návod a chtěl by ho zveřejnit i v tomto seznamu, doporučuji, aby mi napsal zprávu skrze PM.   Díky a přeji hezký den na WoWResource   Replik
    • Aristo

      Příspěvky tam, kde nemají co dělat

      Dodržujte zákaz přispívání do topiků s repaky pokud si to zakladatelé nepřejí!! Opakované psaní příspěvků bude trestáno warnem.
    • Aristo

      Používání spoilerů

      Poslední dobou má většina uživatelů fora zvláštní nutkání postovat extrémně dlouhé texty nebo kódy, které zabírají v nejedenom případu i 80% obsahu celé stránky a hodně tak zvedají nepřehlednost v topiku. Chtěl bych všechny uživatele požádat, aby při postování citací, jakýchkoliv kódů, errorů, atp... delších než 30 řádků používali funkci spoileru.   Funkci vyvoláte příkazem [spoiler] text [/spoiler]   Ukázka:  
Sign in to follow this  
WodaN'

[Lua Tutorial] Cooldowny pre vlastne commandy

Recommended Posts

ak spravite vlastny command, napriklad #revive, mozeme pridat vlastny cooldown pomocou os.clock prikazu aby ho hraci nemohli pouzivat stale

 

script na #revive:

 

local revivemsg = "#revive"

function revive_self(event, player, message, type, language)
local message = message:lower()
if (message == revivemsg) then
	if (player:IsDead() == true) then
		player:SendBroadcastMessage("You will be revived!")
		player:FullCastSpell(32343)
		player:ResurrectPlayer(player)		
	else
		player:SendBroadcastMessage("You are not dead!")
	end
end
end

RegisterServerHook(16, "revive_self")

 

tento prikaz mozu spamovat hraci stale, cize trochu kravina :)

 

aby sme vytvorili vlastny cooldown pridame dalsie 2 locali

 

local CDT = 300
local PCD = {}

 

CDT(CoolDownTimer), nastavime aky dlhy cooldown chceme v sekundach, mi si dame 300 sekund(5min)

PCD(PlayerCoolDown), nastavime na tabulku = {}

 

do scriptu pridame dalsi menci script ktory premeni sekundy na minuty aby sa to lepsie dalo rozpoznat

 

if(CDT >= 60) then
       CDT_Timer = CDT/60
       CDT_Type = "Minutes"
elseif(CDT < 60) then
       CDT_Timer = CDT
       CDT_Type = "Seconds"
end

 

if(CDT >= 60) then

ak mame CoolDownTimer na viac ako 60 sekund...

 

CDT_Timer = CDT/60

nastavime CDT_Timer na minuty, cize 300sekund/60 = 5minut

 

CDT_Type = "Minutes"

pouzijeme neskor v scripte

 

elseif(CDT < 60) then

ak mame CoolDownTimer na menej ako 60 sekund...

 

CDT_Timer = CDT

nastavime CDT_Timer na sekundy

 

CDT_Type = "Seconds"

pouzijeme neskor v scripte

 

dobre, takze zaklad mame, teraz musime upravit script aby vyuzival CDT a os.clock

 

os.clock

zisti presny cas na servery

 

zatial nas script vyzera takto:

 

local revivemsg = "#revive"
local CDT = 300
local PCD = {}

function revive_self(event, player, message, type, language)
       if(CDT >= 60) then
               CDT_Timer = CDT/60
               CDT_Type = "Minutes"
       elseif(CDT < 60) then
               CDT_Timer = CDT
               CDT_Type = "Seconds"
       end
local message = message:lower()
if (message == revivemsg) then
	if (player:IsDead() == true) then
		player:SendBroadcastMessage("You will be revived!")
		player:FullCastSpell(32343)
		player:ResurrectPlayer(player)		
	else
		player:SendBroadcastMessage("You are not dead!")
	end
end
end

RegisterServerHook(16, "revive_self")

 

        if(CDT >= 60) then
               CDT_Timer = CDT/60
               CDT_Type = "Minutes"
       elseif(CDT < 60) then
               CDT_Timer = CDT
               CDT_Type = "Seconds"
       end
local message = message:lower().........

CDT script sme uzatvorili (end na konci) kedze uz nesmie zasahovat do zvysku scriptu

 

do scriptu pridame

if PCD[player:GetName()] ~= nil and ((os.clock()-PCD[player:GetName()])) <= CDT then

if PCD[player:GetName()] ~= nil

ak existuje tabulka (~= znamena "ak sa nerovna") PCD[player:GetName()], cize ak sa volame "WodaN" tabulka by vyzerala

 

PCD[WodaN]

 

cize ak existuje tabulka PCD[player:GetName()] a

((os.clock()-PCD[player:GetName()])) <= CDT then

 

ak "cas serveru - PCD[player:GetName()" je menej alebo sa rovna CDT potom...

 

player:SendAreaTriggerMessage("|cFFFF0000You must wait "..CDT_Timer.." "..CDT_Type.." before using this function!")

 

posle cervenu (|cFFFF0000 <text>) AreaTrigger Spravu hracovy s textom

 

You must wait "..CDT_Timer.." "..CDT_Type.." before using this function!

 

CDT_Timer sa zameni za jednotky ktore sme dali na zaciatku scriptu v CDT, CDT_Type sa zameni za typ ktory sa nastavil, priklad, ak mame local CDT = 300, CDT_Type sa zmeni na "minutes" a dostaneme spravu "You must wait 5 Minutes before using this function!" kedze 300/60 = 5, ak by sme mali CDT = 30, dostali by sme spravu "You must wait 30 Seconds before using this function!"

 

script by mal zatial vyzerat takto:

 

local revivemsg = "#revive"
local CDT = 90
local PCD = {}

function revive_self(event, player, message, type, language)
if(CDT >= 60) then
	CDT_Timer = CDT/60
	CDT_Type = "Minutes"
elseif(CDT < 60) then
	CDT_Timer = CDT
	CDT_Type = "Seconds"
end
local message = message:lower()
if (message == revivemsg) then
	if PCD[player:GetName()] ~= nil and ((os.clock()-PCD[player:GetName()])) <= CDT then
		player:SendAreaTriggerMessage("|cFFFF0000You must wait "..CDT_Timer.." "..CDT_Type.." before using this function!")
	else
		if (player:IsDead() == true) then
			player:SendBroadcastMessage("You will be revived!")
			player:FullCastSpell(32343)
			player:ResurrectPlayer(player)		
		else
			player:SendBroadcastMessage("You are not dead!")
		end
	end
end
end

RegisterServerHook(16, "revive_self")

 

dufam ze zatial chapete o co sa jedna, ale ako ste si mohli vsimnut, script vyuziva "PCD[player:GetName()]", no nikde sme ho zatial nepouzili, preto si ho pridame do scriptu ako

 

PCD[player:GetName()] = os.clock

 

dobre, myslim ze vobec nechapete o co tu teraz ide :D takze to vysvetlim takto

 

ak hrac pouzije prvy krat prikaz #revive, nastavi to PCD[player:GetName()] na cas serveru, cize ak je 16:30 tak potom

PCD[player:GetName()] = 16:30

 

if PCD[player:GetName()] ~= nil and ((os.clock()-PCD[player:GetName()])) <= CDT then

ak existuje PCD[player:GetName()] a cas serveru "minus" PCD[player:GetName()] (cas kedy sme pouzili command) je menej ako CDT (v nasom pripade 300sekund/5minut) tak script neurobi nic, len nam posle spravu (lebo 16:32[cas teraz] - 16:30[cas kedy sme pouzili command] nieje 5 alebo viac minut)

 

ale ak nie (else), cize ak

((os.clock()-PCD[player:GetName()])) > CDT then

 

cas serveru "minus" PCD[player:GetName()] je vecsie ako CDT (preslo viac ako 300sekund/5min)

 

script spravi nasledovne

 

			if (player:IsDead() == true) then
			player:SendBroadcastMessage("You will be revived!")
			player:FullCastSpell(32343)
			player:ResurrectPlayer(player)		
		else
			player:SendBroadcastMessage("You are not dead!")
		end

 

if (player:IsDead() == true) then

ak je hrac mrtvy potom

				player:SendBroadcastMessage("You will be revived!")
			player:FullCastSpell(32343)
			player:ResurrectPlayer(player)

dostane spravu "You will be revived!", vycasti spell 32343 (ressurection) a ressne sa (player:ResurrectPlayer(player))

 

ak nieje mrtvy (else)

 

dostane spravu "You are not dead!"

 

celi script bude vyzerat takto:

 

local revivemsg = "#revive"
local CDT = 300
local PCD = {}

function revive_self(event, player, message, type, language)
if(CDT >= 60) then
	CDT_Timer = CDT/60
	CDT_Type = "Minutes"
elseif(CDT < 60) then
	CDT_Timer = CDT
	CDT_Type = "Seconds"
end
local message = message:lower()
if (message == revivemsg) then
	if PCD[player:GetName()] ~= nil and ((os.clock()-PCD[player:GetName()])) <= CDT then
		player:SendAreaTriggerMessage("|cFFFF0000You must wait "..CDT_Timer.." "..CDT_Type.." before using this function!")
	else
		if (player:IsDead() == true) then
			player:SendBroadcastMessage("You will be revived!")
			player:FullCastSpell(32343)
			player:ResurrectPlayer(player)
			PCD[player:GetName()] = os.clock()		
		else
			player:SendBroadcastMessage("You are not dead!")
		end
	end
end
end

RegisterServerHook(16, "revive_self")

 

-- snad ste pochopili, a kto nie nebojte sa napisat reply alebo PM :)

Edited by WodaN'
  • Upvote 3

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

×