Tudo que otteN postou
-
Como começar um server totalmente do 0
Boa noite. Então, antes de te explicar essas coisas, tu precisa saber o seguinte: Tibia é um jogo feito pela cipsoft. Hoje em dia existem várias "engines" que imitam as mecânicas do Tibia, e essas engines são facilmente manipuláveis. A mais conhecida hoje em dia é a OTX e o theforgottenserver (recomendo esse último, porque é a "engine oficial"). A engine em si é só o executável, tu só vai mexer nela se quiser fazer algo que não tá dentro das mecânicas do Tibia (como o sistema de televisão dos poketibias). O que tu encontra no fórum são em maioria datapacks (baiak, global, yourots, essas coisas) em cima de alguma engine (esses que eu citei em cima do theforgottenserver, os servidores de pokémon são quase todos em cima do dash, que é uma adaptação do theforgottenserver, enfim), ou seja, só alteram a pasta "data", que tu encontra em todo servidor. Nessa pasta data, tu pode criar teus scripts em lua, criar monstros, criar itens, criar vocações, mudar o mapa etc. Tu pode encontrar as engines para download em alguns tópicos aqui do fórum (não recomendo), ou diretamente do github. Links: TFS 1.2 (github) TFS 0.4 Resumindo o grosso (se tu quiser mexer com poketibia, vai tudo ficar uma lambança. Muitos programadores botaram bugs, não liberaram código fonte pra comunidade etc com interesses de lucro, já que é um tipo de servidor muito procurado, então tu pode baixar um pra brincar e tal, mas se quiser aprender a mexer com tibia não recomendo) engine: o executável do teu server, escrito em C++, tu consegue ele compilando o código fonte, a famosa source. Esse executável regula as "leis fundamentais" do servidor, e tu só pode alterar tendo o código fonte e um bom conhecimento do funcionamento das nuances da engine. Ela normalmente acompanha uma pasta data bem nua, sem grandes scripts. engines famosas: theforgottenserver (tfs) e otx versões das engines: cada engine tem várias versões, que acompanham as versões do tibia (8.6, 10.51, 11.0 etc). O TFS, por exemplo, vai da versão 0.3.6, até a 1.2 (a 1.3 está em desenvolvimento no github). Apartir da versão 1.0, por exemplo, nós temos suporte a montarias e treino offline (coisas que não tem porque fazer com script, então fizeram diretamente na source) datapack: tudo que está dentro da pasta data. Lá tu tem scripts em lua, teu mapa, configurações xml etc. data: uma pasta existente em todos servidores.
-
(Resolvido)Estou perdido com == true | == false
Seguinte, esse é um conhecimento de lógica de programação. Se nós traduzirmos as palavras true e false, nós teremos verdadeiro e falso, respectivamente. Todas condicionais (if, elseif) trabalham com um valor desses. Se ele for true, o bloco de código do if é executado, se for false, e se tiver um else, ele executa o bloco de código do else. Nesse caso, nós temos como verificação do if a função getPlayerStorageValue(), que é do próprio tfs, e não da linguagem lua. Essa função, internamente, verifica se o player com o id que tu pôs tem a storage que tu pôs (primeiros e segundos valores, respectivamente). Retorna true se ele tiver a storage (fazendo com que o código depois do if e antes do else/end seja executado) e false se ela não tiver (executando o código do else, se houver, se não houver só pula pro end). Elas são muito presentes no nosso dia-a-dia, se tu criar uma correlação entre as situações que tu usa elas no teu dia-a-dia com as situações do código, vai ser beeem mais fácil de tu entender. Se mesmo assim tu não entender, tem o canal Curso em Vídeo, do professor Guanabara, que ensina praticamente tudo que tu quiser sobre programação dsahqwdui
- Ad
-
(Resolvido)REMOVE
nois, qualquer outra coisa que precisar de ajuda chama pv
-
(Resolvido)REMOVE
tenta: function doSenzuHeal(pid, heal, cooldown) doPlayerAddMana(pid, heal) doCreatureAddHealth(pid, heal) doSendAnimatedText(getPlayerPosition(pid), "+" .. heal, TEXTCOLOR_YELLOW) doSendMagicEffect({x = getPlayerPosition(pid).x + 1, y = getPlayerPosition(pid).y + 0, z = getPlayerPosition(pid).z}, 76) exhaustion.set(pid, cooldown.storage, cooldown.wait) end function onUse(cid, item, fromPosition, itemEx, toposition) local config = { idSenzu = 2157, --id (configurado no items.xml) do senzu cooldown = { storage = 50000, --storage, mexa apenas se souber o que está fazendo para não causar conflitos no servidor wait = 1.5 --tempo de cooldown (em segundos) }, regeneration = 180000 --valor da cura } if (exhaustion.get(cid, config.cooldown.storage) == false) then if (fromPosition.x ~= CONTAINER_POSITION) then doSenzuHeal(cid, config.regeneration, config.cooldown) elseif (item.itemid == config.idSenzu) then doSenzuHeal(cid, config.regeneration, config.cooldown) end else doPlayerSendCancel(cid, "Você está exausto.") end return true end
-
(Resolvido)REMOVE
Foi erro de digitação, tinha feito mto rápido EHAUEHAUAHU, agora vai: function doSenzuHeal(pid, heal, cooldown) doPlayerAddMana(pid, heal) doCreatureAddHealth(pid, heal) doSendAnimatedText(getPlayerPosition(pid), "+" .. heal, TEXTCOLOR_YELLOW) doSendMagicEffect({x = getPlayerPosition(pid).x + 1, y = getPlayerPosition(pid).y + 0, z = getPlayerPosition(pid).z}, 76) exhaustion.set(pid, cooldown.storage, cooldown.wait) end function onUse(cid, item, fromPosition, itemEx, toposition) local config = { idSenzu = 2157, --id (configurado no items.xml) do senzu cooldown = { storage = 50000, --storage, mexa apenas se souber o que está fazendo para não causar conflitos no servidor wait = 1.5 --tempo de cooldown (em segundos) }, regeneration = 180000 --valor da cura } if (exhaustion.get(cid, config.cooldown.storage) == false) then if (fromPosition.x ~= CONTAINER_POSITION) then doSenzuHeal(cid, regeneration, config.cooldown) elseif (item.itemid == config.idSenzu) then doSenzuHeal(cid, regeneration, config.cooldown) end else doPlayerSendCancel(cid, "Você está exausto.") end return true end
-
(Resolvido)REMOVE
Fiz aqui, testa para ver se deu certo, só apaga tudo do arquivo do teu script e cola o que eu fiz: function doSenzuHeal(pid, heal, cooldown) doPlayerAddMana(pid, heal) doCreatureAddHealth(pid, heal) doSendAnimatedText(getPlayerPosition(pid), "+" .. heal, TEXTCOLOR_YELLOW) doSendMagicEffect({x = getPlayerPosition(pid).x + 1, y = getPlayerPosition(pid).y + 0, z = getPlayerPosition(pid).z}, 76) exhaustion.set(pid, cooldown.storage, cooldown.wait) end function onUse(cid, item, fromPosition, itemEx, toposition) local config = { idSenzu = 2157, --id (configurado no items.xml) do senzu cooldown = { storage = 50000, --storage, mexa apenas se souber o que está fazendo para não causar conflitos no servidor wait = 1.5 --tempo de cooldown (em segundos) }, regeneration = 180000 --valor da cura } if (exhaustion.get(cid, config.cooldown.storage == false)) then if (fromPosition.x ~= CONTAINER_POSITION) then doSenzuHeal(cid, regeneration, config.cooldown) elseif (item.itemid == config.idSenzu) then doSenzuHeal(cid, regeneration, config.cooldown) end else doPlayerSendCancel(cid, "Você está exausto.") end return true end
-
Troca de posição com um summon
@luanluciano93 Pra que essa verificação? Tô prguntando na humildade mesmo, não sei se tem porquê ou não, já que tudo tem um uid (?)
-
Programa para Gerenciar Banco de Dados (Mysql + Apache)
Pra windows eu recomendo o Wamp.
-
ERRO COMPILAÇÃO OTX
Veja se você configurou corretamente o path dos includes do projeto.
-
eu fracassando até no blender - Demon Rage Sword
/r/ tutoriais sobre Blender e modelagem 3D. Tô me interessando por essa parte de design de jogos. Qnt a sword, tá melhor que aqls do Runescape HAUEHUAEAHU
-
(Resolvido)Sair Efeito em cima da conta GOD
Qual a versão do teu TFS?
-
(Resolvido)Sair Efeito em cima da conta GOD
function onThink(cid, interval) if getPlayerGroupId(cid) >= 4 and not isPlayerGhost(cid) then numeroDoEfeito = 13 doSendMagicEffect(getThingPosition(cid), numeroDoEfeito) return true end return true end
-
(Resolvido)Sair Efeito em cima da conta GOD
Usa o que eu postei. (já solucionei o problema do ghost)
-
(Resolvido)Sair Efeito em cima da conta GOD
function onThink(cid, interval) numeroDoEfeito = 12 if (getPlayerGroupId(cid) >= 4 and not isPlayerGhost(cid)) then doSendMagicEffect(getCreaturePos(cid), numeroDoEfeito) end return true end Solucionado
-
Script para Handcuffs
Cara, eu até tentei fazer em lua, mas sem a função que é executada ao player andar o script fica bem prejudicado e quase inútil. Desculpa
-
Script para Handcuffs
Rlx, vou tentar aqui.
-
Script para Handcuffs
Até tem como, mas EU ACHO q não vai dar pra cumprir todas exigências, e vai ficar meio gambiarra :x
-
Script para Handcuffs
Qual a versão do teu TFS? Me ajuda a te ajudar, se não for 1.x vai complicar man ;p
-
@Primeiro mapa.
Nada ver, o segundo tá bonito pakas aheuaehua O primeiro que tá sem uns detalhezinhos, mas tá melhor q qlqr outra coisa que eu já fiz mappeando v:
-
@Primeiro mapa.
Se só pode um, o segundo AHUEHAUEHA
-
Criar script em lua ou programar em C++?
Galera, tenho uma pergunta. O que seria melhor, criar um script em lua ou programar internamente em C++? (tô fazendo um poketibia, do zerão msm) Os sistemas da source para ter uma gameplay semelhante aos otservers de Pokémon eu já fiz, tô me referindo aos scripts msm (como mudar a outfit quando subir na neve, areia etc) Em C++ teria mais desempenho, mas seria mais desorganizado (código implementado com vários outros da classe, fica meio ruinzin). Em lua teria um pouco menos de desempenho (lua é uma linguagem de script bem rápida), mas seria bem mais organizado (uma file pra cada script).
-
Um novo prefixo na seção de Suporte
Concordo completamente, sem isso nem dá vontade de ajudar, porque até a pessoa responder... zzzzz
-
@Primeiro mapa.
Dava gostoso pra esse mapa, hein
-
(Resolvido)[RESOLVIDO] por storage em !transformar
local config = { --[vocation id] = { level, nova voc, looktype, efeito, storage} -- Goku [7] = { 700, 8, 9, 114, 43902} } function onSay(cid, words, param, channel) local voc = config[getPlayerVocation(cid)] if (getCreatureStorage(uid, key) >= 1) then if voc then if getPlayerLevel(cid) >= voc[1] then doPlayerSetVocation(cid, voc[2]) doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Voce se transformou!") doCreatureSay(cid, "Transformar", 19) local outfit = {lookType = voc[3]} doCreatureChangeOutfit(cid, outfit) doSendMagicEffect(getCreaturePosition(cid), voc[4]) else doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Voce precisa estar no level " .. voc[1] .. " para transformar.") end else doPlayerSendCancel(cid, "Nao é possível se transformar.") end else doPlayerSendCancel(cid, "Nao é possível se transformar.") end return true end Para poder usar a transformação tu tem que usar o método "doSetStorage(storage, valor)", com o argumento valor maior igual à um.