A) RollerCoasterEvent
Kod :
RollerCoaster = {}
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)
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
Kod :
dofile('data\\actions\\scripts\\RollerCoasterEvents.lua')
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
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)
params = INFOS[cid]
pos = getCreaturePosition(cid)
rail = getRail(pos)
dir = -1
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
change = rail.actionid - 1000
power = 0
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) == TRUE) 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) == TRUE) 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
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)
pos = getCreaturePosition(cid)
pos.y = pos.y - 1
doTeleportThing(cid, pos, 1)
mayNotMove(cid, 0)
end
function enterTrain(params)
if (RollerCoaster:onEnter(cid, params[2]) == TRUE) then
doSetItemOutfit(params[1], params[2], -1)
pos = getCreaturePosition(params[1])
table.insert(INFOS, params[1],{type = params.type, speed = SLOW, currZ = pos.z})
addEvent(moveTrain,1000,params[1])
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) == TRUE) then
if (RollerCoaster:onEnterQuery(cid, item) == TRUE) then
doTeleportThing(cid, toPosition, 1)
mayNotMove(cid, 1)
addEvent(enterTrain,500,{cid, item.itemid, type=(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) == TRUE) then
if (INFOS[cid].type == 1) then INFOS[cid].type = 2 else INFOS[cid].type = 1 end
end
end
end
c) Rollerfix
Kod :
function onUse(cid, item, fromPosition, itemEx, toPosition)
if itemid == 7132 then
setPlayerStorageValue(cid,12345,1)
end
end
Kod :
function onUse(cid, item, fromPosition, itemEx, toPosition)
if item.uid == 12346 and item.itemid == 1945 then
setPlayerStorageValue(cid,12345,2)
doTransformItem(item.uid, 1946)
doCreatureSay(cid, "You can now use the Roller-Coaster", TALKTYPE_ORANGE_1)
else
doTransformItem(item.uid, 1945)
end
end
Kod :
<action uniqueid="12346" script="quests/roller lever.lua"/>
<action fromid="7131" toid="7132" script="quests/RollerCoaster.lua"/>
Zakładki