Jump to content

Leaderboard

Popular Content

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

  1. MTASA Typescript I am developing utility packages for transpiling TypeScript into an MTASA-compatible Lua code. I would like to share that project to receive some suggestions and, I believe, to help someone in resource writing. Why Lua is not so good Classes. Lua does not support classes (syntax) from scratch. If you want to write OOP code with your own classes, you have to use metatables to implement class objects behavior. That's make the source code more complicated, than it could be. Hints (from your IDE). Lua is dynamic typed language, therefore, it's hard to determine, what the variable is and, hence, IDE cannot hint you function declarations, object methods and etc. MTASA Lua is still 5.1 (it is not developing). Lua, like any programming language, is developing, however MTASA core strongly linked to Lua 5.1. Why TypeScript There is TypeScriptToLua project. My project is based on TypeScriptToLua (I use it as a dependency). General purpose of TypeScriptToLua: convert (transpile) typescript code into Lua code. Thus, you can use TypeScript without modifying MTASA core. You are available to not use types in some parts of code (you are not restricted to use types everywhere). The TypeScript is being developed by Microsoft and, I believe, that TypeScript will be alive for several years. When to not use TypeScript (where to use Lua instead of TypeScript) 1. If you are not familiar with Lua or with scripting in general. 2. if you are writing simple script. Introduction Video I have made the video, where I describe Lua disadvantages, explain, why I have chosen TypeScript (and language transpiling) and write an example. Few word about mtasa-lua-types I have created this package to provide MTASA declarations in TypeScript. If you would like to create a resource, you haven't to install it manually, just use the boilerplate. Quick Start I have provided the tutorial here: https://github.com/mtasa-typescript/resource-boilerplate. So, you have to install NodeJS and download my boilerplate. And,... you are ready to code. If you have any ideas, issues or suggestions -- post them below, or in youtube comments, or in github issues ? Example code (from youtube video) import { Player } from 'mtasa-lua-types/types/mtasa/server/oop/Player'; import { mtasa } from 'mtasa-lua-types/types/mtasa/server'; interface GithubCommitApiResponse { commit: { message: string; } } mtasa.addCommandHandler('getcommit', function(player: Player, cmd: string) { mtasa.fetchRemote( 'https://api.github.com/repos/mtasa-typescript/mtasa-lua-types/commits?per_page=1', (data: string) => { const json = mtasa.fromJSON(data) as GithubCommitApiResponse mtasa.outputConsole(`The last commit message: ${json.commit.message}`) } ) }) Future plans - Github bot, that will crawl mtasa wiki and update mtasa-lua-types continuously - Add better hinting for `addEventHandler` function Links WebSite: https://mtasa-typescript.github.io/ GitHub MTASA TypeScript Projects: https://github.com/mtasa-typescript Resource Boilerplate: https://github.com/mtasa-typescript/resource-boilerplate Resource Example: https://github.com/mtasa-typescript/resource-example
    1 point
  2. Hello! Yesterday i've finished fontawesome 5.15 icon library for MTA:SA. This scripts allows you to use ~1500 fontawesome icons in MTA:SA with a simple dxDrawText. You can buy here only for 5 dollars! ? https://payhip.com/b/4u1mk
    1 point
  3. Any examples of how this script is used to draw the text onto the screen? Why shouldn't I just load in the fonts myself and then use them? Basically I'd like to know what this script does to make this process easier and why it would be worth the 5 dollars. Nevertheless, good job!
    1 point
  4. Your thread has been moved to a more language-specific section so that you can get better answers in your native language.
    1 point
  5. I have released the 1.0 version of MTASA TypeScript project. Main changes - Upgraded the Wiki parser, OOP definitions and add generics (for event declarations or key binding) - YML format for meta file (with schema, so you will receive hints while filling it). Supports multiple resources in the same boilerplate. - Reduced steps to create a new project - Better linting for declared in meta files and client-, server- side import Quick Start 1. Steps to create a new project a) Install NodeJS from the official web site. b) Open a console in the resources directory and enter npx mtasa-lua-utils new-project Fill the inputs and select the feature you would like to use. That's all, you are ready to code 2. Available commands Since, there is a multiple resources support, you can use the command to create a new one: npx mtasa-lua-utils new-resource To build the entire project use one of the listed commands: npx mtasa-lua-utils build npm run build 3. YML format for the meta file info: name: TypeScriptResource # Name of the resource type: script # Resource type compilerConfig: srcDir: TypeScriptResource # src/TypeScriptResource will be the script root folder scripts: # Declarations of all TS files, used in the resource - src: client.ts type: client cache: false - src: server.ts type: server cache: false - src: utils.ts type: shared cache: false --- # Here you can put another resource declaration Schema for the YML file already prepared in the boilerplate for VSCode and WebStorm. Schema file location, if you would like to specify it manually.
    1 point
  6. Event Types Hinting I have implemented the types for events. Example code is available on GitHub Demonstration How To Use Event Handlers mtasa.addEventHandler<mtasa.Event./* specify the event type */>( /* the event name will be hinted automatically */, /* put the source element here*/, function (/* function arguments will be hinted */) { // Insert the payload }, ); Events trigger (with custom event, for example) export interface YourCustomEvent extends GenericEventHandler { name: 'MyCustomEventName'; // You can specify `const enum` for multiple names function: (this: void, ...args: any[]) => void; } mtasa.triggerClientEvent<YourCustomEvent>( /* put the source player (or root) */, /* the event name will be hinted automatically */, /* put the source element here*/, /* function arguments will be hinted */ ); What are you thinking about the idea? Is that interesting for you (and why, if not)?
    1 point
×
×
  • Create New...