error in skill.c 180

this mean you have unsupported skill somewhere.

if you adding new skill by patching server, you must add range for this skill in skill_get_index.

if you adding new skill by plugin, you must override CUSTOM_SKILL_RANGES in environment variables before compile server.

If this error from clean hercules, probably some one cheating and want use non existing skill.

 
this mean you have unsupported skill somewhere.

if you adding new skill by patching server, you must add range for this skill in skill_get_index.

if you adding new skill by plugin, you must override CUSTOM_SKILL_RANGES in environment variables before compile server.

If this error from clean hercules, probably some one cheating and want use non existing skill.


For 1 and 2 is there a command to locate which specific skill or plugin it came from?

And where can i find CUSTOM_SKILL_RANGES. 

also ichecked the error and found this. Skill Id is not being handled. and cant find such skill. is it safe to assume that some one is using cheat?

image.png

 
Last edited by a moderator:
no you cant know where skill was used/added except stack trace what you show on screenshot.

try search in your plugins and in hercules code for 5423.

this skill usage look like code from client. may be you have this skill id in your client lua files?

if this is some one want exploit some non existing skill, you can simply ignore it.

 
no you cant know where skill was used/added except stack trace what you show on screenshot.

try search in your plugins and in hercules code for 5423.

this skill usage look like code from client. may be you have this skill id in your client lua files?

if this is some one want exploit some non existing skill, you can simply ignore it.
If someone is cheating is there a way to trace whose that person is? Already updated my Hercules git. still got the same error.

 
you can add into function clif_useSkillToIdReal at start code:

Code:
if (skill_id == 5423)
{
	ShowError("Wrong skill 5423 from account_id: %d\n", sd->status.account_id);
}
 
you can add into function clif_useSkillToIdReal at start code:

if (skill_id == 5423)
{
ShowError("Wrong skill 5423 from account_id: %d\n", sd->status.account_id);
}

if (skill_id == 5423)
{
ShowError("Wrong skill 5423 from account_id: %d\n", sd->status.account_id);
}

sorry. which file? Im new to this. 

 
sorry. which file? Im new to this. 
Is this correct under clif.c?

Code:
static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill_id, int skill_lv, int target_id) __attribute__((nonnull (2)));
static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill_id, int skill_lv, int target_id)
if (skill_id == 5423)
{
	ShowError("Wrong skill 5423 from account_id: %d\n", sd->status.account_id);
}
{
	int64 tick = timer->gettick();

	if (skill_lv < 1)
		skill_lv = 1; //No clue, I have seen the client do this with guild skills :/ [Skotlex]

	int tmp = skill->get_inf(skill_id);
	if (tmp & INF_GROUND_SKILL || !tmp)
		return; //Using a ground/passive skill on a target? WRONG.

	if (skill_id >= HM_SKILLBASE && skill_id < HM_SKILLBASE + MAX_HOMUNSKILL) {
		clif->pUseSkillToId_homun(sd->hd, sd, tick, skill_id, skill_lv, target_id);
		return;
	}

	if (skill_id >= MC_SKILLBASE && skill_id < MC_SKILLBASE + MAX_MERCSKILL) {
		clif->pUseSkillToId_mercenary(sd->md, sd, tick, skill_id, skill_lv, target_id);
		return;
	}

	// Whether skill fails or not is irrelevant, the char ain't idle. [Skotlex]
	pc->update_idle_time(sd, BCIDLE_USESKILLTOID);

	if (sd->npc_id || sd->state.workinprogress & 1) {
 
don't know why,

but its getting worse is this bug? or does the script below cause this error?

image.png

image.png

function script H_VIPBuff {
query_sql( "SELECT CAST( `vip` AS DATE ),DATEDIFF( IFNULL(`vip`,NOW()),NOW() ), TIMESTAMPDIFF(SECOND, NOW(), `vip`) FROM `login` WHERE `account_id` = "+getcharid(3)+" LIMIT 1", .@vip_date$, .@day, .@vip_second);
if ( .@day > 0 || .@vip_second > 0) {
return true;
end;
}
return false;
}

- script Healer FAKE_NPC,{

.@price = 0; // Zeny required for heal
.@Buffs = 1; // Also buff players? (1: yes / 0: no)
.@Delay = 2; // Heal delay, in seconds

if (@HD > gettimetick(2)) end;
if (.@price) {
message strcharinfo(PC_NAME),"Healing costs "+.@price+" Zeny.";
if (Zeny < .@price) end;
if(select("^0055FFHeal^000000", "^777777Cancel^000000") == 2) close;
Zeny -= .@price;
}

specialeffect(EF_HEAL2, AREA, playerattached()); percentheal 100,100;
if (.@Buffs) {

if (callfunc ("H_VIPBuff")) {
//sc_start SC_CASH_PLUSEXP,.exp_bonus_duration,.bonus_vip_exp_rate;
//sc_start SC_CASH_RECEIVEITEM,.bonus_duration,.bonus_vip_drop_rate;

specialeffect(EF_INCAGILITY, AREA, playerattached());
sc_start SC_INC_AGI,240000,10;
specialeffect(EF_BLESSING, AREA, playerattached());
sc_start SC_BLESSING,240000,10;
specialeffect(EF_KYRIE, AREA, playerattached());
sc_start SC_KYRIE, 120000, 0;
specialeffect( EF_IMPOSITIO, AREA, playerattached());
sc_start SC_IMPOSITIO, 60000, 0;
specialeffect(EF_GLORIA, AREA, playerattached());
sc_start SC_GLORIA, 30000, 0;

sc_end SC_STONE;
sc_end SC_FREEZE;
sc_end SC_STUN;
sc_end SC_SLEEP;
sc_end SC_POISON;
sc_end SC_CURSE;
sc_end SC_SILENCE;
sc_end SC_CONFUSION;
sc_end SC_BLIND;
sc_end SC_BLOODING;
sc_end SC_DPOISON;
sc_end SC_FEAR;
sc_end SC_COLD;
sc_end SC_BURNING;
sc_end SC_DEEP_SLEEP;
sc_end SC_DEC_AGI;
sc_end SC_BROKENARMOR;
sc_end SC_BROKENWEAPON;
sc_end SC_NOEQUIPWEAPON;
sc_end SC_NOEQUIPSHIELD;
sc_end SC_NOEQUIPARMOR;
sc_end SC_NOEQUIPHELM;
sc_end SC__STRIPACCESSARY;
sc_end SC_PROPERTYUNDEAD;
sc_end SC_ORCISH;
sc_end SC_BERSERK;
sc_end SC_SKE;
sc_end SC_SWOO;
sc_end SC_SKA;
sc_end SC_SLOWDOWN;
sc_end SC_FROSTMISTY;
sc_end SC_ILLUSION;
sc_end SC_BITESCAR;

if( getbrokenid(1) ) repairall;
getinventorylist;
while( .@i < @inventorylist_count ){

getinventorylist;
freeloop(true);

for( .@i = 0; .@i < @inventorylist_count; .@i++ ) {
if ( @inventorylist_identify[.@i] == 1 )
continue;
else if ( getskilllv(MC_IDENTIFY) == 1 && Sp >= 10 )
heal 0,0; // lol... this is supposed to reduce their SP by 10, whatever
else if ( countitem(Spectacles) )
delitem Spectacles,1;
else if ( getskilllv(RG_COMPULSION) && Zeny >= ( 100 - ( 5 + 4 * getskilllv(RG_COMPULSION) ) )* 2/5 )
Zeny -= ( 100 - ( 5 + 4 * getskilllv(RG_COMPULSION) ) )* 2/5;
else if ( getskilllv(MC_DISCOUNT) && Zeny >= ( 100 - ( 5 + 2 * getskilllv(MC_DISCOUNT) ) )* 2/5 )
Zeny -= ( 100 - ( 5 + 2 * getskilllv(MC_DISCOUNT) ) )* 2/5;
else if ( Zeny >= 40 )
Zeny -= 40;
else
break;
delitem2 @inventorylist_id[.@i], 1, 0, @inventorylist_refine[.@i], @inventorylist_attribute[.@i], @inventorylist_card1[.@i], @inventorylist_card2[.@i], @inventorylist_card3[.@i], @inventorylist_card4[.@i];
getitem2 @inventorylist_id[.@i], 1, 1, @inventorylist_refine[.@i], 0, @inventorylist_card1[.@i], @inventorylist_card2[.@i], @inventorylist_card3[.@i], @inventorylist_card4[.@i];
.@icount++;
}
freeloop(false);

if ( .@icount )
message strcharinfo(0), "Identified "+ .@icount +" Items.";
}
}
else {
specialeffect(EF_INCAGILITY, AREA, playerattached());
sc_start SC_INC_AGI,240000,10;
specialeffect(EF_BLESSING, AREA, playerattached());
sc_start SC_BLESSING,240000,10;
}
if (.@Delay) @HD = gettimetick(2)+.@Delay;
end;

}
OnInit:
setarray .debuffs[0], SC_LEXAETERNA, SC_DEC_AGI, SC_POISON, SC_CURSE, SC_SILENCE, SC_BLIND, SC_VENOMBLEED, SC_DPOISON, SC_BURNING;

}




Please help me with this errors.

 
Last edited by a moderator:
you put code before function start, but need after first

Code:
{
 
you put code before function start, but need after first

{

{

I tried adding this

function script H_VIPBuff -1,{


then use Herc script check and got this error. Does the error had to do with GEPARD SHIELD 3.0 im getting above?

Code:
[Error]: npc_parse_function: Missing left curly '%TAB%{' in file '(DIRECT INPUT)', line '1'. Skipping the rest of the file. 
 * w1=function 
 * w2=script 
 * w3=H_VIPBuff 
 * w4=-1,{
 
Last edited by a moderator:
i speaked about c code and not scripts. add it to clif.c

wrong:

static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill_id, int skill_lv, int target_id) __attribute__((nonnull (2)));
static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill_id, int skill_lv, int target_id)
if (skill_id == 5423)
{
ShowError("Wrong skill 5423 from account_id: %d\n", sd->status.account_id);
}
{
int64 tick = timer->gettick();




correct:

static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill_id, int skill_lv, int target_id) __attribute__((nonnull (2)));
static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill_id, int skill_lv, int target_id)
{
if (skill_id == 5423)
{
ShowError("Wrong skill 5423 from account_id: %d\n", sd->status.account_id);
}
int64 tick = timer->gettick();


and i add skill id what you show in first screenshot.

 
i speaked about c code and not scripts. add it to clif.c

wrong:

static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill_id, int skill_lv, int target_id) __attribute__((nonnull (2)));
static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill_id, int skill_lv, int target_id)
if (skill_id == 5423)
{
ShowError("Wrong skill 5423 from account_id: %d\n", sd->status.account_id);
}
{
int64 tick = timer->gettick();

static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill_id, int skill_lv, int target_id) __attribute__((nonnull (2)));
static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill_id, int skill_lv, int target_id)
if (skill_id == 5423)
{
ShowError("Wrong skill 5423 from account_id: %d\n", sd->status.account_id);
}
{
int64 tick = timer->gettick();




correct:

static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill_id, int skill_lv, int target_id) __attribute__((nonnull (2)));
static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill_id, int skill_lv, int target_id)
{
if (skill_id == 5423)
{
ShowError("Wrong skill 5423 from account_id: %d\n", sd->status.account_id);
}
int64 tick = timer->gettick();

static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill_id, int skill_lv, int target_id) __attribute__((nonnull (2)));
static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill_id, int skill_lv, int target_id)
{
if (skill_id == 5423)
{
ShowError("Wrong skill 5423 from account_id: %d\n", sd->status.account_id);
}
int64 tick = timer->gettick();


and i add skill id what you show in first screenshot.
Hi I got much more specific error. how can i fixed this?

image.png

image.png

image.png

 
look like same errors but other skill id

client send wrong skills.

if this is on your production server as i said before it can be some one who cheating.

if on your local server, then some thing wrong with your client.

also if you using any client modifications like game guard or external tools, this can be from this things too.

 
look like same errors but other skill id

client send wrong skills.

if this is on your production server as i said before it can be some one who cheating.

if on your local server, then some thing wrong with your client.

also if you using any client modifications like game guard or external tools, this can be from this things too.
/sob I have Gepard. I don't know but per functor its not from gepard. Wonder if this can be fixed. So irritating to see. /sob

 
well gepard not prevent cheaters. it create some issues for botters only. Real protection can be only server side.

from log this is packets with wrong skill id. you can ignore them or add some code for disconnect players with wrong skill sent.

remove code what you add before, and place this code:

if (skill->get_index(skill_id) == 0) {
sockt->eof(fd);
ShowWarning("Wrong skill detected %d. Player disconnected\n", skill_id);
return;
}


This code should disconnect anyone who using skill what was not added to skill_db.

 
well gepard not prevent cheaters. it create some issues for botters only. Real protection can be only server side.

from log this is packets with wrong skill id. you can ignore them or add some code for disconnect players with wrong skill sent.

remove code what you add before, and place this code:

if (skill->get_index(skill_id) == 0) {
sockt->eof(fd);
ShowWarning("Wrong skill detected %d. Player disconnected\n", skill_id);
return;
}

if (skill->get_index(skill_id) == 0) {
sockt->eof(fd);
ShowWarning("Wrong skill detected %d. Player disconnected\n", skill_id);
return;
}


This code should disconnect anyone who using skill what was not added to skill_db.




I got this error

image.png

 
you see ?? in my snipet? but error show what you add it

this mean you add by self some chars. simply code only code what i gave

 
well gepard not prevent cheaters. it create some issues for botters only. Real protection can be only server side.

from log this is packets with wrong skill id. you can ignore them or add some code for disconnect players with wrong skill sent.

remove code what you add before, and place this code:

if (skill->get_index(skill_id) == 0) {
sockt->eof(fd);
ShowWarning("Wrong skill detected %d. Player disconnected\n", skill_id);
return;
}

This code should disconnect anyone who using skill what was not added to skill_db.
Yes, will try again next update. I don't know why. I just copy paste your snippet. Will get  back to you. thanks!

 
Back
Top