* Added status.c and status.h of jA 1091 update and moved some functions into the new source files
* Updated auto_counter_type's description in battle_athena * Removed some unnecessary skill level checks in battle.c git-svn-id: https://svn.code.sf.net/p/rathena/svn/branches/stable@996 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
304bad6c2c
commit
0c541b77fb
@ -1,8 +1,19 @@
|
||||
Date Added
|
||||
|
||||
01/26
|
||||
* Removed my changes to /stable/Makefile that i've accidentally commited, sorry
|
||||
^^; [celest]
|
||||
* Added status.c and status.h of jA 1091 update and moved some functions into
|
||||
the new source files:
|
||||
-- skill_status_change_ -> status_change_
|
||||
-- battle_get_ -> status_get_
|
||||
-- pc_calc_ -> status_calc_
|
||||
-- pc_getrefinebonus and pc_percentrefinery -> status_getrefinebonus and
|
||||
status_percentrefinery
|
||||
|
||||
* Updated auto_counter_type's description in battle_athena, thanks to
|
||||
akusarujin for pointing it out [celest]
|
||||
* Removed some unnecessary skill level checks in battle.c [celest]
|
||||
* Removed my changes to /stable/Makefile which has libGC enabled by default
|
||||
that i've accidentally commited, sorry ^^; [celest]
|
||||
* Removed an unnecessary "cloneskill_lv" from map_session_data [celest]
|
||||
* Removed WATER.TXT (this file wasn't used at all. There's no such mapflag as WATER even). [Lupus]
|
||||
* Added Water Height of New Yuno Fileds 9 and 11.
|
||||
|
@ -467,9 +467,11 @@ save_clothcolor: yes
|
||||
undead_detect_type: 2
|
||||
|
||||
// Operational mode of automatic counter.
|
||||
// 0 = disregard DEF and HIT+20 . CRI*2, 1 = 100% critical
|
||||
// 0 = 100% critical
|
||||
// 1 = disregard DEF and HIT+20, CRI*2
|
||||
// 2 = Same as 0, but can counter skills (?)
|
||||
// Players
|
||||
player_auto_counter_type: 0
|
||||
player_auto_counter_type: 1
|
||||
// Monsters
|
||||
monster_auto_counter_type: 0
|
||||
|
||||
|
@ -5,43 +5,45 @@
|
||||
|
||||
#if defined(DMALLOC)
|
||||
|
||||
#include "dmalloc.h"
|
||||
|
||||
#define aMalloc(size) \
|
||||
dmalloc_malloc(__FILE__, __LINE__, (size), DMALLOC_FUNC_MALLOC, 0, 0)
|
||||
#define aMallocA(size) \
|
||||
dmalloc_malloc(__FILE__, __LINE__, (size), DMALLOC_FUNC_MALLOC, 0, 0)
|
||||
#define aCallocA(count,size) \
|
||||
dmalloc_malloc(__FILE__, __LINE__, (count)*(size), DMALLOC_FUNC_CALLOC, 0, 0)
|
||||
#define aCalloc(count,size) \
|
||||
dmalloc_malloc(__FILE__, __LINE__, (count)*(size), DMALLOC_FUNC_CALLOC, 0, 0)
|
||||
#define aRealloc(ptr,size) \
|
||||
dmalloc_realloc(__FILE__, __LINE__, (ptr), (size), DMALLOC_FUNC_REALLOC, 0)
|
||||
#define aFree(ptr) free(ptr)
|
||||
#define aStrdup(ptr) strdup(ptr)
|
||||
# include "dmalloc.h"
|
||||
# define aMalloc(size) \
|
||||
dmalloc_malloc(__FILE__, __LINE__, (size), DMALLOC_FUNC_MALLOC, 0, 0)
|
||||
# define aMallocA(size) \
|
||||
dmalloc_malloc(__FILE__, __LINE__, (size), DMALLOC_FUNC_MALLOC, 0, 0)
|
||||
# define aCallocA(count,size) \
|
||||
dmalloc_malloc(__FILE__, __LINE__, (count)*(size), DMALLOC_FUNC_CALLOC, 0, 0)
|
||||
# define aCalloc(count,size) \
|
||||
dmalloc_malloc(__FILE__, __LINE__, (count)*(size), DMALLOC_FUNC_CALLOC, 0, 0)
|
||||
# define aRealloc(ptr,size) \
|
||||
dmalloc_realloc(__FILE__, __LINE__, (ptr), (size), DMALLOC_FUNC_REALLOC, 0)
|
||||
# define aFree(ptr) free(ptr)
|
||||
# define aStrdup(ptr) strdup(ptr)
|
||||
|
||||
#elif defined(GCOLLECT)
|
||||
#include "gc.h"
|
||||
#define aMalloc(n) GC_MALLOC(n)
|
||||
#define aMallocA(n) GC_MALLOC_ATOMIC(n)
|
||||
#define aCallocA(m,n) _bcallocA(m,n)
|
||||
#define aCalloc(m,n) _bcalloc(m,n)
|
||||
#define aRealloc(p,n) GC_REALLOC(p,n)
|
||||
#define aFree(n) GC_FREE(n)
|
||||
#define aStrdup(n) _bstrdup(n)
|
||||
|
||||
extern void * _bcalloc(size_t, size_t);
|
||||
extern void * _bcallocA(size_t, size_t);
|
||||
extern char * _bstrdup(const char *);
|
||||
# include "gc.h"
|
||||
# define aMalloc(n) GC_MALLOC(n)
|
||||
# define aMallocA(n) GC_MALLOC_ATOMIC(n)
|
||||
# define aCallocA(m,n) _bcallocA(m,n)
|
||||
# define aCalloc(m,n) _bcalloc(m,n)
|
||||
# define aRealloc(p,n) GC_REALLOC(p,n)
|
||||
# define aFree(n) GC_FREE(n)
|
||||
# define aStrdup(n) _bstrdup(n)
|
||||
|
||||
extern void * _bcalloc(size_t, size_t);
|
||||
extern void * _bcallocA(size_t, size_t);
|
||||
extern char * _bstrdup(const char *);
|
||||
|
||||
#elif defined(BCHECK)
|
||||
#define aMalloc(n) malloc(n)
|
||||
#define aMallocA(n) malloc(n)
|
||||
#define aCalloc(m,n) calloc(m,n)
|
||||
#define aCallocA(m,n) calloc(m,n)
|
||||
#define aRealloc(p,n) realloc(p,n)
|
||||
#define aFree(n) free(n)
|
||||
#define aStrdup(n) strdup(n)
|
||||
|
||||
# define aMalloc(n) malloc(n)
|
||||
# define aMallocA(n) malloc(n)
|
||||
# define aCalloc(m,n) calloc(m,n)
|
||||
# define aCallocA(m,n) calloc(m,n)
|
||||
# define aRealloc(p,n) realloc(p,n)
|
||||
# define aFree(n) free(n)
|
||||
# define aStrdup(n) strdup(n)
|
||||
|
||||
#else
|
||||
|
||||
#if __STDC_VERSION__ < 199901L
|
||||
@ -52,19 +54,19 @@ extern char * _bstrdup(const char *);
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#define ALC_MARK __FILE__, __LINE__, __func__
|
||||
# define ALC_MARK __FILE__, __LINE__, __func__
|
||||
|
||||
void* aMalloc_( size_t size, const char *file, int line, const char *func );
|
||||
void* aCalloc_( size_t num, size_t size, const char *file, int line, const char *func );
|
||||
void* aRealloc_( void *p, size_t size, const char *file, int line, const char *func );
|
||||
void* aMalloc_( size_t size, const char *file, int line, const char *func );
|
||||
void* aCalloc_( size_t num, size_t size, const char *file, int line, const char *func );
|
||||
void* aRealloc_( void *p, size_t size, const char *file, int line, const char *func );
|
||||
|
||||
#define aMalloc(n) aMalloc_(n,ALC_MARK)
|
||||
#define aMallocA(n) aMalloc_(n,ALC_MARK)
|
||||
#define aCalloc(m,n) aCalloc_(m,n,ALC_MARK)
|
||||
#define aCallocA(m,n) aCalloc_(m,n,ALC_MARK)
|
||||
#define aRealloc(p,n) aRealloc_(p,n,ALC_MARK)
|
||||
#define aFree(ptr) free(ptr)
|
||||
#define aStrdup(ptr) strdup(ptr)
|
||||
# define aMalloc(n) aMalloc_(n,ALC_MARK)
|
||||
# define aMallocA(n) aMalloc_(n,ALC_MARK)
|
||||
# define aCalloc(m,n) aCalloc_(m,n,ALC_MARK)
|
||||
# define aCallocA(m,n) aCalloc_(m,n,ALC_MARK)
|
||||
# define aRealloc(p,n) aRealloc_(p,n,ALC_MARK)
|
||||
# define aFree(ptr) free(ptr)
|
||||
# define aStrdup(ptr) strdup(ptr)
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -13,10 +13,10 @@ sqlobj:
|
||||
COMMON_OBJ = ../common/core.o ../common/socket.o ../common/timer.o ../common/grfio.o ../common/db.o ../common/lock.o ../common/nullpo.o ../common/malloc.o ../common/showmsg.o ../common/utils.o ../common/strlib.o
|
||||
LIBS = -lz -lm
|
||||
|
||||
map-server: txtobj/map.o txtobj/chrif.o txtobj/clif.o txtobj/pc.o txtobj/npc.o txtobj/chat.o txtobj/path.o txtobj/itemdb.o txtobj/mob.o txtobj/script.o txtobj/storage.o txtobj/skill.o txtobj/atcommand.o txtobj/charcommand.o txtobj/battle.o txtobj/intif.o txtobj/trade.o txtobj/party.o txtobj/vending.o txtobj/guild.o txtobj/pet.o txtobj/log.o $(COMMON_OBJ)
|
||||
map-server: txtobj/map.o txtobj/chrif.o txtobj/clif.o txtobj/pc.o txtobj/status.o txtobj/npc.o txtobj/chat.o txtobj/path.o txtobj/itemdb.o txtobj/mob.o txtobj/script.o txtobj/storage.o txtobj/skill.o txtobj/atcommand.o txtobj/charcommand.o txtobj/battle.o txtobj/intif.o txtobj/trade.o txtobj/party.o txtobj/vending.o txtobj/guild.o txtobj/pet.o txtobj/log.o $(COMMON_OBJ)
|
||||
$(CC) -o ../../$@ $> $(LIBS) $(LIB_S)
|
||||
|
||||
map-server_sql: sqlobj/map.o sqlobj/chrif.o sqlobj/clif.o sqlobj/pc.o sqlobj/npc.o sqlobj/chat.o sqlobj/path.o sqlobj/itemdb.o sqlobj/mob.o sqlobj/script.o sqlobj/storage.o sqlobj/skill.o sqlobj/atcommand.o sqlobj/charcommand.o sqlobj/battle.o sqlobj/intif.o sqlobj/trade.o sqlobj/party.o sqlobj/vending.o sqlobj/guild.o sqlobj/pet.o sqlobj/mail.o sqlobj/log.o $(COMMON_OBJ)
|
||||
map-server_sql: sqlobj/map.o sqlobj/chrif.o sqlobj/clif.o sqlobj/pc.o sqlobj/status.o sqlobj/npc.o sqlobj/chat.o sqlobj/path.o sqlobj/itemdb.o sqlobj/mob.o sqlobj/script.o sqlobj/storage.o sqlobj/skill.o sqlobj/atcommand.o sqlobj/charcommand.o sqlobj/battle.o sqlobj/intif.o sqlobj/trade.o sqlobj/party.o sqlobj/vending.o sqlobj/guild.o sqlobj/pet.o sqlobj/mail.o sqlobj/log.o $(COMMON_OBJ)
|
||||
$(CC) -o ../../$@ $> $(LIB_S)
|
||||
|
||||
txtobj/%.o: %.c
|
||||
@ -29,6 +29,7 @@ txtobj/map.o: map.c map.h chrif.h clif.h npc.h pc.h mob.h chat.h skill.h itemdb.
|
||||
txtobj/chrif.o: chrif.c map.h battle.h chrif.h clif.h intif.h pc.h npc.h ../common/socket.h ../common/timer.h ../common/mmo.h ../common/showmsg.h
|
||||
txtobj/clif.o: clif.c map.h chrif.h clif.h mob.h intif.h pc.h npc.h itemdb.h chat.h script.h storage.h party.h guild.h atcommand.h pet.h charcommand.h ../common/socket.h ../common/timer.h ../common/mmo.h ../common/version.h ../common/showmsg.h
|
||||
txtobj/pc.o: pc.c map.h clif.h intif.h pc.h npc.h mob.h itemdb.h battle.h skill.h script.h party.h guild.h pet.h trade.h storage.h chat.h vending.h ../common/timer.h ../common/mmo.h ../common/db.h ../common/showmsg.h
|
||||
txtobj/status.o: status.c pc.h map.h clif.h status.h mob.h itemdb.h battle.h skill.h script.h pet.h guild.h ../common/timer.h ../common/mmo.h ../common/db.h ../common/showmsg.h
|
||||
txtobj/npc.o: npc.c map.h npc.h clif.h pc.h script.h mob.h itemdb.h battle.h ../common/db.h ../common/timer.h ../common/mmo.h ../common/showmsg.h
|
||||
txtobj/chat.o: chat.c map.h clif.h pc.h chat.h ../common/db.h ../common/mmo.h ../common/showmsg.h
|
||||
txtobj/path.o: path.c map.h battle.h ../common/mmo.h ../common/showmsg.h
|
||||
@ -52,6 +53,7 @@ sqlobj/map.o: map.c map.h chrif.h clif.h npc.h pc.h mob.h chat.h skill.h itemdb.
|
||||
sqlobj/chrif.o: chrif.c map.h battle.h chrif.h clif.h intif.h pc.h npc.h ../common/socket.h ../common/timer.h ../common/mmo.h ../common/showmsg.h
|
||||
sqlobj/clif.o: clif.c map.h chrif.h clif.h mob.h intif.h pc.h npc.h itemdb.h chat.h script.h storage.h party.h guild.h atcommand.h pet.h charcommand.h ../common/socket.h ../common/timer.h ../common/mmo.h ../common/version.h ../common/showmsg.h
|
||||
sqlobj/pc.o: pc.c map.h clif.h intif.h pc.h npc.h mob.h itemdb.h battle.h skill.h script.h party.h guild.h pet.h trade.h storage.h chat.h vending.h log.h ../common/timer.h ../common/mmo.h ../common/db.h ../common/showmsg.h
|
||||
sqlobj/status.o: status.c pc.h map.h clif.h status.h mob.h itemdb.h battle.h skill.h script.h pet.h guild.h ../common/timer.h ../common/mmo.h ../common/db.h ../common/showmsg.h
|
||||
sqlobj/npc.o: npc.c map.h npc.h clif.h pc.h script.h mob.h itemdb.h battle.h ../common/db.h ../common/timer.h ../common/mmo.h ../common/showmsg.h
|
||||
sqlobj/chat.o: chat.c map.h clif.h pc.h chat.h ../common/db.h ../common/mmo.h ../common/showmsg.h
|
||||
sqlobj/path.o: path.c map.h battle.h ../common/mmo.h ../common/showmsg.h
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include "itemdb.h"
|
||||
#include "map.h"
|
||||
#include "pc.h"
|
||||
#include "status.h"
|
||||
#include "skill.h"
|
||||
#include "mob.h"
|
||||
#include "pet.h"
|
||||
@ -1935,7 +1936,7 @@ int atcommand_option(
|
||||
}
|
||||
|
||||
clif_changeoption(&sd->bl);
|
||||
pc_calcstatus(sd, 0);
|
||||
status_calc_pc(sd, 0);
|
||||
clif_displaymessage(fd, msg_table[9]); // Options changed.
|
||||
|
||||
return 0;
|
||||
@ -2079,7 +2080,7 @@ int atcommand_jobchange(
|
||||
sd->status.class_ = sd->view_class = 4015;
|
||||
sd->status.option &= ~0x0020;
|
||||
clif_changeoption(&sd->bl);
|
||||
pc_calcstatus(sd, 0);
|
||||
status_calc_pc(sd, 0);
|
||||
}
|
||||
} else {
|
||||
if (!pc_isriding(sd)) {
|
||||
@ -2461,7 +2462,7 @@ int atcommand_baselevelup(
|
||||
clif_updatestatus(sd, SP_BASELEVEL);
|
||||
clif_updatestatus(sd, SP_NEXTBASEEXP);
|
||||
clif_updatestatus(sd, SP_STATUSPOINT);
|
||||
pc_calcstatus(sd, 0);
|
||||
status_calc_pc(sd, 0);
|
||||
pc_heal(sd, sd->status.max_hp, sd->status.max_sp);
|
||||
clif_misceffect(&sd->bl, 0);
|
||||
clif_displaymessage(fd, msg_table[21]); // Base level raised.
|
||||
@ -2482,7 +2483,7 @@ int atcommand_baselevelup(
|
||||
sd->status.base_level += level;
|
||||
clif_updatestatus(sd, SP_BASELEVEL);
|
||||
clif_updatestatus(sd, SP_NEXTBASEEXP);
|
||||
pc_calcstatus(sd, 0);
|
||||
status_calc_pc(sd, 0);
|
||||
clif_displaymessage(fd, msg_table[22]); // Base level lowered.
|
||||
}
|
||||
|
||||
@ -2528,7 +2529,7 @@ int atcommand_joblevelup(
|
||||
clif_updatestatus(sd, SP_NEXTJOBEXP);
|
||||
sd->status.skill_point += level;
|
||||
clif_updatestatus(sd, SP_SKILLPOINT);
|
||||
pc_calcstatus(sd, 0);
|
||||
status_calc_pc(sd, 0);
|
||||
clif_misceffect(&sd->bl, 1);
|
||||
clif_displaymessage(fd, msg_table[24]); // Job level raised.
|
||||
} else {
|
||||
@ -2547,7 +2548,7 @@ int atcommand_joblevelup(
|
||||
sd->status.skill_point = 0;
|
||||
clif_updatestatus(sd, SP_SKILLPOINT);
|
||||
} // to add: remove status points from skills
|
||||
pc_calcstatus(sd, 0);
|
||||
status_calc_pc(sd, 0);
|
||||
clif_displaymessage(fd, msg_table[25]); // Job level lowered.
|
||||
}
|
||||
|
||||
@ -3864,7 +3865,7 @@ int atcommand_param(
|
||||
*status[index] = new_value;
|
||||
clif_updatestatus(sd, SP_STR + index);
|
||||
clif_updatestatus(sd, SP_USTR + index);
|
||||
pc_calcstatus(sd, 0);
|
||||
status_calc_pc(sd, 0);
|
||||
clif_displaymessage(fd, msg_table[42]); // Stat changed.
|
||||
} else {
|
||||
if (value < 0)
|
||||
@ -3909,7 +3910,7 @@ int atcommand_stat_all(
|
||||
*status[index] = new_value;
|
||||
clif_updatestatus(sd, SP_STR + index);
|
||||
clif_updatestatus(sd, SP_USTR + index);
|
||||
pc_calcstatus(sd, 0);
|
||||
status_calc_pc(sd, 0);
|
||||
count++;
|
||||
}
|
||||
}
|
||||
@ -4057,9 +4058,9 @@ int atcommand_petfriendly(
|
||||
if ((sd->pet.intimate > 0 && t <= 0) ||
|
||||
(sd->pet.intimate <= 0 && t > 0)) {
|
||||
if (sd->bl.prev != NULL)
|
||||
pc_calcstatus(sd, 0);
|
||||
status_calc_pc(sd, 0);
|
||||
else
|
||||
pc_calcstatus(sd, 2);
|
||||
status_calc_pc(sd, 2);
|
||||
}
|
||||
}
|
||||
clif_displaymessage(fd, msg_table[182]); // Pet friendly value changed!
|
||||
@ -4673,7 +4674,7 @@ int atcommand_character_baselevel(
|
||||
clif_updatestatus(pl_sd, SP_BASELEVEL);
|
||||
clif_updatestatus(pl_sd, SP_NEXTBASEEXP);
|
||||
clif_updatestatus(pl_sd, SP_STATUSPOINT);
|
||||
pc_calcstatus(pl_sd, 0);
|
||||
status_calc_pc(pl_sd, 0);
|
||||
pc_heal(pl_sd, pl_sd->status.max_hp, pl_sd->status.max_sp);
|
||||
clif_misceffect(&pl_sd->bl, 0);
|
||||
clif_displaymessage(fd, msg_table[65]); // Character's base level raised.
|
||||
@ -4694,7 +4695,7 @@ int atcommand_character_baselevel(
|
||||
pl_sd->status.base_level += level;
|
||||
clif_updatestatus(pl_sd, SP_BASELEVEL);
|
||||
clif_updatestatus(pl_sd, SP_NEXTBASEEXP);
|
||||
pc_calcstatus(pl_sd, 0);
|
||||
status_calc_pc(pl_sd, 0);
|
||||
clif_displaymessage(fd, msg_table[66]); // Character's base level lowered.
|
||||
}
|
||||
} else {
|
||||
@ -4755,7 +4756,7 @@ int atcommand_character_joblevel(
|
||||
clif_updatestatus(pl_sd, SP_NEXTJOBEXP);
|
||||
pl_sd->status.skill_point += level;
|
||||
clif_updatestatus(pl_sd, SP_SKILLPOINT);
|
||||
pc_calcstatus(pl_sd, 0);
|
||||
status_calc_pc(pl_sd, 0);
|
||||
clif_misceffect(&pl_sd->bl, 1);
|
||||
clif_displaymessage(fd, msg_table[68]); // character's job level raised.
|
||||
} else {
|
||||
@ -4774,7 +4775,7 @@ int atcommand_character_joblevel(
|
||||
pl_sd->status.skill_point = 0;
|
||||
clif_updatestatus(pl_sd, SP_SKILLPOINT);
|
||||
} // to add: remove status points from skills
|
||||
pc_calcstatus(pl_sd, 0);
|
||||
status_calc_pc(pl_sd, 0);
|
||||
clif_displaymessage(fd, msg_table[69]); // Character's job level lowered.
|
||||
}
|
||||
} else {
|
||||
@ -7909,7 +7910,7 @@ int atcommand_unmute(
|
||||
if((pl_sd=map_nick2sd((char *) message)) != NULL) {
|
||||
if(pl_sd->sc_data[SC_NOCHAT].timer!=-1) {
|
||||
pl_sd->status.manner = 0; // have to set to 0 first [celest]
|
||||
skill_status_change_end(&pl_sd->bl,SC_NOCHAT,-1);
|
||||
status_change_end(&pl_sd->bl,SC_NOCHAT,-1);
|
||||
clif_displaymessage(sd->fd,"Player unmuted");
|
||||
}
|
||||
else
|
||||
@ -7985,7 +7986,7 @@ int atcommand_mute(
|
||||
if ((pl_sd = map_nick2sd(character)) != NULL) {
|
||||
pl_sd->status.manner -= manner;
|
||||
if(pl_sd->status.manner < 0)
|
||||
skill_status_change_start(&pl_sd->bl,SC_NOCHAT,0,0,0,0,0,0);
|
||||
status_change_start(&pl_sd->bl,SC_NOCHAT,0,0,0,0,0,0);
|
||||
}
|
||||
else {
|
||||
clif_displaymessage(fd, msg_table[3]); // Character not found.
|
||||
|
1697
src/map/battle.c
1697
src/map/battle.c
File diff suppressed because it is too large
Load Diff
@ -63,50 +63,6 @@ int battle_weapon_attack( struct block_list *bl,struct block_list *target,
|
||||
|
||||
// 各種パラメータを得る
|
||||
int battle_counttargeted(struct block_list *bl,struct block_list *src,int target_lv);
|
||||
int battle_get_class(struct block_list *bl);
|
||||
int battle_get_dir(struct block_list *bl);
|
||||
int battle_get_lv(struct block_list *bl);
|
||||
int battle_get_range(struct block_list *bl);
|
||||
int battle_get_hp(struct block_list *bl);
|
||||
int battle_get_max_hp(struct block_list *bl);
|
||||
int battle_get_str(struct block_list *bl);
|
||||
int battle_get_agi(struct block_list *bl);
|
||||
int battle_get_vit(struct block_list *bl);
|
||||
int battle_get_int(struct block_list *bl);
|
||||
int battle_get_dex(struct block_list *bl);
|
||||
int battle_get_luk(struct block_list *bl);
|
||||
int battle_get_hit(struct block_list *bl);
|
||||
int battle_get_flee(struct block_list *bl);
|
||||
int battle_get_def(struct block_list *bl);
|
||||
int battle_get_mdef(struct block_list *bl);
|
||||
int battle_get_flee2(struct block_list *bl);
|
||||
int battle_get_def2(struct block_list *bl);
|
||||
int battle_get_mdef2(struct block_list *bl);
|
||||
int battle_get_baseatk(struct block_list *bl);
|
||||
int battle_get_atk(struct block_list *bl);
|
||||
int battle_get_atk2(struct block_list *bl);
|
||||
int battle_get_speed(struct block_list *bl);
|
||||
int battle_get_adelay(struct block_list *bl);
|
||||
int battle_get_amotion(struct block_list *bl);
|
||||
int battle_get_dmotion(struct block_list *bl);
|
||||
int battle_get_element(struct block_list *bl);
|
||||
int battle_get_attack_element(struct block_list *bl);
|
||||
int battle_get_attack_element2(struct block_list *bl); //<2F>¶Žè•<C3A8>Ší‘®<E28098>«Žæ“¾
|
||||
#define battle_get_elem_type(bl) (battle_get_element(bl)%10)
|
||||
#define battle_get_elem_level(bl) (battle_get_element(bl)/10/2)
|
||||
int battle_get_party_id(struct block_list *bl);
|
||||
int battle_get_guild_id(struct block_list *bl);
|
||||
int battle_get_race(struct block_list *bl);
|
||||
int battle_get_size(struct block_list *bl);
|
||||
int battle_get_mode(struct block_list *bl);
|
||||
int battle_get_mexp(struct block_list *bl);
|
||||
|
||||
struct status_change *battle_get_sc_data(struct block_list *bl);
|
||||
short *battle_get_sc_count(struct block_list *bl);
|
||||
short *battle_get_opt1(struct block_list *bl);
|
||||
short *battle_get_opt2(struct block_list *bl);
|
||||
short *battle_get_opt3(struct block_list *bl);
|
||||
short *battle_get_option(struct block_list *bl);
|
||||
|
||||
enum {
|
||||
BCT_NOENEMY =0x00000,
|
||||
|
@ -15,6 +15,7 @@
|
||||
#include "itemdb.h"
|
||||
#include "map.h"
|
||||
#include "pc.h"
|
||||
#include "status.h"
|
||||
#include "skill.h"
|
||||
#include "mob.h"
|
||||
#include "pet.h"
|
||||
@ -319,7 +320,7 @@ int charcommand_jobchange(
|
||||
pl_sd->status.class_ = pl_sd->view_class = 4015;
|
||||
pl_sd->status.option &= ~0x0020;
|
||||
clif_changeoption(&pl_sd->bl);
|
||||
pc_calcstatus(pl_sd, 0);
|
||||
status_calc_pc(pl_sd, 0);
|
||||
}
|
||||
} else {
|
||||
if (!pc_isriding(sd)) {
|
||||
@ -433,9 +434,9 @@ int charcommand_petfriendly(
|
||||
if ((pl_sd->pet.intimate > 0 && t <= 0) ||
|
||||
(pl_sd->pet.intimate <= 0 && t > 0)) {
|
||||
if (pl_sd->bl.prev != NULL)
|
||||
pc_calcstatus(pl_sd, 0);
|
||||
status_calc_pc(pl_sd, 0);
|
||||
else
|
||||
pc_calcstatus(pl_sd, 2);
|
||||
status_calc_pc(pl_sd, 2);
|
||||
}
|
||||
}
|
||||
clif_displaymessage(pl_sd->fd, msg_table[182]); // Pet friendly value changed!
|
||||
@ -612,7 +613,7 @@ int charcommand_option(
|
||||
}
|
||||
}
|
||||
clif_changeoption(&pl_sd->bl);
|
||||
pc_calcstatus(pl_sd, 0);
|
||||
status_calc_pc(pl_sd, 0);
|
||||
clif_displaymessage(fd, msg_table[58]); // Character's options changed.
|
||||
} else {
|
||||
clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include "chrif.h"
|
||||
#include "clif.h"
|
||||
#include "pc.h"
|
||||
#include "status.h"
|
||||
#include "npc.h"
|
||||
#include "itemdb.h"
|
||||
#include "chat.h"
|
||||
@ -695,7 +696,7 @@ static int clif_set0078(struct map_session_data *sd, unsigned char *buf) {
|
||||
|
||||
WBUFW(buf,0) = 0x78;
|
||||
WBUFL(buf,2) = sd->bl.id;
|
||||
WBUFW(buf,6) = battle_get_speed(&sd->bl);
|
||||
WBUFW(buf,6) = status_get_speed(&sd->bl);
|
||||
WBUFW(buf,8) = sd->opt1;
|
||||
WBUFW(buf,10) = sd->opt2;
|
||||
WBUFW(buf,12) = sd->status.option;
|
||||
@ -707,7 +708,7 @@ static int clif_set0078(struct map_session_data *sd, unsigned char *buf) {
|
||||
WBUFB(buf,49) = 5;
|
||||
WBUFB(buf,50) = 5;
|
||||
WBUFB(buf,51) = 0;
|
||||
WBUFW(buf,52) = ((level = battle_get_lv(&sd->bl)) > battle_config.max_lv) ? battle_config.max_lv : level;
|
||||
WBUFW(buf,52) = ((level = status_get_lv(&sd->bl)) > battle_config.max_lv) ? battle_config.max_lv : level;
|
||||
|
||||
return packet_len_table[0x78];
|
||||
}
|
||||
@ -785,7 +786,7 @@ static int clif_set0078(struct map_session_data *sd, unsigned char *buf) {
|
||||
WBUFB(buf,49) = 5;
|
||||
WBUFB(buf,50) = 5;
|
||||
WBUFB(buf,51) = sd->state.dead_sit;
|
||||
WBUFW(buf,52) = ((level = battle_get_lv(&sd->bl)) > battle_config.max_lv) ? battle_config.max_lv : level;
|
||||
WBUFW(buf,52) = ((level = status_get_lv(&sd->bl)) > battle_config.max_lv) ? battle_config.max_lv : level;
|
||||
|
||||
return packet_len_table[0x1d8];
|
||||
#endif
|
||||
@ -804,7 +805,7 @@ static int clif_set007b(struct map_session_data *sd,unsigned char *buf) {
|
||||
|
||||
WBUFW(buf,0)=0x7b;
|
||||
WBUFL(buf,2)=sd->bl.id;
|
||||
WBUFW(buf,6)=battle_get_speed(&sd->bl);
|
||||
WBUFW(buf,6)=status_get_speed(&sd->bl);
|
||||
WBUFW(buf,8)=sd->opt1;
|
||||
WBUFW(buf,10)=sd->opt2;
|
||||
WBUFW(buf,12)=sd->status.option;
|
||||
@ -816,7 +817,7 @@ static int clif_set007b(struct map_session_data *sd,unsigned char *buf) {
|
||||
WBUFB(buf,55)=0;
|
||||
WBUFB(buf,56)=5;
|
||||
WBUFB(buf,57)=5;
|
||||
WBUFW(buf,58)=((level = battle_get_lv(&sd->bl))>battle_config.max_lv)? battle_config.max_lv:level;
|
||||
WBUFW(buf,58)=((level = status_get_lv(&sd->bl))>battle_config.max_lv)? battle_config.max_lv:level;
|
||||
|
||||
return packet_len_table[0x7b];
|
||||
}
|
||||
@ -975,7 +976,7 @@ static int clif_mob0078(struct mob_data *md, unsigned char *buf)
|
||||
|
||||
WBUFW(buf,0)=0x78;
|
||||
WBUFL(buf,2)=md->bl.id;
|
||||
WBUFW(buf,6)=battle_get_speed(&md->bl);
|
||||
WBUFW(buf,6)=status_get_speed(&md->bl);
|
||||
WBUFW(buf,8)=md->opt1;
|
||||
WBUFW(buf,10)=md->opt2;
|
||||
WBUFW(buf,12)=md->option;
|
||||
@ -1009,7 +1010,7 @@ static int clif_mob0078(struct mob_data *md, unsigned char *buf)
|
||||
WBUFB(buf,48)|=md->dir&0x0f;
|
||||
WBUFB(buf,49)=5;
|
||||
WBUFB(buf,50)=5;
|
||||
WBUFW(buf,52)=((level = battle_get_lv(&md->bl))>battle_config.max_lv)? battle_config.max_lv:level;
|
||||
WBUFW(buf,52)=((level = status_get_lv(&md->bl))>battle_config.max_lv)? battle_config.max_lv:level;
|
||||
|
||||
return packet_len_table[0x78];
|
||||
}
|
||||
@ -1027,7 +1028,7 @@ static int clif_mob007b(struct mob_data *md, unsigned char *buf) {
|
||||
|
||||
WBUFW(buf,0)=0x7b;
|
||||
WBUFL(buf,2)=md->bl.id;
|
||||
WBUFW(buf,6)=battle_get_speed(&md->bl);
|
||||
WBUFW(buf,6)=status_get_speed(&md->bl);
|
||||
WBUFW(buf,8)=md->opt1;
|
||||
WBUFW(buf,10)=md->opt2;
|
||||
WBUFW(buf,12)=md->option;
|
||||
@ -1062,7 +1063,7 @@ static int clif_mob007b(struct mob_data *md, unsigned char *buf) {
|
||||
WBUFPOS2(buf,50,md->bl.x,md->bl.y,md->to_x,md->to_y);
|
||||
WBUFB(buf,56)=5;
|
||||
WBUFB(buf,57)=5;
|
||||
WBUFW(buf,58)=((level = battle_get_lv(&md->bl))>battle_config.max_lv)? battle_config.max_lv:level;
|
||||
WBUFW(buf,58)=((level = status_get_lv(&md->bl))>battle_config.max_lv)? battle_config.max_lv:level;
|
||||
|
||||
return packet_len_table[0x7b];
|
||||
}
|
||||
@ -1156,7 +1157,7 @@ static int clif_pet0078(struct pet_data *pd, unsigned char *buf) {
|
||||
WBUFB(buf,48)|=pd->dir&0x0f;
|
||||
WBUFB(buf,49)=0;
|
||||
WBUFB(buf,50)=0;
|
||||
WBUFW(buf,52)=((level = battle_get_lv(&pd->bl))>battle_config.max_lv)? battle_config.max_lv:level;
|
||||
WBUFW(buf,52)=((level = status_get_lv(&pd->bl))>battle_config.max_lv)? battle_config.max_lv:level;
|
||||
|
||||
return packet_len_table[0x78];
|
||||
}
|
||||
@ -1199,7 +1200,7 @@ static int clif_pet007b(struct pet_data *pd, unsigned char *buf) {
|
||||
WBUFPOS2(buf,50,pd->bl.x,pd->bl.y,pd->to_x,pd->to_y);
|
||||
WBUFB(buf,56)=0;
|
||||
WBUFB(buf,57)=0;
|
||||
WBUFW(buf,58)=((level = battle_get_lv(&pd->bl))>battle_config.max_lv)? battle_config.max_lv:level;
|
||||
WBUFW(buf,58)=((level = status_get_lv(&pd->bl))>battle_config.max_lv)? battle_config.max_lv:level;
|
||||
|
||||
return packet_len_table[0x7b];
|
||||
}
|
||||
@ -2884,13 +2885,13 @@ int clif_changeoption(struct block_list* bl)
|
||||
|
||||
nullpo_retr(0, bl);
|
||||
|
||||
option = *battle_get_option(bl);
|
||||
sc_data = battle_get_sc_data(bl);
|
||||
option = *status_get_option(bl);
|
||||
sc_data = status_get_sc_data(bl);
|
||||
|
||||
WBUFW(buf,0) = 0x119;
|
||||
WBUFL(buf,2) = bl->id;
|
||||
WBUFW(buf,6) = *battle_get_opt1(bl);
|
||||
WBUFW(buf,8) = *battle_get_opt2(bl);
|
||||
WBUFW(buf,6) = *status_get_opt1(bl);
|
||||
WBUFW(buf,8) = *status_get_opt2(bl);
|
||||
WBUFW(buf,10) = option;
|
||||
WBUFB(buf,12) = 0; // ??
|
||||
|
||||
@ -2908,9 +2909,9 @@ int clif_changeoption(struct block_list* bl)
|
||||
for(i=0;i<sizeof(omask)/sizeof(omask[0]);i++){
|
||||
if( option&omask[i] ){
|
||||
if( sc_data[scnum[i]].timer==-1)
|
||||
skill_status_change_start(bl,scnum[i],0,0,0,0,0,0);
|
||||
status_change_start(bl,scnum[i],0,0,0,0,0,0);
|
||||
} else {
|
||||
skill_status_change_end(bl,scnum[i],-1);
|
||||
status_change_end(bl,scnum[i],-1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3695,7 +3696,7 @@ int clif_damage(struct block_list *src,struct block_list *dst,unsigned int tick,
|
||||
nullpo_retr(0, src);
|
||||
nullpo_retr(0, dst);
|
||||
|
||||
sc_data = battle_get_sc_data(dst);
|
||||
sc_data = status_get_sc_data(dst);
|
||||
|
||||
if(type != 4 && dst->type == BL_PC && ((struct map_session_data *)dst)->special_state.infinite_endure)
|
||||
type = 9;
|
||||
@ -4191,7 +4192,7 @@ int clif_skillinfo(struct map_session_data *sd,int skillid,int type,int range)
|
||||
if(range < 0) {
|
||||
range = skill_get_range(id,sd->status.skill[skillid].lv);
|
||||
if(range < 0)
|
||||
range = battle_get_range(&sd->bl) - (range + 1);
|
||||
range = status_get_range(&sd->bl) - (range + 1);
|
||||
WFIFOW(fd,12)= range;
|
||||
} else
|
||||
WFIFOW(fd,12)= range;
|
||||
@ -4228,7 +4229,7 @@ int clif_skillinfoblock(struct map_session_data *sd)
|
||||
WFIFOW(fd,len+8) = skill_get_sp(id,sd->status.skill[i].lv);
|
||||
range = skill_get_range(id,sd->status.skill[i].lv);
|
||||
if(range < 0)
|
||||
range = battle_get_range(&sd->bl) - (range + 1);
|
||||
range = status_get_range(&sd->bl) - (range + 1);
|
||||
WFIFOW(fd,len+10)= range;
|
||||
memset(WFIFOP(fd,len+12),0,24);
|
||||
if(!(skill_get_inf2(id)&0x01) || battle_config.quest_skill_learn == 1 || (battle_config.gm_allskill > 0 && pc_isGM(sd) >= battle_config.gm_allskill) )
|
||||
@ -4263,7 +4264,7 @@ int clif_skillup(struct map_session_data *sd,int skill_num)
|
||||
WFIFOW(fd,6) = skill_get_sp(skill_num,sd->status.skill[skill_num].lv);
|
||||
range = skill_get_range(skill_num,sd->status.skill[skill_num].lv);
|
||||
if(range < 0)
|
||||
range = battle_get_range(&sd->bl) - (range + 1);
|
||||
range = status_get_range(&sd->bl) - (range + 1);
|
||||
WFIFOW(fd,8) = range;
|
||||
//WFIFOB(fd,10) = (sd->status.skill[skill_num].lv < skill_get_max(sd->status.skill[skill_num].id)) ? 1 : 0;
|
||||
WFIFOB(fd,10) = (sd->status.skill[skill_num].lv < skill_tree_get_max(sd->status.skill[skill_num].id, sd->status.class_)) ? 1 : 0;
|
||||
@ -4355,7 +4356,7 @@ int clif_skill_damage(struct block_list *src,struct block_list *dst,
|
||||
nullpo_retr(0, src);
|
||||
nullpo_retr(0, dst);
|
||||
|
||||
sc_data = battle_get_sc_data(dst);
|
||||
sc_data = status_get_sc_data(dst);
|
||||
|
||||
if(type != 5 && dst->type == BL_PC && ((struct map_session_data *)dst)->special_state.infinite_endure)
|
||||
type = 9;
|
||||
@ -4410,7 +4411,7 @@ int clif_skill_damage2(struct block_list *src,struct block_list *dst,
|
||||
nullpo_retr(0, src);
|
||||
nullpo_retr(0, dst);
|
||||
|
||||
sc_data = battle_get_sc_data(dst);
|
||||
sc_data = status_get_sc_data(dst);
|
||||
|
||||
if(type != 5 && dst->type == BL_PC && ((struct map_session_data *)dst)->special_state.infinite_endure)
|
||||
type = 9;
|
||||
@ -4639,10 +4640,10 @@ int clif_skill_estimation(struct map_session_data *sd,struct block_list *dst)
|
||||
WBUFW(buf, 4)=md->level;
|
||||
WBUFW(buf, 6)=mob_db[md->class_].size;
|
||||
WBUFL(buf, 8)=md->hp;
|
||||
WBUFW(buf,12)=battle_get_def2(&md->bl);
|
||||
WBUFW(buf,12)=status_get_def2(&md->bl);
|
||||
WBUFW(buf,14)=mob_db[md->class_].race;
|
||||
WBUFW(buf,16)=battle_get_mdef2(&md->bl) - (mob_db[md->class_].vit>>1);
|
||||
WBUFW(buf,18)=battle_get_elem_type(&md->bl);
|
||||
WBUFW(buf,16)=status_get_mdef2(&md->bl) - (mob_db[md->class_].vit>>1);
|
||||
WBUFW(buf,18)=status_get_elem_type(&md->bl);
|
||||
for(i=0;i<9;i++)
|
||||
WBUFB(buf,20+i)= battle_attr_fix(100,i+1,md->def_ele);
|
||||
|
||||
@ -5116,7 +5117,7 @@ int clif_item_skill(struct map_session_data *sd,int skillid,int skilllv,const ch
|
||||
WFIFOW(fd,10)=skill_get_sp(skillid,skilllv);
|
||||
range = skill_get_range(skillid,skilllv);
|
||||
if(range < 0)
|
||||
range = battle_get_range(&sd->bl) - (range + 1);
|
||||
range = status_get_range(&sd->bl) - (range + 1);
|
||||
WFIFOW(fd,12)=range;
|
||||
strncpy((char*)WFIFOP(fd,14),name,24);
|
||||
WFIFOB(fd,38)=0;
|
||||
@ -7529,13 +7530,13 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
|
||||
if(sd->status.hp<sd->status.max_hp>>2 && pc_checkskill(sd,SM_AUTOBERSERK)>0 &&
|
||||
(sd->sc_data[SC_PROVOKE].timer==-1 || sd->sc_data[SC_PROVOKE].val2==0 ))
|
||||
// ƒI<C692>[ƒgƒo<C692>[ƒT<C692>[ƒN”“®
|
||||
skill_status_change_start(&sd->bl,SC_PROVOKE,10,1,0,0,0,0);
|
||||
status_change_start(&sd->bl,SC_PROVOKE,10,1,0,0,0,0);
|
||||
|
||||
// if(time(&timer) < ((weddingtime=pc_readglobalreg(sd,"PC_WEDDING_TIME")) + 3600))
|
||||
// skill_status_change_start(&sd->bl,SC_WEDDING,0,weddingtime,0,0,36000,0);
|
||||
// status_change_start(&sd->bl,SC_WEDDING,0,weddingtime,0,0,36000,0);
|
||||
|
||||
if(battle_config.muting_players && sd->status.manner < 0)
|
||||
skill_status_change_start(&sd->bl,SC_NOCHAT,0,0,0,0,0,0);
|
||||
status_change_start(&sd->bl,SC_NOCHAT,0,0,0,0,0,0);
|
||||
|
||||
if (night_flag) {
|
||||
if (battle_config.night_darkness_level > 0 && !map[sd->bl.m].flag.indoors)
|
||||
@ -7554,16 +7555,16 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
|
||||
// option
|
||||
clif_changeoption(&sd->bl);
|
||||
if(sd->sc_data[SC_TRICKDEAD].timer != -1)
|
||||
skill_status_change_end(&sd->bl,SC_TRICKDEAD,-1);
|
||||
status_change_end(&sd->bl,SC_TRICKDEAD,-1);
|
||||
if(sd->sc_data[SC_SIGNUMCRUCIS].timer != -1 && !battle_check_undead(7,sd->def_ele))
|
||||
skill_status_change_end(&sd->bl,SC_SIGNUMCRUCIS,-1);
|
||||
status_change_end(&sd->bl,SC_SIGNUMCRUCIS,-1);
|
||||
if(sd->special_state.infinite_endure && sd->sc_data[SC_ENDURE].timer == -1)
|
||||
skill_status_change_start(&sd->bl,SC_ENDURE,10,1,0,0,0,0);
|
||||
status_change_start(&sd->bl,SC_ENDURE,10,1,0,0,0,0);
|
||||
for(i=0;i<MAX_INVENTORY;i++){
|
||||
if(sd->status.inventory[i].equip && sd->status.inventory[i].equip & 0x0002 && sd->status.inventory[i].attribute==1)
|
||||
skill_status_change_start(&sd->bl,SC_BROKNWEAPON,0,0,0,0,0,0);
|
||||
status_change_start(&sd->bl,SC_BROKNWEAPON,0,0,0,0,0,0);
|
||||
if(sd->status.inventory[i].equip && sd->status.inventory[i].equip & 0x0010 && sd->status.inventory[i].attribute==1)
|
||||
skill_status_change_start(&sd->bl,SC_BROKNARMOR,0,0,0,0,0,0);
|
||||
status_change_start(&sd->bl,SC_BROKNARMOR,0,0,0,0,0,0);
|
||||
}
|
||||
|
||||
map_foreachinarea(clif_getareachar,sd->bl.m,sd->bl.x-AREA_SIZE,sd->bl.y-AREA_SIZE,sd->bl.x+AREA_SIZE,sd->bl.y+AREA_SIZE,0,sd);
|
||||
@ -7961,7 +7962,7 @@ void clif_parse_GlobalMessage(int fd, struct map_session_data *sd) { // S 008c <
|
||||
sd->state.snovice_flag = 3;
|
||||
else if (sd->state.snovice_flag == 3) {
|
||||
int i;
|
||||
skill_status_change_start(&sd->bl,SkillStatusChangeTable[MO_EXPLOSIONSPIRITS],1,0,0,0,skill_get_time(MO_EXPLOSIONSPIRITS,1),0 );
|
||||
status_change_start(&sd->bl,SkillStatusChangeTable[MO_EXPLOSIONSPIRITS],1,0,0,0,skill_get_time(MO_EXPLOSIONSPIRITS,1),0 );
|
||||
for(i=0;i<5;i++)
|
||||
pc_addspiritball(sd,skill_get_time(MO_CALLSPIRITS,1),5);
|
||||
sd->state.snovice_flag = 0;
|
||||
@ -8031,7 +8032,7 @@ void clif_changed_dir(struct block_list *bl) {
|
||||
WBUFL(buf,2) = bl->id;
|
||||
if (sd)
|
||||
WBUFW(buf,6) = sd->head_dir;
|
||||
WBUFB(buf,8) = battle_get_dir(bl);
|
||||
WBUFB(buf,8) = status_get_dir(bl);
|
||||
if (sd && sd->disguise > 23 && sd->disguise < 4001) // mob disguises [Valaris]
|
||||
clif_send(buf, packet_len_table[0x9c], &sd->bl, AREA);
|
||||
else
|
||||
@ -8610,9 +8611,9 @@ void clif_parse_UnequipItem(int fd,struct map_session_data *sd)
|
||||
index = RFIFOW(fd,2)-2;
|
||||
|
||||
/*if(sd->status.inventory[index].attribute == 1 && sd->sc_data && sd->sc_data[SC_BROKNWEAPON].timer!=-1)
|
||||
skill_status_change_end(&sd->bl,SC_BROKNWEAPON,-1);
|
||||
status_change_end(&sd->bl,SC_BROKNWEAPON,-1);
|
||||
if(sd->status.inventory[index].attribute == 1 && sd->sc_data && sd->sc_data[SC_BROKNARMOR].timer!=-1)
|
||||
skill_status_change_end(&sd->bl,SC_BROKNARMOR,-1);
|
||||
status_change_end(&sd->bl,SC_BROKNARMOR,-1);
|
||||
if(sd->sc_count && ( sd->sc_data[SC_BLADESTOP].timer!=-1 || sd->sc_data[SC_BERSERK].timer!=-1 ))
|
||||
return;*/
|
||||
|
||||
@ -10062,10 +10063,10 @@ void clif_parse_GMReqNoChat(int fd,struct map_session_data *sd)
|
||||
WFIFOSET(dstfd,packet_len_table[0x14b]);
|
||||
dstsd->status.manner -= limit;
|
||||
if(dstsd->status.manner < 0)
|
||||
skill_status_change_start(bl,SC_NOCHAT,0,0,0,0,0,0);
|
||||
status_change_start(bl,SC_NOCHAT,0,0,0,0,0,0);
|
||||
else{
|
||||
dstsd->status.manner = 0;
|
||||
skill_status_change_end(bl,SC_NOCHAT,-1);
|
||||
status_change_end(bl,SC_NOCHAT,-1);
|
||||
}
|
||||
printf("name:%s type:%d limit:%d manner:%d\n",dstsd->status.name,type,limit,dstsd->status.manner);
|
||||
}
|
||||
@ -10263,7 +10264,7 @@ void clif_parse_sn_explosionspirits(int fd, struct map_session_data *sd)
|
||||
}
|
||||
if(s_class.job == 23 && sd->status.base_exp > 0 && nextbaseexp > 0 && (int)((double)1000*sd->status.base_exp/nextbaseexp)%100==0){
|
||||
clif_skill_nodamage(&sd->bl,&sd->bl,MO_EXPLOSIONSPIRITS,5,1);
|
||||
skill_status_change_start(&sd->bl,SkillStatusChangeTable[MO_EXPLOSIONSPIRITS],5,0,0,0,skill_get_time(MO_EXPLOSIONSPIRITS,5),0 );
|
||||
status_change_start(&sd->bl,SkillStatusChangeTable[MO_EXPLOSIONSPIRITS],5,0,0,0,skill_get_time(MO_EXPLOSIONSPIRITS,5),0 );
|
||||
}
|
||||
}
|
||||
return;
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "battle.h"
|
||||
#include "npc.h"
|
||||
#include "pc.h"
|
||||
#include "status.h"
|
||||
#include "map.h"
|
||||
#include "mob.h"
|
||||
#include "intif.h"
|
||||
@ -995,7 +996,7 @@ int guild_skillup(struct map_session_data *sd,int skill_num,int flag)
|
||||
g->skill[idx].lv < guild_skill_get_max(skill_num) ){
|
||||
intif_guild_skillup(g->guild_id,skill_num,sd->status.account_id,flag);
|
||||
}
|
||||
pc_calcstatus (sd, 0); // Celest
|
||||
status_calc_pc (sd, 0); // Celest
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "intif.h"
|
||||
#include "npc.h"
|
||||
#include "pc.h"
|
||||
#include "status.h"
|
||||
#include "mob.h"
|
||||
#include "chat.h"
|
||||
#include "itemdb.h"
|
||||
@ -1011,7 +1012,7 @@ int map_quit(struct map_session_data *sd) {
|
||||
if(sd->sc_data && sd->sc_data[SC_BERSERK].timer!=-1) //バ?サ?ク中の終了はHPを100に
|
||||
sd->status.hp = 100;
|
||||
|
||||
skill_status_change_clear(&sd->bl,1); // ステ?タス異常を解除する
|
||||
status_change_clear(&sd->bl,1); // ステ?タス異常を解除する
|
||||
skill_clear_unitgroup(&sd->bl); // スキルユニットグル?プの削除
|
||||
skill_cleartimerskill(&sd->bl);
|
||||
|
||||
@ -1025,7 +1026,7 @@ int map_quit(struct map_session_data *sd) {
|
||||
skill_gangsterparadise(sd,0);
|
||||
|
||||
if (sd->state.auth)
|
||||
pc_calcstatus(sd,4);
|
||||
status_calc_pc(sd,4);
|
||||
// skill_clear_unitgroup(&sd->bl); // [Sara-chan]
|
||||
|
||||
clif_clearchar_area(&sd->bl,2);
|
||||
@ -2808,6 +2809,7 @@ int do_init(int argc, char *argv[]) {
|
||||
do_init_mob(); // npcの初期化時?でmob_spawnして、mob_dbを?照するのでinit_npcより先
|
||||
do_init_script();
|
||||
do_init_pc();
|
||||
do_init_status();
|
||||
do_init_party();
|
||||
do_init_guild();
|
||||
do_init_storage();
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "clif.h"
|
||||
#include "intif.h"
|
||||
#include "pc.h"
|
||||
#include "status.h"
|
||||
#include "mob.h"
|
||||
#include "guild.h"
|
||||
#include "itemdb.h"
|
||||
@ -449,8 +450,8 @@ static int calc_next_walk_step(struct mob_data *md)
|
||||
if(md->walkpath.path_pos>=md->walkpath.path_len)
|
||||
return -1;
|
||||
if(md->walkpath.path[md->walkpath.path_pos]&1)
|
||||
return battle_get_speed(&md->bl)*14/10;
|
||||
return battle_get_speed(&md->bl);
|
||||
return status_get_speed(&md->bl)*14/10;
|
||||
return status_get_speed(&md->bl);
|
||||
}
|
||||
|
||||
static int mob_walktoxy_sub(struct mob_data *md);
|
||||
@ -634,9 +635,9 @@ static int mob_attack(struct mob_data *md,unsigned int tick,int data)
|
||||
md->target_lv = battle_weapon_attack(&md->bl,tbl,tick,0);
|
||||
|
||||
if(!(battle_config.monster_cloak_check_type&2) && md->sc_data[SC_CLOAKING].timer != -1)
|
||||
skill_status_change_end(&md->bl,SC_CLOAKING,-1);
|
||||
status_change_end(&md->bl,SC_CLOAKING,-1);
|
||||
|
||||
md->attackabletime = tick + battle_get_adelay(&md->bl);
|
||||
md->attackabletime = tick + status_get_adelay(&md->bl);
|
||||
|
||||
md->timer=add_timer(md->attackabletime,mob_timer,md->bl.id,0);
|
||||
md->state.state=MS_ATTACK;
|
||||
@ -693,7 +694,7 @@ int mob_changestate(struct mob_data *md,int state,int type)
|
||||
if(i>0 && i<2000)
|
||||
md->timer=add_timer(md->attackabletime,mob_timer,md->bl.id,0);
|
||||
else if(type) {
|
||||
md->attackabletime = tick + battle_get_amotion(&md->bl);
|
||||
md->attackabletime = tick + status_get_amotion(&md->bl);
|
||||
md->timer=add_timer(md->attackabletime,mob_timer,md->bl.id,0);
|
||||
}
|
||||
else {
|
||||
@ -712,7 +713,7 @@ int mob_changestate(struct mob_data *md,int state,int type)
|
||||
// Since it died, all aggressors' attack to this mob is stopped.
|
||||
clif_foreachclient(mob_stopattacked,md->bl.id);
|
||||
skill_unit_out_all(&md->bl,gettick(),1);
|
||||
skill_status_change_clear(&md->bl,2); // ステータス異常を解除する
|
||||
status_change_clear(&md->bl,2); // ステータス異常を解除する
|
||||
skill_clear_unitgroup(&md->bl); // 全てのスキルユニットグループを削除する
|
||||
skill_cleartimerskill(&md->bl);
|
||||
if(md->deletetimer!=-1)
|
||||
@ -996,10 +997,10 @@ int mob_spawn(int id)
|
||||
memset(md->skillunit,0,sizeof(md->skillunit));
|
||||
memset(md->skillunittick,0,sizeof(md->skillunittick));
|
||||
|
||||
md->hp = battle_get_max_hp(&md->bl);
|
||||
md->hp = status_get_max_hp(&md->bl);
|
||||
if(md->hp<=0){
|
||||
mob_makedummymobdb(md->class_);
|
||||
md->hp = battle_get_max_hp(&md->bl);
|
||||
md->hp = status_get_max_hp(&md->bl);
|
||||
}
|
||||
|
||||
clif_spawnmob(md);
|
||||
@ -1067,7 +1068,7 @@ int mob_stop_walking(struct mob_data *md,int type)
|
||||
if(type&0x01)
|
||||
clif_fixmobpos(md);
|
||||
if(type&0x02) {
|
||||
int delay=battle_get_dmotion(&md->bl);
|
||||
int delay=status_get_dmotion(&md->bl);
|
||||
unsigned int tick = gettick();
|
||||
if(md->canmove_tick < tick)
|
||||
md->canmove_tick = tick + delay;
|
||||
@ -1169,8 +1170,8 @@ int mob_target(struct mob_data *md,struct block_list *bl,int dist)
|
||||
nullpo_retr(0, md);
|
||||
nullpo_retr(0, bl);
|
||||
|
||||
sc_data = battle_get_sc_data(bl);
|
||||
option = battle_get_option(bl);
|
||||
sc_data = status_get_sc_data(bl);
|
||||
option = status_get_option(bl);
|
||||
race=mob_db[md->class_].race;
|
||||
|
||||
if(!md->mode)
|
||||
@ -1502,7 +1503,7 @@ static int mob_randomwalk(struct mob_data *md,int tick)
|
||||
|
||||
nullpo_retr(0, md);
|
||||
|
||||
speed=battle_get_speed(&md->bl);
|
||||
speed=status_get_speed(&md->bl);
|
||||
if(DIFF_TICK(md->next_walktime,tick)<0){
|
||||
int i,x,y,c,d=12-md->move_fail_count;
|
||||
int mask[8][2] = {{0,1},{-1,1},{-1,0},{-1,-1},{0,-1},{1,-1},{1,0},{1,1}};
|
||||
@ -2110,7 +2111,7 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type)
|
||||
|
||||
nullpo_retr(0, md); //srcはNULLで呼ばれる場合もあるので、他でチェック
|
||||
|
||||
max_hp = battle_get_max_hp(&md->bl);
|
||||
max_hp = status_get_max_hp(&md->bl);
|
||||
|
||||
if(src && src->type == BL_PC) {
|
||||
sd = (struct map_session_data *)src;
|
||||
@ -2289,9 +2290,9 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type)
|
||||
} // end addition [Valaris]
|
||||
|
||||
if(md->option&2 )
|
||||
skill_status_change_end(&md->bl, SC_HIDING, -1);
|
||||
status_change_end(&md->bl, SC_HIDING, -1);
|
||||
if(md->option&4 )
|
||||
skill_status_change_end(&md->bl, SC_CLOAKING, -1);
|
||||
status_change_end(&md->bl, SC_CLOAKING, -1);
|
||||
|
||||
if(md->state.special_mob_ai == 2){//スフィアーマイン
|
||||
int skillidx=0;
|
||||
@ -2321,7 +2322,7 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type)
|
||||
memset(tmpsd,0,sizeof(tmpsd));
|
||||
memset(pt,0,sizeof(pt));
|
||||
|
||||
max_hp = battle_get_max_hp(&md->bl);
|
||||
max_hp = status_get_max_hp(&md->bl);
|
||||
|
||||
if(src && src->type == BL_MOB)
|
||||
mob_unlocktarget((struct mob_data *)src,tick);
|
||||
@ -2329,7 +2330,7 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type)
|
||||
/* ソウルドレイン */
|
||||
if(sd && sd->state.attack_type == BF_MAGIC && (skill=pc_checkskill(sd,HW_SOULDRAIN))>0){
|
||||
clif_skill_nodamage(src,&md->bl,HW_SOULDRAIN,skill,1);
|
||||
sp = (battle_get_lv(&md->bl))*(65+15*skill)/100;
|
||||
sp = (status_get_lv(&md->bl))*(65+15*skill)/100;
|
||||
if(sd->status.sp + sp > sd->status.max_sp)
|
||||
sp = sd->status.max_sp - sd->status.sp;
|
||||
sd->status.sp += sp;
|
||||
@ -2530,7 +2531,7 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type)
|
||||
if(sd && sd->state.attack_type == BF_WEAPON) {
|
||||
for(i=0;i<sd->monster_drop_item_count;i++) {
|
||||
struct delay_item_drop *ditem;
|
||||
int race = battle_get_race(&md->bl);
|
||||
int race = status_get_race(&md->bl);
|
||||
if(sd->monster_drop_itemid[i] <= 0)
|
||||
continue;
|
||||
if(sd->monster_drop_race[i] & (1<<race) ||
|
||||
@ -2684,11 +2685,11 @@ int mob_class_change(struct mob_data *md,int *value)
|
||||
class_ = value[rand()%count];
|
||||
if(class_<=1000 || class_>MAX_MOB_DB) return 0;
|
||||
|
||||
max_hp = battle_get_max_hp(&md->bl);
|
||||
max_hp = status_get_max_hp(&md->bl);
|
||||
hp_rate = md->hp*100/max_hp;
|
||||
clif_mob_class_change(md,class_);
|
||||
md->class_ = class_;
|
||||
max_hp = battle_get_max_hp(&md->bl);
|
||||
max_hp = status_get_max_hp(&md->bl);
|
||||
if(battle_config.monster_class_change_full_recover==1) {
|
||||
md->hp = max_hp;
|
||||
memset(md->dmglog,0,sizeof(md->dmglog));
|
||||
@ -2738,7 +2739,7 @@ int mob_class_change(struct mob_data *md,int *value)
|
||||
*/
|
||||
int mob_heal(struct mob_data *md,int heal)
|
||||
{
|
||||
int max_hp = battle_get_max_hp(&md->bl);
|
||||
int max_hp = status_get_max_hp(&md->bl);
|
||||
|
||||
nullpo_retr(0, md);
|
||||
|
||||
@ -3079,7 +3080,7 @@ int mobskill_castend_id( int tid, unsigned int tick, int id,int data )
|
||||
return 0;
|
||||
}
|
||||
if(md->skillid != NPC_EMOTION)
|
||||
md->last_thinktime=tick + battle_get_adelay(&md->bl);
|
||||
md->last_thinktime=tick + status_get_adelay(&md->bl);
|
||||
|
||||
if((bl = map_id2bl(md->skilltarget)) == NULL || bl->prev==NULL){ //スキルターゲットが存在しない
|
||||
//printf("mobskill_castend_id nullpo\n");//ターゲットがいないときはnullpoじゃなくて普通に終了
|
||||
@ -3089,12 +3090,12 @@ int mobskill_castend_id( int tid, unsigned int tick, int id,int data )
|
||||
return 0;
|
||||
|
||||
if(md->skillid == PR_LEXAETERNA) {
|
||||
struct status_change *sc_data = battle_get_sc_data(bl);
|
||||
struct status_change *sc_data = status_get_sc_data(bl);
|
||||
if(sc_data && (sc_data[SC_FREEZE].timer != -1 || (sc_data[SC_STONE].timer != -1 && sc_data[SC_STONE].val2 == 0)))
|
||||
return 0;
|
||||
}
|
||||
else if(md->skillid == RG_BACKSTAP) {
|
||||
int dir = map_calc_dir(&md->bl,bl->x,bl->y),t_dir = battle_get_dir(bl);
|
||||
int dir = map_calc_dir(&md->bl,bl->x,bl->y),t_dir = status_get_dir(bl);
|
||||
int dist = distance(md->bl.x,md->bl.y,bl->x,bl->y);
|
||||
if(bl->type != BL_SKILL && (dist == 0 || map_check_dir(dir,t_dir)))
|
||||
return 0;
|
||||
@ -3104,7 +3105,7 @@ int mobskill_castend_id( int tid, unsigned int tick, int id,int data )
|
||||
return 0;
|
||||
range = skill_get_range(md->skillid,md->skilllv);
|
||||
if(range < 0)
|
||||
range = battle_get_range(&md->bl) - (range + 1);
|
||||
range = status_get_range(&md->bl) - (range + 1);
|
||||
if(range + battle_config.mob_skill_add_range < distance(md->bl.x,md->bl.y,bl->x,bl->y))
|
||||
return 0;
|
||||
|
||||
@ -3122,7 +3123,7 @@ int mobskill_castend_id( int tid, unsigned int tick, int id,int data )
|
||||
break;
|
||||
case 1:// 支援系
|
||||
if(!mob_db[md->class_].skill[md->skillidx].val[0] &&
|
||||
(md->skillid==AL_HEAL || (md->skillid==ALL_RESURRECTION && bl->type != BL_PC)) && battle_check_undead(battle_get_race(bl),battle_get_elem_type(bl)) )
|
||||
(md->skillid==AL_HEAL || (md->skillid==ALL_RESURRECTION && bl->type != BL_PC)) && battle_check_undead(status_get_race(bl),status_get_elem_type(bl)) )
|
||||
skill_castend_damage_id(&md->bl,bl,md->skillid,md->skilllv,tick,0);
|
||||
else
|
||||
skill_castend_nodamage_id(&md->bl,bl,md->skillid,md->skilllv,tick,0);
|
||||
@ -3236,7 +3237,7 @@ int mobskill_castend_pos( int tid, unsigned int tick, int id,int data )
|
||||
|
||||
range = skill_get_range(md->skillid,md->skilllv);
|
||||
if(range < 0)
|
||||
range = battle_get_range(&md->bl) - (range + 1);
|
||||
range = status_get_range(&md->bl) - (range + 1);
|
||||
if(range + battle_config.mob_skill_add_range < distance(md->bl.x,md->bl.y,md->skillx,md->skilly))
|
||||
return 0;
|
||||
md->skilldelay[md->skillidx]=tick;
|
||||
@ -3300,7 +3301,7 @@ int mobskill_use_id(struct mob_data *md,struct block_list *target,int skill_idx)
|
||||
// 射程と障害物チェック
|
||||
range = skill_get_range(skill_id,skill_lv);
|
||||
if(range < 0)
|
||||
range = battle_get_range(&md->bl) - (range + 1);
|
||||
range = status_get_range(&md->bl) - (range + 1);
|
||||
if(!battle_check_range(&md->bl,target,range))
|
||||
return 0;
|
||||
|
||||
@ -3312,7 +3313,7 @@ int mobskill_use_id(struct mob_data *md,struct block_list *target,int skill_idx)
|
||||
|
||||
switch(skill_id){ /* 何か特殊な処理が必要 */
|
||||
case ALL_RESURRECTION: /* リザレクション */
|
||||
if(target->type != BL_PC && battle_check_undead(battle_get_race(target),battle_get_elem_type(target))){ /* 敵がアンデッドなら */
|
||||
if(target->type != BL_PC && battle_check_undead(status_get_race(target),status_get_elem_type(target))){ /* 敵がアンデッドなら */
|
||||
forcecast=1; /* ターンアンデットと同じ詠唱時間 */
|
||||
casttime=skill_castfix(&md->bl, skill_get_cast(PR_TURNUNDEAD,skill_lv) );
|
||||
}
|
||||
@ -3358,7 +3359,7 @@ int mobskill_use_id(struct mob_data *md,struct block_list *target,int skill_idx)
|
||||
md->skillidx = skill_idx;
|
||||
|
||||
if(!(battle_config.monster_cloak_check_type&2) && md->sc_data[SC_CLOAKING].timer != -1 && md->skillid != AS_CLOAKING)
|
||||
skill_status_change_end(&md->bl,SC_CLOAKING,-1);
|
||||
status_change_end(&md->bl,SC_CLOAKING,-1);
|
||||
|
||||
if( casttime>0 ){
|
||||
md->skilltimer =
|
||||
@ -3417,7 +3418,7 @@ int mobskill_use_pos( struct mob_data *md,
|
||||
bl.y = skill_y;
|
||||
range = skill_get_range(skill_id,skill_lv);
|
||||
if(range < 0)
|
||||
range = battle_get_range(&md->bl) - (range + 1);
|
||||
range = status_get_range(&md->bl) - (range + 1);
|
||||
if(!battle_check_range(&md->bl,&bl,range))
|
||||
return 0;
|
||||
|
||||
@ -3447,7 +3448,7 @@ int mobskill_use_pos( struct mob_data *md,
|
||||
md->skilllv = skill_lv;
|
||||
md->skillidx = skill_idx;
|
||||
if(!(battle_config.monster_cloak_check_type&2) && md->sc_data[SC_CLOAKING].timer != -1)
|
||||
skill_status_change_end(&md->bl,SC_CLOAKING,-1);
|
||||
status_change_end(&md->bl,SC_CLOAKING,-1);
|
||||
if( casttime>0 ){
|
||||
md->skilltimer =
|
||||
add_timer( gettick()+casttime, mobskill_castend_pos, md->bl.id, 0 );
|
||||
@ -3553,7 +3554,7 @@ int mobskill_use(struct mob_data *md,unsigned int tick,int event)
|
||||
nullpo_retr(0, md);
|
||||
nullpo_retr(0, ms = mob_db[md->class_].skill);
|
||||
|
||||
max_hp = battle_get_max_hp(&md->bl);
|
||||
max_hp = status_get_max_hp(&md->bl);
|
||||
|
||||
if(battle_config.mob_skill_use == 0 || md->skilltimer != -1)
|
||||
return 0;
|
||||
|
@ -15,6 +15,7 @@
|
||||
#include "clif.h"
|
||||
#include "intif.h"
|
||||
#include "pc.h"
|
||||
#include "status.h"
|
||||
#include "itemdb.h"
|
||||
#include "script.h"
|
||||
#include "mob.h"
|
||||
@ -1117,8 +1118,8 @@ static int calc_next_walk_step(struct npc_data *nd)
|
||||
if(nd->walkpath.path_pos>=nd->walkpath.path_len)
|
||||
return -1;
|
||||
if(nd->walkpath.path[nd->walkpath.path_pos]&1)
|
||||
return battle_get_speed(&nd->bl)*14/10;
|
||||
return battle_get_speed(&nd->bl);
|
||||
return status_get_speed(&nd->bl)*14/10;
|
||||
return status_get_speed(&nd->bl);
|
||||
}
|
||||
|
||||
|
||||
@ -1327,7 +1328,7 @@ int npc_stop_walking(struct npc_data *nd,int type)
|
||||
if(type&0x01)
|
||||
clif_fixnpcpos(nd);
|
||||
if(type&0x02) {
|
||||
int delay=battle_get_dmotion(&nd->bl);
|
||||
int delay=status_get_dmotion(&nd->bl);
|
||||
unsigned int tick = gettick();
|
||||
if(nd->canmove_tick < tick)
|
||||
nd->canmove_tick = tick + delay;
|
||||
|
1576
src/map/pc.c
1576
src/map/pc.c
File diff suppressed because it is too large
Load Diff
@ -7,6 +7,7 @@
|
||||
|
||||
#define OPTION_MASK 0xd7b8
|
||||
#define CART_MASK 0x788
|
||||
#define STATE_BLIND 0x10
|
||||
|
||||
#define pc_setdead(sd) ((sd)->state.dead_sit = 1)
|
||||
#define pc_setsit(sd) ((sd)->state.dead_sit = 2)
|
||||
@ -44,6 +45,7 @@ int pc_checkskill(struct map_session_data *sd,int skill_id);
|
||||
int pc_checkallowskill(struct map_session_data *sd);
|
||||
int pc_checkequip(struct map_session_data *sd,int pos);
|
||||
|
||||
int pc_calc_skilltree(struct map_session_data *sd);
|
||||
int pc_calc_skilltree_normalize_job(int c, struct map_session_data *sd);
|
||||
|
||||
int pc_checkoverhp(struct map_session_data*);
|
||||
@ -79,8 +81,6 @@ int pc_dropitem(struct map_session_data*,int,int);
|
||||
|
||||
int pc_checkweighticon(struct map_session_data *sd);
|
||||
|
||||
int pc_calcstatus(struct map_session_data*,int);
|
||||
int pc_calcspeed(struct map_session_data*); // [Celest]
|
||||
int pc_bonus(struct map_session_data*,int,int);
|
||||
int pc_bonus2(struct map_session_data *sd,int,int,int);
|
||||
int pc_bonus3(struct map_session_data *sd,int,int,int,int);
|
||||
@ -146,7 +146,6 @@ int pc_readaccountreg(struct map_session_data*,char*);
|
||||
int pc_setaccountreg(struct map_session_data*,char*,int);
|
||||
int pc_readaccountreg2(struct map_session_data*,char*);
|
||||
int pc_setaccountreg2(struct map_session_data*,char*,int);
|
||||
int pc_percentrefinery(struct map_session_data *sd,struct item *item);
|
||||
|
||||
int pc_addeventtimer(struct map_session_data *sd,int tick,const char *name);
|
||||
int pc_deleventtimer(struct map_session_data *sd,const char *name);
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include "nullpo.h"
|
||||
#include "malloc.h"
|
||||
#include "pc.h"
|
||||
#include "status.h"
|
||||
#include "map.h"
|
||||
#include "intif.h"
|
||||
#include "clif.h"
|
||||
@ -202,7 +203,7 @@ static int pet_attack(struct pet_data *pd,unsigned int tick,int data)
|
||||
|
||||
pd->target_lv = battle_weapon_attack(&pd->bl,&md->bl,tick,0);
|
||||
|
||||
pd->attackabletime = tick + battle_get_adelay(&pd->bl);
|
||||
pd->attackabletime = tick + status_get_adelay(&pd->bl);
|
||||
|
||||
pd->timer=add_timer(pd->attackabletime,pet_timer,pd->bl.id,0);
|
||||
pd->state.state=MS_ATTACK;
|
||||
@ -310,7 +311,7 @@ int pet_target_check(struct map_session_data *sd,struct block_list *bl,int type)
|
||||
|
||||
Assert((pd->msd == 0) || (pd->msd->pd == pd));
|
||||
|
||||
if(bl && pd && bl->type == BL_MOB && sd->pet.intimate > 900 && sd->pet.hungry > 0 && pd->class_ != battle_get_class(bl)
|
||||
if(bl && pd && bl->type == BL_MOB && sd->pet.intimate > 900 && sd->pet.hungry > 0 && pd->class_ != status_get_class(bl)
|
||||
&& pd->state.state != MS_DELAY) {
|
||||
mode=mob_db[pd->class_].mode;
|
||||
race=mob_db[pd->class_].race;
|
||||
@ -518,9 +519,9 @@ static int pet_hungry(int tid,unsigned int tick,int id,int data)
|
||||
sd->pet.intimate = 0;
|
||||
if(battle_config.pet_status_support && t > 0) {
|
||||
if(sd->bl.prev != NULL)
|
||||
pc_calcstatus(sd,0);
|
||||
status_calc_pc(sd,0);
|
||||
else
|
||||
pc_calcstatus(sd,2);
|
||||
status_calc_pc(sd,2);
|
||||
}
|
||||
}
|
||||
clif_send_petdata(sd,1,sd->pet.intimate);
|
||||
@ -672,9 +673,9 @@ int pet_return_egg(struct map_session_data *sd)
|
||||
}
|
||||
if(battle_config.pet_status_support && sd->pet.intimate > 0) {
|
||||
if(sd->bl.prev != NULL)
|
||||
pc_calcstatus(sd,0);
|
||||
status_calc_pc(sd,0);
|
||||
else
|
||||
pc_calcstatus(sd,2);
|
||||
status_calc_pc(sd,2);
|
||||
}
|
||||
// ルートしたItemを落とさせる
|
||||
pet_lootitem_drop(pd,sd);
|
||||
@ -821,9 +822,9 @@ int pet_recv_petdata(int account_id,struct s_pet *p,int flag)
|
||||
}
|
||||
if(battle_config.pet_status_support && sd->pet.intimate > 0) {
|
||||
if(sd->bl.prev != NULL)
|
||||
pc_calcstatus(sd,0);
|
||||
status_calc_pc(sd,0);
|
||||
else
|
||||
pc_calcstatus(sd,2);
|
||||
status_calc_pc(sd,2);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -995,7 +996,7 @@ int pet_equipitem(struct map_session_data *sd,int index)
|
||||
else {
|
||||
pc_delitem(sd,index,1,0);
|
||||
sd->pet.equip = sd->pd->equip = nameid;
|
||||
pc_calcstatus(sd,0);
|
||||
status_calc_pc(sd,0);
|
||||
clif_pet_equip(sd->pd,nameid);
|
||||
}
|
||||
|
||||
@ -1016,7 +1017,7 @@ int pet_unequipitem(struct map_session_data *sd)
|
||||
|
||||
nameid = sd->pet.equip;
|
||||
sd->pet.equip = sd->pd->equip = 0;
|
||||
pc_calcstatus(sd,0);
|
||||
status_calc_pc(sd,0);
|
||||
clif_pet_equip(sd->pd,0);
|
||||
memset(&tmp_item,0,sizeof(tmp_item));
|
||||
tmp_item.nameid = nameid;
|
||||
@ -1069,9 +1070,9 @@ int pet_food(struct map_session_data *sd)
|
||||
sd->pet.intimate = 0;
|
||||
if(battle_config.pet_status_support && t > 0) {
|
||||
if(sd->bl.prev != NULL)
|
||||
pc_calcstatus(sd,0);
|
||||
status_calc_pc(sd,0);
|
||||
else
|
||||
pc_calcstatus(sd,2);
|
||||
status_calc_pc(sd,2);
|
||||
}
|
||||
}
|
||||
else if(sd->pet.intimate > 1000)
|
||||
@ -1096,7 +1097,7 @@ static int pet_randomwalk(struct pet_data *pd,int tick)
|
||||
|
||||
Assert((pd->msd == 0) || (pd->msd->pd == pd));
|
||||
|
||||
speed = battle_get_speed(&pd->bl);
|
||||
speed = status_get_speed(&pd->bl);
|
||||
|
||||
if(DIFF_TICK(pd->next_walktime,tick) < 0){
|
||||
int i,x,y,c,d=12-pd->move_fail_count;
|
||||
@ -1201,7 +1202,7 @@ static int pet_ai_sub_hard(struct pet_data *pd,unsigned int tick)
|
||||
pet_unlocktarget(pd);
|
||||
else {
|
||||
i=0;
|
||||
pd->speed = battle_get_speed(&pd->bl);
|
||||
pd->speed = status_get_speed(&pd->bl);
|
||||
do {
|
||||
if(i==0) { // 最初はAEGISと同じ方法で検索
|
||||
dx=md->bl.x - pd->bl.x;
|
||||
@ -1285,14 +1286,14 @@ static int pet_ai_sub_hard(struct pet_data *pd,unsigned int tick)
|
||||
else {
|
||||
if(dist <= 3 || (pd->timer != -1 && pd->state.state == MS_WALK && distance(pd->to_x,pd->to_y,sd->bl.x,sd->bl.y) < 3) )
|
||||
return 0;
|
||||
pd->speed = battle_get_speed(&pd->bl);
|
||||
pd->speed = status_get_speed(&pd->bl);
|
||||
pet_calc_pos(pd,sd->bl.x,sd->bl.y,sd->dir);
|
||||
if(pet_walktoxy(pd,pd->to_x,pd->to_y))
|
||||
pet_randomwalk(pd,tick);
|
||||
}
|
||||
}
|
||||
else {
|
||||
pd->speed = battle_get_speed(&pd->bl);
|
||||
pd->speed = status_get_speed(&pd->bl);
|
||||
if(pd->state.state == MS_ATTACK)
|
||||
pet_stopattack(pd);
|
||||
pet_randomwalk(pd,tick);
|
||||
@ -1492,7 +1493,7 @@ int pet_recovery_timer(int tid,unsigned int tick,int id,int data)
|
||||
return 0;
|
||||
|
||||
if(sd->sc_data[pd->skilltype].timer != -1)
|
||||
skill_status_change_end(&sd->bl,pd->skilltype,-1);
|
||||
status_change_end(&sd->bl,pd->skilltype,-1);
|
||||
|
||||
pd->skillbonustimer=add_timer(gettick()+pd->skilltimer*1000,pet_recovery_timer,sd->bl.id,0);
|
||||
|
||||
@ -1543,7 +1544,7 @@ int pet_mag_timer(int tid,unsigned int tick,int id,int data)
|
||||
|
||||
if(sd->status.hp < sd->status.max_hp * pd->skilltype/100 && sd->status.sp < sd->status.max_sp * pd->skillduration/100) {
|
||||
clif_skill_nodamage(&pd->bl,&sd->bl,PR_MAGNIFICAT,pd->skillval,1);
|
||||
skill_status_change_start(&sd->bl,SkillStatusChangeTable[PR_MAGNIFICAT],pd->skillval,0,0,0,skill_get_time(PR_MAGNIFICAT,pd->skillval),0 );
|
||||
status_change_start(&sd->bl,SkillStatusChangeTable[PR_MAGNIFICAT],pd->skillval,0,0,0,skill_get_time(PR_MAGNIFICAT,pd->skillval),0 );
|
||||
}
|
||||
|
||||
pd->skillbonustimer=add_timer(gettick()+pd->skilltimer*1000,pet_mag_timer,sd->bl.id,0);
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include "chrif.h"
|
||||
#include "itemdb.h"
|
||||
#include "pc.h"
|
||||
#include "status.h"
|
||||
#include "script.h"
|
||||
#include "storage.h"
|
||||
#include "mob.h"
|
||||
@ -3028,7 +3029,7 @@ int buildin_getequippercentrefinery(struct script_state *st)
|
||||
sd=script_rid2sd(st);
|
||||
i=pc_checkequip(sd,equip[num-1]);
|
||||
if(i >= 0)
|
||||
push_val(st->stack,C_INT,pc_percentrefinery(sd,&sd->status.inventory[i]));
|
||||
push_val(st->stack,C_INT,status_percentrefinery(sd,&sd->status.inventory[i]));
|
||||
else
|
||||
push_val(st->stack,C_INT,0);
|
||||
|
||||
@ -4274,7 +4275,7 @@ int buildin_sc_start(struct script_state *st)
|
||||
if (bl != 0) {
|
||||
if(bl->type == BL_PC && ((struct map_session_data *)bl)->state.potionpitcher_flag)
|
||||
bl = map_id2bl(((struct map_session_data *)bl)->skilltarget);
|
||||
skill_status_change_start(bl,type,val1,0,0,0,tick,0);
|
||||
status_change_start(bl,type,val1,0,0,0,tick,0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -4298,7 +4299,7 @@ int buildin_sc_start2(struct script_state *st)
|
||||
if(bl->type == BL_PC && ((struct map_session_data *)bl)->state.potionpitcher_flag)
|
||||
bl = map_id2bl(((struct map_session_data *)bl)->skilltarget);
|
||||
if(rand()%10000 < per)
|
||||
skill_status_change_start(bl,type,val1,0,0,0,tick,0);
|
||||
status_change_start(bl,type,val1,0,0,0,tick,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -4314,7 +4315,7 @@ int buildin_sc_end(struct script_state *st)
|
||||
bl = map_id2bl(st->rid);
|
||||
if(bl->type == BL_PC && ((struct map_session_data *)bl)->state.potionpitcher_flag)
|
||||
bl = map_id2bl(((struct map_session_data *)bl)->skilltarget);
|
||||
skill_status_change_end(bl,type,-1);
|
||||
status_change_end(bl,type,-1);
|
||||
// if(battle_config.etc_log)
|
||||
// printf("sc_end : %d %d\n",st->rid,type);
|
||||
return 0;
|
||||
@ -4336,10 +4337,10 @@ int buildin_getscrate(struct script_state *st)
|
||||
else
|
||||
bl = map_id2bl(st->rid);
|
||||
|
||||
luk = battle_get_luk(bl);
|
||||
sc_def_mdef2=100 - (3 + battle_get_mdef(bl) + luk/3);
|
||||
sc_def_vit2=100 - (3 + battle_get_vit(bl) + luk/3);
|
||||
sc_def_int2=100 - (3 + battle_get_int(bl) + luk/3);
|
||||
luk = status_get_luk(bl);
|
||||
sc_def_mdef2=100 - (3 + status_get_mdef(bl) + luk/3);
|
||||
sc_def_vit2=100 - (3 + status_get_vit(bl) + luk/3);
|
||||
sc_def_int2=100 - (3 + status_get_int(bl) + luk/3);
|
||||
sc_def_luk2=100 - (3 + luk);
|
||||
|
||||
if(type==SC_STONE || type==SC_FREEZE)
|
||||
|
2661
src/map/skill.c
2661
src/map/skill.c
File diff suppressed because it is too large
Load Diff
@ -145,7 +145,7 @@ void skill_devotion2(struct block_list *bl,int crusader);
|
||||
int skill_devotion3(struct block_list *bl,int target);
|
||||
void skill_devotion_end(struct map_session_data *md,struct map_session_data *sd,int target);
|
||||
|
||||
#define skill_calc_heal(bl,skill_lv) (( battle_get_lv(bl)+battle_get_int(bl) )/8 *(4+ skill_lv*8))
|
||||
#define skill_calc_heal(bl,skill_lv) (( status_get_lv(bl)+status_get_int(bl) )/8 *(4+ skill_lv*8))
|
||||
|
||||
// その他
|
||||
int skill_check_cloaking(struct block_list *bl);
|
||||
@ -153,11 +153,7 @@ int skill_type_cloaking(struct block_list *bl);
|
||||
int skill_is_danceskill(int id);
|
||||
|
||||
// ステ?タス異常
|
||||
int skill_status_change_start(struct block_list *bl,int type,int val1,int val2,int val3,int val4,int tick,int flag);
|
||||
int skill_status_change_timer(int tid, unsigned int tick, int id, int data);
|
||||
int skill_encchant_eremental_end(struct block_list *bl, int type);
|
||||
int skill_status_change_end( struct block_list* bl , int type,int tid );
|
||||
int skill_status_change_clear(struct block_list *bl,int type);
|
||||
int skillnotok(int skillid, struct map_session_data *sd);
|
||||
|
||||
// アイテム作成
|
||||
|
4699
src/map/status.c
Normal file
4699
src/map/status.c
Normal file
File diff suppressed because it is too large
Load Diff
75
src/map/status.h
Normal file
75
src/map/status.h
Normal file
@ -0,0 +1,75 @@
|
||||
#ifndef _STATUS_H_
|
||||
#define _STATUS_H_
|
||||
|
||||
// パラメータ所得系 battle.c より移動
|
||||
int status_get_class(struct block_list *bl);
|
||||
int status_get_dir(struct block_list *bl);
|
||||
int status_get_lv(struct block_list *bl);
|
||||
int status_get_range(struct block_list *bl);
|
||||
int status_get_hp(struct block_list *bl);
|
||||
int status_get_max_hp(struct block_list *bl);
|
||||
int status_get_str(struct block_list *bl);
|
||||
int status_get_agi(struct block_list *bl);
|
||||
int status_get_vit(struct block_list *bl);
|
||||
int status_get_int(struct block_list *bl);
|
||||
int status_get_dex(struct block_list *bl);
|
||||
int status_get_luk(struct block_list *bl);
|
||||
int status_get_hit(struct block_list *bl);
|
||||
int status_get_flee(struct block_list *bl);
|
||||
int status_get_def(struct block_list *bl);
|
||||
int status_get_mdef(struct block_list *bl);
|
||||
int status_get_flee2(struct block_list *bl);
|
||||
int status_get_def2(struct block_list *bl);
|
||||
int status_get_mdef2(struct block_list *bl);
|
||||
int status_get_baseatk(struct block_list *bl);
|
||||
int status_get_atk(struct block_list *bl);
|
||||
int status_get_atk2(struct block_list *bl);
|
||||
int status_get_speed(struct block_list *bl);
|
||||
int status_get_adelay(struct block_list *bl);
|
||||
int status_get_amotion(struct block_list *bl);
|
||||
int status_get_dmotion(struct block_list *bl);
|
||||
int status_get_element(struct block_list *bl);
|
||||
int status_get_attack_element(struct block_list *bl);
|
||||
int status_get_attack_element2(struct block_list *bl); //左手武器属性取得
|
||||
#define status_get_elem_type(bl) (status_get_element(bl)%10)
|
||||
#define status_get_elem_level(bl) (status_get_element(bl)/10/2)
|
||||
int status_get_party_id(struct block_list *bl);
|
||||
int status_get_guild_id(struct block_list *bl);
|
||||
int status_get_race(struct block_list *bl);
|
||||
int status_get_size(struct block_list *bl);
|
||||
int status_get_mode(struct block_list *bl);
|
||||
int status_get_mexp(struct block_list *bl);
|
||||
|
||||
struct status_change *status_get_sc_data(struct block_list *bl);
|
||||
short *status_get_sc_count(struct block_list *bl);
|
||||
short *status_get_opt1(struct block_list *bl);
|
||||
short *status_get_opt2(struct block_list *bl);
|
||||
short *status_get_opt3(struct block_list *bl);
|
||||
short *status_get_option(struct block_list *bl);
|
||||
|
||||
int status_get_matk1(struct block_list *bl);
|
||||
int status_get_matk2(struct block_list *bl);
|
||||
int status_get_critical(struct block_list *bl);
|
||||
int status_get_atk_(struct block_list *bl);
|
||||
int status_get_atk_2(struct block_list *bl);
|
||||
int status_get_atk2(struct block_list *bl);
|
||||
|
||||
// 状態異常関連 skill.c より移動
|
||||
int status_change_start(struct block_list *bl,int type,int val1,int val2,int val3,int val4,int tick,int flag);
|
||||
int status_change_end( struct block_list* bl , int type,int tid );
|
||||
int status_change_timer(int tid, unsigned int tick, int id, int data);
|
||||
int status_change_timer_sub(struct block_list *bl, va_list ap );
|
||||
int status_change_clear(struct block_list *bl,int type);
|
||||
|
||||
// ステータス計算 pc.c から分離
|
||||
// pc_calcstatus
|
||||
int status_calc_pc(struct map_session_data* sd,int first);
|
||||
int status_calc_speed(struct map_session_data*); // [Celest]
|
||||
// int status_calc_skilltree(struct map_session_data *sd);
|
||||
int status_getrefinebonus(int lv,int type);
|
||||
int status_percentrefinery(struct map_session_data *sd,struct item *item);
|
||||
extern int percentrefinery[5][10];
|
||||
|
||||
int do_init_status(void);
|
||||
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user