Ir para conteúdo

Sugismundo

Campones
  • Total de itens

    41
  • Registro em

  • Última visita

  • Dias Ganhos

    1

Posts postados por Sugismundo

  1. Então galera, como o título já diz, preciso de uma spell parecida com Sense que encontra jogadores mas funciona totalmente diferente.

     

    Consiste em, o player ao falar a magia sai um effect nele ajustável e vai localizar todos os monstros/players/npcs que estão em um raio de 50x50 tiles e vai informar no chat para o player.

    Se possível informar quando jogador a direção que ele está, mas concluindo a primeira parte já é o suficiente. Obrigado a quem tentar ajudar.

     

    edit: acabei de ver que pedi no lugar errado, se puderem mover para mim agradeço.

     

  2. ESTOU COM O SEGUINTE ERRO AO UTILIZAR QUALQUER SPELL QUE TENHA SHOOT EFFECTS (DISTANCE EFFECTS). TANTO EU QUANTO OS MONSTROS QUE USAM DA ESTE SEGUINTE ERRO NO TERMINAL:

    ERROR: ProtocolGame parse message exception (56 bytes unread, last opcode is 0, prev opcode is 133): unhandled opcode 0

     

    JA ADICIONEI OS FEATURES TODOS NECESSÁRIOS E MESMO ASSIM CONTINUO COM ESTE PROBLEMA. É SO NESTA PARTE QUE DA ESSE ERRO, E QUANDO ALGUM MONSTRO USAR UMA SPELL COM DISTANCE A SPELL NÃO DA DANO NO PLAYER.

    JA TAMBEM REINSTALEI O TFS 0.4 QUE JA VEM COM OS OPCODES E JA ADICIONEI NO CREATURE SCRIPT MAS NÃO FAÇO IDEIA DE COMO RESOLVER ISSO.

     

    image.png.3729ef7da088a73ecb5504a55f27a711.thumb.png.6161043258bf669cb1e9eb72eef257f3.png

  3. Em 30/03/2022 em 09:12, denysmenetix disse:

    Ola, estou com um servidor 8.60 com sprites de itens e outfits do 12.60, retro, gold outfit etc..

    e no site disponibilizei um cliente proprio old 8.60 e o cliente OTC porém os players que jogam pelo cliente OTC não conseguem trocar de outfit, não chega nem abrir a caixa para poder ver os addons que o player tem ou trocar de cor etc, alguem sabe como resolver? ja baixei outros OTCs e acontece a mesma coisa.

     

     

    Veja se a opção não está desabilitada, o meu tbm tava assim, entrei no config.lua do servidor e habilitei dai pegou normal 

    allowChangeOutfit
    essa opção ai, deixa true

  4. Olá por acaso alguém sabe como eu deixo a tela do OTClient sempre no tamanho máximo? Tipo, fiz o esquema de aumentar os tiles da tela do OTClient mas quando eu logo no jogo eu preciso apertar (CTRL+.) duas vezes para a tela ficar estendida, gostaria de deixar sempre estendida sem precisar apertar o botão para ficar dessa forma.

     

    Como está:
     
    image.thumb.png.493d5abf404ad4eb8ce59ab36ad4e1f0.png

     

     

    Como eu quero que fique:
    image.thumb.png.886030d19080b2c190131f2842a6213f.png

     

    Creio que seja no mesmo lugar que mexe no zoom, até encontrei a opção currentViewMode para deixar sempre estendido mas até mesmo essa opção tem bordas pequenas nas laterais.
    Mandei tbm o arquivo para caso queiram ver como tá.

    gameinterface.lua

  5. Boa noite/dia/tarde, gostaria que alguém pudesse me ajudar fazendo uma spell que creio que vai ser util não so para mim mas para várias pessoas, não encontrei em nenhum lugar da internet essa spell por isso venho aqui fazer esse pedido.

    Basicamente a spell consiste no seguinte: O player vai escolher um lado que ele irá soltar a spell olhando para ele, quando ele ativar ela, ele vai dar um dash(não teleport) para a direção que ele está olhando e irá percorrer uma distancia ajustável em uma velocidade ajustável com também uma largura ajustável.
    Durante o percurso aonde ele passar vai sair um effect com a posição da sprite ajustável tbm e não irá atravessar paredes nem entrar em zonas safes.
    Irá atravessar apenas monstros e players e quando fizer isso sairá um outro effect no player/monstro que foi atingido que tbm seja ajustável a sprite, e irá também dar um dano no alvo atravessado que esse dano como tudo antes também seja ajustável.

    Bom essa é a spell normal, a partir de agora não é necessário mas se puder ser feito tbm eu agradeceria muito.
    Quando o player usar essa spell, ele vai poder reconjurar ela um numero definido no script antes de entrar em cooldown.
    Como disse antes essa parte não é necessária para o funcionamento da spell mas se por acaso quiser fazer vai ajudar muito.

    Por enquanto é isso, obrigado a quem tentar me ajudar.

  6. Olá, por acaso alguém consegue fazer com que ao hitar o alvo que acontece depois de 7 milissegundos o target ser empurrado 1 sqm sendo ajustável a quantidade e podendo escolher quais alvos não serão afetados pelo empurrão.

    Meu TFS é 0.4 e o server é 8.60
     

    
    local combat = createCombatObject()
    setCombatParam(combat, COMBAT_PARAM_HITCOLOR, COLOR_YELLOW)
    setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
    setCombatParam(combat, COMBAT_PARAM_EFFECT, 32)
    
    function onGetFormulaValues(cid, level, maglevel)
    	min = -((20) * (maglevel + level))
    	max = -((22) * (maglevel + level))
    	
    	return min, max
    end
    
    setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
    
    local function onCastSpell1(parameters)
    	return isCreature(parameters.cid) and doCombat(parameters.cid, combat, parameters.var)
    end
    
    function onCastSpell(cid, var)
    
    	local parameters = { cid = cid, var = var}
    	
    	local waittime = 3 -- Tempo de exhaustion
    	local storage = 200001
    	
    	if exhaustion.check(cid, storage) then
    		doPlayerSendCancel(cid, "Podera usar novamente dentro de 3 segundos.")
    		doSendMagicEffect(getCreaturePosition(cid), 32)
    		return false
    	end
    	exhaustion.set(cid, storage, waittime)
    	local positionp = getPlayerPosition(cid)
    	local target = getCreatureTarget(cid)
    	local enemypos = getCreaturePosition(target)
    	addEvent(onCastSpell1, 800, parameters)
    	if target == isMonster or isCreature then
    		addEvent(function()
    			if not isCreature(cid) then return LUA_ERROR end
    			doTeleportThing(cid, enemypos)
    		end, 700)
    		addEvent(doSendMagicEffect, 700, {x = enemypos.x+1, y = enemypos.y+1, z = enemypos.z}, 56)
    		addEvent(doSendMagicEffect, 700, {x = positionp.x+2, y = positionp.y, z = positionp.z}, 60)
    		addEvent(doSendMagicEffect, 0, {x = positionp.x, y = positionp.y, z = positionp.z}, 55)
    	end
    	return true
    end

     

  7. 2 minutos atrás, Yan18 disse:

     O problema está em uma verificação if que sua skill ou é menor que 0 (acho difícil) ou é maior que 6, então ele só seta o MagicLevel, mas estar resetando para level 10 eu não entendi. Tem que ver se não tem algum bloco no seu login.lua que está fazendo isso. Antes de colocar esse sistema estava normal?

    Sim estava normal

  8. 8 minutos atrás, Yan18 disse:

    Sim, troque o código por esse:

     

    
    -- SCRIPT DE TELETRANSPORTE FEITO POR YAN18 --
    
    local message_color = MESSAGE_STATUS_CONSOLE_BLUE -- COR DA MENSAGEM
    local effect = 36 -- EFEITO DO TELETRANSPORTE
    local mana = 150 -- TANTO DE MANA QUE VAI GASTAR PARA TELEPORTAR. SE QUISER SEM CUSTO, COLOQUE O VALOR 0
    local storage_time = 55454 -- STORAGE PARA VERIFICAR SE PODE USAR A SPELL
    local minutes = 5 -- MINUTOS PARA USAR A SPELL NOVAMENTE
    
    -- FUNÇÃO LOCAL PARA TELETRANSPORTAR --
    local function Teleportation(cid, index)
        if not cid then
            return true
        end
    
        if not isInParty(cid) then
            return doPlayerSendTextMessage(cid, message_color, "You need to be in a party to teleport. But if you are in a party, please report this problem.")
        end
    	
        if index < 1 then
            return doPlayerSendTextMessage(cid, message_color, "There are not players available in your party for you teleport to him.")
        
        else
            local player = getPartyMembers(cid)[index]
    
            if getCreatureName(cid) ~= getCreatureName(player) then
                if string.lower(getCreatureName(player)) == string.lower(getCreatureName(player)) then
                    if not getTileInfo(getThingPos(player)).house then
                        doSendMagicEffect(getThingPos(cid), effect)
                        doTeleportThing(cid, getThingPos(player))
                        doSendMagicEffect(getThingPos(cid), effect)
                        doCreatureSay(cid, "TELEPORTATION!")
                        doPlayerSendTextMessage(cid, message_color, "You had been teleportation to " .. getCreatureName(player) .. ".")
                    return true   
                    end
                end   
            end                         
          
    
            addEvent(Teleportation, 10, cid, index - 1)
        end
    
    end
    
    --------------------- CÓDIGO ---------------------
    function onCastSpell(cid, var)
        if not cid then
            return true
        
        elseif not isInParty(cid) then
            return doPlayerSendTextMessage(cid, message_color, "You need to be in a party to teleport. But if you are in a party, please report this problem.")
        
        else
    		if getPlayerStorageValue(cid, storage_time) <= os.time() then
    			if getCreatureMana(cid) >= mana then
    				Teleportation(cid, #getPartyMembers(cid))
    				setPlayerStorageValue(cid, storage_time, os.time() + (60 * minutes))
    			return true
    
    			else
    				return doPlayerSendTextMessage(cid, message_color, "You need to have " .. mana .. " mana to use this ability.")    
    			end
    				
    		else
    			return doPlayerSendTextMessage(cid, message_color, "You need to wait " .. minutes .. " minutes to use this ability again.")
    		end
    	end	
            
    end

     

    Deu certinho, muito obrigado!

  9. Em 04/04/2021 em 22:08, Yan18 disse:

     

    Eu tinha pensado que o seu ot era um Tibia rs, mas como é Dragon Ball Tibia, faz sentido até. 

     

    Crie um arquivo na pasta Spells (se tiver uma subpasta de party adiciona dentro dela) chamado teleportation.lua e adiciona o código dentro:

     

    
    -- SCRIPT DE TELETRANSPORTE FEITO POR YAN18 --
    
    local message_color = MESSAGE_STATUS_CONSOLE_BLUE -- COR DA MENSAGEM
    local effect = 36 -- EFEITO DO TELETRANSPORTE
    local mana = 150 -- TANTO DE MANA QUE VAI GASTAR PARA TELEPORTAR. SE QUISER SEM CUSTO, COLOQUE O VALOR 0
    
    -- FUNÇÃO LOCAL PARA TELETRANSPORTAR --
    local function Teleportation(cid, index)
        if not cid then
            return true
        end
    
        if not isInParty(cid) then
            return doPlayerSendTextMessage(cid, message_color, "You need to be in a party to teleport. But if you are in a party, please report this problem.")
        end
    	
        if index < 1 then
            return doPlayerSendTextMessage(cid, message_color, "There are not players available in your party for you teleport to him.")
        
        else
            local player = getPartyMembers(cid)[index]
    
            if getCreatureName(cid) ~= getCreatureName(player) then
                if string.lower(getCreatureName(player)) == string.lower(getCreatureName(player)) then
                    if not getTileInfo(getThingPos(player)).house then
                        doSendMagicEffect(getThingPos(cid), effect)
                        doTeleportThing(cid, getThingPos(player))
                        doSendMagicEffect(getThingPos(cid), effect)
                        doCreatureSay(cid, "TELEPORTATION!")
                        doPlayerSendTextMessage(cid, message_color, "You had been teleportation to " .. getCreatureName(player) .. ".")
                    return true   
                    end
                end   
            end                         
          
    
            addEvent(Teleportation, 10, cid, index - 1)
        end
    
    end
    
    --------------------- CÓDIGO ---------------------
    function onCastSpell(cid, var)
        if not cid then
            return true
        
        elseif not isInParty(cid) then
            return doPlayerSendTextMessage(cid, message_color, "You need to be in a party to teleport. But if you are in a party, please report this problem.")
        
        else
            if getCreatureMana(cid) >= mana then
                Teleportation(cid, #getPartyMembers(cid))
    
            else
                return doPlayerSendTextMessage(cid, message_color, "You need to have " .. mana .. " mana to use this ability.")    
            end
        end
    end

     

    Agora abra o arquivo spells.xml e adicione a tag:

    
    <instant name="Teletransporte" words="teleportation" lvl="1" mana="1" prem="0" aggressive="0" selftarget="1" exhaustion="0" needlearn="0" event="script" value="party/teleportation.lua">
    		<vocation id="1"/>
    		<vocation id="2"/>
    		<vocation id="3"/>
    		<vocation id="4"/>
    		<vocation id="5"/>	
    </instant>

     

    Na tag xml da spell você configura certinho os atributos como custo de mana (eu deixei no próprio script um custo, se quiser deixar 0 no xml e configurar por lá, também dá!) se precisa de premium e as vocations que pode usar. E não esqueça de verificar o diretório.

     

    Eu testei aqui e funcionou! O teletransporte sempre vai para o último membro da lista de membros da party e se ele estiver dentro de uma house ele vai para o penúltimo e assim sucessivamente. O script vai fazer recursão até o primeiro membro da lista (tirando o próprio player que usa a spell) e se não encontrar nenhum disponível ele manda uma mensagem avisando.

     

    Não sei se tem a sprite do efeito de teletransporte no seu client, mas se não tiver, uma opção é nos poketibias, que tem uma sprite da passiva Evasion que tem um efeito similar ao teletransporte, é bem legal!

    Show de bola, funcionou certinho, tem como adcionar um cowndown de 5 min? com mensagem informando o tempo necessario?

  10. 6 minutos atrás, Yan18 disse:

    Se tivesse explicado isso desde o começo, teria sido mais fácil rsrs. Pois, não precisaria de todos esses scripts. Do jeito que você quer é mais fácil do que eu pensei.

     

    Eu pensei em falar para você excluir os scripts que tinha feito, mas deixa caso queira usar em outra coisa, como loteria, quests ou recompensa por exemplo.

     

    Vá em Data/Talkactions/Scripts e crie o arquivo chamado add_points.lua e adicione o código:

     

    
    local item_id = 2160 -- ID DOS POINTS
    local effect = false -- SE QUISER COM EFEITO AO RECEBER O ITEM MUDE PARA TRUE
    local effect_id = 27 -- EFEITO DO ID AO RECEBER O ITEM
    local level_acess = 4 -- ACESSO DO PLAYER (PLAYER - TUTOR - GM - CM - ADM), DEIXE 4 OU MAIS PARA STAFF E 6 PARA ADM
    
    function onSay(cid, words, param)
    local command = string.explode(param, ",")
    local name = string.lower(command[1])
    
    	-- SCRIPT SOMENTE PARA STAFF --
    	if getPlayerAccess(cid) < level_acess then
    		return true
    	end	
    
        if param == nil or param == "" then
    		return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa informar o nome do player para receber os pontos.")
        
    	elseif string.len(param) < 3 then
    		return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa informar um nome válido do player para receber os pontos.")
    		
    	elseif tonumber(command[2]) == nil or tonumber(command[2]) <= 0 then
    		return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa informar uma quantia válida de pontos.")
    	
        else
            if #getPlayersOnline() > 1 then
                for index, player in pairs(getPlayersOnline()) do
    			local player_name = string.lower(getCreatureName(player))
    		   
    				if name == player_name then
    					local points = tonumber(command[2])
    					local message = ""
    					
    					if points > 1 then
    						message = "Obrigado por ter donatado! Como recompensa, você recebeu " .. points .. " points." -- MENSAGEM QUE O PLAYER VAI RECEBER NO CHAT
    					
    					elseif points == 1	then
    						message = "Obrigado por ter donatado! Como recompensa, você recebeu " .. points .. " point." -- MENSAGEM QUE O PLAYER VAI RECEBER NO CHAT
    					end
    				
    					doPlayerAddItem(player, item_id, points)
    					doPlayerSendTextMessage(player, MESSAGE_STATUS_CONSOLE_BLUE, message)
    
    					-- VERIFICA SE VAI RECEBER EFEITO --
    					if effect then
    						doSendMagicEffect(getThingPos(player), effect_id)
    					end								
    					
    				return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "O player " .. command[1] .. " recebeu a recompensa.")
    				end
    
    				if index == #getPlayersOnline() and name ~= player_name then
    					return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "O player " .. command[1] .. " não está online.")
    				end	
                     
                end
    			
            else
               return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Não há jogadores online!")
            end
        end
         
    end

     

    Agora abra o talkactions.xml e adicione a tag:

    
    <talkaction words="!addpoints" acess="6" event="script" value="add_points.lua"/>

     

    Continua via comando (talkaction), e para utilizar, funciona assim, você precisa digitar o comando !addpoints nome do player, quantidade de points:

     

    
    !addpoints Administrador, 50

     

    E todas as variáveis estão comentadas, e segue o mesmo padrão do script antigo, porém a mensagem do player está dentro do for, então se quiser mudar está lá. Só mudar o id do item na primeira variável e lembrando que coloquei restrição de acesso, ou seja, somente membros da staff pode usar, no caso deixei nível de acesso 4, então GM, CM e ADM conseguiram usar o comando, se quiser só ADM, mude para 6 a variável level_acess.

     

    Eu testei aqui e está funcionando certinho, só não esqueça de comentar a tag xml da talkaction antiga se não for usar, pois esqueci de fazer verificação de acesso nela e qualquer player consegue usar. E fica seu critério excluir o script da box na pasta Actions também.

    Certinho mano, obrigado :D agora deu certo!

  11. Agora, Yan18 disse:

    Você não entendeu, não estou falando da box, estou falando dos itens que o player tira ao clicar na box, igual eu fiz no script.

    Então, os pontos são moedas que vão vir ao clicar na box, apenas 1 tipo de item. Igual golds ou diamantes de outros servers

  12. 1 minuto atrás, Yan18 disse:

    Então, foi como te falei, eu te dei duas sugestões, uma é por box e outro por tabela. 

     

    Pensei em fazer assim, quando for usar a talkaction, você usa um parâmetro numérico que vão ser os pontos, e de acordo com o parâmetro, o player vai receber X quantidade de itens. Você quer que receba de forma aleatória ou por ordem que os itens ficam na tabela?

    Vai ser apenas 1 item que são os pontos

  13. 2 horas atrás, Yan18 disse:

    Agora entendi perfeitamente, mas assim, agora que entendi melhor, eu acho que isso pode ser problemático, porque se o cara donatar valores altos vai ter que dar itens de acordo com a quantidade, e chega uma hora que fica complicado isso. Recomendo tabelar isso. 

     

    Mas nesse caso, no script que eu fiz, você tem duas alternativas, tabelar por quantidade na tabela de itens no script da pasta Actions ou por parâmetro no comando talkaction que entrega a box colocar quantas box ele recebe, e se você quiser o segundo caso, recomendo colocar o item da box como agrupável, porque se não vai ocupar muito espaço na bag do player.

    Mas nesse caso então o que iria mudar é a quantidade de box? ou seja o valor dos pontos ainda seria fixo por cada box, e para funcionar com qualquer valor de donate os pontos da box precisariam ser apenas 1 ou seja se o player donatar 100 reais eu teria que dar a ele 100 box para ele receber 100 pontos. Não teria como eu simplificar isso? Fazer uma box apenas que dê qualquer valor de pontos que eu definir ao entrega-la?

  14. Em 31/03/2021 em 01:57, Yan18 disse:

    No caso seria 10x box certo?

    Tá vamos la, não sei se ja jogou algum ot server assim, mas normalmente quando voce donata voce recebe uma quantia de pontos ou coins de acordo com o valor que voce donatou. O que eu quero fazer e exatamente isso so que de maneira manual, Se eu pago 10 reais eu recebo 10 pontos, se eu pago 20 recebo 20 pontos, 30 recebo 30 e assim por diante. 

    O script que você me passou ele funciona de tal maneira, nele eu especifico o item que eu vou querer que o player receba e ao abrir ele vai receber esse item, mas oque estou com duvida é.

    Como eu faria para dar a quantidade de pontos que o player donatou usando esse sistema de box que voce me passou, sendo que eu preciso especificar no script oque o player vai receber. E não tem como eu especificar algo quando esse algo pode variar de acordo com o player entende?


    Tipo se eu especifico que o player vai donatar 25 reais e eu especifiquei que a box ela vai dar 10 pontos ao abrir, dessa forma faltaria 15 pontos para entregar ao player. mesmo que eu dê 2 box para o player ainda assim faltaria 5 pontos para entregar e não teria como dar outra box. 

    A unica coisa que pensei seria adcionar esse mesmo script varias vezes com valores diferentes para cada script e trocar o talkaction, mas daria muito trabalho.
    Por acaso não teria uma forma de mim especificar o item da box ao criar ela ingame? tipo

    !vipbox 13500, 100


    Dai eu ja criaria com o item que eu quero com a quantidade de acordo com o valor que o player donatou, deu para entender?

  15. 5 horas atrás, Yan18 disse:

    Sobre a box não sumir foi erro meu, esqueci de remover. Sabia que estava esquecendo algo haha. Troque o código da pasta actions por esse:

     

    
    -- TABELA COM O ID DOS ITENS E A QUANTIDADE --
    local items = {
    {id = 2152, quantidade = 1000},
    {id = 2160, quantidade = 100},
    {id = 13250, quantidade = 1},
    {id = 13255, quantidade = 5},
    {id = 13260, quantidade = 10},
    }
    
    local effect = false -- COLOQUE TRUE SE QUER QUE O PLAYER RECEBA EFEITO AO ABRIR A BOX 
    local effect_id = 30 -- ID DO EFEITO AO RECEBER A BOX
    
    local table_random = false -- SE QUISER QUE RECEBE ITENS ALEATÓRIOS MUDE PARA TRUE OU DEIXE FALSE PARA O PLAYER RECEBER TODOS OS ITENS
    
    -------------------------------------------- CÓDIGO ------------------------------------------
    
    function onUse(cid, item, fromPosition, itemEx, toPosition)
    
    	if table_random then	
    		local random_item  = math.random(1, #items) -- PEGA UM ÍNDICE ALEATÓRIO DA TABELA PARA DAR O ITEM DE FORMA ALEATÓRIA
    		
    		doPlayerAddItem(cid, items[random_item].id, items[random_item].quantidade)
    		
    		if items[random_item].quantidade > 1 then
    			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. "x" .. items[random_item].quantidade .. " " .. getItemNameById(items[random_item].id) .. ".")
    		
    		elseif items[random_item].quantidade == 1 then
    			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. getItemNameById(items[random_item].id) .. ".")
    
    		else
    			return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Houve um problema ao receber o item, por favor report o problema.")
    		end
    
    		if effect then
    			doSendMagicEffect(getThingPos(cid), effect_id)
    		end
    		
    		doRemoveItem(item.uid, 1)
    
    	return true
     	
    	else	
    		for i = 1, #items do
    			doPlayerAddItem(cid, items[i].id, items[i].quantidade)
    			
    			if items[i].quantidade > 1 then
    				doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. "x" .. items[i].quantidade .. " " .. getItemNameById(items[i].id) .. ".")
    		
    			elseif items[i].quantidade == 1 then
    				doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. getItemNameById(items[i].id) .. ".")
    
    			else
    				return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Houve um problema ao receber o item, por favor report o problema.")
    			end
    		
    			-- SE ESTÁ TRUE RECEBE O EFEITO AO ABRIR A BOX --
    			if effect then
    				doSendMagicEffect(getThingPos(cid), effect_id)
    			end
    			
    			doRemoveItem(item.uid, 1)
    		end	
    		
    	return true			
    	end
    
    end

     

    Sobre sua pergunta, de o player donatar mais, eu não entendi muito bem o que você quis dizer. No caso os pontos seria itens da recompensa ou você fala da quantidade de box?

    Eu digo tipo assim, o player donatou 10 reais, ele ganha 10 pontos entendeu? caso ele donate um valor diferente eu teria que dar uma quantidade de pontos diferente

  16. 12 horas atrás, Yan18 disse:

     

    Entendi, vamos lá!

     

    Não sei se você já tem a sprite no seu cliente de uma box ou se tem algum item em mente para usar, mas estou te facilitando a vida já te mandando a sprite em PNG e OBD, só adicionar no cliente caso queira, peguei de um pokétibia que tenho aqui.

     

    Tem algumas maneiras do player receber a box, pode ser de maneira mais direta ou automatizada. Pensei na direta, porque a automatizada que tive em mente teria que fazer mais coisas e não sei se no seu caso compensa, pois você parece querer ter esse controle de entregar para player, então vamos fazer por talkaction! 

     

    Primeiramente vá em Data/Talkactions/Scripts e crie um arquivo.lua chamado player_vip_box_item.lua ou o nome que você quiser e adicione o código dentro:

     

    
    local item_id = 13258 -- ID DO ITEM DA BOX
    local quantidade = 1 -- QUANTIDADE DE BOX QUE O PLAYER VAI RECEBER
    local message = "Obrigado por ter donatado! Como recompensa, você receberá uma box com um item surpresa." -- MENSAGEM QUE O PLAYER VAI RECEBER NO CHAT
    local effect = false -- SE QUISER COM EFEITO AO RECEBER O ITEM MUDE PARA TRUE
    local effect_id = 27 -- EFEITO DO ID AO RECEBER O ITEM
    
    function onSay(cid, words, param)
    local command = string.explode(param, ",")
    local name = string.lower(param)
    
        if param == nil or param == "" then
    		return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa informar o nome do player para receber o item vip.")
        
    	elseif string.len(param) < 3 then
    		return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa informar um nome válido do player para receber o item vip.")
    		
    	
        else
            if #getPlayersOnline() > 1 then
                for index, player in pairs(getPlayersOnline()) do
    			local player_name = string.lower(getCreatureName(player))
    		   
    				if name == player_name then
    					doPlayerAddItem(player, item_id, quantidade)
    					doPlayerSendTextMessage(player, MESSAGE_STATUS_CONSOLE_BLUE, message)
    
    					-- VERIFICA SE VAI RECEBER EFEITO --
    					if effect then
    						doSendMagicEffect(getThingPos(player), effect_id)
    					end								
    					
    				return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "O player " .. param .. " recebeu a recompensa.")
    				end
    
    				if index == #getPlayersOnline() and name ~= player_name then
    					return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "O player " .. param .. " não está online.")
    				end	
                     
                end
    			
            else
               return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Não há jogadores online!")
            end
        end
         
    end

     

    E agora volte um diretório na pasta de Talkactions e abra o arquivo talkactions.xml e adicione a tag:

    
    <talkaction words="!vipitem" acess="6" event="script" value="player_vip_box_item.lua"/>

     

    Agora vá em Data/Actions/Scripts e crie o arquivo vip_box_item.lua ou o nome que quiser e adicione o código dentro:

     

    
    -- TABELA COM O ID DOS ITENS E A QUANTIDADE --
    local items = {
    {id = 2152, quantidade = 1000},
    {id = 2160, quantidade = 100},
    {id = 13250, quantidade = 1},
    {id = 13255, quantidade = 5},
    {id = 13260, quantidade = 10},
    }
    
    local effect = false -- COLOQUE TRUE SE QUER QUE O PLAYER RECEBA EFEITO AO ABRIR A BOX 
    local effect_id = 30 -- ID DO EFEITO AO RECEBER A BOX
    
    local table_random = false -- SE QUISER QUE RECEBE ITENS ALEATÓRIOS MUDE PARA TRUE OU DEIXE FALSE PARA O PLAYER RECEBER TODOS OS ITENS
    
    -------------------------------------------- CÓDIGO ------------------------------------------
    
    function onUse(cid, item, fromPosition, itemEx, toPosition)
    
    	if table_random then	
    		local random_item  = math.random(1, #items) -- PEGA UM ÍNDICE ALEATÓRIO DA TABELA PARA DAR O ITEM DE FORMA ALEATÓRIA
    		
    		doPlayerAddItem(cid, items[random_item].id, items[random_item].quantidade)
    		
    		if items[random_item].quantidade > 1 then
    			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. "x" .. items[random_item].quantidade .. " " .. getItemNameById(items[random_item].id) .. ".")
    		
    		elseif items[random_item].quantidade == 1 then
    			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. getItemNameById(items[random_item].id) .. ".")
    
    		else
    			return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Houve um problema ao receber o item, por favor report o problema.")
    		end
    
    		if effect then
    			doSendMagicEffect(getThingPos(cid), effect_id)
    		end
    
    	return true
     	
    	else	
    		for i = 1, #items do
    			doPlayerAddItem(cid, items[i].id, items[i].quantidade)
    			
    			if items[i].quantidade > 1 then
    				doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. "x" .. items[i].quantidade .. " " .. getItemNameById(items[i].id) .. ".")
    		
    			elseif items[i].quantidade == 1 then
    				doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. getItemNameById(items[i].id) .. ".")
    
    			else
    				return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Houve um problema ao receber o item, por favor report o problema.")
    			end
    		
    			-- SE ESTÁ TRUE RECEBE O EFEITO AO ABRIR A BOX --
    			if effect then
    				doSendMagicEffect(getThingPos(cid), effect_id)
    			end
    		end	
    		
    	return true			
    	end
    
    end

     

    Por fim na pasta Actions volte um diretório e abra o arquivo actions.xml e adicione a tag:

    
    <action itemid="XXXX" event="script" value="vip_box_item.lua"/> <!-- COLOQUE O ID DO ITEM ONDE ESTÁ XXXX -->

     

    Onde está XXXX você coloca o id do item (até deixei comentado no fim da tag xml.

     

    --------- EXPLICAÇÃO --------

     

    O script vai funcionar da seguinte maneira: Você irá dar ao player a box via comando talkactions e só funciona se o player estiver online. A talkaction é:

    
    !vipitem Nome

    Então com o comando !vipitem mais o nome do player irá adicionar o item se ele estiver online. No código ele converte o nome do player para minúsculo, então se tiver players com nome iguais mais com o tamanho do caractere diferente, vai dar ruim e vai adicionar para os dois, para quem tiver online ou para nenhum.

     

    Tem mensagens para todo tipo de situação, se o player está offline, se você digitar nome do player com menos de 3 caracteres ou se não digitar o nome.

     

    Eu fiz variáveis booleana que se você quiser que tenha efeito ao player receber a box ou abrir só mudar para true no código a variável effect. E no arquivo da pasta actions tem a tabela com os itens, só colocar o id e a quantidade de cada item. Se quiser dar só um item é só deixar a tabela com um item. E a variável table_random é para caso sorteie um item aleatório quando o player abrir a box (clicar), e nesse caso ele vai receber um item só! Agora se quiser que receba todos da tabela, deixe a variável table_random como false, se quiser aleatório coloque true.

     

    Eu deixei tudo comentado e está bem intuitivo, e eu testei somente o código do talkactions, pois o do actions é bem fácil e eu fiz de cabeça, mas analisei certinho e não é para dar problema.

     

    Qualquer erro ou problema, me avise.

    box_item.png

    box_item.rar 2.49 kB · 0 downloads

    Então amigo o código funciona mas tive 2 problemas, as box não estão sumindo ao usar, tendo como usar infinitamente. Já tentei arrumar no item editor e no xml mas não resolveu. Segundo é, caso o player donate uma quantia X e eu vá dar a quantia que ele donatou vou precisar adicionar o mesmo script 2 vezes com nomes diferentes e alterar o valor? Por que pelo que vi só tem como eu adicionar uma quantia fixa, pelo comando não da para escolher a quantidade de pontos que o player vai receber ao abrir a box?

  17. Em 26/03/2021 em 22:59, Yan18 disse:

    Certo, e para os players comprarem vip estão comprando pelo site ou em contato direto com você?

    Não tem vip, apenas vocações vips e alguns itens.

    No caso as vocações vips são vendidas por npcs que usam a moeda vip que eu dou ao player quando ele donara

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...