summaryrefslogtreecommitdiff
path: root/src/map
diff options
context:
space:
mode:
Diffstat (limited to 'src/map')
-rw-r--r--src/map/clif.c38
-rw-r--r--src/map/party.c10
-rw-r--r--src/map/pc.c14
-rw-r--r--src/map/skill.c4
-rw-r--r--src/map/skill.h9
5 files changed, 39 insertions, 36 deletions
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;i<MAX_PARTY;i++){ // AJEgmF
if(p->member[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<MAX_SKILL;i++){
if( (skill = pc_checkskill(sd,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<MAX_SKILL;i++)
if (i < TMW_MAGIC || 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<MAX_SKILL;i++){
if( (skill = pc_checkskill(sd,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 status_change̔ԍe[u
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,