Ir para conteúdo

SoulSarti

Membro
  • Registro em

  • Última visita

Tudo que SoulSarti postou

  1. Olá, meu nome é Jefferson, trabalho até as 18h, entretanto tenho tempo livre à noite quase todos os dias. Tenho interesse na vaga de mapper, espero que apreciem um pouquinho do meu trabalho. Caso tenham algum interesse ou queiram ver outros mapas, procurem-me no inbox. Só deixarei contato wpp por lá também. Obrigado.
  2. Tenta trocar a função onTimer() por onThink() e ve se em globalevents.xml a tag de registro do evento esta com o nome do evento e o arquivo certinhos.
  3. -- CONFIGURAÇÕES porcentagem = 100 -- chance de curar em cada volta da aura, em porcentagem quantheal = 10 -- porcentagem do hp máximo que cada cura irá curar. (No caso, irá curar 10% do hp máximo cada cura) tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) EfeitosSorc = 10 EfeitosPaladin = 34 EfeitosDruid = 37 EfeitosKnight = 24 efeitocura = 49 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo) -- Função que chama a aura function efeitosAura(i,tm,cid) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posaura = { {x=(atual.x)-1, y=(atual.y)-1, z=atual.z}, {x=atual.x, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureHealth(cid)<getCreatureMaxHealth(cid)) then doCreatureAddHealth(cid, getCreatureMaxHealth(cid)/quantheal) if(i<=8 and i>1) then doSendDistanceShoot({x=posaura.x, y=posaura.y, z=posaura.z}, atual, tipoaura) else doSendDistanceShoot({x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then if isSorc(cid) doSendDistanceShoot({x=posaura.x, y=posaura.y, z=posaura.z}, {x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, EfeitosSorc) elseif isDruid(cid) doSendDistanceShoot({x=posaura.x, y=posaura.y, z=posaura.z}, {x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, EfeitosDruid) elseif isPaladin(cid) doSendDistanceShoot({x=posaura.x, y=posaura.y, z=posaura.z}, {x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, EfeitosPaladin) elseif isKnight(cid) doSendDistanceShoot({x=posaura.x, y=posaura.y, z=posaura.z}, {x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, EfeitosKnight) end elseif(i<8) then if isSorc(cid) doSendDistanceShoot({x=posaura.x, y=posaura.y, z=posaura.z}, {x=posaura[i+1].x, y=posaura[i+1].y, z=posaura[i+1].z}, EfeitosSorc) elseif isDruid(cid) doSendDistanceShoot({x=posaura.x, y=posaura.y, z=posaura.z}, {x=posaura[i+1].x, y=posaura[i+1].y, z=posaura[i+1].z}, EfeitosDruid) elseif isPaladin(cid) doSendDistanceShoot({x=posaura.x, y=posaura.y, z=posaura.z}, {x=posaura[i+1].x, y=posaura[i+1].y, z=posaura[i+1].z}, EfeitosPaladin) elseif isKnight(cid) doSendDistanceShoot({x=posaura.x, y=posaura.y, z=posaura.z}, {x=posaura[i+1].x, y=posaura[i+1].y, z=posaura[i+1].z}, EfeitosKnight) end if(i<=8) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) else return efeitosAura(1,0,cid) end else return TRUE end end --Função principal function onLogin(cid) if(getPlayerLevel(cid)>500) then return efeitosAura(1,tempo/8,cid) end return TRUE end
  4. 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 local c = { price = 50000, vocations = {5,6,7,8}, pos = {x=723, y=599, z=7}, -- Pos do templo tmp = 3 -- apos esses segundos ele desloga automaticamente. } local xp = 4200 -- exp para do lvl 8 local hp = 185 local mp = 35 function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local playerid = getPlayerGUID(cid) local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid if(msgcontains(msg, 'valan') or msgcontains(msg, 'semi deus')) then selfSay('Você quer virar valan por '..c.price..' gps? {yes} ', cid) talkState[talkUser] = 1 elseif msgcontains(msg, 'yes') and talkState[talkUser] == 1 then if isInArray(c.vocations, getPlayerVocation(cid)) then if doPlayerRemoveMoney(cid,c.price) == TRUE then doPlayerSetPromotionLevel(cid, 2) local CheckExp = getPlayerExperience(cid) doPlayerAddExperience(cid, -CheckExp) doPlayerAddExp(cid, xp) setCreatureMaxHealth(cid, hp) setCreatureMaxMana(cid, mp) doCreatureAddHealth(cid, getCreatureMaxHealth(cid)) doPlayerAddMana(cid, mp) doPlayerSave(cid, true) addEvent(doRemoveCreature, 3000, cid) doTeleportThing(cid, c.pos) else selfSay('Voce nao tem o dinheiro necessario', cid) end else selfSay('Voce ja foi promovido ou nao tem a vocação necessaria.', cid) end elseif msgcontains(msg, 'no') and talkState[talkUser] == 1 then selfSay('Que assim seja.', cid) talkState[talkUser] = 0 end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Tente agora. Acho que nao vai mais dar erro algum
  5. 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 local c = { price = 50000, vocations = {5,6,7,8}, newlevel = 8, -- novo level. pos = {x=723, y=599, z=7}, -- Pos do templo tmp = 3 -- apos esses segundos ele desloga automaticamente. } local xp = 8400 -- exp para do lvl 8 local hp = 185 local mp = 35 function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local playerid = getPlayerGUID(cid) local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid if(msgcontains(msg, 'valan') or msgcontains(msg, 'semi deus')) then selfSay('Você quer virar valan por '..c.price..' gps? {yes} ', cid) talkState[talkUser] = 1 elseif msgcontains(msg, 'yes') and talkState[talkUser] == 1 then if isInArray(c.vocations, getPlayerVocation(cid)) then if doPlayerRemoveMoney(cid,c.price) == TRUE then db.query("UPDATE `players` SET `level` = "..c.newlevel..",`experience` = "..xp..",`mana` = "..mp..",`manamax` = "..mp..", `health` = "..hp..", `healthmax` = "..hp.." WHERE `players`.`id` = ".. playerid) doPlayerSetPromotionLevel(cid, 2) doTeleportThing(cid, c.pos) doRemoveCreature(cid) else selfSay('You do not have the required vocation', cid) end else selfSay('You have already been promoted or doesnt have the necessary experience', cid) end return true end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Fiz alterações do query da db, forçando as alterações por ela. Veja se da algum erro
  6. Hahahahah sou nada Bem, espero ter ajudado. Precisando, manda inbox, ou marca no post
  7. tem como mostrar o erro na distro?
  8. 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 local x = {1,2} -- Ids das vocaçoes necessarias pra promote. para adicionar mais, basta por uma virgula dps do ultimo numero e adicionar a id da voc local sto = 4642 -- storage praq ele n faça a promotion novamente local lvl = 8 -- lvl ao resetar local lvlmin = 500 --lvl para resetar local health = 185 -- hp ao resetar local mana = 35 -- mana ao resetar local v = getVocationInfo(getPlayerVocation(cid)) if (msgcontains(msg, 'promotion')) then if getPlayerStorageValue(cid, sto) == -1 and getPlayerLevel(cid) >= lvlmin then if isInArray(x, getPlayerVocation(cid)) then local playerid = getPlayerGUID(cid) selfSay('Congratulations! You were promoted', cid) setPlayerStorageValue(cid, sto, 1) setPlayerPromotionLevel(cid, v.id + 4) -- aqui o sistema pega a vocação atual e adicona a proxima (v.id + 4). assim, basta adicionar a voc base na variavel x. setCreatureMaxHealth(cid, health) setCreatureMaxMana(cid, mana) db.executeQuery("UPDATE `players` SET `level`="..lvl..",`experience`= 4200 WHERE `players`.`id`= ".. playerid .."") else selfSay('You do not have the required vocation', cid) end else selfSay('You have already been promoted or doesnt have the necessary experience', cid) end return true end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) pronto só dar aquele rep, se possivel, pra mim e pro sttorm, por ter criado a base do script hahaha
  9. voce pode fazer dessa forma: 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 local x = {1,2} -- Ids das vocaçoes necessarias pra promote. para adicionar mais, basta por uma virgula dps do ultimo numero e adicionar a id da voc local sto = 4642 -- storage praq ele n faça a promotion novamente local lvl = 8 -- lvl ao resetar local health = 185 -- hp ao resetar local mana = 35 -- mana ao resetar local v = getVocationInfo(getPlayerVocation(cid)) if (msgcontains(msg, 'promotion')) then if getPlayerStorageValue(cid, sto) == -1 then if isInArray(x, getPlayerVocation(cid)) then local playerid = getPlayerGUID(cid) selfSay('Congratulations! You were promoted', cid) setPlayerStorageValue(cid, sto, 1) setPlayerPromotionLevel(cid, v.id + 4) -- aqui o sistema pega a vocação atual e adicona a proxima (v.id + 4). assim, basta adicionar a voc base na variavel x. setCreatureMaxHealth(cid, health) setCreatureMaxMana(cid, mana) db.executeQuery("UPDATE `players` SET `level`="..lvl..",`experience`= 4200 WHERE `players`.`id`= ".. playerid .."") else selfSay('You do not have the required vocation', cid) end else selfSay('You have already been promoted', cid) end return true end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) no outro codigo, nao havia a função para promover o jogador e seriam necessarios npcs diferentes pra cada voc. com esse, um unico npc pode promover qlqr personagem desde que a vocação dele seja guardada na variavel x.
  10. SoulSarti respondeu ao post em um tópico de Thalles Novais em Suporte Tibia OTServer
    segue esse tutorial do matheus. Pra por na otserverlist, vc tem que se cadastrar la. mas para por o ip la, vc precisa criar seu ip fixo, no site no-ip, por exemplo. segue o tutorial do matk e tenta de novo na otserverlist que vai dar bom.
  11. @Kyllini segue o script do npc. Espero que esteja funcional! Abraços! 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 local config = { destino = {x=1553, y=1825, z=4}, -- para onde o player vai ser teleportado storage = 1111, -- storage da quest. lembre-se de por o mesmo storage da quest que voce fez permitir = {1,2,3,4}, --id das vocações que podem ir money = 100000000 -- dinheiro (aqui está custando 100kk) } playerVocInfo = getVocationInfo(getPlayerVocation(cid)) if msgcontains(msg, 'quest') or msgcontains(msg, 'promotion') then if(getPlayerStorageValue(cid, config.storage) ~= 1) and (isInArray(config.permitir, playerVocInfo.id)) then npcHandler:say("Eu posso te levar para a Quest Promotion. Eu cobrarei 100kk para a sua morte chegar! Diga {sim} caso queira desafiar seu destino, ou {nao}, se voce for um covarde!", cid) talkState[talkUser] = 1 elseif getPlayerStorageValue(cid, config.storage) >= 1 then -- caso ja tenha a quest feita npcHandler:say("Desculpe voce ja fez a Quest Promotion. Nao posso permitir que voce pise naquelas terras novamente.", cid) return true elseif not isInArray(config.permitir, playerVocInfo.id) then -- caso nao tenha a vocação permitida npcHandler:say("Desculpe, nao posso permitir que players com a sua voca\çao pisem nessas terras.", cid) return true end elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 1 then if doPlayerRemoveMoney(cid, config.money) then npcHandler:say("HAHAHA Ja vou preparando o seu caixao, entao!", cid) doTeleportThing(cid, config.destino) talkState[talkUser] = 0 else npcHandler:say("HAHAHAH! Quer enfrentar desafios mas nao tem nem um centavo no bolso? Saia daqui, charlatao!", cid) talkState[talkUser] = 0 end elseif(msgcontains(msg, 'no') or msgcontains(msg, 'nao')) and talkState[talkUser] > 0 then npcHandler:say("La nao \é lugar para covardes, mesmo! HAHAH", cid) talkState[talkUser] = 0 end return TRUE end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
  12. Hehe marca la como melhor resposta e da aquele repzin maroto. Jaja vou trabalhar no script do npc. é rapido, mas eu to trabalhando nos meus projetos ao msm tempo, entao pode demorar um tiquin. mas sai ainda hoje hahaha
  13. UAHEUAHEUAHEUHA foi mal, eu corrigi o teleport mas eu usei uma versao antiga do script, onde eu n tinha modificado os items. onde tem o for i = 1, #config.items do doPlayerAddItem(cid, config.items[1], config.items[2]) end substitua por for i = 1, #config.items do doPlayerAddItem(cid, config.items[i][1], config.items[i][2]) end
  14. tenta assim (sono ta me atrapalhando.. aushausha) local config = { items = {{12714,1}}, -- aqui vc configura quais items vc quer dar de recompensa. caso for mais de 1, adicione uma virgula e ponha a id e qtd dentro de colchetes --{{2160,3},{2134,1}}, voc = {1}, -- aqui vc poe os ids das vocações que podem abrir o bau. caso sejam mais de 1, basta adicionar uma virgula dps do ultimo numero e por o outro. voc = {5,6}, storage = 5000, -- altere para o storage que você desejar gmessage = true, -- vai mandar mensagem global quando o jogar finalizar a quest? true = sim | false = nao unique = 1000, --uniqueid do bau. caso nao tenha, deixe 0, caso tenha, ponha o valor. teleport = {true, {x = 157, y = 51, z = 7}}, --vai teletransportar o jogar ao finalizar a quest? se sim, mude para true e dps da virgula mude o {} para a posição desejada, ex: --teleport = {true, {x = 2438, y = 2400, z = 9}} nome = "Hellraiser" -- aqui vc poe o nome da sua quest, se tiver. Na mensagem global, aparecerá da seguinte maneira: -- "O player (nomedochar) completou a quest Hellraiser!." Deixe em branco o nome para nao mostrar qual foi a quest feita (isso ainda vai gerar uma mensagem global!) } function onUse(cid, item, frompos, item2, topos) if item.uid == config.unique then if getPlayerStorageValue(cid, config.storage) ~= 1 and isInArray(config.voc, getPlayerVocation(cid)) then if config.gmessage and config.nome ~= "" then doBroadcastMessage("O player "..getCreatureName(cid).." completou a quest ".. config.nome .. "!",MESSAGE_STATUS_WARNING) elseif config.gmessage and config.nome == "" then doBroadcastMessage("O player "..getCreatureName(cid).." completou uma quest!",MESSAGE_STATUS_WARNING) end setPlayerStorageValue(cid, config.storage, 1) for i = 1, #config.items do doPlayerAddItem(cid, config.items[1], config.items[2]) end if config.teleport[1] then tp = config.teleport[2] doTeleportThing(cid, tp) end elseif getPlayerStorageValue(cid, config.storage) == 1 then -- caso ja tenha feito a quest doPlayerSendCancel(cid, "Você já fez essa quest!") elseif not isInArray(config.voc, getPlayerVocation(cid)) then -- caso nao seja da vocação apropriada doPlayerSendCancel(cid, "Você não pode receber a recompensa porque não tem a vocação apropriada!") end end return true end
  15. Me manda o link por aqui mesmo, mas antes me diz se o codigo que eu vou te passar esta funcionando: ele é um codigo pra qualquer quest que voce queira por no seu servidor, desde que o bau tenha uniqueid e a quest exija alguma vocação pra ser recolhida. espero que esteja 100% funcional! local config = { items = {{id,qtd}}, -- aqui vc configura quais items vc quer dar de recompensa. caso for mais de 1, adicione uma virgula e ponha a id e qtd dentro de colchetes --{{2160,3},{2134,1}}, voc = {5}, -- aqui vc poe os ids das vocações que podem abrir o bau. caso sejam mais de 1, basta adicionar uma virgula dps do ultimo numero e por o outro. voc = {5,6}, storage = 5000, -- altere para o storage que você desejar gmessage = true, -- vai mandar mensagem global quando o jogar finalizar a quest? true = sim | false = nao unique = 0, --uniqueid do bau. caso nao tenha, deixe 0, caso tenha, ponha o valor. teleport = {check = false, {}}, --vai teletransportar o jogar ao finalizar a quest? se sim, mude para true e dps da virgula mude o {} para a posição desejada, ex: --teleport = {true, {x = 2438, y = 2400, z = 9}} nome = "Hellraiser" -- aqui vc poe o nome da sua quest, se tiver. Na mensagem global, aparecerá da seguinte maneira: -- "O player (nomedochar) completou a quest Hellraiser!." Deixe em branco o nome para nao mostrar qual foi a quest feita (isso ainda vai gerar uma mensagem global!) } function onUse(cid, item, frompos, item2, topos) if item.uid == config.unique then if getPlayerStorageValue(cid, config.storage) ~= 1 and isInArray(config.voc, getPlayerVocation(cid)) then if config.gmessage and config.nome ~= "" then doBroadcastMessage("O player "..getCreatureName(cid).." completou a quest ".. config.nome .. "!",MESSAGE_STATUS_WARNING) elseif config.gmessage and config.nome == "" then doBroadcastMessage("O player "..getCreatureName(cid).." completou uma quest!",MESSAGE_STATUS_WARNING) end setPlayerStorageValue(cid, config.storage, 1) for i = 1, #config.items do doPlayerAddItem(cid, config.items[i][1], config.items[i][2]) end if config.teleport[1] then doTeleportThing(cid, config.teleport[2]) end elseif getPlayerStorageValue(cid, config.storage) == 1 then -- caso ja tenha feito a quest doPlayerSendCancel(cid, "Você já fez essa quest!") elseif not isInArray(config.voc, getPlayerVocation(cid)) then -- caso nao seja da vocação apropriada doPlayerSendCancel(cid, "Você não pode receber a recompensa porque não tem a vocação apropriada!") end end return true end lembrando que voce pode usar esse codigo e apenas alterar as variaveis para qualquer quest que se enquadre no que eu expliquei acima.
  16. Deixa eu entender, então existem 4 baus, cada um com um uniqueid e eles devem entregar o item de acordo com a vocação do jogador. É isso? pois é possivel também manter um unico bau e fazê-lo entregar um item diferente para cada vocação que for "abri-lo". o que voce precisa? e sobre o npc, se vc ja criou o topico pra ele, me manda o link do topico. caso n tenha criado, crie e mande o link, pra gnt n misturar os casos no msm topico. tb pode ajudar outros jogadores com a msm intençao q vc.
  17. vc n trocou o codigo, ou pelo menos n citou o correto: a alteração esta na funçao removeItem() -- item = id do item que vai ser criado na invasão -- time = tempo em segundos para o item em questao ser apagado -- para adicionar mais posições, basta copiar a posição e adicionar depois da ultima. -- lembrando de acrescentar a vírgula na penúltima e deixar a ultima sem, conforme está no modelo. local config = {monster = "fire soldier", item = 1487, time = 60, pos = { {x= 1012, y= 1034, z= 7}, {x= 1016, y= 1030, z= 7}, {x= 1016, y= 1038, z= 7}, {x= 1014, y= 1044, z= 7}, {x= 1012, y= 1047, z= 7}, {x= 1024, y= 1052, z= 7}, {x= 1028, y= 1056, z= 7}, {x= 1022, y= 1061, z= 7}, {x= 1028, y= 1065, z= 7}, {x= 1035, y= 1065, z= 7}, {x= 1040, y= 1058, z= 7}, {x= 1046, y= 1055, z= 7}, {x= 1052, y= 1056, z= 7}, {x= 1049, y= 1051, z= 7}, {x= 1058, y= 1059, z= 7}, {x= 1059, y= 1049, z= 7}, {x= 1059, y= 1044, z= 7}, {x= 1064, y= 1036, z= 7}, {x= 1056, y= 1031, z= 7}, {x= 1072, y= 1038, z= 7}, {x= 1079, y= 1039, z= 7}, {x= 1087, y= 1031, z= 7}, {x= 1092, y= 1038, z= 7}, {x= 1082, y= 1025, z= 7}, {x= 1086, y= 1014, z= 7}, {x= 1086, y= 1004, z= 7}, {x= 1097, y= 1002, z= 7}, {x= 1103, y= 998, z= 7}, {x= 1108, y= 994, z= 7}, {x= 1081, y= 996, z= 7}, {x= 1067, y= 993, z= 7}, {x= 1057, y= 995, z= 7}, {x= 1045, y= 996, z= 7}, {x= 1036, y= 1005, z= 7}, {x= 1034, y= 998, z= 7}, {x= 1021, y= 996, z= 7}, {x= 1015, y= 999, z= 7}, {x= 1008, y= 993, z= 7}, {x= 1008, y= 1009, z= 7}, {x= 1004, y= 1021, z= 7}, {x= 1005, y= 1045, z= 7}, {x= 1065, y= 1024, z= 7}, {x= 1053, y= 1015, z= 7}, {x= 1044, y= 1006, z= 7}, {x= 1048, y= 1024, z= 7}, {x= 1038, y= 1030, z= 7}, {x= 1044, y= 1043, z= 7} }} function removeItem() for k = 1, #config.pos do config.pos[k].stackpos = STACKPOS_TOP_FIELD local t = getThingFromPos(config.pos[k]) if t then doRemoveItem(t.uid, 1) end end end function onSay(cid, words, param) -- Monster for i = 1, #config.pos do doCreateItem(config.item, 1, config.pos[i]) doCreateMonster(config.monster, config.pos[i]) end addEvent(removeItem, config.time * 1000) return true end ponha esse codigo e me diga se o erro persiste.
  18. pronto, agora vai dar certo. Eu esqueci que fire field nao é considerado item e sim field. -- item = id do item que vai ser criado na invasão -- time = tempo em segundos para o item em questao ser apagado -- para adicionar mais posições, basta copiar a posição e adicionar depois da ultima. -- lembrando de acrescentar a vírgula na penúltima e deixar a ultima sem, conforme está no modelo. local config = {monster = "fire soldier", item = 1487, time = 60, pos = { {x= 1012, y= 1034, z= 7}, {x= 1016, y= 1030, z= 7}, {x= 1016, y= 1038, z= 7}, {x= 1014, y= 1044, z= 7}, {x= 1012, y= 1047, z= 7}, {x= 1024, y= 1052, z= 7}, {x= 1028, y= 1056, z= 7}, {x= 1022, y= 1061, z= 7}, {x= 1028, y= 1065, z= 7}, {x= 1035, y= 1065, z= 7}, {x= 1040, y= 1058, z= 7}, {x= 1046, y= 1055, z= 7}, {x= 1052, y= 1056, z= 7}, {x= 1049, y= 1051, z= 7}, {x= 1058, y= 1059, z= 7}, {x= 1059, y= 1049, z= 7}, {x= 1059, y= 1044, z= 7}, {x= 1064, y= 1036, z= 7}, {x= 1056, y= 1031, z= 7}, {x= 1072, y= 1038, z= 7}, {x= 1079, y= 1039, z= 7}, {x= 1087, y= 1031, z= 7}, {x= 1092, y= 1038, z= 7}, {x= 1082, y= 1025, z= 7}, {x= 1086, y= 1014, z= 7}, {x= 1086, y= 1004, z= 7}, {x= 1097, y= 1002, z= 7}, {x= 1103, y= 998, z= 7}, {x= 1108, y= 994, z= 7}, {x= 1081, y= 996, z= 7}, {x= 1067, y= 993, z= 7}, {x= 1057, y= 995, z= 7}, {x= 1045, y= 996, z= 7}, {x= 1036, y= 1005, z= 7}, {x= 1034, y= 998, z= 7}, {x= 1021, y= 996, z= 7}, {x= 1015, y= 999, z= 7}, {x= 1008, y= 993, z= 7}, {x= 1008, y= 1009, z= 7}, {x= 1004, y= 1021, z= 7}, {x= 1005, y= 1045, z= 7}, {x= 1065, y= 1024, z= 7}, {x= 1053, y= 1015, z= 7}, {x= 1044, y= 1006, z= 7}, {x= 1048, y= 1024, z= 7}, {x= 1038, y= 1030, z= 7}, {x= 1044, y= 1043, z= 7} }} function removeItem() for k = 1, #config.pos do config.pos[k].stackpos = STACKPOS_TOP_FIELD local t = getThingFromPos(config.pos[k]) if t then doRemoveItem(t.uid, 1) end end end function onSay(cid, words, param) -- Monster for i = 1, #config.pos do doCreateItem(config.item, 1, config.pos[i]) doCreateMonster(config.monster, config.pos[i]) end addEvent(removeItem, config.time * 1000) return true end
  19. Magina! E não, não é dificil! Você quer dar um premio diferente pra cada vocação, ou só deixar uma determinada vocação poder receber a recompensa?
  20. -- item = id do item que vai ser criado na invasão -- time = tempo em segundos para o item em questao ser apagado -- para adicionar mais posições, basta copiar a posição e adicionar depois da ultima. -- lembrando de acrescentar a vírgula na penúltima e deixar a ultima sem, conforme está no modelo. local config = {monster = "fire soldier", item = 1487, time = 60, pos = { {x= 1012, y= 1034, z= 7}, {x= 1016, y= 1030, z= 7}, {x= 1016, y= 1038, z= 7}, {x= 1014, y= 1044, z= 7}, {x= 1012, y= 1047, z= 7}, {x= 1024, y= 1052, z= 7}, {x= 1028, y= 1056, z= 7}, {x= 1022, y= 1061, z= 7}, {x= 1028, y= 1065, z= 7}, {x= 1035, y= 1065, z= 7}, {x= 1040, y= 1058, z= 7}, {x= 1046, y= 1055, z= 7}, {x= 1052, y= 1056, z= 7}, {x= 1049, y= 1051, z= 7}, {x= 1058, y= 1059, z= 7}, {x= 1059, y= 1049, z= 7}, {x= 1059, y= 1044, z= 7}, {x= 1064, y= 1036, z= 7}, {x= 1056, y= 1031, z= 7}, {x= 1072, y= 1038, z= 7}, {x= 1079, y= 1039, z= 7}, {x= 1087, y= 1031, z= 7}, {x= 1092, y= 1038, z= 7}, {x= 1082, y= 1025, z= 7}, {x= 1086, y= 1014, z= 7}, {x= 1086, y= 1004, z= 7}, {x= 1097, y= 1002, z= 7}, {x= 1103, y= 998, z= 7}, {x= 1108, y= 994, z= 7}, {x= 1081, y= 996, z= 7}, {x= 1067, y= 993, z= 7}, {x= 1057, y= 995, z= 7}, {x= 1045, y= 996, z= 7}, {x= 1036, y= 1005, z= 7}, {x= 1034, y= 998, z= 7}, {x= 1021, y= 996, z= 7}, {x= 1015, y= 999, z= 7}, {x= 1008, y= 993, z= 7}, {x= 1008, y= 1009, z= 7}, {x= 1004, y= 1021, z= 7}, {x= 1005, y= 1045, z= 7}, {x= 1065, y= 1024, z= 7}, {x= 1053, y= 1015, z= 7}, {x= 1044, y= 1006, z= 7}, {x= 1048, y= 1024, z= 7}, {x= 1038, y= 1030, z= 7}, {x= 1044, y= 1043, z= 7} }} function removeItem() for k = 1, #config.pos do local t = getTileItemById(config.pos[k], config.id) if t then doRemoveItem(t.uid, 1) end end end function onSay(cid, words, param) -- Monster for i = 1, #config.pos do doCreateItem(config.item, 1, config.pos[i]) doCreateMonster(config.monster, config.pos[i]) end addEvent(removeItem, config.time * 1000) return true end
  21. function onUse(cid, item, frompos, item2, topos) local uniqueId2 = 50000 -- unique id do baú 2. local storage1 = 2361 -- storage , se deixar a mesma do bau 1, o player poderá pegar o item de 1 baú. local item1 = 2361 -- item que ganha no baú 2 local quant1 = 1 -- quantidade de item. local pos1 = {x= 157, y= 51, z= 7} -- para onde o player será teleportado. if item.uid == uniqueId2 then if getPlayerStorageValue(cid, storage1) <= 0 then doBroadcastMessage("O player "..getCreatureName(cid).." completou a quest X!",MESSAGE_STATUS_WARNING) doPlayerAddItem(cid, item1, quant1) doTeleportThing(cid, pos1) setPlayerStorageValue(cid, storage1, 1) else doPlayerSendCancel(cid, "Você já fez essa quest!") end end return true end entao, o erro era esse doBroadcastMessage("O player "..getCreatureName(cid).." completou a quest X!",MESSAGE_STATUS_WARNING) depois do else. isso fazia com que a mensagem global fosse enviada no caso errado. Enfim, teste esse código e tente entender pq essa função dps do else estava errada.
  22. tente isso tomei a liberdade de deixar o codigo mais simples e menor, poupando um pouco de texto e memória. -- item = id do item que vai ser criado na invasão -- time = tempo em segundos para o item em questao ser apagado -- para adicionar mais posições, basta copiar a posição e adicionar depois da ultima. -- lembrando de acrescentar a vírgula na penúltima e deixar a ultima sem, conforme está no modelo. local config = {monster = "fire soldier", item = 1487, time = 60, pos = { {x= 1012, y= 1034, z= 7}, {x= 1016, y= 1030, z= 7}, {x= 1016, y= 1038, z= 7}, {x= 1014, y= 1044, z= 7}, {x= 1012, y= 1047, z= 7}, {x= 1024, y= 1052, z= 7}, {x= 1028, y= 1056, z= 7}, {x= 1022, y= 1061, z= 7}, {x= 1028, y= 1065, z= 7}, {x= 1035, y= 1065, z= 7}, {x= 1040, y= 1058, z= 7}, {x= 1046, y= 1055, z= 7}, {x= 1052, y= 1056, z= 7}, {x= 1049, y= 1051, z= 7}, {x= 1058, y= 1059, z= 7}, {x= 1059, y= 1049, z= 7}, {x= 1059, y= 1044, z= 7}, {x= 1064, y= 1036, z= 7}, {x= 1056, y= 1031, z= 7}, {x= 1072, y= 1038, z= 7}, {x= 1079, y= 1039, z= 7}, {x= 1087, y= 1031, z= 7}, {x= 1092, y= 1038, z= 7}, {x= 1082, y= 1025, z= 7}, {x= 1086, y= 1014, z= 7}, {x= 1086, y= 1004, z= 7}, {x= 1097, y= 1002, z= 7}, {x= 1103, y= 998, z= 7}, {x= 1108, y= 994, z= 7}, {x= 1081, y= 996, z= 7}, {x= 1067, y= 993, z= 7}, {x= 1057, y= 995, z= 7}, {x= 1045, y= 996, z= 7}, {x= 1036, y= 1005, z= 7}, {x= 1034, y= 998, z= 7}, {x= 1021, y= 996, z= 7}, {x= 1015, y= 999, z= 7}, {x= 1008, y= 993, z= 7}, {x= 1008, y= 1009, z= 7}, {x= 1004, y= 1021, z= 7}, {x= 1005, y= 1045, z= 7}, {x= 1065, y= 1024, z= 7}, {x= 1053, y= 1015, z= 7}, {x= 1044, y= 1006, z= 7}, {x= 1048, y= 1024, z= 7}, {x= 1038, y= 1030, z= 7}, {x= 1044, y= 1043, z= 7} }} function removeItem(pos,id) for k = 1, #pos do local t = getTileItemById(pos[k], id) if t then doRemoveItem(t.uid, 1) end end end function onSay(cid, words, param) -- Monster for i = 1, #config.pos do doCreateItem(config.item, 1, config.pos[i]) doCreateMonster(config.monster, config.pos[i]) end addEvent(removeItem, config.time * 1000, config.pos, config.id) return true end
  23. o código que eu adaptei é o seguinte: function onStatsChange(cid, attacker, type, combat, value) local m = mob[getCreatureName(cid)] if m and isPlayer(attacker) and (not (attacker == cid)) and (type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS) then dano = math.random(getPlayerStorageValue(attacker,m.strc)*10, (getPlayerStorageValue(attacker,m.strc)+3)*10) doTargetCombatHealth(attacker, cid, combat, -dano, -dano, 255) return false end return true end Estou tendo o seguinte problema com o codigo que voces me passaram: primeiro que quando eu uso o return false, ele nao gera dano no monstro. E se eu mudo para true, ele me da a seguinte mensagem no executável e ainda mata o monstro, pq a função é chamada novamente repetidas vzs: [Error - CreatureEvent::executeStatsChange] Call stack overflow. O problema é o codigo, a source, eu, Jesus ou o que? AUHSUAHSUAHS @edit eu resolvi o problema gastando um monte de memoria, da seguinte maneira: function setGlobal(cid) db.executeQuery("DELETE FROM `global_storage` WHERE `key` = " .. cid) end function onStatsChange(cid, attacker, type, combat, value) local m = mob[getCreatureName(cid)] if m and isPlayer(attacker) and (not (attacker == cid)) and (type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS) and (getPlayerStorageValue(attacker,m.strc)) >= 1 then if getGlobalStorageValue(cid) ~= 1 then setGlobalStorageValue(cid, 1) dano = math.random(getPlayerStorageValue(attacker,m.strc)*10, (getPlayerStorageValue(attacker,m.strc)+3)*10) doTargetCombatHealth(attacker, cid, combat, -dano, -dano, 255) doPlayerSendTextMessage(attacker, MESSAGE_STATUS_CONSOLE_BLUE, "dano = ".. dano ) addEvent(setGlobal, 1, cid) return true end end return true end fazendo esse controle com o globalstorage, é possivel evitar o bug. Mas isso consome muita memoria e processamento, acredito eu... e.e'

Informação Importante

Confirmação de Termo