OciXCrom™ написа: ↑03 Окт 2018, 20:47
Код за потвърждение: Избери целия код
#include <amxmodx>
#include <amxmisc>
#include <nvault>
new g_NvID;
new g_iCustomTime[33];
public plugin_init()
{
register_plugin("Play time", "1.0", "bugsy");
register_clcmd("say /ptime","cmd_DisplayTime", ADMIN_ALL , "- Display your play time on server.");
register_clcmd("say_team /ptime","cmd_DisplayTime", ADMIN_ALL, "- Display your play time on server.");
register_concmd("amx_set_time", "cmd_SetTime", ADMIN_BAN, "<player> <time>")
g_NvID = nvault_open("playtimevault");
}
public plugin_end()
{
nvault_close(g_NvID);
}
public client_putinserver(id)
g_iCustomTime[id] = -1
public client_disconnect(id)
{
new szPlayTime[8];
new szAuthID[35];
new iPlayTime;
new ts;
get_user_authid(id, szAuthID, 34);
if( !nvault_lookup( g_NvID, szAuthID , szPlayTime , charsmax(szPlayTime) , ts ) )
{
//Users first disconnect
num_to_str(get_user_custom_time(id), szPlayTime, charsmax(szPlayTime));
nvault_set(g_NvID , szAuthID , szPlayTime);
}
else
{
//All other disconnects
iPlayTime = str_to_num(szPlayTime) + get_user_custom_time(id);
num_to_str(iPlayTime, szPlayTime, charsmax(szPlayTime))
nvault_set( g_NvID , szAuthID , szPlayTime);
}
}
public cmd_SetTime(id, iLevel, iCid)
{
if(!cmd_access(id, iLevel, iCid, 3))
return PLUGIN_HANDLED
new szPlayer[32]
read_argv(1, szPlayer, charsmax(szPlayer))
new iPlayer = cmd_target(id, szPlayer, CMDTARGET_OBEY_IMMUNITY)
if(!iPlayer)
return PLUGIN_HANDLED
new szMinutes[8]
read_argv(2, szMinutes, charsmax(szMinutes))
g_iCustomTime[iPlayer] = str_to_num(szMinutes)
new szName[2][32]
get_user_name(id, szName[0], charsmax(szName[]))
get_user_name(iPlayer, szName[1], charsmax(szName[]))
client_print(id, print_chat, "ADMIN %s set %i minutes on %s", szName[0], g_iCustomTime[iPlayer], szName[1])
return PLUGIN_HANDLED
}
public cmd_DisplayTime(id)
{
new szTime[8];
new szAuthID[35];
new ts;
new iCurTime = get_user_custom_time(id);
new iTotalTime = 0;
get_user_authid(id, szAuthID, 34);
if( nvault_lookup(g_NvID, szAuthID , szTime, 7, ts) )
iTotalTime = str_to_num(szTime);
client_print(id,print_chat,"* You have been on this server for %d minutes.", (iCurTime / 60));
client_print(id,print_chat,"* Your total recorded play time on the server is %d minutes.", ((iCurTime + iTotalTime) / 60) );
}
get_user_custom_time(id)
return g_iCustomTime[id] == -1 ? get_user_time(id, 1) : g_iCustomTime[id]
Не се получава. Пиша amx_set_time Ник 9 - излиза съобщението,но като напиша /ptime няма разлика, а когато напиша amx_set_time Ник 999999 изписва в /ptime,че имам около 2к минути ..
Едит1: Забелязах,че ги конвентира. Пиша amx_set_time Ivan 7000 = във /ptime ги изписва във 117 минути
Едит2: Оправих се със конвентирането и изписването в чата на добавените минути в конвентиран вариант,но не се справих със едно единствено нещо: Когато напиша amx_set_time ivan 1 в конзолата и след това /ptime Total recorded play time изписва много повече вместо да ги сет-не на 1. Трябва да играе като ролята на set_user_health(id, 100). Ето ти кода:
Код за потвърждение: Избери целия код
public cmd_SetTime(id, iLevel, iCid)
{
if(!cmd_access(id, iLevel, iCid, 3))
return PLUGIN_HANDLED
new szPlayer[32]
read_argv(1, szPlayer, charsmax(szPlayer))
new iPlayer = cmd_target(id, szPlayer, CMDTARGET_OBEY_IMMUNITY)
if(!iPlayer)
return PLUGIN_HANDLED
new szMinutes[8]
read_argv(2, szMinutes, charsmax(szMinutes))
g_iCustomTime[iPlayer] = (str_to_num(szMinutes) * 60)
new szName[2][32]
get_user_name(id, szName[0], charsmax(szName[]))
get_user_name(iPlayer, szName[1], charsmax(szName[]))
client_print(id, print_chat, "ADMIN %s set %i minutes on %s", szName[0], (g_iCustomTime[iPlayer] / 60), szName[1] );
return PLUGIN_HANDLED
}
public cmd_DisplayTime(id)
{
new szTime[8];
new szAuthID[35];
new ts;
new iCurTime = get_user_custom_time(id);
new iTotalTime = 0;
get_user_authid(id, szAuthID, 34);
if( nvault_lookup(g_NvID, szAuthID , szTime, 7, ts) )
iTotalTime = str_to_num(szTime);
client_print(id,print_chat,"* You have been on this server for %d minutes.", (iCurTime / 60));
client_print(id,print_chat,"* Your total recorded play time on the server is %d minutes.", ((iCurTime + iTotalTime) / 60) );
}
get_user_custom_time(id)
return g_iCustomTime[id] == -1 ? get_user_time(id, 1) : g_iCustomTime[id]
Едит3: Оправих се със всички проблеми,но сега като напиша amx_set_time ivan 120 и след 5 минути напиша /ptime ми показва 120 минути че съм бил в сървъра (не отчита)
Код за потвърждение: Избери целия код
public cmd_SetTime(id, iLevel, iCid)
{
if(!cmd_access(id, iLevel, iCid, 3))
return PLUGIN_HANDLED
new szPlayer[32]
read_argv(1, szPlayer, charsmax(szPlayer))
new iPlayer = cmd_target(id, szPlayer, CMDTARGET_OBEY_IMMUNITY)
if(!iPlayer)
return PLUGIN_HANDLED
new szMinutes[8], szTime[8], szAuthID[35], ts;
read_argv(2, szMinutes, charsmax(szMinutes))
get_user_authid(iPlayer, szAuthID, 34);
if( nvault_lookup(g_NvID, szAuthID , szTime, 7, ts) )
szTime[iPlayer] = (str_to_num(szMinutes) * 60)
g_iCustomTime[iPlayer] = (str_to_num(szMinutes) * 60)
new szName[2][32]
get_user_name(id, szName[0], charsmax(szName[]))
get_user_name(iPlayer, szName[1], charsmax(szName[]))
client_print(id, print_chat, "ADMIN %s set %i minutes on %s", szName[0], (g_iCustomTime[iPlayer] / 60), szName[1] );
return PLUGIN_HANDLED
}
public cmd_DisplayTime(id)
{
new szTime[8];
new szAuthID[35];
new ts;
new iCurTime = get_user_custom_time(id);
new iTotalTime = 0;
get_user_authid(id, szAuthID, 34);
if( nvault_lookup(g_NvID, szAuthID , szTime, 7, ts) )
iTotalTime = str_to_num(szTime);
client_print(id,print_chat,"* You have been on this server for %d minutes.", (iCurTime / 60));
client_print(id,print_chat,"* Your total recorded play time on the server is %d minutes.", ((iCurTime + iTotalTime) / 60) );
}
Едит 4: Моя грешка,но пък отчита минутите който са били добавени чрез командата чак след като влезнеш наново във сървъра.
Пример: Добавям си минути (имаи на предвид,че нямам никакви тотални минути) - amx_set_time ivan 120
Пиша /ptime и ми излиза: Your total recorded play time on the server is 0 minutes
Пиша retry в кознолата
Пиша /ptime след като съм влезнал в сървъра: Your total recorded play time on the server is 120 minutes
Искам след добавянето веднага като напиша /ptime да ги изписва при тоталните
Код за потвърждение: Избери целия код
public cmd_SetTime(id, iLevel, iCid)
{
if(!cmd_access(id, iLevel, iCid, 3))
return PLUGIN_HANDLED
new szPlayer[32]
read_argv(1, szPlayer, charsmax(szPlayer))
new iPlayer = cmd_target(id, szPlayer, CMDTARGET_OBEY_IMMUNITY)
if(!iPlayer)
return PLUGIN_HANDLED
new szMinutes[8], szTime[8], szAuthID[35], ts;
read_argv(2, szMinutes, charsmax(szMinutes))
get_user_authid(iPlayer, szAuthID, 34);
if( nvault_lookup(g_NvID, szAuthID , szTime, 7, ts) )
szTime[iPlayer] = (str_to_num(szMinutes) * 60)
g_iCustomTime[iPlayer] = (str_to_num(szMinutes) * 60)
new szName[2][32]
get_user_name(id, szName[0], charsmax(szName[]))
get_user_name(iPlayer, szName[1], charsmax(szName[]))
client_print(id, print_chat, "ADMIN %s set %i minutes on %s", szName[0], (g_iCustomTime[iPlayer] / 60), szName[1] );
return PLUGIN_HANDLED
}
public cmd_DisplayTime(id)
{
new szTime[8];
new szAuthID[35];
new ts;
new iCurTime = get_user_time( id , 1 );
new iTotalTime = 0;
get_user_authid(id, szAuthID, 34);
if( nvault_lookup(g_NvID, szAuthID , szTime, 7, ts) )
iTotalTime = str_to_num(szTime) + get_user_custom_time(id);
client_print(id,print_chat,"* You have been on this server for %d minutes.", (iCurTime / 60));
client_print(id,print_chat,"* Your total recorded play time on the server is %d minutes.", ((iCurTime + iTotalTime) / 60) );
}
get_user_custom_time(id)
return g_iCustomTime[id] == -1 ? get_user_time(id, 1) : g_iCustomTime[id]