From 473ba564829a6d0153e320d1f302754442648ec7 Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Sun, 2 Oct 2016 20:37:54 +0530 Subject: Implemented SU_BASIC_SKILL Skill of Summoner Added Function for Basic Skills check. --- npc/kafras/functions_kafras.txt | 5 +++-- src/map/clif.c | 12 ++++++------ src/map/pc.c | 18 +++++++++++++++++- src/map/pc.h | 1 + 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/npc/kafras/functions_kafras.txt b/npc/kafras/functions_kafras.txt index 54db666e6..e1e547174 100644 --- a/npc/kafras/functions_kafras.txt +++ b/npc/kafras/functions_kafras.txt @@ -10,6 +10,7 @@ //= http://herc.ws - http://github.com/HerculesWS/Hercules //= //= Copyright (C) 2012-2015 Hercules Dev Team +//= Copyright (C) Dastgir //= Copyright (C) Haru //= Copyright (C) rAthena Dev Team //= Copyright (C) Euphy @@ -47,7 +48,7 @@ //= These functions handle save, storage, cart rental, teleport, and Free //= Teleport/Warp/Rent Cart options for all Kafra NPCs. //================= Current Version ======================================= -//= 6.8 +//= 6.9 //========================================================================= //== Main Function ========================================= @@ -210,7 +211,7 @@ function script F_KafStor { close; } // Unable to access Normal Storage (Insufficient Basic Skills) - if (basicskillcheck() && getskilllv(NV_BASIC) < 6) { + if (basicskillcheck() && getskilllv(NV_BASIC) < 6 && getskilllv(SU_BASIC_SKILL) == 0) { mes getarg(3); // Niflheim Specific Message if (getarg(2) == 1) { diff --git a/src/map/clif.c b/src/map/clif.c index b92c3185f..ecd95135b 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -10055,7 +10055,7 @@ void clif_parse_Emotion(int fd, struct map_session_data *sd) { int emoticon = RFIFOB(fd,packet_db[RFIFOW(fd,0)].pos[0]); - if (battle_config.basic_skill_check == 0 || pc->checkskill(sd, NV_BASIC) >= 2) { + if (battle_config.basic_skill_check == 0 || pc->check_basicskill(sd, 2)) { if (emoticon == E_MUTE) {// prevent use of the mute emote [Valaris] clif->skill_fail(sd, 1, USESKILL_FAIL_LEVEL, 1); return; @@ -10155,7 +10155,7 @@ void clif_parse_ActionRequest_sub(struct map_session_data *sd, int action_type, } break; case 0x02: // sitdown - if (battle_config.basic_skill_check && pc->checkskill(sd, NV_BASIC) < 3) { + if (battle_config.basic_skill_check && !pc->check_basicskill(sd, 3)) { clif->skill_fail(sd, 1, USESKILL_FAIL_LEVEL, 2); break; } @@ -10760,7 +10760,7 @@ void clif_parse_CreateChatRoom(int fd, struct map_session_data* sd) if (pc_ismuted(&sd->sc, MANNER_NOROOM)) return; - if(battle_config.basic_skill_check && pc->checkskill(sd,NV_BASIC) < 4) { + if(battle_config.basic_skill_check && !pc->check_basicskill(sd, 4)) { clif->skill_fail(sd,1,USESKILL_FAIL_LEVEL,3); return; } @@ -10877,7 +10877,7 @@ void clif_parse_TradeRequest(int fd,struct map_session_data *sd) { return; } - if( battle_config.basic_skill_check && pc->checkskill(sd,NV_BASIC) < 1) { + if( battle_config.basic_skill_check && !pc->check_basicskill(sd, 1)) { clif->skill_fail(sd,1,USESKILL_FAIL_LEVEL,0); return; } @@ -11923,7 +11923,7 @@ void clif_parse_CreateParty(int fd, struct map_session_data *sd) clif->message(fd, msg_fd(fd,227)); // Party modification is disabled in this map. return; } - if( battle_config.basic_skill_check && pc->checkskill(sd,NV_BASIC) < 7 ) { + if (battle_config.basic_skill_check && !pc->check_basicskill(sd, 7)) { clif->skill_fail(sd,1,USESKILL_FAIL_LEVEL,4); return; } @@ -11945,7 +11945,7 @@ void clif_parse_CreateParty2(int fd, struct map_session_data *sd) clif->message(fd, msg_fd(fd,227)); // Party modification is disabled in this map. return; } - if( battle_config.basic_skill_check && pc->checkskill(sd,NV_BASIC) < 7 ) { + if (battle_config.basic_skill_check && !pc->check_basicskill(sd, 7)) { clif->skill_fail(sd,1,USESKILL_FAIL_LEVEL,4); return; } diff --git a/src/map/pc.c b/src/map/pc.c index b6f2d375d..a0d9d5812 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -7428,7 +7428,9 @@ int pc_resetskill(struct map_session_data* sd, int flag) } // do not reset basic skill - if( skill_id == NV_BASIC && (sd->class_&(MAPID_BASEMASK|JOBL_2)) != MAPID_NOVICE ) + if (skill_id == NV_BASIC && (sd->class_&(MAPID_BASEMASK|JOBL_2)) != MAPID_NOVICE) + continue; + if (skill_id == SU_BASIC_SKILL && (sd->class_&MAPID_BASEMASK) != MAPID_SUMMONER) continue; if( sd->status.skill[i].flag == SKILL_FLAG_PERM_GRANTED ) @@ -11668,6 +11670,18 @@ int pc_have_magnifier(struct map_session_data *sd) return n; } +/** + * Checks if player have basic skills learned. + * @param sd Player Data + * @param level Required Level of Novice Skill + * @return bool true, if requirement is satisfied + */ +bool pc_check_basicskill(struct map_session_data *sd, int level) { + if (pc->checkskill(sd, NV_BASIC) >= level || pc->checkskill(sd, SU_BASIC_SKILL)) + return true; + return false; +} + /** * Verifies a chat message, searching for atcommands, checking if the sender * character can chat, and updating the idle timer. @@ -12124,4 +12138,6 @@ void pc_defaults(void) { pc->update_idle_time = pc_update_idle_time; pc->have_magnifier = pc_have_magnifier; + + pc->check_basicskill = pc_check_basicskill; } diff --git a/src/map/pc.h b/src/map/pc.h index fd446813f..2d6ca48a0 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -1094,6 +1094,7 @@ END_ZEROED_BLOCK; /* End */ bool (*process_chat_message) (struct map_session_data *sd, const char *message); void (*check_supernovice_call) (struct map_session_data *sd, const char *message); + bool (*check_basicskill) (struct map_session_data *sd, int level); }; #ifdef HERCULES_CORE -- cgit v1.2.3-70-g09d2