Advertisement
Guest User

Characters Market System

a guest
Oct 27th, 2012
591
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.38 KB | None | 0 0
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <mod name="Characters Market System" version="1.0" author="LuckOake" contact="none" enabled="yes">
  3. ------------------------------------------------------------------------------------
  4. <config name="market"><![CDATA[
  5. price = 27112
  6. owner = 27113
  7. level = 30 -- Level mínimo que o character deve ter para ser vendido
  8. min_price = 100 -- Preço mínimo de um character
  9. max_price = 1000000 -- Preço máximo de um character
  10.  
  11. function doTransferCharacter(cid, accId)
  12.     return db.executeQuery("UPDATE `players` SET `account_id` = "..accId.." WHERE `id` = "..getPlayerGUIDByName(cid).."")
  13. end
  14.  
  15. function doOfflinePlayerAddMoney(guid, money)
  16.     return db.executeQuery("UPDATE `players` SET `balance` = `balance` + '"..money.."' WHERE `id` = '"..getPlayerGUIDByName(guid).."';")
  17. end
  18.  
  19. function setOfflinePlayerStorageValue(name, key, value)
  20.     local result = db.getResult("SELECT * FROM `player_storage` WHERE `player_id` = ".. getPlayerGUIDByName(name) .." AND `key` = ".. key ..";")
  21.     if result:getID() == -1 then
  22.         return db.executeQuery("INSERT INTO `player_storage` (`player_id`, `key`, `value`) VALUES (".. getPlayerGUIDByName(name) ..", ".. key ..", ".. value ..");")
  23.     else
  24.         result:free()
  25.         return db.executeQuery("UPDATE `player_storage` SET `value` = ".. value .." WHERE `player_id` = ".. getPlayerGUIDByName(name) .." AND `key` = ".. key ..";")
  26.     end
  27. end
  28.  
  29. function getOfflinePlayerStorageValue(name, key)
  30.     local result, ret = db.getResult("SELECT `value` FROM `player_storage` WHERE `player_id` = '".. getPlayerGUIDByName(name) .."' AND `key` = ".. key ..";")
  31.     if result:getID() == -1 then
  32.         return nil
  33.     end
  34.     ret = result:getDataInt("value")
  35.     result:free()
  36.     return ret
  37. end
  38.  
  39. function getOfflinePlayerValue(name, value)
  40.     local result, ret = db.getResult("SELECT `"..value.."` FROM `players` WHERE `id` = "..getPlayerGUIDByName(name)..";")
  41.     ret = result:getDataInt(value)
  42.     result:free()
  43.     return ret
  44. end
  45.  
  46. function isCharacterForSale(name)
  47.     if not getOfflinePlayerStorageValue(name, price) or getOfflinePlayerStorageValue(name, price) < 1 then
  48.     return false
  49.     else
  50.     return true
  51.     end
  52. end
  53. ]]></config>
  54. ------------------------------------------------------------------------------------
  55. <talkaction words="!character" event="buffer"><![CDATA[
  56. domodlib('market')
  57.     local t = string.explode(param, ",")
  58.    
  59.     if t[1] == "sell" then
  60.         if not t[3] or not tonumber(t[3]) or t[4] or tonumber(t[2]) then
  61.             doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Incorrect Params. Specify the character name and the price.") return true
  62.         elseif getPlayerAccountId(cid) ~= getAccountIdByName(t[2]) then
  63.             doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "This is not your character.") return true
  64.         elseif isCharacterForSale(t[2]) then
  65.             doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "This character is already for sale.") return true
  66.         elseif getPlayerGUIDByName(t[2]) == getPlayerGUID(cid) then
  67.             doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You cannot sell yourself.") return true
  68.         elseif getPlayerByName(t[2]) then
  69.             doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "The character must be offline to be sold.") return true
  70.         elseif getOfflinePlayerValue(t[2], "level") < level then
  71.             doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Your character can't be sold until it has level "..level..".") return true
  72.         elseif tonumber(t[3]) < min_price then
  73.             doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Sorry, but the minimum price for selling a character is "..min_price..".") return true
  74.         elseif tonumber(t[3]) > max_price then
  75.             doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Sorry, but the maximum price for selling a character is "..max_price..".") return true
  76.         end
  77.    
  78.             setOfflinePlayerStorageValue(t[2], price, t[3])
  79.             setOfflinePlayerStorageValue(t[2], owner, getPlayerGUID(cid))
  80.             doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Your character "'..t[2]..'" is now for sale for the price of "'..t[3]..'" gold coins.')
  81.     elseif t[1] == "buy" then
  82.         if not t[2] then
  83.             doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Incorrect Params. Specify the character name.") return true
  84.         elseif not playerExists(t[2]) then
  85.             doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "This character doesn't exist.") return true
  86.         elseif getPlayerAccountId(cid) == getAccountIdByName(t[2]) then
  87.             doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You can't buy your own character.") return true
  88.         elseif not isCharacterForSale(t[2]) then
  89.             doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "This character is not for sale.") return true
  90.         elseif not doPlayerRemoveMoney(cid, getOfflinePlayerStorageValue(t[2], price)) then
  91.             doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Not enough money. This character's price is "..getOfflinePlayerStorageValue(t[2], price).." gold coins.") return true
  92.         end
  93.            
  94.         if not getPlayerByGUID(getOfflinePlayerStorageValue(t[2], owner)) then
  95.             doOfflinePlayerAddMoney(getPlayerNameByGUID(getOfflinePlayerStorageValue(t[2], owner)), getOfflinePlayerStorageValue(t[2], price))
  96.             setOfflinePlayerStorageValue(getPlayerNameByGUID(getOfflinePlayerStorageValue(t[2], owner)), 41792, getPlayerGUIDByName(t[2]))
  97.         else
  98.             doPlayerAddMoney(getPlayerByGUID(getOfflinePlayerStorageValue(t[2], owner)), getOfflinePlayerStorageValue(t[2], price))
  99.             doPlayerSendTextMessage(getPlayerByGUID(getOfflinePlayerStorageValue(t[2], owner)), MESSAGE_STATUS_CONSOLE_BLUE, 'Your character "'..t[2]..'" has been sold for the price of '..getOfflinePlayerStorageValue(t[2], price)..' gold coins.')
  100.         end
  101.             doTransferCharacter(t[2], getPlayerAccountId(cid))
  102.             doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You bought the character "'..t[2]..'" for the price of '..getOfflinePlayerStorageValue(t[2], price)..' gold coins.')
  103.             setOfflinePlayerStorageValue(t[2], owner, -1)
  104.             setOfflinePlayerStorageValue(t[2], price, -1) return true
  105.     elseif t[1] == "remove" then
  106.         if not t[2] then
  107.             doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Incorrect Params. Specify the character name.") return true
  108.         elseif getPlayerAccountId(cid) ~= getAccountIdByName(t[2]) then
  109.             doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "This is not your character.") return true
  110.         elseif not isCharacterForSale(t[2]) then
  111.             doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "This character is not for sale.") return true
  112.         end
  113.        
  114.             setOfflinePlayerStorageValue(t[2], price, -1)
  115.             doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You removed the character "'..t[2]..'" from the Characters Market.') return true
  116.     elseif t[1] == "list" then
  117.         local result = db.getResult("SELECT `name` FROM `players`")
  118.         if result:getID() == -1 then
  119.             return true
  120.         end
  121.         local msg = "Characters for Sale:\n\n"
  122.         while true do
  123.             local name = result:getDataString("name")
  124.             if isCharacterForSale(name) then
  125.             local sex = getOfflinePlayerValue(name, "sex") == 1 and "Male" or "Female"
  126.                 msg = ""..msg.." - ".. name .." (Level: "..getOfflinePlayerValue(name, "level").." / Vocation: "..getVocationInfo(getOfflinePlayerValue(name, "vocation")).name.." / Sex: "..sex.." / Owner: "..getPlayerNameByGUID(getOfflinePlayerStorageValue(name, owner))..") [Price: "..getOfflinePlayerStorageValue(name, price).."] \n"
  127.             end
  128.             if not result:next() then
  129.                 break
  130.             end
  131.         end
  132.             doPlayerPopupFYI(cid, msg) return true
  133.     elseif not t[1] or t[1] ~= "buy" or t[1] ~= "sell" or t[1] ~= "remove" or t[1] ~= "list" then
  134.         doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Incorrect params. You can only 'buy' or 'sell' a character, 'remove' it from the Characters Market or see the 'list' of characters for sale.") return true
  135.     end
  136. return true
  137. ]]></talkaction>
  138. ------------------------------------------------------------------------------------
  139. <event type="login" name="MarketLogin" event="script"><![CDATA[
  140. function onLogin(cid)
  141. domodlib('market')
  142.     if getPlayerStorageValue(cid, price) > 0 then return false
  143.     elseif getPlayerStorageValue(cid, 41792) ~= -1 then
  144.         doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You sold the character "..getPlayerNameByGUID(getPlayerStorageValue(cid, 41792))..". The money is in your bank account.")
  145.         setPlayerStorageValue(cid, 41792, -1)
  146.     end
  147. return true
  148. end
  149. ]]></event>
  150. </mod>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement