summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcelest <celest@54d463be-8e91-2dee-dedb-b68131a5f0ec>2004-11-21 16:36:30 +0000
committercelest <celest@54d463be-8e91-2dee-dedb-b68131a5f0ec>2004-11-21 16:36:30 +0000
commit2163ef94a833449f20eabed84563604b3685baab (patch)
tree868588b4483aed1cba03f081e3b87b6de5162c0e
parent3386ac59fe2bf4ef43bfa558be52f0723528ce57 (diff)
downloadhercules-2163ef94a833449f20eabed84563604b3685baab.tar.gz
hercules-2163ef94a833449f20eabed84563604b3685baab.tar.bz2
hercules-2163ef94a833449f20eabed84563604b3685baab.tar.xz
hercules-2163ef94a833449f20eabed84563604b3685baab.zip
Added temporary code for guild skills to stop crashing
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/athena@299 54d463be-8e91-2dee-dedb-b68131a5f0ec
-rw-r--r--Changelog.txt1
-rw-r--r--src/map/skill.c78
-rw-r--r--src/map/skill.h2
3 files changed, 47 insertions, 34 deletions
diff --git a/Changelog.txt b/Changelog.txt
index a08d2eaf7..812b68fc4 100644
--- a/Changelog.txt
+++ b/Changelog.txt
@@ -6,6 +6,7 @@ Date Added
- Updated Basilica, Sharp Shooting, Berserk, Meditatio (Thanks to DracoRPG!)
- Fixed a typo with Blade Stop that was causing crashes, sorry. ^^;
- Reverted changes to Cloaking, ours is already more updated! ^_^
+ - Added temporary code for guild skills to stop crashing
* @alive, @raisemap, @raise now display the resurrection skill animation [MC Cameri]
* @charpetrename(AtCommand) is now #petrename(CharCommand) [MC Cameri]
* @charjob/(AtCommand) is now #jobchange(CharCommand) [MC Cameri]
diff --git a/src/map/skill.c b/src/map/skill.c
index 01b026423..d8675c080 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -23,6 +23,7 @@
#include "intif.h"
#include "log.h"
#include "chrif.h"
+#include "guild.h"
#ifdef MEMWATCH
#include "memwatch.h"
@@ -733,14 +734,14 @@ struct skill_arrow_db skill_arrow_db[MAX_SKILL_ARROW_DB];
/* �A�u���J�_�u��?���X�L���f?�^�x?�X */
struct skill_abra_db skill_abra_db[MAX_SKILL_ABRA_DB];
-int skill_get_hit( int id ){ return skill_db[id].hit; }
-int skill_get_inf( int id ){ return skill_db[id].inf; }
-int skill_get_pl( int id ){ return skill_db[id].pl; }
-int skill_get_nk( int id ){ return skill_db[id].nk; }
-int skill_get_max( int id ){ return skill_db[id].max; }
-int skill_get_range( int id , int lv ){ return (lv <= 0) ? 0:skill_db[id].range[lv-1]; }
+int skill_get_hit( int id ){ return (id < MAX_SKILL_DB) ? skill_db[id].hit : 0; }
+int skill_get_inf( int id ){ return (id < MAX_SKILL_DB) ? skill_db[id].inf : guild_skill_get_inf(id); }
+int skill_get_pl( int id ){ return (id < MAX_SKILL_DB) ? skill_db[id].pl : 0; }
+int skill_get_nk( int id ){ return (id < MAX_SKILL_DB) ? skill_db[id].nk : 2; }
+int skill_get_max( int id ){ return (id < MAX_SKILL_DB) ? skill_db[id].max : guild_skill_get_max(id); }
+int skill_get_range( int id , int lv ){ return (lv <= 0) ? 0: ((id < MAX_SKILL_DB) ? skill_db[id].range[lv-1] : guild_skill_get_max(id)); }
int skill_get_hp( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].hp[lv-1]; }
-int skill_get_sp( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].sp[lv-1]; }
+int skill_get_sp( int id ,int lv ){ return (lv <= 0) ? 0: ((id < MAX_SKILL_DB) ? skill_db[id].sp[lv-1] : guild_skill_get_sp(id, lv)); }
int skill_get_zeny( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].zeny[lv-1]; }
int skill_get_num( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].num[lv-1]; }
int skill_get_cast( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].cast[lv-1]; }
@@ -749,7 +750,8 @@ int skill_get_time( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].upkeep_t
int skill_get_time2( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].upkeep_time2[lv-1]; }
int skill_get_castdef( int id ){ return skill_db[id].cast_def_rate; }
int skill_get_weapontype( int id ){ return skill_db[id].weapon; }
-int skill_get_inf2( int id ){ return skill_db[id].inf2; }
+int skill_get_inf2( int id ){ return (id < MAX_SKILL_DB) ? skill_db[id].inf2 : 0; }
+int skill_get_castcancel( int id ){ return (id < MAX_SKILL_DB) ? skill_db[id].maxcount : 0; }
int skill_get_maxcount( int id ){ return skill_db[id].maxcount; }
int skill_get_blewcount( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].blewcount[lv-1]; }
int skill_get_mhp( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].mhp[lv-1]; }
@@ -977,7 +979,7 @@ int skill_additional_effect( struct block_list* src, struct block_list *bl,int s
//else
// clif_skill_fail(sd,skillid,0,0); // it's annoying! =p [Celest]
}
- // �G���`�����g�f�b�g���[�|�C�Y��(�ғŌ���)
+ // �G���`�����g�f�b�g��?�|�C�Y��(�ғ�?��)
if (sd && sd->sc_data[SC_EDP].timer != -1 && rand() % 10000 < sd->sc_data[SC_EDP].val2 * sc_def_vit) {
int mhp = battle_get_max_hp(bl);
int hp = battle_get_hp(bl);
@@ -1208,7 +1210,7 @@ int skill_additional_effect( struct block_list* src, struct block_list *bl,int s
//���C�����g����5���Ԏ��R�񕜂��Ȃ��悤�ɂȂ�
skill_status_change_start(src,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time2(skillid,skilllv),0 );
break;
- case HW_NAPALMVULCAN: /* �i�p�[���o���J�� */
+ case HW_NAPALMVULCAN: /* �i�p?���o���J�� */
// skilllv*5%�̊m���Ŏ�
if (rand()%10000 < 5*skilllv*sc_def_luk)
skill_status_change_start(bl,SC_CURSE,7,0,0,0,skill_get_time2(NPC_CURSEATTACK,7),0);
@@ -4311,6 +4313,11 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
}
}
break;
+ case GD_BATTLEORDER:
+ case GD_REGENERATION:
+ case GD_RESTORE:
+ case GD_EMERGENCYCALL:
+ break;
default:
printf("Unknown skill used:%d\n",skillid);
map_freeblock_unlock();
@@ -6217,8 +6224,8 @@ static int skill_check_condition_use_sub(struct block_list *bl,va_list ap)
case BD_RAGNAROK: /* �_?��?�� */
case CG_MOONLIT: /* ������̐�ɗ�����Ԃт� */
if(sd != ssd && //�{�l�ȊO��
- ((ss_class.job==19 && s_class.job==20) || //�������o�[�h�Ȃ�_���T�[��
- (ss_class.job==20 && s_class.job==19)) && //�������_���T�[�Ȃ�o�[�h��
+ ((ss_class.job==19 && s_class.job==20) || //�������o?�h�Ȃ�_���T?��
+ (ss_class.job==20 && s_class.job==19)) && //�������_���T?�Ȃ�o?�h��
pc_checkskill(sd,skillid) > 0 && //�X�L������������
(*c)==0 && //�ŏ��̈�l��
sd->status.party_id == ssd->status.party_id && //�p?�e�B?��������
@@ -6916,7 +6923,8 @@ int skill_use_id( struct map_session_data *sd, int target_id,
casttime=skill_castfix(&sd->bl, skill_get_cast( skill_num,skill_lv) );
if(skill_num != SA_MAGICROD)
delay=skill_delayfix(&sd->bl, skill_get_delay( skill_num,skill_lv) );
- sd->state.skillcastcancel = skill_db[skill_num].castcancel;
+ //sd->state.skillcastcancel = skill_db[skill_num].castcancel;
+ sd->state.skillcastcancel = skill_get_castcancel(skill_num);
switch(skill_num){ /* ���������?�����K�v */
// case AL_HEAL: /* �q?�� */
@@ -6963,17 +6971,16 @@ int skill_use_id( struct map_session_data *sd, int target_id,
case WE_MALE:
case WE_FEMALE:
{
- struct map_session_data *p_sd = NULL;
- if((p_sd = pc_get_partner(sd)) == NULL)
- return 0;
- target_id = p_sd->bl.id;
- //range������1��?��
- range = skill_get_range(skill_num,skill_lv);
- if(range < 0)
- range = battle_get_range(&sd->bl) - (range + 1);
- if(!battle_check_range(&sd->bl,&p_sd->bl,range) ){
- return 0;
- }
+ struct map_session_data *p_sd = NULL;
+ if((p_sd = pc_get_partner(sd)) == NULL)
+ return 0;
+ target_id = p_sd->bl.id;
+ //range������1��?��
+ range = skill_get_range(skill_num,skill_lv);
+ if(range < 0)
+ range = battle_get_range(&sd->bl) - (range + 1);
+ if(!battle_check_range(&sd->bl,&p_sd->bl,range))
+ return 0;
}
break;
case AS_SPLASHER: /* �x�i���X�v���b�V��? */
@@ -6988,7 +6995,12 @@ int skill_use_id( struct map_session_data *sd, int target_id,
case PF_MEMORIZE: /* �������C�Y */
casttime = 12000;
break;
-
+ case GD_BATTLEORDER:
+ case GD_REGENERATION:
+ case GD_RESTORE:
+ case GD_EMERGENCYCALL:
+ printf ("guild skill used : id = %d\n", skill_num);
+ break;
}
//�������C�Y?�ԂȂ�L���X�g�^�C����1/3
@@ -7559,7 +7571,7 @@ int skill_gangsterparadise(struct map_session_data *sd ,int type)
map_foreachinarea(skill_gangster_count,sd->bl.m,
sd->bl.x-range,sd->bl.y-range,
sd->bl.x+range,sd->bl.y+range,BL_PC,&c);
- if(c > 1) {/*�M�����O�X�^�[���������玩���ɂ��M�����O�X�^�[�����t�^*/
+ if(c > 1) {/*�M�����O�X�^?���������玩���ɂ��M�����O�X�^??���t?*/
map_foreachinarea(skill_gangster_in,sd->bl.m,
sd->bl.x-range,sd->bl.y-range,
sd->bl.x+range,sd->bl.y+range,BL_PC);
@@ -8046,7 +8058,7 @@ int skill_status_change_end(struct block_list* bl, int type, int tid)
case SC_POISON:
if (sc_data[SC_DPOISON].timer != -1) //
break; // DPOISON�p�̃I�v�V����
- *opt2 &= ~1; // ����p�ɗp�ӂ��ꂽ�ꍇ�ɂ�
+ *opt2 &= ~1; // ��?�p�ɗp�ӂ��ꂽ�ꍇ�ɂ�
opt_flag = 1; // �����͍폜����
break; //
case SC_CURSE:
@@ -8058,7 +8070,7 @@ int skill_status_change_end(struct block_list* bl, int type, int tid)
case SC_DPOISON:
if (sc_data[SC_POISON].timer != -1) // DPOISON�p�̃I�v�V������
break; // �p�ӂ��ꂽ��폜
- *opt2 &= ~1; // �ŏ�ԉ���
+ *opt2 &= ~1; // ��?�ԉ���
opt_flag = 1;
break;
case SC_SIGNUMCRUCIS:
@@ -8757,7 +8769,7 @@ int skill_status_change_start(struct block_list *bl, int type, int val1, int val
skill_encchant_eremental_end(bl,SC_ENCPOISON);
break;
case SC_EDP: // [Celest]
- val2 = val1 + 2; /* �ғŕt�^�m��(%) */
+ val2 = val1 + 2; /* �ғŕt?�m��(%) */
calc_flag = 1;
break;
case SC_POISONREACT: /* �|�C�Y�����A�N�g */
@@ -10487,11 +10499,11 @@ int skill_produce_mix( struct map_session_data *sd,
switch (skill_produce_db[idx].req_skill) {
case AM_PHARMACY:
- clif_produceeffect(sd,2,nameid);/* ����G�t�F�N�g */
+ clif_produceeffect(sd,2,nameid);/* ��?�G�t�F�N�g */
clif_misceffect(&sd->bl,5); /* ���l�ɂ�������ʒm */
break;
case ASC_CDP:
- clif_produceeffect(sd,2,nameid);/* �b�����G�t�F�N�g */
+ clif_produceeffect(sd,2,nameid);/* �b���?�G�t�F�N�g */
clif_misceffect(&sd->bl,5);
break;
default: /* ���퐻���A�R�C������ */
@@ -10513,12 +10525,12 @@ int skill_produce_mix( struct map_session_data *sd,
switch (skill_produce_db[idx].req_skill) {
case AM_PHARMACY:
- clif_produceeffect(sd,3,nameid);/* ���򎸔s�G�t�F�N�g */
+ clif_produceeffect(sd,3,nameid);/* ��?���s�G�t�F�N�g */
clif_misceffect(&sd->bl,6); /* ���l�ɂ����s��ʒm */
break;
case ASC_CDP:
{
- clif_produceeffect(sd,3,nameid); /* �b�����G�t�F�N�g */
+ clif_produceeffect(sd,3,nameid); /* �b���?�G�t�F�N�g */
clif_misceffect(&sd->bl,6); /* ���l�ɂ����s��ʒm */
pc_heal(sd, -(sd->status.max_hp>>2), 0);
}
diff --git a/src/map/skill.h b/src/map/skill.h
index 2a49e8e4b..fcca0cf1c 100644
--- a/src/map/skill.h
+++ b/src/map/skill.h
@@ -4,7 +4,7 @@
#include "map.h"
-#define MAX_SKILL_DB 450
+#define MAX_SKILL_DB 472
#define MAX_SKILL_PRODUCE_DB 150
#define MAX_PRODUCE_RESOURCE 7
#define MAX_SKILL_ARROW_DB 150