00001
00002
00003 #ifndef _PC_H_
00004 #define _PC_H_
00005
00006 #include "map.h"
00007
00008 #define OPTION_MASK 0xd7b8
00009 #define CART_MASK 0x788
00010
00011 #define MAX_SKILL_TREE 51 // supernovice have 51 skills.
00012
00013
00014
00015
00016 #define pc_setdead(sd) ((sd)->state.dead_sit = 1, (sd)->state.previously_sit_hp = 0, (sd)->state.previously_sit_sp = 0)
00017 #define pc_setsit(sd) ((sd)->state.dead_sit = 2) // 0: standup, 1: dead, 2: sit
00018
00019 #define pc_isdead(sd) ((sd)->state.dead_sit == 1) // 0: standup, 1: dead, 2: sit
00020 #define pc_issit(sd) ((sd)->state.dead_sit == 2) // 0: standup, 1: dead, 2: sit
00021
00022
00023 #define pc_setchatid(sd,n) ((sd)->chatID = n)
00024 #define pc_ishiding(sd) ((sd)->status.option & 0x4006)
00025 #define pc_iscloaking(sd) (!((sd)->status.option & 0x4000) && ((sd)->status.option & 0x0004))
00026 #define pc_ischasewalk(sd) ((sd)->status.option & 0x4000)
00027 #define pc_iscarton(sd) ((sd)->status.option & CART_MASK)
00028 #define pc_isfalcon(sd) ((sd)->status.option & 0x0010)
00029 #define pc_isriding(sd) ((sd)->status.option & 0x0020)
00030 #define pc_isinvisible(sd) ((sd)->status.option & 0x0040)
00031 #define pc_is50overweight(sd) (sd->weight * 2 >= sd->max_weight)
00032 #define pc_is90overweight(sd) (sd->weight * 10 >= sd->max_weight * 9)
00033
00034 int pc_iskiller(struct map_session_data *src, struct map_session_data *target);
00035
00036 int pc_setrestartvalue(struct map_session_data *sd, int type);
00037 int pc_makesavestatus(struct map_session_data *);
00038 void pc_setnewpc(struct map_session_data*, int, int, int, int, unsigned char, int);
00039 void pc_authok(int, int, struct mmo_charstatus *);
00040 void pc_authok_final_step(int, time_t);
00041 int pc_authfail(int);
00042 int pc_doubble_connection(int id);
00043
00044 int pc_isequip(struct map_session_data *sd, int n);
00045 int pc_equippoint(struct map_session_data *sd, int n);
00046
00047 int pc_break_equip(struct map_session_data *sd, unsigned short where);
00048 #define pc_breakweapon(sd) (pc_break_equip(sd, EQP_WEAPON))
00049 #define pc_breakarmor(sd) (pc_break_equip(sd, EQP_ARMOR))
00050 #define pc_breakshield(sd) (pc_break_equip(sd, EQP_SHIELD))
00051 #define pc_breakhelm(sd) (pc_break_equip(sd, EQP_HELM))
00052
00053 int pc_checkskill(struct map_session_data *sd, int skill_id);
00054 int pc_checkallowskill(struct map_session_data *sd);
00055 int pc_checkequip(struct map_session_data *sd, int pos);
00056
00057 int pc_calc_skilltree(struct map_session_data *sd);
00058 int pc_calc_skilltree_normalize_job(int c, int s, struct map_session_data *sd);
00059
00060 int pc_checkoverhp(struct map_session_data*);
00061 int pc_checkoversp(struct map_session_data*);
00062
00063 int pc_can_reach(struct map_session_data*, int, int);
00064 void pc_walktoxy(struct map_session_data*, short, short);
00065 int pc_stop_walking(struct map_session_data*, int);
00066 int pc_movepos(struct map_session_data*, int, int);
00067 int pc_setpos(struct map_session_data*, char*, int, int, int);
00068 int pc_setsavepoint(struct map_session_data*, char*, int, int);
00069 void pc_randomwarp(struct map_session_data *sd);
00070 void pc_memo(struct map_session_data *sd);
00071 void pc_randomwalk(struct map_session_data*);
00072
00073 int pc_checkadditem(struct map_session_data*, int, int);
00074 int pc_inventoryblank(struct map_session_data*);
00075 int pc_search_inventory(struct map_session_data *sd, int item_id);
00076 int pc_payzeny(struct map_session_data*, int);
00077 int pc_additem(struct map_session_data*, struct item*, int);
00078 int pc_getzeny(struct map_session_data*, int);
00079 void pc_delitem(struct map_session_data*, int, int, int);
00080 int pc_checkitem(struct map_session_data*);
00081
00082 int pc_cart_additem(struct map_session_data *sd, struct item *item_data, int amount);
00083 void pc_cart_delitem(struct map_session_data *sd, int n, int amount, int type);
00084 void pc_putitemtocart(struct map_session_data *sd, short idx, int amount);
00085 void pc_getitemfromcart(struct map_session_data *sd, short idx, int amount);
00086 int pc_cartitem_amount(struct map_session_data *sd, int idx, int amount);
00087
00088 void pc_takeitem(struct map_session_data*, struct flooritem_data*);
00089 void pc_dropitem(struct map_session_data*, int, int);
00090
00091 int pc_checkweighticon(struct map_session_data *sd);
00092
00093 int pc_bonus(struct map_session_data*, int, int);
00094 int pc_bonus2(struct map_session_data *sd, int, int, int);
00095 int pc_bonus3(struct map_session_data *sd, int, int, int, int);
00096 int pc_bonus4(struct map_session_data *sd, int, int, int, int, int);
00097 int pc_skill(struct map_session_data*, int, int, int);
00098
00099 int pc_blockskill_start(struct map_session_data*, int, int);
00100
00101 void pc_insert_card(struct map_session_data *sd, short idx_card, short idx_equip);
00102
00103 void pc_item_identify(struct map_session_data *sd, short idx);
00104 void pc_item_repair(struct map_session_data *sd, short idx);
00105 void pc_item_refine(struct map_session_data *sd, short idx);
00106 int pc_steal_item(struct map_session_data *sd, struct block_list *bl);
00107 int pc_steal_coin(struct map_session_data *sd, struct block_list *bl);
00108
00109 int pc_modifybuyvalue(struct map_session_data*, int);
00110 int pc_modifysellvalue(struct map_session_data*, int);
00111
00112 int pc_attack(struct map_session_data*, int, int);
00113 void pc_stopattack(struct map_session_data*);
00114
00115 TIMER_FUNC(pc_follow_timer);
00116 int pc_follow(struct map_session_data*, int);
00117
00118 int pc_checkbaselevelup(struct map_session_data *sd);
00119 int pc_checkjoblevelup(struct map_session_data *sd);
00120 int pc_gainexp(struct map_session_data*, int, int);
00121 int pc_nextbaseexp(struct map_session_data *);
00122 int pc_nextbaseafter(struct map_session_data *);
00123 int pc_nextjobexp(struct map_session_data *);
00124 int pc_nextjobafter(struct map_session_data *);
00125 int pc_need_status_point(struct map_session_data *, int);
00126 void pc_statusup(struct map_session_data*, int);
00127 void pc_statusup2(struct map_session_data*, int, int);
00128 void pc_skillup(struct map_session_data*, short);
00129 int pc_allskillup(struct map_session_data*);
00130 void pc_resetlvl(struct map_session_data*, int type);
00131 int pc_resetstate(struct map_session_data*);
00132 int pc_resetskill(struct map_session_data*);
00133 void pc_equipitem(struct map_session_data*, int, int);
00134 void pc_unequipitem(struct map_session_data*, int, int);
00135 int pc_checkitem(struct map_session_data*);
00136 void pc_useitem(struct map_session_data*, short);
00137
00138 int pc_damage(struct block_list *,struct map_session_data*,int);
00139 int pc_heal(struct map_session_data *, int, int);
00140 int pc_itemheal(struct map_session_data *sd, int hp, int sp);
00141 int pc_percentheal(struct map_session_data *sd, int, int);
00142 int pc_jobchange(struct map_session_data *, int, int);
00143 void pc_setoption(struct map_session_data *, short);
00144 void pc_setcart(struct map_session_data *sd, unsigned short type);
00145 int pc_setfalcon(struct map_session_data *sd);
00146 int pc_setriding(struct map_session_data *sd);
00147 int pc_changelook(struct map_session_data *, int, int);
00148 int pc_equiplookall(struct map_session_data *sd);
00149
00150 int pc_readparam(struct map_session_data*, int);
00151 int pc_setparam(struct map_session_data*, int, int);
00152 int pc_readreg(struct map_session_data*, int);
00153 int pc_setreg(struct map_session_data*, int, int);
00154 char *pc_readregstr(struct map_session_data *sd, int reg);
00155 int pc_setregstr(struct map_session_data *sd, int reg, char *str);
00156 int pc_readglobalreg(struct map_session_data*, char*);
00157 void pc_setglobalreg(struct map_session_data*, char*, int);
00158 int pc_readaccountreg(struct map_session_data*, char*);
00159 void pc_setaccountreg(struct map_session_data*, char*, int);
00160 int pc_readaccountreg2(struct map_session_data*, char*);
00161 void pc_setaccountreg2(struct map_session_data*, char*, int);
00162
00163 int pc_addeventtimer(struct map_session_data *sd, int tick, const char *name);
00164 int pc_deleventtimer(struct map_session_data *sd, const char *name);
00165 int pc_cleareventtimer(struct map_session_data *sd);
00166 int pc_addeventtimercount(struct map_session_data *sd, const char *name, int tick);
00167
00168 int pc_calc_pvprank(struct map_session_data *sd);
00169 TIMER_FUNC(pc_calc_pvprank_timer);
00170
00171 int pc_ismarried(struct map_session_data *sd);
00172 int pc_marriage(struct map_session_data *sd, struct map_session_data *dstsd);
00173 int pc_divorce(struct map_session_data *sd);
00174 struct map_session_data *pc_get_partner(struct map_session_data *sd);
00175 void pc_set_gm_level(int account_id, signed char level);
00176 void pc_set_gm_level_by_gm(int account_id, signed char level, int account_id_of_gm);
00177 void pc_setstand(struct map_session_data *sd);
00178
00179 int pc_candrop(struct map_session_data *sd, int item_id);
00180
00181 struct pc_base_job{
00182 int job;
00183 int type;
00184 int upper;
00185 };
00186
00187 struct pc_base_job pc_calc_base_job(int b_class);
00188
00189 int pc_calc_base_job2(int b_class);
00190 int pc_calc_upper(int b_class);
00191
00192 short pc_calc_class(short job_id);
00193
00194 struct skill_tree_entry {
00195 short id;
00196 unsigned char max;
00197 unsigned char joblv;
00198 struct {
00199 unsigned id : 11;
00200 unsigned lv : 5;
00201 } need[5];
00202 } skill_tree[3][25][MAX_SKILL_TREE];
00203
00204 void pc_guardiansave(void);
00205 int pc_read_gm_account(int fd);
00206 int pc_setinvincibletimer(struct map_session_data *sd, int);
00207 void pc_delinvincibletimer(struct map_session_data *sd);
00208 TIMER_FUNC(pc_invincible_timer);
00209
00210 TIMER_FUNC(pc_jail_timer);
00211
00212 int pc_addspiritball(struct map_session_data *sd, int, int);
00213 int pc_delspiritball(struct map_session_data *sd, int, int);
00214
00215 TIMER_FUNC(pc_eventtimer);
00216
00217 int do_init_pc(void);
00218
00219 enum {ADDITEM_EXIST, ADDITEM_NEW, ADDITEM_OVERAMOUNT};
00220
00221
00222 int day_timer_tid;
00223 int night_timer_tid;
00224 TIMER_FUNC(map_day_timer);
00225 TIMER_FUNC(map_night_timer);
00226
00227 #endif // _PC_H_
00228