- Added a check to prevent casting ground skills on a target and vice-versa when said skill use packets are received. It really shouldn't be exploitable, but doing that certainly makes the server print a lot of "unknown skill used!" messages.
git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@9163 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
cd482bed77
commit
9ef52ebac7
@ -4,6 +4,10 @@ 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/07
|
2006/11/07
|
||||||
|
* Added a check to prevent casting ground skills on a target and vice-versa
|
||||||
|
when said skill use packets are received. It really shouldn't be
|
||||||
|
exploitable, but doing that certainly makes the server print a lot of
|
||||||
|
"unknown skill used!" messages. [Skotlex]
|
||||||
* Fixed map_foreachiddb and map_foreachpc so they don't encapsulate the
|
* Fixed map_foreachiddb and map_foreachpc so they don't encapsulate the
|
||||||
variable arguments into a double va_arg list. Thanks to the Ultra Mage for
|
variable arguments into a double va_arg list. Thanks to the Ultra Mage for
|
||||||
the tip. [Skotlex]
|
the tip. [Skotlex]
|
||||||
|
@ -9724,7 +9724,7 @@ static void clif_parse_UseSkillToId_homun(struct homun_data *hd, struct map_sess
|
|||||||
*------------------------------------------
|
*------------------------------------------
|
||||||
*/
|
*/
|
||||||
void clif_parse_UseSkillToId(int fd, struct map_session_data *sd) {
|
void clif_parse_UseSkillToId(int fd, struct map_session_data *sd) {
|
||||||
int skillnum, skilllv, lv, target_id;
|
int skillnum, skilllv, tmp, target_id;
|
||||||
unsigned int tick = gettick();
|
unsigned int tick = gettick();
|
||||||
RFIFOHEAD(fd);
|
RFIFOHEAD(fd);
|
||||||
|
|
||||||
@ -9741,6 +9741,10 @@ void clif_parse_UseSkillToId(int fd, struct map_session_data *sd) {
|
|||||||
//Whether skill fails or not is irrelevant, the char ain't idle. [Skotlex]
|
//Whether skill fails or not is irrelevant, the char ain't idle. [Skotlex]
|
||||||
sd->idletime = last_tick;
|
sd->idletime = last_tick;
|
||||||
|
|
||||||
|
tmp = skill_get_inf(skillnum);
|
||||||
|
if (tmp&INF_GROUND_SKILL)
|
||||||
|
return; //Using a ground skill on a target? WRONG.
|
||||||
|
|
||||||
if (skillnum >= HM_SKILLBASE && skillnum <= HM_SKILLBASE+MAX_HOMUNSKILL) {
|
if (skillnum >= HM_SKILLBASE && skillnum <= HM_SKILLBASE+MAX_HOMUNSKILL) {
|
||||||
clif_parse_UseSkillToId_homun(sd->hd, sd, tick, skillnum, skilllv, target_id);
|
clif_parse_UseSkillToId_homun(sd->hd, sd, tick, skillnum, skilllv, target_id);
|
||||||
return;
|
return;
|
||||||
@ -9749,9 +9753,7 @@ void clif_parse_UseSkillToId(int fd, struct map_session_data *sd) {
|
|||||||
if (skillnotok(skillnum, sd))
|
if (skillnotok(skillnum, sd))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (sd->bl.id != target_id &&
|
if (sd->bl.id != target_id && !sd->state.skill_flag && tmp&INF_SELF_SKILL)
|
||||||
!sd->state.skill_flag &&
|
|
||||||
skill_get_inf(skillnum)&INF_SELF_SKILL)
|
|
||||||
target_id = sd->bl.id; //What good is it to mess up the target in self skills? Wished I knew... [Skotlex]
|
target_id = sd->bl.id; //What good is it to mess up the target in self skills? Wished I knew... [Skotlex]
|
||||||
|
|
||||||
if (sd->ud.skilltimer != -1) {
|
if (sd->ud.skilltimer != -1) {
|
||||||
@ -9814,9 +9816,9 @@ void clif_parse_UseSkillToId(int fd, struct map_session_data *sd) {
|
|||||||
else
|
else
|
||||||
skilllv = 0;
|
skilllv = 0;
|
||||||
} else {
|
} else {
|
||||||
lv = pc_checkskill(sd, skillnum);
|
tmp = pc_checkskill(sd, skillnum);
|
||||||
if (skilllv > lv)
|
if (skilllv > tmp)
|
||||||
skilllv = lv;
|
skilllv = tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (skilllv)
|
if (skilllv)
|
||||||
@ -9842,6 +9844,9 @@ void clif_parse_UseSkillToPosSub(int fd, struct map_session_data *sd, int skilll
|
|||||||
if (skillnotok(skillnum, sd))
|
if (skillnotok(skillnum, sd))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (!(skill_get_inf(skillnum)&INF_GROUND_SKILL))
|
||||||
|
return; //Using a target skill on the ground? WRONG.
|
||||||
|
|
||||||
if (skillmoreinfo != -1) {
|
if (skillmoreinfo != -1) {
|
||||||
if (pc_issit(sd)) {
|
if (pc_issit(sd)) {
|
||||||
clif_skill_fail(sd, skillnum, 0, 0);
|
clif_skill_fail(sd, skillnum, 0, 0);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user