Ir para conteúdo

zipter98

Herói
  • Total de itens

    2553
  • Registro em

  • Última visita

  • Dias Ganhos

    72

Tudo que zipter98 postou

  1. zipter98

    Npc Sweet Cyclop

    Depois que o jogador fala offers, o NPC "finaliza" o diálogo com o jogador. Aí, você tem que falar buy/trade novamente.
  2. Tem sim. Você prefere configurar as cores possíveis, bem como combinações, ou sortir valores aleatórios que correspondem as colorações possíveis do Tibia?
  3. zipter98

    Npc Sweet Cyclop

    Use a seguinte tabela. É comum quem não está familiarizado com Lua ter problemas em configurar tabelas, não se preocupe. local config = { [8300] = {amount = 1, requires = {{2177, 10}, {2160, 1}}}, [6529] = {amount = 1, requires = {{5944, 1}}}, } Feliz Natal pra você também :^)
  4. Levando em consideração o fato do código não apresentar erros que o impedissem de ser executado, além da configuração estar correta, o que nos resta é um problema no próprio servidor. Entretanto, sem as sources, infelizmente não temos descobrir. Como esta base do KPDO veio com muitos bugs, se eu estiver correto não será nenhuma surpresa.
  5. zipter98

    Npc Sweet Cyclop

    Duas travessões seguidas fazem o servidor interpretar o que vem a seguir como um comentário, que, no caso, não é interpretado como uma parte efetiva do código. Tire-os, juntamente com as reticências (como lhe informei anteriormente), e seja feliz.
  6. OK, troque por este código e veja se alguma coisa é imprimida no console: local Kecleon_config = { [FIREDAMAGE] = {lookBody = 113, lookHead = 110, lookLegs = 115, lookFeet = 113}, [WATERDAMAGE] = {lookBody = 107, lookHead = 106, lookLegs = 107, lookFeet = 105}, --etc } print(0) function onStatsChange(cid, attacker, type, combat, value) print(1) if getCreatureName(cid) == "Kecleon" then print(2) local color = Kecleon_config[combat] if color then print(3) color.lookType = getCreatureOutfit(cid).lookType doSetCreatureOutfit(cid, color, -1) end end return true end
  7. zipter98

    Npc Sweet Cyclop

    Sim, é dessa maneira que você pensou. Entretanto, para evitar erros você deve retirar as reticências (coloquei apenas como um indicativo que você pode configurar quantos itens quiser). De todo modo, cometi uma pequena confusão no nome de uma variável. Corrigido.
  8. Sim, tem que registrar em login.lua. E, por precaução, também registre no arquivo .xml do Kecleon (data/monsters).
  9. Hm, esse evento foi registrado? De qualquer maneira, podemos fazer um script separado com o intuito de apenas mudar a coloração do Kecleon. O registro é normal, logo suponho que você saiba fazer. local Kecleon_config = { [FIREDAMAGE] = {lookBody = 113, lookHead = 110, lookLegs = 115, lookFeet = 113}, [WATERDAMAGE] = {lookBody = 107, lookHead = 106, lookLegs = 107, lookFeet = 105}, --etc } function onStatsChange(cid, attacker, type, combat, value) if getCreatureName(cid) == "Kecleon" then local color = Kecleon_config[combat] if color then color.lookType = getCreatureOutfit(cid).lookType doSetCreatureOutfit(cid, color, -1) end end return true end
  10. Você usou uma spell do elemento psíquico no Kecleon? Como é o único combate configurado na tabela, é o único que funcionará. Para todo caso, troque: if nickshiny == "Kecleon" then local color = Kecleon_config[combatee] if color then color.lookType = getCreatureOutfit(cid).lookType doSetCreatureOutfit(cid, color, -1) end end por: if nickshiny == "Kecleon" then print(1) local color = Kecleon_config[combatee] if color then print(2) color.lookType = getCreatureOutfit(cid).lookType doSetCreatureOutfit(cid, color, -1) end end E informe o que for imprimido no console.
  11. Não vai mudar para nada aleatoriamente. Usando valores numéricos, você configura as cores de cada parte do corpo do Kecleon na tabela. Você pode colocar quantas indexes quiser nesta tabela, entretanto só vão funcionar aquelas que tiverem combates existentes no servidor. Ex.: local Kecleon_config = { [FIREDAMAGE] = {lookBody = 113, lookHead = 110, lookLegs = 115, lookFeet = 113}, [WATERDAMAGE] = {lookBody = 107, lookHead = 106, lookLegs = 107, lookFeet = 105}, --etc }
  12. Acima de: function onStatsChange(cid, attacker, enps, combatee, value) coloque: local Kecleon_config = { --[combat] = {lookBody = xxx, lookHead = xxx, lookLegs = xxx, lookFeet = xxx}, } combat - tipo de combate correspondente ao elemento. Exemplos: GRASSDAMAGE, FIREDAMAGE, WATERDAMAGE, ICEDAMAGE, etc. lookBody, lookHead, lookLegs e lookFeet - responsáveis pela coloração da outfit. Como os nomes sugerem, lookBody é a coloração do corpo, lookHead da cabeça, etc.
  13. Sem acesso ao sistema de vantagem e desvantagem é simplesmente impossível aplicar esta resistência de elementos do Kecleon. Entretanto, a troca da cor da outfit é bem simples e consiste num pequeno bloco de código. Tabela de configuração: local Kecleon_config = { --[combat] = {lookBody = xxx, lookHead = xxx, lookLegs = xxx, lookFeet = xxx}, } Recomendo colocá-la fora do callback. Depois, abaixo de: if not x then return false end coloque: if nickshiny == "Kecleon" then local color = Kecleon_config[combatee] if color then color.lookType = getCreatureOutfit(cid).lookType doSetCreatureOutfit(cid, color, -1) end end
  14. zipter98

    Npc Sweet Cyclop

    Configuração da tabela: [ID_do_item_vendido] = {amount = quantidade, requires = {{ID_do_item_trocado, quantidade}, {ID_do_item_trocado, quantidade}, etc}}, Código: local config = { --[itemid] = {amount = x, requires = {{itemid, amount}, {itemid, amount}, ...}}, } local options = "" for sell, info in pairs(config) do local itens_required = "" for i = 1, #info.requires do if itens_required == "" then itens_required = info.requires[i][2].."x "..getItemNameById(info.requires[i][1]) else itens_required = itens_required..(i == #info.requires and " and " or ", ")..info.requires[i][2].."x "..getItemNameById(info.requires[i][1]) end end options = options.."\n"..info.amount.."x "..getItemNameById(sell).." - "..itens_required end local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if not npcHandler:isFocused(cid) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if msgcontains(msg, "trade") or msgcontains(msg, "buy") then selfSay("Hello. To see my offers, say {offers}; to buy something, tell me the item's name.", cid) talkState[talkUser] = 1 elseif msgcontains(msg, "offers") and talkState[talkUser] == 1 then doPlayerPopupFYI(cid, options) talkState[talkUser] = 0 elseif talkState[talkUser] == 1 then local item = config[getItemIdByName(msg)] if not item then selfSay("Sorry, I don't recognize this item. Try another one.") return true end for i = 1, #item.requires do if getPlayerItemCount(cid, item.requires[i][1]) < item.requires[i][2] then selfSay("Sorry, you don't have "..item.requires[i][2].."x "..getItemNameById(item.requires[i][1])..".", cid) talkState[talkUser] = 0 return true end end selfSay("OK, here yours "..item.amount.."x "..getItemNameById(getItemIdByName(msg)).."!", cid) for i = 1, #item.requires do doPlayerRemoveItem(cid, item.requires[i][1], item.requires[i][2]) end doPlayerAddItem(cid, getItemIdByName(msg), item.amount) talkState[talkUser] = 0 end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
  15. É, parece que o cálculo do dano baseado em vantagem e desvantagem é escrito nas sources. Neste arquivo seria possível alterar a cor do Kecleon, mas a resistência ao elemento não seria viável, visto que o elemento primário dele é levado em consideração na fórmula em C++. A não ser que as funções getCombatByType e doMoveHealth façam mais do que o nome sugere. Sem o código delas, entretanto, não tenho como tirar conclusões.
  16. O sistema de vantagem/desvantagem é escrito em Lua ou C++? Se for a primeira opção, então é possível fazer isso com alterações apenas em uma arquivo (localizado em data/creaturescripts/scripts com callback onStatsChange). Caso encontre-o, por gentileza, poste-o aqui para podermos te ajudar. Entretanto, se for escrito nas sources, lamento.
  17. Você quer fazer igual na PxG? Porque, pelo menos no caso deles, o que altera a cor do Kecleon não é a spell propriamente dita, e sim o elemento dela. Ou me enganei e você quer apenas uma magia específica para isso?
  18. data/creaturescripts/scripts local level_difference = x --Diferença de level. function onTarget(cid, target) if isPlayer(cid) and isPlayer(target) then local level = math.abs(getPlayerLevel(cid) - getPlayerLevel(target)) return level < level_difference end return true end function onStatsChange(cid, attacker, type, combat, value) if isPlayer(cid) and isPlayer(attacker) and type == STATSCHANGE_HEALTHLOSS then local level = math.abs(getPlayerLevel(cid) - getPlayerLevel(attacker)) return level < level_difference end return true end Tags: <event type="statschange" name="lv_diff_SC" event="script" value="nome_do_arquivo.lua"/> <event type="target" name="lv_diff_target" event="script" value="nome_do_arquivo.lua"/> Não se esqueça de registrar ambos os eventos em login.lua.
  19. Suponho que saiba fazer a tag. data/talkactions/scripts: local config = { itemid = 6103, --Item necessário para trocar de vocação. level = 50000, --Level necessário. reset_amount = 10, --Quantidade mínima de resets necessária. reset_func = getPlayerReset, --Função responsável por retornar quantos resets o jogador possui. vocations = { --["vocation_name"] = id, ["knight"] = 1, ["paladin"] = 2, --etc } } function onSay(cid, words, param) local vocation = config.vocations[param:lower()] if config.reset_func(cid) < config.reset_amount then doPlayerSendCancel(cid, "You need "..config.reset_amount.." resets.") return true elseif getPlayerLevel(cid) < config.level then doPlayerSendCancel(cid, "You need at least level "..config.level..".") return true elseif not vocation then doPlayerSendCancel(cid, "This vocation doesn't exist or isn't available by this command.") return true elseif vocation == getPlayerVocation(cid) then doPlayerSendCancel(cid, "You already belong to this vocation.") return true elseif not doPlayerRemoveItem(cid, config.itemid, 1) then doPlayerSendCancel(cid, "You need 1x "..getItemNameById(config.itemid)..".") return true end doPlayerSendTextMessage(cid, 27, "Congratulations, now you're a "..param.."!") doPlayerSetVocation(cid, vocation) return true end
  20. Você configura o uniqueid na tag. local config = { itemid = xxx, --ID da MW. remove_time = 60, --Tempo em segundos para as MW serem removidas. positions = { {x = x, y = y, z = z}, --Posições onde as MW serão criadas. {x = x, y = y, z = z}, {x = x, y = y, z = z}, --etc } } function onStepIn(cid) if not isPlayer(cid) then return true end for i = 1, #config.positions do local item = getTileItemById(config.positions[i], config.itemid).uid if item == 0 then doCreateItem(config.itemid, 1, config.positions[i]) addEvent(function() doRemoveItem(getTileItemById(config.positions[i], config.itemid).uid) end, config.remove_time * 1000) end end return true end
  21. No código da spell, abaixo de: function onCastSpell(cid, var) coloque: if getPlayerReset(cid) < 1 then doPlayerSendCancel(cid, "You can't cast this spell.") return true end
  22. local toPos = {x = x, y = y, z = z} --Posição para onde será teleportado. function onStepIn(cid, item, position, fromPosition) if not isPlayer(cid) then return true end doTeleportThing(cid, toPos) return true end
  23. Abaixo de: function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) coloque: if not isPlayer(cid) then return true end if not HaveCharaterAcess(cid) then doPlayerSendCancel(cid, "Você não é vip, portanto o manapool não irá healar sua mana.") doTeleportThing(cid, fromPosition) return true end
  • Quem Está Navegando   0 membros estão online

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