Версия: 1.0.0
Описание: Это статистика игроков с расширенным API, которая даст большие возможности для осуществления ваших идей, если у вас есть хотя бы начальный уровень скриптинга в AMXX. Все уровни прописываются в INI файле, следующим образом:
- Код: Выделить всё
;уровень очков опыта для сл. уровня название (необязательно)
"1" "50" "Start Level"
"2" "150" "Two Level"
"3" "300" "Three Level"
API: Не буду заниматься особым разглагольствованием, поэтому, думаю будет достаточно заглянуть в заголовочный файл
- Код: Выделить всё
enum StatActions {
get_points, //Возвращает эксперт поинты игрока
get_level, //Возвращает уровень игрока
set_points, //Устанавливает указанное число эксперт поинт игроку
set_level, //Устанавливает указанный уровень игроку
get_alive, //Возвращает состояние игрока (жив, мертв) true/false
get_level_title, //Возвращает название (ранг) уровня игрока
get_left_points //Возвращает число эксперт поинт, которое нужно достичь
/*
* Example: new iPoints = GetPlayerData(get_points, index);
* Example two: new iPoints; GetPlayerData(get_points, index, iPoints);
* Example three: new szLevelTitle[32]; GetPlayerData(get_level_title, index, szLevelTitle, charsmax(szLevelTitle));
*/
};
enum StatEvents {
/* Вызывается, когда игрок получает максимальный уровень
*
* forward params: func(StatEvents: event, player)
*/
Pl_TakeMaxLevel,
/* Вызывается, когда игрок получает эксперт поинт
*
* forward params: func(StatEvents: event, player)
*/
Pl_TakePoints,
/* Вызывается, когда игрок получает новый уровень
*
* forward params: func(StatEvents: event, player)
*/
Pl_TakeLevel,
/* Вызывается, когда игрок успешно проходит проверку и
* получает либо стартовые эксперт поинты и уровень, либо
* ранее сохраненные (удобно для запуска информера)
*
* forward params: func(StatEvents: event, player)
*/
Pl_Passed,
/* Вызывается, когда меняется состояние игрока (умер, ожил)
*
* forward params: func(StatEvents: event, player)
*/
Pl_State
};
enum {
PLSTAT_CONTINUE,
PLSTAT_SUPERCEDE
};
enum _:StatHandle {
INVALID_STAT_HANDLE = -2
};
native GetMaxLevels();
native GetPlayerData(StatActions: action, const index, any:...);
native StatHandle: RegisterStatEvent(StatEvents: event, const function[], Post = 1);
native StatHandle: DestroyStatEvent(StatHandle: handle);
Настройки (конфиг):
- Код: Выделить всё
playerstat_hostname "127.0.0.1" // SQL Hostname
playerstat_basename "mysql" // SQL Database
playerstat_username "root" // SQL Username
playerstat_password "" // SQL Password
playerstat_tablename "playerstat" // SQL Tablename
playerstat_startexp "0" // Стартовое кол-во expert point
playerstat_startlvl "1" // Стартовый уровень
Исключительно в качестве примера, информер:
- Код: Выделить всё
#include <amxmodx>
#include <playerstats>
#define PLUGIN "Player Stats: Informer"
#define AUTHOR "BloodMoon"
const MAX_CLIENTS = 32;
new gl_pSyncHudMessage;
new gl_szPlayerRang[MAX_CLIENTS + 1][32];
public plugin_init() {
register_plugin(PLUGIN, PLAYER_STATS_VERSION_STR, AUTHOR);
RegisterStatEvent(Pl_Passed, "playerPassed_Handle", .Post = true);
RegisterStatEvent(Pl_TakeLevel, "playerTakeLevel_Handle", .Post = true);
gl_pSyncHudMessage = CreateHudSyncObj();
}
public playerPassed_Handle(StatEvents: pEvent, pPlayer) {
GetPlayerData(get_level_title, pPlayer, gl_szPlayerRang[pPlayer], charsmax(gl_szPlayerRang[]));
set_task(1.0, "ShowHudMessage_Handle", pPlayer, .flags = "b");
}
public client_disconnect(pPlayer) remove_task(pPlayer);
public playerTakeLevel_Handle(StatEvents: pEvent, pPlayer) {
GetPlayerData(get_level_title, pPlayer, gl_szPlayerRang[pPlayer], charsmax(gl_szPlayerRang[]));
}
public ShowHudMessage_Handle(pPlayer) {
set_hudmessage(.red = 0, .green = 100, .blue = 200, .holdtime = 1.1);
ShowSyncHudMsg(pPlayer, gl_pSyncHudMessage, "[LEVEL: %i/%i] [POINTS: %i/%i]^n[RANG: %s]", GetPlayerData(get_level, pPlayer), GetMaxLevels(), GetPlayerData(get_points, pPlayer), GetPlayerData(get_left_points, pPlayer), gl_szPlayerRang[pPlayer]);
}
Утверждено. //Leonidddd