Ir para conteúdo

[Arquivado][moveevent] Nahruto's Car [atualizado]


makabrotaliban

Posts Recomendados

:forward: Nahruto's Car :back:

 

:arrow: Um pequeno vídeo do Srcipt:

 

Rescriptado e testado utilizando TFS (0.3.4)

 

movemenst / scripts

 

car.lua

local storages = {isMoving = 12550, direction = 12551, speed = 12552}

 

local SpeedMeter = {Default = 800, Max = 0, Min = 2500}

 

function tileChecker(pos, type_)

local myTable = {}

if (type(pos) == 'table') then

for i = 1, 5 do

pos.stackpos = i

local Thing = getThingFromPos(pos)

local thisID, thisUID = Thing.itemid, Thing.uid

if thisID > 1 then

if type_ == "itemID" then

table.insert(myTable, thisID)

elseif type_ == "itemUID" then

table.insert(myTable, thisUID)

end

end

end

end

return #myTable > 0 and myTable or nil

end

 

local function findItem(pos, t)

if (type(pos) == 'table' and type(t) == 'table') then

for _i, i in ipairs(tileChecker(pos, "itemID")) do

if isInArray(t, i) then

pos.stackpos = _i

ret = getThingFromPos(pos).uid

break

end

end

end

return ret

end

 

function moveCar(x)

if x.Dir ~= -1 then

doCreateItem(isInArray({1, 2}, x.Dir) == TRUE and 7267 or 7266, 1, x.nPos)

doTeleportThing(x.cid, x.nPos, FALSE)

doRemoveItem(findItem(x.pos, {7266, 7267}))

end

end

 

function onStepIn(cid, item, position, fromPosition)

if isPlayer(cid) == TRUE then

local status =

{

isMoving = getPlayerStorageValue(cid, storages.isMoving),

direction = getPlayerStorageValue(cid, storages.direction),

speed = getPlayerStorageValue(cid, storages.speed)

}

if status.speed <= SpeedMeter.Max then

setPlayerStorageValue(cid, storages.speed, SpeedMeter.Default)

status.speed = SpeedMeter.Default

elseif status.speed >= SpeedMeter.Min then

setPlayerStorageValue(cid, storages.speed, SpeedMeter.Default)

status.speed = SpeedMeter.Default

end

if status.isMoving == 1 then

local Movements =

{

[1] = {x = position.x - 1, y = position.y, z = position.z},

[2] = {x = position.x + 1, y = position.y, z = position.z},

[3] = {x = position.x, y = position.y - 1, z = position.z},

[4] = {x = position.x, y = position.y + 1, z = position.z}

}

 

if not Movements[status.direction] then setPlayerStorageValue(cid, status.direction, 1) end

 

local Stor = status.direction

 

local newPos = Movements[stor]

 

local Check = tileChecker(newPos, "itemUID")

 

if Check ~= nil then

for _, i in ipairs(Check) do

if (hasProperty(i, CONST_PROP_BLOCKSOLID) == TRUE or isCreature(i) or getTilePzInfo(newPos)) then

Stor = isInArray({1, 2}, Stor) == TRUE and (Stor == 1 and 2 or 1) or isInArray({3, 4}, Stor) and (Stor == 3 and 4 or 3) or nil

newPos = Movements[stor]

setPlayerStorageValue(cid, storages.direction, Stor)

break

end

end

end

addEvent(moveCar, status.speed, {cid = cid, pos = position, nPos = newPos, Dir = Stor})

 

elseif status.isMoving == -1 then

setPlayerStorageValue(cid, storages.isMoving, 1)

end

end

return TRUE

end

 

movements.xml

<movevent type="StepIn" itemid="7266" event="script" value="car.lua"/>

<movevent type="StepIn" itemid="7267" event="script" value="car.lua"/>

talkactions / scripts

 

car.lua

local storages = {isMoving = 12550, direction = 12551, speed = 12552}

 

function onSay(cid, words, param)

local status =

{

isMoving = getPlayerStorageValue(cid, storages.isMoving),

direction = getPlayerStorageValue(cid, storages.direction),

speed = getPlayerStorageValue(cid, storages.speed)

}

local controls =

{

["up"] = {storage = storages.direction, new = 3, txt = "up"},

["down"] = {storage = storages.direction, new = 4, txt = "down"},

["left"] = {storage = storages.direction, new = 1, txt = "left"},

["right"] = {storage = storages.direction, new = 2, txt = "right"},

["speedup"] = {storage = storages.speed, new = status.speed - 50, txt = "fast"},

["speeddown"] = {storage = storages.speed, new = status.speed + 50, txt = "slow"},

["stop"] = {storage = storages.direction, new = -1, txt = "stop"}

}

if status.isMoving == 1 then

local ctrl = controls[param]

if ctrl then

setPlayerStorageValue(cid, ctrl.storage, ctrl.new)

doCreatureSay(cid, ctrl.txt, TALKTYPE_SAY)

else

doSendMagicEffect(getPlayerPosition(cid), 2)

doPlayerSendCancel(cid, "Invalid operation.")

end

else

doPlayerSendCancel(cid, "You are not in a car.")

end

return TRUE

end

talkactions.xml

<talkaction words="car" script="car.lua"/>

 

Créditos



 
Nahruto

Nosctradamus

 

<~> Versão Atualizada em 09/07/2009 <~>

Editado por Nosctradamus
Link para o comentário
Compartilhar em outros sites

  • Respostas 46
  • Created
  • Última resposta

Top Posters In This Topic

Simplesmente magnifico. Funciona perfeitamente, é bem legal.

Deixa o Tibia mais engraçado e mais divertido, fazendo assim que o player

seja fiel ao servidor. Mas é claro, quem quiser um sistema desse no seu server, é presciso um pouco de dedicação e trabalho. Continue trazendo mais conteúdo para o Xtibia.

Por mim, aprovado. :button_ok:

 

 

 

~~ Kakilo

Editado por KaKilo
Link para o comentário
Compartilhar em outros sites

  • 3 weeks later...

@BRUNO TIBIANo

 

Me ofender n vai levar a nada...só te prejudicar mesmo.

Pra que discutir se a minha é resposta é obvia, ker bater boca envia PM!

 

Aff esses NOOBS !!

 

Reportado

 

@post

 

A function wall não é obrigatória, é como se fosse um túnel ou algo que escondesse os trilhos é só ver os IDs que estão expostos e comparar no Map Editor.

O script funfa perfeitamente sem ela!

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.

×
×
  • Criar Novo...