Ir para conteúdo

Reds

Membro
  • Registro em

  • Última visita

Tudo que Reds postou

  1. ele usa, mas não sei exatamente como é o cálculo.. mas realmente, armas configuradas por script é muito melhor
  2. min = -(100 * maglevel) max = -(240 * maglevel) return min, max end o ataque varia entre 100 * ml e 240 * ml se o ml for 10 o ataque vai variar entre 1000 e 2400 se você trocar o 100 por 150, vai variar entre 1500 e 2400.. para criar isso, você precisa utilizar um weapons.xml e customizar para cada arma que você quiser, o bom é que você tem controle 100% do dano, efeitos e etc.. quando você define no weapons.xml o ataque definido em items.xml não é utilizado..
  3. coloca no lugar de: setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") isso: setCombatCallback(combat.object, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
  4. que erro deu? qual tfs é isso?
  5. local function onCastSpell4(parameters) local target = getCreatureTarget(cid) if isCreature(target) == TRUE then -- adiciona isso para verificar se o alvo é valido addEvent(fear, 0, target) doCombat(parameters.cid, parameters.combat4, parameters.var) addEvent(onCastSpell3, 800, parameters) end end
  6. exatamente, ali você pode configurar como você quiser
  7. local combat_types = { [1] = {cond = CONDITION_FREEZING, effect = CONST_ME_ICEATTACK, anim = CONST_ANI_ICE, damage = COMBAT_ICEDAMAGE}, [2] = {cond = CONDITION_FIRE, effect = CONST_ME_FIREATTACK, anim = CONST_ANI_FIRE, damage = COMBAT_FIREDAMAGE}, [3] = {cond = CONDITION_POISON, effect = CONST_ME_SMALLPLANTS, anim = CONST_ANI_EARTH, damage = COMBAT_EARTHDAMAGE}, [4] = {cond = CONDITION_ENERGY, effect = CONST_ME_ENERGYHIT, anim = CONST_ANI_ENERGY, damage = COMBAT_ENERGYDAMAGE}, [5] = {effect = CONST_ME_HOLYDAMAGE, anim = CONST_ANI_HOLY, damage = COMBAT_HOLYDAMAGE}, [6] = {cond = CONDITION_CURSED, effect = CONST_ME_MORTAREA, anim = CONST_ANI_SUDDENDEATH, damage = COMBAT_DEATHDAMAGE}, default = {damage = COMBAT_PHYSICALDAMAGE}, } local config = { storage = 303030, block_armor = true, condition_rounds = 0, condition_value = 0, condition_time = 2000, } for key, combat in pairs(combat_types) do combat.object = createCombatObject() setCombatParam(combat.object, COMBAT_PARAM_TYPE, combat.damage or COMBAT_PHYSICALDAMAGE) setCombatParam(combat.object, COMBAT_PARAM_EFFECT, combat.effect or CONST_ME_NONE) setCombatParam(combat.object, COMBAT_PARAM_DISTANCEEFFECT, combat.anim or CONST_ANI_NONE) setCombatParam(combat.object, COMBAT_PARAM_BLOCKARMOR, config.block_armor and 1 or 0) function onGetFormulaValues(cid, level, maglevel) min = -(100 * maglevel) max = -(240 * maglevel) return min, max end setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") if combat.cond then local condition = createConditionObject(combat.cond) setConditionParam(condition, CONDITION_PARAM_DELAYED, 1) addDamageCondition(condition, config.condition_rounds, config.condition_time, config.condition_value) setCombatCondition(combat.object, condition) end end local function find_combat(id) return combat_types[id] or false end function onUseWeapon(cid, var) local combat = find_combat(getCreatureStorage(cid, config.storage)) if not combat then if getDistanceBetween(getThingPosition(cid), getThingPosition(var.number)) > 1 then return false end combat = combat_types.default end return doCombat(cid, combat.object, var) end
  8. Fala galera, por muito tempo utilizei o notepad++ para desenvolver meus códigos em lua. Agora voltando a desenvolver meu servidor, utilizo o Visual Studio Code e digo que ajuda muito em relação ao notepad++. Vantagens: 1) Você pode abrir a pasta de seu servidor, tendo uma estrutura semelhante a um projeto Java por exemplo, tudo isso de uma forma bem fácil. Se não me engano o notepad++ tem uma funcionalidade parecida, mas acredito que a maioria aqui não usa. Para fazer isso é só utilizar o atalho CTRL + K + O, ou file > Open Folder e selecionar a pasta de seu servidor. 2) Diversos atalhos. Com o VS Code, você pode utilizar atalhos, como o CTRL + P, ao fazer isso ele abre um box no topo da IDE onde o desenvolvedor pode escrever o nome do arquivo e ele encontra dentro do projeto. Fazia mais de ano que eu não abria meu servidor, então eu não lembrava de diversas coisas, como os monstros que dropavam o item 10566, então com o Visual Studio Code, eu consegui descobrir que eu não tinha configurado nenhum monstro para dropar aquele item. Para fazer essa pesquisa utilizei o atalho CTRL + SHIFT + F, onde ele pesquisa alguma palavra em específica entre os arquivos do seu projeto. E muitos outros, que você pode encontrar pesquisando pela internet. 3) Diversas extensões. Com o VS Code você pode instalar diversas extensões que auxiliam no seu desenvolvimento, por enquanto adicionei a padrão de Lua. Com ela, ao escrever códigos Lua é utilizado intellisense, facilitando muito no desenvolvimento. 4) Criação de snippets para utilização das funções do Tibia. 5) Muito mais.. Utilizo há algum tempo o VS Code para desenvolvimento de front e sempre descubro coisas novas sobre ele.. O VS Code esta disponível em: https://code.visualstudio.com/download.
  9. function onCastSpell(cid, var) local target = getCreatureTarget(cid) local Hp = (getCreatureHealth(target))*0.2 if isCreature(target) then doCreatureAddHealth(target, -Hp) -- remove o valor de 20% da vida do jogador doSendMagicEffect(getCreaturePosition(target), 10) -- EFEITO DA MAGIA end return true end ^^^^ assim pega no target
  10. só pra deixar claro que nunca precisou mexer nas sources para criar algo assim
  11. Eu planejo no ano que vem fazer um server com a maioria dessas características. Mas já digo, tive servidor com esse tipo de sprites e custa muito dinheiro...
  12. Olhei bem por cima: troca : setPlayerStorageValue(cid, 62164, os.time()) por: setPlayerStorageValue(cid, 62164, os.time() + configs.time *60*1000) apaga: creatureEvent(setPlayerStorageValue, , cid, 62164, 0) troca: if getPlayerStorageValue(cid, 62164) >= 1 then return doPlayerSendCancel(cid, "Voce ja ta Sob o Efeito da Potion.")end por: if getPlayerStorageValue(cid, 62164) - os.time() >= 1 then return doPlayerSendCancel(cid, "Voce ja ta Sob o Efeito da Potion.")end
  13. Abre no remeres, só que ao invés de apertar OPEN apertar no IMPORT e procura o mapa
  14. Reds postou uma resposta no tópico em Suporte Tibia OTServer
    meu, se o dano é impar ta curando 1 a mais, pq botei o math.ceil, mas ta curando certinho, 50% do dano que causa, oq ta dando de errado no seu? vc ta referenciando o script correto em weapons.xml?
  15. Reds postou uma resposta no tópico em Suporte Tibia OTServer
    pra mim ta funcionando certinho, vc testou?
  16. nao entendi muito bem, pode explicar melhor?
  17. Reds postou uma resposta no tópico em Suporte Tibia OTServer
    no meu ot essa spell funciona contra qualquer dano, a spell só da o storage para o player, o que faz com que ele n receba o dano está nos creaturescript, posta ai para eu ver se está td certo
  18. apaga isso: if level==0 then setItemName(itemEx.uid, nm..' +'..(level+1)..slot) elseif level<=9 then setItemName(itemEx.uid, string.match(string.match(string.sub(nm, 1, -3), "%S.*"), ".*%S")..' +'..(level+1)..slot) else setItemName(itemEx.uid, string.match(string.match(string.sub(nm, 1, -4), "%S.*"), ".*%S")..' +'..(level+1)..slot) end isso: setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..slot) e isso: setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..' +'..(level-1)..slot)
  19. nao sei muito desse lua error, mas trocando por (return false) deve fazer a mesma coisa stack overflow significa que o código entra em um loop infinito, ai eu apaguei a parte que causava esse loop que era: addEvent(Paralizy, 1*100, cid)
  20. function Paralizy(cid)if not isCreature(cid) then return LUA_ERROR endlocal HelmetID = 12692 --- ID DO ITEMif getPlayerSlotItem(cid, CONST_SLOT_FEET).itemid == HelmetID thendoRemoveCondition(cid, CONDITION_PARALYZE)endreturn trueendfunction onEquip(cid, item, slot)doRemoveCondition(cid, CONDITION_PARALYZE)addEvent(Paralizy, 1*100, cid)return trueend era esse que causava o erro, retirei a linha
  21. Reds postou uma resposta no tópico em Suporte Tibia OTServer
    local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 1) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatFormula(combat, COMBAT_FORMULA_SKILL, 0, 0, 1.0, 0) function onUseWeapon(cid, var) local skill = getPlayerSkill(cid,SKILL_SWORD) -- Change this to the type of weapon you are using local mat = 0.085*0.5*50*skill+(getPlayerLevel(cid)/5) -- Change 50 to the attack of the weapon local min = 5 -- this means 5% minimum healing local max = 15 -- this means 15% maximum healing local dmg = math.random((mat * (min/100)), (mat * (max/100))) if getPlayerLevel(cid) >= 20 then local target = getCreatureTarget(cid) doCreatureAddHealth(target, -dmg) doCreatureAddHealth(cid, (math.ceil(dmg/2))) doSendAnimatedText(getPlayerPosition(target),"-"..dmg.."", TEXTCOLOR_RED) doSendMagicEffect(getThingPos(target), 0) doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE) else doPlayerSendCancel(cid, 'You need level 20 to use this weapon.') end end ta na mão
  22. saquei, faz assim então, cola ai o que vc usa para dar +1, +2, +3 e etc..
  23. apaga isso: setItemDodgePercent(itemEx.uid, atual + (math.random(upgrade[level+1].min,upgrade[level+1].max))/10)doItemSetAttribute(itemEx.uid,'name', getItemNameById(itemEx.itemid)..' +'..(level+1)) e coloca isso: local porcentagem = atual + (math.random(upgrade[level+1].min,upgrade[level+1].max))/10 setItemDodgePercent(itemEx.uid, porcentagem)doItemSetAttribute(itemEx.uid,'name', getItemNameById(itemEx.itemid)..' +'..(porcentagem)) olhei bem por cima o código, se n der me avisa
  24. doItemSetAttribute(itemEx.uid,'name', getItemNameById(itemEx.itemid)..' +'..(level+1)) voce modifica aqui o texto
  25. o script ta referenciado corretamente no xml?

Informação Importante

Confirmação de Termo