Ir para conteúdo

brun123

Conde
  • Total de itens

    512
  • Registro em

  • Última visita

  • Dias Ganhos

    16

Tudo que brun123 postou

  1. basta adicionar logo abaixo de function onStepIn isso: if not isPlayer(cid) then return end
  2. se for pokemon dash advanced, onde tem essa linha: catchinfo.rate = ballcatch[item.itemid].cr adiciona embaixo: if item.itemid == ID_DA_SUA_BOLA and isDay() then catchinfo.rate = catchinfo.rate * 2 end
  3. brun123

    Efeito Por Storage

    local effect = 55 -- Efeito que vai usar local storage = 4001 -- Storage que o player precisa ter local delay = 850 -- em ms function onLogin(cid) if getPlayerStorageValue(cid, storage) == 1 then SendEffect(cid) end return TRUE end function SendEffect(cid) if not isCreature(cid) then return end doSendMagicEffect(getThingPos(cid), effect) addEvent(SendEffect, delay, cid) end
  4. use return false pro script parar de executar após a checagem de certo item ou não, e usa return true no final em vez de return false
  5. verifique se no mapa os templos das cidades estão configurados certinhos... vê na sua database onde está o temple position de players que estão com esse problema
  6. é só editar os status de cada pokemon em data/lib/configuration.lua
  7. brun123

    Efeito Em Spell

    local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_EFFECT, 40) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) arr = { {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 1, 2, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0},} local area = createCombatArea(arr) setCombatArea(combat, area) local dur = 10 -- spell vai durar 10 segundos local delay = 500 -- delay (em ms) entre cada enviada de effect function executeCombat(cid, combat, var, time) if not isCreature(cid) or time <= os.time() then return doCombat(cid, combat, var) addEvent(executeCombat, delay, cid, combat, var, time) end function onCastSpell(cid, var) local status = getCreatureStorage(cid, 1115) if status > os.time() then return doPlayerSendCancel(cid, "A spell já esta ativado.") end doCreatureSetStorage(cid, 1115, os.time() + 15) executeCombat(cid, combat, var, os.time() + dur) return true end
  8. Bom, o erro acontece porque nessa linha: doPlayerSetVocation(cid, config[v].voc) foi feita uma tentativa de indexar uma tabela com tal key e retornou nil, provavelmente foi o que o Slicer disse, o v deveria valer 0, e como não tem key 0 na tabela config, vai retornar nil. Mas mesmo arrumando isso, sua script ta sem sentido nenhum, o que ela faz é repetir 16x, checando se a vocação do player é 0, e se um número aleatório gerado a cada repetição de 1 a 4 for igual ao que você especificou na tabela, blabla, ta muito nada a ver... function onUse(cid, item, frompos, item2, topos) local vocation = getPlayerVocation(cid) if vocation == 0 then vocation = math.random(4) elseif vocation > 4 then return doPlayerSendCancel(cid, "Você já tem promotion.") end doPlayerSetVocation(cid, vocation + 4) doRemoveItem(item.uid, 1) doSendMagicEffect(frompos, 30) return true end essa script faz o que você quer, pega a vocation do player e declara como vocation, se a variável vocation for 0, vai passar a ser um número de 1 a 4 aleatório, depois adiciona a vocação "vocation + 4" ao player, ou seja, se for 1 o vocation dele, vai passar a ser 5, se for 2 vai passar a ser 6 etc. edit: acabei de ver que seu script pode funcionar, mas trabalha com prababilidade... se você colocar nos fors para começar do 1 em vez de 0, pode ser que o player use o item e não aconteça nada, mas pode ser que ele use e funcione mudando a vocação etc, é chato explicar escrevendo o porquê disso ocorrer, mas usar for numa script assim é só querer complicar as coisas mesmo...
  9. brun123

    [Ajuda] Spell

    o primeiro script está faltando retornar true pra que o exhaust configurado no spells.xml funcione, aqui está: O segundo script:
  10. brun123

    Addevent

    é porque o unique ID de itens não são estáticos, eles variam... imagine se o servidor fosse atribuir um valor diferente pra cada chão, grama, árvore, motanha, itens dos players, itens nas houses, itens nos depot dos players, corpses dos monstros que morrem, loot desses monstros, itens que são agrupáveis podem ser divididos em 100 itens diferentes... resumindo, é muito item pra atribuir estaticamente um id, então eles são atribuídos dinamicamente, o servidor gera um uid pro item no memento requisitado e esse uid só dura um instante, e depois esse id é destruído da memória. é possível fazer UID estáticos, mas não é viável, já que itens contáveis podem ser separados e itens estão sumindo o tempo todo... então não rola Outro erro associável ao seu script, é que o itemEx.uid pode ser um monstro, player etc... então ia dar erro se usasse a função de transformar item sendo que o alvo seria uma criatura eu tinha feito um post parecido com esse antes, se quiser entender mais sobre o assunto: http://www.xtibia.com/forum/topic/193795-duvida-sobre-depot/page__view__findpost__p__1336914 seu script vai funcionar dessa forma: function onUse(cid, item, frompos, item2, topos) local arvores = {2706, 2701} if isCreature(item2.uid) or (item2.itemid or 0) <= 1 then return doPlayerSendCancel(cid, "Use somente em itens.") end local function doTransformToTree(itemId, itemPos, trees) local i = getTileItemById(itemPos, itemId).uid if i > 0 then doTransformItem(i, trees[math.random(#trees)]) end end addEvent(doTransformToTree, 3 * 1000, item2.itemid, topos, arvores) return true end
  11. não, em lua, única coisa que é considerado falso é nil, null e false. em c++, o data type boolean, vai de 0 a 1, é como se fosse um int, só que o range do int é muito maior. 0 é expressado como false e 1 é expressado como true qualquer número/string em lua é considerado verdadeiro
  12. brun123

    Cid?

    acabei de responder algo similar, mas muito mais detalhado, dá uma olhadinha depois: http://www.xtibia.com/forum/topic/197972-duvida-de-scripter-iniciante/page__view__findpost__p__1378516
  13. primeira coisa que você precisa saber pra entender esse meu tutorialzinho, é que tudo que é antecedido por "--" (dois traços) no script é um comentário, e não é lido pelo servidor, servem apenas para auxiliar os programadores a entenderem o que o código faz isso você entende quando você estuda o código fonte do seu servidor, lua é apenas um sistema de scripting, algo auxiliar que você consegue manipular sem ter que recompilar o servidor. function onUse(p1, p2, p3, p4, p5) percebe que chamei os parâmetros de p1 até p5, o que o código em c++ faz quando vai ler esse script, é declarar o p1 como o ID da criatura que está usando o item, p2 como as informações sobre o item usado, p3 sobre a posição e assim vai, o outro usuário postou o que cada parâmetro faz. Resumindo, o código seria lido assim: function onUse() local p1 = ID_DA_CRIATURA local p2 = TABELA_COM_INFO_DO_ITEM local p3 = POSICAO_DA_CRIATURA você não precisa declarar todos os parâmetros, mas se não o fizer, também não vai ser declarado aquele parâmetro pra ser usado no script você poderia fazer assim: function onUse(_, __, ___, ____, _____) o problema é que o código ia ficar difícil de ser lido por humanos, por exemplo: fica muito mais fácil de ser lido assim (o mesmo código): O fato de ser sempre "cid, item, frompos, item2, topos" ou então "cid, item, fromPosition, itemEx, toPosition" é mera convenção, o primeiro é apenas abreviação do segundo (não tem que ficar digitando as coisas com letra maiúscula e os nomes são menores e mais rápidos de se escrever) cid = creature id frompos = fromPosition topos = toPosition item2 = itemEx (itemEx é o item que você escolhe com o "use with" do tibia, por exemplo, você usa a corda, e com aquele negócio de selecionar você aperta em cima do buraco, assim o buraco é o itemEx) O uso do return é o seguinte: toda e qualquer função em lua retorna algum valor, mesmo se você não escrever return <algo>, a função vai retornar null. primeira coisa a se entender de return, é que ele para de executar a script, um exemplo de como pode ser útil em tornar scripts mais fáceis de serem lidas: Sem uso do return: Você pode até estar pensando que isso apenas aumentou o tamanho da script, mas em scripts muito longas, em que se abre muitos ifs dentro de ifs, fica chato de ler, exemplo: Ficou chatinho de ler, certo? isso porque foi identado, agora um script sem identeção nenhuma (não há espaços que separam os blocos dentro dos ifs) fica impossível de ler, olhe dessa outra forma: Agora saber qual valor colocar após o return, é uma questão de prática. Daqui a pouco vou mostrar seu uso em funções e algoritmos, mas em eventos pré-estabelecidos no código fonte (como function onUse, onSay, onStepIn), o servidor lê o que está escrito no seu script, e dependendo do valor que você retornar para o servidor, ele vai tomar uma determinada ação. Os caras que programaram o código fonte, fizeram com que se o que você retornou for uma condição verdadeira, nada vai acontecer, mas se for uma condição falsa, vai aparecer "You cannot use this object." no cliente. Quando eu digo condição verdadeira/falso, você tem que ter em mente os data types: strings sempre são verdadeiros, ou seja, se você escrever return "olá", não vai aparecer "You cannot use this object." números são basicamente a mesma ideia, sempre são verdadeiros, a diferença é que em c++, linguagem nativa do seu server, false é a mesma coisa que 0 e true é a mesma coisa que 1, portanto return 0 = return false, e return 1 = return true, qualquer outro número (se não me engano) também será considerado como return true. true é verdadeiro e false é falso. Olha suas diferentes utilidades em certos eventos: o resto você vai descobrindo por conta própria, agora uma função com return ue é boa como exemplo é o doPlayerRemoveMoney: Outro exemplo de return, mas dessa vez em uma função que não foi feita em lua, mas sim em c++, a doCreateMonster: essa função retorna o unique id (mesma coisa que cid) do monstro criado:
  14. pode ir no vocations.xml e ver como está as rates de fishing também, no config.lua também tem algo sobre rate de skill
  15. essas 2 spells que postaram deveriam funcionar normalmente, porém elas removem os summons de quem usa a magia... function onCastSpell(cid, var) local target = var.number or 0 if not isCreature(target) then return false end for _, uid in pairs (getCreatureSummons(target)) do doSendMagicEffect(getThingPos(uid), CONST_ME_BLOCKHIT) doRemoveCreature(uid) end return true end
  16. brun123

    Script De Quest

    se quer a caixa igual do motd, use a função doPlayerPopupFYI(cid, text)
  17. O que eu to falando é que ele fez isso no script do rare candy: local boost = getItemAttribute(ball.uid, "boost") or 0 doItemSetAttribute(ball.uid, "boost", boost + 1) não adianta aumentar o atributo de boost na bola diretamente, precisa aumentar os status também... do jeito acima, só vai fazer com que o pokémon pareça que tenha o boost, aparece com boost na ball e no look, mas não tem efeito algum
  18. é porque você só está alterando o atributo 'boost' da sua pokebola nessa action... pode ver que no boost.lua, além de alterar essa atributo, altera junto todos os status do pokemon
  19. é que essa função é declarada na lib dos npcs: getNpcCid = getNpcId getThis = getNpcId são todas a mesma coisa
  20. Esses erros aí só quem pode arrumar é quem editou os scripts de creature event onWalk e algum movement. Call stack overflow é repetição infinita, um exemplo disso é um script que quando um player pisa num tile X, ele é teleportado pro tile Y, e ao pisar no Y, ele é teleportado pro X... assim ele vai ficar teleportando indefinidamente até o server acusar o call stack overflow... é muito comum em scripts que são ativadas quando alguém anda/pisa em algum lugar misturado com funções de teleport
  21. provavelmente porque o player que você testou tinha previlégios para poder dar logout quando bem entendesse, acabei de testar aqui e funcionou tranquilo... você deve colocar exatamente embaixo de onLogout, pois se tiver algum outro return true antes dessa parte ser lida, o player vai conseguir sair sem problemas
  22. --[[ tabela dos itens a serem "sacrificados" adicione novas linhas para checar por mais que 4 itens configure a posição onde ele deve estar e o id ]] local items = { {pos = {x = 100, y = 100, z = 7}, itemid = 1980}, {pos = {x = 100, y = 100, z = 7}, itemid = 1980}, {pos = {x = 100, y = 100, z = 7}, itemid = 1980}, {pos = {x = 100, y = 100, z = 7}, itemid = 1980}, } --[[ tabela dos monstros a serem criados após remover os itens adicione novas linhas para criar mais monstros configure a posição onde ele vai nascer o nome do monstro criado ]] local monsters = { {pos = {x = 500, y = 500, z = 10}, name = "Demon"}, {pos = {x = 500, y = 500, z = 10}, name = "Demon"}, {pos = {x = 500, y = 500, z = 10}, name = "Demon"}, {pos = {x = 500, y = 500, z = 10}, name = "Demon"}, } local config = { onSpawnMonster = CONST_ME_TELEPORT, -- efeito lançado quando monstro é criado onRemoveItem = CONST_ME_BLOCKHIT, -- efeito lançado quando item é removido missingItem = CONST_ME_POFF, -- efeito lançado quando não encontrou o item para remover } -- 255 faz com que não lance efeito algum function onUse(cid, item, frompos, item2, topos) local missing_items, remove_items = false, {} for _, itemcheck in pairs (items) do local i = getTileItemById(itemcheck.pos, itemcheck.itemid).uid if i < 1 then missing_items = true if tonumber(config.missingItem) and config.missingItem ~= 255 then doSendMagicEffect(itemcheck.pos, config.missingItem) end else table.insert(remove_items, i) end end if missing_items then return doPlayerSendCancel(cid, "Está faltando algum item.") else for _, iuid in pairs (remove_items) do if tonumber(config.onRemoveItem) and config.onRemoveItem ~= 255 then doSendMagicEffect(getThingPos(iuid), config.onRemoveItem) end doRemoveItem(iuid) end for _, monsterinfo in pairs (monsters) do local m = doCreateMonster(monsterinfo.name, monsterinfo.pos, false) if isCreature(m) and tonumber(config.onSpawnMonster) and config.onSpawnMonster ~= 255 then doSendMagicEffect(getThingPos(m), config.onSpawnMonster) end end end return true end
  23. em qualquer script de login, adicione isso exatamente acima de function onLogin(cid): local blockplayers = 0 e exatamente embaixo de onLogin(cid) adicione isso: if os.time() - blockplayers < 5 then return false else blockplayers = os.time() end e agora em uma script onLogout, exatamente embaixo de onLogout, adicione isso: if os.time() - getPlayerLastLogin(cid) < 5 then doPlayerSendCancel(cid, "You can't logout now.") return false end
  24. nessa parte: if not isSummon(cid) and not isPlayer(cid) and math.random(1, wildEvolveChance) == math.random(1, wildEvolveChance) then addEvent(doEvolveWild, math.random(1, 2500), cid) end a função doEvolveWild (no mesmo script): local function doEvolveWild(cid) if not isCreature(cid) or getCreatureHealth(cid) <= 0 then return true end local name = getCreatureName(cid) local evolution = "none" if spcevo[name] then evolution = spcevo[name][math.random(1, #spcevo[name])] elseif poevo[name] then evolution = poevo[name].evolution end local a = getPokemonStatus(name) if not a or evolution == "none" then return true end local pk = {} local players = getSpectators(getThingPos(cid), 7, 7) if players then for pp = 1, #players do local this = players[pp] if isCreature(this) and isPlayer(this) and (getCreatureTarget(this) == cid or getDamageMapPercent(this, cid) > 0) then doSendMagicEffect(getThingPos(this), 173) local expstring = cid.."expEx" pk[this] = getItemAttribute(getPlayerSlotItem(this, 8).uid, expstring) doItemSetAttribute(getPlayerSlotItem(this, 8).uid, expstring, 0) end end end local level = getPokemonLevel(cid) local pos = getThingPos(cid) local gender = getCreatureSkull(cid) local lifepercentage = 1 - ((getCreatureHealth(cid) * 1.3) / getCreatureMaxHealth(cid)) local lookdir = getCreatureLookDir(cid) local status = {} status.offense = getOffense(cid) + a.off * 8 status.defense = getDefense(cid) + a.def * 8 status.agi = getSpeed(cid) + a.agi * 8 status.spatk = getSpecialAttack(cid) + a.spatk * 8 status.vit = getVitality(cid) + a.vit * 4 doRemoveCreature(cid) local evo = doCreateMonster(evolution, pos) setWildPokemonLevel(evo, level, status) doCreatureSetLookDir(evo, lookdir) doCreatureSetSkullType(evo, gender) doCreatureAddHealth(evo, -getCreatureMaxHealth(evo) * lifepercentage) doSendMagicEffect(getThingPos(evo), 18) for attacker, experience in pairs (pk) do doWildAttackPlayer(evo, attacker) local expstring = evo.."expEx" local exp = experience or 0 doItemSetAttribute(getPlayerSlotItem(attacker, 8).uid, expstring, exp) end sendFinishEvolutionEffect(evo, true) addEvent(sendFinishEvolutionEffect, 550, evo, true) addEvent(sendFinishEvolutionEffect, 1050, evo) end
  • Quem Está Navegando   0 membros estão online

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