diff options
Diffstat (limited to 'src/map/npc_chat.c')
-rw-r--r-- | src/map/npc_chat.c | 35 |
1 files changed, 24 insertions, 11 deletions
diff --git a/src/map/npc_chat.c b/src/map/npc_chat.c index 8950df1ee..fef3ba99b 100644 --- a/src/map/npc_chat.c +++ b/src/map/npc_chat.c @@ -339,15 +339,20 @@ void npc_chat_finalize(struct npc_data* nd) */ int npc_chat_sub(struct block_list* bl, va_list ap) { - struct npc_data *nd = (struct npc_data *) bl; - struct npc_parse *npcParse = nd->chatdb; - char* msg; + struct npc_data *nd = NULL; + struct npc_parse *npcParse = NULL; + char *msg; int len, i; struct map_session_data* sd; struct npc_label_list* lst; struct pcrematch_set* pcreset; struct pcrematch_entry* e; + nullpo_ret(bl); + Assert_ret(bl->type == BL_NPC); + nd = BL_UCAST(BL_NPC, bl); + npcParse = nd->chatdb; + // Not interested in anything you might have to say... if (npcParse == NULL || npcParse->active == NULL) return 0; @@ -395,38 +400,46 @@ int npc_chat_sub(struct block_list* bl, va_list ap) } // Various script built-ins used to support these functions -BUILDIN(defpattern) { +BUILDIN(defpattern) +{ int setid = script_getnum(st,2); const char* pattern = script_getstr(st,3); const char* label = script_getstr(st,4); - struct npc_data* nd = (struct npc_data *)map->id2bl(st->oid); + struct npc_data *nd = map->id2nd(st->oid); + nullpo_retr(false, nd); npc_chat->def_pattern(nd, setid, pattern, label); return true; } -BUILDIN(activatepset) { +BUILDIN(activatepset) +{ int setid = script_getnum(st,2); - struct npc_data* nd = (struct npc_data *)map->id2bl(st->oid); + struct npc_data *nd = map->id2nd(st->oid); + nullpo_retr(false, nd); npc_chat->activate_pcreset(nd, setid); return true; } -BUILDIN(deactivatepset) { +BUILDIN(deactivatepset) +{ int setid = script_getnum(st,2); - struct npc_data* nd = (struct npc_data *)map->id2bl(st->oid); + struct npc_data *nd = map->id2nd(st->oid); + nullpo_retr(false, nd); npc_chat->deactivate_pcreset(nd, setid); return true; } -BUILDIN(deletepset) { +BUILDIN(deletepset) +{ int setid = script_getnum(st,2); - struct npc_data* nd = (struct npc_data *)map->id2bl(st->oid); + struct npc_data *nd = map->id2nd(st->oid); + nullpo_retr(false, nd); npc_chat->delete_pcreset(nd, setid); |