Ir para conteúdo
Entre para seguir isso  
Mock

Mock fly system v 1.0

Recommended Posts

Mock    32
Mock

  • Autor: Mock the bear
  • Servidor testado: TFS 0.3.6

 

Depois de muita espera eu dei a chance de liberar o script, disse que iria postar assim que descobrissem como criar um tile onde não tem. Pois bem um cara de outro forum chamado kydrai descobriu e coube ao lucas123 mostrar. Parabens kydrai ;D

Script dedicado a vc.

A minnha funçao é essa:

function doCreateTile(id,pos) -- By mock
doAreaCombatHealth(0,0,pos,0,0,0,255)
doCreateItem(id,1,pos)
end

E a dele é essa:

function doCreateTile(cid, tileid, pos) -- by Kydrai
       doCombatAreaHealth(cid, 0, pos, 0, 0, 0, CONST_ME_NONE)
       doCreateItem(tileid, 1, pos)
end

O principio é o mesmo. Abusar de um bug do distro que cria um tile quando executa uma spell. E com o tile pode criar o SQM.

 

Bom vamos começar.

Primeiro crie um arquivo chamado flylib.lua na pasta data/lib do seu server e coloque isso:

CONST_FLYVOID = 460
CONT_FLYOUTFIT = 239
IGNORED = {6495,7096,7099,5167,5162,5163,405,7100,
5315,5521,5316,5193,5192,5191,945,5048,923,950,951,
952,953,3623,954,955,949,9101,3352,9106,9103,1524,
1111,437,433,443,434,442,436,445,941,444,435,943,
1027,925,930,926,928,922,921,1112,406,904,931,934,
932,933,5319} --- Config here


up = {}
down = {}
fly = {}
fly.win = function(cid)-- Script by mock
setPlayerStorageValue(cid, 102015,1)
doPlayerSendTextMessage(cid,27,'Now you can fly.')
end
fly.add = function(cid)-- Script by mock
if getPlayerStorageValue(cid, 102015) == -1 or getPlayerStorageValue(cid,13241) == 1 then
	return false
end
if getPlayerStorageValue(cid, 102059) <= 0 then
	local outfit = getCreatureOutfit(cid)
	outfit.lookType = CONT_FLYOUTFIT
	doSetCreatureOutfit(cid, outfit, -1)
	setPlayerStorageValue(cid, 102059,1)
	doChangeSpeed(cid, 390)
	doPlayerSendTextMessage(cid,27,'Fale \'up\' e \'down\'.' )
	return true
else
	doPlayerSendTextMessage(cid,27, "Você ja esta voando.")
	return false
end

end
function doSetItemActionId(uid,aid)
doItemSetAttribute(uid,'aid',aid)
end
function hasSqm(pos)-- by Mock
return getTileThingByPos({x=pos.x,y=pos.y,z=pos.z,stackpos=0}).itemid ~= 0
end
function isWalkable(pos, creature, proj, pz)-- by Nord
if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
if getTopCreature(pos).uid > 0 and creature then return false end
if getTileInfo(pos).protection and pz then return false, true end
local n = not proj and 3 or 2
for i = 0, 255 do
	pos.stackpos = i
	local tile = getTileThingByPos(pos)
	if tile.itemid ~= 0 and not isCreature(tile.uid) then
		if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
			return false
		end
	end
end
return true
end
fly.using=function(cid)-- Script by mock
  return getPlayerStorageValue(cid, 102059) > 0
end
fly.logout = function(cid)-- Script by mock
if fly.using(cid) then
	local p = getCreaturePosition(cid)
	setPlayerStorageValue(cid, 102010,1)
	setPlayerStorageValue(cid, 102011,p.x)
	setPlayerStorageValue(cid, 102012,p.y)
	setPlayerStorageValue(cid, 102013,p.z)
	deletarEmVolta(p)
	fly.del(cid)
end
return true
end
fly.login = function(cid)-- Script by mock
if getPlayerStorageValue(cid, 102010) ~= -1 then
	setPlayerStorageValue(cid, 102010,-1)
	local p = {}
	p.x = getPlayerStorageValue(cid, 102011)
	p.y = getPlayerStorageValue(cid, 102012)
	p.z = getPlayerStorageValue(cid, 102013)
	if not checkAround(p) then
		fly.add(cid)
		down.gerarEmVolta(p)
		doTeleportThing(cid,p)
	end
end
return true
end
fly.die = function(cid)-- Script by mock
if fly.using(cid) then
	local p = getCreaturePosition(cid)
	setPlayerStorageValue(cid, 102011,-1)
	setPlayerStorageValue(cid, 102012,-1)
	setPlayerStorageValue(cid, 102013,-1)
	deletarEmVolta(p)
	fly.del(cid)
end
return true
end
fly.del = function(cid)-- Script by mock
if getPlayerStorageValue(cid, 102059) > 0 then
	if getSqmId(getCreaturePosition(cid)).itemid == CONST_FLYVOID then
		return false
	end
	doRemoveCondition(cid, CONDITION_OUTFIT)
	setPlayerStorageValue(cid, 102059,-1)
	doChangeSpeed(cid, -390)
	return true
end
end
function hasSqm2(pos)-- Script by mock
local f = getTileThingByPos(pos)
if f.itemid ~= 0 and f.itemid ~= 1 and (not isWalkable(pos)  and not isInArray(IGNORED,f.itemid)) then
	return true
end
return false
end
function hasSqm3(pos)-- Script by mock
local f = getTileThingByPos(pos)
if f.itemid ~= 0 and f.itemid ~= 1 and f.itemid ~= CONST_FLYVOID and not isInArray(IGNORED,f.itemid)  then
	return true
end
return false
end
function deletar(pos)-- Script by mock
if hasSqm(pos) then
	local sqm = getSqmId(pos)
	if sqm.itemid == CONST_FLYVOID then
		doRemoveItem(sqm.uid,1)
	end
end
end
function deletarEmVolta(pos)
for x=-1,1 do
	for y=-1,1 do
		deletar({x=pos.x+x,y=pos.y+y,z=pos.z})
	end
end
end
function checkAround(pos)-- Script by mock
for x=-1,1 do
	for y=-1,1 do
		if hasSqm2({x=pos.x+x,y=pos.y+y,z=pos.z}) then
			return true
		end
	end
end
return false
end

function fly.checkAround(pos)-- Script by mock
local n = 0
for x=-1,1 do
	for y=-1,1 do
		local g = getTileThingByPos({x=pos.x+x,y=pos.y+y,z=pos.z})

		if g.itemid == CONST_FLYVOID then
			n = n+1
		end
		if isCreature(getTopCreature({x=pos.x+x,y=pos.y+y,z=pos.z}).uid) then
			return false
		end
	end
end
if n == 9 then
	return true
end
return false
end

function up.checkAround(pos)-- Script by mock
for x=-1,1 do
	for y=-1,1 do
	local g = getTileThingByPos({x=pos.x+x,y=pos.y+y,z=pos.z})
		if hasSqm3({x=pos.x+x,y=pos.y+y,z=pos.z}) or g.itemid == CONST_FLYVOID then
			return true
		end
	end
end
return false
end

function down.checkAround(pos,f)-- Script by mock
for x=-1,1 do
	for y=-1,1 do
	local g = getTileThingByPos({x=pos.x+x,y=pos.y+y,z=pos.z})
		if (not f and hasSqm2({x=pos.x+x,y=pos.y+y,z=pos.z})) or g.itemid == CONST_FLYVOID then
			return true
		end
	end
end
return false
end
function gerarEmVolta(pos)-- Script by mock
local n = 30000
for x=-1,1 do
	for y=-1,1 do
		n =n+1
		doItem({x=pos.x+x,y=pos.y+y,z=pos.z},n)
	end
end
end
function doItem(pos,a,d)-- Script by mock
if not hasSqm2(pos) then
	doCreateTile(CONST_FLYVOID,pos)
	pos.stackpos = 0
	local c = getTileThingByPos(pos)
	doSetItemActionId(c.uid, a)
end
end
function getSqmId(pos,t)-- Script by mock
if hasSqm(pos) or t then
	pos.stackpos = 0
	local i = getTileThingByPos(pos)
	return i
end
return nil
end

function down.doItem(pos,a)-- Script by mock
if not hasSqm(pos) then
	doCreateTile(CONST_FLYVOID,pos)
	pos.stackpos = 0
	local c = getTileThingByPos(pos)
	doSetItemActionId(c.uid, a)
end
end

function down.gerarEmVolta(pos)-- Script by mock
local n = 30000
for x=-1,1 do
	for y=-1,1 do
		n =n+1
		down.doItem({x=pos.x+x,y=pos.y+y,z=pos.z},n)
	end
end
end

function doCreateTile(id,pos) -- Script by mock
doAreaCombatHealth(0,0,pos,0,0,0,255)
doCreateItem(id,1,pos)
end

 

Agora é 1 scritp em creaturescripts, 3 em talkactions e 1 em movements.

Creaturescripts

Em seu login.lua coloque isso:

fly.login(cid)

no seu logout.lua coloque isso:

fly.logout(cid)

e no script que o player morre coloque isso:

fly.die(cid)

Isso é para quando o player entrar e sair do server pra voltar onde ele estava :coolface:

Movements

Em movements.xml:

<movevent type="StepIn" actionid="30001" event="script" value="fly.lua"/>
<movevent type="StepIn" actionid="30002" event="script" value="fly.lua"/>
<movevent type="StepIn" actionid="30003" event="script" value="fly.lua"/>
<movevent type="StepIn" actionid="30004" event="script" value="fly.lua"/>
<movevent type="StepOut" actionid="30005" event="script" value="fly.lua"/>
<movevent type="StepIn" actionid="30006" event="script" value="fly.lua"/>
<movevent type="StepIn" actionid="30007" event="script" value="fly.lua"/>
<movevent type="StepIn" actionid="30008" event="script" value="fly.lua"/>
<movevent type="StepIn" actionid="30009" event="script" value="fly.lua"/>
<movevent type="AddItem" tileitem="1" itemid="460" event="script" value="fly.lua"/>

E no script fly.lua

---Script by mock the bear
function doCopyItem(item,pos) ---Script by mock the bear
for i=1,6 do
	pos.z = pos.z+1
	if hasSqm(pos) and getSqmId(pos).itemid ~= 10217 then
			local i = doCreateItem(item.itemid,item.type,pos)
			if item.actionid ~= 0 then
				doSetItemActionid(i,item.actionid)
			end
			doSendMagicEffect(pos,9)
			return i
	else
		local p2 = {x=pos.x+1,y=pos.y+1,z=pos.z}
		doSendDistanceShoot(pos,p2,40)
		doSendMagicEffect(pos,2)
	end
end
end
function onAddItem(item,pos,k) ---Script by mock the bear
 doCopyItem(item,k)
 doRemoveItem(item.uid,item.type == 0 and 1 or item.type)
end
function onStepIn(cid, item, position, fromPosition) ---Script by mock the bear
local dir = {
[30004] = {0,6,7},
[30007] = {7,0,6,1,5},
[30008] = {1,5,7},
[30009] = {5,4,2,1,7},
[30006] = {2,5,4},
[30003] = {4,3,6,2,5},
[30002] = {3,4,6},
[30001] = {6,0,7,3,4},
}
if isPlayer(cid) then
	local chkps = {x=position.x,y=position.y,z=position.z}
	local ig = false
	for i,b in pairs(dir[item.actionid]) do
		local nw = getPosByDir(chkps,
		local g = getTileThingByPos(nw)
		if hasSqm3(nw) or g.itemid == CONST_FLYVOID or nw.x < 35 or nw.y < 35 then
			ig = true
			break
		end
	end
	if not ig then
		deletarEmVolta(fromPosition)
		gerarEmVolta(getCreaturePosition(cid))
	else
		doTeleportThing(cid,fromPosition,false)
		doPlayerSendTextMessage(cid,27, "Sorry, you cannot fly here.")
	end
end
end
function onStepOut(cid, item, position, fromPosition,q)
addEvent(function(pos) if fly.checkAround(pos) then deletarEmVolta(pos) end end,10000,position)
end

Talkactions

Em talkactions.xml

<talkaction words="up" case-sensitive="no" event="script" value="flyup.lua"/>
<talkaction words="down" case-sensitive="no" event="script" value="flydown.lua"/>
<talkaction words="!fly" case-sensitive="no" event="script" value="fly.lua"/>

Em fly.lua

function onSay(cid, words, param) --- By moc kthe bear (MTB)
if param ~= '' and getPlayerGroupId(cid) > 3 then
	local cida = getPlayerByName(param)
	if cida and isPlayer(cida) then
		fly.win(cida)
	end
	return true
end
if fly.using(cid)  then
	local p = getCreaturePosition(cid)
	p.stackpos = 0
	local f = getTileThingByPos(p)
	if fly.del(cid) then
		if f.itemid ~= 0 and f.itemid ~= 1 and f.itemid ~= CONST_FLYVOID then
			return true
		else
			setPlayerStorageValue(cid,10941,1)
			local p = getCreaturePosition(cid)
			setPlayerStorageValue(cid, 102011,p.x)
			setPlayerStorageValue(cid, 102012,p.y)
			setPlayerStorageValue(cid, 102013,p.z)
			return true
		end
	else
		doPlayerSendTextMessage(cid,27,'You cannot turn off the fly here.')
	end
else
	if fly.add(cid) then
		local pos = getCreaturePosition(cid)
		if getSqmId(pos).itemid == 10217 then
			down.gerarEmVolta(pos)
		end
		return true
	else
		doPlayerSendTextMessage(cid,27,'You cannot fly.')
		return true
	end
end
return true
end

Flyup.lua

function onSay(cid)--- By moc kthe bear (MTB)
local time = os.time()
if time < getPlayerStorageValue(cid, 102054) then
	doPlayerSendCancel(cid, "You are exhausted.")
	return true
end
if not fly.using(cid) then
	return false
end
local pos = getCreaturePosition(cid)
pos.z = pos.z-1
if hasSqm(pos) or pos.z < 0 or up.checkAround(pos) then
	doPlayerSendTextMessage(cid,27,'You cannot fly higger.')
	return true
else
	gerarEmVolta(pos)
	doTeleportThing(cid,pos)
	pos.z = pos.z+1
	deletarEmVolta(pos)
end
return true
end

Flydown.lua

function onSay(cid)--- By moc kthe bear (MTB)
local time = os.time()
if time < getPlayerStorageValue(cid, 102054) then
	doPlayerSendCancel(cid, "You are exhausted.")
	return true
end
if not fly.using(cid) then
	return false
end
local pos = getCreaturePosition(cid)
pos.stackpos = 0
local g = getTileThingByPos(pos)
pos.z = pos.z+1
local f = getTileThingByPos(pos)
if getSqmId(getCreaturePosition(cid)).itemid ~= CONST_FLYVOID
	or down.checkAround(pos)
	or (g.itemid ~= CONST_FLYVOID and f.itemid ~= CONST_FLYVOID and f.itemid ~= 0 and f.itemid ~= 1)
	or (not isWalkable(pos,true,false,false) and hasSqm(pos))
	or (hasSqm(pos) and not getTileHouseInfo(pos)) == 0 then
	doPlayerSendTextMessage(cid,27,'You cannot go to down here.')
	return true
else
	down.gerarEmVolta(pos)
	doTeleportThing(cid,pos)
	pos.z = pos.z-1
	deletarEmVolta(pos)
end
return true
end

 

E pronto. Esse não tem o recurso de cair que tem no video por que aquilo é do K.A junto do flysystem 2.0. Esse ja foi do K.A porem agora ele tem um melhor. Esse ai é bom sim porem não serve mais pro k.a entao ta liberado. Façam bom uso modifiquem da forma que quiserem corrijam os bugs e repostem melhorado contanto que nao tire meus creditos. Lembrando que nao precisa mudança na source.

 

[ame]

[/ame]

 

Eu sei ta um pog do baralho nao tive paciencia pra faze um remake.

Se gostaram clica no meu ovinho da assinatura

Editado por Mock

Compartilhar este post


Link para o post
Lancer    0
Lancer

OMG, se bate Mock que puta script é esse USAHUSHA

 

Eu aqui, sofrendo com XML, e voce programando aí que nem agua!

 

Ficou muito bom :D

 

Parabéns!

Compartilhar este post


Link para o post
ADM MaX DE    0
ADM MaX DE

Nice ! uahuaha'

 

Finalmente alguem conseguiu vencer o desafio (:

Parabéns ao Kydrai pelo código, cara, vc é meu herói s2

 

e parabéns á você mock, pelo script fóda :P

Editado por ADM MaX DE

Compartilhar este post


Link para o post
Mock    32
Mock

So avisando. esse cara é do xis tibiaSanduiche

Compartilhar este post


Link para o post
ADM MaX DE    0
ADM MaX DE

To ligado, na verdade, no bom sentido, ele é 'do povo' (:

Não importa, nem sei pq essa concorrencia tão grande, coisa boba '-'

 

Mock, n intendi a parte do creature script...

 

Login.lua Logout.lua ? e o script que o player morre? Oo'

 

só tenho isso aki no sistema de audio UAHUA'

 

o certo seria ja mover esse sistema para Exclusivos xDD

 

------

edit: ta na hora de mudar uma parte da sua sign (:

 

------

edit²:

Bug found Oo'

 

[21/08/2010 17:34:00] [Error - LuaScriptInterface::loadFile] data/lib/flylib.lua:153: '}' expected near 'os'

[21/08/2010 17:34:00] [Warning - LuaScriptInterface::initState] Cannot load data/lib/

Editado por ADM MaX DE

Compartilhar este post


Link para o post
Kydrai    0
Kydrai

Aew, finalmente, agora todo mundo pode ter um fly mais descente.

Eu ia fazer o fly, mas é muita coisa, ai fiquei com preguiça.

Compartilhar este post


Link para o post
Biozard    0
Biozard

17:31 You cannot fly.

 

pq ta dando isso?

Compartilhar este post


Link para o post
walassypazini    0
walassypazini

issu q eh script em mano^^

vlw

Compartilhar este post


Link para o post
lucas123    0
lucas123

THX pelos créditos de quem fez e quem mostrou =D

 

cheio de bug mais vo arruma todos aki =d

 

PS: Quem nao tá conseguindo colocar pois nao tem o logout.. o die e tals.. vc tem que criar o arquivo lua e colocar a funçao =d

 

/////////

 

17:31 You cannot fly.

 

pa fazer o fl y vc tem que falar !fly seunick =D

Compartilhar este post


Link para o post
xkarolapt    0
xkarolapt
17:31 You cannot fly.

 

 

n ta mais dando isso, mas n da pra subir nem pra descer

 

[21/08/2010 18:19:36] [Error - TalkAction Interface]

[21/08/2010 18:19:36] data/talkactions/scripts/flyup.lua:onSay

[21/08/2010 18:19:36] Description:

[21/08/2010 18:19:36] data/lib/flylib.lua:204: attempt to call global 'doSetItemActionId' (a nil value)

[21/08/2010 18:19:36] stack traceback:

[21/08/2010 18:19:36] data/lib/flylib.lua:204: in function 'doItem'

[21/08/2010 18:19:36] data/lib/flylib.lua:195: in function 'gerarEmVolta'

[21/08/2010 18:19:36] data/talkactions/scripts/flyup.lua:16: in function <data/talkactions/scripts/flyup.lua:1>

Editado por xkarolapt

Compartilhar este post


Link para o post
Mock    32
Mock

@ xkarolapt

que tal parar para ler o script?

fale !fly Nome da pessoa

para da ascesso

Compartilhar este post


Link para o post
lucas123    0
lucas123

foi o que eu flei no meu post.. nignuem le os post kkk

 

otra coisa se alguem reclama por causa que qnd voa com gm tiver soltando fumaça eu vo da tiro ... é pq vc ta com GM kk

 

script intereçante mais nao vo utiliza-lo.. mtos bugs e mto complexo.. sou mais o meu simples, um poco mais pesado e com alguns bugs porem facil de se mexer =d

 

vo usa só a funçao de checagem de tile sua =D

Compartilhar este post


Link para o post
xkarolapt    0
xkarolapt
@ xkarolapt

que tal parar para ler o script?

fale !fly Nome da pessoa

para da ascesso

 

sim agora ja notei

 

=P

 

qndo fala up aparece:

18:25 You cannot fly higger.

 

e isso:

 

[21/08/2010 18:24:26] [Error - TalkAction Interface]

[21/08/2010 18:24:26] data/talkactions/scripts/flyup.lua:onSay

[21/08/2010 18:24:26] Description:

[21/08/2010 18:24:26] data/lib/flylib.lua:204: attempt to call global 'doSetItemActionId' (a nil value)

[21/08/2010 18:24:26] stack traceback:

[21/08/2010 18:24:26] data/lib/flylib.lua:204: in function 'doItem'

[21/08/2010 18:24:26] data/lib/flylib.lua:195: in function 'gerarEmVolta'

[21/08/2010 18:24:26] data/talkactions/scripts/flyup.lua:16: in function <data/talkactions/scripts/flyup.lua:1>

Compartilhar este post


Link para o post
lucas123    0
lucas123

isso é pq seu servidor nao tem o doSetItemActionId

 

faz assim: vai em data/lib / 050-functions (abre ele)

coloca isso no começo

 

function doSetItemActionId(uid,aid)
doItemSetAttribute(uid,'aid',aid)
end

 

THX

 

a é pessoal.. se puderem seguir com meu projeto eu agradeço kkk tem mto poco seguidor buaaa.. aguardando lote ser entregue!

Compartilhar este post


Link para o post
xkarolapt    0
xkarolapt
isso é pq seu servidor nao tem o doSetItemActionId

 

faz assim: vai em data/lib / 050-functions (abre ele)

coloca isso no começo

 

function doSetItemActionId(uid,aid)
   doItemSetAttribute(uid,'aid',aid)
end

THX

 

ae, ta funcionando

 

vlws ae

 

:yes:

Compartilhar este post


Link para o post
Mock    32
Mock

ja ajeitei copia a lib dnv

Compartilhar este post


Link para o post
paulo1252ganba    0
paulo1252ganba

Copiei mais agora eu estou com o mesmo probema do meu amigo xkarolapt

Esta dando o mesmo erro

e Eu ja fis isso

 

 

function doSetItemActionId(uid,aid)

doItemSetAttribute(uid,'aid',aid)

end

 

colokei no functions.lua

 

plz help

Editado por paulo1252ganba
outro erro

Compartilhar este post


Link para o post
Castie'l    0
Castie'l

Eu sabia que 1 dia ele postava auhsauhshashu

Flws monk ja vo add no serv xD

Compartilhar este post


Link para o post
paulo1252ganba    0
paulo1252ganba

Eu ja fis isso tudo e n deu certo, continua dando a msg no meu console

 

[21/08/2010 18:24:26] [Error - TalkAction Interface]

[21/08/2010 22:24:26] data/talkactions/scripts/flyup.lua:onSay

[21/08/2010 22:24:26] Description:

[21/08/2010 22:24:26] data/lib/flylib.lua:37: attempt to call global 'doSetItemSetAttribute' (a nil value)

[21/08/2010 22:24:26] stack traceback:

[21/08/2010 22:24:26] data/lib/flylib.lua:37: in function 'doSetItemActionId'

[21/08/2010 22:24:26] data/lib/flylib.lua:207: in function 'doItem'

[21/08/2010 22:24:26] data/lib/flylib.lua:198: in function 'gerarEmVolta'

[21/08/2010 22:24:26] data/talkactions/scripts/flyup.lua:16: in function <data/talkactions/scripts/flyup.lua:1>

 

------edit-------

To esperando acho q n tem a função doSetItemSetAttribute

 

OLHA AS LINHAS PLSS ajuda ve qual erro

Editado por paulo1252ganba
correção de erro

Compartilhar este post


Link para o post
Brad Pitt    0
Brad Pitt

Merece exclusivo né

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×