From 2462d4ff90d5444883f4981f0229e223fbf80057 Mon Sep 17 00:00:00 2001 From: skotlex Date: Thu, 6 Mar 2008 19:43:37 +0000 Subject: - Corrected pc_checkitem not behaving correctly when you had more than one equip with a restricted card. - Fixed non-chatroom owners being able to kick others from the chatroom. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@12310 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/char_sql/int_homun.c | 4 ++-- src/map/chat.c | 2 +- src/map/pc.c | 40 ++++++++++++++-------------------------- 3 files changed, 17 insertions(+), 29 deletions(-) (limited to 'src') diff --git a/src/char_sql/int_homun.c b/src/char_sql/int_homun.c index df08484ab..4e596ef28 100644 --- a/src/char_sql/int_homun.c +++ b/src/char_sql/int_homun.c @@ -42,7 +42,7 @@ int mapif_info_homunculus(int fd, int account_id, struct s_homunculus *hd) WFIFOW(fd,0) = 0x3891; WFIFOW(fd,2) = sizeof(struct s_homunculus)+9; WFIFOL(fd,4) = account_id; - WFIFOB(fd,8) = 1; // account loaded with success + WFIFOB(fd,8) = 1; // success memcpy(WFIFOP(fd,9), hd, sizeof(struct s_homunculus)); WFIFOSET(fd, sizeof(struct s_homunculus)+9); @@ -219,7 +219,7 @@ int mapif_load_homunculus(int fd) Sql_GetData(sql_handle, 0, &data, NULL); i = atoi(data); if( i < HM_SKILLBASE || i >= HM_SKILLBASE + MAX_HOMUNSKILL ) - continue;// invalid guild skill + continue;// invalid skill id i = i - HM_SKILLBASE; homun_pt->hskill[i].id = (unsigned short)atoi(data); // lv diff --git a/src/map/chat.c b/src/map/chat.c index a01356205..19f265b27 100644 --- a/src/map/chat.c +++ b/src/map/chat.c @@ -273,7 +273,7 @@ int chat_kickchat(struct map_session_data* sd, const char* kickusername) cd = (struct chat_data *)map_id2bl(sd->chatID); - if( !cd ) + if( cd==NULL || (struct block_list *)sd != cd->owner ) return -1; ARR_FIND( 0, cd->users, i, strncmp(cd->usersd[i]->status.name, kickusername, NAME_LENGTH) == 0 ); diff --git a/src/map/pc.c b/src/map/pc.c index 1a88acf02..b0d6cf5b2 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -6564,37 +6564,25 @@ int pc_checkitem(struct map_session_data *sd) if(sd->status.inventory[i].nameid==0) continue; - if(sd->status.inventory[i].equip & ~pc_equippoint(sd,i)) { + + if(!sd->status.inventory[i].equip) + continue; + + if (sd->status.inventory[i].equip&~pc_equippoint(sd,i)) { sd->status.inventory[i].equip=0; calc_flag = 1; + continue; } - //?備制限チェック - if(sd->status.inventory[i].equip && it) { - if (map[sd->bl.m].flag.pvp && it->flag.no_equip&1) - { //PVP check for forbiden items. optimized by [Lupus] - sd->status.inventory[i].equip=0; - calc_flag = 1; - } else - if (map_flag_gvg(sd->bl.m) && it->flag.no_equip&2) - { //GvG optimized by [Lupus] - sd->status.inventory[i].equip=0; - calc_flag = 1; - } else - if(map[sd->bl.m].flag.restricted && it->flag.no_equip&map[sd->bl.m].zone) - { // Restricted zone by [Komurka] - sd->status.inventory[i].equip=0; - calc_flag = 1; - } - if (!calc_flag) { //Check cards - int flag; - flag = (map[sd->bl.m].flag.restricted?map[sd->bl.m].zone:0) + if(it) { + //check for forbiden items. + int flag = + (map[sd->bl.m].flag.restricted?map[sd->bl.m].zone:0) | (map[sd->bl.m].flag.pvp?1:0) | (map_flag_gvg(sd->bl.m)?2:0); - if (flag && !pc_isAllowedCardOn(sd,it->slot,i,flag)) - { - sd->status.inventory[i].equip=0; - calc_flag = 1; - } + if (flag && (it->flag.no_equip&flag || !pc_isAllowedCardOn(sd,it->slot,i,flag))) + { + sd->status.inventory[i].equip=0; + calc_flag = 1; } } } -- cgit v1.2.3-70-g09d2