Русское сообщество по скриптингу

[API] Data Player (Load/Save)

Новые плагины для AMX Mod X, которые были добавлены в базу плагинов нашего форума. Плагины еще не утвеждены администратором/модератором.

Модератор: Leonidddd

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

Данный раздел форума служит для добавления новых плагинов в базу нашего форума. После того, как администратор/модератор утвердит плагин, он будет перемещен в раздел "Утвежденные плагины".

Правила при добавлении новых плагинов:

1. При вставке кода плагина необходимо использовать тег [pawn], в противном случае, если тег [pawn] не отображает ваш код, можно использовать тег [code].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. Обязательно выкладывайте исходник sma плагина. Запрещено выкладывать amxx файл.
4. Обязательно указывайте настоящих авторов плагина, если вы использовали чьи-то наработки или функции, указывайте их авторов в сообщении.
5. Необходимо заполнять детальную информацию о плагине (версию, настройки, используемые модули, список изменений и другую).

[API] Data Player (Load/Save)

Сообщение BlackSmoke » 05 июл 2014, 20:52

Авторы: BlackSmoke

Версия: 0.1

Описание:
Работа плагина заключается в сохранении и загрузке данных игрока с помощью файла.


Типы сохранения\загрузки:
• По имени игрока DP_PLAYER_NAME
• По стим идентификатору игрока DP_PLAYER_STEAMID
• По айпи игрока DP_PLAYER_IP


Нативы:
[pawn]
  1. native dp_save_int( iTypeSL:iType, iPlayer, const sFileName[ ], iData );

  2. native dp_save_float( iTypeSL:iType, iPlayer, const sFileName[ ], Float:fData );

  3. native dp_save_string( iTypeSL:iType, iPlayer, const sFileName[ ], const sData[ ] );

  4. native dp_load_int( iTypeSL:iType, iPlayer, const sFileName[ ], &iData );

  5. native dp_load_float( iTypeSL:iType, iPlayer, const sFileName[ ], &Float:fData );

  6. native dp_load_string( iTypeSL:iType, iPlayer, const sFileName[ ], sData[ ], iLen );
[/pawn]

Пример ( сохранение денег ):
[pawn]
  1. #include        amxmodx

  2. #include        data_player_api

  3. #include        cstrike

  4.  

  5. public client_disconnect( id )

  6. {

  7.      dp_save_int( DP_PLAYER_NAME, id, "addons/amxmodx/configs/PlayersMoney.ini", cs_get_user_money( id ) ) ;

  8. }

  9.  

  10. public client_putinserver( id )

  11. {

  12.      cs_set_user_money( id, 0 ) ;

  13.      set_task( 10.0, "Load__Money", id ) ;

  14. }

  15.  

  16. public Load__Money( id )

  17. {

  18.      new iReturnMoney ;

  19.      if( dp_load_int( DP_PLAYER_NAME, id, "addons/amxmodx/configs/PlayersMoney.ini", iReturnMoney ) )

  20.      {

  21.              cs_set_user_money( id, iReturnMoney ) ;

  22.              client_print( id, print_center, "Ваши загруженные деньги: %d", iReturnMoney ) ;

  23.      }

  24.      else

  25.              client_print( id, print_center, "Ошибка загрузки денег" ) ;

  26. }
[/pawn]

Пример работы с массивом:
[pawn]
  1. public Save__Origin( id )

  2. {

  3.      new Float:fOrigin[ 3 ] , sText[ 64 ] ;

  4.      pev( id, pev_origin, fOrigin ) ;

  5.      format( sText, charsmax( sText ), "%f %f %f", fOrigin[ 0 ], fOrigin[ 1 ], fOrigin[ 2 ] ) ;

  6.      dp_save_string( DP_PLAYER_NAME, id, "addons/amxmodx/configs/PlayersOrigin.ini", sText ) ;

  7. }

  8.  

  9. public Load_Origin( id )

  10. {

  11.      new sReturnData[ 128 ] , sPos[ 3 ][ 8 ], Float:fOrigin[ 3 ] ;

  12.      dp_load_string( DP_PLAYER_NAME, id, "addons/amxmodx/configs/PlayersOrigin.ini", sReturnData, charsmax( sReturnData ) ) ;

  13.      parse( sReturnData, sPos[ 0 ], charsmax( sPos[ ] ), sPos[ 1 ], charsmax( sPos[ ] ), sPos[ 2 ], charsmax( sPos[ ] ) ) ;

  14.      fOrigin[ 0 ] = str_to_float( sPos[ 0 ] ) ;

  15.      fOrigin[ 1 ] = str_to_float( sPos[ 1 ] ) ;

  16.      fOrigin[ 2 ] = str_to_float( sPos[ 2 ] ) ;
[/pawn]

Файлы:
data_player_API.sma

data_player_api.inc
Последний раз редактировалось BlackSmoke 06 июл 2014, 12:42, всего редактировалось 3 раз(а).
Заказы принимаю Отзывы о работе
itsblacksmoke
Аватара пользователя
BlackSmoke
 
Сообщения: 1109
Зарегистрирован: 28 июл 2012, 04:33
Откуда: Ukraine
Благодарил (а): 106 раз.
Поблагодарили: 287 раз.
Опыт программирования: Около года
Языки программирования: Counter Strike 1.6

Re: [API] Data Player (Load/Save)

Сообщение hmn3r^Ist » 06 июл 2014, 18:54

Safety1st писал(а):
hmn3r^Ist писал(а):Этот плагин проигрывает в скорости и при небольших объемах данных.

Кому конкретно проигрывает? Ещё несозданному API-плагину, использующему SQLite? :-D

Да например тому же SQLite
Safety1st писал(а):
hmn3r^Ist писал(а):Этот плагин проигрывает в скорости и при небольших объемах данных.

Когда я храню 50 строчек в файле - мне не скорость важна, а простота. Где цифры-то?

50 игроков? И это плагин общего назначения? Лол
Цифры будут когда поставлю кс и сервер
И если поставлю

Safety1st писал(а):
hmn3r^Ist писал(а):Почему нельзя развивать интересные и перспективные идеи? Зачем эти слабые велосипеды

Так развивайте, кто мешает? Конечно, 'не удержался поинтересоваться зачем здесь совершаются такие вещи' куда проще.

Мешает отсутствие интереса
В свое время утерял бекап своего сервера, после чего перестал заниматься этим

Safety1st писал(а):Вы критикуете сам способ хранения, которую использует плагин. Этот способ не является именно его минусом, он просто для неё 'предназначен'.

Для кого?
Safety1st писал(а):На AMX-X среди новых плагинов - 99.9% гумна, а тут в кои-то веки не-быдлокодер что-то зарелизил.

А чего же вы заменили "толковый скриптер" "не-быдлокодер"? :)

Safety1st писал(а):Тут 'вы не удерживаетесь' и начинаете по сути оффтоп со своей критикой: дескать, я недоволен, что никто ничего не делает, не развивают стоящие идеи. Хотите поделиться своими мыслями - создайте отдельный топик. Правда, он никому не будет интересен. Или замутите свой 'API' для SQLite, стоящую, так сказать, веСЧь. И там опишите его преимущества: тогда будет с чем сравнивать. А критиковать то, что не является особенностью плагина, в топике плагина - почти также низко, как рекламировать свой плагин в топике чужого.

Критиковать? Низко? Да неужели? По вашему в чем заключается роль критики? Я наглядно подсказал достаточную бесполезность конкретной реализации плагина
Что касается API для SQLite, может еще визуальный интерфейс прикрутить? Все хорошо в меру
Аватара пользователя
hmn3r^Ist
 
Сообщения: 900
Зарегистрирован: 19 апр 2012, 16:24
Откуда: Petersburg
Благодарил (а): 82 раз.
Поблагодарили: 158 раз.

Re: [API] Data Player (Load/Save)

Сообщение Safety1st » 06 июл 2014, 19:18

Да например тому же SQLite

Вы плагин с модулем сравниваете? Очень грамотно! :thumbs_up

Мешает отсутствие интереса

На негативные посты всегда время есть, это да) П****ть - не мешки ворочать ;)

50 игроков? И это плагин общего назначения? Лол

Ну вот на практике мне в файлах больше не приходилось) Общее назначение я понимаю как универсальность.

А чего же вы заменили "толковый скриптер" "не-быдлокодер"?

Я подобрал более правильное слово. Всё же я недостаточно хорошо знаком с его работами, чтобы делать первый вывод, но достаточно хорошо - чтобы сделать второй.

Для кого?

Для 'файловой базы'.

Критиковать? Низко? Да неужели?

Именно! Низко - критиковать плагин не за реализацию, а за примитивность 'системы хранения', для которой он создан. Никто не заявлял, что API - замена какому-либо модулю.

Я наглядно подсказал достаточную бесполезность конкретной реализации плагина

Ничего вы не доказали. :-D
GoldSrc Gaming Community
Аватара пользователя
Safety1st
 
Сообщения: 1958
Зарегистрирован: 08 окт 2011, 05:41
Откуда: Moscow
Благодарил (а): 1690 раз.
Поблагодарили: 933 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Half-Life

Re: [API] Data Player (Load/Save)

Сообщение hmn3r^Ist » 06 июл 2014, 19:39

Safety1st писал(а):
Да например тому же SQLite

Вы плагин с модулем сравниваете? Очень грамотно! :thumbs_up

Этот нелогичный бред оставлю без комментария

Safety1st писал(а):
Мешает отсутствие интереса

На негативные посты всегда время есть, это да) П****ть - не мешки ворочать ;)

Я сказал хоть слово по время?

Safety1st писал(а):
А чего же вы заменили "толковый скриптер" "не-быдлокодер"?

Я подобрал более правильное слово. Всё же я недостаточно хорошо знаком с его работами, чтобы делать первый вывод, но достаточно хорошо - чтобы сделать второй.

Мало связи между словами
Safety1st писал(а):[
Критиковать? Низко? Да неужели?

Именно! Низко - критиковать плагин не за реализацию, а за примитивность 'системы хранения', для которой он создан. Никто не заявлял, что API - замена какому-либо модулю.
Я наглядно подсказал достаточную бесполезность конкретной реализации плагина

Ничего вы не доказали. :-D

А я и не собирался никому ничего доказывать
Я обращался к автору, и привел несколько фактов
Наша дискуссия не полезнее чем этот плагин
Аватара пользователя
hmn3r^Ist
 
Сообщения: 900
Зарегистрирован: 19 апр 2012, 16:24
Откуда: Petersburg
Благодарил (а): 82 раз.
Поблагодарили: 158 раз.

Re: [API] Data Player (Load/Save)

Сообщение Asmodai » 06 июл 2014, 22:10

Запилил от нефиг делать.

Код: Выделить всё
dpapi_save_by "1"
1 - IP
2 - Name
3 - SteamID

[pawn]
  1. native dp_save_int( id, const key[], value )

  2. native dp_save_float( id, const key[], Float:value )

  3. native dp_save_string( id, const key[], const value[] )

  4. native dp_load_int( id, const key[], &value )

  5. native dp_load_float( id, const key[], &Float:value )

  6. native dp_load_string( id, const key[], value[], maxlen )

  7. native dp_remove_key( const key[] )
[/pawn]
Аватара пользователя
Asmodai
Адмирал
 
Сообщения: 466
Зарегистрирован: 24 фев 2011, 20:48
Благодарил (а): 0 раз.
Поблагодарили: 393 раз.
Языки программирования: Counter-Strike 1.6

Re: [API] Data Player (Load/Save)

Сообщение PRoSToTeM@ » 06 июл 2014, 22:33

Asmodai, почему не сделал хранение в бинарном виде?
Аватара пользователя
PRoSToTeM@
Скриптер
 
Сообщения: 2498
Зарегистрирован: 26 мар 2010, 00:12
Благодарил (а): 438 раз.
Поблагодарили: 1125 раз.

Re: [API] Data Player (Load/Save)

Сообщение Asmodai » 06 июл 2014, 22:53

Оставил возможность редактирования.
Аватара пользователя
Asmodai
Адмирал
 
Сообщения: 466
Зарегистрирован: 24 фев 2011, 20:48
Благодарил (а): 0 раз.
Поблагодарили: 393 раз.
Языки программирования: Counter-Strike 1.6

Re: [API] Data Player (Load/Save)

Сообщение heka » 08 июл 2014, 16:53

При заходе на сервер с ботами он сразу же вырубается.
Аватара пользователя
heka
 
Сообщения: 28
Зарегистрирован: 22 июл 2011, 22:51
Откуда: Запорожье
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около года
Языки программирования: Counter Strike 1.6

Re: [API] Data Player (Load/Save)

Сообщение Safety1st » 13 июл 2014, 06:23

Asmodai писал(а):Запилил от нефиг делать.

Код отличный :thumbs_up
А плагин тестировался вообще? Из имён файлов запрещённые символы не удаляются.

Осталось это поправить (и прочие мелочи типа 'не создавать пустые файлы') и добавить документацию: данные хранятся в data\data_player_api, по 'базе' (файлу) на игрока; в одном файле данные всех 3-х типов (integer, float и string), а тип данных хранится как первый символ в их значении - $, &, @ соответственно; при входе игрока на сервер читается соответствующий ему файл и в память подгружается вся 'база' по нему, при выходе - сохраняется в файл, а все операции чтения/записи (кроме dp_remove_key() ) выполняются в памяти и т.д. Новичкам без документации и расшифровок код плагина не осилить, а API по сути в первую очередь для них.

dp_remove_key() дописать как-то, мне кажется, логичнее нативу сделать серверной командой и при очистке удалять ключ и из памяти. Также, думаю, стоит добавить отслеживание ника игрока, если сохранение по никам, чтобы не плодить базы (игрок зашёл под одним ником, а вышел с сервера под другим). Ну и совсем круто, если дефолтные значения ключей не будут сохраняться.

Мб BlackSmoke будет интересно этим позаниматься) Вряд ли API будет использоваться на конечных серверах, зато по крайней мере действительно качественный код можно использовать в собственных плагинах.
GoldSrc Gaming Community
Аватара пользователя
Safety1st
 
Сообщения: 1958
Зарегистрирован: 08 окт 2011, 05:41
Откуда: Moscow
Благодарил (а): 1690 раз.
Поблагодарили: 933 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Half-Life

Re: [API] Data Player (Load/Save)

Сообщение Шарль Перро » 13 июл 2014, 09:54

а еще автоудаление бы запилил.
у меня на сервере в месяц бывает около 15тыс. коннектов, у кого то еще больше,.
а так, данные игрока, который не был n-ое к-во дней- удалится
NEW IRS[IN`DEX Rank System]
ГОТОВ.
[spoiler]тык
185.22.234.222:27018[/spoiler]
Аватара пользователя
Шарль Перро
 
Сообщения: 362
Зарегистрирован: 07 май 2014, 18:02
Забанен
Благодарил (а): 93 раз.
Поблагодарили: 91 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: [API] Data Player (Load/Save)

Сообщение Asmodai » 13 июл 2014, 15:45

Ну запустил пару раз, вроде работает. Наоборот, мне кажется, конечному пользователю надо просто использовать, а не вдаваться в подробности, как оно работает.
Я так понял, BlackSmoke немного не сам это дело придумал. Тут самому проще сделать.
Аватара пользователя
Asmodai
Адмирал
 
Сообщения: 466
Зарегистрирован: 24 фев 2011, 20:48
Благодарил (а): 0 раз.
Поблагодарили: 393 раз.
Языки программирования: Counter-Strike 1.6

Пред.След.

Вернуться в Добавленные новые плагины

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1