#pragma once // pc.hpp - Player state changes. // // Copyright © ????-2004 Athena Dev Teams // Copyright © 2004-2011 The Mana World Development Team // Copyright © 2011-2014 Ben Longbons // // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . #include "pc.t.hpp" #include "fwd.hpp" #include "../generic/dumb_ptr.hpp" #include "../mmo/clif.t.hpp" #include "map.hpp" #include "quest.hpp" namespace tmwa { namespace map { inline void pc_setsit(dumb_ptr sd) { sd->state.dead_sit = 2; } //pc_setstand(dumb_ptr sd) is a normal function inline bool pc_isdead(dumb_ptr sd) { return sd->state.dead_sit == 1; } inline bool pc_issit(dumb_ptr sd) { return sd->state.dead_sit == 2; } inline void pc_setdir(dumb_ptr sd, DIR b) { sd->dir = (b); } inline bool pc_isinvisible(dumb_ptr sd) { return bool(sd->status.option & Opt0::HIDE); } inline bool pc_is90overweight(dumb_ptr sd) { return sd->weight*10 >= sd->max_weight*9; } // Checks all npcs/warps at the same location to see whether they // should do something with the specified player. void pc_touch_all_relevant_npcs(dumb_ptr sd); GmLevel pc_isGM(dumb_ptr sd); int pc_iskiller(dumb_ptr src, dumb_ptr target); // [MouseJstr] void pc_invisibility(dumb_ptr sd, int enabled); // [Fate] int pc_counttargeted(dumb_ptr sd, dumb_ptr src, ATK target_lv); int pc_setrestartvalue(dumb_ptr sd, int type); void pc_makesavestatus(dumb_ptr); int pc_setnewpc(dumb_ptr, AccountId, CharId, int, uint32_t /*tick_t*/, SEX); void pc_set_weapon_icon(dumb_ptr sd, int count,StatusChange icon, ItemNameId look); void pc_set_attack_info(dumb_ptr sd, interval_t speed, int range); int pc_authok(AccountId, int, ClientVersion, const CharKey *, const CharData *); int pc_authfail(AccountId accid); EPOS pc_equippoint(dumb_ptr sd, IOff0 n); int pc_checkskill(dumb_ptr sd, SkillID skill_id); IOff0 pc_checkequip(dumb_ptr sd, EPOS pos); int pc_walktoxy(dumb_ptr, int, int); int pc_stop_walking(dumb_ptr, int); int pc_setpos(dumb_ptr, MapName, int, int, BeingRemoveWhy); void pc_setsavepoint(dumb_ptr, MapName, int, int); ADDITEM pc_checkadditem(dumb_ptr, ItemNameId, int); int pc_inventoryblank(dumb_ptr); IOff0 pc_search_inventory(dumb_ptr sd, ItemNameId item_id); int pc_payzeny(dumb_ptr, int); PickupFail pc_additem(dumb_ptr, Item *, int); int pc_getzeny(dumb_ptr, int); int pc_delitem(dumb_ptr, IOff0, int, int); int pc_checkitem(dumb_ptr); int pc_count_all_items(dumb_ptr player, ItemNameId item_id); int pc_remove_items(dumb_ptr player, ItemNameId item_id, int count); int pc_takeitem(dumb_ptr, dumb_ptr); int pc_dropitem(dumb_ptr, IOff0, int); int pc_checkweighticon(dumb_ptr sd); int pc_calcstatus(dumb_ptr, int); int pc_bonus(dumb_ptr, SP, int); int pc_bonus2(dumb_ptr sd, SP, int, int); int pc_skill(dumb_ptr, SkillID, int, int); int pc_attack(dumb_ptr, BlockId, int); int pc_stopattack(dumb_ptr); int pc_gainexp_reason(dumb_ptr, int, int, PC_GAINEXP_REASON reason); int pc_extract_healer_exp(dumb_ptr, int max); // [Fate] Used by healers: extract healer-xp from the target, return result (up to max) int pc_nextbaseexp(dumb_ptr); int pc_nextjobexp(dumb_ptr); int pc_need_status_point(dumb_ptr, SP); int pc_statusup(dumb_ptr, SP); int pc_statusup2(dumb_ptr, SP, int); int pc_skillup(dumb_ptr, SkillID); int pc_resetstate(dumb_ptr); int pc_resetskill(dumb_ptr); int pc_equipitem(dumb_ptr, IOff0, EPOS); int pc_unequipitem(dumb_ptr, IOff0, CalcStatus); int pc_unequipinvyitem(dumb_ptr, IOff0, CalcStatus); int pc_useitem(dumb_ptr, IOff0); int pc_damage(dumb_ptr, dumb_ptr, int); int pc_heal(dumb_ptr, int, int); int pc_heal(dumb_ptr, int, int, bool); int pc_itemheal(dumb_ptr sd, int hp, int sp); int pc_changelook(dumb_ptr, LOOK, int); int pc_readparam(dumb_ptr, SP); int pc_setparam(dumb_ptr, SP, int); int pc_readreg(dumb_ptr, SIR); void pc_setreg(dumb_ptr, SIR, int); ZString pc_readregstr(dumb_ptr sd, SIR reg); void pc_setregstr(dumb_ptr sd, SIR reg, RString str); void update_quest(dumb_ptr sd, VarName quest_var, int value); void update_allquest(dumb_ptr sd); int pc_readglobalreg(dumb_ptr, VarName ); int pc_setglobalreg(dumb_ptr, VarName , int); int pc_readaccountreg(dumb_ptr, VarName ); int pc_setaccountreg(dumb_ptr, VarName , int); int pc_readaccountreg2(dumb_ptr, VarName ); int pc_setaccountreg2(dumb_ptr, VarName , int); int pc_addeventtimer(dumb_ptr sd, interval_t tick, NpcEvent name); int pc_cleareventtimer(dumb_ptr sd); int pc_calc_pvprank(dumb_ptr sd); void pc_calc_pvprank_timer(TimerData *, tick_t, BlockId); int pc_marriage(dumb_ptr sd, dumb_ptr dstsd); int pc_divorce(dumb_ptr sd); dumb_ptr pc_get_partner(dumb_ptr sd); void pc_set_gm_level(AccountId account_id, GmLevel level); void pc_setstand(dumb_ptr sd); int pc_read_gm_account(Session *, const std::vector>&); int pc_setpvptimer(dumb_ptr sd, interval_t); int pc_delpvptimer(dumb_ptr sd); int pc_setinvincibletimer(dumb_ptr sd, interval_t); int pc_delinvincibletimer(dumb_ptr sd); int pc_logout(dumb_ptr sd); // [fate] Player logs out void pc_show_motd(dumb_ptr sd); void do_init_pc(void); } // namespace map } // namespace tmwa