//========================================= // 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"," meses", " dia"," dias", " hora"," horas", " minuto"," minutos", " segundo"," segundos"; 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]; }