Ir para conteúdo

leozincorsair

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    leozincorsair recebeu reputação de Vorkhon em [AJUDA] Summon que explode   
    eu tenho esse:
     .. Só que tem um problema, o summon explode antes de chegar no alvo :(
     
     
    --Created with SuperVego-- local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 214) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, 39) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -88.5, 5, -88.5, 5) arr = { {1, 1, 1}, {1, 3, 1}, {1, 1, 1}, } local area = createCombatArea(arr) setCombatArea(combat, area) function onCastSpell(cid, var) doCreatureAddHealth(cid, -(getCreatureMaxHealth(cid) / 100) * 100) return doCombat(cid, combat, var) end  
  2. Gostei
    leozincorsair deu reputação a Muvuka em revscript Converter Essa Magia Para TFS 0.4   
    local combat1 = createCombatObject() setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE) setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_FIREATTACK) setCombatFormula(combat1, COMBAT_FORMULA_LEVELMAGIC, -9999.9, -9999.9, -9999.9, -9999.9) local combat2 = createCombatObject() setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_WATERSPLASH) setCombatFormula(combat2, COMBAT_FORMULA_LEVELMAGIC, -9999.9, -9999.9, -9999.9, -9999.9) local combat3 = createCombatObject() setCombatParam(combat3, COMBAT_PARAM_TYPE, COMBAT_MANADRAIN) setCombatParam(combat3, COMBAT_PARAM_EFFECT, CONST_ME_EXPLOSIONHIT) setCombatFormula(combat3, COMBAT_FORMULA_LEVELMAGIC, -9999.9, -9999.9, -9999.9, -9999.9) local combat4 = createCombatObject() setCombatParam(combat4, COMBAT_PARAM_TYPE, COMBAT_LIFEDRAIN) setCombatParam(combat4, COMBAT_PARAM_EFFECT, CONST_ME_TUTORIALSQUARE) setCombatFormula(combat4, COMBAT_FORMULA_LEVELMAGIC, -9999.9, -9999.9, -9999.9, -9999.9) local combat5 = createCombatObject() setCombatParam(combat5, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat5, COMBAT_PARAM_EFFECT, CONST_ME_HOLYAREA) setCombatFormula(combat5, COMBAT_FORMULA_LEVELMAGIC, -9999.9, -9999.9, -9999.9, -9999.9) arr1 = { {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, } arr2 = { {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, } arr3 = { {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, } arr4 = { {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, } arr5 = { {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, } local area1 = createCombatArea(arr1) local area2 = createCombatArea(arr2) local area3 = createCombatArea(arr3) local area4 = createCombatArea(arr4) local area5 = createCombatArea(arr5) setCombatArea(combat1, area1) setCombatArea(combat2, area2) setCombatArea(combat3, area3) setCombatArea(combat4, area4) setCombatArea(combat5, area5) local function onCastSpell1(parameters) doCombat(parameters.cid, parameters.combat1, parameters.var) end local function onCastSpell2(parameters) doCombat(parameters.cid, parameters.combat2, parameters.var) end local function onCastSpell3(parameters) doCombat(parameters.cid, parameters.combat3, parameters.var) end local function onCastSpell4(parameters) doCombat(parameters.cid, parameters.combat4, parameters.var) end local function onCastSpell5(parameters) doCombat(parameters.cid, parameters.combat5, parameters.var) end function onCastSpell(cid, var) local parameters = { cid = cid, var = var, combat1 = combat1, combat2 = combat2, combat3 = combat3, combat4 = combat4, combat5 = combat5 } addEvent(onCastSpell1, 100, parameters) addEvent(onCastSpell2, 500, parameters) addEvent(onCastSpell3, 500, parameters) addEvent(onCastSpell4, 500, parameters) addEvent(onCastSpell5, 500, parameters) end  
    A DEMANDA.
  3. Curtir
    leozincorsair deu reputação a Imperius em [TFS 0.4] SafeZone Event - Adaptação de compatibilidade   
    Olá! Fiz uma adaptação no evento "SafeZone" criado e disponibilizado aqui no TK por @Movie e @luanluciano93.
     
     
    Agora o evento é compatível para TFS 0.4.
     
    IMPORTANTE:  Como mencionado anteriormente, o evento foi criado por "Movie" e "LuanLuciano93". Eu (imperius) APENAS ADAPTEI para funcionar em TFS 0.4. Todos os créditos do evento vão para os criadores originais. Além disso, é importante alertar que esta adaptação não está 100%.
     
    Abaixo está todo o processo explicando como configurar e rodar o evento em seu servidor!
     
     
    Vídeo demonstrativo:
     
     
     
    em data > lib > crie um arquivo chamado safeZone.lua
     
     
     
    data > globalevents > globalevents.xml
     
     
     
    em data > globalevents > scripts > crie um arquivo chamado safeZoneEvent.lua
     
     
     
    data > movements > movements.xml
     
     
     
    em data > movements > scripts > crie um arquivo chamado safeZoneMovement.lua
     
     
     
    por fim, vá até o banco de dados do seu servidor e adicione o seguinte código em "SQL"
     
     
    É isso! Espero ter ajudado o pessoal do TFS 0.4
  4. Gostei
    leozincorsair deu reputação a Imperius em [8.60 | TFS 0.4] - NPC Gênio da Lâmpada   
    Olá! Estou disponibilizando um NPC que desenvolvi. Porém, devo avisar que só testei em TFS 0.4, e não posso garantir que funcionará em outras versões.
     
    Sobre:
     
    O NPC em questão é o "Gênio da Lâmpada". Para chegar até ele, o jogador precisa ter a "Lâmpada Mágica", que pode ser adquirida através de uma quest ou em algum evento do servidor, por exemplo.
     
    A lâmpada pode ser usada apenas uma vez e, mesmo que o jogador obtenha outra lâmpada, não poderá usá-la novamente. Ao usar a Lâmpada, o jogador será teleportado para a sala do Gênio. Lá, ele não poderá sair até realizar os três desejos.
     
    O Gênio pode atender desejos como "entregar itens", "reiniciar tasks", "completar addons" e até mesmo "matar um jogador". Você pode personalizar o NPC para oferecer outras recompensas, como "vip days", "premium points" ou "remover redskull". Seja criativo! :)
     
    Após o Gênio realizar os três desejos, o jogador será teleportado para o seu templo de origem.
     
     
    Vídeo demonstrativo:
     
     
     
     
    data > actions > actions.xml
     
     
     
    data > actions > lampadaDoGenio.lua
     
     
     
    data > npc > Genio.xml
     
     
     
    data > npc > scripts > Genio.lua
     
     
     
    Isso é tudo! Se tiverem sugestões ou dúvidas, estou à disposição!
  5. Curtir
    leozincorsair deu reputação a L3K0T em Fiz esse site de DBO pra um amigo meu   
    Só apreciem, tudo que tem de DBO eu coloquei e além de efeitos. NÃO ESTÁ TERMINADO.
     

     

     

    2022-10-07 03-40-08.mp4
  6. Obrigado
    leozincorsair deu reputação a L3K0T em Spell que sumona 4 monstros ou mais (testado em tfs 0.4)   
    SUMMON SPELLS
     
     
    Como o nome diz é uma spell que sumona até 4 monstros ou podendo adicionar mais, legal pra naruto etc... Então para não perder ou ficar em vão, irei deixar pra vocês e já com as correções.
     
     
    DEMONSTRAÇÃO

    2022-09-01 00-08-30.mp4  
     
    INSTALANDO
    1: primeiro vá em data/spells/scripts e crie um arquivo.lua e adicione isso abaixo dentro dele e em seguida salve.
    function onCastSpell(cid, var) local from,to = {x=962, y=885, z=7},{x=973, y=892, z=7} local from2,to2 = {x=979, y=901, z=7},{x=991, y=905, z=7} local dir = getPlayerLookDir(cid) local ppos = getPlayerPosition(cid) if(dir==1)then ppos.x = ppos.x + 1 elseif(dir==2)then ppos.y = ppos.y + 1 elseif(dir==3)then ppos.x = ppos.x - 1 elseif(dir==0)then ppos.y = ppos.y - 1 end local summon = getCreatureSummons(cid) local MaximoSummon = 0 if isInRange(getCreaturePosition(cid), from, to) or isInRange(getCreaturePosition(cid), from2, to2) then doPlayerSendCancel(cid, "Você não pode usar Summons Aqui!") return false end if (table.maxn(summon) > MaximoSummon) then doPlayerSendTextMessage(cid, 22, "Voce ainda tem summons em batalha!") return false end local clone1 = doConvinceCreature(cid, doCreateMonster("Morgaroth", ppos)) local clone2 = doConvinceCreature(cid, doCreateMonster("Demon", ppos)) local clone3 = doConvinceCreature(cid, doCreateMonster("Terror Bird", ppos)) local clone4 = doConvinceCreature(cid, doCreateMonster("Giant Spider", ppos)) doPlayerSendTextMessage(cid, 22, "Voce summonou 4 criaturas!") end  
     
    2: agora vá em data/spells/ e abra o arquivo spells.xml e coloca isso dentro e salve
     
    <instant name="Sumonar" words="!help" lvl="0" mana="0" aggressive="0" params="1" exhaustion="1000" needlearn="0" event="script" value="arquivo.lua"> </instant>  

    2022-09-01 00-28-08.mp4 Pronto! agora é só usar a imaginação, pode adicionar monstro diferente ou do mesmo quantas vezes quiser.
     
    créditos fonte: @Lenilson e L3K0T
     
     
     
     
     
  7. Curtir
    to nessa desde o inicio do post, mais ngm resolveu kkk
  8. Obrigado
    ta traduzido algumas partes do script, e me diz uma coisa e pra jogar na mesma script do outro, ou criar uma nova?
  9. Obrigado
    Opa galerinha olha eu aqui de novo vim tirar uma duvida do @leozincorsair espero que dessa vez eu consiga me expressar melhor bom vamos la
     
    dps que voce baixou o mapa do castle e implantou as scripts , hora de configurar bom é bem simples , (mas é nessa parte que alguns se perde)
     
     

     
     
    BOM VA NA SUA DATA - LIB - 015-COH 
    COH_AREA = {{x = 1005, y = 1139, z = 7}, {x = 380, y = 141, z = 3}} NESSA PARTE É AONDE CONFIGURA A EXPULSÃO DE QUEM PERDE O CASTLE OU DE OUTRA GUILD ENTROSADA NO MEIO DO CASTLE 
    ESSA É UMA DAS PARTES MAIS IMPORTANTES DOS SCRIPTS PARA EXPULSAR QUALQUER UM QUE NAO SEJA DA GUILD DOMINANTE
    ENTAO VAMOS LA 
    AONDE EU MARQUEI NA FOTO DO MAPA O X É A PRIMEIRA POS QUE VOCE TEM Q CONFIGURAR 
    O Y É A SEGUNDA POS . VO EXPLICAR MELHOR 
     O CASTLE TEM VARIOS ANDARES
     





    COMO O SCRIPT VAI RECONHEÇER TODOS OS ANDARES DO CASTLE ?
     
    É FACIL E SIMPLES , VOCE VAI NO MAPA EDITOR VE A PRIMEIRA POS X NA FOTO
    POR EXEMPLO X=100 Y=100 Z=7 VAI ATE O ULTIMO ANDAR DO CASTLE SE ELE FICA NA Z=3 VOCE VAI POR 
    A PRIMEIRA POS X ( X=100 Y=100 Z=3 )    A POS Z NA FOTO E AO CONTRARIO SE TIVER X=300 Y=300 Z=7
    SE VAI POR X=300 Y=300 Z=12
     
    COH_AREA = {{x = 100, y = 100, z = 12}, {x = 300, y = 300, z = 3}}
     
    DESSE JEITO A POS Z VAI RECONHECER TODOS OS ANDARES ESPERO QUE DESSA VEZ VOCES ENTENDÃO MELHOR 
     
    ESSE SCRIPT É COMO SE FOSSE UMA CAIXA 
     

    VOCE TEM QUE FORMA A CAIXA ENVOLTA DO SEU MAPA PELA SCRIPT 
    PELA LOGICA É MT FACIL VOCE PRECISA DE 2 PONTOS 

     
    ESPERO TER AJUDADO VOCES FUIIZ
     
  10. Obrigado
    ERA UM PROBLEMA MUITO SIMPLES, NAO DA PARTE DO SCRIPT SIM DE MINHA PARTE DA IGNORANCIA E IMPACIENCIA , FOI MT SIMPLES AJEITAR A EXPULSÃO DOS PERDEDORES.
    PARA AQUELES QUE TAMBÉM TEM DIFICULDADE, É SÓ MARCA A POS DO INICIO E DO FINAL DO CASTLE FORMANDO UM QUADRADO 
     
    COH_AREA = {{x = 1005, y = 1139, z = 7}, {x = 380, y = 141, z = 3}} ESSA PARTE VOCE VAI POR O TOTAL DO CASTLE TOPO 
    COH_AREA = {{x = 1000, y = 1000, z = 1 LADO ESQUERDO }, {x = , y = 2000, z = 9 lado DIREITO}} EXEMPLO :          A SCRIPT VAI FUNCIONA ASSIM         X-------------------------
                                                                                            -                                   -
                                                                                            -            castle              -
                                                                                            -                                   -
                                                                                            -                                   -
                                                                                            -------------------------Z              importante coloca z:1 lado esquerdo e z:9 
                                                                                                                                                   para ele reconhecer todos os andares 
     
     
    ESPERO QUE ENTENDAM 
      
     
    TODOS OS CREDITOS A ROKSAS , SCRIPT E MAPA TOTALMENTE COMPLETO PARABÉNS.
    TOPICO FECHADO !!!!
  11. Obrigado
    leozincorsair deu reputação a Vodkart em (Resolvido)Ajuda nesse script de slot, por favor !!   
    Tente trocar essa função:
     
    local function getper() local n = 1 for i=1,10 do n = n+math.random(0,10) if n < 8*i then break end end return n end  
    por
     
    local function getper() local min, max = 1, 10 return math.random(min, max) end  
    máximo está 10%
  12. Obrigado
    leozincorsair deu reputação a Vodkart em Me ajudem a arrumar esse bug com esse NPC de task!   
    <?xml version="1.0" encoding="UTF-8"?> <mod name="Simple Task" version="3.0" author="Vodkart" contact="xtibia.com" enabled="yes"> <config name="task_func"><![CDATA[ tasktabble = { ["diabolic"] = {monster_race={"diabolic"}, storage_start = 200201, storage = 91001,count = 2000,exp = 2350000,money = 3500000, reward = {{11717,20},{9970,200}}}, ["nukenin"] = {monster_race={"nukenin"}, storage_start = 200202, storage = 91002,count = 2000,exp = 2350000,money = 3500000, reward = {{11717,20},{9970,200}}}, ["task orochimaru"] = {monster_race={"task orochimaru"}, storage_start = 200239, storage = 91039,count = 20, exp = 2350000, money = 3500000, reward = {{11717,10},{9970,200}}} } configbosses_task = { {race = "minotaur",Playerpos = {x = 189, y = 57, z = 7}, FromPosToPos = {{x = 186, y = 54, z = 7},{x = 193, y = 60, z = 7}},time = 5}, {race = "necromancer",Playerpos = {x = 196, y = 39, z = 7}, FromPosToPos = {{x = 195, y = 37, z = 7},{x = 198, y = 41, z = 7}}, time = 5}, {race = "dragon",Playerpos = {x = 208, y = 59, z = 7}, FromPosToPos = {{x = 206, y = 56, z = 7},{x = 209, y = 65, z = 7}}, time = 5} } function isSummon(uid) return uid ~= getCreatureMaster(uid) or false end function CheckTask(cid) for k, v in pairs(tasktabble) do if getPlayerStorageValue(cid,v.storage_start) >= 1 then return true end end return false end function finisheAllTask(cid) local config = { exp = {false,350000}, money = {false,350000}, items ={false,{{11191,20},{11192,20}}}, premium ={true,5} } local x = true for k, v in pairs(tasktabble) do if tonumber(getPlayerStorageValue(cid,v.storage)) then x = false end end if x == true then setPlayerStorageValue(cid, 521456, 0) local b = getGlobalStorageValue(63005) if b == -1 then b = 1 end if b < 11 then setGlobalStorageValue(63005,b+1) doBroadcastMessage('[Task Mission Complete] '..getCreatureName(cid)..' was the '..b..' to finish the task!.') doPlayerAddPremiumDays(cid, config.premium[1] == true and config.premium[2] or 0) doPlayerAddExp(cid, config.exp[1] == true and config.exp[2] or 0) doPlayerAddMoney(cid, config.money[1] == true and config.money[2] or 0) if config.items[1] == true then doAddItemsFromList(cid,config.items[2]) end doItemSetAttribute(doPlayerAddItem(cid, 7369), "name", "trophy "..getCreatureName(cid).." completed all the task.") end end end function HavePlayerPosition(cid, from, to) return isInRange(getPlayerPosition(cid), from, to) and true or false end function getRankStorage(cid, value, max, RankName) -- by vodka local str ="" str = "--[".. (RankName == nil and "RANK STORAGE" or ""..RankName.."") .."]--\n\n" local query = db.getResult("SELECT `player_id`, `value` FROM `player_storage` WHERE `key` = "..value.." ORDER BY cast(value as INTEGER) DESC;") if (query:getID() ~= -1) then k = 1 repeat if k > max then break end str = str .. "\n " .. k .. ". "..getPlayerNameByGUID(query:getDataString("player_id")).." - [" .. query:getDataInt("value") .. "]" k = k + 1 until not query:next() end return doShowTextDialog(cid, 2529, str) end function getItemsInContainerById(container, itemid) -- Function By Kydrai local items = {} if isContainer(container) and getContainerSize(container) > 0 then for slot=0, (getContainerSize(container)-1) do local item = getContainerItem(container, slot) if isContainer(item.uid) then local itemsbag = getItemsInContainerById(item.uid, itemid) for i=0, #itemsbag do table.insert(items, itemsbag[i]) end else if itemid == item.itemid then table.insert(items, item.uid) end end end end return items end function getItemsFromList(items) -- by vodka local str = '' if table.maxn(items) > 0 then for i = 1, table.maxn(items) do str = str .. items[i][2] .. ' ' .. getItemNameById(items[i][1]) if i ~= table.maxn(items) then str = str .. ', ' end end end return str end function doAddItemsFromList(cid, items) local backpack = doPlayerAddItem(cid, 1999, 1) -- backpackID for _, i_i in ipairs(items) do local item, amount = i_i[1],i_i[2] if isItemStackable(item) or amount == 1 then doAddContainerItem(backpack, item, amount) else for i = 1, amount do doAddContainerItem(backpack, item, 1) end end end end function pairsByKeys(t, f) local a = {} for n in pairs(t) do table.insert(a, n) end table.sort(a, f) local i = 0 local iter = function () i = i + 1 if a[i] == nil then return nil else return a[i], t[a[i]] end end return iter end ]]></config> <event type="login" name="TaskLogin" event="script"><![CDATA[ function onLogin(cid) registerCreatureEvent(cid, "KillTask") return true end]]></event> <talkaction words="/task;!task" event="buffer"><![CDATA[ domodlib('task_func') local param = string.lower(param) if param == "rank" then getRankStorage(cid, 521456, 20, "Task Rank Finalizadas") return true end local str = "" str = str .. "Task Completed :\n\n" for k, v in pairsByKeys(tasktabble) do local contagem = getPlayerStorageValue(cid, v.storage) if (contagem == -1) then contagem = 1 end str = str..k.." = ".. (not tonumber(contagem) and "["..contagem.."]" or "["..((contagem)-1).."/"..v.count.."]") .."\n" end str = str .. "" return doShowTextDialog(cid, 8983, str) ]]></talkaction> <event type="kill" name="KillTask" event="script"><![CDATA[ domodlib('task_func') function onKill(cid, target, lastHit) if isMonster(target) then local n = string.lower(getCreatureName(target)) for race, mob in pairs(tasktabble) do if getPlayerStorageValue(cid,mob .storage_start) >= 1 then for i = 1,#mob.monster_race do if n == mob.monster_race[i] then local contagem = getPlayerStorageValue(cid, mob.storage) if not tonumber(contagem) then return true end if (contagem == -1) then contagem = 1 end if contagem > mob.count then return true end setPlayerStorageValue(cid, mob.storage, contagem+1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,""..(contagem == mob.count and "Congratulations! You finished the task of "..race.."." or "defeated. Total [" .. contagem .. "/" .. mob.count .. "] " .. race .. ".").."") end end end end end return true end]]></event> </mod>  
  13. Curtir
    Opa, recentemente alguns programadores entraram em contato comigo procurando saber sobre proteção/restrição de informações do seu site.
    Mas como assim?
    Bom, por padrão, o apache vem configurado para ser livre o acesso a listagem de arquivos de 1 servidor. Por exemplo:
    Seu site tem o domínio rogerincudetcheca.com que carrega pelo diretório var/www/html, e supondo que dentro da pasta html exista 1 pasta chamada templates. Se o usuário simplesmente digitar rogerincudetcheca.com/templates e dentro dessa pasta não existir nenhum arquivo de índice como por exemplo: index.html ou index.php, por padrão vai ser listado todos arquivos daquela pasta. E isso ele pode fazer para qualquer diretório de seu servidor.



    Mas Endless, quer dizer então que ele pode ter acesso a qualquer arquivo do meu site? E a resposta é SIM, se a plataforma AAC que você utilizar não conter 1 regra que controle isso, por padrão qualquer 1 tem acesso a esses arquivos de seu site.
    Pensando nisso, vim explicar como alterar essa configuração básica que muita gente, mas muiiiita gente não sabe como funciona. OBS: Eu somente vou explicar como fazer o básico para evitar a listagem, mas existe muito mais opções para você inserir, vocês podem dar uma estudada mais a fundo direto na documentação do próprio apache. clicando aqui.
    Bom vamos lá:

    1° Passo:
     

    Passo 2:

     
     
    Pronto, se você tentar acessar o mesmo diretório que antes listava todos arquivos você irá ter o seguinte retorno: 


     
    Bom, como eu citei no início do tópico, existem + opções de você controlar esses acesso. Um exemplo disso é o .htaccess, mas não vou abordar sobre ele aqui.
    É isso, espero ajudar, abraços!!
    Pra galera que busca 1 discord de desenvolvimento, existe 1 Discord chamado Academia de Codding, onde o intuito é justamente ajudar quem precisa (OBS: Ajudar não é fazer o código pra ti, isso tu resolve pagando rsrs).
    Link do discord: https://discord.gg/JmTn69B
  14. Curtir
    leozincorsair deu reputação a D i M i T r E s C u em Cliente Ntoultimate 3.7   
    Galera Estou com o Cliente do Ntoultimate aqui que me passaram v3.7, se alguém estiver precisando de algo já ajuda em seu servidor.
    Vamos ao que interessa:
    Imagem

    Download:
     
    Scan:
     
  15. Gostei
    leozincorsair deu reputação a Naze em Otimizado: AutoLoot in Sources for TFS 0.3.6, TFS 0.4   
    Uns dos problemas das maiorias dos otserv casual que estão online é o autoloot, alguns com erros e defeito na checagem dos containers e sempre consumindo muito por ser em lua fazendo checagens de tile, corpo, itens e etc. Por isso decidi da uma contribuição a essa comunidade que me evoluiu bastante um autoloot diretamente na source na função que insere os itens no corpo, otimizando em 100% na hr da entrega do item, e não tendo problemas ocasionais como corpos sobre corpos ou varias bags.
     
         Esse sistema já é bem comum quando comprado, mas gratuito acredito que ainda não tinha disponível, então fiz esse totalmente do 0 na source tfs 0.4 rev 3999 (do yan).
        
        Atenção na instalação! Qualquer problema pra compilar que envolva as linhas presente no código verifique novamente se instalou corretamente antes de pedir ajuda para evitar flood. Qualquer bug, erro ou mal funcionamento encontrado pode postar que estarei corrigindo, mas não irei customizar a seu agrado, você consegue fazer isso sozinho com atenção e calma, e se precisa de ajuda é só posta as duvidas.
     
    Imagens do Sistema:
     
    Características: 
    -> Otimizado executando apenas funções necessarias -> Comandos simples e praticos -> !autoloot on/off //Autoloot estara sempre ligado, e caso queria desliga use '!autoloot off' -> !autoloot bank/bag //Define para onde ira o dinheiro coletado, direto banco ou no inventario -> !autoloot list //Lista todos itens adicionados para coleta -> !autoloot clear/clean //Remove todos itens da lista -> !autoloot add, name item, name item, ... //Adiciona itens na lista, podendo adicionar quantos quiser de uma vez. Ele retorna um messagem dizendo os itens que foram adicionados e os que deram erro e não foram adicionados, talvez por escrito errado, ja existente na lista, na lista de bloquados, etc. -> !autoloot remove, item name, item name, ... //Remove itens da lista, com a mesma logica do add. -> Opções configuravel pelo Config.lua -> AutoLoot_MoneyIDs //IDs dos Itens Moedas do servidor como gold coins, platinium coins, crystal coins. -> AutoLoot_BlockIDs //IDs dos itens bloqueados para autoloot -> AutoLoot_MaxItem //Quantidade maxima de itens para adicionar a lista -> Sistema livres de bugs ou logs de erros.  
    Instalação:
    Toda instalação será feita na source, exceto por 1 linha em talkactions.xml e 3 variáveis no config.lua
     
    TFS 0.4 :
     
    Link para Otx -> https://tibiaking.com/forums/topic/101086-otimizado-autoloot-in-sources-for-otx2-ou-menor/
     
    Nas versões atual da TFS para servidores 10+ não ira funcionar pois algumas funções são diferente e não irei corrigir agora, em breve passo o mesmo pra tfs 1.x e otx3.
     
    Esse sistema foi totalmente feito por mim, mas dou créditos também ao @Mathias Kenfi por me ajudar muito na evolução em lua/c++ e a tabela sql é a mesma usada no quick autoloot 1.3 postado por Pedriinz
     
    @Edit: 
    Quem usa source de derivados caso ocorra erro aplica as alterações dos comentários abaixo.
    Pequena correção em talkactions.cpp na parte remove na linha if(!player->checkAutoLoot(itemId)), para if(player->checkAutoLoot(itemId))
  16. Gostei
    leozincorsair recebeu reputação de Cat em NÃO CONSIGO CRIAR TELEPORT NO MEU REMERES (HELP PFV)   
    Da uma olhada no seu cliente, e vê se esta configurado o portal corretamente ou também no item editor.
  17. Curtir
    leozincorsair recebeu reputação de Yamili em (Resolvido)Colocar posição de efeito nesse action   
    obrigado meu amigo
  18. Obrigado
    leozincorsair deu reputação a Yamili em (Resolvido)Colocar posição de efeito nesse action   
    Em:
    function efeitosAura(i,tm,cid)     if(isCreature(cid)) then             local atual = getCreaturePosition(cid) Muda para: 
    function efeitosAura(i,tm,cid)     if(isCreature(cid)) then             local atual = {x = getPlayerPosition(cid).x + 1, y = getPlayerPosition(cid).y + 0, z = getPlayerPosition(cid).z}  
  19. Gostei
    leozincorsair recebeu reputação de Cat em (Resolvido)Colocar posição de efeito nesse action   
    Galera estou com esse script de ring de aura, porem ela só fica ao lado esquerdo do player, já tentei mexer no (+x +y +z ) porem não surte efeito
    ,se alguém puder me ajudar .. agradeço !!
    +REP
     
    Action:
    -- CONFIGURAÇÕES aurastr = 25950 -- storage da aura estr = 25951 -- storage para o exhaust porcentagem = 100 -- chance de curar em cada volta da aura, em porcentagem quantheal = 90 -- porcentagem do hp máximo que cada cura irá curar. (No caso, irá curar 10% do hp máximo cada cura) tempo = 5000 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) tipoaura = 509 -- número do efeito da aura (efeito de distância, pode ser identificado com /x no jogo) efeitocura = 53 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo) -- Função que chama a aura function efeitosAura(i,tm,cid) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posaura = { {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureHealth(cid)<getCreatureMaxHealth(cid)) then doCreatureAddHealth(cid, getCreatureMaxHealth(cid)/quantheal) if(i<=8 and i>1) then doSendMagicEffect(atual, tipoaura) else doSendMagicEffect(atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendMagicEffect(atual, tipoaura) elseif(i<8) then doSendMagicEffect(atual, tipoaura) end if(i<=8 and getPlayerStorageValue(cid, aurastr)==2) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) elseif(i>8 and getPlayerStorageValue(cid, aurastr)==2) then return efeitosAura(1,0,cid) else return TRUE end else return TRUE end end function onUse(cid, item, fromPosition, itemEx, toPosition) if(getPlayerStorageValue(cid, aurastr)==2) then setPlayerStorageValue(cid, estr, os.time()+2) setPlayerStorageValue(cid, aurastr, -1) doPlayerSendCancel(cid,"Aura desligada!") else doPlayerSendCancel(cid,"Aura ligada!") setPlayerStorageValue(cid, aurastr, 2) efeitosAura(1,tempo/8,cid) end return TRUE end  
  20. Gostei
    leozincorsair recebeu reputação de Cat em [TFS 1.3] Block Wall Spell   
    Adapta pra 0.4 pls ??
  21. Curtir
    leozincorsair recebeu reputação de Cat em [Novos Atributos] Critical/Dodge/Life e Mana Leech/Life e Mana Absorb   
    O meu nao apresentou error algum, porém nao funciona as tags no items.xml
    fica aparecendo no look mais nao faz efeito os atributos 
  22. Gostei
    leozincorsair recebeu reputação de Moacir Dadalte em Bug Heal mesmo sqm   
    Usa esse xml:
     
  23. Obrigado
    leozincorsair deu reputação a WooX em Trade Offline V2.0   
    Trade Offline V2.0

    Esse sistema me foi pedido a alguns meses atrás e hoje tirei um tempinho pra trazer aqui.
    O sistema consiste em permitir que jogadores negociem sem contato direto entre comprador e vendedor.
    Mas como assim?
    O vendedor pode criar um anuncio de venda informando item, valores ou até mesmo items que ele queira em troca, após feito o anuncio todas essas informações ficam armazenadas no banco de dados do servidor, permitindo assim serem exibidas em uma página no site para interessados, junto de todas informações fornecidas pelo vendedor é exibido um comando para que os interessados possam adquirir a oferta exibida na página.
     
    Sobre o sistema

     
    O sistema foi testado apenas em OTX2, mas provavelmente também funcione em TFS 0.4
     
    Versão para TFS 1.x adaptada pelo @luanluciano93
     
    Como mencionado acima, o sistema funciona de forma semelhante ao Market System das versões atuais porem sem exibição gráfica das ofertas in-game, para isso o sistema vai acompanhado de uma página para o Gesior AAC. Este sistema existe no fórum há um bom tempo e já é familiar pra muitos jogadores, essa versão trás consigo algumas melhorias e diferenças que irei listar abaixo.
     
    Sistema
    Agora é possivel vender um item exigindo outro item em troca ao invés de dinheiro. Containers com um conjunto de items dentro agora podem ser anunciados. Agora o sistema verifica as cargas e durações dos items antes de criar uma oferta. Novo parâmetro adicionado para verificar informações de ofertas in-game. Agora todo valor recebido vai diretamente para o banco do vendedor. Página
    A depender da quantidade de ofertas existentes no servidor, a página agora irá separa-las por páginas. Agora além do valor é exibido também imagem da moeda a depender do valor da oferta. Agora é possivel ver as características tanto dos items ofertados como dos items exigidos pelo vendedor. Adicionado filtros para exibir somente ofertas de items vip, containers ou trocas. Adicionado barras de pesquisas para filtrar as ofertas por items ou nome do jogador.  
    Algumas imagens
     
    Instalação

    Antes de mais nada é necessário citar os requisitos necessários para o funcionamento correto do sistema, ele utiliza de algumas funções que não estão no script principal e portanto é necessário a instalação de uma lib extra, também é necessário instalar as funções doItemSetDuration e getItemDurationTime na source do servidor, ambos os links se encontram abaixo.
     
    Todos os arquivos necessários para a instalação estão anexados no tópico, irei apenas dizer onde instalar e como deve ser configurado.
     
    Primeiramente importe o arquivo schema.sql no banco de dados, ou se preferir pode executar as queries a seguir.
    CREATE TABLE IF NOT EXISTS `trade_off_offers` ( `id` int(11) NOT NULL auto_increment, `player_id` int(11) NOT NULL, `type` int(1) NOT NULL DEFAULT '0', `item_id` int(11), `item_count` int(11) NOT NULL DEFAULT '1', `item_charges` int(11) NULL, `item_duration` int(11) NULL, `item_name` varchar(255), `item_trade` tinyint(1) NOT NULL DEFAULT '0', `cost` bigint(20) UNSIGNED NOT NULL, `cost_count` int(11) NOT NULL DEFAULT '1', `date` bigint(20), PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1; CREATE TABLE IF NOT EXISTS `trade_off_container_items` ( `offer_id` int(11) NOT NULL, `item_id` int(11), `item_charges` int(11) NULL, `item_duration` int(11) NULL, `count` int(11) DEFAULT '1' ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1; ALTER TABLE `trade_off_container_items` ADD KEY `offer_id` (`offer_id`); ALTER TABLE `trade_off_container_items` ADD CONSTRAINT `offer_id_fk` FOREIGN KEY (`offer_id`) REFERENCES `trade_off_offers`(`id`) ON DELETE CASCADE;  
    Configuração no arquivo tradeoff.lua: 
    -- Trade Offline 2.0 by WooX -- local config = { priceLimit = 2000000000, -- 2kkk offerLimit = 3, offerLimitStor = 86420, infoOnPopUp = true, infoMsgType = MESSAGE_STATUS_CONSOLE_BLUE, errorMsgType = MESSAGE_STATUS_CONSOLE_RED, successMsgType = MESSAGE_INFO_DESCR, helpMsg = "Enter the parameters (add, remove, active, buy, info).", goldItems = {2148, 2152, 2160}, itemsVIP = {4540, 4545, 4560}, } priceLimit: define o valor máximo de uma oferta. offerLimit: define o valor máximo de ofertas que um jogador pode adicionar. offerLimitStor: storage que irá armazenar quantas ofertas ativas o jogador possui. infoOnPopUp: pode ser definido como true ou false, se definido como falso irá enviar os detalhes da oferta no default ao invés de como é mostrado nas imagens acima. infoMsgType: define como será exibido uma mensagem de informação ao jogador (não recomendo mexer a menos que saiba o que está fazendo). errorMsgType: define como será exibido uma mensagem de erro ao jogador (não recomendo mexer a menos que saiba o que está fazendo). successMsgType: define como será exibido uma mensagem de ação sucedida ao jogador (não recomendo mexer a menos que saiba o que está fazendo). helpMsg: mensagem que será enviada para o jogador caso ele erre os parâmetros do comando. goldItems: nesta tabela deve ser preenchido todos os IDs de moedas no servidor como gold coins, platinum coins, etc. itemsVIP: nesta tabela deve ser preenchido os IDs dos items vips existentes no servidor.  
    Agora para a instalação da página, no arquivo mysql_db.php deve ser preenchido os dados para conexão no banco de dados do servidor.
    /** * Host do banco de dados * @var string */ private static $DB_HOST = 'localhost'; /** * Usuario de conexao ao banco de dados * @var string */ private static $DB_USER = 'root'; /** * Senha de conexao ao banco de dados * @var string */ private static $DB_PASS = 'SUA_SENHA'; /** * Nome do banco de dados * @var string */ private static $DB_NAME = 'NOME_BANCO'; Após feito isso, o arquivo paginationClass.php em conjunto do arquivo mysql_db.php devem ser adicionados no seguinte diretório do Gesior AAC.
    classes/
    Finalizado isto, basta jogar o arquivo tradeoff.php dentro do diretório informado abaixo e o sistema estará pronto para uso.
    pages/
     
    Avisos

     
    Eu escrevi somente o sistema, não sou o autor da página para o Gesior AAC portanto não estarei dando suporte em relação a página que não seja sobre a instalação da mesma no Gesior AAC 2012, e embora esteja funcional, eu não recomendo o uso da página devido a falta do uso de cache para leitura do items.xml. Foram mais de 600 linhas de código sem contar funções extras e alterações na source, além de muitas horas de testes para garantir que tudo estava funcionando corretamente, tudo que peço em troca é que não removam os créditos no arquivo quando forem usar.  
    Créditos

    @MatheusDuarte pela página do Gesior AAC.
    schema.sql tradeoff.lua tradeoff.php mysql_db.php paginationClass.php
  24. Obrigado
    leozincorsair deu reputação a H3ITORR em [Source] Trocar nome das Skills   
    Hoje vim trazer como trocar o nome das skills na source!!
    eu estava procurando como fazer isso mas nunca tinha achado
    então resolvi eu mesmo mexer e consegui achar e estou trazendo para vocês!
    já que eu consegui e vi vários querendo e não conseguem vim trazer a solução do tal You advanced to ou You advanced from
    Versão para TFS 0.4 
     
    Abra seu Dev C++ source e vá em Player.cpp e procure por!
    char advMsg[50]; sprintf(advMsg, "You advanced to magic level %d.", magLevel); sendTextMessage(MSG_EVENT_ADVANCE, advMsg); substitua por: ou do jeito que vocês preferirem com o nome do tal!
    char advMsg[50]; sprintf(advMsg, "You advanced to taijutsu %d.", magLevel); sendTextMessage(MSG_EVENT_ADVANCE, advMsg); Agora vá em Tools.cpp e procure por!
    std::string getSkillName(uint16_t skillId, bool suffix/* = true*/) logo abaixo terá isso!
    switch(skillId) { case SKILL_FIST: { std::string tmp = "fist"; if(suffix) tmp += " fighting"; return tmp; } case SKILL_CLUB: { std::string tmp = "club"; if(suffix) tmp += " fighting"; return tmp; } case SKILL_SWORD: { std::string tmp = "sword"; if(suffix) tmp += " taijutsu"; return tmp; } case SKILL_AXE: { std::string tmp = "axe"; if(suffix) tmp += " fighting"; return tmp; } case SKILL_DIST: { std::string tmp = "distance"; if(suffix) tmp += " fighting"; return tmp; } case SKILL_SHIELD: return "shielding"; case SKILL_FISH: return "fishing"; case SKILL__MAGLEVEL: return "magic level"; case SKILL__LEVEL: return "level"; default: break; } substitua por: ou do jeito que vocês preferirem com o nome do tal!
    switch(skillId) { case SKILL_FIST: { std::string tmp = ""; if(suffix) tmp += " taijutsu"; return tmp; } case SKILL_CLUB: { std::string tmp = "glove"; if(suffix) tmp += " taijutsu"; return tmp; } case SKILL_SWORD: { std::string tmp = "sword"; if(suffix) tmp += " taijutsu"; return tmp; } case SKILL_AXE: { std::string tmp = "axe"; if(suffix) tmp += " taijutsu"; return tmp; } case SKILL_DIST: { std::string tmp = "distance"; if(suffix) tmp += " taijutsu"; return tmp; } case SKILL_SHIELD: return "defense"; case SKILL_FISH: return "fishing"; case SKILL__MAGLEVEL: return "taijutsu"; case SKILL__LEVEL: return "level"; default: break; } se quiserem mudar o nome das skills na client e só pedir que mostro como faz com prints !!!
  25. Obrigado
    leozincorsair deu reputação a Cjaker em ElfBot Windows 10 fix - dash/light & minimize   
    Heyo, estou disponibilizando essa DLL pelo motivo de ter corrigido os problemas que ocorrem ao usar no Windows 10 pra dois amigos e em relação à um tópico antigo que requisitaram o fix, sintam-se a vontade pra usar.
    Testei as funções básicas do ElfBot, incluindo dash, minimize e lighthack, até o momento não tive problemas. Caso encontre algum favor, notificar neste tópico.

    Tutorial: apenas mova pra pasta do seu ElfBot substituindo a dll deles, simples não?
    elfbot.dll

    Download: Em anexo no tópico
    VirusTotal: https://www.virustotal.com/gui/file/dfa6e58b0ec56a0d199960867dd96ecdc04c2d7381bc2022977be6d7fd9d38f0/detection

Informação Importante

Confirmação de Termo