parent
dcc3285a5f
commit
4ed035b036
@ -1162,10 +1162,10 @@ int chmapif_parse_updfamelist(int fd){
|
||||
|
||||
switch(type)
|
||||
{
|
||||
case 1: size = fame_list_size_smith; list = smith_fame_list; break;
|
||||
case 2: size = fame_list_size_chemist; list = chemist_fame_list; break;
|
||||
case 3: size = fame_list_size_taekwon; list = taekwon_fame_list; break;
|
||||
default: size = 0; list = NULL; break;
|
||||
case RANK_BLACKSMITH: size = fame_list_size_smith; list = smith_fame_list; break;
|
||||
case RANK_ALCHEMIST: size = fame_list_size_chemist; list = chemist_fame_list; break;
|
||||
case RANK_TAEKWON: size = fame_list_size_taekwon; list = taekwon_fame_list; break;
|
||||
default: size = 0; list = NULL; break;
|
||||
}
|
||||
|
||||
ARR_FIND(0, size, player_pos, list[player_pos].id == cid);// position of the player
|
||||
|
@ -847,6 +847,13 @@ enum e_party_member_withdraw {
|
||||
PARTY_MEMBER_WITHDRAW_CANT_EXPEL, ///< TODO: Cannot be kicked
|
||||
};
|
||||
|
||||
enum e_rank {
|
||||
RANK_BLACKSMITH = 0,
|
||||
RANK_ALCHEMIST = 1,
|
||||
RANK_TAEKWON = 2,
|
||||
RANK_KILLER = 3
|
||||
};
|
||||
|
||||
// Sanity checks...
|
||||
#if MAX_ZENY > INT_MAX
|
||||
#error MAX_ZENY is too big
|
||||
|
@ -1198,9 +1198,9 @@ int chrif_updatefamelist(struct map_session_data* sd) {
|
||||
chrif_check(-1);
|
||||
|
||||
switch(sd->class_ & MAPID_UPPERMASK) {
|
||||
case MAPID_BLACKSMITH: type = 1; break;
|
||||
case MAPID_ALCHEMIST: type = 2; break;
|
||||
case MAPID_TAEKWON: type = 3; break;
|
||||
case MAPID_BLACKSMITH: type = RANK_BLACKSMITH; break;
|
||||
case MAPID_ALCHEMIST: type = RANK_ALCHEMIST; break;
|
||||
case MAPID_TAEKWON: type = RANK_TAEKWON; break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
@ -1272,9 +1272,9 @@ int chrif_updatefamelist_ack(int fd) {
|
||||
uint8 index;
|
||||
|
||||
switch (RFIFOB(fd,2)) {
|
||||
case 1: list = smith_fame_list; break;
|
||||
case 2: list = chemist_fame_list; break;
|
||||
case 3: list = taekwon_fame_list; break;
|
||||
case RANK_BLACKSMITH: list = smith_fame_list; break;
|
||||
case RANK_ALCHEMIST: list = chemist_fame_list; break;
|
||||
case RANK_TAEKWON: list = taekwon_fame_list; break;
|
||||
default: return 0;
|
||||
}
|
||||
|
||||
|
354
src/map/clif.c
354
src/map/clif.c
@ -14328,189 +14328,6 @@ void clif_parse_PVPInfo(int fd,struct map_session_data *sd)
|
||||
clif_PVPInfo(sd);
|
||||
}
|
||||
|
||||
|
||||
/// /blacksmith list (ZC_BLACKSMITH_RANK).
|
||||
/// 0219 { <name>.24B }*10 { <point>.L }*10
|
||||
void clif_blacksmith(struct map_session_data* sd)
|
||||
{
|
||||
int i, fd = sd->fd;
|
||||
const char* name;
|
||||
|
||||
WFIFOHEAD(fd,packet_len(0x219));
|
||||
WFIFOW(fd,0) = 0x219;
|
||||
//Packet size limits this list to 10 elements. [Skotlex]
|
||||
for (i = 0; i < min(10,MAX_FAME_LIST); i++) { //client is capped to 10 char
|
||||
if (smith_fame_list[i].id > 0) {
|
||||
if (strcmp(smith_fame_list[i].name, "-") == 0 &&
|
||||
(name = map_charid2nick(smith_fame_list[i].id)) != NULL)
|
||||
{
|
||||
safestrncpy((char *)(WFIFOP(fd, 2 + 24 * i)), name, NAME_LENGTH);
|
||||
} else
|
||||
safestrncpy((char *)(WFIFOP(fd, 2 + 24 * i)), smith_fame_list[i].name, NAME_LENGTH);
|
||||
} else
|
||||
safestrncpy((char *)(WFIFOP(fd, 2 + 24 * i)), "None", 5);
|
||||
WFIFOL(fd, 242 + i * 4) = smith_fame_list[i].fame;
|
||||
}
|
||||
for(;i < 10; i++) { //In case the MAX is less than 10.
|
||||
safestrncpy((char *)(WFIFOP(fd, 2 + 24 * i)), "Unavailable", 12);
|
||||
WFIFOL(fd, 242 + i * 4) = 0;
|
||||
}
|
||||
|
||||
WFIFOSET(fd, packet_len(0x219));
|
||||
}
|
||||
|
||||
|
||||
/// /blacksmith (CZ_BLACKSMITH_RANK).
|
||||
/// 0217
|
||||
void clif_parse_Blacksmith(int fd,struct map_session_data *sd)
|
||||
{
|
||||
clif_blacksmith(sd);
|
||||
}
|
||||
|
||||
|
||||
/// Notification about backsmith points (ZC_BLACKSMITH_POINT).
|
||||
/// 021b <points>.L <total points>.L
|
||||
void clif_fame_blacksmith(struct map_session_data *sd, int points)
|
||||
{
|
||||
int fd = sd->fd;
|
||||
|
||||
WFIFOHEAD(fd,packet_len(0x21b));
|
||||
WFIFOW(fd,0) = 0x21b;
|
||||
WFIFOL(fd,2) = points;
|
||||
WFIFOL(fd,6) = sd->status.fame;
|
||||
WFIFOSET(fd, packet_len(0x21b));
|
||||
}
|
||||
|
||||
|
||||
/// /alchemist list (ZC_ALCHEMIST_RANK).
|
||||
/// 021a { <name>.24B }*10 { <point>.L }*10
|
||||
void clif_alchemist(struct map_session_data* sd)
|
||||
{
|
||||
int i, fd = sd->fd;
|
||||
const char* name;
|
||||
|
||||
WFIFOHEAD(fd,packet_len(0x21a));
|
||||
WFIFOW(fd,0) = 0x21a;
|
||||
//Packet size limits this list to 10 elements. [Skotlex]
|
||||
for (i = 0; i < min(10,MAX_FAME_LIST); i++) {
|
||||
if (chemist_fame_list[i].id > 0) {
|
||||
if (strcmp(chemist_fame_list[i].name, "-") == 0 &&
|
||||
(name = map_charid2nick(chemist_fame_list[i].id)) != NULL)
|
||||
{
|
||||
safestrncpy(WFIFOCP(fd, 2 + 24 * i), name, NAME_LENGTH);
|
||||
} else
|
||||
safestrncpy(WFIFOCP(fd, 2 + 24 * i), chemist_fame_list[i].name, NAME_LENGTH);
|
||||
} else
|
||||
safestrncpy(WFIFOCP(fd, 2 + 24 * i), "None", NAME_LENGTH);
|
||||
WFIFOL(fd, 242 + i * 4) = chemist_fame_list[i].fame;
|
||||
}
|
||||
for(;i < 10; i++) { //In case the MAX is less than 10.
|
||||
safestrncpy(WFIFOCP(fd, 2 + 24 * i), "Unavailable", NAME_LENGTH);
|
||||
WFIFOL(fd, 242 + i * 4) = 0;
|
||||
}
|
||||
|
||||
WFIFOSET(fd, packet_len(0x21a));
|
||||
}
|
||||
|
||||
|
||||
/// /alchemist (CZ_ALCHEMIST_RANK).
|
||||
/// 0218
|
||||
void clif_parse_Alchemist(int fd,struct map_session_data *sd)
|
||||
{
|
||||
clif_alchemist(sd);
|
||||
}
|
||||
|
||||
|
||||
/// Notification about alchemist points (ZC_ALCHEMIST_POINT).
|
||||
/// 021c <points>.L <total points>.L
|
||||
void clif_fame_alchemist(struct map_session_data *sd, int points)
|
||||
{
|
||||
int fd = sd->fd;
|
||||
|
||||
WFIFOHEAD(fd,packet_len(0x21c));
|
||||
WFIFOW(fd,0) = 0x21c;
|
||||
WFIFOL(fd,2) = points;
|
||||
WFIFOL(fd,6) = sd->status.fame;
|
||||
WFIFOSET(fd, packet_len(0x21c));
|
||||
}
|
||||
|
||||
|
||||
/// /taekwon list (ZC_TAEKWON_RANK).
|
||||
/// 0226 { <name>.24B }*10 { <point>.L }*10
|
||||
void clif_taekwon(struct map_session_data* sd)
|
||||
{
|
||||
int i, fd = sd->fd;
|
||||
const char* name;
|
||||
|
||||
WFIFOHEAD(fd,packet_len(0x226));
|
||||
WFIFOW(fd,0) = 0x226;
|
||||
//Packet size limits this list to 10 elements. [Skotlex]
|
||||
for (i = 0; i < min(10,MAX_FAME_LIST); i++) {
|
||||
if (taekwon_fame_list[i].id > 0) {
|
||||
if (strcmp(taekwon_fame_list[i].name, "-") == 0 &&
|
||||
(name = map_charid2nick(taekwon_fame_list[i].id)) != NULL)
|
||||
{
|
||||
safestrncpy(WFIFOCP(fd, 2 + 24 * i), name, NAME_LENGTH);
|
||||
} else
|
||||
safestrncpy(WFIFOCP(fd, 2 + 24 * i), taekwon_fame_list[i].name, NAME_LENGTH);
|
||||
} else
|
||||
safestrncpy(WFIFOCP(fd, 2 + 24 * i), "None", NAME_LENGTH);
|
||||
WFIFOL(fd, 242 + i * 4) = taekwon_fame_list[i].fame;
|
||||
}
|
||||
for(;i < 10; i++) { //In case the MAX is less than 10.
|
||||
safestrncpy(WFIFOCP(fd, 2 + 24 * i), "Unavailable", NAME_LENGTH);
|
||||
WFIFOL(fd, 242 + i * 4) = 0;
|
||||
}
|
||||
WFIFOSET(fd, packet_len(0x226));
|
||||
}
|
||||
|
||||
|
||||
/// /taekwon (CZ_TAEKWON_RANK).
|
||||
/// 0225
|
||||
void clif_parse_Taekwon(int fd,struct map_session_data *sd)
|
||||
{
|
||||
clif_taekwon(sd);
|
||||
}
|
||||
|
||||
|
||||
/// Notification about taekwon points (ZC_TAEKWON_POINT).
|
||||
/// 0224 <points>.L <total points>.L
|
||||
void clif_fame_taekwon(struct map_session_data *sd, int points)
|
||||
{
|
||||
int fd = sd->fd;
|
||||
|
||||
WFIFOHEAD(fd,packet_len(0x224));
|
||||
WFIFOW(fd,0) = 0x224;
|
||||
WFIFOL(fd,2) = points;
|
||||
WFIFOL(fd,6) = sd->status.fame;
|
||||
WFIFOSET(fd, packet_len(0x224));
|
||||
}
|
||||
|
||||
|
||||
/// /pk list (ZC_KILLER_RANK).
|
||||
/// 0238 { <name>.24B }*10 { <point>.L }*10
|
||||
void clif_ranking_pk(struct map_session_data* sd)
|
||||
{
|
||||
int i, fd = sd->fd;
|
||||
|
||||
WFIFOHEAD(fd,packet_len(0x238));
|
||||
WFIFOW(fd,0) = 0x238;
|
||||
for(i=0;i<10;i++){
|
||||
safestrncpy(WFIFOCP(fd,i*24+2), "Unknown", NAME_LENGTH);
|
||||
WFIFOL(fd,i*4+242) = 0;
|
||||
}
|
||||
WFIFOSET(fd, packet_len(0x238));
|
||||
}
|
||||
|
||||
|
||||
/// /pk (CZ_KILLER_RANK).
|
||||
/// 0237
|
||||
void clif_parse_RankingPk(int fd,struct map_session_data *sd)
|
||||
{
|
||||
clif_ranking_pk(sd);
|
||||
}
|
||||
|
||||
|
||||
/// SG Feel save OK [Komurka] (CZ_AGREE_STARPLACE).
|
||||
/// 0254 <which>.B
|
||||
/// which: (unused atm for security purpose)
|
||||
@ -17722,51 +17539,122 @@ void clif_parse_client_version(int fd, struct map_session_data *sd) {
|
||||
/// Ranking list
|
||||
|
||||
/// ranking pointlist { <name>.24B <point>.L }*10
|
||||
void clif_sub_ranklist(unsigned char *buf,int idx,struct map_session_data* sd, int16 rankingtype){
|
||||
void clif_sub_ranklist(unsigned char *buf,int idx,struct map_session_data* sd, enum e_rank rankingtype){
|
||||
struct fame_list* list;
|
||||
int skip = 0;
|
||||
int i, size = MAX_FAME_LIST;
|
||||
|
||||
switch(rankingtype+1) { //to keep the same case as char.c
|
||||
case 1: list = smith_fame_list; break;
|
||||
case 2: list = chemist_fame_list; break;
|
||||
case 3: list = taekwon_fame_list; break;
|
||||
default: skip=1; break;
|
||||
switch(rankingtype) {
|
||||
case RANK_BLACKSMITH: list = smith_fame_list; break;
|
||||
case RANK_ALCHEMIST: list = chemist_fame_list; break;
|
||||
case RANK_TAEKWON: list = taekwon_fame_list; break;
|
||||
// PK currently unsupported
|
||||
case RANK_KILLER: list = NULL; size = 0; break;
|
||||
default:
|
||||
ShowError( "clif_sub_ranklist: Unsupported ranking type '%d'. Please report this.\n", rankingtype );
|
||||
return;
|
||||
}
|
||||
|
||||
if(!skip) {
|
||||
int i;
|
||||
|
||||
//Packet size limits this list to 10 elements. [Skotlex]
|
||||
for (i = 0; i < min(10,MAX_FAME_LIST); i++) {
|
||||
if (list[i].id > 0) {
|
||||
const char* name;
|
||||
if (strcmp(list[i].name, "-") == 0 &&
|
||||
(name = map_charid2nick(list[i].id)) != NULL)
|
||||
{
|
||||
safestrncpy((char *)(WBUFP(buf,idx + 24 * i)), name, NAME_LENGTH);
|
||||
} else {
|
||||
safestrncpy((char *)(WBUFP(buf,idx + 24 * i)), list[i].name, NAME_LENGTH);
|
||||
}
|
||||
//Packet size limits this list to 10 elements. [Skotlex]
|
||||
for (i = 0; i < min(10,size); i++) {
|
||||
if (list[i].id > 0) {
|
||||
const char* name;
|
||||
if (strcmp(list[i].name, "-") == 0 &&
|
||||
(name = map_charid2nick(list[i].id)) != NULL)
|
||||
{
|
||||
safestrncpy(WBUFCP(buf,idx + NAME_LENGTH * i), name, NAME_LENGTH);
|
||||
} else {
|
||||
safestrncpy((char *)(WBUFP(buf, idx + 24 * i)), "None", 5);
|
||||
safestrncpy(WBUFCP(buf,idx + NAME_LENGTH * i), list[i].name, NAME_LENGTH);
|
||||
}
|
||||
WBUFL(buf, idx+24*10 + i * 4) = list[i].fame; //points
|
||||
}
|
||||
for(;i < 10; i++) { //In case the MAX is less than 10.
|
||||
safestrncpy((char *)(WBUFP(buf, idx + 24 * i)), "Unavailable", 12);
|
||||
WBUFL(buf, idx+24*10 + i * 4) = 0;
|
||||
} else {
|
||||
safestrncpy(WBUFCP(buf, idx + NAME_LENGTH * i), "None", NAME_LENGTH);
|
||||
}
|
||||
WBUFL(buf, idx+NAME_LENGTH*10 + i * 4) = list[i].fame; //points
|
||||
}
|
||||
|
||||
for(;i < 10; i++) { //In case the MAX is less than 10.
|
||||
safestrncpy(WBUFCP(buf, idx + NAME_LENGTH * i), "Unavailable", NAME_LENGTH);
|
||||
WBUFL(buf, idx+NAME_LENGTH*10 + i * 4) = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/// Request for the blacksmith ranklist.
|
||||
/// /blacksmith command sends this packet to the server.
|
||||
/// 0217 (CZ_BLACKSMITH_RANK)
|
||||
void clif_parse_Blacksmith( int fd, struct map_session_data *sd ){
|
||||
clif_ranklist(sd,RANK_BLACKSMITH);
|
||||
}
|
||||
|
||||
/// Request for the alchemist ranklist.
|
||||
/// /alchemist command sends this packet to the server.
|
||||
/// 0218 (CZ_ALCHEMIST_RANK)
|
||||
void clif_parse_Alchemist( int fd, struct map_session_data *sd ){
|
||||
clif_ranklist(sd,RANK_ALCHEMIST);
|
||||
}
|
||||
|
||||
/// Request for the taekwon ranklist.
|
||||
/// /taekwon command sends this packet to the server.
|
||||
/// 0225 (CZ_TAEKWON_RANK)
|
||||
void clif_parse_Taekwon( int fd, struct map_session_data *sd ){
|
||||
clif_ranklist(sd,RANK_TAEKWON);
|
||||
}
|
||||
|
||||
/// Request for the killer ranklist.
|
||||
/// /pk command sends this packet to the server.
|
||||
/// 0237 (CZ_KILLER_RANK)
|
||||
void clif_parse_RankingPk( int fd, struct map_session_data *sd ){
|
||||
clif_ranklist(sd,RANK_KILLER);
|
||||
}
|
||||
|
||||
/// 0219 { <name>.24B }*10 { <point>.L }*10 (ZC_BLACKSMITH_RANK)
|
||||
/// 021a { <name>.24B }*10 { <point>.L }*10 (ZC_ALCHEMIST_RANK)
|
||||
/// 0226 { <name>.24B }*10 { <point>.L }*10 (ZC_TAEKWON_RANK)
|
||||
/// 0238 { <name>.24B }*10 { <point>.L }*10 (ZC_KILLER_RANK)
|
||||
/// 097d <RankingType>.W {<CharName>.24B <point>L}*10 <mypoint>L (ZC_ACK_RANKING)
|
||||
void clif_ranklist(struct map_session_data *sd, int16 rankingType) {
|
||||
unsigned char buf[MAX_FAME_LIST * sizeof(struct fame_list)];
|
||||
enum e_rank rank;
|
||||
|
||||
#if PACKETVER < 20130710
|
||||
unsigned char buf[MAX_FAME_LIST * sizeof(struct fame_list)+2];
|
||||
short cmd;
|
||||
|
||||
switch( rankingType ){
|
||||
case RANK_BLACKSMITH: cmd = 0x219; break;
|
||||
case RANK_ALCHEMIST: cmd = 0x21a; break;
|
||||
case RANK_TAEKWON: cmd = 0x226; break;
|
||||
case RANK_KILLER: cmd = 0x238; break;
|
||||
default:
|
||||
ShowError( "clif_ranklist: Unsupported ranking type '%d'. Please report this.\n", rankingType );
|
||||
return;
|
||||
}
|
||||
|
||||
// Can be safely casted here, since we validated it before
|
||||
rank = (enum e_rank)rankingType;
|
||||
|
||||
WBUFW(buf,0) = cmd;
|
||||
clif_sub_ranklist(buf,2,sd,rank);
|
||||
|
||||
clif_send(buf, packet_len(cmd), &sd->bl, SELF);
|
||||
#else
|
||||
unsigned char buf[MAX_FAME_LIST * sizeof(struct fame_list)+8];
|
||||
int mypoint = 0;
|
||||
|
||||
switch( rankingType ){
|
||||
case RANK_BLACKSMITH:
|
||||
case RANK_ALCHEMIST:
|
||||
case RANK_TAEKWON:
|
||||
case RANK_KILLER:
|
||||
break;
|
||||
default:
|
||||
ShowError( "clif_ranklist: Unsupported ranking type '%d'. Please report this.\n", rankingType );
|
||||
return;
|
||||
}
|
||||
|
||||
// Can be safely casted here, since we validated it before
|
||||
rank = (enum e_rank)rankingType;
|
||||
|
||||
WBUFW(buf,0) = 0x97d;
|
||||
WBUFW(buf,2) = rankingType;
|
||||
clif_sub_ranklist(buf,4,sd,rankingType);
|
||||
WBUFW(buf,2) = rank;
|
||||
clif_sub_ranklist(buf,4,sd,rank);
|
||||
|
||||
switch(sd->class_&MAPID_UPPERMASK){ //mypoint (checking if valid type)
|
||||
case MAPID_BLACKSMITH:
|
||||
@ -17776,6 +17664,7 @@ void clif_ranklist(struct map_session_data *sd, int16 rankingType) {
|
||||
}
|
||||
WBUFL(buf,284) = mypoint; //mypoint
|
||||
clif_send(buf, 288, &sd->bl, SELF);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
@ -17789,25 +17678,40 @@ void clif_ranklist(struct map_session_data *sd, int16 rankingType) {
|
||||
void clif_parse_ranklist(int fd,struct map_session_data *sd) {
|
||||
struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)];
|
||||
int16 rankingtype = RFIFOW(fd,info->pos[0]); //type
|
||||
if(rankingtype != 3) clif_ranklist(sd,rankingtype); // pk_list unsuported atm
|
||||
|
||||
clif_ranklist(sd,rankingtype);
|
||||
}
|
||||
|
||||
// 097e <RankingType>.W <point>.L <TotalPoint>.L (ZC_UPDATE_RANKING_POINT)
|
||||
/// Updates the fame rank points for the given ranking.
|
||||
/// 021b <points>.L <total points>.L (ZC_BLACKSMITH_POINT)
|
||||
/// 021c <points>.L <total points>.L (ZC_ALCHEMIST_POINT)
|
||||
/// 0224 <points>.L <total points>.L (ZC_TAEKWON_POINT)
|
||||
/// 097e <RankingType>.W <point>.L <TotalPoint>.L (ZC_UPDATE_RANKING_POINT)
|
||||
void clif_update_rankingpoint(struct map_session_data *sd, int rankingtype, int point) {
|
||||
#if PACKETVER < 20130710
|
||||
switch(rankingtype){
|
||||
case 0: clif_fame_blacksmith(sd,point); break; // Blacksmith
|
||||
case 1: clif_fame_alchemist(sd,point); break; //Alchemist
|
||||
case 2: clif_fame_taekwon(sd,point); break; // Taekwon
|
||||
}
|
||||
#else
|
||||
int fd=sd->fd;
|
||||
WFIFOHEAD(fd,14);
|
||||
#if PACKETVER < 20130710
|
||||
short cmd;
|
||||
switch(rankingtype){
|
||||
case RANK_BLACKSMITH: cmd = 0x21b; break;
|
||||
case RANK_ALCHEMIST: cmd = 0x21c; break;
|
||||
case RANK_TAEKWON: cmd = 0x224; break;
|
||||
default:
|
||||
ShowError( "clif_update_rankingpoint: Unsupported ranking type '%d'. Please report this.\n", rankingtype );
|
||||
return;
|
||||
}
|
||||
|
||||
WFIFOHEAD(fd,packet_len(cmd));
|
||||
WFIFOW(fd,0) = cmd;
|
||||
WFIFOL(fd,2) = point;
|
||||
WFIFOL(fd,6) = sd->status.fame;
|
||||
WFIFOSET(fd, packet_len(cmd));
|
||||
#else
|
||||
WFIFOHEAD(fd,packet_len(0x97e));
|
||||
WFIFOW(fd,0) = 0x97e;
|
||||
WFIFOW(fd,2) = rankingtype;
|
||||
WFIFOL(fd,4) = point;
|
||||
WFIFOL(fd,8) = sd->status.fame;
|
||||
WFIFOSET(fd,12);
|
||||
WFIFOSET(fd,packet_len(0x97e));
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -19148,7 +19052,7 @@ void packetdb_readdb(bool reload)
|
||||
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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 7,
|
||||
0, 0, 0, 0, 2, 0, 0, 14, 6, 50, -1, 0, 0, 0, 0, -1,
|
||||
0, 0, 0, 0, 2, 0, 0, 14, 6, 50, -1, 0, 0, 0, 12, -1,
|
||||
//#0x0980
|
||||
7, 0, 0, 29, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
31, 0, 0, 0, 0, 0, 0, -1, 8, 11, 9, 8, 0, 0, 0, 22,
|
||||
|
11
src/map/pc.c
11
src/map/pc.c
@ -393,16 +393,19 @@ int pc_banding(struct map_session_data *sd, uint16 skill_lv) {
|
||||
*/
|
||||
void pc_addfame(struct map_session_data *sd,int count)
|
||||
{
|
||||
int ranktype=-1;
|
||||
enum e_rank ranktype;
|
||||
nullpo_retv(sd);
|
||||
sd->status.fame += count;
|
||||
if(sd->status.fame > MAX_FAME)
|
||||
sd->status.fame = MAX_FAME;
|
||||
|
||||
switch(sd->class_&MAPID_UPPERMASK){
|
||||
case MAPID_BLACKSMITH: ranktype = 0; break;
|
||||
case MAPID_ALCHEMIST: ranktype = 1; break;
|
||||
case MAPID_TAEKWON: ranktype = 2; break;
|
||||
case MAPID_BLACKSMITH: ranktype = RANK_BLACKSMITH; break;
|
||||
case MAPID_ALCHEMIST: ranktype = RANK_ALCHEMIST; break;
|
||||
case MAPID_TAEKWON: ranktype = RANK_TAEKWON; break;
|
||||
default:
|
||||
ShowWarning( "pc_addfame: Trying to add fame to class '%s'(%d).\n", job_name(sd->class_), sd->class_ );
|
||||
return;
|
||||
}
|
||||
|
||||
clif_update_rankingpoint(sd,ranktype,count);
|
||||
|
Loading…
x
Reference in New Issue
Block a user