summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJared Adams <jaxad0127@gmail.com>2009-09-18 15:49:51 -0600
committerJared Adams <jaxad0127@gmail.com>2009-09-18 15:49:51 -0600
commit41075d30353cd42588975cfbc8a21a69911ad4cc (patch)
tree8a7ae1fa652da465079e22167d419e1c663cf0c1
parentb3939b91deda8081c5b144109829599b05e81272 (diff)
downloadtmwa-41075d30353cd42588975cfbc8a21a69911ad4cc.tar.gz
tmwa-41075d30353cd42588975cfbc8a21a69911ad4cc.tar.bz2
tmwa-41075d30353cd42588975cfbc8a21a69911ad4cc.tar.xz
tmwa-41075d30353cd42588975cfbc8a21a69911ad4cc.zip
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.
-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,