-
Posts
6,097 -
Joined
-
Last visited
-
Days Won
218
Everything posted by IIYAMA
-
1. changing the eventNames onClientResourceStart > onResourceStart onClientColShapeHit > onColShapeHit 2. Getting rid of localPlayer, since that predefined variable does not exist there. addEventHandler("onResourceStart", resourceRoot, function () MyZone = createColCuboid(-2034.9541015625,321.2734375, 200.75479125977, 40, 90.2, 17.9) addEventHandler ("onColShapeHit", myZone, dimensionChecker) end ) function dimensionChecker (theElement, matchingDimension) if matchingDimension and getElementType(theElement) == "player" then setElementData(theElement, "R", true) end end
-
Are you sure that the code is clientside? -- put on top of script iprint(triggerClientEvent and "serverside" or "clientside") -- and check debugconsole
-
addEventHandler("onClientResourceStart", resourceRoot, function () MyZone = createColCuboid(-2034.9541015625,321.2734375, 200.75479125977, 40, 90.2, 17.9) addEventHandler ("onClientColShapeHit", myZone, dimensionChecker) end ) function dimensionChecker (theElement, matchingDimension) if matchingDimension and theElement == localPlayer then setElementData(localPlayer, "R", true) end end onResourceStart > onClientResourceStart (onResourceStart is serverside only) Moved addEventHandler directly after creating the element. The event onCientResourceStart is executed very late and therefore the element didn't exist when you tried to attach the addEventHandler. Checking if the one hitting the colshape is the localPlayer. Use code block for your code:
-
That is because the function is executed by the admin resource and not by an user. Users in general can't execute functions, since functions are not part of the user API. The user API only exist out of commands and events>indirect (and maybe something else ???). If you want those functions to be scoped by the ACL, I am afraid that you will have to modify the admin resource or disable the resource tab for those users. Note: This is information based on my knowledge of how resources work. I am not entirely sure if there is a way for a user to execute a function, since there is no Lua environment created for each player, it is created based on each resource. Maybe it could be possible, outside of the Lua environment.
-
You need this function: https://wiki.multitheftauto.com/wiki/AttachTrailerToVehicle
-
Change root to resourceRoot. (My bad) And add some debug lines to check if everything is executed.
-
Hmm, I didn't know that. In that case the only thing he can do is pre-loading: local terrainTexture = {} addEventHandler("onClientResourceStart", root, function () terrainTexture.low = dxCreateTexture('shader/low/1.png',"dxt5",true) terrainTexture.medium = dxCreateTexture('shader/medium/1.png',"dxt5",true) terrainTexture.high = dxCreateTexture('shader/img/1.png',"dxt5",true) shader = dxCreateShader("shader/fx/shader.fx") end) local grass = {'sw_sandlod','desstones_dirt1','desertgryard256','grasspatch_64hv','desertgryard256lod','grasstype5_4','desgrasandblend','desgrasandblend_lod','grasslod','redcliffroof_la','grasstype4','sw_sandgrasslod','sw_sand','whitesand_256','dirtblendlitlod','des_dirt2gygrasslod','brngrss2stonesb','lodslgrass01','des_grass2dirt1','des_grass2dirt1lod','des_scrub1lod','des_grass2scrublod','rocktbrn128bllod','des_dirt2lod','des_dirt2grasslod','desgrassbrnlod','des_dirt1lod','des_yelrocklod','golf_fairway2','grassgrn256','lodgrass_128hv','pavementhexagon','desgrassbrnsnd','forestfloor256','forestfloor256lod','forestfloor256mudblend','grasslong256','des_dirt2stones','hiwayinsideblend1_256','greyground2sand','grasstype4_staw','grassshort2long256','grassdeep256','grasstype3dirt','grassdeep256','grass_lawn_128hv','tenniscourt1_256','hiwayinsideblend2_256','hiwayblend1_256','desegravelgrassroadla','dirtblendlit','sl_sfngrssdrt01','sl_sfngrass01','golf_greengrass','golf_fairway3','golf_fairway1','golf_heavygrass','golf_hvygras_cpark','grass_dirt_64hv','pavebsandend','grass_dry_64hv','grassdeadbrn256','sjmlahus28','sjmscorclawn3','grasstype510','grasstype510_10','roadblend:O','brngrss2stones','grasstype4-3','grasstype3','grasstype5_desdirt','dirtkb_64hv','desertgryard256grs2','des_dirt2grass','des_dirt1','grass','des_dirt1_glfhvy','des_dirt1_grass','grass_128hv','ffbranch_mountdirt','desmud2forstfloor','forestfloorblend','cw2_mountdirt2forest','con2sand1b','con2sand1a','desgrassbrn_grn','des_dirt2gygrass','ws_traingravelblend','sw_sand','newcrop3','sjmscorclawn','dirtgaz64b','bow_church_grass_gen','grasstype10_4blend','desertstones256forestmix','grifnewtex1x_las','grassdry_128hv','grass4dirtytrans','hedge1','sw_grass01d','sfn_rockhole','sfncn_rockgrass3','sfn_grass1','des_dirtgrassmixbmp','grasstype4_forestblend','grasstype4_10','grasstype10','des_dirtgrassmix_grass4','grass4dirty','dt_road2grasstype4','bow_church_grass_alt','grasstype4blndtodirt','desgreengrass','yardgrass1', 'grassgrnbrn256', 'des_grass2scrub', 'des_scrub1_dirt1b', 'des_scrub1_dirt1a', 'vgs_rockbot1a', 'vgs_rockmid1a', 'des_ripplsand','des_dirtgravel','des_roadedge2','des_panelconc','des_oldrunwayblend','grasstype5','grasstype5_dirt','desgrassbrn','hiway2sand1a','hiwaygravel1_256','hiwaygravel1_lod','des_oldrunway','grass4_des_dirt2','forestfloorbranch256','forestfloor3','des_dirt2grgrass','forestfloor3_forest','forestfloor_sones256','sw_sandgrass','sw_sandgrass4','sw_rockgrassb2','des_dirt2 trackl','des_dirtgrassmixb','des_dirtgrassmixc','desertstones256grass','desmuddesgrsblend','hiwayinsideblend3_256','desgrassbrn_lod','des_scrub1_lod','desgreengrasslod','grasstype7','sandgrndlod','concretedust2_lod','bow_church_grass_lod','des_dirt1_lod','vgsecoast02_lod','vgsecoast05_lod','vgs_rockbot1a_lod','vgn_ground8_lod','vgn_ground10_lod','vgn_ground3_lod','grassdry_lod','5af8d285','brickred'} addEvent('pp',true) addEventHandler('pp', root, function() if setting == 1 then terrain = terrainTexture.low elseif setting == 2 then terrain = terrainTexture.medium elseif setting == 3 then terrain = terrainTexture.high end if terrain then if not shader then shader = dxCreateShader("shader/fx/shader.fx") end dxSetShaderValue(shader, 'Tex0', terrain) for i=1, #grass do engineApplyShaderToWorldTexture(shader, grass[i]) end end end)
-
That is for scaling absolute values to relative values, making sure that the dx-effects are the same size on every screen (without stretching). It will not be helpful in your cause: reducing resolution for performance gain.
-
Isn't updating the shader value enough? Instead of creating a new shader and (re)applying it to all textures.
-
This warning appears when you try to add an event handler, which is already attached to that function. You can either use a variable: local drawingStatus = false if not drawingStatus then addEventHandler("onClientPreRender", getRootElement(), draw) drawingStatus = true end if drawingStatus then removeEventHandler("onClientPreRender", getRootElement(), draw) drawingStatus = false end Or you can use the following utility function isEventHandlerAdded, which you can copy out of the example: https://wiki.multitheftauto.com/wiki/GetEventHandlers
- 1 reply
-
- 1
-
-
I have added a useful function to the wiki, for positioning dx-effects:
https://wiki.multitheftauto.com/wiki/GetScreenStartPositionFromBox
Enjoy!
-
I have added a useful function to the wiki, for positioning: https://wiki.multitheftauto.com/wiki/GetScreenStartPositionFromBox
-
The setPedStat was not working, the stat id was not filled in. iprint("purifierHealth", purifierHealth) setTimer (setPedStat, 500, 1, source, 24, purifierHealth)
-
There was an: if else end And you changed it to an: if if end end While you probably need an : if -- element data else -- element data if -- validation end end Not sure if that fixes everything, it is still a puzzle.
-
You can also move the oldTx, oldTy, oldTz, px, py, pz validation to here. Or here, line 96 @Bean666
-
Basic validation: (works in most cases just fine) if isElement(ped) and oldTx and oldTy and oldTz and oldPx and oldPy and oldPz then Advanced validation: (recommended using this when the data comes from user input, export functions or database. But using it for here is also fine.) if isElement(ped) and type(oldTx) == "number" and type(oldTy) == "number" and type(oldTz) == "number" and type(oldPx) == "number" and type(oldPy) == "number" and type(oldPz) == "number" then
-
For example: local player = getElementData(source, "leader") local oldTx, oldTy, oldTz = getElementPosition(player) local oldPx, oldPy, oldPz = getElementPosition(source) setTimer(follow_enemy_check, 500, 1, source) setTimer(follow_move, 800, 1, source, oldPx, oldPy, oldPz, oldPx, oldPy, oldPz) To: local player = getElementData(source, "leader") if isElement(player) then local oldTx, oldTy, oldTz = getElementPosition(player) local oldPx, oldPy, oldPz = getElementPosition(source) setTimer(follow_move, 800, 1, source, oldPx, oldPy, oldPz, oldPx, oldPy, oldPz) end setTimer(follow_enemy_check, 500, 1, source)
-
The owner has complied with providing evidence that this gamemode is unique. @Patrick has validated that. No further accusations will be tolerated without proof. The first topic has been hidden. (This is a copy) @Jacuuuu Please move some of those pictures inside of your topic. And always do that for new [SELL] related topics. That way we can at least moderate if there are people trying to sell stolen resources. Note: if you disagree with our actions you should send us a message, instead of trying to evade our actions. That way this issue would have been resolved a long time ago.
-
You could reduce the amount of zombies. If you want to compare a local machine with a VPS, it is best to bring both of them a little bit closer to each other. That is if you want to know if it is the server that is responsible for the lag, or if it is your internet connection. https://wiki.multitheftauto.com/wiki/Command_fakelag Enable fakelag: <fakelag>1</fakelag> Program Files (x86)\MTA San Andreas 1.5\server\mods\deathmatch\mtaserver.conf Command: /fakelag <packet loss> <ping> <ping variance> Join a healthy server and adjust the values for the command that you are going to use. <packet loss> = % how much packet loss you have (information that is not delivered and has to be resend) Information can be found here: /shownetstat <ping> = should be filled in with the amount of ping you have. <ping variance> = how much your ping is jumping up from the base value. Example: /fakelag 1 100 50 1% packet loss 100 ping 50 ping variance: ping + ping variance 100 + 50 = 100 t/m 150 ping
-
The data rate is indeed an issue. I capped my own ped resource on 300ms. But the quantity also plays a role. It is bad practice to send the same information twice. If the client knows a ped is running, the server does not have to send that information again. If there are no peds around you, the data rate by this resource should be nearly 0. Are you sure that it sends data on the onClientRender rate?
-
There is only 1 thing you need to know about internal arguments. Those ones that are after the callBack function. If you mix internal arguments with arguments(from serverside), you have to make sure that the last internal argument is not a nil value. Because when all arguments are converted to parameters, both lists will be merged and the first list(internal arguments) will collapse on nil values at the end of the table. Problem: internal2 = nil callServer('isAccountRegistered', username, password, caseVariable, function(internal1, internal2, state) end, "internal1", internal2) Is OK: internal2 = false callServer('isAccountRegistered', username, password, caseVariable, function(internal1, internal2, state) end, "internal1", internal2) As you can see here: list1 = {1, 2, nil, 4, nil} -- internal arguments list2 = {6, 7, 8, 9, 10} for i=1, #list2 do list1[#list1 + 1] = list2 [i] end print(unpack(list1)) -- 1, 2, nil, 4, 6, 7, 8, 9, 10, -- The nil value at index 5 is missing.
-
thx! Sorry for my late reply, I didn't notice the notification. The syntax for that function: bool callServer (callFunctionName string [, argument1, argument2, ... ] [, callbackFunction function [, argument1 (internal), argument2 (internal), ...]] ) https://gitlab.com/IIYAMA12/mta-communication-enchantment/tree/master/documentation/syntax#syntax-1 Multiple values can be send over by just adding them between the functionName and the callBackFunction. functionName: 'isAccountRegistered' callBackFunction: function(state) end callServer('isAccountRegistered', username, function(state) end) -- 1 callServer('isAccountRegistered', username, password, function(state) end) -- 2 callServer('isAccountRegistered', username, password, caseVariable, function(state) end) -- 3 It goes through all arguments and detects if there is a function, then that one will be the callBack function. See here where that happens in the source code: https://gitlab.com/IIYAMA12/mta-communication-enchantment/-/blob/master/sync/sync_c.lua#L77 https://gitlab.com/IIYAMA12/mta-communication-enchantment/-/blob/master/sync/sync_shared.lua#L250 So you want to do that, what you already can do and doing it already? ?
-
You could attach the camera to the ped, see example in this link: https://wiki.multitheftauto.com/wiki/GetCamera The example explains how to attach the camera to a vehicle, without the need of updating the camera with onClient(Pre)Render.
-
Colshapes are more reliable. You could try these functions: https://wiki.multitheftauto.com/wiki/GetElementColShape < use on marker https://wiki.multitheftauto.com/wiki/GetColShapeSize If there is some abnormality in height --> https://wiki.multitheftauto.com/wiki/CreateColTube (https://forum.multitheftauto.com/topic/100069-tut-addeventhandler-on-a-group-of-elements-small-tutorial/)
-
Yes, @Tekken just gave you that one a few seconds ago.
