Browse Source

* Fixed event_kill_pc to behave like what it should instead of another replication of event_death. Added script function rid2name to convert bl ids to name.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@5663 54d463be-8e91-2dee-dedb-b68131a5f0ec
Lance 19 years ago
parent
commit
0e1c1ec72e
3 changed files with 32 additions and 5 deletions
  1. 2 0
      Changelog-Trunk.txt
  2. 5 2
      src/map/pc.c
  3. 25 3
      src/map/script.c

+ 2 - 0
Changelog-Trunk.txt

@@ -5,6 +5,8 @@ IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.  EV
 GOES INTO TRUNK AND WILL BE MERGED INTO STABLE BY VALARIS AND WIZPUTER. -- VALARIS
 GOES INTO TRUNK AND WILL BE MERGED INTO STABLE BY VALARIS AND WIZPUTER. -- VALARIS
 
 
 2006/03/18
 2006/03/18
+	* Fixed event_kill_pc to behave like what it should instead of another replication
+	  of event_death. Added script function rid2name to convert bl ids to name. [Lance]
 	* Recoded setmobdata script function. Fixed mob_damage typo sd -> mvp_sd. [Lance]
 	* Recoded setmobdata script function. Fixed mob_damage typo sd -> mvp_sd. [Lance]
 	* Added 'GetMonsterInfo(MobID,Idx)' script function. [Lupus]
 	* Added 'GetMonsterInfo(MobID,Idx)' script function. [Lupus]
 	  You can get monsters name,level,race, etc by its Id. Check npc\sample\getmonsterinfo.txt
 	  You can get monsters name,level,race, etc by its Id. Check npc\sample\getmonsterinfo.txt

+ 5 - 2
src/map/pc.c

@@ -5332,15 +5332,16 @@ int pc_damage(struct block_list *src,struct map_session_data *sd,int damage)
 			if (sd->state.event_death)
 			if (sd->state.event_death)
 				pc_setglobalreg(sd,"killerrid",(ssd->status.account_id));
 				pc_setglobalreg(sd,"killerrid",(ssd->status.account_id));
 			if (ssd->state.event_kill_pc) {
 			if (ssd->state.event_kill_pc) {
+				pc_setglobalreg(ssd, "killedrid", sd->bl.id);
 				if (script_config.event_script_type == 0) {
 				if (script_config.event_script_type == 0) {
 					struct npc_data *npc;
 					struct npc_data *npc;
 					if ((npc = npc_name2id(script_config.kill_pc_event_name))) {
 					if ((npc = npc_name2id(script_config.kill_pc_event_name))) {
-						run_script(npc->u.scr.script,0,sd->bl.id,npc->bl.id); // PCKillPC [Lance]
+						run_script(npc->u.scr.script,0,ssd->bl.id,npc->bl.id); // PCKillPC [Lance]
 						ShowStatus("Event '"CL_WHITE"%s"CL_RESET"' executed.\n", script_config.kill_pc_event_name);
 						ShowStatus("Event '"CL_WHITE"%s"CL_RESET"' executed.\n", script_config.kill_pc_event_name);
 					}
 					}
 				} else {
 				} else {
 					ShowStatus("%d '"CL_WHITE"%s"CL_RESET"' events executed.\n",
 					ShowStatus("%d '"CL_WHITE"%s"CL_RESET"' events executed.\n",
-						npc_event_doall_id(script_config.kill_pc_event_name, sd->bl.id), script_config.kill_pc_event_name);
+						npc_event_doall_id(script_config.kill_pc_event_name, ssd->bl.id), script_config.kill_pc_event_name);
 				}
 				}
 			}
 			}
 			if (battle_config.pk_mode && ssd->status.manner >= 0 && battle_config.manner_system) {
 			if (battle_config.pk_mode && ssd->status.manner >= 0 && battle_config.manner_system) {
@@ -5367,6 +5368,8 @@ int pc_damage(struct block_list *src,struct map_session_data *sd,int damage)
 				// To-do: Receive exp on certain occasions
 				// To-do: Receive exp on certain occasions
 			}
 			}
 		}
 		}
+	} else {
+		pc_setglobalreg(sd, "killerrid", 0);
 	}
 	}
 
 
 	if (sd->state.event_death) {
 	if (sd->state.event_death) {

+ 25 - 3
src/map/script.c

@@ -405,6 +405,7 @@ int buildin_equip(struct script_state *st);
 int buildin_autoequip(struct script_state *st);
 int buildin_autoequip(struct script_state *st);
 int buildin_setbattleflag(struct script_state *st);
 int buildin_setbattleflag(struct script_state *st);
 // [zBuffer] List of player cont commands --->
 // [zBuffer] List of player cont commands --->
+int buildin_rid2name(struct script_state *st);
 int buildin_pcwalkxy(struct script_state *st);
 int buildin_pcwalkxy(struct script_state *st);
 int buildin_pctalk(struct script_state *st);
 int buildin_pctalk(struct script_state *st);
 int buildin_pcemote(struct script_state *st);
 int buildin_pcemote(struct script_state *st);
@@ -735,6 +736,7 @@ struct {
 	{buildin_undisguise,"undisguise","i"}, //undisguise player. Lupus
 	{buildin_undisguise,"undisguise","i"}, //undisguise player. Lupus
 	{buildin_getmonsterinfo,"getmonsterinfo","ii"}, //Lupus
 	{buildin_getmonsterinfo,"getmonsterinfo","ii"}, //Lupus
 	// [zBuffer] List of player cont commands --->
 	// [zBuffer] List of player cont commands --->
+	{buildin_rid2name,"rid2name","i"},
 	{buildin_pcwalkxy,"pcwalkxy","iii"},
 	{buildin_pcwalkxy,"pcwalkxy","iii"},
 	{buildin_pctalk,"pctalk","is"},
 	{buildin_pctalk,"pctalk","is"},
 	{buildin_pcemote,"pcemote","ii"},
 	{buildin_pcemote,"pcemote","ii"},
@@ -9923,6 +9925,28 @@ int buildin_getmonsterinfo(struct script_state *st)
 }
 }
 
 
 // [zBuffer] List of player cont commands --->
 // [zBuffer] List of player cont commands --->
+int buildin_rid2name(struct script_state *st){
+	struct block_list *bl = NULL;
+	int rid = conv_num(st, & (st->stack->stack_data[st->start + 2]));
+	if((bl = map_id2bl(rid))){
+		switch(bl->type){
+			case BL_MOB:
+				push_str(st->stack,C_STR,((struct mob_data *)bl)->name);
+				break;
+			case BL_PC:
+				push_str(st->stack,C_STR,((struct map_session_data *)bl)->status.name);
+				break;
+			case BL_NPC:
+				push_str(st->stack,C_STR,((struct npc_data *)bl)->exname);
+				break;
+			default:
+				ShowError("buildin_rid2name: BL type unknown.\n");
+				break;
+		}
+	}
+	return 0;
+}
+
 int buildin_pcwalkxy(struct script_state *st){
 int buildin_pcwalkxy(struct script_state *st){
 	int id, x, y;
 	int id, x, y;
 	struct map_session_data *sd = NULL;
 	struct map_session_data *sd = NULL;
@@ -10138,9 +10162,7 @@ int buildin_getmobdata(struct script_state *st) {
 }
 }
 
 
 int buildin_setmobdata(struct script_state *st){
 int buildin_setmobdata(struct script_state *st){
-	int num, id, value;
-	char *name;
-	struct script_data dat;
+	int id, value;
 	struct mob_data *md = NULL;
 	struct mob_data *md = NULL;
 	id = conv_num(st, & (st->stack->stack_data[st->start+2]));
 	id = conv_num(st, & (st->stack->stack_data[st->start+2]));
 	value = conv_num(st, & (st->stack->stack_data[st->start+3]));
 	value = conv_num(st, & (st->stack->stack_data[st->start+3]));