lucasgolino

modificação
PinCode, criando modo de uso, definido pelo group level.

3 posts neste tópico

Olá, esses dias pensei em fazer uma modificação no meu server, decide que não deixaria o PinCode ativo, porem somente ativo para alguns usuários com GroupLevel, tais como CM, GM e ADMIN.

@EDIT:

Pull Request feito no repositorio oficial do brAthena.  ( https://github.com/brAthena/brAthena/pull/65 )

@old

Basicamente existem duas novas opções de configurações existe uma nova opção de configuação:

// Habilitar Pinmode somente para Gruplevel de contas com level definido igual ou maior.
// Padrão: 99
// NOTA: 0, desabilita.
pincode_modelevel: 99

Diff1:

DiffPatcher
---------------------------- conf/char-server.conf ----------------------------
old mode 100644
new mode 100755
index dc639c5..dfd9bf2
-import: conf/import/char_conf.txt
+// Habilitar pinmode somente para gruplevel de contas
+// se mode define como deve ser usado pincode caso ativo (0 -> todos || 1 -> pincode_grouplevel )
+// Padrão: 0
+// NOTA: 0, desabilita.
+pincode_usemode: 1
+
+// Define o numero de Grouplevel da conta para decidir se ativa o pincode.
+// Padrão: 99
+// NOTA: 0, habilita para todas classes, mesmo que (pincode_enabled: 1 || pincode_usemode: 0)
+pincode_grouplevel: 99
+
+
+import: conf/import/char_conf.txt
\ No newline at end of file

------------------------------ src/char/pincode.c ------------------------------
index 21910f9..198742a 100644
@@ -56,10 +56,29 @@ void pincode_handle (int fd, struct char_session_data* sd) {
 		if( pincode->changetime && time(NULL) > (sd->pincode_change+pincode->changetime) ){ // User hasn't changed his PIN code for a long time
 			pincode->sendstate( fd, sd, PINCODE_EXPIRED );
 		} else { // Ask user for his PIN code
-			pincode->sendstate( fd, sd, PINCODE_ASK );
+			if(pincode->usemode == 1){
+				if(sd->group_id >= pincode->grouplevel){
+					pincode->sendstate( fd, sd, PINCODE_ASK );
+				} else {
+					pincode->sendstate( fd, sd, PINCODE_OK );
+					return;
+				}
+			} else {
+				pincode->sendstate( fd, sd, PINCODE_ASK );
+			}
+		}
+	} else {// No PIN code has been set yet
+		if(pincode->usemode == 1){
+			if(sd->group_id >= pincode->grouplevel){
+				pincode->sendstate( fd, sd, PINCODE_NOTSET );
+			} else {
+				pincode->sendstate( fd, sd, PINCODE_OK );
+				return;
+			}
+		} else {
+			pincode->sendstate( fd, sd, PINCODE_NOTSET );
 		}
-	} else // No PIN code has been set yet
-		pincode->sendstate( fd, sd, PINCODE_NOTSET );
+	}
 
 	if( character )
 		character->pincode_enable = -1;
@@ -208,6 +227,15 @@ bool pincode_config_read(char *w1, char *w2) {
 		else if(!strcmpi(w1, "pincode_lastpass"))
 		{
 			pincode->enabled_lastpass = atoi(w2);
+		} else if ( strcmpi(w1, "pincode_usemode") == 0 )  {
+			pincode->usemode = atoi(w2);
+		} else if ( strcmpi(w1, "pincode_grouplevel") == 0 )  {
+			pincode->grouplevel = atoi(w2);
+			if(pincode->grouplevel == 0)
+			{
+				ShowWarning("pincode_grouplevel: definido como 0... Desabilitando usemode...\n");
+				pincode->usemode = 0;
+			}
 		} else {
 			return false;
 		}
@@ -226,6 +254,9 @@ void pincode_defaults(void) {
 	pincode->charselect = 0;
 	pincode->multiplier = 0x3498;
 	pincode->baseSeed = 0x881234;
+	
+	pincode->usemode = 0; // usemode define como deve ser usado pincode caso ativo (0 -> todos || 1 -> admins )
+	pincode->grouplevel = 99; // Level de grupo Admin para ativar no usermod
 
 	pincode->handle = pincode_handle;
 	pincode->decrypt = pincode_decrypt;

------------------------------ src/char/pincode.h ------------------------------
index ed9d21d..d8094e5 100644
@@ -43,6 +43,8 @@ struct pincode_interface {
 	int changetime;
 	int maxtry;
 	int charselect;
+	int usemode; // usemode define como deve ser usado pincode caso ativo (0 -> todos || 1 -> admins )
+	int grouplevel; // glevel usemod
 	unsigned int multiplier;
 	unsigned int baseSeed;
 	/* handler */

 

  • Diff2:
---------------------------- conf/char-server.conf ----------------------------
index dfd9bf2..34f2e90 100755
@@ -217,16 +217,9 @@ pincode_maxtry: 3
 // NOTA: 0, desabilita.
 pincode_lastpass: 0
 
-// Habilitar pinmode somente para gruplevel de contas
-// se mode define como deve ser usado pincode caso ativo (0 -> todos || 1 -> pincode_grouplevel )
-// Padrão: 0
-// NOTA: 0, desabilita.
-pincode_usemode: 1
-
-// Define o numero de Grouplevel da conta para decidir se ativa o pincode.
+// Habilitar pinmode somente para gruplevel de contas com level definido igual ou maior.
 // Padrão: 99
-// NOTA: 0, habilita para todas classes, mesmo que (pincode_enabled: 1 || pincode_usemode: 0)
-pincode_grouplevel: 59
-
+// NOTA: 0, desabilita.
+pincode_modelevel: 99
 
 import: conf/import/char_conf.txt
\ No newline at end of file

------------------------------ src/char/pincode.c ------------------------------
index 198742a..0b889ed 100644
@@ -56,8 +56,8 @@ void pincode_handle (int fd, struct char_session_data* sd) {
 		if( pincode->changetime && time(NULL) > (sd->pincode_change+pincode->changetime) ){ // User hasn't changed his PIN code for a long time
 			pincode->sendstate( fd, sd, PINCODE_EXPIRED );
 		} else { // Ask user for his PIN code
-			if(pincode->usemode == 1){
-				if(sd->group_id >= pincode->grouplevel){
+			if(pincode->modelevel >= 1){
+				if(sd->group_id >= pincode->modelevel){
 					pincode->sendstate( fd, sd, PINCODE_ASK );
 				} else {
 					pincode->sendstate( fd, sd, PINCODE_OK );
@@ -68,8 +68,8 @@ void pincode_handle (int fd, struct char_session_data* sd) {
 			}
 		}
 	} else {// No PIN code has been set yet
-		if(pincode->usemode == 1){
-			if(sd->group_id >= pincode->grouplevel){
+		if(pincode->modelevel >= 1){
+			if(sd->group_id >= pincode->modelevel){
 				pincode->sendstate( fd, sd, PINCODE_NOTSET );
 			} else {
 				pincode->sendstate( fd, sd, PINCODE_OK );
@@ -227,15 +227,8 @@ bool pincode_config_read(char *w1, char *w2) {
 		else if(!strcmpi(w1, "pincode_lastpass"))
 		{
 			pincode->enabled_lastpass = atoi(w2);
-		} else if ( strcmpi(w1, "pincode_usemode") == 0 )  {
-			pincode->usemode = atoi(w2);
-		} else if ( strcmpi(w1, "pincode_grouplevel") == 0 )  {
-			pincode->grouplevel = atoi(w2);
-			if(pincode->grouplevel == 0)
-			{
-				ShowWarning("pincode_grouplevel: definido como 0... Desabilitando usemode...\n");
-				pincode->usemode = 0;
-			}
+		} else if ( strcmpi(w1, "pincode_modelevel") == 0 )  {
+			pincode->modelevel = atoi(w2);
 		} else {
 			return false;
 		}
@@ -255,8 +248,7 @@ void pincode_defaults(void) {
 	pincode->multiplier = 0x3498;
 	pincode->baseSeed = 0x881234;
 	
-	pincode->usemode = 0; // usemode define como deve ser usado pincode caso ativo (0 -> todos || 1 -> admins )
-	pincode->grouplevel = 99; // Level de grupo Admin para ativar no usermod
+	pincode->modelevel = 0; // usemode define como deve ser usado o pincode para um grouplevel, caso ativo (0 -> todos || 1 <-> 99  [GroupLevel] )
 
 	pincode->handle = pincode_handle;
 	pincode->decrypt = pincode_decrypt;

------------------------------ src/char/pincode.h ------------------------------
index d8094e5..363dcec 100644
@@ -43,8 +43,7 @@ struct pincode_interface {
 	int changetime;
 	int maxtry;
 	int charselect;
-	int usemode; // usemode define como deve ser usado pincode caso ativo (0 -> todos || 1 -> admins )
-	int grouplevel; // glevel usemod
+	int modelevel; // usemode define como deve ser usado o pincode para um grouplevel, caso ativo (0 -> todos || 1 <-> 99  [GroupLevel] )
 	unsigned int multiplier;
 	unsigned int baseSeed;
 	/* handler */

Obs: não tinha certeza do local mais adequado para o post, se estive errado... por favor mover. Obrigado :D

Editado por lucasgolino
2

Compartilhar este post


Link para o post
Compartilhar em outros sites

A ideia é interessante... e vem bem a calhar para proteção e administração do servidor. o que dava para fazer ai ela ter apenas uma configuração. por exemplo apenas o 

pincode_usemode

ja fazer a verificação se é para todos inserindo o 0 ou fazer a verificação de groups informando o level do grupo. Mas gostei da ideia, é valida e acredito que poder vir a ajudar.

2

Compartilhar este post


Link para o post
Compartilhar em outros sites

o/ Sempre que possível, vou postando modificações.  Vou editar para o usemode somente e adiciono o diff na edição do primeiro post.

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!


Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.


Entrar Agora