Afficahge des points d'expérience en combat.

Avatar de l’utilisateur
Agop
Messages : 261
Inscription : 24 juil. 2007, 02:27

Afficahge des points d'expérience en combat.

Message par Agop »

Je ne sais absolument pas si c'est faisable au niveau programmation client, mais le challenge serait celui-ci :

Le dernier coup donnant de l'expérience en attaque ou en défense lors d'un combat apparaitrait en rouge.

C'est absolument inutile, donc totalement indispensable :)

PS : en réalité ça servirait pour visualiser quand fuir un combat pour l'entrainement.

nem
Messages : 66
Inscription : 14 févr. 2008, 20:36

Re: Afficahge des points d'expérience en combat.

Message par nem »

Bonne idée.
En profiter pour mettre 50 coups max (moins d'une minute, c'est pas énorme) au lieu de 15 serait pas mal non plus. ca permettrai d'éviter des tonnes de désengagements à l'entrainement en PvM, sans pour autant permettre à un joueur de s'entrainer en étant apm (si c'est bien pour ça que la limite existe).
Et là, les 5 derniers coups en rouge préviendraient pour désengager en PvP.

vive le confort !
Image
Rien ne sert de penser, il faut réfléchir avant. (Pierre DAC)

Avatar de l’utilisateur
Agop
Messages : 261
Inscription : 24 juil. 2007, 02:27

Re: Afficahge des points d'expérience en combat.

Message par Agop »

C'est pas le forum idées et suggestions ici, je propose un challenge de programmation auquel je jetterais surement un oeil quand j'aurais le temps.
Maintenant si quelqu'un trouve une méthode avant, ou s'il s'avère que c'est infaisable, tant mieux.

Avatar de l’utilisateur
tosh
Messages : 2379
Inscription : 01 sept. 2007, 01:09
Localisation : Quelque part sur la planete Terre.

Re: Afficahge des points d'expérience en combat.

Message par tosh »

Bon, voilà une petite "bidouille" pour colorer en rouge le dernier gain d'xp en défense. Ce n'est pas très propre vu que ce n'est pas le client mais le serveur qui gère cette limitation d'xp. Ça ne fonctionne malheureusement pas avec le combat multiple...(Et je ne pense pas être capable de faire grand chose pour ça.)

Patch :

Code : Tout sélectionner

Index: stats.c
===================================================================
--- stats.c	(révision 2343)
+++ stats.c	(copie de travail)
@@ -68,6 +68,11 @@
 
 int have_stats=0;
 
+#ifndef ENGLISH
+int counter_xp_def=0;
+int counter_xp_att=0;
+#endif
+
 #define MAX_NUMBER_OF_FLOATING_MESSAGES 25
 
 typedef struct {
@@ -1288,7 +1293,6 @@
 void floatingmessages_add_level(int actor_id, int level, const unsigned char * skillname)
 {
 	char str[50];
-
 	safe_snprintf(str,sizeof(str),"%d %s",level, skillname);
 	add_floating_message(actor_id, str, FLOATINGMESSAGE_NORTH, 0.3, 0.3, 1.0, 2000);
 }
@@ -1299,9 +1303,28 @@
 	int diff=new_value-value;
 
 	safe_snprintf(str, sizeof(str), "%s: %c%d", skillname, diff<0?' ':'+', diff);
-
 	if(diff<0)
 		add_floating_message(actor_id, str, FLOATINGMESSAGE_SOUTH, 1.0, 0.3, 0.3,1500);
 	else 
+#ifdef ENGLISH	
 		add_floating_message(actor_id, str, FLOATINGMESSAGE_NORTH, 0.3, 1.0, 0.3,1500);
+#else
+	//@tosh : On color en rouge si on arrive en fin d'xp défense
+	{
+		float r=0.3, g=1.0, b=0.3;
+		if(!strcmp((char*)skillname, (char*)attributes.defense_skill.shortname))
+		{
+			if(counter_xp_def >=14)
+				r=1.0, g=0.0, b=0.0;  		
+			counter_xp_def++;	
+		}	 
+		else if(!strcmp((char*)skillname, (char*)attributes.attack_skill.shortname))
+		{
+			if(counter_xp_att >= 14)
+				r=1.0, g=0.0, b=0.0;
+			counter_xp_att++;	
+		}
+		 add_floating_message(actor_id, str, FLOATINGMESSAGE_NORTH, r, g, b, 1500);	  	 	 
+	}
+#endif		
 }
Index: stats.h
===================================================================
--- stats.h	(révision 2343)
+++ stats.h	(copie de travail)
@@ -279,6 +279,11 @@
 
 extern player_attribs your_info; /*!< the players attributes */
 
+#ifndef ENGLISH
+extern int counter_xp_def; //@tosh : Compteurs de coups pour la défense
+extern int counter_xp_att; //@tosh : Compteurs de coups pour l'attaque
+#endif
+
 /*!
  * \ingroup stats_window
  * \brief   Retrieves the statistics of the player.
Index: actor_scripts.c
===================================================================
--- actor_scripts.c	(révision 2343)
+++ actor_scripts.c	(copie de travail)
@@ -998,6 +998,13 @@
 						cal_actor_set_anim(i,actors_defs[actor_type].cal_frames[cal_actor_out_combat_frame]);
 						actors_list[i]->stop_animation=1;
 						actors_list[i]->fighting=0;
+#ifndef ENGLISH
+						if(actors_list[i]->actor_id == yourself)
+						{
+							counter_xp_def=0;
+							counter_xp_att=0;
+						}	
+#endif						
 						break;
 					case attack_up_1:
 					case attack_up_2:

EDIT : j'ai mis la même chose pour l'attaque.
Guerrier dans l'âme.

Membre de l'équipe.
Développeur Client & Serveur.

Répondre