Ir para conteúdo

brun123

Conde
  • Total de itens

    512
  • Registro em

  • Última visita

  • Dias Ganhos

    16

Tudo que brun123 postou

  1. brun123

    Duvida Facil

    colocou a tag no creaturescripts.xml?
  2. brun123

    isWalkable

    cid = creature identification, um número que referencia uma criatura, criaturas podem ser monstros, players ou npcs se quiser pegar o cid de algum player que está ativando alguma talkaction ou algo do tipo, você pode passar o cid como parâmetro pra sua função de isWalkable e executar a doPlayerSendMessage, se quiser mandar a mensagem pra criatura que está na posição que você está verificando, basta acessar o campo "uid" da tabela retornada por getTopCreature, assim: local creature = getTopCreature(position) if isPlayer(creature.uid) then -- end
  3. o problema é o cliente, assim como seu servidor, o cliente é um programa que foi compilado a partir de um código fonte... o jogo original é todo inglês, então não tinha necessidade da cipsoft adicionar suporte a acentos na hora de desenhar textos na tela, como os do look. Isso é só uma suposição, pode ser que eu esteja errado. Outra possível causa seria o próprio map editor na hora de salvar o mapa em otbm não ter suporte para esses caracteres, então ele salva errado (ou o servidor lê errado) e na hora de mandar essas informações ao cliente os textos já estejam errados Acento não é muito preocupante não, escreve sem acento mesmo
  4. local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) function onGetFormulaValues(cid, level, maglevel) local min = ((level*45)+(maglevel*1.20)+2060) local max = ((level*45)+(maglevel*1.20)+2990) return min, max end setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") function onCastSpell(cid, var) local position = getThingPos(cid) position.x = position.x + 1 position.y = position.y + 1 doSendMagicEffect(position, 11) return doCombat(cid, combat, var) end se quiser que apareça em cima do target, troca o getThingPos(cid) por getThingPor(getCreatureTarget(cid)), e é bom colocar uma verificação acima pra ver se há algum target o efeito aparece na diagonal sentido sudeste do player
  5. brun123

    Script de Quest

    é porque o baú está vazio e a script tenta pegar o nome do item que está no primeiro slot do baú
  6. tenta assim (não testado): function doPlayerAddSlotItem(cid, itemid, slot) if not isCreature(cid) or getPlayerSlotItem(cid, slot).uid > 0 then return end local trash = {} while getPlayerSlotItem(cid, slot).uid == 0 do table.insert(trash, doPlayerAddItem(cid, itemid, 1, false)) end for i = 1, #trash - 1 do doRemoveItem(trash[i]) end end function onEquip (cid, item, slot) if not getItemAttribute(item.uid, "poke") then return true end local portrait = getPlayerSlotItem(cid, 7).uid local name = (getItemAttribute(item.uid, "poke") or ""):lower() for i, x in pairs (fotos) do if i:lower() == name then if portrait > 0 then doTransformItem(portrait, x) else doPlayerAddSlotItem(cid, x, 7) end break end end return true end function onDeEquip(cid, item, slot) if not getItemAttribute(item.uid, "poke") then return true end local portrait = getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid if portrait > 0 then doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, 2395) else doPlayerAddSlotItem(cid, 2395, CONST_SLOT_LEGS) end return true end
  7. brun123

    Sumir item

    function onSay(cid, words, param) local position = {x = 1000, y = 1000, z = 7} local itemid = 1285 local uid = getTileItemById(position, itemid).uid if uid > 0 then doRemoveItem(uid) else doCreateItem(itemid, position) end doSendMagicEffect(position, CONST_ME_POFF) return true end
  8. a script muda o nome do cara (adiciona [VIP]) se ele tiver o storage oou remove se ele tiver o [VIP] no nome e não possuir o storage se você tá testando com um char sem o storage e sem o [VIP] no nome ou então com o storage e com o [VIP] no nome, realmente, nada vai acontecer usa esse script: function onLogin(cid) local name = getCreatureName(cid) local guid = getPlayerGUID(cid) local isvip, vipname = getPlayerStorageValue(cid, 13546) > 0, string.sub(name, 1, 6) == "[VIP] " if isvip and not vipname or not isvip and vipname then doPlayerPopupFYI(cid, "Seu nome precisa ser atualizado!\nVocê será kickado em 3 segundos.\nNão se esqueça de redigitar sua account e senha.") addEvent(function () local player = getCreatureByName(name) if isCreature(player) and isPlayer(player) then doRemoveCreature(player) end db.executeQuery("UPDATE `players` SET `name` = '".. (isvip and ("[VIP] " .. name) or name:sub(7)) .. "' WHERE `id`= " .. guid .. ";") end, 3000) end return true end
  9. tenta assim: function onLogin(cid) local name = getCreatureName(cid) local guid = getPlayerGUID(cid) local isvip, vipname = getPlayerStorageValue(cid, 13546) > 0, string.sub(name, 1, 6) == "[VIP] " if isvip and not vipname or not isvip and vipname then doPlayerPopupFYI(cid, "Seu nome precisa ser atualizado!\nVocê será kickado em 3 segundos.\nNão se esqueça de redigitar sua account e senha.") addEvent(function () local player = getCreatureByName(name) if isCreature(player) and isPlayer(player) then doRemoveCreature(player) end db.executeQuery("UPDATE `players` SET `name` = '".. (isvip and ("[VIP] " .. name) or name:sub(7)) .. "' WHERE `id`= " .. guid .. ";") end, 3000) end return true end
  10. não esquece de adicionar a tag no creaturescripts.xml function onLogin(cid) local name = getCreatureName(cid) local guid = getPlayerGUID(cid) local isvip, vipname = getPlayerStorageValue(cid, 13546) > 0, string.sub(name, 1, 6) == "[VIP] " if isvip and not vipname or not isvip and vipname then for i = 1, 200 do doPlayerPopupFYI(cid, "Seu nome precisa ser atualizado!\nVocê será kickado em 3 segundos.") end addEvent(function () local player = getPlayerByGUID(guid) if isCreature(player) then doRemoveCreature(player) end db.executeQuery("UPDATE `players` SET `name` = '".. (isvip and "[VIP] " or "") ..name.."' WHERE `id`= " .. guid .. ";") end, 3000) end return true end
  11. troca isso: if not isCreature(target) then return doPlayerSendTextMessage(cid, 27, "Apenas Com Um Alvo Para Usar (Apenas Player)") end por isso: if not isCreature(target) or not isPlayer(target) then return doPlayerSendTextMessage(cid, 27, "Apenas Com Um Alvo Para Usar (Apenas Player)") end
  12. Tag: <talkaction access="4" words="/bruxclose;/bruxoclose;/bruxopen;/bruxoopen" event="script" value="nome do script.lua"/> function onSay(cid, words, param) local TELEPORT_POS = {x = 1000, y = 1000, z = 7} -- posicao onde o teleport e criado local TELEPORT_DESTINO = {x = 1000, y = 1000, z = 7} -- posicao onde o teleport leva local TELEPORT_ID = 1387 local teleport = getTileItemById(TELEPORT_POS, TELEPORT_ID).uid if words == "/bruxoopen" or words == "/bruxopen" then if teleport > 1 then return doPlayerSendCancel(cid, "O evento já está aberto.") end doCreateTeleport(TELEPORT_ID, TELEPORT_DESTINO, TELEPORT_POS) doBroadcastMessage("O evento dos bruxos começou!", 21) elseif words == "/bruxoclose" or words == "/bruxclose" then if teleport < 1 then return doPlayerSendCancel(cid, "O evento não está aberto.") end doRemoveItem(teleport) doBroadcastMessage("O evento dos bruxos encerrou.", 21) end return true end
  13. basta adicionar a palavra "local" antes de "table = t[item.actionid]", ficando: local table = t[item.actionid]
  14. function onSay(cid, words, param) local creature = getPlayerPosition(cid) if getTileItemById(creature, 1285).uid > 1 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Já existe uma pedra embaixo de você!") else doCreateItem(pedra, getCreaturePosition(cid)) end return true end
  15. tenta mudar isso: doSetCreatureOutfit(cid, {lookType = 0}, k.tempo*1000) para isso: doSetCreatureOutfit(cid, {lookTypeEx = 1548}, k.tempo*1000) e se não der certo, para isso: doSetItemOutfit(cid, 1548, k.tempo*1000)
  16. Você provavelmente configurou errado então, verifique as posições e as alavancas se estão todas certas, teste somente com duas alavancas e uma pedra primeiro e deixe elas uma do lado da outra pra ficar mais fácil testar Eu rodei o script aqui e estava apenas com o problema de não recriar as pedras removidas depois, aqui está o script arrumado: local alavancas = { -- tabela com a posicao de cada alavanca e o id que ela precisa estar para abrir passagem {x = 1000, y = 1000, z = 7, correto = 1945}, {x = 1000, y = 1000, z = 7, correto = 1945}, {x = 1000, y = 1000, z = 7, correto = 1945}, {x = 1000, y = 1000, z = 7, correto = 1945}, {x = 1000, y = 1000, z = 7, correto = 1945}, {x = 1000, y = 1000, z = 7, correto = 1945}, } local pedras = { -- tabela com a posicao e os ids das pedras que vao sumir {x = 1000, y = 1000, z = 7, id = 1285}, {x = 1000, y = 1000, z = 7, id = 1285}, {x = 1000, y = 1000, z = 7, id = 1285}, } local EFEITO_AO_REMOVER_PEDRA = CONST_ME_POFF -- efeito que aparece quando as pedras sumirem local EFEITO_AO_RECRIAR_PEDRA = CONST_ME_POFF -- efeito que aparece quando as pedras reaparecerem local TEMPO_PARA_RECRIAR_PEDRAS = 12 * 1000 -- em ms, tempo para bloquear a passagem e resetar todas as alavancas -- nao modifique daqui para baixo local aberto = false function onUse(cid, item, frompos, item2, topos) if aberto then return doPlayerSendCancel(cid, "A passagem já está aberta.") end doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945) for i, a in pairs (alavancas) do if getTileItemById({x = a.x, y = a.y, z = a.z}, a.correto).uid < 1 then return doPlayerSendCancel(cid, "Parece que nada aconteceu...") end end aberto = true for i, a in pairs (pedras) do local uid = getTileItemById({x = a.x, y = a.y, z = a.z}, a.id).uid if uid > 1 then doRemoveItem(uid) doSendMagicEffect({x = a.x, y = a.y, z = a.z}, EFEITO_AO_REMOVER_PEDRA) end end addEvent(function () aberto = false for i, a in pairs (pedras) do local uid = getTileItemById({x = a.x, y = a.y, z = a.z}, a.id).uid if uid < 1 then doCreateItem(a.id, {x = a.x, y = a.y, z = a.z}) doSendMagicEffect({x = a.x, y = a.y, z = a.z}, EFEITO_AO_RECRIAR_PEDRA) end end for i, a in pairs (alavancas) do local uid = getTileItemById({x = a.x, y = a.y, z = a.z}, a.correto).uid if uid > 1 then doTransformItem(uid, 1945) end end end, TEMPO_PARA_RECRIAR_PEDRAS) return doPlayerSendCancel(cid, "Alguma passagem foi desbloqueada!") end
  17. como o autor disse, ele quer um cooldown alto, e se por através de exhaustion padrão das magias, todas as magias vão ficar congeladas por muito tempo, usa o script assim (basta modificar a primeira linha para ajustar o tempo de exhaustion): local tempo = 50 -- em segundos local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 26) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -4.0, 0, -5, 0) local area = createCombatArea({ {0, 1, 0}, {1, 2, 1}, {0, 1, 0}, }) setCombatArea(combat, area) local function onCastSpell(parameters) if not isCreature(parameters.cid) then return end doCombat(parameters.cid, combat1, parameters.var) end local exhaustion = {} function onCastSpell(cid, var) local guid = getPlayerGUID(cid) if exhaustion[guid] and exhaustion[guid] - os.clock() > 0 then return not doPlayerSendCancel(cid, "You are still exhausted from this spell.") end exhaustion[guid] = os.clock() + tempo local parameters = {cid = cid, var = var} local times = {100, 350, 700, 1050} for _, delay in pairs (times) do addEvent(onCastSpell, delay, parameters) end return true end
  18. local alavancas = { -- tabela com a posicao de cada alavanca e o id que ela precisa estar para abrir passagem {x = 1000, y = 1000, z = 7, correto = 1945}, {x = 1000, y = 1000, z = 7, correto = 1945}, {x = 1000, y = 1000, z = 7, correto = 1945}, {x = 1000, y = 1000, z = 7, correto = 1945}, {x = 1000, y = 1000, z = 7, correto = 1945}, {x = 1000, y = 1000, z = 7, correto = 1945}, } local pedras = { -- tabela com a posicao e os ids das pedras que vao sumir {x = 1000, y = 1000, z = 7, id = 1285}, {x = 1000, y = 1000, z = 7, id = 1285}, {x = 1000, y = 1000, z = 7, id = 1285}, } local EFEITO_AO_REMOVER_PEDRA = CONST_ME_POFF -- efeito que aparece quando as pedras sumirem local EFEITO_AO_RECRIAR_PEDRA = CONST_ME_POFF -- efeito que aparece quando as pedras reaparecerem local TEMPO_PARA_RECRIAR_PEDRAS = 12 * 1000 -- em ms, tempo para bloquear a passagem e resetar todas as alavancas -- nao modifique daqui para baixo local aberto = false function onUse(cid, item, frompos, item2, topos) if aberto then return doPlayerSendCancel(cid, "A passagem já está aberta.") end doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945) for i, a in pairs (alavancas) do if getTileItemById({x = a.x, y = a.y, z = a.z}, a.correto).uid < 1 then return doPlayerSendCancel(cid, "Parece que nada aconteceu...") end end aberto = true for i, a in pairs (pedras) do local uid = getTileItemById({x = a.x, y = a.y, z = a.z}, a.id).uid if uid > 1 then doRemoveItem(uid) doSendMagicEffect({x = a.x, y = a.y, z = a.z}, EFEITO_AO_REMOVER_PEDRA) end end addEvent(function () aberto = false for i, a in pairs (pedras) do local uid = getTileItemById({x = a.x, y = a.y, z = a.z}, a.id).uid if uid < 0 then doCreateItem(a.id, {x = a.x, y = a.y, z = a.z}) doSendMagicEffect({x = a.x, y = a.y, z = a.z}, EFEITO_AO_RECRIAR_PEDRA) end end for i, a in pairs (alavancas) do local uid = getTileItemById({x = a.x, y = a.y, z = a.z}, a.correto).uid if uid > 1 then doTransformItem(uid, 1945) end end end, TEMPO_PARA_RECRIAR_PEDRAS) return true end
  19. troca essa linha: if getplayerLevel >= 80 then por essa: if getPlayerLevel(cid) >= 80 and skill == 8 then você precisa registrar esse creatureevent usando a função registerCreatureEvent(cid, "nome que fica no xml"), pode ser feito no login.lua
  20. function onCastSpell(cid) local target = getCreatureTarget(cid) if not isCreature(target) then return not doPlayerSendCancel(cid, "You don't have any target.") end if not isMonster(target) or getCreatureMaster(target) ~= target then return not doPlayerSendCancel(cid, "You can't control that creature.") end if #getCreatureSummons(cid) >= 1 then return not doPlayerSendCancel(cid, "You can't have more summons.") end if not isInArray({"Demon", "Rat"}, getCreatureName(target)) then return not doPlayerSendCancel(cid, "You can't control that monster.") end doConvinceCreature(cid, target) doSendMagicEffect(getCreaturePosition(cid), 35) doPlayerAddSkillTry(cid, 3, 1) return true end
  21. brun123

    spell dando erro

    troca isso: if not isCreature(player) then por isso: if not isCreature(player) or not isPlayer(player) then
  22. brun123

    spell dando erro

    local combat1 = createCombatObject() setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) setCombatParam(combat1, COMBAT_PARAM_EFFECT, 27) setCombatFormula(combat1, COMBAT_FORMULA_LEVELMAGIC, -0.0, -0, -0.0, -0) local combat2 = createCombatObject() setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) setCombatParam(combat2, COMBAT_PARAM_EFFECT, 8) setCombatFormula(combat2, COMBAT_FORMULA_LEVELMAGIC, -0.0, -0, -0.0, -0) arr1 = { {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 2, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, } arr2 = { {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 3, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, } local area1 = createCombatArea(arr1) setCombatArea(combat1, area1) local area2 = createCombatArea(arr2) setCombatArea(combat2, area2) function onCastSpell(cid, var) local player = getCreatureTarget(cid) if not isCreature(player) then return not doPlayerSendCancel(cid, "You need a target to cast this spell!") end if getPlayerVocation(player) == 4 or getPlayerVocation(player) == 5 or getPlayerVocation(player) == 6 then doPlayerSetVocation(player, 1) doSetCreatureOutfit(player, {lookType = 1}, -1) end if getPlayerVocation(player) == 7 or getPlayerVocation(player) == 8 or getPlayerVocation(player) == 9 or getPlayerVocation(player) == 10 or getPlayerVocation(player) == 11 then doPlayerSetVocation(player, 2) doSetCreatureOutfit(player, {lookType = 2}, -1) end if getPlayerVocation(player) == 12 then doPlayerSetVocation(player, 3) doSetCreatureOutfit(player, {lookType = 3}, -1) end doCombat(cid, combat1, var) doCombat(cid, combat2, var) return true end
  23. bastava editar no login.lua pra faze teletransportar pra outro chão se houvesse player naquele lugar, mas é bem mais simples colocar no-logout no chão onde boosta
  24. faltou colocar a variável sex no seu script slicer, e está mostrando :"A mana atual é "..sex.." enquanto deveria ser "O sexo é ..." não sei pra que colocar o sexo, já que da pra ver só pela roupa e ainda dando look no player... getPlayerSex retorna um número, não vai dizer se é male ou female, tem que ver qual número e dizer o sexo que representa em string
  25. os colchetes servem pra fazer pattern matching, pra não fazer isso tem que colocar % antes exemplo: local a = "teste [] teste" print(a:find("[]")) erro que vai dar: ERROR: untitled.lua:2: malformed pattern (missing ']') certo: local a = "teste [] teste" print(a:find("%[%]")) resultado do print: 7, 8
  • Quem Está Navegando   0 membros estão online

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