Time Door v.3

Status
Zamknięty.

Karpio

Advanced User
Zarejestrowany
Dołączył
Kwiecień 11, 2008
Posty
369
Liczba reakcji
57
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:
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
w kodzie zmieniamy tylko konfiguracje!
a kod wklejamy do actions/scripts/timedoor.lua
do actions.xml dodajemy:
Kod:
<action uniqueid="1234" event="script" value="timedoor.lua"/>
oczywi?cie uniqueid podajemy swoje, albo u?ywamy 1234.

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.
 
Odp: Time Door v.3

Testowa?em ju? na Valhalli. Skrypt oczywi?cie dzia?a 10/10!
 
Odp: Time Door v.3

nie no jak zwykle przechodzisz samego siebie wlasnie tego potrzebowalem. 10/10
 
Odp: Time Door v.3

a mo?e tak pod mistic spirit ? bardzo bym prosi?
 
Ostatnia edycja:
Odp: Time Door v.3

Swietne to trzeba miec glowe zeby cos takiego napisac, szkoda ze ja takiej nie mam xd
10/10
 
Odp: Time Door v.3

Gelio co Ci niby nie pasuje?
Sam napisa?em nawet kod jest inny...
A co do skryptu Rahima to pierwszy raz go widz?.

pzdr
 
Odp: Time Door v.3

Hmm... Skrypt zasobo?erny. W dodatku jakie? chi?skie funkcje u?yte.

?apcie m?j skrypt, nie testowa?em. Mog?em jebn?? liter?wk?, wi?c jc piszcie :D
PS. Wa?ne jest, aby teren za drzwiami posiada? flag? zabraniaj?c? wylogowywania si? (w rme ?atwo ustawi?).
Kod:
local config = {
    czas = 180, --czas w sekundaach
    czas_kiedy_wysle_ostrzezenie = 120,
    ile_osob = 15
    }
    
function onUse(cid,item,fromPosition,itemEx,toPosition)    
    local pos, param = getPosByDir(fromPosition,getDirectionTo(fromPosition,toPosition),2), {cid,fromPosition}
    if(#tp_doors > config.ile_osob) then
        return TRUE
    end
    if(tp_doors[cid] == nil or tp_doors[cid] == false) then
        tp_events[cid] = addEvent(teleport,config.czas,param)
        tp_doors[cid] = true
        doTeleportThing(cid,pos)
        doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"Masz tylko "..config.czas.." sekund na wykonanie questu! Spiesz sie!")
        addEvent(ostrze,config.czas_kiedy_wysle_ostrzezenie,param)
        return TRUE
    end
    if(tp_events[cid] ~= nil) then
        stopEvent(tp_events[cid])
        table.remove(tp_events,cid)
        return TRUE
    end
end

function teleport(param)
    if(isPlayer(param[1]) == TRUE) then
        doTeleportThing(param[1],param[2])
        doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"Czas sie skonczyl!")
    end
    table.remove(tp_events,param[1])
    table.remove(tp_doors,param[1])
end

function ostrze(param)
    doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"Spiesz sie! Zostalo juz tylko "..(cofnig.czas - config.czas_kiedy_wysle_ostrzezenie).." sekund!")
end
Teraz do lib/constant.lua
Kod:
tp_events = {}
tp_doors = {}
Pozdro.

@down.
Ju? si? robi... :D Poprawione.
 
Ostatnia edycja:
Odp: Time Door v.3

tw?j skrypt faktycznie potrzebuje mniej zasob?w, ale m?j ma wi?cej funkcji.
np. tylko okre?lona ilo?? os?b mo?e wej?? i skrypt informuje nas o zbli?aj?cym si? ko?cu czasu (na minute przed ko?cem)

pzdr
 
Odp: Time Door v.3

DZieki 10/10 dzia?a testowa?em uzy?em na swoim otsie no-ip :D Dzi?ki Dzi?ki !
 
Odp: Time Door v.3

refresh - prosz? o komentowanie mego skryptu
Pzdr
 
Odp: Time Door v.3

SKRYPT BOSKI!

10/10 ;) :up: :up: :up:
 
Odp: Time Door v.3

Brawo, brawo. Na serio brawo: http://tibia.net.pl/actions/60024-8-x-inne-drzwi-przez-ktore-przejdziemy-po-jakims-czasie-teleportuja-nas-spowrotem.html
No comment.
Pozdrawiam,
Gelio
@down
Nie m?wi?, ?e kopiowa?e?. Po prostu nie potrzebnie dany skrypt, bo ju? istnieje.

@Gelio
Przy najmniej skr?ci? ten skrypt!
@Topic
Noo ?adnie ,chocia? nie tw?j pomys? wi?c nie dam reput ,ale moim zdaniem lepiej ,bo skrypt jest skr?cony i by?y by mniejsze lagi w razie b??du :)
 
Odp: Time Door v.3

Super ! Przyda si? napewno ! :) Oby tak dalej :) Tw?rz dalej takie skrypty :) Dziex.

Repucik leci ! :):)
 
Odp: Time Door v.3

Przetestuj? w po?udnie i je?li skrypt dzia?a, edytuje post i dam reputa, tego szuka?em, a nie mia?em pomys?u jak zrobi? to samemu.
__________________

Zapraszam na kleksoria.com!
Zajrzyj na nowe open tibia forum z w?asn? ot list? otservers.net!
 
Ostatnia edycja:
Odp: Time Door v.3

na pewno dzia?a :D
w ko?cu sam to testowa?em

Pzdr
 
Odp: Time Door v.3

?miga super, dzi?ki! ;)

EDIT: A jak zrobi? je?li item actionid jest +1 ?eby teleportowa?o na pozycj? przed drzwi i kasowa?o czas?
__________________

Zapraszam na kleksoria.com!
Zajrzyj na nowe open tibia forum z w?asn? ot list? otservers.net!
 
Ostatnia edycja:
Odp: Time Door v.3

@Gelio
Przy najmniej skr?ci? ten skrypt!
@Topic
Noo ?adnie ,chocia? nie tw?j pomys? wi?c nie dam reput ,ale moim zdaniem lepiej ,bo skrypt jest skr?cony i by?y by mniejsze lagi w razie b??du :)

Je?li si? nie znasz nie wypowiadaj si? w ten spos?b, poniewa? skrypty tylko z pozoru s? podobne, ca?a zawarto?? pliku niemal w 100% si? r??ni
A co do obu skrypt?w to ten jest lepszy od tego autorstwa Rahima :(
Pewnie dlatego ?e pisa? go w po?piechu :)
 
w sensie aby wyj?? si? da?o?
a potem nie tpa?o z powrotem?

pzdr

@down
jako ?e jutro jade nad morze, to jak wr?c? to Ci to napisz?

pzdr

//Edytuj posty, a nie pisz nowego. Inaczej b?d? musia? da? "post pod postem".
 
Ostatnio edytowane przez moderatora:
Status
Zamknięty.
Back
Do góry