VitorSubhi 8 Postado Abril 10, 2019 Share Postado Abril 10, 2019 (editado) 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 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 Abril 15, 2019 por VitorSubhi Tratamento de Erros! Yan Liima, gabrielzika, WooX e 2 outros reagiu a isso 5 Link para o comentário Compartilhar em outros sites More sharing options...
ITALOx 10 Postado Abril 10, 2019 Share Postado Abril 10, 2019 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 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 More sharing options...
Diretor Yan Liima 577 Postado Abril 10, 2019 Diretor Share Postado Abril 10, 2019 Ótimo sistema Vitor, grande amigo e programador. Continue trazendo mais sistemas assim para comunidade, REP + Link para o comentário Compartilhar em outros sites More sharing options...
Matheusxnoia 0 Postado Abril 14, 2019 Share Postado Abril 14, 2019 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 Link para o comentário Compartilhar em outros sites More sharing options...
VitorSubhi 8 Postado Abril 15, 2019 Autor Share Postado Abril 15, 2019 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 More sharing options...
Narzonia 0 Postado Maio 31, 2019 Share Postado Maio 31, 2019 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 More sharing options...
jondrops 1 Postado Agosto 16, 2020 Share Postado Agosto 16, 2020 (editado) 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 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 Agosto 16, 2020 por jondrops Link para o comentário Compartilhar em outros sites More sharing options...
jondrops 1 Postado Agosto 17, 2020 Share Postado Agosto 17, 2020 @bump Heelp Link para o comentário Compartilhar em outros sites More sharing options...
jondrops 1 Postado Agosto 18, 2020 Share Postado Agosto 18, 2020 @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 More sharing options...
Posts Recomendados