summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoreuphyy <euphyy@54d463be-8e91-2dee-dedb-b68131a5f0ec>2012-12-27 06:11:18 +0000
committereuphyy <euphyy@54d463be-8e91-2dee-dedb-b68131a5f0ec>2012-12-27 06:11:18 +0000
commit847a41f41dc4296c8c2aa42a79c23336f55e665b (patch)
tree4010b867b2060861d519babb6da86c0879825ff9 /src
parentf4867954028b6c7b4d37c9860696578b27d6dbd1 (diff)
downloadhercules-847a41f41dc4296c8c2aa42a79c23336f55e665b.tar.gz
hercules-847a41f41dc4296c8c2aa42a79c23336f55e665b.tar.bz2
hercules-847a41f41dc4296c8c2aa42a79c23336f55e665b.tar.xz
hercules-847a41f41dc4296c8c2aa42a79c23336f55e665b.zip
> Follow-up r17048:
- Renamed 'useskilltopc' to 'npcskill'; - Removed cast time from NPC objects, code by mkbu95 (suspected official behavior); - Documented 'npcskill'; - Replaced all instances in scripts. * Fixed max level bypass, code by malufett (bugreport:5800). * Updated Malangdo spawns to official. * Some standardization of npc/quests/first_class/. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@17049 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src')
-rw-r--r--src/map/pc.c11
-rw-r--r--src/map/script.c12
-rw-r--r--src/map/unit.c7
3 files changed, 24 insertions, 6 deletions
diff --git a/src/map/pc.c b/src/map/pc.c
index 017944942..378c44ab5 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -7231,6 +7231,17 @@ int pc_jobchange(struct map_session_data *sd,int job, int upper)
sd->class_ = (unsigned short)b_class;
sd->status.job_level=1;
sd->status.job_exp=0;
+
+ if (sd->status.base_level > pc_maxbaselv(sd)) {
+ sd->status.base_level = pc_maxbaselv(sd);
+ sd->status.base_exp=0;
+ pc_resetstate(sd);
+ clif_updatestatus(sd,SP_STATUSPOINT);
+ clif_updatestatus(sd,SP_BASELEVEL);
+ clif_updatestatus(sd,SP_BASEEXP);
+ clif_updatestatus(sd,SP_NEXTBASEEXP);
+ }
+
clif_updatestatus(sd,SP_JOBLEVEL);
clif_updatestatus(sd,SP_JOBEXP);
clif_updatestatus(sd,SP_NEXTJOBEXP);
diff --git a/src/map/script.c b/src/map/script.c
index 55f6d0283..9c89943c8 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -17268,9 +17268,9 @@ BUILDIN_FUNC(cleanmap)
return 0;
}
/* Cast a skill on the attached player.
- * useskilltopc <skill_id>, <skill_level>, <stat_point>, <npc_level>;
- * useskilltopc "<skill_name>", <skill_level>, <stat_point>, <npc_level>; */
-BUILDIN_FUNC(useskilltopc)
+ * npcskill <skill id>, <skill lvl>, <stat point>, <NPC level>;
+ * npcskill "<skill name>", <skill lvl>, <stat point>, <NPC level>; */
+BUILDIN_FUNC(npcskill)
{
unsigned int skill_id;
unsigned short skill_level;
@@ -17287,11 +17287,11 @@ BUILDIN_FUNC(useskilltopc)
nd = (struct npc_data *)map_id2bl(sd->npc_id);
if (stat_point > battle_config.max_third_parameter) {
- ShowError("useskilltopc: stat point exceeded maximum of %d.\n",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("useskilltopc: level exceeded maximum of %d.\n", 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.
@@ -17758,7 +17758,7 @@ struct script_function buildin_func[] = {
BUILDIN_DEF(getrandgroupitem,"ii"),
BUILDIN_DEF(cleanmap,"s"),
BUILDIN_DEF2(cleanmap,"cleanarea","siiii"),
- BUILDIN_DEF(useskilltopc,"viii"),
+ BUILDIN_DEF(npcskill,"viii"),
/**
* @commands (script based)
**/
diff --git a/src/map/unit.c b/src/map/unit.c
index 07b728f47..e1e9d9690 100644
--- a/src/map/unit.c
+++ b/src/map/unit.c
@@ -1276,6 +1276,10 @@ int unit_skilluse_id2(struct block_list *src, int target_id, short skill_num, sh
casttime = skill_vfcastfix(src, casttime, skill_num, skill_lv);
#endif
+ if (src->type == BL_NPC) { // NPC-objects do not have cast time
+ casttime = 0;
+ }
+
if(!ud->state.running) //need TK_RUN or WUGDASH handler to be done before that, see bugreport:6026
unit_stop_walking(src,1);// eventhough this is not how official works but this will do the trick. bugreport:6829
// in official this is triggered even if no cast time.
@@ -1439,6 +1443,9 @@ int unit_skilluse_pos2( struct block_list *src, short skill_x, short skill_y, sh
casttime = skill_vfcastfix(src, casttime, skill_num, skill_lv );
#endif
+ if (src->type == BL_NPC) { // NPC-objects do not have cast time
+ casttime = 0;
+ }
ud->state.skillcastcancel = castcancel&&casttime>0?1:0;
if( !sd || sd->skillitem != skill_num || skill_get_cast(skill_num,skill_lv) )