// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL // For more information, see LICENCE in the main folder #ifndef NPC_HPP #define NPC_HPP #include "../common/timer.hpp" #include "map.hpp" // struct block_list #include "status.hpp" // struct status_change #include "unit.hpp" // struct unit_data struct block_list; struct npc_data; struct view_data; struct npc_timerevent_list { int timer,pos; }; struct npc_label_list { char name[NAME_LENGTH+1]; int pos; }; /// Item list for NPC sell/buy list struct npc_item_list { t_itemid nameid; unsigned int value; #if PACKETVER >= 20131223 unsigned short qty; ///< Stock counter (Market shop) uint8 flag; ///< 1: Item added by npcshopitem/npcshopadditem, force load! (Market shop) #endif }; #if !defined(sun) && (!defined(__NETBSD__) || __NetBSD_Version__ >= 600000000) // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute #pragma pack(push, 1) #endif // not NetBSD < 6 / Solaris /// List of bought/sold item for NPC shops struct s_npc_buy_list { unsigned short qty; ///< Amount of item will be bought #if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114 uint32 nameid; ///< ID of item will be bought #else uint16 nameid; ///< ID of item will be bought #endif } __attribute__((packed)); #if !defined(sun) && (!defined(__NETBSD__) || __NetBSD_Version__ >= 600000000) // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute #pragma pack(pop) #endif // not NetBSD < 6 / Solaris struct s_questinfo { e_questinfo_types icon; e_questinfo_markcolor color; struct script_code* condition; ~s_questinfo(){ if( this->condition != nullptr ){ script_free_code( this->condition ); } } }; struct npc_data { struct block_list bl; struct unit_data ud; //Because they need to be able to move.... struct view_data vd; struct status_change sc; //They can't have status changes, but.. they want the visual opt values. struct npc_data *master_nd; short class_,speed; char name[NPC_NAME_LENGTH+1];// display name char exname[NPC_NAME_LENGTH+1];// unique npc name int chat_id,touching_id; unsigned int next_walktime; int instance_id; unsigned size : 2; struct status_data status; unsigned int level,stat_point; struct s_npc_params { unsigned short str, agi, vit, int_, dex, luk; } params; void* chatdb; // pointer to a npc_parse struct (see npc_chat.cpp) char* path;/* path dir */ enum npc_subtype subtype; bool trigger_on_hidden; int src_id; union { struct { struct script_code *script; short xs,ys; // OnTouch area radius int guild_id; t_tick timer; int timerid,timeramount,rid; t_tick timertick; struct npc_timerevent_list *timer_event; int label_list_num; struct npc_label_list *label_list; } scr; struct { struct npc_item_list *shop_item; uint16 count; t_itemid itemshop_nameid; // Item Shop cost item ID char pointshop_str[32]; // Point Shop cost variable name bool discount; } shop; struct { short xs,ys; // OnTouch area radius short x,y; // destination coords unsigned short mapindex; // destination map } warp; struct { struct mob_data *md; time_t kill_time; char killer_name[NAME_LENGTH]; int spawn_timer; } tomb; } u; struct sc_display_entry **sc_display; unsigned char sc_display_count; std::vector> qi_data; struct { t_tick timeout; unsigned long color; } progressbar; }; struct eri; extern struct eri *npc_sc_display_ers; #define START_NPC_NUM 110000000 enum e_job_types { NPC_RANGE1_START = 44, JT_WARPNPC, JT_1_ETC_01, JT_1_M_01, JT_1_M_02, JT_1_M_03, JT_1_M_04, JT_1_M_BARD, JT_1_M_HOF, JT_1_M_INNKEEPER, JT_1_M_JOBGUIDER, JT_1_M_JOBTESTER, JT_1_M_KNIGHTMASTER, JT_1_M_LIBRARYMASTER, JT_1_M_MERCHANT, JT_1_M_ORIENT01, JT_1_M_PASTOR, JT_1_M_PUBMASTER, JT_1_M_SIZ, JT_1_M_SMITH, JT_1_M_WIZARD, JT_1_M_YOUNGKNIGHT, JT_1_F_01, JT_1_F_02, JT_1_F_03, JT_1_F_04, JT_1_F_GYPSY, JT_1_F_LIBRARYGIRL, JT_1_F_MARIA, JT_1_F_MERCHANT_01, JT_1_F_MERCHANT_02, JT_1_F_ORIENT_01, JT_1_F_ORIENT_02, JT_1_F_ORIENT_03, JT_1_F_ORIENT_04, JT_1_F_PRIEST, JT_1_F_PUBGIRL, JT_4_DOG01, JT_4_KID01, JT_4_M_01, JT_4_M_02, JT_4_M_03, JT_4_M_04, JT_4_M_BARBER, JT_4_M_ORIENT01, JT_4_M_ORIENT02, JT_4_F_01, JT_4_F_02, JT_4_F_03, JT_4_F_04, JT_4_F_MAID, JT_4_F_SISTER, JT_4W_KID, JT_4W_M_01, JT_4W_M_02, JT_4W_M_03, JT_4W_SAILOR, JT_4W_F_01, JT_8_F, JT_8_F_GRANDMOTHER, JT_EFFECTLAUNCHER, JT_8W_SOLDIER, JT_1_M_MOC_LORD, JT_1_M_PAY_ELDER, JT_1_M_PRON_KING, JT_4_M_MANAGER, JT_4_M_MINISTER, JT_HIDDEN_NPC, JT_4_F_KAFRA6, JT_4_F_KAFRA5, JT_4_F_KAFRA4, JT_4_F_KAFRA3, JT_4_F_KAFRA2, JT_4_F_KAFRA1, JT_2_M_THIEFMASTER, JT_2_M_SWORDMASTER, JT_2_M_PHARMACIST, JT_2_M_MOLGENSTEIN, JT_2_M_DYEINGER, JT_2_F_MAGICMASTER, JT_4_F_TELEPORTER, JT_4_M_TELEPORTER, NPC_RANGE1_END, JT_HIDDEN_WARP_NPC = 139, NPC_RANGE2_START = 400, JT_4_M_MUT2, JT_4_M_SCIENCE, JT_4_F_VALKYRIE2, JT_4_M_UNCLEKNIGHT, JT_4_M_YOUNGKNIGHT, JT_2_MONEMUS, JT_4_M_ATEIL, JT_4_F_ANNIVERSARY, JT_4_M_GREATPO, JT_4_M_NOVELIST, JT_4_M_CHAMPSOUL, JT_4_M_OLDFRIAR, JT_4_M_CRU_SOLD, JT_4_M_CRU_KNT, JT_4_M_CRU_HEAD, JT_4_M_CRU_CRUA, JT_4_M_KY_SOLD, JT_4_M_KY_KNT, JT_4_M_KY_HEAD, JT_4_M_KY_KIYOM, JT_4_M_BOSSCAT, JT_4_M_BABYCAT, JT_4W_F_KAFRA2, JT_4_F_MUNAK, JT_4_M_BONGUN, JT_4_BEAR, JT_4_BLUEWOLF, JT_4_PECOPECO, JT_4_M_JP_MID, JT_4_M_JP_RUN, JT_4_ORCLADY, JT_4_ORCLADY2, JT_4_ORCWARRIOR, JT_4_ORCWARRIOR2, JT_4_F_FAIRY, JT_4_F_FAIRYKID, JT_4_F_FAIRYKID2, JT_4_F_FAIRYKID3, JT_4_F_FAIRYKID4, JT_4_F_FAIRYKID5, JT_4_F_FAIRYKID6, JT_4_M_FAIRYKID, JT_4_M_FAIRYKID2, JT_4_M_FAIRYKID3, JT_4_M_FAIRYKID4, JT_4_M_FAIRYKID5, JT_4_M_FAIRYSOLDIER, JT_4_M_TUFFOLD, JT_4_MAN_BENKUNI, JT_4_MAN_GALTUN, JT_4_MAN_JERUTOO, JT_4_MAN_LAVAIL, JT_4_MAN_NITT, JT_4_MAN_PIOM, JT_4_MAN_PIOM2, JT_4_M_DSTMAN, JT_4_M_DSTMANDEAD, JT_4_BABYLEOPARD, JT_4_M_REDSWORD, JT_4_MAN_PIOM3, JT_4_M_FAIRYSOLDIER2, JT_4_F_FAIRYSOLDIER, JT_4_DRAGON_EGG, JT_4_MIMIC, JT_4_F_FAIRY1, JT_4_F_GUILLOTINE, JT_4_M_GUILLOTINE, JT_4_M_KNIGHT_BLACK, JT_4_M_KNIGHT_GOLD, JT_4_M_KNIGHT_SILVER, JT_4_SKULL_MUD, JT_4_M_BRZ_INDIAN, JT_4_F_BRZ_INDIAN, JT_4_F_BRZ_INDOLD, JT_4_M_BRZ_JACI, JT_4_M_BRZ_MAN1, JT_4_M_BRZ_MAN2, JT_4_F_BRZ_WOMAN, JT_4_M_MINSTREL, JT_4_M_MINSTREL1, JT_4_M_SHADOWCHASER, JT_4_F_SHADOWCHASER, JT_4_M_SURA, JT_4_F_SURA, JT_4_F_WANDERER, JT_4_M_BARD, JT_1_FLAG_NOFEAR, JT_4_M_NOFEARGUY, JT_4_MAN_PIOM6, JT_4_MAN_PIOM4, JT_4_MAN_PIOM5, JT_4_MAN_GALTUN1, JT_4_HUMAN_GERUTOO, JT_4_M_ROKI, JT_4_M_MERCAT1, JT_4_M_MERCAT2, JT_4_M_CATMAN1, JT_4_M_CATMAN2, JT_4_F_BRZ_WOMAN2, JT_4_M_JP_DISH, JT_4_F_JP_NOAH, JT_4_F_JP_OZ, JT_4_F_JP_CHROME, JT_4_F_JP_RINNE, JT_4_WHITETIGER, JT_4_VENDING_MACHINE, JT_4_MISTY, JT_4_NECORING, JT_4_ELEPHANT, JT_4_F_NYDHOG, JT_4_F_NYDHOG2, JT_4_M_ROKI2, JT_4_M_DOGTRAVELER, JT_4_M_DOGTRAVELER2, JT_4_F_DOGTRAVELER, JT_4_M_RAFLE_GR, JT_4_M_RAFLE_OLD, JT_4_F_RAFLE_PK, JT_4_M_LYINGDOG, JT_4_F_MORAFINE1, JT_4_F_MORAFINE2, JT_4_M_RAFLE_OR, JT_4_F_RAFLE_YE, JT_4_M_RAFLE_VI, JT_4_F_RAFLE_VI, JT_4_M_ARDHA, JT_4_CREEPER, JT_JP_RUFAKU, JT_JP_SUPIKA, JT_JP_SABIKU, JT_JP_ARUGORU, JT_JP_ARUNA, JT_JP_AIRI, JT_4_M_DEWOLDMAN, JT_4_M_DEWOLDWOMAN, JT_4_M_DEWMAN, JT_4_M_DEWWOMAN, JT_4_M_DEWBOY, JT_4_M_DEWGIRL, JT_4_M_DEWZATICHIEF, JT_4_M_DEWZATIMAN, JT_4_M_ALCHE_E, JT_4_MASK_SMOKEY, JT_4_CAT_SAILOR1, JT_4_CAT_SAILOR2, JT_4_CAT_SAILOR3, JT_4_CAT_SAILOR4, JT_4_CAT_CHEF, JT_4_CAT_MERMASTER, JT_4_CRACK, JT_4_ASTER, JT_4_F_STARFISHGIRL, JT_4_CAT_DOWN, JT_4_CAT_REST, JT_4_CAT_3COLOR, JT_4_CAT_ADMIRAL, JT_4_SOIL, JT_4_F_ALCHE_A, JT_4_CAT_ADV1, JT_4_CAT_ADV2, JT_4_CAT_SAILOR5, JT_2_DROP_MACHINE, JT_2_SLOT_MACHINE, JT_2_VENDING_MACHINE1, JT_MOB_TOMB, JT_4_MYSTCASE, JT_4_M_SIT_NOVICE, JT_4_OCTOPUS_LEG, JT_4_F_NURSE, JT_4_MAL_SOLDIER, JT_4_MAL_CAPTAIN, JT_4_MAL_BUDIDAI, JT_4_M_MAYOR, JT_4_M_BARYO_OLD, JT_4_F_BARYO_OLD, JT_4_F_BARYO_GIRL, JT_4_M_BARYO_BOY, JT_4_M_BARYO_MAN, JT_4_F_BARYO_WOMAN, JT_4_BARYO_CHIEF, JT_4_MAL_KAFRA, JT_4_M_MALAYA, JT_4_F_MALAYA, JT_4_F_PATIENT, JT_4_M_PATIENT, JT_4_F_KR_TIGER, JT_4_M_KR_BOY, JT_4_M_KAGE_OLD, JT_4_WHIKEBAIN, JT_4_EREND, JT_4_RAWREL, JT_4_ARMAIA, JT_4_KAVAC, JT_4_YGNIZEM, JT_4_EREMES, JT_4_MAGALETA, JT_4_KATRINN, JT_4_SHECIL, JT_4_SEYREN, JT_4_HARWORD, JT_4_F_JP_CYNTHIA, JT_4_M_JP_GUSTON, JT_4_M_JP_BERKUT, JT_4_F_JP_DARK_ADELAIDE, JT_4_M_JP_DARK_DARIUS, JT_4_M_JP_JESTER, JT_XMAS_SMOKEY_B, JT_XMAS_SMOKEY_R, JT_XMAS_SMOKEY_Y, JT_4_F_CLOCKDOLL, JT_4_F_FAIRY2, JT_4_F_PINKWOMAN, JT_4_FAIRYDEADLEAF, JT_4_FROG, JT_4_M_BLACKMAN, JT_4_M_BLUEMAN, JT_4_M_FAIRYANG, JT_4_M_FAIRYAVANT, JT_4_M_FAIRYFREAK, JT_4_M_FAIRYKID6, JT_4_M_FAIRYSCHOLAR, JT_4_M_FAIRYSCHOLAR_DIRTY, JT_4_M_FARIY_HISIE, JT_4_M_FARIYKING, JT_4_M_NEWOZ, JT_4_M_OLIVER, JT_4_M_PROFESSORWORM, JT_4_M_REDMAN, JT_4_F_GELKA, JT_4_M_ROTERT, JT_4_BLACKDRAGON, JT_4_M_GUNSLINGER, JT_4_F_GUNSLINGER, JT_4_M_ARCHER, JT_4_M_SWORDMAN, JT_4_M_NINJA_RED, JT_4_M_NINJA_BLUE, JT_4_M_THIEF_RUMIN, JT_4_M_NOV_RUMIN, JT_4_F_MAYSEL, JT_4_F_ACOLYTE, JT_4_M_NOV_HUNT, JT_4_F_GENETIC, JT_4_F_TAEKWON, JT_4_F_SWORDMAN, JT_4_F_IU, JT_4_M_RAGI, JT_4_M_MELODY, JT_4_TRACE, JT_4_F_HIMEL, JT_4_LEVITATEMAN, JT_4_M_HEINRICH, JT_4_M_ROYALGUARD, JT_4_M_BARMUND, JT_4_F_KHALITZBURG, JT_4_F_HIMEL2, JT_4_WHITEKNIGHT, JT_4_COCO, JT_4_M_ALADDIN, JT_4_M_GENIE, JT_4_F_GENIE, JT_4_JP_MID_SWIM, JT_4_JP_RUNE_SWIM, JT_4_F_FENRIR, JT_4_F_GEFFEN_FAY, JT_4_F_IRIS, JT_4_F_LUCILE, JT_4_F_SARAH_BABY, JT_4_GEFFEN_01, JT_4_GEFFEN_02, JT_4_GEFFEN_03, JT_4_GEFFEN_04, JT_4_GEFFEN_05, JT_4_GEFFEN_06, JT_4_GEFFEN_07, JT_4_GEFFEN_08, JT_4_GEFFEN_09, JT_4_GEFFEN_10, JT_4_GEFFEN_11, JT_4_GEFFEN_12, JT_4_GEFFEN_13, JT_4_GEFFEN_14, JT_4_M_CHAOS, JT_4_M_CHIEF_IRIN, JT_4_M_SAKRAY, JT_4_M_SAKRAYROYAL, JT_4_TOWER_01, JT_4_TOWER_02, JT_4_TOWER_03, JT_4_TOWER_04, JT_4_TOWER_05, JT_4_TOWER_06, JT_4_TOWER_07, JT_4_TOWER_08, JT_4_TOWER_09, JT_4_TOWER_10, JT_4_TOWER_11, JT_4_TOWER_12, JT_4_TOWER_13, JT_8_F_GIRL, JT_4_F_GODEMOM, JT_4_F_GON, JT_4_F_KID2, JT_4_M_BIBI, JT_4_M_GEF_SOLDIER, JT_4_M_KID1, JT_4_M_MOC_SOLDIER, JT_4_M_PAY_SOLDIER, JT_4_M_SEAMAN, JT_4_M_SNOWMAN, JT_4_F_05, JT_4_M_05, JT_4_M_06, JT_4_F_06, JT_4_M_PIERROT, JT_4_M_KID2, JT_4_F_KID3, JT_4_M_SANTA, JT_4_F_NACORURI, JT_4_F_SHAMAN, JT_4_F_KAFRA7, JT_GUILD_FLAG, JT_1_SHADOW_NPC, JT_4_F_07, JT_4_F_JOB_ASSASSIN, JT_4_F_JOB_BLACKSMITH, JT_4_F_JOB_HUNTER, JT_4_F_JOB_KNIGHT, JT_4_F_NOVICE, JT_4_M_JOB_ASSASSIN, JT_4_M_JOB_BLACKSMITH, JT_4_M_JOB_HUNTER, JT_4_M_JOB_KNIGHT1, JT_4_M_JOB_KNIGHT2, JT_4_M_JOB_WIZARD, JT_4_BAPHOMET, JT_4_DARKLORD, JT_4_DEVIRUCHI, JT_8_DOPPEL, JT_2_M_ALCHE, JT_2_M_BARD_ORIENT, JT_2_M_SAGE_B, JT_2_M_SAGE_OLD, JT_4_F_ALCHE, JT_4_F_CRU, JT_4_F_MONK, JT_4_F_ROGUE, JT_4_M_ALCHE_A, JT_4_M_ALCHE_B, JT_4_M_ALCHE_C, JT_4_M_CRU, JT_4_M_CRU_OLD, JT_4_M_MONK, JT_4_M_SAGE_A, JT_4_M_SAGE_C, JT_4_F_SON, JT_4_F_JPN2, JT_4_F_JPN, JT_4_F_JPNCHIBI, JT_4_F_JPNOBA2, JT_4_F_JPNOBA, JT_4_M_JPN2, JT_4_M_JPN, JT_4_M_JPNCHIBI, JT_4_M_JPNOJI2, JT_4_M_JPNOJI, JT_8_M_JPNSOLDIER, JT_8_M_JPNMASTER, JT_4_F_JPNMU, JT_4_F_TWGIRL, JT_4_F_TWGRANDMOM, JT_4_F_TWMASKGIRL, JT_4_F_TWMIDWOMAN, JT_4_M_TWBOY, JT_4_M_TWMASKMAN, JT_4_M_TWMIDMAN, JT_4_M_TWOLDMAN, JT_4_M_TWTEAMAN, JT_4_M_YOYOROGUE, JT_8_M_TWSOLDIER, JT_4_F_UMGIRL, JT_4_F_UMOLDWOMAN, JT_4_F_UMWOMAN, JT_4_M_UMCHIEF, JT_4_M_UMDANCEKID2, JT_4_M_UMDANCEKID, JT_4_M_UMKID, JT_4_M_UMOLDMAN, JT_4_M_UMSOLDIER, JT_4_M_SALVATION, JT_4_F_NFDEADKAFRA, JT_4_F_NFDEADMGCIAN, JT_4_F_NFLOSTGIRL, JT_4_M_NFDEADMAN2, JT_4_M_NFDEADMAN, JT_4_M_NFDEADSWDMAN, JT_4_M_NFLOSTMAN, JT_4_M_NFMAN, JT_4_NFBAT, JT_4_NFCOCK, JT_4_NFCOFFIN, JT_4_NFWISP, JT_1_F_SIGNZISK, JT_1_M_SIGN1, JT_1_M_SIGNALCHE, JT_1_M_SIGNART, JT_1_M_SIGNMCNT, JT_1_M_SIGNMONK2, JT_1_M_SIGNMONK, JT_1_M_SIGNROGUE, JT_4_F_VALKYRIE, JT_TW_TOWER, JT_2_M_OLDBLSMITH, JT_4_F_CHNDOCTOR, JT_4_F_CHNDRESS1, JT_4_F_CHNDRESS2, JT_4_F_CHNDRESS3, JT_4_F_CHNWOMAN, JT_4_M_CHN8GUEK, JT_4_M_CHNCOOK, JT_4_M_CHNGENERL, JT_4_M_CHNMAN, JT_4_M_CHNMONK, JT_4_M_CHNOLD, JT_4_M_CHNSOLDIER, JT_4_M_DWARF, JT_4_M_GRANDMONK, JT_4_M_ROGUE, JT_4_M_DOMINO, JT_4_F_DOMINO, JT_4_F_ZONDAGIRL, JT_4_M_REIDIN_KURS, JT_4_M_ZONDAOYAJI, JT_4_M_BUDDHIST, JT_2_BOARD1, JT_2_BOARD2, JT_2_BULLETIN_BOARD, JT_4_F_THAIAYO, JT_4_F_THAIGIRL, JT_4_F_THAISHAMAN, JT_4_M_THAIAYO, JT_4_M_THAIOLD, JT_4_M_THAIONGBAK, JT_CLEAR_NPC, JT_4_F_RACING, JT_4_F_EINOLD, JT_4_M_EINOLD, JT_4_M_EINMINER, JT_4_M_DIEMAN, JT_4_F_EINWOMAN, JT_4_M_REPAIR, JT_4_M_EIN_SOLDIER, JT_4_M_YURI, JT_4_M_EINMAN2, JT_4_M_EINMAN, JT_2_F_SIGN1, JT_4_BOARD3, JT_4_BULLETIN_BOARD2, JT_4_F_AGENTKAFRA, JT_4_F_KAFRA8, JT_4_F_KAFRA9, JT_4_F_LGTGIRL, JT_4_F_LGTGRAND, JT_4_F_OPERATION, JT_4_LGTSCIENCE, JT_4_M_LGTGRAND, JT_4_M_LGTGUARD2, JT_4_M_LGTGUARD, JT_4_M_LGTMAN, JT_4_M_LGTPOOR, JT_4_M_OPERATION, JT_4_M_PRESIDENT, JT_4_M_REINDEER, JT_4_M_ZONDAMAN, JT_4_M_PECOKNIGHT, JT_4_CAT, JT_4_F_YUNYANG, JT_4_M_OILMAN, JT_4_F_CAPEGIRL, JT_4_M_MASKMAN, JT_4_M_SITDOWN, JT_4_F_SITDOWN, JT_4_M_ALCHE_D, JT_4_M_ACROSS, JT_4_F_ACROSS, JT_4_COOK, JT_4_M_LIEMAN, JT_2_POSTBOX, JT_4_BULL, JT_4_LAM, JT_4_F_HUGIRL, JT_4_F_HUGRANMA, JT_4_F_HUWOMAN, JT_4_F_KHELLISIA, JT_4_F_KHELLY, JT_4_M_HUBOY, JT_4_M_HUGRANFA, JT_4_M_HUMAN_01, JT_4_M_HUMAN_02, JT_4_M_HUMERCHANT, JT_4_M_HUOLDARMY, JT_4_M_KHKIEL, JT_4_M_KHKYEL, JT_4_M_KHMAN, JT_4_F_KHWOMAN, JT_4_F_KHGIRL, JT_4_M_KHBOY, JT_4_M_PHILMAN, JT_4_PORING, JT_2_COLAVEND, JT_4_F_SOCCER, JT_4_M_SOCCER7, JT_4_M_SOCCER9, JT_4_F_CHILD, JT_4_F_MADAME, JT_4_F_MASK1, JT_4_F_MASK, JT_4_F_RACHOLD, JT_4_F_SHABBY, JT_4_F_TRAINEE, JT_4_M_CHILD1, JT_4_M_CHILD, JT_4_M_DOCTOR, JT_4_M_FROZEN1, JT_4_M_FROZEN, JT_4_M_MASK1, JT_4_M_MASK, JT_4_M_MIDDLE1, JT_4_M_MIDDLE, JT_4_M_RACHMAN2, JT_4_M_RACHMAN1, JT_4_M_RACHOLD1, JT_4_M_RACHOLD, JT_4_M_RASWORD, JT_4_M_TRAINEE, JT_4_F_ARUNA_POP, JT_4_M_ARUNA_NFM1, JT_4_DST_CAMEL, JT_4_DST_SOLDIER, JT_4_F_DESERT, JT_4_F_DST_CHILD, JT_4_F_DST_GRAND, JT_4_M_DESERT, JT_4_M_DST_CHILD, JT_4_M_DST_GRAND, JT_4_M_DST_MASTER, JT_4_M_DST_TOUGH, JT_4_ANGELING, JT_4_ARCHANGELING, JT_4_GHOSTRING, JT_4_F_EDEN_MASTER, JT_4_F_EDEN_OFFICER, JT_4_M_EDEN_GUARDER, JT_4_M_PATRICK, JT_4_DONKEY, JT_4_M_TRISTAN, JT_4_WHITE_COW, JT_4_F_RUSCHILD, JT_4_F_RUSWOMAN1, JT_4_F_RUSWOMAN2, JT_4_F_RUSWOMAN3, JT_4_M_RUSCHILD, JT_4_M_GUSLIMAN, JT_4_M_RUSBALD, JT_4_M_RUSKING, JT_4_M_RUSKNIGHT, JT_4_M_RUSMAN1, JT_4_M_RUSMAN2, JT_4_M_DRAKE, JT_4_F_BABAYAGA, JT_4_F_RUSGREEN, JT_4_RUS_DWOLF, JT_1_FLAG_LION, JT_1_FLAG_EAGLE, JT_4_M_MIKID, JT_4_BLUE_FLOWER, JT_4_RED_FLOWER, JT_4_YELL_FLOWER, JT_4_F_CAVE1, JT_4_F_MUT1, JT_4_F_MUT2, JT_4_F_SCIENCE, JT_4_M_1STPRIN1, JT_4_M_1STPRIN2, JT_4_M_2NDPRIN1, JT_4_M_2NDPRIN2, JT_4_M_3RDPRIN1, JT_4_M_3RDPRIN2, JT_4_M_4THPRIN1, JT_4_M_4THPRIN2, JT_4_M_5THPRIN1, JT_4_M_5THPRIN2, JT_4_M_6THPRIN1, JT_4_M_6THPRIN2, JT_4_M_CASMAN1, JT_4_M_CAVE1, JT_4_M_MOCASS1, JT_4_M_MOCASS2, JT_4_M_MUT1, NPC_RANGE2_END, // Official JT_MON_BEGIN NPC_RANGE3_START = 10000, // Official JT_NEW_NPC_3RD_BEGIN JT_4_TOWER_14, JT_4_TOWER_15, JT_4_TOWER_16, JT_4_TOWER_17, JT_4_TREASURE_BOX, JT_ACADEMY_MASTER, JT_PORTAL, JT_THANATOS_BATTLE, JT_THANATOS_KEEP, JT_4_F_LYDIA, JT_4_LUDE, JT_4_ALIZA, JT_4_ALICE, JT_4_ARCHER_SKEL, JT_4_JACK, JT_4_SOLDIER_SKEL, JT_4_LOLI_RURI, JT_4_M_SAKRAY_TIED, JT_4_M_ANTONIO, JT_4_M_COOKIE, JT_4_M_BELIEVER01, JT_4_F_BELIEVER01, JT_4_M_BELIEVER02, JT_4_ROPEPILE, JT_4_BRICKPILE, JT_4_WOODPILE, JT_4_M_TAMARIN, JT_4_M_DEATH, JT_4_GHOST_STAND, JT_4_GHOST_COLLAPSE, JT_4_COOKIEHOUSE, JT_4_F_SKULL06GIRL, JT_4_NONMYSTCASE, JT_4_F_KIMI, JT_4_M_FROZEN_GC, JT_4_M_FROZEN_KN, JT_4_SNAKE_LORD, JT_4_F_MOCBOY, JT_4_F_RUNAIN, JT_4_M_ROEL, JT_4_F_SHALOSH, JT_4_ENERGY_RED, JT_4_ENERGY_BLUE, JT_4_ENERGY_YELLOW, JT_4_ENERGY_BLACK, JT_4_ENERGY_WHITE, JT_4_F_PERE01, JT_4_JITTERBUG, JT_4_SEA_OTTER, JT_4_GALAPAGO, JT_4_DESERTWOLF_B, JT_4_BB_PORING, JT_4_F_CHARLESTON01, JT_4_F_CHARLESTON02, JT_4_F_CHARLESTON03, JT_4_M_IAN, JT_4_M_OLDSCHOLAR, JT_4_F_LAPERM, JT_4_M_DEBON, JT_4_M_BIRMAN, JT_4_F_SHAM, JT_4_M_REBELLION, JT_4_F_REBELLION, JT_4_CHN_SHAOTH, JT_4_SHOAL, JT_4_F_SARAH, JT_4_GIGANTES_BIG, JT_4_GIGANTES, JT_4_GIGANTES_SMALL, JT_4_GARGOYLE_STATUE, JT_4_AIRA, JT_4_EZELLA, JT_4_KULUNA, JT_4_LUNE, JT_4_MALLINA, JT_4_MORIN, JT_4_NASARIN, JT_4_F_BERRYTEA, JT_4_F_FRUIT, JT_4_SCR_MT_ROBOTS, JT_4_MACHINE_DEVICE, JT_4_GC109, JT_4_SYS_MSG, JT_4_M_TATIO, JT_4_M_REKENBER, JT_4_XMAS_CAT1, JT_4_XMAS_CAT2, JT_4_XMAS_CAT3, JT_4_XMAS_CAT4, JT_4_XMAS_CAT5, JT_4_XMAS_CAT6, JT_4_M_DEATH2, JT_4_S_KADOMATSU, JT_4_B_KADOMATSU, JT_4_F_08, JT_4_F_08_STATUE, JT_4_M_DARKPRIEST, JT_4_JP_GARM_H, JT_4_JP_MEDUSA_H, JT_4_CHN_GVG_01, JT_4_SPRING_RABBIT, JT_4_PD_TYRA, JT_4_PD_TYRANOS, JT_4_PD_PLESI, JT_4_PD_PLESIO, JT_4_PD_BRACHI, JT_4_PD_BRACHIOS, JT_4_PD_GOLDDRAGON, JT_4_PD_ZAEROG, JT_4_PD_TAMADORA, JT_4_JP_EDGA_H, JT_4_JP_BRAGOLEM_H, JT_4_EL_AQUA, JT_4_EP16_NIHIL, JT_4_EP16_SPICA, JT_4_EP16_SKIA, JT_4_EP16_PETER, JT_4_EP16_CRUX, JT_4_EP16_GRANZ, JT_4_EP16_STOLZ, JT_4_EP16_EGEO, JT_4_EP16_COOK, JT_4_EP16_MARK, JT_4_EP16_TAMARIN, JT_4_EP16_POE, JT_4_EP16_ISAAC, JT_4_EP16_HELMUT, JT_4_EP16_WOLF, JT_4_EP16_MEYER, JT_4_EP16_AGNES, JT_4_EP16_FOOD, JT_4_EP16_LOUVIERE, JT_4_EP16_MAX, JT_4_EP16_SPIEGEL, JT_4_MOONLIGHT, JT_4_MISTRESS, JT_4_DRACULA, JT_4_STORMKNIGHT, JT_4_TATTER, JT_4_AS_RAGGED_GOLEM, JT_4_AS_BLOODY_KNIGHT, JT_4_AS_WIND_GHOST, JT_4_F_BIJOU, JT_4_EP16_COOK2, JT_4_SERVICE_30_M_01, JT_4_SERVICE_30_F_01, JT_4_SCR_AT_ROBOTS, JT_4_F_RANGER, JT_4_WAG, JT_4_NPC_TRAP, JT_4_RAGGLER, JT_4_DR_PEPE, JT_4_DR_GAMBERI, JT_4_DR_AGLIO, JT_4_DR_OLIO, JT_4_DR_STELO, JT_4_DR_TORTEL, JT_4_BASIL_SLAVE, JT_4_DOU_JINDO, JT_4_DOU_SIBA, JT_4_TARUTUPI, JT_4_DR_SOLDIER, JT_4_DR_M_01, JT_4_DR_M_02, JT_4_DR_F_01, JT_4_DR_F_02, JT_4_DR_KID_01, JT_4_JP_2015EVT, JT_4_ALLIGATOR, JT_4_ANOLIAN, JT_4_TACNU, JT_4_CENERE, JT_4_F_ARUNA_POP2, JT_4_JACK_HEAD, JT_4_INJUSTICE, JT_4_BLOODYMAN, JT_4_GIBBET, JT_4_DULLAHAN, JT_4_M_LAZY, JT_4_M_GONY, JT_4_M_ROOKIE, JT_4_M_PHILOFONTES, JT_4_F_ESTLOVELOY, JT_4_F_LEEDSH, JT_4_F_DIENE, JT_4_F_COATNEIS, JT_4_M_RUPERT, JT_4_M_FALLENGONY, JT_4_M_EISEN, JT_4_F_DEADEVIL, JT_4_F_HUNTER_EVIL, JT_4_F_ELENA, JT_4_F_ANYA, JT_4_M_SEIREN_UC, JT_4_M_GUNSLINGER2, JT_4_M_GUNSLINGER3, JT_4_M_REBELLION2, JT_4_M_REBELLION3, JT_4_F_GUNSLINGER2, JT_4_F_GUNSLINGER3, JT_4_F_REBELLION2, JT_4_F_REBELLION3, JT_4_M_ILYA, JT_4_ELDER = 10205, JT_4_LUNATIC, JT_4_F_NOVICE2, JT_4_WICKEDNYMPH, JT_4_F_PREMI, JT_4_M_COSTELL, JT_4_M_YATTWARP, JT_4_M_EVOKASCUDI, JT_4_M_JOHNNYJAMES, JT_4_M_ALBERTFORD, JT_4_M_SEANMCCURDY, JT_4_M_KARAMPUCCI, JT_4_M_CACTUSMAN1, JT_4_M_CACTUSMAN2, JT_4_M_CACTUSMAN3, JT_4_M_CACTUSLADY, JT_4_M_GAST, JT_4_M_CACTUSCHILD, JT_4_KING, JT_4_F_BOMI, JT_4_M_CACTUSCHIEF, JT_4_F_CACTUSCHILD2, JT_4_F_CACTUSLADY2, JT_4_F_CACTUSLADY3, JT_4_M_CACTUS, JT_4_M_COWRAIDERS1, JT_4_M_COWRAIDERS2, JT_4_M_COWRAIDERS3, JT_4_F_JP14THEVT, JT_4_M_POORSCHOLAR, JT_4_M_PEPPERROTI, JT_JP_NPC01, JT_4_PURPLE_WARP, JT_4_F_NARIN, JT_4_M_URGENT_MAN, JT_4_M_KEEN_SOLDIER, JT_4_F_SLOPPY_WOMAN, JT_4_F_DRKAFRA01, JT_4_M_DRZONDA01, JT_4_M_SWD_RENO, JT_4_M_KNG_RENO, JT_4_M_AC_RUMIN, JT_4_M_HIGH_WIZARD, JT_4_SYSTEM_BOX, JT_4_STEELBOX, JT_4_WOODBOX, JT_4_M_POPFESTA, JT_4_BONFIRE, JT_4_PCCOUNT, JT_4_LAVAGOLEM, JT_4_F_IA, JT_4_LOCKE, JT_4_LIL_LIF, JT_4_LIL_LIF2, JT_4_F_DRAGONHAT, JT_4_M_DRAGONHAT, JT_JP_NPC02, JT_JP_NPC03, JT_JP_NPC04, JT_JP_NPC05, JT_JP_NPC06, JT_JP_NPC07, JT_JP_NPC08, JT_JP_NPC09, JT_JP_NPC10, JT_4_FIRERING, JT_4_SCATLETON, JT_4_JP_AB_NPC_001, JT_4_JP_AB_NPC_002, JT_4_JP_AB_NPC_003, JT_4_JP_AB_NPC_004, JT_4_JP_AB_NPC_005, JT_4_JP_AB_NPC_006, JT_4_JP_AB_NPC_007, JT_4_JP_AB_NPC_008, JT_4_JJAK, JT_4_M_SNOWMAN_B, JT_4_M_SNOWMAN_R, JT_4_M_SNOWMAN_G, JT_WARPEFFECTNPC, JT_4_HEN, JT_4_F_DANGDANG, JT_4_M_DANGDANG, JT_4_F_DANGDANG1, JT_4_LEAFCAT, JT_4_NASARIAN, JT_4_NASARIAN_EM, JT_4_TEDDY_BEAR_W, JT_4_TEDDY_BEAR_B, JT_4_TEDDY_BEAR_B_L, JT_4_M_SOULREAPER, JT_4_F_SE_SUN, JT_4_M_SE_MOON, JT_4_M_SE_STAR, JT_4_EP17_KAYA, JT_4_EP17_AS, JT_4_EP17_ELYUMINA, JT_4_EP17_MORNING, JT_4_EP17_MIGUEL, JT_4_EP17_NIHIL_K, JT_4_EP17_MIGUEL_D, JT_4_ED_SCHMIDT, JT_4_ED_OSCAR, JT_4_ED_ORB, JT_4_ED_FENCE, JT_4_M_ANDREA, JT_4_M_ANDREA_D, JT_4_F_ANES, JT_4_F_ANES_D, JT_4_M_SILVANO, JT_4_M_SILVANO_D, JT_4_F_CECILIA, JT_4_F_CECILIA_D, JT_4_M_MD_SEYREN, JT_4_M_MD_EREMES, JT_4_M_MD_HARWORD, JT_4_F_MD_MAGALETA, JT_4_F_MD_SHECIL, JT_4_F_MD_KATRINN, JT_4_M_MD_SEYREN_H, JT_4_M_MD_EREMES_H, JT_4_M_MD_HARWORD_H, JT_4_F_MD_MAGALETA_H, JT_4_F_MD_SHECIL_H, JT_4_F_MD_KATRINN_H, JT_4_M_MD_SEYREN_D, JT_4_M_MD_EREMES_D, JT_4_M_MD_HARWORD_D, JT_4_F_MD_MAGALETA_D, JT_4_F_MD_SHECIL_D, JT_4_F_MD_KATRINN_D, JT_4_F_MD_YGNIZEM, JT_4_F_ERENE, JT_4_M_EINCPTMINER, JT_4_F_EINRESERCHER, JT_4_F_REINDEER, JT_4_PIGOCTO, JT_4_ORK_HERO, JT_4_JP_16TH, JT_4_EP17_MASTER_A, JT_4_EP17_BASIC_B, JT_4_EP17_GUARD_B, JT_4_EP17_BASIC_B_NG, JT_4_EP17_GUARD_B_NG, JT_4_EP17_SWEETY, JT_4_EP17_BOY_A, JT_4_EP17_BOY_B, JT_4_EP17_TAMARIN, JT_4_EP17_SCISSORE, JT_4_EP17_TABLET, JT_4_EP17_BUCKETS, JT_4_EP17_CLEANER, JT_4_EP17_BASKET, JT_4_EP17_BROKENBETA, JT_4_EP17_CLEANER_W, JT_4_EP17_MERMAID, JT_4_JP_AB_NPC_009, JT_4_JP_AB_NPC_010, JT_4_4JOB_SILLA = 10364, JT_4_4JOB_MAGGI, JT_4_4JOB_ROBIN, JT_4_4JOB_ROBIN_DRUNK, JT_4_4JOB_LETICIA, JT_4_4JOB_SERANG, JT_4_4JOB_EINHAR, JT_4_4JOB_SEALSTONE, JT_4_4JOB_PHANTOMBOOK1, JT_4_4JOB_PHANTOMBOOK2, JT_4_4JOB_PHANTOMBOOK3, JT_4_VENDING_MACHINE2, JT_4_EP18_MARAM, JT_4_EP18_MIRIAM, JT_4_EP18_SUAD, JT_4_EP18_IMRIL, JT_4_EP18_MERCHANT, JT_4_EP18_TAMARIN, JT_4_EP18_DEW, JT_4_EP18_MARK, JT_4_EP18_ALF, JT_4_EP18_SHULANG, JT_4_EP18_BAGOT, JT_4_EP18_DEMIFREYA, JT_4_EP18_KAMIL, JT_4_EP18_HAZAR, JT_4_EP18_WAGON, JT_4_EP18_PAPERS, JT_4_EP18_HALFFLOWER, JT_4_EP18_GW_OLD01, JT_4_EP18_GW_OLD02, JT_4_EP18_GW_MIDDLE01, JT_4_EP18_GW_MIDDLE02, JT_4_EP18_GW_MAN01, JT_4_EP18_GW_MAN02, JT_4_EP18_GW_WOMAN01, JT_4_EP18_GW_WOMAN02, JT_4_EP18_GW_CHILD01, JT_4_EP18_GW_CHILD02, JT_4_STAR_BOX_SCORE, JT_4_STAR_BOX_POW1, JT_4_STAR_BOX_POW2, JT_4_STAR_BOX_STA1, JT_4_STAR_BOX_STA2, JT_4_STAR_BOX_SPL1, JT_4_STAR_BOX_SPL2, JT_4_STAR_BOX_CON1, JT_4_STAR_BOX_CON2, JT_4_STAR_BOX_WIS1, JT_4_STAR_BOX_WIS2, JT_4_STAR_BOX_CRT1, JT_4_STAR_BOX_CRT2, JT_4_4JOB_MAURA, JT_4_STAR_BOX_N, JT_4_STAR_BOX_H, JT_4_STAR_BOX_HP1, JT_4_STAR_BOX_HP2, JT_4_STAR_BOX_ATK1, JT_4_STAR_BOX_ATK2, JT_4_STAR_BOX_BARRIER1, JT_4_STAR_BOX_BARRIER2, JT_4_STAR_BOX_TRAP1, JT_4_STAR_BOX_TRAP2, JT_4_STAR_BOX_MASTER, JT_4_POINT_RED, JT_4_POINT_BLUE, JT_4_POINT_YELLOW, JT_4_POINT_BLACK, JT_4_POINT_WHITE, JT_1_JOURNEY_STONE_D = 10442, JT_1_JOURNEY_STONE_F, JT_ROZ_MQ_SIGRUN, JT_ROZ_MQ_SIGRUN_S, JT_ROZ_MQ_HARACE01, JT_ROZ_MQ_HARACE02, JT_ROZ_MQ_SAHARIO, JT_ROZ_MQ_SUPIGEL, JT_ROZ_MQ_DEADSOLDIER, JT_NEW_NPC_3RD_END = 19999, NPC_RANGE3_END, // Official: JT_NEW_NPC_3RD_END=19999 // Unofficial JT_INVISIBLE = 32767, JT_FAKENPC = -1 }; // Old NPC range #define MAX_NPC_CLASS NPC_RANGE2_END // New NPC range #define MAX_NPC_CLASS2_START NPC_RANGE3_START #define MAX_NPC_CLASS2_END NPC_RANGE3_END //Checks if a given id is a valid npc id. [Skotlex] //Since new npcs are added all the time, the max valid value is the one before the first mob (Scorpion = 1001) #define npcdb_checkid(id) ( ( (id) > NPC_RANGE1_START && (id) < NPC_RANGE1_END ) || (id) == JT_HIDDEN_WARP_NPC || ( (id) > NPC_RANGE2_START && (id) < NPC_RANGE2_END ) || (id) == JT_INVISIBLE || ( (id) > NPC_RANGE3_START && (id) < NPC_RANGE3_END ) ) #ifdef PCRE_SUPPORT void npc_chat_finalize(struct npc_data* nd); #endif //Script NPC events. enum npce_event : uint8 { NPCE_LOGIN, NPCE_LOGOUT, NPCE_LOADMAP, NPCE_BASELVUP, NPCE_JOBLVUP, NPCE_DIE, NPCE_KILLPC, NPCE_KILLNPC, NPCE_MAX }; struct view_data* npc_get_viewdata(int class_); int npc_chat_sub(struct block_list* bl, va_list ap); int npc_event_dequeue(struct map_session_data* sd,bool free_script_stack=true); int npc_event(struct map_session_data* sd, const char* eventname, int ontouch); int npc_touch_areanpc(struct map_session_data* sd, int16 m, int16 x, int16 y, struct npc_data* nd); int npc_touch_area_allnpc(struct map_session_data* sd, int16 m, int16 x, int16 y); int npc_touch_areanpc2(struct mob_data *md); // [Skotlex] int npc_check_areanpc(int flag, int16 m, int16 x, int16 y, int16 range); int npc_touchnext_areanpc(struct map_session_data* sd,bool leavemap); int npc_click(struct map_session_data* sd, struct npc_data* nd); bool npc_scriptcont(struct map_session_data* sd, int id, bool closing); struct npc_data* npc_checknear(struct map_session_data* sd, struct block_list* bl); int npc_buysellsel(struct map_session_data* sd, int id, int type); uint8 npc_buylist(struct map_session_data* sd, uint16 n, struct s_npc_buy_list *item_list); static int npc_buylist_sub(struct map_session_data* sd, uint16 n, struct s_npc_buy_list *item_list, struct npc_data* nd); uint8 npc_selllist(struct map_session_data* sd, int n, unsigned short *item_list); void npc_parse_mob2(struct spawn_data* mob); struct npc_data* npc_add_warp(char* name, short from_mapid, short from_x, short from_y, short xs, short ys, unsigned short to_mapindex, short to_x, short to_y); int npc_globalmessage(const char* name,const char* mes); const char *npc_get_script_event_name(int npce_index); void npc_setcells(struct npc_data* nd); void npc_unsetcells(struct npc_data* nd); bool npc_movenpc(struct npc_data* nd, int16 x, int16 y); bool npc_is_cloaked(struct npc_data* nd, struct map_session_data* sd); bool npc_enable_target(const char* name, uint32 char_id, int flag); #define npc_enable(name, flag) npc_enable_target(name, 0, flag) void npc_setdisplayname(struct npc_data* nd, const char* newname); void npc_setclass(struct npc_data* nd, short class_); struct npc_data* npc_name2id(const char* name); int npc_isnear_sub(struct block_list* bl, va_list args); bool npc_isnear(struct block_list * bl); int npc_get_new_npc_id(void); int npc_addsrcfile(const char* name, bool loadscript); void npc_delsrcfile(const char* name); int npc_parsesrcfile(const char* filepath); void do_clear_npc(void); void do_final_npc(void); void do_init_npc(void); void npc_event_do_oninit(void); int npc_event_do(const char* name); int npc_event_do_id(const char* name, int rid); int npc_event_doall(const char* name); void npc_event_runall( const char* eventname ); int npc_event_doall_id(const char* name, int rid); int npc_event_doall_path(const char* event_name, const char* path); int npc_timerevent_start(struct npc_data* nd, int rid); int npc_timerevent_stop(struct npc_data* nd); void npc_timerevent_quit(struct map_session_data* sd); t_tick npc_gettimerevent_tick(struct npc_data* nd); int npc_settimerevent_tick(struct npc_data* nd, int newtimer); int npc_remove_map(struct npc_data* nd); void npc_unload_duplicates (struct npc_data* nd); int npc_unload(struct npc_data* nd, bool single); int npc_reload(void); void npc_read_event_script(void); int npc_script_event(struct map_session_data* sd, enum npce_event type); int npc_duplicate4instance(struct npc_data *snd, int16 m); int npc_instanceinit(struct npc_data* nd); int npc_instancedestroy(struct npc_data* nd); int npc_cashshop_buy(struct map_session_data *sd, t_itemid nameid, int amount, int points); void npc_shop_currency_type(struct map_session_data *sd, struct npc_data *nd, int cost[2], bool display); extern struct npc_data* fake_nd; int npc_cashshop_buylist(struct map_session_data *sd, int points, int count, struct PACKET_CZ_PC_BUY_CASH_POINT_ITEM_sub* item_list); bool npc_shop_discount(struct npc_data* nd); #if PACKETVER >= 20131223 void npc_market_tosql(const char *exname, struct npc_item_list *list); void npc_market_delfromsql_(const char *exname, t_itemid nameid, bool clear); #endif #ifdef SECURE_NPCTIMEOUT TIMER_FUNC(npc_secure_timeout_timer); #endif // @commands (script-based) int npc_do_atcmd_event(struct map_session_data* sd, const char* command, const char* message, const char* eventname); bool npc_unloadfile( const char* path ); #endif /* NPC_HPP */