//=========================================
// AccountManager :: VipLib v1.4b
// Desenvolvido por Rafael Perrella
//=========================================
// This version isn't compatible with eAthena revisions and Cronus old revisions
// If you still want this script running on these emulators, send me a message.
//=========================================
// vip_add (amount, group_id=1, uid=getcharid(3))
function script vip_add {
set .@varName$, "$AM_Vip" + getarg (2, getcharid (3)) + "[" + getarg (1, 1) + "]";
callfunc ("vip_update", getarg (2, getcharid (3)), 0);
setd .@varName$, (getd (.@varName$) + getarg (0) > 0) ? getd (.@varName$) + getarg (0) : 0;
return callfunc ("vip_update", getarg (2, getcharid (3)));
}
// vip_remove (amount, group_id=0, uid=getcharid(3))
function script vip_remove {
return callfunc ("vip_add", -getarg (0), getarg (1, 0), getarg (2, getcharid (3)));
}
// vip_set (amount, group_id=1, uid=getcharid(3))
function script vip_set {
callfunc ("vip_update", getarg (2, getcharid (3)), 0);
setd "$AM_Vip" + getarg (2, getcharid (3)) + "[" + getarg (1, 1) + "]", (getarg (0) > 0) ? getarg (0) : 0;
return callfunc ("vip_update", getarg (2, getcharid (3)));
}
// vip_clear (uid=getcharid(3))
function script vip_clear {
set .@aid, getarg (0, getcharid (3));
for (set .@i, 0; .@i <= $@AM_Vip_CountGroups; set .@i, .@i + 1)
setd "$AM_Vip" + .@aid + "[" + $@AM_Vip_Groups[.@i] + "]", 0;
return callfunc ("vip_refresh", 0, .@aid);
}
// vip_read (group_id=0, uid=getcharid(3), update=true)
function script vip_read {
set .@aid, getarg (1, getcharid (3));
if (getarg (2, 1))
callfunc ("vip_update", .@aid, 0);
if (getarg (0, 0))
return getd ("$AM_Vip" + .@aid + "[" + getarg (0, 0) + "]");
for (set .@i, 0; $@AM_Vip_Groups[.@i]; set .@i, .@i + 1)
set .@t, .@t + getd ("$AM_Vip" + .@aid + "[" + $@AM_Vip_Groups[.@i] + "]");
return .@t;
}
// vip_getgroupid (uid=getcharid(3))
function script vip_getgroupid {
return callfunc ("vip_update", getarg (0, getcharid (3)), 0);
}
// vip_listgroupid (uid=getcharid(3), varName = @AM_VipLevel/$@AM_VipLevel)
function script vip_listgroupid {
set .@aid, getarg (0, getcharid (3));
set .@varName$, getarg (1, getcharid (3) ? "@AM_VipLevel" : "$@AM_VipLevel");
callfunc ("vip_update", .@aid, 0);
for (set .@i, $@AM_Vip_CountGroups - 1; .@i >= 0; set .@i, .@i - 1)
{
set .@groupid, $@AM_Vip_Groups[.@i];
if (getd ("$AM_Vip" + .@aid + "[" + .@groupid + "]"))
{
setd .@varName$ + "[" + .@amount + "]", .@groupid;
set .@amount, .@amount + 1;
}
}
return .@amount;
}
// vip_update (uid=getcharid(3), refresh=true)
function script vip_update {
set .@aid, getarg (0, getcharid (3));
set .@now, gettimetick (2);
set .@remove, .@now - getd ("$AM_Vip" + .@aid);
for (set .@i, $@AM_Vip_CountGroups - 1; .@i >= 0 && .@remove >= 0; set .@i, .@i - 1)
{
set .@groupid, $@AM_Vip_Groups[.@i];
set .@varName$, "$AM_Vip" + .@aid + "[" + .@groupid + "]";
if (getd (.@varName$) > 0)
set .@remove, .@remove - getd (.@varName$);
setd .@varName$, (.@remove < 0) ? (-.@remove) : 0;
}
if (.@remove >= 0)
set .@groupid, 0;
setd "$AM_Vip" + .@aid, .@now;
if (getarg (1, 1))
return callfunc ("vip_refresh", .@groupid, .@aid);
return .@groupid;
}
// vip_refresh (group_id=0, uid=getcharid(3))
function script vip_refresh {
if (isloggedin (getarg (1, getcharid (3))))
{
set .@rid, getcharid (3);
attachrid getarg (0, getcharid (3));
if (getgroupid() != getarg (0, 0) && $@AM_Vip_IsValidGroup[getgroupid()])
atcommand "@adjgroup " + getarg (0, 0);
if (!@AM_Vip_DisableManager && !$@AM_Vip_DisableManager)
callfunc ("vipm_refresh", getarg (1, getcharid (3)));
attachrid .@rid;
}
if ($@AM_Vip_AlterSQL)
{
query_sql "SELECT `group_id` FROM `login` WHERE `account_id`='" + getarg (1, getcharid (3)) + "'", .@groupid;
if (.@groupid != getarg (0, 0) && $@AM_Vip_IsValidGroup[.@groupid])
query_sql "UPDATE `login` SET `group_id`='" + getarg (0, 0) + "' WHERE `account_id`='" + getarg (1, getcharid (3)) + "'";
}
return getarg (0, 0);
}
// vip_reload_groups ()
function script vip_reload_groups {
deletearray $@AM_Vip_IsValidGroup;
set $@AM_Vip_IsValidGroup[0], 1;
for (set .@i, 0; $@AM_Vip_Groups[.@i]; set .@i, .@i + 1)
set $@AM_Vip_IsValidGroup[$@AM_Vip_Groups[.@i]], 1;
set $@AM_Vip_CountGroups, .@i;
return;
}
// VipManager
//-------------------------------------------
- script vipm_npc -1,{
OnInit:
if (!$@AM_Vip_CountGroups)
{
// from worse to better group id
setarray $@AM_Vip_Groups, 1, 5, 6, 7, 8;
callfunc ("vip_reload_groups");
}
end;
OnPCLoginEvent:
callfunc ("vipm_refresh");
end;
OnRefreshVip:
if (@AM_Vip_DisableManager || $@AM_Vip_DisableManager || !$@AM_Vip_IsValidGroup[getgroupid()])
end;
deltimer "vipm_npc::OnRefreshVip";
if (set (.@time, callfunc ("vip_read", set (.@groupid, callfunc ("vip_getgroupid")), getcharid(3), 0)) > 0)
addtimer 1000 + ((.@time >= 86400) ? 86400 : .@time) * 1000, "vipm_npc::OnRefreshVip";
set @AM_Vip_DisableManager, 1;
callfunc ("vip_refresh", .@groupid);
set @AM_Vip_DisableManager, 0;
callfunc ("vipm_force_call");
end;
}
// vipm_force_call (uid=getcharid(3))
function script vipm_force_call {
set .@aid, getarg (0, getcharid (3));
if (!.@aid || isloggedin (.@aid))
{
set .@rid, getcharid (3);
for (set .@i, 0; .@i < getarraysize ($@AM_Vip_CallOnRefresh$); set .@i, .@i + 1)
if (is_function ($@AM_Vip_CallOnRefresh$))
{
attachrid .@aid;
callfunc ($@AM_Vip_CallOnRefresh$, .@rid);
}
attachrid .@rid;
}
return;
}
// vipm_refresh (uid=getcharid(3))
function script vipm_refresh {
set .@aid, getarg (0, getcharid (3));
if (isloggedin (.@aid))
{
set .@rid, getcharid (3);
attachrid .@aid;
addtimer 1000, "vipm_npc::OnRefreshVip";
attachrid .@rid;
}
return;
}
// vipm_format_time (time_in_seconds)
function script vipm_format_time {
if (! .unitSize)
{
//setarray .unit$, " month", " months", " day", " days", " hour", " hourss", " minute", " minutes", " second", " seconds";
setarray .unit$, " mês"," months", " dia"," days", " hora"," hours", " minuto"," minutes", " segundo"," seconds";
setarray .unit, 30*86400, 86400, 3600, 60, 1;
set .unitSize, getarraysize (.unit);
}
// Seleciona as duas unidades que devem ser usadas e formata a string
if (set (.@time, getarg (0)) > 0)
for (set .@i, 0; .@i < .unitSize; set .@i, .@i + 1)
if (.@time >= .unit[.@i])
{
if (.@i + 1 < .unitSize)
{
set .@lTime, (.@time % .unit[.@i]) / .unit[.@i + 1];
//set .@lTime$, " and " + .@lTime + .unit$[2*(.@i + 1) + (.@lTime != 1)];
set .@lTime$, " e " + .@lTime + .unit$[2*(.@i + 1) + (.@lTime != 1)];
}
return (.@time / .unit[.@i]) + .unit$[2*.@i + (.@time / .unit[.@i] != 1)] + .@lTime$;
}
return "0" + .unit$[2*.unitSize - 1];
}