Leaderboard
Popular Content
Showing content with the highest reputation on 05/12/18 in all areas
-
Primeiro, a tabela, crie uma tabela com o nível no índice e a exp para upar o nível no valor. Exemplo: local levelsTable = { [1] = 500, --nível 1 -> exp necessária 500 [2] = 900, --1 [3] = 1100, --2 [4] = 1300 --3 } Isso será útil para a função que faz a checagem de quando o nível sobe. Ambos, o nível do jogador e a exp você vai deixar armazenados com setElementData e na função que vai dar exp você seta o valor no element-data e chama a função que verifica se o jogador subiu de nível - essa função vou falar dela mais pra frente A função que dá exp: local level_maximo = 50 -- aqui fica definido o último level function givePlayerExp( exp ) if exp and tonumber(exp) and (getElementData( localPlayer, "level" ) or 0) ~= level_maximo then -- "(getElementData( localPlayer, "level" ) or 0) ~= level_maximo" basicamente isso será para a função, -- ser executada só se o level for diferente do último level local playerExp = getElementData( localPlayer, "playerExp" ) or 0 -- pega a exp atual; se falhar o valor será 0 setElementData( localPlayer, "playerExp", playerExp + tonumber(exp) ) -- define a exp somando a atual + a exp ganha checkLevel( localPlayer ) -- aqui é a função que verifica se o jogador já atingiu a exp necessária return true end return false end Em seguida vem a parte mais difícil, ou mais complexa - a função que vai checar quando upar o nível. Leia os comentários no código para entender como funciona: function checkLevel( player ) local player = player or localPlayer local playerExp = getElementData( player, "playerExp" ) or 0 local lv = getElementData( player, "level" ) or 0 -- pega o level do jogador local expCheck = levelsTable[lv] - playerExp --[[ aqui em "levelsTable[lv]" recebe a exp pra subir nível sendo que "lv" representa o level, poderia ser por exemplo, 900, que é o valor pra subir pro level 3. "playerExp" é a exp atual do jogador, suponhamos que seu level é 2, e com a exp ganha sua exp passa a ser 1000, então será a variável "expCheck" retornará o valor -100 (900 - 1000) ]]-- if expCheck <= 0 then -- se "expCheck" for negativo ou igual a zero, então o lv subiu local exp = (lv + 1) == level_maximo and 0 or playerExp - levelsTable[lv] --[[ seguindo a suposição feita acima, aqui vai setar a nova exp com aqueles -100 restantes sendo aproveitados. Então será definido a exp como 100 Em "(lv + 1) == level_maximo and 0" está verificando se o novo level é o último, caso seja, a exp para upar será sempre 0 ]] setElementData( player, "level", lv + 1 ) -- aqui seta o novo level; level atual + 1 setElementData( player, "playerExp", exp ) -- seta a nova exp do jogador end end Outra coisa necessária será o evento "onClientElementDataChange", esse será para detectar uma alteração direta no element-data: addEventHandler( "onClientElementDataChange", root, function (dataName) if (dataName == "playerExp") then checkLevel( source ) -- chama a função para verificar se o level subiu end end ) Feito isso, o resto fica bem fácil, como o que você citou que é dar exp ao jogador a cada x tempo. Aqui um exemplo simples: setTimer( function() givePlayerExp( 10 ) -- dá 10 pontos de exp end, 60000 * 10, 0 -- 60000 * 10 -> 10 minutos ) Pra salvar na conta, use a função mencionada pelo LordHenry e os eventos onPlayerQuit e onPlayerLogout; E para carregar os dados use onPlayerLogin + getAccountData + setAccountData. Finalizando, o código ficará assim: local level_maximo = 50 -- aqui fica definido o último level local levelsTable = { [1] = 500, --nível 1 -> exp necessária 500 [2] = 900, --1 [3] = 1100, --2 [4] = 1300 --3 } function checkLevel( player ) local player = player or localPlayer local playerExp = getElementData( player, "playerExp" ) or 0 local lv = getElementData( player, "level" ) or 1 -- pega o level do jogador local expCheck = levelsTable[lv] - playerExp --[[ aqui em "levelsTable[lv]" recebe a exp pra subir nível sendo que "lv" representa o level, poderia ser por exemplo, 900, que é o valor pra subir pro level 3. "playerExp" é a exp atual do jogador, suponhamos que seu level é 2, e com a exp ganha sua exp passa a ser 1000, então será a variável "expCheck" retornará o valor -100 (900 - 1000) ]]-- if expCheck <= 0 then -- se "expCheck" for negativo ou igual a zero, então o lv subiu local exp = (lv + 1) == level_maximo and 0 or playerExp - levelsTable[lv] --[[ seguindo a suposição feita acima, aqui vai setar a nova exp com aqueles -100 restantes sendo aproveitados. Então será definido a exp como 100 Em "(lv + 1) == level_maximo and 0" está verificando se o novo level é o último, caso seja, a exp para upar será sempre 0 ]] setElementData( player, "level", lv + 1 ) -- aqui seta o novo level; level atual + 1 setElementData( player, "playerExp", exp ) -- seta a nova exp do jogador end end function givePlayerExp( exp ) if exp and tonumber(exp) and (getElementData( localPlayer, "level" ) or 0) ~= level_maximo then local playerExp = getElementData( localPlayer, "playerExp" ) or 0 -- pega a exp atual; se falhar o valor será 0 setElementData( localPlayer, "playerExp", playerExp + tonumber(exp) ) -- define a exp somando a atual + a exp ganha checkLevel( localPlayer ) -- aqui é a função que verifica se o jogador já atingiu a exp necessária return true end return false end addEventHandler( "onClientElementDataChange", root, function (dataName) if (dataName == "playerExp") then checkLevel( source ) -- chama a função para verificar se o level subiu end end ) setTimer( function() givePlayerExp( 10 ) -- dá 10 pontos de exp end, 60000 * 10, 0 -- 60000 * 10 -> 10 minutos )3 points
-
1 point
-
evite erros function des1 (source) if bike1 then destroyElement (bike1) end givePlayerMoney (source, 10) outputChatBox (meu texto, source, r, g, b, a, true) end addCommandHandler ("desalugar", des1)1 point
-
I test a png image file with spaces in it's name. That png file is finding by the resource and work perfectly. And if you want to remove the image when player close the window, simply use; bindKey ( "f4", "down", function ( ) if getElementData(localPlayer, "logedin") then local state = ( not guiGetVisible (SHOP.window[1]) ) if not getElementData(localPlayer,"shop.viewing") then setElementData(localPlayer,"shop.viewing",1) end guiSetVisible ( SHOP.window[1], state ) showCursor ( state ) if guiGetVisible(SHOP.window[1]) == false then removeEventHandler ( "onClientGUIClick", root, onSwitch ) if isElement(itemImage) then destroyElement(itemImage) end else addEventHandler ( "onClientGUIClick", root, onSwitch ) end end end )1 point
-
Test this; function click () if source == SHOP.panel[1] or source == SHOP.panel[2] or source == SHOP.panel[3] or source == SHOP.panel[4] or source == SHOP.panel[5] then local selectedItem = guiGridListGetItemText ( source, guiGridListGetSelectedItem ( source ), 1 ) local price = guiGridListGetItemText ( source, guiGridListGetSelectedItem ( source ), 2 ) guiSetText( SHOP.label[1],"To buy "..selectedItem.." for "..price.." K.B.K Points press button below") guiLabelSetColor( SHOP.label[1],255,255,255) if isElement(itemImage) then destroyElement(itemImage) itemImage = guiCreateStaticImage( 500, 500, 400, 400, selectedItem..".png", false ) else itemImage = guiCreateStaticImage( 500, 500, 400, 400, selectedItem..".png", false ) end end end1 point
-
1 point
-
1 point
-
@DeadthStrock Yes i understand correctly, the porsionlists are different tabs, ill categories the items correct. THank you so much for all this help!!! @DeadthStrock, if i want to dxDrawImage on the right when you click an item, for example you click ak and it draws an ak picture on the right so you can see what you are buying, how do i do this together with the click button code?1 point
-
It worked like a charm @IIYAMA. Thank you. (Still figuring out how you did it)1 point
-
1 point
-
1 point
-
Rapaz, isso é relativamente complexo de ser feito. E vai precisar de setAccountData também.1 point
-
1 point
-
not supported, however you can do this... local link = "https://media.rockstargames.com/rockstargames-newsite/img/global/downloads/buddyiconsconavatars/sanandreas_truth_256x256.jpg" local pix requestBrowserDomains({link}, true, function(accepted) if not accepted then return end fetchRemote(link, function(data, err) if err > 0 then error('Error: ', err) end pix = dxCreateTexture(data) end) end) function teste() if pix then dxDrawImage(0, 0, 256, 256, pix, 0, 0, 0, tocolor(255, 255, 255, 255), false) end end addEventHandler("onClientRender", root, teste) I didn't test it but it should work1 point
-
In contrast, over the past 3 years there's never been a period with more PR's getting merged than in the past 8 months.. Not saying we should settle for that, tho.. I agree with qaisjp. Any developer (without commit access or even prior contributions) is welcome to help out with code review, and any user/dev can test changes contained in a PR.. you don't need to know c++ in order to build MTA and include a PR, for its testing. We've even been trying to make it easier for people to test - please try out http://nightlytest.mtasa.com. Therefore, the group of people that could speed up processes is bigger than you may imagine. All of this opens the road for a quicker merge, as less work is then left to do for team members in approving the changes.1 point
-
function del () for i,v in ipairs(vehiclesTablee) do destroyElement(v[1]) destroyElement(v[2]) end vehiclesTablee = {} end1 point
-
Well you use addEvent to make a costum event on server side or client side you need use addEventHandler for work and then if you want used on server side but it was added on client side triggerClientEvent if was added on server side and you want to use it you need triggerServerEvent addEvent addEventHandler triggerClientEvent triggerServerEvent1 point
-
السلام عليكم ورحمة الله وبركاته بنبدء اليوم بنغير تصميم الموقع الخاص بمجتمع العرب وخلال اسبوع او اسبوعين راح ننزل اول نسخه تجريبيه طبعا للاستضافه و المنتدى اتمنى منكم تعطوني وش تبوون ووش ماتبون بالموقع ووش اقتراحاتكم بالانتظار1 point