Karpio
Advanced User
- Joined
- Apr 11, 2008
- Messages
- 369
- Reaction score
- 58
Witam!
Dzisiaj chc? zaprezentowa? kolejn? wersj? mojego starego skryptu.
Skrypt polega na tym, ?e gdy gracz u?yje drzwi to go przesuwa za drzwi.
Po okre?lonym czasie, gracz jest teleportowany przed drzwi.
Oto kilka ss:
a oto i kod:
w kodzie zmieniamy tylko konfiguracje!
a kod wklejamy do actions/scripts/timedoor.lua
do actions.xml dodajemy:
oczywi?cie uniqueid podajemy swoje, albo u?ywamy 1234.
Do lib/function.lua na samym dole doklejamy:
Skrypt testowany na TFS 0.3.4
Czekam na komentarze i pozdrawiam,
Karpio
@drakos:
Powinno dzia?a?, ja tylko napisa?em na czym osobi?cie testowa?em.
Dzisiaj chc? zaprezentowa? kolejn? wersj? mojego starego skryptu.
Skrypt polega na tym, ?e gdy gracz u?yje drzwi to go przesuwa za drzwi.
Po okre?lonym czasie, gracz jest teleportowany przed drzwi.
Oto kilka ss:
a oto i kod:
PHP:
--Script by Karpio
--Script version: 3.0
function onUse(cid, item, fromPosition, itemEx, toPosition)
--Konfiguracja
local config = {
uid = 1234, --Uniqueid drzwi
ile = 15, --ile osob moze byc za drzwiami
gdzie = "prawo", --w ktora strone przechodzi gracz
dir = {["lewo"] = 1, ["prawo"] = 3, ["gora"] = 2, ["dol"] = 0}, --Nie ruszamy
czas = 90, --Po ilu sekundach nas wyrzuci
dokad = getCreaturePosition(cid), --Nie ruszamy
item = getThingPos(item.uid) -- nie ruszamy
}
--//Konfiguracja
if(item.uid == config.uid) then
if(item.actionid == (config.ile + 100)) then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only ".. config.ile .." people may be behind doors at the same time.")
return TRUE
end
if(getDirectionTo(getCreaturePosition(cid), toPosition) == config.dir[config.gdzie]) then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You may not get back up to "..timeString(config.czas)..".")
return TRUE
end
if(item.actionid == 0) then
doSetItemActionId(item.uid, 101)
else
doSetItemActionId(item.uid, item.actionid + 1)
end
doTransformItem(item.uid, item.itemid + 1)
doTeleportThing(cid, toPosition, TRUE)
zacznijCzekac(function()
czekaj(300)
if(config.gdzie == "lewo") then
doMoveCreature(cid, 3)
elseif(config.gdzie == "prawo") then
doMoveCreature(cid, 1)
elseif(config.gdzie == "gora") then
doMoveCreature(cid, 0)
elseif(config.gdzie == "dol") then
doMoveCreature(cid, 2)
end
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have "..timeString(config.czas)..".")
if(config.czas > 60) then
czekaj((config.czas - 60) * 1000)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have only one minute.")
czekaj(60 * 1000)
local item = getThingFromPos(config.item)
doTeleportThing(cid, config.dokad)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "The end of time.")
doSendMagicEffect(config.dokad, 10)
doSetItemActionId(item.uid, item.actionid - 1)
return TRUE
end
czekaj(config.czas * 1000)
local item = getThingFromPos(config.item)
doTeleportThing(cid, config.dokad)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "The end of time.")
doSendMagicEffect(config.dokad, 10)
doSetItemActionId(item.uid, item.actionid - 1)
return TRUE
end)
return TRUE
end
return TRUE
end
a kod wklejamy do actions/scripts/timedoor.lua
do actions.xml dodajemy:
Code:
<action uniqueid="1234" event="script" value="timedoor.lua"/>
Do lib/function.lua na samym dole doklejamy:
PHP:
czekaj = coroutine.yield
function czekanie(c)
if(coroutine.status(c) ~= 'dead') then
local _, czas = coroutine.resume(c)
addEvent(czekanie, czas, c)
end
end
function zacznijCzekac(f)
if(type(f) == 'function') then
local c = coroutine.create(f)
czekanie(c)
end
end
function timeString(timeDiff)
local dateFormat = {
{"day", timeDiff / 60 / 60 / 24},
{"hour", timeDiff / 60 / 60 % 24},
{"minute", timeDiff / 60 % 60},
{"second", timeDiff % 60}
}
local out = {}
for k, t in ipairs(dateFormat) do
local v = math.floor(t[2])
if(v > 0) then
table.insert(out, (k < #dateFormat and (#out > 0 and ', ' or '') or ' and ') .. v .. ' ' .. t[1] .. (v ~= 1 and 's' or ''))
end
end
return table.concat(out)
end
Skrypt testowany na TFS 0.3.4
Czekam na komentarze i pozdrawiam,
Karpio
@drakos:
Powinno dzia?a?, ja tylko napisa?em na czym osobi?cie testowa?em.