Various fixs
Fix bugreport:8418 (possible mapcrash from custom instance script) Fix bugreport:8439 (pc_bonus_item_drop typos) thx to Baalberith Fix some errors detected by cppcheck upd install.sh (leftover of svn and wrong simlink)
This commit is contained in:
parent
b8f6c37f5a
commit
d6caec1c51
32
install.sh
32
install.sh
@ -2,18 +2,36 @@
|
|||||||
#source var/function
|
#source var/function
|
||||||
. ./function.sh
|
. ./function.sh
|
||||||
|
|
||||||
|
#read -p "WARNING: This target is experimental. Press Ctrl+C to cancel or Enter to continue." readEnterKey
|
||||||
|
|
||||||
|
# NOTE: This requires GNU getopt. On Mac OS X and FreeBSD, you have to install this
|
||||||
|
# separately; see below.
|
||||||
|
TEMP=`getopt -o d: -l destdir: -- "$@"`
|
||||||
|
if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
|
||||||
|
# Note the quotes around `$TEMP': they are essential!
|
||||||
|
eval set -- "$TEMP"
|
||||||
|
|
||||||
|
eval set -- "$TEMP"
|
||||||
|
while [ $# -gt 0 ]
|
||||||
|
do
|
||||||
|
case "$1" in
|
||||||
|
(-d | --destdir) PKG_PATH="$2"; shift;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "destdir = $PKG_PATH "
|
||||||
check_inst_right
|
check_inst_right
|
||||||
check_files
|
check_files
|
||||||
read -p "WARNING: This target dis experimental. Press Ctrl+C to cancel or Enter to continue." readEnterKey
|
|
||||||
mkdir -p $PKG_PATH/bin/
|
mkdir -p $PKG_PATH/bin/
|
||||||
mkdir -p $PKG_PATH/etc/$PKG/
|
mkdir -p $PKG_PATH/etc/$PKG/conf
|
||||||
mkdir -p $PKG_PATH/var/$PKG/
|
mkdir -p $PKG_PATH/var/$PKG/log
|
||||||
|
|
||||||
#we copy all file into opt/ dir and treat dir like normal unix arborescence
|
#we copy all file into opt/ dir and treat dir like normal unix arborescence
|
||||||
rsync -r --exclude .svn db/ $PKG_PATH/var/$PKG/db
|
cp -r db/ $PKG_PATH/var/$PKG/db
|
||||||
rsync -r --exclude .svn log/ $PKG_PATH/var/$PKG/log
|
if [ -d log ]; then cp -r log/ $PKG_PATH/var/$PKG/log; fi
|
||||||
rsync -r --exclude .svn conf/ $PKG_PATH/etc/$PKG/conf
|
cp -r conf/ $PKG_PATH/etc/$PKG/conf
|
||||||
rsync -r --exclude .svn npc/ $PKG_PATH/npc
|
cp -r npc/ $PKG_PATH/npc
|
||||||
cp athena-start $PKG_PATH/
|
cp athena-start $PKG_PATH/
|
||||||
mv *-server* $PKG_PATH/bin/
|
mv *-server* $PKG_PATH/bin/
|
||||||
|
|
||||||
|
@ -5350,7 +5350,7 @@ int char_lan_config_read(const char *lancfgName)
|
|||||||
if ((line[0] == '/' && line[1] == '/') || line[0] == '\n' || line[1] == '\n')
|
if ((line[0] == '/' && line[1] == '/') || line[0] == '\n' || line[1] == '\n')
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(sscanf(line,"%[^:]: %[^:]:%[^:]:%[^\r\n]", w1, w2, w3, w4) != 4) {
|
if(sscanf(line,"%63[^:]: %63[^:]:%63[^:]:%63[^\r\n]", w1, w2, w3, w4) != 4) {
|
||||||
|
|
||||||
ShowWarning("Error syntax of configuration file %s in line %d.\n", lancfgName, line_num);
|
ShowWarning("Error syntax of configuration file %s in line %d.\n", lancfgName, line_num);
|
||||||
continue;
|
continue;
|
||||||
@ -5398,7 +5398,7 @@ void sql_config_read(const char* cfgName)
|
|||||||
if(line[0] == '/' && line[1] == '/')
|
if(line[0] == '/' && line[1] == '/')
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (sscanf(line, "%[^:]: %[^\r\n]", w1, w2) != 2)
|
if (sscanf(line, "%1023[^:]: %1023[^\r\n]", w1, w2) != 2)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(!strcmpi(w1,"char_db"))
|
if(!strcmpi(w1,"char_db"))
|
||||||
@ -5487,7 +5487,7 @@ int char_config_read(const char* cfgName)
|
|||||||
if (line[0] == '/' && line[1] == '/')
|
if (line[0] == '/' && line[1] == '/')
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (sscanf(line, "%[^:]: %[^\r\n]", w1, w2) != 2)
|
if (sscanf(line, "%1023[^:]: %1023[^\r\n]", w1, w2) != 2)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
remove_control_chars(w1);
|
remove_control_chars(w1);
|
||||||
|
@ -227,12 +227,10 @@ int inter_guild_tosql(struct guild *g,int flag)
|
|||||||
|
|
||||||
if (flag&GS_MEMBER)
|
if (flag&GS_MEMBER)
|
||||||
{
|
{
|
||||||
struct guild_member *m;
|
|
||||||
|
|
||||||
strcat(t_info, " members");
|
strcat(t_info, " members");
|
||||||
// Update only needed players
|
// Update only needed players
|
||||||
for(i=0;i<g->max_member;i++){
|
for(i=0;i<g->max_member;i++){
|
||||||
m = &g->member[i];
|
struct guild_member *m = &g->member[i];
|
||||||
if (!m->modified)
|
if (!m->modified)
|
||||||
continue;
|
continue;
|
||||||
if(m->account_id) {
|
if(m->account_id) {
|
||||||
|
@ -268,7 +268,7 @@ const char *get_git_hash (void) {
|
|||||||
char line[64];
|
char line[64];
|
||||||
char *rev = malloc(sizeof(char) * 50);
|
char *rev = malloc(sizeof(char) * 50);
|
||||||
|
|
||||||
if( fgets(line, sizeof(line), fp) && sscanf(line, "%s", rev) )
|
if( fgets(line, sizeof(line), fp) && sscanf(line, "%40s", rev) )
|
||||||
snprintf(GitHash, sizeof(GitHash), "%s", rev);
|
snprintf(GitHash, sizeof(GitHash), "%s", rev);
|
||||||
|
|
||||||
free(rev);
|
free(rev);
|
||||||
@ -370,13 +370,11 @@ int main (int argc, char **argv)
|
|||||||
|
|
||||||
do_init(argc,argv);
|
do_init(argc,argv);
|
||||||
|
|
||||||
{// Main runtime cycle
|
// Main runtime cycle
|
||||||
int next;
|
|
||||||
while (runflag != CORE_ST_STOP) {
|
while (runflag != CORE_ST_STOP) {
|
||||||
next = do_timer(gettick_nocache());
|
int next = do_timer(gettick_nocache());
|
||||||
do_sockets(next);
|
do_sockets(next);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
do_final();
|
do_final();
|
||||||
|
|
||||||
|
@ -640,7 +640,7 @@ static bool grfio_parse_restable_row(const char* row)
|
|||||||
char local[256];
|
char local[256];
|
||||||
FILELIST* entry;
|
FILELIST* entry;
|
||||||
|
|
||||||
if( sscanf(row, "%[^#\r\n]#%[^#\r\n]#", w1, w2) != 2 )
|
if( sscanf(row, "%255[^#\r\n]#%255[^#\r\n]#", w1, w2) != 2 )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if( strstr(w2, ".gat") == NULL && strstr(w2, ".rsw") == NULL )
|
if( strstr(w2, ".gat") == NULL && strstr(w2, ".rsw") == NULL )
|
||||||
@ -790,7 +790,7 @@ void grfio_init(const char* fname)
|
|||||||
if( line[0] == '/' && line[1] == '/' )
|
if( line[0] == '/' && line[1] == '/' )
|
||||||
continue; // skip comments
|
continue; // skip comments
|
||||||
|
|
||||||
if( sscanf(line, "%[^:]: %[^\r\n]", w1, w2) != 2 )
|
if( sscanf(line, "%1023[^:]: %1023[^\r\n]", w1, w2) != 2 )
|
||||||
continue; // skip unrecognized lines
|
continue; // skip unrecognized lines
|
||||||
|
|
||||||
// Entry table reading
|
// Entry table reading
|
||||||
|
@ -115,8 +115,6 @@ void aFree_(void *p, const char *file, int line, const char *func)
|
|||||||
// ShowMessage("%s:%d: in func %s: aFree %p\n",file,line,func,p);
|
// ShowMessage("%s:%d: in func %s: aFree %p\n",file,line,func,p);
|
||||||
if (p)
|
if (p)
|
||||||
FREE(p, file, line, func);
|
FREE(p, file, line, func);
|
||||||
|
|
||||||
p = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -447,13 +445,13 @@ void _mfree(void *ptr, const char *file, int line, const char *func )
|
|||||||
/* Allocating blocks */
|
/* Allocating blocks */
|
||||||
static struct block* block_malloc(unsigned short hash)
|
static struct block* block_malloc(unsigned short hash)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
struct block *p;
|
struct block *p;
|
||||||
if(hash_unfill[0] != NULL) {
|
if(hash_unfill[0] != NULL) {
|
||||||
/* Space for the block has already been secured */
|
/* Space for the block has already been secured */
|
||||||
p = hash_unfill[0];
|
p = hash_unfill[0];
|
||||||
hash_unfill[0] = hash_unfill[0]->unfill_next;
|
hash_unfill[0] = hash_unfill[0]->unfill_next;
|
||||||
} else {
|
} else {
|
||||||
|
int i;
|
||||||
/* Newly allocated space for the block */
|
/* Newly allocated space for the block */
|
||||||
p = (struct block*)MALLOC(sizeof(struct block) * (BLOCK_ALLOC), __FILE__, __LINE__, __func__ );
|
p = (struct block*)MALLOC(sizeof(struct block) * (BLOCK_ALLOC), __FILE__, __LINE__, __func__ );
|
||||||
if(p == NULL) {
|
if(p == NULL) {
|
||||||
|
@ -1297,12 +1297,10 @@ int socket_getips(uint32* ips, int max)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
int pos;
|
int pos;
|
||||||
struct ifreq* ir;
|
|
||||||
struct sockaddr_in* a;
|
|
||||||
for( pos=0; pos < ic.ifc_len && num < max; )
|
for( pos=0; pos < ic.ifc_len && num < max; )
|
||||||
{
|
{
|
||||||
ir = (struct ifreq*)(buf+pos);
|
struct ifreq* ir = (struct ifreq*)(buf+pos);
|
||||||
a = (struct sockaddr_in*) &(ir->ifr_addr);
|
struct sockaddr_in*a = (struct sockaddr_in*) &(ir->ifr_addr);
|
||||||
if( a->sin_family == AF_INET ){
|
if( a->sin_family == AF_INET ){
|
||||||
ad = ntohl(a->sin_addr.s_addr);
|
ad = ntohl(a->sin_addr.s_addr);
|
||||||
if( ad != INADDR_LOOPBACK && ad != INADDR_ANY )
|
if( ad != INADDR_LOOPBACK && ad != INADDR_ANY )
|
||||||
|
@ -433,7 +433,7 @@ ACMD_FUNC(where)
|
|||||||
nullpo_retr(-1, sd);
|
nullpo_retr(-1, sd);
|
||||||
memset(atcmd_player_name, '\0', sizeof atcmd_player_name);
|
memset(atcmd_player_name, '\0', sizeof atcmd_player_name);
|
||||||
|
|
||||||
if (!message || !*message || sscanf(message, "%23[^\n]", atcmd_player_name) < 1) {
|
if (!message || !*message || sscanf(message, "%23s[^\n]", atcmd_player_name) < 1) {
|
||||||
clif_displaymessage(fd, msg_txt(sd,910)); // Please enter a player name (usage: @where <char name>).
|
clif_displaymessage(fd, msg_txt(sd,910)); // Please enter a player name (usage: @where <char name>).
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -4373,12 +4373,12 @@ ACMD_FUNC(loadnpc)
|
|||||||
ACMD_FUNC(unloadnpc)
|
ACMD_FUNC(unloadnpc)
|
||||||
{
|
{
|
||||||
struct npc_data *nd;
|
struct npc_data *nd;
|
||||||
char NPCname[NAME_LENGTH+1];
|
char NPCname[NAME_LENGTH];
|
||||||
nullpo_retr(-1, sd);
|
nullpo_retr(-1, sd);
|
||||||
|
|
||||||
memset(NPCname, '\0', sizeof(NPCname));
|
memset(NPCname, '\0', sizeof(NPCname));
|
||||||
|
|
||||||
if (!message || !*message || sscanf(message, "%24[^\n]", NPCname) < 1) {
|
if (!message || !*message || sscanf(message, "%23[^\n]", NPCname) < 1) {
|
||||||
clif_displaymessage(fd, msg_txt(sd,1133)); // Please enter a NPC name (usage: @unloadnpc <NPC_name>).
|
clif_displaymessage(fd, msg_txt(sd,1133)); // Please enter a NPC name (usage: @unloadnpc <NPC_name>).
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -727,9 +727,9 @@ void chrif_authfail(int fd) {/* HELLO WORLD. ip in RFIFOL 15 is not being used (
|
|||||||
*/
|
*/
|
||||||
int auth_db_cleanup_sub(DBKey key, DBData *data, va_list ap) {
|
int auth_db_cleanup_sub(DBKey key, DBData *data, va_list ap) {
|
||||||
struct auth_node *node = db_data2ptr(data);
|
struct auth_node *node = db_data2ptr(data);
|
||||||
const char* states[] = { "Login", "Logout", "Map change" };
|
|
||||||
|
|
||||||
if(DIFF_TICK(gettick(),node->node_created)>60000) {
|
if(DIFF_TICK(gettick(),node->node_created)>60000) {
|
||||||
|
const char* states[] = { "Login", "Logout", "Map change" };
|
||||||
switch (node->state) {
|
switch (node->state) {
|
||||||
case ST_LOGOUT:
|
case ST_LOGOUT:
|
||||||
//Re-save attempt (->sd should never be null here).
|
//Re-save attempt (->sd should never be null here).
|
||||||
@ -1335,7 +1335,6 @@ int chrif_load_scdata(int fd) {
|
|||||||
|
|
||||||
#ifdef ENABLE_SC_SAVING
|
#ifdef ENABLE_SC_SAVING
|
||||||
struct map_session_data *sd;
|
struct map_session_data *sd;
|
||||||
struct status_change_data *data;
|
|
||||||
int aid, cid, i, count;
|
int aid, cid, i, count;
|
||||||
|
|
||||||
aid = RFIFOL(fd,4); //Player Account ID
|
aid = RFIFOL(fd,4); //Player Account ID
|
||||||
@ -1356,7 +1355,7 @@ int chrif_load_scdata(int fd) {
|
|||||||
count = RFIFOW(fd,12); //sc_count
|
count = RFIFOW(fd,12); //sc_count
|
||||||
|
|
||||||
for (i = 0; i < count; i++) {
|
for (i = 0; i < count; i++) {
|
||||||
data = (struct status_change_data*)RFIFOP(fd,14 + i*sizeof(struct status_change_data));
|
struct status_change_data *data = (struct status_change_data*)RFIFOP(fd,14 + i*sizeof(struct status_change_data));
|
||||||
status_change_start(NULL,&sd->bl, (sc_type)data->type, 10000, data->val1, data->val2, data->val3, data->val4, data->tick, 1|2|4|8);
|
status_change_start(NULL,&sd->bl, (sc_type)data->type, 10000, data->val1, data->val2, data->val3, data->val4, data->tick, 1|2|4|8);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -1367,13 +1366,11 @@ int chrif_load_scdata(int fd) {
|
|||||||
|
|
||||||
int chrif_skillcooldown_load(int fd) {
|
int chrif_skillcooldown_load(int fd) {
|
||||||
struct map_session_data *sd;
|
struct map_session_data *sd;
|
||||||
struct skill_cooldown_data *data;
|
|
||||||
int aid, cid, i, count;
|
int aid, cid, i, count;
|
||||||
|
|
||||||
aid = RFIFOL(fd, 4);
|
aid = RFIFOL(fd, 4);
|
||||||
cid = RFIFOL(fd, 8);
|
cid = RFIFOL(fd, 8);
|
||||||
|
|
||||||
|
|
||||||
sd = map_id2sd(aid);
|
sd = map_id2sd(aid);
|
||||||
if (!sd) {
|
if (!sd) {
|
||||||
ShowError("chrif_skillcooldown_load: Player of AID %d not found!\n", aid);
|
ShowError("chrif_skillcooldown_load: Player of AID %d not found!\n", aid);
|
||||||
@ -1385,7 +1382,7 @@ int chrif_skillcooldown_load(int fd) {
|
|||||||
}
|
}
|
||||||
count = RFIFOW(fd, 12); //sc_count
|
count = RFIFOW(fd, 12); //sc_count
|
||||||
for (i = 0; i < count; i++) {
|
for (i = 0; i < count; i++) {
|
||||||
data = (struct skill_cooldown_data*) RFIFOP(fd, 14 + i * sizeof (struct skill_cooldown_data));
|
struct skill_cooldown_data *data = (struct skill_cooldown_data*) RFIFOP(fd, 14 + i * sizeof (struct skill_cooldown_data));
|
||||||
skill_blockpc_start(sd, data->skill_id, data->tick);
|
skill_blockpc_start(sd, data->skill_id, data->tick);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -1565,7 +1562,7 @@ void chrif_parse_ack_vipActive(int fd) {
|
|||||||
*
|
*
|
||||||
*------------------------------------------*/
|
*------------------------------------------*/
|
||||||
int chrif_parse(int fd) {
|
int chrif_parse(int fd) {
|
||||||
int packet_len, cmd;
|
int packet_len;
|
||||||
|
|
||||||
// only process data from the char-server
|
// only process data from the char-server
|
||||||
if ( fd != char_fd ) {
|
if ( fd != char_fd ) {
|
||||||
@ -1590,7 +1587,7 @@ int chrif_parse(int fd) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
while ( RFIFOREST(fd) >= 2 ) {
|
while ( RFIFOREST(fd) >= 2 ) {
|
||||||
cmd = RFIFOW(fd,0);
|
int cmd = RFIFOW(fd,0);
|
||||||
if (cmd < 0x2af8 || cmd >= 0x2af8 + ARRAYLENGTH(packet_len_table) || packet_len_table[cmd-0x2af8] == 0) {
|
if (cmd < 0x2af8 || cmd >= 0x2af8 + ARRAYLENGTH(packet_len_table) || packet_len_table[cmd-0x2af8] == 0) {
|
||||||
int r = intif_parse(fd); // Passed on to the intif
|
int r = intif_parse(fd); // Passed on to the intif
|
||||||
|
|
||||||
|
@ -1415,7 +1415,7 @@ void clif_hominfo(struct map_session_data *sd, struct homun_data *hd, int flag)
|
|||||||
WBUFW(buf,31)=(unsigned short) (hd->homunculus.intimacy / 100) ;
|
WBUFW(buf,31)=(unsigned short) (hd->homunculus.intimacy / 100) ;
|
||||||
WBUFW(buf,33)=0; // equip id
|
WBUFW(buf,33)=0; // equip id
|
||||||
WBUFW(buf,35)=cap_value(status->rhw.atk2+status->batk, 0, INT16_MAX);
|
WBUFW(buf,35)=cap_value(status->rhw.atk2+status->batk, 0, INT16_MAX);
|
||||||
WBUFW(buf,37)=cap_value(status->matk_max, 0, INT16_MAX);
|
WBUFW(buf,37)=min(status->matk_max, INT16_MAX); //FIXME capping to INT16 here is too late
|
||||||
WBUFW(buf,39)=status->hit;
|
WBUFW(buf,39)=status->hit;
|
||||||
if (battle_config.hom_setting&0x10)
|
if (battle_config.hom_setting&0x10)
|
||||||
WBUFW(buf,41)=status->luk/3 + 1; //crit is a +1 decimal value! Just display purpose.[Vicious]
|
WBUFW(buf,41)=status->luk/3 + 1; //crit is a +1 decimal value! Just display purpose.[Vicious]
|
||||||
@ -13623,7 +13623,7 @@ void clif_blacksmith(struct map_session_data* sd)
|
|||||||
WFIFOHEAD(fd,packet_len(0x219));
|
WFIFOHEAD(fd,packet_len(0x219));
|
||||||
WFIFOW(fd,0) = 0x219;
|
WFIFOW(fd,0) = 0x219;
|
||||||
//Packet size limits this list to 10 elements. [Skotlex]
|
//Packet size limits this list to 10 elements. [Skotlex]
|
||||||
for (i = 0; i < 10 && i < MAX_FAME_LIST; i++) {
|
for (i = 0; i < min(10,MAX_FAME_LIST); i++) { //client is capped to 10 char
|
||||||
if (smith_fame_list[i].id > 0) {
|
if (smith_fame_list[i].id > 0) {
|
||||||
if (strcmp(smith_fame_list[i].name, "-") == 0 &&
|
if (strcmp(smith_fame_list[i].name, "-") == 0 &&
|
||||||
(name = map_charid2nick(smith_fame_list[i].id)) != NULL)
|
(name = map_charid2nick(smith_fame_list[i].id)) != NULL)
|
||||||
@ -13676,7 +13676,7 @@ void clif_alchemist(struct map_session_data* sd)
|
|||||||
WFIFOHEAD(fd,packet_len(0x21a));
|
WFIFOHEAD(fd,packet_len(0x21a));
|
||||||
WFIFOW(fd,0) = 0x21a;
|
WFIFOW(fd,0) = 0x21a;
|
||||||
//Packet size limits this list to 10 elements. [Skotlex]
|
//Packet size limits this list to 10 elements. [Skotlex]
|
||||||
for (i = 0; i < 10 && i < MAX_FAME_LIST; i++) {
|
for (i = 0; i < min(10,MAX_FAME_LIST); i++) {
|
||||||
if (chemist_fame_list[i].id > 0) {
|
if (chemist_fame_list[i].id > 0) {
|
||||||
if (strcmp(chemist_fame_list[i].name, "-") == 0 &&
|
if (strcmp(chemist_fame_list[i].name, "-") == 0 &&
|
||||||
(name = map_charid2nick(chemist_fame_list[i].id)) != NULL)
|
(name = map_charid2nick(chemist_fame_list[i].id)) != NULL)
|
||||||
@ -13729,7 +13729,7 @@ void clif_taekwon(struct map_session_data* sd)
|
|||||||
WFIFOHEAD(fd,packet_len(0x226));
|
WFIFOHEAD(fd,packet_len(0x226));
|
||||||
WFIFOW(fd,0) = 0x226;
|
WFIFOW(fd,0) = 0x226;
|
||||||
//Packet size limits this list to 10 elements. [Skotlex]
|
//Packet size limits this list to 10 elements. [Skotlex]
|
||||||
for (i = 0; i < 10 && i < MAX_FAME_LIST; i++) {
|
for (i = 0; i < min(10,MAX_FAME_LIST); i++) {
|
||||||
if (taekwon_fame_list[i].id > 0) {
|
if (taekwon_fame_list[i].id > 0) {
|
||||||
if (strcmp(taekwon_fame_list[i].name, "-") == 0 &&
|
if (strcmp(taekwon_fame_list[i].name, "-") == 0 &&
|
||||||
(name = map_charid2nick(taekwon_fame_list[i].id)) != NULL)
|
(name = map_charid2nick(taekwon_fame_list[i].id)) != NULL)
|
||||||
@ -15756,7 +15756,7 @@ void clif_instance_status(struct map_session_data *sd, const char *name, unsigne
|
|||||||
#if PACKETVER >= 20071128
|
#if PACKETVER >= 20071128
|
||||||
unsigned char buf[71];
|
unsigned char buf[71];
|
||||||
|
|
||||||
nullpo_retv(sd);
|
if(!sd) return; //party_getavailablesd can return NULL
|
||||||
|
|
||||||
WBUFW(buf,0) = 0x2cd;
|
WBUFW(buf,0) = 0x2cd;
|
||||||
safestrncpy( WBUFP(buf,2), name, 62 );
|
safestrncpy( WBUFP(buf,2), name, 62 );
|
||||||
@ -16914,7 +16914,7 @@ void clif_sub_ranklist(unsigned char *buf,int idx,struct map_session_data* sd, i
|
|||||||
|
|
||||||
if(!skip){
|
if(!skip){
|
||||||
//Packet size limits this list to 10 elements. [Skotlex]
|
//Packet size limits this list to 10 elements. [Skotlex]
|
||||||
for (i = 0; i < 10 && i < MAX_FAME_LIST; i++) {
|
for (i = 0; i < min(10,MAX_FAME_LIST); i++) {
|
||||||
if (list[i].id > 0) {
|
if (list[i].id > 0) {
|
||||||
if (strcmp(list[i].name, "-") == 0 &&
|
if (strcmp(list[i].name, "-") == 0 &&
|
||||||
(name = map_charid2nick(list[i].id)) != NULL)
|
(name = map_charid2nick(list[i].id)) != NULL)
|
||||||
@ -17854,7 +17854,7 @@ void packetdb_readdb(void)
|
|||||||
ln++;
|
ln++;
|
||||||
if(line[0]=='/' && line[1]=='/')
|
if(line[0]=='/' && line[1]=='/')
|
||||||
continue;
|
continue;
|
||||||
if (sscanf(line,"%256[^:]: %256[^\r\n]",w1,w2) == 2)
|
if (sscanf(line,"%255[^:]: %255[^\r\n]",w1,w2) == 2)
|
||||||
{
|
{
|
||||||
if(strcmpi(w1,"packet_ver")==0) {
|
if(strcmpi(w1,"packet_ver")==0) {
|
||||||
int prev_ver = packet_ver;
|
int prev_ver = packet_ver;
|
||||||
|
@ -1282,9 +1282,7 @@ int read_homunculus_skilldb(void)
|
|||||||
|
|
||||||
void read_homunculus_expdb(void)
|
void read_homunculus_expdb(void)
|
||||||
{
|
{
|
||||||
FILE *fp;
|
int i;
|
||||||
char line[1024];
|
|
||||||
int i, j=0;
|
|
||||||
char *filename[]={
|
char *filename[]={
|
||||||
DBPATH"exp_homun.txt",
|
DBPATH"exp_homun.txt",
|
||||||
"import/exp_homun.txt"
|
"import/exp_homun.txt"
|
||||||
@ -1292,6 +1290,10 @@ void read_homunculus_expdb(void)
|
|||||||
|
|
||||||
memset(hexptbl,0,sizeof(hexptbl));
|
memset(hexptbl,0,sizeof(hexptbl));
|
||||||
for(i=0; i<ARRAYLENGTH(filename); i++){
|
for(i=0; i<ARRAYLENGTH(filename); i++){
|
||||||
|
FILE *fp;
|
||||||
|
char line[1024];
|
||||||
|
int j=0;
|
||||||
|
|
||||||
sprintf(line, "%s/%s", db_path, filename[i]);
|
sprintf(line, "%s/%s", db_path, filename[i]);
|
||||||
fp=fopen(line,"r");
|
fp=fopen(line,"r");
|
||||||
if(fp == NULL){
|
if(fp == NULL){
|
||||||
|
@ -537,7 +537,7 @@ int log_config_read(const char* cfgName)
|
|||||||
if( line[0] == '/' && line[1] == '/' )
|
if( line[0] == '/' && line[1] == '/' )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if( sscanf(line, "%[^:]: %[^\r\n]", w1, w2) == 2 )
|
if( sscanf(line, "%1023[^:]: %1023[^\r\n]", w1, w2) == 2 )
|
||||||
{
|
{
|
||||||
if( strcmpi(w1, "enable_logs") == 0 )
|
if( strcmpi(w1, "enable_logs") == 0 )
|
||||||
log_config.enable_logs = (e_log_pick_type)config_switch(w2);
|
log_config.enable_logs = (e_log_pick_type)config_switch(w2);
|
||||||
|
@ -281,6 +281,7 @@ enum bl_type {
|
|||||||
enum npc_subtype { WARP, SHOP, SCRIPT, CASHSHOP, ITEMSHOP, POINTSHOP, TOMB };
|
enum npc_subtype { WARP, SHOP, SCRIPT, CASHSHOP, ITEMSHOP, POINTSHOP, TOMB };
|
||||||
|
|
||||||
enum e_race {
|
enum e_race {
|
||||||
|
RC_NONE=-1, //don't give us bonus
|
||||||
RC_FORMLESS=0,
|
RC_FORMLESS=0,
|
||||||
RC_UNDEAD,
|
RC_UNDEAD,
|
||||||
RC_BRUTE,
|
RC_BRUTE,
|
||||||
@ -296,6 +297,7 @@ enum e_race {
|
|||||||
};
|
};
|
||||||
|
|
||||||
enum e_classAE {
|
enum e_classAE {
|
||||||
|
CLASS_NONE=-1, //don't give us bonus
|
||||||
CLASS_NORMAL = 0,
|
CLASS_NORMAL = 0,
|
||||||
CLASS_BOSS,
|
CLASS_BOSS,
|
||||||
CLASS_GUARDIAN,
|
CLASS_GUARDIAN,
|
||||||
|
@ -377,8 +377,8 @@ int mercenary_killbonus(struct mercenary_data *md)
|
|||||||
|
|
||||||
int mercenary_kills(struct mercenary_data *md)
|
int mercenary_kills(struct mercenary_data *md)
|
||||||
{
|
{
|
||||||
|
if(md->mercenary.kill_count <= (INT_MAX-1)) //safe cap to INT_MAX
|
||||||
md->mercenary.kill_count++;
|
md->mercenary.kill_count++;
|
||||||
md->mercenary.kill_count = cap_value(md->mercenary.kill_count, 0, INT_MAX);
|
|
||||||
|
|
||||||
if( (md->mercenary.kill_count % 50) == 0 )
|
if( (md->mercenary.kill_count % 50) == 0 )
|
||||||
{
|
{
|
||||||
|
@ -98,15 +98,13 @@ int mob_skill_id2skill_idx(int mob_id,uint16 skill_id);
|
|||||||
int mobdb_searchname(const char *str)
|
int mobdb_searchname(const char *str)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
struct mob_db* mob;
|
|
||||||
for(i=0;i<=MAX_MOB_DB;i++){
|
for(i=0;i<=MAX_MOB_DB;i++){
|
||||||
mob = mob_db(i);
|
struct mob_db *mob = mob_db(i);
|
||||||
if(mob == mob_dummy) //Skip dummy mobs.
|
if(mob == mob_dummy) //Skip dummy mobs.
|
||||||
continue;
|
continue;
|
||||||
if(strcmpi(mob->name,str)==0 || strcmpi(mob->jname,str)==0 || strcmpi(mob->sprite,str)==0)
|
if(strcmpi(mob->name,str)==0 || strcmpi(mob->jname,str)==0 || strcmpi(mob->sprite,str)==0)
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
static int mobdb_searchname_array_sub(struct mob_db* mob, const char *str)
|
static int mobdb_searchname_array_sub(struct mob_db* mob, const char *str)
|
||||||
@ -347,12 +345,9 @@ bool mob_ksprotected (struct block_list *src, struct block_list *target)
|
|||||||
struct block_list *s_bl, *t_bl;
|
struct block_list *s_bl, *t_bl;
|
||||||
struct map_session_data
|
struct map_session_data
|
||||||
*sd, // Source
|
*sd, // Source
|
||||||
*pl_sd, // Owner
|
|
||||||
*t_sd; // Mob Target
|
*t_sd; // Mob Target
|
||||||
struct status_change_entry *sce;
|
|
||||||
struct mob_data *md;
|
struct mob_data *md;
|
||||||
unsigned int tick = gettick();
|
unsigned int tick = gettick();
|
||||||
char output[128];
|
|
||||||
|
|
||||||
if( !battle_config.ksprotection )
|
if( !battle_config.ksprotection )
|
||||||
return false; // KS Protection Disabled
|
return false; // KS Protection Disabled
|
||||||
@ -373,6 +368,10 @@ bool mob_ksprotected (struct block_list *src, struct block_list *target)
|
|||||||
t_sd = BL_CAST(BL_PC,s_bl);
|
t_sd = BL_CAST(BL_PC,s_bl);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
struct status_change_entry *sce;
|
||||||
|
struct map_session_data *pl_sd; // Owner
|
||||||
|
char output[128];
|
||||||
|
|
||||||
if( map[md->bl.m].flag.allowks || map_flag_ks(md->bl.m) )
|
if( map[md->bl.m].flag.allowks || map_flag_ks(md->bl.m) )
|
||||||
return false; // Ignores GVG, PVP and AllowKS map flags
|
return false; // Ignores GVG, PVP and AllowKS map flags
|
||||||
|
|
||||||
@ -1340,7 +1339,7 @@ int mob_unlocktarget(struct mob_data *md, unsigned int tick)
|
|||||||
int mob_randomwalk(struct mob_data *md,unsigned int tick)
|
int mob_randomwalk(struct mob_data *md,unsigned int tick)
|
||||||
{
|
{
|
||||||
const int retrycount=20;
|
const int retrycount=20;
|
||||||
int i,x,y,c,d;
|
int i,c,d;
|
||||||
int speed;
|
int speed;
|
||||||
|
|
||||||
nullpo_ret(md);
|
nullpo_ret(md);
|
||||||
@ -1354,8 +1353,8 @@ int mob_randomwalk(struct mob_data *md,unsigned int tick)
|
|||||||
if(d<5) d=5;
|
if(d<5) d=5;
|
||||||
for(i=0;i<retrycount;i++){ // Search of a movable place
|
for(i=0;i<retrycount;i++){ // Search of a movable place
|
||||||
int r=rnd();
|
int r=rnd();
|
||||||
x=r%(d*2+1)-d;
|
int x=r%(d*2+1)-d;
|
||||||
y=r/(d*2+1)%(d*2+1)-d;
|
int y=r/(d*2+1)%(d*2+1)-d;
|
||||||
x+=md->bl.x;
|
x+=md->bl.x;
|
||||||
y+=md->bl.y;
|
y+=md->bl.y;
|
||||||
|
|
||||||
@ -1828,10 +1827,11 @@ static struct item_drop* mob_setlootitem(struct item* item)
|
|||||||
static int mob_delay_item_drop(int tid, unsigned int tick, int id, intptr_t data)
|
static int mob_delay_item_drop(int tid, unsigned int tick, int id, intptr_t data)
|
||||||
{
|
{
|
||||||
struct item_drop_list *list;
|
struct item_drop_list *list;
|
||||||
struct item_drop *ditem, *ditem_prev;
|
struct item_drop *ditem;
|
||||||
list=(struct item_drop_list *)data;
|
list=(struct item_drop_list *)data;
|
||||||
ditem = list->item;
|
ditem = list->item;
|
||||||
while (ditem) {
|
while (ditem) {
|
||||||
|
struct item_drop *ditem_prev;
|
||||||
map_addflooritem(&ditem->item_data,ditem->item_data.amount,
|
map_addflooritem(&ditem->item_data,ditem->item_data.amount,
|
||||||
list->m,list->x,list->y,
|
list->m,list->x,list->y,
|
||||||
list->first_charid,list->second_charid,list->third_charid,4);
|
list->first_charid,list->second_charid,list->third_charid,4);
|
||||||
@ -2117,7 +2117,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
|
|||||||
int id,zeny;
|
int id,zeny;
|
||||||
unsigned int base_exp,job_exp;
|
unsigned int base_exp,job_exp;
|
||||||
} pt[DAMAGELOG_SIZE];
|
} pt[DAMAGELOG_SIZE];
|
||||||
int i, temp, count, m = md->bl.m, pnum = 0;
|
int i, temp, count, m = md->bl.m;
|
||||||
int dmgbltypes = 0; // bitfield of all bl types, that caused damage to the mob and are elligible for exp distribution
|
int dmgbltypes = 0; // bitfield of all bl types, that caused damage to the mob and are elligible for exp distribution
|
||||||
unsigned int mvp_damage, tick = gettick();
|
unsigned int mvp_damage, tick = gettick();
|
||||||
bool rebirth, homkillonly;
|
bool rebirth, homkillonly;
|
||||||
@ -2199,6 +2199,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
|
|||||||
(!map[m].flag.nobaseexp || !map[m].flag.nojobexp) //Gives Exp
|
(!map[m].flag.nobaseexp || !map[m].flag.nojobexp) //Gives Exp
|
||||||
) { //Experience calculation.
|
) { //Experience calculation.
|
||||||
int bonus = 100; //Bonus on top of your share (common to all attackers).
|
int bonus = 100; //Bonus on top of your share (common to all attackers).
|
||||||
|
int pnum = 0;
|
||||||
if (md->sc.data[SC_RICHMANKIM])
|
if (md->sc.data[SC_RICHMANKIM])
|
||||||
bonus += md->sc.data[SC_RICHMANKIM]->val2;
|
bonus += md->sc.data[SC_RICHMANKIM]->val2;
|
||||||
if(sd) {
|
if(sd) {
|
||||||
@ -2437,12 +2438,10 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
|
|||||||
// process script-granted extra drop bonuses
|
// process script-granted extra drop bonuses
|
||||||
int itemid = 0;
|
int itemid = 0;
|
||||||
for (i = 0; i < ARRAYLENGTH(sd->add_drop) && (sd->add_drop[i].id || sd->add_drop[i].group); i++) {
|
for (i = 0; i < ARRAYLENGTH(sd->add_drop) && (sd->add_drop[i].id || sd->add_drop[i].group); i++) {
|
||||||
if ( sd->add_drop[i].race == -md->mob_id ||
|
if ( sd->add_drop[i].race == -md->mob_id
|
||||||
( (sd->add_drop[i].race > 0 || sd->add_drop[i].class_ > 0) && (
|
|| (sd->add_drop[i].race && (sd->add_drop[i].race)&(1<<status->race))
|
||||||
sd->add_drop[i].race & (1<<status->race) ||
|
|| (sd->add_drop[i].class_ && (sd->add_drop[i].class_)&(1<<status->class_))
|
||||||
sd->add_drop[i].class_ & (1<<status->class_)
|
) {
|
||||||
)))
|
|
||||||
{
|
|
||||||
//check if the bonus item drop rate should be multiplied with mob level/10 [Lupus]
|
//check if the bonus item drop rate should be multiplied with mob level/10 [Lupus]
|
||||||
if(sd->add_drop[i].rate < 0) {
|
if(sd->add_drop[i].rate < 0) {
|
||||||
//it's negative, then it should be multiplied. e.g. for Mimic,Myst Case Cards, etc
|
//it's negative, then it should be multiplied. e.g. for Mimic,Myst Case Cards, etc
|
||||||
@ -3382,7 +3381,7 @@ int mob_is_clone(int mob_id)
|
|||||||
int mob_clone_spawn(struct map_session_data *sd, int16 m, int16 x, int16 y, const char *event, int master_id, int mode, int flag, unsigned int duration)
|
int mob_clone_spawn(struct map_session_data *sd, int16 m, int16 x, int16 y, const char *event, int master_id, int mode, int flag, unsigned int duration)
|
||||||
{
|
{
|
||||||
int mob_id;
|
int mob_id;
|
||||||
int i,j,inf,skill_id, fd;
|
int i,j,inf, fd;
|
||||||
struct mob_data *md;
|
struct mob_data *md;
|
||||||
struct mob_skill *ms;
|
struct mob_skill *ms;
|
||||||
struct mob_db* db;
|
struct mob_db* db;
|
||||||
@ -3434,7 +3433,7 @@ int mob_clone_spawn(struct map_session_data *sd, int16 m, int16 x, int16 y, cons
|
|||||||
|
|
||||||
//Go Backwards to give better priority to advanced skills.
|
//Go Backwards to give better priority to advanced skills.
|
||||||
for (i=0,j = MAX_SKILL_TREE-1;j>=0 && i< MAX_MOBSKILL ;j--) {
|
for (i=0,j = MAX_SKILL_TREE-1;j>=0 && i< MAX_MOBSKILL ;j--) {
|
||||||
skill_id = skill_tree[pc_class2idx(sd->status.class_)][j].id;
|
int skill_id = skill_tree[pc_class2idx(sd->status.class_)][j].id;
|
||||||
if (!skill_id || sd->status.skill[skill_id].lv < 1 ||
|
if (!skill_id || sd->status.skill[skill_id].lv < 1 ||
|
||||||
(skill_get_inf2(skill_id)&(INF2_WEDDING_SKILL|INF2_GUILD_SKILL)) ||
|
(skill_get_inf2(skill_id)&(INF2_WEDDING_SKILL|INF2_GUILD_SKILL)) ||
|
||||||
skill_get_nocast(skill_id)&16
|
skill_get_nocast(skill_id)&16
|
||||||
@ -3682,7 +3681,7 @@ static bool mob_parse_dbrow(char** str)
|
|||||||
{
|
{
|
||||||
struct mob_db *db, entry;
|
struct mob_db *db, entry;
|
||||||
struct status_data *status;
|
struct status_data *status;
|
||||||
int mob_id, i, k;
|
int mob_id, i;
|
||||||
double exp, maxhp;
|
double exp, maxhp;
|
||||||
struct mob_data data;
|
struct mob_data data;
|
||||||
|
|
||||||
@ -3847,7 +3846,7 @@ static bool mob_parse_dbrow(char** str)
|
|||||||
int rate = 0, rate_adjust, type;
|
int rate = 0, rate_adjust, type;
|
||||||
unsigned short ratemin, ratemax;
|
unsigned short ratemin, ratemax;
|
||||||
struct item_data *id;
|
struct item_data *id;
|
||||||
k = 31 + MAX_MVP_DROP*2 + i*2;
|
int k = 31 + MAX_MVP_DROP*2 + i*2;
|
||||||
db->dropitem[i].nameid = atoi(str[k]);
|
db->dropitem[i].nameid = atoi(str[k]);
|
||||||
if (!db->dropitem[i].nameid) {
|
if (!db->dropitem[i].nameid) {
|
||||||
db->dropitem[i].p = 0; //No drop.
|
db->dropitem[i].p = 0; //No drop.
|
||||||
@ -4040,10 +4039,7 @@ static bool mob_readdb_mobavail(char* str[], int columns, int current)
|
|||||||
*------------------------------------------*/
|
*------------------------------------------*/
|
||||||
static int mob_read_randommonster(void)
|
static int mob_read_randommonster(void)
|
||||||
{
|
{
|
||||||
FILE *fp;
|
int i;
|
||||||
char line[1024];
|
|
||||||
char *str[10],*p;
|
|
||||||
int i,j, entries, k;
|
|
||||||
const char* mobfile[] = {
|
const char* mobfile[] = {
|
||||||
DBPATH"mob_branch.txt",
|
DBPATH"mob_branch.txt",
|
||||||
DBPATH"mob_poring.txt",
|
DBPATH"mob_poring.txt",
|
||||||
@ -4061,7 +4057,11 @@ static int mob_read_randommonster(void)
|
|||||||
|
|
||||||
for( i = 0; i < ARRAYLENGTH(mobfile); i++ )
|
for( i = 0; i < ARRAYLENGTH(mobfile); i++ )
|
||||||
{ // MobID,DummyName,Rate
|
{ // MobID,DummyName,Rate
|
||||||
entries=0;
|
FILE *fp;
|
||||||
|
char line[1024];
|
||||||
|
char *str[10],*p;
|
||||||
|
int j, entries=0, k;
|
||||||
|
|
||||||
k = (i >= MAX_RANDOMMONSTER) ? i - MAX_RANDOMMONSTER : i;
|
k = (i >= MAX_RANDOMMONSTER) ? i - MAX_RANDOMMONSTER : i;
|
||||||
mob_db_data[0]->summonper[k] = MOBID_PORING; // Default fallback value, in case the database does not provide one
|
mob_db_data[0]->summonper[k] = MOBID_PORING; // Default fallback value, in case the database does not provide one
|
||||||
sprintf(line, "%s/%s", db_path, mobfile[i]);
|
sprintf(line, "%s/%s", db_path, mobfile[i]);
|
||||||
@ -4493,7 +4493,7 @@ static int mob_read_sqlskilldb(void)
|
|||||||
*------------------------------------------*/
|
*------------------------------------------*/
|
||||||
static bool mob_readdb_race2(char* fields[], int columns, int current)
|
static bool mob_readdb_race2(char* fields[], int columns, int current)
|
||||||
{
|
{
|
||||||
int race, mobid, i;
|
int race, i;
|
||||||
|
|
||||||
race = atoi(fields[0]);
|
race = atoi(fields[0]);
|
||||||
|
|
||||||
@ -4505,7 +4505,7 @@ static bool mob_readdb_race2(char* fields[], int columns, int current)
|
|||||||
|
|
||||||
for(i = 1; i<columns; i++)
|
for(i = 1; i<columns; i++)
|
||||||
{
|
{
|
||||||
mobid = atoi(fields[i]);
|
int mobid = atoi(fields[i]);
|
||||||
if (mob_db(mobid) == mob_dummy)
|
if (mob_db(mobid) == mob_dummy)
|
||||||
{
|
{
|
||||||
ShowWarning("mob_readdb_race2: Unknown mob id %d for race2 %d.\n", mobid, race);
|
ShowWarning("mob_readdb_race2: Unknown mob id %d for race2 %d.\n", mobid, race);
|
||||||
|
10
src/map/pc.c
10
src/map/pc.c
@ -1915,10 +1915,10 @@ static int pc_bonus_item_drop(struct s_add_drop *drop, const short max, short id
|
|||||||
if(
|
if(
|
||||||
((id && drop[i].id == id) ||
|
((id && drop[i].id == id) ||
|
||||||
(group && drop[i].group == group))
|
(group && drop[i].group == group))
|
||||||
&& (race > 0 || class_ > -1)
|
&& ((race<RC_NONE && race<RC_MAX) || (class_<CLASS_NONE && class_<CLASS_MAX))
|
||||||
) {
|
) {
|
||||||
drop[i].race |= race;
|
if(race<RC_NONE && race<RC_MAX) drop[i].race |= 1<<race;
|
||||||
drop[i].class_ |= class_;
|
if(class_<CLASS_NONE && class_<CLASS_MAX) drop[i].class_ |= 1<<class_;
|
||||||
if(drop[i].rate > 0 && rate > 0)
|
if(drop[i].rate > 0 && rate > 0)
|
||||||
{ //Both are absolute rates.
|
{ //Both are absolute rates.
|
||||||
if (drop[i].rate < rate)
|
if (drop[i].rate < rate)
|
||||||
@ -1939,8 +1939,8 @@ static int pc_bonus_item_drop(struct s_add_drop *drop, const short max, short id
|
|||||||
}
|
}
|
||||||
drop[i].id = id;
|
drop[i].id = id;
|
||||||
drop[i].group = group;
|
drop[i].group = group;
|
||||||
drop[i].race |= race;
|
if(race<RC_NONE && race<RC_MAX) drop[i].race |= 1<<race;
|
||||||
drop[i].class_ |= class_;
|
if(class_<CLASS_NONE && class_<CLASS_MAX) drop[i].class_ |= 1<<class_;
|
||||||
drop[i].rate = rate;
|
drop[i].rate = rate;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -114,7 +114,8 @@ struct s_addeffectonskill {
|
|||||||
|
|
||||||
struct s_add_drop {
|
struct s_add_drop {
|
||||||
short id, group;
|
short id, group;
|
||||||
int race, rate, class_;
|
int rate;
|
||||||
|
int race, class_; //bitwise value of 1<<x
|
||||||
};
|
};
|
||||||
|
|
||||||
struct s_autobonus {
|
struct s_autobonus {
|
||||||
|
@ -1651,9 +1651,9 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, uint
|
|||||||
|
|
||||||
for (i = 0; i < ARRAYLENGTH(sd->autospell) && sd->autospell[i].id; i++) {
|
for (i = 0; i < ARRAYLENGTH(sd->autospell) && sd->autospell[i].id; i++) {
|
||||||
|
|
||||||
if(!(sd->autospell[i].flag&attack_type&BF_WEAPONMASK &&
|
if(!( ((sd->autospell[i].flag)&attack_type)&BF_WEAPONMASK &&
|
||||||
sd->autospell[i].flag&attack_type&BF_RANGEMASK &&
|
((sd->autospell[i].flag)&attack_type)&BF_RANGEMASK &&
|
||||||
sd->autospell[i].flag&attack_type&BF_SKILLMASK))
|
((sd->autospell[i].flag)&attack_type)&BF_SKILLMASK))
|
||||||
continue; // one or more trigger conditions were not fulfilled
|
continue; // one or more trigger conditions were not fulfilled
|
||||||
|
|
||||||
skill = (sd->autospell[i].id > 0) ? sd->autospell[i].id : -sd->autospell[i].id;
|
skill = (sd->autospell[i].id > 0) ? sd->autospell[i].id : -sd->autospell[i].id;
|
||||||
@ -1744,9 +1744,9 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, uint
|
|||||||
continue;
|
continue;
|
||||||
if( sd->autobonus[i].active != INVALID_TIMER )
|
if( sd->autobonus[i].active != INVALID_TIMER )
|
||||||
continue;
|
continue;
|
||||||
if(!(sd->autobonus[i].atk_type&attack_type&BF_WEAPONMASK &&
|
if(!( ((sd->autobonus[i].atk_type)&attack_type)&BF_WEAPONMASK &&
|
||||||
sd->autobonus[i].atk_type&attack_type&BF_RANGEMASK &&
|
((sd->autobonus[i].atk_type)&attack_type)&BF_RANGEMASK &&
|
||||||
sd->autobonus[i].atk_type&attack_type&BF_SKILLMASK))
|
((sd->autobonus[i].atk_type)&attack_type)&BF_SKILLMASK))
|
||||||
continue; // one or more trigger conditions were not fulfilled
|
continue; // one or more trigger conditions were not fulfilled
|
||||||
pc_exeautobonus(sd,&sd->autobonus[i]);
|
pc_exeautobonus(sd,&sd->autobonus[i]);
|
||||||
}
|
}
|
||||||
@ -1987,9 +1987,9 @@ int skill_counter_additional_effect (struct block_list* src, struct block_list *
|
|||||||
|
|
||||||
for (i = 0; i < ARRAYLENGTH(dstsd->autospell2) && dstsd->autospell2[i].id; i++) {
|
for (i = 0; i < ARRAYLENGTH(dstsd->autospell2) && dstsd->autospell2[i].id; i++) {
|
||||||
|
|
||||||
if(!(dstsd->autospell2[i].flag&attack_type&BF_WEAPONMASK &&
|
if(!( ((dstsd->autospell2[i].flag)&attack_type)&BF_WEAPONMASK &&
|
||||||
dstsd->autospell2[i].flag&attack_type&BF_RANGEMASK &&
|
((dstsd->autospell2[i].flag)&attack_type)&BF_RANGEMASK &&
|
||||||
dstsd->autospell2[i].flag&attack_type&BF_SKILLMASK))
|
((dstsd->autospell2[i].flag)&attack_type)&BF_SKILLMASK))
|
||||||
continue; // one or more trigger conditions were not fulfilled
|
continue; // one or more trigger conditions were not fulfilled
|
||||||
|
|
||||||
skill_id = (dstsd->autospell2[i].id > 0) ? dstsd->autospell2[i].id : -dstsd->autospell2[i].id;
|
skill_id = (dstsd->autospell2[i].id > 0) ? dstsd->autospell2[i].id : -dstsd->autospell2[i].id;
|
||||||
@ -2073,9 +2073,9 @@ int skill_counter_additional_effect (struct block_list* src, struct block_list *
|
|||||||
continue;
|
continue;
|
||||||
if( dstsd->autobonus2[i].active != INVALID_TIMER )
|
if( dstsd->autobonus2[i].active != INVALID_TIMER )
|
||||||
continue;
|
continue;
|
||||||
if(!(dstsd->autobonus2[i].atk_type&attack_type&BF_WEAPONMASK &&
|
if(!( ((dstsd->autobonus2[i].atk_type)&attack_type)&BF_WEAPONMASK &&
|
||||||
dstsd->autobonus2[i].atk_type&attack_type&BF_RANGEMASK &&
|
((dstsd->autobonus2[i].atk_type)&attack_type)&BF_RANGEMASK &&
|
||||||
dstsd->autobonus2[i].atk_type&attack_type&BF_SKILLMASK))
|
((dstsd->autobonus2[i].atk_type)&attack_type)&BF_SKILLMASK))
|
||||||
continue; // one or more trigger conditions were not fulfilled
|
continue; // one or more trigger conditions were not fulfilled
|
||||||
pc_exeautobonus(dstsd,&dstsd->autobonus2[i]);
|
pc_exeautobonus(dstsd,&dstsd->autobonus2[i]);
|
||||||
}
|
}
|
||||||
@ -2095,7 +2095,7 @@ int skill_break_equip (struct block_list *src,struct block_list *bl, unsigned sh
|
|||||||
const enum sc_type scatk[4] = {SC_STRIPWEAPON, SC_STRIPARMOR, SC_STRIPSHIELD, SC_STRIPHELM};
|
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};
|
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);
|
struct status_change *sc = status_get_sc(bl);
|
||||||
int i,j;
|
int i;
|
||||||
TBL_PC *sd;
|
TBL_PC *sd;
|
||||||
sd = BL_CAST(BL_PC, bl);
|
sd = BL_CAST(BL_PC, bl);
|
||||||
if (sc && !sc->count)
|
if (sc && !sc->count)
|
||||||
@ -2143,7 +2143,7 @@ int skill_break_equip (struct block_list *src,struct block_list *bl, unsigned sh
|
|||||||
return 0;
|
return 0;
|
||||||
if (sd) {
|
if (sd) {
|
||||||
for (i = 0; i < EQI_MAX; i++) {
|
for (i = 0; i < EQI_MAX; i++) {
|
||||||
j = sd->equip_index[i];
|
int j = sd->equip_index[i];
|
||||||
if (j < 0 || sd->status.inventory[j].attribute == 1 || !sd->inventory_data[j])
|
if (j < 0 || sd->status.inventory[j].attribute == 1 || !sd->inventory_data[j])
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -4094,7 +4094,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|||||||
// skill_area_temp[0] holds number of targets in area
|
// skill_area_temp[0] holds number of targets in area
|
||||||
// skill_area_temp[1] holds the id of the original target
|
// skill_area_temp[1] holds the id of the original target
|
||||||
// skill_area_temp[2] counts how many targets have already been processed
|
// skill_area_temp[2] counts how many targets have already been processed
|
||||||
int sflag = skill_area_temp[0] & 0xFFF, heal;
|
int sflag = skill_area_temp[0] & 0xFFF;
|
||||||
if( flag&SD_LEVEL )
|
if( flag&SD_LEVEL )
|
||||||
sflag |= SD_LEVEL; // -1 will be used in packets instead of the skill level
|
sflag |= SD_LEVEL; // -1 will be used in packets instead of the skill level
|
||||||
if( skill_area_temp[1] != bl->id && !(skill_get_inf2(skill_id)&INF2_NPC_SKILL) )
|
if( skill_area_temp[1] != bl->id && !(skill_get_inf2(skill_id)&INF2_NPC_SKILL) )
|
||||||
@ -4114,7 +4114,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|||||||
sd->flicker = false;
|
sd->flicker = false;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
heal = (int)skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, sflag);
|
int heal = (int)skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, sflag);
|
||||||
if( skill_id == NPC_VAMPIRE_GIFT && heal > 0 ) {
|
if( skill_id == NPC_VAMPIRE_GIFT && heal > 0 ) {
|
||||||
clif_skill_nodamage(NULL, src, AL_HEAL, heal, 1);
|
clif_skill_nodamage(NULL, src, AL_HEAL, heal, 1);
|
||||||
status_heal(src,heal,0,0);
|
status_heal(src,heal,0,0);
|
||||||
@ -4663,7 +4663,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
i = spell[s==1?0:rand()%s];// Random select of spell to be released.
|
i = spell[s==1?0:rand()%s];// Random select of spell to be released.
|
||||||
if( s && sc->data[i] ){// Now extract the data from the preserved spell
|
if(sc->data[i] ){// Now extract the data from the preserved spell
|
||||||
skill_id = sc->data[i]->val1;
|
skill_id = sc->data[i]->val1;
|
||||||
skill_lv = sc->data[i]->val2;
|
skill_lv = sc->data[i]->val2;
|
||||||
point = sc->data[i]->val3;
|
point = sc->data[i]->val3;
|
||||||
@ -4702,7 +4702,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // Summon Balls
|
{ // Summon Balls
|
||||||
int j = 0, k, skele;
|
int j = 0, k;
|
||||||
int spheres[5] = { 0, 0, 0, 0, 0 },
|
int spheres[5] = { 0, 0, 0, 0, 0 },
|
||||||
positions[5] = {-1,-1,-1,-1,-1 };
|
positions[5] = {-1,-1,-1,-1,-1 };
|
||||||
|
|
||||||
@ -4733,7 +4733,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|||||||
if( skill_lv == 1 ) j = 1; // Limit only to one ball
|
if( skill_lv == 1 ) j = 1; // Limit only to one ball
|
||||||
for( i = 0; i < j; i++ )
|
for( i = 0; i < j; i++ )
|
||||||
{
|
{
|
||||||
skele = WL_RELEASE - 5 + sc->data[spheres[i]]->val1 - WLS_FIRE; // Convert Ball Element into Skill ATK for balls
|
int skele = WL_RELEASE - 5 + sc->data[spheres[i]]->val1 - WLS_FIRE; // Convert Ball Element into Skill ATK for balls
|
||||||
// WL_SUMMON_ATK_FIRE, WL_SUMMON_ATK_WIND, WL_SUMMON_ATK_WATER, WL_SUMMON_ATK_GROUND
|
// WL_SUMMON_ATK_FIRE, WL_SUMMON_ATK_WIND, WL_SUMMON_ATK_WATER, WL_SUMMON_ATK_GROUND
|
||||||
skill_addtimerskill(src,tick+status_get_adelay(src)*i,bl->id,0,0,skele,sc->data[spheres[i]]->val3,BF_MAGIC,flag|SD_LEVEL);
|
skill_addtimerskill(src,tick+status_get_adelay(src)*i,bl->id,0,0,skele,sc->data[spheres[i]]->val3,BF_MAGIC,flag|SD_LEVEL);
|
||||||
status_change_end(src, spheres[i], INVALID_TIMER); // Eliminate ball
|
status_change_end(src, spheres[i], INVALID_TIMER); // Eliminate ball
|
||||||
@ -7552,7 +7552,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|||||||
|
|
||||||
case CG_TAROTCARD:
|
case CG_TAROTCARD:
|
||||||
{
|
{
|
||||||
int eff, count = -1;
|
int count = -1;
|
||||||
if( rnd() % 100 > skill_lv * 8 || (tsc && tsc->data[SC_BASILICA]) ||
|
if( rnd() % 100 > skill_lv * 8 || (tsc && tsc->data[SC_BASILICA]) ||
|
||||||
(dstmd && ((dstmd->guardian_data && dstmd->mob_id == MOBID_EMPERIUM) || mob_is_battleground(dstmd))) ) {
|
(dstmd && ((dstmd->guardian_data && dstmd->mob_id == MOBID_EMPERIUM) || mob_is_battleground(dstmd))) ) {
|
||||||
if( sd )
|
if( sd )
|
||||||
@ -7563,7 +7563,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|||||||
}
|
}
|
||||||
status_zap(src,0,skill_get_sp(skill_id,skill_lv)); // consume sp only if succeeded [Inkfish]
|
status_zap(src,0,skill_get_sp(skill_id,skill_lv)); // consume sp only if succeeded [Inkfish]
|
||||||
do {
|
do {
|
||||||
eff = rnd() % 14;
|
int eff = rnd() % 14;
|
||||||
clif_specialeffect(bl, 523 + eff, AREA);
|
clif_specialeffect(bl, 523 + eff, AREA);
|
||||||
switch (eff)
|
switch (eff)
|
||||||
{
|
{
|
||||||
@ -9653,11 +9653,11 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|||||||
case MH_SILENT_BREEZE: {
|
case MH_SILENT_BREEZE: {
|
||||||
struct status_change *ssc = status_get_sc(src);
|
struct status_change *ssc = status_get_sc(src);
|
||||||
struct block_list *m_bl = battle_get_master(src);
|
struct block_list *m_bl = battle_get_master(src);
|
||||||
|
int heal;
|
||||||
|
if(tsc){
|
||||||
const enum sc_type scs[] = {
|
const enum sc_type scs[] = {
|
||||||
SC_MANDRAGORA, SC_HARMONIZE, SC_DEEPSLEEP, SC_VOICEOFSIREN, SC_SLEEP, SC_CONFUSION, SC_HALLUCINATION
|
SC_MANDRAGORA, SC_HARMONIZE, SC_DEEPSLEEP, SC_VOICEOFSIREN, SC_SLEEP, SC_CONFUSION, SC_HALLUCINATION
|
||||||
};
|
};
|
||||||
int heal;
|
|
||||||
if(tsc){
|
|
||||||
for (i = 0; i < ARRAYLENGTH(scs); i++) {
|
for (i = 0; i < ARRAYLENGTH(scs); i++) {
|
||||||
if (tsc->data[scs[i]]) status_change_end(bl, scs[i], INVALID_TIMER);
|
if (tsc->data[scs[i]]) status_change_end(bl, scs[i], INVALID_TIMER);
|
||||||
}
|
}
|
||||||
@ -10205,7 +10205,6 @@ int skill_castend_id(int tid, unsigned int tick, int id, intptr_t data)
|
|||||||
int skill_castend_pos(int tid, unsigned int tick, int id, intptr_t data)
|
int skill_castend_pos(int tid, unsigned int tick, int id, intptr_t data)
|
||||||
{
|
{
|
||||||
struct block_list* src = map_id2bl(id);
|
struct block_list* src = map_id2bl(id);
|
||||||
int maxcount;
|
|
||||||
struct map_session_data *sd;
|
struct map_session_data *sd;
|
||||||
struct unit_data *ud = unit_bl2ud(src);
|
struct unit_data *ud = unit_bl2ud(src);
|
||||||
struct mob_data *md;
|
struct mob_data *md;
|
||||||
@ -10235,6 +10234,7 @@ int skill_castend_pos(int tid, unsigned int tick, int id, intptr_t data)
|
|||||||
ud->skilltimer = INVALID_TIMER;
|
ud->skilltimer = INVALID_TIMER;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
int maxcount=0;
|
||||||
if( status_isdead(src) )
|
if( status_isdead(src) )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1769,12 +1769,12 @@ int unit_skilluse_pos2( struct block_list *src, short skill_x, short skill_y, ui
|
|||||||
*/
|
*/
|
||||||
int unit_set_target(struct unit_data* ud, int target_id)
|
int unit_set_target(struct unit_data* ud, int target_id)
|
||||||
{
|
{
|
||||||
struct unit_data * ux;
|
|
||||||
struct block_list* target;
|
|
||||||
|
|
||||||
nullpo_ret(ud);
|
nullpo_ret(ud);
|
||||||
|
|
||||||
if( ud->target != target_id ) {
|
if( ud->target != target_id ) {
|
||||||
|
struct unit_data * ux;
|
||||||
|
struct block_list* target;
|
||||||
|
|
||||||
if( ud->target && (target = map_id2bl(ud->target)) && (ux = unit_bl2ud(target)) && ux->target_count > 0 )
|
if( ud->target && (target = map_id2bl(ud->target)) && (ux = unit_bl2ud(target)) && ux->target_count > 0 )
|
||||||
ux->target_count --;
|
ux->target_count --;
|
||||||
if( target_id && (target = map_id2bl(target_id)) && (ux = unit_bl2ud(target)) )
|
if( target_id && (target = map_id2bl(target_id)) && (ux = unit_bl2ud(target)) )
|
||||||
@ -1939,7 +1939,6 @@ bool unit_can_reach_pos(struct block_list *bl,int x,int y, int easy)
|
|||||||
*/
|
*/
|
||||||
bool unit_can_reach_bl(struct block_list *bl,struct block_list *tbl, int range, int easy, short *x, short *y)
|
bool unit_can_reach_bl(struct block_list *bl,struct block_list *tbl, int range, int easy, short *x, short *y)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
short dx,dy;
|
short dx,dy;
|
||||||
nullpo_retr(false, bl);
|
nullpo_retr(false, bl);
|
||||||
nullpo_retr(false, tbl);
|
nullpo_retr(false, tbl);
|
||||||
@ -1960,6 +1959,7 @@ bool unit_can_reach_bl(struct block_list *bl,struct block_list *tbl, int range,
|
|||||||
dy=(dy>0)?1:((dy<0)?-1:0);
|
dy=(dy>0)?1:((dy<0)?-1:0);
|
||||||
|
|
||||||
if (map_getcell(tbl->m,tbl->x-dx,tbl->y-dy,CELL_CHKNOPASS)) { // Look for a suitable cell to place in.
|
if (map_getcell(tbl->m,tbl->x-dx,tbl->y-dy,CELL_CHKNOPASS)) { // Look for a suitable cell to place in.
|
||||||
|
int i;
|
||||||
for(i=0;i<9 && map_getcell(tbl->m,tbl->x-dirx[i],tbl->y-diry[i],CELL_CHKNOPASS);i++);
|
for(i=0;i<9 && map_getcell(tbl->m,tbl->x-dirx[i],tbl->y-diry[i],CELL_CHKNOPASS);i++);
|
||||||
if (i==9) return false; // No valid cells.
|
if (i==9) return false; // No valid cells.
|
||||||
dx = dirx[i];
|
dx = dirx[i];
|
||||||
@ -1981,7 +1981,7 @@ bool unit_can_reach_bl(struct block_list *bl,struct block_list *tbl, int range,
|
|||||||
*/
|
*/
|
||||||
int unit_calc_pos(struct block_list *bl, int tx, int ty, uint8 dir)
|
int unit_calc_pos(struct block_list *bl, int tx, int ty, uint8 dir)
|
||||||
{
|
{
|
||||||
int dx, dy, x, y, i, k;
|
int dx, dy, x, y;
|
||||||
struct unit_data *ud = unit_bl2ud(bl);
|
struct unit_data *ud = unit_bl2ud(bl);
|
||||||
nullpo_ret(ud);
|
nullpo_ret(ud);
|
||||||
|
|
||||||
@ -2001,8 +2001,9 @@ int unit_calc_pos(struct block_list *bl, int tx, int ty, uint8 dir)
|
|||||||
if( dx > 0 ) x--; else if( dx < 0 ) x++;
|
if( dx > 0 ) x--; else if( dx < 0 ) x++;
|
||||||
if( dy > 0 ) y--; else if( dy < 0 ) y++;
|
if( dy > 0 ) y--; else if( dy < 0 ) y++;
|
||||||
if( !unit_can_reach_pos(bl, x, y, 0) ) {
|
if( !unit_can_reach_pos(bl, x, y, 0) ) {
|
||||||
|
int i;
|
||||||
for( i = 0; i < 12; i++ ) {
|
for( i = 0; i < 12; i++ ) {
|
||||||
k = rnd()%8; // Pick a Random Dir
|
int k = rnd()%8; // Pick a Random Dir
|
||||||
dx = -dirx[k] * 2;
|
dx = -dirx[k] * 2;
|
||||||
dy = -diry[k] * 2;
|
dy = -diry[k] * 2;
|
||||||
x = tx + dx;
|
x = tx + dx;
|
||||||
|
@ -293,7 +293,7 @@ void vending_openvending(struct map_session_data* sd, const char* message, const
|
|||||||
|
|
||||||
sd->vending[i].index = index;
|
sd->vending[i].index = index;
|
||||||
sd->vending[i].amount = amount;
|
sd->vending[i].amount = amount;
|
||||||
sd->vending[i].value = cap_value(value, 0, (unsigned int)battle_config.vending_max_value);
|
sd->vending[i].value = min(value, (unsigned int)battle_config.vending_max_value);
|
||||||
|
|
||||||
i++; // item successfully added
|
i++; // item successfully added
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
# --i=../db/re/mob_skill_db.txt --o=../sql-files/mob_skill_db_re.sql --t=re --m=mob_skill --table=mob_skill_db_re
|
# --i=../db/re/mob_skill_db.txt --o=../sql-files/mob_skill_db_re.sql --t=re --m=mob_skill --table=mob_skill_db_re
|
||||||
#
|
#
|
||||||
# List of options:
|
# List of options:
|
||||||
# item_db.pl --help
|
# convert_sql.pl --help
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user