From 41075d30353cd42588975cfbc8a21a69911ad4cc Mon Sep 17 00:00:00 2001 From: Jared Adams Date: Fri, 18 Sep 2009 15:49:51 -0600 Subject: Replace basic skill with three new skills We want to handle skills differently that eAthena was made too. All new skills are leveled by NPCs instead of using the job sysetm. Also fixes some bugs. --- src/map/clif.c | 38 ++++++++++++++++---------------------- src/map/party.c | 10 ++++++++-- src/map/pc.c | 14 ++++++++------ src/map/skill.c | 4 +++- src/map/skill.h | 9 ++++----- 5 files changed, 39 insertions(+), 36 deletions(-) (limited to 'src/map') diff --git a/src/map/clif.c b/src/map/clif.c index 401f6cc..6457e9b 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -3741,7 +3741,7 @@ int clif_skillinfo(struct map_session_data *sd,int skillid,int type,int range) } else WFIFOW(fd,12)= range; memset(WFIFOP(fd,14),0,24); - if(!(skill_get_inf2(id)&0x01) || battle_config.quest_skill_learn == 1 || (battle_config.gm_allskill > 0 && pc_isGM(sd) >= battle_config.gm_allskill) ) + if(skill_get_inf2(id)&0x01) WFIFOB(fd,38)= (sd->status.skill[skillid].lv < skill_get_max(id) && sd->status.skill[skillid].flag ==0 )? 1:0; else WFIFOB(fd,38) = 0; @@ -3765,8 +3765,7 @@ int clif_skillinfoblock(struct map_session_data *sd) WFIFOW(fd,0)=0x10f; for ( i = c = 0; i < MAX_SKILL; i++){ if( (id=sd->status.skill[i].id)!=0 - && (sd->tmw_version >= 1 // [Fate] Version 1 and later don't crash because of bad skill IDs anymore - || !QUEST_SKILL(i))){ // [Fate] Hack: Prevent killing the client + && (sd->tmw_version >= 1)){ // [Fate] Version 1 and later don't crash because of bad skill IDs anymore WFIFOW(fd,len ) = id; WFIFOW(fd,len+2) = skill_get_inf(id); WFIFOW(fd,len+4) = 0; @@ -3777,7 +3776,7 @@ int clif_skillinfoblock(struct map_session_data *sd) range = battle_get_range(&sd->bl) - (range + 1); WFIFOW(fd,len+10)= range; memset(WFIFOP(fd,len+12),0,24); - if(!(skill_get_inf2(id)&0x01) || battle_config.quest_skill_learn == 1 || (battle_config.gm_allskill > 0 && pc_isGM(sd) >= battle_config.gm_allskill) ) + if(skill_get_inf2(id)&0x01) WFIFOB(fd,len+36)= (sd->status.skill[i].lv < skill_get_max(id) && sd->status.skill[i].flag ==0 )? 1:0; else WFIFOB(fd,len+36) = 0; @@ -6648,7 +6647,7 @@ void clif_parse_Emotion(int fd, struct map_session_data *sd) { nullpo_retv(sd); - if (battle_config.basic_skill_check == 0 || pc_checkskill(sd, NV_BASIC) >= 2) { + if (battle_config.basic_skill_check == 0 || pc_checkskill(sd, NV_EMOTE) >= 1) { WBUFW(buf,0) = 0xc0; WBUFL(buf,2) = sd->bl.id; WBUFB(buf,6) = RFIFOB(fd,2); @@ -6715,15 +6714,12 @@ void clif_parse_ActionRequest(int fd, struct map_session_data *sd) { pc_attack(sd, target_id, action_type != 0); break; case 0x02: // sitdown - if (battle_config.basic_skill_check == 0 || pc_checkskill(sd, NV_BASIC) >= 3) { - if (tmw_CheckSitSpam(sd)) - break; - pc_stop_walking(sd, 1); - skill_gangsterparadise(sd, 1); // �M�����O�X�^�[�p���_�C�X�ݒ� - pc_setsit(sd); - clif_sitting(fd, sd); - } else - clif_skill_fail(sd, 1, 0, 2); + if (tmw_CheckSitSpam(sd)) + break; + pc_stop_walking(sd, 1); + skill_gangsterparadise(sd, 1); // �M�����O�X�^�[�p���_�C�X�ݒ� + pc_setsit(sd); + clif_sitting(fd, sd); break; case 0x03: // standup skill_gangsterparadise(sd, 0); // �M�����O�X�^�[�p���_�C�X���� @@ -7072,10 +7068,7 @@ void clif_parse_NpcSellListSend(int fd,struct map_session_data *sd) */ void clif_parse_CreateChatRoom(int fd,struct map_session_data *sd) { - if(battle_config.basic_skill_check == 0 || pc_checkskill(sd,NV_BASIC) >= 4){ - chat_createchat(sd,RFIFOW(fd,4),RFIFOB(fd,6),RFIFOP(fd,7),RFIFOP(fd,15),RFIFOW(fd,2)-15); - } else - clif_skill_fail(sd,1,0,3); + chat_createchat(sd,RFIFOW(fd,4),RFIFOB(fd,6),RFIFOP(fd,7),RFIFOP(fd,15),RFIFOW(fd,2)-15); } /*========================================== @@ -7131,7 +7124,7 @@ void clif_parse_TradeRequest(int fd,struct map_session_data *sd) { nullpo_retv(sd); - if(battle_config.basic_skill_check == 0 || pc_checkskill(sd,NV_BASIC) >= 1){ + if(battle_config.basic_skill_check == 0 || pc_checkskill(sd,NV_TRADE) >= 1){ if (tmw_CheckTradeSpam(sd)) return; trade_traderequest(sd,RFIFOL(sd->fd,2)); @@ -7664,7 +7657,7 @@ void clif_parse_CloseKafra(int fd, struct map_session_data *sd) { *------------------------------------------ */ void clif_parse_CreateParty(int fd, struct map_session_data *sd) { - if (battle_config.basic_skill_check == 0 || pc_checkskill(sd,NV_BASIC) >= 7) { + if (battle_config.basic_skill_check == 0 || pc_checkskill(sd,NV_PARTY) >= 2) { party_create(sd,RFIFOP(fd,2)); } else clif_skill_fail(sd,1,0,4); @@ -7675,7 +7668,7 @@ void clif_parse_CreateParty(int fd, struct map_session_data *sd) { *------------------------------------------ */ void clif_parse_CreateParty2(int fd, struct map_session_data *sd) { - if (battle_config.basic_skill_check == 0 || pc_checkskill(sd,NV_BASIC) >= 7){ + if (battle_config.basic_skill_check == 0 || pc_checkskill(sd,NV_PARTY) >= 2){ party_create(sd, RFIFOP(fd,2)); } else clif_skill_fail(sd, 1, 0, 4); @@ -7686,6 +7679,7 @@ void clif_parse_CreateParty2(int fd, struct map_session_data *sd) { *------------------------------------------ */ void clif_parse_PartyInvite(int fd, struct map_session_data *sd) { + printf("Party Invite!\n"); party_invite(sd, RFIFOL(fd,2)); } @@ -7694,7 +7688,7 @@ void clif_parse_PartyInvite(int fd, struct map_session_data *sd) { *------------------------------------------ */ void clif_parse_ReplyPartyInvite(int fd,struct map_session_data *sd) { - if(battle_config.basic_skill_check == 0 || pc_checkskill(sd,NV_BASIC) >= 5){ + if (battle_config.basic_skill_check == 0 || pc_checkskill(sd,NV_PARTY) >= 1){ party_reply_invite(sd,RFIFOL(fd,2),RFIFOL(fd,6)); } else { party_reply_invite(sd,RFIFOL(fd,2),-1); diff --git a/src/map/party.c b/src/map/party.c index feacc25..62b30d8 100644 --- a/src/map/party.c +++ b/src/map/party.c @@ -14,6 +14,7 @@ #include "battle.h" #include "intif.h" #include "clif.h" +#include "skill.h" #ifdef MEMWATCH #include "memwatch.h" @@ -203,23 +204,28 @@ int party_invite(struct map_session_data *sd,int account_id) if(tsd==NULL || p==NULL) return 0; + + printf("\tA\n"); + if(!battle_config.invite_request_check) { - if (tsd->guild_invite>0 || tsd->trade_partner) { // 肪ǂ + if (tsd->guild_invite>0 || tsd->trade_partner || tsd->npc_id || tsd->npc_shopid || pc_checkskill(tsd,NV_PARTY) < 1) { clif_party_inviteack(sd,tsd->status.name,0); return 0; } } + printf("\tB\n"); if( tsd->status.party_id>0 || tsd->party_invite>0 ){ // ̏mF clif_party_inviteack(sd,tsd->status.name,0); return 0; } + printf("\tC\n"); for(i=0;imember[i].account_id==account_id){ clif_party_inviteack(sd,tsd->status.name,0); return 0; } } - + printf("\tD\n"); tsd->party_invite=sd->status.party_id; tsd->party_invite_account=sd->status.account_id; diff --git a/src/map/pc.c b/src/map/pc.c index acec322..7d083d1 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -881,7 +881,7 @@ static int pc_calc_skillpoint(struct map_session_data* sd) for(i=1;i 0) { - if(!(skill_get_inf2(i)&0x01) || battle_config.quest_skill_learn) { + if(skill_get_inf2(i)&0x01) { if(!sd->status.skill[i].flag) skill_point += skill; else if(sd->status.skill[i].flag > 2 && sd->status.skill[i].flag != 13) { @@ -997,6 +997,7 @@ int pc_calc_skilltree(struct map_session_data *sd) } } + /*Comment this out for now, as we manage skills differently for(i=0;i TMW_MAGIC_END){ // [Fate] This hack gets TMW magic working and persisted without bothering about the skill tree. if (sd->status.skill[i].flag != 13) sd->status.skill[i].id=0; @@ -1005,6 +1006,7 @@ int pc_calc_skilltree(struct map_session_data *sd) sd->status.skill[i].flag=0; // flag��0�ɂ��Ă��� } } + */ if (battle_config.gm_allskill > 0 && pc_isGM(sd) >= battle_config.gm_allskill){ // �S�ẴX�L�� @@ -4761,8 +4763,8 @@ int pc_skillup(struct map_session_data *sd,int skill_num) if( sd->status.skill_point>0 && sd->status.skill[skill_num].id!=0 && - sd->status.skill[skill_num].lv < skill_get_max(skill_num) - && (skill_num < TMW_MAGIC || skill_num > TMW_MAGIC_END)) // [Fate] Hack: Prevent exploit for raising magic levels + sd->status.skill[skill_num].lv < skill_get_max(skill_num) && + skill_get_inf2(skill_num) & 0x01) { sd->status.skill[skill_num].lv++; sd->status.skill_point--; @@ -4811,7 +4813,7 @@ int pc_allskillup(struct map_session_data *sd) } else { for(i=0;(id=skill_tree[s][c][i].id)>0;i++){ - if(sd->status.skill[id].id==0 && (!(skill_get_inf2(id)&0x01) || battle_config.quest_skill_learn) ) + if(sd->status.skill[id].id==0 && skill_get_inf2(id)&0x01 ) sd->status.skill[id].lv=skill_get_max(id); } } @@ -4969,8 +4971,8 @@ int pc_resetskill(struct map_session_data* sd) for(i=1;i 0) { - if(!(skill_get_inf2(i)&0x01) || battle_config.quest_skill_learn) { - if(!sd->status.skill[i].flag && !QUEST_SKILL(i)) + if(skill_get_inf2(i)&0x01) { + if(!sd->status.skill[i].flag) sd->status.skill_point += skill; else if(sd->status.skill[i].flag > 2 && sd->status.skill[i].flag != 13) { sd->status.skill_point += (sd->status.skill[i].flag - 2); diff --git a/src/map/skill.c b/src/map/skill.c index 778acea..22b8dcf 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -524,7 +524,9 @@ struct skill_name_db skill_names[] = { { NPC_TRANSFORMATION, "TRANSFORMATION", "NPC_TRANSFORMATION" } , { NPC_WATERATTACK, "WATERATTACK", "NPC_WATERATTACK" } , { NPC_WINDATTACK, "WINDATTACK", "NPC_WINDATTACK" } , - { NV_BASIC, "BASIC", "Basic_Skill" } , + { NV_EMOTE, "EMOTE", "Emote_Skill" } , + { NV_TRADE, "TRADE", "Trade_Skill" } , + { NV_PARTY, "PARTY", "Party_Skill" } , { NV_FIRSTAID, "FIRSTAID", "First Aid" } , { NV_TRICKDEAD, "TRICKDEAD", "Play_Dead" } , { PA_GOSPEL, "GOSPEL", "Gospel" } , diff --git a/src/map/skill.h b/src/map/skill.h index fdbe799..d0486f5 100644 --- a/src/map/skill.h +++ b/src/map/skill.h @@ -10,9 +10,6 @@ #define MAX_SKILL_ARROW_DB 150 #define MAX_SKILL_ABRA_DB 350 -#define QUEST_SKILL(i) ((i) >= TMW_MAGIC && (i) < TMW_MAGIC_END) -// [Fate] A `quest skill' is a skill handled via quests, i.e., one that can't be modified via skill points. - // XLf[^x[X struct skill_db { int range[MAX_SKILL_LEVEL],hit,inf,pl,nk,max; @@ -323,7 +320,9 @@ enum { // struct map_session_data extern int SkillStatusChangeTable[]; enum { - NV_BASIC = 1, + NV_EMOTE = 1, + NV_TRADE, + NV_PARTY, SM_SWORD, SM_TWOHAND, @@ -677,7 +676,7 @@ enum { DC_FORTUNEKISS, DC_SERVICEFORYOU, - NPC_SELFDESTRUCTION2 = 331, + NPC_SELFDESTRUCTION2 = 333, WE_MALE = 334, WE_FEMALE, -- cgit v1.2.3-60-g2f50