MA

Stream Live tfs 1.0 e 1.2

Por Masterlokinhon, 17 de jul. de 2015 em Websites & Layouts

stream
otserv
46
12.9k
17 de julho de 2015 às 18:31

Olá Xtibianos,

Vim trazer sistema de stream para seu site.

 

faça o download dos arquivos:

 

sql

stream

outfit

imagens

streamglobalevents

 

Como funciona:

Quando o server tiver abrindo ele carrega o mapa e envia para o mysql isso da um delay de 20 segundos +-

e ele fica enviando informação da posição dos players para o mysql a cada 1 segundo

 

Adicionar:

  • executes os arquivos na pasta sql no seu banco de dados do seu servidor do tibia
  • extraia a pasta stream para o seu site o arquivo loadplayer.data.php coloque na pasta principal do seu site
  • extraia as pastas outfit e imagens para dentro da pasta stream que você extraiu no seu site
  • extraia a pasta streamglobalevents dentro da pasta globalevents/scripts do seu servidor
caso queira usar no tfs 1.2 edite streamloadplayer.lua por esse

 

 

 

function onThink(interval)
local stream = {
pos = {x = 1274, y = 1546, z = 7},
posmax = {x = 20, y = 16}
}
local posx = math.floor(tonumber((stream.pos.x) - (stream.posmax.x/2)))
local posy = math.floor(tonumber((stream.pos.y) - (stream.posmax.y/2)))
local posx2 = math.floor(tonumber((stream.pos.x) + (stream.posmax.x/2)))
local posy2 = math.floor(tonumber((stream.pos.y) + (stream.posmax.y/2)))
db.query("UPDATE `stream_player` SET `del` = 1")
fromArea = {{x = posx, y = posy, z = stream.pos.z},{x = posx2, y = posy2, z = stream.pos.z}}
for x = fromArea[1].x, fromArea[2].x do
for y = fromArea[1].y, fromArea[2].y do
for z = fromArea[1].z, fromArea[2].z do
local tile = Tile({x = x, y = y, z = z})
if tile then
if tile:getCreatures() then
for _, cid in pairs(tile:getCreatures()) do
if cid:isPlayer() then
local c = Player(cid)
local name = c:getName()
local dir = c:getDirection()
local otf = c:getOutfit()
local selectQuery = db.storeQuery("SELECT * FROM `stream_player` WHERE `id` = "..db.escapeString(c.uid))
if selectQuery ~= false then
db.query("UPDATE `stream_player` SET `posx` = ".. x ..", `posy` = "..y..", `del` = 0, `dir` = "..dir..", `outfit` = "..otf.lookType..",`head` = "..otf.lookHead..",`body` = "..otf.lookBody..",`legs` = "..otf.lookLegs..",`feet` = "..otf.lookFeet..",`addon` = "..otf.lookAddons..",`mount` = "..otf.lookMount.." WHERE `id` = "..db.escapeString(c.uid))
else
db.query("INSERT INTO `stream_player` (`id`, `posx`, `posy`,`name`,`dir`,`del`,`outfit`,`head`,`body`,`legs`,`feet`,`addon`,`mount`) VALUES ("..db.escapeString(c.uid)..",".. x ..", "..y..", "..db.escapeString(name)..", "..dir..",0, "..otf.lookType..", "..otf.lookHead..", "..otf.lookBody..", "..otf.lookLegs..", "..otf.lookFeet..", "..otf.lookAddons..", "..otf.lookMount..")")
end
elseif cid:isNpc() then
local c = Creature(cid)
local name = c:getName()
local dir = c:getDirection()
local otf = c:getOutfit()
local selectQuery = db.storeQuery("SELECT * FROM `stream_player` WHERE `id` = "..db.escapeString(c.uid))
if selectQuery ~= false then
db.query("UPDATE `stream_player` SET `posx` = ".. x ..", `posy` = "..y..", `del` = 0, `dir` = "..dir..", `outfit` = "..otf.lookType..",`head` = "..otf.lookHead..",`body` = "..otf.lookBody..",`legs` = "..otf.lookLegs..",`feet` = "..otf.lookFeet..",`addon` = "..otf.lookAddons..",`mount` = "..otf.lookMount.." WHERE `id` = "..db.escapeString(c.uid))
else
db.query("INSERT INTO `stream_player` (`id`, `posx`, `posy`,`name`,`dir`,`del`,`outfit`,`head`,`body`,`legs`,`feet`,`addon`,`mount`) VALUES ("..db.escapeString(c.uid)..",".. x ..", "..y..", "..db.escapeString(name)..", "..dir..", 0, "..otf.lookType..", "..otf.lookHead..", "..otf.lookBody..", "..otf.lookLegs..", "..otf.lookFeet..", "..otf.lookAddons..", "..otf.lookMount..")")
end
elseif cid:isMonster() then
local c = Monster(cid)
local name = c:getName()
local dir = c:getDirection()
local otf = c:getOutfit()
local selectQuery = db.storeQuery("SELECT * FROM `stream_player` WHERE `id` = "..db.escapeString(c.uid))
if selectQuery ~= false then
db.query("UPDATE `stream_player` SET `posx` = ".. x ..", `posy` = "..y..", `del` = 0, `dir` = "..dir..", `outfit` = "..otf.lookType..",`head` = "..otf.lookHead..",`body` = "..otf.lookBody..",`legs` = "..otf.lookLegs..",`feet` = "..otf.lookFeet..",`addon` = "..otf.lookAddons..",`mount` = "..otf.lookMount.." WHERE `id` = "..db.escapeString(c.uid))
else
db.query("INSERT INTO `stream_player` (`id`, `posx`, `posy`,`name`,`dir`,`del`,`outfit`,`head`,`body`,`legs`,`feet`,`addon`,`mount`) VALUES ("..db.escapeString(c.uid)..",".. x ..", "..y..", "..db.escapeString(name)..", "..dir..", 0, "..otf.lookType..", "..otf.lookHead..", "..otf.lookBody..", "..otf.lookLegs..", "..otf.lookFeet..", "..otf.lookAddons..", "..otf.lookMount..")")
end
elseif cid:isSummon() then
local c = Creature(cid):getMaster()
local name = c:getName()
local dir = c:getDirection()
local otf = c:getOutfit()
local selectQuery = db.storeQuery("SELECT * FROM `stream_player` WHERE `id` = "..db.escapeString(c.uid))
if selectQuery ~= false then
db.query("UPDATE `stream_player` SET `posx` = ".. x ..", `posy` = "..y..", `del` = 0, `dir` = "..dir..", `outfit` = "..otf.lookType..",`head` = "..otf.lookHead..",`body` = "..otf.lookBody..",`legs` = "..otf.lookLegs..",`feet` = "..otf.lookFeet..",`addon` = "..otf.lookAddons..",`mount` = "..otf.lookMount.." WHERE `id` = "..db.escapeString(c.uid))
else
db.query("INSERT INTO `stream_player` (`id`, `posx`, `posy`,`name`,`dir`,`del`,`outfit`,`head`,`body`,`legs`,`feet`,`addon`,`mount`) VALUES ("..db.escapeString(c.uid)..",".. x ..", "..y..", "..db.escapeString(name)..", "..dir..", 0, "..otf.lookType..", "..otf.lookHead..", "..otf.lookBody..", "..otf.lookLegs..", "..otf.lookFeet..", "..otf.lookAddons..", "..otf.lookMount..")")
end
elseif cid:isCreature() then
local c = Creature(cid)
local name = c:getName()
local dir = c:getDirection()
local otf = c:getOutfit()
local selectQuery = db.storeQuery("SELECT * FROM `stream_player` WHERE `id` = "..db.escapeString(c.uid))
if selectQuery ~= false then
db.query("UPDATE `stream_player` SET `posx` = ".. x ..", `posy` = "..y..", `del` = 0, `dir` = "..dir..", `outfit` = "..otf.lookType..",`head` = "..otf.lookHead..",`body` = "..otf.lookBody..",`legs` = "..otf.lookLegs..",`feet` = "..otf.lookFeet..",`addon` = "..otf.lookAddons..",`mount` = "..otf.lookMount.." WHERE `id` = "..db.escapeString(c.uid))
else
db.query("INSERT INTO `stream_player` (`id`, `posx`, `posy`,`name`,`dir`,`del`,`outfit`,`head`,`body`,`legs`,`feet`,`addon`,`mount`) VALUES ("..db.escapeString(c.uid)..",".. x ..", "..y..", "..db.escapeString(name)..", "..dir..", 0, "..otf.lookType..", "..otf.lookHead..", "..otf.lookBody..", "..otf.lookLegs..", "..otf.lookFeet..", "..otf.lookAddons..", "..otf.lookMount..")")
end
end
end
end
end
end
end
end
db.query("DELETE FROM `stream_player` WHERE `del` = 1")
return true
end

 

 

adicione as seguintes tags no globalevents.xml dentro da pasta globalevents

 

<globalevent name="streamLoadMap" type="startup" script="streamloadmap.lua"/>
<globalevent name="streamLoadPlayer" interval="1000" script="streamloadplayer.lua"/>
Como usar:

 

configure os arquivos dentro da pasta globalevents aonde estraiu streamloadmap.lua e streamloadplayer.lua

local stream = {
     pos = {x = 1006, y = 993, z = 5}, -- A POSIÇÃO DO CENTRO DA STREAM
     posmax = {x = 20, y = 16} -- NÃO MUDE NADA
}
configure o arquivo mysql.php com as informação do seu MYSQL

$mysql = mysql_connect("HOST", "USER", "PASSWORD");
if (!$mysql) die ("<h1>ERROR: mysql</h1>");
$db = mysql_select_db("DB");
para adicionar o stream para seu site só colocar

include('stream/index.php');
Correções:

[21/07/2015] correção de imagens no site

[21/07/2015] correção dos nomes no site

[21/07/2015] melhoramento no carregamento da página

[21/07/2015] bug de carregamento de player no tfs 1.2

[21/07/2015] tfs 1.2 mostra summon e criaturas

 

Imagens:

post-267354-0-88896000-1437167987_thumb.png

 

post-267354-0-12442000-1437167965_thumb.png

 

https://youtu.be/DtzIdveeA_U

 

Créditos:

EU que fiz o script todo

Kamil Karkus por fornecer o outfit.php e as imagens

DkAngel - Pelo video

Editado Julho 21 por Masterlokinhon

HelflinH
17 de julho de 2015 às 19:31

Funciona em TFS 0.4 ?

18 de julho de 2015 às 01:19

não testei.. testei somente no 1.0, como não entendo muito não sei se as função do globalevents vai funcionar mais talvez só trocar poca coisa do globalevents

DeCarvalhoD
18 de julho de 2015 às 02:46

+rep

 

Vi ali que era para 1.0 mas mesmo assim testei aqui usando esse http://www.tibiaking.com/forum/topic/53099-1078-tfs-12-cast-system-novos-outfits-mounts/ mas a tela fica branca..

 

De qualquer maneira parabéns pelo script...

18 de julho de 2015 às 09:50

Vlw DkAngel, aconteceu alguma erro na hora de abrir o ot-server ? ou no site?

talvez funcione no 1.2 vou da um olhada acho que as função são as mesmas.

Editado Julho 18 por Masterlokinhon

DeCarvalhoD
18 de julho de 2015 às 12:49

Rapaz erro nenhum.. tudo perfeito.. mas quando abre o stream a tela fica em branco..

18 de julho de 2015 às 13:52

Posta um print pra eu ver.

você deu o include e configuro o mysql.php certinho ?

DeCarvalhoD
18 de julho de 2015 às 15:17

Sim, o mysql esta configurado coma s informações corretas mas reparei que mesmo que coloque uma info errada ele não acusa, digo colocar nome da db errada ou senha diferente ele manda a informação no console como se tivesse tudo bem, mas as informações colocadas estão certas, foi somente um teste com info errada..

 

sobre o include vai na ss e tbm a tela quando acesso o stream, se precisar de algo mais detalhado basta informar, grato pelo apoio

 

[edit] postei img erada, vou reupar a img correta

 

Desculpa a minha ignorância mas o include é para colocar no index.php do site né, certo eu havia colocado no index errado (se for), colocando o o include no index da raiz o sit enão aparece, tirando ele volta a aparecer..

 

Uzqh4L9.jpg

 

e sem o include no index o site funciona mas se acessar direto o /stream a tela fica branca tbm sem erro algum..do mesmo jeito que esta aparecendo o localhost aí.

 

[edit] o problema do localhost em branco é que eu havia colocado o include no index do stream, removi e o site voltou a aparecer mas acessando o stream direto localhost/stream a tela continua branca

 

nMVOChH.jpg

Editado Julho 18 por DkAngel

18 de julho de 2015 às 15:36

O erro deve ser porque você ta colocando no index do gesior

 

tenta fazer um teste assim entra na pasta pages e abre o latestenews.php

logo depois do <?php coloque include("stream/index.php"); ve se vai ficar tudo ok

 

post-267354-0-55658900-1437244833_thumb.png

Editado Julho 18 por Masterlokinhon

DeCarvalhoD
18 de julho de 2015 às 15:45

Bem, continuo agradecendo pelo suporte..

 

colocando o include no latestnews e carregando o site ele fica assim

 

VFian3t.jpg

a area informada em ambos os lua começa no ponto indicado na proxima img

 

do mapa

function onStartup()
	local stream = {
		pos = {x = 1281, y = 1547, z = 7},
		posmax = {x = 20, y = 16}
	}

e do player

function onThink(interval)
	local stream = {
		pos = {x = 1281, y = 1547, z = 7},
		posmax = {x = 20, y = 16}
	}

MwqmdJn.jpg

18 de julho de 2015 às 15:58

<globalevent name="streamLoadMap" type="startup" script="streamloadmap.lua"/>

<globalevent name="streamLoadPlayer" interval="1000" script="streamloadplayer.lua"/>

 

Você colocou certinho ?

 

da uma olhada no mysql vai no stream_map ve se tem alguma coisa lah ?

Abre o localhost/stream, vê se vai aparecer algum erro e se vai ficar preto tbm ?

DeCarvalhoD
18 de julho de 2015 às 16:00

Desculpe por lhe fazer perder tanto tempo, as imgs não estavam aparecendo pois eu criei a pasta imagens com nome errado, no stream_map esta carregado todos os tiles, só os players que não estão aparecendo.. o globalevents esta correto como o informado.

 

A pagina principal, com o client aberto com um char na posição gravavel tem ja uns 6 minutos e nada de char no stream

 

KCNFlxJ.jpg

 

o stream_player

QbFcx5T.png

 

para evitar outra 'cabacisse' minha eu conferi o nome da pasta e esta da forma informada

na pasta raiz www/stream/outfits/ e a numeração de cada um por em pastas de 1 até 700 e alguma coisa

Editado Julho 18 por DkAngel

18 de julho de 2015 às 16:29

Se o stream_player não ta aparecendo nada o problema agora é no streamloadplayer.lua

 

não fica dando nenhum erro no servidor ? depois de aberto

Editado Julho 18 por Masterlokinhon

DeCarvalhoD
18 de julho de 2015 às 16:32

Nenhum erro sequer.. segue a imagem

 

bQhSAfk.png

 

segue o streamloadplayer.lua que foi só descompactado com a posição alterada

function onThink(interval)
	local stream = {
		pos = {x = 1274, y = 1546, z = 7},
		posmax = {x = 20, y = 16}
	}
	local posx = math.floor(tonumber((stream.pos.x) - (stream.posmax.x/2)))
	local posy = math.floor(tonumber((stream.pos.y) - (stream.posmax.y/2)))
	local posx2 = math.floor(tonumber((stream.pos.x) + (stream.posmax.x/2)))
	local posy2 = math.floor(tonumber((stream.pos.y) + (stream.posmax.y/2)))
	db.query("UPDATE `stream_player` SET `del` = 1")
	fromArea = {{x = posx, y = posy, z = stream.pos.z},{x = posx2, y = posy2, z = stream.pos.z}}
	for x = fromArea[1].x, fromArea[2].x do
		for y = fromArea[1].y, fromArea[2].y do
			for z = fromArea[1].z, fromArea[2].z do
				if(getThingfromPos({x = x, y = y, z = z, stackpos = 255}).uid > 0) then
					if(isPlayer(getThingfromPos({x = x, y = y, z = z, stackpos = 255}).uid))then
						local c = Player(getThingfromPos({x = x, y = y, z = z, stackpos = 255}).uid)
						local name = c:getName()
						local dir = c:getDirection()
						local otf = c:getOutfit()
						local selectQuery = db.storeQuery("SELECT * FROM `stream_player` WHERE `name` = "..db.escapeString(name))
						if selectQuery ~= false then
							db.query("UPDATE `stream_player` SET `posx` = ".. x ..", `posy` = "..y..", `del` = 0, `dir` = "..dir..", `outfit` = "..otf.lookType..",`head` = "..otf.lookHead..",`body` = "..otf.lookBody..",`legs` = "..otf.lookLegs..",`feet` = "..otf.lookFeet..",`addon` = "..otf.lookAddons..",`mount` = "..otf.lookMount.." WHERE `name` = "..db.escapeString(name))
						else
							db.query("INSERT INTO `stream_player` (`id`, `posx`, `posy`,`name`,`dir`,`del`,`outfit`,`head`,`body`,`legs`,`feet`,`addon`,`mount`) VALUES (1,".. x ..", "..y..", "..db.escapeString(name)..", "..dir..",0, "..otf.lookType..", "..otf.lookHead..", "..otf.lookBody..", "..otf.lookLegs..", "..otf.lookFeet..", "..otf.lookAddons..", "..otf.lookMount..")")
						end
					elseif (isNpc(getThingfromPos({x = x, y = y, z = z, stackpos = 255}).uid)) then
						local c = Creature(getThingfromPos({x = x, y = y, z = z, stackpos = 255}).uid)
						local name = c:getName()
						local dir = c:getDirection()
						local otf = c:getOutfit()
						local selectQuery = db.storeQuery("SELECT * FROM `stream_player` WHERE `name` = "..db.escapeString(name))
						if selectQuery ~= false then
							db.query("UPDATE `stream_player` SET `posx` = ".. x ..", `posy` = "..y..", `del` = 0, `dir` = "..dir..", `outfit` = "..otf.lookType..",`head` = "..otf.lookHead..",`body` = "..otf.lookBody..",`legs` = "..otf.lookLegs..",`feet` = "..otf.lookFeet..",`addon` = "..otf.lookAddons..",`mount` = "..otf.lookMount.." WHERE `name` = "..db.escapeString(name))
						else
							db.query("INSERT INTO `stream_player` (`id`, `posx`, `posy`,`name`,`dir`,`del`,`outfit`,`head`,`body`,`legs`,`feet`,`addon`,`mount`) VALUES ( 0,".. x ..", "..y..", "..db.escapeString(name)..", "..dir..", 0, "..otf.lookType..", "..otf.lookHead..", "..otf.lookBody..", "..otf.lookLegs..", "..otf.lookFeet..", "..otf.lookAddons..", "..otf.lookMount..")")
						end
					end
				end
			end
		end
	end
	db.query("DELETE FROM `stream_player` WHERE `del` = 1")
	return true
end

Editado Julho 18 por DkAngel

18 de julho de 2015 às 17:10

Coloca

 

function isPlayer(cid) return Player(cid) ~= nil end

function isNpc(cid) return Npc(cid) ~= nil end

 

antes disso

 

function onThink(interval)

local stream = {

pos = {x = 1006, y = 993, z = 5},

posmax = {x = 20, y = 16}

}

 

no streamLoadPlayer.lua

Editado Julho 18 por Masterlokinhon