Ir para conteúdo
Banner com Efeitos

xWhiteWolf

Héroi
  • Registro em

  • Última visita

Tudo que xWhiteWolf postou

  1. agradeça ao danih porque ele que fez o script pra você... eu só arrumei ):
  2. pensei numa solução aqui e vou tentar testar amanhã a noite. Até agora o script de ignite ficou assim: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 5) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, 3) local condition = createConditionObject(CONDITION_FIRE) setConditionParam(condition, CONDITION_PARAM_DELAYED, 1) setCombatCondition(combat, condition) addDamageCondition(condition, 1, 100, -math.random(390,1100)) local cooldown = 300 function onCastSpell(cid, var) if os.time() - getPlayerStorageValue(cid, 19329) >= cooldown then doPlayerSetStorageValue(cid, 19329, os.time()) doCombat(cid, combat, var) local target = getCreatureTarget(cid) for i = 1,5 do addEvent(function() if target ~= 0 and isCreature(target) and isCreature(cid) then doTargetCombatCondition(cid, target, condition, 15) end end, 1000*i) end else doPlayerSendCancel(cid, "Your ignite is in cooldown, you must wait "..(cooldown - (os.time() - getPlayerStorageValue(cid, 19329))).." seconds.") end return false end to pensando se faço por ataque normal e faço parecer que é uma condition ou se crio várias outras conditions e dependendo do (level + ml) /5 ele retorna uma condition diferente
  3. me fala se funfou function onCastSpell(cid, var) if getPlayerStorageValue(cid, 378378) >=3 then doCombat(cid, combat, var) return true else doPlayerSendCancel(cid, "You need to have at least 3 resets to cast this spell.") return false end end
  4. ali no meio vc tem a fórmula e vc pode ver que ela utiliza level local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA) setCombatParam(combat, COMBAT_PARAM_USECHARGES, true) local area = createCombatArea(AREA_SQUARE1X1) setCombatArea(combat, area) function onGetFormulaValues(cid, level, skill, attack, factor) local skillTotal, levelTotal = skill + attack, level / 5 return -(skillTotal * 1.5 + levelTotal), -(skillTotal * 2.5 + levelTotal) end setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues") function onCastSpell(cid, var) return doCombat(cid, combat, var) end nesse caso o exori vai pegar sua skill total e multiplicar por 1.5x e somar com seu level.. isso vai ser o dano minimo; O dano máximo é a skilltotal multiplicada por 2.5x e somada com o level total.
  5. seguinte amigo, weapons.xml só serve pra vc editar dano das wands ou fazer scripts pras weapons.. tudo que vc quiser fazer de dar atributo (algo secundário) tem que ser pelo movements.xml pq vai ser ele que vai ativar ou desativar os atributos a mais, tanto ao equipar (Function onEquip) como ao desequipar (Function DeEquip)
  6. tentei de tudo mas não consegui.. Acho q função certa seria essa daqui setConditionFormula(combat, mina, minb, maxa, maxb) mas não consegui utilizar ela. na melhor das hipóteses consegui deixar assim addDamageCondition(condition, 1, 100, -math.random(390,1100)) mas como a condition obrigatoriamente tem que ficar fora do script o math.random é sempre o mesmo até o script ser recarregado novamente. Esse fds vou procurar melhor e tento te dar uma resposta mais satisfadora
  7. os.time() é uma função que retorna o Unix time. Basicamente são os segundos que se passaram desde 00:00:00 de 1 de janeiro de 1970. Foi a data em que o "tempo" começou na era dos computadores e a medida acabou sendo usada até hoje. É uma ótima função para brincar com o tempo e é amplamente usada em todo tipo de linguagem. No tibia seus principais usos estão em global events e storages (exaustão entre comandos). O formato principal dessa função é assim. Fazer tal coisa salva o os.time num storage fim pegar o os.time novo e subtrair o os.time antigo (getPlayerStorageValue), se isso for >= ao tempo que vc quer, então permitir o resto do script senão retorna erro: falta ainda (tempo + (getPlayerStorageValue (storage do os.time) - os.time() (novo)) ) fim http://en.wikipedia.org/wiki/Unix_time
  8. isso aí llucas, to gostando de ver! Rep + pra ti
  9. acho q o problema foi que vc deixou um numero muito alto no multiplicador de dano e deixou um numero mt pequeno no multiplicador de defesa: <formula meleeDamage="8.0" distDamage="8.0" wandDamage="3.0" magDamage="3.5" magHealingDamage="7.0" defense="1.1" magdefense="1.3" armor="50.0"/> aumenta o defense, magdefense e o armor.. isso pra cada classe!
  10. lê oque eu falei e vê oque tu fez O certo era ter ficado assim: function onCastSpell(cid, var) if getPlayerStorageValue(cid, 378378) >=3 then doCombat(cid, combat, var) --- isso aqui que é o "resto" do script end return true ---da função oncastspell end ---- da função on cast spell
  11. Vou te ensinar 5 passos simples pra conseguir tudo que vc quiser aqui: 1) clica no Procurar e escreve oque vc quiser. 2) Repita os passos anteriores pra qualquer dúvida que vc tenha; 3) Caso não ache, procure no google seguido de otserv.. exemplo: quero achar um castle war 24h, então eu escrevo: "Castle War 24h otserv" 4) Caso não tenha sucesso, crie um tópico MUITO BEM EXPLICADO sobre qual é sua dúvida, faça questão de reler seu tópico a fim de não deixar nenhuma dúvida e checar possíveis erros de ortografia que tornem a leitura dúbia, lembre de falar sua versão de server e que versão de tibia é seu OTserv 5) Seja paciente e agradeça a qualquer um que se disponha em responder seu tópico, mesmo que ele não ajude. Edit: achei esses 2 tópicos aqui, espero que ajude: http://www.tibiaking.com/forum/topic/26602-sistema-cast-system-para-86/ http://www.tibiaking.com/forum/topic/27617-cast-system-tfs-04-86/
  12. danih, vc só colocar as coisas fora da function principal quando elas não variam com o tempo. a pos do player tem que ser pega quando ele clicar na alavanca e não quando liga o server. o certo seria: function onUse(cid, item, fromPosition, itemEx, toPosition) local pos = getPlayerPosition(cid) local up = {x= pos.x, y = pos.y, z= pos.z+1} -- aumenta um andar local down = {x= pos.x, y = pos.y, z= pos.z-1} -- diminui um andar. if (item.itemid == 1946) then doTeleportThing(cid, up) elseif (item.itemid == 1945) then doTeleportThing(cid, down) end return true end função ao Usar: pega a posição do Player calcula up e down se o itemid que é clicado tiver valor igual a 1946 então teleportar pra up senão, se o itemid que é clicado tiver valor igual a 1945 então teleportar pra cima fim do se retornar verdadeiro para a função (nesse caso ele checa a função e permite ou não a clicagem, se tivesse return false ele não permitira que vc clicasse e seria como se n tivesse usado (é util pra scripts que utilizem doRemoveItem) ) fim da função ___________________________________________ Vale lembrar que não irá bugar porque nesse script ele não muda o id da alavanca ao clicar;
  13. bom, a galera tá usando mais loops [for, while] (digamos que tá na moda) e tão preferindo fazer funções. O script novo é basicamente isso, e sem contar tb que ele é pro TFS novo (1.0) nessa nova versão você pode inserir uma função dentro de outra usando ":" como nesse exemplo aqui for i = 1,4 do Player(cid[5-i]):teleportTo(new_player_pos[i]) para i = 1,4 fazer: Player(cid[5-i]): teleportar para (NovaPosiçãoDePlayer) Ele vai começar com i = 1, daí teremos Player de numero 4 vai ser teleportado para a posição de numero 1 da table de new_player_pos dps o player de numero 3 vai ser teleportado pra pos de numero 2... e assim até i = 4. O resto é meio q entendível percebendo essa lógica das tables.. #Table retorna o numero de elementos que essa Table possui; No caso local players_area é uma table de 2 elementos. local players_area = { {x = 33225, y = 31671, z = 13}, --- PRIMEIRO ELEMENTO {x = 33222, y = 31671, z = 13} ---- SEGUNDO } já a new _player_pos possui 4 elementos, um pra cada player local new_player_pos = { {x = 33222, y = 31659, z = 13}, {x = 33221, y = 31659, z = 13}, {x = 33220, y = 31659, z = 13}, {x = 33219, y = 31659, z = 13} }
  14. dica pra fazer o do elevador: if item.id = 1945 then local pos = getPlayerPos (cid) np = {x= pos.x, y = pos.y, z= pos.z+1} -- aumenta um andar doTeleportThing(cid, np) elseif item.id = 1946 then np = {x= pos.x, y = pos.y, z= pos.z-1} -- diminui um andar. doTeleportThing(cid, np) end ISSO É SÓ UM ESBOÇO de como fazer o script. Daí vc coloca um actionid no actions.xml e coloca eles na alavanca, se o item for 1945 ele sobe o player e se for 1946 ele desce um andar.
  15. seja bem vindo ao TK bielzinho, adorei seu trabalho.
  16. não precisa fazer por query :/ é só colocar do jeito que o Max demonstrou pois já há a função setCreatureMaxHealth(cid, newHp) e setCreatureMaxMana(cid, newMana) eu usei assim no meu sistema de reset: local hp = getCreatureMaxHealth(cid) local resethp = hp*(config.percent/100) setCreatureMaxHealth(cid, resethp) local differencehp = (hp - resethp) doCreatureAddHealth(cid, -differencehp) local mana = getCreatureMaxMana(cid) local resetmana = mana*(config.percent/100) setCreatureMaxMana(cid, resetmana) local differencemana = (mana - resetmana) doCreatureAddMana(cid, -differencemana) se vc quiser conferir como ficou é só clicar na minha assinatura pra ver o script.
  17. tem outros sistemas de castle que contém o global events, dá uma procurada aí que vc acha.. aqui no TK tem pelo menos uns 2
  18. faz uma function onLogin que sete um storage com os.time () no player, dai na talkaction vc coloca pra checar os.time () - esse storage que vc salvou. Dessa forma vc vai ter como medir a diferença de tempo em que ele logou e o tempo na hora que ele executa a talkaction.
  19. ela tá por fórmula tb, que estranho.. posta seu vocations.xml aí pra mim dar uma olhada. Não consigo imaginar oque esteja causando isso :/
  20. único erro aparente é que o os.time() não usa milisegundos, ele usa o tempo em segundos.. então não precisa multiplicar por mil; local pausa = days*24*60*60*1000 ficaria local pausa = days*24*60*60 e um adendo: quando vc pretende colocar action por itemid você não precisa colocar esse if item.itemid == seuitem porque o script só vai ser ativado quando for aquele itemid então não faz sentido isso. A gente coloca essa condicional quando tiver mexendo com dois ou mais items no mesmo script ou em alguns casos extremos quando o cara quer ter certeza absoluta que o action/uniqueid pertence aquele item específico
  21. Ulatson, eu ando meio ocupado pra ficar scriptando então só vou dar dicas de como fazer ou onde conseguir: tem como colocar no script por exemplo para o Player falar só !resetar? Esse script foi feito para ser com Npc (porque eu acredito que dá mais RPG pro jogo), aqui no fórum vc encontra outros scripts feitos em talkaction desse modelo aí que você quer nesse script os outros jogadores vão conseguir visualizar quantos resets o player tem ? sim, ao dar Look aparece a quantidade de resets. tem como colocar nesse modelo abaixo: level 10.000 -3 resets após 3 resets o player só vai poder resetar no level 50.000 apos 7 resets o player vai ter que resetar 70.000 Ter tem, faz uma function checkLvl (cid) que verifique o numero de resets, se for <3 return 10000, se for >=3 e <7 return 50000 e se for >=7 return 70000, daí no local newminlevel = config.minlevel + (getResets(cid) * config.levelbyreset) vc coloca só checkLvl (cid) pra executar a função. e ter magias por exemplo star dead (3 resets) exevo gran mas mort (7 resets ) pra fazer isso é só criar a magia que vc quiser e colocar logo depois do function onCastSpell: if getPlayerStorageValue(cid, 378378) >=3 then resto do script end return true ---da função oncastspell end ---- da função on cast spell pra de 7 resets é só fazer a mesma coisa
  22. no caso vc teria que criar novas vocações como sendo Hibridos, exemplo: Se o cara era Paladino (3) e decide Virar Sorc (1) ele resetava como sendo Dark Paladin (9) e poderia usar algumas magias de paladin, algumas de sorc. Dava pra fazer tb algumas magias exclusivas de vocações como uma flecha encantada ou coisas parecidas.. A idéia é legal mas pra eu te ensinar a fazer isso você teria que manjar bastante das engines do seu server porque requer bastante trabalho manual. Em todo caso vou deixar essa resposta aqui e se alguém tiver muita paciência pra fazer pra ti ele pode usar essa lógica aqui pra te ajudar.
  23. todas as magias estão assim ou somente essa magia? Posta o script dela por favor pra eu dar uma olhada
  24. xWhiteWolf postou uma resposta no tópico em Suporte & Pedidos
    achei muito legal e inclusive eu tive uma idéia muito loca lendo os sistemas que esse server possui, vou tentar criar no próximo fds e se eu conseguir eu passo pra vocês, acho que vai ajudar.
  25. não executa porque "pos" não existe... que parametro é esse "pos" que você utilizou? function potion(pos, cid) local limitedeuso = 49012 doPlayerSetExperienceRate(pos,expfinal) doPlayerSendTextMessage(pos,22,textofinal) setPlayerStorageValue(cid, limitedeuso, 0) end você tinha que ter declarado ele antes ou utilizado outro parametro já conhecinho. Eis os conhecidos: function onUse(cid, item, frompos, item2, topos)

Informação Importante

Confirmação de Termo