#pragma once // mob.hpp - Really scary code. // // 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 "mob.t.hpp" #include "fwd.hpp" #include "../generic/enum.hpp" #include "../generic/random.t.hpp" #include "../net/timer.t.hpp" #include "battle.t.hpp" #include "../mmo/clif.t.hpp" #include "map.hpp" #include "../mmo/skill.t.hpp" namespace tmwa { namespace map { #define ENGLISH_NAME stringish("--en--"_s) #define JAPANESE_NAME stringish("--ja--"_s) #define MOB_THIS_MAP stringish("this"_s) #define MaxDrops 8 #define MinMobID 1001 #define MaxMobID 2000 struct mob_skill { MobSkillState state; SkillID skill_id; short skill_lv; short permillage; interval_t casttime, delay; bool cancel; MobSkillCondition cond1; int cond2i; MobSkillTarget target; int val[5]; short emotion; }; struct mob_db_ { MobName name, jname; int lv; int max_hp, max_sp; int base_exp, job_exp; int atk1, atk2; int def, mdef; earray attrs; int range, range2, range3; // always 1 int size; Race race; LevelElement element; MobMode mode; interval_t speed, adelay, amotion, dmotion; int mutations_nr, mutation_power; struct { ItemNameId nameid; random_::Fixed p; } dropitem[MaxDrops]; short hair, hair_color, weapon; ItemNameId shield, head_top, head_mid, head_buttom; short option, clothes_color; // [Valaris] int equip; // [Valaris] std::vector skills; }; struct mob_db_& get_mob_db(Species); Species mobdb_searchname(MobName str); Species mobdb_checkid(Species id); BlockId mob_once_spawn(dumb_ptr sd, MapName mapname, int x, int y, MobName mobname, Species class_, int amount, NpcEvent event); BlockId mob_once_spawn_area(dumb_ptr sd, MapName mapname, int x0, int y0, int x1, int y1, MobName mobname, Species class_, int amount, NpcEvent event); int mob_target(dumb_ptr md, dumb_ptr bl, int dist); int mob_aggravate(dumb_ptr md, dumb_ptr bl); int mob_stop_walking(dumb_ptr md, int type); int mob_stopattack(dumb_ptr); int mob_spawn(BlockId); int mob_damage(dumb_ptr, dumb_ptr, int, int); int mob_heal(dumb_ptr, int); short mob_get_hair(Species); short mob_get_hair_color(Species); short mob_get_weapon(Species); ItemNameId mob_get_shield(Species); ItemNameId mob_get_head_top(Species); ItemNameId mob_get_head_mid(Species); ItemNameId mob_get_head_buttom(Species); short mob_get_clothes_color(Species); //player mob dye [Valaris] int mob_get_equip(Species); // mob equip [Valaris] bool mob_readdb(ZString filename); bool mob_readskilldb(ZString filename); void do_init_mob2(void); int mob_delete(dumb_ptr md); int mob_catch_delete(dumb_ptr md, BeingRemoveWhy type); void mob_timer_delete(TimerData *, tick_t, BlockId); int mob_deleteslave(dumb_ptr md); int mob_counttargeted(dumb_ptr md, dumb_ptr src, ATK target_lv); int mob_warp(dumb_ptr md, Option> m, int x, int y, BeingRemoveWhy type); int mobskill_use(dumb_ptr md, tick_t tick, MobSkillCondition event); int mobskill_event(dumb_ptr md, BF flag); void mobskill_castend_id(TimerData *tid, tick_t tick, BlockId id); void mobskill_castend_pos(TimerData *tid, tick_t tick, BlockId id); int mob_summonslave(dumb_ptr md2, int *value, int amount, int flag); void mob_reload(void); } // namespace map } // namespace tmwa