Ir para conteúdo
  • 0

bau de quest hora funfa hora não


Adriez

Pergunta

fala galera é o seguinte tem um bau na minha quest tem gente q consegue pegar o item outros não, como resolver ???? o script é esse ou qualquer coisa como faço um novo script pra esse bau

 

local specialQuests = {
    [2001] = 30015 --Annihilator
}

local questsExperience = {
    [30015] = 10000
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
    if(getPlayerCustomFlagValue(cid, PlayerCustomFlag_GamemasterPrivileges)) then
        doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF, cid)
        return true
    end

    local storage = specialQuests[item.actionid]
    if(not storage) then
        storage = item.uid
        if(storage > 65535) then
            return false
        end
    end

    if(getPlayerStorageValue(cid, storage) > 0) then
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is empty.")
        return true
    end

    local items = {}
    local reward = 0

    local size = isContainer(item.uid) and getContainerSize(item.uid) or 0
    if(size == 0) then
        reward = doCopyItem(item, false)
    else
        for i = 0, size do
            local tmp = getContainerItem(item.uid, i)
            if(tmp.itemid > 0) then
                table.insert(items, tmp)
            end
        end
    end

    size = table.maxn(items)
    if(size == 1) then
        reward = doCopyItem(items[1], true)
    end

    local result = ""
    if(reward ~= 0) then
        local ret = getItemDescriptions(reward.uid)
        if(reward.type > 0 and isItemRune(reward.itemid)) then
            result = reward.type .. " charges " .. ret.name
        elseif(reward.type > 0 and isItemStackable(reward.itemid)) then
            result = reward.type .. " " .. ret.plural
        else
            result = ret.article .. " " .. ret.name
        end
    else
        if(size > 20) then
            reward = doCopyItem(item, false)
        elseif(size > 8): then
            reward = getThing(doCreateItemEx(1988, 1))
        else
            reward = getThing(doCreateItemEx(1987, 1))
        end

        for i = 1, size do
            local tmp = doCopyItem(items, true)
            if(doAddContainerItemEx(reward.uid, tmp.uid) ~= RETURNVALUE_NOERROR) then
                print("[Warning] QuestSystem:", "Could not add quest reward")
            else
                local ret = ", "
                if(i == 2) then
                    ret = " and "
                elseif(i == 1) then
                    ret = ""
                end

                result = result .. ret
                ret = getItemDescriptions(tmp.uid)
                if(tmp.type > 0 and isItemRune(tmp.itemid)) then
                    result = result .. tmp.type .. " charges " .. ret.name
                elseif(tmp.type > 0 and isItemStackable(tmp.itemid)) then
                    result = result .. tmp.type .. " " .. ret.plural
                else
                    result = result .. ret.article .. " " .. ret.name
                end
            end
        end
    end

    if(doPlayerAddItemEx(cid, reward.uid, false) ~= RETURNVALUE_NOERROR) then
        result = "You have found a reward weighing " .. getItemWeight(reward.uid) .. " oz. It is too heavy or you have not enough space."
    else
        result = "You have found " .. result .. "."
        setPlayerStorageValue(cid, storage, 1)
        if(questsExperience[storage] ~= nil) then
            doPlayerAddExp(cid, questsExperience[storage])
            doSendAnimatedText(getCreaturePosition(cid), questsExperience[storage], TEXTCOLOR_WHITE)
        end
    end

    doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, result)
    return true
end

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

testar assim

Spoiler

local config = {
item_id = 2160, quantidade = 100, --- id do item e quantidade vai ganhar
level_quantidade = 100, --- quantidade vai ganhar de level
}
function onUse(cid, item, fromPosition, itemEx, toPosition)
doPlayerAddItem(cid, config.item_id, config.quantidade)
doPlayerAddExp(cid, config.level_quantidade)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Vc Ganhou 100 gold.")
return true
end

 

Editado por luizmachado1
Link para o comentário
Compartilhar em outros sites

  • 0

mano o bau da um item e não é pra dar level não.....

 

3 horas atrás, luizmachado1 disse:

testar assim

  Ocultar conteúdo

local config = {
item_id = 2160, quantidade = 100, --- id do item e quantidade vai ganhar
level_quantidade = 100, --- quantidade vai ganhar de level
}
function onUse(cid, item, fromPosition, itemEx, toPosition)
doPlayerAddItem(cid, config.item_id, config.quantidade)
doPlayerAddExp(cid, config.level_quantidade)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Vc Ganhou 100 gold.")
return true
end

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

Testar assim

 

Spoiler

local config = {
item_id = 2160, quantidade = 100, --- id do item e quantidade vai ganhar
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
doPlayerAddItem(cid, config.item_id, config.quantidade)

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Vc Ganhou 100 gold.")

return true

end

 

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

Tenta assim
Se souber adcionar bau de quest no mapa seja feliz se não manda um PM

 

 

function onUse(cid, item, frompos, item2, topos)

if getPlayerStorageValue(cid, 132800) < 1 then
doPlayerSendTextMessage(cid,22,"Voce acabou de completar a Quest!")
local bag = doPlayerAddItem(cid, 1999, 1)
doAddContainerItem(bag, 2160, 1) --- id do item e quantidade vai ganhar
setPlayerStorageValue(cid, 132800, 1)
else
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce ja pegou os Items da Quest.")
end

return TRUE
end

 

 

 

Editado por Str00per
Link para o comentário
Compartilhar em outros sites

  • 0

Eu ja tive esse problema de quests que pessoas faziam, outras não e as vezes tinha gente que fazia mais de uma vez.

Culpado?

Setplayerstoragevalue.

 

Crie uma nova forma de marca as quests do meu ot e resolvido.

Mas à um problema, todas as quests precisam ser marcadas nos players para eles não poderem fazer as mesmas quests com essa nova função. 

 

Posso disponibilizar esse novo script de quests pra ti, caso queira.

Link para o comentário
Compartilhar em outros sites

  • 0

manda aí

 

 

Em 14/04/2016 at 12:58, Poccnn disse:

Eu ja tive esse problema de quests que pessoas faziam, outras não e as vezes tinha gente que fazia mais de uma vez.

Culpado?

Setplayerstoragevalue.

 

Crie uma nova forma de marca as quests do meu ot e resolvido.

Mas à um problema, todas as quests precisam ser marcadas nos players para eles não poderem fazer as mesmas quests com essa nova função. 

 

Posso disponibilizar esse novo script de quests pra ti, caso queira.

 

Link para o comentário
Compartilhar em outros sites

  • 0
Citar

--[[ 

   autor = Marcryzius 

   data = segunda-feira, 28 de Dezembro de 2015 

   

   >> Alguns parametros de uso. 

   item.uid = itemid << id do item que será ganho - caso o item esteja 'inside' no bau, não se faz nescessario usar o id do item na uid - ao habilitar a uid os items que estiverem dentro do bau, não serão usados como items obtiveis da quest, ou seja, não ganharão os items que tem dentro do bau. 

   actionid = validação << o baú só será usado na forma de quest se tiver alguma aid. pode usar marcação de vocação como na instrução abaixo ou setar aid maior ou igual a 2000 para validar o baú como uma quest. 

   actionid = quantidade << desde que ela seja maior que 100 e menor que 200 (150 = 50 items, 200 = 100 items) 

   actionid = vocação << o primeiro numero diz que é uma quest de vocação; o segundo habilita que, as vocações promovidas também podem fazer a quest; os dois ultimos numero é da vocação em questão. 

      exemplo 1 = 1201 << sorceres e master sorceres 

      exemplo 2 = 1102 << apenas druids e não elder druids 

      exemplo 3 = 1000 << apenas knights e paladins. 

      exemplo 4 = 1100 << apenas sorcerers e druids. 

   inside = varios items << todos os items que forem colocados dentro do bau será usado como referencia do premio da quest; pode-se tambem usar aid para determinar a vocação nescessaria dessa quest. 

   -- ### -- 

   Com o uso da nova funcao, não está mais sendo "setado" no player a store da "quest" usando setPlayerStorageValue(). 

]] 

function getSaveQuestsInfor(uid,cid) --[[( Marcryzius )]]-- 

local str = false 

   if(tonumber(uid))then 

   str = db.getResult("SELECT * FROM `server_quests` WHERE `uid` = '"..uid.."' AND `name_player` = ".. db.escapeString(getCreatureName(cid))..";") 

   elseif(type(uid) == 'string')then 

   str = db.getResult("SELECT * FROM `server_quests` WHERE `name_player` = " ..db.escapeString(getCreatureName(cid)).. " AND `name` = '"..uid.."';") 

   else 

      return false,print('getSaveQuestInfor: tipo de uid invalido > '..tostring(type(uid))) 

   end 

   return (str:getID() == -1) and true or false 

end 

function saveQuestsInfor(uid,name,cid,other) 

--[[( Marcryzius )]]-- 

--[[ 

   uid = Item.uid usado no bau(entre outros) para receber o item da Quest 

   name = nome do item dado ao player ou nome da quest 

   cid = identificacao do player 

   other = informacoes adicionais para serem salvas junto a quest 

]]-- 

if not(db.executeQuery("SELECT * FROM `server_quests`;"))then -- caso a table não exista, será criada 

db.executeQuery("CREATE TABLE `server_quests` (`uid` INTEGER, `name` VARCHAR(255), `name_player` VARCHAR(255), `pos` VARCHAR(255), `other` TEXT);") 

end 

local other,pos2 = other or '','' 

local pos = type(uid) == 'number' and getThingPos(uid) or getCreaturePosition(cid) 

   pos2 = 'x='..pos.x..', y='..pos.y..', z='..pos.z 

if not(type(name) == 'string') or not(tonumber(cid))then return false, print('Funcao requer parametros: name,cid') end 

   db.executeQuery("INSERT INTO `server_quests` (`uid`, `name`, `name_player`,`pos`,`other`) VALUES ("..(uid or tonumber(pos.x..''..pos.y..''..pos.z))..",'"..name.."', '"..getCreatureName(cid).."','"..pos2.."','"..other.."');") 

   return true 

end 

function onUse(cid,item,pos) 

   if(item.actionid >= 1000 and item.actionid < 2000)then 

      if(item.actionid-1000 > 200 and item.actionid-1000 < 300 and not(getPlayerVocation(cid) % 4 == item.actionid-1200 or isKnight(cid)))then 

         return true,doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is locked.") -- vocações promovidas tambem recebem. 

      elseif(item.actionid-1000 > 100 and item.actionid-1000 < 200 and not(getPlayerVocation(cid) == item.actionid-1100))then -- vocação especifica. 

         return true,doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is locked.") 

      elseif(item.actionid == 1000 and not(isPaladin(cid) or isKnight(cid)))then -- somente kina ou pala recebem o item 

         return true,doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is locked.") 

      elseif(item.actionid-1000 == 100 and not(isSorcerer(cid) or isDruid(cid)))then -- somente mages recebem o item 

         return true,doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is locked.") 

      end 

   elseif(item.uid > 12000 and item.actionid == 0)then -- como se fosse um baú qualquer.

      return false -- abre o baú para pegarem os items 'inside' sem marcar nada, como se fosse abrir um baú qualquer sem ser de quest. 

   end 

local quests_quant = (item.actionid-100 < 1) and 1 or item.actionid-100 --Defini a quantidade de items. 

local playerCap,cap = getPlayerFreeCap(cid),getItemWeightById(item.uid,quests_quant) or 0 

   if(item.uid > 1000 and cap > 0)then 

      if(item.actionid >= 0 and item.actionid <= 200)then --Verifica a quantidade de objetos a ser entregue. 

         if(getSaveQuestsInfor(item.uid,cid))then --Função não usa marcação (getStore...) 

            if(playerCap >= cap)then 

            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You have found a '..((quests_quant == 1) and '' or quests_quant)..' '..getItemNameById(item.uid)..'.') 

               saveQuestsInfor(item.uid,getItemNameById(item.uid),cid,"Quest system by uid.") 

               doPlayerAddItemEx(cid,doCreateItemEx(item.uid, quests_quant),true) 

            else 

               return false,doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You have found a '..(quests_quant == 1 and '' or quests_quant)..' '..getItemNameById(item.uid)..' weighing '..math.floor(cap)..' oz it\'s too heavy.') 

            end 

         else--caso o player já tenha feito a quest, abrir-se-à o baú de forma convencional, podendo obter os items que estejam dentro dele. 

            return false 

         end 

      end 

      return true 

   end 

   local size,rewards,items,peso   = isContainer(item.uid) and getContainerSize(item.uid) or 0,'You have found a ',{},0 

   if(size > 0)then --Função não usa marcação (setStore...)) 

      for i = 0, size do 

         local tmp = getContainerItem(item.uid, i) 

         if(tmp.itemid > 0) then 

            --Foi feito dessa forma para nao haver conflito com items do mesmo tipo. 

            table.insert(items,{[tmp.itemid] = tmp.type}) 

            rewards = rewards..' '..(tmp.type > 0 and tmp.type..' charges of ' or 1)..' '..getItemNameById(tmp.itemid)..''..(i+1<size and ',' or '.') 

            peso = peso + getItemWeight(tmp.uid) 

         end 

      end 

      if(getSaveQuestsInfor(tonumber(pos.x..''..pos.y..''..pos.z),cid))then 

         if(playerCap >= peso)then 

            saveQuestsInfor(tonumber((pos.x)..''..(pos.y)..''..(pos.z)),getItemNameById(table.maxn(items)),cid,"Quest system by Inside.") 

            for _,tab in pairs(items) do 

               for k,v in pairs(tab) do 

                  doPlayerAddItemEx(cid,doCreateItemEx(k, v),true) 

               end 

            end 

            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, rewards) 

         else 

            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, rewards..' weighing '..math.floor(peso)..' oz it\'s too heavy.' ) 

         end 

      else 

         doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is locked.") 

      end 

   else 

      return false, doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is empty.") 

   end 

   return true 

end 

 

 

Possa ser que gere problemas de compatibilidade. 

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...