Rakashy Posted September 19, 2020 Share Posted September 19, 2020 (edited) Bom, fiz umas gambearras em alguns scripts inacabados de inventário e acabou funcionando bem, porém assim que é efetuada a compra de algo como arma, comida, bebida, o item vai normalmente para o inventário, porém não desconta o dinheiro do personagem, e não apresenta nenhum erro no debugscritp, o que me fez vir aqui, visto que não sei o motivo do bug, poderiam me ajudar ? o Script está abaixo Server local shopPed = {} addEventHandler("onResourceStart", root, function() connection = dbConnect("sqlite", "database.db") dbExec(connection, "CREATE TABLE IF NOT EXISTS shops (id INTEGER PRIMARY KEY AUTOINCREMENT, type INTEGER, pos TEXT, skin INTEGER, name TEXT)") loadShop() end) ------------------------------ -- // Shop betöltése ------------------------------ function loadShop() local query = dbQuery( connection, "SELECT * FROM shops") local result, numrows = dbPoll(query, -1) if (result and numrows > 0) then for index, shopTable in pairs(result) do local position = fromJSON(shopTable["pos"]) shopPed[shopTable["id"]] = createPed(shopTable["skin"], position[1], position[2], position[3]) if isElement(shopPed[shopTable["id"]]) then setPedRotation(shopPed[shopTable["id"]], position[6] or 0) setElementDimension(shopPed[shopTable["id"]], position[4]) setElementInterior(shopPed[shopTable["id"]], position[5]) setElementFrozen(shopPed[shopTable["id"]], true) setElementData(shopPed[shopTable["id"]], "shop >> owner", shopTable["owner"]) setElementData(shopPed[shopTable["id"]], "shop >> type", shopTable["type"]) setElementData(shopPed[shopTable["id"]], "shop >> npc", true) setElementData(shopPed[shopTable["id"]], "shop >> id", shopTable["id"]) setElementData(shopPed[shopTable["id"]], "ped >> death", true) setElementData(shopPed[shopTable["id"]], "name:tags", "PED") setElementData(shopPed[shopTable["id"]], "Ped:Name",shopTable["name"]) end end end end ------------------------------100 -- // Shop törlése ------------------------------ addCommandHandler("delshop", function(playerSource, cmd) if isObjectInACLGroup("user."..getAccountName(getPlayerAccount(playerSource)), aclGetGroup("Console")) then local x, y, _ = getElementPosition(playerSource) local shopShape = createColCircle ( x, y, 3 ) local shopNumber = 0 for _,v in ipairs(getElementsWithinColShape ( shopShape, "ped" ) ) do local ShopID = getElementData(v,"shop >> id") or 0 shopNumber = shopNumber + 1 destroyElement(shopShape) if ShopID >= 1 then destroyElement(v) end dbPoll ( dbQuery( connection, "DELETE FROM shops WHERE id = '?'", ShopID), 0 ) outputChatBox("#7cc576[SKY~Itens] #ffffffLoja excluída com sucesso. ID: #F7CA18"..ShopID, playerSource, 255, 255, 255, true) return end if(shopNumber == 0) then destroyElement(shopShape) outputChatBox("#D24D57[SKY~Itens] #ffffffNenhuma loja perto de você.", playerSource, 255, 255, 255, true) end end end) ------------------------------ -- // Shop létrehozása ------------------------------ function createShop(element, cmd, skin, type, name) if isObjectInACLGroup("user."..getAccountName(getPlayerAccount(element)), aclGetGroup("Console")) then if not (skin) or not type or not name and tonumber(type) < 0 and tonumber(type) < #shopItemList+1 then outputChatBox("#7cc576[use]:#ffffff /".. cmd .." [Olhar NPC] [tipo] [NPC nome]", element,255,255,255,true) outputChatBox("#ffffffTípus: 1: Food Individual 2: Loja de bebidas 3: Loja geral 4: eletrônica 5: Loja de passatempo 6: Burger Shot 7: Cluck'n'Bell 8: Pizza 9: Suprimentos de mineração 10: Suprimentos para lenhadores 11: Vajdaság 12: Loja da máfia 13: pescaria 14: loja Arma", element,255,255,255,true) outputChatBox("15: Lojas de tabaco 16: Mudas ilegais 17: artigos de papelaria 18: Armazem de peixe 19: farmácia 20: pet Store 21: Mascaras", element,255,255,255,true) return end local x, y, z = getElementPosition(element) local dim = getElementDimension(element) local int = getElementInterior(element) local rot = getPedRotation(element) local position = toJSON( {x, y, z, dim, int, rot}) local insertQuery = dbQuery( connection, "INSERT INTO shops (type, pos, skin, name) VALUES(?, ?, ?, ?)", tonumber(type), position, skin, name) local insertQueryData, _, insertID = dbPoll ( insertQuery, -1 ) if (insertQueryData) then shopPed[insertID] = createPed(skin,x,y,z) setPedRotation(shopPed[insertID], rot) setElementDimension(shopPed[insertID], dim) setElementInterior(shopPed[insertID], int) setElementFrozen(shopPed[insertID], true) setElementData(shopPed[insertID], "shop >> type", type) setElementData(shopPed[insertID], "ped >> death", true) setElementData(shopPed[insertID], "shop >> npc", true) setElementData(shopPed[insertID], "shop >> id", insertID) setElementData(shopPed[insertID], "name:tags", "NPC") setElementData(shopPed[insertID], "Ped:Name", name) end end end addCommandHandler('addshop', createShop) addCommandHandler('createshop', createShop) ------------------------------ -- // Item adás ------------------------------ function buyItem(player, item, value, count, amount, duty) money = getPlayerMoney(player) or 0 if money >= amount then if exports.cbr_inventario:giveItem(player, item, value, count, amount, true) then takePlayerMoney(player, amount) outputChatBox("#ffffffVocê conseguiu um #32B3FF".. exports.cbr_inventario:getItemName(item).." #ffffffobjeto.",player,255,0,0,true) end else outputChatBox("#ffffffVocê não possui (#32B3FF".. amount .." #ffffff)$.",player,255,255,255,true) end end addEvent("btcMTA->#buyItem", true) addEventHandler("btcMTA->#buyItem", getRootElement(), buyItem) function kit_vida(source) setElementHealth(source, 100) end addEvent("DS:kit_vida", true) addEventHandler("DS:kit_vida", root, kit_vida) function kit_reparo(source) end addEvent("DS:kit_reparo", true) addEventHandler("DS:kit_reparo", root, kit_reparo) Client local monitorSize = {guiGetScreenSize()} -- // Lekérdezi a monitor méreteit local panelData = {550, 510} -- // Panel szélessége és magassága local panelX, panelY = monitorSize[1]/2-panelData[1]/2, monitorSize[2]/2-panelData[2]/2 -- // X, Y Pozició local font = dxCreateFont("files/Calibri.ttf", 10) -- // Font local showShop = false -- // A panel felvan-e rajzolva local currentShop = 0 -- // Jelenlegi shop local scroll = 0 -- // Görgetés local count = 1 -- // Darabszám local maxDraw = 8 -- // Maximum kirajzolás local createdGuis = {} -- // A guik táblázata local shopElement = nil --// Shop Element ------------------------------ -- // Klikkelés ------------------------------ addEventHandler('onClientClick', root, function (button, state, _, _, _, _, _, element) if button == 'right' and state == 'down' and element and not showShop then if getElementData(element, 'shop >> npc') or false then local x, y, z = getElementPosition(localPlayer) local elementX, elementY, elementZ = getElementPosition(element) if getDistanceBetweenPoints3D(x, y, z, elementX, elementY, elementZ) <= 5 then if tonumber(getElementData(element,"shop:type") or 1) == 14 and not exports['cbr_inventario']:hasItem(localPlayer, 112) then outputChatBox('#D24D57[FVR] #ffffffVocê não tem uma licença de arma!', 255, 255, 255, true) return end getShopDatas(element) else outputChatBox('#D24D57[SKY~Itens] #ffffffVocê não pode falar com o vendedor sobre essa bagunça!', 255, 255, 255, true) end end elseif button == 'left' and state == 'down' and showShop then local elem = 0 for index, value in ipairs(shopItemList[currentShop].itemList) do if (index > scroll and elem < maxDraw) then elem = elem + 1 if isMouseInPosition (panelX+panelData[1]-155, panelY-25+elem*57+56/2-20/2, 77, 20) then if guiEditSetCaretIndex(createdGuis[elem], string.len(guiGetText(createdGuis[elem]))) then guiBringToFront(createdGuis[elem]) end elseif isMouseInPosition (panelX+panelData[1]-45, panelY-25+elem*57+56/2-32/2, 32, 32) then if isElement(createdGuis[elem]) then count = guiGetText(createdGuis[elem]) if tonumber(count) then if count == '' or count == ' ' then count = 1 end else count = 1 guiSetText(createdGuis[elem], '') end else count = 1 end setTimer(function(value, count) triggerServerEvent('btcMTA->#buyItem', localPlayer, localPlayer, value[2], value[3], math.floor(count), value[5]* math.floor(count)) end, 100, 1, value, count) end end end end end) ------------------------------ -- // destoy and draw funkciók ------------------------------ function getShopDatas(element) showShop = not showShop if showShop then currentShop = tonumber(getElementData(element, 'shop >> type')) createGui('create') shopElement = element addEventHandler('onClientRender', root, createShopPanel, true, 'low-5') bindKey('backspace', 'down', desroyPanel) else createGui('destroy') removeEventHandler('onClientRender', root, createShopPanel) unbindKey('backspace', 'down', desroyPanel) end end function desroyPanel () removeEventHandler('onClientRender', root, createShopPanel) showShop = false createGui('destroy') count = 1 scroll = 0 currentShop = 0 unbindKey('backspace', 'down', desroyPanel) end ------------------------------ -- // Edit létrehozása és törlése ------------------------------ function createGui(type) if tostring(type) == "destroy" then for index, value in ipairs(shopItemList[currentShop].itemList) do if isElement(createdGuis[index]) then destroyElement(createdGuis[index]) end end else for index, value in ipairs(shopItemList[currentShop].itemList) do createdGuis[index] = guiCreateEdit(-1000, -1000, 0, 0, "", false) guiSetText(createdGuis[index], value[4]) guiEditSetMaxLength(createdGuis[index], 4) end end end ------------------------------ -- // felrajzolás ------------------------------ function createShopPanel() local x, y, z = getElementPosition(localPlayer) local elementX, elementY, elementZ = getElementPosition(shopElement) if (getDistanceBetweenPoints3D(x, y, z, elementX, elementY, elementZ) > 5 ) then desroyPanel() return end dxDrawRectangle(panelX, panelY, panelData[1], panelData[2], tocolor(0, 0, 0, 150)) -- // background dxDrawRectangle(panelX, panelY, panelData[1], 25, tocolor(0, 0, 0, 200)) dxDrawText("Para sair, pressione a tecla #D24D57'backspace'", panelX+panelData[1]/2, (panelY+panelData[1]-65)+25/2, panelX+panelData[1]/2, (panelY+panelData[1]-65)+25/2, tocolor(255, 255, 255, 255), 1, font, 'center', 'center', false, false, false, true) dxDrawText('#7cc576SKY#FFFFFFMTA - #7cc576'..shopItemList[currentShop].name, panelX+panelData[1]/2, panelY+25/2, panelX+panelData[1]/2, panelY+25/2, tocolor(255, 255, 255, 255), 1, font, 'center', 'center', false, false, false, true) local elem = 0 for index, value in ipairs(shopItemList[currentShop].itemList) do if (index > scroll and elem < maxDraw) then elem = elem + 1 dxDrawRectangle(panelX+5, panelY-25+elem*57, panelData[1]-10, 56, tocolor(0, 0, 0, 150)) dxDrawRectangle(panelX+10, panelY-17+elem*57, 40, 40, tocolor(255, 255, 255, 60)) dxDrawImage(panelX+10+2, panelY-17+elem*57+2, 36, 36, getItemImage(value[2])) if isElement(createdGuis[elem]) then count = guiGetText(createdGuis[elem]) if tonumber(count) then if count == '' or count == ' ' then count = 1 end else count = 1 guiSetText(createdGuis[elem], '') end else count = 1 end dxDrawText('Nome: #7cc576'.. value[1] .. '\n#ffffffPreço: #7cc576R$: '.. formatMoney(value[5]*math.floor(count))..'', panelX+10+2+43, panelY-25+elem*57+2, 36, 36, tocolor(255, 255, 255, 255), 1, font, 'left', 'top', false, false, false, true) dxDrawText('Quantidade: #7cc576'.. math.floor(count), panelX+panelData[1]-155, panelY-25+elem*57+56/2, 36, panelY-25+elem*57+56/2, tocolor(255, 255, 255, 255), 1, font, 'left', 'center', false, false, false, true) if isMouseInPosition (panelX+panelData[1]-45, panelY-25+elem*57+56/2-32/2, 32, 32) then dxDrawImage(panelX+panelData[1]-45, panelY-25+elem*57+56/2-32/2, 32, 32, 'files/shopIcon.png', 0, 0, 0, tocolor(124, 197, 118, 255)) else dxDrawImage(panelX+panelData[1]-45, panelY-25+elem*57+56/2-32/2, 32, 32, 'files/shopIcon.png', 0, 0, 0, tocolor(255, 255, 255, 255)) end end end if #shopItemList[currentShop].itemList > maxDraw then dxDrawRectangle(panelX+panelData[1]+5, panelY+25, 10, panelData[2]-25, tocolor(0, 0, 0, 150)) -- // scrole backfround dxDrawRectangle(panelX+panelData[1]+5+1, panelY+25+1+((panelData[2]-25)/(#shopItemList[currentShop].itemList-maxDraw+1))*scroll, 8, (panelData[2]-25)/(#shopItemList[currentShop].itemList-maxDraw+1)-2, tocolor(124,197,118, 255)) -- // Scros line end end ------------------------------ -- // Görgetés ------------------------------ bindKey("mouse_wheel_down", "down", function() if showShop then if scroll < #shopItemList[currentShop].itemList - maxDraw then scroll = scroll + 1 end end end ) bindKey("mouse_wheel_up", "down", function() if showShop then if scroll > 0 then scroll = scroll - 1 end end end ) ------------------------------ -- // Egyéb ------------------------------ function formatMoney(amount) local formatted = tonumber(amount) if formatted then while true do formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1 %2') if (k==0) then break end end return formatted else return amount end end function isMouseInPosition ( x, y, width, height ) if ( not isCursorShowing ( ) ) then return false end local sx, sy = guiGetScreenSize ( ) local cx, cy = getCursorPosition ( ) local cx, cy = ( cx * sx ), ( cy * sy ) if ( cx >= x and cx <= x + width ) and ( cy >= y and cy <= y + height ) then return true else return false end end function getItemImage(item) return fileExists(":btc_items/files/items/"..item..".png") and ":btc_items/files/items/"..item..".png" or ":btc_items/files/items/0.png" end addEventHandler("onClientPedDamage", getRootElement(), function () if (getElementData(source, "ped >> death")) then cancelEvent() end end) addEventHandler("onClientPlayerStealthKill", getRootElement(), function(targetPlayer) if (getElementType(targetPlayer) == 'ped' and getElementData(targetPlayer, "ped >> death")) then cancelEvent() end end) Edited September 21, 2020 by Lord Henry Scripts convertidos de HTML para Lua. Link to comment
DNL291 Posted September 20, 2020 Share Posted September 20, 2020 Movido para Portuguese / Português > Programação em Lua Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now