//===== eAthena Script ======================================= //= Master //===== By: ================================================== //= Isagani [Unleash Ragnarok Online] http://unleashro.com //= First Posted 6/16/2011 //===== Compatible With: ===================================== //= 3Ceam Revision 628 and above //===== Description: ========================================= // Master // - Job Changer // - Baby Job Changer // - Platinum Skills // - Free Reset Stats / Skills // - Character Reset // - Free Falcon / Cart / Mount //===== Enhanced features =================================== // - Job changer and Baby Job Changer uses sql // - Hassle free job change process [ less click and less choices ] // - - - shows all job change options for 1st job // - - - 2 options on chosing 2nd job // - - - Can choose at 2nd job to go for Transcendent Class or Regular Third Job // - - - No More option after completing 2nd job choice // - Avoiding exploits on creating sniper (Trans) then other jobs after novice high // - with 3rd job using 3Ceam Job IDs // - Character Reset = where max character can do max all stats by continual character reset //===== Recommended: ========================================= // - - - Deactivate this line under scripts_main.conf // import: npc/scripts_jobs.conf // - - - Change to // // import: npc/scripts_jobs.conf //===== Credits : =========================================== // - Isagani [Unleash Ragnarok Online] [http://unleashro.com] Me, Myself and I ( of course ) // - edumanilha // - m3ttwur5t (high rate stat point reset) - http://www.eathena.ws/board/index.php?showtopic=169635 //===== script begins here =================================== //yuno,155,170,6 script Master 946,{ // SQL database creation query_sql "CREATE TABLE IF NOT EXISTS `char_extension`(`char_id` int(11) unsigned NOT NULL,`main_job` smallint(6) unsigned NOT NULL default '0',`char_reset` smallint(4) unsigned NOT NULL default '0')"; // Variables - Updated to cater until Transcendent Job only : requested by rovinstar // Default #4054 for Up to Third Jobs // ------- #4008 for Up to Transcendent Jobs set .@MaxJobID, 4054; prontera,151,193,6 script Master2 946,{ mes "[Master]"; mes "What do you need ?"; if (class == 0) { menu "Change Job/Class",ChangeJob,"Change Baby Job/Class",ChangeBaby; } if ( Class == 4023 || Class >= 4024 && Class <= 4029 || Class >= 4030 && Class <= 4045 ) { menu "Change Baby Job/Class",ChangeBaby,"Free Platinum Skills",FreePlatinum,"Free Reset Stat/Skills/Char",FreeReset,"Free Cart/Falcon/Mounts",FreeCFM; } if (upper == 0 || upper == 1 ){ menu "Change Job/Class",ChangeJob,"Free Platinum Skills",FreePlatinum,"Free Reset Stat/Skills/Char",FreeReset,"Free Cart/Falcon/Mounts",FreeCFM; } if (upper == 4 || upper == 5 || upper == 6){ menu "Free Platinum Skills",FreePlatinum,"Free Reset Stat/Skills/Char",FreeReset,"Free Cart/Falcon/Mounts",FreeCFM; } ChangeJob: // added check for 1st before going callfunc "SQL_Entry_Checker" if ( class >= 7 ) { set .@Check_id2, getcharid(0); query_sql("SELECT main_job FROM char_extension WHERE char_id="+.@Check_id2, .@Main_Job2); if ( .@Main_Job2 == 0 ) callfunc "SQL_Entry_Checker"; } // IF Default #4054 for Third Jobs // IF #4008 which is for Transcendent Jobs, will no longer be able to get into third job check and stops at this point then // >= 4008, so that if the player is a Lord Knight, scripts stops here then // > 4008, will create a bug which will allow Lord Knight to become Rune Knight if ( Class >= .@MaxJobID ){ mes "You current job is the maximum job you can change you can do. I am afraid I can no longer change job you more!"; close; } callfunc "Checker_Limitation"; callfunc "Checker_Job"; goto Classify_Char; ChangeBaby: // Added limit for max job baby class - used job id of Baby Rune Knight 4096 - near ChangeBaby: if ( Class >= 4096 ){ mes "You current job is the maximum job you can change you can do. I am afraid I can no longer change job you more!"; close; } // added check for 1st before going callfunc "SQL_Entry_Checker" on baby changer // change limit baby knight if ( class >= 4030 ) { set .@Check_id2, getcharid(0); query_sql("SELECT main_job FROM char_extension WHERE char_id="+.@Check_id2, .@Main_Job2); if ( .@Main_Job2 == 0 ) callfunc "SQL_Entry_Checker"; } // Updated and added a baby novice changer - unofficial and no baby skills - added near if (class != 4023){ // Updated and || class < 4023 && class > 4045 - for baby 1st job and 2nd job to be excluded - added near if (class != 4023 if (class != 4023 || class < 4023 && class > 4045 ) { mes "Only Baby can choose this option and you are not."; set .@Check_idb2, getcharid(0); query_sql("SELECT main_job FROM char_extension WHERE char_id="+.@Check_idb2, .@Mainb_Job2); if ( .@Main_Job2 == 0 && class == 0){ // not listed yet in char_extention and still a novice mes "I see you are a novice, would you like to be become a Baby Novice ?"; menu "NO! Let me think about it.",Not_Now,"Yes, I want to become a Baby Novice!",-; jobchange 4023; set SkillPoint, 0; mes "You are now a baby!"; close; Not_Now: mes "Good bye then!"; close; } // Added close; to stop other jobs close; } callfunc "Checker_Limitation"; callfunc "Baby_Checker_Job"; goto Baby_Classify_Char; FreePlatinum: callfunc "Free_Platinum"; close; FreeReset: // bug reported by samurairukasu - updated near callfunc "Free_Reset"; // goto SQL_Entry_Checker; callfunc "SQL_Entry_Checker"; callfunc "Free_Reset"; FreeCFM: mes "Would you like to get Free Cart/Falcon/Mount ?"; callfunc "Free_Cart_Falcon_Mount"; Classify_Char: if (Class == 0 && JobLevel > 9) callfunc "First_Job"; if (Class == 4001 && JobLevel > 9) callfunc "First_Job_High"; // updated job level to 39 from 49 for Class >= 4002 && Class <= 4007 - near Classify_Char: if (Class >= 4002 && Class <= 4007 && JobLevel > 39) callfunc "Second_Job_High"; //added check on base level which is not needed - deleted - near Classify_Char: check on first job to become 2nd job if (Class >= 1 && Class <= 6 && JobLevel > 39) callfunc "Second_Job"; if (Class >= 7 && Class <= 20 && JobLevel > 49 && BaseLevel > 98) callfunc "NHigh_Third"; if (Class >= 4008 && Class <= 4021 && JobLevel > 69) callfunc "Trans_Third"; Baby_Classify_Char: if (Class == 4023 && JobLevel >= 10) callfunc "Baby_First_Job"; if (Class >= 4024 && Class <= 4029 && JobLevel > 39 ) callfunc "Baby_Second_Job"; // Added check that baby 2nd job should reach base level 99 reported by TrueNoir if (Class >= 4030 && Class <= 4045 && JobLevel <= 49 || BaseLevel > 98) callfunc "Baby_Regular_Third_Job"; end; } function script First_Job { mes "Which first job will it be then ?"; menu "Swordsman",-,"Mage",FJ1,"Archer",FJ2,"Acolyte",FJ3,"Merchant",FJ4,"Thief",FJ5,"Super Novice",FJ6,"Gunslinger",FJ7,"Ninja",FJ8,"Taekwon",FJ9; set JobLevel,1; jobchange 1; mes "You are now a Swordsman!"; close; FJ1: set JobLevel,1; jobchange 2; mes "You are now an Mage!"; close; FJ2: set JobLevel,1; jobchange 3; mes "You are now an Archer!"; close; FJ3: set JobLevel,1; jobchange 4; mes "You are now a Acolyte!"; close; FJ4: set JobLevel,1; jobchange 5; mes "You are now a Merchant!"; close; FJ5: set JobLevel,1; jobchange 6; mes "You are now a Thief!"; close; FJ6: if (Class == 0 && BaseLevel <= 39){ mes "For novice you need to be on job level 40 in order to change job to Super Novice."; close; } if (Class == 0 && JobLevel >= 40){ set JobLevel, 1; jobchange 23; mes "You are now a Super Novice!"; set .@JL_id, 18; goto Insert_Job; } FJ7: set JobLevel,1; jobchange 24; mes "You are now a Gunslinger!"; set .@JL_id, 18; goto Insert_Job; FJ8: set JobLevel,1; jobchange 25; mes "You are now a Ninja!"; set .@JL_id, 18; goto Insert_Job; FJ9: set JobLevel,1; jobchange 4046; mes "You are now a Taekwon!"; close; return; } function script Second_Job { // Optimized by showing only 2 options for ever job class and not the entire list of 2nd class // A swordman can only go for Knight or Crusader // A mage can only go for Wizard or Sage // and so on and so forth if (Class == 1){ mes "Which one would you like to change job ?"; menu "Knight",-,"Crusader",Crusader; set JobLevel,1; jobchange 7; mes "You are now a Knight"; set .@JL_id, 7; goto Insert_Job; Crusader: set JobLevel,1; jobchange 14; mes "You are now a Crusader"; set .@JL_id, 14; goto Insert_Job; } if (Class == 2){ mes "Which one would you like to change job ?"; menu "Wizard",-,"Sage",Sage; set JobLevel,1; jobchange 9; mes "You are now a Wizard"; set .@JL_id, 9; goto Insert_Job; Sage: set JobLevel,1; jobchange 16; mes "You are now a Sage"; set .@JL_id, 16; goto Insert_Job; } if (Class == 3){ mes "Which one would you like to change job ?"; menu "Hunter",-,"Bard/Dancer",BaDa; set JobLevel,1; jobchange 11; mes "You are now a Hunter"; set .@JL_id, 11; goto Insert_Job; BaDa: if (Sex == 1) { set JobLevel,1; jobchange 19; mes "You are now a Bard"; set .@JL_id, 19; goto Insert_Job; } if (Sex == 0){ set JobLevel,1; jobchange 20; mes "You are now a Dancer"; set .@JL_id, 20; goto Insert_Job; } mes "Your account has a bug. Please do a screen shot. Error : BaDa = No Gender"; close; } if (Class == 4){ mes "Which one would you like to change job ?"; menu "Priest",-,"Monk",Monk; set JobLevel,1; jobchange 8; mes "You are now a Priest"; set .@JL_id, 8; goto Insert_Job; Monk: set JobLevel,1; jobchange 15; mes "You are now a Monk"; set .@JL_id, 15; goto Insert_Job; } if (Class == 5){ mes "Which one would you like to change job ?"; menu "Blacksmith",-,"Alchemist",Alche; set JobLevel,1; jobchange 10; mes "You are now a Blacksmith"; set .@JL_id, 10; goto Insert_Job; Alche: set JobLevel,1; jobchange 18; mes "You are now a Alchemist"; set .@JL_id, 18; goto Insert_Job; } if (Class == 6){ mes "Which one would you like to change job ?"; menu "Assassin",-,"Rogue",Rouge; set JobLevel,1; jobchange 12; mes "You are now an Assassin"; set .@JL_id, 12; goto Insert_Job; Rouge: set JobLevel,1; jobchange 17; mes "You are now a Rogue"; set .@JL_id, 17; goto Insert_Job; } // Special case for Taekwon class if (Class == 4046){ mes "Which one would you like to change job ?"; menu "Star Gladiator",-,"Soul Linker",SLink; set JobLevel,1; jobchange 4047; mes "You are now a Star Gladiator"; set .@JL_id, 17; goto Insert_Job; SLinker: set JobLevel,1; jobchange 4049; mes "You are now a Soul Linker"; set .@JL_id, 17; goto Insert_Job; } Insert_Job: set .@C_id, getcharid(0); query_sql "INSERT INTO char_extension (char_id, main_job, char_reset) VALUES ("+.@C_id+","+.@JL_id+",0)"; close; return; } function script NHigh_Third { mes "Do you want to become regular third job or transcendent job and become Novice High ?"; mes "[INFO]"; mes "Regular Third job does not have access to his/her transcendent skills."; mes "Transcendent Third Job does have access to his/her transcendent skills."; next; mes "[Greatest Job Master]"; mes "Before you become a Transcendent Job, you need to start again as Novice High."; mes "Remember this action is irreversible. Think wisely."; mes "So which one will it be ?"; menu "Regular Third Job it is!", Reg_Third,"Novice High and Transcendent Third Job!",Novice_H; Reg_Third: // player chooses to become regular third job and skips transcendent class set .@C_id2, getcharid(0); query_sql("SELECT main_job FROM char_extension WHERE char_id="+.@C_id2, .@Mjob2); if (.@Mjob2 == 7) { // 7: Knight jobchange 4054; // 4054: Rune Knight goto Msg_Reg_Third; } if (.@Mjob2 == 8) { // 8: Priest jobchange 4057; // 4057: Arch Bishop goto Msg_Reg_Third; } if (.@Mjob2 == 9) { // 9: Wizard jobchange 4055; // 4055: Warlock goto Msg_Reg_Third; } if (.@Mjob2 == 10) { // 10: Blacksmith jobchange 4058; // 4058: Mechanic goto Msg_Reg_Third; } if (.@Mjob2 == 11) { // 11: Hunter jobchange 4056; // 4056: Ranger getitem 12380,1; // flute for warg goto Msg_Reg_Third; } if (.@Mjob2 == 12) { // 12: Assassin jobchange 4059; // 4059: Guillotine Cross goto Msg_Reg_Third; } if (.@Mjob2 == 14) { // 14: Crusader jobchange 4066; // 4066: Royal Guard goto Msg_Reg_Third; } if (.@Mjob2 == 15) { // 15: Monk jobchange 4070; // 4070: Sura goto Msg_Reg_Third; } if (.@Mjob2 == 16) { // 16: Sage jobchange 4067; // 4067: Sorcerer goto Msg_Reg_Third; } if (.@Mjob2 == 17) { // 17: Rogue jobchange 4072; // 4072: Shadow Chaser goto Msg_Reg_Third; } if (.@Mjob2 == 18) { // 18: Alchemist jobchange 4071; // 4071: Genetic goto Msg_Reg_Third; } if (.@Mjob2 == 19) { // 19: Bard jobchange 4068; // 4068: Minstrel goto Msg_Reg_Third; } if (.@Mjob2 == 20) { // 20: Dancer jobchange 4069; // 4069: Wanderer goto Msg_Reg_Third; } Msg_Reg_Third: resetlvl(1); set SkillPoint, 0; set StatusPoint, 100; mes "You are now a Regular Third Job. Regular Third Job does not have any Transcendent Skills."; close; Novice_H: // player chooses to go Transcendent Class! jobchange 4001; resetlvl(1); mes "You are now a Novice High!"; mes "When you reach job level 10 and used all skill points, you are ready to become first job high!"; close; return; } function script First_Job_High { set .@C_id3, getcharid(0); query_sql("SELECT main_job FROM char_extension WHERE char_id="+.@C_id3, .@Mjob3); next; // how does it work ? // checks sql for 2nd job and choose appropriate 1st job high class based on 3CeAM Job ID if (.@Mjob3 == 7) { // 7: Knight jobchange 4002; // 4002: High Swordman goto Msg_2Trancendent; } if (.@Mjob3 == 8) { // 8: Priest jobchange 4005; // 4005: High Acolyte goto Msg_2Trancendent; } if (.@Mjob3 == 9) { // 9: Wizard jobchange 4003; // 4003: High Mage goto Msg_2Trancendent; } if (.@Mjob3 == 10) { // 10: Blacksmith jobchange 4006; // 4006: High Merchant goto Msg_2Trancendent; } if (.@Mjob3 == 11) { // 11: Hunter jobchange 4004; // 4004: High Archer goto Msg_2Trancendent; } if (.@Mjob3 == 12) { // 12: Assassin jobchange 4007; // 4007: High Thief goto Msg_2Trancendent; } if (.@Mjob3 == 14) { // 14: Crusader jobchange 4002; // 4002: High Swordman goto Msg_2Trancendent; } if (.@Mjob3 == 15) { // 15: Monk jobchange 4005; // 4005: High Acolyte goto Msg_2Trancendent; } if (.@Mjob3 == 16) { // 16: Sage jobchange 4003; // 4003: High Mage goto Msg_2Trancendent; } if (.@Mjob3 == 17) { // 17: Rogue jobchange 4007; // 4007: High Thief goto Msg_2Trancendent; } if (.@Mjob3 == 18) { // 18: Alchemist jobchange 4006; // 4006: High Merchant goto Msg_2Trancendent; } if (.@Mjob3 == 19) { // 19: Bard jobchange 4004; // 4004: High Archer goto Msg_2Trancendent; } if (.@Mjob3 == 20) { // 20: Dancer jobchange 4004; // 4004: High Archer goto Msg_2Trancendent; } Msg_2Trancendent: resetlvl(4); getitem 5181,1; // Freebies in my server, delete if you dont want to give freebies mes "You are now a First Job High Class!"; close; return; } function script Second_Job_High { set .@C_id8, getcharid(0); query_sql("SELECT main_job FROM char_extension WHERE char_id="+.@C_id8, .@Mjob8); if (.@Mjob8 == 7) { // 7: Knight jobchange 4008; // 4008: Lord Knight goto Msg_Trancendent; } if (.@Mjob8 == 8) { // 8: Priest jobchange 4009; // 4009: High Priest goto Msg_Trancendent; } if (.@Mjob8 == 9) { // 9: Wizard jobchange 4010; // 4010: High Wizard goto Msg_Trancendent; } if (.@Mjob8 == 10) { // 10: Blacksmith jobchange 4011; // 4011: Whitesmith goto Msg_Trancendent; } if (.@Mjob8 == 11) { // 11: Hunter jobchange 4012; // 4012: Sniper goto Msg_Trancendent; } if (.@Mjob8 == 12) { // 12: Assassin jobchange 4013; // 4013: Assassin Cross goto Msg_Trancendent; } if (.@Mjob8 == 14) { // 14: Crusader jobchange 4015; // 4015: Paladin goto Msg_Trancendent; } if (.@Mjob8 == 15) { // 15: Monk jobchange 4016; // 4016: Champion goto Msg_Trancendent; } if (.@Mjob8 == 16) { // 16: Sage jobchange 4017; // 4017: Professor goto Msg_Trancendent; } if (.@Mjob8 == 17) { // 17: Rogue jobchange 4018; // 4018: Stalker goto Msg_Trancendent; } if (.@Mjob8 == 18) { // 18: Alchemist jobchange 4019; // 4019: Creator goto Msg_Trancendent; } if (.@Mjob8 == 19) { // 19: Bard jobchange 4020; // 4020: Clown goto Msg_Trancendent; } if (.@Mjob8 == 20) { // 20: Dancer jobchange 4021; // 4021: Gypsy goto Msg_Trancendent; } Msg_Trancendent: resetlvl(4); mes "You are now a Transcendent Class! All learned skills will be carried when you become a Transcendent Third Class!"; close; return; } function script Trans_Third { set .@C_id4, getcharid(0); query_sql("SELECT main_job FROM char_extension WHERE char_id="+.@C_id4, .@Mjob4); if (.@Mjob4 == 7) { // 7: Knight jobchange 4060; // 4060: Rune Knight goto Msg_Trans_Third; } if (.@Mjob4 == 8) { // 8: Priest jobchange 4063; // 4063: Arch Bishop goto Msg_Trans_Third; } if (.@Mjob4 == 9) { // 9: Wizard jobchange 4061; // 4061: Warlock goto Msg_Trans_Third; } if (.@Mjob4 == 10) { // 10: Blacksmith jobchange 4064; // 4064: Mechanic goto Msg_Trans_Third; } if (.@Mjob4 == 11) { // 11: Hunter jobchange 4062; // 4062: Ranger getitem 12380,1; // flute for warg goto Msg_Trans_Third; } if (.@Mjob4 == 12) { // 12: Assassin jobchange 4065; // 4065: Guillotine Cross goto Msg_Trans_Third; } if (.@Mjob4 == 14) { // 14: Crusader jobchange 4073; // 4073: Royal Guard goto Msg_Trans_Third; } if (.@Mjob4 == 15) { // 15: Monk jobchange 4077; // 4077: Sura goto Msg_Trans_Third; } if (.@Mjob4 == 16) { // 16: Sage jobchange 4074; // 4074: Sorcerer goto Msg_Trans_Third; } if (.@Mjob4 == 17) { // 17: Rogue jobchange 4079; // 4079: Shadow Chaser goto Msg_Trans_Third; } if (.@Mjob4 == 18) { // 18: Alchemist jobchange 4078; // 4078: Genetic goto Msg_Trans_Third; } if (.@Mjob4 == 19) { // 19: Bard jobchange 4075; // 4075: Minstrel goto Msg_Trans_Third; } if (.@Mjob4 == 20) { // 20: Dancer jobchange 4076; // 4076: Wanderer goto Msg_Trans_Third; } Msg_Trans_Third: // updated resetlvl(4); into resetlvl(1); near Msg_Trans_Third: resetlvl(1); set SkillPoint, 118; // 49 + 69 = 118 set StatusPoint, 100; mes "You are now a Transcendent Third Class! You have access to all Transcendent skills for your job!"; close; return; } function script Baby_First_Job { // updated function of baby super novice into Baby_FJ6 - near menu "Baby Swordsman" mes "Which baby first job will it be then ?"; menu "Baby Swordsman",-,"Baby Mage",Baby_FJ1,"Baby Archer",Baby_FJ2,"Baby Acolyte",Baby_FJ3,"Baby Merchant",Baby_FJ4,"Baby Thief",Baby_FJ5,"Baby Super Novice",Baby_FJ6; set JobLevel,1; jobchange 4024; mes "You are now a Baby Swordsman!"; close; Baby_FJ1: set JobLevel,1; jobchange 4025; mes "You are now a Baby Mage!"; close; Baby_FJ2: set JobLevel,1; jobchange 4026; mes "You are now a Baby Archer!"; close; Baby_FJ3: set JobLevel,1; jobchange 4027; mes "You are now a Baby Acolyte!"; close; Baby_FJ4: set JobLevel,1; jobchange 4028; mes "You are now a Baby Merchant!"; close; Baby_FJ5: set JobLevel,1; jobchange 4029; mes "You are now a Baby Thief!"; close; Baby_FJ6: if (Class == 4023 && JobLevel <= 39){ mes "For baby novice you need to be on job level 40 in order to change job to Super Baby Novice."; close; } if (Class == 4023 && JobLevel > 39){ set JobLevel, 1; jobchange 4045; mes "You are now a Super Baby Novice!"; set .@JL_id, 18; set .@C_id, getcharid(0); query_sql "INSERT INTO char_extension (char_id, main_job, char_reset) VALUES ("+.@C_id+","+.@JL_id+",0)"; close; } return; } function script Baby_Second_Job { if (Class == 4024){ mes "Which one would you like to change job ?"; menu "Baby Knight",-,"Baby Crusader",Baby_Crusader; set JobLevel,1; jobchange 4030; mes "You are now a Baby Knight"; set .@JL_id, 4030; goto Baby_Insert_Job; Baby_Crusader: set JobLevel,1; jobchange 4037; mes "You are now a Baby Crusader"; set .@JL_id, 4037; goto Baby_Insert_Job; } if (Class == 4025){ mes "Which one would you like to change job ?"; menu "Baby Wizard",-,"Baby Sage",Baby_Sage; set JobLevel,1; jobchange 4032; mes "You are now a Baby Wizard"; set .@JL_id, 4032; goto Baby_Insert_Job; Baby_Sage: set JobLevel,1; jobchange 4039; mes "You are now a Sage"; set .@JL_id, 4039; goto Baby_Insert_Job; } if (Class == 4026){ mes "Which one would you like to change job ?"; menu "Baby Hunter",-,"Baby Bard/Dancer",Baby_BaDa; set JobLevel,1; jobchange 4034; mes "You are now a Baby Hunter"; set .@JL_id, 4034; goto Baby_Insert_Job; Baby_BaDa: if (Sex == 1) { set JobLevel,1; jobchange 4042; mes "You are now a Baby Bard"; set .@JL_id, 4042; goto Baby_Insert_Job; } if (Sex == 0){ set JobLevel,1; jobchange 4043; mes "You are now a Baby Dancer"; set .@JL_id, 4043; goto Baby_Insert_Job; } mes "Your account has a bug. Please do a screen shot. Error : Baby_BaDa = NG"; close; } if (Class == 4027){ mes "Which one would you like to change job ?"; menu "Baby Priest",-,"Baby Monk",Baby_Monk; set JobLevel,1; jobchange 4031; mes "You are now a Baby Priest"; set .@JL_id, 4031; goto Baby_Insert_Job; Baby_Monk: set JobLevel,1; jobchange 4038; mes "You are now a Baby Monk"; set .@JL_id, 4038; goto Baby_Insert_Job; } if (Class == 4028){ mes "Which one would you like to change job ?"; menu "Baby Blacksmith",-,"Baby Alchemist",Baby_Alche; set JobLevel,1; jobchange 4033; mes "You are now a Baby Blacksmith"; set .@JL_id, 4033; goto Baby_Insert_Job; Baby_Alche: set JobLevel,1; jobchange 4041; mes "You are now a Baby Alchemist"; set .@JL_id, 4041; goto Insert_Job; } if (Class == 4029){ mes "Which one would you like to change job ?"; menu "Baby Assassin",-,"Baby Rogue",Baby_Rouge; set JobLevel,1; jobchange 4035; mes "You are now an Baby Assassin"; set .@JL_id, 4035; goto Baby_Insert_Job; Baby_Rouge: set JobLevel,1; jobchange 4040; mes "You are now a Baby Rogue"; set .@JL_id, 4040; goto Baby_Insert_Job; } Baby_Insert_Job: set .@C_id, getcharid(0); query_sql "INSERT INTO char_extension (char_id, main_job, char_reset) VALUES ("+.@C_id+","+.@JL_id+",0)"; close; return; } function script Baby_Regular_Third_Job { set .@C_id2, getcharid(0); query_sql("SELECT main_job FROM char_extension WHERE char_id="+.@C_id2, .@Mjob2); if (.@Mjob2 == 4030) { jobchange 4096; goto Msg_Reg_Baby_Third; } if (.@Mjob2 == 4031) { jobchange 4099; goto Msg_Reg_Baby_Third; } if (.@Mjob2 == 4032) { jobchange 4097; goto Msg_Reg_Baby_Third; } if (.@Mjob2 == 4033) { jobchange 4100; goto Msg_Reg_Baby_Third; } if (.@Mjob2 == 4034) { jobchange 4098; getitem 12380,1; // flute for warg goto Msg_Reg_Baby_Third; } if (.@Mjob2 == 4035) { jobchange 4101; goto Msg_Reg_Baby_Third; } if (.@Mjob2 == 4037) { jobchange 4102; goto Msg_Reg_Baby_Third; } if (.@Mjob2 == 4038) { jobchange 4106; goto Msg_Reg_Baby_Third; } if (.@Mjob2 == 4039) { jobchange 4103; goto Msg_Reg_Baby_Third; } if (.@Mjob2 == 4040) { jobchange 4108; goto Msg_Reg_Baby_Third; } if (.@Mjob2 == 4041) { jobchange 4107; goto Msg_Reg_Baby_Third; } if (.@Mjob2 == 4042) { jobchange 4104; goto Msg_Reg_Baby_Third; } if (.@Mjob2 == 4043) { jobchange 4105; goto Msg_Reg_Baby_Third; } Msg_Reg_Baby_Third: // updated resetlvl(4); into resetlvl(1); near Msg_Reg_Baby_Third: resetlvl(1); set SkillPoint, 0; set StatusPoint, 100; mes "You are now a Regular Baby Third Job."; mes" Regular Baby Third Job does not have any Transcendent Skills."; close; return; } function script Baby_Checker_Job { if (Class == 4023 && JobLevel <= 9) { mes "For baby novice, you need to be on job level 10 in order to change job."; close; } if (Class >= 4024 && Class <= 4029 && JobLevel <= 39){ mes "For baby first job, you need to be on job level 40 in order to change job."; close; } // Added check that 2nd job should reach base level 99 reported by TrueNoir if (Class >= 4030 && Class <= 4045 && JobLevel <= 49 || BaseLevel <= 98){ mes "For baby second job, you need to be on base level 99 and job level 50 in order to change job."; close; } // Added return; near script Baby_Checker_Job return; } function script Checker_Job { // Updated Job Level Requirement Check from < MaxValue into <= MaxValue - 1 to fixed bug reported by samurairukasu if (Class == 0 && JobLevel < 10) || (Class == 4001 && JobLevel <= 9){ mes "For novice/novice high, you need to be on job level 10 in order to change job."; close; } if (Class >= 1 && Class <= 6 && JobLevel <= 39 || Class == 4046 && JobLevel <= 39){ mes "For first job/taekwon, you need to be on job level 40 in order to change job."; close; } // Added check that 2nd job should reach base level 99 reported by TrueNoir // updated operator and logic is job level is less or equal to 49 or base level is less than or equal to 98, then not good if (Class >= 7 && Class <= 20 ) { if ( JobLevel <= 49 || BaseLevel <= 98){ mes "For second job, you need to be on base level 99 and job level 50 in order to change job."; close; } } // Added check that 2nd job should reach base level 99 reported by TrueNoir (just in case) // Deleted line to check base level since it is not needed and lower job requirement from 50 to 40 - near 2nd job should reach base level 99 reported by TrueNoir (just in case) if (Class >= 4002 && Class <= 4007 && JobLevel <= 39){ mes "For second job high, you need to be at least job level 40 in order to change job."; close; } // Added check that 2nd job should reach base level 99 and job 70 // updated operator and logic is job level is less or equal to 69 or base level is less than or equal to 98, then not good if (Class >= 4008 && Class <= 4021 ){ if ( JobLevel <= 69 || BaseLevel <= 98){ mes "For Transcendent Class, you need to be on Base Level 99 and Job Level 70 in order to change job."; close; } } return; } function script Checker_Limitation { if(SkillPoint != 0){ mes "I'm sorry, please use up all your skill points before changing jobs"; mes "Please come again soon!"; close; } if(checkriding()) { mes "You are on mount mode, please unmount before changing."; close; } if(checkcart()) { mes "Please remove your Cart before changing."; close; } if(checkfalcon()) { mes "Please release your Falcon before changing."; close; } return; } function script SQL_Entry_Checker { set .@C_id9, getcharid(0); query_sql("SELECT main_job FROM char_extension WHERE char_id="+.@C_id9, .@Mjob9); if ( .@Mjob9 != 0 ) // listed already since there is a value return; if ( .@Mjob9 == 0 ){ // not listed or not existing in the sql // for knight, checks if you are already a Lord Knight or Rune Knight Regular or Transcendent Rune Knight if ( class == 4008 || class == 4054 || class == 4060 ) { set .@JL_id, 7; mes "You have not use this NPC yet! Adding Job base Knight!"; goto Add_Job_Entry; } // for baby knight or baby regular third class if ( class == 4096 || class == 4030 ) { set .@JL_id, 4030; mes "You have not use this NPC yet! Adding Job base Baby Knight!"; goto Add_Job_Entry; } // for crusader if ( class == 4015 || class == 4066 || class == 4073 ) { set .@JL_id, 14; mes "You have not use this NPC yet! Adding Job base Crusader!"; goto Add_Job_Entry; } // for baby crusader if ( class == 4102 || class == 4037 ) { set .@JL_id, 4037; mes "You have not use this NPC yet! Adding Job base Baby Crusader!"; goto Add_Job_Entry; } // for priest if ( class == 4009 || class == 4057 || class == 4063 ) { set .@JL_id, 8; mes "You have not use this NPC yet! Adding Job base Priest!"; goto Add_Job_Entry; } // for baby priest if ( class == 4099 || class == 4031 ) { set .@JL_id, 4031; mes "You have not use this NPC yet! Adding Job base Baby Priest!"; goto Add_Job_Entry; } // for monk if ( class == 4016 || class == 4070 || class == 4077 ) { set .@JL_id, 15; mes "You have not use this NPC yet! Adding Job base Monk!"; goto Add_Job_Entry; } // for baby monk if ( class == 4106 || class == 4038 ) { set .@JL_id, 4038; mes "You have not use this NPC yet! Adding Job base Baby Monk!"; goto Add_Job_Entry; } // for wizard if ( class == 4010 || class == 4055 || class == 4061 ) { set .@JL_id, 9; mes "You have not use this NPC yet! Adding Job base Wizard!"; goto Add_Job_Entry; } // for baby wizard if ( class == 4097 || class == 4032 ) { set .@JL_id, 4032; mes "You have not use this NPC yet! Adding Job base Baby Wizard!"; goto Add_Job_Entry; } // for sage if ( class == 4017 || class == 4067 || class == 4074 ) { set .@JL_id, 16; mes "You have not use this NPC yet! Adding Job base Sage!"; goto Add_Job_Entry; } // for baby sage if ( class == 4103 || class == 4039 ) { set .@JL_id, 4039; mes "You have not use this NPC yet! Adding Job base Baby Sage!"; goto Add_Job_Entry; } // for assassin if ( class == 4013 || class == 4059 || class == 4065 ) { set .@JL_id, 12; mes "You have not use this NPC yet! Adding Job base Assassin!"; goto Add_Job_Entry; } // for baby assassin if ( class == 4101 || class == 4035 ) { set .@JL_id, 4035; mes "You have not use this NPC yet! Adding Job base Baby Assassin!"; goto Add_Job_Entry; } // for rouge if ( class == 4018 || class == 4072 || class == 4079 ) { set .@JL_id, 17; mes "You have not use this NPC yet! Adding Job base Rouge!"; goto Add_Job_Entry; } // for baby rouge if ( class == 4108 || class == 4040 ) { set .@JL_id, 4040; mes "You have not use this NPC yet! Adding Job base Baby Rouge!"; goto Add_Job_Entry; } // for blacksmith if ( class == 4011 || class == 4058 || class == 4064 ) { set .@JL_id, 10; mes "You have not use this NPC yet! Adding Job base Blacksmith!"; goto Add_Job_Entry; } // for baby blacksmith if ( class == 4100 || class == 4033 ) { set .@JL_id, 4033; mes "You have not use this NPC yet! Adding Job base Baby Blacksmith!"; goto Add_Job_Entry; } // for alchemist if ( class == 4019 || class == 4071 || class == 4078 ) { set .@JL_id, 18; mes "You have not use this NPC yet! Adding Job base Alchemist!"; goto Add_Job_Entry; } // for baby alchemist if ( class == 4107 || class == 4041 ) { set .@JL_id, 4041; mes "You have not use this NPC yet! Adding Job base Baby Alchemist!"; goto Add_Job_Entry; } // for hunter if ( class == 4012 || class == 4056 || class == 4062 ) { set .@JL_id, 11; mes "You have not use this NPC yet! Adding Job base Hunter!"; goto Add_Job_Entry; } // for baby hunter if ( class == 4098 || class == 4034 ) { set .@JL_id, 4034; mes "You have not use this NPC yet! Adding Job base Baby Hunter!"; goto Add_Job_Entry; } // for bard/dancer if ( class == 4020 || class == 4068 || class == 4075 ) { set .@JL_id, 19; mes "You have not use this NPC yet! Adding Job base Bard!"; goto Add_Job_Entry; } if ( class == 4021 || class == 4069 || class == 4076 ) { set .@JL_id, 20; mes "You have not use this NPC yet! Adding Job base Dancer!"; goto Add_Job_Entry; } // for baby bard/dancer if ( class == 4104 || class == 4042 ) { set .@JL_id, 4042; mes "You have not use this NPC yet! Adding Job base Baby Bard!"; goto Add_Job_Entry; } if ( class == 4105 || class == 4043 ) { set .@JL_id, 4043; mes "You have not use this NPC yet! Adding Job base Baby Dancer!"; goto Add_Job_Entry; } if ( job == 4001) { mes "Which Transcendent Class would you like to become ?"; menu "Lord Knight",J_LordKnight,"Paladin",J_Paladin,"High Wizard",J_HighWizard,"Professor",J_Professor,"Sniper",J_Sniper,"Clown/Gypsy",J_Clown_Gypsy,"High Priest",J_HighPriest,"Champion",J_Champion,"Whitesmith",J_Whitesmith,"Biochemist",J_Biochemist,"Assassin Cross",J_AssassinCross,"Stalker",J_Stalker; // for High Swordman J_LordKnight: jobchange 4002; resetlvl(4); set .@JL_id, 7; mes "You have not use this NPC yet! Adding Job base Knight!"; goto Add_Job_Entry; J_Paladin: jobchange 4002; resetlvl(4); set .@JL_id, 14; mes "You have not use this NPC yet! Adding Job base Crusader!"; goto Add_Job_Entry; // for High Mage J_HighWizard: jobchange 4003; resetlvl(4); set .@JL_id, 9; mes "You have not use this NPC yet! Adding Job base Wizard!"; goto Add_Job_Entry; J_Professor: jobchange 4003; resetlvl(4); set .@JL_id, 6; mes "You have not use this NPC yet! Adding Job base Sage!"; goto Add_Job_Entry; // for High Archer J_Sniper: jobchange 4004; resetlvl(4); set .@JL_id, 11; mes "You have not use this NPC yet! Adding Job base Hunter!"; goto Add_Job_Entry; J_Clown_Gypsy: if (Sex == 1) jobchange 4004; resetlvl(4); set .@JL_id, 19; // bard mes "You have not use this NPC yet! Adding Job base Bard!"; goto Add_Job_Entry; if (Sex == 0) jobchange 4004; resetlvl(4); set .@JL_id, 20; // dancer mes "You have not use this NPC yet! Adding Job base Dancer!"; goto Add_Job_Entry; // for High Acolyte J_HighPriest: jobchange 4005; resetlvl(4); set .@JL_id, 8; mes "You have not use this NPC yet! Adding Job base Priest!"; goto Add_Job_Entry; J_Champion: jobchange 4005; resetlvl(4); set .@JL_id, 15; mes "You have not use this NPC yet! Adding Job base Monk!"; goto Add_Job_Entry; // for High Merchant J_Whitesmith: jobchange 4006; resetlvl(4); set .@JL_id, 10; mes "You have not use this NPC yet! Adding Job base Blacksmith!"; goto Add_Job_Entry; J_Biochemist: jobchange 4006; resetlvl(4); set .@JL_id, 18; mes "You have not use this NPC yet! Adding Job base Alchemist!"; goto Add_Job_Entry; // for High Thief J_AssassinCross: jobchange 4007; resetlvl(4); set .@JL_id, 12; mes "You have not use this NPC yet! Adding Job base Assassin!"; goto Add_Job_Entry; J_Stalker: jobchange 4007; resetlvl(4); set .@JL_id, 17; mes "You have not use this NPC yet! Adding Job base Rouge!"; goto Add_Job_Entry; } } return; Add_Job_Entry: set .@C_id, getcharid(0); query_sql "INSERT INTO char_extension (char_id, main_job, char_reset) VALUES ("+.@C_id+","+.@JL_id+",0)"; close; } function script Free_Cart_Falcon_Mount { menu "Free Cart",Free_Cart,"Free Falcon",Free_Falcon,"Free Mount",Free_Mount; Free_Cart: if(checkcart()){ mes "You already have a Cart."; close; } if ( getskilllv("MC_PUSHCART") > 0 ) { setcart; mes "There you go, you now have a Cart!"; close; } else { mes "You do not have any cart skill at all!"; close; } Free_Falcon: if(checkfalcon()){ mes "You already have a Falcon."; close; } if ( getskilllv("HT_FALCON") > 0 ) { setfalcon; mes "There you go, you now have a Falcon!"; close; } else { mes "You do not have any Falcon skill at all!"; close; } Free_Mount: if(checkriding()){ mes "You are currently on a Mount."; close; } if ( Class == 4102 || Class == 4073 || Class == 4066 || Class == 7 || Class == 4030 || Class == 14 || Class == 4037 ) { if (getskilllv("KN_RIDING") > 0 ) { setriding; mes "There you go, you now have a Mount!"; close; } else { mes "Your mount skill is not active, please have a skill point on it!"; close; } } if ( Class == 4096 || Class == 4060 || Class == 4054 ) { if ( getskilllv("KN_RIDING") > 0 && getskilllv("RK_DRAGONTRAINING") > 0 ) { mes "You can choose five different color type dragon."; mes "Which one will it be then?"; menu "Green Dragon",Green_Dragon,"Black_Dragon",Black_Dragon,"White Dragon",White_Dragon,"Blue Dragon",Blue_Dragon,"Red",Red_Dragon; Green_Dragon: atcommand strcharinfo(0)+":@mount 1"; mes "There you go, you now have a Green Dragon!"; close; Black_Dragon: atcommand strcharinfo(0)+":@mount 2"; mes "There you go, you now have a Black Dragon!"; close; White_Dragon: atcommand strcharinfo(0)+":@mount 3"; mes "There you go, you now have a White Dragon!"; close; Blue_Dragon: atcommand strcharinfo(0)+":@mount 4"; mes "There you go, you now have a Blue Dragon!"; close; Red_Dragon: atcommand strcharinfo(0)+":@mount 5"; mes "There you go, you now have a Red Dragon!"; close; } else { mes "You need to have Peco Peco Riding and Dragon Training skills active for you to have a Dragon Mount!"; close; } } if (Class == 4098 || Class == 4062 || Class == 4056) { if ( getskilllv("RA_WUGMASTERY") > 0 ) { atcommand strcharinfo(0)+":@mount"; mes "There you go, you now have a Warg"; close; } else { mes "Your Warg Mastery is not active! Have a skill point on it to get a Warg!"; close; } } if ( Class == 4100 || Class == 4064 || Class == 4058 ) { if ( getskilllv("NC_MADOLICENCE") > 0 ){ atcommand strcharinfo(0)+":@mount"; mes "There you go, you now have a Mado"; close; } else { mes "Your Mado License is not active! Have a skill point on it to get a Mado !"; close; } } else { mes "We do not have an active mount for your job class for now."; mes "A day will come when all jobs will get a mount!."; mes "Once the day will come, we will announce it server wide!."; close; } return; } function script Free_Reset { menu "Free Reset Skills",FreeRS,"Free Reset Status Points",FreeRSP,"Free Reset Character",FreeRC; FreeRS: resetskill; set .@C_id3, getcharid(0); query_sql("SELECT char_reset FROM char_extension WHERE char_id="+.@C_id3, .@Creset3); set SkillPoint, SkillPoint + .@Creset3; // Adds Skills Points mes "Skill Reset Done!"; close; FreeRSP: set .@i, 1; while ( .@i <= baselevel ) { set .@stpoint, .@stpoint + ( .@i + 14 ) /5 ; set .@i, .@i +1 ; } set .@stpoint, .@stpoint - 3; if ( upper != 0 ) set .@stpoint, .@stpoint + 100; else set .@stpoint, .@stpoint + 48; set .@counter2, 0; set .@diffStats, 0; if (BaseLevel >= 106){ set .@addStat, 1; for ( set .@diffLeveL, 106; .@diffLevel < BaseLevel + 1; set .@diffLeveL, .@diffLevel + 1){ set .@counter2, .@counter2 + 1; set .@diffStat, .@diffStat + .@addStat; if ( .@counter2 == 10 ){ set .@addStat, .@addStat + 1; set .@counter2, 0; } } } set .@C_id33, getcharid(0); query_sql("SELECT char_reset FROM char_extension WHERE char_id="+.@C_id33, .@Creset33); set .@NewStat33, 100 * .@Creset33; set .@AddStat33, .@AddStat33 + 10 * .@Creset33; set .@NewStat33, .@NewStat33 + .@AddStat33; set .@stpoint, .@stpoint - .@diffStat + .@NewStat33; mes "Stat Points you should have = "+ .@stpoint; mes "Reset now ?"; next; if ( select ( "Yes:No" ) == 2 ) close; resetstatus; if ( .@stpoint > 30000 ) { set statuspoint, 30000; set statuspstore, .@stpoint - 30000; } else{ set StatusPoint, .@stpoint; } mes "Reset Status Done."; close; FreeRC: // gives additional Status Points and Skill Points if (baselevel >= 150 && joblevel >= 80) { set .@C_id3, getcharid(0); query_sql("SELECT char_reset FROM char_extension WHERE char_id="+.@C_id3, .@Creset3); resetstatus; resetskill; resetlvl(1); set SkillPoint,118; // 49 + 69 = 118 set StatusPoint, 100; set .@Creset3, .@Creset3 + 1; set .@NewStat, 100 * .@Creset3; set .@AddStat, .@AddStat + 10 * .@Creset3; set .@NewStat, .@NewStat + .@AddStat; set StatusPoint, StatusPoint + .@NewStat; // Updates Status Points set SkillPoint, SkillPoint + .@Creset3; // Adds Skills Points query_sql("UPDATE char_extension SET char_reset="+.@Creset3+" WHERE char_id="+.@C_id3); mes "You have successfully did a character reset for "+.@Creset3 +" already."; mes "Now you have "+.@NewStat+" starting status points"; close; } else { mes "Only Base Level 150 with Job Level 80 can do Character Reset."; close; } return; } function script Free_Platinum { // ***** Simply Adds all possible platinum skills a job can have // ***** Checks both baby, regular and third jobs // ***** Does not check if the platinum skill(s) has been added already since at most it will only be at level one mes "Adding Platinum Skills as applicable."; skill 142,1,0; // First Aid mes "Platinum Skill : First Aid [Added] ! "; if (Class == 0 || Class == 4023 || Class == 23 || Class == 4001 || Class == 4045 ) { skill 143,1,0; // Play Dead mes "Platinum Skill : Play Dead [Added] ! "; } if ( Class == 1 || Class == 7 || Class == 14 || Class == 4002 || Class == 4008 || Class == 4015 || Class == 4054 || Class == 4066 || Class == 4060 || Class == 4073 || Class == 4024 || Class == 4030 || Class == 4037 || Class == 4096 || Class == 4102 ) { skill 144,1,0; // Moving HP-Recovery mes "Platinum Skill : Moving HP-Recovery [Added] ! "; skill 145,1,0; // Fatal Blow mes "Platinum Skill : Fatal Blow [Added] ! "; skill 146,1,0; // Auto Berserk mes "Platinum Skill : Auto Berserk [Added] ! "; } if ( Class == 2 || Class == 9 || Class == 16 || Class == 4003 || Class == 4010 || Class == 4017 || Class == 4061 || Class == 4074 || Class == 4025 || Class == 4032 || Class == 4039 || Class == 4055 || Class == 4067 || Class == 4097 || Class == 4103) { skill 157,1,0; // Energy Coat mes "Platinum Skill : Energy Coat [Added] ! "; } if ( Class == 3 || Class == 11 || Class == 19 || Class == 20 || Class == 4004 || Class == 4012 || Class == 4020 || Class == 4021 || Class == 4062 || Class == 4075 || Class == 4076 || Class == 4026 || Class == 4034 || Class == 4042 || Class == 4043 || Class == 4056 || Class == 4068 || Class == 4069 || Class == 4098 || Class == 4104 || Class == 4105 ) { skill 147,1,0; // Arrow Crafting mes "Platinum Skill : Arrow Crafting [Added] ! "; skill 148,1,0; // Arrow Repel mes "Platinum Skill : Arrow Repel [Added] ! "; } if ( Class == 5 || Class == 10 || Class == 18 || Class == 4006 || Class == 4011 || Class == 4019 || Class == 4064 || Class == 4078 || Class == 4028 || Class == 4033 || Class == 4041 || Class == 4058 || Class == 4071 || Class == 4100 || Class == 4107 ) { skill 153,1,0; // Cart Revolution mes "Platinum Skill : Cart Revolution [Added] ! "; skill 154,1,0; // Change Cart mes "Platinum Skill : Change Cart [Added] ! "; skill 155,1,0; // Crazy Uproar mes "Platinum Skill : Crazy Uproar [Added] ! "; } if ( Class == 6 || Class == 12 || Class == 17 || Class == 4007 || Class == 4013 || Class == 4018 || Class == 4065 || Class == 4079 || Class == 4029 || Class == 4035 || Class == 4040 || Class == 4059 || Class == 4072 || Class == 4101 || Class == 4108 ) { skill 149,1,0; // Sand Attack mes "Platinum Skill : Sand Attack [Added] ! "; skill 150,1,0; // Back Slide mes "Platinum Skill : Back Slide [Added] ! "; skill 151,1,0; // Find Stone mes "Platinum Skill : Find Stone [Added] ! "; skill 152,1,0; // Stone Fling mes "Platinum Skill : Stone Fling [Added] ! "; } if ( Class == 4 || Class == 8 || Class == 15 || Class == 4005 || Class == 4009 || Class == 4016 || Class == 4063 || Class == 4077 || Class == 4027 || Class == 4031 || Class == 4038 || Class == 4057 || Class == 4070 || Class == 4099 || Class == 4106 ) { skill 156,1,0; // Holy Light mes "Platinum Skill : Holy Light [Added] ! "; } if ( Class == 7 || Class == 4008 || Class == 4054 || Class == 4060 || Class == 4030 || Class == 4096 ) { skill 1001,1,0; // Charge Attack mes "Platinum Skill : Charge Attack [Added] ! "; } if ( Class == 14 || Class == 4015 || Class == 4066 || Class == 4073 || Class == 4037 || Class == 4102 ) { skill 1002,1,0; // Shrink mes "Platinum Skill : Shrink [Added] ! "; } if ( Class == 2 || Class == 9 || Class == 4010 || Class == 4061 || Class == 4032 || Class == 4055 || Class == 4097 ) { skill 1006,1,0; // Sight Blaster mes "Platinum Skill : Sight Blaster [Added] ! "; } if ( Class == 2 || Class == 16 || Class == 4017 || Class == 4074 || Class == 4039 || Class == 4067 || Class == 4103) { skill 1007,1,0; // Create Elemental Converter mes "Platinum Skill : Create Elemental Converter [Added] ! "; skill 1008,1,0; // Elemental Change Water mes "Platinum Skill : Elemental Change Water [Added] ! "; skill 1017,1,0; // Elemental Change Earth mes "Platinum Skill : Elemental Change Earth [Added] ! "; skill 1018,1,0; // Elemental Change Fire mes "Platinum Skill : Elemental Change Fire [Added] ! "; skill 1019,1,0; // Elemental Change Wind mes "Platinum Skill : Elemental Change Wind [Added] ! "; } if ( Class == 11 || Class == 4012 || Class == 4062 || Class == 4034 || Class == 4056 || Class == 4098 ) { skill 1009,1,0; // Phantasmic Arrow mes "Platinum Skill : Phantasmic Arrow [Added] ! "; } if ( Class == 19 || Class == 4020 || Class == 4075 || Class == 4068 || Class == 4104 ) { skill 1010,1,0; // Pang Voice mes "Platinum Skill : Pang Voice [Added] ! "; } if ( Class == 20 || Class == 4021 || Class == 4076 || Class == 4069 || Class == 4105 ) { skill 1011,1,0; // Wink of Charm mes "Platinum Skill : Wink of Charm [Added] ! "; } if ( Class == 10 || Class == 4011 || Class == 4064 || Class == 4028 || Class == 4033 || Class == 4058 || Class == 4100 ) { skill 1012,1,0; // Unfair Trick mes "Platinum Skill : Unfair Trick [Added] ! "; skill 1013,1,0; // Greed mes "Platinum Skill : Greed [Added] ! "; } if ( Class == 18 || Class == 4019 || Class == 4078 || Class == 4028 || Class == 4041 || Class == 4071 || Class == 4107 ) { skill 238,1,0; // Bioethics mes "Platinum Skill : Bioethics [Added] ! "; } if ( Class == 12 || Class == 4013 || Class == 4065 || Class == 4035 || Class == 4059 || Class == 4101 ) { skill 1003,1,0; // Sonic Acceleration mes "Platinum Skill : Sonic Acceleration [Added] ! "; skill 1004,1,0; // Throw Venom Knife mes "Platinum Skill : Throw Venom Knife [Added] ! "; } if ( Class == 17 || Class == 4018 || Class == 4079 || Class == 4040 || Class == 4072 || Class == 4108 ) { skill 1005,1,0; // Close Confine mes "Platinum Skill : Close Confine [Added] ! "; } if ( Class == 8 || Class == 4009 || Class == 4063 || Class == 4031 || Class == 4057 || Class == 4099 ) { skill 1014,1,0; // Redemptio mes "Platinum Skill : Redemptio [Added] ! "; } if ( Class == 15 || Class == 4016 || Class == 4077 || Class == 4038 || Class == 4070 || Class == 4106 ) { skill 1015,1,0; // Ki Translation mes "Platinum Skill : Ki Translation [Added] ! "; skill 1016,1,0; // Ki Explosion mes "Platinum Skill : Ki Explosion [Added] ! "; } return; } // //====== SQL ================================================================= // Do not forget to add this table on your SQL!!! // WARNING !!! // NOT NEEDED FOR 1.2 and above version see changelog above // xxx CREATE TABLE IF NOT EXISTS `char_extension`( // xxx `char_id` int(11) unsigned NOT NULL, // xxx `main_job` smallint(6) unsigned NOT NULL default '0', // xxx `char_reset` smallint(4) unsigned NOT NULL default '0', // xxx KEY `char_id` (`char_id`) // xxx ) ENGINE=MyISAM; // //===== Current Releases and Changelogs: ===================================== //= 1.1 - 6-16-2011 //= 1.2 - Added check for characters that did not use Master NPC to change job : requested by mirabell //= ----- Updated to cater until Transcendent Job only : requested by rovinstar //= ----- Includes Entry of non Master NPC when choosing Job Change or Baby Job Change or Character Reset //= ----- Added auto database create at SQL database creation //= 1.3 - Updated to make sure Novice High who first tried to use official quest can use the NPC and upgrade //= 1.4 - Took out "Abort" option on main menu since "cancel" button exist on the main window //= - Updated Free Platinum , Free Reset and Free Cart Falcon Mount into functions //= - Added variable .@MaxJobID to check maximum job id and giving the option of choosing max job of //= - - - transcendent or third jobs : requested by rovinstar //= - Adding the variable .@MaxJobID, results to one script this time since admin has the option of //= - - - choosing max job of transcendent or third jobs //= - Added check that baby 2nf job, 2nd job and 2nd job high should reach base level 99 reported by TrueNoir //= - Updated SQL_Entry_Checker into function and use Add_Job_Entry instead of Insert_Job //= - Updated check on super novice instead of Job Check <= 39, should be Base check <= 39 //= - Updated Job Level Requirement Check from < MaxValue into <= MaxValue - 1 to fixed bug reported by samurairukasu //= - Added some labels on job change and what job it becomes based on 3CeAM Job IDs //= - Character Reset now gives additional Skill Points //= - Added { brackets } on baby class which is missing //= - Clean up and aligned the script correctly //= - Added location of NPC at prontera //= 2.0 - UPDATED RELEASE - 6-22-2011 //= 2.0.1 - Full Testing with updates - part 1 (regular user - novice-1st job-2nd job-third regular or //= - - - novice high-1st job high-2nd job high-transcendent-trans third job) //= - Added check for 1st before going callfunc "SQL_Entry_Checker" //= - Deleted all "abort" option that was not cleaned up //= - Added check on base level which is not needed - deleted - near Classify_Char: check on first job to become 2nd job //= - Updated operator and logic is job level is less or equal to 49 or base level is less than or equal to 98, then not good //= - Deleted line to check base level since it is not needed and lower job requirement from 50 to 40 - //= - - - near 2nd job should reach base level 99 reported by TrueNoir (just in case) //= - Updated job level to 39 from 49 for Class >= 4002 && Class <= 4007 - near Classify_Char: //= - Updated operator and logic is job level is less or equal to 69 or base level is less than or equal to 98, then not good //= - Udpated description to show job should be 70 and level should be 99 //= - Updated resetlvl(4); into resetlvl(1); near Msg_Trans_Third: //= - Updated location from prontera to yuno (my main town in my server) //= - Updated Credits section for edumanilha *_* //= 2.0.2 - Full Testing with updates - part 2 (regular user - novice-baby novice-baby 1st job- baby 2nd job-baby third regular) //= - bug reported by samurairukasu - updated near callfunc "Free_Reset"; //= - added check for 1st before going callfunc "SQL_Entry_Checker" on baby changer //= - change limit baby knight //= - Updated and added a baby novice changer - unofficial and no baby skills - added near if (class != 4023){ //= - Added return; near script Baby_Checker_Job //= - updated function of baby super novice into Baby_FJ6 - near menu "Baby Super Novice" //= - Updated and || class < 4023 && class > 4045 - for baby 1st job and 2nd job to be excluded - added near if (class != 4023 //= - Updated label Baby_Third_Job into Baby_Regular_Third_Job //= - Added close; to stop other jobs //= - updated resetlvl(4); into resetlvl(1); near Msg_Reg_Baby_Third: //= - Added limit for max job baby class - used job id of Baby Rune Knight 4096 - near ChangeBaby: