actions/actions.xml
<action fromid="7131" toid="7132" script="Roller.lua"/>
actions/scripts/Roller.lua
--[[ Roller Coaster System by Colex ]]--
--[[ Updated by Kydrai ]]--
-- Lib
RollerCoaster = {}
RollerCids = {}
function RollerCoaster:onChangeLevel(cid, fromZ, toZ)
return TRUE
end
function RollerCoaster:onMove(cid, rail, railInfo, pos)
return TRUE
end
function RollerCoaster:onChangeSpeed(cid, power)
if power == 2 then
doSendAnimatedText(getCreaturePosition(cid),"TROC TROC",210)
else
doSendAnimatedText(getCreaturePosition(cid),"TSSSIIIIII",210)
end
return TRUE
end
function RollerCoaster:onTypeChange(cid, fromType, toType)
return TRUE
end
function RollerCoaster:onExitQuery(cid)
RollerCids[cid] = nil
return TRUE
end
function RollerCoaster:onExit(cid)
return TRUE
end
function RollerCoaster:onEnterQuery(cid, cart)
return TRUE
end
function RollerCoaster:onEnter(cid, cartID)
return TRUE
end
-- End Lib
local TRAINS = {7131, 7132}
local all = {7121, 7122, 7123, 7124, 7125, 7126, 7133, 7134, 7135, 7136}
local ACTION_TRAIN = {1001, 1002}
local RAILS = {
{id = all[1], dirs = {{dir = SOUTH, out = 2},{dir = NORTH, out = 2}}},
{id = all[2], dirs = {{dir = EAST, out = 1},{dir = WEST, out = 1}}},
{id = all[3], dirs = {{dir = EAST, out = 1},{dir = SOUTH, out = 2}}},
{id = all[4], dirs = {{dir = WEST, out = 1},{dir = SOUTH, out = 2}}},
{id = all[5], dirs = {{dir = EAST, out = 1},{dir = NORTH, out = 2}}},
{id = all[6], dirs = {{dir = WEST, out = 1},{dir = NORTH, out = 2}}},
{id = all[7], stop = 1},
{id = all[8], stop = 1},
{id = all[9], stop = 1},
{id = all[10], stop = 1},
}
local SLOW = 500
local FAST = 200
local INCREASE = 50
local DECREASE = 50
local DOWN_INCREASE = 450
local UP_DECREASE = 155
local INFOS = {}
TRUE = 1
FALSE = 0
function getRail(pos)
local stack = 1
local found = 0
local rail
repeat
pos.stackpos = stack
rail = getThingfromPos(pos)
if rail.itemid == 0 then
break
end
for i, r in ipairs(RAILS) do
if (rail.itemid == r.id) then
found = 1
break
end
end
stack = stack + 1
until (found == 1)
return rail
end
function moveTrain(cid)
local params, pos, rail, newid
local dir = -1
if isCreature(cid) then
params = INFOS[cid]
pos = getCreaturePosition(cid)
rail = getRail(pos)
for i,r in ipairs(RAILS) do
if rail.itemid == r.id then
if RollerCoaster:onMove(cid, rail, r, pos) == FALSE then
table.remove(INFOS, cid)
return 1
end
if r.stop ~= nil then
if r.stop == 1 then
RollerCoaster:onExitQuery(cid)
addEvent(exitTrain, 2000, cid)
return 1
end
end
local change = rail.actionid - 1000
local power = 0
local power = change
doChangeType(cid, r.id, INFOS[cid].beforeid)
info = r.dirs[iNFOS[cid].type]
dir = info.dir
if power == 1 or power == 2 then
if RollerCoaster:onChangeSpeed(cid, power) then
if power == 2 then
INFOS[cid].speed = INFOS[cid].speed - INCREASE
elseif power == 1 then
INFOS[cid].speed = INFOS[cid].speed + DECREASE
end
end
end
if INFOS[cid].currZ ~= pos.z then
if RollerCoaster:onChangeLevel(cid, INFOS[cid].currZ, pos.z) then
if INFOS[cid].currZ > pos.z then
INFOS[cid].speed = INFOS[cid].speed + UP_DECREASE
elseif params.currZ < pos.z then
params.speed = params.speed - DOWN_INCREASE
end
end
end
if params.speed < 1 then
params.speed = 1
end
params.currZ = pos.z
newid = TRAINS[info.out]
INFOS[cid].beforeid = r.id
break
end
end
end
if dir ~= -1 then
doSetItemOutfit(cid, newid, -1)
doMoveCreature(cid, dir)
addEvent(moveTrain, params.speed, cid)
else
RollerCoaster:onExitQuery(cid)
addEvent(exitTrain, 2000, cid)
end
end
function exitTrain(cid)
table.remove(INFOS, cid)
RollerCoaster:onExit(cid)
doSetItemOutfit(cid, TRAINS[1], 0)
local pos = getCreaturePosition(cid)
pos.y = pos.y - 1
doTeleportThing(cid, pos, 1)
doCreatureSetNoMove(cid, 0)
end
function enterTrain(cid, item, type)
if RollerCoaster:onEnter(cid, item) then
doSetItemOutfit(cid, item, -1)
local pos = getCreaturePosition(cid)
table.insert(INFOS, cid, {type = type, speed = SLOW, currZ = pos.z})
addEvent(moveTrain, 1000, cid)
end
end
function getSpeed(cid)
if INFOS[cid].speed ~= nil then
return INFOS[cid].speed
end
return FALSE
end
function setSpeed(cid, speed)
if INFOS[cid].speed ~= nil then
INFOS[cid].speed = speed
return TRUE
end
return FALSE
end
function onUse(cid, item, fromPosition, itemEx, toPosition)
if isInArray(ACTION_TRAIN, item.actionid) then
if RollerCoaster:onEnterQuery(cid, item) and RollerCids[cid] == nil then
doTeleportThing(cid, toPosition, 1)
doCreatureSetNoMove(cid, 1)
RollerCids[cid] = addEvent(enterTrain, 500, cid, item.itemid, item.actionid-1000)
end
end
return TRUE
end
----"No Scripting Needed" System-----
local change = {}
change[all[1]] = {all[3], all[4]}
change[all[2]] = {all[4], all[6]}
change[all[3]] = {all[1], all[4], all[6]}
change[all[4]] = {all[1], all[2], all[3], all[5], all[6]}
change[all[5]] = {all[4]}
change[all[6]] = {all[2], all[3], all[4]}
change[all[7]] = {}
change[all[8]] = {}
change[all[9]] = {}
change[all[10]] = {}
function doChangeType(cid, id, beforeID)
if table.getn(change[id]) > 0 then
if isInArray(change[id],beforeID) then
if INFOS[cid].type == 1 then
INFOS[cid].type = 2
else
INFOS[cid].type = 1
end
end
end
end
Coloque essas Actionids
No trem: 1001 e 1002, isso indica a direção para qual o trem começa (não lembro qual é).
Nos trilhos: 1001 para diminuir e 1002 para aumentar a velocidade quando o trem passa por cima.
-----
Já o reset é no nick mesmo ou descrição?
Mostra qual o script do reset que vc ta usando.





info
Grupo: Campones
Registrado: 17/04/10
Posts: 0
Reputação: 0
Char no Tibia: Não Jogo
Bom, na versão 8.54 clico em "Use" no Roller Coaster System do XTibiano Colexe acaba não acontecendo nada, nem dá erro no script.
Alguém poderia ajudar?
Ok, acho que botei no lugar errado, mas aproveitando.
Alguém tem algum sistema que deixe o número de resets no nick da pessoa?
Agradeço.
Editado Abril 29 por Soup