summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcelest <celest@54d463be-8e91-2dee-dedb-b68131a5f0ec>2005-02-23 04:24:12 +0000
committercelest <celest@54d463be-8e91-2dee-dedb-b68131a5f0ec>2005-02-23 04:24:12 +0000
commitb95c5fc80f2956d2c9534be00ab8737b921c93a5 (patch)
tree7709c0bc210702064c090980a288349745a785e2
parent728ac69d781cce707b9e699af2d66754edb2cc9d (diff)
downloadhercules-b95c5fc80f2956d2c9534be00ab8737b921c93a5.tar.gz
hercules-b95c5fc80f2956d2c9534be00ab8737b921c93a5.tar.bz2
hercules-b95c5fc80f2956d2c9534be00ab8737b921c93a5.tar.xz
hercules-b95c5fc80f2956d2c9534be00ab8737b921c93a5.zip
* Fixed Backstab not checking for and consuming arrows
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/branches/stable@1166 54d463be-8e91-2dee-dedb-b68131a5f0ec
-rw-r--r--Changelog-SVN.txt1
-rw-r--r--Dev/bugs.txt4
-rw-r--r--src/map/skill.c40
3 files changed, 29 insertions, 16 deletions
diff --git a/Changelog-SVN.txt b/Changelog-SVN.txt
index 822406d03..3b8877b06 100644
--- a/Changelog-SVN.txt
+++ b/Changelog-SVN.txt
@@ -1,6 +1,7 @@
Date Added
02/23
+ * Fixed Backstab not checking for and consuming arrows [celest]
* Fixed another bad typo causing @allskill to not add points into advanced job
skills [celest]
* Fixed a bad typo in status.c's StatusChangeTable [celest]
diff --git a/Dev/bugs.txt b/Dev/bugs.txt
index 09021565c..ffae95a6c 100644
--- a/Dev/bugs.txt
+++ b/Dev/bugs.txt
@@ -302,8 +302,8 @@ Progress: 100% [My bad, fixed ^^; ]
Problem: Rogues Skill "back stab" works without PREPARING arrows.
It consumes arrows, but works even when them aren't prepered (equipped)
-Assigned: N/A
-Progress: 0%
+Assigned: Celest
+Progress: 100%
Problem: Party EXP share bug
When one member enter, re-enter the server sometimes it happens you
diff --git a/src/map/skill.c b/src/map/skill.c
index 3d3411b16..296c95f93 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -1293,20 +1293,23 @@ int skill_attack( int attack_type, struct block_list* src, struct block_list *ds
if(attack_type&BF_MAGIC && sc_data && sc_data[SC_MAGICROD].timer != -1 && src == dsrc) { //���@�U?�Ń}�W�b�N���b�h?�Ԃ�src=dsrc�Ȃ�
dmg.damage = dmg.damage2 = 0; //�_��?�W0
if(bl->type == BL_PC) { //?�ۂ�PC�̏ꍇ
- int sp = skill_get_sp(skillid,skilllv); //�g�p���ꂽ�X�L����SP���z?
- sp = sp * sc_data[SC_MAGICROD].val2 / 100; //�z?���v�Z
- if(skillid == WZ_WATERBALL && skilllv > 1) //�E�H?�^?�{?��Lv1�ȏ�
- sp = sp/((skilllv|1)*(skilllv|1)); //����Ɍv�Z�H
- if(sp > 0x7fff) sp = 0x7fff; //SP�������̏ꍇ�͗��_�ő�l
- else if(sp < 1) sp = 1; //1�ȉ��̏ꍇ��1
- if(((struct map_session_data *)bl)->status.sp + sp > ((struct map_session_data *)bl)->status.max_sp) { //��SP+���݂�SP��MSP���傫���ꍇ
- sp = ((struct map_session_data *)bl)->status.max_sp - ((struct map_session_data *)bl)->status.sp; //SP��MSP-����SP�ɂ���
- ((struct map_session_data *)bl)->status.sp = ((struct map_session_data *)bl)->status.max_sp; //���݂�SP��MSP����
- }
- else //��SP+���݂�SP��MSP��菬�����ꍇ�͉�SP�����Z
- ((struct map_session_data *)bl)->status.sp += sp;
- clif_heal(((struct map_session_data *)bl)->fd,SP_SP,sp); //SP�񕜃G�t�F�N�g�̕\��
- ((struct map_session_data *)bl)->canact_tick = tick + skill_delayfix(bl, skill_get_delay(SA_MAGICROD,sc_data[SC_MAGICROD].val1)); //
+ struct map_session_data *sd = (struct map_session_data *)bl;
+ if (sd) {
+ int sp = skill_get_sp(skillid,skilllv); //�g�p���ꂽ�X�L����SP���z?
+ sp = sp * sc_data[SC_MAGICROD].val2 / 100; //�z?���v�Z
+ if(skillid == WZ_WATERBALL && skilllv > 1) //�E�H?�^?�{?��Lv1�ȏ�
+ sp = sp/((skilllv|1)*(skilllv|1)); //����Ɍv�Z�H
+ if(sp > 0x7fff) sp = 0x7fff; //SP�������̏ꍇ�͗��_�ő�l
+ else if(sp < 1) sp = 1; //1�ȉ��̏ꍇ��1
+ if(sd->status.sp + sp > sd->status.max_sp) { //��SP+���݂�SP��MSP���傫���ꍇ
+ sp = sd->status.max_sp - sd->status.sp; //SP��MSP-����SP�ɂ���
+ sd->status.sp = sd->status.max_sp; //���݂�SP��MSP����
+ }
+ else //��SP+���݂�SP��MSP��菬�����ꍇ�͉�SP�����Z
+ sd->status.sp += sp;
+ clif_heal(sd->fd,SP_SP,sp); //SP�񕜃G�t�F�N�g�̕\��
+ sd->canact_tick = tick + skill_delayfix(bl, skill_get_delay(SA_MAGICROD,sc_data[SC_MAGICROD].val1)); //
+ }
}
clif_skill_nodamage(bl,bl,SA_MAGICROD,sc_data[SC_MAGICROD].val1,1); //�}�W�b�N���b�h�G�t�F�N�g��\��
}
@@ -6522,6 +6525,15 @@ int skill_check_condition(struct map_session_data *sd,int type)
}
arrow_flag = 1;
break;
+ case RG_BACKSTAP:
+ if(sd->status.weapon == 11) {
+ if (sd->equip_index[10] < 0) {
+ clif_arrow_fail(sd,0);
+ return 0;
+ }
+ arrow_flag = 1;
+ }
+ break;
}
if(!(type&2)){