Просмотр исходного кода

* Added 'setd' support for local NPC scope (') variables.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@6704 54d463be-8e91-2dee-dedb-b68131a5f0ec
Lance 19 лет назад
Родитель
Сommit
fa084e111c
5 измененных файлов с 37 добавлено и 35 удалено
  1. 1 0
      Changelog-Trunk.txt
  2. 2 2
      src/map/clif.c
  3. 2 2
      src/map/npc.c
  4. 30 30
      src/map/script.c
  5. 2 1
      src/map/script.h

+ 1 - 0
Changelog-Trunk.txt

@@ -4,6 +4,7 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
 2006/05/23
+	* Added 'setd' support for local NPC scope (') variables. [Lance]
 	* [Scripting Engine Update] New variables are ready to be used. [Lance]
 2006/05/22
 	* Updated skill_delayfix to return 0 for mobs since they have no skill

+ 2 - 2
src/map/clif.c

@@ -9384,8 +9384,8 @@ void clif_parse_NpcBuyListSend(int fd,struct map_session_data *sd)
 		if((nd = ((struct npc_data *)map_id2bl(sd->npc_shopid))->master_nd)){
 			sprintf(npc_ev, "%s::OnBuyItem", nd->exname);
 			for(i=0;i<n;i++){
-				setd_sub(sd, "@bought_nameid", i, (void *)((int)item_list[i*2+1]));
-				setd_sub(sd, "@bought_quantity", i, (void *)((int)item_list[i*2]));
+				setd_sub(NULL,sd, "@bought_nameid", i, (void *)((int)item_list[i*2+1]));
+				setd_sub(NULL,sd, "@bought_quantity", i, (void *)((int)item_list[i*2]));
 			}
 			npc_event(sd, npc_ev, 0);
 			fail = 0;

+ 2 - 2
src/map/npc.c

@@ -1267,8 +1267,8 @@ int npc_selllist(struct map_session_data *sd,int n,unsigned short *item_list)
 			log_pick(sd, "S", 0, nameid, qty, &sd->status.inventory[idx]);
 
 		if(nd) {
-			setd_sub(sd, "@sold_nameid", i, (void *)(int)sd->status.inventory[idx].nameid);
-			setd_sub(sd, "@sold_quantity", i, (void *)(int)qty);
+			setd_sub(NULL,sd, "@sold_nameid", i, (void *)(int)sd->status.inventory[idx].nameid);
+			setd_sub(NULL,sd, "@sold_quantity", i, (void *)(int)qty);
 		}
 		itemamount+=qty;
 		pc_delitem(sd,idx,qty,0);

+ 30 - 30
src/map/script.c

@@ -9902,9 +9902,9 @@ int buildin_distance(struct script_state *st){
 
 // <--- [zBuffer] List of mathematics commands
 // [zBuffer] List of dynamic var commands --->
-void setd_sub(struct map_session_data *sd, char *varname, int elem, void *value)
+void setd_sub(struct script_state *st, struct map_session_data *sd, char *varname, int elem, void *value)
 {
-	set_reg(NULL, sd, add_str((unsigned char *) varname)+(elem<<24), varname, value, NULL);
+	set_reg(st, sd, add_str((unsigned char *) varname)+(elem<<24), varname, value,NULL);
 	return;
 }
 
@@ -9924,9 +9924,9 @@ int buildin_setd(struct script_state *st)
 		sd = script_rid2sd(st);
 
 	if(varname[strlen(varname)-1] != '$') {
-		setd_sub(sd, varname, elem, (void *)atoi(value));
+		setd_sub(st,sd, varname, elem, (void *)atoi(value));
 	} else {
-		setd_sub(sd, varname, elem, (void *)value);
+		setd_sub(st,sd, varname, elem, (void *)value);
 	}
 	
 	return 0;
@@ -9955,12 +9955,12 @@ int buildin_query_sql(struct script_state *st) {
 			if((sql_res = mysql_store_result(&mmysql_handle))){
 				if(name[strlen(name)-1] != '$') {
 					while(i<128 && (sql_row = mysql_fetch_row(sql_res))){
-						setd_sub(sd, name, i, (void *)atoi(sql_row[0]));
+						setd_sub(st,sd, name, i, (void *)atoi(sql_row[0]));
 						i++;
 					}
 				} else {
 					while(i<128 && (sql_row = mysql_fetch_row(sql_res))){
-						setd_sub(sd, name, i, (void *)sql_row[0]);
+						setd_sub(st,sd, name, i, (void *)sql_row[0]);
 						i++;
 					}
 				}
@@ -10495,30 +10495,30 @@ int buildin_getmobdata(struct script_state *st) {
 	} else {
 		num=st->stack->stack_data[st->start+2].u.num;
 		name=(char *)(str_buf+str_data[num&0x00ffffff].str);
-		setd_sub(map_id2sd(st->rid),name,0,(void *)(int)md->class_);
-		setd_sub(map_id2sd(st->rid),name,1,(void *)(int)md->level);
-		setd_sub(map_id2sd(st->rid),name,2,(void *)(int)md->hp);
-		setd_sub(map_id2sd(st->rid),name,3,(void *)(int)md->max_hp);
-		setd_sub(map_id2sd(st->rid),name,4,(void *)(int)md->master_id);
-		setd_sub(map_id2sd(st->rid),name,5,(void *)(int)md->bl.m);
-		setd_sub(map_id2sd(st->rid),name,6,(void *)(int)md->bl.x);
-		setd_sub(map_id2sd(st->rid),name,7,(void *)(int)md->bl.y);
-		setd_sub(map_id2sd(st->rid),name,8,(void *)(int)md->speed);
-		setd_sub(map_id2sd(st->rid),name,9,(void *)(int)md->mode);
-		setd_sub(map_id2sd(st->rid),name,10,(void *)(int)md->special_state.ai);
-		setd_sub(map_id2sd(st->rid),name,11,(void *)(int)md->db->option);
-		setd_sub(map_id2sd(st->rid),name,12,(void *)(int)md->vd->sex);
-		setd_sub(map_id2sd(st->rid),name,13,(void *)(int)md->vd->class_);
-		setd_sub(map_id2sd(st->rid),name,14,(void *)(int)md->vd->hair_style);
-		setd_sub(map_id2sd(st->rid),name,15,(void *)(int)md->vd->hair_color);
-		setd_sub(map_id2sd(st->rid),name,16,(void *)(int)md->vd->head_bottom);
-		setd_sub(map_id2sd(st->rid),name,17,(void *)(int)md->vd->head_mid);
-		setd_sub(map_id2sd(st->rid),name,18,(void *)(int)md->vd->head_top);
-		setd_sub(map_id2sd(st->rid),name,19,(void *)(int)md->vd->cloth_color);
-		setd_sub(map_id2sd(st->rid),name,20,(void *)(int)md->vd->shield);
-		setd_sub(map_id2sd(st->rid),name,21,(void *)(int)md->vd->weapon);
-		setd_sub(map_id2sd(st->rid),name,22,(void *)(int)md->vd->shield);
-		setd_sub(map_id2sd(st->rid),name,23,(void *)(int)md->ud.dir);
+		setd_sub(st,map_id2sd(st->rid),name,0,(void *)(int)md->class_);
+		setd_sub(st,map_id2sd(st->rid),name,1,(void *)(int)md->level);
+		setd_sub(st,map_id2sd(st->rid),name,2,(void *)(int)md->hp);
+		setd_sub(st,map_id2sd(st->rid),name,3,(void *)(int)md->max_hp);
+		setd_sub(st,map_id2sd(st->rid),name,4,(void *)(int)md->master_id);
+		setd_sub(st,map_id2sd(st->rid),name,5,(void *)(int)md->bl.m);
+		setd_sub(st,map_id2sd(st->rid),name,6,(void *)(int)md->bl.x);
+		setd_sub(st,map_id2sd(st->rid),name,7,(void *)(int)md->bl.y);
+		setd_sub(st,map_id2sd(st->rid),name,8,(void *)(int)md->speed);
+		setd_sub(st,map_id2sd(st->rid),name,9,(void *)(int)md->mode);
+		setd_sub(st,map_id2sd(st->rid),name,10,(void *)(int)md->special_state.ai);
+		setd_sub(st,map_id2sd(st->rid),name,11,(void *)(int)md->db->option);
+		setd_sub(st,map_id2sd(st->rid),name,12,(void *)(int)md->vd->sex);
+		setd_sub(st,map_id2sd(st->rid),name,13,(void *)(int)md->vd->class_);
+		setd_sub(st,map_id2sd(st->rid),name,14,(void *)(int)md->vd->hair_style);
+		setd_sub(st,map_id2sd(st->rid),name,15,(void *)(int)md->vd->hair_color);
+		setd_sub(st,map_id2sd(st->rid),name,16,(void *)(int)md->vd->head_bottom);
+		setd_sub(st,map_id2sd(st->rid),name,17,(void *)(int)md->vd->head_mid);
+		setd_sub(st,map_id2sd(st->rid),name,18,(void *)(int)md->vd->head_top);
+		setd_sub(st,map_id2sd(st->rid),name,19,(void *)(int)md->vd->cloth_color);
+		setd_sub(st,map_id2sd(st->rid),name,20,(void *)(int)md->vd->shield);
+		setd_sub(st,map_id2sd(st->rid),name,21,(void *)(int)md->vd->weapon);
+		setd_sub(st,map_id2sd(st->rid),name,22,(void *)(int)md->vd->shield);
+		setd_sub(st,map_id2sd(st->rid),name,23,(void *)(int)md->ud.dir);
 	}
 	return 0;
 }

+ 2 - 1
src/map/script.h

@@ -69,9 +69,10 @@ int run_script(struct script_code *rootscript,int pos,int rid,int oid);
 int set_var(struct map_session_data *sd, char *name, void *val);
 int conv_num(struct script_state *st,struct script_data *data);
 char* conv_str(struct script_state *st,struct script_data *data);
-void setd_sub(struct map_session_data *sd, char *varname, int elem, void *value);
+void setd_sub(struct script_state *st, struct map_session_data *sd, char *varname, int elem, void *value);
 int run_script_timer(int tid, unsigned int tick, int id, int data);
 int run_script_main(struct script_state *st);
+
 struct linkdb_node* script_erase_sleepdb(struct linkdb_node *n);
 void script_free_code(struct script_code* code);