* Recoded getmobdata script function. Fixed mob_damage typo sd -> mvp_sd. Cleanep up confusing indentation in clif.c.
git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@5661 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
1b2cd77d7f
commit
6ef4e75bb4
@ -5,6 +5,7 @@ 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
|
||||
|
||||
2006/03/18
|
||||
* Recoded getmobdata script function. Fixed mob_damage typo sd -> mvp_sd. [Lance]
|
||||
* Added 'GetMonsterInfo(MobID,Idx)' script function. [Lupus]
|
||||
You can get monsters name,level,race, etc by its Id. Check npc\sample\getmonsterinfo.txt
|
||||
* Fixed warnings on compilers again. [Lance]
|
||||
|
@ -9435,53 +9435,53 @@ void clif_parse_Wis(int fd, struct map_session_data *sd) { // S 0096 <len>.w <ni
|
||||
log_chat("W", 0, sd->status.char_id, sd->status.account_id, (char*)mapindex_id2name(sd->mapindex), sd->bl.x, sd->bl.y, (char*)RFIFOP(fd, 4), (char*)RFIFOP(fd, 28));
|
||||
|
||||
|
||||
//-------------------------------------------------------//
|
||||
// Lordalfa - Paperboy - To whisper NPC commands //
|
||||
//-------------------------------------------------------//
|
||||
if ((strncasecmp((const char*)RFIFOP(fd,4),"NPC:",4) == 0) && (strlen((const char*)RFIFOP(fd,4)) >4)) {
|
||||
whisper_tmp = (char*) RFIFOP(fd,4) + 4;
|
||||
if ((npc = npc_name2id(whisper_tmp)))
|
||||
{
|
||||
whisper_tmp=(char *)aCallocA(strlen((char *)(RFIFOP(fd,28)))+1,sizeof(char));
|
||||
whisper_tmp[0]=0;
|
||||
|
||||
sprintf(whisper_tmp, "%s", (const char*)RFIFOP(fd,28));
|
||||
for( j=0;whisper_tmp[j]!='\0';j++)
|
||||
//-------------------------------------------------------//
|
||||
// Lordalfa - Paperboy - To whisper NPC commands //
|
||||
//-------------------------------------------------------//
|
||||
if ((strncasecmp((const char*)RFIFOP(fd,4),"NPC:",4) == 0) && (strlen((const char*)RFIFOP(fd,4)) >4)) {
|
||||
whisper_tmp = (char*) RFIFOP(fd,4) + 4;
|
||||
if ((npc = npc_name2id(whisper_tmp)))
|
||||
{
|
||||
if(whisper_tmp[j]!='#')
|
||||
whisper_tmp=(char *)aCallocA(strlen((char *)(RFIFOP(fd,28)))+1,sizeof(char));
|
||||
whisper_tmp[0]=0;
|
||||
|
||||
sprintf(whisper_tmp, "%s", (const char*)RFIFOP(fd,28));
|
||||
for( j=0;whisper_tmp[j]!='\0';j++)
|
||||
{
|
||||
split_data[i][j-k]=whisper_tmp[j];
|
||||
}
|
||||
else
|
||||
if(whisper_tmp[j]!='#')
|
||||
{
|
||||
split_data[i][j-k]=whisper_tmp[j];
|
||||
}
|
||||
else
|
||||
{
|
||||
split_data[i][j-k]='\0';
|
||||
k=j+1;
|
||||
i++;
|
||||
}
|
||||
} // Splits the message using '#' as separators
|
||||
split_data[i][j-k]='\0';
|
||||
|
||||
aFree(whisper_tmp);
|
||||
whisper_tmp=(char *)aCallocA(15,sizeof(char));
|
||||
whisper_tmp[0]=0;
|
||||
|
||||
for (j=0;j<=10;j++)
|
||||
{
|
||||
split_data[i][j-k]='\0';
|
||||
k=j+1;
|
||||
i++;
|
||||
}
|
||||
} // Splits the message using '#' as separators
|
||||
split_data[i][j-k]='\0';
|
||||
|
||||
aFree(whisper_tmp);
|
||||
whisper_tmp=(char *)aCallocA(15,sizeof(char));
|
||||
whisper_tmp[0]=0;
|
||||
|
||||
for (j=0;j<=10;j++)
|
||||
{
|
||||
sprintf(whisper_tmp, "@whispervar%d$", j);
|
||||
set_var(sd,whisper_tmp,(char *) split_data[j]);
|
||||
}//You don't need to zero them, just reset them [Kevin]
|
||||
|
||||
aFree(whisper_tmp);
|
||||
whisper_tmp=(char *)aCallocA(strlen(npc->name)+18,sizeof(char));
|
||||
whisper_tmp[0]=0;
|
||||
|
||||
sprintf(whisper_tmp, "%s::OnWhisperGlobal", npc->name);
|
||||
npc_event(sd,whisper_tmp,0); // Calls the NPC label
|
||||
sprintf(whisper_tmp, "@whispervar%d$", j);
|
||||
set_var(sd,whisper_tmp,(char *) split_data[j]);
|
||||
}//You don't need to zero them, just reset them [Kevin]
|
||||
|
||||
aFree(whisper_tmp);
|
||||
whisper_tmp=(char *)aCallocA(strlen(npc->name)+18,sizeof(char));
|
||||
whisper_tmp[0]=0;
|
||||
|
||||
sprintf(whisper_tmp, "%s::OnWhisperGlobal", npc->name);
|
||||
npc_event(sd,whisper_tmp,0); // Calls the NPC label
|
||||
|
||||
aFree(whisper_tmp); //I rewrote it a little to use memory allocation, a bit more stable =P [Kevin]
|
||||
return;
|
||||
} //should have just removed the one below that was a my bad =P
|
||||
}
|
||||
aFree(whisper_tmp); //I rewrote it a little to use memory allocation, a bit more stable =P [Kevin]
|
||||
return;
|
||||
} //should have just removed the one below that was a my bad =P
|
||||
}
|
||||
|
||||
// Main chat [LuzZza]
|
||||
if(strcmpi((const char*)RFIFOP(fd,4), main_chat_nick) == 0) {
|
||||
|
@ -2296,7 +2296,6 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type)
|
||||
set_var(NULL, buffer, (void *)(int)src->type);
|
||||
sprintf(buffer, "%s::OnDamage", md->nd->exname);
|
||||
npc_event_do(buffer);
|
||||
return 0;
|
||||
}
|
||||
if(src->type == BL_PC) {
|
||||
sd = (struct map_session_data *)src;
|
||||
@ -2847,21 +2846,21 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type)
|
||||
npc_event(mvp_sd,md->npc_event,0);
|
||||
|
||||
} else if (mvp_sd) {
|
||||
//lordalfa
|
||||
pc_setglobalreg(mvp_sd,"killedrid",(md->class_));
|
||||
if(sd->state.event_kill_mob){
|
||||
if (script_config.event_script_type == 0) {
|
||||
struct npc_data *npc;
|
||||
if ((npc = npc_name2id(script_config.kill_mob_event_name))) {
|
||||
run_script(npc->u.scr.script,0,mvp_sd->bl.id,npc->bl.id); // PCKillNPC [Lance]
|
||||
ShowStatus("Event '"CL_WHITE"%s"CL_RESET"' executed.\n",script_config.kill_mob_event_name);
|
||||
//lordalfa
|
||||
pc_setglobalreg(mvp_sd,"killedrid",(md->class_));
|
||||
if(mvp_sd->state.event_kill_mob){
|
||||
if (script_config.event_script_type == 0) {
|
||||
struct npc_data *npc;
|
||||
if ((npc = npc_name2id(script_config.kill_mob_event_name))) {
|
||||
run_script(npc->u.scr.script,0,mvp_sd->bl.id,npc->bl.id); // PCKillNPC [Lance]
|
||||
ShowStatus("Event '"CL_WHITE"%s"CL_RESET"' executed.\n",script_config.kill_mob_event_name);
|
||||
}
|
||||
} else {
|
||||
ShowStatus("%d '"CL_WHITE"%s"CL_RESET"' events executed.\n",
|
||||
npc_event_doall_id(script_config.kill_mob_event_name, mvp_sd->bl.id), script_config.kill_mob_event_name);
|
||||
}
|
||||
} else {
|
||||
ShowStatus("%d '"CL_WHITE"%s"CL_RESET"' events executed.\n",
|
||||
npc_event_doall_id(script_config.kill_mob_event_name, mvp_sd->bl.id), script_config.kill_mob_event_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
//[lordalfa]
|
||||
(battle_config.mob_clear_delay) ? clif_clearchar_delay(tick+battle_config.mob_clear_delay,&md->bl,1) : clif_clearchar_area(&md->bl,1);
|
||||
// clif_clearchar_area(&md->bl,1); //eh? Why send the same packet twice? [Skotlex]
|
||||
|
102
src/map/script.c
102
src/map/script.c
@ -10138,31 +10138,95 @@ int buildin_getmobdata(struct script_state *st) {
|
||||
}
|
||||
|
||||
int buildin_setmobdata(struct script_state *st){
|
||||
int num, id, i = 0;
|
||||
int num, id, value;
|
||||
char *name;
|
||||
struct script_data dat;
|
||||
struct mob_data *md = NULL;
|
||||
id = conv_num(st, & (st->stack->stack_data[st->start+2]));
|
||||
value = conv_num(st, & (st->stack->stack_data[st->start+3]));
|
||||
if(!(md = (struct mob_data *)map_id2bl(id)) || st->stack->stack_data[st->start+3].type!=C_NAME ){
|
||||
ShowWarning("buildin_setmobdata: Error in argiment!\n");
|
||||
ShowWarning("buildin_setmobdata: Error in argument!\n");
|
||||
} else {
|
||||
#define INCREMENT dat.type=C_NAME; dat.u.num=add_str((unsigned char *) name)+(i<<24); get_val(st,&dat); i++
|
||||
#define VALUE(x) x = (dat.u.num == -1)? x : dat.u.num
|
||||
num=st->stack->stack_data[st->start+2].u.num;
|
||||
name=(char *)(str_buf+str_data[num&0x00ffffff].str);
|
||||
INCREMENT; VALUE(md->class_); INCREMENT; VALUE(md->level);
|
||||
INCREMENT; VALUE(md->hp); INCREMENT; VALUE(md->max_hp);
|
||||
INCREMENT; VALUE(md->hp); INCREMENT; VALUE(md->master_id);
|
||||
INCREMENT; VALUE(md->bl.m); INCREMENT; VALUE(md->bl.x);
|
||||
INCREMENT; VALUE(md->bl.y); INCREMENT; VALUE(md->speed);
|
||||
INCREMENT; VALUE(md->mode); INCREMENT; VALUE(md->state.state);
|
||||
INCREMENT; VALUE(md->special_state.ai); INCREMENT; VALUE(md->db->option);
|
||||
INCREMENT; VALUE(md->db->sex); INCREMENT; VALUE(md->db->view_class);
|
||||
INCREMENT; VALUE(md->db->hair); INCREMENT; VALUE(md->db->hair_color);
|
||||
INCREMENT; VALUE(md->db->head_buttom); INCREMENT; VALUE(md->db->head_mid);
|
||||
INCREMENT; VALUE(md->db->head_top); INCREMENT; VALUE(md->db->clothes_color);
|
||||
INCREMENT; VALUE(md->db->equip); INCREMENT; VALUE(md->db->weapon);
|
||||
INCREMENT; VALUE(md->dir);
|
||||
switch(id){
|
||||
case 0:
|
||||
md->class_ = (short)value;
|
||||
break;
|
||||
case 1:
|
||||
md->level = (unsigned short)value;
|
||||
break;
|
||||
case 2:
|
||||
md->hp = value;
|
||||
break;
|
||||
case 3:
|
||||
md->max_hp = value;
|
||||
break;
|
||||
case 4:
|
||||
md->master_id = value;
|
||||
break;
|
||||
case 5:
|
||||
md->bl.m = (short)value;
|
||||
break;
|
||||
case 6:
|
||||
md->bl.x = (short)value;
|
||||
break;
|
||||
case 7:
|
||||
md->bl.y = (short)value;
|
||||
break;
|
||||
case 8:
|
||||
md->speed = (short)value;
|
||||
break;
|
||||
case 9:
|
||||
md->mode = (short)value;
|
||||
break;
|
||||
case 10:
|
||||
md->state.state = (unsigned int)value;
|
||||
break;
|
||||
case 11:
|
||||
md->special_state.ai = (unsigned int)value;
|
||||
break;
|
||||
case 12:
|
||||
md->db->option = (short)value;
|
||||
break;
|
||||
case 13:
|
||||
md->db->sex = value;
|
||||
break;
|
||||
case 14:
|
||||
md->db->view_class = value;
|
||||
break;
|
||||
case 15:
|
||||
md->db->hair = (short)value;
|
||||
break;
|
||||
case 16:
|
||||
md->db->hair_color = (short)value;
|
||||
break;
|
||||
case 17:
|
||||
md->db->head_buttom = (short)value;
|
||||
break;
|
||||
case 18:
|
||||
md->db->head_mid = (short)value;
|
||||
break;
|
||||
case 19:
|
||||
md->db->head_top = (short)value;
|
||||
break;
|
||||
case 20:
|
||||
md->db->clothes_color = (short)value;
|
||||
break;
|
||||
case 21:
|
||||
md->db->equip = value;
|
||||
break;
|
||||
case 22:
|
||||
md->db->weapon = (short)value;
|
||||
break;
|
||||
case 23:
|
||||
md->db->shield = (short)value;
|
||||
break;
|
||||
case 24:
|
||||
md->dir = (short)value;
|
||||
break;
|
||||
default:
|
||||
ShowError("buildin_setmobdata: argument id is not identified.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user