lepiigor 16 #1 Posted February 5, 2021 Olá Quero ajudar com um comando em revscript Hoje trago um código que vai permitir que você execute o comando !Shop no jogo para receber os itens, para quem usa Znote Account, pois o código fornecido não funciona, mas este funciona perfeitamente com OtservBR tfs 1.3 doc: otservbr\data\scripts\talkactions\znoteshop.lua chame o documento znoteshop.lua Achei importante compartilhar com vocês, porque ninguém postou lá em nenhum fórum, exceto eu no otland, e muitos não conseguem fazer funcionar! A modificação feita é a palavra adicionada na frente de onUse, linha 81 de gameclient excluída e adicionada o znoteShop:separator(" ") Eles estão faltando no github znote e as alterações não foram feitas, eu relatei, mas enquanto isso aqui está o código! Spoiler local znoteShop = TalkAction ("!Shop") function znoteShop.onSay(cid, words, param) local storage = 54073 -- Make sure to select non-used storage. This is used to prevent SQL load attacks. local cooldown = 15 -- in seconds. local player = Player(cid) if player:getStorageValue(storage) <= os.time() then player:setStorageValue(storage, os.time() + cooldown) local type_desc = { "itemids", "pending premium (skip)", "pending gender change (skip)", "pending character name change (skip)", "Outfit and addons", "Mounts", "Instant house purchase" } print("Player: " .. player:getName() .. " triggered !shop talkaction.") -- Create the query local orderQuery = db.storeQuery("SELECT `id`, `type`, `itemid`, `count` FROM `znote_shop_orders` WHERE `account_id` = " .. player:getAccountId() .. ";") local served = false -- Detect if we got any results if orderQuery ~= false then repeat -- Fetch order values local q_id = result.getNumber(orderQuery, "id") local q_type = result.getNumber(orderQuery, "type") local q_itemid = result.getNumber(orderQuery, "itemid") local q_count = result.getNumber(orderQuery, "count") local description = "Unknown or custom type" if type_desc[q_type] ~= nil then description = type_desc[q_type] end print("Processing type "..q_type..": ".. description) -- ORDER TYPE 1 (Regular item shop products) if q_type == 1 then served = true -- Get weight if player:getFreeCapacity() >= ItemType(q_itemid):getWeight(q_count) then db.query("DELETE FROM `znote_shop_orders` WHERE `id` = " .. q_id .. ";") player:addItem(q_itemid, q_count) player:sendTextMessage(MESSAGE_INFO_DESCR, "Congratulations! You have received " .. q_count .. " x " .. ItemType(q_itemid):getName() .. "!") else player:sendTextMessage(MESSAGE_STATUS_WARNING, "Need more CAP!") end end -- ORDER TYPE 5 (Outfit and addon) if q_type == 5 then served = true local itemid = q_itemid local outfits = {} if itemid > 1000 then local first = math.floor(itemid/1000) table.insert(outfits, first) itemid = itemid - (first * 1000) end table.insert(outfits, itemid) for _, outfitId in pairs(outfits) do -- Make sure player don't already have this outfit and addon if not player:hasOutfit(outfitId, q_count) then db.query("DELETE FROM `znote_shop_orders` WHERE `id` = " .. q_id .. ";") player:addOutfit(outfitId) player:addOutfitAddon(outfitId, q_count) player:sendTextMessage(MESSAGE_INFO_DESCR, "Congratulations! You have received a new outfit!") else player:sendTextMessage(MESSAGE_STATUS_WARNING, "You already have this outfit and addon!") end end end -- ORDER TYPE 6 (Mounts) if q_type == 6 then served = true -- Make sure player don't already have this outfit and addon if not player:hasMount(q_itemid) then db.query("DELETE FROM `znote_shop_orders` WHERE `id` = " .. q_id .. ";") player:addMount(q_itemid) player:sendTextMessage(MESSAGE_INFO_DESCR, "Congratulations! You have received a new mount!") else player:sendTextMessage(MESSAGE_STATUS_WARNING, "You already have this mount!") end end -- ORDER TYPE 7 (Direct house purchase) if orderType == 7 then served = true local house = House(orderItemId) -- Logged in player is not necessarily the player that bough the house. So we need to load player from db. local buyerQuery = db.storeQuery("SELECT `name` FROM `players` WHERE `id` = "..orderCount.." LIMIT 1") if buyerQuery ~= false then local buyerName = result.getString(buyerQuery, "name") result.free(buyerQuery) if house then db.query("DELETE FROM `znote_shop_orders` WHERE `id` = " .. orderId .. ";") house:setOwnerGuid(orderCount) player:sendTextMessage(MESSAGE_INFO_DESCR, "You have successfully bought the house "..house:getName().." on "..buyerName..", be sure to have the money for the rent in the bank.") print("Process complete. [".. buyerName .."] has received house: ["..house:getName().."]") end end end -- Add custom order types here -- Type 1 is for itemids (Already coded here) -- Type 2 is for premium (Coded on web) -- Type 3 is for gender change (Coded on web) -- Type 4 is for character name change (Coded on web) -- Type 5 is for character outfit and addon (Already coded here) -- Type 6 is for mounts (Already coded here) -- Type 7 is for Instant house purchase (Already coded here) -- So use type 8+ for custom stuff, like etc packages. -- if q_type == 8 then -- end until not result.next(orderQuery) result.free(orderQuery) if not served then player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You have no orders to process in-game.") end else player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You have no orders.") end else player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Can only be executed once every " .. cooldown .. " seconds. Remaining cooldown: " .. player:getStorageValue(storage) - os.time()) end return false end znoteShop:separator(" ") znoteShop:register() 1 Majesty reacted to this Share this post Link to post
Majesty 1,755 #2 Posted February 5, 2021 Muito obrigado pela sua contribuição, seu conteúdo foi aprovado!Nós do OTServ Brasil agradecemos, seu conteúdo com certeza ajudará a muitos outros. Você recebeu +1 REP! 1 lepiigor reacted to this Share this post Link to post