CrosRoad95

Members
  • Content Count

    78
  • Joined

  • Last visited

  • Days Won

    2

Posts posted by CrosRoad95


  1. For long time i considered to do something with physics in mta. For now doing even simplest things such falling box, tree on flat area looks cartoonish. In my history of i saw few attempts of doing simple physics, mostly it was in closed area without bigger interactions with poor performance due you just can't calculate collision in other way than processLineOfSight, isLineOfSightClear or read directly .col file as Tederis did.

    I started with something to render things, thats how FBX https://github.com/multitheftauto/mtasa-blue/pull/1093 to bypass default rendering to handle future i'll introduce in future.

    That's how bullet physics project born, first idea how to use react physics, works simillar but is lighter and general smaller project but 0x416c69 suggested to use bullet. I'll use this topic also to prepare long list of features it contains for future copy paste to PR and wiki page

     

    The main assumption is to allow for create multiple world with completly independed simulations, get and set detailed information about current step of simulation, fully control how everything is simulated, quality of collision tests, speed and a lot more.

    i'm trying keep amount of functions low, because if that most stuff is packed into one function.
    Syntax and name of some function might change in future or along suggestions.
    Not all properties supports every physics element, some are only get, other set only, however most of them are set/get

    Current stage:

    I already implemented function such a:

    1. physics physicsCreateWorld() - responsible for creating new world for simulations, return element which will use later.
    2. physics-rigidbody physicsCreateRigidBody( shape-type, mixed arguments ) - creates rigid body which is use to simulation bahaviour of non-static shapes, collisions ( currently only few models in mta can do this in simple way ).
    3. physics-rigidbody physicsCreateRigidBodyFromModel( model ) - used to create rigid body directly from collision data taken from gta model.
    4. physics-static-collision physicsCreateStaticCollision( shape-type, mixed arguments ) - creates static collision which will not move at all ( it is still possible to move it by Lua script )
    5. physics-shape physicsAddShape( shape-type, mixed arguments ) - if you create compound shape, this function let you add more shapes into static collision or rigid body
    6. bool physicsSetProperties( any physics element, physics-property, mixed arguments ) - main function to control physics, rigid bodies, static collisions, shapes. Works in simillar way as handling functions.
    7. mixed physicsGetProperties( any physics element,  physics-property ) - same as above, but getting properties
    8. bool physicsDrawDebug( physics ) - use to visualization of world, must be used in render function
    9. bool physicsSetDebugMode( physics-debug-mode, enabled ) - use to turn off/on debugging features
    10. bool physicsBuildCollisionFromGTA( physics ) - used to create static collisions in specified world from original collisions, doesn't create whole world instantly, require to move player around world to load collision data.
    11. physics-constraint physicsCreateConstraint( physics, physics-rigid-body, physics-rigid-body, constraint-type, mixed arguments ) - use to connecting two or more rigid bodies into one entity
    12. bool physicsApplyForce( physics-rigid-body, vector from, vector to ) - pushing rigid body in particular point you choosed.
    13. bool physicsApplyCentralForce( physics-rigid-body, vector direction ) - apply force from central position of rigid, it's more like "accelereate", should be used more than once at the some period of time
    14. bool physicsApplyCentralImpulse( physics-rigid-body, vector direction ) - setting position from center of rigid
    15. bool physicsApplyDamping( physics-rigid-body, float force ) - i'm not sure, but it should slow down velocity and rotation of model by specified amount of units
    16. physicsApplyImpulse( physics-rigid-body, vector direction ) - i'm not sure how it works 
    17. physicsApplyTorque( physics-rigid-body, vector rotation ) - same as physicsApplyCentralForce but for rotation
    18. physicsApplyTorqueImpulse( physics-rigid-body, vector rotation ) - setting rotation speed

    physics-properties: "mass", "position" ,"rotation", "sleepingthresholds", "restitution", "scale" "debugcolor", "filtermask", "filtergroup", "stiffness"

    `sleepingthresholds` means how slow rigid must move/rotate to sleep, it makes stops moving at all but still can be pushed by other rigids
    `restitution` bounciness, between 0-1 but accept any value above

    `stiffness` - for fixed constraint

    `filtermask` i still figuring out how it work, but should let you use 32 bit mask to set which rigid with which should collide

    Bullet documentation: https://github.com/bulletphysics/bullet3/blob/master/docs/Bullet_User_Manual.pdf
    page 13 contains useful information when which shape should be used

    physics-constraints: "pointtopoint", "hidge", "fixed", "slider"

    Physics-shapes: "box", "sphere", "capsule", "cone", "cylinder",  "heightfieldterrain", "compound", "trianglemesh", "convexhull"

    `compound` is used for constructing rigid made of various shapes

    Plans for future:

    1. "heightfieldterrain" shape type accept black-white texture for faster creation
    2. Support for cloths, soft bodies
    3.  

    Media:
    Videos are availiable at my youtube channel https://www.youtube.com/channel/UC95MpsQ1JppDNpMvl_7c1rg
    screenshots and gifs of current progress:
     

    Spoiler

    unknown.png Ray casting

    wonsz.giffixed constaraint

    snake.giffixed constraint

    unknown.pngscaled heightmap

    unknown.pngcapsule shape

    unknown.pngcone shape

    unknown.pngcylinder shape

    unknown.pngheightfield terrain filled with spheres

    unknown.pngsingle sphere in heightfield terrain

    unknown.pngheightfield terrain scale and filled with spheres

    unknown.pngexample usage of physicsCreateRigidBodyFromModel

    unknown.pngexample usage of physicsCreateRigidBodyFromModel

    unknown.pngrandom spheres and boxes spreaded around world, green are sleeping one

     

     

    Documentation i use: https://pybullet.org/Bullet/BulletFull

    I'm waiting for your suggestions

    Topic not finished

    • Like 12
    • Thanks 3

  2. - place random object from category, example random tree, random rock, random bush etc. with option random rotation

    - move multiple objects at once

    - support for water, colzones, occolusion zones, custom models

    - save in various methods, as .map, .lua, .sql, compress file ( example: dont set interior=0 if by default interior = 0, dont set posX = 123.0000005 )

    - simple permission system, example provilages to: edit, create, destroy, save, load, map settings

    - upgrade remove world object, now, some object are impossible to remove ( if you click but nothing you clicked, then script find nearest 10 world objects and show you in list )

    - import map to current map which able to marge multiple maps into one, and export part of map into separated files ( example you can export all object which in colshape )

     

     

    • Like 3

    • bitwise operators
    • goto statement
    • more metamethods
    • new function table.move
    • new function string.pack
    • new function string.unpack
    • new function string.packsize

    this is only few

    • Like 1

  3. This topic was considered many times, mta team said that "this can break already existed scripts" but there can be option to change version of lua, by default: 5.1

     


  4. Hi,

    i'm writing becose i was developer of over a dozen servers and now i still develop yet another server.

    I know lua very well and i sometimes see walls which was placed by mta team, mostly for scripting:

    1. Enable disabled functions ( mainly: `require` )
    2. Files and dirs, listing them, read/write binary, edit files from directories above resources
    3. Importing script from other resource ( something like c++ `include` )
    4. Exporting classes, I can create server with 1 big resource but this make no sens
    5. Sandboxes like sub-resource, few functions which allow to make your own resource system.
    6. Extended modules api ( more events, example for editing resource while loading ( possible macros ) ), allow to load clientside modules ( example module with custom animations @saml1er ) if user agree. ( yes, user can be stupid and agree to install ransomware  ¯\_(ツ)_/¯ )
       

    This options could be enabled by secret setting in mtaserver.conf. Hosting providers can easly disable this like `maxslots` now.

    If someone install resources  from others people ( or don't checking them ) them he has problem. This isn't argument to not doing this.


  5. i mean protect my resources after sold in order to someone don't give that resource anyone else

    until meta.xml isn't compiled, i can crack EVERY resource on the internet

    i can modify meta.xml and add script which overwrite all security functions

    function addDebugHook()end
    function fetchRemote() return true end
    function checkResourceLicense() return true end

     


  6. i'm writing because in mta there is impossible to make safe shop with resources, to improve this, mta team should implements one of my example solution or come up with your own, better ones.

    1. Resource as `executable file` - lua.mtasa.com should allow to pack every script with meta into 1 file `myResource.mtaexe` which is recognize as normal resource but you cant add your own code before/after resource start. You can't overwrite my functions, you can't change meta.xml. If you want to use files. Also tag <file> should receive attribute `checksum` to verify external files. This executable file could be simple obfuscated .zip file.
    2. function `restoreOriginalFunction( functionName )` - this function resource original function, but if you have N lua script, then for each script this function will be overwritten, currently example function `outputChatBox` is registered once per resource and other script can overwrite them in other file. This function allow to protect other functions before overwriting

    For both should be added function to disable addDebugHook for this resource. 


  7. why .obj and .mtl? becose it are text files.

    i can do function which move selected vertex to other position 348957349857398573x easier than dff & col

     

    function like convertOBJtoCOL(input,output) and convertOBJtoDFF(input,output) and convertMTLtoTXD(input,output) allow to make blender/3ds max/z moddeler in mta <3