• logo_cipsoft
    Nowe serwery zostały otwarte 19 Lut 2025:
    Noctalia (Open PvP) Ignitera (Open PvP) us_logo Xybra (Open PvP)

??d? p?ywaj?ca po wyznaczonej trasie (max 3 graczy) + prawdziwy pr?dko?ciomierz!

Status
Zamknięty.

rtoip

Active User
Dołączył
Luty 17, 2009
Posty
96
Liczba reakcji
12
Witam
Przedwczoraj si? nudzi?em, wi?c napisa?em ciekawy ?rodek transportu do mojego otsa. Dzisiaj przedstawiam go bez kilku ulepsze? Wam. Jak on dzia?a?
otslodkiprzystan.png

otslodki.png


  • Gracz wchodzi na pole o actionid 200xx (xx - numer lodzi)
    Lodz zaczyna plynac po ustalonej w konfiguracji trasie
    Je?li ustawili?my w konfiguracji "powrot" na true wraca identyczna trasa
    Po drodze obraca sie automatycznie
    Je?li ustawili?my w konfiguracji "licznik" na true to co "licznikco" kratek odswieza predko?ciomierz
DZIA?A NA TFS 0.3.3 8.42
TESTOWANO NA ODLEG?O?CI 5km (5000 kratek) i predkosci 50kratek/sekunde(delay = 20)!

Zaczynamy!
1. Skrypt
W /data/movements/movements.xml dodajemy:
Kod:
	<movevent type="StepIn" itemid="3589" event="script" value="boat.lua"/>
	<movevent type="StepIn" itemid="3594" event="script" value="boat.lua"/>
Za:
Kod:
<?xml version="1.0" encoding="UTF-8"?>
<movements>
Tworzymy plik /data/movements/scripts/boat.lua i wklejamy:
Kod:
-- BY GOD CARBON (RTOIP)
lodzid = {
[NORTH] = {3587,3589,3591},
[SOUTH] = {3591,3589,3587},
[WEST]	= {3592,3594,3596},
[EAST]	= {3596,3594,3592}
}
POZIOMO	=	1
PIONOWO	=	2
cid = {}
pozycja = {}
--	USTAWIENIA \
powrot = true	-- czy lodz ma powracac ta sama trasa?
licznik = true	-- czy licznik ma byc wlaczony?
trasa = {
--	TU ZMIENIAMY TRASE \/
{	-- kierunek NWSE		ile  ma przeplynac	co ile odnawia licznik	co ile ms lodz plynie kratke
	{kierunek = SOUTH,		odleglosc = 100,		licznikco = 10,	delay = 30}--,
	--{kierunek = SOUTH,		odleglosc = 10,		licznikco = 10,	delay = 300}
},
{
	{kierunek = NORTH,		odleglosc = 30,		licznikco = 50,	delay = 200}--,
	--{kierunek = NORTH,		odleglosc = 30,		licznikco = 50,	delay = 200}
}
--	DALEJ JUZ NIE
}
--	KONIEC USTAWIEN /
function kierunekLodzi(ktora)
	if getThingFromPos({x = pozycja[ktora].x, y = pozycja[ktora].y-1, z = pozycja[ktora].z, stackpos = STACKPOS_FIRST_ITEM_ABOVE_GROUNDTILE}).itemid == lodzid[NORTH][1] then
		return PIONOWO
	else
		return POZIOMO
	end
end
function obrocLodzPoziomo(ktora)
	if kierunekLodzi(ktora) == PIONOWO then
		for n = 1,3 do
			local i = n - 2
			local kawalek	= {x = pozycja[ktora].x, y = pozycja[ktora].y+i, z = pozycja[ktora].z, stackpos = STACKPOS_FIRST_ITEM_ABOVE_GROUNDTILE}
			local ppos		= {x = pozycja[ktora].x, y = pozycja[ktora].y+i, z = pozycja[ktora].z, stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE}
			local newpos	= {x = pozycja[ktora].x+i, y = pozycja[ktora].y, z = pozycja[ktora].z}
			local lodz = getThingFromPos(kawalek)
			doRemoveItem(lodz.uid,1)
			doCreateItem(lodzid[WEST][n],1,newpos)
			while (getThingFromPos(ppos).itemid > 0) and i ~= 0 do
				doTeleportThing(getThingFromPos(ppos).uid,newpos)
			end
		end
	end
	return true
end
function obrocLodzPionowo(ktora)
	if kierunekLodzi(ktora) == POZIOMO then
		for n = 1,3 do
			local i = n - 2
			local kawalek	= {x = pozycja[ktora].x+i, y = pozycja[ktora].y, z = pozycja[ktora].z, stackpos = STACKPOS_FIRST_ITEM_ABOVE_GROUNDTILE}
			local ppos		= {x = pozycja[ktora].x+i, y = pozycja[ktora].y, z = pozycja[ktora].z, stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE}
			local newpos	= {x = pozycja[ktora].x, y = pozycja[ktora].y+i, z = pozycja[ktora].z}
			local lodz = getThingFromPos(kawalek)
			doRemoveItem(lodz.uid,1)
			doCreateItem(lodzid[NORTH][n],1,newpos)
			while (getThingFromPos(ppos).itemid > 0) and i ~= 0 do
				doTeleportThing(getThingFromPos(ppos).uid,newpos)
			end
		end
	end
	return true
end
function _move(parameters)
	pozycja[parameters.ktora] = move(parameters.trasa,parameters.invert,parameters.ktora)
	return true
end
function setactionid(parameters)
	doSetItemActionId(getThingFromPos({x = pozycja[parameters.ktora].x, y = pozycja[parameters.ktora].y, z = pozycja[parameters.ktora].z, stackpos = STACKPOS_FIRST_ITEM_ABOVE_GROUNDTILE}).uid,parameters.actionid)
	return true
end
function move(p,invert,ktoralodz)
	local plus	=
	{--		NORTH	EAST	SOUTH	WEST
	x	=	{0,		1,		0,		-1},
	y	=	{-1,	0,		1,		0},
	x1	=	{0,		1,		0,		-1},
	x3	=	{0,		-1,		0,		1},
	y1	=	{-1,	0,		1,		0},
	y2	=	{0,		0,		0,		0},
	y3	=	{1,		0,		-1,		0}
	}
	local kier	=	p.kierunek
	if invert == true then
		if kier == NORTH then
			kier = SOUTH
		elseif kier == SOUTH then
			kier = NORTH
		elseif kier == EAST then
			kier = WEST
		elseif kier == WEST then
			kier = EAST
		end
	end
	if (kier == NORTH or kier == SOUTH) and kierunekLodzi(ktoralodz) == POZIOMO then
		obrocLodzPionowo(ktoralodz)
	elseif (kier == EAST or kier == WEST) and kierunekLodzi(ktoralodz) == PIONOWO then
		obrocLodzPoziomo(ktoralodz)
	end
	local czesci = {
		{x = pozycja[ktoralodz].x+plus.x1[kier+1], y = pozycja[ktoralodz].y+plus.y1[kier+1],	z = pozycja[ktoralodz].z, stackpos = STACKPOS_FIRST_ITEM_ABOVE_GROUNDTILE},
		{x = pozycja[ktoralodz].x,						y = pozycja[ktoralodz].y,						z = pozycja[ktoralodz].z, stackpos = STACKPOS_FIRST_ITEM_ABOVE_GROUNDTILE}, 
		{x = pozycja[ktoralodz].x+plus.x3[kier+1], y = pozycja[ktoralodz].y+plus.y3[kier+1],	z = pozycja[ktoralodz].z, stackpos = STACKPOS_FIRST_ITEM_ABOVE_GROUNDTILE}
	}
	local npos = {
		{x = pozycja[ktoralodz].x+plus.x[kier+1]+plus.x1[kier+1],	y = pozycja[ktoralodz].y+plus.y[kier+1]+plus.y1[kier+1],	z = pozycja[ktoralodz].z},
		{x = pozycja[ktoralodz].x+plus.x[kier+1],					y = pozycja[ktoralodz].y+plus.y[kier+1],					z = pozycja[ktoralodz].z},
		{x = pozycja[ktoralodz].x+plus.x[kier+1]+plus.x3[kier+1],	y = pozycja[ktoralodz].y+plus.y[kier+1]+plus.y3[kier+1],	z = pozycja[ktoralodz].z}
	}
	for i = 1,3 do 
		lodz = getThingFromPos(czesci[i])
		doRemoveItem(lodz.uid,1)
		doCreateItem(lodzid[kier][i],1,npos[i])
		while getThingFromPos({x = czesci[i].x, y = czesci[i].y, z = czesci[i].z, stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE}).itemid > 0 do
			doTeleportThing(getThingFromPos({x = czesci[i].x, y = czesci[i].y, z = czesci[i].z, stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE}).uid,npos[i])
		end
	end
	if licznik == true and ((kier == SOUTH or kier == NORTH) and pozycja[ktoralodz].y % p.licznikco == 0) or ((kier == EAST or kier == WEST) and pozycja[ktoralodz].x % p.licznikco == 0) then
		local mpers = 1000 / p.delay
		doPlayerSendCancel(cid[ktoralodz],"Speed: " .. mpers .. " m/s (" .. mpers * 3.6 .. " km/h)")
	end
	return {x = pozycja[ktoralodz].x+plus.x[kier+1], y = pozycja[ktoralodz].y+plus.y[kier+1], z = pozycja[ktoralodz].z}
end
function onStepIn(cidd, item, position, fromPosition)
	if item.actionid < 20001 or item.actionid > 20100 then	return true	end
	local ktoralodz = item.actionid - 20000
	cid[ktoralodz] = cidd
	pozycja[ktoralodz] = position
	local j = 0
	local k = 0
	local m = 0
	for l = 1,table.maxn(trasa[ktoralodz]) do
		m = m + trasa[ktoralodz][l].odleglosc
		while j < m do
			addEvent(_move, k, {trasa = trasa[ktoralodz][l], invert = false, ktora = ktoralodz})
			j = j + 1
			k = k + trasa[ktoralodz][l].delay
		end
	end
	if powrot == true then
		l = table.maxn(trasa[ktoralodz])
		while l > 0 do
			m = m + trasa[ktoralodz][l].odleglosc
			while j < m do
				addEvent(_move, k, {trasa = trasa[ktoralodz][l], invert = true, ktora = ktoralodz})
				j = j + 1
				k = k + trasa[ktoralodz][l].delay
			end
			l = l - 1
		end
	end
	addEvent(setactionid,k, {actionid = item.actionid, ktora = ktoralodz})
	return true
end
Je?li komu? nie dzia?a jaki? STACKPOS albo kierunek, niech dopisze na samej g?rze:
Kod:
NORTH = 0
EAST = 1
SOUTH = 2
WEST = 3
STACKPOS_GROUND = 0
STACKPOS_FIRST_ITEM_ABOVE_GROUNDTILE = 1
STACKPOS_SECOND_ITEM_ABOVE_GROUNDTILE = 2
STACKPOS_TOP_CREATURE = 253
STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE = 255
2. Mapa
Rysujemy przystanie wg screena:
screenshot2009091520223.png

Ustawiamy odpowiednie Actionid:
boatxxxxxx2.png

3. Konfiguracja
Napiszemy konfiguracj? wed?ug przyk?adu przystani powy?ej. ?odzie maj? przep?yn?? 43 kratki. Z tego 41 kratek szybko i 2 kratki wolno(by gracze zd??yli wysi???). Pierwsza ??d? p?ynie tylko w kierunku NORTH, a druga w kierunku SOUTH. Powr?t i licznik w??czony. Pami?taj, ?eby edytowa? tylko USTAWIENIA. Nigdzie indziej, chyba, ?e wiesz co robisz.
Kod:
--	USTAWIENIA \
powrot = [B][COLOR="Lime"]true[/COLOR][/B]	-- powrot wlaczony (false - wylaczony)
licznik = [B][COLOR="Red"]true[/COLOR][/B]	-- licznik wlaczony (false - wylaczony)
trasa = {
--	TU ZMIENIAMY TRASE \/
{																				-- TRASA DLA PIERWSZEJ LODZI (ACTIONID 20001 NA MAPIE)
	{kierunek = [B][COLOR="Blue"]NORTH[/COLOR][/B],		odleglosc = [B][COLOR="Magenta"]41[/COLOR][/B],		licznikco = [B][COLOR="Cyan"]5[/COLOR][/B],	delay = [B][COLOR="DarkOrange"]30[/COLOR][/B]},	-- 41 kratek na p?lnoc, licznik co 5 kratek, 33 kratki na sekunde
	{kierunek = [B][COLOR="Blue"]NORTH[/COLOR][/B],		odleglosc = [B][COLOR="Magenta"]2[/COLOR][/B],		licznikco = [B][COLOR="Cyan"]1[/COLOR][/B],	delay = [B][COLOR="DarkOrange"]1000[/COLOR][/B]}	-- 2 kratki na p?lnoc, licznik co kratke, 1 kratka na sekunde
},
{																				-- TRASA DLA DRUGIEJ LODZI (ACTIONID 20002 NA MAPIE)
	{kierunek = [B][COLOR="Blue"]SOUTH[/COLOR][/B],		odleglosc = [B][COLOR="Magenta"]41[/COLOR][/B],		licznikco = [B][COLOR="Cyan"]5[/COLOR][/B],	delay = [B][COLOR="DarkOrange"]30[/COLOR][/B]},	-- jak wyzej tylko na poludnie
	{kierunek = [B][COLOR="Blue"]SOUTH[/COLOR][/B],		odleglosc = [B][COLOR="Magenta"]2[/COLOR][/B],		licznikco = [B][COLOR="Cyan"]1[/COLOR][/B],	delay = [B][COLOR="DarkOrange"]1000[/COLOR][/B]}
}
--	DALEJ JUZ NIE
}
--	KONIEC USTAWIEN /
powrot - czy lodz ma wracac ta sama trasa (true) czy nie (false)
licznik - czy ma pokazywac predkosciomierz (true) czy nie (false)
kierunek - NORTH, SOUTH, EAST, WEST - polnoc, poludnie, zachod, wschod
odleglosc - przez ile kratek ma plynac lodz
licznikco - co ile kratek ma odswiezac predkosciomierz
delay - co ile milisekund ma przesuwac lodz o 1 kratke
npp.logo2.gif
 
Odp: ??d? p?ywaj?ca po wyznaczonej trasie (max 3 graczy) + prawdziwy pr?dko?ciomierz!

super :)
sprawdze czy dziala i dam edit :D

^^Dziala ;d
Dal bys swoja wersje Pelna? :D :)
Prosze :)
Daj pelna i daj opis itp :)
Dam + i inni zapewne tez bo to najlepszy skrypt jaki widzialem serio :)
Nawet Gelio nie zrobil lepszego :)
 
Ostatnia edycja:
Odp: ??d? p?ywaj?ca po wyznaczonej trasie (max 3 graczy) + prawdziwy pr?dko?ciomierz!

No ziom jak to tw?j skrypt to jeste? WIELKI
Mi dzia?a ;p ;)
 
Odp: ??d? p?ywaj?ca po wyznaczonej trasie (max 3 graczy) + prawdziwy pr?dko?ciomierz!

trampke i tu si? mylisz Gelio ju? dawno pokaza? ten skrypt na zawodach skrypterskich i mia? jeszcze lepsz? opcje poniewa? m?g? skr?ca?. Gz skyptu + dla ciebie poniewa? nie jest on ?atwy.
 
Odp: ??d? p?ywaj?ca po wyznaczonej trasie (max 3 graczy) + prawdziwy pr?dko?ciomierz!

to daj link do skryptu jak tak :)
 
Odp: ??d? p?ywaj?ca po wyznaczonej trasie (max 3 graczy) + prawdziwy pr?dko?ciomierz!

A dzia?a pod tibie 8.40 ?
 
Odp: ??d? p?ywaj?ca po wyznaczonej trasie (max 3 graczy) + prawdziwy pr?dko?ciomierz!

Z tego co sie nie myle to od Gelio odgapiles skrypta. On pierwszy zrobil cos takiego.
 
Odp: ??d? p?ywaj?ca po wyznaczonej trasie (max 3 graczy) + prawdziwy pr?dko?ciomierz!

fajne to mi dziala ludzie na ots plywajom i sie scigajom motor?wkami hehe super skrypt 10/10:):)
 
Odp: ??d? p?ywaj?ca po wyznaczonej trasie (max 3 graczy) + prawdziwy pr?dko?ciomierz!

Naprawde niez?y skrypt ju? jest na moim serverze wielkie :thx:
 
Odp: ??d? p?ywaj?ca po wyznaczonej trasie (max 3 graczy) + prawdziwy pr?dko?ciomierz!

Lol fajny skrypt :D:D widzia?em na filmiku Gelio na konkurs skrypterski mia? t? ??dk? albo ty od niego zgapi?e? albo on od ciebie :D
 
Odp: ??d? p?ywaj?ca po wyznaczonej trasie (max 3 graczy) + prawdziwy pr?dko?ciomierz!

komende /a 100 zrypalo teraz chocbym nawet wpisal /a 10000 to pojdzie tylko 1
 
Odp: ??d? p?ywaj?ca po wyznaczonej trasie (max 3 graczy) + prawdziwy pr?dko?ciomierz!

Witam, Je?li ten skrypt dzia?a to powiniene? by? w Cipach naprawd? Bardzo Doby skrypt daje 10/10 chodziarz fajny by? by teraz ??d? podwodna na przyk?ad na quarach i licznik mog by by? bardziej dopracowany moim zdaniem najlepszy skrypt na formum Leci Rep++ dla Ciebie
 
Odp: ??d? p?ywaj?ca po wyznaczonej trasie (max 3 graczy) + prawdziwy pr?dko?ciomierz!

@UP masz 15 post?w wi?c ?aden reput nie poleci ..pfff. OMG.

@topic
Fajny skrypt nie mam okazji go u?y?, pewnie go sk?d? skopiowa?e?, ale i tak leci reput :D

@trampke
Kod:
Nawet Gelio nie zrobil lepszego

I tu si? kurwa ostro mylisz :D
Gelio zrobi taki skrypt ?e ci si? nawet nie ?ni? :D

Pozdrawiam
ADI_ADI
 
Odp: ??d? p?ywaj?ca po wyznaczonej trasie (max 3 graczy) + prawdziwy pr?dko?ciomierz!

?wietny skrypt, na pewno dobry do jakiego? OTSa. A teraz powiedz, czy aby ty na pewno sam robi?e? ten skrypt, czy nigdzie go indziej nie znalaz?e? i skopiowa?e?? Za prac? (je?li to twoja) daj? 8/10.

Pozdrawiam,
Healer.
 
Odp: ??d? p?ywaj?ca po wyznaczonej trasie (max 3 graczy) + prawdziwy pr?dko?ciomierz!

dennie napisany. Mo?na go napisa? 10 razy kr?cej.
 
Odp: ??d? p?ywaj?ca po wyznaczonej trasie (max 3 graczy) + prawdziwy pr?dko?ciomierz!

WoW:)
Ile zajelo ci pisanie tego skryptu?
i czy bys mogl zrobic ten skrypt pod Tibie 8.5`??
 
Odp: ??d? p?ywaj?ca po wyznaczonej trasie (max 3 graczy) + prawdziwy pr?dko?ciomierz!

HAHAHe :>
a mi si? zdupi?:
[23/11/2009 10:08:25] OTSYS_SQLITE3_PREPARE(): SQLITE ERROR: no such table: z_ots_comunication (SELECT * FROM z_ots_comunication WHERE "type" = 'login';)
[23/11/2009 10:08:54] [Warning - Event::loadScript] Cannot load script (data/movements/scripts/boat.lua)
[23/11/2009 10:08:54] data/movements/scripts/boat.lua:158: 'end' expected (to close 'function' at line 129) near '<eof>'
[23/11/2009 10:08:54] [Warning - Event::loadScript] Cannot load script (data/movements/scripts/boat.lua)
[23/11/2009 10:08:54] data/movements/scripts/boat.lua:158: 'end' expected (to close 'function' at line 129) near '<eof>'

@edit: sorki END na koncu nie skopiowalem... ale mam taki problem: zamiast stac to postac caly czas "idzie" w lodce, ostatnie 2 kratki nie dzia?aj?... w s?sie taka sama szybkosc jak w reszcie, nie ma tych 2 efektow na koncu
PS: to jest lepsze od gelia bo cho? u gelia skr?ca to nie robi dymk?w z tylu i chyba nie ma regulowanej szybkosci
 
Ostatnia edycja:
Odp: ??d? p?ywaj?ca po wyznaczonej trasie (max 3 graczy) + prawdziwy pr?dko?ciomierz!

reflesh!! PLZ HELP
 
Status
Zamknięty.
Do góry