Ir para conteúdo

brun123

Conde
  • Total de itens

    512
  • Registro em

  • Última visita

  • Dias Ganhos

    16

Tudo que brun123 postou

  1. posta aqui: SpiritsOfInfernia.lua arenakill.lua Inquisition.lua
  2. vai em data/creaturesscripts/scripts e cola aqui o que tem nos arquivos pvparena.lua e taskcount.lua, use spoiler ou code pra facilitar a vizualização
  3. tem alguma script onDeath ou onPrepareDeath ou ainda onKill que executa a função doCreatureSay com o parâmetro type fora do permitido
  4. respondi algo parecido antes, vê lá: http://www.xtibia.com/forum/topic/201306-obter-items-ao-redor-do-player/page__view__findpost__p__1411794
  5. function onDeath(cid, corpse) local function func(position, corpseid, items, effect) local corpse = getTileItemById(position, corpseid).uid if corpse < 0 then return end local item = 0 for slot = 0, getContainerCap(corpse) do item = getContainerItem(corpse, slot) if item.uid <= 1 then return end if isInArray(items, item.itemid) then return doSendMagicEffect(getThingPos(corpse), effect) end end end local items = {2160, 2152} local effect = 15 addEvent(func, 1, getThingPos(cid), corpse.itemid, items, effect) return true end esse evento precisa ser registrado no XML do monstro, além da tag a ser adicionada no creaturescripts.xml. se for para um monstro ou outro, o ideal é utilizar onDeath mesmo, mas se quiser fazer para todos os monstros, é melhor fazer por onKill
  6. não vai funcionar iuniX, pois o loot só é gerado depois do return true, se o corpse ainda existir (pode acontecer de ele ser removido ainda no script). tem que usar addEvent, algo estilo: function onDeath(cid, corpse) local function func(position, corpseid) local item = getTileItemById(position, corpseid).uid if item.uid < 0 then return end -- usa for pra ver o loot blabla end addEvent(func, 1, getThingPos(cid), corpse.itemid) return true end
  7. basta colocar o terceiro parâmetro da função doSendMagicEffect com o uid do target, que aparece só para ele
  8. local bloqueado = 0 function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) if os.time() - bloqueado < 0 then doTeleportThing(cid, fromPosition, false) doPlayerSendCancel(cid, "Deve esperar "..math.abs(os.time() - bloqueado).." segundos para entrar aqui.") return true end local teleportEntrada = {x = 1, y = 1, z = 1} local tempo = 3 * 60 -- em segundos, isso equivale a 3 minutos doTeleportThing(cid, teleportEntrada, false) doSendMagicEffect(teleportEntrada, CONST_ME_TELEPORT) bloqueado = os.time() + tempo return true end Um player entra, e durante 3 minutos a entrada é bloqueada. Após os 3 minutos, mesmo que o player antigo continue no lugar onde ele foi teleportado, outro player poderá entrar e a entrada será novamente fechada por 3 minutos. Se o player que entrou sair antes do tempo ter passado, a passagem continuará bloqueada até que o tempo passe. O problema do logout foi causado pela falta de um return true antes do último end no script do logout. A script é um movements, o tipo é StepIn, basta ver outra tag no movements.xml e copiar.
  9. for a = 1, 5 do addEvent(descer, a * 1000, npc) end isso é equivalente a: addEvent(descer, 1 * 1000, npc) addEvent(descer, 2 * 1000, npc) addEvent(descer, 3 * 1000, npc) addEvent(descer, 4 * 1000, npc) addEvent(descer, 5 * 1000, npc)
  10. vá em data/logs/talkactions e vê os comandos que ele está usando, vai ver você descobre algo ali
  11. é cara, é porque a mensagem FYI foi bloqueada pra você não tomar debug, abre o arquivo login.lua que fica em data/creaturescripts/scripts e coloca aqui
  12. Na verdade são 1018 caracteres de limite, mas é um número duvidoso isso é pra impedir que os players tomem debug, mensagem fyi em branco ou muito grandes fazem o cliente fechar você pode usar a função 2x em seguidas que vai aparecer 2 caixas fyi pro players, aí da pra dividir a mensagem em mais de um caixa pra falar a verdade pode abrir várias caixas ao mesmo tempo, mas também tem limite que o cliente suporta, depois de uma boa quantidade de caixas abertas o cliente também dá debug
  13. ou então, vai no groups.xml e adiciona a flag de full light ou ainda, abre o seu login.lua em data/creaturescripts/scripts e antes do último return true end, coloque essa linha: doSetCreatureLight(cid, 25, 250, -1) mas é melhor colocar por flags mesmo se quiser saber como fazer isso, abre o arquivo constant.lua em data/lib do seu server, procura por algo do tipo: "HASFULLLIGHT" e vê se encontra algo assim: PLAYERCUSTOMFLAG_HASFULLLIGHT aí você vê que número essa global assume, e faz 2 elevado a esse número aqui por exemplo é 11, então 2^11 = 2048 aí você tem que somar esse número ao customflags/flags do player no groups.xml isso varia de server pra server, vê aí direitinho como é
  14. ninguém é obrigado a te ajudar não, seu script é possível de ser feito sim, mas me diz quem é que vai gastar um tempão fazendo um sistema complexo e longo pra simplesmente entregar pra alguém tudo pronto? A maioria dos pedidos que são atendidos são simples ou rápidos de serem feitos, e 99% das vezes as dúvidas são respondidas já passou um monte de scripter com boa popularidade por aqui, se ninguém quis ajudar, o problema não são os scripts, mas sim teu pedido
  15. posta o código inteiro se quiser que a gente arrume você tá verificando se a variável param é uma string com valor "users", eu duvido muito que é isso mesmo que você queria fazer se você tiver declarado ela como qualquer outra coisa ou não tiver declarado, esse bloco do if nunca vai ser lido, pois sua condição sempre será false
  16. opa, nessa parte aqui do script: if getTileItemById(checkpos, itemid) then return true end substitui por isso: if getTileItemById(checkpos, itemid).uid > 1 then return true end ja mudei lá em cima
  17. Uma função que procura direto no formado de cruz: eu fiz uma lib que converte uma array com 0, 1, 2 e 3 numa array de positions detalhe: acho muito difícil fazer uma função parecida em poucas linhas, pelo menos em lua acho que não rola... o que eu não fiz ainda foi vasculhar as sources pra ver como é feita essa conversão em spells e traduzir pra lua, essa aqui fiz sem basear em nada: Exemplo de uso dela: O bom dessa função que fiz é que a array não precisa ser simetrica/quadrada o primeiro parâmetro é o array contendo os nº (0 até 3, 0 não é nada, 1 é trnasformado em posição, 2 é o centro só que não é incluído no return da função, 3 é o centro e é incluído no retorno), o segundo array é a posição centro e o 3º parâmetro é o nº de voltas que o array vai dar, exemplo: Um exemplo de como uma magia que seria um raio para frente usando essa lib:
  18. Spell que remove os summons que tem o mesmo nome do mestre (precisa estar atacando algum summon dele ou o verdadeiro): function onCastSpell(cid, var) local target = getCreatureTarget(cid) if not isCreature(target) then doPlayerSendCancel(cid, "You need a target.") return false end local master = getCreatureMaster(target) if not isPlayer(master) then doPlayerSendCancel(cid, "This spell works only against players.") return false end if #getCreatureSummons(master) > 0 then local function doRemoveSummon(creature) if isCreature(creature) then doSendMagicEffect(getThingPos(creature), CONST_ME_POFF) doRemoveCreature(creature) end end local success = false for _, sid in pairs (getCreatureSummons(master)) do if getCreatureName(sid) == getCreatureName(master) then addEvent(doRemoveSummon, _ * 95, sid) success = true end end end return success end Spell que indica a posição do verdadeiro: function onCastSpell(cid, var) local target = getCreatureTarget(cid) if not isCreature(target) then doPlayerSendCancel(cid, "You need a target.") return false end local master = getCreatureMaster(target) if not isPlayer(master) then doPlayerSendCancel(cid, "This spell works only against players.") return false end local function revelar(cid, target, times) if not isCreature(cid) or not isCreature(target) or times <= 0 then return end doSendMagicEffect(getThingPos(target), CONST_ME_TUTORIALSQUARE, cid) doSendMagicEffect(getThingPos(target), CONST_ME_TUTORIALARROW, cid) addEvent(revelar, 450, cid, target, times - 1) end revelar(cid, master, 10) return true end
  19. brun123

    Alavanca E Escada

    primeiro verifique se há algum erro no console, se tiver, poste-o certifique-se de que está usando action id, e não unique id ao configurar o item no map editor
  20. Use -1 nesse caso: local condition = createConditionObject(CONDITION_LIGHT) setConditionParam(condition, CONDITION_PARAM_LIGHT_LEVEL, 4) setConditionParam(condition, CONDITION_PARAM_LIGHT_COLOR, 215) setConditionParam(condition, CONDITION_PARAM_TICKS, -1) function onEquip(cid, item, slot) doAddCondition(cid, condition) return TRUE end function onDeEquip(cid, item, slot) doRemoveCondition(cid, CONDITION_LIGHT) return TRUE end
  21. Aqui: function onCastSpell(cid, var) local tempo_para_remover = 10 -- em segundos if #getCreatureSummons(cid) > 0 then doPlayerSendCancel(cid, "You can only summon one creature.") return false end local summon, useCreateMonster = 0, false if type(doSummonMonster) then summon = doSummonMonster(cid, "Gazer") if summon == 3 then doPlayerSendCancel(cid, "There is not enough room to summon a creature.") return false end summon = getCreatureSummons(cid) summon = summon[#summon] if isCreature(summon) and getCreatureMaster(summon) == cid then doSendMagicEffect(getThingPos(summon), CONST_ME_MAGIC_BLUE) return true else useCreateMonster = true end else useCreateMonster = true end if useCreateMonster then local pos = getThingPos(cid) pos.y = pos.y + 1 summon = doCreateMonster("Gazer", pos, false) if summon == true then doPlayerSendCancel(cid, "There is not enough room to summon a creature.") return false end end if not isCreature(summon) then return false end doConvinceCreature(cid, summon) if getCreatureMaster(summon) ~= cid then doRemoveCreature(summon) return false end local function doDestroySummon(id) return isCreature(id) and doRemoveCreature(id) or false end doSendMagicEffect(getThingPos(summon), CONST_ME_MAGIC_BLUE) addEvent(doDestroySummon, tempo_para_remover * 1000, summon) return true end
  22. brun123

    Alavanca E Escada

    function onUse(cid, item, frompos, item2, topos) local stairId = 1385 -- id da escada que é criada local stairPos = {x = 100, y = 100, z = 100} -- posição da escada local i = getTileItemById(stairPos, stairId) if i.uid <= 1 then doCreateItem(stairId, stairPos) else doRemoveItem(i.uid) end doSendMagicEffect(stairPos, CONST_ME_POFF) return doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945) end
  23. Bom, o erro que da nesse script do spoiler (o original do tópico) é um outro erro que tinha que eu não percebi antes e por isso não arrumei... a parte de adicionar os itens ao player eu só copiei dos antigos, vou alterar pra deixar melhor, aqui está: function onKill(cid, target) if not isMonster(target) then return true end local configs = { ids = {2148, 2152, 2160, 7588, 7589, 7590, 7591, 7618, 7620, 8473}, premium = true -- só premium usar o auto loot ? [true ou false] } if configs.premium and not isPremium(cid) then return true end local function gatherGold(cid, corpseId, corpsePosition) if not isCreature(cid) then return end local corpse = getTileItemById(corpsePosition, corpseId).uid if corpse <= 1 or not isCorpse(corpse) then return end local slot, corpseMoney = 0, 0 for times = 1, getContainerSize(corpse) do local corpseItem = getContainerItem(corpse, slot) if not isInArray(configs.ids, corpseItem.itemid) then slot = slot + 1 else local iInfo, removeItem = getItemInfo(corpseItem.itemid), true if (iInfo.worth or 0) >= 1 then corpseMoney = corpseMoney + (corpseItem.type * iInfo.worth) else removeItem = doPlayerAddItem(cid, corpseItem.itemid, math.max(corpseItem.type, 1), false) end if removeItem then doRemoveItem(corpseItem.uid) end end end corpseMoney = corpseMoney + getPlayerMoney(cid) doPlayerRemoveMoney(cid, getPlayerMoney(cid)) doPlayerAddMoney(cid, corpseMoney) end local name, pos = getCreatureName(target), getThingPos(target) addEvent(gatherGold, 10, cid, getMonsterInfo(name).lookCorpse, pos) return true end
  • Quem Está Navegando   0 membros estão online

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