-
Posts
2407 -
Joined
-
Last visited
-
Days Won
52
Content Type
Profiles
Forums
Downloads
Jobs Available
Server Database
Third-Party Services
Top Guides
Store
Crowdfunding
Everything posted by Capuche
-
No this script will give a reward to all class that reached the max level 99/70 and put a top 20 ranking for each class that reached theses conditions (top 20 LK, top 20 HP...) But.. you only want to give a reward for the first of each class to achieve the maximum level 99/70 ?
-
Each trans class (+ ninja +gun + sg + sl + supernovice ) who reach the max level and the max job get a reward and they are in the ranking. If that's what you want then test this : SQL part ALTER table `char` add column lvl_type int(8) unsigned NOT NULL default '0' after `rename`, add index (lvl_type); prontera,164,166,5 script FirstLevel 410,{ mes .npc_name$; mes "Lista dos primeiros jogadores a conquistarem o level "+ .max_level +"."; mes " "; next; .@s = select( .menu$ ) -1; .@count = query_sql( "SELECT `name` FROM `char` WHERE `class` = "+ .index[.@s] +" AND `lvl_type` != 0 ORDER BY `lvl_type` ASC LIMIT 20", .@name$ ); if( !.@count ) { mes .npc_name$; mes "There are nothing to display."; close; } for( .@j = 0; .@j < .@count; .@j++ ) mes (.@j +1) +" - [^b00808"+ .@name$[.@j]+"^000000] Class: [^f80b0b"+ .job_index$[.@s] +"^000000]"; close; OnPCBaseLvUpEvent: OnPCJobLvUpEvent: if( BaseLevel == .max_level && JobLevel == .max_job_level ) { while( .@i < .size_class && Class != .class_[.@i] ) set .@i, .@i +1; if( .@i == .size_class ) end; query_sql "SELECT `lvl_type` FROM `char` WHERE `class` = "+ Class +" ORDER BY `lvl_type` DESC LIMIT 1", .@type; query_sql "UPDATE `char` SET `lvl_type` = ("+ .@type +" +1) WHERE `char_id` = '"+ getcharid(0) +"'"; announce "Parabéns ao jogador ["+ strcharinfo(0) +"] por se o primeiro ["+ jobname(Class) +"] a antingir o level "+ .max_level +".",bc_all; for( set .@i, 0; .@i < .size_item; set .@i, .@i +1 ) getitem .item_ID[.@i], .item_num[.@i]; } end; OnInit: set .npc_name$, "[^0b85f8First Level^000000]"; set .max_level, 99; // Level maximo do servidor. set .max_job_level, 70; // Level Job maximo do servidor. setarray .item_ID[0], 32002,7828,7773,7829; // ID setarray .item_num[0], 1, 150, 150, 150; // Quantidade setarray .class_, 23, 24, 25, 4008,4009,4010,4011,4012,4013,4015,4016,4017,4018,4019,4020,4021,4046,4047,4049; setarray .@al$, "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"; set .size_class, getarraysize( .class_ ); set .size_item, getarraysize( .item_ID ); freeloop(1); for( .@j = 0; .@j < 26; .@j++ ) { for( .@i = 0; .@i < .size_class; .@i++ ) if( strtolower( charat( jobname( .class_[.@i] ),0 ) ) == .@al$[.@j] ) { .index[ .@size_index ] = .class_[.@i]; .job_index$[ .@size_index ] = jobname( .class_[.@i] ); .@size_index++; } } freeloop(0); .menu$ = implode( .job_index$, ":" ); end; }
-
I will do the french translation
-
In fact there was a mistake now fixed in the previous post @_@
-
Using script command menu in a usable item script?
Capuche replied to Orgasmator's question in Scripting Support
@Orgasmator goto L_access; L_access; The error were on L_access; --> goto L_access; L_access: @Metamorphic I suggest to add a checkweight in your function -
- script ann_login -1,{ OnPCLogoutEvent: callsub L_ann, 0xff0000, "out"; OnPCLoginEvent: if( getgmlevel() > 10 ) { while ( .@i < .size_gm && getcharid(3) != .gm_acc[.@i] ) .@i++; if( .@i == .size_gm ) { .gm_acc[.@i] = getcharid(3); .size_gm++; } } callsub L_ann, 0x00ff00, "in"; L_ann: if( getgmlevel() >= 99 ) announce "Administrator "+ strcharinfo(0) +" log "+ getarg(1) +".",bc_all, getarg(0); else if( getgmlevel() < 99 && getgmlevel() >= 10 ) announce "GM "+ strcharinfo(0) +" log "+ getarg(1) +".",bc_all, getarg(0); else if( #New_Player != 1 && BaseLevel == 1 && JobLevel == 1 ) { announce "Please welcome "+ strcharinfo(0) +" to our server!",bc_all,0x00ff66; announce " And for joining our server, we're going to level you up 2 times!",bc_self,0x00ff66; atcommand "!baselevel 2"; set #New_Player, 1; } else { for( .@i = 0; .@i < .size_gm; .@i++ ) if( isloggedin( .gm_acc[.@i] ) ) message rid2name( .gm_acc[.@i] ), "Player "+ strcharinfo(0) +" log "+ getarg(1) +"."; } end; } EDIT : fix a mistake
-
Payed Job Changer using current rAthena script..
Capuche replied to Meister's question in Script Requests
prontera,153,193,6 script Job Master 123,{ function Job_Menu; function A_An; mes "[Job Master]"; if (Class > 4049) { mes "No more jobs are available."; close; } if (checkfalcon() || checkcart() || checkriding() || ismounting()) { mes "Please remove your "+((checkfalcon())?"falcon":"")+((checkcart())?"cart":"")+((checkriding())?"Peco":"")+((ismounting())?"mount":"")+" before proceeding."; close; } if (.SkillPointCheck && SkillPoint) { mes "Please use all your skill points before proceeding."; close; } set .@eac, eaclass(); set .@i, ((.ThirdClass)?roclass(.@eac&EAJ_UPPERMASK):Class); if (.@i > 6 && .@i < 22) { if (BaseLevel < .Rebirth[0] || JobLevel < .Rebirth[1]) { set .@blvl, .Rebirth[0]-BaseLevel; set .@jlvl, .Rebirth[1]-JobLevel; mes "You need "+((.@blvl>0)?.@blvl+" more base levels "+((.@jlvl>0)?"/ ":""):"")+((.@jlvl>0)?.@jlvl+" more job levels ":"")+"to continue."; close; } if (Class > 21) { mes "Switch to third class?"; next; Job_Menu(roclass(.@eac|EAJL_THIRD)); close; } while(1) { mes "Select an option."; next; set .@i, select(" ~ ^0055FFRebirth^000000:"+((.ThirdClass)?" ~ ^FF0000Third Class^000000":"")+": ~ ^777777Cancel^000000"); if (.@i==3) close; mes "[Job Master]"; mes "Are you sure?"; next; Job_Menu(((.@i==1)?4001:roclass(.@eac|EAJL_THIRD))); mes "[Job Master]"; } } set .@j1, roclass(.@eac|EAJL_2_1); set .@j2,roclass(.@eac|EAJL_2_2); if ((.@eac&EAJ_UPPERMASK) == EAJ_SUPER_NOVICE) setarray .@exp[0],roclass(.@eac|EAJL_THIRD),99; if (Class == Job_Ninja) setarray .@exp[0],.@j1,70; if (.@exp[0] && .ThirdClass) { if (BaseLevel < .Rebirth[0] || JobLevel < .@exp[1]) { set .@blvl, .Rebirth[0]-BaseLevel; set .@jlvl, .@exp[1]-JobLevel; mes "You need "+((.@blvl>0)?.@blvl+" more base levels "+((.@jlvl>0)?"/ ":""):"")+((.@jlvl>0)?.@jlvl+" more job levels ":"")+"to continue."; close; } mes "Switch to "+jobname(.@exp[0])+"?"; next; Job_Menu(.@exp[0]); close; } if (.@eac&EAJL_2) if (.@eac&(EAJL_UPPER|EAJL_BABY) || roclass(.@eac|EAJL_UPPER) == -1) { mes "No more jobs are available."; close; } if ((.@eac&EAJ_BASEMASK) == EAJ_NOVICE) { if (JobLevel < .JobReq[0]) mes "A job level of "+.JobReq[0]+" is required to change into the 1st Class."; else if (Class == 4001 && .LastJob && lastJob) { mes "Switch classes now?"; next; Job_Menu(roclass((eaclass(lastJob)&EAJ_BASEMASK)|EAJL_UPPER)); } else switch(Class) { case 0: Job_Menu(1,2,3,4,5,6,23,4046,24,25,4023); case 4001: Job_Menu(4002,4003,4004,4005,4006,4007); case 4023: Job_Menu(4024,4025,4026,4027,4028,4029,4045); default: mes "An error has occurred."; break; } close; } if (roclass(.@eac|EAJL_2_1) == -1 || roclass(.@eac|EAJL_2_2) == -1) mes "No more jobs are available."; else if (!(.@eac&EAJL_2) && JobLevel < .JobReq[1]) mes "A job level of "+.JobReq[1]+" is required to change into the 2nd Class."; else if (.LastJob && lastJob && (.@eac&EAJL_UPPER)) { mes "Switch classes now?"; next; Job_Menu(lastJob+4001); } else Job_Menu(.@j1,.@j2); close; function Job_Menu { while(1) { if (getargcount() > 1) { mes "Select a job."; set .@menu$,""; for(set .@i,0; .@i<getargcount(); set .@i,.@i+1) set .@menu$, .@menu$+" ~ "+jobname(getarg(.@i))+":"; set .@menu$, .@menu$+" ~ ^777777Cancel^000000"; next; set .@i, getarg(select(.@menu$)-1,0); if (!.@i) close; if ((.@i == 23 || .@i == 4045) && BaseLevel < .SNovice) { mes "[Job Master]"; mes "A base level of "+.SNovice+" is required to turn into a "+jobname(.@i)+"."; close; } mes "[Job Master]"; mes "Are you sure?"; next; } else set .@i, getarg(0); if (select(" ~ Change into ^0055FF"+jobname(.@i)+"^000000 class: ~ ^777777"+((getargcount() > 1)?"Go back":"Cancel")+"^000000") == 1) { set .@eac, eaclass(.@i); if ( ( .@eac&EAJL_2_1 || .@eac&EAJL_2_2 ) && Zeny < .cost_2nd && !(.@eac&EAJL_UPPER) && !( .@eac&EAJL_THIRD ) ) { mes "[Job Master]"; mes "You need "+ .cost_2nd +" zeny to proceed."; close; } else if( ( .@eac&EAJL_2_1 || .@eac&EAJL_2_2 ) && !(.@eac&EAJL_UPPER) && !( .@eac&EAJL_THIRD )) { mes "[Job Master]"; mes "It will cost "+ .cost_2nd +" zeny to proceed."; next; if( select( " ~ Proceed", " ~ Leave" ) -1 ) close; set Zeny, Zeny - .cost_2nd; } else if ( .@eac&EAJL_UPPER && Zeny < .cost_rebirth && !( .@eac&EAJL_THIRD ) && !( .@eac&EAJL_2 ) && Class != 4001 ) { mes "[Job Master]"; mes "You need "+ .cost_rebirth +" zeny to proceed."; close; } else if( .@eac&EAJL_UPPER && !( .@eac&EAJL_THIRD ) && !( .@eac&EAJL_2 ) && Class != 4001 ) { mes "[Job Master]"; mes "It will cost "+ .cost_rebirth +" zeny to proceed."; next; if( select( " ~ Proceed", " ~ Leave" ) -1 ) close; set Zeny, Zeny - .cost_rebirth; } else if ( .@eac&EAJL_THIRD && Zeny < .cost_3rd ) { mes "[Job Master]"; mes "You need "+ .cost_3rd +" zeny to proceed."; close; } else if( .@eac&EAJL_THIRD ) { mes "[Job Master]"; mes "It will cost "+ .cost_3rd +" zeny to proceed."; next; if( select( " ~ Proceed", " ~ Leave" ) -1 ) close; set Zeny, Zeny - .cost_3rd; } mes "[Job Master]"; mes "You are now "+A_An(jobname(.@i))+"!"; if (.@i==4001 && .LastJob) set lastJob, Class; jobchange .@i; if (.@i==4001 || .@i==4023) resetlvl(1); specialeffect2 338; specialeffect2 432; if (.Platinum) callsub Get_Platinum; close; } if (getargcount() == 1) return; mes "[Job Master]"; } end; } function A_An { setarray .@A$[0],"a","e","i","o","u"; set .@B$, "_"+getarg(0); for(set .@i,0; .@i<5; set .@i,.@i+1) if (compare(.@B$,"_"+.@A$[.@i])) return "an "+getarg(0); return "a "+getarg(0); } Get_Platinum: skill 142,1,0; switch(BaseClass) { case 0: if (Class !=23) skill 143,1,0; break; case 1: skill 144,1,0; skill 145,1,0; skill 146,1,0; break; case 2: skill 157,1,0; break; case 3: skill 147,1,0; skill 148,1,0; break; case 4: skill 156,1,0; break; case 5: skill 153,1,0; skill 154,1,0; skill 155,1,0; break; case 6: skill 149,1,0; skill 150,1,0; skill 151,1,0; skill 152,1,0; break; default: break; } switch(BaseJob) { case 7: skill 1001,1,0; break; case 8: skill 1014,1,0; break; case 9: skill 1006,1,0; break; case 10: skill 1012,1,0; skill 1013,1,0; break; case 11: skill 1009,1,0; break; case 12: skill 1003,1,0; skill 1004,1,0; break; case 14: skill 1002,1,0; break; case 15: skill 1015,1,0; skill 1016,1,0; break; case 16: skill 1007,1,0; skill 1008,1,0; skill 1017,1,0; skill 1018,1,0; skill 1019,1,0; break; case 17: skill 1005,1,0; break; case 18: skill 238,1,0; break; case 19: skill 1010,1,0; break; case 20: skill 1011,1,0; break; default: break; } return; OnInit: setarray .Rebirth[0],99,50; // Minimum base level, job level to rebirth OR change to third class setarray .JobReq[0],10,40; // Minimum job level to turn into 1st class, 2nd class set .ThirdClass,1; // Enable third classes? (1: yes / 0: no) set .SNovice,45; // Minimum base level to turn into Super Novice set .LastJob,1; // Enforce linear class changes? (1: yes / 0: no) set .SkillPointCheck,1; // Force player to use up all skill points? (1: yes / 0: no) set .Platinum,1; // Get platinum skills automatically? (1: yes / 0: no) set .cost_2nd, 150000; // cost to pass 2nd job set .cost_3rd, 1000000; // cost to pass 3rd job set .cost_rebirth, 1285000; // cost to pass rebirth end; } -
OnPCKillEvent: if ( getgmlevel() >= $@LadderGM || ( !compare( strcharinfo(3),"prtg_cas" ) && !compare( strcharinfo(3),"arug_cas" ) ) ) end; EDIT : I'm too slow lol
-
Like that ? Test it - script ann_login -1,{ OnPCLogoutEvent: callsub L_ann, 0xff0000, "out"; OnPCLoginEvent: callsub L_ann, 0x00ff00, "in"; L_ann: if( getgmlevel() >= 99 ) announce "Administrator "+ strcharinfo(0) +" log "+ getarg(1) +".",bc_all, getarg(0); else if( getgmlevel() < 99 && getgmlevel() >= 10 ) announce "GM "+ strcharinfo(0) +" log "+ getarg(1) +".",bc_all, getarg(0); else if( #New_Player != 1 && BaseLevel == 1 && JobLevel == 1 ) { announce "Please welcome "+ strcharinfo(0) +" to our server!",bc_all,0x00ff66; announce " And for joining our server, we're going to level you up 2 times!",bc_self,0x00ff66; atcommand "!baselevel 2"; set #New_Player, 1; } end; }
-
yes it will
-
At the end of the woe, the guild which occupy the castle gain ( X items + 5 * consecutive time the guild own the castle ) = the reward is increased by 5 everytime the castle is occupied by the same guild in 2 woe sessions yes EDIT : correct something in the previous post
-
prontera,156,177,5 script WoE Prize 100,{ // setcastledata "prtg_cas01", 1, getcharid(2);// debug if ( agitcheck() ) { mes "A war is currently in progress"; mes "If your guild owned a castle ask your guild master to see me to claim the reward"; close; } select "Kriemhild [Primary Castle]"; if( getstrlen( $castle_reward$ ) ) explode( .@rew$, $castle_reward$, "|" ); if( !getcharid(2) ) { mes "you don't have a guild."; close; } else if ( getcastledata( "prtg_cas01",1 ) != getcharid(2) ) { mes "Your guild failed to take this castle"; close; } else if ( getguildmasterid( getcharid(2) ) != getcharid(0) ) { mes "Ask your Guild Master to see me"; close; } else if ( atoi( .@rew$[2] ) ) { mes "Your guild already received the reward for this castle"; close; } mes "receiving the reward for this castle"; getitem 7960,200 + atoi( .@rew$[1] ) * 5; getitem 12103,20 + atoi( .@rew$[1] ) * 5; getitem 7959,20 + atoi( .@rew$[1] ) * 5; .@rew$[2] = "1"; .@rew$[0] = getcastledata( "prtg_cas01",1 ); $castle_reward$ = implode( .@rew$, "|" ); close; OnAgitEnd: if( getstrlen( $castle_reward$ ) ) explode( .@rew$, $castle_reward$, "|" ); if( getcastledata( "prtg_cas01",1 ) != atoi( .@rew$[0] ) ) $castle_reward$ = getcastledata( "prtg_cas01",1 ) +"|0|0"; else { .@rew$[2] = "0"; .@rew$[1] = atoi( .@rew$[1] ) +1; $castle_reward$ = implode( .@rew$, "|" ); } end; OnInit: waitingroom "Kriemhild Reward",0; end; } EDIT: forget something
-
The first player of each class (acolyte class, priest class, high novice... too) in the whole server gain a reward ?
-
29825,Captains_Hat,Captains_Hat,5,20,,10,,10,,1,0xFFFFFFFF,7,2,256,,0,1,1924,{ if(Class == Job_Sniper || Class == Job_Ranger_T) { bonus bMaxHPRate,50; bonus bLongAtkRate,20; } },{},{} For ranger and sniper class only
-
prontera,150,180,5 script restricted_manner -1,{ OnInit: setarray .@bad_word$, "noob", "coward"; // add as your content lol .@size_b = getarraysize( .@bad_word$ ); for( ; .@i < .@size_b; .@i++ ) defpattern 1, "([^:]+):.*\\s"+ .@bad_word$[.@i] +".$", "warning"; activatepset 1; end; warning: @warning++; if ( @warning == 3 ) { @warning = 0; deltimer strnpcinfo(0) +"::OnDelay"; atcommand "@mute 5 "+ strcharinfo(0); } else { deltimer strnpcinfo(0) +"::OnDelay"; addtimer 300000, strnpcinfo(0) +"::OnDelay"; message strcharinfo(0), "Be careful with your language... Warning "+ @warning +"/3"; } end; OnDelay: @warning = 0; end; } But it works only in the range of the hidden npc.
-
Do you use some script to disable/enable the woe map ? Your woe map is always the same ?
-
.black_range_max = 3000; .black_range_min = 4000; .hat_equip = 256; // upper type hat only - .item_Type must contain type 5 set also this I don't get card on my local server Done prontera,150,182,5 script vbgnhjkl 56,{ if( .max_hat_id < .min_hat_id ) { mes "wrong range"; close; } mes "gamble ?"; next; if( select( "Yes", "No" ) -1 ) close; else if( Zeny < .cost ) { mes "you need "+ .cost +" Zeny"; close; } if( rand(10) ) { mes "Sorry you don't get anything !"; close; } do { .@r = rand( .min_hat_id, .max_hat_id ); if( .@r < .black_range_min || .@r > .black_range_max ) { for( .@i = 0; .@i < .size_type; .@i++ ) { .@c = ( .item_Type[.@i] != 5 ? getiteminfo( .@r,2 ) == .item_Type[.@i] : ( getiteminfo( .@r,5 )&.hat_equip ) != 0 ); if( .@c && !compare( .black_list$, .@r +"" ) && getiteminfo( .@r,2 ) != -1 ) { .@fullfit++; break; } else if( .@count == 100 ) { mes "I don't find any item !"; close; } else .@count++; } } } while( !.@fullfit ); mes "here a "+ getitemname( .@r ) +" (ID: "+ .@r +")"; getitem .@r, 1; Zeny -= .cost; close; OnInit: .cost = 1000000; // Zeny gamble .max_hat_id = 5859; .min_hat_id = 2000; .black_range_max = 3000; .black_range_min = 4000; .hat_equip = 1|256|512; // low + middle + head type hat - .item_Type must contain type 5 setarray .item_Type, 5; .size_type = getarraysize( .item_Type ); set .black_list$, "5005|5006|5007"; // black list ID end; } // Type: // 0 Healing item. // 2 Usable item. // 3 Etc item // 4 Weapon // 5 Armor/Garment/Boots/Headgear // 6 Card // 7 Pet egg // 8 Pet equipment // 10 Ammo (Arrows/Bullets/etc) // 11 Usable with delayed consumption (item is lost from inventory // after selecting a target, for use with skills and pet lures) // 18 Another delayed consume that requires user confirmation before // using item.
-
Like guardian system ? - script spawn_woe -1,{ OnAgitStart:// when woe start sleep 2; for( .@i = 0; .@i < .size_mob; .@i++ ) { for( .@j = 0; .@j < .size_map; .@j++ ) { if( GetCastleData( .map_woe$[.@j],1 ) ) { for( .@k = 0; .@k < .mob_count[.@i]; .@k++ ) guardian .map_woe$[.@j],0,0,"--ja--", .mob_ID[.@i]; } else monster .map_woe$[.@j],0,0,"--ja--", .mob_ID[.@i], .mob_count[.@i],""; } } end; OnAgitEnd:// when woe end sleep 2; for( .@i = 0; .@i < .size_map; .@i++ ) { sleep2 1; killmonsterall .map_woe$[.@i]; } end; OnNPCKillEvent: sleep2 1; if( agitcheck() && compare( .mob_id_c$, killedrid +"" ) && compare( .map_woe_c$, strcharinfo(3) ) ) {// check is woe on + if mob in .mob_ID list + map in .map_woe$ list if( GetCastleData( strcharinfo(3),1 ) ) guardian strcharinfo(3),0,0,"--ja--", killedrid; else monster strcharinfo(3),0,0,"--ja--", killedrid,1,""; } end; OnInit: // ------- setting setarray .mob_ID, 1638, 1639; // add more mob id setarray .mob_count, 40, 40;// number of mobs summoned / .mob_ID array column setarray .map_woe$, "aldeg_cas01", "aldeg_cas02"; // yours woe map //-------- end of setting .size_mob = getarraysize( .mob_ID ); .size_map = getarraysize( .map_woe$ ); for( .@i = 0; .@i < .size_mob; .@i++ ) .@tmp$[.@i] = .mob_ID[.@i]; .mob_id_c$ = implode( .@tmp$, "|" ); .map_woe_c$ = implode( .map_woe$, "|" ); end; } Add in guild/agit_main.txt killmonsterall strcharinfo(3); after // The Emperium has been broken. OnAgitBreak: set .@GID,getcharid(2); and donpcevent "spawn_woe::OnAgitStart"; after announce "The [" + getcastlename(strnpcinfo(2)) + "] castle has been conquered by the [" + getguildName(.@GID) + "] guild.",bc_all|bc_woe;
-
Payed Job Changer using current rAthena script..
Capuche replied to Meister's question in Script Requests
//===== rAthena Script ======================================= //= Job Master //===== By: ================================================== //= Euphy //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== //= rAthena SVN r16114+ //===== Description: ========================================= //= A fully functional job changer. //===== Additional Comments: ================================= //= 1.1 Fixed reset on Baby job change. [Euphy] //= 1.2 Added Expanded Super Novice support and initial Kagerou/Oboro support. [Euphy] //= 1.3 Kagerou/Oboro added. [Euphy] //============================================================ prontera,153,193,6 script Job Master 123,{ function Job_Menu; function A_An; mes "[Job Master]"; if (Class > 4049) { mes "No more jobs are available."; close; } if (checkfalcon() || checkcart() || checkriding() || ismounting()) { mes "Please remove your "+((checkfalcon())?"falcon":"")+((checkcart())?"cart":"")+((checkriding())?"Peco":"")+((ismounting())?"mount":"")+" before proceeding."; close; } if (.SkillPointCheck && SkillPoint) { mes "Please use all your skill points before proceeding."; close; } set .@eac, eaclass(); set .@i, ((.ThirdClass)?roclass(.@eac&EAJ_UPPERMASK):Class); if (.@i > 6 && .@i < 22) { if (BaseLevel < .Rebirth[0] || JobLevel < .Rebirth[1]) { set .@blvl, .Rebirth[0]-BaseLevel; set .@jlvl, .Rebirth[1]-JobLevel; mes "You need "+((.@blvl>0)?.@blvl+" more base levels "+((.@jlvl>0)?"/ ":""):"")+((.@jlvl>0)?.@jlvl+" more job levels ":"")+"to continue."; close; } if (Class > 21) { mes "Switch to third class?"; next; Job_Menu(roclass(.@eac|EAJL_THIRD)); close; } while(1) { mes "Select an option."; next; set .@i, select(" ~ ^0055FFRebirth^000000:"+((.ThirdClass)?" ~ ^FF0000Third Class^000000":"")+": ~ ^777777Cancel^000000"); if (.@i==3) close; mes "[Job Master]"; mes "Are you sure?"; next; Job_Menu(((.@i==1)?4001:roclass(.@eac|EAJL_THIRD))); mes "[Job Master]"; } } set .@j1, roclass(.@eac|EAJL_2_1); set .@j2,roclass(.@eac|EAJL_2_2); if ((.@eac&EAJ_UPPERMASK) == EAJ_SUPER_NOVICE) setarray .@exp[0],roclass(.@eac|EAJL_THIRD),99; if (Class == Job_Ninja) setarray .@exp[0],.@j1,70; if (.@exp[0] && .ThirdClass) { if (BaseLevel < .Rebirth[0] || JobLevel < .@exp[1]) { set .@blvl, .Rebirth[0]-BaseLevel; set .@jlvl, .@exp[1]-JobLevel; mes "You need "+((.@blvl>0)?.@blvl+" more base levels "+((.@jlvl>0)?"/ ":""):"")+((.@jlvl>0)?.@jlvl+" more job levels ":"")+"to continue."; close; } mes "Switch to "+jobname(.@exp[0])+"?"; next; Job_Menu(.@exp[0]); close; } if (.@eac&EAJL_2) if (.@eac&(EAJL_UPPER|EAJL_BABY) || roclass(.@eac|EAJL_UPPER) == -1) { mes "No more jobs are available."; close; } if ((.@eac&EAJ_BASEMASK) == EAJ_NOVICE) { if (JobLevel < .JobReq[0]) mes "A job level of "+.JobReq[0]+" is required to change into the 1st Class."; else if (Class == 4001 && .LastJob && lastJob) { mes "Switch classes now?"; next; Job_Menu(roclass((eaclass(lastJob)&EAJ_BASEMASK)|EAJL_UPPER)); } else switch(Class) { case 0: Job_Menu(1,2,3,4,5,6,23,4046,24,25,4023); case 4001: Job_Menu(4002,4003,4004,4005,4006,4007); case 4023: Job_Menu(4024,4025,4026,4027,4028,4029,4045); default: mes "An error has occurred."; break; } close; } if (roclass(.@eac|EAJL_2_1) == -1 || roclass(.@eac|EAJL_2_2) == -1) mes "No more jobs are available."; else if (!(.@eac&EAJL_2) && JobLevel < .JobReq[1]) mes "A job level of "+.JobReq[1]+" is required to change into the 2nd Class."; else if (.LastJob && lastJob && (.@eac&EAJL_UPPER)) { mes "Switch classes now?"; next; Job_Menu(lastJob+4001); } else Job_Menu(.@j1,.@j2); close; function Job_Menu { while(1) { if (getargcount() > 1) { mes "Select a job."; set .@menu$,""; for(set .@i,0; .@i<getargcount(); set .@i,.@i+1) set .@menu$, .@menu$+" ~ "+jobname(getarg(.@i))+":"; set .@menu$, .@menu$+" ~ ^777777Cancel^000000"; next; set .@i, getarg(select(.@menu$)-1,0); if (!.@i) close; if ((.@i == 23 || .@i == 4045) && BaseLevel < .SNovice) { mes "[Job Master]"; mes "A base level of "+.SNovice+" is required to turn into a "+jobname(.@i)+"."; close; } mes "[Job Master]"; mes "Are you sure?"; next; } else set .@i, getarg(0); if (select(" ~ Change into ^0055FF"+jobname(.@i)+"^000000 class: ~ ^777777"+((getargcount() > 1)?"Go back":"Cancel")+"^000000") == 1) { set .@eac, eaclass(.@i); if ( ( .@eac&EAJL_2_1 || .@eac&EAJL_2_2 ) && Zeny < .cost_2nd && !(.@eac&EAJL_UPPER) && !( .@eac&EAJL_THIRD ) ) { mes "[Job Master]"; mes "You need "+ .cost_2nd +" zeny to proceed."; close; } else if( ( .@eac&EAJL_2_1 || .@eac&EAJL_2_2 ) && !(.@eac&EAJL_UPPER) && !( .@eac&EAJL_THIRD )) { mes "[Job Master]"; mes "It will cost "+ .cost_2nd +" zeny to proceed."; next; if( select( " ~ Proceed", " ~ Leave" ) -1 ) close; set Zeny, Zeny - .cost_2nd; } else if ( .@eac&EAJL_UPPER && Zeny < .cost_rebirth && !( .@eac&EAJL_THIRD )) { mes "[Job Master]"; mes "You need "+ .cost_rebirth +" zeny to proceed."; close; } else if( .@eac&EAJL_UPPER && !( .@eac&EAJL_THIRD ) ) { mes "[Job Master]"; mes "It will cost "+ .cost_rebirth +" zeny to proceed."; next; if( select( " ~ Proceed", " ~ Leave" ) -1 ) close; set Zeny, Zeny - .cost_rebirth; } else if ( .@eac&EAJL_THIRD && Zeny < .cost_3rd ) { mes "[Job Master]"; mes "You need "+ .cost_3rd +" zeny to proceed."; close; } else if( .@eac&EAJL_THIRD ) { mes "[Job Master]"; mes "It will cost "+ .cost_3rd +" zeny to proceed."; next; if( select( " ~ Proceed", " ~ Leave" ) -1 ) close; set Zeny, Zeny - .cost_3rd; } mes "[Job Master]"; mes "You are now "+A_An(jobname(.@i))+"!"; if (.@i==4001 && .LastJob) set lastJob, Class; jobchange .@i; if (.@i==4001 || .@i==4023) resetlvl(1); specialeffect2 338; specialeffect2 432; if (.Platinum) callsub Get_Platinum; close; } if (getargcount() == 1) return; mes "[Job Master]"; } end; } function A_An { setarray .@A$[0],"a","e","i","o","u"; set .@B$, "_"+getarg(0); for(set .@i,0; .@i<5; set .@i,.@i+1) if (compare(.@B$,"_"+.@A$[.@i])) return "an "+getarg(0); return "a "+getarg(0); } Get_Platinum: skill 142,1,0; switch(BaseClass) { case 0: if (Class !=23) skill 143,1,0; break; case 1: skill 144,1,0; skill 145,1,0; skill 146,1,0; break; case 2: skill 157,1,0; break; case 3: skill 147,1,0; skill 148,1,0; break; case 4: skill 156,1,0; break; case 5: skill 153,1,0; skill 154,1,0; skill 155,1,0; break; case 6: skill 149,1,0; skill 150,1,0; skill 151,1,0; skill 152,1,0; break; default: break; } switch(BaseJob) { case 7: skill 1001,1,0; break; case 8: skill 1014,1,0; break; case 9: skill 1006,1,0; break; case 10: skill 1012,1,0; skill 1013,1,0; break; case 11: skill 1009,1,0; break; case 12: skill 1003,1,0; skill 1004,1,0; break; case 14: skill 1002,1,0; break; case 15: skill 1015,1,0; skill 1016,1,0; break; case 16: skill 1007,1,0; skill 1008,1,0; skill 1017,1,0; skill 1018,1,0; skill 1019,1,0; break; case 17: skill 1005,1,0; break; case 18: skill 238,1,0; break; case 19: skill 1010,1,0; break; case 20: skill 1011,1,0; break; default: break; } return; OnInit: setarray .Rebirth[0],99,50; // Minimum base level, job level to rebirth OR change to third class setarray .JobReq[0],10,40; // Minimum job level to turn into 1st class, 2nd class set .ThirdClass,1; // Enable third classes? (1: yes / 0: no) set .SNovice,45; // Minimum base level to turn into Super Novice set .LastJob,1; // Enforce linear class changes? (1: yes / 0: no) set .SkillPointCheck,1; // Force player to use up all skill points? (1: yes / 0: no) set .Platinum,1; // Get platinum skills automatically? (1: yes / 0: no) set .cost_2nd, 150000; // cost to pass 2nd job set .cost_3rd, 1000000; // cost to pass 3rd job set .cost_rebirth, 1285000; // cost to pass rebirth end; } I feel a bit lazy to optimize my script x.x -
Read this part // Add(<shop number>,<reward ID>,<reward amount>,<Zeny cost>,<point cost>, // <required item ID>,<required item amount>{,...}); // Shop number corresponds with order above (default is 1). // Note: Do NOT use a reward item more than once! Add(1,5086,1,0,0,5024,1,539,30,660,3); btw you should use the last Euphy's quest shop trunk/npc/custom/quests/quest_shop.txt
-
Damn you're absolutely right x.x
-
No pick up the emperium monster in db/pre-re/mob_db.txt 1288,EMPELIUM,Emperium,Emperium,90,68430,0,0,0,1,60,71,40,50,1,17,80,50,26,20,10,12,0,8,26,0x120,300,1288,288,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Emperium become plant type in renewal version
-
I don't understand your request, can you be more specific ?
-
for teleporting when you level up in 99 lvl go back in prontera
Capuche replied to hexor9's question in Script Requests
- script auto_warp_ -1,{ OnPCBaseLvUpEvent: if( BaseLevel == 99 ) warp "prontera",0,0;// auto warp when reached level 99 end; } I suggest Mapflag#nosave conf/mapflag/nosave.txt If you want to prohibit @save command on a map, I suggest this npc script - script nosave_ -1,{ OnInit: setarray .@map_restrited$, "prontera", "geffen";// add more restricted maps here - players can't use @save on these maps bindatcmd "save",strnpcinfo(3)+"::OnAtcommand"; .map_nosave$ = implode( .@map_restrited$, "|" ); end; OnAtcommand: getmapxy .@map$, .@x, .@y, 0; if( compare( .map_nosave$, .@map$ ) ) message strcharinfo(0), "You can't save here."; else { savepoint .@map$, .@x, .@y; message strcharinfo(0), "Your save point has been changed."; } end; } -
Requesting NPC warper have lvl required 1 map only
Capuche replied to hexor9's question in Script Requests
waitingroom "Utility NPCS inside"; You made a little error, must be waitingroom "Utility NPCS inside",0;