• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Solved [TFS 1.0] Shop System Gesior 2012

eduardojuniosm

Full Stack Web Developer
Joined
Dec 16, 2013
Messages
99
Reaction score
35
Location
Brazil
The shop system is operating normally only when the player buys an item the item will not go to him, is the script that I put in globalevents does not work, someone has a login function that check for when you have an item on z_ots_communication table and if you have, add the item in the bag of the player? Thank you in advance!
 
Yes they are removed and a row is added in table z_ots_communication! The problem is not with Gesior but with TFS 1.0, as said above I need a script to verify z_ots_communication table!
 
I put this script in the folder: /data/creaturescripts/scripts/shop.lua
Code:
function onLogin(cid)
   local selectItem = db.executeQuery("SELECT * FROM z_ots_comunication WHERE 'type' = 'login'")
   if(selectItem:getID() >= 1) then
     while(true) do
     id = tonumber(selectItem:getDataInt("id"))
     action = tostring(selectItem:getDataString("action"))
     delete = tonumber(selectItem:getDataInt("delete_it"))
     cid = getCreatureByName(tostring(selectItem:getDataString("name")))
     if(isPlayer(cid) == true) then
     local itemtogive_id = tonumber(selectItem:getDataInt("param1"))
     local itemtogive_count = tonumber(selectItem:getDataInt("param2"))
     local container_id = tonumber(selectItem:getDataInt("param3"))
     local container_count = tonumber(selectItem:getDataInt("param4"))
     local add_item_type = tostring(selectItem:getDataString("param5"))
     local add_item_name = tostring(selectItem: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
     doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received >> '.. add_item_name ..' << from TTQuest shop.')
     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 .. ";")
     else
     doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from TTQuest 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 TTQuest 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(selectItem:next()) then
     break
     end
     end
   end
end
And I add this line in the file: /data/creaturescripts/creaturescripts.xml
Code:
<event type="login" name="Shop" script="shop.lua"/>
But now returned this error on login:
Code:
Lua Script Error: [CreatureScript Interface]
data/creaturescripts/scripts/shop.lua:onLogin
data/creaturescripts/scripts/shop.lua:2: attempt to call field 'executeQuery' (a nil value)
stack traceback:
   [C]: in function 'executeQuery'
   data/creaturescripts/scripts/shop.lua:2: in function <data/creaturescripts/scripts/shop.lua:1>
 
try this

Code:
-- ### CONFIG ###
-- message send to player by script "type" (types you can check in "global.lua")
SHOP_MSG_TYPE = 18
-- 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.storeQuery("SELECT * FROM z_ots_comunication")
  if(result_plr ~= false) then
  repeat
  local id = tonumber(result.getDataInt(result_plr, "id"))
  local action = tostring(result.getDataString(result_plr, "action"))
  local delete = tonumber(result.getDataInt(result_plr, "delete_it"))
  local cid = getPlayerByName(tostring(result.getDataString(result_plr, "name")))
  if(cid) then
  local itemtogive_id = tonumber(result.getDataInt(result_plr, "param1"))
  local itemtogive_count = tonumber(result.getDataInt(result_plr, "param2"))
  local container_id = tonumber(result.getDataInt(result_plr, "param3"))
  local container_count = tonumber(result.getDataInt(result_plr, "param4"))
  local add_item_type = tostring(result.getDataString(result_plr, "param5"))
  local add_item_name = tostring(result.getDataString(result_plr, "param6"))
  local received_item = 0
  local full_weight = 0
  if(add_item_type == 'container') then
  container_weight = getItemWeight(container_id, 1)
  if(isItemRune(itemtogive_id)) then
  items_weight = container_count * getItemWeight(itemtogive_id, 1)
  else
  items_weight = container_count * getItemWeight(itemtogive_id, itemtogive_count)
  end
  full_weight = items_weight + container_weight
  else
  full_weight = getItemWeight(itemtogive_id, itemtogive_count)
  if(isItemRune(itemtogive_id)) then
  full_weight = getItemWeight(itemtogive_id, 1)
  else
  full_weight = getItemWeight(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(type(received_item) == "number" and received_item == RETURNVALUE_NOERROR) then
  doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received >> '.. add_item_name ..' << from OTS shop.')
  db.query("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";")
  db.query("UPDATE `z_shop_history_item` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE id = " .. id .. ";")
  else
  doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from OTS 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 OTS 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
  until not result.next(result_plr)
  result.free(result_plr)
  end
  return true
end
 
Back
Top