- Implementing official battleground "emblem" crossed swords icon.

- Removing the custom guild packets from Battleground as they are not needed anymore.
- Scripts updated.
- In this way, you get "battle cursor" over your same team, but that's how official does.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@13635 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
zephyrus 2009-03-29 16:49:52 +00:00
parent 6578f10ffa
commit 5ddd4d08fe
14 changed files with 74 additions and 368 deletions

View File

@ -42,17 +42,3 @@ bg_flee_penalty: 20
// Interval before updating the bg-member map mini-dots (milliseconds)
bg_update_interval: 1000
// Reserved Guild ID's for battlegrounds
// Please take care of this configuration, you need to take 2 guild ids manually created
// in your guild database (txt or sql). Only the ID's are required.
// Take care this this "Fake guilds" will be never used by players.
bg_guild_id1: 998
bg_guild_id2: 999
// ** BattleGround Emblems **
// In the folder /db you will find 2 files:
// bgemblem_1.ebm (used for General Guillaume Marollo)
// bgemblem_2.ebm (used for Prince Croix Marollo)
// You can set your own emblems for battleground, using files from the _tmpEmblem folder
// in your client files, just remember to keep the names.

View File

@ -1,2 +0,0 @@
xœíÝoSeÇ?}[ß¶<C39F>­Ývº1úvX»nt´]Oé eÝèª<C3A8>°BÆ`P Û` ,ÑùÂôZCôʯ á<02>óB/Œ11bFCôÄ$r¥‰ÁxS¼œçéYºøð9yžßs>Ï÷9ÏÉóŒM­5Ñ e†~­z¶š[Ãç<C383>àrêM“¼¡ÇÙÔž ²¹¹IÊàäþ®
M.þ"ÁUzéÄÌ=¢ÔGùÔ³<C394>Û#K”åm˜¸«pKÛím%Ï ¶Ï¬·„Hµí žZæ»ÎQîÊã<²¤y<C2A4>¨ñ}D"~Ï®`ÇHÙä“ä,\ýH¦&>êä<E280BA>ž4ýÓüRX%Ô܉l±óu«Êõös¸¹¥V¹çL“6KØMêC§¹:P仩»&;\¬s,Z{¹Ö%@<13>æ-«ÂÇþ'¼qê#—¹é+Òn±±*qÉ«òCá"?†S´¸ùÞ1LÞíç7bø­-|eƹ“´ÕM½gŠzÿËÚɬöón¼ÂMÂ|Ù½Ÿå+¨N{Z=ü­ò«wЏEbÃæ=S<>ËÔ kìÕ2N§“£<>?,*sù‰¾õ—¸aàoÛ÷`Î,³`”9ä‰p„v>ïÎòsn‰÷Pq°"G‰Ûº Øl|ÕcÃ¥r;q»m#LÐÊsŒ7!¾ðŽS²v1­<31>ùSž"0 ÕmTMÿá±×—V«>Q¤'¼H<C2BC>O¯Oz-gb«lËÓè^lÿ¯¼Ö7þIÿ¤èžßÉãÍúEÄb#±F<vt:/|@™ ·åó]‰VE£T<þäØ QU)óŠÎùS§RÂ{GŸ™QŸYScº÷Ÿu /_Êç_ß!˫ݗȻ„_P”Ú¾x<~¬¯¶µàظðAŸO½òœÆþîk á<>—í¥#ÎÐìì³>I§¹YøAÏñšgª³üâK}b½{IøäË)<29>œð $÷è~oò5áÏ.KRÓÐÁ•ÅœÝÞð™Å³Â¯ˆñ‰žÓ¯jŸ†Yæ„å[Ú=™ÍfÏõvd¤ŒíœQº,¼cøPCkLÎWæ­Vk¥bªn»ô­«ÿ?þŸÉ

Binary file not shown.

View File

@ -11,7 +11,7 @@ OnInit:
waitingroom "Battle Station 10 Players",10,"Flavius_BG1::OnGuillaumeJoin",1;
end;
OnEnterBG:
set $@FlaviusBG1_id1, waitingroom2bg("bat_b01",390,10,0,"Flavius_BG1::OnGuillaumeQuit","");
set $@FlaviusBG1_id1, waitingroom2bg("bat_b01",390,10,"Flavius_BG1::OnGuillaumeQuit","");
end;
}
@ -21,7 +21,7 @@ OnInit:
waitingroom "Battle Station 10 Players",10,"Flavius_BG1::OnCroixJoin",1;
end;
OnEnterBG:
set $@FlaviusBG1_id2, waitingroom2bg("bat_b01",10,290,1,"Flavius_BG1::OnCroixQuit","");
set $@FlaviusBG1_id2, waitingroom2bg("bat_b01",10,290,"Flavius_BG1::OnCroixQuit","");
end;
}

View File

@ -11,7 +11,7 @@ OnInit:
waitingroom "Battle Station 10 Players",10,"Flavius_BG2::OnGuillaumeJoin",1;
end;
OnEnterBG:
set $@FlaviusBG2_id1, waitingroom2bg("bat_b02",390,10,0,"Flavius_BG2::OnGuillaumeQuit","");
set $@FlaviusBG2_id1, waitingroom2bg("bat_b02",390,10,"Flavius_BG2::OnGuillaumeQuit","");
end;
}
@ -21,7 +21,7 @@ OnInit:
waitingroom "Battle Station 10 Players",10,"Flavius_BG2::OnCroixJoin",1;
end;
OnEnterBG:
set $@FlaviusBG2_id2, waitingroom2bg("bat_b02",10,290,1,"Flavius_BG2::OnCroixQuit","");
set $@FlaviusBG2_id2, waitingroom2bg("bat_b02",10,290,"Flavius_BG2::OnCroixQuit","");
end;
}

View File

@ -11,7 +11,7 @@ OnInit:
waitingroom "Battle Station 10 Players",10,"Tierra_BG1::OnGuillaumeJoin",1;
end;
OnEnterBG:
set $@TierraBG1_id1, waitingroom2bg("bat_a01",50,374,0,"Tierra_BG1::OnGuillaumeQuit","");
set $@TierraBG1_id1, waitingroom2bg("bat_a01",50,374,"Tierra_BG1::OnGuillaumeQuit","");
end;
}
@ -21,7 +21,7 @@ OnInit:
waitingroom "Battle Station 10 Players",10,"Tierra_BG1::OnCroixJoin",1;
end;
OnEnterBG:
set $@TierraBG1_id2, waitingroom2bg("bat_a01",42,16,1,"Tierra_BG1::OnCroixQuit","");
set $@TierraBG1_id2, waitingroom2bg("bat_a01",42,16,"Tierra_BG1::OnCroixQuit","");
end;
}

View File

@ -11,7 +11,7 @@ OnInit:
waitingroom "Battle Station 10 Players",10,"Tierra_BG2::OnGuillaumeJoin",1;
end;
OnEnterBG:
set $@TierraBG2_id1, waitingroom2bg("bat_a02",50,374,0,"Tierra_BG2::OnGuillaumeQuit","");
set $@TierraBG2_id1, waitingroom2bg("bat_a02",50,374,"Tierra_BG2::OnGuillaumeQuit","");
end;
}
@ -21,7 +21,7 @@ OnInit:
waitingroom "Battle Station 10 Players",10,"Tierra_BG2::OnCroixJoin",1;
end;
OnEnterBG:
set $@TierraBG2_id2, waitingroom2bg("bat_a02",42,16,1,"Tierra_BG2::OnCroixQuit","");
set $@TierraBG2_id2, waitingroom2bg("bat_a02",42,16,"Tierra_BG2::OnCroixQuit","");
end;
}

View File

@ -3829,8 +3829,6 @@ static const struct _battle_data {
{ "display_status_timers", &battle_config.display_status_timers, 1, 0, 1, },
// BattleGround Settings
{ "bg_update_interval", &battle_config.bg_update_interval, 1000, 100, INT_MAX, },
{ "bg_guild_id1", &battle_config.bg_guild_id1, 0, 0, INT_MAX, },
{ "bg_guild_id2", &battle_config.bg_guild_id2, 0, 0, INT_MAX, },
{ "bg_short_attack_damage_rate", &battle_config.bg_short_damage_rate, 80, 0, INT_MAX, },
{ "bg_long_attack_damage_rate", &battle_config.bg_long_damage_rate, 80, 0, INT_MAX, },
{ "bg_weapon_attack_damage_rate", &battle_config.bg_weapon_damage_rate, 60, 0, INT_MAX, },

View File

@ -464,8 +464,6 @@ extern struct Battle_Config
int display_status_timers; //Show or hide skill buff/delay timers in recent clients [Sara]
// [BattleGround Settings]
int bg_update_interval;
int bg_guild_id1;
int bg_guild_id2;
int bg_short_damage_rate;
int bg_long_damage_rate;
int bg_weapon_damage_rate;

View File

@ -24,7 +24,6 @@
static DBMap* bg_team_db; // int bg_id -> struct battleground_data*
static unsigned int bg_team_counter = 0; // Next bg_id
struct guild bg_guild[2]; // Temporal fake guild information
struct battleground_data* bg_team_search(int bg_id)
{ // Search a BG Team using bg_id
@ -45,7 +44,6 @@ int bg_team_delete(int bg_id)
int i;
struct map_session_data *sd;
struct battleground_data *bg = bg_team_search(bg_id);
struct guild *g;
if( bg == NULL ) return 0;
for( i = 0; i < MAX_BG_MEMBERS; i++ )
@ -55,19 +53,6 @@ int bg_team_delete(int bg_id)
bg_send_dot_remove(sd);
sd->state.bg_id = 0;
if( sd->status.guild_id && (g = guild_search(sd->status.guild_id)) != NULL )
{
clif_guild_belonginfo(sd,g);
clif_guild_basicinfo(sd);
clif_guild_allianceinfo(sd);
clif_guild_memberlist(sd);
clif_guild_skillinfo(sd);
}
else
clif_bg_leave_single(sd, sd->status.name, "Leaving Battleground...");
clif_charnameupdate(sd);
clif_guild_emblem_area(&sd->bl);
}
idb_remove(bg_team_db, bg_id);
return 1;
@ -108,25 +93,15 @@ int bg_team_join(int bg_id, struct map_session_data *sd)
bg->count++;
guild_send_dot_remove(sd);
clif_bg_belonginfo(sd);
// clif_bg_emblem(sd, bg->g);
clif_charnameupdate(sd);
for( i = 0; i < MAX_BG_MEMBERS; i++ )
{
if( (pl_sd = bg->members[i].sd) == NULL )
continue;
clif_guild_basicinfo(pl_sd);
clif_bg_emblem(pl_sd, bg->g);
clif_bg_memberlist(pl_sd);
if( pl_sd != sd )
if( (pl_sd = bg->members[i].sd) != NULL && pl_sd != sd )
clif_hpmeter_single(sd->fd, pl_sd->bl.id, pl_sd->battle_status.hp, pl_sd->battle_status.max_hp);
}
clif_guild_emblem_area(&sd->bl);
clif_bg_hp(sd);
clif_bg_xy(sd);
return 1;
}
@ -134,52 +109,28 @@ int bg_team_leave(struct map_session_data *sd, int flag)
{ // Single Player leaves team
int i, bg_id;
struct battleground_data *bg;
struct map_session_data *pl_sd;
struct guild *g;
char output[128];
if( sd == NULL || !sd->state.bg_id )
return 0;
// Packets
clif_bg_leave_single(sd, sd->status.name, "Leaving Battle...");
bg_send_dot_remove(sd);
bg_id = sd->state.bg_id;
sd->state.bg_id = 0;
if( sd->status.guild_id && (g = guild_search(sd->status.guild_id)) != NULL )
{ // Refresh Guild Information
clif_guild_belonginfo(sd, g);
clif_guild_basicinfo(sd);
clif_guild_allianceinfo(sd);
clif_guild_memberlist(sd);
clif_guild_skillinfo(sd);
clif_guild_emblem(sd, g);
}
clif_charnameupdate(sd);
clif_guild_emblem_area(&sd->bl);
if( (bg = bg_team_search(bg_id)) == NULL )
return 0;
ARR_FIND(0, MAX_BG_MEMBERS, i, bg->members[i].sd == sd);
if( i < MAX_BG_MEMBERS ) // Removes member from BG
memset(&bg->members[i], 0, sizeof(bg->members[0]));
bg->count--;
for( i = 0; i < MAX_BG_MEMBERS; i++ )
{ // Update other BG members
if( (pl_sd = bg->members[i].sd) == NULL )
continue;
if( flag )
clif_bg_expulsion_single(pl_sd, sd->status.name, "User has quit the game...");
else
clif_bg_leave_single(pl_sd, sd->status.name, "Leaving Battle...");
clif_guild_basicinfo(pl_sd);
clif_bg_emblem(pl_sd, bg->g);
clif_bg_memberlist(pl_sd);
}
if( flag )
sprintf(output, "Server : %s has quit the game...", sd->status.name);
else
sprintf(output, "Server : %s is leaving the battlefield...", sd->status.name);
clif_bg_message(bg, "Server", output, strlen(output) + 1);
if( bg->logout_event[0] && flag )
npc_event(sd, bg->logout_event, 0);
@ -200,14 +151,7 @@ int bg_member_respawn(struct map_session_data *sd)
return 1; // Warped
}
struct guild* bg_guild_get(int bg_id)
{ // Return Fake Guild for BG Members
struct battleground_data *bg = bg_team_search(bg_id);
if( bg == NULL ) return NULL;
return bg->g;
}
int bg_create(unsigned short mapindex, short rx, short ry, int guild_index, const char *ev, const char *dev)
int bg_create(unsigned short mapindex, short rx, short ry, const char *ev, const char *dev)
{
struct battleground_data *bg;
bg_team_counter++;
@ -215,7 +159,6 @@ int bg_create(unsigned short mapindex, short rx, short ry, int guild_index, cons
CREATE(bg, struct battleground_data, 1);
bg->bg_id = bg_team_counter;
bg->count = 0;
bg->g = &bg_guild[guild_index];
bg->mapindex = mapindex;
bg->x = rx;
bg->y = ry;
@ -299,53 +242,11 @@ int bg_send_xy_timer(int tid, unsigned int tick, int id, intptr data)
return 0;
}
void bg_guild_build_data(void)
{
int i, j;
memset(&bg_guild, 0, sizeof(bg_guild));
for( i = 1; i <= 2; i++ )
{ // Emblem Data
FILE* fp = NULL;
char path[256];
j = i - 1;
sprintf(path, "%s/bgemblem_%d.ebm", db_path, i);
if( (fp = fopen(path, "rb")) == NULL )
continue;
bg_guild[j].emblem_id = 1;
fseek(fp, 0, SEEK_END);
bg_guild[j].emblem_len = ftell(fp);
fseek(fp, 0, SEEK_SET);
fread(&bg_guild[j].emblem_data, 1, bg_guild[j].emblem_len, fp);
fclose(fp);
ShowStatus("Done reading '"CL_WHITE"%s"CL_RESET"' emblem data file.\n", path);
}
// Guild Data - Guillaume
strncpy(bg_guild[0].name, "Blue Team", NAME_LENGTH);
strncpy(bg_guild[0].master, "General Guillaume Marollo", NAME_LENGTH);
bg_guild[0].guild_id = battle_config.bg_guild_id1;
bg_guild[0].guild_lv = 1;
strncpy(bg_guild[0].position[0].name, "Blue Team", NAME_LENGTH);
bg_guild[0].max_member = MAX_BG_MEMBERS;
// Guild Data - Croix
strncpy(bg_guild[1].name, "Red Team", NAME_LENGTH);
strncpy(bg_guild[1].master, "Prince Croix Marollo", NAME_LENGTH);
bg_guild[1].guild_id = battle_config.bg_guild_id2;
bg_guild[1].guild_lv = 1;
strncpy(bg_guild[1].position[0].name, "Red Team", NAME_LENGTH);
bg_guild[1].max_member = MAX_BG_MEMBERS;
}
void do_init_battleground(void)
{
bg_team_db = idb_alloc(DB_OPT_RELEASE_DATA);
add_timer_func_list(bg_send_xy_timer, "bg_send_xy_timer");
add_timer_interval(gettick() + battle_config.bg_update_interval, bg_send_xy_timer, 0, 0, battle_config.bg_update_interval);
bg_guild_build_data();
}
void do_final_battleground(void)

View File

@ -19,8 +19,6 @@ struct battleground_data {
unsigned int bg_id;
unsigned char count;
struct battleground_member_data members[MAX_BG_MEMBERS];
// Fake Guild Link
struct guild *g;
// BG Cementery
unsigned short mapindex, x, y;
// Logout Event
@ -28,18 +26,15 @@ struct battleground_data {
char die_event[50];
};
extern struct guild bg_guild[];
void do_init_battleground(void);
void do_final_battleground(void);
struct battleground_data* bg_team_search(int bg_id);
struct guild* bg_guild_get(int bg_id);
int bg_send_dot_remove(struct map_session_data *sd);
int bg_team_get_id(struct block_list *bl);
struct map_session_data* bg_getavailablesd(struct battleground_data *bg);
int bg_create(unsigned short mapindex, short rx, short ry, int guild_index, const char *ev, const char *dev);
int bg_create(unsigned short mapindex, short rx, short ry, const char *ev, const char *dev);
int bg_team_join(int bg_id, struct map_session_data *sd);
int bg_team_delete(int bg_id);
int bg_team_leave(struct map_session_data *sd, int flag);

View File

@ -812,8 +812,8 @@ static int clif_set_unit_idle(struct block_list* bl, unsigned char* buffer, bool
if( bl->type == BL_NPC && vd->class_ == FLAG_CLASS )
{ //The hell, why flags work like this?
WBUFL(buf,22) = clif_visual_emblem_id(bl);
WBUFL(buf,26) = clif_visual_guild_id(bl);
WBUFL(buf,22) = status_get_emblem_id(bl);
WBUFL(buf,26) = status_get_guild_id(bl);
}
WBUFW(buf,28) = vd->hair_color;
@ -827,8 +827,8 @@ static int clif_set_unit_idle(struct block_list* bl, unsigned char* buffer, bool
WBUFB(buf,40) = 0;
return packet_len(0x7c);
}
WBUFL(buf,34) = clif_visual_guild_id(bl);
WBUFW(buf,38) = clif_visual_emblem_id(bl);
WBUFL(buf,34) = status_get_guild_id(bl);
WBUFW(buf,38) = status_get_emblem_id(bl);
WBUFW(buf,40) = (sd)? sd->status.manner : 0;
#if PACKETVER >= 7
if (!type) {
@ -908,8 +908,8 @@ static int clif_set_unit_walking(struct block_list* bl, struct unit_data* ud, un
WBUFW(buf,32) = vd->hair_color;
WBUFW(buf,34) = vd->cloth_color;
WBUFW(buf,36) = (sd)? sd->head_dir : 0;
WBUFL(buf,38) = clif_visual_guild_id(bl);
WBUFW(buf,42) = clif_visual_emblem_id(bl);
WBUFL(buf,38) = status_get_guild_id(bl);
WBUFW(buf,42) = status_get_emblem_id(bl);
WBUFW(buf,44) = (sd)? sd->status.manner : 0;
#if PACKETVER < 7
WBUFW(buf,46) = (sc)? sc->opt3 : 0;
@ -1062,6 +1062,8 @@ int clif_spawn(struct block_list *bl)
clif_specialeffect(bl,423,AREA);
else if(sd->state.size==1)
clif_specialeffect(bl,421,AREA);
if( sd->state.bg_id && map[sd->bl.m].flag.battleground )
clif_sendbgemblem_area(sd);
}
break;
case BL_MOB:
@ -3484,6 +3486,8 @@ void clif_getareachar_unit(struct map_session_data* sd,struct block_list *bl)
clif_specialeffect_single(bl,423,sd->fd);
else if(tsd->state.size==1)
clif_specialeffect_single(bl,421,sd->fd);
if( tsd->state.bg_id && map[tsd->bl.m].flag.battleground )
clif_sendbgemblem_single(sd->fd,tsd);
}
break;
case BL_MER: // Devotion Effects
@ -6200,8 +6204,6 @@ int clif_guild_belonginfo(struct map_session_data *sd, struct guild *g)
{
int ps,fd;
nullpo_retr(0, sd);
if( sd->state.bg_id )
return clif_bg_belonginfo(sd);
nullpo_retr(0, g);
fd=sd->fd;
@ -6302,24 +6304,18 @@ int clif_guild_basicinfo(struct map_session_data *sd)
int fd,i,t;
struct guild *g;
struct guild_castle *gc = NULL;
struct battleground_data *bg = NULL;
nullpo_retr(0, sd);
fd = sd->fd;
if( sd->state.bg_id && (g = bg_guild_get(sd->state.bg_id)) != NULL )
bg = bg_team_search(sd->state.bg_id);
else
g = guild_search(sd->status.guild_id);
if( g == NULL )
if( (g = guild_search(sd->status.guild_id)) == NULL )
return 0;
WFIFOHEAD(fd,packet_len(0x1b6));
WFIFOW(fd, 0)=0x1b6;//0x150;
WFIFOL(fd, 2)=g->guild_id;
WFIFOL(fd, 6)=g->guild_lv;
WFIFOL(fd,10)=bg?bg->count:g->connect_member;
WFIFOL(fd,10)=g->connect_member;
WFIFOL(fd,14)=g->max_member;
WFIFOL(fd,18)=g->average_lv;
WFIFOL(fd,22)=g->exp;
@ -6352,10 +6348,7 @@ int clif_guild_allianceinfo(struct map_session_data *sd)
struct guild *g;
nullpo_retr(0, sd);
if( !sd->state.bg_id || (g = bg_guild_get(sd->state.bg_id)) == NULL )
g = guild_search(sd->status.guild_id);
if( g == NULL )
if( (g = guild_search(sd->status.guild_id)) == NULL )
return 0;
fd = sd->fd;
@ -6387,8 +6380,6 @@ int clif_guild_memberlist(struct map_session_data *sd)
if( (fd = sd->fd) == 0 )
return 0;
if( sd->state.bg_id )
return clif_bg_memberlist(sd);
if( (g = guild_search(sd->status.guild_id)) == NULL )
return 0;
@ -6425,10 +6416,7 @@ int clif_guild_positionnamelist(struct map_session_data *sd)
struct guild *g;
nullpo_retr(0, sd);
if( !sd->state.bg_id || (g = bg_guild_get(sd->state.bg_id)) == NULL )
g = guild_search(sd->status.guild_id);
if( g == NULL )
if( (g = guild_search(sd->status.guild_id)) == NULL )
return 0;
fd = sd->fd;
@ -6451,10 +6439,7 @@ int clif_guild_positioninfolist(struct map_session_data *sd)
struct guild *g;
nullpo_retr(0, sd);
if( !sd->state.bg_id || (g = bg_guild_get(sd->state.bg_id)) == NULL )
g = guild_search(sd->status.guild_id);
if( g == NULL )
if( (g = guild_search(sd->status.guild_id)) == NULL )
return 0;
fd = sd->fd;
@ -6545,8 +6530,8 @@ void clif_guild_emblem_area(struct block_list* bl)
// (emblem in the flag npcs and emblem over the head in agit maps) [FlavioJS]
WBUFW(buf,0) = 0x1B4;
WBUFL(buf,2) = bl->id;
WBUFL(buf,6) = clif_visual_guild_id(bl);
WBUFW(buf,10) = clif_visual_emblem_id(bl);
WBUFL(buf,6) = status_get_guild_id(bl);
WBUFW(buf,10) = status_get_emblem_id(bl);
clif_send(buf, 12, bl, AREA_WOS);
}
@ -6560,10 +6545,7 @@ int clif_guild_skillinfo(struct map_session_data* sd)
int i,c;
nullpo_retr(0, sd);
if( !sd->state.bg_id || (g = bg_guild_get(sd->state.bg_id)) == NULL )
g = guild_search(sd->status.guild_id);
if( g == NULL )
if( (g = guild_search(sd->status.guild_id)) == NULL )
return 0;
fd = sd->fd;
@ -6697,10 +6679,7 @@ int clif_guild_expulsionlist(struct map_session_data *sd)
struct guild *g;
nullpo_retr(0, sd);
if( !sd->state.bg_id || (g = bg_guild_get(sd->state.bg_id)) == NULL )
g = guild_search(sd->status.guild_id);
if( g == NULL )
if( (g = guild_search(sd->status.guild_id)) == NULL )
return 0;
fd = sd->fd;
@ -7271,12 +7250,7 @@ int clif_charnameack (int fd, struct block_list *bl)
if (ssd->status.party_id > 0)
p = party_search(ssd->status.party_id);
if (ssd->state.bg_id > 0)
{
g = bg_guild_get(ssd->state.bg_id);
ps = 0;
}
else if( ssd->status.guild_id > 0 && (g = guild_search(ssd->status.guild_id)) != NULL )
if( ssd->status.guild_id > 0 && (g = guild_search(ssd->status.guild_id)) != NULL )
{
ARR_FIND(0, g->max_member, i, g->member[i].account_id == ssd->status.account_id && g->member[i].char_id == ssd->status.char_id);
if( i < g->max_member ) ps = g->member[i].position;
@ -7317,8 +7291,6 @@ int clif_charnameack (int fd, struct block_list *bl)
case BL_MOB:
{
struct mob_data *md = (struct mob_data *)bl;
struct guild *g;
struct battleground_data *bg;
nullpo_retr(0, md);
memcpy(WBUFP(buf,6), md->name, NAME_LENGTH);
@ -7329,13 +7301,6 @@ int clif_charnameack (int fd, struct block_list *bl)
memcpy(WBUFP(buf,54), md->guardian_data->guild_name, NAME_LENGTH);
memcpy(WBUFP(buf,78), md->guardian_data->castle->castle_name, NAME_LENGTH);
}
else if( md->state.bg_id && (bg = bg_team_search(md->state.bg_id)) != NULL && (g = bg->g) != NULL )
{
WBUFW(buf, 0) = cmd = 0x195;
WBUFB(buf,30) = 0;
memcpy(WBUFP(buf,54), g->name, NAME_LENGTH);
memcpy(WBUFP(buf,78), g->position[0].name, NAME_LENGTH);
}
else if( battle_config.show_mob_info )
{
char mobhp[50], *str_p = mobhp;
@ -7401,12 +7366,7 @@ int clif_charnameupdate (struct map_session_data *ssd)
if( ssd->status.party_id > 0 )
p = party_search(ssd->status.party_id);
if( ssd->state.bg_id > 0 )
{
g = bg_guild_get(ssd->state.bg_id);
ps = 0;
}
else if( ssd->status.guild_id > 0 && (g = guild_search(ssd->status.guild_id)) != NULL )
if( ssd->status.guild_id > 0 && (g = guild_search(ssd->status.guild_id)) != NULL )
{
ARR_FIND(0, g->max_member, i, g->member[i].account_id == ssd->status.account_id && g->member[i].char_id == ssd->status.char_id);
if( i < g->max_member ) ps = g->member[i].position;
@ -8024,10 +7984,11 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
}
if( sd->state.bg_id ) clif_bg_hp(sd); // BattleGround System
if( sd->state.changemap && map[sd->bl.m].flag.battleground == 2 )
if( sd->state.changemap && map[sd->bl.m].flag.battleground )
{
clif_set01D6(sd,19); // Battleground Mode
clif_bg_updatescore_single(sd);
if( map[sd->bl.m].flag.battleground == 2 )
clif_bg_updatescore_single(sd);
}
if(map[sd->bl.m].flag.pvp) {
@ -8057,7 +8018,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
}
}
if( map_flag_gvg(sd->bl.m) || map[sd->bl.m].flag.battleground )
if( map_flag_gvg(sd->bl.m) )
{
clif_set0199(sd,3);
if( battle_config.gvg_flee_penalty != 100 || battle_config.bg_flee_penalty != 100 )
@ -10418,10 +10379,6 @@ void clif_parse_GuildRequestEmblem(int fd,struct map_session_data *sd)
if( (g = guild_search(guild_id)) != NULL )
clif_guild_emblem(sd,g);
else if( guild_id == battle_config.bg_guild_id1 )
clif_bg_emblem(sd, &bg_guild[0]);
else if( guild_id == battle_config.bg_guild_id2 )
clif_bg_emblem(sd, &bg_guild[1]);
}
/*==========================================
@ -12947,135 +12904,6 @@ int clif_bg_xy_remove(struct map_session_data *sd)
return 0;
}
int clif_bg_belonginfo(struct map_session_data *sd)
{
int fd;
struct guild *g;
nullpo_retr(0, sd);
if( !sd->state.bg_id || (g = bg_guild_get(sd->state.bg_id)) == NULL )
return 0;
fd = sd->fd;
WFIFOHEAD(fd,packet_len(0x16c));
memset(WFIFOP(fd,0),0,packet_len(0x16c));
WFIFOW(fd,0) = 0x16c;
WFIFOL(fd,2) = g->guild_id;
WFIFOL(fd,6) = g->emblem_id;
WFIFOL(fd,10) = 0;
memcpy(WFIFOP(fd,19), g->name, NAME_LENGTH);
WFIFOSET(fd,packet_len(0x16c));
return 1;
}
int clif_visual_guild_id(struct block_list *bl)
{
struct battleground_data *bg;
int bg_id;
nullpo_retr(0, bl);
if( (bg_id = bg_team_get_id(bl)) > 0 && (bg = bg_team_search(bg_id)) != NULL && bg->g )
return bg->g->guild_id;
else
return status_get_guild_id(bl);
}
int clif_visual_emblem_id(struct block_list *bl)
{
struct battleground_data *bg;
int bg_id;
nullpo_retr(0, bl);
if( (bg_id = bg_team_get_id(bl)) > 0 && (bg = bg_team_search(bg_id)) != NULL && bg->g )
return bg->g->emblem_id;
else
return status_get_emblem_id(bl);
}
int clif_bg_emblem(struct map_session_data *sd, struct guild *g)
{
int fd;
nullpo_retr(0, sd);
nullpo_retr(0, g);
fd = sd->fd;
if( g->emblem_len <= 0 )
return 0;
WFIFOHEAD(fd,g->emblem_len+12);
WFIFOW(fd,0)=0x152;
WFIFOW(fd,2)=g->emblem_len+12;
WFIFOL(fd,4)=g->guild_id;
WFIFOL(fd,8)=g->emblem_id;
memcpy(WFIFOP(fd,12),g->emblem_data,g->emblem_len);
WFIFOSET(fd,WFIFOW(fd,2));
return 0;
}
int clif_bg_memberlist(struct map_session_data *sd)
{
int fd, i, c;
struct battleground_data *bg;
struct map_session_data *psd;
nullpo_retr(0, sd);
if( (fd = sd->fd) == 0 )
return 0;
if( !sd->state.bg_id || (bg = bg_team_search(sd->state.bg_id)) == NULL )
return 0;
WFIFOHEAD(fd,bg->count * 104 + 4);
WFIFOW(fd,0) = 0x154;
for( i = 0, c = 0; i < bg->count; i++ )
{
if( (psd = bg->members[i].sd) == NULL )
continue;
WFIFOL(fd,c*104+ 4) = psd->status.account_id;
WFIFOL(fd,c*104+ 8) = psd->status.char_id;
WFIFOW(fd,c*104+12) = psd->status.hair;
WFIFOW(fd,c*104+14) = psd->status.hair_color;
WFIFOW(fd,c*104+16) = psd->status.sex;
WFIFOW(fd,c*104+18) = psd->status.class_;
WFIFOW(fd,c*104+20) = psd->status.base_level;
WFIFOL(fd,c*104+22) = 0;
WFIFOL(fd,c*104+26) = 1;
WFIFOL(fd,c*104+30) = c;
memset(WFIFOP(fd,c*104+34),0,50);
memcpy(WFIFOP(fd,c*104+84),psd->status.name,NAME_LENGTH);
c++;
}
WFIFOW(fd, 2)=c*104+4;
WFIFOSET(fd,WFIFOW(fd,2));
return 0;
}
int clif_bg_leave(struct map_session_data *sd, const char *name, const char *mes)
{
unsigned char buf[128];
nullpo_retr(0, sd);
WBUFW(buf,0)=0x15a;
memcpy(WBUFP(buf, 2),name,NAME_LENGTH);
memcpy(WBUFP(buf,26),mes,40);
clif_send(buf,packet_len(0x15a),&sd->bl,BG);
return 0;
}
int clif_bg_leave_single(struct map_session_data *sd, const char *name, const char *mes)
{
int fd;
nullpo_retr(0, sd);
fd = sd->fd;
WFIFOHEAD(fd,66);
WFIFOW(fd,0) = 0x15a;
memcpy(WFIFOP(fd,2), name, NAME_LENGTH);
memcpy(WFIFOP(fd,26), mes, 40);
WFIFOSET(fd,66);
return 0;
}
int clif_bg_message(struct battleground_data *bg, const char *name, const char *mes, int len)
{
struct map_session_data *sd;
@ -13096,21 +12924,6 @@ int clif_bg_message(struct battleground_data *bg, const char *name, const char *
return 0;
}
int clif_bg_expulsion_single(struct map_session_data *sd, const char *name, const char *mes)
{
int fd;
nullpo_retr(0, sd);
fd = sd->fd;
WFIFOHEAD(fd, 90);
WFIFOW(fd,0) = 0x15c;
safestrncpy((char*)WFIFOP(fd,2), name, NAME_LENGTH);
safestrncpy((char*)WFIFOP(fd,26), mes, 40);
safestrncpy((char*)WFIFOP(fd,66), "", NAME_LENGTH);
WFIFOSET(fd,90);
return 0;
}
/*==========================================
* Validates and processes battlechat messages [pakpil]
* S 0x2db <packet len>.w <text>.?B (<name> : <message>) 00
@ -13173,6 +12986,31 @@ int clif_bg_updatescore_single(struct map_session_data *sd)
return 0;
}
int clif_sendbgemblem_area(struct map_session_data *sd)
{
unsigned char buf[33];
nullpo_retr(0,sd);
WBUFW(buf, 0) = 0x2dd;
WBUFL(buf,2) = sd->bl.id;
safestrncpy((char*)WBUFP(buf,6), sd->status.name, NAME_LENGTH); // name don't show in screen.
WBUFW(buf,30) = sd->state.bg_id;
clif_send(buf,packet_len(0x2dd), &sd->bl, AREA);
return 0;
}
int clif_sendbgemblem_single(int fd, struct map_session_data *sd)
{
nullpo_retr(0,sd);
WFIFOHEAD(fd,32);
WFIFOW(fd,0) = 0x2dd;
WFIFOL(fd,2) = sd->bl.id;
safestrncpy((char*)WFIFOP(fd,6), sd->status.name, NAME_LENGTH);
WFIFOW(fd,30) = sd->state.bg_id;
WFIFOSET(fd,packet_len(0x2dd));
return 0;
}
/*==========================================
* ƒpƒPƒbƒgƒfƒoƒbƒO
*------------------------------------------*/
@ -13442,7 +13280,7 @@ static int packetdb_readdb(void)
0, 0, 0, 0, 0, 0, 0, 0, 0,191, 0, 0, 0, 0, 0, 0,
//#0x02C0
0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 6, -1, 10, 10, 0, 0, -1, -1, 6, 0,
0, 0, 0, 0, 0, 0, 6, -1, 10, 10, 0, 0, -1, 32, 6, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};

View File

@ -343,17 +343,11 @@ int clif_guild_xy_remove(struct map_session_data *sd);
int clif_bg_hp(struct map_session_data *sd);
int clif_bg_xy(struct map_session_data *sd);
int clif_bg_xy_remove(struct map_session_data *sd);
int clif_bg_belonginfo(struct map_session_data *sd);
int clif_visual_guild_id(struct block_list *bl);
int clif_visual_emblem_id(struct block_list *bl);
int clif_bg_emblem(struct map_session_data *sd, struct guild *g);
int clif_bg_memberlist(struct map_session_data *sd);
int clif_bg_leave(struct map_session_data *sd, const char *name, const char *mes);
int clif_bg_leave_single(struct map_session_data *sd, const char *name, const char *mes);
int clif_bg_message(struct battleground_data *bg, const char *name, const char *mes, int len);
int clif_bg_expulsion_single(struct map_session_data *sd, const char *name, const char *mes);
int clif_bg_updatescore(int m);
int clif_bg_updatescore_single(struct map_session_data *sd);
int clif_sendbgemblem_area(struct map_session_data *sd);
int clif_sendbgemblem_single(int fd, struct map_session_data *sd);
// atcommand
int clif_displaymessage(const int fd,const char* mes);

View File

@ -13372,7 +13372,7 @@ BUILDIN_FUNC(waitingroom2bg)
struct npc_data *nd;
struct chat_data *cd;
const char *map_name, *ev = "", *dev = "";
int x, y, i, mapindex = 0, guild_index, bg_id, n;
int x, y, i, mapindex = 0, bg_id, n;
struct map_session_data *sd;
if( script_hasdata(st,8) )
@ -13399,12 +13399,10 @@ BUILDIN_FUNC(waitingroom2bg)
x = script_getnum(st,3);
y = script_getnum(st,4);
guild_index = script_getnum(st,5);
ev = script_getstr(st,6); // Logout Event
dev = script_getstr(st,7); // Die Event
ev = script_getstr(st,5); // Logout Event
dev = script_getstr(st,6); // Die Event
guild_index = cap_value(guild_index, 0, 1);
if( (bg_id = bg_create(mapindex, x, y, guild_index, ev, dev)) == 0 )
if( (bg_id = bg_create(mapindex, x, y, ev, dev)) == 0 )
{ // Creation failed
script_pushint(st,0);
return 0;