Jump to content
Close

Search the Community

Showing results for tags 'Biblioteca/Função'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Community
    • Rules
    • Portal
    • Resources
    • Commerce
    • Clubs
  • OTServers
    • Discussion
    • Support
    • Tutorial
    • Download
    • Code Development
    • Contests and Events
    • Form Team
    • Advertise your Server
  • Tibia and Bots
    • Discussion
  • Others
    • Playground (Off-topic)
    • Other Games
    • Advertising
    • Graphics and Design
    • Development and Programming
  • League of Legends's Geral
  • League of Legends's Suporte
  • Nto New Season's Tópicos
  • Fakes's Fakes
  • Tibia's Geral
  • Tibia's Notícias
  • Tibia's Media
  • Tibia's Life Thread
  • Computação's Geral
  • Computação's Dicas e Tutoriais
  • Computação's Suporte
  • Roleplaying's Roleplaying
  • Academia de Mapping's Quadro da Clopin
  • Academia de Mapping's Dev Area
  • Academia de Mapping's Quadro do Nolis
  • Academia de Mapping's Quadro do Namikaze
  • Styller's Tópicos

Calendars

  • Official Calendar
  • OTServs Calendar
  • Several Calendars

Product Groups

  • Advertisements in Top
  • Advertisements In Signatures
  • Advertisements in Topics
  • Others Advertisements

Categories

  • Sales Section
    • Scripting Sales
    • Codes Sales
    • Mapping Sales
    • Websites Sales
    • Design/Sprites Sales
    • Bots Sales
  • Look Jobs
  • Looking for Freelancers
  • Team Formation

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Localization


My character


Favorite OTServ


Bot preferred


Interests

Found 50 results

  1. Como funciona esse sistema? R-> Simples caso seu otServ for para todos os players, de todos continentes e você não queira deixar as funções em lua apenas em uma língua, você pode utilizar esse sistema. Como usar? R-> Após o sistema estar instalado 100%, vai ter 3 comandos: !lang en (setar a linguagem para english), !lang pt (setar a linguagem portuguese) & !lang es (setar a linguagem espanõl). Vamos começar, vai em data/lib/ e crie um arquivo chamado lang system.lua e coloque isto dentro: function getPlayerLanguage(cid) local Lang = db.getResult("SELECT `language` FROM `accounts` WHERE `id` = " .. getPlayerAccountId(cid) .. " LIMIT 1") if Lang:getID() ~= LUA_ERROR then local langid = Lang:getDataInt("language") Lang:free() return langid end return LUA_ERROR end function doPlayerSetLanguage(cid, new) local acc = getPlayerAccountId(cid) if new == 2 then db.executeQuery("UPDATE `accounts` SET language = 2 WHERE `id` = " .. acc) elseif new == 1 then db.executeQuery("UPDATE `accounts` SET language = 1 WHERE `id` = " .. acc) else db.executeQuery("UPDATE `accounts` SET language = 0 WHERE `id` = " .. acc) end end Ainda em data/lib encontre o arquivo 000-constant.lua e coloque ao final dele isto: ENGLISH = 2 SPANISH = 1 PORTUGUES = 0 Agora execute este código na sua SQL: ALTER TABLE `accounts` ADD `language` INT( 11 ) NOT NULL DEFAULT '0' Pronto, o sistema está pronto agora vamos criar um comando para que troque a linguagem, vá em data/talkactions/scripts e crie um arquivo chamado lang.lua e coloque isto dentro: function onSay(cid, words, param) if(param == '') then return true end if(param == 'en') then if getPlayerLanguage(cid) == 2 then doPlayerSendTextMessage(cid, 20, "[Language System (Beta)] Your language is alredy set to english.") return true else doPlayerSendTextMessage(cid, 27, "[Language System (Beta)] You have set english as your language.") doPlayerSetLanguage(cid, 2) return true end end if(param == 'pt') then if getPlayerLanguage(cid) == 0 then doPlayerSendTextMessage(cid, 20, "[Language System (Beta)] Sua língua já está definida como português.") return true else doPlayerSendTextMessage(cid, 27, "[Language System (Beta)] Você definiu o português como sua língua.") doPlayerSetLanguage(cid, 0) return true end end if(param == 'es') then if getPlayerLanguage(cid) == 1 then doPlayerSendTextMessage(cid, 20, "[Language System (Beta)] Su lengua ya esta definida como español.") return true else doPlayerSendTextMessage(cid, 27, "[Language System (Beta)] Tu definistes el español como tu lengua.") doPlayerSetLanguage(cid, 1) return true end end end E em data/talkactions abra o talkactions.xml e coloque está tag: <talkaction log="yes" words="!lang" event="script" value="lang.lua"/> Vou dar um exemplo de como usa-la em .lua: if getPlayerLanguage(cid) == 2 then doPlayerSendTextMessage(cid, 25, "This message will be displayed in English if the language of the player is in -en!") end if getPlayerLanguage(cid) == 0 then doPlayerSendTextMessage(cid, 25, "Está mensagem será exibida em português se a linguagem do jogador estiver em -pt!") end if getPlayerLanguage(cid) == 1 then doPlayerSendTextMessage(cid, 25, "Usted mensaje se mostrará en Espanõl si el jugador está en el lenguaje -es!") end Outro Exemplo: function onLogin(cid) local langmsg = { [ENGLISH] = {"This message will be displayed in English if the language of the player is in -en!"} [SPANISH] = {"Usted mensaje se mostrará en Espanõl si el jugador está en el lenguaje -es!"}, [PORTUGUES] = {"Está mensagem será exibida em português se a linguagem do jogador estiver em -pt!"}, } doPlayerSendTextMessage(cid, 25, langmsg[getPlayerLanguage(cid)][1]) return true end Pronto, agora o sistema está perfeito, os comandos estão no começo do tópico em "Como usar?" créditos: Acubens Drazyn1291 MySticaL
  2. Fala rapeize, eu me propus um desafio de criar uma forma de transformar uma string em números que possam ser anexados no storage. Basicamente isso resolve o problema dos TFS anteriores de não conseguir salvar nomes de personagens no storage sem ter que fazer source editing. PS: É óbvio que é mais fácil fazer source editing, mas o desafio era esse e como não é todo mundo que tem source tb pode ser bastante útil. Eu não fechei o código certinho em funções, mas pretendo fazer em breve (agora preciso dormir) e aí eu edito o tópico aqui. Nos testes q eu fiz ele conseguiu serializar e deserializar 5 mil caracteres em 0,01 segundo o que provavelmente faz dele o melhor serializador do gênero xD Limitações: Ele só funciona com um range bem específico de strings, se vc quiser serializar qualquer outra coisa procure um serializador na internet. Ele é capaz de processar tudo que tá dentro do retangulo vermelho Ele só funciona com NO MÁXIMO +- 8k de caracteres, se vc quiser mais que isso vai precisar trocar a função table.concat e talvez umas outras coisinhas O que ele faz: Transforma qualquer texto num numero, divide esse número em espaços de 32 bits e nas posições da memória consecutivas (no exemplo eu to usando uma tabela, mas poderia ser num storage, por ex). Depois ele ainda é capaz de retornar a string original a partir do serial gerado. Funcionamento: por incrivel q pareça a lógica é bem simples, pega o código ascii de cada caractere da string, subtrai 21 para deixar o numero menor (21 é o máximo que a gente consegue encurtar pq 32 - 21 é 11 e 127 - 21 é 106, aí se eu lê-se 10 eu não saberia dizer se é o código do espaço ou dos 5 ultimos ali da tabela) Os storages são int_32 então o maior valor q eu consigo colocar dentro de um storage é 2^31 - 1, aí tudo q eu faço é ir pegando os 10 ultimos numeros e vendo se eles cabem dentro desse limite máximo, se não couber eu pego os 9 ultimos, até caber dentro do limite. Aí eu jogo pra tabela e contabilizo quantas vezes eu to fazendo isso (isso vai ser importante depois qnd formos inserir ou pegar do storage) Como eu já li os lines ultimos numeros da string, eu posso retirar eles e refazer o processo até não restar mais nada. No final dentro da tabela tb vc vai ter no i o numero q vc soma no storage e no v o valor que deve ir pro storage. Pra deserializar o processo é parecido, primeiro eu percorro a tabela concatenando os numeros na ordem inversa e depois vou vendo 2 a 2 se o numero é menor que 11 (nosso menor código ascii que representaria o espaço, lembrando que removemos 21 para encurtar). Se ele for menor então significa que estamos lidando com um dos ultimos numeros da tabela (10X), nesse caso temos que ler 3 numeros ao invés de só 2. Depois de passar tudo pra caractere e concatenar, nos é retornado a string inicial. Código: Quem quiser testar é só modificar a variável entrada pra qualquer texto que vc quiser e dar run. O resultado aparece na tela a direita. https://repl.it/repls/LongtermVioletTakin
  3. MagicEffects CONST_ME_FIRST = 1, CONST_ME_DRAWBLOOD = CONST_ME_FIRST, CONST_ME_LOSEENERGY = 2, CONST_ME_POFF = 3, CONST_ME_BLOCKHIT = 4, CONST_ME_EXPLOSIONAREA = 5, CONST_ME_EXPLOSIONHIT = 6, CONST_ME_FIREAREA = 7, CONST_ME_YELLOW_RINGS = 8, CONST_ME_GREEN_RINGS = 9, CONST_ME_HITAREA = 10, CONST_ME_TELEPORT = 11, CONST_ME_ENERGYHIT = 12, CONST_ME_MAGIC_BLUE = 13, CONST_ME_MAGIC_RED = 14, CONST_ME_MAGIC_GREEN = 15, CONST_ME_HITBYFIRE = 16, CONST_ME_HITBYPOISON = 17, CONST_ME_MORTAREA = 18, CONST_ME_SOUND_GREEN = 19, CONST_ME_SOUND_RED = 20, CONST_ME_POISONAREA = 21, CONST_ME_SOUND_YELLOW = 22, CONST_ME_SOUND_PURPLE = 23, CONST_ME_SOUND_BLUE = 24, CONST_ME_SOUND_WHITE = 25, CONST_ME_BUBBLES = 26, CONST_ME_CRAPS = 27, CONST_ME_GIFT_WRAPS = 28, CONST_ME_FIREWORK_YELLOW = 29, CONST_ME_FIREWORK_RED = 30, CONST_ME_FIREWORK_BLUE = 31, CONST_ME_STUN = 32, CONST_ME_SLEEP = 33, CONST_ME_WATERCREATURE = 34, CONST_ME_GROUNDSHAKER = 35, CONST_ME_HEARTS = 36, CONST_ME_FIREATTACK = 37, CONST_ME_ENERGYAREA = 38, CONST_ME_SMALLCLOUDS = 39, CONST_ME_HOLYDAMAGE = 40, CONST_ME_BIGCLOUDS = 41, CONST_ME_ICEAREA = 42, CONST_ME_ICETORNADO = 43, CONST_ME_ICEATTACK = 44, CONST_ME_STONES = 45, CONST_ME_SMALLPLANTS = 46, CONST_ME_CARNIPHILA = 47, CONST_ME_PURPLEENERGY = 48, CONST_ME_YELLOWENERGY = 49, CONST_ME_HOLYAREA = 50, CONST_ME_BIGPLANTS = 51, CONST_ME_CAKE = 52, CONST_ME_GIANTICE = 53, CONST_ME_WATERSPLASH = 54, CONST_ME_PLANTATTACK = 55, CONST_ME_TUTORIALARROW = 56, CONST_ME_TUTORIALSQUARE = 57, CONST_ME_MIRRORHORIZONTAL = 58, CONST_ME_MIRRORVERTICAL = 59, CONST_ME_SKULLHORIZONTAL = 60, CONST_ME_SKULLVERTICAL = 61, CONST_ME_ASSASSIN = 62, CONST_ME_STEPSHORIZONTAL = 63, CONST_ME_BLOODYSTEPS = 64, CONST_ME_STEPSVERTICAL = 65, CONST_ME_YALAHARIGHOST = 66, CONST_ME_BATS = 67, CONST_ME_SMOKE = 68, CONST_ME_INSECTS = 69, CONST_ME_DRAGONHEAD = 70, CONST_ME_ORCSHAMAN = 71, CONST_ME_ORCSHAMAN_FIRE = 72, CONST_ME_THUNDER = 73, CONST_ME_FERUMBRAS = 74, CONST_ME_CONFETTI_HORIZONTAL = 75, CONST_ME_CONFETTI_VERTICAL = 76, // 77-157 are empty CONST_ME_BLACKSMOKE = 158, CONST_ME_LAST = CONST_ME_BLACKSMOKE, ShootTypes CONST_ANI_NONE = 0, CONST_ANI_FIRST = 1, CONST_ANI_SPEAR = CONST_ANI_FIRST, CONST_ANI_BOLT = 2, CONST_ANI_ARROW = 3, CONST_ANI_FIRE = 4, CONST_ANI_ENERGY = 5, CONST_ANI_POISONARROW = 6, CONST_ANI_BURSTARROW = 7, CONST_ANI_THROWINGSTAR = 8, CONST_ANI_THROWINGKNIFE = 9, CONST_ANI_SMALLSTONE = 10, CONST_ANI_DEATH = 11, CONST_ANI_LARGEROCK = 12, CONST_ANI_SNOWBALL = 13, CONST_ANI_POWERBOLT = 14, CONST_ANI_POISON = 15, CONST_ANI_INFERNALBOLT = 16, CONST_ANI_HUNTINGSPEAR = 17, CONST_ANI_ENCHANTEDSPEAR = 18, CONST_ANI_REDSTAR = 19, CONST_ANI_GREENSTAR = 20, CONST_ANI_ROYALSPEAR = 21, CONST_ANI_SNIPERARROW = 22, CONST_ANI_ONYXARROW = 23, CONST_ANI_PIERCINGBOLT = 24, CONST_ANI_WHIRLWINDSWORD = 25, CONST_ANI_WHIRLWINDAXE = 26, CONST_ANI_WHIRLWINDCLUB = 27, CONST_ANI_ETHEREALSPEAR = 28, CONST_ANI_ICE = 29, CONST_ANI_EARTH = 30, CONST_ANI_HOLY = 31, CONST_ANI_SUDDENDEATH = 32, CONST_ANI_FLASHARROW = 33, CONST_ANI_FLAMMINGARROW = 34, CONST_ANI_SHIVERARROW = 35, CONST_ANI_ENERGYBALL = 36, CONST_ANI_SMALLICE = 37, CONST_ANI_SMALLHOLY = 38, CONST_ANI_SMALLEARTH = 39, CONST_ANI_EARTHARROW = 40, CONST_ANI_EXPLOSION = 41, CONST_ANI_CAKE = 42, CONST_ANI_TARSALARROW = 44, CONST_ANI_VORTEXBOLT = 45, CONST_ANI_PRISMATICBOLT = 48, CONST_ANI_CRYSTALLINEARROW = 49, CONST_ANI_DRILLBOLT = 50, CONST_ANI_ENVENOMEDARROW = 51, fonte: https://github.com/otland/forgottenserver/blob/master/src/const.h espero que ajude, abç
  4. Bom, eu estava cansado de ficar fazendo os cálculos para exibir as horas, minutos ou segundos quando faço algum script com cooldown. Então, eu criei essa função simples que converte o valor em segundos para hora, minuto e segundo. Exemplos: convertTime(60) retornará "1 minuto" convertTime(61) retornará "1 minuto e 1 segundo" convertTime(3600) retornará "1 hora" convertTime(3601) retornará "1 hora e 1 segundo" convertTime(3661) retornará "1 hora, 1 minuto e 1 segundo" E como eu sou babaca perfeccionista, o português também vem correto. Enfim, aqui está a função. function convertTime(a) if(type(tonumber(a)) == "number" and a > 0) then if (a <= 3599) then local minute = math.floor(a/60) local second = a - (60 * minute) if(second == 0) then return ((minute)..((minute > 1) and " minutos" or " minuto")) else return ((minute ~= 0) and ((minute>1) and minute.." minutos e " or minute.." minuto e ").. ((second>1) and second.." segundos" or second.." segundo") or ((second>1) and second.." segundos" or second.. " segundo")) end else local hour = math.floor(a/3600) local minute = math.floor((a - (hour * 3600))/60) local second = (a - (3600 * hour) - (minute * 60)) if (minute == 0 and second > 0) then return (hour..((hour > 1) and " horas e " or " hora e "))..(second..((second > 1) and " segundos" or " segundo")) elseif (second == 0 and minute > 0) then return (hour..((hour > 1) and " horas e " or " hora e "))..(minute..((minute > 1) and " minutos" or " minuto")) elseif (second == 0 and minute == 0) then return (hour..((hour > 1) and " horas" or " hora")) end return (hour..((hour > 1) and " horas, " or " hora, "))..(minute..((minute > 1) and " minutos e " or " minuto e "))..(second..((second > 1) and " segundos" or " segundo")) end end end Obs: se der algum bug com algum número, é só postar, não testei todas possibilidades (obviamente). Por fim, sei que fazer o horário no formato 00:00:00 ou retornar o valor de horas, minutos e segundos separadamente me pouparia metade do trabalho e, no segundo caso, deixaria mais fácil para controlar os dados, mas eu queria que viesse nesse formato mesmo. Anyway, espero que seja útil e poupe o trabalho de alguém.
  5. Offline Message by vankk Eu estava codando um sistema de Auction para o Aura, e precisou dessa função, e gostaria de compartilhar com vocês para caso vocês precisem também. Basicamente o script irá enviar uma message para um jogador contendo uma mensagem. Execute em seu phpMyAdmin essa query: CREATE TABLE `offline_message` ( `id` int(11) NOT NULL AUTO_INCREMENT, `player_name` varchar(64) NOT NULL, `message` TEXT NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (`player_name`) REFERENCES `players`(`name`) ON DELETE CASCADE ) ENGINE=MyISAM DEFAULT CHARSET=latin1 Em data/global.lua adicione function doSendOfflineMessage(targetName, message) db.query(string.format('INSERT INTO `offline_message` (player_name, message) VALUES (%s, %s)', db.escapeString(targetName), db.escapeString(message))) end function Player.checkOfflineMessage(self, playerName) local resultId = db.storeQuery(string.format('SELECT * FROM `offline_message` WHERE `player_name` = %s', db.escapeString(playerName))) if resultId ~= false then local message = result.getDataString(resultId, "message") local id = result.getDataString(resultId, "id") self:sendTextMessage(MESSAGE_INFO_DESCR, string.format('Offline Message:\n%s', message)) db.query(string.format('DELETE FROM `offline_message` WHERE `id` = %d', id)) end end Em data/creaturescripts/login.lua adicione essa linha em qualquer parte do código antes do return true: player:checkOfflineMessage(player:getName()) Para enviar uma mensagem para algum jogador é doSendOfflineMessage(playerName, message). Por exemplo: doSendOfflineMessage('Vankk', 'Aura é o melhor servidor baiak de todos os tempos. Parabéns.') Até a próxima . vankk.
  6. Nos últimos dias tive problemas para ler os dados de funções que retornam tabelas (não tinha acesso a source da função no momento para ir checar quais eram os dados presentes) então resolvi fazer essa função bem simples para printar os dados das tabelas no console. Ela faz basicamente a mesma coisa que a função print_r do PHP só que é um pouquinho menos organizada. Enfim, se souber a estrutura de uma tabela, vai entender o output dessa função e vai ser bem útil. function print_r(tabela) if type(tabela) ~= "table" then return tabela end local result = "{" for ind, x in pairs(tabela) do x = (type(x) == "table") and print_r(x) or x..(ind==#tabela and "\n" or ",\n ") result = result..'['..ind..'] = '..x end return result.."}" end Um exemplo de uso aleatório seria: - Tu está trabalhando com uma função que retorna um array e ele é assim: {7, 6, 5, 4, 3, {"hi", "bye"}, "great"} (só que tu não sabes, óbvio), então tu usa a função print_r na função que retorna esse array e o resultado será assim no console:
  7. Olá pessoal, venho mais uma vez trazer um tutorial simples, e tentar explicar tudo claramente, esse tutorial pode ficar grande dependendo do desenrolar dele, pois é um pack de tutoriais, então vou usar spoilers para ajudar na formatação do tópico. Nota: as informações usadas abaixo, podem ser tanto usadas com o nome, quanto com o número, e podem ser encontradas na pasta lib no arquivo 000-const https://pastebin.com/0FfPcg7y line4 Coordenadas: Tutorial feito e formatado por Caronte o + gato do fórum, avaliações do perfil são bem-vindas. Explicando: doMoveCreature(cid, direction): Serve para mover tanto o player quanto o monstro. Combate: Tutorial feito e formatado por Caronte o + gato do fórum, avaliações do perfil são bem-vindas. Parâmetros de condição: Condições: Slots: Tutorial feito e formatado por Caronte o + gato do fórum, avaliações do perfil são bem-vindas. Participação: xWhiteWolf Bom, é só isso o tutorial pessoal, espero que tenham gostado, e o que prego nesses tutoriais é a essência da simplicidade, às vezes, uma coisa que parece ser boba para você, pode atormentar uma outra pessoa. Const_ani e Const_me: Tutorial feito e formatado por Caronte o + gato do fórum, avaliações do perfil são bem-vindas. Talktypes and message types: [title][/title] Tutoriais concluídos por ordem de formatação (podem ser alterados assim mesmo): Coordenadas, e suas direções. Combat (ainda há coisas a serem adicionadas). Slots. CONST_ME and CONST_ANI Os assuntos do tópico poderão se diminuídos ou aumentados de acordo com o desenrolar do tempo, gostaria de apoio, e não me incomodaria se alguém se propusesse fazer algum tutorial, eles serão supervisionados por mim e formatados por mim, para serem postados neste tópico. Esse tópico demorou e vai demorar muito para fazer cada tutorial, então eu não me importo com um obrigado e REP+, OBS.: Um obrigado vale bem mais do que um REP+
  8. Acabei de ver que postei no lugar errado, alguém pode por favor, mover para a área certa? E aí galera, blz? Então, aí vai o script do init.lua, da store in-game do OTX3, que está bugado nas versões que vocês encontrarem por aí, bugado como? Se o player não tiver cap, remove os coins, não entrega o item, e não devolve o coin depoois e se você liberar o cap também não dá o item... Ou seja, você perde os coins. O que foi alterado? Foi adicionada uma função que verifica se houve erro no script e retorna antes de retirar os coins. Fixado bug nos items agrupáveis também. Há um pequeno erro, se for adicionado mais de 1 item (não agrupável) e não houver cap (por exemplo, 10 blesseds shields, e o player só tem cap para 5, irá entregar os 5 e não vai retirar os coins) Então, não aconselho adicionar mais de 1 item não agrupável (não acontece com items agrupáveis, pois são entregados em um parcel) Acredito que para arrumar este erro, basta colocar os items para irem dentro de um parcel assim como os items agrupáveis, mas acho desnecessário, caso alguém queira, é uma modificação simples de se fazer, então faça por si só. Aí vai Foi útil? Rep+ (foi difícil arrumar, apesar de parecer simples) Foto
  9. Uma função que pode ser útil de varias maneiras: Como funciona? Bom... Ela retorna uma tabela contendo os números do vector, da mesma forma que no XML. Exemplo: "1-50;60;80" ele retornaria uma tabela contendo os números de 1 a 50 e também o 60 e 80. Ainda não entendeu? Então aqui vai alguns scripts de exemplo: Exemplo 1: Exemplo 2: Já da pra ter uma noção de como funciona.
  10. Notei que ainda não haviam feito uma lista dessa versão, então eu a fiz. Eis todas as funções, sem metamétodos e em ordem alfabética, do The Forgotten Server 1.2 broadcastMessage(message, messageType) canPlayerLearnInstantSpell(cid, name) canPlayerWearOutfit(cid, lookType, addons) doAddCondition(cid, conditionId) doAddContainerItemEx(uid, virtualId) doAddMapMark(cid, pos, type, description) doChangeSpeed(cid, delta) doChangeTypeItem(uid, newType) doCombat(cid, combat, var) doConvinceCreature(cid, target) doCreateNpc(name, pos, ...) doCreateTeleport(itemId, destination, position) doCreatureAddHealth(cid, health) doCreatureChangeOutfit(cid, outfit) doCreatureSay(cid, text, type, ...) doCreatureSetLookDir(cid, direction) doDecayItem(uid) doMonsterChangeTarget(cid) doPlayeJoinParty(cid, leaderId) doPlayerAddBlessing(cid, blessing) doPlayerAddExp(cid, exp, useMult, ...) doPlayerAddItemEx(cid, uid, ...) doPlayerAddMana(cid, mana, ...) doPlayerAddManaSpent(cid, mana) doPlayerAddMoney(cid, money) doPlayerAddMount(cid, mountId) doPlayerAddOutfit(cid, lookType, addons) doPlayerAddPremiumDays(cid, days) doPlayerAddSkillTry(cid, skillId, n) doPlayerAddSoul(cid, soul) doPlayerFeed(cid, food) doPlayerPopupFYI(cid, message) doPlayerRemOutfit(cid, lookType, addons) doPlayerRemoveItem(cid, itemId, count, ...) doPlayerRemoveMoney(cid, money) doPlayerRemoveMount(cid, mountId) doPlayerRemovePremiumDays(cid, days) doPlayerSendCancel(cid, text) doPlayerSendTextMessage(cid, type, text, ...) doPlayerSetBalance(cid, balance) doPlayerSetGuildLevel(cid, level) doPlayerSetGuildNick(cid, nick) doPlayerSetOfflineTrainingSkill(cid, skillId) doPlayerSetSex(cid, sex) doPlayerSetTown(cid, town) doPlayerSetVocation(cid, vocation) doRelocate(fromPos, toPos) doRemoveCondition(cid, conditionType, subId) doRemoveCreature(cid) doRemoveItem(uid, ...) doSendDistanceShoot(fromPos, toPos, distanceEffect, ...) doSendMagicEffect(pos, magicEffect, ...) doSendTutorial(cid, tutorialId) doSetCreatureDropLoot(cid, doDrop) doSetItemActionId(uid, actionId) doSetItemSpecialDescription(uid, desc) doSetItemText(uid, text) doSetMonsterTarget(cid, target) doShowTextDialog(cid, itemId, text) doSummonCreature(name, pos ...) doTeleportThing(uid, dest, pushMovement) doTransformItem(uid, newItemId, ...) getAccountNumberByPlayerName(name) getConfigInfo(info) getContainerCap(uid) getContainerCapById(itemId) getContainerItem(uid, slot) getContainerSize(uid) getCreatureBaseSpeed(cid) getCreatureHealth(cid) getCreatureMaster(cid) getCreatureMaxHealth(cid) getCreatureName(cid) getCreatureOutfit(cid) getCreaturePosition(cid) getCreatureSpeed(cid) getCreatureSummons(cid) getCreatureTarget(cid) getFluidSourceType(itemId) getGlobalStorageValue(key) getGuildId(guildName) getHouseAccessList(id, listId) getHouseByPlayerGUID(playerGUID) getHouseEntry(houseId) getHouseName(houseId) getHouseOwner(houseId) getHouseRent(id) getHouseTilesSize(houseId) getHouseTown(houseId) getIPByPlayerName(name) getItemDescriptions(itemId) getItemIdByName(name) getItemName(itemId) getItemRWInfo(uid) getItemWeight(itemId, ...) getItemWeightByUID(uid, ...) getMonsterFriendList(cid) getMonsterTargetList(cid) getOnlinePlayers() getPartyMembers(cid) getPlayerAccess(cid) getPlayerAccountType(cid) getPlayerBalance(cid) getPlayerBlessing(cid, blessing) getPlayerByIPAddress(ip, mask) getPlayerByName(name) getPlayerDepotItems(cid, depotId) getPlayerFood(cid) getPlayerFreeCap(cid) getPlayerGroupId(cid) getPlayerGUID(cid) getPlayerGUIDByName(name) getPlayerGuildId(cid) getPlayerGuildLevel(cid) getPlayerGuildName(cid) getPlayerGuildNick(cid) getPlayerGuildRank(cid) getPlayerIp(cid) getPlayerItemById(cid, deepSearch, itemId, ...) getPlayerItemCount(cid, itemId, ...) getPlayerLastLoginSaved(cid) getPlayerLearnedInstantSpell(cid, name) getPlayerLevel(cid) getPlayerLight(cid) getPlayerLookDir(cid) getPlayerLossPercent(cid) getPlayerMagLevel(cid) getPlayerMana(cid) getPlayerMasterPos(cid) getPlayerMaxMana(cid) getPlayerMoney(cid) getPlayerMount(cid, mountId) getPlayerName(cid) getPlayerParty(cid) getPlayerPosition(cid) getPlayerPremiumDays(cid) getPlayersByAccountNumber(accountNumber) getPlayerSex(cid) getPlayerSkill(cid, skillId) getPlayerSkullType(cid) getPlayerSlotItem(cid, slot) getPlayerSoul(cid) getPlayerStorageValue(cid, key) getPlayerTown(cid) getPlayerVocation(cid) getPromotedVocation(vocationId) getSpectators(centerPos, rangex, rangey, multiFloor, onlyPlayers) getThing(uid) getThingFromPos(pos) getThingPos(uid) getTileHouseInfo(pos) getTileInfo(position) getTileItemById(position, itemId, ...) getTileItemByType(position, itemType) getTilePzInfo(position) getTileThingByPos(position) getTileThingByTopOrder(position, topOrder) getTopCreature(position) getTownId(townName) getTownName(townId) getTownTemplePosition(townId) getWorldCreatures(type) Guild.addMember(self, player) Guild.removeMember(self, player) hasProperty(uid, prop) isContainer(uid) isCorpse(uid) isCreature(cid) isItem(uid) isItemContainer(itemId) isItemDoor(itemId) isItemFluidContainer(itemId) isItemMovable(itemId) isItemRune(itemId) isItemStackable(itemId) isMonster(cid) isNpc(cid) isPlayer(cid) isPlayerGhost(cid) isPlayerPzLocked(cid) isPremium(cid) isSightClear(fromPos, toPos, floorCheck) isSummon(cid) playerLearnInstantSpell(cid, name) pushThing(thing) queryTileAddThing(thing, position, ...) registerCreatureEvent(cid, name) setGlobalStorageValue(key, value) setHouseAccessList(id, listId, listText) setHouseOwner(id, guid) setPlayerGroupId(cid, groupId) setPlayerStorageValue(cid, key, value) targetPositionToVariant(position) unregisterCreatureEvent(cid, name) Já que fui eu quem listei e organizei a biblioteca por conta própria, se você for disponibilizar em outro meio, ao menos deixe o meu nick nos créditos. Bom uso ;]
  11. function getPlayerReset(cid) local query = db.getResult("SELECT `reset` FROM `players` WHERE `id`= "..getPlayerGUID(cid)) return query:getDataInt("reset") <= 0 and 0 or query:getDataInt("reset") end function getPlayerReset(cid) return db.getResult("SELECT `reset` FROM `players` WHERE `id = "..getPlayerGUID(cid)):getDataInt("resets") end Ambas são funcionais. Exemplo: function onSay(cid, words, param, channel) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You already reset : "..getPlayerReset(cid).." times.") return true end Adicione uma das duas primeiras funções no arquivo 050-function (Data->lib->050-function) Créditos: @Vodkart pela função @Xafixav
  12. E aí galera do TK.... Estou passando meu OT para TFS 1.2 (OTXSERVER) e estou criando algumas funções para suprir a necessidade de alguns scripts.... Segue a função function getExperienceForLevel(level) level = level - 1 return ((50 * level * level * level) - (150 * level * level) + (400 * level)) / 3 end
  13. E aí galera do TK.... Estou passando meu OT para TFS 1.2 (OTXSERVER) e estou criando algumas funções para suprir a necessidade de alguns scripts, quando me deparei com o problema de listar as cidades no meu comando fly, não existia a função getTownList(), se existe alguma função que faça isso, me desculpe eu não encontrei, então segue o código: function townExists(townId) local t = Town(townId) return t ~= nil and true or false end function getTownList() local listtowns = {} setmetatable(listtowns, {__index=table}) local town while townExists(#listtowns+1) do town = Town(#listtowns+1) listtowns:insert({id=town:getId(), name=town:getName()}) end return listtowns end Para os novatos (não que eu não seja rs), você pode utilizar da seguinte forma: local str = "Cidades disponiveis para viajar: \n" for i, town in ipairs(getTownList()) do str = str .. town.name .. "\n" end player:showTextDialog(1950, str) Vai ser printado algo como isto: Por hoje é só pessoal, beijos!
  14. Olá senhoras e senhores, eu estava precisando de uma função dessa para utilizar no meu Baiak, e então decidi criar, e vim compartilhar com os senhores. function Position.isPvPZone(self) return Tile(self):hasFlag(TILESTATE_PVPZONE) end Como utilizar: player:getPosition():isPvPZone() function Position.isPZZone(self) return Tile(self):hasFlag(TILESTATE_PROTECTIONZONE) end Como utilizar: player:getPosition():isPZZone() Se você está nessa seção, você sabe como utilizar as mesmas funções, e sabe aonde instalar, então não vou explicar, e se algum moderador achar que está faltando informações para instalação de tais funções, sinta-se a vontade para editar o meu post. Yours VANKK;
  15. Fala 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.
  16. Eis que trago mais uma função à biblioteca matemática de Lua, a math.percent. Sendo objetivo, ela calcula o percentual de um valor numérico, independentemente desse valor ser um inteiro ou decimal. math.percent = function (value, percentage) -- Developed by Wise ~ TibiaKing.com return tonumber(value) and tonumber(percentage) and math.abs(tonumber(string.format('%.f', tostring(percentage * (value/100))))) or nil end Exemplo de um cálculo: Mensagem maldita "Você atingiu 80% da sua franquia diária de 30MB. Ao atingir 100%, sua navegação será bloqueada." E agora, brother? Quantos MB eu usei? math.percent(30, 80) -- (valor númerico, %) 24 Enfim, se for disponibilizar este script em outro meio, deixe meu nick nos créditos. ;]
  17. Galera hoje vou lhe mostrar-lhes alguns tutorias para PDA, que eu vi e alguns queriam saber, aqui vai: 1° Como configurar o exp do seu server. 2°como adicionar um novo fly, ride e etc, OBS: nao vou mostrar como adicionar no dat editor, eu irei ensinar como configurar ele no script: vá em data/lib/configuration.lua, e procure essa linha: 3° pokemons e items iniciais (creio que muitos ainda nao sabem como modificar) 4° Como adicionar uma nova ball para o PDA 5° Como aumentar e diminuir o Cauth do pokemon. 6° Golden arena: 7° como aumentar o drop de loots: 8° como aumentar a velocidade do player: 9° como modificar seu rme para poketibia. 10° como mudar o efeito do emoticon. 11° como deixar o pokemon passivo, ou agressivo. 12° como mudar a efetividade de um pokemon 13° como adicionar ou remover um pokemon do HeadButt 14° Como adicionar um Passive no Pokemon: 15° Breve abreviação das configurações que existe no configuration.lua da pasta lib: Creditos: Slicer (pelo servidor que eu estou pegando essas informaçoes) Eu (por criar o tutorial) StyloMaldoso (por um tutorial que me ajudou) Nextbr (por ajuda com a abreviação do configuration.lua) por enquanto é só esses tutoriais, se alguém tiver mais alguma duvida, pergunte aqui no tópico mesmo. OBS: se tiver faltando alguém nos créditos que eu não saiba, me avisem. Abraços, e comentem.
  18. Serei breve enquanto a explicação. Esta função serve para "forçar" o value de uma storage key a mudar, independentemente do player estar on ou offline. Adicione o seguinte script à lib do seu servidor (data\lib): forceSetStorageValue = function (name, key, value) if not tostring(name) or not tonumber(key) then return nil end local p = getPlayerByName(name) if p then setPlayerStorageValue(p, key, value) else local have = db.storeQuery("SELECT `key` FROM `player_storage` WHERE `player_id` = ".. getPlayerGUIDByName(name) .." and `key` = ".. key) if have then db.query("UPDATE `player_storage` SET `value` = '".. value .."' WHERE `player_id` = '".. getPlayerGUIDByName(name) .."' AND `key` = ".. key) else db.query("INSERT INTO `player_storage` (`player_id` ,`key` ,`value`) VALUES ('".. getPlayerGUIDByName(name) .."', '".. key .."', '".. value .."');") end end return true end A seguir, preparei uma talkaction para o uso da função. fstorage.lua (data\talkactions\scripts): function onSay(cid, words, param) local w = string.explode(param, ",") if param == '' then return doPlayerSendCancel(cid, 'Enter the player name, the storage key and the storage value (number or string). Ex: /forcestorage Player, 1234, 5') elseif not tostring(w[1]) or not tonumber(w[2]) or not w[3] or w[4] then return doPlayerSendCancel(cid, 'Invalid parameter specified.') end forceSetStorageValue(w[1], w[2], w[3]) return true end talkactions.xml (data\talkactions): <talkaction log="yes" words="/forcestorage" access="5" event="script" value="fstorage.lua"/> (o formato da tag varia de acordo com a versão do servidor utilizado) Uso da talkaction: /forcestorage Player, key, value ~ /forcestorage Wise, 1234, 5 Enfim, na minha mente ela me parece bem eficaz. Espero que gostem.
  19. O que faz? : Retorna o percentual de um frag (vitórias & derrotas). function getWinningRatio(win, lose) if(type(win) ~= "number" or type(lose) ~= "number") then return nil, error("You need to specify a number value.") end if(win == 0 and lose == 0) then return 0.0 end local ratio = win / (win + lose) * 100 local i = 4 if(math.floor(ratio) < 10) then i = 3 end ratio = tostring(ratio):sub(1, i) return tonumber(ratio) end Como usar? : doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Seu percentual é "..getWinningRatio(230, 78).."%.") Resultado : Seu percentual é 74.6%. Onde 230 pode ser uma storage de vitórias do player e 78 as derrotas. Creio que será dificil esta função ser utilizada. Talvez seja útil para eventos! créditos : Halls Santos
  20. Função que retorna os players que estão numa área específica function getPlayersInArea(fromPos, toPos) -- function by amoeba13 playersInArea = {} for x = fromPos.x, toPos.x do for y = fromPos.y, toPos.y do for z = fromPos.z, toPos.z do totalArea = {x=x, y=y, z=z} playerz = getTopCreature(totalArea) if isPlayer(playerz.uid) then table.insert(playersInArea, playerz.uid) end end end end return playersInArea end Exemplo de uso: function onSay(cid, words, param, channel) local area = getPlayersInArea({x = 153, y = 50, z = 7}, {x = 156, y = 53, z = 7}) if area then for i = 1, (#area) do doTeleportThing(area[i], {x = 160, y = 51, z = 7}, false) end end return true end Créditos: Killua
  21. Essa função pega o nome do level mais alto do servidor, baseando-se na experiência do player. local function getHighestPlayer() local result = db.getResult("SELECT `name` FROM `players` ORDER BY `level` DESC, `experience` DESC LIMIT 1") return result.getDataString(result, "name") end Exemplo de uso: if getPlayerName(cid) == getHighestPlayer() then Créditos: Kohaeu
  22. Função que lista as casas vazias no servidor. function getFreeHouses() local towns = getTownList() local houses = {} for i = 1, #towns do local list = getTownHouses(towns[i].id) for j = 1, #list do if list[j] then if getHouseOwner(list[j]) == 0 then table.insert(houses, list[j]) end end end end if(#houses == 0) then return nil end return houses end Créditos: Crypton3
  23. [LUA Function] getPlayerItems(cid[, id]) O que ela faz: Bom, esta função retorna todos os items do jogador, você também pode usa-la de modo que retorne todos os items, que tenha um certo ID. Código: Modo de uso: for _, item in pairs(getPlayerItems(cid)) do -- Retornaria todos os id\'s dos items que o player tem. print(item.itemid) end for _, item in ipairs(getPlayerItems(cid, 2160)) do -- Retornaria a quantidade e o nome do item, cuja o ID fosse (2160). print(item.type.."x "..getItemNameById(item.itemid) end Espero que façam bom uso. Créditos: Tony Araújo (OrochiElf) 100%
  24. function getGuildLevel(cid) local Info = db.getResult("SELECT SUM(`level`) as `level` FROM `players` WHERE `rank_id` IN (SELECT `id` FROM `guild_ranks` WHERE `guild_id` = "..getPlayerGuildId(cid)..") ") local level= Info:getDataInt("level") return level end soma nivel de membros de uma aliança exemplo: function onSay(cid, words, param, channel) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Guild Level Total: "..getGuildLevel(cid).." .") return true end
  25. É semelhante a função que existe em PHP, transforma a primeira letra de cada palavra da string em maiúscula. function ucwords(str) str = str:lower():gsub("(%l)(%w*)", function(x, y) return x:upper() .. y end) return str end Exemplo: print(ucwords("aBCde ABCDE aBBcDDe")) Resultado: Abcde Abcde Abbcdde

Open Tibia Server

Quer aprender a criar seu próprio servidor de Tibia? Então está no lugar certo, aqui você encontrará milhares de tutorias, scripts, códigos, mapas e utilitários para que você possa fazer o seu próprio servidor de Tibia começando do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer fazer um plano publicitário para o seu servidor? Anuncie no Tibia King e faça sua divulgação, possuímos centenas de acessos simultâneos e milhares diários, com certeza será a sua solução!

×
×
  • Create New...