Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 13/01/21 in all areas

  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: physics physicsCreateWorld() - responsible for creating new world for simulations, return element which will use later. 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 ). physics-rigidbody physicsCreateRigidBodyFromModel( model ) - used to create rigid body directly from collision data taken from gta model. 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 ) 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 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. mixed physicsGetProperties( any physics element, physics-property ) - same as above, but getting properties bool physicsDrawDebug( physics ) - use to visualization of world, must be used in render function bool physicsSetDebugMode( physics-debug-mode, enabled ) - use to turn off/on debugging features 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. 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 bool physicsApplyForce( physics-rigid-body, vector from, vector to ) - pushing rigid body in particular point you choosed. 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 bool physicsApplyCentralImpulse( physics-rigid-body, vector direction ) - setting position from center of rigid 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 physicsApplyImpulse( physics-rigid-body, vector direction ) - i'm not sure how it works physicsApplyTorque( physics-rigid-body, vector rotation ) - same as physicsApplyCentralForce but for rotation 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: "heightfieldterrain" shape type accept black-white texture for faster creation Support for cloths, soft bodies Media: Videos are availiable at my youtube channel https://www.youtube.com/channel/UC95MpsQ1JppDNpMvl_7c1rg screenshots and gifs of current progress: Documentation i use: https://pybullet.org/Bullet/BulletFull I'm waiting for your suggestions Topic not finishedd
    1 point
  2. Com o crescimento de qualquer projeto, seja de MTA ou o quê for, cresce também a inveja de muitos e a preocupação dos principais concorrentes. É muito comum tentarem desacelerar e inibir o crescimento do outro perante o medo. O quê muita gente não sabe é que na maioria das vezes, os servidores não são derrubados por DDoS ou DoS. Ataques DDoS demandam grandes quantidades de dinheiro investido, e nessa guerra digital, vence quem tem a melhor infraestrutura, ou seja, quem gasta mais.. Mas se a maioria das quedas ou interferência nos servidores não acontecem por ataque de negação de serviço(o famoso DDoS), então onde e como eles são feitos? Em primeiro lugar, tem a talvez mais conhecida maneira de deixar algo instável: 1 - Flood É importante saber que existem vários tipos de floods, o mais fácil de identificar, é aquele flood por chat. Ele não é o único, existem floods que são um pouco mais complicados de identificar. O flood via chat é muito prejudicial ao servidor, portanto, é recomendável que cada jogador tenha um tempo definido entre as mensagens que podem enviar. Além do flood via chat, existe o flood por comando, que é possível fazer com qualquer comando que qualquer servidor tenha. Por isso, também é recomendável que exista um intervalo de tempo entre os comandos feitos pelo jogador. Principalmente os comandos verificados por ACL são prejudiciais ao servidor. Alguns comandos que com flood são muito prejudiciais são: restart, refresh. Mesmo que o jogador não tenha permissão de executá-lo, o servidor verificará toda vez em que ele digita esses comandos protegidos. Uma solução para isso é bloquear esses comandos por serial, assim, mesmo com o flood deles, o CPU do servidor será menos estressado. O bloqueio desses comandos por serial aliado ao tempo necessário entre um comando e outro, fará com que o servidor não fique sobrecarregado, gerando menores consequências. 2 - Scripts maliciosos Infelizmente pessoas que já tiveram bom nome na comunidade de MTA:SA no passado, acabaram perdendo toda a sua reputação e começaram a fazer o mau, disfarçada por vários nomes. Muitas vezes (deixando claro que não é em todos os casos) as pessoas vendem scripts compilados nos quais possuem códigos maliciosos para gerar estresse no servidor e atrapalhar a conexão, às vezes a ponto do servidor ser reiniciado automaticamente. Muitos desses scripts maliciosos funcionam perfeitamente, mas o código malicioso é acionado por algum comando. Então, você pode verificar os comandos existentes em cada script com o comando commands disponibilizado no nosso script logo abaixo. Existem também casos em que há um backdoor que possibilita o programador malicioso de quebrar toda segurança do servidor e fazer tudo o que está ao seu alcance. Pode ser: Redirecionar jogadores para outro servidor, criar um código o qual lhe dará vantagem no servidor, ganhar acesso restrito ao servidor, fazer ligações externas (com fetchRemote) afim de afetar o servidor com por exemplo, um vírus. 3 - Scripts mal otimizados Também é possível, e infelizmente ocorre com muitos servidores, de ter seu desempenho afetado por scripts mal otimizados. Muitos scripts da internet e não só eles, até scripts que o dono do servidor paga, pode afetar e muito no servidor (quanto mais jogadores, mais é afetado). Dependendo do código produzido, pode conter centenas e às vezes milhares de atualizações de ElementData simultâneas - o que afeta o servidor de modo que não há nem mesmo dedicado para intervir. Essa função em questão, é extremamente prejudicial tanto para o servidor tanto para o client, que é o usuário final - o jogador. Para saber se algum recurso está consumindo mais do que deveria, você pode utilizar o recurso IPB, que já vem com o MTA. Se você não tiver esse recurso no seu servidor, você pode baixá-lo dos resources oficiais do mta e colocar no seu servidor. Obviamente, não são só os ElementData's que podem prejudicar o desempenho do servidor. Um script pode ser mal otimizado por várias questões que englobam a programação. O ElementData foi citado por ser muito comum e muito prejudicial. Se você tem ou está montando um servidor, coloque além das suas idéias de novidades para ele, sua preocupação em relação ao desempenho de cada resource que irá rodar na máquina. Para saber como anda o desempenho dos resources no servidor, você pode verificar olhando o painel do resource ipb. Para isso, ligue o resource e digite o comando no chat "/ipb" ou no F8 "ipb". Selecione a categoria Server, alterne entre as opções de monitoramento e você saberá qual script está consumindo mais e afetando o desempenho do seu servidor. 4 - Múltiplos caracteres no login Talvez esse seja o mais bizarro dessa lista. Não limitar os caracteres no qual as pessoas podem escolher seu usuário ao se registrar. Isso, aliado ao flood de muitos logins com muitos caracteres, pode sim afetar o desempenho do servidor e até mesmo derrubá-lo. Esse é um exemplo de script com falhas deixadas pelo seu criador, que alguns servidores acabaram utilizando. E como não acaba aí, tem também códigos para fazer qualquer bom programador cair em desgosto que fazem aumentar muito o uso de cpu, de memória gráfica e ram. Problemas em geral por uma grande falta de preocupação do criador ou até mesmo a indiferença por ter aquela máxima "se está funcionando, tá bom" e "o que importa é terminar e receber meu dinheiro" (no caso de Scripter pago) acabam fazendo com que se proliferem péssimos tipos de scripts os quais muitos servidores grandes acabam utilizando. Link do script citado acima: https://community.multitheftauto.com/index.php?p=resources&s=details&id=18156 Também não posso deixar de agradecer ao @DNL291, que me ajudou a criar este tópico.
    1 point
  3. setPlayerWantedLevel(player, getPlayerWantedLevel(player) + 1)
    1 point
  4. hey ı was far away from my pc.ı did this man ! thank you
    1 point
  5. Nem értem ezt a voice alapú RP szervereket, feldobja a hangulatot, de eléggé sok hátránya van, nagyon sokan el tudnák funolni az egészet, folyamatosan szabályt lehet vele szegni, és ezt a rendszer még nem is képes logolni.
    1 point
  6. Hey! Please can you check whats happened? My both PC got banned with "MASS SERIAL CHANGING" reason. What can I do? My main PC serial: 0B99257822C15A53BD1650A9B0BFC334
    0 points
×
×
  • Create New...