Ir para conteúdo

VitorSubhi

Campones
  • Total de itens

    4
  • Registro em

  • Última visita

  • Dias Ganhos

    2

Posts postados por VitorSubhi

  1. 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.

  2. 1.0 - Funcionamento:
    Explicação:
    Este talkaction, apenas faz a execução de um comando em lua, direto do game.
    Exemplos:
    image.png.0d5ca137103bed05cd29e16e73f31d0f.png
    image.png.2830ed67a71bb45a3a146d6a5bcec587.png
    image.png.743ce14ce8c7cbb2e7c45d7bbf6ec38e.png
    image.png.2e9f2d9af92f09388521437dff7956d6.png

    2.0 - Como Utilizar:
    Executando apenas uma função: 
    /lua Função('variavél', 'variável', 'variável')
    Executando várias funções simultâneas: /lua Função('variável', variável'), Função('variável', variável', variável'), ...

    3.0 - Instalação:

    • Talkactions.xml
      Spoiler
      
      <talkaction words="/lua" access="5" event="script" value="lua.lua"

       

    • Data/Talkactions/scripts/lua.lua
      Spoiler
      
      function resolveFunction (cid, func)
          temp_var = {}
          fn = string.gsub(func, "%b()", "")
          _, count = string.gsub(func, "'([(%w%s_]+)'", function (var)
              if (tonumber(var) ~= nil) then
                  table.insert(temp_var, tonumber(var))
              else
                  table.insert(temp_var, var)
              end
              end)
          if (count == 2) then
              doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, fn .. "("..temp_var[1]..", ".. temp_var[2]..")")
              if (temp_var[1] == "cid") then
                  temp_var[1] = cid
              else
                  temp_var[1] = getPlayerByNameWildcard(temp_var[1])
              end
              _G[fn](temp_var[1], temp_var[2])        
          elseif (count == 3) then
              doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, fn .. "("..temp_var[1]..", ".. temp_var[2]..", ".. temp_var[3] ..")")
              if (temp_var[1] == "cid") then
                  temp_var[1] = cid
              else
                  temp_var[1] = getPlayerByNameWildcard(temp_var[1])
              end
              _G[fn](temp_var[1], temp_var[2], temp_var[3])    
          elseif (count >= 4 or count < 2) then
              doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "Not implemented")
          end
      end
      function onSay(cid, words, param, channel)
          funktions = {}
          _, count = string.gsub(param, "((%w+)%b())", function (func) table.insert(funktions, func) end)
          for _, i in pairs (funktions) do
              resolveFunction(cid, i)
          end
          return true
      end

       

      OBS.: Na versão atual, ainda não se é possível utilizar uma função dentro de outra, e nem funções de retorno (getters)

      Créditos: Desenvolvido inteiramente por mim (Vítor Subhi).


  3. 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.

  • Quem Está Navegando   0 membros estão online

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