diff options
-rw-r--r-- | Changelog-Trunk.txt | 2 | ||||
-rw-r--r-- | src/char_sql/int_homun.c | 4 | ||||
-rw-r--r-- | src/map/chat.c | 2 | ||||
-rw-r--r-- | src/map/pc.c | 40 |
4 files changed, 19 insertions, 29 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 08dc6789c..0d48f491b 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -4,6 +4,8 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. 2008/03/06 + * Fixed non-chatroom owners being able to kick others from the chatroom. + [Skotlex] * Fixed a crash when a homun kills a mvp and the char that did the most damage is unable to carry the mvp reward (bugreport:1114) 2008/03/05 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; } } } |