Ir para conteúdo

robson pablo dos san

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    robson pablo dos san deu reputação a WooX em Lua demo in-game   
    Lua demo in-game
     
    Quando me deparei com a necessidade de ter que fazer e registrar uma talkaction sempre quando fosse testar algum algoritmo ou função Lua, eu decidi fazer esse sisteminha. Ele permite executar códigos e instruções Lua in-game sem a necessidade de dar reload ou sequer sair do client do Tibia, também é possivel executar qualquer função Lua existente na engine em execução no servidor.
     
    Algumas imagens
     
    Instalação
    Crie um arquivo chamado lua.lua dentro do seguinte diretório e com o conteúdo exibido abaixo:
    data/talkactions/scripts/
    function onSay(cid, words, param) registerCreatureEvent(cid, "luaDemo") doShowTextDialog(cid, 1947, true) return true end Após isso crie um outro arquivo, dessa vez chamado lua_demo.lua dentro do seguinte diretório e com o conteúdo exibido abaixo:
    data/creaturescripts/scripts/
    function onTextEdit(cid, item, newText) if item.itemid == 1947 then _G.cid = cid local lines = {} for line in newText:gmatch("[^\n]+") do table.insert(lines, line) end for i = 1, #lines do local func = loadstring(lines[i]) if func then local ret, err = pcall(func) if not ret then doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "[Lua error]:\nline "..i..": "..err) end end end unregisterCreatureEvent(cid, "luaDemo") end return true end Depois basta registrar ambos os scripts conforme indicado abaixo:
    data/talkactions/talkactions.xml
    <talkaction log="yes" words="/lua" access="5" event="script" value="lua.lua"/> data/creaturescripts/creaturescript.xml
    <event type="textedit" name="luaDemo" event="script" value="lua_demo.lua"/>  
    É isso... o sistema da grandes possibilidades aos administradores que souberem Lua e praticidade pra quem for desenvolver ou debugar algum código Lua.
  2. Obrigado
    robson pablo dos san deu reputação a Movie em [SafeZone] Evento by Movie & LuanLuciano   
    [SafeZone 1.x]

    Hellou galera, a um tempo atrás tinha postado um safezone que eu e o @luanluciano93 tinhamos feito e por algumas questões resolvi apagar o tópico.
    Hoje venho postá-lo novamente porém mais otimizado e com maior número de configurações.
    Qualquer bug que houver durante o decorrer do evento só me avisar nesse tópico que irei fixar (SOMENTE NESSE TÓPICO, NÃO ME PROCUREM NO DISCORD NEM VIA PM)

     
    Na pasta lib, crie um arquivo chamado safezone.lua
     
    --[[ Evento SafeZone escrito por LuanLuciano93 e Movie (Movie#4361) Otimizado por Movie Disponibilizado para o TibiaKing e não autorizo outras reproduções Mantenha os créditos <3 --]] SAFEZONE = { teleportTimeClose = 5, eventTimeTotal = 30, positionTeleportOpen = Position(1003, 1217, 7), -- Posição que o portal irá abrir positionEnterEvent = Position(1545, 957, 7), -- Para onde os players irão storage = 12149, -- Não mexa actionId = 6412, -- ActionID que irá no portal ao ser criado, tem que ser o mesmo do movements protectionTileId = {9562, 9563, 9564, 9565}, -- ID dos pisos que serão criados levelMin = 150, minPlayers = 5, maxPlayers = 50, reward = {9020, 5}, -- ID do Item, Quantidade players = {}, days = { ["Sunday"] = {"20:00"}, ["Monday"] = {"20:00"}, ["Tuesday"] = {"20:00"}, ["Wednesday"] = {"20:00"}, ["Thursday"] = {"20:00"}, ["Friday"] = {"20:00"}, ["Saturday"] = {"20:00"}, }, messages = { prefix = "[SafeZone] ", messageStart = "O evento irá começar agora com %d participantes! Boa sorte!", messageNoStart = "O evento não foi iniciado por falta de participantes!", messageTime = "O evento foi finalizado por ultrapassar o limite de tempo!", messageOpen = "O evento foi aberto, você tem %d minutos para entrar no portal do evento que se encontra no templo!", messageWait = "O teleporte para o evento está aberto, você tem %d minuto(s) para entrar!", messageFinish = "O evento foi finalizado e o ganhador foi o %s! Parabéns!", messageWinner = "Você ganhou %d %s como premiação pelo primeiro lugar!", }, lifeColor = { [1] = 94, -- red [2] = 77, -- orange [3] = 79 -- yellow }, positionEvent = {firstTile = {x = 1538, y = 951, z = 7}, tilesX = 15, tilesY = 11} -- No final do tópico ensino a configurar } function SAFEZONE:teleportCheck() local tile = Tile(SAFEZONE.positionTeleportOpen) if tile then local item = tile:getItemById(1387) if item then item:remove() local totalPlayers = SAFEZONE:totalPlayers() if totalPlayers >= SAFEZONE.minPlayers then Game.broadcastMessage(SAFEZONE.messages.prefix .. SAFEZONE.messages.messageStart:format(totalPlayers), MESSAGE_STATUS_WARNING) SAFEZONE:createProtectionTiles() addEvent(function() if totalPlayers > 0 then Game.broadcastMessage(SAFEZONE.messages.prefix .. SAFEZONE.messages.messageTime, MESSAGE_STATUS_WARNING) SAFEZONE:removePlayers() end end, SAFEZONE.eventTimeTotal * 60 * 1000) else Game.broadcastMessage(SAFEZONE.messages.prefix .. SAFEZONE.messages.messageNoStart, MESSAGE_STATUS_WARNING) SAFEZONE:removePlayers() end else Game.broadcastMessage(SAFEZONE.messages.prefix .. SAFEZONE.messages.messageOpen:format(SAFEZONE.teleportTimeClose), MESSAGE_STATUS_WARNING) addEvent(Game.broadcastMessage, (SAFEZONE.teleportTimeClose - 3) * 60 * 1000, SAFEZONE.messages.prefix .. (SAFEZONE.messages.messageWait):format(SAFEZONE.teleportTimeClose - 2)) addEvent(Game.broadcastMessage, (SAFEZONE.teleportTimeClose - 1) * 60 * 1000, SAFEZONE.messages.prefix .. (SAFEZONE.messages.messageWait):format(SAFEZONE.teleportTimeClose - 4)) local teleport = Game.createItem(1387, 1, SAFEZONE.positionTeleportOpen) if teleport then teleport:setActionId(SAFEZONE.actionId) end addEvent(function() SAFEZONE:teleportCheck() end, SAFEZONE.teleportTimeClose * 60000) end end end function SAFEZONE:removePlayers() for a in pairs(SAFEZONE.players) do local player = Player(a) player:setStorageValue(SAFEZONE.storage, 0) player:teleportTo(player:getTown():getTemplePosition()) player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) end end function SAFEZONE:insertPlayer(playerId) SAFEZONE.players[playerId] = {} end function SAFEZONE:removePlayer(playerId) SAFEZONE.players[playerId] = nil end function SAFEZONE:totalPlayers() local x = 0 for a in pairs(SAFEZONE.players) do x = x + 1 end return x end function SAFEZONE:totalProtectionTile() local totalPlayers = SAFEZONE:totalPlayers() if totalPlayers >= 10 then return totalPlayers - 3 else return totalPlayers - 1 end end function SAFEZONE:createProtectionTiles() local totalPlayers = SAFEZONE:totalPlayers() if SAFEZONE:totalPlayers() == 1 then for a in pairs(SAFEZONE.players) do local player = Player(a) if player:getStorageValue(SAFEZONE.storage) > 0 then player:setStorageValue(SAFEZONE.storage, 0) SAFEZONE.players[a] = nil player:teleportTo(player:getTown():getTemplePosition()) player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) local itemType = ItemType(SAFEZONE.reward[1]) if itemType:getId() ~= 0 then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, SAFEZONE.messages.prefix .. SAFEZONE.messages.messageWinner:format(SAFEZONE.reward[2],itemType:getName())) player:addItem(itemType:getId(), SAFEZONE.reward[2]) end Game.broadcastMessage(SAFEZONE.messages.prefix .. SAFEZONE.messages.messageFinish:format(player:getName()), MESSAGE_STATUS_WARNING) end end elseif totalPlayers >= SAFEZONE.minPlayers then local createTiles, totalTiles = 0, SAFEZONE:totalProtectionTile() local tileX = SAFEZONE.positionEvent.firstTile.x local tileY = SAFEZONE.positionEvent.firstTile.y local tileZ = SAFEZONE.positionEvent.firstTile.z local tilesX = SAFEZONE.positionEvent.tilesX local tilesY = SAFEZONE.positionEvent.tilesY local protectionTileId = SAFEZONE.protectionTileId while createTiles < totalTiles do local randomX = math.random(tileX, tileX + tilesX) local randomY = math.random(tileY, tileY + tilesY) local newPosition = Position({x = randomX, y = randomY, z = tileZ}) local tile = Tile(newPosition) if tile then local item1 = tile:getItemById(protectionTileId[1]) local item2 = tile:getItemById(protectionTileId[2]) local item3 = tile:getItemById(protectionTileId[3]) local item4 = tile:getItemById(protectionTileId[4]) if not item1 and not item2 and not item3 and not item4 then local randomTile = math.random(protectionTileId[1], protectionTileId[4]) local tileProtection = Game.createItem(randomTile, 1, newPosition) if tileProtection then tileProtection:getPosition():sendMagicEffect(CONST_ME_ENERGYHIT) addEvent(function() SAFEZONE:deleteProtectionTiles(newPosition, randomTile) end, 5000) createTiles = createTiles + 1 end end end end addEvent(function() SAFEZONE:effectArea(SAFEZONE.positionEvent.firstTile, SAFEZONE.positionEvent.tilesX, SAFEZONE.positionEvent.tilesY) end, 5000) addEvent(function() SAFEZONE:checkPlayersinProtectionTiles() end, 4000) addEvent(function() SAFEZONE:createProtectionTiles() end, 6000) end end function SAFEZONE:deleteProtectionTiles(position, tileId) local tile = Tile(position) if tile then local item = tile:getItemById(tileId) if item then item:getPosition():sendMagicEffect(CONST_ME_POFF) item:remove() end end end function SAFEZONE:checkPlayersinProtectionTiles() local protectionTileId = SAFEZONE.protectionTileId for a in pairs(SAFEZONE.players) do local player = Player(a) if player:getStorageValue(SAFEZONE.storage) > 0 then local tile = Tile(player:getPosition()) if tile then local item1 = tile:getItemById(protectionTileId[1]) local item2 = tile:getItemById(protectionTileId[2]) local item3 = tile:getItemById(protectionTileId[3]) local item4 = tile:getItemById(protectionTileId[4]) if not item1 and not item2 and not item3 and not item4 then if player:getStorageValue(SAFEZONE.storage) > 1 then player:setStorageValue(SAFEZONE.storage, player:getStorageValue(SAFEZONE.storage) - 1) local lifes = player:getStorageValue(SAFEZONE.storage) player:setStorageValue(SAFEZONE.storage, 0) player:getPosition():sendMagicEffect(CONST_ME_FIREAREA) SAFEZONE.players[player:getId()] = nil local outfit = player:getSex() == 0 and 136 or 128 if lifes == 1 then local lifeColor = SAFEZONE.lifeColor[1] player:setOutfit({lookType = outfit, lookHead = lifeColor, lookBody = lifeColor, lookLegs = lifeColor, lookFeet = lifeColor}) elseif lifes == 2 then local lifeColor = SAFEZONE.lifeColor[2] player:setOutfit({lookType = outfit, lookHead = lifeColor, lookBody = lifeColor, lookLegs = lifeColor, lookFeet = lifeColor}) end player:setStorageValue(SAFEZONE.storage, lifes) else player:setStorageValue(SAFEZONE.storage, 0) player:getPosition():sendMagicEffect(CONST_ME_FIREAREA) player:teleportTo(player:getTown():getTemplePosition()) player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) end end end end end end function SAFEZONE:effectArea(firstTile, tilesX, tilesY) local fromPosition = firstTile local toPositionX = fromPosition.x + tilesX local toPositionY = fromPosition.y + tilesY for x = fromPosition.x, toPositionX do for y = fromPosition.y, toPositionY do local position = Position({x = x, y = y, z = fromPosition.z}) if position then position:sendMagicEffect(CONST_ME_SMALLPLANTS) end end end end Não esqueça de registrar essa lib no lib.lua

     
    Agora na pasta movements/scripts crie um arquivo chamado safezone.lua
    --[[ Evento SafeZone escrito por LuanLuciano93 e Movie (Movie#4361) Otimizado por Movie Disponibilizado para o TibiaKing e não autorizo outras reproduções Mantenha os créditos <3 --]] function onStepIn(creature, item, position, fromPosition) local player = creature:getPlayer() if not player then return true end if player:getGroup():getAccess() then player:teleportTo(SAFEZONE.positionEnterEvent) return true end if player:getLevel() < SAFEZONE.levelMin then player:sendCancelMessage(SAFEZONE.messages.prefix .."Você precisa ser level " .. SAFEZONE.levelMin .. "ou maior para entrar no evento.") player:teleportTo(fromPosition, true) player:getPosition():sendMagicEffect(CONST_ME_POFF) return true end if player:getItemCount(2165) >= 1 then player:sendCancelMessage(SAFEZONE.messages.prefix .."Você não pode entrar com um stealth ring no evento.") player:teleportTo(fromPosition, true) player:getPosition():sendMagicEffect(CONST_ME_POFF) return true end local ring = player:getSlotItem(CONST_SLOT_RING) if ring then if ring:getId() == 2202 then player:sendCancelMessage(SAFEZONE.messages.prefix .." Você não pode entrar no evento com um stealth ring.") player:teleportTo(fromPosition, true) player:getPosition():sendMagicEffect(CONST_ME_POFF) return true end end for a in pairs(SAFEZONE.players) do target = Player(a) if player:getIp() == target:getIp() then player:sendCancelMessage(SAFEZONE.messages.prefix .. "Você já possui um outro player dentro do evento.") player:teleportTo(fromPosition, true) player:getPosition():sendMagicEffect(CONST_ME_POFF) return true end end if SAFEZONE:totalPlayers() >= SAFEZONE.maxPlayers then player:sendCancelMessage(SAFEZONE.messages.prefix .. "O evento já atingiu o número máximo de participantes.") player:teleportTo(fromPosition, true) player:getPosition():sendMagicEffect(CONST_ME_POFF) return true end local outfit = player:getSex() == 0 and 136 or 128 local treeLifeColor = SAFEZONE.lifeColor[3] player:setOutfit({lookType = outfit, lookHead = treeLifeColor, lookBody = treeLifeColor, lookLegs = treeLifeColor, lookFeet = treeLifeColor}) player:sendTextMessage(MESSAGE_INFO_DESCR, SAFEZONE.messages.prefix .."Você entrou no evento. Boa sorte!") player:teleportTo(SAFEZONE.positionEnterEvent) player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) player:setStorageValue(SAFEZONE.storage, 3) SAFEZONE:insertPlayer(player:getId()) return true end <movevent event="StepIn" actionid="6412" script="safezone.lua" />
    Agora vá na pasta globalevents/scripts e crie o arquivo safezone.lua
    function onThink(interval) if SAFEZONE.days[os.date("%A")] then local hrs = tostring(os.date("%X")):sub(1, 5) if isInArray(SAFEZONE.days[os.date("%A")], hrs) then SAFEZONE:teleportCheck() end end return true end <globalevent name="SafeZone" interval="60000" script="safezone.lua" />  

     

     
    No quadrado azul marinho você configura a posição do 
    firstTile = {x = x, y = y, z = z} Em verde, você conta quantos quadrados existem e coloque em
    tilesX = quantidade Em vermelho, você conta quantos quadrados existem e coloque em
    tilesY = quantidade De resto, as outras configurações estão bem explícitas.

     
    Créditos
    30% Movie
    69% @luanluciano93
    1% @WooX (pela divisória rs)

     
  3. Gostei
    robson pablo dos san deu reputação a luanluciano93 em Addon Doll   
    Olá pessoal, para quem não sabe esse script funciona da seguinte maneira, você escolhe um X item, e se o player tiver esse X item, e falar !addon "[nome do addon] ele ganha o addon full que ele escolheu.
     
    Crie um arquivo com o nome addondoll.lua em talkactions/scripts e coloque isso dentro:
    local outfits = { --[outfit] = {id_female, id_male} ["citizen"] = {136, 128}, ["hunter"] = {137, 129}, ["mage"] = {138, 130}, ["knight"] = {139, 131}, ["noblewoman"] = {140, 132}, ["summoner"] = {141, 133}, ["warrior"] = {142, 134}, ["barbarian"] = {147, 143}, ["druid"] = {148, 144}, ["wizard"] = {149, 145}, ["oriental"] = {150, 146}, ["pirate"] = {155, 151}, ["assassin"] = {156, 152}, ["beggar"] = {157, 153}, ["shaman"] = {158, 154}, ["norsewoman"] = {252, 251}, ["nightmare"] = {269, 268}, ["jester"] = {270, 273}, ["brotherhood"] = {279, 278}, ["demonhunter"] = {288, 289}, ["yalaharian"] = {324, 325}, ["warmaster"] = {336, 335}, ["wayfarer"] = {366, 367}, ["afflicted"] = {431, 430}, ["elementalist"] = {433, 432}, ["deepling"] = {464, 463}, ["insectoid"] = {466, 465}, ["red baron"] = {471, 472}, ["crystal warlord"] = {513, 512}, ["soil guardian"] = {514, 516}, ["demon"] = {542, 541} } function onSay(player, words, param) local addondoll_id = 9693 if player:getItemCount(addondoll_id) > 0 then local word = outfits[string.lower(param)] if param ~= "" and word then if (not player:hasOutfit(word[1], 3) or not player:hasOutfit(word[2], 3)) and player:removeItem(addondoll_id, 1) then player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS) player:addOutfitAddon(word[1], 3) player:addOutfitAddon(word[2], 3) player:sendTextMessage(MESSAGE_INFO_DESCR, "Seu Addon full foi adicionado!") else player:sendCancelMessage("Voce ja tem este addon") end else player:sendCancelMessage("Digite novamente, algo esta errado!") end else player:sendCancelMessage("Voce nao tem addon doll!") end return true end  
    E em talkactions.xml adcione a tag:
    <talkaction words="!addon" script="addondoll.lua"/> Para editar é fácil, nesta parte: 
     
    local addondoll_id = 9693

    Você escolhe o id do item que será o addon doll.
     
    E caso queira adicionar algum addon novo que não esteja configurado adicione ele na tabela male e female em sequencia aos outros. 

    Exemplo: local
     
     --[outfit] = {id_female, id_male}
     
    Para usar no servidor é só usar o comando !addon "nomedoaddon
     
    Bem simples né pessoal ?! Espero ter ajudado, abraços!
  4. Gostei
    robson pablo dos san deu reputação a lordzetros em [TFS 1.3] TARO EVENT - Novo evento para OT   
    * Apresentação *
    Bom, galera, tá tudo explicado no vídeo de como funciona o evento [Manual e Automático], como configurar o arquivo e tudo mais.
    Arquivos do evento estão anexado no tópico, assim como o vírus scan também, :). 
     
     
    * Vídeo * 
          
     
    * Comandos *
    !taro abrir 
    Utilizado por staffs para abrir o evento [Manual]
     
    !taro fechar
    Utilizado por staffs para fechar o evento [Manual]
     
    !taro encerrar
    Utilizado por staffs para encerrar o evento [Manual]
     
    !taro kick,nome_jogador
    Utilizado por staffs e PLAYERS para kickar alguém do evento
     
     
    * Links * 
    Vírus scan: https://www.virustotal.com/pt/file/7b30879de2745ef020a06de135dae7bd80673eb0d5d2f80b22b1f2a6db5158e0/analysis/1548894947/
    Download: Taro Event - Lordzetros.zip
     
     
     
    Dúvidas, sugestões, críticas ou bugs? Deixe abaixo,  
  5. Gostei
    robson pablo dos san deu reputação a tonyplyson em [Client] Tibia em Flash *Todas as Versoes*   
    Olá galera do forum , eu achei um client na web , muito Louko
    Ele possui

    Auto Update direto no client
    Ipchanger , na opçao login
    Tamanho de fonte
    Bot diretamente no client *Com várias funçoes*
    Ele funciona em todas as versoes do tibia *Só modificar*

    Irei postar o Link do Client abaixo
    Link do Client

    Agora irei postar um video que mostra um pouco mais do client



    Créditos do Criador do Client > RonIt
    Site > RonIt.pl

    Créditos por Trazer no Forum > Euzinho

    OBS > Quando voce terminar de Baxiar o client , irá abrir 2 progaminhas (Open Al e Diretx9.0x)
    é obrigatório voce baixar o Open Al
    Se voce já tiver o Diretx9.0x , nao é nescesário baixar novamente !

    Espero que gostem

    Mereço Rep+ . Se voce acha que sim . clique em (Gostei) , se voce acha que nao , Clique em (Gostei)

    Flw
  6. Gostei
    robson pablo dos san deu reputação a 3visan em [Aula 11] Funções   
    Bem amigos da rede globo, estou aqui para dar continuidade as aulas. E a aula de hoje é sobre Funções, suas utilizações e como criar.



    O que são?


    Bom, você jovem padawan já deve ter se deparado com algo assim em algum script:

    function doPlayerAddAddons(cid, addon) for i = 0, table.maxn(maleOutfits) do doPlayerAddOutfit(cid, maleOutfits[i], addon) end for i = 0, table.maxn(femaleOutfits) do doPlayerAddOutfit(cid, femaleOutfits[i], addon) end end Peguei essa função no arquivo lib/functions.lua Isso é uma função (dãa). As funções são blocos de instruções (comandos) que o servidor lê e executa. Você tem a liberdade de criar elas na pasta lib e usar em todos os seus scripts ou apenas criar e usar em um unico script. Elas tambem podem ser criadas no próprio distro (sources) e compiladas, se tornando assim uma função própria do teu servidor. local items = {} for i=1,10 do if isPlayer(cid) and getPlayerSlotItem(cid, i).uid ~= (nil or 0) then table.insert(items, getPlayerSlotItem(cid, i).itemid) end end Isso retornaria os ids dos items do corpo do player. Mas agora suponhamos que você precisa usar isso umas 3x. Você teria que ficar repetindo isso pelas 3x. Então seria bem mais pratico criar um "atalho" para isso. E é ai que entra a parte das funções, tu cria uma função que irá executar esse bloco de ações toda vez que você chama-la. Exemplo: unction getPlayerItemsOnBody(cid) local items = {} for i=1,10 do if isPlayer(cid) and getPlayerSlotItem(cid, i).uid ~= (nil or 0) then table.insert(items, getPlayerSlotItem(cid, i)) end end return items end Agora, sempre que você precisar pegar todos os items do player, você apenas usa a função getPlayerItemsOnBody (Função criada pelo dalvorsn). function getPlayerItemsOnBody(cid) function - Nessa parte, estou declarando a função (tal como declarar uma variável) getPlayerItemsOnBody - Aqui estou declarando o nome da função (geralmente a primeira letra da primeira palavra é minuscula e o resto das primeiras letras das outras palavras são maiúsculas, mas isso é só frescura, nada obrigatório) (cid) - Aqui, eu estou declarando os parâmetros para a função. No caso só vou usar a cid. Mas você pode colocar os parâmetros que for precisar. 2º Parte: Escopo. local items = {} for i=1,10 do if isPlayer(cid) and getPlayerSlotItem(cid, i).uid ~= (nil or 0) then table.insert(items, getPlayerSlotItem(cid, i)) end end Esse é o escopo da função, onde você cria o corpo da função. Pode botar outras funções, variáveis, tabelas e estruturas de controle/repetição. 3º Parte: Return. return items Nessa linha, você especifica o que você quer que a função retorne. No meu caso, eu botei para retornar a tabela items. Tu pode botar valores booleanos, variáveis, tabelas e até outras funções. 4º Parte: Fechamento. end


    Bem, logicamente é nessa parte que você especifica o fim da função.

    Onde cria-las?



    Bom, existem duas maneiras de criar uma função:

    Função local.

    Criando uma função local no script, você poderá usa-la inúmeras vezes dentro do script. Porem, ela só poderá ser usada só nesse script.
    Função global (libs).

    Criando a função dentro de um arquivo .lua dentro da pasta libs do teu server, tu criará uma função global. Elas podem ser usadas em todos os seus scripts, sem restrições.



    Exercícios de fixação.



    Tu deverá criar uma função que mudará a town do personagem para a town escolhida e teleportará o player para tal town.

    Funções necessárias:

    getTownTemplePosition(townId)
    doPlayerSetTown(cid, townid)
    doTeleportThing(cid,pos)

    Funções Opcionais:
    doSendMagicEffect(pos, type)

    Resposta




    Creditos:
    99% iuniX
    1% Vittu
    Quais são suas utilidades? Vamos lá, suponhamos que você tenha que pegar todos os items do corpo de um player várias vezes. Tu teria que usar toda vez algo mais ou menos assim: Como fazer? Agora vamos começar criar nossas próprias funções. Vou explicar linha por linha. 1º Parte: Declaração da função, nome da função e parâmetros.
  7. Gostei
    robson pablo dos san deu reputação a MaXwEllDeN em Criando Funções   
    O return é literalmente RETORNAR. Vamos ver uma função simples:


    function mostrar_oi() print("oi") end Essa função não retorna nada, ela simplesmente faz imprimir na tela "oi". Agora vamos pensar no seguinte caso: Eu quero uma função que me dê o valor da soma de dois números, como ficaria? function somar(numero1, numero2) return numero1 + numero2 end Bem, essa função vai somar os dois parâmetros(numero1, numero2) e retorná-los, mas você pensa: Como assim retorná-los? Seguinte: local ummaisdois = somar(1, 2) print(ummaisdois)

    O que aconteceria nesse caso aí seria: A função somar, iria somar o número 1 com o número 2, e guardaria o valor na variável ummaisdois.

    Sobre return true e false:
    Olha, o return vai retornar um valor como mostrado anteriormente. Então se eu colocar return true ele vai retornar verdadeiro, e se eu colocar return false ele vai retornar falso. O return true nas funções "callback" do Open Tibia, como na function onSay(cid, words, param) serve "para indicar se ocorreu tudo bem na execução da função". Se eu coloco um return true em uma function onSay, quando o personagem falar as palavras configuradas no talkaction.xml, o servidor vai executar o script, mas não vai fazer o player "falar". Quando você coloca um return false ele executa o script, só que o player "fala" as words que estavam no talkaction.xml.
  8. Gostei
    robson pablo dos san deu reputação a Hona em Criando instalador para Client   
    Criando instalador para Client













    Download:
    baixaki,mediafire,4shared





    Abra o aplicativo [ Install Creator ].



    Depois você vera uma tela em cima do aplicativo.








    Click em avançar.








    Agora escolha os arquivos lembrando elis devem estar em uma pasta.



    (o programa ira copiar tudo que estiver dentro da pasta)








    Depois de escolher os arquivos.



    Escolha o idioma de sua preferencia.



    Escolha o nome do programa.








    Depois click em avançar.




    Agora vc escolhe se seu instalador sera full (tela cheia)ou small (pequeno).








    Depois click em avançar.





    Olhe a imagem abaixo e façam o ki estar nela.








    Depois de configurar click em avançar.








    Agora coloque tudo sobre o aplicativo que vc quer criar.








    Depois click em avançar.





    Agora coloque a descrição da sua licença.








    Depois click em avançar.





    Agora escolha o local a onde o seu jogo sera salvo depois de instalado no pc do jogador.








    Depois click em avançar.





    Agora vamos criar um atalho para seu arquivo.



    Procure seu arquivo .exe na pasta.












    Agora coloque o nome do seu atalho.








    Depois marque a caixa que diz: Add desktop shortcut








    Agora click em avançar.








    Aki deixe em branco.







    Agora click em avançar







    Agora selecione se quer ou não uninstaller.







    Depois click em avançar.







    Agora marque a caixa que diz do not build the install program







    Agora clique em concluir.







    Agora click em Build.







    Agora escolha onde vai salvar o instalador.







    Depois inicie o teste se ficou como vc queria.




















    Creditos: Adriano C

Informação Importante

Confirmação de Termo