Jump to content

Verius

Members
  • Posts

    6
  • Joined

  • Last visited

Details

  • Gang
    MajorSuchodolski
  • Location
    Poland
  • Occupation
    really pseudo scripter
  • Interests
    c#, c++, scripting, gamedev

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

Verius's Achievements

Vic

Vic (3/54)

0

Reputation

  1. Hello MTA community, I've some questions about a methods of saving the data(optimization) and variables security. So, I am wondering how as optimally saving the players data in memory. For example: I've a lot extensive resources (equipment, abilities and more complex stats, etc etc), and when player's successful logging, server's getting data from MySQL database. I don't know, what is better solution - (1) saving all of these data in server-side bigggg table and getting by client in server events handlers, or maybe saving some data in client-side table (e.g individual stats about stamina level, abilities etc) <- but I don't know how safe is saving data in client memory. - or (2) saving all by means of elementData. And here's my primary questions - Which solution's better? Is client-side enough safe for saving important data in ordinary variables? And how it looks from optimization? (e.g on server is 400-players, and all of them have a tens[e.g 20] individual data. So if I used elementData, it's can count about 8000 elementData [players=400 * data=20]. And of course, 8000 elementData is only for players, you have to add elementData for vehicles, other 'systems' etc, too. Will it not do lags or something?) Thanks for any responses.
  2. Hm. Rather MTA doesn't share any trigger what allows that, anyway I didn't see this. But maybe there possibility use ProcessLineOfSight and check ray collision from player to roof. Example: processLineOfSight(playerX, playerY, playerZ, playerX, playerY, playerZ + maxHeightOfRoof) Or use optional arguments with objects ID.
  3. Here's example (based of XricsmondX code): local distances = {} local currentVeh = nil local startTick = nil local animTime = 1000 -- in miliseconds local toRotation = nil local fromRotation = nil function getNearestVehicle(player,distance) local tempTable = {} local lastMinDis = distance-0.0001 local nearestVeh = false local px,py,pz = getElementPosition(player) local pint = getElementInterior(player) local pdim = getElementDimension(player) for _,v in pairs(getElementsByType("vehicle")) do local vint,vdim = getElementInterior(v),getElementDimension(v) if vint == pint and vdim == pdim then local vx,vy,vz = getElementPosition(v) local dis = getDistanceBetweenPoints3D(px,py,pz,vx,vy,vz) if dis < distance then if dis < lastMinDis then lastMinDis = dis nearestVeh = v end end end end return nearestVeh end local function interpolate() local progress = (getTickCount() - startTick) / animTime local rotZ = interpolateBetween(fromRotation, 0, 0, toRotation, 0, 0, progress, "Linear") setVehicleComponentRotation(currentVeh, distances[1][2], 0, 0, rotZ) end bindKey("mouse2","down",function() nVeh = getNearestVehicle(localPlayer,5) door_rf_dummyX,door_rf_dummyY,door_rf_dummyZ = getVehicleComponentPosition ( nVeh, "door_rf_dummy", "world" ) door_lf_dummyX,door_lf_dummyY,door_lf_dummyZ = getVehicleComponentPosition ( nVeh, "door_lf_dummy", "world" ) door_rb_dummyX,door_rb_dummyY,door_rb_dummyZ = getVehicleComponentPosition ( nVeh, "door_rb_dummy", "world" ) or 0,0,0 door_lb_dummyX,door_lb_dummyY,door_lb_dummyZ = getVehicleComponentPosition ( nVeh, "door_lb_dummy", "world" ) or 0,0,0 px,py,pz = getElementPosition(localPlayer) distances = { {getDistanceBetweenPoints3D(px,py,pz,door_rf_dummyX,door_rf_dummyY,door_rf_dummyZ),"door_rf_dummy"}, {getDistanceBetweenPoints3D(px,py,pz,door_lf_dummyX,door_lf_dummyY,door_lf_dummyZ),"door_lf_dummy"}, {getDistanceBetweenPoints3D(px,py,pz,door_rb_dummyX,door_rb_dummyY,door_rb_dummyZ),"door_rb_dummy"}, {getDistanceBetweenPoints3D(px,py,pz,door_lb_dummyX,door_lb_dummyY,door_lb_dummyZ),"door_lb_dummy"}, } table.sort(distances,function(a, b) return a[1] < b[1] end) outputChatBox(distances[1][2]) currentVeh = nVeh fromRotation = 0 --here's start rotation of door toRotation = -45 --here's end rotation startTick = getTickCount() addEventHandler("onClientRender", getRootElement(), interpolate) --setVehicleComponentRotation(nVeh,distances[1][2],0,0,-45) end) Or you also can use deltaTime(timeSlice) from onClientPreRender. But in my opinion interpolateBetween is better idea. I forgot - you also should check if progress == 1 and use removeEventHandler in interpolate function.
  4. You should use: interpolateBetween()
  5. You should add this here: -- SERVER SIDE SCRIPT!! local vehspawns = { {500,0,0,5,0,0,0,255,40,255, true}, -- example (spawn a freezed vehicle to the farm) -- {vehiclemodelid, posx,posy,posz, rotx,roty,rotz, RED-color, Green-color, Blue-color, freezeonspawn}, } function createVehToSpawn(vehiclemodelid, posx,posy,posz, rotx,roty,rotz,red,green,blue, freezeonspawn) local veh = createVehicle(vehiclemodelid, posx,posy,posz, rotx,roty,rotz) setVehicleColor(veh, red, green, blue) -- color added here -- setElementData(veh, "tablerow", {vehiclemodelid, posx,posy,posz, rotx,roty,rotz,red,green,blue, freezeonspawn}) addEventHandler("onVehicleExplode", veh, respawnVehicle) if freezeonspawn then setElementFrozen(veh, true) addEventHandler("onVehicleEnter", veh, function() setElementFrozen(source, false) end) addEventHandler("onVehicleExit", veh, function() setElementFrozen(source, true) end) end end function respawnVehicle() local v = getElementData(source, "tablerow") if not v then return end if v[11] then removeEventHandler("onVehicleEnter", source, function() setElementFrozen(source, false) end) removeEventHandler("onVehicleExit", source, function() setElementFrozen(source, true) end) end destroyElement(source) createVehToSpawn(v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9], v[10], v[11]) -- create back the destroyed vehicle end for i, v in ipairs(vehspawns) do createVehToSpawn(v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9], v[10], v[11]) -- spawn vehicles on script start end (It's Patrick2562 code, look up. I only add vehicle colors)
  6. Verius

    pls help:

    Hello, write rest of the script. What this function doing? function addGarage(thePlayer, commandName, tipus) if getElementData(thePlayer, "admin") >= 6 then tipus = type --look lua-wiki "type()" end end ( 2nd argument of getElementData must be string type, if 'admin' isn't previously defined string variable )
×
×
  • Create New...