* 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:
Lance 2006-03-19 04:36:53 +00:00
parent 1b2cd77d7f
commit 6ef4e75bb4
4 changed files with 139 additions and 75 deletions

View File

@ -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]

View File

@ -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) {

View File

@ -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]

View File

@ -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;
}