#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 "../strings/fwd.hpp" #include "../generic/fwd.hpp" #include "../net/timer.t.hpp" #include "../proto2/fwd.hpp" #include "map.hpp" #include "script-call.t.hpp" namespace tmwa { 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 WARP_DEBUG_CLASS = wrap(722); constexpr Species INVISIBLE_CLASS = wrap(32767); int npc_event_dequeue(dumb_ptr sd); int npc_event(dumb_ptr sd, NpcEvent npcname, int); void npc_timer_event(NpcEvent eventname); // Added by RoVeRT int npc_command(dumb_ptr sd, NpcName npcname, XString command); int npc_touch_areanpc(dumb_ptr, map_local *, 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_parse_warp(XString w1, XString, NpcName w3, XString w4); int npc_enable(NpcName name, bool flag); dumb_ptr npc_name2id(NpcName name); BlockId npc_get_new_npc_id(void); /** * Spawns and installs a talk-only NPC * * \param message The message to speak. If message is nullptr, the NPC will not do anything at all. */ dumb_ptr npc_spawn_text(map_local *m, int x, int y, Species class_, NpcName name, AString message); /** * Uninstalls and frees an NPC */ void npc_free(dumb_ptr npc); void npc_addsrcfile(AString); void npc_delsrcfile(XString); bool do_init_npc(void); int npc_event_do_oninit(void); int npc_event_doall_l(ScriptLabel name, BlockId rid, Slice argv); int npc_event_do_l(NpcEvent name, BlockId rid, Slice 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 tmwa