Dzsozi (h03) Posted December 16, 2014 Share Posted December 16, 2014 Hello community! I have a question. How can I check if the player is in the ACL admin group on client side? I've made an export function for this, but it only works on server side. How could I make this work on client side as well? function isPlayerAdmin(player) if isObjectInACLGroup ( "user." .. getAccountName ( getPlayerAccount ( player ) ), aclGetGroup ( "Admin" ) ) then return true end return false end Link to comment
manawydan Posted December 16, 2014 Share Posted December 16, 2014 you can use this: function isPlayerAdmin(player) if(getElementData(player,"Admin")) then return true end return false end addEventHandler("onPlayerLogin",root, function() if isObjectInACLGroup ( "user." .. getAccountName ( getPlayerAccount ( source ) ), aclGetGroup ( "Admin" ))then setElementData(source,"Admin",true) end end) Link to comment
Dzsozi (h03) Posted December 16, 2014 Author Share Posted December 16, 2014 Thank you! You helped me alot in other things as well! Link to comment
Dzsozi (h03) Posted December 16, 2014 Author Share Posted December 16, 2014 Ohh, forgot this one. I have one more question: How can I get an element data on client side which was set on server side? I use 50p's bank system and I want to make a custom HUD which is draws the current bank balance, but the "bank.balance" elementdata was set on server side. How could I get this element data on client side? Link to comment
manawydan Posted December 16, 2014 Share Posted December 16, 2014 just use getElementData, elementData is syncronized(if you set in server or client both will have it) Link to comment
Dealman Posted December 16, 2014 Share Posted December 16, 2014 For safety reasons, I would highly suggest against confirming whether a player is an admin or not using Element Data. Instead, you can use triggerClientEvent to utilize the function you provided. Link to comment
manawydan Posted December 16, 2014 Share Posted December 16, 2014 cheater? or hacking? Link to comment
manawydan Posted December 16, 2014 Share Posted December 16, 2014 if you want use trigger: server local Admins = {} function isPlayerAdmin(player) if(Admins[player]) then return true end return false end addEventHandler("onPlayerLogin",root, function() if isObjectInACLGroup ( "user." .. getAccountName ( getPlayerAccount ( source ) ), aclGetGroup ( "Admin" ))then if not(Admins[source])then Admins[source]= source triggerClientEvent("updateAdmins",source,Admins) end end end) addEventHandler("onPlayerQuit",root, function() if(Admins[source])then Admins[source]= nil triggerClientEvent("updateAdmins",source,Admins) end end) client local Admins = {} addEvent("updateAdmins",true) addEventHandler("updateAdmins",root, function(t) Admins = t end) function isPlayerAdmin(player) if(Admins[player]) then return true end return false end Link to comment
Dzsozi (h03) Posted December 17, 2014 Author Share Posted December 17, 2014 just use getElementData, elementData is syncronized(if you set in server or client both will have it) If it's syncronized then what could cause this? What could be the problem? Here's the part of my client side code: local fontSize = 1.15 local money = getPlayerMoney(getLocalPlayer()) local bankMoney = getElementData(getLocalPlayer(), "bank.balance") if money < 0 then moneyColor = tocolor(175, 30, 30, 255) -- piros (red) bankMoneyColor = tocolor(215,100,100,255) else moneyColor = tocolor(35, 130, 50, 255) -- zöld (green) bankMoneyColor = tocolor(115,235,140,255) end dxDrawBorderedText("$"..money,x*1850, y*50, x*1850, y*40,moneyColor, fontSize,"pricedown","right","top",false,false,false) -- készpénz (money in pocket) dxDrawBorderedText("$"..bankMoney,x*1850, y*80, x*1850, y*40,bankMoneyColor, fontSize,"pricedown","right","top",false,false,false) -- bank egyenleg (money in bank) I've even tried write tostring and tonumber before bankMoney, but if I leave it like this or write tonumber then it gives me this error, if I write tostring it writes $false. Link to comment
Dzsozi (h03) Posted December 17, 2014 Author Share Posted December 17, 2014 Sorry, it's not element data, it's account data!! So my question is: Is this possible to get ACCOUNT DATA from client side? Link to comment
WASSIm. Posted December 17, 2014 Share Posted December 17, 2014 (edited) you need use setElementDatabwhen you'r use setAccountData or you can use this... addEventHandler("onAccountDataChange", root, function (account, key, value) local thePlayer = getAccountPlayer(account) if (thePlayer) then setElementData(thePlayer, "account_"..key, value) end end) addEventHandler("onPlayerLogin", root, function (_, account) local alldata = getAllAccountData(account) for key, value in pairs(alldata) do setElementData(source, "account_"..key, value) end end) addEventHandler("onPlayerLogout", root, function (_, account) local alldata = getAllAccountData(account) for key, value in pairs(alldata) do removeElementData(source, "account_"..key, value) end end) Exmple: local bankMoney = getElementData(getLocalPlayer(), "account_bank.balance") Edited December 17, 2014 by Guest Link to comment
Dzsozi (h03) Posted December 17, 2014 Author Share Posted December 17, 2014 Thank you very much! Link to comment
Anubhav Posted December 17, 2014 Share Posted December 17, 2014 Never use element data for SUCH THINGS. You can use tables always! Element data uses alot of memory and CPU as far as I have listened. bankbalances = {} addEventHandler("onAccountDataChange", root, function (account, key, value) local thePlayer = getAccountPlayer(account) if (thePlayer and key == "bank.balance") then bankbalances[ thePlayer ] = value triggerClientEvent( "onClientRequestBankBalance", thePlayer, bankbalances ) end end) addEventHandler("onPlayerLogin", root, function (_, account) local alldata = getAccountData( getPlayerAccount(source), "bank.balance" ) bankbalances[ source ] = alldata triggerClientEvent( "onClientRequestBankBalance", thePlayer, bankbalances ) end) addEventHandler("onPlayerLogout", root, function (_, account) if bankbalances[ source ] then bankbalances[ source ] = nil end end) Client: balancesClient = {} function getPlayerBankMoney( player ) if balancesClient[ player ] then return balancesClient[ player ] else return false end end addEvent( "onClientRequestBankBalance", true ) addEventHandler( "onClientRequestBankBalance", root, function( table ) balancesClient = table end ) BTW: You can ask for help on skype: anubhav.agarwal80, i'd be happy to help you out. If you need further assistance with the code feel free to contact me! Link to comment
Dzsozi (h03) Posted December 17, 2014 Author Share Posted December 17, 2014 Okay, thank you very much, I appreciate it! 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