Ir para conteúdo

[Ajuda] Iniciação Para Sistema Anti-Clone


icaro2512

Posts Recomendados

Pessoal estou desenvolvendo um sistema que postarei aqui no Xtibia futuramente, mais pra tudo da certo preciso antes de uma pequena ajuda de vocês, eu andei mechendo no shop.lua e já consegui arrumar algumas coisas,



Que quando o player compra o Item ele já vem modificado e com a descrição e actionID modificados.

O que acontece agora é que quando o player compra um item,vem dois.

Da seguinte forma,

vem um dentro da BAG e vem modificado

 

Exemplo : 16:07 You see an oceanborn leviathan armor (Arm:15, shielding +1, protection energy -5%, ice +5%).

It can only be wielded properly by knights of level 90 or higher.

It weighs 100.00 oz.

This item can only be used by the player Dragon Lordy!

 

E outro que vem fora da BAG e sem estar modificada

Exemplo: 16:07 You see an oceanborn leviathan armor (Arm:15, shielding +1, protection energy -5%, ice +5%).

It can only be wielded properly by knights of level 90 or higher.

It weighs 100.00 oz.

 

Abaixo segue os scripts.



Aqui está a parte que eu modifiquei no script:

                   if received_item == RETURNVALUE_NOERROR then
		local bag = doPlayerAddItem(cid, 1987, 1)
	        local item = doAddContainerItem(bag, itemtogive_id,itemtogive_count)
	        local action_player = getPlayerGUID(cid)+10000						
                       doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received '.. add_item_name ..' from Tibia the War shop.')
                       doItemSetAttribute(item,"description","This item can only be used by the player ".. getPlayerName(cid) .."!")
                       doItemSetAttribute(item,"aid",action_player)
                       db.executeQuery("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";")
                       db.executeQuery("UPDATE `z_shop_history_item` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE id = " .. id .. ";")
		doPlayerSave(cid)
                   else
                       doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from Tibia the War shop is waiting for you. Please make place for this item in your backpack/hands and wait about '.. SQL_interval ..' seconds to get it.')
                   end

 

Aqui está o script completo:

 

 

-- ### CONFIG ###
-- message send to player by script "type" (types you can check in "global.lua")
SHOP_MSG_TYPE = 19
-- time (in seconds) between connections to SQL database by shop script
SQL_interval = 30
-- ### END OF CONFIG ###
function onThink(interval, lastExecution)
   local result_plr = db.getResult("SELECT * FROM z_ots_comunication WHERE `type` = 'login';")
   if(result_plr:getID() ~= -1) then
       while(true) do
           id = tonumber(result_plr:getDataInt("id"))
           action = tostring(result_plr:getDataString("action"))
           delete = tonumber(result_plr:getDataInt("delete_it"))
           cid = getCreatureByName(tostring(result_plr:getDataString("name")))
           if isPlayer(cid) == TRUE then
               local itemtogive_id = tonumber(result_plr:getDataInt("param1"))
               local itemtogive_count = tonumber(result_plr:getDataInt("param2"))
               local container_id = tonumber(result_plr:getDataInt("param3"))
               local container_count = tonumber(result_plr:getDataInt("param4"))
               local add_item_type = tostring(result_plr:getDataString("param5"))
               local add_item_name = tostring(result_plr:getDataString("param6"))
               local received_item = 0
               local full_weight = 0
               if add_item_type == 'container' then
                   container_weight = getItemWeightById(container_id, 1)
                   if isItemRune(itemtogive_id) == TRUE then
                       items_weight = container_count * getItemWeightById(itemtogive_id, 1)
                   else
                       items_weight = container_count * getItemWeightById(itemtogive_id, itemtogive_count)
                   end
                   full_weight = items_weight + container_weight
               else
                   full_weight = getItemWeightById(itemtogive_id, itemtogive_count)
                   if isItemRune(itemtogive_id) == TRUE then
                       full_weight = getItemWeightById(itemtogive_id, 1)
                   else
                       full_weight = getItemWeightById(itemtogive_id, itemtogive_count)
                   end
               end
               local free_cap = getPlayerFreeCap(cid)
               if full_weight <= free_cap then
                   if add_item_type == 'container' then
                       local new_container = doCreateItemEx(container_id, 1)
                       local iter = 0
                       while iter ~= container_count do
                           doAddContainerItem(new_container, itemtogive_id, itemtogive_count)
                           iter = iter + 1
                       end
                       received_item = doPlayerAddItemEx(cid, new_container)
                   else
                       local new_item = doCreateItemEx(itemtogive_id, itemtogive_count)
                       received_item = doPlayerAddItemEx(cid, new_item)
                   end
                   if received_item == RETURNVALUE_NOERROR then
		local bag = doPlayerAddItem(cid, 1987, 1)
	        local item = doAddContainerItem(bag, itemtogive_id,itemtogive_count)
	        local action_player = getPlayerGUID(cid)+10000						
                       doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received '.. add_item_name ..' from Tibia the War shop.')
                       doItemSetAttribute(item,"description","This item can only be used by the player ".. getPlayerName(cid) .."!")
                       doItemSetAttribute(item,"aid",action_player)
                       db.executeQuery("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";")
                       db.executeQuery("UPDATE `z_shop_history_item` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE id = " .. id .. ";")
		doPlayerSave(cid)
                   else
                       doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from Tibia the War shop is waiting for you. Please make place for this item in your backpack/hands and wait about '.. SQL_interval ..' seconds to get it.')
                   end
               else
                   doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from Tibia the War shop is waiting for you. It weight is '.. full_weight ..' oz., you have only '.. free_cap ..' oz. free capacity. Put some items in depot and wait about '.. SQL_interval ..' seconds to get it.')
               end
           end
           if not(result_plr:next()) then
               break
           end
       end
       result_plr:free()
   end
   return TRUE
end

 

Abaixo está o SCRIPT original, antes de começar a mecher!

 

-- ### CONFIG ###
-- message send to player by script "type" (types you can check in "global.lua")
SHOP_MSG_TYPE = 19
-- time (in seconds) between connections to SQL database by shop script
SQL_interval = 30
-- ### END OF CONFIG ###
function onThink(interval, lastExecution)
   local result_plr = db.getResult("SELECT * FROM z_ots_comunication WHERE `type` = 'login';")
   if(result_plr:getID() ~= -1) then
       while(true) do
           id = tonumber(result_plr:getDataInt("id"))
           action = tostring(result_plr:getDataString("action"))
           delete = tonumber(result_plr:getDataInt("delete_it"))
           cid = getCreatureByName(tostring(result_plr:getDataString("name")))
           if isPlayer(cid) == TRUE then
               local itemtogive_id = tonumber(result_plr:getDataInt("param1"))
               local itemtogive_count = tonumber(result_plr:getDataInt("param2"))
               local container_id = tonumber(result_plr:getDataInt("param3"))
               local container_count = tonumber(result_plr:getDataInt("param4"))
               local add_item_type = tostring(result_plr:getDataString("param5"))
               local add_item_name = tostring(result_plr:getDataString("param6"))
               local received_item = 0
               local full_weight = 0
               if add_item_type == 'container' then
                   container_weight = getItemWeightById(container_id, 1)
                   if isItemRune(itemtogive_id) == TRUE then
                       items_weight = container_count * getItemWeightById(itemtogive_id, 1)
                   else
                       items_weight = container_count * getItemWeightById(itemtogive_id, itemtogive_count)
                   end
                   full_weight = items_weight + container_weight
               else
                   full_weight = getItemWeightById(itemtogive_id, itemtogive_count)
                   if isItemRune(itemtogive_id) == TRUE then
                       full_weight = getItemWeightById(itemtogive_id, 1)
                   else
                       full_weight = getItemWeightById(itemtogive_id, itemtogive_count)
                   end
               end
               local free_cap = getPlayerFreeCap(cid)
               if full_weight <= free_cap then
                   if add_item_type == 'container' then
                       local new_container = doCreateItemEx(container_id, 1)
                       local iter = 0
                       while iter ~= container_count do
                           doAddContainerItem(new_container, itemtogive_id, itemtogive_count)
                           iter = iter + 1
                       end
                       received_item = doPlayerAddItemEx(cid, new_container)
                   else
                       local new_item = doCreateItemEx(itemtogive_id, itemtogive_count)
                       received_item = doPlayerAddItemEx(cid, new_item)
                   end
                   if received_item == RETURNVALUE_NOERROR then
                       db.executeQuery("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";")
                       db.executeQuery("UPDATE `z_shop_history_item` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE id = " .. id .. ";")
					doPlayerSave(cid)
                   else
                       doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from Tibia the War shop is waiting for you. Please make place for this item in your backpack/hands and wait about '.. SQL_interval ..' seconds to get it.')
                   end
               else
                   doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from Tibia the War shop is waiting for you. It weight is '.. full_weight ..' oz., you have only '.. free_cap ..' oz. free capacity. Put some items in depot and wait about '.. SQL_interval ..' seconds to get it.')
               end
           end
           if not(result_plr:next()) then
               break
           end
       end
       result_plr:free()
   end
   return TRUE
end

 

Se puderem me ajudar ficaria muito grato, pois só falta isso para deixar o script todo funcionando!

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

repare...

o q tiver dentro disso

if received_item == RETURNVALUE_NOERROR then

so irá acontecer se o player receber o item

 

tive uma ideia !

tente isso

                    if received_item == RETURNVALUE_NOERROR then
	        local item = getPlayerItemById(cid, TRUE,itemtogive_id).itemid
                       local action_player = getPlayerGUID(cid)+10000                                          
                       doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received '.. add_item_name ..' from Tibia the War shop.')
                       doItemSetAttribute(item,"description","This item can only be used by the player ".. getPlayerName(cid) .."!")
                       doItemSetAttribute(item,"aid",action_player)
                       db.executeQuery("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";")
                       db.executeQuery("UPDATE `z_shop_history_item` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE id = " .. id .. ";")
                       doPlayerSave(cid)
                   else
                       doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from Tibia the War shop is waiting for you. Please make place for this item in your backpack/hands and wait about '.. SQL_interval ..' seconds to get it.')
                   end

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

Poste como estava antes para poder comparar...

=D

 

Pronto, já está postado como estava antes!

 

 

repare...

o q tiver dentro disso

if received_item == RETURNVALUE_NOERROR then

so irá acontecer se o player receber o item

 

tive uma ideia !

tente isso

                    if received_item == RETURNVALUE_NOERROR then
	        local item = getPlayerItemById(cid, TRUE,itemtogive_id).itemid
                       local action_player = getPlayerGUID(cid)+10000                                          
                       doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received '.. add_item_name ..' from Tibia the War shop.')
                       doItemSetAttribute(item,"description","This item can only be used by the player ".. getPlayerName(cid) .."!")
                       doItemSetAttribute(item,"aid",action_player)
                       db.executeQuery("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";")
                       db.executeQuery("UPDATE `z_shop_history_item` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE id = " .. id .. ";")
                       doPlayerSave(cid)
                   else
                       doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from Tibia the War shop is waiting for you. Please make place for this item in your backpack/hands and wait about '.. SQL_interval ..' seconds to get it.')
                   end

 

Fox dessa forma deu erro, eu só recebi o item que não estava editado o que vem fora da BP e já o editado que era pra vir dentro da bag não veio, somente a bag pura e no distro deu o erro de Item not Found

Link para o comentário
Compartilhar em outros sites

tente isso tb

 if add_item_type == 'container' then
                       local new_container = doCreateItemEx(container_id, 1)
                       local iter = 0
                       received_item = doPlayerAddItemEx(cid, new_container)
                       while iter ~= container_count do
                           doAddContainerItem(new_container, itemtogive_id, itemtogive_count)
                           iter = iter + 1
                       end
                   else
                       received_item = doPlayerAddItemEx(cid, new_item)
                       local new_item = doCreateItemEx(itemtogive_id, itemtogive_count)
                   end

Link para o comentário
Compartilhar em outros sites

  • 2 months later...
  • 10 months later...
×
×
  • Criar Novo...