Histórico de Curtidas
-
jhonathan wendrell deu reputação a r0bert0lol em [8.60][OLD Client] Narutibia (NTO HARD) - Servidor CompletoOlá galera do TK !
Venho por meio deste tópico, publicar a ultima versão do meu servidor derivado de Tibia NTO Hard juntamente com todos os arquivos necessários para edições.
Confesso que não foi fácil tomar essa decisão, afinal de contas foram mais de 5 anos nessa vida de administrador de otserver e esses arquivos são de muita valia, tenho certeza de que muito do que conquistei e me tornei, é resultante dos servidores que pude administrar. Costumo dizer que não sou programador e que estou mais para um gerente de scripts, todos os meus servidores foram criados com base em arquivos disponibilizados em comunidades como esta, sendo assim, pensei comigo, seria interessante eu disponibilizar e de certa forma contribuir, acredito que esses arquivos ainda podem ser útil para muitos.
O que tem de diferente no NTO Hard ?
Foi feito com muito carinho ! Rs. Eu poderia fazer uma lista (BÍBLIA) do que tem no servidor porém estou sem tempo mas tenho certeza que esse é o servidor NTO mais completo, atual e disponível para ser baixado em qualquer comunidade de otserver.
Veja algumas Imagens !
O que tem nesse Pacote Full de Arquivos NTO Hard ?
Datapack mais recente e completa do servidor. Site Gesior com template própria + AntiDDOS. Client Descompilado + Estendido + DLL Manabar com ajuste na altura da Barra de Vida/Chakra + DLL Proteção para extensão.cab Source OTX compatível com o servidor CabCreator Item Editor que funciona com o item.otb do server Object Builder 0.4.1 Remeres Map Editor Estendido para funcionar com o client do server Pic Editor IP Changer
DOWNLOAD & SCAN
dbresetada.sql
-
jhonathan wendrell deu reputação a luanluciano93 em TFS [1.2] Proteção de diferença de levelEm data/events/scripts/creature.lua na função Creature:onTargetCombat(target):
if self:isPlayer() and target:isPlayer() then local level = self:getLevel() / 2 if target:getLevel() < level and not table.contains({SKULL_RED, SKULL_BLACK, SKULL_YELLOW, SKULL_GREEN, SKULL_WHITE}, target:getSkull()) then return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER end end Não testado
-
jhonathan wendrell deu reputação a MatteusDeli em mudar script de teleportar de tfs 0.4 para tfs 1.2@jhonathan wendrell
Boa, é isso ai! Com o tempo você vai pegando o jeito e entendendo o que o script tá fazendo, caso precise de ajuda abre um novo post, que se eu não conseguir ajudar, garanto que outra pessoa vai te ajudar.
-
jhonathan wendrell recebeu reputação de MatteusDeli em mudar script de teleportar de tfs 0.4 para tfs 1.2foi isso mesmo mas como player nao tava dando efeito na posiçao anterior do player como nao sei fazer script e nao manjo quase nada de lua, mas nao sou besta fui num script aqui teleport_to_pos copiei
local tmp = player:getPosition()
if player:teleportTo(pos) and not player:isInGhostMode() then
tmp:sendMagicEffect(28)
pos:sendMagicEffect(73)
end
return false
adcionei os efeito que eu queria colei la no lugar e ficou top kk vlw ai mano, se eu precisar mudar algum outro script eu posso postar aqui ou fazer outro topico nao querendo abusar tem 3 meses que estou montando esse ot era 8.60 tfs 0.4 passei para 10x tfs 1.2 com sprites de client 12.64. Fiz e aprendi muita coisa nesse tempo so olhando os foruns mas tem hora que preciso pedir ajuda. Desculpe qualquer coisa esse e meu primeiro topico.
-
jhonathan wendrell deu reputação a MatteusDeli em mudar script de teleportar de tfs 0.4 para tfs 1.2@jhonathan wendrell Boa noite,
<talkaction words="/ir" separator=" " script="NOME_DO_ARQUIVO.lua" />
function onSay(player, words, param) local STORAGE_JAIL = 50026 local config = { pz = false, -- players precisam estar em protection zone para usar? (true or false) battle = true, -- players deve estar sem battle (true or false) custo = false, -- se os teleport irão custa (true or false) need_level = false, -- se os teleport irão precisar de level (true or false) premium = false -- se precisa ser premium account (true or false) } --[[ Config lugares]]-- local lugar = { ["formorgar2"] = { pos = {x=2094, y=136, z=8},level = 1,price = 0, premium = 1}, ["wyrm"] = { pos = {x=528, y=1529, z=7},level = 1,price = 0, premium = 1}, ["erech"] = { pos = {x=1070, y=1250, z=5},level = 1,price = 0, premium = 1}, ["veglon"] = { pos = {x=228, y=449, z=7},level = 1,price = 0, premium = 1}, } local a = lugar[param] local STORAGE_IR = 12701 local delay = 1 * 1.2 local lastUse = player:getStorageValue(STORAGE_IR) local ticks = os.time() - lastUse if ticks < delay then return true end player:setStorageValue(STORAGE_IR, os.time()) if not(a) then player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "As cidades que voce pode ir sao: edoras, belfallas, ashenport, bree, riv, dol, esg, argond, moria, mordor, forod, condado, dunedain, anfallas, minas.") player:sendTextMessage(MESSAGE_STATUS_CONSOLE_RED, "Lugares onde Apenas VIPS podem ir:") player:sendTextMessage(MESSAGE_STATUS_CONSOLE_RED, "Até Level 30: promoOrc, troll1, troll2, rot, pirata, mino1, mino2, pantano, eriador, dwarf1, dwarf2, macacos1, macacos2, slime1, slime2, slime3, ghoul, bandit1, bandit2, cyc1, cyc2, cyc3, stonegolem, dworc1, eregion.") player:sendTextMessage(MESSAGE_STATUS_CONSOLE_RED, "De level 31 a 100: rhun, dragonvip, erebor, mirkwood, forochel, carn, enedwaith, elven, elven2, wyvern, corsario, dunland, icedunland, beleghost, evendim, bonebeast1, bonebeast2, orc, blacknight1, blacknight2, hero1, hero2, hero3, hydra1, hydra2, hydra3, lich, icewitch1, icewitch2, crystal, barbarian, dragon1, dragon2, vamp, turtle, purga, quara.") player:sendTextMessage(MESSAGE_STATUS_CONSOLE_RED, "Level maior que 100: erech, formorgar, formorgar2, wyrm, veglon, northern, ered, orodruin, ice, nimrais, defiler, behedemon, harlond, northern2.") return true end if (config.premium == true and player:getPremiumDays() <= 0) then player:sendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Apenas contas VIP tem esse recurso.") end if (player:getStorageValue(STORAGE_JAIL) > os.time()) then player:sendTextMessage(MESSAGE_INFO_DESCR, 'Você só pode sair as '.. os.date("%H:%M:%S", player:getStorageValue(STORAGE_JAIL))..' (agora são: ' .. os.date("%H:%M:%S", os.time()) .. ').') return true end if (config.battle == true and player:getCondition(CONDITION_INFIGHT, CONDITIONID_DEFAULT) ~= nil) then player:sendTextMessage(MESSAGE_EVENT_DEFAULT, "Você não pode se teleportar em uma batalha.") return true end if a.premium == 1 and player:getPremiumDays() <= 0 then player:sendTextMessage(MESSAGE_EVENT_DEFAULT, "Apenas contas VIP podem acessar esse lugar.") return true end local pos = Position(a.pos.x, a.pos.y, a.pos.z) if player:getGroup():getId() >= 3 then player:teleportTo(pos) return true end player:getPosition():sendMagicEffect(27) player:teleportTo(pos) player:getPosition():sendMagicEffect(40) return true end
-
jhonathan wendrell deu reputação a JZDJ em Download Clients 11+ IP 127.0.0.1Olá galera do TK.
Hoje eu trago vários clientes de Tibia 11+ com IP 127.0.0.1.
Vi que alguns usuários não estão conseguindo algumas versões 11 então resolvi postar aqui.
Estou disponibilizando o EXECUTÁVEL DO CLIENTE.
Para que funcione é só colocar na pasta BIN da versão correspondente.
Também disponibilizei a pasta completa compactada.
Vamos ao que interessa.
Tibia 11.43.5504
127.0.0.1-11.43.5504.exe
SCAN do cliente
Pasta completa: Tibia 11.43.5504.rar
SCAN pasta completa
Tibia 11.44.5516
127.0.0.1-11.44.5516.exe
SCAN do cliente
Pasta completa: Tibia 11.44.5516.rar
SCAN pasta completa
Tibia 11.46.5556
127.0.0.1-11.46.5556.exe
SCAN do cliente
Pasta completa: Tibia 11.46.5556.rar
SCAN pasta completa
Tibia 11.47.5640
127.0.0.1-11.47.5640.exe
SCAN do cliente
Pasta completa: Tibia_11_47.5640.rar
SCAN pasta completa
Tibia 11.47.5674
127.0.0.1-11.47.5674.exe
SCAN do cliente
Pasta completa: Tibia_11_47.5674.rar
SCAN pasta completa
Tibia 11.48.5712
127.0.0.1-11.48.5712.exe
SCAN do cliente
Pasta completa: Tibia_11_48.5712.rar
SCAN pasta completa
Tibia 11.48.5753
127.0.0.1-11.48.5753.exe
SCAN do cliente
Pasta completa: Tibia_11_48.5753.rar
SCAN pasta completa
Tibia 11.49.5813
127.0.0.1-11.49.5813.exe
SCAN do cliente
Pasta completa: Tibia_11_49.5813.rar
SCAN pasta completa
Tibia 11.49.5884
127.0.0.1-11.49.5884.exe
SCAN do cliente
Pasta completa: Tibia_11_49.5884.rar
SCAN pasta completa
Tibia 11.49.5921
127.0.0.1-11.49.5921.exe
SCAN do cliente
Pasta completa: Tibia_11_49.5921.rar
SCAN pasta completa
Tibia 11.49.5983
127.0.0.1-11.49.5983.exe
SCAN do cliente
Pasta completa: Tibia_11_49.5983.rar
SCAN pasta completa
Tibia 11.49.6018
127.0.0.1-11.49.6018.exe
SCAN do cliente
Pasta completa: Tibia 11.49.6018.rar
SCAN pasta completa
Tibia 11.49.6030
127.0.0.1-11.49.6030.exe
SCAN do cliente
Tibia 11.49.6030.rar
SCAN pasta completa
Tibia 11.50.6055
127.0.0.1-11.50.6055.exe
SCAN do cliente
Tibia 11.50.6055.rar
SCAN pasta completa
Tibia 11.51.6099
127.0.0.1-11.51.6099.exe
SCAN do cliente
Tibia 11.51.6099.rar
SCAN pasta completa
Tibia 11.52.6104
127.0.0.1-11.52.6104.exe
SCAN do cliente
Tibia 11.52.6104.rar
SCAN pasta completa
Tibia 11.55.6239
127.0.0.1-11.55.6239.exe
SCAN do cliente
Tibia 11.55.6239.rar
SCAN pasta completa
Tibia 11.56.6239
127.0.0.1-11.56.6239.exe
SCAN do cliente
Tibia 11.56.6239.rar
SCAN pasta completa
Tibia 11.57.6239
127.0.0.1-11.57.6239.exe
SCAN do cliente
Tibia 11.57.6239.rar
SCAN pasta completa
Tibia 11.58.6239
127.0.0.1-11.58.6239.exe
SCAN do cliente
Tibia 11.58.6239.rar
SCAN pasta completa
Tibia 11.58.6239 ATUALIZADO
127.0.0.1-11_58.6239.exe ATUALIZADO
SCAN do cliente
Tibia 11.58.6239 ATUALIZADO.rar
SCAN pasta completa
Tibia 11.59.6424
127.0.0.1-11.59.6424.exe
SCAN do cliente
Tibia 11.59.6424.rar
SCAN pasta completa
Tibia 11.60.6457
127.0.0.1-11.60.6457.exe
SCAN do cliente
Tibia 11.60.6457.rar
SCAN pasta completa
Tibia 11.65.6492
127.0.0.1-11.65.6492.exe
SCAN do cliente
Tibia 11.65.6492.rar
SCAN pasta completa
Tibia 11.65.6507
127.0.0.1-11.65.6507.exe
SCAN do cliente
Tibia 11.65.6507.rar
SCAN pasta completa
Tibia 11.66.6516
127.0.0.1-11.66.6516.exe
SCAN do cliente
Tibia 11.66.6516.rar
SCAN pasta completa
Tibia 11.70.6535
127.0.0.1-11.70.6535.exe
SCAN do cliente
Tibia 11.70.6535.rar
SCAN pasta completa
Tibia 11.70.6543
127.0.0.1-11.70.6543.rar
SCAN do cliente
Tibia 11.70.6543.rar
SCAN pasta completa
Tibia 11.70.6548
127.0.0.1-11.70.6548.rar
SCAN do cliente
Tibia 11.70.6548.rar
SCAN pasta completa
Tibia 11.70.6555
127.0.0.1-11.70.6555.rar
SCAN do cliente
Tibia 11.70.6555.rar
SCAN pasta completa
Espero que eu tenha ajudado.
Créditos:
A Cip pelos clientes e a mim por ter alterado os ips nos mesmos.
REP+ é sempre bom e não dói.
Abraços.
ATT ,
Jaurez/JZDJ
-
jhonathan wendrell deu reputação a Vodkart em [8.6] Task System 4.0! (Task system + Daily Task System)Removido:
*Boss Room
*Rank Task
*Prêmios para os 10 primeiros a terminar todas as tasks
Adicionado:
*Daily Task System (Sistema exclusivo de Task diario, podendo pegar 1x a cada 24 hrs, irei explicar mais depois.)
*Task agora é por progresso, você não pode sair e voltar, terá que terminar a task 1 para avançar para a task 2, assim sucessivamente.
*Task Points
*Level para realizar a task
*Nova talkaction que mostra uma janela de informações sobre o level da task, premios que irá receber, progresso, etc...
*Items para entrega(Se o jogador deverá levar algum item junto com a quantidade de monstro morta) para finalizar a task
*Sistema de look Task (Varia de acordo com a sua quantidade de Task Points, podendo ficar por exemplo como "Huntsman", "Ranger", etc...(alterável)
*Mods e npc mais "clean", várias linhas removidas e o sistema está mais rápido
*Vou Adicionar "scripts extras" Como:
--> Tile que só passa quem tiver permissão depois de finalizar determinada quest
--> Npc de Boss Room para entrar e enfrentar o monstro quem fez determinada quest
[+] Resumo do Task system + Daily Task System [+]
Task System: É o sistema de task "original", onde consiste em matar determinada quantidade de monstros(E entregar certo itens <- é configurável), para receber recompensas como Exp, Money e Items.
Algumas mudanças do simple task 3.0 para o 4.0 foram:
[+] O sistema agora é por progresso, isso quer dizer que você terá que ir terminando a quest para avançar para a seguinte.
[+] O sistema Também recebeu uma alteração, fazendo com que as Tasks precisem que o jogador tenha um level determinado
[+] A tabela para edição está mais fácil, fazendo com que você adicione ou remova monstros com mais tranquilidade, inclusive alterações das Rewards da Task.
Daily Task System: É um sistema que desenvolvi para que os jogadores sempre estejam se comunicando com o npc de Task, no caso da Task Diaria, vária de acordo com o level do jogador, por exemplo:
Jogadores entre level 6 ao 49 poderá cair em uma dessas 3 Task Diarias: Orcs, Tarantulas ou Wyverns
Jogadores entre level 50 ao 79 poderá cair em uma dessas 3 Task Diarias: Dragons, Wailing Widows ou Ancient Scarabs
E por ai vai, claro que você poderá aumentar as Task Diarias dependendo do level, eu fiz 3 para cada level que é pra postar, mas tudo isso você pode aumentar! Dependendo do seu servidor.
E sim, você pode fazer a TASK "ORIGINAL" e a TASK "DIARIA" ao mesmo tempo! Ambas são distintas e possuem Rewards diferenciadas!
No caso da Task diaria, levando em conta que você começou a fazer ela no dia 08/01 ás 20:00 Hrs, você tem até o dia 09/01 ás 20:00Hrs para termina-la e receber a recompensa, caso termine antes, a Task diaria só irá ficar disponível para repetição a partir desta mesma data 09/01 20:00 Hrs;
[+] Caso você não termine a tempo, não tem problema, basta esperar este horário e começar uma nova Task.
[+] Caso você começou a Daily Task e terminou antes desta data. mas por algum motivo esqueceu de entregar e a mesma passou do prazo, não tem importância, caso você tenha matado todos os monstros até 09/01 20:00 Hrs, você poderá entregar está Task em qualquer horário para receber suas Rewards e começar uma task a partir do momento em que você entregou! (INJUSTIÇA AQUI NÃO CARALHO).
[+] Comandos Adicionais [+]
/task -- Mostra as informações da sua Task Atual, como Nome da Task, Level, Rewards, Monstros que você poderá matar, Se tem que entregar algum Item junto, etc...
/task daily -- É basicamente mostra a mesma informação da Task Principal, porém mostra também qual o prazo limite para entrega da task.
/task counter -- É um comando que ATIVA ou DESATIVA o contador de monstros mortos na task no seu Channel.
[+] Imagens [+]
Cline neste link para ver algumas imagens da Task : http://imgur.com/a/eLIY3
------------------------------------------------ // --------------------------------------------------------------
[+] Instalação do Sistema [+]
Requisitos: Nível Médio de conhecimento em scripting LUA
Pasta Mods
Simple Task.xml
https://pastebin.com/raw/P5hqMC3j
NPC:
Ludger.xml
https://pastebin.com/raw/R56yLWHw
simple_task.lua
https://pastebin.com/raw/1mRzJ6aJ
---------------------------------------------- // ----------------------------------
[+] configuração [+ ]
Task System Principal
task_sys = { [1] = {name = "Trolls", start = 176201, monsters_list = {"Troll","Troll champion"}, level = 8, count = 40, points = 0, items = {}, reward = {}, exp = 2000, money = 2000} }
[1] --> O número entre os colchetes [] significa a ordem da Task, como a Task é por progresso sempre começará no 1 e irá pro [2], assim sucessivamente.
name --> É o nome da task que o jogador irá fazer.
start --> é a storage que indicará se o jogador começou a Task
monster_list ={} --> É o nome dos monstros em que o jogador deverá caçar para completar a Task
level --> É o level necessário para dar inicio á Task
count --> É o número de monstros que o jogador tem que matar para completar a Task
points --> Aqui determinada quantos Task points o jogador irá receber ao completar a Task
items = {} --> Aqui determinada se além de matar os monstros, o jogador terá que entregar item também! Caso tenha só colocar o {ITEM_ID, QUANTIDADE} EX:
items = {{2173,1},{2160,10},{2493,2}} rewad --> Aqui determinada se o jogador irá receber itens ao terminar a Task, mesma formula do items /\
reward = {{2520,1},{2173,1}} exp --> Se o jogador irá receber Exp ao terminar a task. 0 ou quantidade de exp
Money --> Se o jogador irá receber dinheiro ao terminar a task. 0 ou quantidade de dinheiro
Daily Task System
daily_task = { [1] = {name = "Orcs" ,monsters_list = {"Orc Berserker","Orc Rider","Orc Leader","Orc Warlord"}, count = 100, points = 0, reward = {}, exp = 5000, money = 10000} }
Segue o padrão da Task original, exceto que não precisa entregar items para o npc!
Como funciona A randomização de level de acordo com a Daily task?
Procure por está tabela em MODS
local t = { [{6,49}] = {1,3}, [{50,79}] = {4,6}, [{80,129}] = {7,9}, [{130,math.huge}] = {10,12} }
entre as chaves e colchetes é o level do jogador para as Daily Task, Você pode adicionar quantas você quiser!
Digamos que:
[{6,49}] = {1,3} --> Quer dizer que entre o level 6 ao 49 o jogador poderá cair na Daily Task número 1(Orcs), 2(Tarantulas) ou 3(Wyvern)!
[{50,79}] = {4,6} --> Quer dizer que entre o level 50 ao 79 o jogador poderá cair na Daily Task número 4(Dragons), 5(Wailing Widows) ou 6(Ancient Scarabs)!
...
[{130,math.huge}] = {10,12} --> Quer dizer que o jogador level 130 ou MAIS poderá cair na Daily Task número 10(Undead Dragons), 11(HydraS) ou 12(Ghastly Dragons)!
Look Rank System
Procure por está tabela em MODS
local ranks = { [{1, 20}] = "Huntsman", [{21, 50}] = "Ranger", [{51, 100}] = "Big Game Hunter", [{101, 200}] = "Trophy Hunter", [{201, math.huge}] = "Elite Hunter" }
Entre 1-20 Task points o Rank será Huntsman
Entre 21-50 Task posints o Rank será Ranger
Entre 51-100 Task Points o rank será Big Game Hunter
etc...
Altere como quiser!
-
jhonathan wendrell deu reputação a TioDoLeite em Como adicionar uma nova outfit no seu server.Bom primeiro vá no Dat editor ou Object Builder, pegue a looktype da roupa, no meu caso vou usar 661 para a mulher e 662 para o homem.
Imagem ->
Depois vá até C:\Users\pc\Desktop\Server\data\XML do seu servidor e procure por outfit.xml, abra o arquivo que vai conter isso dentro:
Adicione uma nova tag debaixo da ultima.
-- Como Editar --
Vermelho - O id da tag no caso, se tiver um 57 na penultima tag você coloca um número a mais na tag seguinte no caso vai ficar 58.
Laranja - Gender [Mulher = 0], [Homem = 1]
Verde - Looktype da roupa que foi oque eu falei acima.
Cyano - Nome da Roupa. (Pode ser qualquer nome)
Ajudei ? Da um rep+ ai , duvidas só chamar no PM.
-
jhonathan wendrell deu reputação a Erimyth em (Resolvido) [Pedido] de Potions usadas se juntarem em uma só.Se seu distro for 8.6+, isso aqui funciona!
Vá até data/actions/liquids/potions.lua e substitua tudo por isso:
local config = {
removeOnUse = "no",
usableOnTarget = "yes", -- can be used on target? (fe. healing friend)
splashable = "no",
realAnimation = "no", -- make text effect visible only for players in range 1x1
healthMultiplier = 1.0,
manaMultiplier = 1.0
}
config.removeOnUse = getBooleanFromString(config.removeOnUse)
config.usableOnTarget = getBooleanFromString(config.usableOnTarget)
config.splashable = getBooleanFromString(config.splashable)
config.realAnimation = getBooleanFromString(config.realAnimation)
local POTIONS = {
[8704] = {empty = 7636, splash = 2, health = {50, 100}}, -- small health potion
[7618] = {empty = 7636, splash = 2, health = {100, 200}}, -- health potion
[7588] = {empty = 7634, splash = 2, health = {200, 400}, level = 50, vocations = {3, 4, 7, 8}, vocStr = "knights and paladins"}, -- strong health potion
[7591] = {empty = 7635, splash = 2, health = {500, 700}, level = 80, vocations = {4, 8}, vocStr = "knights"}, -- great health potion
[8473] = {empty = 7635, splash = 2, health = {800, 1000}, level = 130, vocations = {4, 8}, vocStr = "knights"}, -- ultimate health potion
[7620] = {empty = 7636, splash = 7, mana = {70, 130}}, -- mana potion
[7589] = {empty = 7634, splash = 7, mana = {110, 190}, level = 50, vocations = {1, 2, 3, 5, 6, 7}, vocStr = "sorcerers, druids and paladins"}, -- strong mana potion
[7590] = {empty = 7635, splash = 7, mana = {200, 300}, level = 80, vocations = {1, 2, 5, 6}, vocStr = "sorcerers and druids"}, -- great mana potion
[8472] = {empty = 7635, splash = 3, health = {200, 400}, mana = {110, 190}, level = 80, vocations = {3, 7}, vocStr = "paladins"} -- great spirit potion
}
local exhaust = createConditionObject(CONDITION_EXHAUST)
setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 100))
function onUse(cid, item, fromPosition, itemEx, toPosition)
local potion = POTIONS[item.itemid]
if(not potion) then
return false
end
if(not isPlayer(itemEx.uid) or (not config.usableOnTarget and cid ~= itemEx.uid)) then
if(not config.splashable) then
return false
end
if(toPosition.x == CONTAINER_POSITION) then
toPosition = getThingPos(item.uid)
end
doDecayItem(doCreateItem(2016, potion.splash, toPosition))
doTransformItem(item.uid, potion.empty)
return true
end
if(hasCondition(cid, CONDITION_EXHAUST_HEAL)) then
doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED)
return true
end
if(((potion.level and getPlayerLevel(cid) < potion.level) or (potion.vocations and not isInArray(potion.vocations, getPlayerVocation(cid)))) and
not getPlayerCustomFlagValue(cid, PLAYERCUSTOMFLAG_GAMEMASTERPRIVILEGES))
then
doCreatureSay(itemEx.uid, "Only " .. potion.vocStr .. (potion.level and (" of level " .. potion.level) or "") .. " or above may drink this fluid.", TALKTYPE_ORANGE_1)
return true
end
local health = potion.health
if(health and not doCreatureAddHealth(itemEx.uid, math.ceil(math.random(health[1], health[2]) * config.healthMultiplier))) then
return false
end
local mana = potion.mana
if(mana and not doPlayerAddMana(itemEx.uid, math.ceil(math.random(mana[1], mana[2]) * config.manaMultiplier))) then
return false
end
doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_MAGIC_BLUE)
if(not realAnimation) then
doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1)
else
for i, tid in ipairs(getSpectators(getCreaturePosition(cid), 1, 1)) do
if(isPlayer(tid)) then
doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1, false, tid)
end
end
end
doAddCondition(cid, exhaust)
if(not potion.empty or config.removeOnUse) then
doRemoveItem(item.uid, 1)
return true
end
doRemoveItem(item.uid, 1)
doPlayerAddItem(cid, potion.empty, 1)
pot_count = getPlayerItemCount(cid, potion.empty)
doPlayerRemoveItem(cid, potion.empty, pot_count)
doPlayerAddItem(cid, potion.empty, pot_count)
return true
end[/code]
-
jhonathan wendrell deu reputação a Roy em (Resolvido)Level minimo pra usar itemAmigo se eu não estou enganado, como faz um tempinho que não mexo em Otserv em Movements.xml você pode colocar level também para equipar a arma.
-
jhonathan wendrell deu reputação a Adriano SwaTT em [NPC] Bank (Igual Tibia Global)Procurei aqui pelo forum, e não achei um NPC de Bank que fosse tão perfeito como este que estou postando...
Eu mesmo havia postado há alguns dias atrás um NPC de Bank, mas não é tão bom quanto este...
Detalhes do NPC:
Executa as funções como do Tibia Global.
Deposit, Transfer, Withdraw, Change Gold, Change Platinum, Change Crystal...
Funcionando perfeitamente...
#Testado'
Vamos ao que interessa.
Crie um arquivo chamado "bank.xml" na pasta "data / npc"... Cole o código abaixo dentro do arquivo:
<?xml version="1.0" encoding="UTF-8"?> <npc name="BankMan" script="data/npc/scripts/bank.lua" walkinterval="25" floorchange="0" access="5" > <health now="150" max="150"/> <look type="132" head="115" body="0" legs="114" feet="0" addons="3" corpse="2212"/> <parameters> <parameter key="message_greet" value="Welcome |PLAYERNAME|! Here, you can {deposit}, {withdraw} or {transfer} your money from your bank account. I can change your coins too."/> <parameter key="message_alreadyfocused" value="You are drunked ? I talk with you."/> <parameter key="message_farewell" value="Goodbye. I wanna see your money... oh you again."/> </parameters> </npc> Salve e feche o arquivo.
Agora vá na pasta Scripts e crie um arquivo chamado "bank.lua" e cole o código abaixo dentro do mesmo:
local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid --------------------MESSAGES------------------------------------------------------------------------------ if msgcontains(msg, 'deposit') then selfSay('Please tell me how much gold it is you would like to deposit.', cid) talkState[talkUser] = 1 elseif msgcontains(msg, 'withdraw') then selfSay('Please tell me how much gold you would like to withdraw.', cid) talkState[talkUser] = 3 elseif msgcontains(msg, 'transfer') then selfSay('Please tell me the amount of gold coins you would like to transfer.', cid) talkState[talkUser] = 5 elseif msgcontains(msg, 'change gold') then selfSay('How many platinum coins do you want to get?', cid) talkState[talkUser] = 8 elseif msgcontains(msg, 'change platinum') then selfSay('Do you want to change your platinum coins to gold or crystal?', cid) talkState[talkUser] = 10 elseif msgcontains(msg, 'change crystal') then selfSay('How many crystal coins do you want to change to platinum?', cid) talkState[talkUser] = 15 elseif msgcontains(msg, 'balance') then n = getPlayerBalance(cid) selfSay('Your balance are '..n..' golds.', cid) talkState[talkUser] = 0 ----------------------DEPOSIT------------------------------------------------------- elseif talkState[talkUser] == 1 then if msgcontains(msg, 'all') then n = getPlayerMoney(cid) selfSay('Do you want deposit '..n..' golds ?', cid) talkState[talkUser] = 2 else n = getNumber(msg) selfSay('Do you want deposit '..n..' golds ?', cid) talkState[talkUser] = 2 end elseif talkState[talkUser] == 2 then if msgcontains(msg, 'yes') then if getPlayerMoney(cid) >= n then doPlayerDepositMoney(cid,n) selfSay('Sucessfull. Now your balance account is ' ..getPlayerBalance(cid)..' golds.', cid) talkState[talkUser] = 0 else selfSay('You don\'t have money.', cid) end else selfSay('Ok then', cid) end ----------------------WITHDRAW------------------------------------------------------------------------------------- elseif talkState[talkUser] == 3 then if msgcontains(msg, 'all') then n = getPlayerBalance(cid) selfSay('Do you want withdraw '..n..' golds ?', cid) talkState[talkUser] = 4 else n = getNumber(msg) selfSay('Do you want withdraw '..n..' golds ?', cid) talkState[talkUser] = 4 end elseif talkState[talkUser] == 4 then if msgcontains(msg, 'yes') then if getPlayerBalance(cid) >= n then doPlayerWithdrawMoney(cid, n) selfSay('Here you are, '..n..' gold. Now your balance account is ' ..getPlayerBalance(cid)..' golds.', cid) talkState[talkUser] = 0 else selfSay('There is not enough gold on your account', cid) end else selfSay('Ok then', cid) end ----------------------TRANSFER---------------------------------------------------------------------------------------- elseif talkState[talkUser] == 5 then if msgcontains(msg, 'all') then n = getPlayerBalance(cid) selfSay('Who would you like transfer '..n..' gold to?', cid) talkState[talkUser] = 6 else n = getNumber(msg) selfSay('Who would you like transfer '..n..' gold to?', cid) talkState[talkUser] = 6 end elseif talkState[talkUser] == 6 then p = msg selfSay('So you would like to transfer '..n..' gold to '..p..'?', cid) talkState[talkUser] = 7 elseif talkState[talkUser] == 7 then if msgcontains(msg, 'yes') then if getPlayerBalance(cid) >= n then if doPlayerTransferMoneyTo(cid, p, n) == TRUE then selfSay('You have transferred '..n..' gold to '..p..' and your account balance is '..getPlayerBalance(cid)..' golds.', cid) talkState[talkUser] = 0 else selfSay('This player does not exist. Please tell me a valid name!', cid) talkState[talkUser] = 0 end else selfSay('There is not enough gold on your account', cid) talkState[talkUser] = 0 end else selfSay('Ok then', cid) talkState[talkUser] = 0 end ----------------------CHANGE GOLD--------------------------------------------------------------------------------- elseif talkState[talkUser] == 8 then n = getNumber(msg) b = n * 100 selfSay('So I should change '..b..' of your gold coins to '..n..' platinum coins for you?', cid) talkState[talkUser] = 9 elseif talkState[talkUser] == 9 then if msgcontains(msg, 'yes') then if doPlayerRemoveItem(cid, 2148, b) == TRUE then doPlayerAddItem(cid, 2152, n) talkState[talkUser] = 0 else selfSay('You don\'t have money.', cid) talkState[talkUser] = 0 end else selfSay('Ok. We cancel.', cid) talkState[talkUser] = 0 end ---------------------CHANGE PLATINUM------------------------------------------------------------------------- elseif talkState[talkUser] == 10 then if msgcontains(msg, 'gold') then selfSay('How many platinum coins do you want to change to gold?', cid) talkState[talkUser] = 11 elseif msgcontains(msg, 'crystal') then selfSay('How many crystal coins do you want to get?', cid) talkState[talkUser] = 13 end elseif talkState[talkUser] == 11 then n = getNumber(msg) b = n * 100 selfSay('So I should change '..n..' of your platinum coins to '..b..' gold coins for you?', cid) talkState[talkUser] = 12 elseif talkState[talkUser] == 12 then if msgcontains(msg, 'yes') then if doPlayerRemoveItem(cid, 2152, n) == TRUE then doPlayerAddItem(cid, 2148, b) talkState[talkUser] = 0 else selfSay('You don\'t have money.', cid) talkState[talkUser] = 0 end else selfSay('Ok. We cancel.', cid) talkState[talkUser] = 0 end elseif talkState[talkUser] == 13 then n = getNumber(msg) b = n * 100 selfSay('So I should change '..b..' of your platinum coins to '..n..' crystal coins for you?', cid) talkState[talkUser] = 14 elseif talkState[talkUser] == 14 then if msgcontains(msg, 'yes') then if doPlayerRemoveItem(cid, 2152, b) == TRUE then doPlayerAddItem(cid, 2160, n) talkState[talkUser] = 0 else selfSay('You don\'t have money.', cid) talkState[talkUser] = 0 end else selfSay('Ok. We cancel.', cid) talkState[talkUser] = 0 end ---------------------CHANGE CRYSTAL------------------------------------------------------------------------------- elseif talkState[talkUser] == 15 then n = getNumber(msg) b = n * 100 selfSay('So I should change '..n..' of your crystal coins to '..b..' platinum coins for you?', cid) talkState[talkUser] = 16 elseif talkState[talkUser] == 16 then if msgcontains(msg, 'yes') then if doPlayerRemoveItem(cid, 2160, n) == TRUE then doPlayerAddItem(cid, 2152, b) talkState[talkUser] = 0 else selfSay('You don\'t have money.', cid) talkState[talkUser] = 0 end else selfSay('Ok. We cancel.', cid) talkState[talkUser] = 0 end end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) -- function maded by Gesior-- function getNumber(txt) --return number if its number and is > 0, else return 0 x = string.gsub(txt,"%a","") x = tonumber(x) if x ~= nill and x > 0 then return x else return 0 end end
Salve o arquivo e feche-o.
Agora seu NPC está pronto, basta adicioná-lo ao seu mapa usando o Map Editor.
Espero que seja de utilidade de alguém...
Créditos: Tibiaa4e (outro forum)
Pequeno Tuto: Adriano Swatt
Testado em:
Versões do Client: 8.54 e 8.60.
Versões da Distro: TFS 3.4.5, TFS 0.4 e Alissow 0.4.1.
Espero que seja útil.
Abraços'
-
jhonathan wendrell deu reputação a MaXwEllDeN em [Aula 1] IntroduçãoIntrodução
Aula 1
O que é scripting?
Do modo mais simples possível: scripting é o ato de programar. O nome scripting vem do nome "script".
O que é um script?
De um modo geral, um script é um bloco de código escrito em uma linguagem de programação interpretada, ou seja, ele precisa que alguma coisa leia ele e possa "traduzir" seu conteúdo. Lembre-se de que "script" não é um termo específico de Open Tibia Servers.
O que é uma linguagem de programação interpretada?
Os brasileiros falam português, ingleses falam inglês e chineses falam mandarim, e com isso o mundo é composto por várias línguas.
No mundo da programação não é diferente. Existem várias línguas que podem ser usadas, cada uma com uma característica e modo de escrever diferente (Assim como o português é diferente do inglês).
Entre estas linguagens, existem 2 tipos: as linguagens interpretadas e as linguagens compiladas (Não-interpretadas). Podemos fazer uma comparação tosca com a vida real: o português seria uma linguagem interpretada (Nosso cérebro precisa "traduzir" a mensagem), e os desenhos seriam a língua compilada (Nosso cérebro reconhece automaticamente a "mensagem" do desenho).
As linguagens compiladas são aquelas que não precisam ser lidas por nenhum programa, pois "conversam" diretamente com o computador, enquando a linguagem interpretada não consegue se comunicar com o computador, então a linguagem compilada recebe a mensagem do codigo interpretado e traduz numa linguagem que o computador entenda, dai a linguagem interpretada pode conversar com o computador (Desde que alguém traduza suas mensagens).
Voltando para a parte de Open Tibia Servers, a linguagem compilada é a linguagem usada no seu servidor: o .exe no Windows, por exemplo, e a linguagem interpretada são os scripts .lua. O seu servidor compilado vai ler os scripts .lua e traduzir o conteúdo deles para que o computador possa executar o que o script manda.
Se os scripts são escritos em linguagens interpretadas, qual é a linguagem dos script usados nos Open Tibia Servers?
Os Open Tibia Servers usam uma linguagem de programação (Interpretada) chamada Lua, que foi feita aqui no Brasil mesmo.
Características da linguagem de programação Lua:
Linguagem de Programação Interpretada Linguagem de Programação Imperativa ou Programação Procedural Linguagem de Scripts ou Linguagem de Extensão Pequena, Fácil, Leve e Eficiente " Lua foi criada por um time de desenvolvedores do Tecgraf da PUC-Rio, a princípio, para ser usada em um projeto da Petrobras. Devido à sua eficiência, clareza e facilidade de aprendizado, passou a ser usada em diversos ramos da programação, como no desenvolvimento de jogos (a LucasArts, por exemplo, usou a linguagem no jogo Escape from Monkey Island), controle de robôs, processamento de texto, etc. Também é freqüentemente usada como uma linguagem de propósito geral. "
Wikipédia - Lua (Linguagem de Programação)
O que eu preciso para aprender Lua e começar a produzir meus scripts?
Paciência (Embora seja de fácil aprendizado, você vai levar algum tempo para aprender a linguagem)
Humildade (Nunca se sinta o melhor, nem ridicularize aqueles que tiverem um conhecimento menor que o seu)
Vontade (Não adianta fazer as coisas sem o menor interesse, você não chegará a lugar nenhum sem vontade)
Criatividade (O principal para produzir um script é ter a idéia do que você vai fazer)
Conhecer a Lógica da Programação (Não se preocupe, eu vou ensinar a Lógica da Programação nas próximas aulas.)
Interpretador Lua (Para testar seus scripts, claro. Você pode usar o seu OTServer para testar, e ainda usar um interpretador Lua para testar seus scripts simples fora do OTServer)
Editor Lua (Não é realmente necessário, uma vez que você pode usar um editor de textos qualquer, como o bloco de notas, mas ter um Editor Lua vai ajudar muito, e alguns até vêm com um Interpretador Lua junto!)
Pagar uma taxa de R$ 700,00, afinal, não estou escrevendo estas aulas de graça! (OK, não precisa pagar nada, mas no mínimo poste seus scripts aqui e ajude a seção a crescer ) Onde posso encontrar um Interpretador e/ou Editor Lua?
Como interpretador (No caso de produzir scripts para Open Tibia Servers) você deve usar um servidor próprio, pessoal somente para testar os scripts que você fez, e pode usar também um Interpretador Lua geral, para testar seus scripts fora dos OTServers.
Como Editor Lua você pode usar qualquer editor de textos, mas eu recomendo usar um editor que seja próprio para a linguagem Lua. Existem dois editores que já vem com um Interpretador Lua "embutido". São eles: OTScript Live! [Download] e SciTE (Scintilla) [Download].
Exercício-Tarefa:
Pesquise mais na internet sobre a linguagem Lua, Scripts, etc...
Somente dúvidas serão aceitas aqui! Comentários que não forem dúvidas serão apagados e os autores serão reportados!
Essa aula foi escrita por uma raposa levada Skyen Hasus, todos os créditos são dele.
Aula 2 - Lógica da programação >> Script Live By colex.rar
-
jhonathan wendrell deu reputação a Movie em Ensinando como compilar TFS 0.4 [COM IMAGENS]Como compilar no Windows (TFS 0.4)
E aí pessoal, beleza?
Apanhei muito para aprender a compilar no Windows, nunca dava conta, e um dia alguém (não me lembro quem) me ajudou e estou aqui para repassar esse conhecimento...
Enfim, hoje vou ensinar como compilar a TFS 0.4 no Windows, e em breve, no Linux.
Primeiramente, irei deixar a lista de programas que iremos precisar.
====================================================================================
Dev C++ (Links para download no spoiler)
====================================================================================
Uma TFS 0.4
====================================================================================
Feito o download de tudo isso, vamos ao passo a passo.
====================================================================================
1º Após baixar a TFS, abra a pasta e encontre a pasta src
====================================================================================
2º Abra a pasta, encontre a pasta dev-cpp encontrada dentro da pasta src
====================================================================================
3º Crie uma pasta chamada "Obj" dentro dessa pasta
====================================================================================
4º Beleza, agora vamos abrir o Dev C++
====================================================================================
5º Com o Dev C++ aberto, vamos abrir o projeto da TFS 0.4
====================================================================================
6º Irá aparecer uma caixa para você escolher qual arquivo você irá procurar. Então vamos naquela pasta dev-cpp e encontraremos o "TheForgottenServer.dev" e selecionaremos ele.
====================================================================================
7º Irá carregar muitos arquivos que apareceram em uma lista, não recomendo vocês mexerem neles se não tiver um conhecimento necessário para tal.
====================================================================================
8º Agora vamos no Menu Project -> Project Options, ou apertar Alt + P
====================================================================================
9º Feito isso, vamos em Parameters e iremos adicionar algumas coisas em C++ compiler e em Linker
====================================================================================
10º Em C++ compiler coloque esses parâmetros
====================================================================================
11º Agora em Linker, coloque esses parâmetros
====================================================================================
12º Ainda em Project Options, vamos na aba Build Options e iremos escolher o Object file output directory e colocar aquela pasta "Obj" que criamos lá em cima
====================================================================================
13º Feito isso, irá ficar assim
====================================================================================
14º Agora pode dar Ok no Project Options
====================================================================================
15º Agora, vamos COMPILAR!!
Use o primeiro item (o que tem 4 janelinhas de cores diferentes) ou use Ctrl + F9
====================================================================================
16º Irá aparecer uma janela como essa aqui, fique tranquilo, está tudo normal!
====================================================================================
17º Ao terminar, aparecerá essa janela e a sua TFS 0.4 está compilada.
====================================================================================
18º Voltamos naquela pasta dev-cpp e encontraremos esse arquivo, ele é a sua Distro.
====================================================================================
19º Agora só jogar ela na sua datapack e utilizá-la. (Não esqueça de adicionar as libs)
====================================================================================
É isso pessoal, espero que tenham conseguido, se houver alguma dúvida, vai deixar aqui nos comentários que vou tentar ir respondendo...