Entre para seguir isso  
Seguidores 0
Shiraz

Sleep System

16 posts neste tópico

Nome do Arquivo: Sleep System

Autor: Shiraz

Arquivo enviado: 16 Nov 2013

Categoria: Lançamentos de Códigos (Source)

 

Esse sistema consiste em pontuar jogadores que estejam sentados (afk) no mapa Y a cada X minutos. Totalmente configurável:

 

//-----------------------------------------------------------------------
// Sleep System [Shiraz]
//-----------------------------------------------------------------------

// Mapas em que o sistema estará ativo. Suporta até 500 mapas.
// Ex: "payon", x0, y0, x1, y1
// Coordenadas setadas como -1 ativará o sistema em todo o mapa.
sleep_maps = (
	"prontera", -1, -1, -1, -1,
	"payon", 125, 150, 102, 131
)

// De quantos em quantos minutos o jogador pontuará.
sleep_minutes: 1

// Pontos por minuto.
sleep_points: 1

// Permitir pontuar com chat? (Nota 2)
sleep_in_chat: 0

// Permitir pontuar com comércio? (Nota 2)
sleep_in_vend: 0
ScreenShot: http://s24.postimg.org/xcshr3yr9/bra_sleep_system.png

Npc: http://shiraz.googlecode.com/svn/Outros/exemplos/sistema_de_sono.txt

 

----

 

Um amigo utiliza esse sistema a alguns meses e não teve problemas até agora. Espero que gostem.

 

 

Clique aqui para fazer o download deste arquivo

Editado por Shiraz
1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Basta aplicar o diff e recompilar.... a configuração fica em /conf/battle/brathena.conf.

Editado por Shiraz
0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você podia adicionar espaços para adicionar mais mapas, como se fosse uma array, tipo.

sleep_map: "prontera","","","","";

Bom sistema, parabéns! ;)

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poderia fazer em formato JSON, fica mais amigável.

 

Ex:

 

sleep_map: {
"prontera",x1,x2,y1,y2,
"izlude",x1,x2,y1,y2
}

Algo do gênero, mas bem interessante o sistema.
0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando vai trocar os pontos por itens, mesmo com a quantidade certa ele fala que nao tem pontos suficiente, sabe como arrumar?

Problema corrigido.

 

http://shiraz.googlecode.com/svn/Outros/exemplos/sistema_de_sono.txt

 

Você podia adicionar espaços para adicionar mais mapas, como se fosse uma array, tipo.

 

 

sleep_map: "prontera","","","","";
Bom sistema, parabéns! ;)

 

Poderia fazer em formato JSON, fica mais amigável.

 

Ex:

 

sleep_map: {
"prontera",x1,x2,y1,y2,
"izlude",x1,x2,y1,y2
}
Algo do gênero, mas bem interessante o sistema.

 

Boa idéia. Adaptei em uma nova versão.

 

// Ex: "payon", x0, y0, x1, y1
// Coordenadas setadas como -1 ativará o sistema em todo o mapa.
sleep_maps = (
	"prontera", -1, -1, -1, -1,
	"payon", 125, 150, 102, 131
)
Valeu.
0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito bom o sistema, funciona com personagens em auto trade ?

 

Acho que auto-trade de qualquer forma, é um comércio, então se ativar, creio que ficará ativo para auto-trade também, consequentemente.

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Será que o autor ou alguém que conheça de DEV pode atualizar o patch para as versões atuais do emualdor ?

Já tenho implementado no meu servidor porem nao queria atualizar o emulador e trocar tirar tal patch

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Será que o autor ou alguém que tenha poderia disponibilizar o patch? a seção de downloads está desativada.

Editado por runeblade
0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tenho esse patch porem ele não está funcional com as versoes atuais do brathena. eu já pedi para atualizarem porem até agora nada.

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tenho esse patch porem ele não está funcional com as versoes atuais do brathena. eu já pedi para atualizarem porem até agora nada.

ele funciona no seu emulador? qual sua rev? pode disponibilizar?

 

Obrigado !

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim a final o autor disponibilizou. a minha rev está cheia de bugs então não aconselho.

Index: conf/battle/brathena.conf
===================================================================
--- conf/battle/brathena.conf	(revision 2591)
+++ conf/battle/brathena.conf	(working copy)
@@ -138,4 +138,28 @@
 official_rates: 0
 
 // Exibir mensagem de remoção do mapa efetuada pelo MapCache ? (Nota 2)
-msg_maps_removed: 0
\ No newline at end of file
+msg_maps_removed: 0
+
+//-----------------------------------------------------------------------
+// Sleep System [Shiraz]
+//-----------------------------------------------------------------------
+
+// Mapas em que o sistema estará ativo. Suporta até 500 mapas.
+// Ex: "payon", x0, y0, x1, y1
+// Coordenadas setadas como -1 ativará o sistema em todo o mapa.
+sleep_maps = (
+	"prontera", -1, -1, -1, -1,
+	"payon", 125, 150, 102, 131
+)
+
+// De quantos em quantos minutos o jogador pontuará.
+sleep_minutes: 1
+
+// Pontos por minuto.
+sleep_points: 1
+
+// Permitir pontuar com chat? (Nota 2)
+sleep_in_chat: 0
+
+// Permitir pontuar com comércio? (Nota 2)
+sleep_in_vend: 0
\ No newline at end of file
Index: src/common/conf.c
===================================================================
--- src/common/conf.c	(revision 2591)
+++ src/common/conf.c	(working copy)
@@ -126,26 +126,45 @@
 // Leitura de configurações exclusivas do brAthena.
 (void)
 {
+	config_t s_configbrA, *configbrA;
+	const config_setting_t *arr;
 	const char *tmpchar;
-	int tmpint;
-	config_t configbrA;
+	int tmpint, len, i;
 	
+	configbrA = &s_configbrA;
+	
 	memset(&bra_config, 0, sizeof(bra_config));
-	config_init(&configbrA);
+	config_init(configbrA);
 	
-	if(!config_read_file(&configbrA, "conf/battle/brathena.conf")) {
-		ShowError("read_brathena_config erro: %s:%d - %s\n", config_error_file(&configbrA), config_error_line(&configbrA), config_error_text(&configbrA));
-		config_destroy(&configbrA);
-	}	
+	if(!config_read_file(configbrA, "conf/battle/brathena.conf")) {
+		ShowError("read_brathena_config erro: %s:%d - %s\n", config_error_file(configbrA), config_error_line(configbrA), config_error_text(configbrA));
+		config_destroy(configbrA);
+	}
 
-	if(config_lookup_int(&configbrA, "max_rename_char", &tmpint))	bra_config.max_rename_char = tmpint;
-	if(config_lookup_string(&configbrA, "lang_file", &tmpchar))		strncpy(bra_config.lang_file, tmpchar, sizeof(bra_config.lang_file));
-	if(config_lookup_int(&configbrA, "enable_system_vip", &tmpint))	bra_config.enable_system_vip = tmpint;
-	if(config_lookup_int(&configbrA, "level_vip", &tmpint))			bra_config.level_vip = tmpint;
-	if(config_lookup_int(&configbrA, "extra_exp_vip", &tmpint))		bra_config.extra_exp_vip = tmpint;
-	if(config_lookup_int(&configbrA, "penalty_exp_vip", &tmpint))	bra_config.penalty_exp_vip = tmpint;
-	if(config_lookup_int(&configbrA, "msg_maps_removed", &tmpint))	bra_config.msg_maps_removed = tmpint;
-	if(config_lookup_int(&configbrA, "show_message_exp", &tmpint))	bra_config.show_message_exp = tmpint;	
-
-	config_destroy(&configbrA);
+	if(config_lookup_int(configbrA, "max_rename_char", &tmpint))	bra_config.max_rename_char = tmpint;
+	if(config_lookup_string(configbrA, "lang_file", &tmpchar))		strncpy(bra_config.lang_file, tmpchar, sizeof(bra_config.lang_file));
+	if(config_lookup_int(configbrA, "enable_system_vip", &tmpint))	bra_config.enable_system_vip = tmpint;
+	if(config_lookup_int(configbrA, "level_vip", &tmpint))			bra_config.level_vip = tmpint;
+	if(config_lookup_int(configbrA, "extra_exp_vip", &tmpint))		bra_config.extra_exp_vip = tmpint;
+	if(config_lookup_int(configbrA, "penalty_exp_vip", &tmpint))	bra_config.penalty_exp_vip = tmpint;
+	if(config_lookup_int(configbrA, "msg_maps_removed", &tmpint))	bra_config.msg_maps_removed = tmpint;
+	if(config_lookup_int(configbrA, "show_message_exp", &tmpint))	bra_config.show_message_exp = tmpint;
+	
+	if(config_lookup_int(configbrA, "sleep_minutes", &tmpint))		bra_config.sleep_minutes = tmpint;
+	if(config_lookup_int(configbrA, "sleep_points", &tmpint))		bra_config.sleep_points = tmpint;
+	if(config_lookup_int(configbrA, "sleep_in_chat", &tmpint))		bra_config.sleep_in_chat = tmpint;
+	if(config_lookup_int(configbrA, "sleep_in_vend", &tmpint))		bra_config.sleep_in_vend = tmpint;
+	
+	arr = config_lookup(configbrA, "sleep_maps");
+	len = config_setting_length(arr) / 5;
+	
+	for(i = 0; i < len; i++) {
+		strncpy(bra_config.sleep_maps[i].name, config_setting_get_string_elem(arr, i*5), sizeof((*bra_config.sleep_maps).name));
+		bra_config.sleep_maps[i].x1 = config_setting_get_int_elem(arr, i*5+1);
+		bra_config.sleep_maps[i].y1 = config_setting_get_int_elem(arr, i*5+2);
+		bra_config.sleep_maps[i].x2 = config_setting_get_int_elem(arr, i*5+3);
+		bra_config.sleep_maps[i].y2 = config_setting_get_int_elem(arr, i*5+4);
+	}
+	
+	config_destroy(configbrA);
 }
\ No newline at end of file
Index: src/common/showmsg.h
===================================================================
--- src/common/showmsg.h	(revision 2591)
+++ src/common/showmsg.h	(working copy)
@@ -113,8 +113,20 @@
 	
 	char lang_file[128];
 	
+	// Sleep System [Shiraz]
+	int sleep_minutes;
+	int sleep_in_chat;
+	int sleep_in_vend;
+	int sleep_points;
+	
+	struct {
+		char name[64];
+		int x1, y1, x2, y2;
+	} sleep_maps[500];
+	
 } bra_config;
 
+
 extern void ClearScreen(void);
 extern void ShowMessage(const char *, ...);
 extern void ShowStatus(const char *, ...);
Index: src/map/clif.c
===================================================================
--- src/map/clif.c	(revision 2591)
+++ src/map/clif.c	(working copy)
@@ -10313,6 +10313,7 @@
 			pc_setsit(sd);
 			skill_sit(sd,1);
 			clif_sitting(&sd->bl);
+			sd->sleep_timer = add_timer(gettick()+60000*bra_config.sleep_minutes,pc_sleep_timer,sd->bl.id,0);
 			break;
 		case 0x03: // standup
 			if(!pc_issit(sd)) {
@@ -10327,6 +10328,9 @@
 			pc_setstand(sd);
 			skill_sit(sd,0);
 			clif_standing(&sd->bl);
+			if(sd->sleep_timer != INVALID_TIMER)
+				delete_timer(sd->sleep_timer, pc_sleep_timer);
+			sd->sleep_timer = INVALID_TIMER;
 			break;
 	}
 }
Index: src/map/map.c
===================================================================
--- src/map/map.c	(revision 2591)
+++ src/map/map.c	(working copy)
@@ -2435,6 +2435,8 @@
 			return (cell.maelstrom);
 		case CELL_CHKICEWALL:
 			return (cell.icewall);
+		case CELL_CHKSLEEP:
+			return (cell.sleep);
 
 			// special checks
 		case CELL_CHKPASS:
@@ -2496,6 +2498,7 @@
 		case CELL_NOCHAT:        map[m].cell[j].nochat = flag;        break;
 		case CELL_MAELSTROM:     map[m].cell[j].maelstrom = flag;     break;
 		case CELL_ICEWALL:       map[m].cell[j].icewall = flag;       break;
+		case CELL_SLEEP:         map[m].cell[j].sleep = flag;         break;
 		default:
 			ShowWarning("map_setcell: invalid cell type '%d'\n", (int)cell);
 			break;
@@ -5395,6 +5398,29 @@
 
 	return true;
 }
+
+void do_init_sleepcell(void)
+{
+	int16 m, x1, y1, x2, y2;
+	int i, x, y;
+	
+	for(i = 0; i < ARRAYLENGTH(bra_config.sleep_maps); i++) {
+		if(!strlen(bra_config.sleep_maps[i].name) || (m = map_mapname2mapid(bra_config.sleep_maps[i].name)) == -1)
+			continue;
+		x1 = bra_config.sleep_maps[i].x1;
+		y1 = bra_config.sleep_maps[i].y1;
+		x2 = bra_config.sleep_maps[i].x2;
+		y2 = bra_config.sleep_maps[i].y2;
+		
+		if(x1 > x2) swap(x1,x2);
+		if(y1 > y2) swap(y1,y2);
+		
+		for(y = y1; y <= y2; ++y)
+			for(x = x1; x <= x2; ++x)
+				map[m].setcell(m, x, y, CELL_SLEEP, 1);
+	}
+}
+
 int do_init(int argc, char *argv[])
 {
 	int i;
@@ -5583,6 +5609,8 @@
 	do_init_vending();
 
 	npc_event_do_oninit();  // Init npcs (OnInit)
+	
+	do_init_sleepcell();
 
 	if(console) {
 		//##TODO invoke a CONSOLE_START plugin event
Index: src/map/map.h
===================================================================
--- src/map/map.h	(revision 2591)
+++ src/map/map.h	(working copy)
@@ -457,6 +457,8 @@
 	CELL_NOCHAT,
 	CELL_MAELSTROM,
 	CELL_ICEWALL,
+	
+	CELL_SLEEP,
 
 } cell_t;
 
@@ -481,6 +483,8 @@
 	CELL_CHKNOCHAT,
 	CELL_CHKMAELSTROM,
 	CELL_CHKICEWALL,
+	
+	CELL_CHKSLEEP,
 
 } cell_chk;
 
@@ -500,7 +504,8 @@
 		novending : 1,
 		nochat : 1,
 		maelstrom : 1,
-		icewall : 1;
+		icewall : 1,
+		sleep : 1;
 
 #ifdef CELL_NOSTACK
 	unsigned char cell_bl; //Holds amount of bls in this cell.
Index: src/map/pc.c
===================================================================
--- src/map/pc.c	(revision 2591)
+++ src/map/pc.c	(working copy)
@@ -1049,6 +1049,7 @@
 	sd->fontcolor_tid = INVALID_TIMER;
 	sd->vip_timer = INVALID_TIMER;
 	sd->expiration_tid = INVALID_TIMER;
+	sd->sleep_timer = INVALID_TIMER;
 	/**
 	 * For the Secure NPC Timeout option (check config/Secure.h) [RR]
 	 **/
@@ -5025,6 +5026,11 @@
 		sd->md->bl.y = sd->md->ud.to_y = y;
 		sd->md->ud.dir = sd->ud.dir;
 	}
+	
+	if(sd && sd->sleep_timer != INVALID_TIMER) {
+		delete_timer(sd->sleep_timer, pc_sleep_timer);
+		sd->sleep_timer = INVALID_TIMER;
+	}
 
 	return 0;
 }
@@ -9272,6 +9278,63 @@
 }
 
 /*==========================================
+ * Sleep System [Shiraz]
+ *------------------------------------------*/
+
+int pc_sleep_timer_mapxy(struct map_session_data *sd)
+{
+	int i, ret = 0;
+	int16 m;
+	
+	for(i = 0; i < ARRAYLENGTH(bra_config.sleep_maps); i++) {
+		if(!strlen(bra_config.sleep_maps[i].name))
+			continue;
+		if(strcmp(map[sd->bl.m].name, bra_config.sleep_maps[i].name) || (m = map_mapname2mapid(bra_config.sleep_maps[i].name)) == -1)
+			continue;
+		if((bra_config.sleep_maps[i].x1 == -1 
+		 && bra_config.sleep_maps[i].x2 == -1 
+		 && bra_config.sleep_maps[i].y1 == -1 
+		 && bra_config.sleep_maps[i].y2 == -1)
+		 || map_getcell(m, sd->bl.x, sd->bl.y, CELL_CHKSLEEP)) {
+			ret = 1;
+			break;
+		}
+	}
+
+	return ret;
+}
+
+int pc_sleep_timer_sub(struct map_session_data *sd)
+{
+	if(!pc_sleep_timer_mapxy(sd)
+	|| sd->state.vending && !bra_config.sleep_in_vend
+	|| sd->state.buyingstore && !bra_config.sleep_in_vend
+	|| sd->chatID && !bra_config.sleep_in_chat
+	|| sd->sleep_timer == INVALID_TIMER
+	|| pc_isdead(sd))
+		return 1;
+		
+	return 0;
+}
+
+int pc_sleep_timer(int tid, int64 tick, int id, intptr_t data)
+{
+	struct map_session_data *sd;
+	char buf[128];
+
+	if((sd = (struct map_session_data *)map_id2sd(id)) == NULL || sd->bl.type != BL_PC || pc_sleep_timer_sub(sd))
+		return 1;
+	
+	pc_setaccountreg(sd, "#sleep_points", pc_readaccountreg(sd, "#sleep_points")+bra_config.sleep_points);
+	sd->sleep_timer = add_timer(gettick()+60000*bra_config.sleep_minutes,pc_sleep_timer,sd->bl.id,0);
+	
+	snprintf(buf, sizeof(buf), "Você recebeu %d Ponto(s) de Sono.", bra_config.sleep_points);
+	clif_specialeffect(&sd->bl, 579, 0);
+	clif_displaymessage(sd->fd, buf);
+	return 0;
+}
+
+/*==========================================
  * Checking if sd is married
  * Return:
  *  partner_id = yes
Index: src/map/pc.h
===================================================================
--- src/map/pc.h	(revision 2591)
+++ src/map/pc.h	(working copy)
@@ -570,6 +570,7 @@
 	int delunit_prevline;
 
 	int vip_timer;
+	int sleep_timer;
 };
 
 struct eri *pc_sc_display_ers;
@@ -1007,6 +1008,8 @@
 int add_time_vip(struct map_session_data *sd, int type[4]);
 void show_time_vip(struct map_session_data *sd);
 
+int pc_sleep_timer(int tid, int64 tick, int id, intptr_t data); // Sleep System [Shiraz]
+
 #if defined(RENEWAL_DROP) || defined(RENEWAL_EXP)
 int pc_level_penalty_mod(int diff, unsigned char race, unsigned short mode, int type);
 #endif

0

Compartilhar este post


Link para o post
Compartilhar em outros sites
Entre para seguir isso  
Seguidores 0