-
Posts
822 -
Joined
-
Last visited
-
Days Won
86
Everything posted by The_GTA
-
The enter-and-exit of vehicles does require a check of the syncer as described by the wiki documentation of the setPedEnterVehicleFunction. The setPedControlState clientside function does not have such a remark but to properly synchronize the peds it is absolutely recommended to let only one computer do the calculations. Otherwise you might get different ped positions and states depending on client FPS, timing (ping) and user interaction with the ped. You don't have to make your own syncer-registry in this case: simply reuse what MTA has assigned anyway.
-
Happy New Year! ? From Germany.
-
Hello TiTawN, you can use the fetchRemote function to send and receive data from remote servers. This opens up access to all kinds of web services. Try to find your own service provider that allows you to send SMS messages via web request. Keep in mind to closely follow their guidance related to secure authentication and data exchange.
-
Today we mark the last day of the year 2021. Thus it is a good moment to look back at 4 and a half months worth of Eir Compile developments. This project is about creating the ultimate compiler along with an astounding lexer for all CFG purposes. With each passing day new problems are encountered and ultimatively solved, just for you to enjoy in the upcoming product as service package. This is easier said than done. But I find it important to explain the intricacies for you to understand why there is no better CFG parsing and processing product than the Eir lexer. Back in August was when development started. I had the idea to use the power of the newest C++20 features to create the most maintainable, user friendly and performant compiler possible, using the best lexer I could come up with and the best research about code transformation along the way. It was a difficult start with problems such as picking the right lexing strategy (DTM vs NTM), designing a powerful grammar notation language (standard-compilation-syntax short SCS) and establishing a good object building framework surrounding the grammar rules. Looking back all this time I am happy about every decision that I made. This is important because software development is a business and with every faced decision you do take risks, some quite substantial. The most difficult decision - it sure gave me big headaches - during that time was the limitation of the lexer to deterministic processing. It was a question between the capacity of supported grammars and the possibility of lexical optimizations. If you are a developer then you might know about unit-tests. This has been a continuing effort across all the months. I made it a habbit to create unquestionably working solutions by getting each feature a good unit test. Today there is more than 500 kilobytes, half a megabytes worth of unit test code in the Eir Compile project. This is more than 15000 lines of code combined. Creating them comes down to having internal docs that explain the test in great detail and then transforming the science into code. Typing the unit test code in C++ is a lot of work but it is essential. I promise you that the Eir lexer has the best unit tests compared to all other lexers. You should pick the Eir compiler because it is a proudly tested product from all angles. Here is how a COS lexing unit-test looks like in my own docs: Near the end of November I did reach the point when I was confident about the COS specification. I am very enthusiastic about the upcoming possibilities. But I might had been overly emotional with my claim that I wanted the compiler to be finished by the end of December. I regret the fact that I did not see the curve-balls coming that the CFG lexing problems would throw at me. It can be explained very easily in a two sided conflict. On one side is my big aspiration of perfectly-fit code with the best performance goals in mind. At the other side we have the broad possibilities of the CFG world. This clash led to a tug of war in seeing the final status of the Eir lexer. New features in this revolutionary solution had to be developed in a brink to feed the craving beast of design freedom and perfection, the latest being grammar templates with replacement-point-step support. As a result, the need for no-progress-gates arised which reset empty-reentrancy and result-status information of enclosed productions. This is where we are today and will continue our journey into the coming year. To include an insight into my current developments let me share the current revision of the Compiler-Object-Syntax (short: COS) with you. It contains support for C++-style declarations, structs, enums, if-statements, loops, type-casting, template-instantiations and type-defs. The prototyped test code can be found at this URL: https://osdn.net/projects/eircompile/scm/svn/blobs/69/testcompiler/src/cos_tests.cpp (full version at https://green-candy.osdn.jp/external/forumuploads/eircompile/cos_grammar_31122021.pdf) In case you are having trouble understanding the virtual lexing grammar above, it is written in Eir standard-compilation-syntax (short: SCS). I have not previously described it but it should be naturally intuitive. You can find it here: https://green-candy.osdn.jp/external/forumuploads/eircompile/scs_spec_31122021.pdf I hope that you are not too disappointed in the current status of my project. You see the difficulties of my work and why the Eir lexer (and compiler!) will be matching your expectations very well, especially because I am not taking any unfounded short-cuts. Creating this compiler is about embedding my own vision, my own mind, my own skillset into a software framework that developers are able to query at their green fingertips. Your trust into me and my way of support shall be reflected in every portion of this software. Let me end this post by prematurely wishing you a happy new year! ?
-
Hello david1231237, it looks like you are new to MTA server management. Don't be afraid, it might take some time and resources to learn but once you are used to it, doing the maintenance is actually quite easy. What you are experiencing right now is an access violation because you are trying to refresh the server resources from a server guest account. Every client that connects to your MTA server does have a server account and you happen to have an account that has no privilege to strong commands. To mitigate this issue you should either type the command directly into the server console or try to login using a more-privileged account. You can use the /register command to create a username-and-password protected server account. Then you can use the /login command to switch user accounts. By modifying the ACL.xml file of your MTA server deatchmatch mod you can assign your new account admin privileges so that executing /refresh from your MTA client would be no problem. Good luck!
-
You understood me correctly and I did understand you correctly, too!
-
Yes, I think that this practice of "creating (...) own code" along with documentation does teach the developers the respect for other people's work. For example, let's take a look at my Magic.TXD which has a parser for just about all the commercial RW TXD file formats. The code and parsing models inside of that tool which are related to TXD files are essentially my work, with the help of accredited third party code as side contribution. Of course, much of the data layout is fixed due to expectations of the target architectures but there was a lot of ingenuity involved at connecting the dots. From reading your post I think that you get the idea. I am a big fan of good-founded binary file formats, such as @Reyomin's node file format as discussed in this thread. The advantage of binary file formats is their nativity to the platform as well as the deterministic structure (you know the file contents by hard). There is no room for unnecessary ambiguity. And from what I gather Reyomin has even potentially improved the mathematical structure by compressing multiple nodes in one line into a two-node minimal representation. The science does shine through, which is splendid! ?
-
We cannot answer your personal support request due to lacking technical specifications or user manuals. A quick search on the internet has led to no results, not even on the manufacturer's website. Thus it is a risk to try this controller. Relying on an imaginary "industry standard" is not a good idea.
-
It is quite a shame how certain projects were handled and that the code was released to the public in such a complete form, claiming to be the original but lacking the DRM protections of the originals, just giving room for the most misunderstanding, emotionally childish people to abuse the GTA modding situation. Every GTA modder was hurt by the grievous IP rights breach. Since most of you hard working MTA engineers know reverse engineering from the "expose the necessities, tie together with the original game being present" you are not likely to breach the core principles of respectful IP rights handling. But those people even tried to establish their own funding-based IP rights touching product were they had no permission. Please be careful about mentioning reverse engineering projects because one of them I quite disagree with. I know, this situation has gone quite out-of-hand in this passing year and you might not have followed the situation as closely as I did. Going into these source codes is risky. I would like to give you an example of how risky other people that touch other IP works see it. The ReactOS project disallows contributors if they even worked for Microsoft, let alone took a look into the original source code. Quite the extreme stand-point, but I guess they had quite the breaches based on their many years of experience with random newcomers trying to contribute code they could not faithfully trace back to the real origin. Just be careful and put in your own work after all, alright? ?
-
Hello Patlik, have you tried asking the resource creator for help? Judging by his legal statement he does want you to contact him in case of such need that you describe. Since I think that he would know best how to support you I have asked him to come here. Have you tried using the MTA marker functions in connection with onMarkerHit to open the GUI? I don't see anything that would indicate that you tried. atm_system | Multi Theft Auto | Community Dazee - Multi Theft Auto: Forums (mtasa.com) I recommend you to use the createMarker function, the getElementType function, the addEventHandler function and the onMarkerHit event. Then inside of your own event handler check for any player element that has hit the marker you created and call the provided openGUI function with the player as first parameter.
- 1 reply
-
- 1
-
Hello gubi, you are mixing tabs with spaces. You can fix it by converting tabs to a sequence of 4 spaces or the other way round. The SciTE text editing program can do that for you very easily...
-
Hello Danii.-, ist looks like you are expecting a player (not ped) inside of your onColShapeHit server-side event handler but have not installed logic to handle other element types, such as vehicles. I suggest you to use the getElementType function in connection with an if-statement to limit your event handler to source variable elements that are players. Or you could limit it to vehicles but then check that the vehicle is being driven by a player. As it currently stands, there is a common bug/misconception in your code. Hope this helps!
-
I would like to add that peds should be created on the server-side and then the syncer of the ped, which can be checked using the client-side isElementSyncer function, should control it, for example using the methods as described by FernandoMTA. I did do experiments many years ago when the peds still had to be controlled using old functions. From my experience I can say that creating a bot system is very complicated. Also there is no access to pre-made API about navigational meshes or the math surrounding it so the design does require actual work. I am not sure if this project is a good idea for a self-proclaimed beginner like you.
-
Hello DRW, the reference Lua implementation is not made for time-critical applications. The reasons are many: the virtual machine that acts as interpreter does pad the runtime through debug logic and garbage collection interleaving. Such runtime padding does negatively affect the responsiveness of Lua applications if taken to the extreme (for example 50ms). the MTA event system is implemented (or even at this point "designed") to be synchronous. That is why a call to triggerEvent can be very expensive. Imagine that the event call has to wait for all the resources to complete that registered an event handler. At some point you might not even fit your own deadline guarantees anymore. apart from offering very tight deadlines, your implementation is flawed. You are expecting that between each call of your Timer callback exactly 50ms have passed but in all reality at least 50ms have passed thus an offset that is invisible to your implementation is building up in the time, making your event system more and more unreliable. I am reading this as your understanding of the matter because you are adding an exact value of 50 to the timePassed variable instead of calculating the real time difference between invocations. You have asked about the difference between the MTA timer system and a custom Lua based variant. By reading your post I got the impression that you might think that keeping as much things Lua internal as possible would improve performance, as sometimes advertised on the internet (C barrier of the implementation). This is not a good idea in this case, as pushing as much of the time-critical mathematics and dispatching to the underlying C++ timer system is better than just writing a Lua based thing (for reasons already touched on above). How do you know that the user would be interested in steps of fixed time intervals anyway? The beauty of the MTA timer system is that it allows to check for elapsation of a custom time difference approximation > 50ms and that is better than what your idea of "performance improvements" provides. Think about this before you do too much of this "work". Hope this helps!
-
This is terrible practice so don't to it this often. You can count the time on the client and re-synchronize every hour or so, or by the click on a UI button triggered by the user.
-
You're welcome! I am glad to have helped you. We are a community that care about each other.
-
Hello Egor_Varaksa, are you aware that the client and the server can be located in different time zones? That is why the getRealTime function can return different time values for either side. If you want to know the server's local time then you should call the getRealTime function on the server-side and then use remote MTA events using the triggerServerEvent and triggerClientEvent functions to first request the time and then send the requested values to the specific clients that want it.
-
Wouldn't it be a security hazard if it did? After all authentications could be performed on remote web pages.
-
Hello lilnaxo, do you by chance know any Lua scripting?
-
Hello ivan8065, I would like to amend the statement by IIYAMA which I think does lead you in the right direction. The way that you have written your clientside code the "synchronization" is only happening for the player that requested the action, not all the players. This way it causes a desync where other players cannot see changing of the components between each other. Consider changing... ... addEventHandler("scp", localPlayer, scp) ... to ... ... addEventHandler("scp", root, scp) ... I am not sure if IIYAMA is aware but the source variable in ivan8065's code event handlers is already containing the player, so there is no need to put a "thePlayer" parameter to the event handler. You should consider doing... function scp() local theVeh = getPedOccupiedVehicle(source) Also please consider naming your events strongly and picking different function names than the event names. Keep up the good work with those interesting ideas!
-
Merry Christmas to the ones who celebrate it! Happy holidays or just a generally nice time at the end of 2021 to everyone. We had quite the ride until today and we shall continue having much fun and strength as community.
-
They could even overwrite the "getPlayerMoney" clientside function. I have no idea because that guy does not show any code. This conversation is really frustrating to us and funny to the detached observer...
-
Hello TiTawN, have you taken the considerations related to Script security into account? It is a real threat that is not expected by many server owners or script writers!
-
I see. You can retrieve the model of the localPlayer element by calling getElementModel. The element model of the player is also called the "skin ID". Then you can check that it matches your model number, for instance 66.
-
Hello MisaFix, it would be helpful if you could share the code that you have already made. This question appears to be complicated.