Tudo que marcot postou
-
Como criar um cliente 100% próprio?
Bom, eu não diria isso como você colocou, de ser um cliente 100% próprio. Primeiramente acho relevante dizer que criar um cliente 100% próprio seria basicamente repetir o projeto do edubart, disponível no Github. Considerando que recriar a roda é uma perda de tempo, caso realmente queira editar o cliente com user interface (UI) e funcionalidades próprias, é recomendado que você siga esse caminho aprendendo a programar em C++ e LUA. Sei que é frescura, mas editar as imagens que aparecem no jogo está longe de "criar um cliente 100% próprio". Agora, até onde eu parei no tempo (época do 8.6), caso você quisesse editar apenas as imagens da UI do jogo (imagem de fundo do client, sprites dos botões etc.), você procurava por um programa que pudesse extrair as imagens do arquivo tibia.pic, editar essas imagens e recriar o arquivo .pic. Não sei se utilizar o OTClient para o próprio servidor se tornou mais fácil/comum do que fazer isso, então deixarei para outra pessoa mais atualizada dizer isso melhor, pq tentei dar uma olhada se achava algum programa para fazer essa extração aqui na sessão de Utilitários e não achei nas primeiras páginas.
-
Erro ao compilar source
@guga3211, Esse erro indica que o compilador não conseguiu encontrar os arquivos dessa biblioteca. O DevC++ que você instalou foi o que estava com o link nos tutoriais (tipo esse)? Pelo que o autor do tópico disse, ele já vem com as bibliotecas instaladas.
-
(Resolvido)2 Erros Aparecem Depois De Instalar Script
Mas deu o mesmo erro sem aparecer nada?? O print é pra mostrar o que que é esse valor que ta dando erro pra ver se da pra converter ou nao
-
(Resolvido)2 Erros Aparecem Depois De Instalar Script
@Phineasz, Poderia colocar na linha 6 do arquivo rewardchest_pontos.lua e mostrar o que aparece? print(value.storage) E não estou muito atualizado com esses OTX, mas os scripts são compatíveis com?
-
Seria possivel em C#?
É possível fazer tudo em C++, mas é um tanto inviável. Você quer adicionar um NPC? Vai ter que criar uma classe nova específica para aquele NPC, talvez trabalhar com heranças e etc (E recompilar o servidor!). Mexer com LUA é muito melhor, você não precisa recompilar nada e precisa de um entendimento quase(se não) nulo de como funciona a source para fazer qualquer script.
-
Catch System por Skill {HELP}
Estranho, vc ta usando a storage com o nome do pokemon em algum outro sistema?
-
Catch System por Skill {HELP}
A variável pokeName faltou ser adaptada acredito eu, tenta substituir catchSystemLeveling(cid,pokeName) por catchSystemLeveling(cid, poke) E muda a função que te passei pra essa aqui, só pra debugar: function catchSystemLeveling (cid, pokeName) if getPlayerStorageValue (cid, pokeName) == 0 then print ("Jogador capturou pela primeira vez o pokemon") setPlayerStorageValue(cid, pokeName, 1) doPlayerAddSkillTry(cid, 2, catchingXP[pokeName]) else print ("Jogador capturou novamente mas nao ganhou XP.") end end As mensagens do que estiver acontecendo aparecerão no console do seu servidor
-
Eu preciso deste script por favor me ajude e por que trabalho
O ideal seria você especificar o script que deseja, para que outros usuários possam te ajudar.
-
(Resolvido)Erro Script
@mikaelkelvin Tenta esse: local vocs = { [5] = {{2323,1},{8871,1},{2647,1},{2643,1},{2525,1},{2191,1},{2268,1},{7620,1},{2293,1},{2120,1},{5710,1},{2789,15},{2305,1},{2261,1},{2274,1},{2273,1}}, [6] = {{2323,1},{8871,1},{2647,1},{2643,1},{2525,1},{2186,1},{2268,1},{2269,1},{2293,1},{7620,1},{2120,1},{5710,1},{2789,15},{2305,1},{2261,1},{2274,1},{2273,1}}, [7] = {{2457,1},{8872,1},{2647,1},{2643,1},{2525,1},{7368,1},{2268,1},{8472,1},{7620,1},{2293,1},{2120,1},{5710,1},{2789,15},{2305,1},{2261,1},{2274,1},{2273,1}}, [8] = {{2457,1},{2463,1},{2647,1},{2643,1},{2525,1},{2400,1},{7620,1},{7618,1},{2293,1},{2120,1},{5710,1},{2789,15},{2305,1},{2261,1},{2274,1},{2273,1}} } local storage = 548747 function onUse(cid, item, frompos, item2, topos) local var = vocs[getPlayerVocation(cid)] if not var then return true end if getPlayerStorageValue(cid, storage) > 0 then doPlayerSendTextMessage(cid,22,"It is empty.") return true end local backpack = doPlayerAddItem(cid, 1988, 1) -- backpackID for _, i_i in ipairs(var) do local item, amount = i_i[1],i_i[2] if isItemStackable(item) or amount == 1 then doAddContainerItem(backpack, item, amount) else for i = 1, amount do doAddContainerItem(backpack, item, 1) end end end setPlayerStorageValue(cid, storage, 1) doPlayerSendTextMessage(cid,22,"You have found a set from your vocation.") return true end A princípio o server seu só apontou erro de sintaxe, que abriu { e esqueceu de fechar
-
Catch System por Skill {HELP}
@Arthasz Walker nessa base tem alguma função que checa se você já tem o catch do pokémon? [EDIT] Tenta desse jeito: No começo do arquivo do script de catch você coloca isso: catchingXP = { ["Charmander"] = 10, ["Charmeleon"] = 20, ["Charizard"] = 30, } E na parte que ele pediu pra colocar o doPlayerAddSkillTry você substitui por essa chamada de função: catchSystemLeveling (cid, pokeName) Obs: no lugar de pokeName você deverá colocar o nome do Pokémon que foi capturado de forma genérica, isso vai variar conforme seu script. Caso queira que eu ajude nisso me manda uma PM pra eu tentar te ajudar pelo Discord. E em alguma parte do script (fora de funções) adicione esta função: function catchSystemLeveling (cid, pokeName) if getPlayerStorageValue (cid, pokeName) == 0 then setPlayerStorageValue(cid, pokeName, 1) doPlayerAddSkillTry(cid, 2, catchingXP[pokeName]) end end Acho que isso bastaria, o problema é que as XPs seriam configuradas manualmente, ou seja, com o array catchingXP que está ali encima só funciona pra Charmander, Charmeleon e Charizard
-
(Resolvido)pedido script held fusion
@Arthasz Walker, Desculpa, fiz um erro besta, nem lembrei que prices era um array kkk. Acho que dessa vez vai, desculpa mesmo não estar podendo testar no momento estou sem meu desktop com os arquivos de otserver Tenta essa versão: -- Configuracoes necessarias para o script local config = { quest = { -- Precisa fazer quest? (Nao mexa caso negativo) necessaria = false, -- Eh necessario fazer uma quest para liberar o sistema? storageID = 10001, -- Qual o storageID dessa quest? (caso true, anteriormente) }, chestPos = {x = 92, y = 114, z = 7, stackpos = 1}, -- Posicao do Bau (certifique-se que nao tenha nada encima dele) -- Tenha atencao para que a soma das chances dos helds em cada tier seja igual a 100 prices = { ["tier_1"] = 60000, ["tier_2"] = 150000, ["tier_3"] = 300000, ["tier_4"] = 700000, ["tier_5"] = 1000000, ["tier_6"] = 1500000, }, helds = { -- Item IDs e chance de vir o held [1] = { -- Array Tier 1 {ID = 2159, chance = 10}, {ID = 2160, chance = 80}, {ID = 2158, chance = 10}, }, [2] = { -- Array Tier 2 {ID = 2000, chance = 20}, {ID = 2001, chance = 20}, {ID = 2002, chance = 20}, {ID = 2003, chance = 20}, {ID = 2004, chance = 20}, }, [3] = { -- Array Tier 3 }, [4] = { -- Array Tier 4 }, [5] = { -- Array Tier 5 }, [6] = { -- Array Tier 6 }, [7] = { -- Array Tier 7 }, }, } function onUse(cid, item, fromPosition, itemEx, toPosition) if config.quest.necessaria and getPlayerStorageValue (cid, config.quest.storageID) == 0 then -- Erro caso a pessoa use a maquina sem ter feito a quest -- Valido apenas quando a opcao esta ativada doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You don\'t have permission to use this machine.") return false end items = {nil, nil, nil} container = getThingFromPos(config.chestPos) for i = 0, 2 do items[i + 1] = getContainerItem (container.uid, i) if items [i + 1].itemid == 0 or items [i + 1].itemid == nil then -- Erro quando tem menos de 3 itens no bau doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You need 3 held items to fuse.") return false end end heldType = {nil, nil, nil} for j=1, 3 do for i=1, 7 do for k = 1, #config.helds[i] do if config.helds[i][k].ID == items[j].itemid then heldType[j] = i end end end if heldType [j] == nil then -- Erro a ser exibido caso o jogador coloque algum item que nao seja um held na maquina doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "This machine works only to held items.") return false end end if heldType[1] ~= heldType[2] or heldType[2] ~= heldType[3] then -- Erro a ser exibido caso o jogador coloque helds de tiers diferentes doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You need helds with the same tier.") return false elseif heldType[1] == 7 or heldType[2] == 7 or heldType[3] == 7 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You cannot fuse tier 7 held items.") return false end if not doPlayerRemoveMoney(cid, config.prices["tier_"..heldType[1]]) then -- Se nao for possivel retirar a quantia de dinheiro do jogador, finalizar script doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You need " .. config.prices.tier_..heldType[1] .. " gold to fuse tier ".. heldType[1].. " held items.") return false end -- Sortear qual held vira for i = 1, 3 do doRemoveItem(items[i].uid, 1) end tierSorteado = heldType[1] + 1 numeroSorte = math.random(1, 100) itemIDSorteado = sorteiaValor (tierSorteado, numeroSorte) doPlayerAddItem(cid, itemIDSorteado, 1) -- Mensagem exibida ao fundir com sucesso doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You received your new held item.") return true end -- Função retirada de https://pt.stackoverflow.com/questions/147884/sorteio-aleat%C3%B3rio-mas-com-diferentes-probabilidades function sorteiaValor (tierSorteado, numeroSorte) x = numeroSorte for i = 1, #config.helds[tierSorteado] do x = x - config.helds[tierSorteado][i].chance if x <= 0 then return config.helds[tierSorteado][i].ID end end end
-
(Resolvido)pedido script held fusion
Não estou com nenhum servidor no PC pelo momento para testar, mas tente esse: -- Held Fusion 0.1 by Marcot -- Se encontrou algum erro no script, favor enviar PM explicando os erros -- http://www.tibiaking.com/forum/profile/120572-marcot/ -- Configuracoes necessarias para o script local config = { quest = { -- Precisa fazer quest? (Nao mexa caso negativo) necessaria = false, -- Eh necessario fazer uma quest para liberar o sistema? storageID = 10001, -- Qual o storageID dessa quest? (caso true, anteriormente) }, chestPos = {x = 92, y = 114, z = 7, stackpos = 1}, -- Posicao do Bau (certifique-se que nao tenha nada encima dele) -- Tenha atencao para que a soma das chances dos helds em cada tier seja igual a 100 prices = { ["tier_1"] = 60000, ["tier_2"] = 150000, ["tier_3"] = 300000, ["tier_4"] = 700000, ["tier_5"] = 1000000, ["tier_6"] = 1500000, }, helds = { -- Item IDs e chance de vir o held [1] = { -- Array Tier 1 {ID = 2159, chance = 10}, {ID = 2160, chance = 80}, {ID = 2158, chance = 10}, }, [2] = { -- Array Tier 2 {ID = 2000, chance = 20}, {ID = 2001, chance = 20}, {ID = 2002, chance = 20}, {ID = 2003, chance = 20}, {ID = 2004, chance = 20}, }, [3] = { -- Array Tier 3 }, [4] = { -- Array Tier 4 }, [5] = { -- Array Tier 5 }, [6] = { -- Array Tier 6 }, [7] = { -- Array Tier 7 }, }, } function onUse(cid, item, fromPosition, itemEx, toPosition) if config.quest.necessaria and getPlayerStorageValue (cid, config.quest.storageID) == 0 then -- Erro caso a pessoa use a maquina sem ter feito a quest -- Valido apenas quando a opcao esta ativada doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You don\'t have permission to use this machine.") return false end items = {nil, nil, nil} container = getThingFromPos(config.chestPos) for i = 0, 2 do items[i + 1] = getContainerItem (container.uid, i) if items [i + 1].itemid == 0 or items [i + 1].itemid == nil then -- Erro quando tem menos de 3 itens no bau doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You need 3 held items to fuse.") return false end end heldType = {nil, nil, nil} for j=1, 3 do for i=1, 7 do for k = 1, #config.helds[i] do if config.helds[i][k].ID == items[j].itemid then heldType[j] = i end end end if heldType [j] == nil then -- Erro a ser exibido caso o jogador coloque algum item que nao seja um held na maquina doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "This machine works only to held items.") return false end end if heldType[1] ~= heldType[2] or heldType[2] ~= heldType[3] then -- Erro a ser exibido caso o jogador coloque helds de tiers diferentes doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You need helds with the same tier.") return false elseif heldType[1] == 7 or heldType[2] == 7 or heldType[3] == 7 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You cannot fuse tier 7 held items.") return false end if not doPlayerRemoveMoney(cid, config.prices.tier_..heldType[1]) then -- Se nao for possivel retirar a quantia de dinheiro do jogador, finalizar script doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You need " .. config.prices.tier_..heldType[1] .. " gold to fuse tier ".. heldType[1].. " held items.") return false end -- Sortear qual held vira for i = 1, 3 do doRemoveItem(items[i].uid, 1) end tierSorteado = heldType[1] + 1 numeroSorte = math.random(1, 100) itemIDSorteado = sorteiaValor (tierSorteado, numeroSorte) doPlayerAddItem(cid, itemIDSorteado, 1) -- Mensagem exibida ao fundir com sucesso doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You received your new held item.") return true end -- Função retirada de https://pt.stackoverflow.com/questions/147884/sorteio-aleat%C3%B3rio-mas-com-diferentes-probabilidades function sorteiaValor (tierSorteado, numeroSorte) x = numeroSorte for i = 1, #config.helds[tierSorteado] do x = x - config.helds[tierSorteado][i].chance if x <= 0 then return config.helds[tierSorteado][i].ID end end end Os preços são configurados no próprio config, a modificação que fiz foi adicionar a variável de configurar e essas 3 linhas: if not doPlayerRemoveMoney(cid, config.prices.tier_..heldType[1]) then -- Se nao for possivel retirar a quantia de dinheiro do jogador, finalizar script doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You need " .. config.prices.tier_..heldType[1] .. " gold to fuse tier ".. heldType[1].. " held items.") return false end Se não der certo pode me marcar aqui com o erro que apresentar
-
Show OFF - Naruto Legends
Concordo, acho esses personagens muito pequenos, também, comparado ao tamanho das paredes e etc. Acredito que o ideal seria padronizar, ou tudo 90 graus ou tudo 45
-
[DXP]Bug held machine
Dá look na maquina com um char de gm e manda
-
[DXP]Bug held machine
<action actionid="XXXX" script="held machine.lua"/> Onde XXXX é o numero do actionID que você colocou pro item no map editor. Nenhum script sem tag é executado
-
[DXP]Bug held machine
Esse: function onUse(cid) doPlayerSetVocation(cid, 11) openChannelDialog(cid) return true end tem q ter a tag adicionada no actions.xml sim
-
[DXP]Bug held machine
Trade options que digo é a tabela: local trade_options = { [21] = {token = {15645, 20}, results = {15615, 15608, 15573, }}, } Na parte de cima do script. Você já tentou trocar pra isso o outro la? function onUse(cid) doPlayerSetVocation(cid, 11) openChannelDialog(cid) return true end
-
[DXP]Bug held machine
@vini3h Você esqueceu de trocar o doSetVocation do Data/actions/scripts/held machine.lua para 11. O que reconhece quais canais aparecerão é a vocation, no caso (sim, é gambiarra pra trabalhar com o que tem), e sem estar na vocation correta você não terá as opções (logo, não vai rodar o script). Seu ctrl+o possivelmente parou de abrir porque a segunda parte do script não estava rodando adequadamente, já que como eu disse acima, ele troca sua vocation para saber quais canais deve abrir, e a volta da vocation está na hora de receber o held. É importante ressaltar que você deve terminar de configurar o script de acordo com o que o proprio zipter disse no final do post dele (e pelo o que vi seus canais vão do 21 ao 27, você só tem a configuração do 21 para funcionar) Configure na tabela trade_options as opções de troca, seguindo o modelo: [ID_do_canal] = {token = {ID_do_token, quantidade}, results = {IDs_dos_helds}},
-
[DXP]Bug held machine
@vini3h faltou o .lua que está em creaturescripts, ele que é o responsável por rodar o script quando o jogador fechar a janela
-
[DXP]Bug held machine
@vini3h Eu dei uma olhada aqui nesse script do @zipter98 e consegui entender o código dele, parece funcional. Você deve não ter configurado corretamente, pode mandar como está o seu script q ta em creaturescripts?
-
[DXP]Bug held machine
São janelinhas desse tipo: Imagem retirada de: Caso não tenha, você tem em mente alguma ideia de como o player deve escolher como ele vai trocar os helds?
-
[DXP]Bug held machine
Na distro que você usa tem algum modal window? Sem ela não vejo um jeito fácil do player poder escolher como ele quer gastar os tokens
-
[DXP]Bug held machine
Ah, a máquina que você dizia era de retirar held, não de fundir. Pode especificar melhor como você quer o sistema e qual é seu TFS? Eu posso tentar fazer aqui @vini3h
-
[DXP]Bug held machine
Então amigo, é difícil ajudar assim sem ver nenhum código ou erro no terminal. Caso não tenha problema testar outro script, dá uma testada nesse aqui: Caso dê algum erro pode mandar mensagem aqui me marcando que eu dou uma olhada.
-
(Resolvido)[DUVIDA] Tile trapp
Acho que deu erro por conta do stackpos, por acaso os pisos em que não funcionou possuem alguma borda (algo abaixo que não seja o chão)? E se não me engano, o doCreateItem não retorna o uid do que foi criado? Será que não daria pra utilizá-lo no Remove? (Tive que formatar meu notebook pra linux, to me habituando ainda, amanhã devo voltar pra casa e aí eu tento mexer se não der nada até lá)