Ir para conteúdo
  • Cadastre-se

Posts Recomendados

@xWhiteWolf Desculpe reviver o topico mais o teleport enão esta levando para o treiner 

20:33 You see a magic forcefield.
You can see the other side through it.
ItemID: [1387], ActionID: [14876].
Position: [X: 265] [Y: 281] [Z: 7].

 

Spoiler

local position = {x = 113, y = 48, z = 7} -- posicao da primeira pos (linha 1 coluna 1)

local config = {
    distX= 9, -- distancia em X entre cada sala (de uma mesma linha)
    distY= 11, -- distancia em Y entre cada sala (de uma mesma coluna)
    rX= 12, -- numero de colunas
    rY= 6 -- numero de linhas
}

local storage = 18481 -- storage que salva a ultima vez que o player entrou (pra evitar spams)

local function fazQualquerCoisa(cid, pos, i, j) -- isso é o coração do nosso script, nao mexa nisso
    j = j or 0
    p = i or 0
    if p >= config.rX then
        p = 0
        j = j < config.rY -1 and j + 1 or false
    end
    if j then
        posi = {x = pos.x + ( p * config.distX), y = pos.y + (j * config.distY), z = pos.z}
        if check_disponivel(posi) then
            doTeleportThing(cid, posi)
            doSendMagicEffect(posi, 10)
            countdown(posi, {{x = posi.x - 1, y = posi.y + 1, z = posi.z}, {x = posi.x + 1 , y = posi.y + 1, z = posi.z}})
        else
            fazQualquerCoisa(cid, pos, p + 1, j)
        end
    else
        doPlayerSendCancel(cid, "Couldn't find any position for you right now.")
    end
end

local function isWalkable(pos, creature, proj, pz)-- by Nord -- só adicione se vc já não tiver ela
    if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
    if getTopCreature(pos).uid > 0 and creature then return false end
    if getTileInfo(pos).protection and pz then return false, true end
    local n = not proj and 3 or 2
    for i = 0, 255 do
        pos.stackpos = i
        local tile = getTileThingByPos(pos)
        if tile.itemid ~= 0 and not isCreature(tile.uid) then
            if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                return false
            end
        end
    end
    return true
end  

local function check_disponivel(npos)
    if isWalkable(npos, true, true) then
        return true
    end
return false
end

local function countdown(pos, Arraypos)
    if not check_disponivel(pos) then
        for lugares = 1, #Arraypos do                
            creature = getTopCreature(Arraypos[lugares]).uid    
            if not isCreature(creature)then                     
                doCreateMonster("Trainer", Arraypos[lugares])
                doSendAnimatedText(Arraypos[lugares], "GO!!", TEXTCOLOR_ORANGE)
                doSendMagicEffect(Arraypos[lugares], 10)
            end
        end
    end
end

function onStepIn(cid, item, pos, lastPos, fromPos, toPos, actor)
    if getPlayerStorageValue(cid, storage) - os.time() <= 0 then
        fazQualquerCoisa(cid, position)
    else
        doTeleportThing(cid, fromPos)
        doPlayerSendCancel(cid, "You gotta wait a few seconds before you can enter trainning room again")
    end
return true
end

 

 

 

 

Spoiler

local npos = {x = 265, y = 274, z = 7} -- posição que ele vai ao sair da sala
local storage = 18481 -- storage que salva a ultima vez que o player entrou (pra evitar spams)

function onStepIn(cid, item, pos, lastPos, fromPos, toPos, actor)
    ArrayPos = {{x = fromPos.x - 1, y = fromPos.y + 1, z = fromPos.z}, {x = fromPos.x + 1 , y = fromPos.y + 1, z = fromPos.z}}
    for _, pos in ipairs(ArrayPos) do
        creature = getTopCreature(pos).uid    
        if isMonster(creature)then
            doSendMagicEffect(getThingPos(creature), 14)
            doRemoveCreature(creature)
        end    
    end
    doTeleportThing(cid, npos)
    doPlayerSetStorageValue(cid, storage, os.time() + 5)
return true
end 

 

Editado por kauan13 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Respostas 65
  • Created
  • Última resposta

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

Olá meus caros do Tibia King, hoje vim trazer pra vocês um sistema que bolei pra um concurso em outro fórum mas acabei ficando descontente e nunca cheguei a disponibilizar. Eu gostaria de agradecer

isso que vc quer é exatamente o que é o sistema. Se você separar bem as salas os players sempre vão achar que estão na mesma sala isolados dos outros. A diferença é que nesse aqui vc ainda precisa faz

1- Não, a menos que vc edite a função isWalkable 2- a distancia é a partir da posição que o player irá ficar até a outra posição que o player irá ficar. Pensa assim: se não houvessem obstáculos, qn

Posted Images

Em 14/08/2016 ás 23:57, MarQuiiM disse:

@xWhiteWolf é obrigatório fazer so daquele tanto ? 

[EX]: 7y e 5x ??

Ou posso fazer o tanto que eu quiser.. ^^

 

vc pode modificar a config no script, tá tudo explicado no tópico..

@kauan13 deu algum erro no console ou ele só não teleporta?

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

@xWhiteWolf

quando eu sobe no teleport pra ir no 1 treiner

Spoiler

[Error - MoveEvents Interface]
data/movements/scripts/trainertp.lua:onStepIn
Description:
data/movements/scripts/trainertp.lua:21: attempt to call global 'check_disponive
l' (a nil value)
stack traceback:
        data/movements/scripts/trainertp.lua:21: in function 'fazQualquerCoisa'
        data/movements/scripts/trainertp.lua:72: in function <data/movements/scr
ipts/trainertp.lua:70>

 

Link para o post
Compartilhar em outros sites
1 hora atrás, kauan13 disse:

@xWhiteWolf

quando eu sobe no teleport pra ir no 1 treiner

  Ocultar conteúdo

[Error - MoveEvents Interface]
data/movements/scripts/trainertp.lua:onStepIn
Description:
data/movements/scripts/trainertp.lua:21: attempt to call global 'check_disponive
l' (a nil value)
stack traceback:
        data/movements/scripts/trainertp.lua:21: in function 'fazQualquerCoisa'
        data/movements/scripts/trainertp.lua:72: in function <data/movements/scr
ipts/trainertp.lua:70>

 

é o mesmo erro que o pessoal comentou, usa o código q eu coloquei nos comentários q vai funcionar..

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

@xWhiteWolf [Error - LuaScriptInterface::loadFile] cannot open data/movements/scripts/foodtr
ainer.lua: No such file or directory
[Warning - Event::loadScript] Cannot load script (data/movements/scripts/foodtra
iner.lua)
cannot open data/movements/scripts/foodtrainer.lua: No such file or directory

Link para o post
Compartilhar em outros sites
3 minutos atrás, kauan13 disse:

@xWhiteWolf [Error - LuaScriptInterface::loadFile] cannot open data/movements/scripts/foodtr
ainer.lua: No such file or directory
[Warning - Event::loadScript] Cannot load script (data/movements/scripts/foodtra
iner.lua)
cannot open data/movements/scripts/foodtrainer.lua: No such file or directory

isso é erro de que vc não criou o script q vc declarou no xml, segue tudo igual ao tópico, só troca o script principal pelo do comentário.

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites
  • 1 month later...

Aqui esta Dando este Erro

[2/10/2016 21:40:30] [Error - MoveEvents Interface] 
[2/10/2016 21:40:30] data/movements/scripts/mining1.lua:onStepIn
[2/10/2016 21:40:30] Description: 
[2/10/2016 21:40:30] data/movements/scripts/mining1.lua:48: attempt to call global 'countdown' (a nil value)
[2/10/2016 21:40:30] stack traceback:
[2/10/2016 21:40:30] 	data/movements/scripts/mining1.lua:48: in function 'fazQualquerCoisa'
[2/10/2016 21:40:30] 	data/movements/scripts/mining1.lua:59: in function <data/movements/scripts/mining1.lua:57>

Poderia me Ajudar?

VENHAM JOGAR O MELHOR BAIAK JÁ CRIADO DE 2022!!

 

CRIE SUA CONTA AGORA MESMO!

 

www.baiakudo.com

Link para o post
Compartilhar em outros sites

o erro q deu é q ele nao tá conseguindo achar "countdown" q é uma função q tá declarada logo no começo do código.. vc tem ctza q copiou tudo certo?

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

@xWhiteWolf me tira uma duvida, quero criar um sistema de torneio, e acho que da pra usar de base essa idea pois o torneio e 1x1, entao queria fazer ele check dele quando tiver 2 na arena nao e puchado mais mgn, mais queria saber como faço para da um storage diferente no msm npc exp 1900 +1 1900+2 e assim por diante para o script puchar 2 player aleatória

Link para o post
Compartilhar em outros sites
8 horas atrás, Golf disse:

@xWhiteWolf me tira uma duvida, quero criar um sistema de torneio, e acho que da pra usar de base essa idea pois o torneio e 1x1, entao queria fazer ele check dele quando tiver 2 na arena nao e puchado mais mgn, mais queria saber como faço para da um storage diferente no msm npc exp 1900 +1 1900+2 e assim por diante para o script puchar 2 player aleatória

não tem nada a ver com esse sistema, a menos que vc esteja falando de checar ql a arena disponível mas ainda assim seria totalmente diferente pruma area grande e pra uma posição de 1 sqm.

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites
  • 2 weeks later...

"Eu gostaria de agradecer inicialmente à três acontecimentos que sem eles não seriam possíveis a criação desse sistema.
- A otlist obrigar que os servidores utilizem anti idle "  :hum:

mesmo com anti idle os players ficarão on se derem exit? 
caso a resposta for sim, isso causa ban no otlist? digo quando os players estão se mexendo "artificialmente"

Scriptszinhos:

 

Não abandone seu tópico, quando você tiver a dúvida resolvida sozinho tente ensinar aos outros como resolve-la (você pode não ser o único com o problema) e quando ela for resolvida por outra pessoa não se esqueça de marcar como melhor resposta e deixar o gostei.

Link para o post
Compartilhar em outros sites
3 horas atrás, pablobion disse:

"Eu gostaria de agradecer inicialmente à três acontecimentos que sem eles não seriam possíveis a criação desse sistema.
- A otlist obrigar que os servidores utilizem anti idle "  :hum:

mesmo com anti idle os players ficarão on se derem exit? 
caso a resposta for sim, isso causa ban no otlist? digo quando os players estão se mexendo "artificialmente"

acredito que sim e não sei sobre os critérios de banimento da otservlist mas eu usei por 3 meses esse sistema num sv e não tomei ban

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites
  • 7 months later...

@xWhiteWolf

Tudo está funcionando e sem nenhum erro no console..

Porém quando o player entra na sala de treinamento o trainer NÃO ataca ele..

O mesmo "trainer" quando sumonado por mim em outro lugar ataca normalmente o player

 

Saberia me dizer como resolver?  '-'

Link para o post
Compartilhar em outros sites

já verificou se aonde o player está tem alguma tag especial como no pvp ou protect zone?

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

@xWhiteWolf já verifiquei sim..  
Vou estar postando tudo certinho como estou usando e com imagens, tudo bem explicado pra facilitar..  Posso estar errando em algo simples, mesmo já tendo revisado várias vezes..
 

movements.xml

    <!-- Sistema de Trainers -->
    <movevent type="StepIn" actionid="14876" event="script" value="trainertp.lua"/>
    <movevent type="StepIn" actionid="14877" event="script" value="trainertp2.lua"/>

 

Em data/movements/scripts/trainertp.lua

2.jpg

local position = {x = 605, y = 7, z = 7} -- posicao da primeira pos (linha 1 coluna 1)

local config = {
	distX= 3, -- distancia em X entre cada sala (de uma mesma linha)
	distY= 6, -- distancia em Y entre cada sala (de uma mesma coluna)
	rX= 60, -- numero de colunas
	rY= 48 -- numero de linhas
}

local storage = 18481 -- storage que salva a ultima vez que o player entrou (pra evitar spams)

local function isWalkable(pos, creature, proj, pz)-- by Nord -- só adicione se vc já não tiver ela
    if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
    if getTopCreature(pos).uid > 0 and creature then return false end
    if getTileInfo(pos).protection and pz then return false, true end
    local n = not proj and 3 or 2
    for i = 0, 255 do
        pos.stackpos = i
        local tile = getTileThingByPos(pos)
        if tile.itemid ~= 0 and not isCreature(tile.uid) then
            if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                return false
            end
        end
    end
    return true
end  

local function check_disponivel(npos)
	if isWalkable(npos, true, true) then
		return true
	end
return false
end

local function countdown(pos, Arraypos)
	if not check_disponivel(pos) then
		for lugares = 1, #Arraypos do				
			creature = getTopCreature(Arraypos[lugares]).uid	
			if not isCreature(creature)then 					
				doCreateMonster("Trainer", Arraypos[lugares])
				doSendAnimatedText(Arraypos[lugares], "GO!!", TEXTCOLOR_ORANGE)
				doSendMagicEffect(Arraypos[lugares], 10)
			end
		end
	end
end

local function fazQualquerCoisa(cid, pos, i, j) -- isso é o coração do nosso script, nao mexa nisso
	j = j or 0
	p = i or 0
	if p >= config.rX then
		p = 0
		j = j < config.rY -1 and j + 1 or false
	end
	if j then
		posi = {x = pos.x + ( p * config.distX), y = pos.y + (j * config.distY), z = pos.z}
		if check_disponivel(posi) then
			doTeleportThing(cid, posi)
			doSendMagicEffect(posi, 10)
			countdown(posi, {{x = posi.x - 1, y = posi.y + 1, z = posi.z}, {x = posi.x + 1 , y = posi.y + 1, z = posi.z}})
		else
			fazQualquerCoisa(cid, pos, p + 1, j)
		end
	else
		doPlayerSendCancel(cid, "Couldn't find any position for you right now.")
	end
end

function onStepIn(cid, item, pos, lastPos, fromPos, toPos, actor)
	if getPlayerStorageValue(cid, storage) - os.time() <= 0 then
		fazQualquerCoisa(cid, position)
	else
		doTeleportThing(cid, fromPos)
		doPlayerSendCancel(cid, "You gotta wait a few seconds before you can enter trainning room again")
	end
return true
end 


Em data/movements/scripts/trainertp2.lua

local npos = {x = 612, y = 642, z = 7} -- posição que ele vai ao sair da sala
local storage = 18481 -- storage que salva a ultima vez que o player entrou (pra evitar spams)

function onStepIn(cid, item, pos, lastPos, fromPos, toPos, actor)
	ArrayPos = {{x = fromPos.x - 1, y = fromPos.y + 1, z = fromPos.z}, {x = fromPos.x + 1 , y = fromPos.y + 1, z = fromPos.z}}
	for _, pos in ipairs(ArrayPos) do
		creature = getTopCreature(pos).uid	
		if isMonster(creature)then
			doSendMagicEffect(getThingPos(creature), 14)
			doRemoveCreature(creature)
		end	
	end
	doTeleportThing(cid, npos)
	doPlayerSetStorageValue(cid, storage, os.time() + 5)
return true
end 

1.jpg

Quando o player está no trainer, ele consegue atacar o trainer, mas o trainer não ataca ele..

A parte de rodar o char e comer food, eu não adicionei pois não pretendo usar por causa do otservlist..

Editado por DiegoRulez (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

ele não ataca pq vc tá usando o tile do depot no trainer, o monstro não ataca quem está nesse tile se não me engano. Faz o teste de tentar trocar o tile ou tentar sumonar o monstro com o gm dentro da cabine do trainer pra ver se ele ataca o player

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

@xWhiteWolf
image.jpg

Testei fazendo uma sala dessa maneira, e não deu resultados..  Puxei o trainer com o GM pra fora da área e também não funciona..
Quando tentei sumonar um trainer por ali sem entrar no TP eu tomei debug nos 2 chares..

Link para o post
Compartilhar em outros sites

qnd vc tomou debug e relogou aonde estava o trainer? vc verificou se tem alguma propriedade no tile onde a criatura nasceu? ta muito estranho isso ://

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

    • Por danielzin021
      alguém sabe como implementa isso no serv e se tem como?
    • Por Maniaco
      Salve TibiaKing!!! TFS 0.4 . 8.60
       
      Estou implementando o Sistema do @WooX de Cave Exlusiva

      Link:
       
      Porem estou com um problema seguindo o tutorial completo dele acabo tendo um retorno de erro na Distro! E ja que o mesmo nao entra no forum deis de 14/01! Venho solicitar ajuda de vocês!
      Caso alguem tenha o Discord Dele Favor me Passe  
      Vamos lá!
      Erro:
       
      Script :
       
      Lib
       
       
      Print Rme:
       
       
      Lembrando que nao esta funcionando em geral, Acrédito que eu tenha pulado algo ou deixado passar despercebido!
      Espero que alguem consiga me ajudar vlw!
    • Por sannn
      --[[ /////////////////////////////////////////////////////////////////////////////////////////////////////// Discord: San#7791 -- Loja System 2.0 -- TFS 0.3.6 -- para adicionar qualquer item na loja: basta adicionar na tabelinha, seguindo o exemplo do vip! valor = quantidade de DIAMOND a ser cobrada; itemID = item a ser recebido; quantidade = quantidade de itens a ser recebidos; msg = mensagem que o player vai receber após comprar! Feito por San Discord: San#7791 exemplo de como comprar: !loja vip podendo ser adicionado a modules também. tag talkactions.xml // <talkaction words="!loja" case-sensitive="no" event="script" value="Loja System 2.0.lua"/> ////////////////////////////////////////////////////////////////////////////////////////////////////// depois de tantos sistemas com mil elseifs, vim trazer esta contribuição simples, para facilitar a vida de muitos adms! Contribuição pra comunidade =D ]]-- LOJA_CANCEL = "Você não possui diamantes o suficiente." LOJA_INVALID = "Não temos este item a venda na loja!" INVALID = "Comando incorreto" DIAMOND = 2145 -- item que será cobrado; tabelinha = { ["vip"] = {valor = 5, itemID = 2160, quantidade = 1, msg = "Obrigado por comprar um VIP em nossa loja!"}, -- coloque sempre minusculo o nome ! ["vip"]... etc } function onSay(cid, words, param, channel) local msg = string.lower(param) -- Não mexa! if msg == "" then doPlayerSendTextMessage(cid, 22, INVALID) return true end -- verificação if tabelinha[msg] == nil then doPlayerSendTextMessage(cid, 22, INVALID) return true end -- verificação if tabelinha[msg].valor then if getPlayerItemCount(cid, DIAMOND) >= tabelinha[msg].valor then doPlayerRemoveItem(cid, DIAMOND, tabelinha[msg].valor) doPlayerAddItem(cid, tabelinha[msg].itemID, tabelinha[msg].quantidade) doPlayerSendTextMessage(cid, 20, tabelinha[msg].msg) else doPlayerSendTextMessage(cid, 22, LOJA_CANCEL) return true end else doPlayerSendTextMessage(cid, 22, LOJA_INVALID) end return true end  
    • Por WooX
      Trade Offline V2.0

      Esse sistema me foi pedido a alguns meses atrás e hoje tirei um tempinho pra trazer aqui.
      O sistema consiste em permitir que jogadores negociem sem contato direto entre comprador e vendedor.
      Mas como assim?
      O vendedor pode criar um anuncio de venda informando item, valores ou até mesmo items que ele queira em troca, após feito o anuncio todas essas informações ficam armazenadas no banco de dados do servidor, permitindo assim serem exibidas em uma página no site para interessados, junto de todas informações fornecidas pelo vendedor é exibido um comando para que os interessados possam adquirir a oferta exibida na página.
       
      Sobre o sistema

       
      O sistema foi testado apenas em OTX2, mas provavelmente também funcione em TFS 0.4
       
      Versão para TFS 1.x adaptada pelo @luanluciano93
       
      Como mencionado acima, o sistema funciona de forma semelhante ao Market System das versões atuais porem sem exibição gráfica das ofertas in-game, para isso o sistema vai acompanhado de uma página para o Gesior AAC. Este sistema existe no fórum há um bom tempo e já é familiar pra muitos jogadores, essa versão trás consigo algumas melhorias e diferenças que irei listar abaixo.
       
      Sistema
      Agora é possivel vender um item exigindo outro item em troca ao invés de dinheiro. Containers com um conjunto de items dentro agora podem ser anunciados. Agora o sistema verifica as cargas e durações dos items antes de criar uma oferta. Novo parâmetro adicionado para verificar informações de ofertas in-game. Agora todo valor recebido vai diretamente para o banco do vendedor. Página
      A depender da quantidade de ofertas existentes no servidor, a página agora irá separa-las por páginas. Agora além do valor é exibido também imagem da moeda a depender do valor da oferta. Agora é possivel ver as características tanto dos items ofertados como dos items exigidos pelo vendedor. Adicionado filtros para exibir somente ofertas de items vip, containers ou trocas. Adicionado barras de pesquisas para filtrar as ofertas por items ou nome do jogador.  
      Algumas imagens
       
      Instalação

      Antes de mais nada é necessário citar os requisitos necessários para o funcionamento correto do sistema, ele utiliza de algumas funções que não estão no script principal e portanto é necessário a instalação de uma lib extra, também é necessário instalar as funções doItemSetDuration e getItemDurationTime na source do servidor, ambos os links se encontram abaixo.
       
      Todos os arquivos necessários para a instalação estão anexados no tópico, irei apenas dizer onde instalar e como deve ser configurado.
       
      Primeiramente importe o arquivo schema.sql no banco de dados, ou se preferir pode executar as queries a seguir.
      CREATE TABLE IF NOT EXISTS `trade_off_offers` ( `id` int(11) NOT NULL auto_increment, `player_id` int(11) NOT NULL, `type` int(1) NOT NULL DEFAULT '0', `item_id` int(11), `item_count` int(11) NOT NULL DEFAULT '1', `item_charges` int(11) NULL, `item_duration` int(11) NULL, `item_name` varchar(255), `item_trade` tinyint(1) NOT NULL DEFAULT '0', `cost` bigint(20) UNSIGNED NOT NULL, `cost_count` int(11) NOT NULL DEFAULT '1', `date` bigint(20), PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1; CREATE TABLE IF NOT EXISTS `trade_off_container_items` ( `offer_id` int(11) NOT NULL, `item_id` int(11), `item_charges` int(11) NULL, `item_duration` int(11) NULL, `count` int(11) DEFAULT '1' ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1; ALTER TABLE `trade_off_container_items` ADD KEY `offer_id` (`offer_id`); ALTER TABLE `trade_off_container_items` ADD CONSTRAINT `offer_id_fk` FOREIGN KEY (`offer_id`) REFERENCES `trade_off_offers`(`id`) ON DELETE CASCADE;  
      Configuração no arquivo tradeoff.lua: 
      -- Trade Offline 2.0 by WooX -- local config = { priceLimit = 2000000000, -- 2kkk offerLimit = 3, offerLimitStor = 86420, infoOnPopUp = true, infoMsgType = MESSAGE_STATUS_CONSOLE_BLUE, errorMsgType = MESSAGE_STATUS_CONSOLE_RED, successMsgType = MESSAGE_INFO_DESCR, helpMsg = "Enter the parameters (add, remove, active, buy, info).", goldItems = {2148, 2152, 2160}, itemsVIP = {4540, 4545, 4560}, } priceLimit: define o valor máximo de uma oferta. offerLimit: define o valor máximo de ofertas que um jogador pode adicionar. offerLimitStor: storage que irá armazenar quantas ofertas ativas o jogador possui. infoOnPopUp: pode ser definido como true ou false, se definido como falso irá enviar os detalhes da oferta no default ao invés de como é mostrado nas imagens acima. infoMsgType: define como será exibido uma mensagem de informação ao jogador (não recomendo mexer a menos que saiba o que está fazendo). errorMsgType: define como será exibido uma mensagem de erro ao jogador (não recomendo mexer a menos que saiba o que está fazendo). successMsgType: define como será exibido uma mensagem de ação sucedida ao jogador (não recomendo mexer a menos que saiba o que está fazendo). helpMsg: mensagem que será enviada para o jogador caso ele erre os parâmetros do comando. goldItems: nesta tabela deve ser preenchido todos os IDs de moedas no servidor como gold coins, platinum coins, etc. itemsVIP: nesta tabela deve ser preenchido os IDs dos items vips existentes no servidor.  
      Agora para a instalação da página, no arquivo mysql_db.php deve ser preenchido os dados para conexão no banco de dados do servidor.
      /** * Host do banco de dados * @var string */ private static $DB_HOST = 'localhost'; /** * Usuario de conexao ao banco de dados * @var string */ private static $DB_USER = 'root'; /** * Senha de conexao ao banco de dados * @var string */ private static $DB_PASS = 'SUA_SENHA'; /** * Nome do banco de dados * @var string */ private static $DB_NAME = 'NOME_BANCO'; Após feito isso, o arquivo paginationClass.php em conjunto do arquivo mysql_db.php devem ser adicionados no seguinte diretório do Gesior AAC.
      classes/
      Finalizado isto, basta jogar o arquivo tradeoff.php dentro do diretório informado abaixo e o sistema estará pronto para uso.
      pages/
       
      Avisos

       
      Eu escrevi somente o sistema, não sou o autor da página para o Gesior AAC portanto não estarei dando suporte em relação a página que não seja sobre a instalação da mesma no Gesior AAC 2012, e embora esteja funcional, eu não recomendo o uso da página devido a falta do uso de cache para leitura do items.xml. Foram mais de 600 linhas de código sem contar funções extras e alterações na source, além de muitas horas de testes para garantir que tudo estava funcionando corretamente, tudo que peço em troca é que não removam os créditos no arquivo quando forem usar.  
      Créditos

      @MatheusDuarte pela página do Gesior AAC.
      schema.sql tradeoff.lua tradeoff.php mysql_db.php paginationClass.php
    • Por Denker
      O Player será teletransportado para o TC, após sair do TradeCenter o player retornará á cidade de origem, ex:

      Saffon > TC , o player retornará a saffron.

      ---------------------------------------------------------------------------------------------------------------------

      Em Data/Movements/Scripts, crie um arquivo.lua e coloque dentro:

       
      -- Developed by: Denker local configs = { tps = { -- Teleport para o TC através de um TP (Item) especifico no chão [ItemID] = {pos = {x = 0, y = 0, z = 0}, storage = 50000}, -- Pallet [ItemID] = {pos = {x = 0, y = 0, z = 0}, storage = 50001}, -- Viridian [ItemID] = {pos = {x = 0, y = 0, z = 0}, storage = 50002}, -- Pewter [ItemID] = {pos = {x = 0, y = 0, z = 0}, storage = 50003}, -- Cerulean [ItemID] = {pos = {x = 0, y = 0, z = 0}, storage = 50004}, -- Saffron [ItemID] = {pos = {x = 0, y = 0, z = 0}, storage = 50005}, -- Celadon [ItemID] = {pos = {x = 0, y = 0, z = 0}, storage = 50006}, -- Vermilion [ItemID] = {pos = {x = 0, y = 0, z = 0}, storage = 50007}, -- Fuchsia [ItemID] = {pos = {x = 0, y = 0, z = 0}, storage = 50008}, -- Cinnabar }, -- LOCALIZAÇÕES localizacaoPallet = {x= 0, y= 0, z= 0}, localizacaoViridian = {x= 0, y= 0, z= 0}, localizacaoPewter = {x= 0, y= 0, z= 0}, localizacaoCerulean = {x= 0, y= 0, z= 0}, localizacaoSaffron = {x= 0, y= 0, z= 0}, localizacaoCeladon = {x= 0, y= 0, z= 0}, localizacaoVermilion = {x= 0, y= 0, z= 0}, localizacaoFuchsia = {x= 0, y= 0, z= 0}, localizacaoCinnabar = {x= 0, y= 0, z= 0} } function onStepIn(cid, item, position, fromPosition) local tp = configs.tps[item.itemid] if tp then doTeleportThing(cid, tp.pos) setPlayerStorageValue(cid, tp.storage, 1) return true end -- Verificação que irá teletransportar o player de acordo com a city que ele estava antes if (item.itemid == ItemID ) and getPlayerStorageValue(cid, 50000) == 1 then doTeleportThing(cid, configs.localizacaoPallet) setPlayerStorageValue(cid, 50000, 0) doPlayerSendTextMessage(cid, COLOR_MESSAGE_GREEN, "Você foi Teletransportado para Pallet") return true end if (item.itemid == ItemID ) and getPlayerStorageValue(cid, 50001) == 1 then doTeleportThing(cid, configs.localizacaoViridian) setPlayerStorageValue(cid, 50001, 0) doPlayerSendTextMessage(cid, COLOR_MESSAGE_GREEN, "Você foi Teletransportado para Viridian") return true end if (item.itemid == ItemID ) and getPlayerStorageValue(cid, 50002) == 1 then doTeleportThing(cid, configs.localizacaoPewter) setPlayerStorageValue(cid, 50002, 0) doPlayerSendTextMessage(cid, COLOR_MESSAGE_GREEN, "Você foi Teletransportado para Pewter") return true end if (item.itemid == ItemID ) and getPlayerStorageValue(cid, 50003) == 1 then doTeleportThing(cid, configs.localizacaoCerulean) setPlayerStorageValue(cid, 50003, 0) doPlayerSendTextMessage(cid, COLOR_MESSAGE_GREEN, "Você foi Teletransportado para Cerulean") return true end if (item.itemid == ItemID ) and getPlayerStorageValue(cid, 50004) == 1 then doTeleportThing(cid, configs.localizacaoSaffron) setPlayerStorageValue(cid, 50004, 0) doPlayerSendTextMessage(cid, COLOR_MESSAGE_GREEN, "Você foi Teletransportado para Saffron") return true end if (item.itemid == ItemID ) and getPlayerStorageValue(cid, 50005) == 1 then doTeleportThing(cid, configs.localizacaoCeladon) setPlayerStorageValue(cid, 50005, 0) doPlayerSendTextMessage(cid, COLOR_MESSAGE_GREEN, "Você foi Teletransportado para Celadon") return true end if (item.itemid == ItemID ) and getPlayerStorageValue(cid, 50006) == 1 then doTeleportThing(cid, configs.localizacaoVermilion) setPlayerStorageValue(cid, 50006, 0) doPlayerSendTextMessage(cid, COLOR_MESSAGE_GREEN, "Você foi Teletransportado para Vermilion") return true end if (item.itemid == ItemID ) and getPlayerStorageValue(cid, 50007) == 1 then doTeleportThing(cid, configs.localizacaoFuchsia) setPlayerStorageValue(cid, 50007, 0) doPlayerSendTextMessage(cid, COLOR_MESSAGE_GREEN, "Você foi Teletransportado para Fuchsia") return true end if (item.itemid == ItemID ) and getPlayerStorageValue(cid, 50008) == 1 then doTeleportThing(cid, configs.localizacaoCinnabar) setPlayerStorageValue(cid, 50008, 0) doPlayerSendTextMessage(cid, COLOR_MESSAGE_GREEN, "Você foi Teletransportado para Cinnabar") return true end end OBS: O item ID da verificação de volta, será igual para todas as verificações.

      Em Data/Movements/Movements.xml, coloque dentro:

       
      <movevent type="StepIn" itemid="ID" event="script" value="arquivo.lua"/>  




×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo