Иконка ресурса

[Achievements] Core 1.6

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,335
  • Автор ресурса
  • #1
Пользователь Reiko1231 разместил новый ресурс:

[Achievements] Core - Достижения для игроков на сервер.

Описание:
Достижения для игроков.

Дополнительная информация:
- Поддержка всех стандартных событий сурсмода.
- В configs/achievements.txt показаны шесть примеров достижений. Больше примеров вы можете найти в плагине Bounty Hunt (конфиги немного отличаются, но показаны примеры заполнения поля event, executor (в Bounty Hunt поле называется performer) и...

Узнать больше об этом ресурсе...
 

skywalker

Участник
Сообщения
1,153
Реакции
263
@Reiko1231, а можно ли такое достижение реализовать: 100 раз прошел карту первый?
 

skywalker

Участник
Сообщения
1,153
Реакции
263
Чет ерроритОффтоп
 

666pro

Участник
Сообщения
186
Реакции
25
Плагин классный , но я думаю
Лучше было бы объединить файл перерода и конфиг
не удобно туда сюда лазить
--- Добавлено позже ---
Возможно что-то не так написал , но когда убиваю с 1 раза ножа , достижение сразу засчитывается.


"Knife 2"
{
"event" "player_hurt"
"executor" "attacker"

"condition" "weapon = knife"
"count" "4"

"reward" "sm_givecredits #{uid} 10"
}
 
Последнее редактирование:

MaZa

Участник
Сообщения
1,732
Реакции
980
Плагин классный , но я думаю
Лучше было бы объединить файл перерода и конфиг
не удобно туда сюда лазить
--- Добавлено позже ---
Возможно что-то не так написал , но когда убиваю с 1 раза ножа , достижение сразу засчитывается.


"Knife 2"
{
"event" "player_hurt"
"executor" "attacker"

"condition" "weapon = knife"
"count" "4"

"reward" "sm_givecredits #{uid} 10"
}

Попробуй так.
C-подобный:
"Knife 2"
{
"event" "player_death"
"executor" "attacker"

"condition" "weapon = knife"
"count" "4"

"reward" "sm_givecredits #{uid} 10"
}
 

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,335
  • Автор ресурса
  • #8
@AlmazON, исправил, спасибо.
@skolobes, как часто возникает ошибка? За всё время при тестировании была один раз, и причина не была до конца ясна.
@666pro, файл перевода и конфиг объединить без потери мультиязычности нельзя.
 

FurFur

Участник
Сообщения
153
Реакции
85
@Reiko1231, скорее всего еррорит так как не успевает создать Handle для игрока,который зашел и резко вышел
--- Добавлено позже ---
Кароче в LoadProgress(iClient)

ClientLoaded[iClient] = true;

public OnClientDisconnect(iClient)
{
if (ClientLoaded[iClient]) CloseHandle(g_hTrie_ClientProgress[iClient]);
}
 
Последнее редактирование:

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,335
  • Автор ресурса
  • #10
@Крабос, спасибо, упустил это из вида. Добавлю вас в раздел благодарностей, если вы не против.
Эту ошибку можно исправить проще. В SourceMod некоторые форварды являются парными, т.е. если был вызван один, то второй будет гарантированно вызван. Для OnClientDisconnect парным является форвард OnClientConnected. Поэтому исправление будет выглядеть примерно так:
PHP:
public OnClientConnected(iClient)
{ 
    // allocate memory
    g_hTrie_ClientProgress[iClient] = CreateTrie();
}

public OnClientPutInServer(iClient)
{
    // load client data
    LoadClient(iClient);
}

public OnClientDisconnect(iClient)
{
    // free memory
    CloseHandle(g_hTrie_ClientProgress[iClient]);
}

Пока не буду заливать версию 1.5, подожду до вечера, может ещё какие ошибки пропустил.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Так то оно так (вызовы парные), но больше согласен с @Крабос, т.к. вызовов уже больше нужного (3 вместо 2), да ещё столь ранний будет постоянно использоваться от каждого "чиха" любого игрока, чуть ли не забаненного, что ни есть хорошо. Лучше уж тогда:
PHP:
public OnClientPutInServer(iClient)
{
    // allocate memory
    g_hTrie_ClientProgress[iClient] = CreateTrie();
    // load client data
    LoadClient(iClient);
}

public OnClientDisconnect_Post(iClient)
{
    // free memory
    if(g_hTrie_ClientProgress[iClient])
    {
        CloseHandle(g_hTrie_ClientProgress[iClient]);
        g_hTrie_ClientProgress[iClient] = INVALID_HANDLE;
    }
}
Проверка "в игре" не требуется, лучше OnClientDisconnect_Post.
В итоге: ни дополнительная память не нужна, ни бесполезные (сверх ранние) вызовы.
 
Последнее редактирование:

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #12
Файл перевода и конфиг объединить без потери мультиязычности нельзя.
Можно, только если служебные фразы плагина оставить в файле переводов и это будут натуральные костыли. Ничто не мешает получать язык клиента ручками, а потом по нему искать перевод в конфиге, и если такого нет, то выдать фразу на дефолт языке.
 

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,335
  • Автор ресурса
  • #13
@AlmazON, довольно спорное суждение. Все форварды, как я понимаю, SourceMod объединяет между собой, вызывая последовательно. А вот "сверх ранние вызовы" для забаненных или им подобных игроков довольно редкое событие, чтобы обращать на него внимание. Тем более, где лишняя нагрузка это всего лишь создание и удаление Trie. В то время как для нормального игрока вообще никакой лишней нагрузки нет, а соотношение "нормальный игрок - забаненный", как мне кажется, как минимум 100 к 1.
@CrazyHackGUT, нет смысла делать костыли такого уровня ради удобства. Поэтому и нельзя сделать без потери мультиязычности. Оффтоп
 

666pro

Участник
Сообщения
186
Реакции
25
L 10/22/2016 - 16:25:33: SourceMod error session started
L 10/22/2016 - 16:25:33: Info (map "de_dust2_night") (file "errors_20161022.log")
L 10/22/2016 - 16:25:33: [SM] Exception reported: Handle 65610cd9 is invalid (error 3)
L 10/22/2016 - 16:25:33: [SM] Blaming: achievements.smx
L 10/22/2016 - 16:25:33: [SM] Call stack trace:
L 10/22/2016 - 16:25:33: [SM] [0] CloseHandle
L 10/22/2016 - 16:25:33: [SM] [1] Line 172, achievements.sp::OnClientDisconnect
L 10/22/2016 - 16:49:57: Error log file session closed.
 

Drumanid

Нестандартное звание
Сообщения
1,862
Реакции
1,748
L 10/22/2016 - 16:25:33: SourceMod error session started
L 10/22/2016 - 16:25:33: Info (map "de_dust2_night") (file "errors_20161022.log")
L 10/22/2016 - 16:25:33: [SM] Exception reported: Handle 65610cd9 is invalid (error 3)
L 10/22/2016 - 16:25:33: [SM] Blaming: achievements.smx
L 10/22/2016 - 16:25:33: [SM] Call stack trace:
L 10/22/2016 - 16:25:33: [SM] [0] CloseHandle
L 10/22/2016 - 16:25:33: [SM] [1] Line 172, achievements.sp::OnClientDisconnect
L 10/22/2016 - 16:49:57: Error log file session closed.

@Крабос, спасибо, упустил это из вида. Добавлю вас в раздел благодарностей, если вы не против.
Эту ошибку можно исправить проще. В SourceMod некоторые форварды являются парными, т.е. если был вызван один, то второй будет гарантированно вызван. Для OnClientDisconnect парным является форвард OnClientConnected. Поэтому исправление будет выглядеть примерно так:
PHP:
public OnClientConnected(iClient)
{
    // allocate memory
    g_hTrie_ClientProgress[iClient] = CreateTrie();
}

public OnClientPutInServer(iClient)
{
    // load client data
    LoadClient(iClient);
}

public OnClientDisconnect(iClient)
{
    // free memory
    CloseHandle(g_hTrie_ClientProgress[iClient]);
}

Пока не буду заливать версию 1.5, подожду до вечера, может ещё какие ошибки пропустил.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #16
@Reiko1231, есть пара мыслей

PHP:
decl String:sGameName[32];
    GetGameFolderName(SZF(sGameName));
    if ( strcmp(sGameName, "csgo") == 0 ) {
->
PHP:
if(GetEngineVersion() == Engine_CSGO)

PHP:
decl String:sQuery[256];
    FormatEx(SZF(sQuery), "CREATE TABLE IF NOT EXISTS `clients` (`auth` VARCHAR(32), `userid` INTEGER, `last_connection` INTEGER, PRIMARY KEY(`userid`));");
    SQL_TQuery(g_hSQLdb, SQLT_OnCreateTables, sQuery);
   
    FormatEx(SZF(sQuery), "CREATE TABLE IF NOT EXISTS `progress` (`userid` INTEGER, `achivement` VARCHAR(64), `count` INTEGER, PRIMARY KEY(`userid`, `achivement`));");
    SQL_TQuery(g_hSQLdb, SQLT_OnCreateTables, sQuery);
а зачем формат? нет же параметров для подстановки.

может в
PHP:
GetClientAuthId(iClient, AuthId_Steam2, g_sAuth[iClient], sizeof(g_sAuth[]));
Использовать AuthId_Engine ?

@Reiko1231, а можно ли такое достижение реализовать: 100 раз прошел карту первый?
плагин поддерживает только стандартные события.
Но есть предложения:
Либо создать свое событие (не помню возможно ли, надо проверить) либо добавить в плагин api позволяющее использовать функционал плагина в своих событиях.
 

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,335
  • Автор ресурса
  • #17
Пользователь Reiko1231 обновил ресурс [Achievements] Core новой записью:

Обновление до версии 1.5

Что нового:
  • Исправлена ошибка при выходе игрока до захода на сервер (например, при загрузке файлов).
  • Небольшая оптимизация кода.
  • Исправлена ошибка неверного отображения прогресса достижений при нулевом прогрессе.
  • Добавлен .inc файл для написания модулей к плагину (примеры модулей выйдут позже).
Обновляйте плагин строго по инструкции, иначе потеряете все достижения и файл перевода достижений!

Узнать больше об этом обновлении...
 

vio_line

Участник
Сообщения
44
Реакции
8
@Reiko1231, а какая короткая команда вызова менюшки плагина?
Оффтоп
Спасибо. Уже нашел в исходнике. "!ach"
 
Последнее редактирование:

Ice_Sochi

Участник
Сообщения
709
Реакции
413
Можно ли добавить достижение "получить все достижения" или получить определенное кол-во достижений?
Еще на оверлее почему-то у меня не пишет название достижения, как на видео. Или для этого только английский клиент нужен?
 

Kolya

Участник
Сообщения
75
Реакции
17
Ребята, а подскажите, может на финальный звук от shop ball можно прикрутить достижение?
Или на EndZone от shavit's simple bhop timer ?
P.s по счет звука я походу зря сказал:D
 
Сверху Снизу