summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt2
-rw-r--r--src/char_sql/int_homun.c4
-rw-r--r--src/map/chat.c2
-rw-r--r--src/map/pc.c40
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;
}
}
}