- Removed the inf2 = TRAP of FirePillar and Spider Web so they are blocked by Land Protector.
- Renamed skill_landprotector to skill_cell_overlap since that is more coherent with what that function does now. - Corrected fog of wall, so that the deleted/doubled-duration effects are calculated on a cell-by-cell basis. - Updated Land Protector: It will now delete/block effects of ALL ground skills EXCEPT: Song/Dances/Traps (encores are still blocked). Land skills blocked/deleted by LP also can't be casted on top of an existing LP. The code uses the inf2 value of the skill to determine if it is a song/dance/trap. - Ganbantein, mimicking LP, will now also remove ensembles. git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@9191 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
39f2b31168
commit
11f97275da
@ -4,6 +4,14 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO
|
|||||||
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.
|
||||||
|
|
||||||
2006/11/10
|
2006/11/10
|
||||||
|
* Corrected fog of wall, so that the deleted/doubled-duration effects are
|
||||||
|
calculated on a cell-by-cell basis. [Skotlex]
|
||||||
|
* Updated Land Protector: It will now delete/block effects of ALL ground
|
||||||
|
skills EXCEPT: Song/Dances/Traps (encores are still blocked). Land skills
|
||||||
|
blocked/deleted by LP also can't be casted on top of an existing LP. The
|
||||||
|
code uses the inf2 value of the skill to determine if it is a
|
||||||
|
song/dance/trap. [Skotlex]
|
||||||
|
* Ganbantein, mimicking LP, will now also remove ensembles. [Skotlex]
|
||||||
* Fog of Wall will fail when casted on top of a Volcano/Violent Gale
|
* Fog of Wall will fail when casted on top of a Volcano/Violent Gale
|
||||||
[Skotlex]
|
[Skotlex]
|
||||||
* Applied FlavioJS's fix to the npc whisper system. [Skotlex]
|
* Applied FlavioJS's fix to the npc whisper system. [Skotlex]
|
||||||
|
@ -19,6 +19,9 @@
|
|||||||
-----
|
-----
|
||||||
|
|
||||||
========================
|
========================
|
||||||
|
11/10
|
||||||
|
* Removed the inf2 = TRAP of FirePillar and Spider Web so they are blocked
|
||||||
|
by Land Protector. [Skotlex]
|
||||||
11/09
|
11/09
|
||||||
* More accurate Max HP values for TK/SG/SL/GS/NJ [Playtester]
|
* More accurate Max HP values for TK/SG/SL/GS/NJ [Playtester]
|
||||||
- TK/SG/SL are official up to level 70
|
- TK/SG/SL are official up to level 70
|
||||||
|
@ -103,7 +103,7 @@
|
|||||||
77,5,6,1,6,0,0,10,1,yes,0,0,0,magic,0 //PR_TURNUNDEAD#Turn Undead#
|
77,5,6,1,6,0,0,10,1,yes,0,0,0,magic,0 //PR_TURNUNDEAD#Turn Undead#
|
||||||
78,9,6,1,0,1,0,1,0,yes,0,0,0,magic,0 //PR_LEXAETERNA#Lex Aeterna#
|
78,9,6,1,0,1,0,1,0,yes,0,0,0,magic,0 //PR_LEXAETERNA#Lex Aeterna#
|
||||||
79,9,8,2,6,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0,0,magic,0 //PR_MAGNUS#Magnus Exorcismus#
|
79,9,8,2,6,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0,0,magic,0 //PR_MAGNUS#Magnus Exorcismus#
|
||||||
80,9,8,2,3,0,1:1:1:1:1:2:2:2:2:2:2,10,3:4:5:6:7:8:9:10:11:12:12,yes,0,128,5,magic,0 //WZ_FIREPILLAR#Fire Pillar#
|
80,9,8,2,3,0,1:1:1:1:1:2:2:2:2:2:2,10,3:4:5:6:7:8:9:10:11:12:12,yes,0,0,5,magic,0 //WZ_FIREPILLAR#Fire Pillar#
|
||||||
81,0,6,4,3,0,3,10,1,yes,0,0,0,magic,5 //WZ_SIGHTRASHER#Sightrasher#
|
81,0,6,4,3,0,3,10,1,yes,0,0,0,magic,5 //WZ_SIGHTRASHER#Sightrasher#
|
||||||
//82,9,6,2,3,0,0,10,1,yes,0,0,0,magic,0 //WZ_FIREIVY#Fire Ivy#
|
//82,9,6,2,3,0,0,10,1,yes,0,0,0,magic,0 //WZ_FIREIVY#Fire Ivy#
|
||||||
83,9,8,2,3,0,3:3:3:3:3:3:3:3:3:3:14,10,1:1:2:2:3:3:4:4:5:5:15,yes,0,0,0,magic,0 //WZ_METEOR#Meteor Storm#
|
83,9,8,2,3,0,3:3:3:3:3:3:3:3:3:3:14,10,1:1:2:2:3:3:4:4:5:5:15,yes,0,0,0,magic,0 //WZ_METEOR#Meteor Storm#
|
||||||
@ -428,7 +428,7 @@
|
|||||||
402,9,6,1,0,1,0,5,1,no,0,0,0,none,0 //PF_MINDBREAKER#Mind Breaker#
|
402,9,6,1,0,1,0,5,1,no,0,0,0,none,0 //PF_MINDBREAKER#Mind Breaker#
|
||||||
403,0,0,4,0,1,0,1,1,yes,0,0,0,magic,0 //PF_MEMORIZE#Foresight#
|
403,0,0,4,0,1,0,1,1,yes,0,0,0,magic,0 //PF_MEMORIZE#Foresight#
|
||||||
404,9,6,2,2,1,0,5,1,yes,0,256,2,magic,0 //PF_FOGWALL#Blinding Mist#
|
404,9,6,2,2,1,0,5,1,yes,0,256,2,magic,0 //PF_FOGWALL#Blinding Mist#
|
||||||
405,7,6,1,0,1,0,1,1,no,0,128,3,magic,0 //PF_SPIDERWEB#Fiber Lock#
|
405,7,6,1,0,1,0,1,1,no,0,0,3,magic,0 //PF_SPIDERWEB#Fiber Lock#
|
||||||
406,0,6,4,-1,2,2,10,1,no,33,0,0,weapon,0 //ASC_METEORASSAULT#Meteor Assault#
|
406,0,6,4,-1,2,2,10,1,no,33,0,0,weapon,0 //ASC_METEORASSAULT#Meteor Assault#
|
||||||
407,0,6,4,0,1,0,1,0,no,0,0,0,none,0 //ASC_CDP#Create Deadly Poison#
|
407,0,6,4,0,1,0,1,0,no,0,0,0,none,0 //ASC_CDP#Create Deadly Poison#
|
||||||
408,9,6,4,0,1,0,1,1,yes,0,4,0,none,0 //WE_BABY#Baby#
|
408,9,6,4,0,1,0,1,1,yes,0,4,0,none,0 //WE_BABY#Baby#
|
||||||
|
@ -719,7 +719,7 @@ int skill_attack_area(struct block_list *bl,va_list ap);
|
|||||||
struct skill_unit_group *skill_locate_element_field(struct block_list *bl); // [Skotlex]
|
struct skill_unit_group *skill_locate_element_field(struct block_list *bl); // [Skotlex]
|
||||||
int skill_graffitiremover(struct block_list *bl, va_list ap); // [Valaris]
|
int skill_graffitiremover(struct block_list *bl, va_list ap); // [Valaris]
|
||||||
int skill_greed(struct block_list *bl, va_list ap);
|
int skill_greed(struct block_list *bl, va_list ap);
|
||||||
int skill_landprotector(struct block_list *bl, va_list ap);
|
int skill_cell_overlap(struct block_list *bl, va_list ap);
|
||||||
int skill_ganbatein(struct block_list *bl, va_list ap);
|
int skill_ganbatein(struct block_list *bl, va_list ap);
|
||||||
int skill_trap_splash(struct block_list *bl, va_list ap);
|
int skill_trap_splash(struct block_list *bl, va_list ap);
|
||||||
int skill_count_target(struct block_list *bl, va_list ap);
|
int skill_count_target(struct block_list *bl, va_list ap);
|
||||||
@ -6661,16 +6661,6 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src, int skillid,
|
|||||||
val1 = 55 + skilllv*5; //Elemental Resistance
|
val1 = 55 + skilllv*5; //Elemental Resistance
|
||||||
val2 = skilllv*10; //Status ailment resistance
|
val2 = skilllv*10; //Status ailment resistance
|
||||||
break;
|
break;
|
||||||
case PF_FOGWALL:
|
|
||||||
//When casted on top of Volcano/Violent Gale it fails.
|
|
||||||
if (map_find_skill_unit_oncell(src,x,y,SA_VOLCANO,NULL) ||
|
|
||||||
map_find_skill_unit_oncell(src,x,y,SA_VIOLENTGALE,NULL))
|
|
||||||
return NULL;
|
|
||||||
//When casted on top of Deluge/Suiton: Double duration.
|
|
||||||
if (map_find_skill_unit_oncell(src,x,y,SA_DELUGE,NULL) ||
|
|
||||||
map_find_skill_unit_oncell(src,x,y,NJ_SUITON,NULL))
|
|
||||||
limit *= 2;
|
|
||||||
break;
|
|
||||||
case RG_GRAFFITI: /* Graffiti */
|
case RG_GRAFFITI: /* Graffiti */
|
||||||
count=1; // Leave this at 1 [Valaris]
|
count=1; // Leave this at 1 [Valaris]
|
||||||
break;
|
break;
|
||||||
@ -6791,7 +6781,7 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src, int skillid,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(range<=0)
|
if(range<=0)
|
||||||
map_foreachincell(skill_landprotector,src->m,ux,uy,BL_SKILL,skillid,&alive, src);
|
map_foreachincell(skill_cell_overlap,src->m,ux,uy,BL_SKILL,skillid,&alive, src);
|
||||||
|
|
||||||
if(alive && map_getcell(src->m,ux,uy,CELL_CHKWALL))
|
if(alive && map_getcell(src->m,ux,uy,CELL_CHKWALL))
|
||||||
alive = 0;
|
alive = 0;
|
||||||
@ -6818,6 +6808,12 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src, int skillid,
|
|||||||
nullpo_retr(NULL, unit=skill_initunit(group,i,ux,uy,val1,val2));
|
nullpo_retr(NULL, unit=skill_initunit(group,i,ux,uy,val1,val2));
|
||||||
unit->limit=limit;
|
unit->limit=limit;
|
||||||
unit->range=range;
|
unit->range=range;
|
||||||
|
|
||||||
|
if (skillid == PF_FOGWALL && alive == 2)
|
||||||
|
{ //Double duration of cells on top of Deluge/Suiton
|
||||||
|
unit->limit *= 2;
|
||||||
|
group->limit = unit->limit;
|
||||||
|
}
|
||||||
|
|
||||||
if (range==0 && active_flag)
|
if (range==0 && active_flag)
|
||||||
map_foreachincell(skill_unit_effect,unit->bl.m,
|
map_foreachincell(skill_unit_effect,unit->bl.m,
|
||||||
@ -9285,7 +9281,7 @@ int skill_greed (struct block_list *bl, va_list ap)
|
|||||||
*
|
*
|
||||||
*------------------------------------------
|
*------------------------------------------
|
||||||
*/
|
*/
|
||||||
int skill_landprotector (struct block_list *bl, va_list ap)
|
int skill_cell_overlap(struct block_list *bl, va_list ap)
|
||||||
{
|
{
|
||||||
int skillid;
|
int skillid;
|
||||||
int *alive;
|
int *alive;
|
||||||
@ -9296,7 +9292,7 @@ int skill_landprotector (struct block_list *bl, va_list ap)
|
|||||||
alive = va_arg(ap,int *);
|
alive = va_arg(ap,int *);
|
||||||
src = va_arg(ap,struct block_list *);
|
src = va_arg(ap,struct block_list *);
|
||||||
unit = (struct skill_unit *)bl;
|
unit = (struct skill_unit *)bl;
|
||||||
if (unit == NULL || unit->group == NULL)
|
if (unit == NULL || unit->group == NULL || (*alive) == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
switch (skillid)
|
switch (skillid)
|
||||||
@ -9311,8 +9307,8 @@ int skill_landprotector (struct block_list *bl, va_list ap)
|
|||||||
}
|
}
|
||||||
//Delete the rest of types.
|
//Delete the rest of types.
|
||||||
case HW_GANBANTEIN:
|
case HW_GANBANTEIN:
|
||||||
if(!unit->group->state.song_dance)
|
if(!skill_get_inf2(unit->group->skill_id)&(INF2_SONG_DANCE|INF2_TRAP))
|
||||||
{ //It deletes everything except songs/dances/encores.
|
{ //It deletes everything except songs/dances
|
||||||
skill_delunit(unit, 1);
|
skill_delunit(unit, 1);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -9334,6 +9330,20 @@ int skill_landprotector (struct block_list *bl, va_list ap)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case PF_FOGWALL:
|
||||||
|
switch(unit->group->skill_id)
|
||||||
|
{
|
||||||
|
case SA_VOLCANO: //Can't be placed on top of these
|
||||||
|
case SA_VIOLENTGALE:
|
||||||
|
(*alive) = 0;
|
||||||
|
return 1;
|
||||||
|
case SA_DELUGE:
|
||||||
|
case NJ_SUITON:
|
||||||
|
//Cheap 'hack' to notify the calling function that duration should be doubled [Skotlex]
|
||||||
|
(*alive) = 2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case HP_BASILICA:
|
case HP_BASILICA:
|
||||||
if (unit->group->skill_id == HP_BASILICA)
|
if (unit->group->skill_id == HP_BASILICA)
|
||||||
{ //Basilica can't be placed on top of itself to avoid map-cell stacking problems. [Skotlex]
|
{ //Basilica can't be placed on top of itself to avoid map-cell stacking problems. [Skotlex]
|
||||||
@ -9343,8 +9353,8 @@ int skill_landprotector (struct block_list *bl, va_list ap)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (unit->group->skill_id == SA_LANDPROTECTOR &&
|
if (unit->group->skill_id == SA_LANDPROTECTOR &&
|
||||||
!(skill_get_unit_flag(skillid)&(UF_DANCE|UF_SONG|UF_ENSEMBLE)))
|
!(skill_get_inf2(skillid)&(INF2_SONG_DANCE|INF2_TRAP)))
|
||||||
{ //It deletes everything except songs/dances/encores.
|
{ //It deletes everything except songs/dances/traps
|
||||||
(*alive) = 0;
|
(*alive) = 0;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -9353,7 +9363,7 @@ int skill_landprotector (struct block_list *bl, va_list ap)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*==========================================
|
/*==========================================
|
||||||
* variation of skill_landprotector
|
* variation of skill_cell_overlap
|
||||||
*------------------------------------------
|
*------------------------------------------
|
||||||
*/
|
*/
|
||||||
int skill_ganbatein (struct block_list *bl, va_list ap)
|
int skill_ganbatein (struct block_list *bl, va_list ap)
|
||||||
@ -9365,8 +9375,8 @@ int skill_ganbatein (struct block_list *bl, va_list ap)
|
|||||||
if ((unit = (struct skill_unit *)bl) == NULL || unit->group == NULL)
|
if ((unit = (struct skill_unit *)bl) == NULL || unit->group == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (unit->group->state.song_dance)
|
if (unit->group->state.song_dance&0x1)
|
||||||
return 0; //Don't touch song/dance/ensemble.
|
return 0; //Don't touch song/dance.
|
||||||
|
|
||||||
if (unit->group->skill_id == SA_LANDPROTECTOR)
|
if (unit->group->skill_id == SA_LANDPROTECTOR)
|
||||||
skill_delunit(unit, 1);
|
skill_delunit(unit, 1);
|
||||||
@ -9916,7 +9926,7 @@ int skill_unit_timer_sub_onplace (struct block_list *bl, va_list ap)
|
|||||||
|
|
||||||
nullpo_retr(0, group=unit->group);
|
nullpo_retr(0, group=unit->group);
|
||||||
|
|
||||||
if (skill_get_type(group->skill_id)==BF_MAGIC
|
if (!skill_get_inf2(group->skill_id)&(INF2_SONG_DANCE|INF2_TRAP)
|
||||||
&& map_getcell(bl->m, bl->x, bl->y, CELL_CHKLANDPROTECTOR))
|
&& map_getcell(bl->m, bl->x, bl->y, CELL_CHKLANDPROTECTOR))
|
||||||
return 0; //AoE skills are ineffective. [Skotlex]
|
return 0; //AoE skills are ineffective. [Skotlex]
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user