I'm making a custom script command. I want to make a version of bg_monster but instead of bg change to party, So far here is what I was aable to make. No errors but monster do not detect party members as friendly unit:
BUILDIN_FUNC(pt_monster)
{
int class_ = 0, x = 0, y = 0, party_id = 0;
const char *str, *mapname, *evt = "";
party_id = script_getnum(st, 2);
mapname = script_getstr(st, 3);
x = script_getnum(st, 4);
y = script_getnum(st, 5);
str = script_getstr(st, 6);
class_ = script_getnum(st, 7);
if (script_hasdata(st, 8)) evt = script_getstr(st, 8);
check_event(st, evt);
script_pushint(st, mob_spawn_party(mapname, x, y, str, class_, evt, party_id));
return SCRIPT_CMD_SUCCESS;
}
/*==========================================
* Party Monster
*------------------------------------------*/
int mob_spawn_party(const char* mapname, int16 x, int16 y, const char* mobname, int mob_id, const char* event, unsigned int party_id)
{
struct mob_data *md = NULL;
struct spawn_data data;
int16 m;
if ((m = map_mapname2mapid(mapname)) < 0)
{
ShowWarning("mob_spawn_party: Map [%s] not found.\n", mapname);
return 0;
}
memset(&data, 0, sizeof(struct spawn_data));
data.m = m;
data.num = 1;
if (mob_id <= 0)
{
mob_id = mob_get_random_id(-mob_id - 1, 1, 99);
if (!mob_id) return 0;
}
data.id = mob_id;
if ((x <= 0 || y <= 0) && !map_search_freecell(NULL, m, &x, &y, -1, -1, 1))
{
ShowWarning("mob_spawn_paarty: Couldn't locate a spawn cell for guardian class %d (bg_id %d) at map %s\n", mob_id, party_id, map[m].name);
return 0;
}
data.x = x;
data.y = y;
safestrncpy(data.name, mobname, sizeof(data.name));
safestrncpy(data.eventname, event, sizeof(data.eventname));
if (!mob_parse_dataset(&data))
return 0;
md = mob_spawn_dataset(&data);
mob_spawn(md);
md->party_id = party_id; // BG Team ID
return md->bl.id;
}
Thanks for those who will help
Note: I also edited the script.h and mob.h parts but I did not include since I don't think it is related here.
Question
pajodex
Hi,
I'm making a custom script command. I want to make a version of bg_monster but instead of bg change to party, So far here is what I was aable to make. No errors but monster do not detect party members as friendly unit:
BUILDIN_FUNC(pt_monster) { int class_ = 0, x = 0, y = 0, party_id = 0; const char *str, *mapname, *evt = ""; party_id = script_getnum(st, 2); mapname = script_getstr(st, 3); x = script_getnum(st, 4); y = script_getnum(st, 5); str = script_getstr(st, 6); class_ = script_getnum(st, 7); if (script_hasdata(st, 8)) evt = script_getstr(st, 8); check_event(st, evt); script_pushint(st, mob_spawn_party(mapname, x, y, str, class_, evt, party_id)); return SCRIPT_CMD_SUCCESS; }
/*========================================== * Party Monster *------------------------------------------*/ int mob_spawn_party(const char* mapname, int16 x, int16 y, const char* mobname, int mob_id, const char* event, unsigned int party_id) { struct mob_data *md = NULL; struct spawn_data data; int16 m; if ((m = map_mapname2mapid(mapname)) < 0) { ShowWarning("mob_spawn_party: Map [%s] not found.\n", mapname); return 0; } memset(&data, 0, sizeof(struct spawn_data)); data.m = m; data.num = 1; if (mob_id <= 0) { mob_id = mob_get_random_id(-mob_id - 1, 1, 99); if (!mob_id) return 0; } data.id = mob_id; if ((x <= 0 || y <= 0) && !map_search_freecell(NULL, m, &x, &y, -1, -1, 1)) { ShowWarning("mob_spawn_paarty: Couldn't locate a spawn cell for guardian class %d (bg_id %d) at map %s\n", mob_id, party_id, map[m].name); return 0; } data.x = x; data.y = y; safestrncpy(data.name, mobname, sizeof(data.name)); safestrncpy(data.eventname, event, sizeof(data.eventname)); if (!mob_parse_dataset(&data)) return 0; md = mob_spawn_dataset(&data); mob_spawn(md); md->party_id = party_id; // BG Team ID return md->bl.id; }
Thanks for those who will help
Note: I also edited the script.h and mob.h parts but I did not include since I don't think it is related here.
Edited by pajodex0 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.