Ir para conteúdo

Oneshot

Marquês
  • Total de itens

    1347
  • Registro em

  • Última visita

  • Dias Ganhos

    36

Tudo que Oneshot postou

  1. Oneshot

    checar storage

    Essa não é a área de pedidos correta, amigo. Movido para Pedidos e dúvidas - Clientes de OTserv
  2. Não é tão difícil fazer algo assim não. local tmp = {} for k, v in pairs(_G) do if type(v) == "table" then for m, n in pairs(v) do if type(m) == "string" and type(n) == "function" then m = (k == "_G" and m or (k .. "." .. m)) table.insert(tmp, m) end end end end table.sort(tmp, function(a, b) return string.byte(string.sub(a, 1, 1)) < string.byte(string.sub(b, 1, 1)) end) local file = io.open("data.txt", "w+") for i = 1, #tmp do file:write(tmp[i] .. "\n") end file:close() Consegui 742 funções Obs: Não liguem pra gambiarra.
  3. local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} local think = os.clock() function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() local direction = getCreatureLookDirection(getNpcId()) if os.clock() > think then doCreatureSetLookDirection(getNpcId(), (direction == 3 and 0 or (direction + 1))) think = think + 2 end end npcHandler:addModule(FocusModule:new())
  4. O que o Ferminiano fez para ser banido dessa vez? trololol
  5. Oneshot

    Script De Força

    Já está com todas modificações, melee, distance e wands e rods. Movido para Pedidos e dúvidas resolvidos - Scripting
  6. Então, Raposa, lá no cliente do Tibia, realmente os valores são variáveis em uint8. É por isso mesmo que as skills "quebram", quando passam de 255, ou seja, quando um jogador tivesse skill 256, o cliente mostraria nível 0 na skill. Nas sources do maldito TFS, não sei se é o mesmo para o Open Tibia original, o sistema já é bem diferente. A experiência de uma skill, também chamada de skill tries, é declarada como uma variável uint64 e o nível da skill uma variável uint32. O mesmo ocorre para magic level. Esse limite de skill acontece porque chega uma hora que a fórmula de skill tries necessárias passa o valor máximo de uint64, reiniciando do 0, é nessa hora que o sistema entende que já não é possível mais avançar tal skill. Estes são os valores máximos para as vocações padrões, sem modificações nos multiplicadores do vocations.xml Sorcerer fist fighting = 110 club fighting = 69 sword fighting = 69 axe fighting = 69 distance fighting = 70 shielding = 109 fishing = 445 magic level = 389 Druid fist fighting = 110 club fighting = 79 sword fighting = 79 axe fighting = 79 distance fighting = 80 shielding = 109 fishing = 445 magic level = 389 Paladin fist fighting = 232 club fighting = 232 sword fighting = 232 axe fighting = 232 distance fighting = 440 shielding = 428 fishing = 445 magic level = 110 Knight fist fighting = 435 club fighting = 435 sword fighting = 435 axe fighting = 435 distance fighting = 132 shielding = 428 fishing = 445 magic level = 34 Os multiplicadores de skill ou o manaMultiplier são inversamente proporcionais ao nível máximo que uma vocação pode atingir. Se você diminuir o multiplicador, o nível máximo aumenta e vice-versa.
  7. Nossa, caotic, você está estudando pog?
  8. Oneshot

    Script De Força

    Ensinarei nos mínimos detalhes, de modo que até um leigo qualquer, seguindo os passos conseguiria fazer as modificações corretamente. Para seguir os passos abaixo, é recomendável ter em mãos, o código-fonte do seu servidor, ou seja, as sources. 1. No seu IDE de preferência, abra o arquivo weapons.cpp, e procure pela função abaixo: int32_t WeaponMelee::getWeaponDamage(const Player* player, const Creature* target, const Item* item, bool maxDamage /*= false*/) const { int32_t attackSkill = player->getWeaponSkill(item); int32_t attackValue = std::max((int32_t)0, (int32_t(item->getAttack() + item->getExtraAttack()) - elementDamage)); float attackFactor = player->getAttackFactor(); double maxValue = Weapons::getMaxWeaponDamage(player->getLevel(), attackSkill, attackValue, attackFactor); if(random_range(1, 100) <= g_config.getNumber(ConfigManager::CRITICAL_HIT_CHANCE)) { maxValue = std::pow(maxValue, g_config.getDouble(ConfigManager::CRITICAL_HIT_MUL)); player->sendCritical(); } Vocation* vocation = player->getVocation(); if(vocation && vocation->getMultiplier(MULTIPLIER_MELEE) != 1.0) maxValue *= vocation->getMultiplier(MULTIPLIER_MELEE); int32_t ret = (int32_t)std::floor(maxValue); if(maxDamage) return -ret; return -random_range(0, ret, DISTRO_NORMAL); } Precisamos modificar o dano, certo? Então modificaremos o valor de retorno da função. int32_t ret = (int32_t)std::floor(maxValue); Precisamos editar de um modo que, a cada ponto na skill Fist Fighting, o jogador receba 20 de dano extra, certo? Para isso basta adicionar a seguinte linha abaixo: ret += (player->getSkill(SKILL_FIST, SKILL_LEVEL) * 20); Ficando assim: int32_t ret = (int32_t)std::floor(maxValue); ret += (player->getSkill(SKILL_FIST, SKILL_LEVEL) * 20); Você precisará fazer o mesmo procedimento para as funções que retornam o dano das armas de combate a distância, como bows e crossbows e armas mágicas, como wands e rods. Armas "melee" também possuem uma segunda função, responsável por retornar o dano elemental, como exemplo Fire Sword. Como sou muito bonzinho, deixo abaixo o arquivo weapons.cpp.tar.gz com as modificações. weapons.cpp.tar.gz Basta substituir ele na pasta das sources de seu servidor, abrir o projeto no seu IDE de preferência e compilar. Lembre também de deletar qualquer pasta obj/
  9. Bom, eu estava dando uma olhada nas sources, tentando entender porque cada classe tinha um nível máximo de skill e magic level específicos. Então desenvolvi essas duas funções, que retornam esses tais níveis máximos, para skills e para maglevel. function getPlayerMaxSkill(cid, skillid) local skill_level = getPlayerSkillLevel(cid, skillid) while true do local x = getPlayerRequiredSkillTries(cid, skillid, skill_level) local y = getPlayerRequiredSkillTries(cid, skillid, (skill_level + 1)) if x > y then break end skill_level = skill_level + 1 end return skill_level end function getPlayerMaxMagLevel(cid) local maglevel = getPlayerMagLevel(cid, true) while true do local x = getPlayerRequiredMana(cid, maglevel) local y = getPlayerRequiredMana(cid, (maglevel + 1)) if x > y then break end maglevel = maglevel + 1 end return maglevel end Creio eu que elas não possuem utilidade nenhuma, são apenas funções teóricas que criei para entender como funciona o avanço de skills e magic level para cada vocação.
  10. Só sabe vir aqui postar "errinho" e esperar que caia do céu a solução, não mexe um dedo um milímetro para tentar aprender a consertar erros e aprender um pouco de Lua. Cansei já da sua folga, então se vira aí. Abraços.
  11. É, ele errou a linha do talkactions.xml. <talkaction words="/additem" acces="5" event="script" value="additem.lua"/> O correto é assim: <talkaction words="/additem" access="5" event="script" value="additem.lua"/>
  12. Cara, na boa, está totalmente funcional sem nenhum bug. É uma modificação ridícula que não acarreta nenhuma mudança drástica no servidor. Se não está funcionando aí, o problema é aí, não com meu código. Abraços.
  13. Ah sei lá, fiquei com preguiça de adaptar a função ghost do 0.3.6pl1 então talvez este seja o erro. Abraço.
  14. Errei a linha: doCombat(cid, var) Troque por: doCombat(cid, combat, var)
  15. 1. Crie um arquivo Lua com o nome que você quiser em data/weapons/scripts, cole o conteúdo passado acima. 2. Abra o arquivo weapons.xml e coloque a linha abaixo: <wand id="ID_DA_WAND" level="LEVEL_DA_WAND" mana="MANA_POR_TIRO" event="script" value="nome_do_arquivo.lua"> Certifique-se também que não exista nenhuma outra linha relacionada ao ID que você vai colocar, para evitar erros.
  16. Não vai funcionar. O processo de instalação é o mesmo do passado pelo usuário acima. local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE) -- min = (level / minl + maglevel / minml) * 1. * mina + minb -- max = (level / maxl + maglevel / maxml) * 1. * maxa + maxb -- min < minc -- min = minc -- max < maxc -- max = maxc -- setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, mina, minb, maxa, maxb[, minl, maxl[, minm, maxm[, minc[, maxc]]]]) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, 0, -1, 0, 5, 5, 1.2, 1.4) function onUseWeapon(cid, var) if math.random(0, 100) > 70 then doPlayerCastSpell(cid, "exori flam") end doCombat(cid, var) return true end Lembrando que um script de weapon, você precise criar um combat para que ele funcione e editar a fórmula de dano a gosto. Deixei alguns comentários para te auxiliar quanto ao dano.
  17. Não é muito, mas estou destacando o tutorial na seção de Tutoriais. Porque trata de um tema essencial para novos programadores, que é a organização e identação dos códigos. Espero que alguém também o publique no portal.
  18. O fórum não trabalha com bots, meu colega. Essa seção é apenas para scripts Lua relacionados com Open Tibia. Fechado.
  19. Não, não tem como. Abraços.
  20. Leve seu computador, dedicado, servidor e etcétera, para se benzer. Abraços.
  21. Faz direto no script da wand.
  22. Coloque o script com o nome sellall.lua em data/talkactions/scripts. E no talkactions.xml, adicione a linha abaixo: <talkaction words="!sellall" event="script" value="sellall.lua"/>
  23. Não. Você pode fazer um StepIn e um StepOut com o mesmo actionid, colocar um actionid e um uniqueid em um tile, mas infelizmente não pode colocar 2 actionids em algo.
  24. Oneshot

    Script De Força

    Você tem que editar o weapon.cpp com um IDE de sua preferência, como o Dev-Cpp ou Code::Blocks.
  25. Meu rapaz, o arquivo 101-compat não influencia praticamente em nada, ele apenas serve como um arquivo de compatibilidade, para que aqueles que ainda usam nomes e parâmetros antigos de funções, possam programar seus scripts sem dar erros. O erro é seu, por querer criar um servidor Frankenstein, com executável de um e libs de outro. Abraços.
  • Quem Está Navegando   0 membros estão online

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