Jump to content
  • 0

Exploitable build manager, help please.


HristDead

Question


  • Group:  Members
  • Topic Count:  66
  • Topics Per Day:  0.01
  • Content Count:  167
  • Reputation:   2
  • Joined:  08/01/12
  • Last Seen:  

Hello rathena!

 

is someone so kind to help me? I am using emistry's build manager but the problem is that as soon as i save a build with a level 99 non-trans character, reborn and restore my build I will have 2x 99 stats as a novice high!! and on top of that comes the extra 2x 99 stats that i am able to get as a reborn 99/70 class, which results in me being able to get almost 4x 99stats!

 

I really need assistance please! :(

 

can someone help me only make the build save option only available for level 99/70/50 trans characters and max level extended classes? thank you so much! I really appreciate it!

 

header
function ManageBuild;
mes "[Stat & Skill Manager]";
mes "Good day, what can I do for you?";
next;
if ( Weight > 25000 ){
mes "[Stat & Skill Manager]";
mes "Oh, I can't help you! I can only help you if your weight is below 2000. Please store some items first!";
close;
}
if (checkfalcon() || checkcart() || checkriding()){
mes "[Stat & Skill Manager]";
mes "Oh, I can't help you. Please remove your Falcon, Cart or Peco first.";
close;
}
switch( select( ( .BMMode & 1 )?"^FF0000Create or switch builds^000000":"",
( .BMMode & 2 )?"^0000FFReset Stat^000000":"", 
( .BMMode & 4 )?"^0000FFReset Skills^000000":"")){
Case 1:
for( set .@i,1; .@i <= .MaxSlots; set .@i,.@i + 1 )
set .@Menu$,.@Menu$ + (( getd( "Slot_"+.@i+"$" ) == "" )?"^FF0000Empty Slot^000000":getd( "Slot_"+.@i+"$" ) )+":";
set .@Slot,select( .@Menu$ );
do{
next;
mes "Build : ^FF0000"+(( getd( "Slot_"+.@Slot+"$" ) == "" )?"Slot "+.@Slot:getd( "Slot_"+.@Slot+"$" ) )+"^000000";
mes "STR - ^0000FF"+getd( "STR_"+.@Slot )+"^000000      INT - ^0000FF"+getd( "INT_"+.@Slot )+"^000000";
mes "AGI - ^0000FF"+getd( "AGI_"+.@Slot )+"^000000      DEX - ^0000FF"+getd( "DEX_"+.@Slot )+"^000000";
mes "VIT - ^0000FF"+getd( "VIT_"+.@Slot )+"^000000      LUK - ^0000FF"+getd( "LUK_"+.@Slot )+"^000000";
mes " ";
mes "Remaining Points : ^0000FF"+getd( "STATS_"+.@Slot )+"^000000";
set .@Option,select(( getd( "Slot_"+.@Slot+"$" ) == "" )?"":"^0000FFSwitch",
( getd( "Slot_"+.@Slot+"$" ) == "" )?"Save":"",
( getd( "Slot_"+.@Slot+"$" ) == "" )?"":"^FF0000Clear" );
ManageBuild( .@Slot,.@Option);
}while( .@Option != 1 );
break;
Case 2:
ResetStatus;
mes "[Stat & Skill Manager]";
mes "Your Stats have been reset.";
break;
Case 3:
ResetSkill;
mes "[Stat & Skill Manager]";
mes "Your Skills have been reset.";
break;
}
close;
 
function ManageBuild {
switch( getarg(1) ){
Case 1: // Switch Build
message strcharinfo(0),"Build has been switched!";
ResetStatus;
set StatusPoint,getd( "STATS_"+getarg(0) );
statusup2 bStr,getd( "STR_"+getarg(0) ) - 1;
statusup2 bAgi,getd( "AGI_"+getarg(0) ) - 1;
statusup2 bVit,getd( "VIT_"+getarg(0) ) - 1;
statusup2 bInt,getd( "INT_"+getarg(0) ) - 1;
statusup2 bDex,getd( "DEX_"+getarg(0) ) - 1;
statusup2 bLuk,getd( "LUK_"+getarg(0) ) - 1;
break;
Case 2: // Save Build
setd( "STR_"+getarg(0) ),readparam(bStr);
setd( "AGI_"+getarg(0) ),readparam(bAgi);
setd( "VIT_"+getarg(0) ),readparam(bVIT);
setd( "INT_"+getarg(0) ),readparam(bInt);
setd( "DEX_"+getarg(0) ),readparam(bDex);
setd( "LUK_"+getarg(0) ),readparam(bLuk);
setd( "STATS_"+getarg(0) ),StatusPoint;
if( .Length[0] < .Length[1] && .Length[0] ){
mes "Input a ^FF0000Name^000000 for this Slot.";
mes "Name Length : "+.Length[0]+" ~ "+.Length[1]+" Chars";
do{
input getd( "Slot_"+getarg(0)+"$" );
}while( getstrlen( getd( "Slot_"+getarg(0)+"$" ) ) < .Length[0] || getstrlen( getd( "Slot_"+getarg(0)+"$" ) ) > .Length[1] );
}else{
setd( "Slot_"+getarg(0)+"$" ),"Build "+getarg(0);
}
message strcharinfo(0),"Build has been saved!";
break;
Case 3: // Remove Build
message strcharinfo(0),"Build has been cleared!";
setd( "STR_"+getarg(0) ),0;
setd( "AGI_"+getarg(0) ),0;
setd( "VIT_"+getarg(0) ),0;
setd( "INT_"+getarg(0) ),0;
setd( "DEX_"+getarg(0) ),0;
setd( "LUK_"+getarg(0) ),0;
setd( "STATS_"+getarg(0) ),0;
setd( "Slot_"+getarg(0)+"$" ),"";
break;
}
return;
} 
 
OnInit:
// Mode of NPC
// 1 = Save & Switch 
// 2 = Reset Status
// 4 = Reset Skills
// 7 = All of Above [ 1+2+4 = 7 ]
set .BMMode,7;
// How Many Slots available to Save Status Builds.
set .MaxSlots,4;
// Enable Stats Slot Rename + Max Name Length ( 0 = Disable )
setarray .Length,3,26; // Min. ~ Max. Words.
end;
 
}
}
}
Link to comment
Share on other sites

6 answers to this question

Recommended Posts


  • Group:  Forum Moderator
  • Topic Count:  93
  • Topics Per Day:  0.02
  • Content Count:  10018
  • Reputation:   2369
  • Joined:  10/28/11
  • Last Seen:  


// header

if( BaseLevel < 99 ){

mes "Only level 99 char can use.";

close;

}

  • Upvote 1
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  66
  • Topics Per Day:  0.01
  • Content Count:  167
  • Reputation:   2
  • Joined:  08/01/12
  • Last Seen:  

// header
if( BaseLevel < 99 ){
    mes "Only level 99 char can use.";
    close;
}

 

Hi sir Emistry. That also restricts them from resetting stats/skills... what i want is only the actual build saving/switching option to be available for 99/70 trans and extended classes.

 

i tried to put it after "case 1:" but it did not work.

Edited by HristDead
Link to comment
Share on other sites


  • Group:  Forum Moderator
  • Topic Count:  93
  • Topics Per Day:  0.02
  • Content Count:  10018
  • Reputation:   2369
  • Joined:  10/28/11
  • Last Seen:  

you can just put the code under the 

Case 1:
    if( BaseLevel < 99 ){
        mes "Cant use.";
        close;
    }
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  66
  • Topics Per Day:  0.01
  • Content Count:  167
  • Reputation:   2
  • Joined:  08/01/12
  • Last Seen:  

// header
if( BaseLevel < 99 ){
    mes "Only level 99 char can use.";
    close;
}

 

Thanks Emistry, works! How to make it only usable by trans and exented classes?

i tried this but it doesnt work. it blocks even trans classes. :(

 

    if( BaseLevel < 99 || EAJL_2 || EAJL_1 ){

mes "Only level 99 trans and exented char can use.";

close;

}

Link to comment
Share on other sites


  • Group:  Forum Moderator
  • Topic Count:  93
  • Topics Per Day:  0.02
  • Content Count:  10018
  • Reputation:   2369
  • Joined:  10/28/11
  • Last Seen:  

if( !( eaclass() & EAJL_UPPER ) ){
    mes "only trancendent class can use";
    close;
}

you can refer here

https://github.com/rathena/rathena/blob/master/doc/ea_job_system.txt

  • Upvote 1
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  66
  • Topics Per Day:  0.01
  • Content Count:  167
  • Reputation:   2
  • Joined:  08/01/12
  • Last Seen:  

if( !( eaclass() & EAJL_UPPER ) ){
    mes "only trancendent class can use";
    close;
}

you can refer here

https://github.com/rathena/rathena/blob/master/doc/ea_job_system.txt

 

 

Thanks emistry that worked great! :)

I have two more questions if thats ok. How to also add extended classes to that check?? I only want it to work for trans classes and extended classes but I cant find the code in the link you give. Tried this but doesnt work:

 

    if( BaseLevel < 99 && !( eaclass() & EAJL_UPPER & EAJ_NINJA & EAJ_GUNSLINGER & EAJ_TAEKWON ) ){

 

the other question is can i reset previous made builds? a lot of players have the bugged build saved with 4x 99 stats. :(

 

Thanks so much. ^__~

Edited by HristDead
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...