Ir para conteúdo

MaXwEllDeN

Héroi
  • Registro em

  • Última visita

Tudo que MaXwEllDeN postou

  1. function onChangeHealth(cid, attacker, value, type, secondaryDamage, secondaryType) if type ~= 1 then return true end if isPlayer(attacker) and getPlayerStorageValue(cid, 71257) < 1 then if math.random(100) <= chance_percent then local dmg = value * (extra_damage_percent / 100) setPlayerStorageValue(cid, 71257, 1) doTargetCombatHealth(attacker, cid, type, -dmg, -dmg, 255) setPlayerStorageValue(cid, 71257, -1) doCreatureSay(cid, "CRITICAL", 19) return false end end return true end Tente este.
  2. Headshot - Critical hit Quando alguém te ataca, há a chance de ela te bater na cabeça(headshot) e você tomar 250%(configurável) do dano que ela causaria normalmente. Então, vamos lá. Adicione isso ao seu creaturescripts.xml <event type="login" name="HeadshotLogin" event="script" value="headshot.lua"/> <event type="statschange" name="HeadshotCritical" event="script" value="headshot.lua"/> E crie este arquivo: data/creaturescripts/scripts/headshot.lua local chance_percent = 50 -- Chance percenting local extra_damage_percent = 250 -- Extra Damage Percent function onLogin(cid) registerCreatureEvent(cid, "HeadshotCritical") return true end function onStatsChange(cid, attacker, type, combat, value) if type ~= STATSCHANGE_HEALTHLOSS then return true end if isPlayer(attacker) and getPlayerStorageValue(cid, 71257) < 1 then if math.random(100) <= chance_percent then local dmg = value * (extra_damage_percent / 100) setPlayerStorageValue(cid, 71257, 1) doTargetCombatHealth(attacker, cid, type, -dmg, -dmg, 255) setPlayerStorageValue(cid, 71257, -1) doCreatureSay(cid, "CRITICAL", 19) return false end end return true end
  3. local config = { [90] = {ID, COUNT}, [80] = {ID, COUNT}, [59] = {ID, COUNT}, [50] = {ID, COUNT}, [40] = {ID, COUNT}, [30] = {ID, COUNT}, [20] = {ID, COUNT}, [10] = {ID, COUNT}, [3] = {ID, COUNT}, [1] = {ID, COUNT}, } function onUse(cid, item) local chance_growing = {} for chance, _ in pairs(config) do table.insert(chance_growing, chance) end table.sort(chance_growing, function(a, b) return a > b end) local chance = 0 for _, v in pairs(chance_growing) do if math.random(100) < v then chance = v break end end local item = config[chance] if item then doPlayerAddItem(cid, item[1], item[2]) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você encontrou ".. item[2] .." ".. item[1] .. ".") doSendMagicEffect(getThingPos(cid), 13) else doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Não foi dessa vez, tente na próxima ):") end doRemoveItem(item.uid, 1) return true end
  4. local config = { [90] = {ID, COUNT}, [80] = {ID, COUNT}, [59] = {ID, COUNT}, [50] = {ID, COUNT}, [40] = {ID, COUNT}, [30] = {ID, COUNT}, [20] = {ID, COUNT}, [10] = {ID, COUNT}, [3] = {ID, COUNT}, [1] = {ID, COUNT}, } function onUse(cid, item) if getPlayerStorageValue(cid, STORAGE) > 0 then doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você já recebeu seu prêmio.") return false end local chance_growing = {} for chance, _ in pairs(config) do table.insert(chance_growing, chance) end table.sort(chance_growing, function(a, b) return a > b end) local chance = 0 for _, v in pairs(chance_growing) do if math.random(100) < v then chance = v break end end local item = config[chance] if item then doPlayerAddItem(cid, item[1], item[2]) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você encontrou ".. item[2] .." ".. item[1] .. ".") setPlayerStorageValue(cid, STORAGE, 1) doSendMagicEffect(getThingPos(cid), 13) else doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Não foi dessa vez, tente na próxima ):") end doRemoveItem(item.uid, 1) return true end Esse...
  5. Provavelmente ele não tá abrindo o servidor de novo pra fazer o teste. Ou, se está, não está sobreescrevendo o script certo.
  6. local DESTINO = {x = 160, y = 54, z = 7} -- POSIÇÃO DE DESTINO local SAFFRON = {x = 160, y = 54, z = 7} -- POSIÇÃO DE Saffron local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg:lower()) end function onThink() npcHandler:onThink() end local talkState = {} 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, "sim") or msgcontains(msg, "yes") then selfSay("Aí está!", cid) doSendMagicEffect(getThingPos(cid), 10) npcHandler:releaseFocus(cid) doTeleportThing(cid, DESTINO) doSendMagicEffect(DESTINO, 10) elseif msgcontains(msg, "nao") or msgcontains(msg, "no") then selfSay("Aí está!", cid) doSendMagicEffect(getThingPos(cid), 10) npcHandler:releaseFocus(cid) doTeleportThing(cid, SAFFRON) doSendMagicEffect(SAFFRON, 10) end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Amigo, aprenda a usar vírgulas. Por causa da falta delas não entendi bem o que você queria.
  7. local DESTINO = {x = 160, y = 54, z = 7} -- POSIÇÃO DE DESTINO local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg:lower()) end function onThink() npcHandler:onThink() end local talkState = {} 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, "sim") or msgcontains(msg, "yes") then selfSay("Aí está!", cid) doSendMagicEffect(getThingPos(cid), 10) npcHandler:releaseFocus(cid) doTeleportThing(cid, DESTINO) doSendMagicEffect(DESTINO, 10) end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) <?xml version="1.0" encoding="UTF-8"?> <npc name="Bob" script="Bob.lua" walkinterval="2000"> <health now="100" max="100" /> <look type="131" head="58" body="43" legs="38" feet="76" addons="0" /> <parameters> <parameter key="message_greet" value="Ola |PLAYERNAME| voce deseja fazer o guia iniciante?" /> <parameter key="message_farewell" value="So I am alone again." /> <parameter key="message_walkaway" value="So I am alone again." /> </parameters> </npc>
  8. E por que tu não fala que tá dando erro? Dizer só "não funcionou" não ajuda em nada. Você não chega pra um médico e fiz que tá doente, você diz como você se sente ¬¬ Você chegou ao menos a mudar as configurações? Os ids de todos os ítens?
  9. Olha, provavelmente tu não tá usando o script certo. Faz tudo de novo, deleta o arquivo, cria a tag de novo, reinicia o servidor e testa. Porque na segunda vez, que mandei um errado, era pra ter dado erro, e na segunda funcionado.
  10. local config = { [90] = {ID, COUNT}, [80] = {ID, COUNT}, [59] = {ID, COUNT}, [50] = {ID, COUNT}, [40] = {ID, COUNT}, [30] = {ID, COUNT}, [20] = {ID, COUNT}, [10] = {ID, COUNT}, [3] = {ID, COUNT}, [1] = {ID, COUNT}, } function onUse(cid, item) if getPlayerStorageValue(cid, STORAGE) > 0 then doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você já recebeu seu prêmio.") return false end local chance_growing = {} for chance, _ in pairs(config) do table.insert(chance_growing, chance) end table.sort(chance_growing, function(a, b) return a > b end) local chance = 0 for _, v in pairs(chance_growing) do if math.random(100) < v then chance = v break end end local item = config[chance] if item then doPlayerAddItem(cid, item[1], item[2]) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você encontrou ".. item[2] .." ".. item[1] .. ".") setPlayerStorageValue(cid, STORAGE, 1) doSendMagicEffect(getThingPos(cid), 13) else doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Não foi dessa vez, tente na próxima ):") end doRemoveItem(item.uid, 1) return true end Opa, eu esqueci uma palavra hahua.
  11. local config = { [90] = {ID, COUNT}, [80] = {ID, COUNT}, [59] = {ID, COUNT}, [50] = {ID, COUNT}, [40] = {ID, COUNT}, [30] = {ID, COUNT}, [20] = {ID, COUNT}, [10] = {ID, COUNT}, [3] = {ID, COUNT}, [1] = {ID, COUNT}, } function onUse(cid) if getPlayerStorageValue(cid, STORAGE) > 0 then doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você já recebeu seu prêmio.") return false end local chance_growing = {} for chance, _ in pairs(config) do table.insert(chance_growing, chance) end table.sort(chance_growing, function(a, b) return a > b end) local chance = 0 for _, v in pairs(chance_growing) do if math.random(100) < v then chance = v break end end local item = config[chance] if item then doPlayerAddItem(cid, item[1], item[2]) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você encontrou ".. item[2] .." ".. item[1] .. ".") setPlayerStorageValue(cid, STORAGE, 1) doSendMagicEffect(getThingPos(cid), 13) else doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Não foi dessa vez, tente na próxima ):") end doRemoveItem(item.uid, 1) return true end Porque eu não sabia que era pra remover '-'
  12. Adicionando Global Storages no TFS 1.0 Olá, pessoal, estive trabalhando com o TFS 1.0, e me deparei com um problema ao utilizar uma storage global nesta versão, eles utilizaram uma versão com muitas diferenças da que estamos acostumados a programar nossos scripts, e essa versão antiga não possuía global storages. A solução que o pessoal encontrou para burlar isso, foi um tanto quanto arcaica, visto que esse modo deles pode acarretar em vários problemas eu resolvi desenvolver um código que funcionará normalmente no TFS 1.0. Enfim, deixando de falação, vamos ao tutorial... Primeiro, execute esse código SQL no seu Banco de Dados: CREATE TABLE `global_storage` ( `key` VARCHAR(32) NOT NULL, `value` TEXT NOT NULL, UNIQUE (`key`) ); Depois, é só adicionar estes métodos a sua biblioteca global e utilizar normalmente: -- getGlobalStorageValue(key) function getGlobalStorageValue(key, parser) local value = result.getDataString(db.storeQuery("SELECT `value` FROM `global_storage` WHERE `key` = ".. key .. ";"), "value") if not value then if parser then return false else return -1 end end return tonumber(value) or value end -- setGlobalStorageValue(key, value) function setGlobalStorageValue(key, value) if getGlobalStorageValue(key, true) then db.query("UPDATE `global_storage` SET `value` = '".. value .. "' WHERE `key` = ".. key .. ";") else db.query("INSERT INTO `global_storage` (`key`, `value`) VALUES (".. key ..", ".. value ..");") end return true end Obs: Se você utilizar multiworlds, as storages globais serão compartilhadas, ainda estou procurando um meio de burlar isso. Abraços.
  13. local config = { [90] = {ID, COUNT}, [80] = {ID, COUNT}, [59] = {ID, COUNT}, [50] = {ID, COUNT}, [40] = {ID, COUNT}, [30] = {ID, COUNT}, [20] = {ID, COUNT}, [10] = {ID, COUNT}, [3] = {ID, COUNT}, [1] = {ID, COUNT}, } function onUse(cid) if getPlayerStorageValue(cid, STORAGE) > 0 then doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você já recebeu seu prêmio.") return false end local chance_growing = {} for chance, _ in pairs(config) do table.insert(chance_growing, chance) end table.sort(chance_growing, function(a, b) return a > b end) local chance = 0 for _, v in pairs(chance_growing) do if math.random(100) < v then chance = v break end end local item = config[chance] if item then doPlayerAddItem(cid, item[1], item[2]) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você encontrou ".. item[2] .." ".. item[1] .. ".") setPlayerStorageValue(cid, STORAGE, 1) doSendMagicEffect(getThingPos(cid), 13) else doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Não foi dessa vez, tente na próxima ):") end return true end
  14. Muito bom. Vai ficar bem melhor pra encontrar os highlights, haha.
  15. Sim, o break é necessário pro script seguir a lógica que o programador quis usar. Dá uma lida de novo no tutorial, for index, valor in pairs(tabela) do Essa é a sintaxe do for. O que muitas pessoas não sabem, é que o underline(_) pode ser usado como nome de variável também. Exemplo: local _ = "Maxwell" print(_)
  16. Link atualizado.
  17. local STORAGE = 5021 -- Storage necessária para viajar local DESTINO = {x = 160, y = 54, z = 7} -- POSIÇÃO DE DESTINO local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg:lower()) end function onThink() npcHandler:onThink() end local talkState = {} 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, "cinnabar") then selfSay("Você deseja ser teletransportado para cinnabar?", cid) talkState[talkUser] = 1 elseif msgcontains(msg, "yes") and talkState[talkUser] == 1 then if getPlayerStorageValue(cid, STORAGE) > 0 then selfSay("Aí está!", cid) doSendMagicEffect(getThingPos(cid), 10) npcHandler:releaseFocus(cid) doTeleportThing(cid, DESTINO) doSendMagicEffect(DESTINO, 10) else selfSay("Me desculpe, mas você não tem acesso a cinnabar.", cid) end talkState[talkUser] = 0 end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
  18. table.insert, vai inserir creature, na tabela cid. e a parte de baixo, é um incremento, pesquisa depois sobre isso. Vai somar 1 ao valor de count
  19. Não, no caso ali, na linha 5, você mudou o valor da variável "var" mais próxima. Que no caso era a local var = 2,
  20. Olá pessoal. Perdão pela demora, não estou em casa agora e não tenho o script aqui comigo. Assim que chegar em casa eu faço o upload de novo e passo pra vocês.
  21. function resetHp(cid, percent) local newHp = getCreatureMaxHealth(cid) - (getCreatureMaxHealth(cid) * (percent / 100)) setCreatureMaxHealth(cid, newHp) doCreatureAddHealth(cid, newHp) return true end function resetMana(cid, percent) local newMana = getCreatureMaxMana(cid) - (getCreatureMaxMana(cid) * (percent / 100)) setCreatureMaxHealth(cid, newMana) doCreatureAddMana(cid, newMana) return true end
  22. S, eu tava com pressa e n li o código todo, é isso msm.
  23. então assim estaria correto? Obs: se não tiver aponte oque eu fiz de errado ty. Não está certo porque você usou o nome de uma função que já existe. Você sobreescreveu a antiga doSendMagicEffect por essa sua, e isso é horrível em vários sentidos, além que tem uma recursion desnecessária alí. O ideal seria algo como: function doSendMagicEffectRepeat(cid) if isCreature(cid) and getPlayerStorageValue(cid, limitedeuso) > 0 then doSendMagicEffect(getThingPos(cid), 13) addEvent(doSendMagicEffectRepeat, tempo1, cid) end return true end function onUse(cid, item, frompos, item2, topos) doSendMagicEffectRepeat(cid) return true end

Informação Importante

Confirmação de Termo