Ir para conteúdo

[Sistema] Advanced Trade Points


Posts Recomendados


Apresentação:  Após ver que muitos usuários tinham interesse em um sistema de Trade de Points in-game resolvi trazer um sistema totalmente completo para vocês.

Funcionamento:

  • Player 1 após adquirir os Points, pode iniciar uma negociação com o Player 2 através do comando /tradepoints Player 2, Quantidade.
  • Será aberto uma Janela de Trade com o item referente aos Points.
  • Após ambos aceitarem a negociação será realizado a troca de Points pelo item requisitado.

 

Algumas Imagens:

Spoiler

1.png.e90850158ce2ab4c8854e453eaba38fc.png2.png.81e32eb9f761397d221dac2630e895a3.png3.png.a9a2a41cdeebbe3c1383de71533c133e.png

 

 

 

Instalação:

  • Sources > Luascript.cpp
    Spoiler
    
    //doTradeOrbs(cid, target, points) 
    lua_register(m_luaState, "doTradeOrbs", LuaInterface::luaDoTradeOrbs);

     

  • Sources > Luascript.cpp
    Spoiler
    
    int32_t LuaInterface::luaDoTradeOrbs(lua_State* L)
    {
        ScriptEnviroment* env = getEnv();
    
        int quantidade = popNumber(L);
    
        Player* target = env->getPlayerByUID(popNumber(L));
        Player* player = env->getPlayerByUID(popNumber(L));
        if(!player || !target)
        {
               errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));
               lua_pushboolean(L, false);
    	   return 1;
        }
    
    	Item* Orb = new Item(7722);;
    	Orb->addRef();
    
    	char buffer[150];
    	sprintf(buffer, "You see %d Collapser Orbs.", quantidade);
    	Orb->setSpecialDescription(buffer);
    
    	Orb->setSubType(1);
    
    	player->transferContainer.__addThing(NULL, Orb);
    	player->transferContainer.setParent(player);
    	if(!g_game.internalStartTrade(player, target, Orb))
    		Orb->onTradeEvent(ON_TRADE_CANCEL, player, NULL);
    
    	g_game.addMagicEffect(player->getPosition(), MAGIC_EFFECT_WRAPS_BLUE);
    	return false;
    }

     

  • Sources > Luascript.h
    Spoiler
    
    static int32_t luaDoTradeOrbs(lua_State* L);

     

 

  •  Server > Data > Lib > 050-function
    Spoiler
    
    function getAccountPoints(cid)
    	local res = db.getResult('select `premium_points` from accounts where name LIKE \''..getPlayerAccount(cid)..'\'')
    	return res:getDataInt("premium_points") < 0 and 0 or res:getDataInt("premium_points")
    end
    
    function doPlayerAddPoints(cid, quant)
    return db.query("UPDATE `accounts` SET `premium_points` = '".. getAccountPoints(cid) + quant .."' WHERE `name` LIKE '"..getPlayerAccount(cid).."'")
    end
    
    function doAccountRemovePoints(cid, count)
    	return db.query("UPDATE `accounts` SET `premium_points` = '".. getAccountPoints(cid) - count .."' WHERE `name` LIKE '"..getPlayerAccount(cid).."'")
    end

     

  • Server > Data > Creaturescripts > Scripts >Trade_Orbs.lua
    Spoiler
    
    function CompleteTrade(fromplayer, toplayer, points)
    	if getPlayerItemCount(toplayer, 7722) >= 1 and getAccountPoints(fromplayer) >= points then
        	doAccountRemovePoints(fromplayer, points)
    		doPlayerRemoveItem(toplayer, 7722, 1)
    		doPlayerAddPoints(toplayer, points)
    		doPlayerSendTextMessage(toplayer, MESSAGE_STATUS_WARNING, "You have received ".. points .." Collapser Orbs.")
    		return true
    	end
    end
    
    function CollapserOrbs(item)
    	return tonumber(string.match(getItemDescriptions(item.uid).special, "You see (%w+) Collapser Orbs."))
    end
    
    function onTradeAccept(cid, target, item, targetItem)
    	if isPlayer(cid) and isPlayer(target) then
        	if (item.itemid == 7722 and targetItem.itemid == 7722) then
    			doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "You cannot trade points for points.")
    			doPlayerSendTextMessage(target, MESSAGE_STATUS_WARNING, "You cannot trade points for points.")
    			return false
          	end
    		if item.itemid == 7722 then
    			local points = CollapserOrbs(item)
    			addEvent(CompleteTrade, 1, cid, target, points)
    		end
    		if targetItem.itemid == 7722 then
    			local points = CollapserOrbs(targetItem)
    			addEvent(CompleteTrade, 1, target, cid, points)
    		end
    	end
    	return true
    end 

     

  • Server > Data > Creaturescripts > Creaturescripts.xml
    Spoiler
    
    <event type="tradeaccept" name="Points_Trade" event="script" value="Trade_Orbs.lua"/>

     

  • Server > Data > Creaturescripts > Scripts > Login.lua
    Spoiler
    
    registerCreatureEvent(cid, "Points_Trade")

     

  • Server > Data > Talkactions > Scripts > Points_Trade.lua
    Spoiler
    
    function onSay(cid, words, param, channel)
    
    local t = string.explode(param, ",")
    local target = getCreatureByName(t[1])
    local points = tonumber(t[2])
    
    if(param == '') then
    	return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.")
    end
    
    if (target ~= nil and target ~= cid) and isPlayer(target) and not isPlayerGhost(target) then
    	if (points ~= nil) and (type(points) == 'number') and (points>0) then
    		if (getAccountPoints(cid) >= points) then
    			doTradeOrbs(cid, target, points)
    		else
    			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "You do not have enough points.")
    		end
    	else
    		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.")
    	end
    else
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.")
    end
    
    return true
    end

     

  • Server > Data > Talkactions > Talkactions.xml
    Spoiler
    
    <talkaction words="/tradepoints" log="yes" event="script" value="Trade_Points.lua"/>

     

Créditos:
Todo o sistema foi feito completamente por mim: Vítor Subhi.

Editado por VitorSubhi
Tratamento de Erros!
Link para o comentário
Compartilhar em outros sites

2 horas atrás, VitorSubhi disse:


Apresentação:  Após ver que muitos usuários tinham interesse em um sistema de Trade de Points in-game resolvi trazer um sistema totalmente completo para vocês.

Funcionamento:

  • Player 1 após adquirir os Points, pode iniciar uma negociação com o Player 2 através do comando /tradepoints Player 2, Quantidade.
  • Será aberto uma Janela de Trade com o item referente aos Points.
  • Após ambos aceitarem a negociação será realizado a troca de Points pelo item requisitado.

 

Algumas Imagens:

  Mostrar conteúdo oculto

1.png.e90850158ce2ab4c8854e453eaba38fc.png2.png.81e32eb9f761397d221dac2630e895a3.png3.png.a9a2a41cdeebbe3c1383de71533c133e.png

 

 

 

Instalação:

  • Sources > Luascript.cpp
      Mostrar conteúdo oculto
    
    
    //doTradeOrbs(cid, target, points) 
    lua_register(m_luaState, "doTradeOrbs", LuaInterface::luaDoTradeOrbs);

     

  • Sources > Luascript.cpp
      Mostrar conteúdo oculto
    
    
    int32_t LuaInterface::luaDoTradeOrbs(lua_State* L)
    {
        ScriptEnviroment* env = getEnv();
    
        int quantidade = popNumber(L);
    
        Player* target = env->getPlayerByUID(popNumber(L));
        Player* player = env->getPlayerByUID(popNumber(L));
        if(!player || !target)
        {
               errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));
               lua_pushboolean(L, false);
    	   return 1;
        }
    
    	Item* Orb = new Item(7722);;
    	Orb->addRef();
    
    	char buffer[150];
    	sprintf(buffer, "You see %d Collapser Orbs.", quantidade);
    	Orb->setSpecialDescription(buffer);
    
    	Orb->setSubType(1);
    
    	player->transferContainer.__addThing(NULL, Orb);
    	player->transferContainer.setParent(player);
    	if(!g_game.internalStartTrade(player, target, Orb))
    		Orb->onTradeEvent(ON_TRADE_CANCEL, player, NULL);
    
    	g_game.addMagicEffect(player->getPosition(), MAGIC_EFFECT_WRAPS_BLUE);
    	return false;
    }

     

  • Sources > Luascript.h
      Mostrar conteúdo oculto
    
    
    static int32_t luaDoTradeOrbs(lua_State* L);

     

 

  •  Server > Data > Lib > 050-function
      Mostrar conteúdo oculto
    
    
    function getAccountPoints(cid)
    	local res = db.getResult('select `premium_points` from accounts where name LIKE \''..getPlayerAccount(cid)..'\'')
    	return res:getDataInt("premium_points") < 0 and 0 or res:getDataInt("premium_points")
    end
    
    function doPlayerAddPoints(cid, quant)
    return db.query("UPDATE `accounts` SET `premium_points` = '".. getAccountPoints(cid) + quant .."' WHERE `name` LIKE '"..getPlayerAccount(cid).."'")
    end
    
    function doAccountRemovePoints(cid, count)
    	return db.query("UPDATE `accounts` SET `premium_points` = '".. getAccountPoints(cid) - count .."' WHERE `name` LIKE '"..getPlayerAccount(cid).."'")
    end

     

  • Server > Data > Creaturescripts > Scripts >Trade_Orbs.lua
      Mostrar conteúdo oculto
    
    
    function CompleteTrade(fromplayer, toplayer, points)
    	if getPlayerItemCount(toplayer, 7722) >= 1 and getAccountPoints(fromplayer) >= points then
        	doAccountRemovePoints(fromplayer, points)
    		doPlayerRemoveItem(toplayer, 7722, 1)
    		doPlayerAddPoints(toplayer, points)
    		doPlayerSendTextMessage(toplayer, MESSAGE_STATUS_WARNING, "You have received ".. points .." Collapser Orbs.")
    		return true
    	end
    end
    
    function CollapserOrbs(item)
    	return tonumber(string.match(getItemDescriptions(item.uid).special, "You see (%w+) Collapser Orbs."))
    end
    
    function onTradeAccept(cid, target, item, targetItem)
    	if isPlayer(cid) and isPlayer(target) then
    		if item.itemid == 7722 then
    			local points = CollapserOrbs(item)
    			addEvent(CompleteTrade, 1, cid, target, points)
    		end
    		if targetItem.itemid == 7722 then
    			local points = CollapserOrbs(targetItem)
    			addEvent(CompleteTrade, 1, target, cid, points)
    		end
    	end
    	return true
    end 

     

  • Server > Data > Creaturescripts > Creaturescripts.xml
      Mostrar conteúdo oculto
    
    
    <event type="tradeaccept" name="Points_Trade" event="script" value="Trade_Orbs.lua"/>

     

  • Server > Data > Creaturescripts > Scripts > Login.lua
      Mostrar conteúdo oculto
    
    
    registerCreatureEvent(cid, "Points_Trade")

     

  • Server > Data > Talkactions > Scripts > Points_Trade.lua
      Mostrar conteúdo oculto
    
    
    function onSay(cid, words, param, channel)
    
    local t = string.explode(param, ",")
    local target = getCreatureByName(t[1])
    local points = tonumber(t[2])
    
    if(param == '') then
    	return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.")
    end
    
    if (target ~= nil) and isPlayer(target) and not isPlayerGhost(target) then
    	if (points ~= nil) and (type(points) == 'number') and (points>0) then
    		if (getAccountPoints(cid) >= points) then
    			doTradeOrbs(cid, target, points)
    		else
    			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "You do not have enough points.")
    		end
    	else
    		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.")
    	end
    else
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.")
    end
    
    return true
    end

     

  • Server > Data > Talkactions > Talkactions.xml
      Mostrar conteúdo oculto
    
    
    <talkaction words="/tradepoints" log="yes" event="script" value="Trade_Points.lua"/>

     

Créditos:
Todo o sistema foi feito completamente por mim: Vítor Subhi.

Bom conteúdo, mas eu não sei mexer em source kkk

Link para o comentário
Compartilhar em outros sites

Em 14/04/2019 em 01:08, Matheusxnoia disse:

Ta dando pra um jogador trocar o points por outro points. N faz sentido kk tem como proibir? Ai so faz a troca se apenas um usar o comando ou sla

Resolvido, basta atualizar o creaturescript: Server > Data > Creaturescripts > Scripts >Trade_Orbs.lua
Obs.: Será possível iniciar o trade, porém não será possível finalizar a troca.

Link para o comentário
Compartilhar em outros sites

  • Yan Liima unpinned this tópico
  • 1 month later...

 

Eu tenho esse erro

[Error - CreatureScript Interface]
In a timer event called from:
data/creaturescripts/scripts/trade_points.lua:onTradeAccept
Description:
data/creaturescripts/scripts/trade_points.lua:2: attempt to compare nil with number
stack traceback:
        data/creaturescripts/scripts/trade_points.lua:2: in function <data/creaturescripts/scripts/trade_points.lua:1>

 

Link para o comentário
Compartilhar em outros sites

  • 1 year later...
Em 10/04/2019 em 16:06, VitorSubhi disse:


Apresentação:  Após ver que muitos usuários tinham interesse em um sistema de Trade de Points in-game resolvi trazer um sistema totalmente completo para vocês.

Funcionamento:

  • Player 1 após adquirir os Points, pode iniciar uma negociação com o Player 2 através do comando /tradepoints Player 2, Quantidade.
  • Será aberto uma Janela de Trade com o item referente aos Points.
  • Após ambos aceitarem a negociação será realizado a troca de Points pelo item requisitado.

 

Algumas Imagens:

  Mostrar conteúdo oculto

1.png.e90850158ce2ab4c8854e453eaba38fc.png2.png.81e32eb9f761397d221dac2630e895a3.png3.png.a9a2a41cdeebbe3c1383de71533c133e.png

 

 

 

Instalação:

  • Sources > Luascript.cpp
      Mostrar conteúdo oculto
    
    
    //doTradeOrbs(cid, target, points) 
    lua_register(m_luaState, "doTradeOrbs", LuaInterface::luaDoTradeOrbs);

     

  • Sources > Luascript.cpp
      Ocultar conteúdo
    
    
    int32_t LuaInterface::luaDoTradeOrbs(lua_State* L)
    {
        ScriptEnviroment* env = getEnv();
    
        int quantidade = popNumber(L);
    
        Player* target = env->getPlayerByUID(popNumber(L));
        Player* player = env->getPlayerByUID(popNumber(L));
        if(!player || !target)
        {
               errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));
               lua_pushboolean(L, false);
    	   return 1;
        }
    
    	Item* Orb = new Item(7722);;
    	Orb->addRef();
    
    	char buffer[150];
    	sprintf(buffer, "You see %d Collapser Orbs.", quantidade);
    	Orb->setSpecialDescription(buffer);
    
    	Orb->setSubType(1);
    
    	player->transferContainer.__addThing(NULL, Orb);
    	player->transferContainer.setParent(player);
    	if(!g_game.internalStartTrade(player, target, Orb))
    		Orb->onTradeEvent(ON_TRADE_CANCEL, player, NULL);
    
    	g_game.addMagicEffect(player->getPosition(), MAGIC_EFFECT_WRAPS_BLUE);
    	return false;
    }

     

  • Sources > Luascript.h
      Ocultar conteúdo
    
    
    static int32_t luaDoTradeOrbs(lua_State* L);

     

 

  •  Server > Data > Lib > 050-function
      Ocultar conteúdo
    
    
    function getAccountPoints(cid)
    	local res = db.getResult('select `premium_points` from accounts where name LIKE \''..getPlayerAccount(cid)..'\'')
    	return res:getDataInt("premium_points") < 0 and 0 or res:getDataInt("premium_points")
    end
    
    function doPlayerAddPoints(cid, quant)
    return db.query("UPDATE `accounts` SET `premium_points` = '".. getAccountPoints(cid) + quant .."' WHERE `name` LIKE '"..getPlayerAccount(cid).."'")
    end
    
    function doAccountRemovePoints(cid, count)
    	return db.query("UPDATE `accounts` SET `premium_points` = '".. getAccountPoints(cid) - count .."' WHERE `name` LIKE '"..getPlayerAccount(cid).."'")
    end

     

  • Server > Data > Creaturescripts > Scripts >Trade_Orbs.lua
      Ocultar conteúdo
    
    
    function CompleteTrade(fromplayer, toplayer, points)
    	if getPlayerItemCount(toplayer, 7722) >= 1 and getAccountPoints(fromplayer) >= points then
        	doAccountRemovePoints(fromplayer, points)
    		doPlayerRemoveItem(toplayer, 7722, 1)
    		doPlayerAddPoints(toplayer, points)
    		doPlayerSendTextMessage(toplayer, MESSAGE_STATUS_WARNING, "You have received ".. points .." Collapser Orbs.")
    		return true
    	end
    end
    
    function CollapserOrbs(item)
    	return tonumber(string.match(getItemDescriptions(item.uid).special, "You see (%w+) Collapser Orbs."))
    end
    
    function onTradeAccept(cid, target, item, targetItem)
    	if isPlayer(cid) and isPlayer(target) then
        	if (item.itemid == 7722 and targetItem.itemid == 7722) then
    			doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "You cannot trade points for points.")
    			doPlayerSendTextMessage(target, MESSAGE_STATUS_WARNING, "You cannot trade points for points.")
    			return false
          	end
    		if item.itemid == 7722 then
    			local points = CollapserOrbs(item)
    			addEvent(CompleteTrade, 1, cid, target, points)
    		end
    		if targetItem.itemid == 7722 then
    			local points = CollapserOrbs(targetItem)
    			addEvent(CompleteTrade, 1, target, cid, points)
    		end
    	end
    	return true
    end 

     

  • Server > Data > Creaturescripts > Creaturescripts.xml
      Ocultar conteúdo
    
    
    <event type="tradeaccept" name="Points_Trade" event="script" value="Trade_Orbs.lua"/>

     

  • Server > Data > Creaturescripts > Scripts > Login.lua
      Ocultar conteúdo
    
    
    registerCreatureEvent(cid, "Points_Trade")

     

  • Server > Data > Talkactions > Scripts > Points_Trade.lua
      Ocultar conteúdo
    
    
    function onSay(cid, words, param, channel)
    
    local t = string.explode(param, ",")
    local target = getCreatureByName(t[1])
    local points = tonumber(t[2])
    
    if(param == '') then
    	return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.")
    end
    
    if (target ~= nil and target ~= cid) and isPlayer(target) and not isPlayerGhost(target) then
    	if (points ~= nil) and (type(points) == 'number') and (points>0) then
    		if (getAccountPoints(cid) >= points) then
    			doTradeOrbs(cid, target, points)
    		else
    			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "You do not have enough points.")
    		end
    	else
    		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.")
    	end
    else
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.")
    end
    
    return true
    end

     

  • Server > Data > Talkactions > Talkactions.xml
      Ocultar conteúdo
    
    
    <talkaction words="/tradepoints" log="yes" event="script" value="Trade_Points.lua"/>

     

Créditos:
Todo o sistema foi feito completamente por mim: Vítor Subhi.

Instalei tudo mas quando o player a recebe o papel ele nao recebe os ptss no site nem remove pts do player B que enviOU....

 

alias nem explica onde tem que colocar, entao copiei o comecinho e coloquei na coluna abaixo do fechamento dos codigos ~iguais, compilei com sucesso ele so nao envia e remove os ptss... estranho!!!  sem erros no console tbm -- tfs 0.4, tibia 8.6

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

@Help, plx, alguem me ajuda com esse erro:

Spoiler

Instalei tudo mas quando o player a recebe o papel ele nao recebe os ptss no site nem remove pts do player B que enviou....

 

compilei com sucesso ele so nao envia e remove os ptss... estranho!!!  sem erros no console tbm -- tfs 0.4, tibia 8.6

 

Link para o comentário
Compartilhar em outros sites

  • Quem Está Navegando   0 membros estão online

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