Hallo there i got it finaly running that my custom created mobs can also enjoy the players carts.
rathena/src/map/clif.cpp:
void clif_getareachar_unit( map_session_data* sd,struct block_list *bl ){
.....
case BL_MOB:
{
.....
int carttype = 0;
if (md->sc.getSCE(SC_PUSH_CART)) {
carttype = md->sc.getSCE(SC_PUSH_CART)->val1;
PACKET_ZC_EFST_SET_ENTER p{};
p.packetType = HEADER_ZC_EFST_SET_ENTER;
p.targetID = md->bl.id;
p.type = status_db.getIcon(SC_PUSH_CART);
p.duration = client_tick(9999);
#if PACKETVER >= 20120618
p.duration2 = p.duration;
#endif
p.val1 = carttype / 64 - 1;
p.val2 = 0;
p.val3 = 0;
clif_send(&p, sizeof(p), &sd->bl, AREA);
}
...
}
...
}
Here also a script to set it to a bl->id like a spawned monster or npc
BUILDIN_DEF(setunitcart, "ii"),
BUILDIN_FUNC(setunitcart)
{
struct block_list* bl = nullptr;
int carttype = script_getnum(st, 2);
if (carttype < 0 || carttype > MAX_CARTS) return SCRIPT_CMD_SUCCESS;
bl = map_id2bl(script_getnum(st, 3));
if (bl) sc_start(bl, bl, SC_PUSH_CART, 100, carttype, 0);
return SCRIPT_CMD_SUCCESS;
}
I hope you'll find it usefull like me.
A little hint at the end here... you can get the block id of a mob after spawning them (mob_once_spawn in the mob.cpp returns a int32 with a block id or 0 for failed to spawn)