diff options
Diffstat (limited to 'src/map')
-rw-r--r-- | src/map/atcommand.c | 9 | ||||
-rw-r--r-- | src/map/battle.c | 27 | ||||
-rw-r--r-- | src/map/battle.h | 7 | ||||
-rw-r--r-- | src/map/chrif.c | 7 | ||||
-rw-r--r-- | src/map/clif.c | 104 | ||||
-rw-r--r-- | src/map/clif.h | 12 | ||||
-rw-r--r-- | src/map/guild.c | 28 | ||||
-rw-r--r-- | src/map/intif.c | 8 | ||||
-rw-r--r-- | src/map/itemdb.c | 10 | ||||
-rw-r--r-- | src/map/log.c | 4 | ||||
-rw-r--r-- | src/map/log.h | 4 | ||||
-rw-r--r-- | src/map/map.c | 18 | ||||
-rw-r--r-- | src/map/map.h | 5 | ||||
-rw-r--r-- | src/map/mercenary.c | 2 | ||||
-rw-r--r-- | src/map/mercenary.h | 11 | ||||
-rw-r--r-- | src/map/mob.c | 16 | ||||
-rw-r--r-- | src/map/npc.c | 16 | ||||
-rw-r--r-- | src/map/party.c | 8 | ||||
-rw-r--r-- | src/map/pc.c | 26 | ||||
-rw-r--r-- | src/map/pc.h | 52 | ||||
-rw-r--r-- | src/map/pet.h | 79 | ||||
-rw-r--r-- | src/map/script.c | 102 | ||||
-rw-r--r-- | src/map/script.h | 4 | ||||
-rw-r--r-- | src/map/skill.c | 135 | ||||
-rw-r--r-- | src/map/status.c | 74 | ||||
-rw-r--r-- | src/map/status.h | 10 | ||||
-rw-r--r-- | src/map/storage.c | 8 |
27 files changed, 415 insertions, 371 deletions
diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 233376655..38de48e57 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -2394,7 +2394,7 @@ int atcommand_monster(const int fd, struct map_session_data* sd, const char* com ShowInfo("%s monster='%s' name='%s' id=%d count=%d (%d,%d)\n", command, monster, name, mob_id, number, sd->bl.x, sd->bl.y); count = 0; - range = (int)sqrt(number) +2; // calculation of an odd number (+ 4 area around) + range = (int)sqrt((float)number) +2; // calculation of an odd number (+ 4 area around) for (i = 0; i < number; i++) { map_search_freecell(&sd->bl, 0, &mx, &my, range, range, 0); k = mob_once_spawn(sd, sd->bl.m, mx, my, name, mob_id, 1, ""); @@ -5365,7 +5365,7 @@ int atcommand_effect(const int fd, struct map_session_data* sd, const char* comm return -1; } - clif_specialeffect(&sd->bl, type, flag); + clif_specialeffect(&sd->bl, type, (send_target)flag); clif_displaymessage(fd, msg_txt(229)); // Your effect has changed. return 0; } @@ -6997,9 +6997,8 @@ int atcommand_mobinfo(const int fd, struct map_session_data* sd, const char* com *------------------------------------------*/ int atshowmobs_timer(int tid, unsigned int tick, int id, int data) { - struct map_session_data *sd; - - if (!session[id] || (sd = session[id]->session_data) == NULL) + struct map_session_data* sd = map_id2sd(id); + if( sd == NULL ) return 0; clif_viewpoint(sd, 1, 2, 0, 0, data, 0xFFFFFF); diff --git a/src/map/battle.c b/src/map/battle.c index 6a60ea0a9..ae0c9d4a0 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -2754,11 +2754,11 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t int skillv; struct Damage wd; - nullpo_retr(0, src); - nullpo_retr(0, target); + nullpo_retr(ATK_NONE, src); + nullpo_retr(ATK_NONE, target); if (src->prev == NULL || target->prev == NULL) - return 0; + return ATK_NONE; sd = BL_CAST(BL_PC, src); tsd = BL_CAST(BL_PC, target); @@ -2782,7 +2782,7 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t damage = sd->equip_index[EQI_AMMO]; if (damage<0) { clif_arrow_fail(sd,0); - return 0; + return ATK_NONE; } //Ammo check by Ishizu-chan if (sd->inventory_data[damage]) @@ -2790,7 +2790,7 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t case W_BOW: if (sd->inventory_data[damage]->look != A_ARROW) { clif_arrow_fail(sd,0); - return 0; + return ATK_NONE; } break; case W_REVOLVER: @@ -2799,13 +2799,13 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t case W_SHOTGUN: if (sd->inventory_data[damage]->look != A_BULLET) { clif_arrow_fail(sd,0); - return 0; + return ATK_NONE; } break; case W_GRENADE: if (sd->inventory_data[damage]->look != A_GRENADE) { clif_arrow_fail(sd,0); - return 0; + return ATK_NONE; } break; } @@ -2831,7 +2831,7 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t clif_damage(src, target, tick, sstatus->amotion, 1, 0, 1, 0, 0); //Display MISS. status_change_end(target,SC_AUTOCOUNTER,-1); skill_attack(BF_WEAPON,target,target,src,KN_AUTOCOUNTER,skilllv,tick,0); - return 0; + return ATK_NONE; } } if (tsc->data[SC_BLADESTOP_WAIT] && !is_boss(src)) { @@ -2843,7 +2843,7 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t clif_damage(src, target, tick, sstatus->amotion, 1, 0, 1, 0, 0); //Display MISS. clif_bladestop(target,src,1); sc_start4(target, SC_BLADESTOP, 100, skilllv, 0, 0,(int)src, duration); - return 0; + return ATK_NONE; } } } @@ -2857,15 +2857,18 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t status_change_end(src,SC_SKILLRATE_UP,-1); } if (rand()%100 < triple_rate) - return skill_attack(BF_WEAPON,src,src,target,MO_TRIPLEATTACK,skillv,tick,0); + //FIXME: invalid return type! + return (damage_lv)skill_attack(BF_WEAPON,src,src,target,MO_TRIPLEATTACK,skillv,tick,0); } if (sc) { if (sc->data[SC_SACRIFICE]) - return skill_attack(BF_WEAPON,src,src,target,PA_SACRIFICE,sc->data[SC_SACRIFICE]->val1,tick,0); + //FIXME: invalid return type! + return (damage_lv)skill_attack(BF_WEAPON,src,src,target,PA_SACRIFICE,sc->data[SC_SACRIFICE]->val1,tick,0); if (sc->data[SC_MAGICALATTACK]) - return skill_attack(BF_MAGIC,src,src,target,NPC_MAGICALATTACK,sc->data[SC_MAGICALATTACK]->val1,tick,0); + //FIXME: invalid return type! + return (damage_lv)skill_attack(BF_MAGIC,src,src,target,NPC_MAGICALATTACK,sc->data[SC_MAGICALATTACK]->val1,tick,0); } wd = battle_calc_weapon_attack(src, target, 0, 0, flag); diff --git a/src/map/battle.h b/src/map/battle.h index 287b4ed61..c6c2eb2e9 100644 --- a/src/map/battle.h +++ b/src/map/battle.h @@ -5,11 +5,12 @@ #define _BATTLE_H_ // state of a single attack attempt; used in flee/def penalty calculations when mobbed -enum damage_lv { - ATK_LUCKY=1, // attack was lucky-dodged +typedef enum damage_lv { + ATK_NONE, // not an attack + ATK_LUCKY, // attack was lucky-dodged ATK_FLEE, // attack was dodged ATK_DEF // attack connected -}; +} damage_lv; // ダメージ struct Damage { diff --git a/src/map/chrif.c b/src/map/chrif.c index 7194819cf..7ef032f16 100644 --- a/src/map/chrif.c +++ b/src/map/chrif.c @@ -106,8 +106,9 @@ int other_mapserver_count=0; //Holds count of how many other map servers are onl //This define should spare writing the check in every function. [Skotlex] #define chrif_check(a) { if(!chrif_isconnected()) return a; } -struct auth_node* chrif_search(int account_id) { - return idb_get(auth_db, account_id); +struct auth_node* chrif_search(int account_id) +{ + return (struct auth_node*)idb_get(auth_db, account_id); } struct auth_node* chrif_auth_check(int account_id, int char_id, enum sd_state state) { @@ -1234,7 +1235,7 @@ int chrif_load_scdata(int fd) for (i = 0; i < count; i++) { data = (struct status_change_data*)RFIFOP(fd,14 + i*sizeof(struct status_change_data)); - status_change_start(&sd->bl, data->type, 10000, data->val1, data->val2, data->val3, data->val4, data->tick, 15); + status_change_start(&sd->bl, (sc_type)data->type, 10000, data->val1, data->val2, data->val3, data->val4, data->tick, 15); } #endif return 0; diff --git a/src/map/clif.c b/src/map/clif.c index a91c8d9ca..532d42ff1 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -678,7 +678,7 @@ static int clif_clearunit_delayed_sub(int tid, unsigned int tick, int id, int da int clif_clearunit_delayed(struct block_list* bl, unsigned int tick) { struct block_list *tbl; - tbl = aMalloc(sizeof (struct block_list)); + tbl = (struct block_list*)aMalloc(sizeof (struct block_list)); memcpy (tbl, bl, sizeof (struct block_list)); add_timer(tick, clif_clearunit_delayed_sub, (int)tbl, 0); return 0; @@ -1009,21 +1009,18 @@ static void clif_weather_check(struct map_session_data *sd) } } -int clif_weather(int m) +void clif_weather(int m) { - int i; - + struct s_mapiterator* iter; struct map_session_data *sd=NULL; - for(i = 0; i < fd_max; i++) { - if (session[i] && session[i]->func_parse == clif_parse && - (sd = session[i]->session_data) != NULL && - sd->state.active && sd->bl.m == m) { + iter = mapit_getallusers(); + for( sd = (struct map_session_data*)mapit_first(iter); mapit_exists(iter); sd = (struct map_session_data*)mapit_next(iter) ) + { + if( sd->bl.m == m ) clif_weather_check(sd); - } } - - return 0; + mapit_free(iter); } int clif_spawn(struct block_list *bl) @@ -2488,9 +2485,8 @@ void clif_changetraplook(struct block_list *bl,int val) } -//For the stupid cloth-dye bug. Resends the given view data -//to the area specified by bl. -void clif_refreshlook(struct block_list *bl,int id,int type,int val,int area) +//For the stupid cloth-dye bug. Resends the given view data to the area specified by bl. +void clif_refreshlook(struct block_list *bl,int id,int type,int val,enum send_target target) { unsigned char buf[32]; #if PACKETVER < 4 @@ -2498,14 +2494,14 @@ void clif_refreshlook(struct block_list *bl,int id,int type,int val,int area) WBUFL(buf,2)=id; WBUFB(buf,6)=type; WBUFB(buf,7)=val; - clif_send(buf,packet_len(0xc3),bl,area); + clif_send(buf,packet_len(0xc3),bl,target); #else WBUFW(buf,0)=0x1d7; WBUFL(buf,2)=id; WBUFB(buf,6)=type; WBUFW(buf,7)=val; WBUFW(buf,9)=0; - clif_send(buf,packet_len(0x1d7),bl,area); + clif_send(buf,packet_len(0x1d7),bl,target); #endif return; } @@ -6485,9 +6481,9 @@ int clif_guild_expulsion(struct map_session_data *sd,const char *name,const char nullpo_retr(0, sd); WBUFW(buf, 0)=0x15c; - safestrncpy(WBUFP(buf, 2),name,NAME_LENGTH); - safestrncpy(WBUFP(buf,26),mes,40); - safestrncpy(WBUFP(buf,66),"",NAME_LENGTH); // account name (not used for security reasons) + safestrncpy((char*)WBUFP(buf, 2),name,NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,26),mes,40); + safestrncpy((char*)WBUFP(buf,66),"",NAME_LENGTH); // account name (not used for security reasons) clif_send(buf,packet_len(0x15c),&sd->bl,GUILD); return 0; } @@ -6512,9 +6508,9 @@ int clif_guild_expulsionlist(struct map_session_data *sd) for(i=c=0;i<MAX_GUILDEXPULSION;i++){ struct guild_expulsion *e=&g->expulsion[i]; if(e->account_id>0){ - safestrncpy(WFIFOP(fd,4 + c*88),e->name,NAME_LENGTH); - safestrncpy(WFIFOP(fd,4 + c*88+24),"",24); // account name (not used for security reasons) - safestrncpy(WFIFOP(fd,4 + c*88+48),e->mes,40); + safestrncpy((char*)WFIFOP(fd,4 + c*88),e->name,NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd,4 + c*88+24),"",24); // account name (not used for security reasons) + safestrncpy((char*)WFIFOP(fd,4 + c*88+48),e->mes,40); c++; } } @@ -8263,7 +8259,7 @@ void clif_parse_MapMove(int fd, struct map_session_data *sd) /*========================================== * *------------------------------------------*/ -void clif_changed_dir(struct block_list *bl, int type) +void clif_changed_dir(struct block_list *bl, enum send_target target) { unsigned char buf[64]; @@ -8272,7 +8268,8 @@ void clif_changed_dir(struct block_list *bl, int type) WBUFW(buf,6) = bl->type==BL_PC?((TBL_PC*)bl)->head_dir:0; WBUFB(buf,8) = unit_getdir(bl); - clif_send(buf, packet_len(0x9c), bl, type); + clif_send(buf, packet_len(0x9c), bl, target); + if (disguised(bl)) { WBUFL(buf,2) = -bl->id; WBUFW(buf,6) = 0; @@ -9005,10 +9002,13 @@ void clif_parse_TradeRequest(int fd,struct map_session_data *sd) return; } - if(battle_config.basic_skill_check == 0 || pc_checkskill(sd,NV_BASIC) >= 1){ - trade_traderequest(sd,t_sd); - } else + if( battle_config.basic_skill_check && pc_checkskill(sd,NV_BASIC) < 1) + { clif_skill_fail(sd,1,0,0); + return; + } + + trade_traderequest(sd,t_sd); } /*========================================== @@ -9712,19 +9712,24 @@ void clif_parse_StoragePassword(int fd, struct map_session_data *sd) /*========================================== - * パーティを作る + * Party creation request + * S 00f9 <party name>.24S + * S 01e8 <party name>.24S <item1>.B <item2>.B *------------------------------------------*/ void clif_parse_CreateParty(int fd, struct map_session_data *sd) { if(map[sd->bl.m].flag.partylock) - { //Guild locked. + {// Party locked. clif_displaymessage(fd, msg_txt(227)); return; } - if (battle_config.basic_skill_check == 0 || pc_checkskill(sd,NV_BASIC) >= 7) { - party_create(sd,(char*)RFIFOP(fd,2),0,0); - } else + if( battle_config.basic_skill_check && pc_checkskill(sd,NV_BASIC) < 7 ) + { clif_skill_fail(sd,1,0,4); + return; + } + + party_create(sd,(char*)RFIFOP(fd,2),0,0); } /*========================================== @@ -9733,33 +9738,38 @@ void clif_parse_CreateParty(int fd, struct map_session_data *sd) void clif_parse_CreateParty2(int fd, struct map_session_data *sd) { if(map[sd->bl.m].flag.partylock) - { //Guild locked. + {// Party locked. clif_displaymessage(fd, msg_txt(227)); return; } - if (battle_config.basic_skill_check == 0 || pc_checkskill(sd,NV_BASIC) >= 7) - party_create(sd,(char*)RFIFOP(fd,2),RFIFOB(fd,26),RFIFOB(fd,27)); - else + if( battle_config.basic_skill_check && pc_checkskill(sd,NV_BASIC) < 7 ) + { clif_skill_fail(sd,1,0,4); + return; + } + + party_create(sd,(char*)RFIFOP(fd,2),RFIFOB(fd,26),RFIFOB(fd,27)); } /*========================================== - * パーティに勧誘 + * Party invitation request + * S 00fc <account ID>.L + * S 02c4 <char name>.24S *------------------------------------------*/ void clif_parse_PartyInvite(int fd, struct map_session_data *sd) { struct map_session_data *t_sd; if(map[sd->bl.m].flag.partylock) - { //Guild locked. + {// Party locked. clif_displaymessage(fd, msg_txt(227)); return; } t_sd = map_id2sd(RFIFOL(fd,2)); - // @noask [LuzZza] - if(t_sd && t_sd->state.noask) { + if(t_sd && t_sd->state.noask) + {// @noask [LuzZza] clif_noask_sub(sd, t_sd, 1); return; } @@ -9771,18 +9781,18 @@ void clif_parse_PartyInvite2(int fd, struct map_session_data *sd) { struct map_session_data *t_sd; char *name = (char*)RFIFOP(fd,2); - name[NAME_LENGTH]='\0'; + name[NAME_LENGTH-1] = '\0'; if(map[sd->bl.m].flag.partylock) - { //Guild locked. + {// Party locked. clif_displaymessage(fd, msg_txt(227)); return; } t_sd = map_nick2sd(name); - // @noask [LuzZza] - if(t_sd && t_sd->state.noask) { + if(t_sd && t_sd->state.noask) + {// @noask [LuzZza] clif_noask_sub(sd, t_sd, 1); return; } @@ -11710,7 +11720,7 @@ void clif_Auction_openwindow(struct map_session_data *sd) WFIFOSET(fd,12); } -void clif_Auction_results(struct map_session_data *sd, short count, short pages, unsigned char *buf) +void clif_Auction_results(struct map_session_data *sd, short count, short pages, uint8 *buf) { int i, fd = sd->fd, len = sizeof(struct auction_data); struct auction_data auction; @@ -11729,7 +11739,7 @@ void clif_Auction_results(struct map_session_data *sd, short count, short pages, k = 12 + (i * 83); WFIFOL(fd,k) = auction.auction_id; - safestrncpy(WFIFOP(fd,4+k), auction.seller_name, NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd,4+k), auction.seller_name, NAME_LENGTH); if( (item = itemdb_search(auction.item.nameid)) != NULL && item->view_id > 0 ) WFIFOW(fd,28+k) = item->view_id; @@ -11748,7 +11758,7 @@ void clif_Auction_results(struct map_session_data *sd, short count, short pages, WFIFOW(fd,45+k) = auction.item.card[3]; WFIFOL(fd,47+k) = auction.price; WFIFOL(fd,51+k) = auction.buynow; - safestrncpy(WFIFOP(fd,55+k), auction.buyer_name, NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd,55+k), auction.buyer_name, NAME_LENGTH); WFIFOL(fd,79+k) = auction.timestamp; } WFIFOSET(fd, 12 + (count * 83)); diff --git a/src/map/clif.h b/src/map/clif.h index 8c48b7277..d0a4fe4b4 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -56,7 +56,7 @@ struct s_packet_db { extern struct s_packet_db packet_db[MAX_PACKET_VER+1][MAX_PACKET_DB+1]; // local define -enum send_target { +typedef enum send_target { ALL_CLIENT, ALL_SAMEMAP, AREA, // area @@ -82,7 +82,7 @@ enum send_target { DUEL_WOS, CHAT_MAINCHAT, // everyone on main chat SELF, -}; +} send_target; int clif_setip(const char* ip); void clif_setbindip(const char* ip); @@ -132,7 +132,7 @@ void clif_sitting(struct block_list* bl); void clif_standing(struct block_list* bl); void clif_changelook(struct block_list *bl,int type,int val); // area void clif_changetraplook(struct block_list *bl,int val); // area -void clif_refreshlook(struct block_list *bl,int id,int type,int val,int area); //area specified in 'area' +void clif_refreshlook(struct block_list *bl,int id,int type,int val,enum send_target target); //area specified in 'target' int clif_arrowequip(struct map_session_data *sd,int val); //self int clif_arrow_fail(struct map_session_data *sd,int type); //self int clif_arrow_create_list(struct map_session_data *sd); //self @@ -262,7 +262,7 @@ int clif_item_skill(struct map_session_data *sd,int skillid,int skilllv); int clif_mvp_effect(struct map_session_data *sd); int clif_mvp_item(struct map_session_data *sd,int nameid); int clif_mvp_exp(struct map_session_data *sd, unsigned int exp); -void clif_changed_dir(struct block_list *bl, int area); +void clif_changed_dir(struct block_list *bl, enum send_target target); // vending void clif_openvendingreq(struct map_session_data* sd, int num); @@ -355,7 +355,7 @@ void clif_friendslist_reqack(struct map_session_data *sd, struct map_session_dat // [Valaris] int clif_mob_hp(struct mob_data *md); -int clif_weather(int m); // [Valaris] +void clif_weather(int m); // [Valaris] int clif_specialeffect(struct block_list* bl, int type, enum send_target target); // special effects [Valaris] void clif_specialeffect_single(struct block_list* bl, int type, int fd); int clif_message(struct block_list *bl, const char* msg); // messages (from mobs/npcs) [Valaris] @@ -409,7 +409,7 @@ void clif_Mail_refreshinbox(struct map_session_data *sd); void clif_Mail_getattachment(int fd, uint8 flag); // AUCTION SYSTEM void clif_Auction_openwindow(struct map_session_data *sd); -void clif_Auction_results(struct map_session_data *sd, short count, short pages, unsigned char *buf); +void clif_Auction_results(struct map_session_data *sd, short count, short pages, uint8 *buf); void clif_Auction_message(int fd, unsigned char flag); void clif_Auction_close(int fd, unsigned char flag); void clif_parse_Auction_cancelreg(int fd, struct map_session_data *sd); diff --git a/src/map/guild.c b/src/map/guild.c index ed35aaccb..8413c5c37 100644 --- a/src/map/guild.c +++ b/src/map/guild.c @@ -223,7 +223,7 @@ static int guild_read_castledb(void) /// lookup: guild id -> guild* struct guild* guild_search(int guild_id) { - return idb_get(guild_db,guild_id); + return (struct guild*)idb_get(guild_db,guild_id); } /// lookup: guild name -> guild* @@ -232,7 +232,7 @@ struct guild* guild_searchname(char* str) struct guild* g; DBIterator* iter = guild_db->iterator(guild_db); - for( g = iter->first(iter,NULL); iter->exists(iter); g = iter->next(iter,NULL) ) + for( g = (struct guild*)iter->first(iter,NULL); iter->exists(iter); g = (struct guild*)iter->next(iter,NULL) ) { if( strcmpi(g->name, str) == 0 ) break; @@ -245,7 +245,7 @@ struct guild* guild_searchname(char* str) /// lookup: castle id -> castle* struct guild_castle* guild_castle_search(int gcid) { - return idb_get(castle_db,gcid); + return (struct guild_castle*)idb_get(castle_db,gcid); } /// lookup: map index -> castle* @@ -254,7 +254,7 @@ struct guild_castle* guild_mapindex2gc(short mapindex) struct guild_castle* gc; DBIterator* iter = castle_db->iterator(castle_db); - for( gc = iter->first(iter,NULL); iter->exists(iter); gc = iter->next(iter,NULL) ) + for( gc = (struct guild_castle*)iter->first(iter,NULL); iter->exists(iter); gc = (struct guild_castle*)iter->next(iter,NULL) ) { if( gc->mapindex == mapindex ) break; @@ -460,7 +460,7 @@ int guild_npc_request_info(int guild_id,const char *event) ev=(struct eventlist *)aCalloc(sizeof(struct eventlist),1); memcpy(ev->name,event,strlen(event)); //The one in the db becomes the next event from this. - ev->next=idb_put(guild_infoevent_db,guild_id,ev); + ev->next = (struct eventlist*)idb_put(guild_infoevent_db,guild_id,ev); } return guild_request_info(guild_id); @@ -521,7 +521,8 @@ int guild_recv_info(struct guild *sg) nullpo_retr(0, sg); - if((g=idb_get(guild_db,sg->guild_id))==NULL){ + if((g = (struct guild*)idb_get(guild_db,sg->guild_id))==NULL) + { guild_new = true; g=(struct guild *)aCalloc(1,sizeof(struct guild)); idb_put(guild_db,sg->guild_id,g); @@ -588,7 +589,8 @@ int guild_recv_info(struct guild *sg) } // イベントの発生 - if( (ev=idb_remove(guild_infoevent_db,sg->guild_id))!=NULL ){ + if( (ev = (struct eventlist*)idb_remove(guild_infoevent_db,sg->guild_id))!=NULL ) + { while(ev){ npc_event_do(ev->name); ev2=ev->next; @@ -1141,7 +1143,7 @@ unsigned int guild_payexp(struct map_session_data *sd,unsigned int exp) exp = (unsigned int) exp * per / 100; //Otherwise tax everything. - c = guild_expcache_db->ensure(guild_expcache_db, i2key(sd->status.char_id), create_expcache, sd); + c = (struct guild_expcache*)guild_expcache_db->ensure(guild_expcache_db, i2key(sd->status.char_id), create_expcache, sd); if (c->exp > UINT_MAX - exp) c->exp = UINT_MAX; @@ -1161,7 +1163,7 @@ int guild_getexp(struct map_session_data *sd,int exp) if (sd->status.guild_id == 0 || (g = guild_search(sd->status.guild_id)) == NULL) return 0; - c = guild_expcache_db->ensure(guild_expcache_db, i2key(sd->status.char_id), create_expcache, sd); + c = (struct guild_expcache*)guild_expcache_db->ensure(guild_expcache_db, i2key(sd->status.char_id), create_expcache, sd); if (c->exp > UINT_MAX - exp) c->exp = UINT_MAX; else @@ -1676,10 +1678,10 @@ int guild_addcastleinfoevent(int castle_id,int index,const char *name) if( name==NULL || *name==0 ) return 0; - ev=(struct eventlist *)aMalloc(sizeof(struct eventlist)); + ev = (struct eventlist *)aMalloc(sizeof(struct eventlist)); memcpy(ev->name,name,sizeof(ev->name)); //The next event becomes whatever was currently stored. - ev->next= idb_put(guild_castleinfoevent_db,code,ev); + ev->next = (struct eventlist *)idb_put(guild_castleinfoevent_db,code,ev); return 0; } @@ -1720,7 +1722,9 @@ int guild_castledataloadack(int castle_id,int index,int value) ShowError("guild_castledataloadack ERROR!! (Not found index=%d)\n", index); return 0; } - if( (ev=idb_remove(guild_castleinfoevent_db,code))!=NULL ){ + + if( (ev = (struct eventlist *)idb_remove(guild_castleinfoevent_db,code))!=NULL ) + { while(ev){ npc_event_do(ev->name); ev2=ev->next; diff --git a/src/map/intif.c b/src/map/intif.c index 51bbd740b..b0013aa52 100644 --- a/src/map/intif.c +++ b/src/map/intif.c @@ -585,7 +585,7 @@ int intif_guild_leave(int guild_id,int account_id,int char_id,int flag,const cha WFIFOL(inter_fd, 6) = account_id; WFIFOL(inter_fd,10) = char_id; WFIFOB(inter_fd,14) = flag; - safestrncpy(WFIFOP(inter_fd,15),mes,40); + safestrncpy((char*)WFIFOP(inter_fd,15),mes,40); WFIFOSET(inter_fd,55); return 0; } @@ -1702,12 +1702,14 @@ int intif_Auction_requestlist(int char_id, short type, int price, const char* se static void intif_parse_Auction_results(int fd) { struct map_session_data *sd = map_charid2sd(RFIFOL(fd,4)); - short count = RFIFOW(fd,8), pages = RFIFOW(fd,10); + short count = RFIFOW(fd,8); + short pages = RFIFOW(fd,10); + uint8* data = RFIFOP(fd,12); if( sd == NULL ) return; - clif_Auction_results(sd, count, pages, (char *)RFIFOP(fd,12)); + clif_Auction_results(sd, count, pages, data); } int intif_Auction_register(struct auction_data *auction) diff --git a/src/map/itemdb.c b/src/map/itemdb.c index 7d2623fce..d8c767dc8 100644 --- a/src/map/itemdb.c +++ b/src/map/itemdb.c @@ -176,7 +176,7 @@ struct item_data* itemdb_exists(int nameid) if( nameid >= 0 && nameid < ARRAYLENGTH(itemdb_array) ) return itemdb_array[nameid]; - item = idb_get(itemdb_other,nameid); + item = (struct item_data*)idb_get(itemdb_other,nameid); if( item == &dummy_item ) return NULL;// dummy data, doesn't exist return item; @@ -279,16 +279,16 @@ struct item_data* itemdb_load(int nameid) if( id == NULL ) { key.i = nameid; - id = itemdb_array[nameid] = create_item_data(key, NULL); + id = itemdb_array[nameid] = (struct item_data*)create_item_data(key, NULL); } return id; } - id = idb_ensure(itemdb_other, nameid, create_item_data); + id = (struct item_data*)idb_ensure(itemdb_other, nameid, create_item_data); if( id == &dummy_item ) {// Remove dummy_item, replace by real data. key.i = nameid; - id = create_item_data(key, NULL); + id = (struct item_data*)create_item_data(key, NULL); idb_put(itemdb_other, nameid, id); } return id; @@ -314,7 +314,7 @@ struct item_data* itemdb_search(int nameid) key.i = nameid; return (struct item_data*)return_dummy_data(key, NULL); } - return idb_ensure(itemdb_other,nameid,return_dummy_data); + return (struct item_data*)idb_ensure(itemdb_other,nameid,return_dummy_data); } /*========================================== diff --git a/src/map/log.c b/src/map/log.c index 0483b6387..5cafcf719 100644 --- a/src/map/log.c +++ b/src/map/log.c @@ -426,9 +426,9 @@ int log_config_read(char *cfgName) if(sscanf(line, "%[^:]: %[^\r\n]", w1, w2) == 2) { if(strcmpi(w1,"enable_logs") == 0) { - log_config.enable_logs = (atoi(w2)); + log_config.enable_logs = (log_what)atoi(w2); if (log_config.enable_logs&1) //Log everything. - log_config.enable_logs=0xFFFFFFFF; + log_config.enable_logs = LOG_ALL; } else if(strcmpi(w1,"sql_logs") == 0) { log_config.sql_logs = (bool)atoi(w2); //start of common filter settings diff --git a/src/map/log.h b/src/map/log.h index 758bebd71..9745ce1f0 100644 --- a/src/map/log.h +++ b/src/map/log.h @@ -24,7 +24,7 @@ int log_mvpdrop(struct map_session_data *sd, int monster_id, int *log_mvp); int log_config_read(char *cfgName); -enum log_what { +typedef enum log_what { LOG_ALL = 0xFFF, LOG_TRADES = 0x002, LOG_VENDING = 0x004, @@ -36,7 +36,7 @@ enum log_what { LOG_USED_ITEMS = 0x100, // used by player LOG_MVP_PRIZE = 0x200, LOG_COMMAND_ITEMS = 0x400 // created/deleted through @/# commands -}; +} log_what; extern struct Log_Config { enum log_what enable_logs; diff --git a/src/map/map.c b/src/map/map.c index 83f6b855e..33a5343c4 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -951,7 +951,7 @@ int map_foreachinpath(int (*func)(struct block_list*,va_list),int m,int x0,int y if (length) { //Adjust final position to fit in the given area. //TODO: Find an alternate method which does not requires a square root calculation. - k = (int)sqrt(magnitude2); + k = (int)sqrt((float)magnitude2); mx1 = x0 + (x1 - x0)*length/k; my1 = y0 + (y1 - y0)*length/k; len_limit = MAGNITUDE2(x0,y0, mx1,my1); @@ -1449,7 +1449,7 @@ void map_addnickdb(int charid, const char* nick) if( map_charid2sd(charid) ) return;// already online - p = idb_ensure(nick_db, charid, create_charid2nick); + p = (struct charid2nick*)idb_ensure(nick_db, charid, create_charid2nick); safestrncpy(p->nick, nick, sizeof(p->nick)); while( p->requests ) @@ -1471,7 +1471,7 @@ void map_delnickdb(int charid, const char* name) struct charid_request* req; struct map_session_data* sd; - p = idb_remove(nick_db, charid); + p = (struct charid2nick*)idb_remove(nick_db, charid); if( p == NULL ) return; @@ -1734,7 +1734,7 @@ struct block_list * map_id2bl(int id) if(id >= 0 && id < ARRAYLENGTH(objects)) bl = objects[id]; else - bl = idb_get(id_db,id); + bl = (struct block_list*)idb_get(id_db,id); return bl; } @@ -2149,7 +2149,7 @@ int map_random_dir(struct block_list *bl, short *x, short *y) short yi = *y-bl->y; short i=0, j; int dist2 = xi*xi + yi*yi; - short dist = (short)sqrt(dist2); + short dist = (short)sqrt((float)dist2); short segment; if (dist < 1) dist =1; @@ -2158,7 +2158,7 @@ int map_random_dir(struct block_list *bl, short *x, short *y) j = rand()%8; //Pick a random direction segment = 1+(rand()%dist); //Pick a random interval from the whole vector in that direction xi = bl->x + segment*dirx[j]; - segment = (short)sqrt(dist2 - segment*segment); //The complement of the previously picked segment + segment = (short)sqrt((float)(dist2 - segment*segment)); //The complement of the previously picked segment yi = bl->y + segment*diry[j]; } while ( (map_getcell(bl->m,xi,yi,CELL_CHKNOPASS) || !path_search(NULL,bl->m,bl->x,bl->y,xi,yi,1,CELL_CHKNOREACH)) @@ -2385,7 +2385,7 @@ int map_eraseipport(unsigned short mapindex, uint32 ip, uint16 port) { struct map_data_other_server *mdos; - mdos = uidb_get(map_db,(unsigned int)mapindex); + mdos = (struct map_data_other_server*)uidb_get(map_db,(unsigned int)mapindex); if(!mdos || mdos->cell) //Map either does not exists or is a local map. return 0; @@ -2432,8 +2432,8 @@ int map_readfromcache(struct map_data *m, FILE *fp) m->ys = info.ys; size = info.xs*info.ys; - buf = aMalloc(info.len); // temp buffer to read the zipped map - buf2 = aMalloc(size); // temp buffer to unpack the data + buf = (unsigned char*)aMalloc(info.len); // temp buffer to read the zipped map + buf2 = (unsigned char*)aMalloc(size); // temp buffer to unpack the data CREATE(m->cell, struct mapcell, size); fread(buf, info.len, 1, fp); diff --git a/src/map/map.h b/src/map/map.h index bf168b20c..1dbc4581a 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -176,11 +176,12 @@ enum bl_type { BL_SKILL = 0x020, BL_NPC = 0x040, BL_CHAT = 0x080, + + BL_ALL = 0xFFF, }; //For common mapforeach calls. Since pets cannot be affected, they aren't included here yet. #define BL_CHAR (BL_PC|BL_MOB|BL_HOM) -#define BL_ALL 0xfff enum npc_subtype { WARP, SHOP, SCRIPT, CASHSHOP }; @@ -228,6 +229,7 @@ struct block_list { enum bl_type type; }; + // Mob List Held in memory for Dynamic Mobs [Wizputer] // Expanded to specify all mob-related spawn data by [Skotlex] struct spawn_data { @@ -248,6 +250,7 @@ struct spawn_data { + struct flooritem_data { struct block_list bl; unsigned char subx,suby; diff --git a/src/map/mercenary.c b/src/map/mercenary.c index 039a7f446..66658a1d9 100644 --- a/src/map/mercenary.c +++ b/src/map/mercenary.c @@ -606,7 +606,7 @@ int merc_hom_alloc(struct map_session_data *sd, struct s_homunculus *hom) intif_homunculus_requestdelete(hom->hom_id); return 1; } - sd->hd = hd = aCalloc(1,sizeof(struct homun_data)); + sd->hd = hd = (struct homun_data*)aCalloc(1,sizeof(struct homun_data)); hd->bl.type = BL_HOM; hd->bl.id = npc_get_new_npc_id(); diff --git a/src/map/mercenary.h b/src/map/mercenary.h index 2e90786cd..88692b4d1 100644 --- a/src/map/mercenary.h +++ b/src/map/mercenary.h @@ -7,18 +7,21 @@ #include "status.h" // struct status_data, struct status_change #include "unit.h" // struct unit_data +struct h_stats { + unsigned int HP, SP; + unsigned short str, agi, vit, int_, dex, luk; +}; + struct s_homunculus_db { int base_class, evo_class; char name[NAME_LENGTH]; - struct h_stats { - unsigned int HP, SP; - unsigned short str, agi, vit, int_, dex, luk; - } base, gmin, gmax, emin, emax; + struct h_stats base, gmin, gmax, emin, emax; int foodID ; int baseASPD ; long hungryDelay ; unsigned char element, race, base_size, evo_size; }; + extern struct s_homunculus_db homuncumlus_db[MAX_HOMUNCULUS_CLASS]; enum { HOMUNCULUS_CLASS, HOMUNCULUS_FOOD }; enum { diff --git a/src/map/mob.c b/src/map/mob.c index bd9ed5d43..6463c2103 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -209,7 +209,7 @@ int mob_parse_dataset(struct spawn_data *data) *------------------------------------------*/ struct mob_data* mob_spawn_dataset(struct spawn_data *data) { - struct mob_data *md = aCalloc(1, sizeof(struct mob_data)); + struct mob_data *md = (struct mob_data*)aCalloc(1, sizeof(struct mob_data)); md->bl.id= npc_get_new_npc_id(); md->bl.type = BL_MOB; md->bl.m = data->m; @@ -419,7 +419,7 @@ int mob_once_spawn(struct map_session_data* sd, int m, short x, short y, const c struct guild_castle* gc = guild_mapindex2gc(map[m].index); struct guild* g = gc?guild_search(gc->guild_id):NULL; if(gc) { - md->guardian_data = aCalloc(1, sizeof(struct guardian_data)); + md->guardian_data = (struct guardian_data*)aCalloc(1, sizeof(struct guardian_data)); md->guardian_data->castle = gc; md->guardian_data->number = MAX_GUARDIANS; md->guardian_data->guild_id = gc->guild_id; @@ -586,7 +586,7 @@ void mob_barricade_get(struct map_session_data *sd) return; iter = barricade_db->iterator(barricade_db); - for( barricade = iter->first(iter,&key); iter->exists(iter); barricade = iter->next(iter,&key) ) + for( barricade = (struct barricade_data *)iter->first(iter,&key); iter->exists(iter); barricade = (struct barricade_data *)iter->next(iter,&key) ) { if( sd->bl.m != barricade->m ) continue; @@ -655,7 +655,7 @@ void mod_barricade_clearall(void) int i; iter = barricade_db->iterator(barricade_db); - for( barricade = iter->first(iter,&key); iter->exists(iter); barricade = iter->next(iter,&key) ) + for( barricade = (struct barricade_data *)iter->first(iter,&key); iter->exists(iter); barricade = (struct barricade_data *)iter->next(iter,&key) ) { for( i = 0; i < barricade->count; i++ ) { @@ -789,8 +789,8 @@ int mob_spawn_guardian(const char* mapname, short x, short y, const char* mobnam } } - md= mob_spawn_dataset(&data); - md->guardian_data = aCalloc(1, sizeof(struct guardian_data)); + md = mob_spawn_dataset(&data); + md->guardian_data = (struct guardian_data*)aCalloc(1, sizeof(struct guardian_data)); md->guardian_data->number = guardian; md->guardian_data->guild_id = gc->guild_id; md->guardian_data->castle = gc; @@ -3539,7 +3539,7 @@ static bool mob_parse_dbrow(char** str) } if (mob_db_data[class_] == NULL) - mob_db_data[class_] = aCalloc(1, sizeof (struct mob_db)); + mob_db_data[class_] = (struct mob_db*)aCalloc(1, sizeof (struct mob_db)); db = mob_db_data[class_]; status = &db->status; @@ -4379,7 +4379,7 @@ void mob_clear_spawninfo() int do_init_mob(void) { //Initialize the mob database memset(mob_db_data,0,sizeof(mob_db_data)); //Clear the array - mob_db_data[0] = aCalloc(1, sizeof (struct mob_db)); //This mob is used for random spawns + mob_db_data[0] = (struct mob_db*)aCalloc(1, sizeof (struct mob_db)); //This mob is used for random spawns mob_makedummymobdb(0); //The first time this is invoked, it creates the dummy mob item_drop_ers = ers_new(sizeof(struct item_drop)); item_drop_list_ers = ers_new(sizeof(struct item_drop_list)); diff --git a/src/map/npc.c b/src/map/npc.c index 09f101983..51c95cee0 100644 --- a/src/map/npc.c +++ b/src/map/npc.c @@ -113,7 +113,7 @@ int npc_enable_sub(struct block_list *bl, va_list ap) int npc_enable(const char* name, int flag) { - struct npc_data* nd = strdb_get(npcname_db, name); + struct npc_data* nd = (struct npc_data*)strdb_get(npcname_db, name); if (nd==NULL) return 0; @@ -559,7 +559,7 @@ void npc_timerevent_quit(struct map_session_data* sd) char buf[NAME_LENGTH*2+3]; struct event_data *ev; snprintf(buf, ARRAYLENGTH(buf), "%s::OnTimerQuit", nd->exname); - ev = strdb_get(ev_db, buf); + ev = (struct event_data*)strdb_get(ev_db, buf); if(ev && ev->nd != nd) { ShowWarning("npc_timerevent_quit: Unable to execute \"OnTimerQuit\", two NPCs have the same event name [%s]!\n",buf); ev = NULL; @@ -659,7 +659,7 @@ int npc_event_sub(struct map_session_data* sd, struct event_data* ev, const char *------------------------------------------*/ int npc_event(struct map_session_data* sd, const char* eventname, int mob_kill) { - struct event_data* ev = strdb_get(ev_db, eventname); + struct event_data* ev = (struct event_data*)strdb_get(ev_db, eventname); struct npc_data *nd; int xs,ys; char mobevent[100]; @@ -676,7 +676,7 @@ int npc_event(struct map_session_data* sd, const char* eventname, int mob_kill) if (mob_kill) { strcpy( mobevent, eventname); strcat( mobevent, "::OnMyMobDead"); - ev = strdb_get(ev_db, mobevent); + ev = (struct event_data*)strdb_get(ev_db, mobevent); if (ev == NULL || (nd = ev->nd) == NULL) { ShowError("npc_event: (mob_kill) event not found [%s]\n", mobevent); return 0; @@ -2331,7 +2331,7 @@ static const char* npc_parse_mob(char* w1, char* w2, char* w3, char* w4, const c //Now that all has been validated. We allocate the actual memory //that the re-spawn data will use. - data = aMalloc(sizeof(struct spawn_data)); + data = (struct spawn_data*)aMalloc(sizeof(struct spawn_data)); memcpy(data, &mob, sizeof(struct spawn_data)); if( !battle_config.dynamic_mobs ) { @@ -2632,7 +2632,7 @@ void npc_parsesrcfile(const char* filepath) lines++; // w1<TAB>w2<TAB>w3<TAB>w4 - count = sv_parse(p, len+buffer-p, 0, '\t', pos, ARRAYLENGTH(pos), SV_TERMINATE_LF|SV_TERMINATE_CRLF); + count = sv_parse(p, len+buffer-p, 0, '\t', pos, ARRAYLENGTH(pos), (e_svopt)(SV_TERMINATE_LF|SV_TERMINATE_CRLF)); if( count < 0 ) { ShowError("npc_parsesrcfile: Parse error in file '%s', line '%d'. Stopping...\n", filepath, strline(buffer,p-buffer)); @@ -2810,7 +2810,7 @@ int npc_reload(void) //Remove all npcs/mobs. [Skotlex] iter = mapit_geteachiddb(); - for( bl = mapit_first(iter); mapit_exists(iter); bl = mapit_next(iter) ) + for( bl = (struct block_list*)mapit_first(iter); mapit_exists(iter); bl = (struct block_list*)mapit_next(iter) ) { switch(bl->type) { case BL_NPC: @@ -2954,7 +2954,7 @@ int do_init_npc(void) for( i = 1; i < MAX_NPC_CLASS; i++ ) npc_viewdb[i].class_ = i; - ev_db = strdb_alloc(DB_OPT_DUP_KEY|DB_OPT_RELEASE_DATA,2*NAME_LENGTH+2+1); + ev_db = strdb_alloc((DBOptions)(DB_OPT_DUP_KEY|DB_OPT_RELEASE_DATA),2*NAME_LENGTH+2+1); npcname_db = strdb_alloc(DB_OPT_BASE,NAME_LENGTH); timer_event_ers = ers_new(sizeof(struct timer_event_data)); diff --git a/src/map/party.c b/src/map/party.c index 8e97d1f05..2d81e155c 100644 --- a/src/map/party.c +++ b/src/map/party.c @@ -86,7 +86,7 @@ struct party_data* party_search(int party_id) { if(!party_id) return NULL; - return idb_get(party_db,party_id); + return (struct party_data*)idb_get(party_db,party_id); } /// Party data lookup using party name. @@ -95,7 +95,7 @@ struct party_data* party_searchname(const char* str) struct party_data* p; DBIterator* iter = party_db->iterator(party_db); - for( p = iter->first(iter,NULL); iter->exists(iter); p = iter->next(iter,NULL) ) + for( p = (struct party_data*)iter->first(iter,NULL); iter->exists(iter); p = (struct party_data*)iter->next(iter,NULL) ) { if( strncmpi(p->party.name,str,NAME_LENGTH) == 0 ) break; @@ -235,7 +235,7 @@ int party_recv_info(struct party *sp) nullpo_retr(0, sp); - p= idb_ensure(party_db, sp->party_id, create_party); + p = (struct party_data*)idb_ensure(party_db, sp->party_id, create_party); if (!p->party.party_id) //party just received. { party_new = true; @@ -726,7 +726,7 @@ int party_send_xy_timer(int tid,unsigned int tick,int id,int data) DBIterator* iter = party_db->iterator(party_db); // for each existing party, - for( p = iter->first(iter,NULL); iter->exists(iter); p = iter->next(iter,NULL) ) + for( p = (struct party_data*)iter->first(iter,NULL); iter->exists(iter); p = (struct party_data*)iter->next(iter,NULL) ) { int i; // for each member of this party, diff --git a/src/map/pc.c b/src/map/pc.c index 86d9f186d..838de158d 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -1339,7 +1339,7 @@ void pc_autoscript_clear(struct s_autoscript *scripts, int max) memset(scripts, 0, i*sizeof(struct s_autoscript)); } -static int pc_bonus_autospell_del(struct s_autospell *spell, int max, short id, short lv, short rate, short card_id) +static int pc_bonus_autospell_del(struct s_autospell* spell, int max, short id, short lv, short rate, short card_id) { int i, j; for(i=max-1; i>=0 && !spell[i].id; i--); @@ -1405,7 +1405,7 @@ static int pc_bonus_autospell(struct s_autospell *spell, int max, short id, shor return 1; } -static int pc_bonus_addeff(struct s_addeffect* effect, int max, short id, short rate, short arrow_rate, unsigned char flag) +static int pc_bonus_addeff(struct s_addeffect* effect, int max, enum sc_type id, short rate, short arrow_rate, unsigned char flag) { int i; if (!(flag&(ATF_SHORT|ATF_LONG))) @@ -2081,7 +2081,7 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val) ShowWarning("pc_bonus2 (Add Effect): %d is not supported.\n", type2); break; } - pc_bonus_addeff(sd->addeff, ARRAYLENGTH(sd->addeff), type2, + pc_bonus_addeff(sd->addeff, ARRAYLENGTH(sd->addeff), (sc_type)type2, sd->state.lr_flag!=2?val:0, sd->state.lr_flag==2?val:0, 0); break; case SP_ADDEFF2: @@ -2089,7 +2089,7 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val) ShowWarning("pc_bonus2 (Add Effect2): %d is not supported.\n", type2); break; } - pc_bonus_addeff(sd->addeff, ARRAYLENGTH(sd->addeff), type2, + pc_bonus_addeff(sd->addeff, ARRAYLENGTH(sd->addeff), (sc_type)type2, sd->state.lr_flag!=2?val:0, sd->state.lr_flag==2?val:0, ATF_SELF); break; case SP_RESEFF: @@ -2304,7 +2304,7 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val) break; } if(sd->state.lr_flag != 2) - pc_bonus_addeff(sd->addeff2, ARRAYLENGTH(sd->addeff2), type2, val, 0, 0); + pc_bonus_addeff(sd->addeff2, ARRAYLENGTH(sd->addeff2), (sc_type)type2, val, 0, 0); break; case SP_SKILL_ATK: if(sd->state.lr_flag == 2) @@ -2548,7 +2548,7 @@ int pc_bonus3(struct map_session_data *sd,int type,int type2,int type3,int val) ShowWarning("pc_bonus3 (Add Effect): %d is not supported.\n", type2); break; } - pc_bonus_addeff(sd->addeff, ARRAYLENGTH(sd->addeff), type2, + pc_bonus_addeff(sd->addeff, ARRAYLENGTH(sd->addeff), (sc_type)type2, sd->state.lr_flag!=2?type3:0, sd->state.lr_flag==2?type3:0, val); break; @@ -2558,7 +2558,7 @@ int pc_bonus3(struct map_session_data *sd,int type,int type2,int type3,int val) break; } if(sd->state.lr_flag != 2) - pc_bonus_addeff(sd->addeff2, ARRAYLENGTH(sd->addeff2), type2, type3, 0, val); + pc_bonus_addeff(sd->addeff2, ARRAYLENGTH(sd->addeff2), (sc_type)type2, type3, 0, val); break; default: @@ -3757,7 +3757,7 @@ int pc_checkskill(struct map_session_data *sd,int skill_id) *------------------------------------------*/ int pc_checkallowskill(struct map_session_data *sd) { - const int scw_list[] = { + const enum sc_type scw_list[] = { SC_TWOHANDQUICKEN, SC_ONEHAND, SC_AURABLADE, @@ -3767,7 +3767,7 @@ int pc_checkallowskill(struct map_session_data *sd) SC_ADRENALINE2, SC_GATLINGFEVER }; - const int scs_list[] = { + const enum sc_type scs_list[] = { SC_AUTOGUARD, SC_DEFENDER, SC_REFLECTSHIELD @@ -5624,12 +5624,12 @@ int pc_jobchange(struct map_session_data *sd,int job, int upper) if ((b_class&&MAPID_UPPERMASK) != (sd->class_&MAPID_UPPERMASK)) { //Things to remove when changing class tree. const int class_ = pc_class2idx(sd->status.class_); - int id; + short id; for(i = 0; i < MAX_SKILL_TREE && (id = skill_tree[class_][i].id) > 0; i++) { //Remove status specific to your current tree skills. - id = status_skill2sc(id); - if (id > SC_COMMON_MAX && sd->sc.data[id]) - status_change_end(&sd->bl, id, -1); + enum sc_type sc = status_skill2sc(id); + if (sc > SC_COMMON_MAX && sd->sc.data[sc]) + status_change_end(&sd->bl, sc, -1); } } diff --git a/src/map/pc.h b/src/map/pc.h index a7d30d1ce..245ecd686 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -45,6 +45,26 @@ struct weapon_data { } add_dmg[MAX_PC_BONUS]; }; +struct s_autospell { + short id, lv, rate, card_id, flag; +}; + +struct s_addeffect { + enum sc_type id; + short rate, arrow_rate; + unsigned char flag; +}; + +struct s_add_drop { + short id, group; + int race, rate; +}; + +struct s_autoscript { + unsigned short rate, flag; + struct script_code *script; +}; + struct map_session_data { struct block_list bl; struct unit_data ud; @@ -185,13 +205,8 @@ struct map_session_data { short sp_gain_race[RC_MAX]; // zeroed arrays end here. // zeroed structures start here - struct s_autospell{ - short id, lv, rate, card_id, flag; - } autospell[15], autospell2[15]; - struct s_addeffect{ - short id, rate, arrow_rate; - unsigned char flag; - } addeff[MAX_PC_BONUS], addeff2[MAX_PC_BONUS]; + struct s_autospell autospell[15], autospell2[15]; + struct s_addeffect addeff[MAX_PC_BONUS], addeff2[MAX_PC_BONUS]; struct { //skillatk raises bonus dmg% of skills, skillheal increases heal%, skillblown increases bonus blewcount for some skills. unsigned short id; short val; @@ -203,22 +218,15 @@ struct map_session_data { } hp_loss, sp_loss, hp_regen, sp_regen; struct { short class_, rate; - } add_def[MAX_PC_BONUS], add_mdef[MAX_PC_BONUS], - add_mdmg[MAX_PC_BONUS]; - struct s_add_drop { - short id, group; - int race, rate; - } add_drop[MAX_PC_BONUS]; + } add_def[MAX_PC_BONUS], add_mdef[MAX_PC_BONUS], add_mdmg[MAX_PC_BONUS]; + struct s_add_drop add_drop[MAX_PC_BONUS]; struct { int nameid; int rate; } itemhealrate[MAX_PC_BONUS]; // zeroed structures end here // manually zeroed structures start here. - struct s_autoscript { - unsigned short rate, flag; - struct script_code *script; - } autoscript[10], autoscript2[10]; //Auto script on attack, when attacked + struct s_autoscript autoscript[10], autoscript2[10]; //Auto script on attack, when attacked // manually zeroed structures end here. // zeroed vars start here. int arrow_atk,arrow_ele,arrow_cri,arrow_hit; @@ -382,15 +390,15 @@ enum weapon_type { W_DOUBLE_SA, // sword + axe }; -enum { +enum ammo_type { A_ARROW = 1, - A_DAGGER, //2 + A_DAGGER, //2 A_BULLET, //3 A_SHELL, //4 A_GRENADE, //5 A_SHURIKEN, //6 A_KUNAI //7 -} ammo_type; +}; //Equip position constants enum equip_pos { @@ -415,7 +423,7 @@ enum equip_pos { //Equip indexes constants. (eg: sd->equip_index[EQI_AMMO] returns the index //where the arrows are equipped) -enum { +enum equip_index { EQI_ACC_L = 0, EQI_ACC_R, EQI_SHOES, @@ -428,7 +436,7 @@ enum { EQI_HAND_R, EQI_AMMO, EQI_MAX -} equip_index_enum; +}; struct duel { int members_count; diff --git a/src/map/pet.h b/src/map/pet.h index eeb48f018..86b9080eb 100644 --- a/src/map/pet.h +++ b/src/map/pet.h @@ -33,6 +33,43 @@ extern struct s_pet_db pet_db[MAX_PET_DB]; enum { PET_CLASS,PET_CATCH,PET_EGG,PET_EQUIP,PET_FOOD }; +struct pet_recovery { //Stat recovery + enum sc_type type; //Status Change id + unsigned short delay; //How long before curing (secs). + int timer; +}; + +struct pet_bonus { + unsigned short type; //bStr, bVit? + unsigned short val; //Qty + unsigned short duration; //in secs + unsigned short delay; //Time before recasting (secs) + int timer; +}; + +struct pet_skill_attack { //Attack Skill + unsigned short id; + unsigned short lv; + unsigned short div_; //0 = Normal skill. >0 = Fixed damage (lv), fixed div_. + unsigned short rate; //Base chance of skill ocurrance (10 = 10% of attacks) + unsigned short bonusrate; //How being 100% loyal affects cast rate (10 = At 1000 intimacy->rate+10% +}; + +struct pet_skill_support { //Support Skill + unsigned short id; + unsigned short lv; + unsigned short hp; //Max HP% for skill to trigger (50 -> 50% for Magnificat) + unsigned short sp; //Max SP% for skill to trigger (100 = no check) + unsigned short delay; //Time (secs) between being able to recast. + int timer; +}; + +struct pet_loot { + struct item *item; + unsigned short count; + unsigned short weight; + unsigned short max; +}; struct pet_data { struct block_list bl; @@ -51,43 +88,11 @@ struct pet_data { unsigned int next_walktime,last_thinktime; short rate_fix; //Support rate as modified by intimacy (1000 = 100%) [Skotlex] - struct pet_recovery { //Stat recovery - unsigned short type; //Status Change id - unsigned short delay; //How long before curing (secs). - int timer; - } *recovery; //[Valaris] / Reimplemented by [Skotlex] - - struct pet_bonus { - unsigned short type; //bStr, bVit? - unsigned short val; //Qty - unsigned short duration; //in secs - unsigned short delay; //Time before recasting (secs) - int timer; - } *bonus; //[Valaris] / Reimplemented by [Skotlex] - - struct pet_skill_attack { //Attack Skill - unsigned short id; - unsigned short lv; - unsigned short div_; //0 = Normal skill. >0 = Fixed damage (lv), fixed div_. - unsigned short rate; //Base chance of skill ocurrance (10 = 10% of attacks) - unsigned short bonusrate; //How being 100% loyal affects cast rate (10 = At 1000 intimacy->rate+10% - } *a_skill; //[Skotlex] - - struct pet_skill_support { //Support Skill - unsigned short id; - unsigned short lv; - unsigned short hp; //Max HP% for skill to trigger (50 -> 50% for Magnificat) - unsigned short sp; //Max SP% for skill to trigger (100 = no check) - unsigned short delay; //Time (secs) between being able to recast. - int timer; - } *s_skill; //[Skotlex] - - struct pet_loot { - struct item *item; - unsigned short count; - unsigned short weight; - unsigned short max; - } *loot; //[Valaris] / Rewritten by [Skotlex] + struct pet_recovery* recovery; + struct pet_bonus* bonus; + struct pet_skill_attack* a_skill; + struct pet_skill_support* s_skill; + struct pet_loot* loot; struct map_session_data *msd; }; diff --git a/src/map/script.c b/src/map/script.c index 9aa292e63..339afb495 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -30,6 +30,7 @@ #include "mercenary.h" //[orn] #include "intif.h" #include "skill.h" +#include "status.h" #include "chat.h" #include "battle.h" #include "party.h" @@ -251,14 +252,16 @@ char mapregsql_db_index[32] = "index"; char mapregsql_db_value[32] = "value"; #endif -int get_com(unsigned char *script,int *pos); +c_op get_com(unsigned char *script,int *pos); int get_num(unsigned char *script,int *pos); -struct script_function { +typedef struct script_function { int (*func)(struct script_state *st); const char *name; const char *arg; -} buildin_func[]; +} script_function; + +extern script_function buildin_func[]; static struct linkdb_node *sleep_db; #define not_server_variable(prefix) ( (prefix) != '$' && (prefix) != '.') @@ -1851,7 +1854,7 @@ void script_error(const char *src,const char *file,int start_line, const char *e const char *linestart[5] = { NULL, NULL, NULL, NULL, NULL }; for(p=src;p && *p;line++){ - char *lineend=strchr(p,'\n'); + const char *lineend=strchr(p,'\n'); if(lineend==NULL || error_pos<lineend){ break; } @@ -2167,7 +2170,7 @@ void get_val(struct script_state* st, struct script_data* data) data->ref ? data->ref: name[1] == '@' ? st->stack->var_function:// instance/scope variable &st->script->script_vars;// npc variable - data->u.str = linkdb_search(n, (void*)reference_getuid(data)); + data->u.str = (char*)linkdb_search(n, (void*)reference_getuid(data)); } break; default: @@ -2234,7 +2237,7 @@ void get_val(struct script_state* st, struct script_data* data) return; } -void push_val2(struct script_stack* stack, int type, int val, struct linkdb_node** ref); +void push_val2(struct script_stack* stack, enum c_op type, int val, struct linkdb_node** ref); /// Retrieves the value of a reference identified by uid (variable, constant, param) /// The value is left in the top of the stack and needs to be removed manually. @@ -2271,7 +2274,7 @@ static int set_reg(struct script_state* st, TBL_PC* sd, int num, char* name, con char* p; struct linkdb_node** n; n = (ref) ? ref : (name[1] == '@') ? st->stack->var_function : &st->script->script_vars; - p = linkdb_erase(n, (void*)num); + p = (char*)linkdb_erase(n, (void*)num); if (p) aFree(p); if (str[0]) linkdb_insert(n, (void*)num, aStrdup(str)); } @@ -2423,7 +2426,7 @@ void stack_expand(struct script_stack* stack) #define push_val(stack,type,val) push_val2(stack, type, val, NULL) /// Pushes a value into the stack (with reference) -void push_val2(struct script_stack* stack, int type, int val, struct linkdb_node** ref) +void push_val2(struct script_stack* stack, enum c_op type, int val, struct linkdb_node** ref) { if( stack->sp >= stack->sp_max ) stack_expand(stack); @@ -2434,7 +2437,7 @@ void push_val2(struct script_stack* stack, int type, int val, struct linkdb_node } /// Pushes a string into the stack -void push_str(struct script_stack* stack, int type, char* str) +void push_str(struct script_stack* stack, enum c_op type, char* str) { if( stack->sp >= stack->sp_max ) stack_expand(stack); @@ -2549,35 +2552,18 @@ void script_free_code(struct script_code* code) /*========================================== * コマンドの読み取り *------------------------------------------*/ -static int unget_com_data=-1; -int get_com(unsigned char *script,int *pos) +c_op get_com(unsigned char *script,int *pos) { - int i,j; - if(unget_com_data>=0){ - i=unget_com_data; - unget_com_data=-1; - return i; - } + int i = 0, j = 0; + if(script[*pos]>=0x80){ return C_INT; } - i=0; j=0; while(script[*pos]>=0x40){ i=script[(*pos)++]<<j; j+=6; } - return i+(script[(*pos)++]<<j); -} - -/*========================================== - * コマンドのプッシュバック - *------------------------------------------*/ -void unget_com(int c) -{ - if(unget_com_data!=-1) - ShowError("unget_com can back only 1 data\n"); - - unget_com_data=c; + return (c_op)(i+(script[(*pos)++]<<j)); } /*========================================== @@ -2970,14 +2956,14 @@ void run_script(struct script_code *rootscript,int pos,int rid,int oid) //Resume script. st = sd->st; } else { - st = aCalloc(sizeof(struct script_state), 1); + st = (struct script_state*)aCalloc(sizeof(struct script_state), 1); // the script is different, make new script_state and stack - st->stack = aMalloc (sizeof(struct script_stack)); + st->stack = (struct script_stack*)aMalloc (sizeof(struct script_stack)); st->stack->sp=0; st->stack->sp_max=64; st->stack->stack_data = (struct script_data *)aCalloc(st->stack->sp_max,sizeof(st->stack->stack_data[0])); st->stack->defsp = st->stack->sp; - st->stack->var_function = aCalloc(1, sizeof(struct linkdb_node*)); + st->stack->var_function = (struct linkdb_node**)aCalloc(1, sizeof(struct linkdb_node*)); st->state = RUN; st->script = rootscript; } @@ -3056,7 +3042,6 @@ int run_script_timer(int tid, unsigned int tick, int id, int data) *------------------------------------------*/ void run_script_main(struct script_state *st) { - int c; int cmdcount=script_config.check_cmdcount; int gotocount=script_config.check_gotocount; TBL_PC *sd; @@ -3084,8 +3069,9 @@ void run_script_main(struct script_state *st) } else if(st->state != END) st->state = RUN; - while(st->state == RUN){ - c= get_com(st->script->script_buf,&st->pos); + while(st->state == RUN) + { + enum c_op c = get_com(st->script->script_buf,&st->pos); switch(c){ case C_EOL: if( stack->sp != stack->defsp ) @@ -3623,7 +3609,7 @@ int do_init_script() mapreg_db= idb_alloc(DB_OPT_BASE); mapregstr_db=idb_alloc(DB_OPT_RELEASE_DATA); userfunc_db=strdb_alloc(DB_OPT_DUP_KEY,0); - scriptlabel_db=strdb_alloc(DB_OPT_DUP_KEY|DB_OPT_ALLOW_NULL_DATA,50); + scriptlabel_db=strdb_alloc((DBOptions)(DB_OPT_DUP_KEY|DB_OPT_ALLOW_NULL_DATA),50); script_load_mapreg(); @@ -4039,7 +4025,7 @@ BUILDIN_FUNC(callfunc) struct script_code *scr, *oldscr; const char* str = script_getstr(st,2); - scr = strdb_get(userfunc_db, str); + scr = (struct script_code*)strdb_get(userfunc_db, str); if( !scr ) { ShowError("script:callfunc: function not found! [%s]\n", str); @@ -8097,12 +8083,12 @@ BUILDIN_FUNC(hideonnpc) BUILDIN_FUNC(sc_start) { struct block_list* bl; - int type; + enum sc_type type; int tick; int val1; int val4 = 0; - type = script_getnum(st,2); + type = (sc_type)script_getnum(st,2); tick = script_getnum(st,3); val1 = script_getnum(st,4); if( script_hasdata(st,5) ) @@ -8110,7 +8096,7 @@ BUILDIN_FUNC(sc_start) else bl = map_id2bl(st->rid); - if( tick == 0 && val1 > 0 && type >= 0 && type < SC_MAX && status_sc2skill(type) != 0 ) + if( tick == 0 && val1 > 0 && type > SC_NONE && type < SC_MAX && status_sc2skill(type) != 0 ) {// When there isn't a duration specified, try to get it from the skill_db tick = skill_get_time(status_sc2skill(type), val1); } @@ -8124,6 +8110,7 @@ BUILDIN_FUNC(sc_start) if( bl ) status_change_start(bl, type, 10000, val1, 0, 0, val4, tick, 2); + return 0; } @@ -8133,13 +8120,13 @@ BUILDIN_FUNC(sc_start) BUILDIN_FUNC(sc_start2) { struct block_list* bl; - int type; + enum sc_type type; int tick; int val1; int val4 = 0; int rate; - type = script_getnum(st,2); + type = (sc_type)script_getnum(st,2); tick = script_getnum(st,3); val1 = script_getnum(st,4); rate = script_getnum(st,5); @@ -8148,7 +8135,7 @@ BUILDIN_FUNC(sc_start2) else bl = map_id2bl(st->rid); - if( tick == 0 && val1 > 0 && type >= 0 && type < SC_MAX && status_sc2skill(type) != 0 ) + if( tick == 0 && val1 > 0 && type > SC_NONE && type < SC_MAX && status_sc2skill(type) != 0 ) {// When there isn't a duration specified, try to get it from the skill_db tick = skill_get_time(status_sc2skill(type), val1); } @@ -8172,14 +8159,14 @@ BUILDIN_FUNC(sc_start2) BUILDIN_FUNC(sc_start4) { struct block_list* bl; - int type; + enum sc_type type; int tick; int val1; int val2; int val3; int val4; - type = script_getnum(st,2); + type = (sc_type)script_getnum(st,2); tick = script_getnum(st,3); val1 = script_getnum(st,4); val2 = script_getnum(st,5); @@ -8190,7 +8177,7 @@ BUILDIN_FUNC(sc_start4) else bl = map_id2bl(st->rid); - if( tick == 0 && val1 > 0 && type >= 0 && type < SC_MAX && status_sc2skill(type) != 0 ) + if( tick == 0 && val1 > 0 && type > SC_NONE && type < SC_MAX && status_sc2skill(type) != 0 ) {// When there isn't a duration specified, try to get it from the skill_db tick = skill_get_time(status_sc2skill(type), val1); } @@ -8235,7 +8222,7 @@ BUILDIN_FUNC(sc_end) if (!sce) return 0; //This should help status_change_end force disabling the SC in case it has no limit. sce->val1 = sce->val2 = sce->val3 = sce->val4 = 0; - status_change_end(bl, type, INVALID_TIMER); + status_change_end(bl, (sc_type)type, INVALID_TIMER); } else status_change_clear(bl, 2);// remove all effects return 0; @@ -8257,7 +8244,7 @@ BUILDIN_FUNC(getscrate) bl = map_id2bl(st->rid); if (bl) - rate = status_get_sc_def(bl,type, 10000, 10000, 0); + rate = status_get_sc_def(bl, (sc_type)type, 10000, 10000, 0); script_pushint(st,rate); return 0; @@ -9193,7 +9180,7 @@ BUILDIN_FUNC(getcastlename) { const char* mapname = mapindex_getmapname(script_getstr(st,2),NULL); struct guild_castle* gc = guild_mapname2gc(mapname); - char* name = (gc) ? gc->castle_name : ""; + const char* name = (gc) ? gc->castle_name : ""; script_pushstrcopy(st,name); return 0; } @@ -10309,9 +10296,8 @@ BUILDIN_FUNC(petrecovery) } else //Init pd->recovery = (struct pet_recovery *)aMalloc(sizeof(struct pet_recovery)); - pd->recovery->type=script_getnum(st,2); + pd->recovery->type=(sc_type)script_getnum(st,2); pd->recovery->delay=script_getnum(st,3); - pd->recovery->timer=-1; return 0; @@ -10484,11 +10470,13 @@ BUILDIN_FUNC(npcskilleffect) BUILDIN_FUNC(specialeffect) { struct block_list *bl=map_id2bl(st->oid); + int type = script_getnum(st,2); + enum send_target target = script_hasdata(st,3) ? (send_target)script_getnum(st,3) : AREA; if(bl==NULL) return 0; - clif_specialeffect(bl,script_getnum(st,2), (script_hasdata(st,3)?script_getnum(st,3):AREA)); + clif_specialeffect(bl, type, target); return 0; } @@ -10496,11 +10484,13 @@ BUILDIN_FUNC(specialeffect) BUILDIN_FUNC(specialeffect2) { TBL_PC *sd=script_rid2sd(st); + int type = script_getnum(st,2); + enum send_target target = script_hasdata(st,3) ? (send_target)script_getnum(st,3) : AREA; if(sd==NULL) return 0; - clif_specialeffect(&sd->bl,script_getnum(st,2), (script_hasdata(st,3)?script_getnum(st,3):AREA)); + clif_specialeffect(&sd->bl, type, target); return 0; } @@ -11651,7 +11641,7 @@ BUILDIN_FUNC(checkcell) const char *map = script_getstr(st, 2); m = mapindex_name2id(map); if(m){ - script_pushint(st,map_getcell(m, script_getnum(st,3), script_getnum(st,4),script_getnum(st,5))); + script_pushint(st,map_getcell(m, script_getnum(st,3), script_getnum(st,4),(cell_chk)script_getnum(st,5))); } else { script_pushint(st,0); } @@ -11831,7 +11821,7 @@ BUILDIN_FUNC(escape_sql) str = script_getstr(st,2); len = strlen(str); - esc_str = aMallocA(len*2+1); + esc_str = (char*)aMallocA(len*2+1); #if defined(TXT_ONLY) jstrescapecpy(esc_str, str); #else diff --git a/src/map/script.h b/src/map/script.h index b9e5fdb01..943ce3a4d 100644 --- a/src/map/script.h +++ b/src/map/script.h @@ -25,7 +25,7 @@ extern struct Script_Config { const char *joblvup_event_name; } script_config; -enum c_op { +typedef enum c_op { C_NOP, // end of script/no value (nil) C_POS, C_INT, // number @@ -63,7 +63,7 @@ enum c_op { C_NOT, // ~ a C_R_SHIFT, // a >> b C_L_SHIFT // a << b -}; +} c_op; struct script_data { enum c_op type; diff --git a/src/map/skill.c b/src/map/skill.c index 3095874f4..df5c8deff 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -408,6 +408,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int struct status_data *sstatus, *tstatus; struct status_change *sc, *tsc; + enum sc_type status; int skill; int rate; @@ -523,9 +524,9 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int break; case AS_GRIMTOOTH: - skill = dstsd?SC_SLOWDOWN:SC_STOP; - if (!tsc->data[skill]) - sc_start(bl,skill,100,skilllv,skill_get_time2(skillid, skilllv)); + status = dstsd?SC_SLOWDOWN:SC_STOP; + if (!tsc->data[status]) + sc_start(bl,status,100,skilllv,skill_get_time2(skillid, skilllv)); break; case WZ_FIREPILLAR: @@ -705,9 +706,9 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int break; case LK_JOINTBEAT: - skill = status_skill2sc(skillid); + status = status_skill2sc(skillid); if (tsc->jb_flag) { - sc_start2(bl,skill,(5*skilllv+5),skilllv,tsc->jb_flag&BREAK_FLAGS,skill_get_time2(skillid,skilllv)); + sc_start2(bl,status,(5*skilllv+5),skilllv,tsc->jb_flag&BREAK_FLAGS,skill_get_time2(skillid,skilllv)); tsc->jb_flag = 0; } break; @@ -807,7 +808,8 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int skillid != CR_REFLECTSHIELD && skillid != ASC_BREAKER ){ //Trigger status effects - int i, type; + enum sc_type type; + int i; for(i=0; i < ARRAYLENGTH(sd->addeff) && sd->addeff[i].flag; i++) { rate = sd->addeff[i].rate; @@ -998,7 +1000,8 @@ int skill_counter_additional_effect (struct block_list* src, struct block_list * if(dstsd && attack_type&BF_WEAPON) { //Counter effects. - int i, type, time; + enum sc_type type; + int i, time; for(i=0; i < ARRAYLENGTH(dstsd->addeff2) && dstsd->addeff2[i].flag; i++) { rate = dstsd->addeff2[i].rate; @@ -1104,9 +1107,9 @@ int skill_counter_additional_effect (struct block_list* src, struct block_list * --------------------------------------------------------------------------*/ int skill_break_equip (struct block_list *bl, unsigned short where, int rate, int flag) { - const int where_list[4] = {EQP_WEAPON, EQP_ARMOR, EQP_SHIELD, EQP_HELM}; - const int scatk[4] = {SC_STRIPWEAPON, SC_STRIPARMOR, SC_STRIPSHIELD, SC_STRIPHELM}; - const int scdef[4] = {SC_CP_WEAPON, SC_CP_ARMOR, SC_CP_SHIELD, SC_CP_HELM}; + const int where_list[4] = {EQP_WEAPON, EQP_ARMOR, EQP_SHIELD, EQP_HELM}; + const enum sc_type scatk[4] = {SC_STRIPWEAPON, SC_STRIPARMOR, SC_STRIPSHIELD, SC_STRIPHELM}; + const enum sc_type scdef[4] = {SC_CP_WEAPON, SC_CP_ARMOR, SC_CP_SHIELD, SC_CP_HELM}; struct status_change *sc = status_get_sc(bl); int i,j; TBL_PC *sd; @@ -1188,9 +1191,9 @@ int skill_break_equip (struct block_list *bl, unsigned short where, int rate, in int skill_strip_equip(struct block_list *bl, unsigned short where, int rate, int lv, int time) { struct status_change *sc; - const int pos[4] = {EQP_WEAPON, EQP_SHIELD, EQP_ARMOR, EQP_HELM}; - const int sc_atk[4] = {SC_STRIPWEAPON, SC_STRIPSHIELD, SC_STRIPARMOR, SC_STRIPHELM}; - const int sc_def[4] = {SC_CP_WEAPON, SC_CP_SHIELD, SC_CP_ARMOR, SC_CP_HELM}; + const int pos[4] = {EQP_WEAPON, EQP_SHIELD, EQP_ARMOR, EQP_HELM}; + const enum sc_type sc_atk[4] = {SC_STRIPWEAPON, SC_STRIPSHIELD, SC_STRIPARMOR, SC_STRIPHELM}; + const enum sc_type sc_def[4] = {SC_CP_WEAPON, SC_CP_SHIELD, SC_CP_ARMOR, SC_CP_HELM}; int i; if (rand()%100 >= rate) @@ -2810,7 +2813,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in struct status_change_entry *tsce; struct mob_data *md; struct mob_data *dstmd; - int i,type; + int i; + enum sc_type type; if(skillid > 0 && skilllv <= 0) return 0; // celest @@ -3109,9 +3113,9 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in mob_class_change(dstmd,class_); if( tsc && dstmd->status.mode&MD_BOSS ) { - const int scs[] = { SC_QUAGMIRE, SC_PROVOKE, SC_ROKISWEIL, SC_GRAVITATION, SC_SUITON, SC_STRIPWEAPON, SC_STRIPSHIELD, SC_STRIPARMOR, SC_STRIPHELM, SC_BLADESTOP }; + const enum sc_type scs[] = { SC_QUAGMIRE, SC_PROVOKE, SC_ROKISWEIL, SC_GRAVITATION, SC_SUITON, SC_STRIPWEAPON, SC_STRIPSHIELD, SC_STRIPARMOR, SC_STRIPHELM, SC_BLADESTOP }; for (i = SC_COMMON_MIN; i <= SC_COMMON_MAX; i++) - if (tsc->data[i]) status_change_end(bl, i, -1); + if (tsc->data[i]) status_change_end(bl, (sc_type)i, -1); for (i = 0; i < ARRAYLENGTH(scs); i++) if (tsc->data[scs[i]]) status_change_end(bl, scs[i], -1); } @@ -3153,7 +3157,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in case CG_MARIONETTE: { struct status_change *sc= status_get_sc(src); - int type2 = SC_MARIONETTE2; + enum sc_type type2 = SC_MARIONETTE2; if(sc && tsc){ if (!sc->data[type] && !tsc->data[type2]) { @@ -4020,32 +4024,36 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in case RG_STRIPARMOR: case RG_STRIPHELM: case ST_FULLSTRIP: + { + unsigned short location = 0; i = 5+2*skilllv; if (sstatus->dex > tstatus->dex) i += (sstatus->dex - tstatus->dex)/5; + switch (skillid) { case RG_STRIPWEAPON: - type = EQP_WEAPON; + location = EQP_WEAPON; break; case RG_STRIPSHIELD: - type = EQP_SHIELD; + location = EQP_SHIELD; break; case RG_STRIPARMOR: - type = EQP_ARMOR; + location = EQP_ARMOR; break; case RG_STRIPHELM: - type = EQP_HELM; + location = EQP_HELM; break; case ST_FULLSTRIP: - type = EQP_WEAPON|EQP_SHIELD|EQP_ARMOR|EQP_HELM; + location = EQP_WEAPON|EQP_SHIELD|EQP_ARMOR|EQP_HELM; break; } //Note that Full Strip autospell doesn't use a duration if (!clif_skill_nodamage(src,bl,skillid,skilllv, - skill_strip_equip(bl, type, i, skilllv, + skill_strip_equip(bl, location, i, skilllv, sd&&skillid==ST_FULLSTRIP&&!pc_checkskill(sd, skillid)?0:skill_get_time(skillid,skilllv))) && sd) clif_skill_fail(sd,skillid,0,0); //Nothing stripped. + } break; case AM_BERSERKPITCHER: @@ -4139,7 +4147,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in case AM_CP_ARMOR: case AM_CP_HELM: { - int scid = SC_STRIPWEAPON + (skillid - AM_CP_WEAPON); + enum sc_type scid = (sc_type)(SC_STRIPWEAPON + (skillid - AM_CP_WEAPON)); if(tsc && tsc->data[scid]) status_change_end(bl, scid, -1 ); clif_skill_nodamage(src,bl,skillid,skilllv, @@ -4192,7 +4200,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in } if(status_isimmune(bl) || !tsc || !tsc->count) break; - for(i=0;i<SC_MAX;i++){ + for(i=0;i<SC_MAX;i++) + { if (!tsc->data[i]) continue; switch (i) { @@ -4217,7 +4226,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in continue; } if(i==SC_BERSERK) tsc->data[i]->val2=0; //Mark a dispelled berserk to avoid setting hp to 100 by setting hp penalty to 0. - status_change_end(bl,i,-1); + status_change_end(bl,(sc_type)i,-1); } break; } @@ -4446,7 +4455,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in if (i > SC_ASPDPOTION3) i = SC_ASPDPOTION3; clif_skill_nodamage(src,bl,skillid,skilllv, - sc_start(bl,i,100,skilllv,skilllv * 60000)); + sc_start(bl,(sc_type)i,100,skilllv,skilllv * 60000)); } break; @@ -4764,8 +4773,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in } for (i=0; i<4; i++) { if(tsc->data[SC_STRIPWEAPON + i]) - status_change_end(bl, SC_STRIPWEAPON + i, -1 ); - sc_start(bl,SC_CP_WEAPON + i,100,skilllv,skilltime); + status_change_end(bl, (sc_type)(SC_STRIPWEAPON + i), -1 ); + sc_start(bl,(sc_type)(SC_CP_WEAPON + i),100,skilllv,skilltime); } clif_skill_nodamage(src,bl,skillid,skilllv,1); } @@ -4831,7 +4840,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in break; case 7: // stop freeze or stoned { - int sc[] = { SC_STOP, SC_FREEZE, SC_STONE }; + enum sc_type sc[] = { SC_STOP, SC_FREEZE, SC_STONE }; sc_start(bl,sc[rand()%3],100,skilllv,skill_get_time2(skillid,skilllv)); } break; @@ -5120,7 +5129,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in case NPC_DRAGONFEAR: if (flag&1) { - const int sc[] = { SC_STUN, SC_CURSE, SC_SILENCE, SC_BLEEDING }; + const enum sc_type sc[] = { SC_STUN, SC_CURSE, SC_SILENCE, SC_BLEEDING }; i = rand()%ARRAYLENGTH(sc); sc_start(bl,sc[i],100,skilllv,skill_get_time2(skillid,i+1)); } else { @@ -5528,7 +5537,8 @@ int skill_castend_pos2(struct block_list* src, int x, int y, int skillid, int sk struct status_change* sc; struct status_change_entry *sce; struct skill_unit_group* sg; - int i,type; + enum sc_type type; + int i; //if(skilllv <= 0) return 0; if(skillid > 0 && skilllv <= 0) return 0; // celest @@ -6491,7 +6501,8 @@ static int skill_unit_onplace (struct skill_unit *src, struct block_list *bl, un struct block_list *ss; struct status_change *sc; struct status_change_entry *sce; - int type,skillid; + enum sc_type type; + int skillid; nullpo_retr(0, src); nullpo_retr(0, bl); @@ -6651,7 +6662,8 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns struct status_data *tstatus, *sstatus; struct status_change *tsc, *sc; struct skill_unit_group_tickset *ts; - int type, skillid; + enum sc_type type; + int skillid; int diff=0; nullpo_retr(0, src); @@ -6926,60 +6938,61 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns break; if (battle_check_target(ss,bl,BCT_PARTY)>0) { // Support Effect only on party, not guild + int heal; int i = rand()%13; // Positive buff count - type = skill_get_time2(sg->skill_id, sg->skill_lv); //Duration + int time = skill_get_time2(sg->skill_id, sg->skill_lv); //Duration switch (i) { case 0: // Heal 1~9999 HP - type = rand() %9999+1; - clif_skill_nodamage(ss,bl,AL_HEAL,type,1); - status_heal(bl,type,0,0); + heal = rand() %9999+1; + clif_skill_nodamage(ss,bl,AL_HEAL,heal,1); + status_heal(bl,heal,0,0); break; case 1: // End all negative status status_change_clear_buffs(bl,2); if (tsd) clif_gospel_info(tsd, 0x15); break; case 2: // Immunity to all status - sc_start(bl,SC_SCRESIST,100,100,type); + sc_start(bl,SC_SCRESIST,100,100,time); if (tsd) clif_gospel_info(tsd, 0x16); break; case 3: // MaxHP +100% - sc_start(bl,SC_INCMHPRATE,100,100,type); + sc_start(bl,SC_INCMHPRATE,100,100,time); if (tsd) clif_gospel_info(tsd, 0x17); break; case 4: // MaxSP +100% - sc_start(bl,SC_INCMSPRATE,100,100,type); + sc_start(bl,SC_INCMSPRATE,100,100,time); if (tsd) clif_gospel_info(tsd, 0x18); break; case 5: // All stats +20 - sc_start(bl,SC_INCALLSTATUS,100,20,type); + sc_start(bl,SC_INCALLSTATUS,100,20,time); if (tsd) clif_gospel_info(tsd, 0x19); break; case 6: // Level 10 Blessing - sc_start(bl,SC_BLESSING,100,10,type); + sc_start(bl,SC_BLESSING,100,10,time); break; case 7: // Level 10 Increase AGI - sc_start(bl,SC_INCREASEAGI,100,10,type); + sc_start(bl,SC_INCREASEAGI,100,10,time); break; case 8: // Enchant weapon with Holy element - sc_start(bl,SC_ASPERSIO,100,1,type); + sc_start(bl,SC_ASPERSIO,100,1,time); if (tsd) clif_gospel_info(tsd, 0x1c); break; case 9: // Enchant armor with Holy element - sc_start(bl,SC_BENEDICTIO,100,1,type); + sc_start(bl,SC_BENEDICTIO,100,1,time); if (tsd) clif_gospel_info(tsd, 0x1d); break; case 10: // DEF +25% - sc_start(bl,SC_INCDEFRATE,100,25,type); + sc_start(bl,SC_INCDEFRATE,100,25,time); if (tsd) clif_gospel_info(tsd, 0x1e); break; case 11: // ATK +100% - sc_start(bl,SC_INCATKRATE,100,100,type); + sc_start(bl,SC_INCATKRATE,100,100,time); if (tsd) clif_gospel_info(tsd, 0x1f); break; case 12: // HIT/Flee +50 - sc_start(bl,SC_INCHIT,100,50,type); - sc_start(bl,SC_INCFLEE,100,50,type); + sc_start(bl,SC_INCHIT,100,50,time); + sc_start(bl,SC_INCFLEE,100,50,time); if (tsd) clif_gospel_info(tsd, 0x20); break; } @@ -6987,35 +7000,35 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns else if (battle_check_target(&src->bl,bl,BCT_ENEMY)>0) { // Offensive Effect int i = rand()%9; // Negative buff count - type = skill_get_time2(sg->skill_id, sg->skill_lv); + int time = skill_get_time2(sg->skill_id, sg->skill_lv); switch (i) { case 0: // Deal 1~9999 damage skill_attack(BF_MISC,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0); break; case 1: // Curse - sc_start(bl,SC_CURSE,100,1,type); + sc_start(bl,SC_CURSE,100,1,time); break; case 2: // Blind - sc_start(bl,SC_BLIND,100,1,type); + sc_start(bl,SC_BLIND,100,1,time); break; case 3: // Poison - sc_start(bl,SC_POISON,100,1,type); + sc_start(bl,SC_POISON,100,1,time); break; case 4: // Level 10 Provoke - sc_start(bl,SC_PROVOKE,100,10,type); + sc_start(bl,SC_PROVOKE,100,10,time); break; case 5: // DEF -100% - sc_start(bl,SC_INCDEFRATE,100,-100,type); + sc_start(bl,SC_INCDEFRATE,100,-100,time); break; case 6: // ATK -100% - sc_start(bl,SC_INCATKRATE,100,-100,type); + sc_start(bl,SC_INCATKRATE,100,-100,time); break; case 7: // Flee -100% - sc_start(bl,SC_INCFLEERATE,100,-100,type); + sc_start(bl,SC_INCFLEERATE,100,-100,time); break; case 8: // Speed/ASPD -25% - sc_start4(bl,SC_GOSPEL,100,1,0,0,BCT_ENEMY,type); + sc_start4(bl,SC_GOSPEL,100,1,0,0,BCT_ENEMY,time); break; } } @@ -7063,7 +7076,7 @@ int skill_unit_onout (struct skill_unit *src, struct block_list *bl, unsigned in struct skill_unit_group *sg; struct status_change *sc; struct status_change_entry *sce; - int type; + enum sc_type type; nullpo_retr(0, src); nullpo_retr(0, bl); @@ -7110,7 +7123,7 @@ static int skill_unit_onleft (int skill_id, struct block_list *bl, unsigned int { struct status_change *sc; struct status_change_entry *sce; - int type; + enum sc_type type; sc = status_get_sc(bl); if (sc && !sc->count) diff --git a/src/map/status.c b/src/map/status.c index a87e2cbc4..47d2617b6 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -60,22 +60,22 @@ int current_equip_card_id; //To prevent card-stacking (from jA) [Skotlex] //we need it for new cards 15 Feb 2005, to check if the combo cards are insrerted into the CURRENT weapon only //to avoid cards exploits -static int SkillStatusChangeTable[MAX_SKILL]; // skill -> status -static int StatusIconChangeTable[SC_MAX]; // status -> icon -unsigned long StatusChangeFlagTable[SC_MAX]; // status -> flags -static int StatusSkillChangeTable[SC_MAX]; // status -> skill +static sc_type SkillStatusChangeTable[MAX_SKILL]; // skill -> status +static int StatusIconChangeTable[SC_MAX]; // status -> icon +unsigned long StatusChangeFlagTable[SC_MAX]; // status -> flags +static int StatusSkillChangeTable[SC_MAX]; // status -> skill -int status_skill2sc(int skill) +sc_type status_skill2sc(int skill) { int sk = skill_get_index(skill); if( sk == 0 ) { ShowError("status_skill2sc: Unsupported skill id %d\n", skill); - return -1; + return SC_NONE; } return SkillStatusChangeTable[sk]; } -int status_sc2skill(int sc) +int status_sc2skill(sc_type sc) { if( sc < 0 || sc >= SC_MAX ) { ShowError("status_skill2sc: Unsupported status change id %d\n", sc); @@ -87,7 +87,7 @@ int status_sc2skill(int sc) #define add_sc(skill,sc) set_sc(skill,sc,SI_BLANK,SCB_NONE) -static void set_sc(int skill, int sc, int icon, unsigned int flag) +static void set_sc(int skill, sc_type sc, int icon, unsigned int flag) { int sk = skill_get_index(skill); if( sk == 0 ) { @@ -105,7 +105,7 @@ static void set_sc(int skill, int sc, int icon, unsigned int flag) StatusIconChangeTable[sc] = icon; StatusChangeFlagTable[sc] |= flag; - if( SkillStatusChangeTable[sk] == -1 ) + if( SkillStatusChangeTable[sk] == SC_NONE ) SkillStatusChangeTable[sk] = sc; } @@ -115,7 +115,7 @@ void initChangeTables(void) for (i = 0; i < SC_MAX; i++) StatusIconChangeTable[i] = SI_BLANK; for (i = 0; i < MAX_SKILL; i++) - SkillStatusChangeTable[i] = -1; + SkillStatusChangeTable[i] = SC_NONE; memset(StatusSkillChangeTable, 0, sizeof(StatusSkillChangeTable)); memset(StatusChangeFlagTable, 0, sizeof(StatusChangeFlagTable)); @@ -407,21 +407,21 @@ void initChangeTables(void) set_sc( GD_REGENERATION , SC_REGENERATION , SI_BLANK , SCB_REGEN ); // Storing the target job rather than simply SC_SPIRIT simplifies code later on. - SkillStatusChangeTable[SL_ALCHEMIST] = MAPID_ALCHEMIST, - SkillStatusChangeTable[SL_MONK] = MAPID_MONK, - SkillStatusChangeTable[SL_STAR] = MAPID_STAR_GLADIATOR, - SkillStatusChangeTable[SL_SAGE] = MAPID_SAGE, - SkillStatusChangeTable[SL_CRUSADER] = MAPID_CRUSADER, - SkillStatusChangeTable[SL_SUPERNOVICE] = MAPID_SUPER_NOVICE, - SkillStatusChangeTable[SL_KNIGHT] = MAPID_KNIGHT, - SkillStatusChangeTable[SL_WIZARD] = MAPID_WIZARD, - SkillStatusChangeTable[SL_PRIEST] = MAPID_PRIEST, - SkillStatusChangeTable[SL_BARDDANCER] = MAPID_BARDDANCER, - SkillStatusChangeTable[SL_ROGUE] = MAPID_ROGUE, - SkillStatusChangeTable[SL_ASSASIN] = MAPID_ASSASSIN, - SkillStatusChangeTable[SL_BLACKSMITH] = MAPID_BLACKSMITH, - SkillStatusChangeTable[SL_HUNTER] = MAPID_HUNTER, - SkillStatusChangeTable[SL_SOULLINKER] = MAPID_SOUL_LINKER, + SkillStatusChangeTable[SL_ALCHEMIST] = (sc_type)MAPID_ALCHEMIST, + SkillStatusChangeTable[SL_MONK] = (sc_type)MAPID_MONK, + SkillStatusChangeTable[SL_STAR] = (sc_type)MAPID_STAR_GLADIATOR, + SkillStatusChangeTable[SL_SAGE] = (sc_type)MAPID_SAGE, + SkillStatusChangeTable[SL_CRUSADER] = (sc_type)MAPID_CRUSADER, + SkillStatusChangeTable[SL_SUPERNOVICE] = (sc_type)MAPID_SUPER_NOVICE, + SkillStatusChangeTable[SL_KNIGHT] = (sc_type)MAPID_KNIGHT, + SkillStatusChangeTable[SL_WIZARD] = (sc_type)MAPID_WIZARD, + SkillStatusChangeTable[SL_PRIEST] = (sc_type)MAPID_PRIEST, + SkillStatusChangeTable[SL_BARDDANCER] = (sc_type)MAPID_BARDDANCER, + SkillStatusChangeTable[SL_ROGUE] = (sc_type)MAPID_ROGUE, + SkillStatusChangeTable[SL_ASSASIN] = (sc_type)MAPID_ASSASSIN, + SkillStatusChangeTable[SL_BLACKSMITH] = (sc_type)MAPID_BLACKSMITH, + SkillStatusChangeTable[SL_HUNTER] = (sc_type)MAPID_HUNTER, + SkillStatusChangeTable[SL_SOULLINKER] = (sc_type)MAPID_SOUL_LINKER, //Status that don't have a skill associated. StatusIconChangeTable[SC_WEIGHT50] = SI_WEIGHT50; @@ -1350,7 +1350,7 @@ int status_calc_mob(struct mob_data* md, int first) return 0; } if (!md->base_status) - md->base_status = aCalloc(1, sizeof(struct status_data)); + md->base_status = (struct status_data*)aCalloc(1, sizeof(struct status_data)); status = md->base_status; memcpy(status, &md->db->status, sizeof(struct status_data)); @@ -4603,7 +4603,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val sc = status_get_sc(bl); status = status_get_status_data(bl); - if( type < 0 || type >= SC_MAX ) + if( type <= SC_NONE || type >= SC_MAX ) { ShowError("status_change_start: invalid status change (%d)!\n", type); return 0; @@ -5581,8 +5581,8 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val { //Try to inherit the status from the Crusader [Skotlex] //Ideally, we should calculate the remaining time and use that, but we'll trust that //once the Crusader's status changes, it will reflect on the others. - const int types[] = { SC_AUTOGUARD, SC_DEFENDER, SC_REFLECTSHIELD, SC_ENDURE }; - int type2; + const enum sc_type types[] = { SC_AUTOGUARD, SC_DEFENDER, SC_REFLECTSHIELD, SC_ENDURE }; + enum sc_type type2; int i = map_flag_gvg(bl->m)?2:3; while (i >= 0) { type2 = types[i]; @@ -6166,7 +6166,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val int status_change_clear(struct block_list* bl, int type) { struct status_change* sc; - enum sc_type i; + int i; sc = status_get_sc(bl); @@ -6200,7 +6200,7 @@ int status_change_clear(struct block_list* bl, int type) continue; } - status_change_end(bl, i, INVALID_TIMER); + status_change_end(bl, (sc_type)i, INVALID_TIMER); if( type == 1 && sc->data[i] ) { //If for some reason status_change_end decides to still keep the status when quitting. [Skotlex] @@ -6442,7 +6442,7 @@ int status_change_end(struct block_list* bl, enum sc_type type, int tid) case SC_MARIONETTE2: /// Marionette target if (sce->val1) { // check for partner and end their marionette status as well - int type2 = (type == SC_MARIONETTE) ? SC_MARIONETTE2 : SC_MARIONETTE; + enum sc_type type2 = (type == SC_MARIONETTE) ? SC_MARIONETTE2 : SC_MARIONETTE; struct block_list *pbl = map_id2bl(sce->val1); struct status_change* sc2 = pbl?status_get_sc(pbl):NULL; @@ -6728,7 +6728,7 @@ int kaahi_heal_timer(int tid, unsigned int tick, int id, int data) *------------------------------------------*/ int status_change_timer(int tid, unsigned int tick, int id, int data) { - enum sc_type type = data; + enum sc_type type = (sc_type)data; struct block_list *bl; struct map_session_data *sd; struct status_data *status; @@ -7074,7 +7074,7 @@ int status_change_timer_sub(struct block_list* bl, va_list ap) struct block_list* src = va_arg(ap,struct block_list*); struct status_change_entry* sce = va_arg(ap,struct status_change_entry*); - enum sc_type type = va_arg(ap,enum sc_type); + enum sc_type type = (sc_type)va_arg(ap,int); //gcc: enum args get promoted to int unsigned int tick = va_arg(ap,unsigned int); if (status_isdead(bl)) @@ -7129,7 +7129,7 @@ int status_change_timer_sub(struct block_list* bl, va_list ap) *------------------------------------------*/ int status_change_clear_buffs (struct block_list* bl, int type) { - enum sc_type i; + int i; struct status_change *sc= status_get_sc(bl); if (!sc || !sc->count) @@ -7139,7 +7139,7 @@ int status_change_clear_buffs (struct block_list* bl, int type) for( i = SC_COMMON_MIN; i <= SC_COMMON_MAX; i++ ) { if(sc->data[i]) - status_change_end(bl,i,-1); + status_change_end(bl,(sc_type)i,-1); } for( i = SC_COMMON_MAX+1; i < SC_MAX; i++ ) @@ -7206,7 +7206,7 @@ int status_change_clear_buffs (struct block_list* bl, int type) continue; break; } - status_change_end(bl,i,-1); + status_change_end(bl,(sc_type)i,-1); } return 0; } diff --git a/src/map/status.h b/src/map/status.h index 52274b66f..5011eada5 100644 --- a/src/map/status.h +++ b/src/map/status.h @@ -18,7 +18,9 @@ extern unsigned long StatusChangeFlagTable[]; // Status changes listing. These code are for use by the server. -enum sc_type { +typedef enum sc_type { + SC_NONE = -1, + //First we enumerate common status ailments which are often used around. SC_STONE = 0, SC_COMMON_MIN = 0, // begin @@ -290,7 +292,7 @@ enum sc_type { SC_SPCOST_RATE, SC_COMMONSC_RESIST, SC_MAX, //Automatically updated max, used in for's to check we are within bounds. -}; +} sc_type; //Numerates the Number for the status changes (client-dependent), imported from jA enum si_type { @@ -683,8 +685,8 @@ struct status_change { }; // for looking up associated data -int status_skill2sc(int skill); -int status_sc2skill(int sc); +sc_type status_skill2sc(int skill); +int status_sc2skill(sc_type sc); int status_damage(struct block_list *src,struct block_list *target,int hp,int sp, int walkdelay, int flag); //Define for standard HP damage attacks. diff --git a/src/map/storage.c b/src/map/storage.c index 06c052d74..c2e4bf5f7 100644 --- a/src/map/storage.c +++ b/src/map/storage.c @@ -106,13 +106,13 @@ static void* create_storage(DBKey key, va_list args) } struct storage *account2storage(int account_id) { - return idb_ensure(storage_db,account_id,create_storage); + return (struct storage*)idb_ensure(storage_db,account_id,create_storage); } // Just to ask storage, without creation struct storage *account2storage2(int account_id) { - return idb_get(storage_db, account_id); + return (struct storage*)idb_get(storage_db, account_id); } int storage_delete(int account_id) @@ -141,7 +141,7 @@ int storage_storageopen(struct map_session_data *sd) return 1; } - if((stor = idb_get(storage_db,sd->status.account_id)) == NULL) + if((stor = (struct storage*)idb_get(storage_db,sd->status.account_id)) == NULL) { //Request storage. intif_request_storage(sd->status.account_id); return 2; @@ -478,7 +478,7 @@ struct guild_storage *guild2storage(int guild_id) struct guild_storage *guild2storage2(int guild_id) { //For just locating a storage without creating one. [Skotlex] - return idb_get(guild_storage_db,guild_id); + return (struct guild_storage*)idb_get(guild_storage_db,guild_id); } int guild_storage_delete(int guild_id) |