#pragma once // npc.hpp - Noncombatants. // // 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 "fwd.hpp" #include #include "../range/slice.hpp" #include "../net/timer.t.hpp" #include "map.hpp" #include "script-call.t.hpp" namespace tmwa { namespace map { constexpr BlockId START_NPC_NUM = wrap(110000000); // TODO make these species, see npc_class in npc_data constexpr Species WARP_CLASS = wrap(45); constexpr Species FAKE_NPC_CLASS = wrap(127); constexpr Species INVISIBLE_CLASS = wrap(32767); int npc_event_dequeue(dumb_ptr sd); int npc_event(dumb_ptr, NpcEvent, int, Slice); inline int npc_event(dumb_ptr sd, NpcEvent npcname, int i) { return npc_event(sd, npcname, i, nullptr); } inline int npc_event(BlockId rid, NpcEvent eventname, int mob_kill, Slice args) { return npc_event(rid ? map_id2bl(rid)->is_player() : nullptr, eventname, mob_kill, args); } int npc_addeventtimer(dumb_ptr bl, interval_t tick, NpcEvent name); int npc_touch_areanpc(dumb_ptr, Borrowed, int, int); int npc_click(dumb_ptr, BlockId); int npc_scriptcont(dumb_ptr, BlockId); int npc_buysellsel(dumb_ptr, BlockId, int); int npc_buylist(dumb_ptr, const std::vector>&); int npc_selllist(dumb_ptr, const std::vector>&); int npc_enable(NpcName name, bool flag); dumb_ptr npc_name2id(NpcName name); BlockId npc_get_new_npc_id(void); int magic_message(dumb_ptr caster, XString source_invocation); /** * Uninstalls and frees an NPC */ void npc_free(dumb_ptr npc); int npc_event_do_oninit(void); int npc_event_doall_l(ScriptLabel name, BlockId rid, Slice argv); inline int npc_event_do_l(NpcEvent name, BlockId rid, Slice argv) { return npc_event(rid, name, 0, argv); } inline int npc_event_doall(ScriptLabel name) { return npc_event_doall_l(name, BlockId(), nullptr); } inline int npc_event_do(NpcEvent name) { return npc_event_do_l(name, BlockId(), nullptr); } void npc_timerevent_start(dumb_ptr nd); void npc_timerevent_stop(dumb_ptr nd); interval_t npc_gettimerevent_tick(dumb_ptr nd); void npc_settimerevent_tick(dumb_ptr nd, interval_t newtimer); int npc_delete(dumb_ptr nd); } // namespace map } // namespace tmwa