Ir para conteúdo

Kyle Bellini

Membro
  • Registro em

  • Última visita

Tudo que Kyle Bellini postou

  1. Basta seguir o modelo da tabela; adicionar o nome do monstro, junto da posição onde quer que ele de spawn: local config = { monster = { [1] = {name = "Witch", position = {x = 79, y = 88, z = 6}}, [2] = {name = "Hydra", position = {x = 79, y = 89, z = 6}}, [3] = {name = "Dragon", position = {x = 79, y = 90, z = 6}}, }, removeTime = 20 -- Configurado em minutos } function onThink(interval, lastExecution) for index, monster in ipairs(config.monster) do local creature = doCreateMonster(monster.name, monster.position) addEvent(function() if not isCreature(creature) then return end doRemoveCreature(creature) end, config.removeTime * 60 * 1000) end return true end
  2. Como funciona o script? Qual é a intenção com ele? Daí eu vejo de criar algo um pouco mais elaborado, ou uma forma melhor/mais fácil de configurar
  3. envia o script do comando em questão, as vezes é configurado através dele mesmo
  4. mas no primeiro pedido foi exatamente isso que pediu, jogador só conseguiria utilizar se tivesse X item na bag kkkk tanto que não tem verificação se o item está equipado ou não, apenas se o jogador possui o item sobre o segundo pedido, o que acontece exatamente quando você tenta usar a spell? consegue fazer um gif? eu havia testado e tava ok
  5. não entendi, o primeiro script você pediu de uma forma, o segundo você pediu de outra (só utilizar se estiver no slot) como você realmente quer o script?
  6. a spell já funcionava anteriormente? não alterei nada na funcionalidade dela (buffs, e afins) vou testar depois
  7. opa, não havia notado que era pra 1.x hahaha bom que já fica aí pra quem usa 0.x valeu Luan o/
  8. para fazer com que seja necessário o jogador possuir uma storage pra utilizar o comando, basta adicionar uma verificação no código: if getPlayerStorageValue(cid, storageNecessaria) ~= valorDaStorage then return doPlayerSendCancel(cid, "Você não possui tal tal tal") end
  9. fiz esse código aqui, pra ficar mais fácil de adicionar mais cidades posteriormente, sem ter que mexer no "código", só adicionar na tabela mesmo local config = { cities = { ["thais"] = { name = "Thais City", pos = {x = 141, y = 379, z = 7} }, ["carlin"] = { name = "Carlin City", pos = {x = 142, y = 379, z = 7} }, ["venore"] = { name = "Venore City", pos = {x = 143, y = 379, z = 7} }, ["kazordoon"] = { name = "Kazordoon City", pos = {x = 144, y = 379, z = 7} }, ["yalahar"] = { name = "Yalahar City", pos = {x = 145, y = 379, z = 7} }, }, effect = 39 } function onSay(cid, words, param, channel) if (param == "") then return doPlayerSendCancel(cid, string.format("No parameters. Try this instead: %s cityname.", words)) end local cities = "" for city, values in pairs (config.cities) do cities = city .. ", " .. cities cities = cities:gsub(", $", ".") end if not config.cities[param] then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, string.format("Available cities: %s", cities)) return doPlayerSendCancel(cid, "Invalid city. A list of available cities has been sent to you. Check your Default Channel.") end doTeleportThing(cid, config.cities[param].pos) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, string.format("You have been teleported to %s.", config.cities[param].name)) doSendMagicEffect(getPlayerPosition(cid), config.effect) return true end
  10. vou dar uma olhada, e envio aqui -------- testa aí local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) local condition = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(condition, CONDITION_PARAM_TICKS, 30000) setConditionParam(condition, CONDITION_PARAM_STAT_MAGICLEVEL, 10) setConditionParam(condition, CONDITION_PARAM_SKILL_CLUB, 25) setConditionParam(condition, CONDITION_PARAM_SKILL_SWORD, 25) setConditionParam(condition, CONDITION_PARAM_SKILL_AXE, 25) setConditionParam(condition, CONDITION_PARAM_SKILL_DISTANCE, 25) setConditionParam(condition, CONDITION_PARAM_SKILL_SHIELD, 25) setConditionParam(condition, CONDITION_PARAM_BUFF, true) setCombatCondition(combat, condition) local config = { exhaustionStorage = 13101, exhaustionTime = 30.0, ringId = 7116, effect = 112 } function onCastSpell(cid, var) if exhaustion.check(cid, config.exhaustionStorage) == TRUE then doPlayerSendCancel(cid, "Podera usar novamente dentro de 30 segundos.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return false end local ringName = getItemNameById(config.ringId) if getPlayerSlotItem(cid, CONST_SLOT_RING).itemid ~= config.ringId then return doPlayerSendCancel(cid, string.format("You do not have a %s equipped.", ringName)) end for k = 1, 100 do addEvent(function() if isCreature(cid) then local pos1 = {x = getPlayerPosition(cid).x + 0, y = getPlayerPosition(cid).y + 0, z = getPlayerPosition(cid).z} doSendMagicEffect(pos1, config.effect) end end, 1 + ((k-1) * 300)) end exhaustion.set(cid, config.exhaustionStorage, config.exhaustionTime) return doCombat(cid, combat, var) end
  11. me informa o id do item, e a quantidade, pra eu arrumar tudo
  12. agora o seu primeiro if tem dois "end", só precisa de um
  13. você colocou duas onCastSpell(cid, var), e uma delas não está fechada (que é a primeira), pode deletar ela, e manter apenas a de baixo daí só copiar o que tem dentro da primeira onCastSpell e jogar pra baixo, onde está a segunda
  14. Envia aqui quais foram as alterações que você fez, que fica melhor de explicar/ver o que errou no script
  15. Precisa fazer a verificação se o jogador possui tal item, para isso, basta utilizar a função getPlayerItemCount(cid, itemid) function onGetFormulaValues(cid, level, maglevel) local levelTotal = level local min = (levelTotal * 4) / 5 + (maglevel * 25) / 2 local max = (levelTotal * 5) / 5 + (maglevel * 27) / 2 return -min, -max end local combat1 = createCombatObject() setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat1, COMBAT_PARAM_EFFECT, 33) setCombatParam(combat1, COMBAT_PARAM_DISTANCEEFFECT, 46) setCombatCallback(combat1, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") local function onCastSpell1(parameters) if not isPlayer(parameters.cid) then return true end doCombat(parameters.cid, parameters.combat1, parameters.var) end local config = { requiredItem = {itemid = 2675, count = 1} -- Coloque o id do item necessário em: 'itemid = aqui', e a quantidade necessária do item em: 'count = aqui' } function onCastSpell(cid, var) local parameters = {cid = cid, var = var, combat1 = combat1} local itemName = getItemNameById(config.requiredItem.itemid) if getPlayerItemCount(cid, config.requiredItem.itemid) < config.requiredItem.count then if config.requiredItem.count == 1 then doPlayerSendCancel(cid, string.format("You need %d %s to use this spell.", config.requiredItem.count, itemName)) else doPlayerSendCancel(cid, string.format("You need %d %ss to use this spell.", config.requiredItem.count, itemName)) end return end for k = 1, 10 do addEvent(function() if isCreature(cid) then addEvent(onCastSpell1, 1, parameters) end end, 1 + ((k-1) * 300)) end return true end
  16. A linha comentada que falei ali acima, é de permitir colocar as armas nos outros slots (por isso falei que talvez n seja a melhor forma, visualmente é feio kkk) Quanto a poder colocar armas de outras vocações ali, não foi alterado nada disso, salvo engano é permitido por padrão, no entanto, elas não deveriam funcionar se for de outra vocação (remove as alterações que citei, e faz o teste)
  17. Não sei se é a melhor forma, mas depois testo com calma, e vejo se dá pra fazer algo melhorzinho Comenta essa linha: else if((item->getSlotPosition() & SLOTP_RIGHT) || (item->getSlotPosition() & SLOTP_LEFT)) ret = RET_PUTTHISOBJECTINYOURHAND; Ficando assim: /*else if((item->getSlotPosition() & SLOTP_RIGHT) || (item->getSlotPosition() & SLOTP_LEFT)) ret = RET_PUTTHISOBJECTINYOURHAND;*/
  18. Vá até o arquivo thing.h, e busque por: RET_TILEISFULL = 64 Adicione uma vírgula após o 64, e logo abaixo adicione: RET_CANNOTUSESAMEWEAPON = 65 Agora vá até o arquivo player.cpp, e busque por: case RET_TILEISFULL: sendCancel("You cannot add more items on this tile."); break; Pule uma linha, e na seguinte adicione: case RET_CANNOTUSESAMEWEAPON: sendCancel("You cannot use the same weapon."); break; Ainda no arquivo player.cpp, busque por: else if(!leftItem->isWeapon() || !item->isWeapon() || leftType == WEAPON_SHIELD || leftType == WEAPON_AMMO || type == WEAPON_SHIELD || type == WEAPON_AMMO) ret = RET_NOERROR; Logo abaixo, adicione: else if(item->isWeapon() && leftItem->isWeapon()) { if(item->getID() == leftItem->getID()) ret = RET_CANNOTUSESAMEWEAPON; } Busque por: else if(!rightItem->isWeapon() || !item->isWeapon() || rightType == WEAPON_SHIELD || rightType == WEAPON_AMMO || type == WEAPON_SHIELD || type == WEAPON_AMMO) ret = RET_NOERROR; Logo abaixo, adicione: else if(item->isWeapon() && rightItem->isWeapon()) { if(item->getID() == rightItem->getID()) ret = RET_CANNOTUSESAMEWEAPON; }
  19. posta o código, para que possam ajudar
  20. Mas você já verificou se o problema não é o código?
  21. Vi que tinha deixado uma letra minúscula em uma das funções, editei o meu post ali acima.. Mas tem certeza que foi o script que causou esse erro?
  22. Envia o código, pra gente poder ver o problema
  23. É bem simples, fiz um aqui pra ti: local config = { bossPos = {x = 1091, y = 920, z = 7}, -- Position que o monstro será criado bossName = "Boss Monster" -- Nome do monstro } function onStartup() doCreateMonster(config.bossName, config.bossPos) return true end No seu globalevents.xml você adiciona essa tag: <globalevent name="CreateBoss" type = "start" event="script" value="createboss.lua"/>

Informação Importante

Confirmação de Termo