im using tfs 0.2.10 and when i use the switch and nothing happens
actions.xml
<action itemid="1740" script="quests/quests.lua"/>
<action fromid="1747" toid="1749" script="quests/quests.lua"/>
<action uniqueid="5000" script="quests/annihilator.lua"/>
<action uniqueid="5001" script="quests/annihilator.lua"/>
<action uniqueid="5002" script="quests/annihilator.lua"/>
<action uniqueid="5003" script="quests/annihilator.lua"/>
<action uniqueid="5004" script="quests/annihilator.lua"/>
annihilator.lua
-- Credits to GrizZm0 for most of the script
-- Credits to Tworn for the cleanArea(), a bit modified by Ispiro
-- Credits to Ispiro for a more easier script to configurate and easier to read.
local starting= {x = 186, y = 649, z = 13} -- edit this to the top left sqm of ur annhilator room
local ending= {x = 192, y = 656, z = 13} -- edit this to the bottom right sqm of ur annhilator room
local playerPos = { -- oldPositions; positions of players before they get teleported.
{x = 247, y = 662, z = 13},
{x = 247, y = 661, z = 13},
{x = 247, y = 660, z = 13},
{x = 247, y = 659, z = 13}
}
local newPlayerPos = { -- Positions for where players should be teleported, make sure it's in the same order as oldPositions
{x = 189, y = 653, z = 13},
{x = 189, y = 652, z = 13},
{x = 189, y = 651, z = 13},
{x = 189, y = 650, z = 13}
}
local creaturePos = { -- Name and position of monsters to summon.
{"Demon", {x = 189, y = 655, z = 13}},
{"Demon", {x = 189, y = 654, z = 13}},
{"Demon", {x = 191, y = 653, z = 13}},
{"Demon", {x = 191, y = 651, z = 13}},
{"Demon", {x = 187, y = 652, z = 13}},
{"Demon", {x = 187, y = 650, z = 13}}
}
if(#playerPos ~= #newPlayerPos) then
error("Annhilator has not been properly configured.")
end
--- Preferably, do not edit anything below this line unless you know exactly what you are doing.
local player = {}
function onUse(cid, item, frompos, item2, topos)
if(item.uid == 5000) then --- change to different item.uid according to ur mapeditor
if(item.itemid == 1945) then
for currentPlayer = 1, table.getn(playerPos) do -- add player id's to table
playerPos[currentPlayer].stackpos = 253
player[currentPlayer] = getThingfromPos(playerPos[currentPlayer]).uid
end
if(checkPlayers()) then
local ret, player = checkLevel(100)
if(ret) then
local ret, player = checkStorage(100)
if(ret) then
summonCreatures(creaturePos)
teleportPlayers(2, 10) -- 2 stands for the effect on old pos, 10 for the effect on new pos.
doTransformItem(item.uid, 1946)
else
doPlayerSendCancel(cid, getPlayerName(player) .. " has already done this quest.")
end
else
doPlayerSendCancel(cid, getPlayerName(player) .. " is too low.")
end
else
doPlayerSendCancel(cid, "You need " .. #playerPos .. " players to do this quest.")
end
elseif(item.itemid == 1946) then -- preferably, to be the id of the lever added by mapeditor.
if(cleanArea()) then
doTransformItem(item.uid, 1945)
else
return FALSE
end
end
--- Chests.
elseif(item.uid == 5001) then -- demon armor
questChestPrize(cid, 2494, 1, 100)
elseif(item.uid == 5002) then -- magic sword
questChestPrize(cid, 2400, 1, 100)
elseif(item.uid == 5003) then -- stonecutter's axe
questChestPrize(cid, 2431, 1, 100)
elseif(item.uid == 5004) then -- thunder hammer
questChestPrize(cid, 2421, 1, 100)
end
return TRUE
end
function checkLevel(minLevel)
for currentPlayer = 1, table.getn(player) do
local playerLevel = getPlayerLevel(player[currentPlayer])
if(playerLevel < minLevel) then
if(getPlayerAccess(player[currentPlayer]) == 0) then
return false, player[currentPlayer]
end
end
end
return true
end
function checkStorage(storageValue)
for currentPlayer = 1, table.getn(player) do
local questStatus = getPlayerStorageValue(player[currentPlayer], storageValue)
if(questStatus == TRUE) then
if(getPlayerAccess(player[currentPlayer]) == 0) then
return false, player[currentPlayer]
end
end
end
return true
end
function cleanArea()
local checking= {x = starting.x, y = starting.y, z = starting.z, stackpos = 253}
local monster = {}
while(checking.y <= ending.y) do
local creature = getThingfromPos(checking)
if(isCreature(creature.uid) == TRUE) then
if(isPlayer(creature.uid) == TRUE) then
return false
else
table.insert(monster, creature.uid)
end
end
if(checking.x == ending.x) then
checking.x = starting.x
checking.y = checking.y + 1
end
checking.x = checking.x + 1
end
for i, c in pairs(monster) do
doRemoveCreature(c)
end
return true
end
function summonCreatures(parameters)
for currentMonster = 1, table.getn(parameters) do
local monster = parameters[currentMonster]
doSummonCreature(monster[1], monster[2])
end
end
function teleportPlayers(effect1, effect2)
for currentPlayer = 1, table.getn(player) do
doTeleportThing(player[currentPlayer], newPlayerPos[currentPlayer])
doSendMagicEffect(playerPos[currentPlayer], effect1) -- send animation after teleport, players teleported won't see it anyways
doSendMagicEffect(newPlayerPos[currentPlayer], effect2)
end
return 1
end
function checkPlayers()
for currentPlayer = 1, table.getn(player) do
local curPlayer = player[currentPlayer]
if(isPlayer(curPlayer) ~= TRUE) then
return false
end
end
return true
end
function questChestPrize(cid, prizeID, count, storagevalue)
-- Made By Ispiro
local doneQuest = getPlayerStorageValue(cid, storagevalue)
if(doneQuest == TRUE) then
doPlayerSendTextMessage(cid, 22, "It is empty.")
return FALSE
end
doPlayerSendTextMessage(cid, 22,"You have found a ".. getItemName(prizeID) ..".")
if(isItemStackable(prizeID) == TRUE) then
while count > 100 do
count = count - 100
doPlayerAddItem(cid, prizeID, 100)
end
else
while count > 1 do
count = count - 1
doPlayerAddItem(cid, prizeID, 1)
end
end
doPlayerAddItem(cid, prizeID, count) -- add left overs, always less than 100.
setPlayerStorageValue(cid, storagevalue, TRUE)
return TRUE
end
ive got the switch unique id set as 5000, and the action id set at 0. why wont it work? :huh:
actions.xml
<action itemid="1740" script="quests/quests.lua"/>
<action fromid="1747" toid="1749" script="quests/quests.lua"/>
<action uniqueid="5000" script="quests/annihilator.lua"/>
<action uniqueid="5001" script="quests/annihilator.lua"/>
<action uniqueid="5002" script="quests/annihilator.lua"/>
<action uniqueid="5003" script="quests/annihilator.lua"/>
<action uniqueid="5004" script="quests/annihilator.lua"/>
annihilator.lua
-- Credits to GrizZm0 for most of the script
-- Credits to Tworn for the cleanArea(), a bit modified by Ispiro
-- Credits to Ispiro for a more easier script to configurate and easier to read.
local starting= {x = 186, y = 649, z = 13} -- edit this to the top left sqm of ur annhilator room
local ending= {x = 192, y = 656, z = 13} -- edit this to the bottom right sqm of ur annhilator room
local playerPos = { -- oldPositions; positions of players before they get teleported.
{x = 247, y = 662, z = 13},
{x = 247, y = 661, z = 13},
{x = 247, y = 660, z = 13},
{x = 247, y = 659, z = 13}
}
local newPlayerPos = { -- Positions for where players should be teleported, make sure it's in the same order as oldPositions
{x = 189, y = 653, z = 13},
{x = 189, y = 652, z = 13},
{x = 189, y = 651, z = 13},
{x = 189, y = 650, z = 13}
}
local creaturePos = { -- Name and position of monsters to summon.
{"Demon", {x = 189, y = 655, z = 13}},
{"Demon", {x = 189, y = 654, z = 13}},
{"Demon", {x = 191, y = 653, z = 13}},
{"Demon", {x = 191, y = 651, z = 13}},
{"Demon", {x = 187, y = 652, z = 13}},
{"Demon", {x = 187, y = 650, z = 13}}
}
if(#playerPos ~= #newPlayerPos) then
error("Annhilator has not been properly configured.")
end
--- Preferably, do not edit anything below this line unless you know exactly what you are doing.
local player = {}
function onUse(cid, item, frompos, item2, topos)
if(item.uid == 5000) then --- change to different item.uid according to ur mapeditor
if(item.itemid == 1945) then
for currentPlayer = 1, table.getn(playerPos) do -- add player id's to table
playerPos[currentPlayer].stackpos = 253
player[currentPlayer] = getThingfromPos(playerPos[currentPlayer]).uid
end
if(checkPlayers()) then
local ret, player = checkLevel(100)
if(ret) then
local ret, player = checkStorage(100)
if(ret) then
summonCreatures(creaturePos)
teleportPlayers(2, 10) -- 2 stands for the effect on old pos, 10 for the effect on new pos.
doTransformItem(item.uid, 1946)
else
doPlayerSendCancel(cid, getPlayerName(player) .. " has already done this quest.")
end
else
doPlayerSendCancel(cid, getPlayerName(player) .. " is too low.")
end
else
doPlayerSendCancel(cid, "You need " .. #playerPos .. " players to do this quest.")
end
elseif(item.itemid == 1946) then -- preferably, to be the id of the lever added by mapeditor.
if(cleanArea()) then
doTransformItem(item.uid, 1945)
else
return FALSE
end
end
--- Chests.
elseif(item.uid == 5001) then -- demon armor
questChestPrize(cid, 2494, 1, 100)
elseif(item.uid == 5002) then -- magic sword
questChestPrize(cid, 2400, 1, 100)
elseif(item.uid == 5003) then -- stonecutter's axe
questChestPrize(cid, 2431, 1, 100)
elseif(item.uid == 5004) then -- thunder hammer
questChestPrize(cid, 2421, 1, 100)
end
return TRUE
end
function checkLevel(minLevel)
for currentPlayer = 1, table.getn(player) do
local playerLevel = getPlayerLevel(player[currentPlayer])
if(playerLevel < minLevel) then
if(getPlayerAccess(player[currentPlayer]) == 0) then
return false, player[currentPlayer]
end
end
end
return true
end
function checkStorage(storageValue)
for currentPlayer = 1, table.getn(player) do
local questStatus = getPlayerStorageValue(player[currentPlayer], storageValue)
if(questStatus == TRUE) then
if(getPlayerAccess(player[currentPlayer]) == 0) then
return false, player[currentPlayer]
end
end
end
return true
end
function cleanArea()
local checking= {x = starting.x, y = starting.y, z = starting.z, stackpos = 253}
local monster = {}
while(checking.y <= ending.y) do
local creature = getThingfromPos(checking)
if(isCreature(creature.uid) == TRUE) then
if(isPlayer(creature.uid) == TRUE) then
return false
else
table.insert(monster, creature.uid)
end
end
if(checking.x == ending.x) then
checking.x = starting.x
checking.y = checking.y + 1
end
checking.x = checking.x + 1
end
for i, c in pairs(monster) do
doRemoveCreature(c)
end
return true
end
function summonCreatures(parameters)
for currentMonster = 1, table.getn(parameters) do
local monster = parameters[currentMonster]
doSummonCreature(monster[1], monster[2])
end
end
function teleportPlayers(effect1, effect2)
for currentPlayer = 1, table.getn(player) do
doTeleportThing(player[currentPlayer], newPlayerPos[currentPlayer])
doSendMagicEffect(playerPos[currentPlayer], effect1) -- send animation after teleport, players teleported won't see it anyways
doSendMagicEffect(newPlayerPos[currentPlayer], effect2)
end
return 1
end
function checkPlayers()
for currentPlayer = 1, table.getn(player) do
local curPlayer = player[currentPlayer]
if(isPlayer(curPlayer) ~= TRUE) then
return false
end
end
return true
end
function questChestPrize(cid, prizeID, count, storagevalue)
-- Made By Ispiro
local doneQuest = getPlayerStorageValue(cid, storagevalue)
if(doneQuest == TRUE) then
doPlayerSendTextMessage(cid, 22, "It is empty.")
return FALSE
end
doPlayerSendTextMessage(cid, 22,"You have found a ".. getItemName(prizeID) ..".")
if(isItemStackable(prizeID) == TRUE) then
while count > 100 do
count = count - 100
doPlayerAddItem(cid, prizeID, 100)
end
else
while count > 1 do
count = count - 1
doPlayerAddItem(cid, prizeID, 1)
end
end
doPlayerAddItem(cid, prizeID, count) -- add left overs, always less than 100.
setPlayerStorageValue(cid, storagevalue, TRUE)
return TRUE
end
ive got the switch unique id set as 5000, and the action id set at 0. why wont it work? :huh: