summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt5
-rwxr-xr-xconfigure36
-rw-r--r--configure.in30
-rw-r--r--doc/script_commands.txt2
-rw-r--r--src/map/map.c8
-rw-r--r--src/map/map.h4
-rw-r--r--src/map/mob.c26
-rw-r--r--src/map/mob.h2
-rw-r--r--src/map/party.c6
-rw-r--r--src/map/party.h2
-rw-r--r--src/map/pc.c14
-rw-r--r--src/map/pet.c14
12 files changed, 88 insertions, 61 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index 0c13a3bd2..076c32904 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -4,9 +4,12 @@ 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.
2007/09/27
+ * Loot code using charid's instead of id's in pick priority.
+ * configure script using svn:eol-style LF and require mysql/pcre when
+ --with-mysql/pcre is used.
* Reimplemented mmo_char_fromsql using sql statements. (fixes bugreport:93)
* Fixed buildin_gethominfo not being included in the script engine. (bugreport:124)
- * homunculus_evolution -> homevolution in script_commands.txt. (bugreport:125)
+ * homunculus_evolution -> homevolution in script_commands.txt.
* Deleted item DEFAULT from item_db.txt and regenerated item_db.sql. (bugreport:103)
* Skip empty lines and give more feedback (for invalid lines) when reading
item_db.txt/item_db2.txt. [FlavioJS]
diff --git a/configure b/configure
index 6f6028911..78bfd9ec3 100755
--- a/configure
+++ b/configure
@@ -1,5 +1,5 @@
#! /bin/sh
-# From configure.in Revision: 11259 .
+# From configure.in Revision: 11312 .
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.61.
#
@@ -1713,15 +1713,16 @@ if test "${with_mysql+set}" = set; then
withval=$with_mysql;
if test "$withval" = "no" ; then
want_mysql="no"
- elif test "$withval" = "yes" ; then
- want_mysql="yes"
else
want_mysql="yes"
- MYSQL_CONFIG_HOME="$withval"
+ require_mysql="yes"
+ if test "$withval" != "yes" ; then
+ MYSQL_CONFIG_HOME="$withval"
+ fi
fi
else
- want_mysql="yes"
+ want_mysql="yes" require_mysql="no"
fi
@@ -1736,15 +1737,16 @@ if test "${with_pcre+set}" = set; then
withval=$with_pcre;
if test "$withval" = "no" ; then
want_pcre="no"
- elif test "$withval" = "yes" ; then
- want_pcre="yes"
else
want_pcre="yes"
- PCRE_HOME="$withval"
+ require_pcre="yes"
+ if test "$withval" != "yes" ; then
+ PCRE_HOME="$withval"
+ fi
fi
else
- want_pcre="yes"
+ want_pcre="yes" require_pcre="no"
fi
@@ -3861,8 +3863,14 @@ echo "$as_me: error: $MYSQL_CONFIG_HOME reported that MySQL was compiled in 64bi
else
{ echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6; }
- { echo "$as_me:$LINENO: disabling MySQL (optional)" >&5
+ if test "$require_mysql" = "yes" ; then
+ { { echo "$as_me:$LINENO: error: MySQL not found (requested)" >&5
+echo "$as_me: error: MySQL not found (requested)" >&2;}
+ { (exit 1); exit 1; }; }
+ else
+ { echo "$as_me:$LINENO: disabling MySQL (optional)" >&5
echo "$as_me: disabling MySQL (optional)" >&6;}
+ fi
fi
fi
@@ -4034,8 +4042,14 @@ echo "${ECHO_T}yes" >&6; }
else
{ echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6; }
- { echo "$as_me:$LINENO: disabling PCRE (optional)" >&5
+ if test "$require_pcre" = "yes" ; then
+ { { echo "$as_me:$LINENO: error: PCRE not found (requested)" >&5
+echo "$as_me: error: PCRE not found (requested)" >&2;}
+ { (exit 1); exit 1; }; }
+ else
+ { echo "$as_me:$LINENO: disabling PCRE (optional)" >&5
echo "$as_me: disabling PCRE (optional)" >&6;}
+ fi
fi
fi
diff --git a/configure.in b/configure.in
index 8e5cec894..092e22f3a 100644
--- a/configure.in
+++ b/configure.in
@@ -23,14 +23,15 @@ AC_ARG_WITH(
[
if test "$withval" = "no" ; then
want_mysql="no"
- elif test "$withval" = "yes" ; then
- want_mysql="yes"
else
want_mysql="yes"
- MYSQL_CONFIG_HOME="$withval"
+ require_mysql="yes"
+ if test "$withval" != "yes" ; then
+ MYSQL_CONFIG_HOME="$withval"
+ fi
fi
],
- [want_mysql="yes"]
+ [want_mysql="yes" require_mysql="no"]
)
@@ -46,14 +47,15 @@ AC_ARG_WITH(
[
if test "$withval" = "no" ; then
want_pcre="no"
- elif test "$withval" = "yes" ; then
- want_pcre="yes"
else
want_pcre="yes"
- PCRE_HOME="$withval"
+ require_pcre="yes"
+ if test "$withval" != "yes" ; then
+ PCRE_HOME="$withval"
+ fi
fi
],
- [want_pcre="yes"]
+ [want_pcre="yes" require_pcre="no"]
)
@@ -176,7 +178,11 @@ else
fi
else
AC_MSG_RESULT([no])
- AC_MSG_NOTICE([disabling MySQL (optional)])
+ if test "$require_mysql" = "yes" ; then
+ AC_MSG_ERROR([MySQL not found (requested)])
+ else
+ AC_MSG_NOTICE([disabling MySQL (optional)])
+ fi
fi
fi
@@ -219,7 +225,11 @@ else
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
- AC_MSG_NOTICE([disabling PCRE (optional)])
+ if test "$require_pcre" = "yes" ; then
+ AC_MSG_ERROR([PCRE not found (requested)])
+ else
+ AC_MSG_NOTICE([disabling PCRE (optional)])
+ fi
fi
fi
diff --git a/doc/script_commands.txt b/doc/script_commands.txt
index c236adbb7..c19ad9716 100644
--- a/doc/script_commands.txt
+++ b/doc/script_commands.txt
@@ -4590,7 +4590,7 @@ summon "--ja--",-1;
---------------------------------------
-* homunculus_evolution;
+*homevolution;
This command will try to evolve the current player's homunculus.
If it doesn't work, the /swt emoticon is shown.
diff --git a/src/map/map.c b/src/map/map.c
index a60e059b4..668929dfc 100644
--- a/src/map/map.c
+++ b/src/map/map.c
@@ -1549,7 +1549,7 @@ int map_search_freecell(struct block_list *src, int m, short *x,short *y, int rx
* item_dataはamount以外をcopyする
* type flag: &1 MVP item. &2 do stacking check.
*------------------------------------------*/
-int map_addflooritem(struct item *item_data,int amount,int m,int x,int y,int first_id,int second_id,int third_id,int flags)
+int map_addflooritem(struct item *item_data,int amount,int m,int x,int y,int first_charid,int second_charid,int third_charid,int flags)
{
int r;
struct flooritem_data *fitem=NULL;
@@ -1572,11 +1572,11 @@ int map_addflooritem(struct item *item_data,int amount,int m,int x,int y,int fir
return 0;
}
- fitem->first_get_id = first_id;
+ fitem->first_get_charid = first_charid;
fitem->first_get_tick = gettick() + (flags&1 ? battle_config.mvp_item_first_get_time : battle_config.item_first_get_time);
- fitem->second_get_id = second_id;
+ fitem->second_get_charid = second_charid;
fitem->second_get_tick = fitem->first_get_tick + (flags&1 ? battle_config.mvp_item_second_get_time : battle_config.item_second_get_time);
- fitem->third_get_id = third_id;
+ fitem->third_get_charid = third_charid;
fitem->third_get_tick = fitem->second_get_tick + (flags&1 ? battle_config.mvp_item_third_get_time : battle_config.item_third_get_time);
memcpy(&fitem->item_data,item_data,sizeof(*item_data));
diff --git a/src/map/map.h b/src/map/map.h
index cdae79a78..d894dffa9 100644
--- a/src/map/map.h
+++ b/src/map/map.h
@@ -1127,7 +1127,7 @@ struct flooritem_data {
struct block_list bl;
unsigned char subx,suby;
int cleartimer;
- int first_get_id,second_get_id,third_get_id;
+ int first_get_charid,second_get_charid,third_get_charid;
unsigned int first_get_tick,second_get_tick,third_get_tick;
struct item item_data;
};
@@ -1325,7 +1325,7 @@ int map_addnpc(int,struct npc_data *);
int map_clearflooritem_timer(int,unsigned int,int,int);
int map_removemobs_timer(int,unsigned int,int,int);
#define map_clearflooritem(id) map_clearflooritem_timer(0,0,id,1)
-int map_addflooritem(struct item *item_data,int amount,int m,int x,int y,int first_id,int second_id,int third_id,int flags);
+int map_addflooritem(struct item *item_data,int amount,int m,int x,int y,int first_charid,int second_charid,int third_charid,int flags);
// キャラid=>キャラ名 変換関連
void map_addnickdb(int charid, const char* nick);
diff --git a/src/map/mob.c b/src/map/mob.c
index 07fc2db22..8f45a1fc1 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -1502,7 +1502,7 @@ static int mob_delay_item_drop(int tid, unsigned int tick, int id, int data)
while (ditem) {
map_addflooritem(&ditem->item_data,ditem->item_data.amount,
list->m,list->x,list->y,
- list->first_id,list->second_id,list->third_id,0);
+ list->first_charid,list->second_charid,list->third_charid,0);
ditem_prev = ditem;
ditem = ditem->next;
ers_free(item_drop_ers, ditem_prev);
@@ -1528,16 +1528,16 @@ static void mob_item_drop(struct mob_data *md, struct item_drop_list *dlist, str
log_pick_mob(md, "M", ditem->item_data.nameid, -ditem->item_data.amount, NULL);
}
- sd = map_id2sd(dlist->first_id);
- if( sd == NULL ) sd = map_id2sd(dlist->second_id);
- if( sd == NULL ) sd = map_id2sd(dlist->third_id);
+ sd = map_charid2sd(dlist->first_charid);
+ if( sd == NULL ) sd = map_charid2sd(dlist->second_charid);
+ if( sd == NULL ) sd = map_charid2sd(dlist->third_charid);
if( sd && drop_rate <= sd->state.autoloot
#ifdef AUTOLOOT_DISTANCE
&& check_distance_blxy(&sd->bl, dlist->x, dlist->y, AUTOLOOT_DISTANCE)
#endif
) { //Autoloot.
if (party_share_loot(party_search(sd->status.party_id),
- sd, &ditem->item_data, sd->bl.id) == 0
+ sd, &ditem->item_data, sd->status.char_id) == 0
) {
ers_free(item_drop_ers, ditem);
return;
@@ -1986,11 +1986,11 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
dlist->m = md->bl.m;
dlist->x = md->bl.x;
dlist->y = md->bl.y;
- dlist->first_id = (mvp_sd ? mvp_sd->bl.id : 0);
- dlist->second_id = (second_sd ? second_sd->bl.id : 0);
- dlist->third_id = (third_sd ? third_sd->bl.id : 0);
+ dlist->first_charid = (mvp_sd ? mvp_sd->status.char_id : 0);
+ dlist->second_charid = (second_sd ? second_sd->status.char_id : 0);
+ dlist->third_charid = (third_sd ? third_sd->status.char_id : 0);
dlist->item = NULL;
-
+
for (i = 0; i < MAX_MOB_DROP; i++)
{
if (md->db->dropitem[i].nameid <= 0)
@@ -2094,9 +2094,9 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
dlist->m = md->bl.m;
dlist->x = md->bl.x;
dlist->y = md->bl.y;
- dlist->first_id = (mvp_sd ? mvp_sd->bl.id : 0);
- dlist->second_id = (second_sd ? second_sd->bl.id : 0);
- dlist->third_id = (third_sd ? third_sd->bl.id : 0);
+ dlist->first_charid = (mvp_sd ? mvp_sd->status.char_id : 0);
+ dlist->second_charid = (second_sd ? second_sd->status.char_id : 0);
+ dlist->third_charid = (third_sd ? third_sd->status.char_id : 0);
dlist->item = NULL;
for(i = 0; i < md->lootitem_count; i++)
mob_item_drop(md, dlist, mob_setlootitem(&md->lootitem[i]), 1, 10000);
@@ -2163,7 +2163,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
if((temp = pc_additem(mvp_sd,&item,1)) != 0) {
clif_additem(sd,0,0,temp);
- map_addflooritem(&item,1,mvp_sd->bl.m,mvp_sd->bl.x,mvp_sd->bl.y,mvp_sd->bl.id,(second_sd?second_sd->bl.id:0),(third_sd?third_sd->bl.id:0),1);
+ map_addflooritem(&item,1,mvp_sd->bl.m,mvp_sd->bl.x,mvp_sd->bl.y,mvp_sd->status.char_id,(second_sd?second_sd->status.char_id:0),(third_sd?third_sd->status.char_id:0),1);
}
if(log_config.enable_logs&0x200) {//Logs items, MVP prizes [Lupus]
diff --git a/src/map/mob.h b/src/map/mob.h
index a3b589964..367640e07 100644
--- a/src/map/mob.h
+++ b/src/map/mob.h
@@ -143,7 +143,7 @@ struct item_drop {
};
struct item_drop_list {
int m, x, y; // coordinates
- int first_id, second_id, third_id; // id's of players with higher pickup priority
+ int first_charid, second_charid, third_charid; // charid's of players with higher pickup priority
struct item_drop* item; // linked list of drops
};
diff --git a/src/map/party.c b/src/map/party.c
index 020d02e22..3cac19240 100644
--- a/src/map/party.c
+++ b/src/map/party.c
@@ -763,12 +763,12 @@ int party_exp_share(struct party_data* p, struct block_list* src, unsigned int b
return 0;
}
-//Does party loot. first holds the id of the player who has time priority to take the item.
-int party_share_loot(struct party_data* p, struct map_session_data* sd, struct item* item_data, int first)
+//Does party loot. first_charid holds the charid of the player who has time priority to take the item.
+int party_share_loot(struct party_data* p, struct map_session_data* sd, struct item* item_data, int first_charid)
{
TBL_PC* target = NULL;
int i;
- if (p && p->party.item&2 && (first || !(battle_config.party_share_type&1)))
+ if (p && p->party.item&2 && (first_charid || !(battle_config.party_share_type&1)))
{
//item distribution to party members.
if (battle_config.party_share_type&2)
diff --git a/src/map/party.h b/src/map/party.h
index cb38c9d10..b3a5b9a4c 100644
--- a/src/map/party.h
+++ b/src/map/party.h
@@ -44,7 +44,7 @@ int party_check_conflict(struct map_session_data *sd);
int party_skill_check(struct map_session_data *sd, int party_id, int skillid, int skilllv);
int party_send_xy_clear(struct party_data *p);
int party_exp_share(struct party_data *p,struct block_list *src,unsigned int base_exp,unsigned int job_exp,int zeny);
-int party_share_loot(struct party_data* p, struct map_session_data* sd, struct item* item_data, int first);
+int party_share_loot(struct party_data* p, struct map_session_data* sd, struct item* item_data, int first_charid);
int party_send_dot_remove(struct map_session_data *sd);
int party_sub_count(struct block_list *bl, va_list ap);
int party_foreachsamemap(int (*func)(struct block_list *,va_list),struct map_session_data *sd,int type,...);
diff --git a/src/map/pc.c b/src/map/pc.c
index 185641915..aafc2260b 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -2919,9 +2919,9 @@ int pc_takeitem(struct map_session_data *sd,struct flooritem_data *fitem)
if (sd->status.party_id)
p = party_search(sd->status.party_id);
- if(fitem->first_get_id > 0 && fitem->first_get_id != sd->bl.id)
+ if(fitem->first_get_charid > 0 && fitem->first_get_charid != sd->status.char_id)
{
- first_sd = map_id2sd(fitem->first_get_id);
+ first_sd = map_charid2sd(fitem->first_get_charid);
if(DIFF_TICK(tick,fitem->first_get_tick) < 0) {
if (!(p && p->party.item&1 &&
first_sd && first_sd->status.party_id == sd->status.party_id
@@ -2929,9 +2929,9 @@ int pc_takeitem(struct map_session_data *sd,struct flooritem_data *fitem)
return 0;
}
else
- if(fitem->second_get_id > 0 && fitem->second_get_id != sd->bl.id)
+ if(fitem->second_get_charid > 0 && fitem->second_get_charid != sd->status.char_id)
{
- second_sd = map_id2sd(fitem->second_get_id);
+ second_sd = map_charid2sd(fitem->second_get_charid);
if(DIFF_TICK(tick, fitem->second_get_tick) < 0) {
if(!(p && p->party.item&1 &&
((first_sd && first_sd->status.party_id == sd->status.party_id) ||
@@ -2940,9 +2940,9 @@ int pc_takeitem(struct map_session_data *sd,struct flooritem_data *fitem)
return 0;
}
else
- if(fitem->third_get_id > 0 && fitem->third_get_id != sd->bl.id)
+ if(fitem->third_get_charid > 0 && fitem->third_get_charid != sd->status.char_id)
{
- third_sd = map_id2sd(fitem->third_get_id);
+ third_sd = map_charid2sd(fitem->third_get_charid);
if(DIFF_TICK(tick,fitem->third_get_tick) < 0) {
if(!(p && p->party.item&1 &&
((first_sd && first_sd->status.party_id == sd->status.party_id) ||
@@ -2956,7 +2956,7 @@ int pc_takeitem(struct map_session_data *sd,struct flooritem_data *fitem)
}
//This function takes care of giving the item to whoever should have it, considering party-share options.
- if ((flag = party_share_loot(p,sd,&fitem->item_data, fitem->first_get_id))) {
+ if ((flag = party_share_loot(p,sd,&fitem->item_data, fitem->first_get_charid))) {
clif_additem(sd,0,0,flag);
return 1;
}
diff --git a/src/map/pet.c b/src/map/pet.c
index ac369bff5..0b7da5da2 100644
--- a/src/map/pet.c
+++ b/src/map/pet.c
@@ -997,14 +997,14 @@ static int pet_ai_sub_hard_lootsearch(struct block_list *bl,va_list ap)
struct pet_data* pd;
struct flooritem_data *fitem = (struct flooritem_data *)bl;
struct block_list **target;
- int sd_id =0;
+ int sd_charid =0;
pd=va_arg(ap,struct pet_data *);
target=va_arg(ap,struct block_list**);
- sd_id = fitem->first_get_id;
+ sd_charid = fitem->first_get_charid;
- if(sd_id && sd_id != pd->msd->bl.id)
+ if(sd_charid && sd_charid != pd->msd->status.char_id)
return 0;
if(unit_can_reach_bl(&pd->bl,bl, pd->db->range2, 1, NULL, NULL) &&
@@ -1028,7 +1028,7 @@ static int pet_delay_item_drop(int tid,unsigned int tick,int id,int data)
while (ditem) {
map_addflooritem(&ditem->item_data,ditem->item_data.amount,
list->m,list->x,list->y,
- list->first_id,list->second_id,list->third_id,0);
+ list->first_charid,list->second_charid,list->third_charid,0);
ditem_prev = ditem;
ditem = ditem->next;
ers_free(item_drop_ers, ditem_prev);
@@ -1049,9 +1049,9 @@ int pet_lootitem_drop(struct pet_data *pd,struct map_session_data *sd)
dlist->m = pd->bl.m;
dlist->x = pd->bl.x;
dlist->y = pd->bl.y;
- dlist->first_id = 0;
- dlist->second_id = 0;
- dlist->third_id = 0;
+ dlist->first_charid = 0;
+ dlist->second_charid = 0;
+ dlist->third_charid = 0;
dlist->item = NULL;
for(i=0;i<pd->loot->count;i++) {