SA-MP Forums

Go Back   SA-MP Forums > SA-MP Scripting and Plugins > Plugin Development

Reply
 
Thread Tools Display Modes
Old 14/03/2018, 11:39 AM   #1
EvaBaka
Little Clucker
 
Join Date: Jul 2016
Posts: 3
Reputation: 23
Default Rust SA:MP SDK

It's a Rust library allows you to write plugins in Rust.

Features
Hides most of type coercion. You don't need make a cell type as a String or other things yourself.

Macros:
  • new_plugin! that defines a plugin and exports functions.
  • define_native! defines a native and parses arguments.
  • log! calls logprinft funciton.
  • natives! makes a vec of your natives.
  • get_string! and get_array! convert pointers to a slice or a String.
  • set_string! sets a string to an AMX by a physical address.

Make a new plugin
Code:
struct Plugin {
    version: &'static str,
    amx_count: u32,
}

impl Plugin {
    fn load(&self) -> bool {
        log!("Plugin is loaded. Version: {}", self.version);
        return true;
    }

    fn amx_load(&mut self, amx: &AMX) -> Cell {
        let natives = natives![
            { "MyFunction", my_function }
        ];

        match amx.register(natives) {
            Ok(_) => log!("Natives are successful loaded"),
            Err(err) => log!("Whoops, there is an error {:?}", err),
        }

        self.amx_count += 1;

        AMX_ERR_NONE
    }

    fn amx_unload(&mut self, _: &AMX) -> Cell {
        self.amx_count -= 1;

        AMX_ERR_NONE
    }

    fn my_function(&self, _amx: &AMX, player_id: i32) -> AmxResult<Cell> {
        Ok(-player_id)
    }
}

impl Default for Plugin {
    fn default() -> Self {
        Plugin {
            version: "0.1",
            amx_count: 0,
        }
    }
}

new_plugin!(Plugin);

// Also you can make a plugin with ProcessTick support.
new_plugin!(Plugin with process_tick)
Define a native function.
Hides arguments parsing inside the macro.

All you need are to define a method function_name in your new plugin with given arguments.

Code:
// native: FunctionName(int_arg, &float_arg);
define_native!(function_name, int_arg: i32, float_ref_arg: ref f32);

// native: WithoutArguments();
define_native(function_name);
Call natives and public functions.
Code:
// Broadcast to all subscribers that a user have changed his name.
fn notify(&self, amx: AMX, player_id: u32, old_name: String, new_name: String) -> AmxResult<Cell> {
    exec_public!(amx, "OnPlayerNameChanged"; player_id, old_name => string, new_name => string) 
}
Documentation and examples
Here is documentation and there is an example plugin (Memcached library) and here is a more simple example.

Repository
https://github.com/ZOTTCE/samp-sdk

Ask your questions and more popular will be in wiki on GitHub.

Last edited by EvaBaka; 15/03/2018 at 07:39 PM.
EvaBaka is offline   Reply With Quote
Old 14/03/2018, 11:54 AM   #2
Sia
Little Clucker
 
Sia's Avatar
 
Join Date: Sep 2017
Location: Ukraine
Posts: 6
Reputation: 0
Default Re: Rust SA:MP SDK

Nice proga SDK plygin
__________________
Sia is offline   Reply With Quote
Old 15/03/2018, 12:42 AM   #4
Kaperstone
Banned
 
Join Date: May 2011
Location: Russia
Posts: 3,012
Reputation: 824
Default Re: Rust SA:MP SDK

Awesome!
Kaperstone is offline   Reply With Quote
Old 15/03/2018, 02:11 AM   #5
KayJ
Gangsta
 
KayJ's Avatar
 
Join Date: Apr 2014
Posts: 681
Reputation: 64
Default Re: Rust SA:MP SDK

Nice
KayJ is offline   Reply With Quote
Old 15/03/2018, 10:01 AM   #7
Zeth
Huge Clucker
 
Zeth's Avatar
 
Join Date: Feb 2017
Location: Titan
Posts: 428
Reputation: 114
Default Re: Rust SA:MP SDK

Amazing!
Zeth is offline   Reply With Quote
Old 15/03/2018, 11:41 AM   #8
KashCherry
Big Clucker
 
KashCherry's Avatar
 
Join Date: Feb 2018
Location: Estonia
Posts: 60
Reputation: 30
Default Re: Rust SA:MP SDK

Nice
KashCherry is offline   Reply With Quote
Old 15/03/2018, 12:03 PM   #9
NaS
High-roller
 
NaS's Avatar
 
Join Date: Mar 2008
Location: 🇩🇪
Posts: 1,652
Reputation: 559
Default Re: Rust SA:MP SDK

Nice, definitely going to try it out.
NaS is offline   Reply With Quote
Old 15/03/2018, 02:07 PM   #10
PT
Godfather
 
PT's Avatar
 
Join Date: Nov 2012
Location: Europe
Posts: 7,169
Reputation: 802
Default Re: Rust SA:MP SDK

It’s very interesting this plugin

Nice work
PT is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Rust On 4GB RAM K0P Everything and Nothing 20 28/12/2016 01:34 AM
[Projeto] San Andreas Rust (DayZ/Rust/Survival) JPedro Português/Portuguese 38 15/10/2015 03:31 AM
[Off] Rust para SA-MP PratesPlay Português/Portuguese 17 27/02/2014 08:29 PM


All times are GMT. The time now is 11:00 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.