Ir para conteúdo

Oneshot

Marquês
  • Total de itens

    1347
  • Registro em

  • Última visita

  • Dias Ganhos

    36

Tudo que Oneshot postou

  1. brunouchihakiller, Para fazer isto, basta usar o creaturescript onAttack(cid, target) juntamente com a função doCreatureSetOutfit(cid, looktype, time). Ficaria mais ou menos assim: function onAttack(cid, target) local attackers = {[53] = 108, [40] = 200} local outfit = getCreatureOutfit(cid) doCreatureSetOutfit(cid, attackers[outfit.lookType], -1) doRemoveCondition(cid, CONDITION_OUTFIT) return true end Abraços.
  2. Lua é uma linguagem de programação do tipo case-sensitive. Isso significa que ao fazer isso: local tabela = { ["demon"] = 1234, } Se digamos a função getCreatureName(cid) retornar a string "Demon", você não poderá acessar tabela["Demon"], que é nulo. Em outras palavras: "demon" diferente de "Demon". Isso acho que sana suas duas dúvidas sobre tabelas e strings como index. No segundo caso, apenas com o uso de file:write() e o certo é fazer isso: local file = io.open(arquivo.txt, "a+") -- abre o arquivo com a permissão de atualização preservando os dados antigos. file:write("blabla")
  3. Caro beddy, Trocar os nomes das coisas em um cliente, creio que só é possível abrindo ele com um Hex Editor ou então com a utilização daquele OTClient (Creio que esse é o nome). Já traduzir as mensagens em geral enviadas pelo sistema, isso só pode ser feito nas sources, precisamente no arquivo player.cpp. char advMsg[60]; sprintf(advMsg, "You advanced from Level %d to Level %d.", prevLevel, level); sendTextMessage(MSG_EVENT_ADVANCE, advMsg); Abração.
  4. Certo, então isso é erro da biblioteca exhaustion do seu servidor. Vou fazer uma pequena "gambiarra". function onSay(cid, words, param, channel) local storage = 6707 local delaytime = 120 local item = {itemid = 2160, count = 1} local a = "data/logs/reports.txt" local f = io.open(a, "a+") if(param == '') then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") end if not doPlayerRemoveItem(cid, item.itemid, item.count) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need ".. item.count .." ".. getItemNameById(item.itemid) ..".") end local exhaust = getPlayerStorageValue(cid, storage) if exhaust < os.time() then setPlayerStorageValue(cid, storage, os.time()+delaytime) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your report has been received successfully!") f:write(""..param.." [x="..getPlayerPosition(cid).x..", y="..getPlayerPosition(cid).y..", z="..getPlayerPosition(cid).z.."].\n\n----------------------------------------------------------\n") f:close() else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "You must wait " .. getPlayerStorageValue(cid, storage) - os.time() .. " seconds to report.") end return TRUE end
  5. function onSay(cid, words, param, channel) local storage = 6707 local delaytime = 120 local item = {itemid = 2160, count = 1} local a = "data/logs/reports.txt" local f = io.open(a, "a+") if(param == '') then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") end if not doPlayerRemoveItem(cid, item.itemid, item.count) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need ".. item.count .." ".. getItemNameById(item.itemid) ..".") end local exhaust = exhaustion.get(cid, storage) if(not exhaust) then exhaustion.set(cid, storage, delaytime) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your report has been received successfully!") f:write(""..param.." [x="..getPlayerPosition(cid).x..", y="..getPlayerPosition(cid).y..", z="..getPlayerPosition(cid).z.."].\n\n----------------------------------------------------------\n") f:close() else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "You must wait " .. exhaustion.get(cid, storage) .. " seconds to report.") end return TRUE end Abraços.
  6. Veja se resolve o teu problema: <?xml version="1.0" encoding="UTF-8"?> <vocations> <vocation id="0" name="None" description="none" needpremium="0" gaincap="5" gainhp="5" gainmana="5" gainhpticks="6" gainhpamount="1" gainmanaticks="6" gainmanaamount="1" manamultiplier="4.0" attackspeed="2000" soulmax="100" gainsoulticks="120" fromvoc="0" attackable="no"> <formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.5" club="2.0" sword="2.0" axe="2.0" distance="2.0" shielding="1.5" fishing="1.1" experience="1.0"/> </vocation> <vocation id="1" name="Master Sorcerer" description="a master sorcerer" needpremium="0" gaincap="10" gainhp="5" gainmana="30" gainhpticks="3" gainhpamount="150" gainmanaticks="2" gainmanaamount="400" manamultiplier="1.1" attackspeed="400" soulmax="100" gainsoulticks="120" fromvoc="1"> <formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.5" club="2.0" sword="2.0" axe="2.0" distance="2.0" shielding="1.5" fishing="1.1" experience="1.0"/> </vocation> <vocation id="2" name="Elder Druid" description="a elder druid" needpremium="0" gaincap="10" gainhp="5" gainmana="30" gainhpticks="3" gainhpamount="150" gainmanaticks="2" gainmanaamount="400" manamultiplier="1.1" attackspeed="400" soulmax="100" gainsoulticks="120" fromvoc="2"> <formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.5" club="1.8" sword="1.8" axe="1.8" distance="1.8" shielding="1.5" fishing="1.1" experience="1.0"/> </vocation> <vocation id="3" name="Royal Paladin" description="a royal paladin" needpremium="0" gaincap="20" gainhp="10" gainmana="15" gainhpticks="2" gainhpamount="400" gainmanaticks="3" gainmanaamount="250" manamultiplier="1.4" attackspeed="400" soulmax="100" gainsoulticks="120" fromvoc="3"> <formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.2" club="1.2" sword="1.2" axe="1.2" distance="1.1" shielding="1.1" fishing="1.1" experience="1.0"/> </vocation> <vocation id="4" name="Elite Knight" description="a elite knight" needpremium="0" gaincap="25" gainhp="15" gainmana="5" gainhpticks="2" gainhpamount="420" gainmanaticks="3" gainmanaamount="200" manamultiplier="3.0" attackspeed="400" soulmax="100" gainsoulticks="120" fromvoc="4"> <formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.1" club="1.1" sword="1.1" axe="1.1" distance="1.4" shielding="1.1" fishing="1.1" experience="1.0"/> </vocation> <vocation id="5" name="Mortal" description="a mortal" needpremium="1" gaincap="10" gainhp="5" gainmana="30" gainhpticks="3" gainhpamount="200" gainmanaticks="2" gainmanaamount="450" manamultiplier="1.1" attackspeed="300" soulmax="200" gainsoulticks="15" lessloss="30" fromvoc="5"> <formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.5" club="2.0" sword="2.0" axe="2.0" distance="2.0" shielding="1.5" fishing="1.1" experience="1.0"/> </vocation> <vocation id="9" name="Immortal" description="an immortal" needpremium="1" gaincap="10" gainhp="5" gainmana="30" gainhpticks="3" gainhpamount="200" gainmanaticks="2" gainmanaamount="450" manamultiplier="1.1" attackspeed="300" soulmax="200" gainsoulticks="15" lessloss="30" fromvoc="5"> <formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.5" club="1.8" sword="1.8" axe="1.8" distance="1.8" shielding="1.5" fishing="1.1" experience="1.0"/> </vocation> </vocations>
  7. Como algumas pessoas já pediram um sistema de refino com base no Bronson OT Server, adicionei duas novas opções ao Perfect Refine System com a função de simular não-fielmente o funcionamento do sistema desse servidor. As duas opções são reagent e amountbylevel, no caso, você pode configurar uma ferramenta que precisa de um item secundário para funcionar. Deixei um exemplo base pré-configurado, um Iron Hammer que precisa de uma quantidade variável de iron ores. Um grande abraço.
  8. jokermindrenan, Se eu não me engano, esse é um bug antigo quando o cliente do Tibia foi atualizado para a versão 8.60 e no caso seu items.otb ainda possui propriedades que as runas já não têm mais. Ou seja, você iria precisar editar o items.otb com um OT Item Editor. Há também a possibilidade de que nos IDs de cada runa ainda exista o atributo charges. Isso deve ser retirado no items.xml. Caso isso não funcione, então o problema é interno, nas sources, o que te dá apenas uma opção, caso seu servidor não tenha as sources disponibilizadas: Trocar o executável do servidor. Abraços.
  9. Caro isaque555, Desenvolva essa sua magia Kirin como uma magia normal, vamos pegar como exemplo a magia Energy Strike: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYAREA) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 5, 5, 1.4, 2.1) function onCastSpell(cid, var) return doCombat(cid, combat, var) end Para que seja enviado um efeito no jogador que invocou a magia, basta o uso da função doSendMagicEffect dentro do corpo da função onCastSpell. Ou seja: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYAREA) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 5, 5, 1.4, 2.1) function onCastSpell(cid, var) doSendMagicEffect(getThingPosition(cid), CONST_ME_CLOUDS) return doCombat(cid, combat, var) end No exemplo acima, usei o efeito da Rage of The Skies na posição do jogador invocador e um efeito totalmente diferente, no caso, o efeito da Energy Strike irá aparecer na posição do jogador-alvo.
  10. É um sistema fácil de fazer com um creaturescript onStatsChange e algumas manipulações de strings no nome do equipamento.
  11. Você precisa fazer com que o sistema entenda que essa vocação não é inicial. Para isso, você deve manipular a variável fromvoc e não deletar-la, é preciso colocar um número de uma vocação para que o sistema entenda que a tal vocação é uma promoção de outra vocação. Ou seja se existem duas vocações de nomes, por exemplo, Alchemist e Scientist com IDs iguais a 7 e 8, sendo que a vocação Scientist não pode aparecer no Account Manager. Então você deve fazer isso abaixo: <vocation id="7" name="Alchemist" description="a elder druid" needpremium="0" gaincap="10" gainhp="5" gainmana="30" gainhpticks="3" gainhpamount="150" gainmanaticks="2" gainmanaamount="400" manamultiplier="1.1" attackspeed="400" soulmax="100" gainsoulticks="120" fromvoc="7"> <formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.5" club="1.8" sword="1.8" axe="1.8" distance="1.8" shielding="1.5" fishing="1.1" experience="1.0"/> </vocation> <vocation id="8" name="Scientist" description="an Immortal" needpremium="1" gaincap="10" gainhp="5" gainmana="30" gainhpticks="3" gainhpamount="200" gainmanaticks="2" gainmanaamount="450" manamultiplier="1.1" attackspeed="300" soulmax="200" gainsoulticks="15" fromvoc="0" lessloss="30" fromvoc="7"> <formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.5" club="1.8" sword="1.8" axe="1.8" distance="1.8" shielding="1.5" fishing="1.1" experience="1.0"/> </vocation> Quando você coloca um fromvoc igual ao próprio ID da vocação, ela se torna uma vocação inicial. Quando você coloca um fromvoc diferente do ID da vocação, ela se torna uma promotion
  12. Tente fazer assim no loot do monstro: <item id=2091 chance="100000" actionid="666"/> Creio que funcionará.
  13. Você é fera hein, cara. Achou um problema crítico no sistema. Parabéns e rep+
  14. Oneshot

    Bug Skill Afz

    Existem servidores 8.60 que a função getPlayerSkillLevel só pegava o valor base da skill, por isso que não existia esse bug. Como você, indevidamente, trocou a versão de seu servidor para 9.53 sem se atentar para qualquer diferença, começaram a surgir esses tipos de bugs. Só de pensar, também, que estou ajudando alguém que provavelmente vai usar isso para lucro próprio, isso me dói a alma. O script arrumado está no spoiler. Abraços.
  15. Oneshot

    Bug Skill Afz

    Agora eu entendi o que é esse bug. Não é preciso enviar nada para o bugtracker do The Forgotten Server. Uma vez que é o script de compra de skills que se apresenta incorreto. A função getPlayerSkillLevel(cid, skill) usada dessa forma, irá retornar juntamente quaisquer modificadores de magias de suporte que o jogador está usando. Ou seja, se o jogador possui Axe Fighting equivalente a 10, usa utito tempo e fica com, digamos, 12 e depois usa o sistema de comprar skills, o sistema defeituoso pegará o Axe Fighting com buff e irá, através de querys, tornar ele permanente. O certo, meu caro colega, é usar a função getPlayerSkillLevel(cid, skill, true), assim ela ignorará modificadores quaisquer. Então, por favor, poste a seguir o script completo de seu sistema de compra de skills.
  16. Caro Vilden, Seu script está incorreto, a função doRemoveItem não iria funcionar, uma vez que como está fora do corpo da função onCastSpell, não iria encontrar um cid válido. O correto seria: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, true) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_REDSTAR) setCombatParam(combat, COMBAT_PARAM_USECHARGES, true) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA) local condition = createConditionObject(CONDITION_PHYSICAL) setConditionParam(condition, CONDITION_PARAM_DELAYED, 1) addDamageCondition(condition, 1, 3000, -35) addDamageCondition(condition, 3, 3000, -20) addDamageCondition(condition, 2, 3000, -5) setCombatCondition(combat, condition) function onGetFormulaValues(cid, level, skill, attack, factor) local skillTotal, levelTotal = skill + attack, level / 5 return -(skillTotal / 3 + levelTotal), -(skillTotal + levelTotal) end setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues") function onCastSpell(cid, var) local item = {itemid = 2160, count = 1} if doPlayerRemoveItem(cid, item.itemid, item.count) then return doCombat(cid, combat, var) end return doPlayerSendCancel(cid, "Você não possui ".. item.count .." ".. getItemNameById(item.itemid) ..".") end Ao criador do tópico, configure você mesmo o itemid da Assassin Star.
  17. Oneshot

    Player Transparente

    ChuckNorris666, Talvez eu esteja errado, mas há como fazer algo parecido com isso manipulando as flags do grupo de Player. Para isso abra seu arquivo groups.xml, que provavelmente está em data/XML e você verá isso: <group id="1" name="Player"/> Troque apenas essa linha por isso: <group id="1" name="Player" customFlags="16777216"/> Assim o grupo Player terá a propriedade PLAYERCUSTOMFLAG_ISWALKABLE que faz que jogadores passem por cima de jogadores. Att.
  18. Sério mesmo? Achei que era um atributo de item a parte. Se for assim do jeito que você falou, tudo fica mais simples. Segue abaixo um esboço do que seria o funcionamento da chave. function onUse(cid, item, fromPosition, itemEx, toPosition) return (item.actionid == itemEx.actionid and doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "A chave abriu a porta ") or doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "A chave não encaixa na fechadura.")) end Falha nossa, de fato a actionid vira mesmo key number, como visto no items.cpp. else if(it.isKey()) s << " (Key:" << (item ? (int32_t)item->getActionId() : 0) << ")";
  19. Procure algo na pasta mods ou na pasta creaturescripts/scripts relacionado com firstitems.lua, poste aqui no tópico. Att.
  20. Vou atualizar todo o código e adicionar novas opções de configuração Principalmente baseadas nas sugestões dadas. Abraços.
  21. Vasculhei os arquivos items.cpp de algumas revisões de Open Tibia que tenho aqui e não achei nenhum atributo relacionado com números de chaves. Como provavelmente você está querendo mais alguma coisa do Bronson Server, creio que isso deve ser algo extra, mas até simples de fazer em C++.
  22. Depende muito do que você deseja fazer, caro amigo. Se você quer uma interface complexa, que o jogador clique onde quer nascer e etcétera, infelizmente é quase impossível a realização, já que seria necessária a edição até do cliente do Tibia. Mas há também a possibilidade de criar um sistema em Lua, com uma interface bem simples, por prompt de mensagens. Att.
  23. É, acho que cometi um erro no caso desse or mesmo. O código já foi consertado. Att.
  24. Não, não deveria ser and. E não havia pensado no caso do utamo vita.
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...