Olá Galera, vi esse script em outro fórum achei muito bacana e vim trazer pra cá já que vi que aqui no TK não existe...
Se trata de um script que você usando um comando!save, você salva sua posição e depois você usando outro comando você aparece naquela posição salva, caso não estiver com pz.
Mas lembre-se: não da pra salvar uma posição que seja em protect zone ou em uma house!
Você usa !teleport para escolher para onde quer ir (exemplo):
Para salvar sua posição você usa !saveTeleport e o nome do local que irá ficar guardado, desse modo:
Apos salvar o local que você queira, usando o comando irá aparecer assim:
Após escolher o local, e clicar em Teleport, você irá para a posição salva...
Você pode configurar o maximo de pontos que um player pode salvar:
maxPortPoints = 10
Você também tem a opção de deletar alguma posição usando:
!deleteTeleport
Agora vamos ao que interessa :
Execute isto a sua database:
CREATE TABLE IF NOT EXISTS `player_teleport` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`player_id` int(11) NOT NULL,
`slot` int(11) NOT NULL,
`posx` int(11) NOT NULL DEFAULT '0',
`posy` int(11) NOT NULL DEFAULT '0',
`posz` int(11) NOT NULL DEFAULT '0',
`name` varchar(255) NOT NULL COMMENT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
Em login.lua
Abaixo de return true, adicione:
player:registerEvent("Teleport")
Em creaturescripts.xml:
<event type="modalWindow" name="Teleport" script="teleport.lua"/>
Crie um arquivo .lua em creaturescripts com o nome de teleport e coloque dentro:
function onModalWindow(cid, modalWindowId, buttonId, choiceId)
local player = Player(cid)
local playerGuid = player:getGuid()
if modalWindowId == 1 then
if buttonId == 0x00 then -- Select
if not teleport.canTeleportWhileInfight and getCreatureCondition(cid, CONDITION_INFIGHT) == false then
local resultId = db.storeQuery("SELECT `posx`, `posy`, `posz`, `name` FROM `player_teleport` WHERE `player_id` = " .. playerGuid .. " AND slot = ".. choiceId)
if resultId ~= false then
local pos = {x = result.getDataInt(resultId, "posx"), y = result.getDataInt(resultId, "posy"), z = result.getDataInt(resultId, "posz")}
local portName = result.getDataString(resultId, "name")
player:teleportTo(pos, true)
player:sendTextMessage(22, "You have successfully transported yourself to ".. portName ..".")
player:sendMagicEffect(CONST_ME_TELEPORT)
end
result.free(resultId)
else
player:sendCancelMessage("You cannot teleport while beeing infight.")
end
elseif buttonId == 0x01 then -- Cancel
return false
end
elseif modalWindowId == 2 then
if buttonId == 0x00 then -- Delete
local slot = db.storeQuery("SELECT `name` FROM `player_teleport` WHERE `player_id` = " .. playerGuid .." AND slot = ".. choiceId .."")
local portName = result.getDataString(slot, "name")
db.query("DELETE FROM `player_teleport` WHERE `player_id` = " .. playerGuid .. " AND slot = ".. choiceId .."")
player:sendTextMessage(22, "You have successfully removed ".. portName ..".")
result.free(slot)
elseif buttonId == 0x01 then -- Cancel
return false
end
end
return true
end
Em talkactions.xml:
<talkaction words="!teleport" separator=" " script="teleport.lua"/> <!-- Abre a janela das posições-->
<talkaction words="!saveTeleport" separator=" " script="teleport.lua"/> <!-- Salva uma posição -->
<talkaction words="!deleteTeleport" separator=" " script="teleport.lua"/> <!-- Deleta uma posição -->
Crie um arquivo .lua em talkactions com o nome de teleport e coloque dentro:
function onSay(cid, words, param)
local player = Player(cid)
if teleport.premiumOnly and player:getPremiumDays() < 1 and player:getGroup():getId() < 4 then
return player:sendCancelMessage("You need a premium account to use this.")
end
if words == "!saveTeleport" then
if not Tile(player:getPosition()):getHouse() and not getTilePzInfo(player:getPosition()) then
player:savePortPosition(string.lower(param))
else
player:sendCancelMessage("You can't save positions in a house / protection zone")
end
elseif words == "!teleport" then
local modal = ModalWindow(1, "Teleport List", "Choose your destination:")
playerGuid = player:getGuid()
local ret = false
for var = 1, teleport.maxPortPoints do
local slot = db.storeQuery("SELECT `name` FROM `player_teleport` WHERE `player_id` = " .. playerGuid .." AND slot = ".. var .."")
if slot ~= false then
local portName = result.getDataString(slot, "name")
modal:addChoice(var, "".. portName .."")
result.free(slot)
ret = true
end
end
if ret then
modal:addButton(0x00, "Teleport")
modal:setDefaultEnterButton(0x00)
end
modal:addButton(0x01, "Cancel")
modal:setDefaultEscapeButton(0x01)
modal:sendToPlayer(player)
elseif words == "!deleteTeleport" then
local modal = ModalWindow(2, "Teleport List", "Choose which to delete:")
playerGuid = player:getGuid()
local ret = false
for var = 1, teleport.maxPortPoints do
local slot = db.storeQuery("SELECT `name` FROM `player_teleport` WHERE `player_id` = " .. playerGuid .." AND slot = ".. var .."")
if slot ~= false then
local portName = result.getDataString(slot, "name")
modal:addChoice(var, "".. portName .."")
result.free(slot)
ret = true
end
end
if ret then
modal:addButton(0x00, "Delete")
modal:setDefaultEnterButton(0x00)
end
modal:addButton(0x01, "Cancel")
modal:setDefaultEscapeButton(0x01)
modal:sendToPlayer(player)
end
return false
end
Em global.lua
teleport = {
maxPortPoints = 10,
canTeleportWhileInfight = false,
premiumOnly = false
}
function Player.savePortPosition(self, description)
local playerGuid = self:getGuid()
local pos = self:getPosition()
local port = 0
for i = 1, teleport.maxPortPoints do
local slot = db.storeQuery("SELECT `name` FROM `player_teleport` WHERE `player_id` = " .. playerGuid .." AND slot = ".. i .."")
if slot == false then
port = i
ret = true
break
end
result.free(slot)
end
if ret then
db.query("INSERT INTO `player_teleport` (`player_id`, `slot`, `posx`, `posy`, `posz`, `name`) VALUES (".. playerGuid ..", ".. port ..", ".. pos.x ..", ".. pos.y ..", ".. pos.z ..", '".. description .."');")
self:sendTextMessage(22, "You have successfully saved the transportation point. ".. description ..".")
self:sendMagicEffect(CONST_ME_MAGIC_BLUE)
else
self:sendCancelMessage("You cannot have more then ".. teleport.maxPortPoints .." save points.")
end
end
A configuração fica em global.lua como pode ver:
teleport = {
maxPortPoints = 10, -- Maximo de locais.
canTeleportWhileInfight = false, -- Se o player pode se teletransportar com PZ.
premiumOnly = false -- Para premiuns ou não.
}
Bom é só isso pessoal...
Aproveitem e abusem desse sistema, mas lembrando que é apenas para TFS 1.0!
Créditos:
Evil Hero (pelo script todo)
Disturbbed (tradução)