* Changed behavior of some guild-related code (according to X.4 tests):
- removed code that prevented Homunculus Resurrection during WoE - logging in doesn't activate the 5 minute guild skill block anymore - non-Urgent guild skills can now only be cast on WoE grounds during WoE - all guild skills now have no cast delay (previously was 1 second) - casting guild skills will now block FreeCast sages from walking - Battle Orders and Regeneration are now instacast - Restoration now has a 10 second cast time, reducible only by dex - Urgent Call's cast cannot be reduced anymore (not even by items) git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@10807 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
7a1b969d60
commit
338c473b7d
@ -3,6 +3,16 @@ Date Added
|
|||||||
AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
|
AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
|
||||||
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
||||||
|
|
||||||
|
2007/06/22
|
||||||
|
* Changed behavior of some guild-related code (according to X.4 tests):
|
||||||
|
- removed code that prevented Homunculus Resurrection during WoE
|
||||||
|
- logging in doesn't activate the 5 minute guild skill block anymore
|
||||||
|
- non-Urgent guild skills can now only be cast on WoE grounds during WoE
|
||||||
|
- all guild skills now have no cast delay (previously was 1 second)
|
||||||
|
- casting guild skills will now block FreeCast sages from walking
|
||||||
|
- Battle Orders and Regeneration are now instacast
|
||||||
|
- Restoration now has a 10 second cast time, reducible only by dex
|
||||||
|
- Urgent Call's cast cannot be reduced anymore (not even by items)
|
||||||
2007/06/15
|
2007/06/15
|
||||||
* Fixed script command sc_end not supporting the extra argument as stated
|
* Fixed script command sc_end not supporting the extra argument as stated
|
||||||
in script_commands.txt.
|
in script_commands.txt.
|
||||||
|
@ -1001,11 +1001,11 @@
|
|||||||
//-- GD_HAWKEYES
|
//-- GD_HAWKEYES
|
||||||
10009,0,0,0,300000,0
|
10009,0,0,0,300000,0
|
||||||
//-- GD_BATTLEORDER
|
//-- GD_BATTLEORDER
|
||||||
10010,5000,1000,0,60000,300000
|
10010,0,0,0,60000,300000
|
||||||
//-- GD_REGENERATION
|
//-- GD_REGENERATION
|
||||||
10011,5000,1000,0,60000,300000
|
10011,0,0,0,60000,300000
|
||||||
//-- GD_RESTORE
|
//-- GD_RESTORE
|
||||||
10012,5000,1000,0,0,300000
|
10012,10000,0,0,0,300000
|
||||||
//-- GD_EMERGENCYCALL
|
//-- GD_EMERGENCYCALL
|
||||||
10013,5000,1000,0,0,300000
|
10013,5000,0,0,0,300000
|
||||||
//==========================================
|
//==========================================
|
||||||
|
@ -35,5 +35,5 @@
|
|||||||
1014,1 //PR_REDEMPTIO
|
1014,1 //PR_REDEMPTIO
|
||||||
10010,3 //GD_BATTLEORDER
|
10010,3 //GD_BATTLEORDER
|
||||||
10011,3 //GD_REGENERATION
|
10011,3 //GD_REGENERATION
|
||||||
10012,3 //GD_RESTORE
|
10012,6 //GD_RESTORE
|
||||||
10013,3 //GD_EMERGENCYCALL
|
10013,7 //GD_EMERGENCYCALL
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Copyright (c) Athena Dev Teams - Licensed under GNU GPL
|
// Copyright (c) Athena Dev Teams - Licensed under GNU GPL
|
||||||
// For more information, see LICENCE in the main folder
|
// For more information, see LI3CENCE in the main folder
|
||||||
|
|
||||||
#define DUMP_UNKNOWN_PACKET 0
|
#define DUMP_UNKNOWN_PACKET 0
|
||||||
#define DUMP_ALL_PACKETS 0
|
#define DUMP_ALL_PACKETS 0
|
||||||
|
@ -877,10 +877,11 @@ int pc_reg_received(struct map_session_data *sd)
|
|||||||
if (sd->status.guild_id > 0 && (g=guild_search(sd->status.guild_id)) == NULL)
|
if (sd->status.guild_id > 0 && (g=guild_search(sd->status.guild_id)) == NULL)
|
||||||
guild_request_info(sd->status.guild_id);
|
guild_request_info(sd->status.guild_id);
|
||||||
else if (g && strcmp(sd->status.name,g->master) == 0)
|
else if (g && strcmp(sd->status.name,g->master) == 0)
|
||||||
{ //Block Guild Skills to prevent logout/login reuse exploiting. [Skotlex]
|
{
|
||||||
guild_block_skill(sd, 300000);
|
// set the Guild Master flag
|
||||||
//Also set the Guild Master flag.
|
|
||||||
sd->state.gmaster_flag = g;
|
sd->state.gmaster_flag = g;
|
||||||
|
// (optionally) block Guild Skills to prevent logout/login reuse
|
||||||
|
//guild_block_skill(sd, 300000);
|
||||||
}
|
}
|
||||||
|
|
||||||
status_calc_pc(sd,1);
|
status_calc_pc(sd,1);
|
||||||
|
@ -909,10 +909,9 @@ int skillnotok (int skillid, struct map_session_data *sd)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GD_EMERGENCYCALL:
|
case GD_EMERGENCYCALL:
|
||||||
if ( //No use map_flag_gvg since config already takes that into account
|
if (
|
||||||
!(battle_config.emergency_call&(agit_flag?2:1)) ||
|
!(battle_config.emergency_call&(agit_flag?2:1)) ||
|
||||||
!(battle_config.emergency_call&
|
!(battle_config.emergency_call&(map[m].flag.gvg || map[m].flag.gvg_castle?8:4)) ||
|
||||||
(map[m].flag.gvg || map[m].flag.gvg_castle?8:4)) ||
|
|
||||||
(battle_config.emergency_call&16 && map[m].flag.nowarpto && !map[m].flag.gvg_castle)
|
(battle_config.emergency_call&16 && map[m].flag.nowarpto && !map[m].flag.gvg_castle)
|
||||||
) {
|
) {
|
||||||
clif_skill_fail(sd,skillid,0,0);
|
clif_skill_fail(sd,skillid,0,0);
|
||||||
@ -3469,7 +3468,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
|
|||||||
per = sper = 100;
|
per = sper = 100;
|
||||||
if (status_revive(bl, per, sper))
|
if (status_revive(bl, per, sper))
|
||||||
{
|
{
|
||||||
clif_skill_nodamage(src,bl,ALL_RESURRECTION,skilllv,1); //Both Redemption and Res show this skill-animation.
|
clif_skill_nodamage(src,bl,ALL_RESURRECTION,skilllv,1); //Both Redemptio and Res show this skill-animation.
|
||||||
if(sd && dstsd && battle_config.resurrection_exp > 0)
|
if(sd && dstsd && battle_config.resurrection_exp > 0)
|
||||||
{
|
{
|
||||||
int exp = 0,jexp = 0;
|
int exp = 0,jexp = 0;
|
||||||
@ -3503,10 +3502,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
|
|||||||
23+skilllv*4 +status_get_lv(src) -status_get_lv(bl),
|
23+skilllv*4 +status_get_lv(src) -status_get_lv(bl),
|
||||||
skilllv,60000);
|
skilllv,60000);
|
||||||
} else {
|
} else {
|
||||||
map_foreachinrange(skill_area_sub, src,
|
map_foreachinrange(skill_area_sub, src, skill_get_splash(skillid, skilllv), BL_CHAR,
|
||||||
skill_get_splash(skillid, skilllv), BL_CHAR,
|
src, skillid, skilllv, tick, flag|BCT_ENEMY|1, skill_castend_nodamage_id);
|
||||||
src, skillid, skilllv, tick, flag|BCT_ENEMY|1,
|
|
||||||
skill_castend_nodamage_id);
|
|
||||||
clif_skill_nodamage(src, bl, skillid, skilllv, 1);
|
clif_skill_nodamage(src, bl, skillid, skilllv, 1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -3524,8 +3521,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
|
|||||||
}
|
}
|
||||||
//Affect all targets on splash area.
|
//Affect all targets on splash area.
|
||||||
map_foreachinrange(skill_area_sub, bl, i, BL_CHAR,
|
map_foreachinrange(skill_area_sub, bl, i, BL_CHAR,
|
||||||
src, skillid, skilllv, tick, flag|1,
|
src, skillid, skilllv, tick, flag|1, skill_castend_damage_id);
|
||||||
skill_castend_damage_id);
|
|
||||||
break;
|
break;
|
||||||
case SA_ABRACADABRA:
|
case SA_ABRACADABRA:
|
||||||
{
|
{
|
||||||
@ -3565,12 +3561,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
|
|||||||
if (ud->target)
|
if (ud->target)
|
||||||
target_id = ud->target;
|
target_id = ud->target;
|
||||||
else switch (src->type) {
|
else switch (src->type) {
|
||||||
case BL_MOB:
|
case BL_MOB: target_id = ((TBL_MOB*)src)->target_id; break;
|
||||||
target_id = ((TBL_MOB*)src)->target_id;
|
case BL_PET: target_id = ((TBL_PET*)src)->target_id; break;
|
||||||
break;
|
|
||||||
case BL_PET:
|
|
||||||
target_id = ((TBL_PET*)src)->target_id;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
if (!target_id)
|
if (!target_id)
|
||||||
break;
|
break;
|
||||||
@ -3750,27 +3742,13 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
|
|||||||
|
|
||||||
case TK_SEVENWIND:
|
case TK_SEVENWIND:
|
||||||
switch(skill_get_pl(skillid,skilllv)) {
|
switch(skill_get_pl(skillid,skilllv)) {
|
||||||
case ELE_EARTH:
|
case ELE_EARTH : type = SC_EARTHWEAPON; break;
|
||||||
type=SC_EARTHWEAPON;
|
case ELE_WIND : type = SC_WINDWEAPON; break;
|
||||||
break;
|
case ELE_WATER : type = SC_WATERWEAPON; break;
|
||||||
case ELE_WIND:
|
case ELE_FIRE : type = SC_FIREWEAPON; break;
|
||||||
type=SC_WINDWEAPON;
|
case ELE_GHOST : type = SC_GHOSTWEAPON; break;
|
||||||
break;
|
case ELE_DARK : type = SC_SHADOWWEAPON; break;
|
||||||
case ELE_WATER:
|
case ELE_HOLY : type = SC_ASPERSIO; break;
|
||||||
type=SC_WATERWEAPON;
|
|
||||||
break;
|
|
||||||
case ELE_FIRE:
|
|
||||||
type=SC_FIREWEAPON;
|
|
||||||
break;
|
|
||||||
case ELE_GHOST:
|
|
||||||
type=SC_GHOSTWEAPON;
|
|
||||||
break;
|
|
||||||
case ELE_DARK:
|
|
||||||
type=SC_SHADOWWEAPON;
|
|
||||||
break;
|
|
||||||
case ELE_HOLY:
|
|
||||||
type=SC_ASPERSIO;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
clif_skill_nodamage(src,bl,skillid,skilllv,
|
clif_skill_nodamage(src,bl,skillid,skilllv,
|
||||||
sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv)));
|
sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv)));
|
||||||
@ -3783,10 +3761,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
|
|||||||
//Passive Magnum, should had been casted on yourself.
|
//Passive Magnum, should had been casted on yourself.
|
||||||
case SM_MAGNUM:
|
case SM_MAGNUM:
|
||||||
skill_area_temp[1] = 0;
|
skill_area_temp[1] = 0;
|
||||||
map_foreachinrange(skill_area_sub, src,
|
map_foreachinrange(skill_area_sub, src, skill_get_splash(skillid, skilllv),BL_CHAR,
|
||||||
skill_get_splash(skillid, skilllv),BL_CHAR,
|
src,skillid,skilllv,tick, flag|BCT_ENEMY|1, skill_castend_damage_id);
|
||||||
src,skillid,skilllv,tick, flag|BCT_ENEMY|1,
|
|
||||||
skill_castend_damage_id);
|
|
||||||
//Initiate 10% of your damage becomes fire element.
|
//Initiate 10% of your damage becomes fire element.
|
||||||
clif_skill_nodamage (src,src,skillid,skilllv,1);
|
clif_skill_nodamage (src,src,skillid,skilllv,1);
|
||||||
sc_start4(src,SC_WATK_ELEMENT,100,3,20,0,0,skill_get_time2(skillid, skilllv));
|
sc_start4(src,SC_WATK_ELEMENT,100,3,20,0,0,skill_get_time2(skillid, skilllv));
|
||||||
@ -3820,12 +3796,12 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
|
|||||||
case WS_CARTBOOST:
|
case WS_CARTBOOST:
|
||||||
case SN_SIGHT:
|
case SN_SIGHT:
|
||||||
case WS_MELTDOWN:
|
case WS_MELTDOWN:
|
||||||
case WS_OVERTHRUSTMAX: // Overthrust Max [Celest]
|
case WS_OVERTHRUSTMAX:
|
||||||
case ST_REJECTSWORD:
|
case ST_REJECTSWORD:
|
||||||
case HW_MAGICPOWER:
|
case HW_MAGICPOWER:
|
||||||
case PF_MEMORIZE:
|
case PF_MEMORIZE:
|
||||||
case PA_SACRIFICE:
|
case PA_SACRIFICE:
|
||||||
case ASC_EDP: // [Celest]
|
case ASC_EDP:
|
||||||
case NPC_STOP:
|
case NPC_STOP:
|
||||||
case WZ_SIGHTBLASTER:
|
case WZ_SIGHTBLASTER:
|
||||||
case PF_DOUBLECASTING:
|
case PF_DOUBLECASTING:
|
||||||
@ -6308,8 +6284,7 @@ int skill_castend_pos2 (struct block_list *src, int x, int y, int skillid, int s
|
|||||||
case AM_RESURRECTHOMUN: //[orn]
|
case AM_RESURRECTHOMUN: //[orn]
|
||||||
if (sd)
|
if (sd)
|
||||||
{
|
{
|
||||||
if (map_flag_gvg(src->m) || //No reviving in WoE grounds!
|
if (!merc_resurrect_homunculus(sd, 20*skilllv, x, y))
|
||||||
!merc_resurrect_homunculus(sd, 20*skilllv, x, y))
|
|
||||||
{
|
{
|
||||||
clif_skill_fail(sd,skillid,0,0);
|
clif_skill_fail(sd,skillid,0,0);
|
||||||
break;
|
break;
|
||||||
@ -8419,12 +8394,12 @@ int skill_check_condition (struct map_session_data *sd, int skill, int lv, int t
|
|||||||
case GD_BATTLEORDER:
|
case GD_BATTLEORDER:
|
||||||
case GD_REGENERATION:
|
case GD_REGENERATION:
|
||||||
case GD_RESTORE:
|
case GD_RESTORE:
|
||||||
//Emergency Recall is handled on skillnotok
|
if (!map_flag_gvg(sd->bl.m)) {
|
||||||
if (!agit_flag) {
|
|
||||||
clif_skill_fail(sd,skill,0,0);
|
clif_skill_fail(sd,skill,0,0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
case GD_EMERGENCYCALL:
|
case GD_EMERGENCYCALL:
|
||||||
|
// other checks were already done in skillnotok()
|
||||||
if (!sd->status.guild_id || !sd->state.gmaster_flag)
|
if (!sd->status.guild_id || !sd->state.gmaster_flag)
|
||||||
return 0;
|
return 0;
|
||||||
break;
|
break;
|
||||||
|
@ -699,8 +699,8 @@ int unit_can_move(struct block_list *bl)
|
|||||||
if (!ud)
|
if (!ud)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (ud->skilltimer != -1 && (!sd || pc_checkskill(sd, SA_FREECAST) <= 0))
|
if (ud->skilltimer != -1 && (!sd || !pc_checkskill(sd, SA_FREECAST) || skill_get_inf2(ud->skillid)&INF2_GUILD_SKILL))
|
||||||
return 0;
|
return 0; // prevent moving while casting
|
||||||
|
|
||||||
if (DIFF_TICK(ud->canmove_tick, gettick()) > 0)
|
if (DIFF_TICK(ud->canmove_tick, gettick()) > 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user