Przeglądaj źródła

-Follow up r12273, add check on map_flooradditem to prevent item apparition if inventory full and item is not droppable
-Follow up r12272, change msg_langtype2langstr for readable format (mkbu95)
-Upd mobdb, increase range for new id, thx to tid:81416
-Fix bugreport:7563 mob casttime are no longer affected by any status (Akinari)
-Fix bugreport:6475 bloodsucker should now reveal hidden target (Akinari)
-Upd map_msg_fr (Capuche)

.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@17274 54d463be-8e91-2dee-dedb-b68131a5f0ec

glighta 12 lat temu
rodzic
commit
bb6c9b6e53

+ 5 - 0
conf/battle/items.conf

@@ -82,3 +82,8 @@ item_restricted_consumption_type: yes
 // Allow changing of equipment while interacting with NPCs? (Note 1)
 // Default: yes
 item_enabled_npc: yes
+
+// Allow map_flooritem to check if item is dropable or not ? (Note 1)
+// If yes item won't appear on map anymore if your inventory is full 
+// Default: yes
+item_floritem_chk: yes

+ 10 - 3
conf/msg_conf/map_msg_frn.conf

@@ -97,7 +97,7 @@
 76: Toutes les compétences sont ajoutées à votre arbre de compétence.
 77: Résultat de '%s' (nom: id):
 78: %s: %d
-79: It is %d affair above.
+79: %d résultats sont affichés.
 80: Veuillez donner le nom/id du montre.
 81: Votre niveau de GM ne vous autorise pas à effectuer cette action sur le Joueur spécifié.
 82: Veuillez fournir un nom ou un nombre de la liste suivante:
@@ -443,7 +443,14 @@
 // Homunculus messages
 450: Vous possédez déjà un homunculus
 
-// Messages de olers (not for GM commands)
+// Message System
+460: Entrez une langue (usage: @langtype <langue>).
+461: La langue est maintenant en %s.
+462: Cette langue est désactivée.
+463: Configuration des messages rechargée.
+464: ---- Langues disponibles:
+
+// Autres Messages ( != GM commands)
 // ----------------------------------------
 
 //500: FREE
@@ -617,7 +624,7 @@
 667: Vous n'êtes pas mort(e).
 668: Votre position memo actuelle est:
 669: Vous brisez l'arme de la cible.
-670: Vous ne pouvez pas sortir du battleground.
+670: Vous ne pouvez pas quitter votre guilde.
 671: Cette personne est déjà dans votre liste d'ami.
 672: Nom introuvable dans la liste.
 673: Cette action ne peut pas être effectuée pour le moment. Veuillez re-essayer plus tard.

+ 10 - 10
src/common/msg_conf.c

@@ -12,11 +12,11 @@
  */
 const char* _msg_txt(int msg_number,int size, char ** msg_table)
 {
-    if (msg_number >= 0 && msg_number < size &&
-	    msg_table[msg_number] != NULL && msg_table[msg_number][0] != '\0')
+	if (msg_number >= 0 && msg_number < size &&
+		msg_table[msg_number] != NULL && msg_table[msg_number][0] != '\0')
 	return msg_table[msg_number];
 
-    return "??";
+	return "??";
 }
 
 
@@ -67,9 +67,9 @@ int _msg_config_read(const char* cfgName,int size, char ** msg_table)
  * Destroy msg_table (freeup mem)
  */
 void _do_final_msg(int size, char ** msg_table){
-    int i;
-    for (i = 0; i < size; i++)
-	aFree(msg_table[i]);
+	int i;
+	for (i = 0; i < size; i++)
+		aFree(msg_table[i]);
 }
 
 /*
@@ -99,13 +99,13 @@ const char* msg_langtype2langstr(int langtype){
 	switch(langtype){
 		case 0: return "English (ENG)";
 		case 1: return "Russkiy (RUS)"; //transliteration
-		case 2: return "Español (SPN)";
+		case 2: return "Espanol (SPN)";
 		case 3: return "Deutsch (GRM)";
-		case 4: return "Hànyu (CHN)"; //transliteration
+		case 4: return "Hanyu (CHN)"; //transliteration
 		case 5: return "Bahasa Malaysia (MAL)";
 		case 6: return "Bahasa Indonesia (IDN)";
-		case 7: return "Français (FRN)";
-		case 8: return "Português Brasileiro (POR)";
+		case 7: return "Francais (FRN)";
+		case 8: return "Portugues Brasileiro (POR)";
 		default: return "??";
 	}
 }

+ 2 - 1
src/map/battle.c

@@ -3460,7 +3460,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
 
 #ifdef RENEWAL
 		if( flag.cri ){
-			ATK_ADDRATE( sd->bonus.crit_atk_rate >= 100 ? sd->bonus.crit_atk_rate - 60 : 40 ); 
+			ATK_ADDRATE( sd->bonus.crit_atk_rate >= 100 ? sd->bonus.crit_atk_rate - 60 : 40 );
 		}
 #endif
 
@@ -5939,6 +5939,7 @@ static const struct _battle_data {
 	{ "item_restricted_consumption_type",   &battle_config.item_restricted_consumption_type,1,      0,      1,              },
 	{ "max_walk_path",                      &battle_config.max_walk_path,                   17,     1,      MAX_WALKPATH,   },
 	{ "item_enabled_npc",                   &battle_config.item_enabled_npc,                1,      0,      1,              },
+	{ "item_floritem_chk",                   &battle_config.item_onfloor,                    1,      0,      1,              },
 };
 #ifndef STATS_OPT_OUT
 /**

+ 1 - 0
src/map/battle.h

@@ -485,6 +485,7 @@ extern struct Battle_Config
 	int item_restricted_consumption_type;
 	int max_walk_path;
 	int item_enabled_npc;
+	int item_onfloor; //wheater or not use pop item on map if inventory full and nodrop on or not (like aegis)
 	} battle_config;
 
 void do_init_battle(void);

+ 4 - 3
src/map/itemdb.h

@@ -88,7 +88,7 @@ enum {
 struct item_data {
 	uint16 nameid;
 	char name[ITEM_NAME_LENGTH],jname[ITEM_NAME_LENGTH];
-	
+
 	//Do not add stuff between value_buy and view_id (see how getiteminfo works)
 	int value_buy;
 	int value_sell;
@@ -176,6 +176,7 @@ struct item_data* itemdb_exists(int nameid);
 #define itemdb_range(n) itemdb_search(n)->range
 #define itemdb_slot(n) itemdb_search(n)->slot
 #define itemdb_available(n) (itemdb_search(n)->flag.available)
+#define itemdb_traderight(n) (itemdb_search(n)->flag.trade_restriction)
 #define itemdb_viewid(n) (itemdb_search(n)->view_id)
 #define itemdb_autoequip(n) (itemdb_search(n)->flag.autoequip)
 #define itemdb_is_rune(n) (n >= ITEMID_NAUTHIZ && n <= ITEMID_HAGALAZ)
@@ -210,8 +211,8 @@ int itemdb_isrestricted(struct item* item, int gmlv, int gmlv2, int (*func)(stru
 #define itemdb_canpartnertrade(item, gmlv, gmlv2) itemdb_isrestricted(item, gmlv, gmlv2, itemdb_canpartnertrade_sub)
 #define itemdb_cansell(item, gmlv) itemdb_isrestricted(item, gmlv, 0, itemdb_cansell_sub)
 #define itemdb_cancartstore(item, gmlv)  itemdb_isrestricted(item, gmlv, 0, itemdb_cancartstore_sub)
-#define itemdb_canstore(item, gmlv) itemdb_isrestricted(item, gmlv, 0, itemdb_canstore_sub) 
-#define itemdb_canguildstore(item, gmlv) itemdb_isrestricted(item , gmlv, 0, itemdb_canguildstore_sub) 
+#define itemdb_canstore(item, gmlv) itemdb_isrestricted(item, gmlv, 0, itemdb_canstore_sub)
+#define itemdb_canguildstore(item, gmlv) itemdb_isrestricted(item , gmlv, 0, itemdb_canguildstore_sub)
 #define itemdb_canmail(item, gmlv) itemdb_isrestricted(item , gmlv, 0, itemdb_canmail_sub)
 #define itemdb_canauction(item, gmlv) itemdb_isrestricted(item , gmlv, 0, itemdb_canauction_sub)
 

+ 3 - 0
src/map/map.c

@@ -1429,6 +1429,9 @@ int map_addflooritem(struct item *item_data,int amount,int16 m,int16 x,int16 y,i
 
 	nullpo_ret(item_data);
 
+	if(battle_config.item_onfloor && (itemdb_traderight(item_data->nameid)&1) )
+		return 0; //can't be dropped
+
 	if(!map_searchrandfreecell(m,&x,&y,flags&2?1:0))
 		return 0;
 	r=rnd();

+ 1 - 1
src/map/mob.h

@@ -16,7 +16,7 @@
 // Change this to increase the table size in your mob_db to accomodate a larger mob database.
 // Be sure to note that IDs 4001 to 4048 are reserved for advanced/baby/expanded classes.
 // Notice that the last 1000 entries are used for player clones, so always set this to desired value +1000
-#define MAX_MOB_DB 4000
+#define MAX_MOB_DB 5000
 
 //The number of drops all mobs have and the max drop-slot that the steal skill will attempt to steal from.
 #define MAX_MOB_DROP 10

+ 4 - 3
src/map/skill.c

@@ -14026,9 +14026,10 @@ int skill_vfcastfix (struct block_list *bl, double time, uint16 skill_id, uint16
 	if( time < 0 )
 		return 0;
 
-	if(bl->type == BL_MOB)
-	    fixed = 0; //mob as no fixed time
-	else if( fixed == 0 ){
+	if( bl->type == BL_MOB )
+		return (int)time;
+
+	if( fixed == 0 ){
 		fixed = (int)time * 20 / 100; // fixed time
 		time = time * 80 / 100; // variable time
 	}else if( fixed < 0 ) // no fixed cast time

+ 2 - 2
src/map/status.c

@@ -10112,7 +10112,7 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data)
 			int hp =  rnd()%600 + 200;
 			struct block_list* src = map_id2bl(sce->val2);
 			if( src && bl && bl->type == BL_MOB ){
-				mob_log_damage( (TBL_MOB*)bl, src, sd || hp < status->hp ? hp : status->hp - 1 ); 
+				mob_log_damage( (TBL_MOB*)bl, src, sd || hp < status->hp ? hp : status->hp - 1 );
 			}
 			map_freeblock_lock();
 			status_fix_damage(src, bl, sd||hp<status->hp?hp:status->hp-1, 1);
@@ -10542,7 +10542,7 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data)
 				break;
 			map_freeblock_lock();
 			damage =  200 + 100 * sce->val1 + status_get_int(src);
-			status_damage(src, bl, damage, 0, clif_damage(bl,bl,tick,status->amotion,status->dmotion+200,damage,1,0,0), 1);
+			status_damage(src, bl, damage, 0, clif_damage(bl,bl,tick,status->amotion,status->dmotion+200,damage,1,0,0), 0);
 			unit_skillcastcancel(bl,1);
 			if ( sc->data[type] ) {
 				sc_timer_next(1000 + tick, status_change_timer, bl->id, data);