diff options
author | Taylor Locke <kisuka@kisuka.com> | 2014-10-18 01:22:28 -0700 |
---|---|---|
committer | Taylor Locke <kisuka@kisuka.com> | 2014-10-18 01:32:57 -0700 |
commit | 4ac673941714032ada6d26fb60936ec510bbe496 (patch) | |
tree | 21e0aa8b626640428d7554a30762b8392be0ef1e /src/map | |
parent | cc8dfc2f45d0c5405cc628393e846e94e1e7a812 (diff) | |
download | hercules-4ac673941714032ada6d26fb60936ec510bbe496.tar.gz hercules-4ac673941714032ada6d26fb60936ec510bbe496.tar.bz2 hercules-4ac673941714032ada6d26fb60936ec510bbe496.tar.xz hercules-4ac673941714032ada6d26fb60936ec510bbe496.zip |
Some Quality of Life Changes
checkquest deprecated; Use questprogress instead for a more logical
quest log checking command.
getbrokencount command added to get amount of broken equipment.
setdragon and setmadogear deprecated; use setriding instead.
setriding now handles all combat mounts.
Diffstat (limited to 'src/map')
-rw-r--r-- | src/map/pc.c | 44 | ||||
-rw-r--r-- | src/map/pc.h | 2 | ||||
-rw-r--r-- | src/map/script.c | 107 |
3 files changed, 143 insertions, 10 deletions
diff --git a/src/map/pc.c b/src/map/pc.c index 697a24507..71860340d 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -8163,11 +8163,47 @@ int pc_setfalcon(TBL_PC* sd, int flag) *------------------------------------------*/ int pc_setriding(TBL_PC* sd, int flag) { - if( flag ){ - if( pc->checkskill(sd,KN_RIDING) > 0 ) // add peco - pc->setoption(sd, sd->sc.option|OPTION_RIDING); - } else if( pc_isriding(sd) ){ + if( flag ) + { + // Rune Knight (Dragon) + if( (sd->class_&MAPID_THIRDMASK) == MAPID_RUNE_KNIGHT ) { + if( pc->checkskill(sd, RK_DRAGONTRAINING) ) + pc->setoption(sd, sd->sc.option|flag); + } + // Ranger (Warg) + else if( (sd->class_&MAPID_THIRDMASK) == MAPID_RANGER ) { + if( pc->checkskill(sd, RA_WUGRIDER) ) + pc->setoption(sd,sd->sc.option|OPTION_WUGRIDER); + } + // Mechanic (Mado Gear) + else if( (sd->class_&MAPID_THIRDMASK) == MAPID_MECHANIC ) { + if( pc->checkskill(sd, NC_MADOLICENCE) ) + pc->setoption(sd, sd->sc.option|OPTION_MADOGEAR); + } + // Knight / Crusader (Peco Peco) + else { + if( pc->checkskill(sd, KN_RIDING) ) + pc->setoption(sd, sd->sc.option|OPTION_RIDING); + } + } + else if( pc_isriding(sd) ) + { + // Rune Knight (Dragon) + if( (sd->class_&MAPID_THIRDMASK) == MAPID_RUNE_KNIGHT ) { + pc->setoption(sd, sd->sc.option&~OPTION_DRAGON); + } + // Ranger (Warg) + else if( (sd->class_&MAPID_THIRDMASK) == MAPID_RANGER ) { + pc->setoption(sd,sd->sc.option&~OPTION_WUGRIDER); + } + // Mechanic (Mado Gear) + else if( (sd->class_&MAPID_THIRDMASK) == MAPID_MECHANIC ) { + pc->setoption(sd, sd->sc.option&~OPTION_MADOGEAR); + } + // Knight / Crusaders (Peco Peco) + else { pc->setoption(sd, sd->sc.option&~OPTION_RIDING); + } } return 0; diff --git a/src/map/pc.h b/src/map/pc.h index c36704b4f..6159a8f26 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -589,7 +589,7 @@ struct map_session_data { #endif #define pc_isfalcon(sd) ( (sd)->sc.option&OPTION_FALCON ) -#define pc_isriding(sd) ( (sd)->sc.option&OPTION_RIDING ) +#define pc_isriding(sd) ( (sd)->sc.option&(OPTION_RIDING|OPTION_DRAGON|OPTION_WUGRIDER|OPTION_MADOGEAR) ) #define pc_isinvisible(sd) ( (sd)->sc.option&OPTION_INVISIBLE ) #define pc_is50overweight(sd) ( (sd)->weight*100 >= (sd)->max_weight*battle->bc->natural_heal_weight_rate ) #define pc_is90overweight(sd) ( (sd)->weight*10 >= (sd)->max_weight*9 ) diff --git a/src/map/script.c b/src/map/script.c index e70c2e10a..77b60ddd2 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -7658,6 +7658,29 @@ BUILDIN(getbrokenid) } /*========================================== + * getbrokencount + *------------------------------------------*/ +BUILDIN(getbrokencount) +{ + int i, counter = 0; + TBL_PC *sd; + + sd = script->rid2sd(st); + + if( sd == NULL ) + return true; + + for(i = 0; i < MAX_INVENTORY; i++) { + if(sd->status.inventory[i].attribute) + counter++; + } + + script_pushint(st, counter); + + return true; +} + +/*========================================== * repair [Valaris] *------------------------------------------*/ BUILDIN(repair) @@ -8658,7 +8681,7 @@ BUILDIN(checkriding) if( sd == NULL ) return true;// no player attached, report source - if( pc_isriding(sd) || pc_isridingwug(sd) || pc_isridingdragon(sd) ) + if( pc_isriding(sd) ) script_pushint(st, 1); else script_pushint(st, 0); @@ -8677,11 +8700,17 @@ BUILDIN(setriding) TBL_PC* sd; sd = script->rid2sd(st); + if( sd == NULL ) return true;// no player attached, report source if( script_hasdata(st,2) ) flag = script_getnum(st,2); + + // Color variants for Rune Knight dragon mounts. + if( (sd->class_&MAPID_THIRDMASK) == MAPID_RUNE_KNIGHT ) + flag = (flag == 1 ? OPTION_DRAGON1 : flag == 2 ? OPTION_DRAGON2 : flag == 3 ? OPTION_DRAGON3 : flag == 4 ? OPTION_DRAGON4 : flag == 5 ? OPTION_DRAGON5 : 0); + pc->setriding(sd, flag); return true; @@ -16281,21 +16310,57 @@ BUILDIN(setquest) { BUILDIN(erasequest) { struct map_session_data *sd = script->rid2sd(st); + int quest_id; if( sd == NULL ) return false; - quest->delete(sd, script_getnum(st, 2)); + if(script_hasdata(st, 3)) + { + if(script_getnum(st, 3) < script_getnum(st, 2)) + { + ShowError("buildin_erasequest: The second quest id must be greater than the id of the first.\n"); + return false; + } + + for(quest_id = script_getnum(st, 2); quest_id < script_getnum(st, 3); quest_id++) + { + quest->delete(sd, quest_id); + } + } + else + { + quest->delete(sd, script_getnum(st, 2)); + } + return true; } BUILDIN(completequest) { struct map_session_data *sd = script->rid2sd(st); + int quest_id; if( sd == NULL ) return false; - quest->update_status(sd, script_getnum(st, 2), Q_COMPLETE); + if(script_hasdata(st, 3)) + { + if(script_getnum(st, 3) < script_getnum(st, 2)) + { + ShowError("buildin_completequest: The second quest id must be greater than the id of the first.\n"); + return false; + } + + for(quest_id = script_getnum(st, 2); quest_id < script_getnum(st, 3); quest_id++) + { + quest->update_status(sd, quest_id, Q_COMPLETE); + } + } + else + { + quest->update_status(sd, script_getnum(st, 2), Q_COMPLETE); + } + return true; } @@ -16309,6 +16374,8 @@ BUILDIN(changequest) { return true; } +// Deprecated +// Please use questprogress instead. BUILDIN(checkquest) { struct map_session_data *sd = script->rid2sd(st); enum quest_check_type type = HAVEQUEST; @@ -16324,6 +16391,33 @@ BUILDIN(checkquest) { return true; } +BUILDIN(questprogress) { + struct map_session_data *sd = script->rid2sd(st); + enum quest_check_type type = HAVEQUEST; + int quest_progress = 0; + + if( sd == NULL ) + return false; + + if( script_hasdata(st, 3) ) + type = (enum quest_check_type)script_getnum(st, 3); + + quest_progress = quest->check(sd, script_getnum(st, 2), type); + + // "Fix" returned quest state value to make more sense. + // 0 = Not Started, 1 = In Progress, 2 = Completed. + if(quest_progress == -1) + quest_progress = 0; + else if(quest_progress == 0 || quest_progress == 1) + quest_progress = 1; + else + quest_progress = 2; + + script_pushint(st, quest_progress); + + return true; +} + BUILDIN(showevent) { TBL_PC *sd = script->rid2sd(st); struct npc_data *nd = map->id2nd(st->oid); @@ -17304,6 +17398,7 @@ BUILDIN(setmounting) { } return true; } + /** * Retrieves quantity of arguments provided to callfunc/callsub. * getargcount() -> amount of arguments received in a function @@ -18844,6 +18939,7 @@ void script_parse_builtin(void) { BUILDIN_DEF(getequipid,"i"), BUILDIN_DEF(getequipname,"i"), BUILDIN_DEF(getbrokenid,"i"), // [Valaris] + BUILDIN_DEF(getbrokencount,""), BUILDIN_DEF(repair,"i"), // [Valaris] BUILDIN_DEF(repairall,""), BUILDIN_DEF(getequipisequiped,"i"), @@ -19241,9 +19337,10 @@ void script_parse_builtin(void) { //Quest Log System [Inkfish] BUILDIN_DEF(questinfo, "ii??"), BUILDIN_DEF(setquest, "i"), - BUILDIN_DEF(erasequest, "i"), - BUILDIN_DEF(completequest, "i"), + BUILDIN_DEF(erasequest, "i?"), + BUILDIN_DEF(completequest, "i?"), BUILDIN_DEF(checkquest, "i?"), + BUILDIN_DEF(questprogress, "i?"), BUILDIN_DEF(changequest, "ii"), BUILDIN_DEF(showevent, "i?"), |