Histórico de Curtidas
-
joaobenhur recebeu reputação de Cat em [sugestões] Criação de um novo Castle War TFS 1.XFazer um evento CASTLE WAR diferente seria bem legal dicas :
-Seria legal se ao entrar no castle você teria 3 vidas e se morrer 3x seria kickado do evento.
-A area do mapa seria feita em formato de cruz a sim os player poderia vim por 4 lados respaw dos times seria (Team Red pelo norte e direita) (Team Blue sul e esquerda)
os 2 times teria que correr pra chegar no centro onde teria um lugar quadrado com escadas por todos os lados o espaço do meio seria grande para os player não ficar só nas escadas na (ESQUERDA TERIA CRYSTAL DO TIME BLUE E DIREITA RED) a sim os players da esquerda da direita teria que avançar e os player do sul e norte teria tentar impedir o avanço.
-Teria tempo limite para acabar o evento oque mais deu dano na estatua ganharia e os 2 player que fizeram mais kill ganharia recompesa extra.
-Recompesa time ganhador ganharia 5% ou 10% a mais de XP por 24horas. Os 2 player com mais kill que seria um de cada time ganharia uma Estatua com o nome Top kill Evento Castle.
-
joaobenhur deu reputação a Wesleyt10 em [NOSTALGIA] OLD ENFORCED WAR 8.6 COM TIMES CHANGE MAPOlá galera!
Estive procurando um ot de war para jogar, mas hoje em dia nao vi qualidade nos ots, e queria sentir aquela nostalgia de antigamente dos ots war que trocavam mapa e dividiam times para war!
decidi eu mesmo criar um! pois eu procurei e nao achei nenhuma base que fosse assim!
nao implantei erros propositais para crashar ou algo do tipo , os arquivos estao bem limpos como sao poucos scripts é facil checar se há bugs! pois usei a base original do Mattyx na GitHub.
está 100% estavel
entao vamos la!
OQUE POSSUI?
DOWNLOAD LINK
SCAN VIRUSTOTAL
quem colocar online manda pm pra tirar um x1 ?!
-
joaobenhur deu reputação a Tricoder em [TFS 1.x] AutoLoot SystemSCREENSHOT
http://3.1m.yt/Zwo99Sdx.png
http://4.1m.yt/oG_cwli8u.png
______________________________________________ COMANDOS
!autoloot add, itemId ou name -- Adicionando um item na lista !autoloot remove, itemId or name -- Remover um item da lista !autoloot show -- Mostrar a lista do autoLoot !autoloot clear -- Limpar a lista do autoLoot ______________________________________________ SCRIPT data/global.lua
-- AutoLoot config AUTO_LOOT_MAX_ITEMS = 5 -- Reserved storage AUTOLOOT_STORAGE_START = 10000 AUTOLOOT_STORAGE_END = AUTOLOOT_STORAGE_START + AUTO_LOOT_MAX_ITEMS -- AutoLoot config end talkactions/talkactions.xml
<talkaction words="!autoloot" separator=" " script="autoloot.lua"/> talkactions/scripts/autoloot.lua
function onSay(player, words, param) local split = param:split(",") local action = split[1] if action == "add" then local item = split[2]:gsub("%s+", "", 1) local itemType = ItemType(item) if itemType:getId() == 0 then itemType = ItemType(tonumber(item)) if itemType:getId() == 0 then player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "There is no item with that id or name.") return false end end local itemName = tonumber(split[2]) and itemType:getName() or item local size = 0 for i = AUTOLOOT_STORAGE_START, AUTOLOOT_STORAGE_END do local storage = player:getStorageValue(i) if size == AUTO_LOOT_MAX_ITEMS then player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "The list is full, please remove from the list to make some room.") break end if storage == itemType:getId() then player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, itemName .." is already in the list.") break end if storage <= 0 then player:setStorageValue(i, itemType:getId()) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, itemName .." has been added to the list.") break end size = size + 1 end elseif action == "remove" then local item = split[2]:gsub("%s+", "", 1) local itemType = ItemType(item) if itemType:getId() == 0 then itemType = ItemType(tonumber(item)) if itemType:getId() == 0 then player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "There is no item with that id or name.") return false end end local itemName = tonumber(split[2]) and itemType:getName() or item for i = AUTOLOOT_STORAGE_START, AUTOLOOT_STORAGE_END do if player:getStorageValue(i) == itemType:getId() then player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, itemName .." has been removed from the list.") player:setStorageValue(i, 0) return false end end player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, itemName .." was not founded in the list.") elseif action == "show" then local text = "-- Auto Loot List --\n" local count = 1 for i = AUTOLOOT_STORAGE_START, AUTOLOOT_STORAGE_END do local storage = player:getStorageValue(i) if storage > 0 then text = string.format("%s%d. %s\n", text, count, ItemType(storage):getName()) count = count + 1 end end if text == "" then text = "Empty" end player:showTextDialog(1950, text, false) elseif action == "clear" then for i = AUTOLOOT_STORAGE_START, AUTOLOOT_STORAGE_END do player:setStorageValue(i, 0) end player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "The autoloot list has been cleared.") else player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Use the commands: !autoloot {add, remove, show, clear}") end return false end creaturescripts/creaturescripts.xml
<event type="kill" name="AutoLoot" script="autoloot.lua" /> creaturescripts/scripts/autoloot.lua
local function scanContainer(cid, position) local player = Player(cid) if not player then return end local corpse = Tile(position):getTopDownItem() if not corpse then return end if corpse:getType():isCorpse() and corpse:getAttribute(ITEM_ATTRIBUTE_CORPSEOWNER) == cid then for i = corpse:getSize() - 1, 0, -1 do local containerItem = corpse:getItem(i) if containerItem then for i = AUTOLOOT_STORAGE_START, AUTOLOOT_STORAGE_END do if player:getStorageValue(i) == containerItem:getId() then containerItem:moveTo(player) end end end end end end function onKill(player, target) if not target:isMonster() then return true end addEvent(scanContainer, 100, player:getId(), target:getPosition()) return true end creaturescripts/scripts/login.lua
player:registerEvent("AutoLoot") ______________________________________________ CRÉDITOS
Printer -
joaobenhur deu reputação a TioSlash em Cliente 11 próprioOlá amigo,
existem algumas etapas a fazer antes com o client 11.
Não é apenas editar ele com o notepad++.
Você precisa também usar um arquivo que vou detalhar abaixo:
1° Etapa:
Você tem que possuir o arquivo login.php dentro do seu html (linux) ou www (windows)
(caso não tenha copie esse abaixo no spoiler, crie um arquivo login.php e adicione o codigo dentro dele. depois coloque o arquivo dentro da pasta html ou www)
2° Etapa:
Você vai abrir o CLIENT 11 com o NOTEPAD++
Vai da um CTRL + H e em LOCALIZAR você coloca
BC27F992A96B8E2A43F4DFBE1CEF8FD51CF43D2803EE34FBBD8634D8B4FA32F7D9D9E159978DD29156D62F4153E9C5914263FC4986797E12245C1A6C4531EFE48A6F7C2EFFFFF18F2C9E1C504031F3E4A2C788EE96618FFFCEC2C3E5BFAFAF743B3FC7A872EE60A52C29AA688BDAF8692305312882F1F66EE9D8AEB7F84B1949 Em SUBSTITUIR POR você coloca
9B646903B45B07AC956568D87353BD7165139DD7940703B03E6DD079399661B4A837AA60561D7CCB9452FA0080594909882AB5BCA58A1A1B35F8B1059B72B1212611C6152AD3DBB3CFBEE7ADC142A75D3D75971509C321C5C24A5BD51FD460F01B4E15BEB0DE1930528A5D3F15C1E3CBF5C401D6777E10ACAAB33DBE8D5B7FF5 Pronto, você acabou de trocar a RSA KEY
Agora vamos mudar o endereço de login do Client 11.
Obs.: Tenha em mente que o numero de CARACTERES que tem no client tem que permanecer (53), caso o seu não possua a mesma quantidade você vai preencher com NULL conforme abaixo:
Dê um CTRL + L e procure por:
https://secure.tibia.com/services/clientservices.php Essa Linha tem 53 caracteres!
Logo, caso o seu nao possua a mesma quantidade você terá que incluir alguns NULLs
vamos usar como exemplo o ip localhost 127.0.0.1 e vamos substituir o site do tibia por:
http://127.0.0.1/login.php Ao substituir essa linha, observe que só tem 27 caracteres, ou seja, tem 26 caracteres a menos do que a linha original.
Dessa forma teremos que adicionar 26 caracteres NULL
Para adicionar vá em
Plugins>Converter>Conversion Painel
Na linha 19243 você irá começar a adicionar os NULLS
Nessa situação, iremos adicionar 26 caracteres
Após adicionar os caracteres, salve o arquivo e ele vai entrar tranquilamente no seu servidor xD
espero ter ajudado.
Caso queira utilizar o client que usei nesse tutorial baixe através do link abaixo. (com os dados originais do tibia)
Client Tibia 11.49.5884
-
joaobenhur deu reputação a Johncore em TFS 1.3 / Otx3 | Otg Server Global - 11x - 12.40 (SPRITES 13.40) (Updates Diarios)Otg Server Global
Somos o Otg Server, projeto baseado no TFS 1.3 e OTX3.2,
Se trata de um servidor baseado no GLOBAL MAP RL.
Aqui você encontrará baixo uso de recursos como CPU / memoria, prezamos muito por estabilidade e atualizações constantes.
Agradecemos primeiramente ao Tibiaking pela oportunidade nos concedida,
somos parceiros oficiais do Tibiaking.com melhor Forum Brasileiro!
Especificações :
- Global Map FULL RL
- Maioria das Quests com Quest Log 100%
- Anti Rollback + Auto Restart 100%
- Source Otimizada (baixo consumo de CPU e memoria)
- Sem Bug de Clonar dinheiro (Npcs Refeitos
- Exercise Training 100%
- Raids 100%
- Monstros 100%
Imagens :
THAIS TEMPLE
FALCONS
NEW ASURAS
WZ 4,5,6
Downloads :
PROJETO OFFICIAL GITHUB:
https://github.com/otg-br/global-11x
TUTORIAL PARA COMPILAÇÃO:
https://github.com/otg-br/global-11x/wiki
EXE compilado WIN11 64bits:
https://github.com/otg-br/global-11x/blob/main/Executavel compilado win11 64bits.rar
GRUPO WHATSAPP OTG SERVER:
https://chat.whatsapp.com/EWV3dVvS6nt1em7q23FGu7
Créditos :
The Forgotten Server
Otland
Mark Samman
Mattyx Otx
Erick Nunes
Johncore
Otg Server contribuidores
OTX contribuidores
Otservbr
Leu
Marcomoa
Marson Schneider
Leandro Baldissera
-
joaobenhur recebeu reputação de luanluciano93 em [sugestões] Criação de um novo Castle War TFS 1.XFazer um evento CASTLE WAR diferente seria bem legal dicas :
-Seria legal se ao entrar no castle você teria 3 vidas e se morrer 3x seria kickado do evento.
-A area do mapa seria feita em formato de cruz a sim os player poderia vim por 4 lados respaw dos times seria (Team Red pelo norte e direita) (Team Blue sul e esquerda)
os 2 times teria que correr pra chegar no centro onde teria um lugar quadrado com escadas por todos os lados o espaço do meio seria grande para os player não ficar só nas escadas na (ESQUERDA TERIA CRYSTAL DO TIME BLUE E DIREITA RED) a sim os players da esquerda da direita teria que avançar e os player do sul e norte teria tentar impedir o avanço.
-Teria tempo limite para acabar o evento oque mais deu dano na estatua ganharia e os 2 player que fizeram mais kill ganharia recompesa extra.
-Recompesa time ganhador ganharia 5% ou 10% a mais de XP por 24horas. Os 2 player com mais kill que seria um de cada time ganharia uma Estatua com o nome Top kill Evento Castle.
-
joaobenhur deu reputação a luanluciano93 em [TFS 1.3 10.98] ALUNIA 2020 - Styller CustomALUNIA 2017 - CUSTOM YOUROTS
Olá pessoal, hoje venho apresentar meu projeto open para vocês. Sou muito fã do mapa Yourots, sempre em horas vagas procurava joga-lo, para quem não conhece: é um servidor estilo baiak com mais RPG, e como tenho me interessado por versões mais atuais, resolvi criar um yourots custom (alunia OT) seguindo as ultimas atualizações do TFS. O projeto está sendo desenvolvido no github (projeto github) onde posto atualizações diárias (changelog). Vocês podem postar dúvidas, erros e qualquer outra coisa aqui no tópico ou criar um issue no github.
# Informações do Servidor e Sistemas:
→ Versão: 10.98 (seguindo as atualizações do TFS 1.3).
→ War System, Addons System, Mounts System, Market System e Training OFF.
→ Vip System, Clean Database (players, accounts e houses inativas), Reward Level System, Task System, Arena PVP.
→ Achievements System (adiconado, falta configurar)
→ Marriage System (pendente)
→ Quest Log (pendente)
→ Refinamento System (pendente)
→ Cassino System (pendente)
# Eventos do Servidor
→ Duca Evento
→ Zumbi Evento
→ BattleField Evento
→ War Anti-Entrosa, CastleWar, Capture The Flag, Gran Tower, Hour Kill, War of Emperium, Dota, Coliseum, Survival Evento (pendentes).
# Quests
→ Demon Helmet, Annihilator, Pist of Inferno, Demon Oak, Big Quest ...
Download
Créditos:
• GOD Bon (mapa yourots)
• TFS team (pela engine do servidor)
• @leoloko12 (mapa styller)
• @Jobs (correções no servidor)
É isso pessoal, espero que gostem
-
joaobenhur deu reputação a Dwarfer em (Resolvido)Alguém poderia fazer um Scripts para [TELEPORT TFS 1.2]@joaobenhur
Não, brother. As posições 1 e 2 da área que devem ser configuradas é como a imagem mostra:
-
joaobenhur deu reputação a Dwarfer em (Resolvido)Alguém poderia fazer um Scripts para [TELEPORT TFS 1.2]Em movements/scripts, crie um arquivo.lua:
Em movements.xml adicione a tag: <movevent event="StepIn" actionid="ACTION_ID_DO_TELEPORT" script="NOMEDOSEUARQUIVO.lua" />
-
joaobenhur deu reputação a xWhiteWolf em Magnus ChallengerFala galera, hoje vim trazer o projeto pronto do Magnus Challenger pra vocês instalarem no servidor de vocês!
Pra quem não conhece é um sistema de Tasks baseado no Zezenia onde você pode escolher entre tasks de matar monstros ou de coletar certos items para o npc Magnus, um guerreiro famoso da cidade que está atolado de tarefas e precisa da sua ajuda!
Peguei os aspectos que eu julguei serem os principais do modelo do Zezenia e editei com algumas coisas que eu achei que ficariam melhores.
Quem quiser pode ver um vídeo comentado de como o sistema funciona:
Dito isso vou ensinar vocês como instalar isso no server:
Pra começar vá em data\creaturescripts\scripts e procure login.lua, agora vá até o final do arquivo e antes do último return true coloque essas linhas abaixo
ainda em creaturescripts procure creaturescripts.xml e adicione essa linha junto com as outras que já estão lá (seguindo o padrão)
<!-- TASK SYSTEM --> <event type="kill" name="tasksystem" script="tasksystem.lua"/> Agora crie um arquivo em creaturescripts\scripts com o nome de tasksystem.lua e adicione o seguinte à ele:
Terminada a parte da contagem de kill vamos ao NPC em si.
Crie um arquivo chamado Magnus.xml em data\npc e coloque isso dentro dele:
Agora em data\npc\scripts crie um arquivo chamado zezeniaa.lua e adicione esse conteúdo dentro do arquivo:
~~~~~~~~~~~~~~~~ FEITO ISSO ESTÁ TERMINADO ~~~~~~~~~~~~~~~~~~
Agora aprendendo a configurar:
No tasksystem vc pode editar isso daqui:
Eu fiz um sistema onde se vc estiver em party com alguém e a pessoa matar os bixos conta como se você tivesse matado; Assim incentiva o pessoal a ir numa cave de Dragon e ao invés de matar quem está lá pra ficar sozinho na cave, eles vão chamar party pra fazerem a task juntos.. assim fazer amigos fica mais fácil e com maiores laços é maior a chance do povo não abandonar o seu server.
Apenas digite "true" ou "false" pra ativar/desativar esse sistema e em baixo temos a distancia máxima pro monstro estar do cara que está fazendo a task pra contar o kill. Se a distancia entre o monstro e a pessoa for maior que 7 não vai contar pra ele a kill.
No zezeniaa.lua as coisas que dão pra configurar são maiores mas são igualmente simples:
Toda vez que vc pedir uma task short (curta) vc vai ter de 100 a 400 monstros pra matar, ele gera um número de 0 a 6 e multiplica por 5 e soma com os 100 iniciais.. o mesmo vale pra todos os outros valores.
levelcollect é o level mínimo pra fazer tasks do tipo collect.
time é o tempo em segundos que você vai ficar sem poder falar com o npc caso desista de alguma task, o padrão é 8 * 60 * 60 (8 horas)
bonus é por quanto vai multiplicar caso vc permita que o npc escolha aleatoriamente entre todas as opções.. o padrão é 20% de bonus (1.2)
multiplicador é uma coisa que eu adicionei pra ficar mais fácil mexer na fórmula sem cometer cagadas, se vc tá ganhando 10% de exp e quer ganhar 80% é só colocar 8 no multiplicador.
Isso daqui é o banco de dados principal do sistema de kill, toda vez que vc escolher uma task do tipo fácil, médio, dificil ele vai acessar essas tabelas contendo o nome das criaturas.. vc pode facilmente adicionar novos nomes, o npc já está programado pra lidar com isso, apenas siga o padrão e mantenha sempre o último sem vírgula!
Ex: adicionando Morgaroth na tabela de hard
local hard = { [1] = "Giant Spider", [2] = "Dragon Lord", [3] = "Grim Reaper", [4] = "Demon", [5] = "Crystal Spider", [6] = "Demon Skeleton", [7] = "Juggernaut", [8] = "Destroyer", [9] = "Hand of Cursed Fate", [10] = "Morgaroth" } atente-se também pra não repetir o número no index.. se o anterior era [9] use [10].
O restante das tabelas são separadas para o banco de dados das tasks de collect:
segue a mesma lógica da de kill só que aqui você tem o id dos itens que serão usados... aquela count não tem nada a ver com o item pois ele vai gerar tanto o item aleatoriamente quanto à count;
Ex:
[1] = {id = 5880, count = 20}, -- iron ore isso não significa que se cair iron ore (id 5880) irá cair sempre 20.. até porque eu poderia escolher uma task long e easy e pegar a task de trazer até 50 iron ores, apenas tente manter os padrões que são os intervalos definidos.
No easy ele varia de 10 a 20, no medium ele varia de 20 a 35 e no hard de 40 a 50.
Espero que vocês tenham curtido, é um sistema grande mas bem simples de se mexer... se tiverem quaisquer problemas podem comentar aqui. Deu trabalho fazer isso então se você gostou deixe o seu comentário aí e o seu "Gostei" que vai me incentivar a trazer mais coisas desse tipo pra cá. Abraços do lobo.
PS: Pra sumonar o npc digite com o GOD: /n Magnus ou coloque ele pelo map editor.
-
joaobenhur deu reputação a Wise em (Resolvido)Annihilator Questfunction isOnSameFloor(fromPos, toPos) return fromPos.z == toPos.z and true or false end function isEven(arg) return arg % 2 == 0 and true or false end function getMiddlePos(fromPos, toPos) if not isOnSameFloor(fromPos, toPos) then return false end local middle = {x = 0, y = 0, z = 0} middle.x = isEven(fromPos.x + toPos.x) and (fromPos.x + toPos.x)/2 or math.floor((fromPos.x + toPos.x)/2) + 1 middle.y = isEven(fromPos.y + toPos.y) and (fromPos.y + toPos.y)/2 or math.floor((fromPos.y + toPos.y)/2) + 1 middle.z = fromPos.z or toPos.z return middle end function getDistanceRadius(fromPos, toPos) if not isOnSameFloor(fromPos, toPos) then return false end local distance = getDistanceBetween(fromPos, toPos) return isEven(distance) and (distance/2) or math.floor(distance/2) + 1 end function clearArea(middlePos, rangex, rangey) local final = {x=1126, y=1152, z=7} -- Posição onde será teleportado quando acabar o tempo for i = -rangex, rangex do for j = -rangey, rangey do pos = {x = middlePos.x + i, y = middlePos.y + j, z = middlePos.z} creature = getTopCreature(pos).uid if isMonster(creature) then doSendMagicEffect(getThingPos(creature), 14) doRemoveCreature(creature) elseif isPlayer(creature) then doSendMagicEffect(getThingPos(creature), 10) doTeleportThing(creature, final) end end end setGlobalStorageValue(sto, -1) return true end local t = { lvl = 100, entrada = { {x = 1125, y = 1152, z = 7} -- pos players }, saida = { {x = 1125, y = 1153, z = 8} -- pos para onde eles irão }, monstros = { {{x = 1121, y = 1153, z = 8}, "Demon"} -- defina pos dos montros e nomes } } function onUse(cid, item, fromPosition, itemEx, toPosition) local configure = { fromPos = {x=1121, y=1150, z=8}, -- posição superior esquerda do mapa, da area em que esta mapeado a area. toPos = {x=1129, y=1156, z=8}, -- posição inferior direita do mapa, da area em que esta mapeado a area. boss = "Demon" -- Aqui você bota o nome do monstro que você quer remover } local config = { position = {x=1126, y=1152, z=7}, -- Contagem position1 = {x=1121, y=1150, z=8}, -- Contagem position2 = {x=1121, y=1156, z=8}, -- Contagem position3 = {x=1129, y=1150, z=8}, -- Contagem position4 = {x=1129, y=1156, z=8}, -- Contagem fromPosition = {x=1121, y=1150, z=8}, toPosition = {x=1129, y=1156, z=8}, id = 1498, time = 1 -- tempo que o teleport ira sumir em minutos } local time = 60 local sto = 5973 local check = {} for _, k in ipairs(t.entrada) do local x = getTopCreature(k).uid if(x == 0 or isPlayer(x) and getPlayerLevel(x) < t.lvl) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Não tem 5 jogadores para quest ou os jogadores nos sqms não tem o level mínimo para a quest.") return true end if getGlobalStorageValue(sto) == 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Annihilaton está bloqueada. Aguarde até que seja liberada.") return true end table.insert(check, x) end for _, summon in pairs(t.monstros) do local creature = getTopCreature(summon[1]).uid doCreateMonster(summon[2], summon[1]) end for i, tid in ipairs(check) do doTeleportThing(tid, t.saida[i], false) doSendMagicEffect(t.saida[i], 10) doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945) end for i = 1,time do formula = time - 1*i addEvent(doSendAnimatedText, i*1000, config.position, formula, TEXTCOLOR_RED) addEvent(doSendAnimatedText, i*1000, config.position1, formula, TEXTCOLOR_RED) addEvent(doSendAnimatedText, i*1000, config.position2, formula, TEXTCOLOR_RED) addEvent(doSendAnimatedText, i*1000, config.position3, formula, TEXTCOLOR_RED) addEvent(doSendAnimatedText, i*1000, config.position4, formula, TEXTCOLOR_RED) end setGlobalStorageValue(sto, 1) local rx = getDistanceRadius(configure.fromPos, configure.toPos) addEvent(clearArea, config.time * 60 * 1000, getMiddlePos(configure.fromPos, configure.toPos), rx, rx) return true end
-
joaobenhur deu reputação a xWhiteWolf em New Library v. 1.2Fala galera, hoje vim trazer pra vocês uma nova biblioteca de funções que eu venho desenvolvendo, pretendo ir atualizando esse tópico constantemente sempre adicionando funções novas e explicando a utilização delas. Algumas funções que eu coloquei aqui estão presentes na OTAL também, porém algumas eu fiz pequenas correções de forma que essa lib poderia facilmente substituir a OTAL sem grandes problemas (pelo menos se você utilizava apenas as funções básicas da otal)
Todas as funções que não tem -- nome do autor do lado dela foram feitas por mim, xWhiteWolf ou Night Wolf (NW). O restante delas são créditos dos devidos autores, apenas coloquei pois considero funções vitais no server de cada um. Crie um arquivo em data/lib chamado 075 - White Wolf Functions.lua e coloque o seguinte código dentro:
Agora eu vou explicar oque cada função faz porque de nada adianta lançar uma lib e não explicar oque ela faz não é mesmo? hahaha
Obs inicial: quando uma função tiver em seus parametros um [] significa que oque está dentro do colchetes não é um parâmetro obrigatório.
Como usar: doShowTimeByPos(cid, getCreaturePosition(cid), 20, 20)
Irá fazer uma contagem regressiva na posição que o player se encontra começando de 20 e mandando a mensagem na mesma cor da fala dos monstros.
Essa função é bem útil em actions/spells para fazer contagem de tempo em runas como a magic wall e ver quanto tempo falta pra magic wall sumir)
Obs: Espero que ajude bastante pessoas a entender sobre funções, eu utilizei cid como o principal uid das funções nos exemplos mas você pode muito bem utilizar outros uids, fica a critério seu.
Qualquer dúvida comentem abaixo que eu vou tentar ajudar da melhor maneira.
Ahhh, isso daí foi testado em 8.54 mas deve funcionar em quase todas as versões que tenham as funções básicas do TFS.
EDIT: Pessoal, agora é sério, essa lib tem fácil umas 600 linhas, das quais umas 500 eu devo ter codado sozinho (na mão, linha por linha). Eu tive todo o trabalho de testar cada uma delas e oque eu peço é o mínimo de gratidão e respeito. Se eu te ajudei clique em Gostei, se você tiver alguma dúvida eu to me colocando a disposição de responder qualquer coisa relacionada ao tópico, mesmo que você não saiba nem oque é uma lib apenas venha aqui e escreva sua dúvida.
EDIT 2: Duas novas funções adicionas, espero que gostem!
EDIT 3: Três novas funções adicionadas juntamente com suas respectivas explicações.
-
joaobenhur deu reputação a MySticaL em [Action] Script QuestScript Quest:
--[[ Script: Exemplo de Quest Autor: MySticaL Email: [email protected] ]] function onUse(cid, item, frompos, item2, topos) -- Não mecha. storage = 938312 -- Storage a cada quest que for criada aumente um numero da storage pra qnd vc pegar o baú de outra quest ñ aparecer que vc já fez. item = 2160 -- Id do item ira ganhar. quantidade = 1 -- Quantidade ira ganhar. level = 5 -- Level que precisa pra fazer. if getPlayerLevel(cid) >= level and getPlayerStorageValue(cid,storage) == -1 then -- Não mecha. doPlayerSendTextMessage(cid,25,"Você ganhou um pouco de dinheiro") -- Mensagem que aparecera quando ganhar o item. doPlayerAddItem(cid, item, quantidade) -- Não mecha. setPlayerStorageValue(cid,storage,1) -- Não mecha. elseif getPlayerLevel(cid) <= level then -- Não mecha doPlayerSendTextMessage(cid,25,"Você precisa ser level 5 ou mais.") -- Mensagem que ira aparecer se o player tiver menos level que o necessario. elseif getPlayerStorageValue(cid,storage) >= 1 then -- Não mecha. doPlayerSendTextMessage(cid,25,"Você já fez está quest") -- Quando tentar pegar mais de uma vez o baú. end return true end Actions.xml
<action actionid="3123" event="script" value="script.lua"/> Obs: O actionid="3123" é o que você deve botar no item no Remeres Map Editor
Caso você queria criar outra quest aumente a storage no script e o id no actions.xml !
Como configurar ?
R- \/
================================================================================================================================
storage = 938312 -- Storage a cada quest que for criada aumente um numero da storage pra quando você for pegar o baú de outra quest não aparecer que você já fez.
================================================================================================================================
item = 2160 -- Id do item ira ganhar.
======================================================
quantidade = 1 -- Quantidade ira ganhar.
======================================================
level = 5 -- Level que precisa pra fazer.
======================================================
Script bem simples mais irá ajudar alguns membros.
Rep não cai o dedo
Não sei muito sobre script.
100% Créditos meu caso for postar em outro lugar deixe os créditos para min !
Desculpem o tópico mal arrumado
-
joaobenhur deu reputação a Stigal em [Tutorial] Mudando a Versão Do MapaOlá Tibianos,
Venho "mostrar" para vocês como se muda a verção do mapa... pois vejo que é freequente as duvidas sobre esse assunto.
Juntamente iria fazer um video, maaasss fico uma merda e não deu :x
Vamos lá!
Menu:
» Download;
» Tutorial;
» Possiveis Erros.
Download Remere's Map Editor, clicando aqui você entra no site official onde se encontra o download da versão atual ou pretendida para uso.
Abra o RME e vá em Map » Properties... Ctrl-P <#imagem abaixo#>
Na parte Client Version <#imagem abaixo#> você coloca para qual versão você deseja mudar seu mapa
Clique em Ok
Irá aparecer uma mensagem <#imagem abaixo#>, basta clica em Sim
Aviso: Pode dar este erro "as vezes"
"Could not locate Tibia.dat and/or Tibia.spr, please navigate to your Tibia 8.50 installation folder."
Esse erro ocorre pois o RME não encoutrou o Tibia.dat e/ou Tibia.spr da respectiva versão do mapa, para arrumar, basta clicar em Ok e selecionar o diretório onde está instalado da versão.
Espero ter ajudado os "pendentes" e irei continuar postando tutoriais nessa minha area.
Um abraço a todos.
Atenciosamente, Stigal.