/* Cast a skill on the attached player. * npcskill , , , ; * npcskill "", , , ; */ BUILDIN_FUNC(npcskill) { uint16 skill_id; unsigned short skill_level; unsigned int stat_point; unsigned int npc_level; struct npc_data *nd; struct map_session_data *sd; skill_id = script_isstring(st, 2) ? skill_name2id(script_getstr(st, 2)) : script_getnum(st, 2); skill_level = script_getnum(st, 3); stat_point = script_getnum(st, 4); npc_level = script_getnum(st, 5); sd = script_rid2sd(st); nd = (struct npc_data *)map_id2bl(sd->npc_id); if (stat_point > battle_config.max_third_parameter) { ShowError("npcskill: stat point exceeded maximum of %d.\n",battle_config.max_third_parameter ); return 1; } if (npc_level > MAX_LEVEL) { ShowError("npcskill: level exceeded maximum of %d.\n", MAX_LEVEL); return 1; } if (sd == NULL || nd == NULL) { //ain't possible, but I don't trust people. return 1; } nd->level = npc_level; nd->stat_point = stat_point; if (!nd->status.hp) { status_calc_npc(nd, true); } else { status_calc_npc(nd, false); } if (skill_get_inf(skill_id)&INF_GROUND_SKILL) { unit_skilluse_pos(&nd->bl, sd->bl.x, sd->bl.y, skill_id, skill_level); } else { unit_skilluse_id(&nd->bl, sd->bl.id, skill_id, skill_level); } return 0; } BUILDIN_DEF(npcskill,"viii"),