Ir para conteúdo
  • 0

Sistema de vender premium por trade


igorlabanca

Pergunta

Recentemente o membro Oneshot criou uma função de trade

http://www.xtibia.com/forum/topic/223158-dostarttradecid-target-item/

Gostaria de saber se com essa função é possível criar um sistema de vender premium através de um comando por trade,ao qual os players podem vender premium através do trade do tibia.

 

Funcionaria mais ou menos assim:

yw9u.png


O comando seria
!tradepremium PLAYER, quantidade de premium
exemplo: !tradepremium Two Pac, 10

Com isso o item que conteria a premium sumiria assim que o player receber o item e a premium entraria na sua conta.
O player que vendeu a premium obviamente que a premium seria retirada da sua conta.

 

OBS:
O mínimo de premium para vender seria de 2 dias, obviamente que o sistema tem que checar quantos dias de premium teria o player.

Caso seja possível coloquem algumas mensagens quando as operações acontecerem,

exemplo:

"Você recebeu 10 dias de premium, deslogue para ativar a premium."

"A Premium foi transferida."
"Você não tem dias de premium suficiente"
"O mínimo de vip para ser transferido é de 2 dias"


Creio que é um sistema bastante interessante, e isso estimula a compra de premium no servidor.

 

Obrigado
Mãos a obra !

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

Posts Recomendados

  • 0

Eu ainda estou no aguardo :/

infelizmente a galera expert do xtibia não tem dado muita atenção aqui no forum.

Com isso o open source fica um pouco quebrado, pq muitos querem pagamentos por isso...

Link para o comentário
Compartilhar em outros sites

  • 0

Cara eu fiz aqui mas não testei e tem duas coisas que preciso saber. Primeira: vc tem a função doStartTrade do Oneshot instalada? Segunda: quando eu uso essa função abre a janela de trade e eu ofereço o item que eu escolhi na função, mas como o target escolhe o item que ele oferece?

 

De qualquer jeito, aqui está o código, teste e poste o resultado. Fiz ele com base no addVip

 

crie sellpremium.lua em data/talkactions/scripts e coloca

 

 


function onSay(cid, words, param, channel)
    if param == "" then
        doPlayerSendCancel(cid, "Para vender seus dias de premium account, diga /trade premium dias playerName.")
        return true
    end
    
    if param:lower():find('premium') == 1 and 3 then
        local _,_,id,name = param:lower():find('premium (%d+) (.+)')
            name = name or ""
            id = tonumber(id or 1) or 1
            if tonumber(id) == nil or getPlayerByName(name) == false then
                return doPlayerSendTextMessage(cid,25,"Voce fez algo errado. Para vender seus dias de premium diga /trade premium dias playerName.")
            end  
            if isPlayer(getPlayerByName(name)) then
                if getPlayerPremiumDays(cid) < tonumber(id) then
                    doPlayerSendCancel(cid, "Voce tem menos que " .. tonumber(id) .. " dias de premium.")
                    return false
                end

            local document = doPlayerAddItem(cid, 1952, 1)
            local days = doItemSetAttribute(document, "description", tonumber(id))
            doStartTrade(cid, getPlayerByName(name), days)
            doPlayerSendTextMessage(cid, 25, "O jogador " .. name .. " quer te vender " .. tonumber(id) .. " dias de Premium Acount.")
         else
            doPlayerSendTextMessage(cid,22,name.." nao esta online ou nao existe.")
         end
    end
    return true
end

 

 

tag no talkactions.xml

<talkaction log="yes" words="/trade" event="script" value="sellpremium.lua" />
Em data/creaturescripts/scripts cria sellpremium.lua e coloca:

function onTradeAccept(cid, target, item, targetItem)
    local days = string.sub(getItemDescriptions(item.uid), 1, 2)
    if isPlayer(cid) and isPlayer(target) then
        if item.itemid == 1952 then
            doPlayerAddPremiumDays(cid, -days)
            doPlayerAddPremiumDays(target, days)
            doPlayerSendTextMessage(cid, 25, "Voce vendeu " .. days .. " de Premium Account para " .. getCreatureName(target) .. "!")
            doPlayerSendTextMessage(target, 25, "Voce comprou " .. days .. " de Premium Account do jogador " .. getCreatureName(cid) .. "!")
        end
    end
    return true
end
No login.lua vc registra essa linha junto com as outras dessa
registerCreatureEvent(cid, "sellPremium")
Em creaturescripts.xml vc coloca
<event type="tradeaccept" name="sellPremium" event="script">
Acho muito difícil isso funcionar... Mas tenta aí e me avisa. Editado por Killua
Link para o comentário
Compartilhar em outros sites

  • 0
Primeira: vc tem a função doStartTrade do Oneshot instalada?

 

Sim, tenho,

 

Segunda: quando eu uso essa função abre a janela de trade e eu ofereço o item que eu escolhi na função, mas como o target escolhe o item que ele oferece?

 

Isso não sei...

 

Aconteceu o seguinte, eu falei /trade 2 playername, não aconteceu nada, o comando ate executou, porém não fez nada e nenhum erro na distro.

Link para o comentário
Compartilhar em outros sites

  • 0

Aconteceu o seguinte

Toda vez que eu falo

/trade premium 2 playername

O item do id 1952 é gerado, porém não na janela de trade e sim na minha backpack. (obs: não contem premium nem nada, apenas o item)

 

E da esse erro na distro:

[13:48:18.817] [Error - TalkAction Interface]
[13:48:18.818] data/talkactions/scripts/sellpremium.lua:onSay
[13:48:18.819] Description:
[13:48:18.821] data/talkactions/scripts/sellpremium.lua:23: attempt to concatena
te local 'days' (a boolean value)
[13:48:18.822] stack traceback:
[13:48:18.822]  data/talkactions/scripts/sellpremium.lua:23: in function <data/t
alkactions/scripts/sellpremium.lua:1>
Editado por igorlabanca
Link para o comentário
Compartilhar em outros sites

  • 0

O erro foi parecido só que agr aparece as msgs... porém ainda não da trade com o item, apenas gera o item sem nada :x

Erro Console

[19:52:37.043] [Error - TalkAction Interface]
[19:52:37.045] data/talkactions/scripts/sellpremium.lua:onSay
[19:52:37.047] Description:
[19:52:37.051] (luaDoStartTrade) Item not found
Link para o comentário
Compartilhar em outros sites

  • 0

=P era nisso aí mesmo que eu tinha dúvida na função... Não sei como ela pede o item

 

tenta mudar essa linha

doStartTrade(cid, getPlayerByName(name), days)

deixa ela assim

doStartTrade(cid, getPlayerByName(name), days.uid)
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...