PDA

Просмотр полной версии : [C#] SampSharp Framework



Bib
21.01.2018, 22:09
https://raw.githubusercontent.com/ikkentim/SampSharp/master/sampsharp.png
SampSharp


Всем привет.
Я бы хотел рассказать о фреймворке SampSharp, с помощью которого можно писать мод на C#.

Использование этого фреймворка дает огромные преимущества, как перед написанием мода на Pawn, так и перед написанием мода с помощью других фреймворков или SDK. А всё за счет относительной простоты C#, и в то же время его большими возможностями.


Пожалуй опишу как установить предрелизную(0.8) версию, т.к. у стабильной(0.7.62) беда с поддержкой кириллицы.


Скачайте (http://files.sa-mp.com/samp037_svr_R2-2-1_win32.zip) и распакуйте архив с сервером SA-MP.
Скачайте (https://github.com/ikkentim/SampSharp/releases) архив с последнего релиза(SampSharp-0.8.0-****.zip), содержимое папки внутри архива переместите в папку с сервером.
Укажите плагин SampSharp в server.cfg: plugins SampSharp.
Установите (https://www.visualstudio.com/ru/thank-you-downloading-visual-studio/?sku=Community&rel=15) Visual Studio 2017 и загрузите установщиком пакет Кроссплатформенная разработка .NET Core.
Создайте консольное приложение .NET Core
Добавьте ссылки на библиотеки SampSharp.GameMode и SampSharp.Core(соберите или скачайте (https://www.dropbox.com/s/oufvuafx0ycmfvy/SampSharp_libs0.8-alpha6.zip?dl=0)).



SampSharp 0.8 работает в отдельном процессе, общаясь с плагином по протоколу TCP. Поэтому нужно запускать и SampSharp сервер, и SA-MP сервер,для того чтобы вывести приветствие:
class Program
{
static void Main(string[] args)
{
var gameModeBuilder = new SampSharp.Core.GameModeBuilder();
gameModeBuilder.Use<GameMode>();
gameModeBuilder.Run();
Console.ReadLine();
}
}

class GameMode : SampSharp.GameMode.BaseMode
{
protected override void OnInitialized(EventArgs e)
{
Console.WriteLine("Hello, World!");
}
}


Давайте покажем подключившемуся игроку диалог с приветствием:

C#


protected override void OnPlayerConnected(BasePlayer player, EventArgs e)
{
var message = new MessageDialog("Приветствие", $"Привет, {player.Name}!", "Привет");
message.Show(player);
}

Pawn


public OnPlayerConnect(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
new hello[MAX_PLAYER_NAME + 10];
format(hello, hello(result), "Привет, %s.", name);
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, "Приветствие", hello , "Привет", "");
}

На Pawn быстрее и приятнее всего можно будет написать мод, тем более с IntelliSense:crazy:



GitHub (https://github.com/ikkentim/SampSharp) | API (http://api.sampsharp.timpotze.nl/html/7e27b938-53b3-cb21-950d-a350ce5bccdd.htm) | Документация (http://alpha.sampsharp.timpotze.nl/)

(тема будет дополняться, в т.ч. документацией)

Geebrox
23.01.2018, 09:22
Что по производительности, если весь гейм мод писать на c#? Разница есть?

Bib
23.01.2018, 20:07
Что по производительности, если весь гейм мод писать на c#? Разница есть?

Нужно смотреть на производительность sampgdk, поскольку фреймворк его и использует. Вот что Y_Less написал об этом http://forum.sa-mp.com/showpost.php?p=2417601&postcount=13. Ну и производительность .NET Core и C# нужно еще иметь в виду.
На этой неделе протестирую

Geebrox
23.01.2018, 21:17
На этой неделе протестирую

Буду ждать отчеты в этой теме :agree:

Bib
24.01.2018, 20:31
Запустил на vps, работает :boast:. Позже будут инструкции, а пока что оставлю только ссылки.
Скачать SampSharp.so (https://www.dropbox.com/s/lis7scshds9qpc0/SampSharp.so?dl=0)(собрал, а то на гитхабе нету)
Установить .NET Core (https://www.microsoft.com/net/learn/get-started/linuxubuntu)

если кратко, то все как на винде. только мод я запускаю командой dotnet gamemode.dll &, а сервер ./samp03svr &

Fallen A.
24.01.2018, 21:37
ОФФТОП: где-то плачет один серегамил.

Bib
24.01.2018, 22:06
О чем ты? Он же вроде и на шарпе пишет, должен радоваться

ziggi
25.01.2018, 18:49
О чем ты? Он же вроде и на шарпе пишет, должен радоваться

Слёзы счастья:)

Fallen A.
25.01.2018, 21:51
Слёзы счастья:)

Прямое попадание :)

Bib
27.01.2018, 19:46
Быстро до меня доходит)

Протестировал я идентичный код на Pawn и C#. В итоге последний оказался шустрее.





Pawn
Pawn(JIT)
C#


Объединение строк
9538 мс
4802 мс
3575 мс


Копирование элементов массива
41150 мс
3317 мс
1022 мс


Вычисление факториала
87652 мс
11705 мс
4601 мс


100 млн холостых итераций
2702 мс
280 мс
44 мс

VVWVV
27.01.2018, 21:12
Быстро до меня доходит)

Протестировал я идентичный код на Pawn и C#. В итоге последний оказался шустрее.





Pawn
Pawn(JIT)
C#


Объединение строк
9538 мс
4802 мс
3575 мс


Копирование элементов массива
41150 мс
3317 мс
1022 мс


Вычисление факториала
87652 мс
11705 мс
4601 мс


100 млн холостых итераций
2702 мс
280 мс
44 мс



А зачем было сравнивать? И так понятно, что компилятор Pawn очень слаб по сравнению с C#.

Bib
27.01.2018, 22:22
И так понятно, что компилятор Pawn очень слаб по сравнению с C#.

Интересно было на сколько. С JIT плагином в принципе нормально

Geebrox
28.01.2018, 08:09
В офф документации написано, что нужно ещё установить mono, а тут такого не нашёл. Нужно ли и зачем? Просто я чайник в этих делах.

Bib
28.01.2018, 10:18
До 0.8 можно было пользоваться только mono. Сейчас можно выбирать между mono и net core.
Net Core лучше в плане производительности, а mono лучше использовать если нужны библиотеки которых нет для net core

Seregamil
28.01.2018, 19:19
ОФФТОП: где-то плачет один серегамил.

Так я ж не пишу моды третий год, так что дико параллельно.

- - - Добавлено - - -


До 0.8 можно было пользоваться только mono. Сейчас можно выбирать между mono и net core.
Net Core лучше в плане производительности, а mono лучше использовать если нужны библиотеки которых нет для net core

Моно тормознутее, в прочем, ты/вы упомянул это.
Какой смысл юзать моно, если практически все библиотеки есть под .net core? А те, которые не переведены вообще не нужны при написании модов

hw2cb
16.11.2020, 21:53
А что насчет include??? К примеру progressbar, как использовать этот инклуд на шарпе?