Selaa lähdekoodia

* Added autoequip flag check (added script command 'autoequip' to manipulate in script.c) for pc_takeitem in pc.c If it impacts on perfomance, please remove it.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@5401 54d463be-8e91-2dee-dedb-b68131a5f0ec
Lance 19 vuotta sitten
vanhempi
commit
c46f652b8e
4 muutettua tiedostoa jossa 19 lisäystä ja 0 poistoa
  1. 1 0
      Changelog-Trunk.txt
  2. 2 0
      src/map/itemdb.h
  3. 3 0
      src/map/pc.c
  4. 13 0
      src/map/script.c

+ 1 - 0
Changelog-Trunk.txt

@@ -9,6 +9,7 @@ GOES INTO TRUNK AND WILL BE MERGED INTO STABLE BY VALARIS AND WIZPUTER. -- VALAR
 	  lan_support.conf to subnet_athena.conf, changed it syntax. [LuzZza]
 	* Added script command 'equip' to equip items. [Lance]
 	* Fixed dependancies in map-server compiling (VC7.1). [Lance]
+	* Added autoequip flag check for pc_takeitem. If it impacts on perfomance, please remove it. [Lance]
 2006/02/24
 	* Prevented guild/party recall to work on GMs of greater level than
 	  yourself. [Skotlex]

+ 2 - 0
src/map/itemdb.h

@@ -39,6 +39,7 @@ struct item_data {
 		unsigned no_refine : 1;	// [celest]
 		unsigned delay_consume : 1;	// Signifies items that are not consumed inmediately upon double-click [Skotlex]
 		unsigned trade_restriction : 7;	//Item restrictions mask [Skotlex]
+		unsigned autoequip: 1;
 	} flag;
 	short gm_lv_trade_override;	//GM-level to override trade_restriction
 	int view_id;
@@ -71,6 +72,7 @@ struct item_data* itemdb_exists(int nameid);
 #define itemdb_slot(n) itemdb_search(n)->slot
 #define itemdb_available(n) (itemdb_exists(n) && itemdb_search(n)->flag.available)
 #define itemdb_viewid(n) (itemdb_search(n)->view_id)
+#define itemdb_autoequip(n) (itemdb_search(n)->flag.autoequip)
 int itemdb_group(int nameid);
 
 int itemdb_searchrandomid(int flags);

+ 3 - 0
src/map/pc.c

@@ -2654,6 +2654,9 @@ int pc_takeitem(struct map_session_data *sd,struct flooritem_data *fitem)
 
 	clif_takeitem(&sd->bl,&fitem->bl);
 	map_clearflooritem(fitem->bl.id);
+	if(itemdb_autoequip(fitem->item_data.nameid) != 0){
+		pc_equipitem(sd, fitem->item_data.nameid, fitem->item_data.equip);
+	}
 	return 0;
 }
 

+ 13 - 0
src/map/script.c

@@ -402,6 +402,7 @@ int buildin_setd(struct script_state *st);
 int buildin_petstat(struct script_state *st); // [Lance] Pet Stat Rq: Dubby
 int buildin_callshop(struct script_state *st); // [Skotlex]
 int buildin_equip(struct script_state *st);
+int buildin_autoequip(struct script_state *st);
 void push_val(struct script_stack *stack,int type,int val);
 int run_func(struct script_state *st);
 
@@ -704,6 +705,7 @@ struct {
 	{buildin_petstat,"petstat","i"},
 	{buildin_callshop,"callshop","si"}, // [Skotlex]
 	{buildin_equip,"equip","i"},
+	{buildin_autoequip,"autoequip","ii"},
 	{buildin_setitemscript,"setitemscript","is"}, //Set NEW item bonus script. Lupus
 	{buildin_disguise,"disguise","i"}, //disguise player. Lupus
 	{buildin_undisguise,"undisguise","i"}, //undisguise player. Lupus
@@ -9408,6 +9410,17 @@ int buildin_equip(struct script_state *st)
 	return 0;
 }
 
+int buildin_autoequip(struct script_state *st){
+	int nameid, flag;
+	struct item_data *item_data;
+	nameid=conv_num(st,& (st->stack->stack_data[st->start+2]));
+	flag=conv_num(st,& (st->stack->stack_data[st->start+3]));
+	if(nameid>=500 && (item_data = itemdb_search(nameid)) != NULL){
+		item_data->flag.autoequip = flag>0?1:0;
+	}
+	return 0;
+}
+
 //=======================================================
 // strlen [Valaris]
 //-------------------------------------------------------