Postado Setembro 2, 2019 5 anos Boa noite. Tentei reviver um tópico já respondido para tirar esta dúvida, mas não deu certo. Estou tentando já há algum tempo solucionar este problema: Eu quero que, ao matar um boss, todos os players que estavam batendo nele (e que tem uma certa storage de missão cumprida) recebam um item e uma outra storage de "recompensa recebida". Mas com o script que tenho atualmente, somente aquele que dá o last hit recebe o item. Segue script atual: function onKill(cid, target) if not (isPlayer(cid) and isMonster(target)) then return true end local storage = 587427 if getCreatureName(target) == "Smaug" and getPlayerStorageValue(cid, 587426) > 0 then setPlayerStorageValue(cid, storage, 1) doPlayerAddItem(cid,8931,1) end return true end function onLogin(cid) registerCreatureEvent(cid, "bossKill") return true end Já tentei utilizando onDeath em vez de onKill, mas não funcionou também, talvez porque eu tenha feito algo errado. Editado Setembro 2, 2019 5 anos por MatCollier (veja o histórico de edições)
Postado Setembro 2, 2019 5 anos local config = { monsterName = "smaug", -- nome em letras minúsculas. storageQueDeveter = 587426, storageQueVaiGanhar = 587427, itemId = 8931 } function onKill(creature, target) local player = creature:getPlayer() if not player then return true end if target:getMonster() and target:getName():lower() == config.monsterName then for uid in pairs(target:getDamageMap()) do local killer = Player(uid) if killer then if killer:getStorageValue(config.storageQueDeveter) > 0 then if not killer:addItem(config.itemId, 1) then print("[ERROR] CREATURESCRIPT, FUNCTION: addItem, PLAYER: ".. killer:getName()) else killer:setStorageValue(config.storageQueVaiGanhar, 1) end end end end end return true end TESTADO EM OTX3 Editado Setembro 2, 2019 5 anos por luanluciano93 (veja o histórico de edições) STYLLER OT 2022
Postado Setembro 2, 2019 5 anos Autor Olá! Primeiramente, obrigado pela ajuda! Eu não entendi muito bem esta parte: if not killer:addItem(config.itemId, 1) then print("[ERROR] CREATURESCRIPT, FUNCTION: addItem, PLAYER: ".. killer:getName()) else killer:setStorageValue(config.storageQueVaiGanhar, 1) end Poderia me explicar por favor? Por quê "if not killer:addItem(config.itemId, 1)" ? A ideia é que todos os jogadores sejam considerados killers e ganhem o item + a storage.
Postado Setembro 2, 2019 5 anos Esta parte "for uid in pairs(target:getDamageMap()) do" gera um laço de repetição pegando o UID de uma tabela que tem todos os jogadores que tiraram vida do monstro X ... Tenho costume de "tratar" todas as funções que dão ou removem dinheiro ou items dentro do jogo. Só estou colocando a condição que se o item realmente não for entregue vai aparecer um erro no console. Se não quiser fazer esse "tratamento" é só colocar assim: if killer:getStorageValue(config.storageQueDeveter) > 0 then killer:addItem(config.itemId, 1) killer:setStorageValue(config.storageQueVaiGanhar, 1) end Editado Setembro 2, 2019 5 anos por luanluciano93 (veja o histórico de edições) STYLLER OT 2022
Postado Setembro 2, 2019 5 anos Autor Acabei de testar, nenhum dos players que participou ganhou nem a storage, nem o item. EDIT: Também não apareceu nenhum erro na distro. Editado Setembro 2, 2019 5 anos por MatCollier (veja o histórico de edições)
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.