Участник
Пользователь
- Сообщения
- 175
- Реакции
- 11
- Ошибка
-
Load fails: Plugin uses an unknown function (name "geoip_code2_ex") - check your modules.ini.
- ОС
- Linux
- Amx Mod X
-
190
- Билд
-
ReHLDS version: 3.8.0.711-dev
- ReGamedll
-
ReGameDLL version: 5.20.0.492-dev
- Версия Metamod
-
Metamod-r v1.3.0.128, API (5:13)
Metamod-r build: 17:47:54 Aug 24 2018
- Список метамодулей
-
name version author status
[ 1] MySQL 1.9.0.5271 AMX Mod X Dev Team running
[ 2] SQLite 1.9.0.5271 AMX Mod X Dev Team running
[ 3] Fun 1.9.0.5271 AMX Mod X Dev Team running
[ 4] Engine 1.9.0.5271 AMX Mod X Dev Team running
[ 5] FakeMeta 1.9.0.5271 AMX Mod X Dev Team running
[ 6] GeoIP 1.9.0.5271 AMX Mod X Dev Team running
[ 7] nVault 1.9.0.5271 AMX Mod X Dev Team running
[ 8] CStrike 1.9.0.5271 AMX Mod X Dev Team running
[ 9] CSX 1.9.0.5271 AMX Mod X Dev Team running
[10] Ham Sandwich 1.9.0.5271 AMX Mod X Dev Team running
[11] ReAPI 5.19.0.211 Asmodai & s1lent running
[12] ReAimDetector 0.2.2 ReHLDS Team running
[13] Buttons Manager 0.0.1 Unknown running
[14] RegEx 1.9.0.5271 AMX Mod X Dev Team running
14 modules, 14 correct
- Список плагинов
-
это не нужно
- Автор плагина
- R3X
- Версия плагина
- 0.5
- Исходный код
-
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <cstrike>
#include <hamsandwich>
#include <sqlx>
#include <geoip>
#include <colorchat>
#include <dhudmessage>
#define PLUGIN "Deathrun Stats"
#define VERSION "0.5"
#define AUTHOR "R3X"
new gszChatPrefix[32];
new gszTop15Redirect[128];
new gszMotd[1024];
new gszMapname[64];
new gMid
#pragma unused giGames
new giGames; //Poki co nie uzywana zmienna
new gszQuery[512];
new Handle:gTuple;
new gbAuthorized[33];
new giPid[33];
new giPlayedTime[33];
new giBestTime[33];
new giPlayedGames[33];
new giDeaths[33];
new gszRecordTime[33][32];
new giBestTimeofMap;
new Float:gfLastInfo[33];
new Float:gfStartRun[33];
new giLastTime[33];
new bool:gbFinished[33];
new gEntFinish = 0;
new bool:gbEntityMoved = false;
new gcvarSave, gcvarTimer, gcvarTimerType, gcvarDrawFinish;
new gcvarPrintResult;
new gcvarRoundTime;
new Float:gfEndRoundTime;
new giMaxPlayers;
new gsprite;
getFormatedTime(iTime, szTime[], size){
formatex(szTime, size, "%d:%02d.%03ds", iTime/60000, (iTime/1000)%60, iTime%1000);
}
#include "drstats/mysql.inl"
#include "drstats/finish.inl"
#include "drstats/stats.inl"
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR);
register_dictionary("deathrun_stats.txt");
register_cvar("amx_drstats_host", "db3.myarena.ru");
register_cvar("amx_drstats_user", "u21942_dr");
register_cvar("amx_drstats_pass", "Anisa4ka");
register_cvar("amx_drstats_db", "u21942_dr");
gcvarSave = register_cvar("amx_drstats_save", "1");
gcvarTimer = register_cvar("amx_drstats_timer", "1");
gcvarTimerType = register_cvar("amx_drstats_timer_type", "0");
gcvarDrawFinish = register_cvar("amx_drstats_draw_finish", "1");
gcvarPrintResult = register_cvar("amx_drstats_print_result", "1");
//0-wcale
//1-HUD+konsola
//2-chat
gcvarRoundTime = get_cvar_pointer("mp_roundtime");
register_cvar("amx_drstats_chat_prefix", "[Speedrun]");
register_cvar("amx_drstats_top15_page", "");
register_logevent( "eventRoundEnd",2, "1=Round_End");
register_logevent( "eventRoundStart",2, "1=Round_Start");
register_forward(FM_PlayerPreThink, "fwPreThink", 1);
RegisterHam(Ham_Spawn, "player", "fwSpawn", 1);
register_touch(gszFinish, "player", "fwTouch");
register_touch("player", gszFinish, "fwTouch2");
register_think(gszFinish, "fwThink");
register_clcmd("dr_finish", "cmdFinish", ADMIN_CFG, ": spawn finish round");
register_fullclcmd("rank", "showRank");
register_fullclcmd("top15", "showTop15");
register_fullclcmd("last", "cmdLast");
register_fullclcmd("best", "cmdBest");
gfwCreateFinish = CreateMultiForward("fwFinishCreate", ET_STOP, FP_CELL, FP_ARRAY, FP_CELL);
gfwFinished = CreateMultiForward("fwPlayerFinished", ET_IGNORE, FP_CELL, FP_CELL, FP_CELL);
gfwStarted = CreateMultiForward("fwPlayerStarted", ET_IGNORE, FP_CELL);
giMaxPlayers = get_maxplayers();
}
public plugin_precache(){
gsprite = precache_model("sprites/white.spr");
}
public plugin_cfg(){
MySQL_Init();
get_cvar_string("amx_drstats_chat_prefix", gszChatPrefix, charsmax(gszChatPrefix));
get_cvar_string("amx_drstats_top15_page", gszTop15Redirect, charsmax(gszTop15Redirect));
}
public plugin_natives(){
register_library("DeathrunStats");
register_native("playerFinished", "_playerFinished", 1);
}
public _playerFinished(id){
fwFinished(id);
}
public plugin_end(){
if(gbEntityMoved)
saveFinishOrigin();
SQL_FreeHandle(gTuple);
}
public client_putinserver(id){
if(is_user_bot(id) || is_user_hltv(id))
return;
loadPlayerId(id);
}
public client_authorized_db(id, pid){
giPid[id] = pid;
gbAuthorized[id] = true;
giPlayedTime[id] = 0;
giBestTime[id] = 0;
giPlayedGames[id] = 0;
giDeaths[id] = 0;
loadRunnerData(id);
}
public client_connect(id){
gbAuthorized[id] = false;
giPid[id] = 0;
giLastTime[id] = 0;
}
public client_disconnect(id){
saveRunnerData(id);
}
loadRunnerData(id){
if(!gbAuthorized[id]) return;
new data[1];
data[0] = id;
formatex(gszQuery, charsmax(gszQuery), "SELECT * FROM `results` WHERE id=%d && mid=%d", giPid[id], gMid);
SQL_ThreadQuery(gTuple, "handleLoadData", gszQuery, data, sizeof(data));
}
getPlayerDeaths(id){
return giDeaths[id]+get_user_deaths(id);
}
getPlayedTime(id){
return giPlayedTime[id] + get_user_time(id, 1);
}
getRunningTime(id){
return floatround( (get_gametime()-gfStartRun[id])*1000, floatround_ceil);
}
saveRunnerData(id, updateBest = 0){
if(!gbAuthorized[id]) return;
if(updateBest){
giBestTime[id] = updateBest;
get_time("%Y-%m-%d %H:%M:%S", gszRecordTime[id], charsmax(gszRecordTime[]));
}
formatex(gszQuery, charsmax(gszQuery),
"UPDATE `results` SET besttime=%d, games=%d, playedtime=%d, deaths=%d, recorddate='%s' \
WHERE id=%d && mid=%d",
giBestTime[id], giPlayedGames[id], getPlayedTime(id), getPlayerDeaths(id), gszRecordTime[id],
giPid[id], gMid);
SQL_ThreadQuery(gTuple, "handleStandard", gszQuery);
}
public eventRoundStart(){
new Float:fRoundTime = get_pcvar_float(gcvarRoundTime)*60;
gfEndRoundTime = get_gametime()+fRoundTime;
}
public eventRoundEnd(){
for(new i=1;i<33;i++)
if(is_user_connected(i))
saveRunnerData(i);
}
public fwSpawn(id){
if(!is_user_alive(id) || !gbAuthorized[id])
return HAM_IGNORED;
if(!gEntFinish){
client_print(id, print_chat, "%L", id, "FINISH_NOT_EXISTS");
if(get_user_flags(id)&ADMIN_CFG)
client_print(id, print_chat, "%L", id, "BUT_YOU_CAN_SPAWN_IT");
}
gbFinished[id] = false;
gfStartRun[id] = -1.0;
if(cs_get_user_team(id) == CS_TEAM_CT){
gfStartRun[id] = get_gametime();
new iRet;
ExecuteForward(gfwStarted, iRet, id);
}
return HAM_IGNORED;
}
show_status(id, const szMsg[], any:...){
new szStatus[128];
vformat(szStatus, 127, szMsg, 3);
static msgStatusText=0;
if(!msgStatusText)
msgStatusText = get_user_msgid("StatusText");
message_begin(MSG_ONE_UNRELIABLE, msgStatusText, _, id);
write_byte(0);
write_string(szStatus);
message_end();
}
Send_RoundTime(id, iTime){
static msgRoundTime=0;
if(!msgRoundTime)
msgRoundTime = get_user_msgid("RoundTime");
message_begin(MSG_ONE_UNRELIABLE, msgRoundTime, _, id);
write_short(iTime);
message_end();
}
hideTime(id){
if(get_pcvar_num(gcvarTimerType)){
Send_RoundTime(id, floatround(gfEndRoundTime - get_gametime()));
}else{
show_status(id, "");
}
}
displayTime(id, iTime){
if(get_pcvar_num(gcvarTimerType)){
Send_RoundTime(id, iTime);
}else{
show_status(id, "%L: %d:%02ds", id, "WORD_TIME", iTime/60, iTime%60);
}
}
public fwPreThink(id){
if(!is_user_alive(id) || gfStartRun[id] <= 0.0)
return FMRES_IGNORED;
new iTimer = get_pcvar_num(gcvarTimer);
if(!iTimer)
return FMRES_IGNORED;
if(iTimer == 2 && !(pev(id, pev_button) & IN_SCORE)){
if(pev(id, pev_oldbuttons) & IN_SCORE)
hideTime(id);
return FMRES_IGNORED;
}
static Float:fNow;
if(!gbFinished[id]){
fNow = get_gametime();
if((fNow-gfLastInfo[id]) <= 0.5) return FMRES_IGNORED;
displayTime(id, getRunningTime(id) / 1000);
}
return FMRES_IGNORED;
}
public cmdBest(id){
if(!gbAuthorized[id]){
ColorChat(id, GREEN, "%s^x01 %L", gszChatPrefix, id, "NOT_AVAILABLE_NOW");
return PLUGIN_CONTINUE;
}
if(giBestTime[id] == 0)
ColorChat(id, GREEN, "%s^x01 %L", gszChatPrefix, id, "NEVER_REACH_FINISH");
else{
new szTime[32];
getFormatedTime(giBestTime[id], szTime, charsmax(szTime));
ColorChat(id, GREEN, "%s^x01 %L: ^x04 %s", gszChatPrefix, id, "YOUR_BEST_TIME", szTime);
}
return PLUGIN_CONTINUE;
}
public cmdLast(id){
if(!gbAuthorized[id]){
ColorChat(id, GREEN, "%s^x01 %L", gszChatPrefix, id, "NOT_AVAILABLE_NOW");
return PLUGIN_CONTINUE;
}
if(giLastTime[id] == 0)
ColorChat(id, GREEN, "%s^x01 %L", gszChatPrefix, id, "NEVER_REACH_FINISH");
else{
new szTime[32];
getFormatedTime(giLastTime[id], szTime, charsmax(szTime));
ColorChat(id, GREEN, "%s^x01 %L: ^x04 %s", gszChatPrefix, szTime, id, "YOUR_LAST_TIME", szTime);
}
return PLUGIN_CONTINUE;
}
printInfo(id, const szInfo[], ...){
new printResult = get_pcvar_num(gcvarPrintResult);
if(printResult == 0) return;
new szMsg[64];
vformat(szMsg, charsmax(szMsg), szInfo, 3);
if(printResult == 1){
show_dhudmessage(id, "%s", szMsg);
client_print(id, print_console, "%s", szMsg);
}
else if(printResult == 2){
ColorChat(id, GREEN, "%s^x01 %s", gszChatPrefix, szMsg);
}
}
public fwFinished(id){
if(!is_user_alive(id))
return;
new bool:record=false;
new iTime = getRunningTime(id);
giLastTime[id] = iTime;
gbFinished[id] = true;
new szTime[32];
getFormatedTime(iTime, szTime, charsmax(szTime));
set_dhudmessage(42, 43, 255, -1.0, 0.6, 1, 6.0, 5.0, 0.0, 0.0);
printInfo(id, "%L: %s", id, "RUNNING_TIME", szTime);
if(giBestTime[id] == 0){
set_dhudmessage(255, 42, 255, -1.0, 0.7, 0, 6.0, 5.0, 0.0, 0.0);
printInfo(id, "%L", id, "RUNNING_FIRST_FINISH");
saveRunnerData(id, iTime);
}
else if(giBestTime[id] > iTime){
getFormatedTime(giBestTime[id]-iTime, szTime, charsmax(szTime));
set_dhudmessage(255, 42, 42, -1.0, 0.7, 0, 6.0, 5.0, 0.0, 0.0);
printInfo(id, "%L: -%s!", id, "RUNNING_OWN_RECORD", szTime);
saveRunnerData(id, iTime);
}else if(giBestTime[id] < iTime){
getFormatedTime(iTime-giBestTime[id], szTime, charsmax(szTime));
set_dhudmessage(120, 120, 120, -1.0, 0.7, 0, 6.0, 5.0, 0.0, 0.0);
printInfo(id, "%L: +%s", id, "RUNNING_OWN_RECORD", szTime);
}else{
set_dhudmessage(42, 255, 42, -1.0, 0.7, 0, 6.0, 5.0, 0.0, 0.0);
printInfo(id, "%L", id, "RUNNING_OWN_RECORD_EQUAL");
}
if(giBestTimeofMap == 0 || giBestTimeofMap>iTime){
giBestTimeofMap = iTime;
new szName[32];
get_user_name(id, szName, 31);
set_dhudmessage(42, 255, 42, -1.0, 0.8, 2, 6.0, 5.0, 0.0, 0.0);
for(new i=1;i<=giMaxPlayers;i++)
if(is_user_connected(i))
printInfo(i, "%L", i, "RUNNING_MAP_RECORD_BREAK", szName);
record = true;
}
if(giBestTimeofMap != 0 && giBestTimeofMap<iTime){
new szTime[32];
getFormatedTime(iTime-giBestTimeofMap, szTime, 31);
set_dhudmessage(120, 120, 120, -1.0, 0.8, 2, 6.0, 5.0, 0.0, 0.0);
printInfo(id, "%L: +%s", id, "RUNNING_MAP_RECORD", szTime);
}
hideTime(id)
new iRet;
ExecuteForward(gfwFinished, iRet, id, iTime, record);
}
Здравствуйте!
Решил установить старую статистику для Deathrun. Данные бд прописал, все скомпилировалось (через 182 компилировал) но сервер показывает, что плагин bad load и причина Load fails: Plugin uses an unknown function (name "geoip_code2_ex") - check your modules.ini.
Погуглив я пришел к выводу, что плагин будучи сам старым, использует geoip модуль тоже старый.
Есть ли у кого какие идеи, как решить проблему чтобы плагин все таки работал? Может, надо как-то заменить на более новый способ определения локации?
(прикрепил сам архив, может, инклуды оттуда пригодятся)
Решил установить старую статистику для Deathrun. Данные бд прописал, все скомпилировалось (через 182 компилировал) но сервер показывает, что плагин bad load и причина Load fails: Plugin uses an unknown function (name "geoip_code2_ex") - check your modules.ini.
Погуглив я пришел к выводу, что плагин будучи сам старым, использует geoip модуль тоже старый.
Есть ли у кого какие идеи, как решить проблему чтобы плагин все таки работал? Может, надо как-то заменить на более новый способ определения локации?
(прикрепил сам архив, может, инклуды оттуда пригодятся)
В этой теме было размещено решение! Перейти к решению.
Вложения
-
267.3 KB Просмотры: 275