Ir para conteúdo
  • Cadastre-se

Posts Recomendados

  • Respostas 57
  • Created
  • Última resposta

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

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 en

Refiz grande parte do script e atualizei para a versão em revscript (TFS 1.3+). Peço a permissão ao dono do tópico para eu criar um novo tópico do sistema que atualizei ou, se preferir, postar aqui.

Sensacional @WooX, em nome de toda comunidade e equipe agradeço imensamente pelo conteúdo exclusivo disponibilizado em primeira mão em nosso fórum! Sensacional. Lenda!

Posted Images

1 hora atrás, WooX disse:

Trade Offline V2.0

VlVKQKC.png&key=d5c17620ae9567a1f898dd7a

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? :blink:

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

Oj5H4Xi.png

 

O sistema foi testado apenas em OTX2, mas provavelmente também funcione em TFS 0.4

 

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

  Mostrar conteúdo oculto

p6aJ7ld.png2OqwCFz.pngNczFggd.png

UGUwM5J.pngcBXOiUS.pngounrm7x.pngIWt7FFZ.png

 

 

Instalação

Oj5H4Xi.png

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 doItemSetDurationgetItemDurationTime na source do servidor, ambos os links se encontram abaixo.

  Mostrar conteúdo oculto

 

 

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

Oj5H4Xi.png

 

  • 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
  • Foram quase 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

Oj5H4Xi.png

@MatheusDuarte pela página do Gesior AAC.

schema.sql 1 kB · 0 downloads tradeoff.lua 26 kB · 1 download tradeoff.php 45 kB · 0 downloads mysql_db.php 1 kB · 0 downloads paginationClass.php 1 kB · 0 downloads

funciona no modern aac?

Link para o post
Compartilhar em outros sites
13 horas atrás, Lurk disse:

teria as paginas p znote? 

13 horas atrás, leozincorsair disse:

funciona no modern aac?

Não.

 

12 horas atrás, Faysal disse:

Não consigo colocar os itens no slot de munições, onde mudo isso

 

Busque por:

local item = getPlayerSlotItem(cid, CONST_SLOT_AMMO)

Altere onde estiver CONST_SLOT_AMMO troque para o slot que preferir conforme estivar na sua lib 000-constant.lua.

Editado por WooX (veja o histórico de edições)

 

 

 

Nós somos aquilo que fazemos repetidamente. Excelência, não é um modo de agir, mas um hábito.

                                                                                                                                                                                                                                        Aristóteles 

Link para o post
Compartilhar em outros sites
55 minutos atrás, esnio12 disse:

Aconteceu esses erros comigo quando tentei instalar

TFS 0.4

 

Parse error: syntax error, unexpected '{' in C:\xampp\htdocs\pages\tradeoff.php on line 331

image.png.576c1bed2b90938f0492d40d9ed16ba9.png

TFS 0.4 não reconhece item.id somente item.itemid, substitua todas as ocorrências no script, exemplo da linha 50,

de:

			if getItemInfo(item.id).charges > 0 then

para:

			if getItemInfo(item.itemid).charges > 0 then

 

 

 

 

Nós somos aquilo que fazemos repetidamente. Excelência, não é um modo de agir, mas um hábito.

                                                                                                                                                                                                                                        Aristóteles 

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

funciona para tfs 1.2 ?

Não.

 

 

 

Nós somos aquilo que fazemos repetidamente. Excelência, não é um modo de agir, mas um hábito.

                                                                                                                                                                                                                                        Aristóteles 

Link para o post
Compartilhar em outros sites
11 horas atrás, WooX disse:

Não.

 

Busque por:


local item = getPlayerSlotItem(cid, CONST_SLOT_AMMO)

Altere onde estiver CONST_SLOT_AMMO troque para o slot que preferir conforme estivar na sua lib 000-constant.lua.

Eu sei alterar o slot que o player usa porém eu vou entrar no mesmo problema do Ammo slot, tem itens que nao podem ser usados em outros slots, seria mais facil eu alterar o slot de ammo e permitir ser colocado todos os itens lá, a questão é, não sei onde alterar isso

 

Link para o post
Compartilhar em outros sites
12 minutos atrás, Faysal disse:

Eu sei alterar o slot que o player usa porém eu vou entrar no mesmo problema do Ammo slot, tem itens que nao podem ser usados em outros slots, seria mais facil eu alterar o slot de ammo e permitir ser colocado todos os itens lá, a questão é, não sei onde alterar isso

 

Qual sua source?

 

 

 

Nós somos aquilo que fazemos repetidamente. Excelência, não é um modo de agir, mas um hábito.

                                                                                                                                                                                                                                        Aristóteles 

Link para o post
Compartilhar em outros sites
4 minutos atrás, Faysal disse:

to usando otx2, peguei do proprio git

 

config.lua

classicEquipmentSlots = true

 

Editado por WooX (veja o histórico de edições)

 

 

 

Nós somos aquilo que fazemos repetidamente. Excelência, não é um modo de agir, mas um hábito.

                                                                                                                                                                                                                                        Aristóteles 

Link para o post
Compartilhar em outros sites
13 horas atrás, esnio12 disse:

Boa noite, como é entregue a grana para o vendedor?, não encontrei essa parte

 

e também está acontecendo este erro (tfs 0.4 860)

O valor é inserido no do banco do vendedor. Altera a função getItemDefaultDuration por essa:

function getItemDefaultDuration(itemID)
	if getItemInfo(itemID).decayTime <= 0 then
		if getItemInfo(itemID).transformUseTo then
			if getItemInfo(itemID).transformUseTo.male > 0 then
				return getItemInfo(getItemInfo(itemID).transformUseTo.male).decayTime
			elseif getItemInfo(itemID).transformUseTo.female > 0 then
				return getItemInfo(getItemInfo(itemID).transformUseTo.female).decayTime
			end
		elseif getItemInfo(itemID).transformEquipTo > 0 then
			return getItemInfo(getItemInfo(itemID).transformEquipTo).decayTime
		end
	else
		return getItemInfo(itemID).decayTime
	end
	return 0
end

 

 

 

 

Nós somos aquilo que fazemos repetidamente. Excelência, não é um modo de agir, mas um hábito.

                                                                                                                                                                                                                                        Aristóteles 

Link para o post
Compartilhar em outros sites

Um bug que aconteceu, quando tento adicionar container que possui mais bps, ele bloqueia de adicionar, porém ele adiciona na db a query e fica exibindo no site a bp a venda, só que sem nada

 

image.thumb.png.edcdbcacd81488b52694cf4d35298e82.png

 

Obs: não da erro no console e nem remove o item nem nada

E fica constando como oferta ativa do vendedor

Editado por esnio12 (veja o histórico de edições)
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 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"/>  

    • Por Denker
      Ao clicar em um baú o player receberá o pokémon, ao ser teleportado para a cidade inicial ele ganhará um kit.
      OBS: Script desenvolvido para Ot's aonde  não há opção de escolha para cidade inicial, sempre será a mesma.
       
      Em Data/Actions/Script, crie um arquivo.lua e coloque:
       
      -- Developed by: Denker local configs = { position = {x = , y = , z = }, -- Localização que o player será teletransportado level = 8, -- Level minimo item = { [1] = {id = , count = }, -- Item que será entregue [2] = {id = , count = }, }, pokemons = { [] = "Charmander", -- Pokémons a se escolher e os ID item que será correspondente a cada poke [] = "Bulbasaur", [] = "Squitler", } } function onUse(cid, item) local first_Pokemon = configs.pokemons[item.itemid] if getPlayerLevel(cid) >= configs.level then for i = 1, #configs.item do doPlayerAddItem(cid, configs.item[1].id, configs.item[1].count) end addPokeToPlayer(cid, first_Pokemon,nil,"normal") doTeleportThing(cid, configs.position) doPlayerSetTown(cid,ID) -- Seta a cidade inicial no player doPlayerSendTextMessage(cid, 27, "Você pegou "..first_Pokemon.." como seu primeiro pokémon, boa sorte em sua jornada") -- Mensagem enviada após pegar escolher o pokémon else doPlayerSendTextMessage(cid, 27, "Você não pode pegar este Pokémon") -- Mensagem caso o player não tenha o requisito end return true end
      Em Data/Action/action.xml, coloque:

       
      <action itemid="ItemID" event="script" value="arquivo.lua"/>  

    • Por Denker
      Basicamente é o uso de um item que troca a outfit do player de acordo com o genêro e acrescenta speed.

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

       
      -- Developed by: Denker local configs = { Speed = Value , -- Speed que será adicionada e removida Outfit = { [ItemID] = {looktype_male = Sprite , -- LOOKTYPE MASCULINO looktype_female = Sprite , -- LOOKTYPE FEMININO }, } } function onUse(cid, item, frompos, itemEx, topos) local change_Outfit = configs.Outfit[item.itemid] if getPlayerStorageValue(cid, 32011) == 1 then doRemoveCondition(cid, CONDITION_OUTFIT) doChangeSpeed(cid, -configs.Speed) setPlayerStorageValue(cid, 32011, 0) return true end if getPlayerSex(cid) == 1 then -- Male doChangeSpeed(cid, configs.Speed) doSetCreatureOutfit(cid,{lookType = change_Outfit.looktype_male},-1) setPlayerStorageValue(cid, 32011, 1) elseif getPlayerSex(cid) == 0 then -- Female doChangeSpeed(cid, configs.Speed) doSetCreatureOutfit(cid,{lookType = change_Outfit.looktype_female},-1) setPlayerStorageValue(cid, 32011, 1) end return true end  
      Em Data/Actions/action.xml, adicione:

       
      <action itemid="ItemID" event="script" value="arquivo.lua"  


×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo