viewing paste eA Job Changer 1.5.2 | Athena

Posted on the
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260
//////////////////////////////////////////////
//      Jobchanger eA-Jobsystem             //
//////////////////////////////////////////////
//      script by icescope                  //
//////////////////////////////////////////////
//      V. 1.5   Added Rebirth controle     //
//      V. 1.4.2 Killed bugs from 1.4.1     //
//      V. 1.4   Change to Baby, stat       //
//               bonus on rebirth           //
//      V. 1.3.4 Insert jump over Rebirth   //
//      V. 1.3.3 Better walk through NPC    //
//      V. 1.3.2 Added Price Controle       //
//      V. 1.2   Added Platinums            //
//      V. 1.1.1 (Labelfree)                //
//////////////////////////////////////////////
 
 
prontera,160,150,4      script  Job Changer     800,{
 
        if(!$multi_reb) set reb_times, 0;
 
        setarray @dialogues$,
        "Choose the Job which fits the best to you.",
        "You already have reached your last Job.",
        "Are you sure to choose ^00AA00",
        "Then make your choose later ^^",
        "Do you want to reborn?",
        "You are now reborn.",
        "^cc1100[Job Changer]^000000",
        "Error Message: Please Report this to an GM!",
        "Please come again soon.",
        "You don't have enough Base/JobLevel to change.",
        "Please use up all of your Skillpoints first.",
        "Please don't use a Cart/Peco Peco/Falcon if you want to change.",
        "This will need a payment of ",
        " zeny!!!",
        "You don't have enough zeny.";
 
        function SF_End_Message;
        function SF_yn;
        function SF_givePlat;
 
        if(skillpoint)  SF_End_Message(@dialogues$[10]);
        if(checkfalcon() || checkcart() || checkriding()) SF_End_Message(@dialogues$[11]);
 
        mes @dialogues$[6];
        set .@eaj, eaclass();
        if((!(.@eaj&EAJ_BASEMASK)^EAJ_NOVICE))
        {
                if(!(.@eaj&EAJL_2))
                {
                        // 1st Jobs
                        if($1_Min>$min_B && $max_B>=JobLevel && $min_B<=JobLevel && $1_Min != JobLevel && !(.@eaj&EAJL_BABY)) SF_yn(roclass(.@eaj|EAJL_BABY),$fst_price);
                        if(JobLevel<$1_Min) SF_End_Message(@dialogues$[9]);
                        if(!lastjob2)
                        {
                                mes @dialogues$[0];
                                setarray .@jobs[1], roclass(.@eaj|EAJ_SWORDMAN), roclass(.@eaj|EAJ_MAGE), roclass(.@eaj|EAJ_ARCHER), roclass(.@eaj|EAJ_ACOLYTE), roclass(.@eaj|EAJ_MERCHANT), roclass(.@eaj|EAJ_THIEF), .@eaj|EAJL_2_1,  roclass(.@eaj|EAJ_TAEKWON),  roclass(.@eaj|EAJ_GUNSLINGER), roclass(.@eaj|EAJ_NINJA),roclass(.@eaj|EAJL_BABY);
                                set .@selected$, callfunc("getJobName",(.@jobs[1]))+":"+callfunc("getJobName",(.@jobs[2]))+":"+callfunc("getJobName",(.@jobs[3]))+":"+callfunc("getJobName",(.@jobs[4]))+":"+callfunc("getJobName",(.@jobs[5]))+":"+callfunc("getJobName",(.@jobs[6]));
                                if(.@jobs[8]^-1) set .@selected$,.@selected$+":"+callfunc("getJobName",roclass(.@jobs[7]))+":"+callfunc("getJobName",(.@jobs[8]))+":"+callfunc("getJobName",(.@jobs[9]))+":"+callfunc("getJobName",(.@jobs[10]));
                                else set .@push, 6;
                                if($min_B<=JobLevel && $max_B>= JobLevel && !(.@eaj&(EAJL_UPPER|EAJL_BABY)))
                                {
                                        set .@push, .@push+1;
                                        set .@selected$, .@selected$+":"+callfunc("getJobName",(.@jobs[11]));  
                                }
                                if(.@eaj&EAJL_BABY)
                                {
                                        set .@push, .@push-1;
                                        set .@selected$, .@selected$+":"+callfunc("getJobName",roclass(.@jobs[7]));
                                }
                                set .@selected$, .@selected$+":Cancel";
                                if((select(.@selected$)+.@push)^13 ) SF_yn(.@jobs[@menu],$fst_price);
                                SF_End_Message(@dialogues$[8]);
                        }
                        SF_yn(roclass((lastjob2&EAJ_BASEMASK)|EAJL_UPPER),$fst_price);                                         
                }
                else if(!$multi_reb) SF_End_Message(@dialogues$[1]);
        }
 
        if(.@eaj&EAJL_2 || (!(roclass(.@eaj|EAJL_2)^-1) && $multi_reb) || ((.@eaj&EAJL_2) && !(roclass(.@eaj|EAJL_UPPER)^-1) && $multi_reb))
        {
                // Rebirth
                if((.@eaj&(EAJL_UPPER|EAJL_BABY) || !(roclass(.@eaj|EAJL_UPPER)^-1)) && (!$multi_reb||!$allowBreb) ) SF_End_Message(@dialogues$[1]);
                if(reb_times>127 || (!$Reb_Base[reb_times]|!$Reb_Job[reb_times])) setarray .@needed, (!$Reb_Base[reb_times])?($Reb_Base[getarraysize($Reb_Base)-1]):($Reb_Base[reb_times]), (!$Reb_Job[reb_times])?($Reb_Job[getarraysize($Reb_Job)-1]):($Reb_Job[reb_times]);
                else setarray .@needed, $Reb_Base[reb_times], $Reb_Job[reb_times];
                if(BaseLevel<.@needed || JobLevel<.@needed[1]) SF_End_Message(@dialogues$[9]);
                if($needReb) SF_yn(roclass(.@eaj|EAJL_UPPER),$reb_price);
                if((.@eaj&EAJL_BABY) && !$allowBreb) SF_End_Message(@dialogues$[1]);
                mes @dialogues$[4];
                if($prices_on) mes @dialogues$[12]+$reb_price+@dialogues$[13];
                if(select("No:Yes")-1)
                {
                        if(zeny<$reb_price && $prices_on) SF_End_Message(@dialogues$[14]);
                        if($prices_on) set zeny, zeny-$reb_price;
                        if($Job_Tree) set lastjob2, .@eaj;
                        if((roclass(.@eaj|EAJL_UPPER)^-1)) jobchange Job_Novice_High;
                        else
                        {
                                if(.@eaj&EAJL_BABY)
                                {
                                        jobchange Job_Baby;
                                        set statuspoint, $startBstats;
                                }
                                else
                                {
                                        jobchange Job_Novice;
                                        set statuspoint, 100;
                                }
                        }
                        resetlvl(1);
                        skill 142,1,0;
                        skill 143,1,0;
                        if(!$inc_type) set statuspoint, statuspoint+(reb_times>0)*$extra_stats+(((reb_times-1)>0)*(reb_times-1))*$increasement;
                        else set statuspoint, statuspoint+(reb_times>0)*$extra_stats*(pow($increasement,(reb_times-1)));
                        if($multi_reb) set reb_times, reb_times+1;
                        mes @dialogues$[5];
                }
                else mes @dialogues$[3];
                SF_End_Message(@dialogues$[8]);
        }
        else
        {
                if(JobLevel<$2_Min) SF_End_Message(@dialogues$[9]);
                if(!lastjob2)
                {
                        // 2nd Jobs    
                        set .@choose1, roclass(.@eaj|EAJL_2_1);
                        set .@choose2, roclass(.@eaj|EAJL_2_2);
                        if(!(.@choose1^-1)) SF_End_Message(@dialogues$[1]);
                        mes @dialogues$[0];
                        SF_yn(getd(".@choose"+select(callfunc("getJobName",(.@choose1))+":"+callfunc("getJobName",(.@choose2)))),$scn_price);
                }
                else
                {
                        set .@choosed, roclass(lastjob2|EAJL_UPPER);
                        SF_yn(.@choosed, $scn_price);
                }
               
        }
        SF_End_Message(@dialogues$[7]);
 
function SF_End_Message {
        mes getarg(0);
        close;
}
 
function SF_yn {
        if(!((getarg(0)&EAJ_BASEMASK)^EAJ_NOVICE))
        {
                if(BaseLevel<$SN_Min) SF_End_Message(@dialogues$[9]);
                else set getarg(0), roclass(getarg(0));
        }
        mes @dialogues$[2]+callfunc("getJobName",getarg(0))+"^000000 as your Job ?";
        if($prices_on) mes @dialogues$[12]+getarg(1)+@dialogues$[13];
        if(select("No:Yes")-1)
        {
                if(zeny<getarg(1) && $prices_on) SF_End_Message(@dialogues$[14]);
                if($prices_on) set zeny, zeny-getarg(1);
                callfunc "Job_Change", getarg(0);
                SF_givePlat(eaclass());
                if($needReb) set statuspoint, statuspoint+52;
        }
        else
        {
                mes @dialogues$[6];
                SF_End_Message(@dialogues$[3]);
        }                      
        SF_End_Message(@dialogues$[8]);
}
 
function SF_givePlat {
        if(getarg(0)&EAJL_2)
        {
                if(!(getarg(0)^(EAJ_MERCHANT|EAJL_2_2))) skill 238,1,0;
                else
                for(set .@i,0;.@i<getarraysize($job2_skills); set.@i,.@i+1)
                {
                        if(!($job2_skills[.@i]^getarg(0))) skill 1001+.@i,1,0;
                }      
               
        }
        else
        {
                skill 142,1,0;
                for(set .@i,0;.@i<getarraysize($job1_skills); set.@i,.@i+1)
                {
                        if(!($job1_skills[.@i]^getarg(0))) skill 143+.@i,1,0;
                }      
        }
}
 
OnInit:
        //
        set $extra_stats, 0;
        set $increasement, 0;
        set $inc_type, 0;
        set $allowBreb, 0;
        set $startBstats, 0;
        set $inc_base, 0;
        set $inc_job, 0;
        deletearray $Reb_Base[0], 127;
        deletearray $Reb_Job[0], 127;
        set $fst_price, 0;
        set $scn_price, 0;
        set $reb_price, 0;
        // reset options on OnInit!
 
        set $needReb, 1; // No Rebirth needed for Upper Jobs ( 1 - yes ; 0 - no )
 
        set $multi_reb, 0; // Allow multirebirth for extra Stats ( 1 - yes ; 0 - no )
 
        if($multi_reb)
        {
                set $extra_stats, 100; // Extra stats per rebirth.
                set $increasement, 2; // Increasement of extra stats per rebirth.
                set $inc_type, 1; // Type for increasement : ( 0 - Real stats more ; 1 - $extra_stats*$increasement per rebirth! )
                set $allowBreb, 1; // Allows Baby Jobs to rebirth
                if($allowBreb)  set $startBstats, 80; // Amount of stats a Baby job has after a rebirth
                //NOTE: Baby Jobs Rebirth as Baby again!
                set $inc_base, 1; // Base Level needed can increase per rebirth
                set $inc_job, 1;  // Job Level needed can increase per rebirth
        }
 
        set $Job_Tree, 0; // Use lastjob2 for saving Job before Rebirth ( 1 - yes ; 0 - no )
 
        // NOTE: If $needReb = 1 , $Job_Tree is senceless!
 
        set $1_Min, 10; // Minimum Joblvl to Change into 1st Cls
        set $2_Min, 40; // Minimum Joblvl to Change into 2nd Cls
        set $Reb_Base, 99; // Minimum Baselvl to Rebirth
        set $Reb_Job, 50; // Minimum Joblvl to Rebirth
        if($inc_base&$multi_reb) setarray $Reb_Base[1], 150, 255; // Base Level neeeded for 2nd, 3rd, 4th,.... rebirth
        if($inc_job&$multi_reb) setarray $Reb_Job[1], 70, 0; // Job Level neeeded for 2nd, 3rd, 4th,.... rebirth
        // Note: If you delete a number from this arrays its better to use 0 instead of empty.
 
 
        set $SN_Min, 45; // Minimum Baselvl to Change into Super Novice
 
        set $min_B, 5; // Minimum Joblevel to change into a Baby Job
        set $max_B, 10; // Maximum Joblevel to change into a Baby Job
        // NOTE: Change from Novice into Baby Novice only by now.
 
        set $G1_Plat, 1; // Give 1st Cls Platinum Skills on Jobchange ( 1 - yes ; 0 - no )
        set $G2_Plat, 1; // Give 2nd Cls Platinum Skills on Jobchange ( 1 - yes ; 0 - no )
        set $prices_on, 1; // If you want to have prices for Jobchanges.
 
        if($prices_on)
        {
                set $fst_price, 10000; // Price to change to 1st Jobs
                set $scn_price, 100000; // Price to change to 2nd Jobs
                set $reb_price, 1000000; // Price to Rebirth
        }
 
 
        if($G1_Plat) setarray $job1_skills, EAJ_NOVICE, EAJ_SWORDMAN, EAJ_SWORDMAN, EAJ_SWORDMAN, EAJ_ARCHER, EAJ_ARCHER, EAJ_THIEF, EAJ_THIEF, EAJ_THIEF, EAJ_THIEF, EAJ_MERCHANT, EAJ_MERCHANT, EAJ_MERCHANT, EAJ_ACOLYTE, EAJ_MAGE;
        if($G2_Plat) setarray $job2_skills, EAJ_SWORDMAN|EAJL_2_1, EAJ_SWORDMAN|EAJL_2_2, EAJ_THIEF|EAJL_2_1, EAJ_THIEF|EAJL_2_1, EAJ_THIEF|EAJL_2_2, EAJ_MAGE|EAJL_2_1, EAJ_MAGE|EAJL_2_2, EAJ_MAGE|EAJL_2_2, EAJ_ARCHER|EAJL_2_1, EAJ_ARCHER|EAJL_2_2, EAJ_ARCHER|EAJL_2_2, EAJ_MERCHANT|EAJL_2_1, EAJ_MERCHANT|EAJL_2_1, EAJ_ACOLYTE|EAJL_2_1, EAJ_ACOLYTE|EAJL_2_2, EAJ_ACOLYTE|EAJL_2_2, EAJ_MAGE|EAJL_2_2, EAJ_MAGE|EAJL_2_2, EAJ_MAGE|EAJL_2_2;
        end;
 
}
Viewed 395 times, submitted by unknown.