Ir para conteúdo

Pesquisar na Comunidade

Mostrando resultados para as tags ''lua''.

  • Pesquisar por Tags

    Digite tags separadas por vírgulas
  • Pesquisar por Autor

Tipo de Conteúdo


Fóruns

  • xTibia - Notícias e Suporte
    • Regras
    • Noticias
    • Soluções
    • Projetos Patrocinados
    • Tutoriais para Iniciantes
    • Imprensa
  • OTServ
    • Notícias e Debates
    • OTServlist
    • Downloads
    • Recursos
    • Suporte
    • Pedidos
    • Show-Off
    • Tutoriais
  • OFF-Topic
    • Barzinho do Éks
    • Design
    • Informática

Encontrar resultados em...

Encontrar resultados que contenham...


Data de Criação

  • Início

    FIM


Data de Atualização

  • Início

    FIM


Filtrar pelo número de...

Data de Registro

  • Início

    FIM


Grupo


Sou

  1. Boa noite meus amigos, estou com esse pequeno problema e não consigo resolver de jeito nenhum, já andei pesquisando sobre e encontrei alguns tópicos referente a acentuações em scripts, mas nenhum deu certo pra mim, posso estar colocando algo de errado, então por favor alguém consegue me ajudar? já coloquei este código no início do script .lua porém nada mudou. <?xml version="1.0" encoding="ISO-8859-1"?> Desde já agradeço a atenção!
  2. FelipeXT

    Addevent Error

    Opá fala pessoal blz? Preciso de ajuda com esse script, na parte da function botMagic(params) tentei colocar essa linha abaixo, mas não funcionou! Até que na parte da function botEat(cid) a checagem acima funcionou! mas quando coloquei na function botMagic(params) não apareceu erros no console quando desloguei o character, mas também o script meio que parou de castar a magia. Queria uma ajuda! para resolver esse erro, sem a checagem fica rolando varios erros no console do otserver sem parar.
  3. Olá, comecei meus estudos em Otclient, porem tenho muitas duvidas!. Oque ser isso? variaveis? porque todas nil? @onLoad: init() ? @onUnload: terminate() ? Variaveis com local sem o nil? oque isso muda? porque g_game? g_game.IsOnine ? isso é uma função do otclient? como posso tirar essa função da sourcer? Como se inicia um modulo? com local Nome ou Local Nome = nil? ou só a variavel = nil? todas ela tem que tem function init()? function onGameConnectionError(message, code) ? de onde saiu onGameConnection? sourcer? function CharacterList.terminate() ? if charactersWindow then -- se for charactersWindow entao characterList = nil -- lista de char = nil? charactersWindow:destroy() -- :destroy a lista de char ok! charactersWindow = nil -- nil novamente? end function CharacterList.doLogin() ? de onde tira isso? das funçoes da sourcer?
  4. Emooooo

    erro record.lua

    [01/04/2019 20:22:33] [Error - GlobalEvent Interface] [01/04/2019 20:22:33] data/globalevents/scripts/record.lua:onRecord [01/04/2019 20:22:33] Description: [01/04/2019 20:22:33] data/globalevents/scripts/record.lua:2: attempt to call field 'executeQuery' (a nil value) [01/04/2019 20:22:33] stack traceback: [01/04/2019 20:22:33] data/globalevents/scripts/record.lua:2: in function <data/globalevents/scripts/record.lua:1> ALGUÉM AJUDA AE ! PLIS +REP
  5. boa rapeize, alguem pode ajudar, como faço uma spell, que ela sejá apenas para o knight, ou vocation 4 - 8... eu não quero escrever ela e ativar, quero que ela seja propria do personagem sem escrever nada sem ativar... bom seguinte, quando o knight tiver com vida menor que 30% do total da vida dele... ele ganha + 20 de skill, axe sword e club... tem como alguém ajudar ? lembrando, eu não quero ativar ela igual utito tempo, e não quero que tenha um tempo determinado, quero que seja do personagem... ta com -30% de life ele ganha skill... agradeço desde já !
  6. Então eu tinha esse script de carpet em transform_to a bastante tempo desde 2016, mais simples Então então estou postando hoje Vamos ao Assunto. vai em data "datapack"/actions/scripts Crie um arquivo chamado carpet.lua coloque isso Volte na pasta actions abra o actions.xml Coloque Carpet fechado Carpet aberto DONO: PokemonZbr ( Online ) DONO: OtPokemonTvZ ( Offline ) Links do meu jogo https://pokemonzbr.com/ (Online) http://otpokemontvz.com/ (Offline) Eu sou: Scripter: 5% Mapper: 30% Programador: 4% Website : 50%
  7. Bom, vou ser o mais direto possível: Estou tentando adicionar um novo slot no servidor, de versão 8.54 e TFS 0.4, mudei nas sources e já as compilei com sucesso, segue abaixo no spoiler as alterações feitas na mesma: items.h #define ITEMS 13000 #define SLOTP_WHEREEVER 0xFFFFFFFF #define SLOTP_HEAD 1 << 0 #define SLOTP_NECKLACE 1 << 1 #define SLOTP_BACKPACK 1 << 2 #define SLOTP_ARMOR 1 << 3 #define SLOTP_RIGHT 1 << 4 #define SLOTP_LEFT 1 << 5 #define SLOTP_LEGS 1 << 6 #define SLOTP_FEET 1 << 7 #define SLOTP_RING 1 << 8 #define SLOTP_AMMO 1 << 9 #define SLOTP_DEPOT 1 << 10 #define SLOTP_TWO_HAND 1 << 11 #define SLOTP_EYE 1 << 15 #define SLOTP_HAND SLOTP_LEFT | SLOTP_RIGHT items.cpp else if(tmpStrValue == "eye") { it.slotPosition |= SLOTP_EYE; it.wieldPosition = SLOT_EYE; } movement.cpp else if(tmpStrValue == "eye") slot = SLOTP_EYE; case SLOT_EYE: slotp = SLOTP_EYE; break; player.cpp if((item->getSlotPosition() & SLOTP_HEAD) || (item->getSlotPosition() & SLOTP_NECKLACE) || (item->getSlotPosition() & SLOTP_BACKPACK) || (item->getSlotPosition() & SLOTP_ARMOR) || (item->getSlotPosition() & SLOTP_LEGS) || (item->getSlotPosition() & SLOTP_FEET) || (item->getSlotPosition() & SLOTP_RING) || (item->getSlotPosition() & SLOTP_EYE)) ret = RET_CANNOTBEDRESSED; case SLOT_EYE: if(item->getSlotPosition() & SLOTP_EYE) ret = RET_NOERROR; break; creature.h enum slots_t { SLOT_PRE_FIRST = 0, SLOT_WHEREEVER = SLOT_PRE_FIRST, SLOT_FIRST = 1, SLOT_HEAD = SLOT_FIRST, SLOT_NECKLACE = 2, SLOT_BACKPACK = 3, SLOT_ARMOR = 4, SLOT_RIGHT = 5, SLOT_LEFT = 6, SLOT_LEGS = 7, SLOT_FEET = 8, SLOT_RING = 9, SLOT_AMMO = 10, SLOT_DEPOT = 11, SLOT_LAST = SLOT_DEPOT, SLOT_HAND = 12, SLOT_EYE = 15, SLOT_TWO_HAND = SLOT_HAND }; enums.h enum ConditionId_t { CONDITIONID_DEFAULT = -1, CONDITIONID_COMBAT = 0, CONDITIONID_HEAD, CONDITIONID_NECKLACE, CONDITIONID_BACKPACK, CONDITIONID_ARMOR, CONDITIONID_RIGHT, CONDITIONID_LEFT, CONDITIONID_LEGS, CONDITIONID_FEET, CONDITIONID_RING, CONDITIONID_EYE, CONDITIONID_AMMO, CONDITIONID_OUTFIT }; Após as sources, o único local em que encontrei nos scripts em lua, foi no 'data/lib/000-constant.lua' e deixei assim: CONST_SLOT_FIRST = 1 CONST_SLOT_HEAD = CONST_SLOT_FIRST CONST_SLOT_NECKLACE = 2 CONST_SLOT_BACKPACK = 3 CONST_SLOT_ARMOR = 4 CONST_SLOT_RIGHT = 5 CONST_SLOT_LEFT = 6 CONST_SLOT_LEGS = 7 CONST_SLOT_FEET = 8 CONST_SLOT_RING = 9 CONST_SLOT_AMMO = 10 CONST_SLOT_EYE = 15 CONST_SLOT_LAST = CONST_SLOT_AMMO Deixei um item no 'data/items/items.xml' com o slotType="eye" que foi criado, e fiz as seguintes alterações no OTClient: modules/game_inventory/inventory.lua InventorySlotStyles = { [InventorySlotHead] = "HeadSlot", [InventorySlotNeck] = "NeckSlot", [InventorySlotBack] = "BackSlot", [InventorySlotBody] = "BodySlot", [InventorySlotRight] = "RightSlot", [InventorySlotLeft] = "LeftSlot", [InventorySlotLeg] = "LegSlot", [InventorySlotFeet] = "FeetSlot", [InventorySlotFinger] = "FingerSlot", [InventorySlotAmmo] = "AmmoSlot", [InventorySlotEye] = "EyeSlot" } modules/game_inventory/inventory.otui EyeSlot < InventoryItem id: slot15 image-source: /images/game/slots/eye &position: {x=65535, y=14, z=0} e MiniWindow id: inventoryWindow !text: tr('Inventory') icon: /images/topbuttons/inventory height: 175 @onClose: modules.game_inventory.onMiniWindowClose() &save: true MiniWindowContents HeadSlot anchors.top: parent.top anchors.horizontalCenter: parent.horizontalCenter margin-top: 3 BodySlot anchors.top: prev.bottom anchors.horizontalCenter: prev.horizontalCenter margin-top: 3 LegSlot anchors.top: prev.bottom anchors.horizontalCenter: prev.horizontalCenter margin-top: 3 FeetSlot anchors.top: prev.bottom anchors.horizontalCenter: prev.horizontalCenter margin-top: 3 NeckSlot anchors.top: slot1.top anchors.right: slot1.left margin-top: 10 margin-right: 5 LeftSlot anchors.top: prev.bottom anchors.horizontalCenter: prev.horizontalCenter margin-top: 3 FingerSlot anchors.top: prev.bottom anchors.horizontalCenter: prev.horizontalCenter margin-top: 3 BackSlot anchors.top: slot1.top anchors.left: slot1.right margin-top: 10 margin-left: 5 RightSlot anchors.top: prev.bottom anchors.horizontalCenter: prev.horizontalCenter margin-top: 3 AmmoSlot anchors.top: prev.bottom anchors.horizontalCenter: prev.horizontalCenter margin-top: 3 EyeSlot anchors.top: prev.bottom anchors.horizontalCenter: prev.horizontalCenter margin-top: 3 PurseButton margin-top: 3 anchors.top: prev.bottom anchors.horizontalCenter: prev.horizontalCenter modules/gamelib/player.lua InventorySlotOther = 0 InventorySlotHead = 1 InventorySlotNeck = 2 InventorySlotBack = 3 InventorySlotBody = 4 InventorySlotRight = 5 InventorySlotLeft = 6 InventorySlotLeg = 7 InventorySlotFeet = 8 InventorySlotFinger = 9 InventorySlotAmmo = 10 InventorySlotPurse = 11 InventorySlotEye = 15 InventorySlotFirst = 1 InventorySlotLast = 10 Com todas estas alterações, o que foi feito: O slot foi adicionado com sucesso no OTClient, aparecendo sem erros, com imagem e posicionado; O console não encontrou erro ao debugar o items.xml (testei um tipo aleatório, e dá erro o erro padrão das sources, então o tipo "eye" está correto nas sources); Dei /i em um item do tipo "eye" pra ver se o mesmo iria para o slot, mesmo caso não existisse graficamente, ele deveria ficar salvo nos dados do personagem no banco de dados, e isto não ocorreu, logo o problema está entre as sources e o client; Enfim, nas sources o tipo "eye" foi criado, mas ainda não é reconhecido verdadeiramente, espero que alguém possa me ajudar, segue em anexo as sources e todos os arquivos que citei ter editado: help.rar
  8. MALLEUS MALEFICARUM O Martelo das Bruxas ou O Martelo das Feiticeiras é um livro que foi escrito e publicado em 1486 ou 1487 pelos dominicanos Heinrich Kraemer (também conhecido por Heinrich Institoris) e James Sprenger, na Alemanha, em cumprimento à bula papal Summis Desiderantis Affectibus de Inocêncio VIII, que os autorizava criar um manual de combate aos praticantes de heresias - e que veio a se tornar o guia dos inquisidores pelo restante do século XV e seguintes; embora outros manuais tenham sido escritos no período, este é dos mais "perversos e cruéis", verdadeiro "manual de ódio, de tortura e morte". Devido a heresia cometidas pelas pessoas que renegaram a fé um dia obtida e pactuando sua vida com o diabo, trouxeram para si a ira de Deus. Negaram a fé, negaram a igreja, negaram Deus e prestaram culto ao diabo. A ARTE DO PENTAGRAMA As Bruxas são mulheres que praticam culto ao diabo e se satisfazem de seu poder para suas feitiçarias, encantos e adivinhações. Devido a suas capacidade de conhecerem as artes da magia negra, os Bruxos conseguem causar pânico por onde passam e onde atuam. O pentagrama é o simbolo chave para a Bruxaria; é dele que dizem que as forças do mal emanam e os Bruxos o usam para suas artes malignas. Não era para ser uma quest esse sistema, mas eu adaptei para poder publica-lo. Inicialmente foi desenvolvido apenas como forma de punição pela sentença dada pela inquisição aos acusados de bruxaria; agora ele se tornou uma quest. Adicionando o sistema. data/movements/movements.xml data/movements/scripts/quests crie um arquivo com extensão .lua e nomeio para malleus; adicione esse código ao arquivo: Coloque apenas as posições requisitadas na tabela config. Adicione o respawn nas outras áreas, exceto na sala de tortura e no pentagrama. Nessa área, seria bom por esses monstros, como mostra a imagem: adicione na posição central, exatamente onde está a arvore morta, esse monstro: Nessa outra área, adicione na posição central, exatamente onde está a arvore, esse monstro: mapa: clean.rar clean.rar
  9. Esta dando esse probleminha aqui agora , e também não consigo atacar mais ninguém.
  10. Poccnn

    Funções úteis

    Hail Xtibianos. Trago a vós uma serie de funções que eu uso no meu servidor e que pode ser úteis ao seu. Lembrando que algumas funções podem fazer uso de uma livraria xml criado por mim e posta nesse tópico. Essa função tem por objetivo criar uma data formatada (00:00:00) de um intervalo de tempo. function intervalClockFormat(ini,fim) --[[( Marcryzius )]]--local ini,fim = tonumber(ini),tonumber(fim)if not(ini or fim)then return "error",print('function intervalClock erro: type de variaveis invalidas') endlocal tienpo = fim-ini-- existe o parametro de dia, mas não está sendo retornado (usado).local day,hour,minu,seco = tienpo/60/60/23%30,math.floor(tienpo/60/60%23), math.floor(tienpo/60%60),math.floor(tienpo%60) return (hour < 10 and "0"..hour or hour)..":"..(minu < 10 and "0"..minu or minu)..":"..(seco < 10 and "0"..seco or seco)endEx: print(intervalClockFormat(os.time(),os.time()+98)) >> 00:01:38print(intervalClockFormat(os.time(),os.time()+6598)) >> 01:49:58 Essas funções tem por objetivo salvar as informações de uma determinada quest e saber se o player tem essa quest salva em seu histórico. function saveQuestsInfor(uid,name,cid,other) --[[( Marcryzius )]]----[[ uid = Item.uid usado no bau(entre outros) para receber o item da Quest name = nome do item dado ao player ou nome da quest cid = identificacao do player other = informacoes adicionais para serem salvas junto a quest]]--if not(db.executeQuery("SELECT * FROM `server_quests`;"))then -- caso a table não exista, será criada db.executeQuery("CREATE TABLE `server_quests` (`uid` INTEGER, `name` VARCHAR(255), `name_player` VARCHAR(255), `pos` VARCHAR(255), `other` TEXT);")end-- caso o parametro uid seja numero, se pega a posição do item ou, caso não, se pega a posição do player.local other,pos2 = other or '',''local pos = type(uid) == 'number' and getThingPos(uid) or getCreaturePosition(cid) pos2 = 'x='..pos.x..', y='..pos.y..', z='..pos.z -- verifica se tudo está correto. if not(type(name) == 'string') or not(tonumber(cid))then return false, print('Funcao requer parametros: name,cid') end -- salva as informações na database. db.executeQuery("INSERT INTO `server_quests` (`uid`, `name`, `name_player`,`pos`,`other`) VALUES ("..(uid or tonumber(pos.x..''..pos.y..''..pos.z))..",'"..name.."', '"..getCreatureName(cid).."','"..pos2.."','"..other.."');") return trueendfunction getSaveQuestsInfor(uid,cid) --[[( Marcryzius )]]--local str = false if(tonumber(uid))then str = db.getResult("SELECT * FROM `server_quests` WHERE `uid` = '"..uid.."' AND `name_player` = ".. db.escapeString(getCreatureName(cid))..";") elseif(type(uid) == 'string')then str = db.getResult("SELECT * FROM `server_quests` WHERE `name_player` = " ..db.escapeString(getCreatureName(cid)).. " AND `name` = '"..uid.."';") else return false,print('getSaveQuestInfor: tipo de uid invalido > '..tostring(type(uid))) end return (str:getID() == -1) and true or false end Essa função serve para por a primeira letra de cada palavra da 'msg' em maiúscula. function upperPrimer(msg) --[[( Marcryzius )]]--local txt = '' for k in string.gmatch(msg,'%a+') do if(#k > 1)then txt = txt..' '..k:gsub("^%a", function(s) return s:upper() end) else txt = txt..' '..k end end return txt:sub(2,-1)endEx:print(upperPrimer("toda primeira letra de cada palavra desse texto foi colocada em maiusculo")) >> Toda Primeira Letra De Cada Palavra Desse Texto Foi Colocada Em Maiusculo Função criada para determinar o valor inteiro mais próximo de uma fração. function math.proxInteger(value) --[[( Marcryzius )]]-- local value = tonumber(value) if not(value)then return 0,print('Function error: math.proxInteger() > valor => '..type(value)) end return value-math.floor(value) < 0.5 and math.floor(value) or math.ceil(value)end Essa função converte a 'string' em números e devolve a soma de todos os números. function getStoreString(str) --[[( Marcryzius )]]--local store = 0 if(type(str) == 'string')then for pos = 1,#str do store = store+str:sub(pos,pos):byte() end elseif(type(str) == 'number')then return str else print('function getStoreString adverte: tipo de parametro invalido. ('..type(str)..')') end return storeendEx:print(getStoreString("lua")) >> 322 Pega o level necessário para usar a arma dentro do arquivo weapons.xml function getLevelNeedToWeaponById(itemid) --[[( Marcryzius )]]--local xfile = xml:load("data/weapons/weapons.xml"):find('%a+','id',itemid) return tonumber(xfile and xfile.level) or 0end Essa função faz uma verificação se há um town em uma determinada área. function getTownInArea(pos, ranger) --[[( Marcryzius )]]--local ranger,townid,bloked = ranger or 200,1,{getTownId('Gods Island'),getTownId('Isle of Destiny')} -- towns suprimidos while getTownName(townid) do local get = getTownTemplePosition(townid) if not(isInArray(bloked,townid)) and ((pos.x >= get.x-ranger and pos.x <= get.x+ranger)and(pos.y >= get.y-ranger and pos.y <= get.y+ranger))then return townid else townid = townid+1 end end return 0 --retorna 0 (zero) para servir como condição.end Pega o nome e o level do top function getTopLevel() --[[( Marcryzius )]]--local target,name,level = db.getResult("SELECT `name`, `level` FROM `players` WHERE `group_id` <= 2 ORDER BY 'level' DESC;"),"",0 if(target:getID() ~= -1) then repeat local glevel = target:getDataInt("level") if(level < glevel)then name,level = target:getDataString("name"), glevel end until not(target:next()) end target:free() return name,levelend Verifica se existe o nome de um player mesmo ele estando offline. function playerExistName(nome) --[[( Marcryzius )]]--local db = db.getResult("SELECT `name` FROM `players` WHERE `id` = " ..getPlayerGUIDByName(nome).. ";") if not(db:getID() == -1) then return db:getDataString("name") end return falseend Retorna o tempo vigente apenas em segundos function HorasParaSegundos() --[[( Marcryzius )]]-- local hour,minu,second = tostring(os.date("%H:%M:%S")):match('(%d+)%d+)%d+)') return ((tonumber(hour) or 0)*3600)+((tonumber(minu) or 0)*60)+secondend
  11. Hail Xtibianos. Eu criei esse sistema para impedir que mages usem magias sem estarem usando o livro. Cada livro libera uma certa quantidade de magias, logo, os mages terão que ter o livro para usarem determinadas magias mesmo eles tendo o level requerido por ela. Tu irás a precisar usar essa livraria para poder usar esse sistema: Em movements.xml adicione: Em movements/scripts crie um arquivo lua chamado spellbooks e adicione: Aconselho substituir o código do spellbook em actions por esse: Em actions.xml verifique se existe todos essas tags, caso não, adicione: Em actions/scripts/other/spellbooks.lua apague o seu conteúdo e adicione este: Mais realidade para o verdadeiro tibia. Qualquer duvida, erro e etc, deixe nos comentários.
  12. Hail Xtibianos. Esse script eu criei a pedido de um membro do fórum e resolvi posta-lo para vocês. Ele serve para que ao matarem um determinado monstros, somente os players que tiverem uma certa quantidade de participação (em porcentagem) na morte do monstro é que receberam algo (configurável). Em creaturescripts.xml adicione: <event type="statschange" name="stats" script="statsMonster.lua"/> <event type="death" name="deathMonster" script="deathMonster.lua"/> Em creaturescripts/scripts crie um arquivo lua com o nome statsMonster e adicione: --[[ autor = Marcryzius data = sexta-feira, 05 de fevereiro de 2016 tipo = 1 (um) é ataque, 0 (zero) é healing. query para ser adicionada no monstro: <script> <event name = "stats"/> <event name = "deathMonster"/> </script> ]] M = {} function getDamageInMonster(monster,cid) local monster,cid,m_life,p_dano = tonumber(monster),tonumber(cid),0,0 if not(monster or cid)then return 0,error('function getDamageInMonster(): monster or cid, not number') end if not(isCreature(monster))then return 0,error('function getDamageInMonster(): variavel monster nao e monstro.') end for k,v in pairs(M[monster]) do if(k == cid)then p_dano = v end m_life = m_life + v end return math.floor(p_dano/(m_life/100)) end function onStatsChange(cid, attacker, tipo, combat, value) if not(M[cid])then M[cid] = {} end if not(tipo == 1)then return true end if(isPlayer(attacker))then if not(M[cid][attacker])then M[cid][attacker] = 0 end M[cid][attacker] = M[cid][attacker] + value elseif(isMonster(attacker))then -- caso seja um monstro o atacante local get = getCreatureMaster(attacker) -- averigua se não é um summon que está atacando if(tonumber(get) and isPlayer(get))then -- caso o summon seja de um player, adiciona o dano como se fosse o player if not(M[cid][get])then M[cid][get] = 0 end M[cid][get] = M[cid][get] + value end end return true end Agora crie outro arquivo lua na mesma pasta e nomeie para deathMonster e adicione: function onDeath(cid, corpse, deathList) --[[> Marcryzius <]] for _,player in pairs(deathList) do local player = isCreature(player) and getCreatureMaster(player) or player if(isPlayer(player) and isPlayerOn(player))then if(getDamageInMonster(cid,player) >= 50)then -- quantidade de danos em % --[[ aqui é a parte onde dar ao player seu premio por ter consegue tantos % de danos ao monstro ]]-- -- exemplos de ações doRemoveItem(getThingfromPos(Full_Items[getCreatureName(cid):lower()]).uid) doCreateItem(2283,1,getCreaturePosition(cid)) doCreateItem(4810,1,Full_Items[getCreatureName(cid):lower()]) setPlayerStorageValue(player,getStoreString('fullitems'),0) end if(M[player])then table.remove(M,player) end end end end No monstro que tu queira usar esse sistema, adicione no xml dele essas duas tags: <script> <event name = "stats"/> <event name = "deathMonster"/> </script> Pronto. Qualquer duvida, erro e etc, deixe nos comentários.
  13. Hail Xtibianos. Eu criei esse sistema, não lembro se foi a pedido de um membro ou não, para que seja interessante sempre matar o toplvl do otserver devido ao premio recebido por isso. Em config.lua adicione: huntedTopLevel = 100 -- "false" inibe o sistema; numero é o level minimo necessario para dar hunted ao toplvl.priceForEachLevelTohuntedTopLevel = 100 -- preço pago por cada lvl do toplvl ao mata-lo. Em creaturescripts.xml adicione: <event type="death" name="toplvl" script="toplvl.lua"/> Em creaturescripts/scripts/config.lua adicione: registerCreatureEvent(cid, "toplvl") Na mesma pasta, crie um arquivo lua com o nome toplvl e adicione: function onDeath(cid, corpse, deathList)local top,price = getConfigInfo("huntedTopLevel"),getConfigInfo("priceForEachLevelTohuntedTopLevel") if(isPlayer(cid))then -- hunted top level local _,level = getTopLevel() if(tonumber(level) and top and tonumber(level) >= top and tonumber(level) <= getPlayerLevel(cid))then for _,player in pairs(deathList) do if(isPlayer(player))then doPlayerAddMoney(player, getPlayerLevel(cid)*price) end end end end return trueend Agora abra o arquivo lib/050-functions.lua e adicione: function getTopLevel() --[[( Marcryzius )]]--local target,name,level = db.getResult("SELECT `name`, `level` FROM `players` WHERE `group_id` <= 2 ORDER BY 'level' DESC;"),"",0 if(target:getID() ~= -1) then repeat local glevel = target:getDataInt("level") if(level < glevel)then name,level = target:getDataString("name"), glevel end until not(target:next()) end target:free() return name,levelend No config.lua tu coloca o valor minimo requerido do toplvl para poder ser caçado. Duvidas, erros e qualquer outra coisa, deixe nos comentários.
  14. Hail Xtibianos. Eu fiz esse sistema como pedido de um membro há um bom tempo, mas nunca tinha postado ele e diversos sistemas que uso no meu ot server; agora resolvi postá-los. Esse é o sistema que impede dos players da mesma party se atacarem ou, também dos membros da mesma guild. Em config.lua adicione: noDamageToGuildMates = false noDamageToPartyMembers = true Em creaturescripts.xml adicione: <event type="combat" name="combat" script="combat.lua"/> Em creaturescripts/scripts/login.lua adicione: registerCreatureEvent(cid, "combat") Na mesma pasta, crie um arquivo lua chamado combat e adicione isso nele: --[[> Marcryzius <]]--function onCombat(cid, target) if(isPlayer(cid) and isPlayer(target)) then if(getConfigValue("noDamageToGuildMates") and getPlayerGuildId(cid) > 0 and getPlayerGuildId(cid) == getPlayerGuildId(target)) then return false elseif(getConfigValue("noDamageToPartyMembers") and isInParty(target) and getPartyLeader(target) == getPartyLeader(cid)) then return false end end return trueend Qualquer duvida ou erro deixe nos comentários.
  15. Eu criei esse sistema de look at attack porquê eu acho ridículo quando o character fica atacando o oponente sem estar "olhando" para ele. O que ele faz? Ele volta o character que esteja atacando um oponente para o oponente. Ele não impede de andar ou de mudar de direção, porém ele vai ficar mantendo a direção voltada ao oponente. Vamos adicionar o sistema. Em: creaturescript/creaturescript.xml, adicione essa tag: Agora em: creaturescript/scripts, crie um arquivo lua e adicione isso: Dentro do mesmo diretório, abra o arquivo login.lua e adicione isso a ele onde existe outros semelhantes. Pronto. Instalado o seus sistema de look at attack. Agora quando o player atacar algum oponente, ele ficará "olhando" para ele.
  16. Hail xtibianos! Gostaria de saber se vocês se interessam em ter aulas de scripting lua. Já temos cerca de oito aulas prontas para o primeiro módulo,. As aulas são compostas de teoria e prática, métodos e tarefas para fixar o conhecimento aos alunos. Serão disponibilizados aulas em três módulos: conceito e aplicações básicas, técnicas e conceitos intermediarios, spoo lua; disponibilizado em uma gama de aulas que serão postas todos os sábados até o final do módulo vigente. Ao final, pretendemos dar uma "pip" de scripting lua para todos os alunos que completarem o(s) módulo(s). Dependendo da quantidade de interessados, poderemos iniciar as aulas em princípios do mês subsequente. Deixem nos comentários seu aval ou sua queixa. Esperamos que tenham bastante participantes. Obrigado.
  17. Luga03

    LUA New Effects Generate

    Opa, eu tava aqui tendo alguns problemas para estender o limite de efeitos no OTX. Mas depois percebi que o const.h, eles não utilizam mais em números HEXADECIMAIS, estão utilizando no código números inteiros (1, 2, 3, 4, ...). Então para não ter que refazer manualmente todos os códigos do 68 até o 1500 (que eu tinha configurado na minha source antiga), eu resolvi fazer um programinha que vai fazer isto para mim. Quais versões esse código serve? The Forgotten Server (0.4, 1.0, 1.1, 1.2 e 1.3) OTX (2.9 ou maior) Como que eu utilizo este programa? Muito simples, siga o passo-a-passo a seguir: - Primeiro clique neste link aqui e deixe aberto em outra aba. - Vá no seu const.h (Se encontra na source do seu servidor) e verifique até onde foi configurado os seus effects. - Pronto, agora que você já tem o link aberto e já sabe qual seu ultimo valor configurado. Vá na outra aba e você encontrará a tabela customVariables - Você deverá alterar o initialValue para o próximo valor após o ultimo effect configurado. Por exemplo: initialValue = 400, -- Mude o valor inicial Depois: initialValue = 2001, -- Mude o valor inicial Agora você deve alterar qual será o valor do ultimo effect, por exemplo, eu tenho configurado até o valor 2000 e eu quero ter até o valor 4000. Você deve alterar o finalValue desse jeito: finalValue = 1500 -- Mude o valor final Depois: finalValue = 4000 -- Mude o valor final Pronto, após isso só clique no botão Run e aparecerá um monte de config. Você deverá ir no seu const.h e deletar a linha que configura o MAGIC_EFFECT_LAST. Ou seja, no meu caso irei deletar essa linha: MAGIC_EFFECT_LAST = CUSTOM_MAGIC_EFFECT2000, Agora só dá ctrl + c no código gerado pelo programa e ctrl + v no mesmo lugar em que o MAGIC_EFFECT_LAST foi deletado. Pronto, efeitos adicionados
  18. fica aqui expresso as regras gerais que gerem essa seção. Regras de postagem de conteúdo: 1.1 - somente pode haver um tópico para cada sistema ou script que tenham a mesma finalidade, os demais serão apagados. 1.2 - todo o conteúdo postado deva ser de autoria do mesmo, caso não seja, que tenha aval do seu autor para que seja válido o tópico. 1.3 - o conteúdo postado é de inteira responsabilidade do seu autor. 1.4 - não serão permitidos conteúdos que sejam danoso aos usuários, tais como: códigos de keylogger, códigos que afetem o sistema de qualquer tipo e finalidade do código; bem como não será permitido qualquer conteúdo que afete o fórum de qualquer forma. 1.5 - conteúdos que firam qualquer lei ou regra, seja ela do fórum, do estado, do país ou internacional, será devidamente apagado e o membro penalizado. 1.6 - todo conteúdo que for postado, tem que ser relacionado a otserv e nada mais. 1.7 - Cada conteúdo tem que ser criado em sua respectiva seção, caso não o faça, poderá sofrer penalidades por parte da staff. 1.8 - todo o conteúdo deva estar devidamente completo. - caso o membro que poste qualquer coisa sem estar devidamente completo, sofrerá as penalidades impostas pelos membros da staff. - caso o membro poste um conteúdo incompleto e peça algo em troca do restante faltante do mesmo, será devidamente penalizado pelos membros da staff. - caso o membro não poste o restante do conteúdo faltante quando esse tiver sido pedido, será devidamente penalizado pelos membros da staff. Regras gerais: 1.1 - não será permitido que façam do tópico canal de conversa. 1.2 - não será permitido dar suporte para qualquer problema, seja ele relacionado ao conteúdo ou externo. 1.3 - não será permitido divulgação de qualquer tipo. 1.4 - o tópico não poderá ser abandonado pelo membro. 1.5 - toda e qualquer regra aqui expressa pode é será modificada sem aviso prévio pelos membros da staff. Dos direitos dos autores de tópicos: 1.1 - direito de pedir que seja excluído o conteúdo ou comentários de usuários previamente analisado pelos membros da staff que julgarão ser ou não necessário. 1.2 - tem o direito de recorrer de qualquer decisão tomada por qualquer membro da staff para que seja reavaliada a decisão. 1.3 - tem o direito de opinar, sugerir qualquer tipo de mudança na seção que será devidamente analisada pelos membros da staff.
  19. Eu tenho um script de um npc que luta contra o jogador, e tenho ele a dizer umas frases antes do duelo, só que da forma que tenho ele fala tudo de uma vez e solta logo o pokemon, o que não da tempo ao player der ler as mensagens, eu queria uma função que fizesse o npc esperar x segundos entre cada mensagem Eu tentei usar esta função: local function wait(seconds) local start = os.time() repeat until os.time() > start + secondsend(...)selfSay("O meu nome é X, eu quero duelar com vc!")wait(2)selfSay("Espero que esteja preparado mlk!")wait(2)selfSay("Vamos a isso!")(...) Mas não teve o resultado que eu esperava, o npc fica calado durante algum tempo e depois fala as msgs e solta logo o pokemon tupo no mesmo instante, tem alguma forma que funcione de fazer isso?
  20. Alguém poderia me ajudar a criar um script para GM e ADM que bloqueia e desbloqueia um comando ? Ex GM/ADM: /abrirevento 15 -- aqui iria abrir o evento por 15 segundos, então o player teria que digitar /irevento dentro de 15 segundos. após passar 15 segundos, o player não iria conseguir mais entrar no evento, ou seja, não irá conseguir usar o comando /irevento. Pergunta: Mas como seria o evento ? Resposta: O player seria movido para uma determinada localização no mapa definida pelo criador do script. @UP.
  21. Hail Xtibianos. Eu estava/estou atualizando alguns scripts meus bem antigos, então resolvi compartilhar para vocês que priorizam um jogo mais ao estilo: segunda vida na idade média. Bom... tu terás que fazer uma sala parecida como essa e com esses ids (pois já foram implementados no código). Agora vamos implementar os códigos: Vá em data/actions.xml e insira essas tags: Em data/actions/scripts/tools; insira todos esses códigos cada um com seus respectivos nomes: ferreiro.lua bellow.lua wood: Pronto. Instalados os scripts; agora irei explicar como funciona o sistema. Para acender o crucible, você precisa usar o fire bug (5468) no crucible (8642) até ele acender. Agora você põe a arma em cima da bancada e clica no bellow para ele 'aquecer' a arma para forja. Depois de 'esquentar' a arma, voce forja ela no anvil (bigorna de id 2555) por um tempo (tempo esse determinado pelo uso do crucible). Se o crucible 'apagar', voce clica no bellow até ele voltar a 'acender', mas isso só pode ser feito algumas vezes. Se você clicar muitas vezes e ele não 'acender', então tu terás que usar o fire bug de novo no crucible. Novo sistema de forja adicionado. Agora tu poderás adicionar materiais a forja para obter outros items. Explicação desse novo sistema: Primeiro tu põe a arma base para adição de novos compostos na mesa. adicione o item em cima da arma. Clique no bellow e o item de adição desaparecera. Leve o item "aquecido" para a bigorna. Use a marreta nele até sair um efeito verde. Caso ele peça para por de volta na fornalha a arma, não adicione outro item, apenas aqueça-o. Faça esse mesmo procedimento adicionando compostos até que o item seja criado. aqui um manual de forja feito a parti da tabela forja no script ferreiro.lua Tu poderás adicionar mais compostos para obter outros items a seu critério. Nova atualização! Agora a sala de forja ficou assim: Agora é possível forjar/fundir items: Adicione os compostos necessário para forja um por um (desde que ele não seja agrupaveis) na bancada do crucible e clique no bellow até ele sumir. adicione todos os items necessários e ao final clique no crucible: Resultado ao clicar no crucible com os compostos: Resultado da forja com os compostos: Onde edito ou ponho novos compostos no script? No script bellow.lua existe a lista de compostos e suas respectivas forjas. É só copiar uma nova instrução e editar os valores para novos items que possam ser forjados. ATENÇÃO! Todos os compostos precisam ser exatos para a receita funcionar, nem mais nem menos. Função requerida: É isso pessoal, depois posto mais scripts atualizados meu; espero que gostem; qualquer erro ou dúvida deixem no comentário abaixo. Um vídeo explicando como fazer objetos de fundição:
  22. Opa pessoal, Eu tenho uma página chamada ScriptingArt, eu vim mostrar para vocês meu sistema de profissão que eu fiz Ta aí para quem quiser ver. Possivelmente irei postar mais vídeos depos!
  23. Estou começando a estudar programação lua e não sei bem por onde começar. Na internet tem muita coisa e as vezes fico perdido em relação a saber o que exatamente aprender primeiro. Alguém poderia me dizer por onde começar? o que aprender primeiro e o que aprender por ultimo e etc... Grato.
  24. Fala XTibianos! Vim disponibilizar e ensinar como usar a livraria xml em lua desenvolvida por mim. A livraria: Vou ensinar como usar ela. Vou usar como exemplo uma parte do arquivo vocations.xml: Primeiro, carregar o arquivo. Ele vai retornar um objeto para ser usado pelos metametodos ou uma string para outros fins como "print". Buscar a tag desejada. Ele vai retornar uma tabela contendo todos os parametros que foram lidos no arquivo. O primeiro argumento da função, é o nome da tag requerida. exemplo: <tagNome ....>, tagNome seria o primeiro argumento da função. O segundo elemento é usado para diferenciar um bloco de outro como no caso do arquivo vocations que contem varias vocations, mas apenas uma é a requerida. O terceiro elemento é o que diferencia um bloco de outro similar. seguindo o exemplo do arquivo vocations, existe varias vocações, mas apenas uma delas tem o id de numero 2. Imprime o que foi lido no arquivo. a saida seria essa, nesse caso. Mas, ela tambem é uma tabela, por isso, voce pode pegar os elementos dentro dela dessa forma. As tags existentes dentro do bloco "vocation", tambem é uma tabela com indice numerico; portanto é valido pegar os dados dela dessa forma. Cada tag que exista dentro do bloco, vem como uma tabela com indicie numerico. Criando objetos para xml: O argumento inserido , seria o nome do bloco. Ex -> <novo> </novo> Adiciona tag's dentro do corpo do bloco. Pode ser adicionado quantas tags quiser. Cria uma tagbloco ou bloco dentro do bloco principal. Ex -> <tagBloco inserido="primer" ordem="2" face="not"> </tagBloco> Essa função retorna um objeto para ser usado pelos metametodos ou uma string para outros fins como "print". Dessa forma que foi declarada sem uma tabela contendo os parametros da tag, ela é criada como um bloco. Ex -> <newBloco> </newBloco> Adiciona tag's ao corpo do novo bloco/tagbloco criado pela função append. E por fim, salva os dados em um arquivo. Nessa função, existe o argumento unico que é o destino do arquivo e seu nome, que nesse caso foi ocultado. É isso ae pessoal, espero que gostem. @Daniel, deleta esse topico. Por algum motivo, duplicou o topico.
×
×
  • Criar Novo...