//* ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ // /\ \ /\ \ /\ \ /\__\ /\ \ /\ \ /\ \ /\ \ /\__\ /\__\ /\ \ // \:\ \ /::\ \ /::\ \ /:| _|_ /::\ \ /::\ \ /::\ \ /::\ \ /:| _|_ /:/ _/_ /::\ \ // /::\__\ /::\:\__\ /:/\:\__\ /::|/\__\ /:/\:\__\ /:/\:\__\ /::\:\__\ /:/\:\__\ /::|/\__\ /:/_/\__\ /\:\:\__\ // /:/\/__/ \:\:\/ / \:\ \/__/ \/|::/ / \:\/:/ / \:\ \/__/ \;:::/ / \:\/:/ / \/|::/ / \:\/:/ / \:\:\/__/ // \/__/ \:\/ / \:\__\ |:/ / \::/ / \:\__\ |:\/__/ \::/ / |:/ / \::/ / \::/ / // \/__/ \/__/ \/__/ \/__/ \/__/ \|__| \/__/ \/__/ \/__/ \/__/ // Advanced Scripts // (c) TecnoCronus, 5 Jan 2009 //*------------------------------------------ eAthena Script --------------------------------------------* //*- Manuntenção + Controle de Contas + Congelamento de Contas * //*----------------------------------------------- By: --------------------------------------------------* //*- TecnoCronus * //*------------------------------------------ Current Version: ------------------------------------------* //*- 1.0 * //*------------------------------------------ Compatible With: ------------------------------------------* //*- eAthena * //*------------------------------------------- Description: ---------------------------------------------* //*- 1 NPC que faz manuntenção do Servidor, apaga contas que não logam hà certos meses. * //*- 2 Controle de Contas: Opções como: Trocar Nome, Trocar Senha. * //*- 3 Congelamento de Contas: Adiciona 1, 2 ou 3 Meses extras para proteger a conta de ser banida * //*---------------------------------------- Additional Comments: ----------------------------------------* //*- 1.0 Trabalha SOMENTE em eAthena MySQL. * //*- 1.1 Controle de Lag: Como a Manuntenção ocorre todos os dias à meia-noite, você pode optar por não * //*- fazer manuntenção se X% de Players estiverem logados, de acordo com a var "$@MaxUser" * //*- 1.2 Tudo é automático, até a atualização da Variável que controla o tempo extra de descongelamento, * //*- O NPC deleta as contas Automaticamente também //*------------------------------------------ Bug Report Link: -----------------------------------------* //*- http://www.eathena.ws/board/index.php?showtopic=207514 * //*------------------------------------------------------------------------------------------------------*/ prontera,146,164,6 script Controlador de Contas 718,{ L_MainMenu mes "[Controlador de Contas]"; mes "Olá, o que você deseja ?"; switch(select("Trocar Minha Senha","Trocar meu Nome","^FF0000Nada^000000","Congelar Minha Conta","descongelar minha conta","Descongelar outra conta"; case 1: mes "Digite sua nova senha"; input @NewPass; set @charid, getcharid(0); query_sql "UPDATE `login` SET `user_pass` = `"+@NewPass+"` WHERE `user_id` = `"+@charid+"`"; mes "Senha trocada com sucesso !"; close; case 2: mes "Digite seu novo nome"; input @NewName$; set @charid, getcharid(0); query_sql "SELECT `name` FROM `char` WHERE `name` = `"+@NewName$+"`",@check$; if(getstrlen(@check)<2) { mes "esse nome já existe"; close; } query_sql "UPDATE `char` SET `name` = `"+@NewName$+"` WHERE `user_id` = `"+@charid+"`"; mes "Nome Trocado"; close; case 3: close; case 4: mes "Hum, você sabe como funciona o Congelamento?"; if(select("Sim eu Sei","Não, ainda não")==2) { if(Zeny<$x_Zeny) { mes "Você não tem "+x_Zeny+" para congelar sua conta, volte mais tarde"; close; } mes "Insira a Senha para descongelar sua conta, com no mínimo ^FF0001"+$@Pass_Len+"^000000 dígitos"; mes "^FF0000 NUNCA ESQUEÇA SUA SENHA, PORQUE SEM ELA VOCÊ NÃO DESCONGELARÁ"; mes "SUA CONTA NOVAMENTE^000000"; L_InputUnFree: input @Unfree$; if(getstrlen(@UnFree$)<$@Pass_Len) { mes "senha muito pequena"; close; } mes "Confirmando: "+@UnFree#+"; mes " Continuar com essa senha ?"; if(select("Sim","Não")==2) goto L_InPutUnfree; set #Unfree$, @Unfree$; mes "Quantos meses deseja congelar sua conta ? (Max:^FF00003^000000)"; switch(select("1","2","3")) { case 1: query_sql "UPDATE `login` SET `freeze_stats` = `1` WHERE `account_id` = `"+@accid+"`"; set Zeny,Zeny-$x_Zeny; set #Freeze_Stats, 1; callfunc "F_Continue"; end; case 2: query_sql "UPDATE `login` SET `freeze_stats` = `2` WHERE `account_id` = `"+@accid+"`"; set Zeny,Zeny-$x_Zeny; set #Freeze_Stats, 2; callfunc "F_Continue"; end; case 3: query_sql "UPDATE `login` SET `freeze_stats` = `3` WHERE `account_id` = `"+@accid+"`"; set Zeny,Zeny-$x_Zeny; set #Freeze_Stats, 3; callfunc "F_Continue"; end; } } else { next; mes "[Controlador de Contas]"; mes "Funciona desse jeito: você paga "+$x_Zeny+" Zenys e você escolhe quantos meses"; mes "você deseja congelar sua conta, durante esse tempo seu dinheiro estará guardado"; mes "e sua conta não será apagada se você não logar nesse período de tempo"; mes "quando você desejar descongelar sua conta, você precisará de uma senha, que você"; mes "deve escolher quando congelar sua conta, ^FF0000 Nunca equeça essa senha^000000"; next; mes "[Controlador de Contas]"; mes "Você também pode bloqueiar sua conta, permitindo que somente você, de seu computador"; mes "Logue na sua conta, desse jeito sua conta estará protegida enquanto estiver congelada."; mes "e somente você poderá usá-la enquanto estiver congelada"; next; mes "[Controlador de Contas]"; mes "Enquanto sua conta estiver congelada, toda vez que alguém logar nela,"; mes "O Servidor detectará o Computador, se o Computador não for o seu, ele"; mes "pedirá uma senha de acesso temporário à sua conta, que você define a sua senha"; mes "de acesso temporário, se a senha estiver correta, a pessoa que estiver logada"; mes "poderá continuar usando sua conta."; next; mes "[Controlador de Contas]"; mes "Mas, por motivos de Segurança, você pode bloquear sua Conta para que somente "; mes "de seu computador ela possa ser usada."; mes "Se você tiver algum problema com seu computador, você poderá desbloquear sua conta"; mes "em outro computador e em otra conta sem problemas, dese que você saiba a senha"; mes "Mas você deve informar 1 nome de algum char de sua cont para isso"; next; mes "[Controlador de Contas]"; mes "Outro tipo de congelamento de conta é que você permita que, durante ela estar congelada,"; mes "somente outras pessoas possam logar na sua conta a partir de outro computador, mas"; mes "é recomendável que sejam pessoas de sua confiança, e voce pode escolher no máximo 3"; next; mes "[Controlador de Contas]"; mes "Bem, isso é tudo sobre o congelamento de contas."; mes "Deseja congelar sua conta ?"; if(select("Sim","Não")==2) close; close2; goto L_MainMenu; end; } case 5: mes "Insira sua senha de descongelamento"; input @pass$; if(@pass$!=#Unfree$ || !#Unfree$) { mes "senha incorreta ou você não congelou sua conta"; close; s} set #Freeze_Stats, 0; mes "conta descongelada"; if(!#MZeny || #MZeny == 0) close; mes "Pegue seu dinheiro de volta"; set Zeny,Zeny+#MZeny; set #MZeny, 0; close; case 6: mes "Diga o Nome de 1 char da conta"; input @char$; query_sql "SELECT `account_id` FROM `char` WHERE `name` = `"+@char$+"` DESC LIMIT `1`",@chr$; if(!getarraysize(@chr$)) { mes "esse char não existe "; close; } mes "Digite a Senha de descongelamento"; input @unfree2$; query_sql "SELECT `value` FROM `global_reg_value` WHERE `account_id` = `"+@char$+"` AND `str` = `#Freeze_Stats`",@friendpass$; if(@unfree2$!=@friendpass$) { mes "Senha Incorreta ou a Conta não está Congelada"; close; } query_sql "UPDATE `global_reg_value` SET `value` = `0` WHERE `str` = `#Freeze_Stats` AND `account_id` = `"+@chr$+"`"; mes "conta descongelada com sucesso !"; close; } function script F_Continue { set @mon, gettime(6); set @day, gettime(5); set @year, gettime(7); set @mon30, @mon * 30; set @acc, @mon30 + @day; set #NextMonth, @acc; set @monc, @mon + $@MonToBan; if(@monc>12) set #NextYear, @year + 1; set #NextYear, @year; query_sql "UPDATE `global_reg_value` SET `check_var` = `"+#NextMmonth+"` WHERE `account_id` = `"+getcharid(3)+"`"; query_sql "UPDATE `global_reg_value` SET `year` = `"+#NextYear+"` WHERE `account_id` = `"+getcharid(3)+"`"; L_Again: mes "Deseja definir uma senha de acesso temporário ?"; mes "Desse jeito outras pessoas podem logar em sua conta enquanto estiver"; mes "bloqueiada"; if(select("^0000FFSim^000000","^FF0000Não^000000")==2) goto L_1; mes "Ok, essa senha ^FF0000Não^000000 é a senha de descongelamento, ela apenas permite"; mes "que outras pessoas possam usar sua conta enquanto ela estiver congelada,"; mes "se souberem a senha."; next; mes "[Controlador de Contas]"; mes "Insira sua senha de ^CDCD00Acesso Temporário^000000"; input @Password; set #Temp, @Password; L_1: next; mes "[Controlador de Contas]"; mes "Agora você deseja bloqueiar Totalmente sua conta ?"; mes "se sim, Somente você, de seu computador poderá logar"; mes "em sua conta, mas, por motivos de segurança, você deve"; mes "escolher pelo menos uma pessoa, que poderá logar em sua"; mes "conta, sem precisar usar senha temporária"; L_TG: next; mes "[Controlador de Contas]"; mes "Ok, diga o nome da pessoa(s) que poderá(ão) logar em sua conta"; mes "O Máximo de pessoas é 3"; L_Input: input @Friend$; query_sql "SELECT `account_id` FROM `login` WHERE `name` = `"+@Friend$+"`",@name; if(getstrlen(@name) < 2) { mes "essa pessoa não existe, deseja tentar novamente ou ignorar essa parte ?"; if(!#Friend || #Friend == 0) goto L_TG; if(select("Tentar Novamente","Ignorar")==1) goto L_TG; goto L_IG; } if(!#Friend || #Friend == 0) { query_sql "UPDATE `login` SET `friend_sec1` = `"+@name+"` WHERE `account_id` = `"+getcharid(3)+"`"; set #Friend, 1; goto M_Cont; } else if(#Friend==1) { query_sql "UPDATE `login` SET `friend_sec2` = `"+@name+"` WHERE `account_id` = `"+getcharid(3)+"`"; set #Friend, 2; goto M_Cont; } else if(#Friend==2) { query_sql "UPDATE `login` SET `friend_sec3` = `"+@name+"` WHERE `account_id` = `"+getcharid(3)+"`"; set #Friend, 3; goto M_Cont; } M_Cont: if(#Friend==3) goto L_IG; mes "Você Adicionou um amigo, é o mínimo, deseja adicionar outro ou ignorar essa parte ?"; if(select("Adicionar outro","Ignorar")==1) goto L_Input; L_IG: next; set #MyIp, query_sql "SELECT `last_ip` FROM `login` WHERE `account_id` = `"+getcharid(3)+"`"; mes "[Controlador de Contas]"; mes "Deseja guardar seu Zeny?"; if(select("Sim","Não")==2) goto L_See; mes "Insira quanto"; input @zeny; if(Zeny<@Zeny) { mes "você não tem esse dinheiro, deseja tentar de novo?"; if(select("Sim","Não")==2) close; goto L_Again; } set Zeny,Zeny-@Zeny; set #MZeny, 0; set #MZeny,#MZeny+@Zeny; L_See: mes "Conta congelada !"; mes "Lembrando: sua senha de descongelamento é :"; mes "^FF0000"+#UnFree+"^000000"; if(!#Temp||#Temp==0) close; mes "e sua senha temporária é :"; mes "^FF0000"+#Temp+"^000000"; close; } OnClock0000: set @User, getusers; set @Percent, $@MaxUser / 100; set @PercentPlayers, @Percent * @user; if(@PercentPlayers >= $@MaxUser) end; set @year, gettime(7); set @mon, gettime(6); set @day, gettime(5); set @check, @mon * 30; set @Today, @check + @day; query_sql "DELETE FROM `login` WHERE `month_ban` >= `"+@Today+"` AND `year` <= `"+@year+"`"; query_sql "UPDATE `global_reg_value` SET `value`= `value` - 1 WHERE `str` = '#Freeze_Stats' AND `check_var` >=`"+@Today+"` and `year` <= `"+@year+"`"; end; OnPCLoginEvent: if(!#Freeze_Stats || #Freeze_Stats<=0) end; query_sql "SELECT `last_ip` FROM `login` WHERE `account_id` = `"+getcharid(3)+"`",@MyIp; if(@MyIp==#MyIp) { mes "[Controlador de Contas]"; mes "Olá sua conta ainda está congelada, "+strcharinfo(0)+" "; if(!#Intruder||#Intruder==0) close; callfunc "Intruder"; end; } query_sql "SELECT `friend_sec1` FROM `login` WHERE `account_id` = `"+getcharid(3)+"`", @sec1; query_sql "SELECT `friend_sec2` FROM `login` WHERE `account_id` = `"+getcharid(3)+"`", @sec2; query_sql "SELECT `friend_sec3` FROM `login` WHERE `account_id` = `"+getcharid(3)+"`", @sec3; if(@sec1 == getcharid(3) || @sec2 == getcharid(3) || @sec 3 == getcharid(3)) end; if(!#Temp || #Temp == 0) { mes "[Controlador de Contas]"; mes "Está conta está bloqueiada, você não pode logar nela"; atcommand "@die"; atcommand "@kick " + strcharinfo(0); close; } mes "[Controlador de Contas]"; mes "Está conta está congelada, Insira a Senha Temporária,"; mes "Para ter acesso à esta conta"; mes "Se você errar será kicado"; input @Pass; if(@Pass!=#Temp) { set @charid, getcharid(3); if(!#pilaID) set #pilaID, 0; set #pilaID,#pilaID+1; query_sql "SELECT `last_ip` FROM `login` WHERE `account_id` = `"+getcharid(3)+"`",@MyIp; query_sql "INSERT INTO `login` (`intruder`,`int_id`) VALUES (`"+@MyIp+"`,`"+#pilaID+"`) WHERE `last_ip` = `"+@MyIp+"`"; query_sql "SELECT `Int_Trys` FROM `login` WHERE `char_id` = `"+@charid+"`",@trys; if(@trys==0) query_sql "UPDATE `login` SET `Int_Trys` = `1` WHERE `last_ip` = `"+@MyIp+"`"; set @trys, @trys+1; query_sql "UPDATE `login` SET `Int_Trys` = `"+@trys+"` WHERE `last_ip` = `"+@MyIp+"`"; set #Intruder, 1; atcommand "@die"; atcommand "@kick " + strcharinfo(0); close; } mes "Senha Correta !"; mes "Autorização Concedida"; close; OnPCLogoutEvent: @mon, gettime(6); if(@mon + $@MonToBan > 12 && !#Freeze_Stats) callfunc "UpDate",0; if(@mon + $@MonToBan > 12 && #Freeze_Stats <= 0) callfunc "UpDate",0; if(@mon + $@MonToBan > 12 && #Freeze_Stats >= 1) callfunc "UpDate",1; if(!#Freeze_Stats||#Freeze_Stats<=0) { set @lastm, gettime(6); set @lasry, gettime(7); query_sql "UPDATE `global_reg_value` SET `check_var` = `"+@lastm+"` WHERE `account_id` = `"+getcharid(3)+"`"; query_sql "UPDATE `global_reg_value` SET `year` = `"+@lasty+"` WHERE `account_id` = `"+getcharid(3)+"`"; query_sql "UPDATE `login` SET `month_ban` = `"+@lastm+"` WHERE `account_id` = `"+getcharid(3)+"`"; query_sql "UPDATE `login` SET `year` = `"+@lasty+"` WHERE `account_id` = `"+getcharid(3)+"`"; end; } else if(#Freeze_Stats==1) { set @lastm, gettime(6)+1; set @lasry, gettime(7); query_sql "UPDATE `global_reg_value` SET `check_var` = `"+@lastm+"` WHERE `account_id` = `"+getcharid(3)+"`"; query_sql "UPDATE `global_reg_value` SET `year` = `"+@lasty+"` WHERE `account_id` = `"+getcharid(3)+"`"; query_sql "UPDATE `login` SET `month_ban` = `"+@lastm+"` WHERE `account_id` = `"+getcharid(3)+"`"; query_sql "UPDATE `login` SET `year` = `"+@lasty+"` WHERE `account_id` = `"+getcharid(3)+"`"; end; } else if(#Freeze_Stats==2) { set @lastm, gettime(6)+2; set @lasry, gettime(7); query_sql "UPDATE `global_reg_value` SET `check_var` = `"+@lastm+"` WHERE `account_id` = `"+getcharid(3)+"`"; query_sql "UPDATE `global_reg_value` SET `year` = `"+@lasty+"` WHERE `account_id` = `"+getcharid(3)+"`"; query_sql "UPDATE `login` SET `month_ban` = `"+@lastm+"` WHERE `account_id` = `"+getcharid(3)+"`"; query_sql "UPDATE `login` SET `year` = `"+@lasty+"` WHERE `account_id` = `"+getcharid(3)+"`"; end; } else { set @lastm, gettime(6)+3; set @lasry, gettime(7); query_sql "UPDATE `global_reg_value` SET `check_var` = `"+@lastm+"` WHERE `account_id` = `"+getcharid(3)+"`"; query_sql "UPDATE `global_reg_value` SET `year` = `"+@lasty+"` WHERE `account_id` = `"+getcharid(3)+"`"; query_sql "UPDATE `login` SET `month_ban` = `"+@lastm+"` WHERE `account_id` = `"+getcharid(3)+"`"; query_sql "UPDATE `login` SET `year` = `"+@lasty+"` WHERE `account_id` = `"+getcharid(3)+"`"; query_sql "UPDATE `login` SET `month_ban` = `"+@lastm+"` WHERE `account_id` = `"+getcharid(3)+"`"; end; } end; function script UpDate { switch(arg(0)) { case 0: set @lastmc,$@MonToBan+gettime(6); set @lastm, @lastmc - 12; set @lasry, gettime(7)+1; query_sql "UPDATE `global_reg_value` SET `check_var` = `"+@lastm+"` WHERE `account_id` = `"+getcharid(3)+"`"; query_sql "UPDATE `global_reg_value` SET `year` = `"+@lasty+"` WHERE `account_id` = `"+getcharid(3)+"`"; query_sql "UPDATE `login` SET `month_ban` = `"+@lastm+"` WHERE `account_id` = `"+getcharid(3)+"`"; query_sql "UPDATE `login` SET `year` = `"+@lasty+"` WHERE `account_id` = `"+getcharid(3)+"`"; end; case 1: set @lastmc,$@MonToBan+gettime(6); set @lastmc2, @lastmc - 12; set @lastm, @lastmc2 + #Freeze_Stats; set @lasry, gettime(7)+1; query_sql "UPDATE `global_reg_value` SET `check_var` = `"+@lastm+"` WHERE `account_id` = `"+getcharid(3)+"`"; query_sql "UPDATE `global_reg_value` SET `year` = `"+@lasty+"` WHERE `account_id` = `"+getcharid(3)+"`"; query_sql "UPDATE `login` SET `month_ban` = `"+@lastm+"` WHERE `account_id` = `"+getcharid(3)+"`"; query_sql "UPDATE `login` SET `year` = `"+@lasty+"` WHERE `account_id` = `"+getcharid(3)+"`"; end; } end; } function script Show_Intruder { next; set @charid, getcharid(3); query_sql "SELECT `Intruder` FROM `login` ORDER BY `Int_id` ",@IntID; query_sql "SELECT `account_id` FROM `login` WHERE `last_ip` = `"+@IntID[0]+"`",@pilantraID; query_sql "SELECT `name` FROM `char` WHERE `account_id` = `"+@pilantraID+"` DESC LIMIt 1",@pilantra; mes "[Controlador de Contas]"; mes "Enquanto sua conta esteve congelada, alguns intrusos tentaram"; mes "entrar em sua conta e foram kicados, para não usá-las"; mes "Exatamente "+getarraysize(@IntID)+" Pessoas tentaram logar em sua conta"; next; mes "[Controlador de Contas]"; mes "A Pessoa que mais tentou entrar em sua conta foi:"; mes "^FF0000"+@pilantra+"^000000"; query_sql "SELECT `Int_Trys` FROM `login` WHERE `last_ip` = `"+@intID[0]+"`",@Blocks; mes "Ele(a) tentou por "@+Blocks+" vezes logar em sua conta e foi bloqueiado(a)"; mes "Ao Total, "+#pilaID+" Tentativas de Login em sua conta foram Bloqueadas"; mes "é recomendável que você tire uma foto dessa mensagem, apertando o botão \"PrintScreen\" de seu teclado"; next; mes "[Controlador de Contas]"; mes "Deseja ver essa mensagem novamente ?"; if(select("Sim","Não")==2) close; set #Intruder, 0; close; } OnInit: // ************************* // *** - CONFIGURAÇÃO - *** // ************************* set $@MaxUser, 70; set $@MonToBan, 3; set $x_Zeny, 500000; if($CreatTable==1) end; set $CreatTable, 1; query_sql "ALTERTABLE `login` ADD `month_ban` smallint(11) NOT NULL default '0'; query_sql "ALTERTABLE `login` ADD `friend_sec1` smallint(11) NOT NULL default '0'; query_sql "ALTERTABLE `login` ADD `friend_sec2` smallint(11) NOT NULL default '0'; query_sql "ALTERTABLE `login` ADD `friend_sec3` smallint(11) NOT NULL default '0'; query_sql "ALTERTABLE `login` ADD `Int_Trys` tinyint(1) NOT NULL default '0'; query_sql "ALTERTABLE `global_reg_value` ADD `check_var` smallint(11) NOT NULL default '0'; query_sql "ALTERTABLE `global_reg_value` ADD `year` smallint(11) NOT NULL default '0'; end; }