Master Teleporter

Nostradamus
em Actions e Talkactions

Nostradamus

Serviços Prestados ao XTibia.com
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 10/06/06Posts: 338Char no Tibia: Setyte Berseker

Introdução

 

Esse é um sistema que consiste na administração pelo usuário (gamemaster, gods e etc) de locais, ou seja, a fácil ida de um local a outra que pode ser (ou não) distante e com isso, facilitar a vida de todo mundo.

 

Instruções

 

O script se trata de uma talkaction, e a sintaxe dela é o seguinte:

 

  • !set "Nome do local
  • !unset "Nome do local
  • !teleport "Nome do local

Além disso, é requerido que se crie uma tabela no banco de dados para guardar-se os nomes de cada local.

 

Tabela: Teleports

Campos: pos, name

 

Observações

 

O script utiliza-se da biblioteca LuaSQL, presente no servidor The Forgotten Server. Portanto, só funcionará em tal versão (a não ser que você tenha uma versão com tal biblioteca).

 

O script não foi testado, mas tenho 90% de certeza de que irá funcionar.

Estou liberando talk código, pois desenvolvi o mesmo usando apenas tabelas para mim mesmo, e que seria interessante para fins didáticos à se compreender o uso de LuaSQL.

 

 

Código

 

talkactions.xml

 

<talkaction words="!set" script="teleporter.lua" />
<talkaction words="!unset" script="teleporter.lua" />
<talkaction words="!teleport" script="teleporter.lua" />

teleporter.lua

 

local ITEM_TELEPORT = 1387

dofile('./config.lua')
env = assert(luasql.mysql())
connect = assert(env:connect(mysqlDatabase, mysqlUser, mysqlPass, mysqlHost, mysqlPort))

Waypoint =
{

-- pos here should be a table (e.g: {x = 10, y = 10, z = 10}
set = function (pos, name)
	if (string.find(name, '^[a-zA-Z0-9 -_]+$')) then
		debugPrint('[Waypoint System] Wrong characteres to the name of waypoint.')
		return FALSE
	end
	local cursor = assert(connect:execute("SELECT * FROM `teleports` WHERE `pos` = " .. pos .. ";"))
	if (cursor:numrows() > 0) then
		local query = assert(connect:execute("UPDATE `teleports` SET `pos` = " .. pos .. " WHERE `name` = " .. name .. ");"))
		return TRUE
	else
		local query = assert(connect:execute("INSERT INTO `teleports` (`pos`, `name`) VALUES (" .. pos .. ", " .. name .. ");"))
		return TRUE
	end
end,

unset = function (pos)
	local cursor = assert(connect:execute("SELECT * FROM `teleports` WHERE `pos` = " .. pos .. ";"))
	if (cursor:numrows() > 0) then
		local query = assert(connect:execute("DELETE FROM `teleports` WHERE `pos ` = " .. pos ";"))
		return TRUE
	else
		return FALSE
	end
end,

get = function (name)
	local cursor = assert(connect:execute("SELECT * FROM `teleports` WHERE `name` = " .. name .. ";"))
	local arr = {}

	if (cursor:numrows() > 0) then
		cursor:fetch(arr)
		position = arr[1]
		return position
	else
		return FALSE
	end
end
}

onSay = function (cid, words, param)
local playerPos, playerDir = getCreaturePosition(cid), getPlayerLookDir(cid)

if (string.find(param, '^[a-zA-Z0-9 -_]+$')) then
	if (words == "!set") then
		Waypoint.set(playerPos, param)
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "New waypoint: " .. param .. " ( " .. playerPos .. ").")
	elseif (words == "!unset") then
		Waypoint.unset(playerPos)
	else
		local posTo = Waypoint.get(param)
		local pos

		if (playerDir == NORTH) then 
			pos = {x = playerPos.x , y = playerPos.y + 1, z = playerPos.z, stackpos = 253}
		elseif (playerDir == SOUTH) then
			pos = {x = playerPos.x, y = playerPos.y - 1, z = playerPos.z, stackpos = 253}
		elseif (playerDir == EAST) then
			pos = {x = playerPos.x + 1, y = playerPos.y, z = playerPos.z, stackpos = 253}
		elseif (playerDir == WEST) then
			pos = {x = playerPos.x - 1, y = playerPos.y, z = playerPos.z, stackpos = 253}
		else
			debugPrint('[Waypoint System] Wrong direction spoted.')
		end

		local doCreateTeleport(ITEM_TELEPORT, pos, posTo)
		--doTeleportThing(cid, position)
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Teleported to waypoint " .. param .. " ( " .. posTo .. ").")
	end
end
end

Créditos

Os créditos são totalmente meus, Nostradamus.

[twitter]ThomazYuji[/twitter]

sadsoul

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 04/10/05Posts: 33

Legal Nostradamus..

 

Bom ver que ta fazendo coisas novas para o xtibia ^^...

 

gostei dessa ideia, pena que naum uso The Forgotten Server =/

 

Mais ta valendo..

 

 

//SadSoul


signsad3eg.jpg

~°[ BarS ]°~
barsad7aj.jpg
~°[ Gosta do que eu faço, de mim, ou de alguma coisa que te fiz ^^, Use essa bar]°~

Presentes de:

[badBoyRm] [MttS]°~

Zorzin

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 01/02/06Posts: 74

Uia

Muito Legal Nostradamus!

Parabens pelo script! ;D

Continue assim...

 

Atenciosamente,

Zorzin




BlackOnix C++ Programmer
------------------------------------------------------------------------

É meu fan ou gosta dos meus trabalhos ou é meu amigo? Usa minha bar: =)



[7.92] Zorzin OTServer Version 1.1

Powerzin

oi
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 16/11/07Posts: 648Gênero: Masculino

Bela Action.

 

Abraços.

pao i bosta

Ththt

?
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 26/07/07Posts: 540Char no Tibia: Keni Daro

parece ser legal vou testar depois edito

Olá XTibiano:

Sua assinatura estava com um problema na TAG SPOILER e foi movida para a parte "Sobre mim".
Agradecemos a sua compreensão.

Atenciosamente,
JV Chequer

h3online

.......0.o.......
avatar
Artesão
Artesão

INFOS

Grupo: ArtesãoRegistrado: 21/02/07Posts: 137Char no Tibia: GOD Grimrath

pooooooo kara q fod@@@@@@@@@@@@@ fico muito show tava loco vo colocar isso pra algumas quests pq tem player q procura teleport de quests ai é soh digitar o comando.



[X]Camponês
[X]Caçador
[X]Cavaleiro
[X]Baronete
[X]Barão


Tibi4ee e Colex melhores escripters
Mapper e RPG Maker

Skulls

Coordenador de Eventos
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 26/02/07Posts: 859Gênero: Masculino

Nem comento.

Simplesmente Perfeito.

 

Nostradamus e seus scripts haha

 

Não é para menos também né.

 

Não é atoa que ele é:

Programador PHP/C/C++/JAVA/LUA

Scripter oficial da OpenTibia Team, criadora do OpenTibia.

 

 

uhasuhsahusa

 

Parabens ai nostra.

 

Fui

 

ps:

Pena que é só para sql's version =/