Caducaciуn VIP
#1

Hola quй tal cуmo estбn usuarios de Forum SAMP, bueno la verdad no tengo la suficiente experiencia para hacer esto es por eso que he decidido publicar aca el codigo para ver si alguien me ayuda bueno voy directo al grano.

El tema se trata de que quisiera que si alguien fuera tan amable en ayudarme lo que quiero es lo siguiente:

Explicaciуn: Bueno como verбn uso un ladmin que usa sistema de guardado dini si no me equivoco es dini y quisiera hacer un sistema para que el VIP caduque cada 30 dнas no sй si me hago entender osea lo que quiero es lo siguiente: Adaptar un sistema para que cuando le des el VIP a un usuario le caduque el VIP a los 30 dнas y les dejo el cmd de dcmd_listavip para ver si me pueden hacer tambiйn para que salga cuando uses ese comando: Puedas ver los VIPS conectados y los dнas de VIP que le quedan gracias.

Quote:

Acб les dejo los dos comandos:

dcmd_setvip(playerid,params[])
{
if(PlayerInfo[playerid][LoggedIn] == 1)
{
new pame[MAX_PLAYER_NAME];
GetPlayerName(playerid, pame, sizeof(pame));
if(!strcmp(NickAutorizado1,pame,true) ||!strcmp(NickAutorizado2,pame,true) ||!strcmp(NickAutorizado3,pame,true))
{
if(PlayerInfo[playerid][Level] >= 7 || IsPlayerAdmin(playerid))
{
new tmp [256];
new Index;
tmp = strtok(params,Index);
tmp2 = strtok(params,Index);
if(!strlen(params)) return
SendClientMessage(playerid, LIGHTBLUE2, "Usage: /setvip [PlayerID] [AccountType (0-5)]") &&
SendClientMessage(playerid, orange, "Funciуn: Especifique el Tipo de Cuenta (0-NormalAcc,1-Silver,2-Gold,3-Premium,4-Platinum,5-ExTrema)");

new player1, type, playername[MAX_PLAYER_NAME], adminname[MAX_PLAYER_NAME];
player1 = strval(tmp);
if(!strlen(tmp2)) return
SendClientMessage(playerid, LIGHTBLUE2, "Usage: /setvip [PlayerID] [AccountType (0-5)]") &&
SendClientMessage(playerid, orange, "Funciуn: Especifique el Tipo de Cuenta (1-Silver,2-Gold,3-Premium,4-Platinum,5-ExTrema)");
type = strval(tmp2);

if(IsPlayerConnected(player1) && player1 != INVALID_PLAYER_ID)
{
if(PlayerInfo[player1][LoggedIn] == 1)
{
if(type > 5)
return SendClientMessage(playerid,red,"ERROR: Tipo de Cuenta Invalida!");
if(type == PlayerInfo[player1][pVip])
return SendClientMessage(playerid,red,"ERROR: Este Player Ya Tiene Este Tipo de Cuenta!");
CMDMessageToAdmins(playerid,"SetVip");
GetPlayerName(player1, playername, sizeof(playername));
GetPlayerName(playerid, adminname, sizeof(adminname));
new year,month,day;
new hour,minute,second;
getdate(year, month, day);
gettime(hour,minute,second);

switch(type)
{
case 1: AccType = "Silver";
case 2: AccType = "Gold";
case 3: AccType = "Premium";
case 4: AccType = "Platinum";
case 5: AccType = "ExTrema";
}
if(type > 0)
format(string2,sizeof(string2),"|- Administrador %s a Cambiado Tu Cuenta a: %s",adminname,AccType);
else
format(string2,sizeof(string2),"|- Administrador %s a Cambiado Tu Cuenta a: 'Cuenta Normal!",adminname);
SendClientMessage(player1,0x66C178AA,string2);
if(type > PlayerInfo[player1][pVip])
GameTextPlayer(player1,"Promoted", 2000, 3);
else GameTextPlayer(player1,"Demoted", 2000, 3);

format(string2,sizeof(string2),"Usted ha dado a %s El Tipo de Cuenta: %s on '%d/%d/%d' at '%d:%d:%d'", playername, AccType, day, month, year, hour, minute, second);
SendClientMessage(playerid,0x00C378AA,string2);
format(string2,sizeof(string2),"Administrador %s ha hecho a %s el Tipo de Cuenta: %s",adminname, playername, AccType);
SaveToFile("VipLog",string2);
dUserSetINT(PlayerName2(player1)).("AccountType",( type));
PlayerInfo[player1][pVip] = type;
return PlayerPlaySound(player1,1057,0.0,0.0,0.0);
}
else return SendClientMessage(playerid,red,"ERROR: This player is not Registred or Logged!");
}
else return SendClientMessage(playerid,red,"ERROR: Tu No Tienes El Lvl Suficiente Para Usar Este Comando!");
}
else return SendClientMessage(playerid,red,"ERROR: El Jugador No Esta Conectado!");
}
else return SendClientMessage(playerid,red,"Lo Sentimos solo Samuel, Puede Dar Cuenta VIP");
}
else return SendClientMessage(playerid,red,"ERROR: Tu Debes Estar Logeado (/login) para Usar Este Comando");
}


dcmd_listavip(playerid,params[])
{
#pragma unused params
new conteo, vips[7000],texto[128],titulo[128];
for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i))
{
if(PlayerInfo[i][pVip] >= 1)
{
conteo++;
}
}
if(conteo == 0)return SendClientMessage(playerid,red,"No hay miembros Vips Conectados"); //Si no hay Vips
format(titulo,128,"{40FF00}|| Vips Conectados ||: {FFFFFF}>> %d <<",conteo);
//Se contaron los vips conectados
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(PlayerInfo[i][pVip] >= 1)
{
//Si el player es VIP
format(texto,128,"{FFFFFF}%s [ID: %d] {00FFFF}[Cuenta: %d] \n",PlayerName2(i),i,PlayerInfo[i][pVip]);
strcat(vips,texto);
}
}
ShowPlayerDialog(playerid,79,DIALOG_STYLE_LIST,tit ulo,vips,"Cerrar","");
return 1;
}

Reply
#2

Revivo
Reply
#3

Ahora me da pereza hacerte el cуdigo pero lo que yo harнa seria crear una variable que almacene el mes en el que se inicia el vip, dia y finalmente la cantidad de dias contratados, tras esto una funciуn que compruebe si los dias que han pasado tras esto es mayor a los dias contratados. FIN, no es tan dificil.
Reply
#4

Almacena en una variable la fecha de caducidad del vio, las fechas se pueden representar con enteros que cuentan la famosa Unix timestamp. Un ejemplo:

pawn Код:
new caducidadVIP[MAX_PLAYERS];

stock DarVIP(playerid, dias) {
    // en segundos. Decimos que la fecha de caducidad es de tiempoactual + dнas.
    caducidadVIP [playerid]=gettime() + (3600*24*dias);
}

stock leCaducoElVIP(playerid) {
    return gettime() > caducidadVIP [playerid];
}
Reply
#5

Quote:
Originally Posted by lucesita
Посмотреть сообщение
Almacena en una variable la fecha de caducidad del vio, las fechas se pueden representar con enteros que cuentan la famosa Unix timestamp. Un ejemplo:

pawn Код:
new caducidadVIP[MAX_PLAYERS];

stock DarVIP(playerid, dias) {
    // en segundos. Decimos que la fecha de caducidad es de tiempoactual + dнas.
    caducidadVIP [playerid]=gettime() + (3600*24*dias);
}

stock leCaducoElVIP(playerid) {
    return gettime() > caducidadVIP [playerid];
}
Agradesco tъ ayuda lucesita, pero la verdad es que no entiendo tъ me lo podrнas hacer te lo agradesco.
Reply
#6

Revivo lo necesito porfavor!
Reply
#7

Quote:
Originally Posted by Inks
Посмотреть сообщение
Revivo lo necesito porfavor!
Lo tienes servido en bandeja de plata con la respuesta de lucesita.
Reply
#8

Puedes hacer como dijo lucecita, o asi
Код:
stock DarVIP(playerid)
{
new dia,mes,ano;
getdate(ano,mes,dia);
if(mes == 12)
{
MesVIP[playerid] = 1;
AnoVIP[playerid] = ano+1;
}
else
{
DiaVIP[playerid] = dia;
AnoVIP[playerid] = ano;
MesVIP[playerid] = mes;
}
}
Despues, mediante un timer, o no se, haces una detecciуn, si se le paso el VIP:
Код:
stock VerVIP(playerid)
{
new dia,mes,ano;
getdate(ano,mes,dia);
if(MesVIP[playerid] <= mes && DiaVIP[playerid] <= dia && AnoVIP[playerid] <= ano && VariableVip[playerid] == 1)
{
VariableVip[playerid] = 0;
SendClientMessage(playerid,-1,"Mensaje de que se le fue el VIP");
}
return 1;
}
Reply
#9

tres variables.. Eso es una pereza, lo mejor y lo mбs sencillo es pasarlo a Unix. El cуdigo de Lucesita irб mejor, y mбs cуmodo.

Estando el tiempo en Unix puedes fбcilmente operarlo de la forma que sea, y todo bastante rбpido.

Por ejemplo, Lucesita te puso el cуdigo gettime() * 3600 * dias

supongamos que es una fуrmula matemбtica:

gettime() = Representa los segundos UNIX recorridos desde 1 de Enero de 1970 hasta hoy.
3600 = Son los segundos en UNIX de 1 hora, eso equivale a una hora.

El dнa tiene 24 horas (segъn lo que se dice..) y 3600 * 24 te darб un dнa, ahora.

dнa = 3600 * 24

encontraremos los dнas VIP Que se asignarбn:

dias_vip = dia * 30

entonces dias_vip equivale a 30 dнas.

sumбndolo a gettime() es equivalente a la siguiente condiciуn:

PHP код:
if(gettime() > dias_vip)
{
   
// El VIP caduca porque el tiempo UNIX ha sobrepasado el tiempo UNIX de los dias vip.
}
else
{
   
// Tiene VIP, no ha caducado.

De la forma en que felipeBlanco te lo ha puesto, tienes nada mas ese limite. Asignar fecha en que se acaba, pero si quieres agregar horas? minutos? segundos? pues no se puede, salvo que hagas otras tres variables y hagas mucho mas lento e incomodo el proceso.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)