Jump to content

mpjy4

Members
  • Posts

    6
  • Joined

  • Last visited

Profile Information

  • Gender
    Not Telling

mpjy4's Achievements

Poring

Poring (1/15)

0

Reputation

  1. Well, I found this script and originally owned by |||Chris|||. Every script of his suppose be working but I found a bug. Whenever I try to put VIT it doesnt seem to work and add 1 to stat value. stat stays at zero and there is no error given. here the script you can try running it I believe it has to be in- "// Calculation which adds the VIT Mastery Level" and If possible can you put LUK to 1 to 20 number? please help //=========================================================== prontera,143,188,6 script Mastery Trainer 110,{ mes .n$; mes "Welcome, "+strcharinfo(0)+"!"; if(getgmlevel() == 99) switch(select("- GM Panel:- Player Menu:- Reset Training Delay:- Reset Mastery Levels")) { case 1: goto GM_Panel; break; case 3: callfunc "DATA_D-M",1,.train_b,.delay_type,1,0,1; break; case 4: // Resetting Status for ( set .@st,0; .@st < 6; set .@st,.@st + 1) callfunc("DATA_D-M",2,.train_b,1,.@st,1,0,2); // Resetting Weapons for ( set .@w,1; .@w < getarraysize(.eq_n$); set .@w,.@w + 1) if(.@w != 9) callfunc("DATA_D-M",2,.train_b,2,.@w,1,0,2); mes "Reset completed."; next; mes .n$; break; default: break; } mes "You can improve your mastery levels."; mes " "; mes "So what do you want to do?"; next; switch(select("- Improve my Masteries:- Information"+ ( (.equip_b == 1)?":- Apply Equip Bonus":"")+":- Nothing")) { case 1: mes .n$; if(#TrainSys == 2) { mes "I'm sorry, but you didn't wanted to copy your mastery level via the change of the bounding type."; mes "So I can't let you improve your mastery levels."; close; } if(#TrainSys == 0) { mes "Ahah a newcomer, welcome!!"; mes "Do you want to participate in my training programs?"; next; if(select("- Yes:- No") - 1) { mes .n$; mes "That's too bad, if you should change your mind by any chance, don't hesitate to come back."; close; } mes .n$; mes "Which Mastery do you want to start with?"; set #TrainSys,1; set #b_info,.train_b; if(.train_mode == 1) { if(.train_b == 0) set .@id,getcharid(3); else if(.train_b == 1) set .@id,getcharid(0); query_sql "INSERT INTO `trainsystem` ( `id` ) VALUES ( '"+.@id+"' )"; } } else { if(.train_mode == 1 && query_sql("SHOW TABLES LIKE 'trainsystem'",.@db_ck) == -1) { mes "I'm sorry, but the database wasn't added to the system yet."; mes "Please contact the GM Team."; close; } mes "Which mastery do you want to try to improve this time?"; mes "These are your current levels:"; mes "[ === Status Mastery === ]"; setarray .@st_txt$[0],"STR","AGI","VIT","INT","DEX","LUK"; for ( set @st,0; @st < getarraysize(.@st_txt$); set @st,@st + 1) mes .@st_txt$[@st]+" = "+callfunc("DATA_D-M",2,.train_b,1,@st,2); mes " "; mes "[ === Weapon Mastery === ]"; for ( set @w,1; @w < getarraysize(.eq_n$); set @w,@w + 1) if(@w != 9) mes .eq_n$[@w]+" = "+callfunc("DATA_D-M",2,.train_b,2,@w,2); } next; switch( set(@mastery,select("- Status Mastery:- Weapon Mastery")) ) { case 1: mes .n$; if(callfunc("DATA_D-M",1,.train_b,.delay_type,1,0,2) > gettimetick(2)) { mes "I'm sorry, but you are still exhausted from your previous training."; close; } mes "What do you like to train?"; if(.solo) { mes "^FF0000Note: The status mastery limit is active, so you can only train one status at once,"; mes "if you want to train an another one you will lose the other ones.^000000"; for ( set @s,0; @s < 6; set @s,@s + 1) if(set(.@s_c,callfunc("DATA_D-M",2,.train_b,1,@s,2) > 0) ) setarray .@s_ct[@s],.@s_c; if(getarraysize(.@s_ct) > 1) { mes "You have more than one mastery training running."; mes "Please select the one you want to continue the training."; mes "Any other will be reseted afterwards."; } } if(.class) { mes "^FF0000Note: The status mastery class limit is active, therefore you only have up to 2 status masteries available.^000000"; switch(BaseClass) { case Job_Swordman: set @p,select("- STR:- DEX"); if(@p == 1) set @p,0; else set @p,4; break; case Job_Mage: set @p,select("- INT:- DEX") + 2; break; case Job_Archer: set @p,select("- AGI:- DEX"); if(@p == 2) set @p,4; break; case Job_Acolyte: set @p,select("- VIT:- INT"); if(@p == 1) set @p,2; else set @p,3; break; case Job_Merchant: set @p,select("- STR:- LUK"); if(@p == 1) set @p,0; else set @p,5; break; case Job_Thief: set @p,select("- STR:- AGI") - 1; break; } } else set @p,select("- STR:- AGI:- VIT:- INT:- DEX:- LUK") - 1; if(.solo) { mes "Chosen Status Mastery:"; switch(@p) { case 0: mes "STR"; break; case 1: mes "AGI"; break; case 2: mes "VIT"; break; case 3: mes "INT"; break; case 4: mes "DEX"; break; case 5: mes "LUK"; break; } mes "Is that correct?"; if(select("- Yes:- No") - 1) close; set .@p,.@s_ct[@p]; for ( set .@o,0; .@o < 6; set .@o,.@o + 1) if(.@o == .@p) callfunc "DATA_D-M",2,.train_b,1,@p,1,.@p,2; else callfunc "DATA_D-M",2,.train_b,1,@p,1,0,2; } next; set @stat,callfunc("DATA_D-M",2,.train_b,1,@p,2); if(@stat >= .s_level) { mes .n$; mes "I'm sorry, but you have achieved the max level for this mastery already."; close; } switch(@p) { // ========= STR Training ========= case 0: mes .n$; if(getmapusers(.map$) != 0) { mes "I'm sorry, but there is someone practicing already."; mes "Please be patient."; close; } // Deciding Mob ID and Mob Name if(@stat <= 10) set .@lvl,10; else if(@stat > 10 && @stat <= 20) set .@lvl,20; else if(@stat > 20 && @stat <= 30) set .@lvl,30; else if(@stat > 30 && @stat <= 40) set .@lvl,40; else if(@stat > 40 && @stat <= 50) set .@lvl,50; else if(@stat > 50 && @stat <= 60) set .@lvl,60; else if(@stat > 60 && @stat <= 70) set .@lvl,70; else if(@stat > 70 && @stat <= 80) set .@lvl,80; else if(@stat > 80 && @stat <= 90) set .@lvl,90; else if(@stat > 90 && @stat <= 100) set .@lvl,100; set .str_mn$,getmonsterinfo(.str_mid+(.@lvl/10),0 )+" Level "+(@stat+1); mes "[ === STR Training === ]"; mes "This will be done by hitting on a single mob which always recieves 1 damage per attack, like a Plant would."; mes "The mob's HP for this training is "+getmonsterinfo((.str_mid+(.@lvl/10)),2)+"."; mes "There is just one thing you'll have to do:"; mes " - You will have to unequip everything."; next; mes .n$; mes "I will now warp you to the practice map."; mes "Good luck."; close2; set @train,1; // Unequipping everything and preventing from re-equipping sc_start SC_STRIPWEAPON,3600000,5; sc_start SC_STRIPSHIELD,3600000,5; sc_start SC_STRIPARMOR,3600000,5; sc_start SC_STRIPHELM,3600000,5; nude; monster .map$,.str_mx,.str_my,.str_mn$,.str_mid+(.@lvl/10),1,strnpcinfo(1)+"::OnStrMobDead"; warp .map$,.str_cx,.str_cy; end; // ========= AGI Training ========= case 1: mes .n$; // Setting countdown set @time,.agi_b_time - (@stat/.agi_x_red); // Getting random array index set @txt,rand(getarraysize(.agi_txt$)); mes "[ === AGI Training === ]"; mes "This will be done by typing an random text in "[email protected]<script data-cfhash='f9e31' type="text/javascript">/* */</script>+" seconds."; mes "The text is case-sensitive, be sure to write it correctly."; mes "^FF0000Note: You won't get a second chance until the next training."; next; mes .n$; mes "Here is the text you need to type:"; mes .agi_txt$[@txt]; mes "The countdown will start after you press \"next\"."; next; set @a_t,0; // Resetting Counter attachnpctimer; initnpctimer; input @i_txt$; if(@i_txt$ != .agi_txt$[@txt]) { mes .n$; mes "The text you have input is wrong."; stopnpctimer; callfunc "DATA_D-M",1,.train_b,.delay_type,1,.delay_time,1; close; } stopnpctimer; break; // ========= VIT Training ========= case 2: mes .n$; if(getmapusers(.map$) != 0) { mes "I'm sorry, but there is someone practicing already."; mes "Please be patient."; close; } // Calculating countdown if(@stat >= 10) set .@calc,.vit_inc*(@stat/10); set .cd,.vit_cd+.@calc; mes "[ === VIT Training === ]"; mes "This will be done by staying alive for "+.cd+" seconds."; mes "Also you are not allowed to kill any mob while the training is running."; mes "If you try you will not recieve any EXP and items, also you will be warped back to your savepoint."; mes "I will now warp you to the practice map."; mes "Good luck."; close2; // Calculation which adds the VIT Mastery Level if( @stat/5 < 1) set .@m_b,1; else if( @stat%10 == 0) set .@m_b,@stat; else if( @stat/5 > 0) set .@m_b,@stat/5; // Setting Mob ID's and Base Spawn Amount depending on your Level if(BaseLevel <= 99) { // High Orc, Goblin Archer, Leib Olmai, Shinobi, Teddy Bear setarray .@mob[0],1213,1258,1306,1401,1622; set .@add,5; } else if(BaseLevel > 99 && BaseLevel <= 255) { // Archdam, Shelter, Skeggiold, Aliot, Incarnation of Morroc (Randgris Sprite) setarray .@mob[0],1668,1701,1754,1736,1918; set .@add,10; } else if(BaseLevel > 255) { // Necromancer, Thorn of Magic, Tendrilrion, Lord Knight Seyren (MvP Slave), Whitesmith Howard (MvP Slave) setarray .@mob[0],1870,1960,1991,1640,1642; set .@add,15; } // Result set .@m_q,.@m_b + .@add; addtimer(.cd*1000),strnpcinfo(0)+"::OnVitEnd"; if(.vit_mob_s == 1) for ( set .@i,0; .@i < getarraysize(.@mob); set .@i,.@i + 1) monster .map$,rand(.vit_mx[0],.vit_mx[1]),rand(.vit_my[0],.vit_my[1]),getmonsterinfo(.@mob[.@i],0),.@mob[.@i],.@m_q,strnpcinfo(1)+"::OnVitMobKill"; else { set .@i,rand(getarraysize(.@mob)); monster .map$,rand(.vit_mx[0],.vit_mx[1]),rand(.vit_my[0],.vit_my[1]),getmonsterinfo(.@mob[.@i],0),.@mob[.@i],.@m_q,strnpcinfo(1)+"::OnVitMobKill"; } setmapflag .map$,mf_nobaseexp; setmapflag .map$,mf_nojobexp; warp .map$,.vit_cx,.vit_cy; end; // ========= INT Training ========= case 3: mes .n$; mes "[ === INT Training === ]"; mes "This will be done via a quiz about Ragnarok Online."; mes "The quiz contains "+set(.@f,.int_base+(@stat/10))+" questions."; mes "You always have four answers available."; mes "Let's get started, should we?"; mes "Good luck."; set @int,0; // Reseting points // Every 10th level you need one more question to answer set @req,.int_pt + (@stat/10); // Creating question catalog & Counter set .@q,0; set .@f,getarraysize(.int_quest$); while(.@g != .@f) { // Random question order? if(.int_rquest) set .@x,rand(getarraysize(.int_quest$)); else set .@x,.@g; // array starts with 0 so -1 for ( set .@c,0; .@c < getarraysize(.@q_id); set .@c,.@c + 1) // Checking if the question has been put already if(.@q_id[.@c] == .@x) { set .@rep,1; break; } if(.@rep == 0) { setarray .@q_id[getarraysize(.@q_id)],.@x; set .@g,.@g + 1; } } // Question Counter set .@d,0; while(.@d != .@f) { next; set .@ans$,""; set .@a,1; // Answers Counter while(.@a < 5) { sleep2 100; set .@rep,0; if(.int_rans) // Random answer order? set .@q,rand(1,4); else set .@q,.@a; for ( set .@c,0; .@c < getarraysize(.@a_id); set .@c,.@c + 1) // Checking if the answer has been put already if(.@a_id[.@c] == .@q) { set .@rep,1; break; } if(.@rep == 0) { setarray .@a_id[getarraysize(.@a_id)],.@q; // Current answer is the right answer if(.@q == .int_right[.@d]) set .@cor,.@q; set .@a,.@a + 1; } } // Creating Answers for ( set .@a,0; .@a < getarraysize(.@a_id); set .@a,.@a + 1) set .@ans$,.@ans$ + "- "+getd(".int_ans"+.@a_id[.@a]+"$["+.@d+"]")+ ( (.@a < 4)?":":""); mes "Question #"+(.@d+1); mes "------------------"; mes .int_quest$[.@q_id[.@d]]; // Selecting Answer set .@sel,select(.@ans$); // Correct Answer if(.@a_id[.@sel] == .@cor) { next; set @int,@int + 1; mes .n$; mes "Correct Answer!!! +1 Point!!!"; mes "Current Points: "[email protected]/* */; mes "Required Points: "[email protected]/* */; } // Enough points to pass if(@int == @req) break; set .@d,.@d + 1; cleararray .@a_id[0],0,128; } break; // ========= DEX Training ========= case 4: if(getmapusers(.map$) != 0) { mes "I'm sorry, but there is someone practicing already."; mes "Please be patient."; close; } mes "[ === DEX Training === ]"; mes "This will be done by clicking on the NPC,"; mes "which moves to random spots around you."; mes "You won't be able to move during the training."; mes "I will now warp you to the practice map."; mes "Good luck."; close2; warp .map$,.dex_cx,.dex_cy; doevent "DEX Training::OnPrepare"; enablenpc "DEX Training"; end; // ========= LUK Training ========= case 5: mes .n$; mes "[ === LUK Training === ]"; mes "This will be done by guessing 10 numbers,"; set .@no,(@stat/10) + 1; // Numbers required mes "where "+ .@no+" have to be correct."; mes "Good luck."; while( set(.@c_t,.@c_t + 1) != .luk_gue) { next; set .@c_no,rand(1,9); // Randomize input @g_no; if(@g_no == .@c_no) set .@ct,.@ct + 1; // Guessed number is the same as the randomed one, increase this counter mes .n$; mes "Number #"+.@c_t+":"; mes "Chosen number: "[email protected]/* */_no; mes "Required number: "+.@c_no; mes "Correct numbers so far: "+.@ct; mes "Chances left: "+(.luk_gue-.@c_t); if(.@ct == .@no) break; // If the quantity of the corrected guesses is the same as the required one, continue } if(.@c_t == .luk_gue && .@ct != .@no) { mes "I'm sorry, but you have failed this training."; close; } break; } next; OnComplete: callfunc "DATA_D-M",2,.train_b,1,@p,1,1,1; callfunc "DATA_D-M",1,.train_b,.delay_type,1,.delay_time,1; mes .n$; mes "The training has been completed, your mastery level has increased by 1."; set @p,0; close; case 2: mes .n$; if(callfunc("DATA_D-M",1,.train_b,.delay_type,2,0,2) > gettimetick(2)) { mes "I'm sorry, but you are still exhausted from your previous training."; close; } if(getmapusers(.map$) != 0) { mes "I'm sorry, but there is someone practicing already."; mes "Please be patient."; close; } if(getequipid(4) == -1) { mes "Hmm, I can't train your weapon since you don't have any equipped."; mes "Please make sure you have a weapon equipped before coming back."; close; } mes "Let's see, which weapon you have."; next; mes .n$; mes "\""+getequipname(4)+"\" is your current weapon."; mes "Do you want to train with it?"; if(select("- Yes:- No") - 1) close; next; mes .n$; for ( set .@e,0; .@e < getarraysize(.kill_weap); set .@e,.@e + 1) if(getiteminfo(getequipid(4),11) == .kill_weap[.@e]) { mes "I'm sorry, but I can't train your weapon, since it's forbidden."; close; } mes "Okay, I will now take a closer look at your weapon and then I will decide your enemies."; next; set @e,getiteminfo(getequipid(4),11); set .@m_lvl,callfunc("DATA_D-M",2,.train_b,2,@e,2); if(.@m_lvl >= .w_level) { mes .n$; mes "I'm sorry, but you already achieved the max level of this mastery."; close; } while(1) { sleep2 100; set .@rep,0; // Setting mob ID set @mid,rand(1002,.l_mob); // Mob found, continue else repeat if(getmonsterinfo(@mid,0) == "null") continue; // Checking if the Mob is an WoE Castle Treasure Chest if(compare(getmonsterinfo(@mid,0),"Treasure") == 1) continue; // Checking if the Mob ID is 1288 (Emperium) if(@mid == 1288) continue; // Checking if the Mob Mode contains "PLANT" (0x0040) if(getmonsterinfo(@mid,MOB_MODE) & 64) continue; // Checking if the Mob is an MvP and if MvP's are allowed, if not repeat for ( set .@m,0; .@m < getarraysize(.wm_mvp_id); set .@m,.@m + 1) if(@mid == .wm_mvp_id[.@m]) { if(!.wm_mvp) set .@rep,1; else set .@mvp_use,1; break; } if(.@rep == 1) continue; // Deciding the weap level and so the difficulty of training via the mob levels: if(getmonsterinfo(@mid,1) <= 30) set .@e_lvl,1; else if(getmonsterinfo(@mid,1) > 30 && getmonsterinfo(@mid,1) <= 60) set .@e_lvl,2; else if(getmonsterinfo(@mid,1) > 60 && getmonsterinfo(@mid,1) <= 90) set .@e_lvl,3; else if(getmonsterinfo(@mid,1) > 90) set .@e_lvl,4; // Mob's difficulty doesn't meet the Weapon Level if(getequipweaponlv(4) != .@e_lvl) continue; // Setting Spawn Amount if(!.@mvp_use) set @mob_am,rand(.wm_mmi,.wm_mma); else set @mob_am,rand(.wm_mvp_min,.wm_mvp_max); break; } mes .n$; mes "Your enemies will be "[email protected]/* */_am+"x "+getmonsterinfo(@mid,0); mes "Do you want to accept this challenge?"; if(select("- Yes:- No") - 1) close; next; mes .n$; mes "Then I will warp you to the practice map."; close2; set @m_lvl,.@m_lvl; // Cleaning map in case mobs are still on it ( DEBUG LOL ) if(mobcount(.map$,strnpcinfo(1)+"::OnMobTrainDead") > 0 && getmapusers(.map$) == 0) killmonsterall .map$; monster .map$,.wm_msp_x,.wm_msp_y,"Weapon Training Lv. "+(@m_lvl+1),@mid,@mob_am,strnpcinfo(1)+"::OnMobTrainDead"; announce .n$+": ["+strcharinfo(0)+"] is practicing to increase "+( (Sex)?"his":"her")+" "+$@eq_n$[@e]+" Mastery from "[email protected]/* */_lvl+" to "+(@m_lvl + 1)+"!",bc_all; announce .n$+": "+( (Sex)?"He":"She")+" will be fighting against "[email protected]/* */_am+"x "+getmonsterinfo(@mid,0)+", good luck ["+strcharinfo(0)+"]!!!",bc_all; set @train,1; // Preventing that the player changes weapon // type while training the wanted one. set .e,@e; set @k_total,0; // Resetting Total Kills for Mob Counter warp .map$,.wm_cx,.wm_cy; end; } // ========== Information ============ case 2: mes .n$; mes "I will now explain you about this training system."; mes "Let's start with \"Weapon Mastery\"."; next; mes "[ === Weapon Mastery === ]"; mes "There are "+(getarraysize($@eq_n$) - 1)+" weapons you can master, which are:"; for ( set .@w,1; .@w < getarraysize($@eq_n$); set .@w,.@w + 1) if(.@w != 9) mes "- "+$@eq_n$[.@w]; next; mes "[ === Weapon Mastery === ]"; mes "The maximum level you can achieve with each weapon is "+.w_level+"."; mes "The benefit of this training is that you gain an atk/matk boost depending on your class."; mes "This boost can increase by the refine level of the weapon."; mes "The calculation of the boost is: mastery level * (refine/2)"; mes "In case the refine is below 2 no multiplitation will be done."; mes "^FF0000Note: The Weapon Bonus will only be calculated using the Main Weapon (Right Hand)."; mes "The Weapon in the left hand (Affects Assassin Classes) will be ignored."; next; mes "[ === Weapon Mastery === ]"; mes "The training itself is killing monsters on the practice map."; mes "The monsters will be decided depending on your weapon level (1-4):"; mes "Weapon Level 1: Monsters till Level 30"; mes "Weapon Level 2: Monsters till Level 60"; mes "Weapon Level 3: Monsters till Level 90"; mes "Weapon Level 4: Monsters above Level 90"; mes " "; mes "The spawn amount will be a random value between "+.wm_mmi+" and "+.wm_mma+"."; if(.wm_mvp == 1) { mes "MvP Usage is active so there is a chance that MvP's are included also."; mes "But there the Spawn Amount is between "+.wm_mvp_min+" and "+.wm_mvp_max+"."; } next; mes .n$; mes "So that was the Weapon Mastery, let's move straight to the \"Status Mastery\"."; next; mes "[ === Status Mastery === ]"; mes "Each Status Training has it own program:"; mes " "; mes "STR: Defeating a Mob which recieves always 1 damage like a plant does."; mes "AGI: Typing an random text in a calculated time."; mes "VIT: Survival Mode."; mes "INT: Quiz about the world of Ragnarok Online."; mes "DEX: Clicking an NPC which moves to random spots around you in a limited time."; mes "LUK: Guessing numbers, every 10th level you need to have one number more correct than before."; mes " "; mes "The training progams for STR, VIT and DEX will take place on the practice map."; mes "The Status Bonus activates itself on login and you gain it by typing in the WhisperBox \"NPC:StatusBonus\" and as text anything you like."; next; mes .n$; mes "Also there is an Equip Bonus, which formular for the boost is equip-refine/2."; mes "This bonus depends on your class and only your highest refine will be used."; mes "Examples:"; mes "+4 Muffler[1] > 4/2 = 2 > Swordman Class > +% DEF Bonus > +2% DEF"; mes "+4 Muffler[1] > 4/2 = 2 > Mage Class > +% MDEF Bonus > +2% MDEF"; mes "For this Bonus to become active, you need to "+ ( (.equip_req == 0)?"only ":"pay "+.equip_r_am+"x "+ ( (.equip_req == 1)?"Zeny":"Cash Points") +" and ")+"talk to me, also you must have joined my training program."; mes "The Equip Bonus will be usable for exactly 1 day after payment. After that you have to pay again to use it, the boosts have an duration of "+(.eq_dur/1000/60)+" Minutes, after that you have to talk to me again to re-apply them."; break; case 3: if(.equip_b == 0) break; if(.equip_req == 0) set #eq_pay,1; if( #eq_pay == 1 && #eq_timer >= gettimetick(2) ) { OnEquipBonus: // Stats Applying from Equip for ( set @i,1; @i < 11; set @i,@i + 1) { // Equipment slot is empty, skip it obviously. if(getequipid(@i) == 0) continue; // Accessories don't have refines, skip 'em..., well except for GM Command xX if(@i == 7 || @i == 8) continue; // Weapon Bonus, happens just once so no need to put it below this loop if(@i == 4) { set @e,getiteminfo(getequipid(4),11); if( set(@w_m,callfunc("DATA_D-M",2,.train_b,2,@e,2) ) == 0) { mes .n$; mes "You didn't any training with this weapon yet, so no Bonus for you ;(."; next; continue; } if(getequiprefinerycnt(4) > 1) set .@ref_b,getequiprefinerycnt(4)/2; else set .@ref_b,1; set @atk,@w_m*.@ref_b; switch(BaseClass) { case Job_Swordman: sc_end SC_PLUSATTACKPOWER; sc_start SC_PLUSATTACKPOWER,.eq_dur,@atk; dispbottom .n$+": + "[email protected]/* */+"% ATK Boost applied."; break; case Job_Mage: sc_end SC_PLUSMAGICPOWER; sc_start SC_PLUSMAGICPOWER,.eq_dur,@atk; dispbottom .n$+": + "[email protected]/* */+"% MATK Boost applied."; break; case Job_Archer: sc_end SC_PLUSATTACKPOWER; sc_start SC_PLUSATTACKPOWER,.eq_dur,@atk; dispbottom .n$+": + "[email protected]/* */+"% ATK Boost applied."; break; case Job_Acolyte: sc_end SC_PLUSMAGICPOWER; sc_start SC_PLUSMAGICPOWER,.eq_dur,@atk; dispbottom .n$+": + "[email protected]/* */+"% MATK Boost applied."; break; case Job_Merchant: sc_end SC_PLUSATTACKPOWER; sc_start SC_PLUSATTACKPOWER,.eq_dur,@atk; dispbottom .n$+": + "[email protected]/* */+"% ATK Boost applied."; break; case Job_Thief: sc_end SC_PLUSATTACKPOWER; sc_start SC_PLUSATTACKPOWER,.eq_dur,@atk; dispbottom .n$+": + "[email protected]/* */+"% ATK Boost applied."; break; } specialeffect2 EF_POTION_BERSERK; continue; } if(getequiprefinerycnt(@i) > @ref) // When an refine is higher than the previous one, set @ref,getequiprefinerycnt(@i); // set it to the new one } if([email protected]/* */) { mes .n$; mes "Either you don't have any equip upgraded or you don't wear anything."; close; } switch(BaseClass) { case Job_Swordman: sc_end SC_PROTECT_DEF; sc_start SC_PROTECT_DEF,.eq_dur,@ref/2; dispbottom .n$+": + "[email protected]/* *//2+"% DEF Equip-Boost applied."; break; case Job_Mage: sc_end SC_PROTECT_MDEF; sc_start SC_PROTECT_MDEF,.eq_dur,@ref/2; dispbottom .n$+": + "[email protected]/* *//2+"% MDEF Equip-Boost applied."; break; case Job_Archer: sc_end SC_PROTECT_MDEF; sc_start SC_PROTECT_MDEF,.eq_dur,@ref/2; dispbottom .n$+": + "[email protected]/* *//2+"% MDEF Equip-Boost applied."; break; case Job_Acolyte: sc_end SC_PROTECT_DEF; sc_start SC_PROTECT_DEF,.eq_dur,@ref/2; sc_start SC_PROTECT_MDEF,.eq_dur,@ref/2; dispbottom .n$+": + "[email protected]/* *//2+"% DEF/MDEF Equip-Boost applied."; break; case Job_Merchant: sc_end SC_PROTECT_DEF; sc_start SC_PROTECT_DEF,.eq_dur,@ref/2; dispbottom .n$+": + "[email protected]/* *//2+"% DEF Equip-Boost applied."; break; case Job_Thief: sc_end SC_PROTECT_DEF; sc_start SC_PROTECT_DEF,.eq_dur,@ref/2; dispbottom .n$+": + "[email protected]/* *//2+"% DEF Equip-Boost applied."; break; } specialeffect2 EF_GUARD; mes .n$; mes "This Boosts will be active for "+(.eq_dur/1000/60)+" Minutes, if you want to re-apply the boost talk to me again."; } else { mes .n$; mes "To use the Equip Bonus, you have to pay for it:"; mes "Costs: "+.equip_r_am+"x "+( (.equip_req == 1)?"Zeny":"Cash Points"); mes "You have "+((.equip_req == 1)?Zeny:#CASHPOINTS)+"x "+( (.equip_req == 1)?"Zeny":"Cash Points"); mes "Do you want to use the Equip Bonus?"; mes "^FF0000Note: Only your highest refine will be used.^000000"; next; if(select("- Yes:- No") - 1) close; mes .n$; if( ((.equip_req == 1)?Zeny:#CASHPOINTS) < .equip_r_am) { mes "Seems like you don't have enough "+( (.equip_req == 1)?"Zeny":"Cash Points"); close; } mes "Thank you for your time and enjoy your bonus."; close2; doevent strnpcinfo(0)+"::OnEquipBonus"; set #eq_pay,1; set #eq_timer,gettimetick(2)+86400; set ((.equip_req == 1)?Zeny:#CASHPOINTS),((.equip_req == 1)?Zeny:#CASHPOINTS) - .equip_r_am; end; } break; case 4: break; } close; // ======== STR Training ======== OnStrMobDead: dispbottom .n$+": You have completed the STR Training successfully, I will now warp you back to your Save Point."; warp "SavePoint",0,0; sc_end SC_STRIPWEAPON; sc_end SC_STRIPSHIELD; sc_end SC_STRIPARMOR; sc_end SC_STRIPHELM; sleep2 2500; doevent strnpcinfo(1)+"::OnComplete"; end; // ======== AGI Training ======== OnTimer1000: stopnpctimer; set @a_t,@a_t + 1; if(@a_t == @time) { announce .n$+": You have failed to type the given text in "[email protected]/* */+" seconds. The practice will end now.",bc_self; set @a_t,0; end; } initnpctimer; end; // ======== VIT Training ======== OnVitMobKill: dispbottom .n$+": You have killed an monster, so you failed the training. See you next time."; callfunc("DATA_D-M",1,.train_b,.delay_type,1,.delay_time,1); OnVitEnd: set @p,0; sleep2 1000; warp "SavePoint",0,0; removemapflag .map$,mf_nobaseexp; removemapflag .map$,mf_nojobexp; removemapflag .map$,mf_noskill; killmonsterall .map$; if(@p) goto OnComplete; end; // ============================== OnPCLogoutEvent: if([email protected]/* */ && [email protected]/* */) end; if(strcharinfo(3) == .map$) killmonsterall .map$; warp "SavePoint",0,0; callfunc("DATA_D-M",1,.train_b,.delay_type,1,.delay_time,1); end; OnPCDieEvent: if([email protected]/* */ && [email protected]/* */) end; killmonsterall .map$; warp "SavePoint",0,0; sleep2 1500; if(Hp == 0) atcommand "@alive"; set @p,0; set @train,0; if(@e) announce .n$+": ["+strcharinfo(0)+"] has failed the "+$@eq_n$[@e]+" Training! Good Luck next time.",bc_all; dispbottom .n$+": You have failed the training. See you next time."; callfunc("DATA_D-M",1,.train_b,.delay_type,1,.delay_time,1); end; // ======= Weapon Mastery ======= OnMobTrainDead: // Using @killmonster or like that doesn't have an RID attached so,... // preventing "no rid attached error" cuz of player variables > @ if(playerattached() == 0) end; set @k_total,@k_total + 1; dispbottom .n$+": "[email protected]/* */_total+"/"[email protected]/* */_am+" "+getmonsterinfo(@mid,0)+" killed so far!!!!"; set @e,getiteminfo(getequipid(4),11); if(.e != @e) { dispbottom .n$+": Since you have changed your weapon type to a another one, I'll abort your training."; killmonsterall .map$; } if(@k_total == @mob_am) { dispbottom .n$+": Congratulation!!! You have defeated all enemies, therefore your training was successfull."; announce .n$+": ["+strcharinfo(0)+"] has successfully defeated all "[email protected]/* */_am+"x "+getmonsterinfo(@mid,0)+", "+( (Sex)?"his":"her")+" "+$@eq_n$[@e]+" Mastery have been increased from "[email protected]/* */_lvl+" to "+(@m_lvl + 1)+"!",bc_all; callfunc("DATA_D-M",2,.train_b,2,@e,1,1,1); } else end; set @train,0; callfunc("DATA_D-M",1,.train_b,.delay_type,2,.delay_time,1); sleep2 2000; warp "SavePoint",0,0; end; GM_Panel: next; mes .n$; mes "Here you can change the Settings,"; mes "but note, that once the server restarts or the script will be reloaded,"; mes "any change will be reseted to it old setting."; next; switch(select("- Initial Settings:- Delay Settings:- Mastery Settings")) { case 1: mes .n$; mes "Please choose which setting you want to change:"; next; switch(select("- Server Mode:- Global Coordinates:- Practice Map:- Bounding Type")) { // ============ Server Mode ============ case 1: mes .n$; mes "The current setting is "+ ( (.train_mode == 0)?"TxT":"SQL"); next; if(select("- Change to "+ ( (.train_mode == 0)?"SQL":"TxT")+":- Nothing") - 1) break; mes .n$; mes "The Server Mode has been changed to "+ ( (.train_mode == 0)?"SQL":"TxT")+"."; set .train_mode,!.train_mode; if(.train_mode == 1 && query_sql("SHOW TABLES LIKE 'trainsystem'",.@db_ck) == -1) query_sql "CREATE TABLE IF NOT EXISTS `trainsystem` ( `id` INT(10) UNSIGNED NOT NULL, `str` INT(8) UNSIGNED DEFAULT '0', `agi` INT(8) UNSIGNED DEFAULT '0', `vit` INT(8) UNSIGNED DEFAULT '0', `int` INT(8) UNSIGNED DEFAULT '0', `dex` INT(8) UNSIGNED DEFAULT '0', `luk` INT(8) UNSIGNED DEFAULT '0', `dagger` INT(8) UNSIGNED DEFAULT '0', `one-sword` INT(8) UNSIGNED DEFAULT '0', `two-sword` INT(8) UNSIGNED DEFAULT '0', `one-spear` INT(8) UNSIGNED DEFAULT '0', `two-spear` INT(8) UNSIGNED DEFAULT '0', `one-axe` INT(8) UNSIGNED DEFAULT '0', `two-axe` INT(8) UNSIGNED DEFAULT '0', `mace` INT(8) UNSIGNED DEFAULT '0', `unused` INT(8) UNSIGNED DEFAULT '0', `stave` INT(8) UNSIGNED DEFAULT '0', `bow` INT(8) UNSIGNED DEFAULT '0', `knuck` INT(8) UNSIGNED DEFAULT '0', `music` INT(8) UNSIGNED DEFAULT '0', `whip` INT(8) UNSIGNED DEFAULT '0', `book` INT(8) UNSIGNED DEFAULT '0', `katar` INT(8) UNSIGNED DEFAULT '0', `revol` INT(8) UNSIGNED DEFAULT '0', `rifle` INT(8) UNSIGNED DEFAULT '0', `gatl` INT(8) UNSIGNED DEFAULT '0', `shotg` INT(8) UNSIGNED DEFAULT '0', `grenade` INT(8) UNSIGNED DEFAULT '0', `fuuma` INT(8) UNSIGNED DEFAULT '0')"; break; // ============ Global Coordinates ============ case 2: mes .n$; mes "The current global cooardinates are X:"+.coord_x+", Y:"+.coord_y+"."; next; switch(select("- Change Coordinates:- Enable/Disable Global Cooardinates:- Nothing")) { case 1: mes .n$; mes "Please type the X Cooardinate, then the Y Cooardinate."; mes "Afterwards I will check if these are passable."; next; input .@x_new; input .@y_new; mes .n$; if(!checkcell(.map$,.@x_new,.@y_new,cell_chkpass) ) { mes "Seems like these coordinates are not passable."; mes "Please type valid coordinates."; close; } mes "The new coordinates have been saved successfully."; set .coord_x,.@x_new; set .coord_y,.@y_new; break; case 2: mes .n$; mes "Using Global Cooardinates will "+( (.use_glob == 1)?"":"not")+" be used."; if(select("- Change it:- Nothing") - 1) break; next; mes .n$; mes "Usage of Global Coordinates has been changed to "+( (.use_glob == 1)?"Deactive":"Active")+"."; set .use_glob,!.use_glob; case 3: break; } break; // ============ Practice Map ============ case 3: mes .n$; mes "The current practice map is "+ .map$+"."; next; if(select("- Change Practice Map:- Nothing") - 1) break; mes .n$; mes "Please type the new Practice Map:"; next; input .@m_new$; mes .n$; if(getmapusers(.@m_new$) == -1) { mes "This map doesn't exists."; mes "Please type a valid map."; close; } mes "The Practice Map has been successfully changed."; mes "I also will check if the global coordinates are still valid."; set .map$,.@m_new$; if(!checkcell(.map$,.coord_x,.coord_y,cell_chkpass) ) mes "It seems like they are not valid anymore, please change them else some bug may appear."; break; // ============ Bounding Type ============ case 4: mes .n$; mes "The current Bounding Type is "+( (.train_b == 0)?"Account":"Per Character")+"."; mes "Do you want to change it?"; if(select("- Yes:- No") - 1) close; next; mes .n$; mes "The Bounding Type has been changed to "+( (.train_b == 1)?"Account":"Per Character")+"."; set .train_b,!.train_b; } break; // ============ Delay Settings ============ case 2: mes .n$; mes "Please choose what you want to change:"; next; switch(select("- Delay Type:- Delay Time:- Nothing")) { case 1: mes .n$; mes "The current delay type setting is "+.delay_type+"."; mes "Values:"; mes "- 0 = Off"; mes "- 1 = Counts for all Mastery (Weapon & Status)"; mes "- 2 = Each status mastery has it own Delay, Weapon mastery has a general delay."; mes " "; mes "Please type the new value:"; next; input .@del_type; mes .n$; if(.@del_type > 2) { mes "Invalid Value, please type a valid one."; close; } mes "The delay type has been successfully changed."; set .delay_type,.@del_type; break; case 2: mes .n$; if(.delay_type == 0) { mes "The delay type is 0, so it isn't necessary to put a delay time."; close; } mes "The current delay time is "+.delay_time +" seconds."; mes "Please the new value:"; mes "Recommended Value: 3600 (1 Hour) and above, since it's in seconds."; next; input .@del_time; mes .n$; if(.@del_time < 1) { mes "Invalid Time, please type a valid one."; mes "Recommended Value: 3600 (1 Hour) and above, since it's in seconds."; close; } mes "The delay time has been successfully changed."; set .delay_time,.@del_time; break; case 3: break; } // ============ Mastery Settings ============ case 3: mes .n$; mes "Which setting category do you want to change?"; mes "Note: Main is like mastery max level, and so on."; next; switch(select("- Main:- Specific:- Equipment Bonus:- Nothing")) { // ============ Main Mastery Settings ============ case 1: mes .n$; mes "Which Mastery?"; next; if(select("- Status Mastery:- Weapon Mastery") == 1) { // ============ Status Mastery Main Settings ============ mes .n$; mes "Which setting?"; next; switch(select("- Max Level:- Training Restriction:- Class Restriction")) { case 1: mes .n$; mes "Current Level: "+.s_level; mes " "; mes "Suggested values for:"; mes "- Low Rate: 20"; mes "- Mid Rate: 45"; mes "- High Rate: 100"; mes "- And higher: 500"; mes " "; mes "This is up to you to decide which value suits your server"; mes "the best, you can put more than these values."; mes " "; mes "Please type the new max level:"; next; input .@lvl_n; mes .n$; if(.@lvl_n < 1) { mes "This can't be 0."; close; } mes "The Max Level of the Status Mastery has been successfully changed to "+.@lvl_n+"."; set .s_level,.@lvl_n; break; case 2: mes .n$; mes "The current setting is "+ ( (.solo == 0)?"Offline":"Online")+"."; mes "Do you want to change it?"; next; if(select("- Yes:- No") - 1) break; mes .n$; mes "The Training Restriction has been changed to "+ ( (.solo == 0)?"Online":"Offline")+"."; set .solo,!.solo; break; case 3: mes .n$; mes "The current setting is "+ ( (.class == 0)?"Offline":"Online")+"."; mes "Do you want to change it?"; next; if(select("- Yes:- No") - 1) break; mes .n$; mes "The Class Restriction has been changed to "+ ( (.class == 0)?"Online":"Offline")+"."; set .class,!.class; break; } break; // ============ Weapon Mastery Main Settings ============ } else { mes .n$; mes "Which setting:"; next; if(select("- Max Level:- Warp Coordinates") == 1) { mes .n$; mes "Current Level: "+.w_level; mes " "; mes "Suggested values for:"; mes "- Low Rate: 20"; mes "- Mid Rate: 45"; mes "- High Rate: 100"; mes "- And higher: 500"; mes " "; mes "This is up to you to decide which value suits your server"; mes "the best, you can put more than these values."; mes " "; mes "Please type the new max level:"; next; input .@lvl_n; mes .n$; if(.@lvl_n < 1) { mes "This can't be 0."; close; } mes "The Max Level of the Weapon Mastery has been successfully changed to "+.@lvl_n+"."; set .w_level,.@lvl_n; // ============ Weapon Mastery Warp Coordinates ============ } else { mes .n$; if(.use_glob == 1) { mes "Currently the Global Coordinates will be used, so there is no need to change them."; close; } mes .n$; mes "These are the current coordinates, X: "+.wm_cx+", Y: "+.wm_cy+"."; mes "Change it?"; next; if(select("- Yes:- No") - 1) close; mes "Please type the X Cooardinate, then the Y Cooardinate."; mes "Afterwards I will check if these are passable."; next; input .@x_new; input .@y_new; mes .n$; if(!checkcell(.map$,.@x_new,.@y_new,cell_chkpass) ) { mes "Seems like these coordinates are not passable."; mes "Please type valid coordinates."; close; } mes "The new coordinates have been saved successfully."; set .wm_cx,.@x_new; set .wm_cy,.@y_new; } break; } break; // ============ Specific Mastery Settings ============ case 2: mes .n$; mes "Which Mastery?"; next; if(select("- Status Mastery:- Weapon Mastery") == 1) { // ============ Specific Status Mastery Settings ============ mes .n$; mes "Now choose which Status Mastery you want to change the settings of:"; next; switch(select("- STR:- AGI:- VIT:- INT:- DEX:- LUK")) { // ============ STR Status Mastery Settings ============ case 1: mes .n$; mes "What do you want to edit?"; next; switch(select("- Base Mob ID:- Mob Spawn Coordinates:- Warp Coordinates")) { // ============ STR - Mob ID ============ case 1: mes .n$; mes "The current Mob ID is "+.str_mid+", change it?"; next; if(select("- Yes:- No") - 1) break; mes .n$; mes "Please type the new Mob ID:"; mes "Note: The Mob ID + 1 should have the name \"STR Training\" in it."; next; input .@mid_n; mes .n$; if(compare(getmonsterinfo(.@mid_n+1,0),"STR Training") == 0) { mes "This mob doesn't have the in the name \"STR Training\"."; close; } mes "The Mob ID has been successfully changed to "+.@mid_n+"."; set .str_mid,.@mid_n; break; // ============ STR - Mob Spawn Coordinates ============ case 2: mes .n$; mes "These are the current coordinates, X: "+.str_mx+", Y: "+.str_my+"."; mes "Change it?"; next; if(select("- Yes:- No") - 1) close; mes .n$; mes "Please type the X Cooardinate, then the Y Cooardinate."; mes "Afterwards I will check if these are passable."; next; input .@x_new; input .@y_new; mes .n$; if(!checkcell(.map$,.@x_new,.@y_new,cell_chkpass) ) { mes "Seems like these coordinates are not passable."; mes "Please type valid coordinates."; close; } mes "The new coordinates have been saved successfully."; set .str_mx,.@x_new; set .str_my,.@y_new; break; // ============ STR - Warp Coordinates ============ case 3: mes .n$; if(.use_glob == 1) { mes "Currently the Global Coordinates will be used, so there is no need to change them."; close; } mes .n$; mes "These are the current coordinates, X: "+.str_cx+", Y: "+.str_cy+"."; mes "Change it?"; next; if(select("- Yes:- No") - 1) close; mes "Please type the X Cooardinate, then the Y Cooardinate."; mes "Afterwards I will check if these are passable."; next; input .@x_new; input .@y_new; mes .n$; if(!checkcell(.map$,.@x_new,.@y_new,cell_chkpass) ) { mes "Seems like these coordinates are not passable."; mes "Please type valid coordinates."; close; } mes "The new coordinates have been saved successfully."; set .str_cx,.@x_new; set .str_cy,.@y_new; break; } // ============ AGI Status Mastery Settings ============ case 2: mes .n$; mes "Which setting do you want to change?"; next; switch(select("- Messages to type:- Base Timer:- Reduction Counter")) { // ============ AGI - Messages to type ============ case 1: mes .n$; mes "These are the current messages to type:"; for ( set .@a,0; .@a < getarraysize(.agi_txt$); set .@a,.@a + 1) mes "- "+.agi_txt$[.@a]; mes "What do you want to do?"; next; if(select("- Add Text:- Remove Text") - 1) { mes .n$; mes "Please select which text you want to remove:"; next; for ( set .@t,0; .@t < getarraysize(.agi_txt$); set .@t,.@t + 1) set .@agi_m$,.@agi_m$ + "- \""+.agi_txt$[.@t]+"\" "+( ( .agi_txt$[.@t+1] != "")?":":""); set .@del,select(.@agi_m$) - 1; mes .n$; mes "You have chosen \""+.agi_txt$[.@del]+"\"."; mes "Is that correct?"; next; if(select("- Yes:- No") - 1) close; deletearray .agi_txt$[.@del],1; mes .n$; mes "Entry removed."; } else { mes .n$; mes "Type any text you want, but it can't be shorter than 5 letters and longer than 20 letters."; mes "By typing \"Cancel\", you will cancel the input."; while(input(.@txt_n$,5,20) == 0 && getarraysize(.agi_txt$) != 128) { next; setarray .agi_txt$[getarraysize(.agi_txt$)],.@txt_n$; mes .n$; mes .@txt_n$+" has been added."; } } break; // ============ AGI - Base Timer ============ case 2: mes .n$; mes "The current Base Timer is "+.agi_b_time+" seconds, change it?"; next; if(select("- Yes:- No") - 1) close; mes .n$; mes "Please type the new time, but be realistic please."; mes "Recommended: Minimum 5, Maximum 30."; next; if(input(.@time_n,5,30) != 0) { mes .n$; mes "Invalid Value, recommended: Minimum 5, Maximum 30."; close; } mes .n$; mes "The Base Timer has been changed to "+.@time_n+" seconds."; set .agi_b_time,.@time_n; break; // ============ AGI - Reduction Counter ============ case 3: mes .n$; mes "The Reduction Counter is currently at "+.agi_x_red+" seconds, change it?"; next; if(select("- Yes:- No") - 1) close; mes .n$; mes "Please type the new timer, but be realistic please."; mes "Recommended: Minimum 2, Maximum 15"; next; if(input(.@time_n,2,15) != 0) { mes .n$; mes "Invalid Value, recommended: Minimum 2, Maximum 15."; close; } mes .n$; mes "The Reduction Counter has been changed to "+.@time_n+" seconds."; set .agi_x_red,.@time_n; break; } break; // ============ VIT Status Mastery Settings ============ case 3: mes .n$; mes "Which setting do you want to change?"; next; switch(select("- Mob Spawn Type:- Starting Countdown:- Countdown Increaser:- Warp Coordinates:- Nothing")) { // ============ VIT - Mob Spawn Type ============ case 1: mes .n$; mes "The Mob Spawn Type is currently on "+( (.vit_mob_s == 1)?"Multiply Mobs":"One Mob")+", change it?"; next; if(select("- Yes:- No") - 1) close; mes .n$; mes "Mob Spawn Type has been changed to "+( (.vit_mob_s == 0)?"Multiply Mobs":"One Mob")+"."; set .vit_mob_s,!.vit_mob_s; break; // ============ VIT - Starting Countdown ============ case 2: mes .n$; mes "The current starting countdown is "+.vit_cd+" seconds, change it?"; next; if(select("- Yes:- No") - 1) close; mes .n$; mes "Please type the new countdown, but be realistic please."; mes "Recommended: Minimum 10, Maximum 60"; next; if(input(.@v_cd_n,10,60) != 0) { mes .n$; mes "Invalid Value, Recommended: Minimum 10, Maximum 60"; close; } mes .n$; mes "The starting countdown has been changed to "+.@v_cd_n+" seconds."; set .vit_cd,.@v_cd_n; break; // ============ VIT - Countdown Increaser ============ case 3: mes .n$; mes "The current countdown increaser each 10th level is at "+.vit_inc+" seconds, change it?"; next; if(select("- Yes:- No") - 1) close; mes .n$; mes "Please type the new countdown increaser, but be realistic please."; mes "Recommended: Minimum 5, Maximum 30."; next; if(input(.@v_inc,5,30) != 0) { mes .n$; mes "Invalid Value, Recommended: Minimum 5, Maximum 30."; close; } mes .n$; mes "The countdown inreaser has been changed to "+.@v_inc+" seconds."; set .vit_inc,.@v_inc; break; // ============ VIT - Warp Coordinates ============ case 4: mes .n$; if(.use_glob == 1) { mes "Currently the Global Coordinates will be used, so there is no need to change them."; close; } mes .n$; mes "These are the current coordinates, X: "+.vit_cx+", Y: "+.vit_cy+"."; mes "Change it?"; next; if(select("- Yes:- No") - 1) close; mes "Please type the X Cooardinate, then the Y Cooardinate."; mes "Afterwards I will check if these are passable."; next; input .@x_new; input .@y_new; mes .n$; if(!checkcell(.map$,.@x_new,.@y_new,cell_chkpass) ) { mes "Seems like these coordinates are not passable."; mes "Please type valid coordinates."; close; } mes "The new coordinates have been saved successfully."; set .vit_cx,.@x_new; set .vit_cy,.@y_new; break; case 5: } break; // ============ INT Status Mastery Settings ============ case 4: mes .n$; mes "Which settings do you want to change?"; next; switch(select("- Questions&Answers:- Minimum Questions:- Minimum Points to Pass:- Random Question Order:- Random Answer Order")) { // ============ INT - Questions & Answers ============ case 1: mes .n$; mes "What do you want to do?"; next; if(select("- Add Question:- Remove Question") == 2) { // ============ INT - Questions & Answers - REMOVE ============ mes .n$; if(getarraysize(.int_quest$) < 2) { mes "I'm sorry, but you can't delete the only question which is stored at the moment."; mes "Please add another question first."; close; } mes "Please choose from the menu below, which question you want to remove:"; mes "^FF0000Note: By removing an Question, you automatically remove the answers also."; next; for ( set .@q,0; .@q < getarraysize(.int_quest$); set .@q,.@q + 1) set .@rem_quest$,.@rem_quest$ + "- "+.int_quest$[.@q] + ( (.int_quest$[.@q+1] != 0)?":":""); set .@r_q,select(.@rem_quest$); mes .n$; mes "You have chosen the following question:"; mes .int_quest$[.@r_q]; mes "Is that correct?"; if(select("- Yes:- No") - 1) close; next; mes .n$; mes "I will now remove the question and the answers belonging to it."; next; deletearray .int_quest$[.@r_q],1; deletearray .int_ans1$[.@r_q],1; deletearray .int_ans2$[.@r_q],1; deletearray .int_ans3$[.@r_q],1; deletearray .int_ans4$[.@r_q],1; deletearray .int_right[.@r_q],1; mes .n$; mes "Deletion completed."; // ============ INT - Questions & Answers - ADD ============ } else { mes .n$; if(getarraysize(.int_quest$) >= 128) { mes "The Question Catalog is full already."; close; } mes " "; mes "Please type the question:"; input .@add_q$; next; mes .n$; mes "Now please type the answers."; mes "Note: Remember which is the correct answer."; set .@a,0; while ( set(.@a,.@a + 1) < 4) { next; dispbottom .n$+": Answer Counter: "+.@a; if(.@a == 0) set .@a,1; mes .n$; mes "[Answer#"+.@a+"]"; input getd(".@add_a"+.@a+"$"); } mes " "; mes "[Correct Answer]"; mes "Please type now the number of the correct Answer."; mes "If you forgot which it is, type '0' and I will tell you the answers you put in, but only once."; mes "If you put a number higher than 4, you'll have to start again."; input .@add_r; if(.@add_r == 0) { mes "[Answer#1]"; mes .@add_a1$; mes " "; mes "[Answer#2]"; mes .@add_a2$; mes " "; mes "[Answer#3]"; mes .@add_a3$; mes " "; mes "[Answer#4]"; mes .@add_a4$; mes " "; mes "Please type the number of the correct Answer:"; mes "If you should type again a '0' or a number higher than 4, you'll have to start again also."; input .@add_r; if(.@add_r == 0 || .@add_r > 4) close; } else if(.@add_r > 4) { mes "Invalid number."; close; } next; mes .n$; mes "Thank you for hard work, I will now add this question and answers to the catalog."; mes "See ya again."; close2; setarray .int_quest$[getarraysize(.int_quest$)],.add_q$; setarray .int_ans1$[getarraysize(.int_ans1$)],.add_a1$; setarray .int_ans2$[getarraysize(.int_ans2$)],.add_a2$; setarray .int_ans3$[getarraysize(.int_ans3$)],.add_a3$; setarray .int_ans4$[getarraysize(.int_ans4$)],.add_a4$; setarray .int_right[getarraysize(.int_right)],.add_r; } break; // ============ INT - Minimum Questions ============ case 2: mes .n$; mes "Currently the minimum questions is "+.int_base+"."; mes "Do you want to change it?"; if(select("- Yes:- No") - 1) close; next; mes .n$; mes "Please type the new value:"; mes "^FF0000Note: Minimum - 5, Maximum - 30^000000"; next; if(input(.@int_b_n,5,30) != 0) { mes .n$; mes "Invalid Value, Minimum - 5, Maximum - 30"; close; } mes .n$; mes "The minimum questions has been changed to "+.@int_b_n+"."; set .int_base,.@int_b_n; break; // ============ INT - Minimum Points to Pass ============ case 3: mes .n$; mes "Currently the minimum points to pass is "+.int_pt+"."; mes "Do you want to change it?"; if(select("- Yes:- No") - 1) close; next; mes .n$; mes "Please type the new value:"; mes "^FF0000Note: Minimum - 3, Maximum - 26^000000"; next; if(input(.@int_pt_n,3,26) != 0) { mes .n$; mes "Invalid Value, Minimum - 3, Maximum - 26"; close; } mes .n$; mes "The minimum points to pass has been changed to "+.@int_pt_n+"."; set .int_pt,.@int_pt_n; break; // ============ INT - Random Question Order ============ case 4: mes .n$; mes "Random Question Order is "+ ( (.int_rquest == 1)?"Active":"Deactive")+"."; mes "Change it?"; if(select("- Yes:- No") - 1) break; next; mes .n$; mes "The Random Question Order has been changed to "+ ( (.int_rquest == 1)?"Deactive":"Active")+"."; set .int_rquest,!.int_rquest; break; // ============ INT - Random Answer Order ============ case 5: mes .n$; mes "Random Answer Order is "+ ( (.int_rans == 1)?"Active":"Deactive")+"."; mes "Change it?"; if(select("- Yes:- No") - 1) break; next; mes .n$; mes "The Random Answer Order has been changed to "+ ( (.int_rans == 1)?"Deactive":"Active")+"."; set .int_rans,!.int_rans; break; } break; // ============ DEX Status Mastery Settings ============ case 5: mes .n$; mes "Which kind of setting do you want to change?"; next; switch(select("- Timer to click the NPC:- Times to click the NPC:- Points required to pass:- Warp Coordinate")) { // ============ DEX - Timer to click the NPC ============ case 1: mes .n$; mes "Current setting is "+.dex_time+" seconds to click the NPC."; mes "Change it?"; if(select("- Yes:- No") - 1) close; next; mes .n$; mes "Please type the new time:"; mes "^FF0000Note: Minimum - 5, Maximum - 30^000000"; next; if(input(.@dt,5,30) != 0) { mes .n$; mes "Invalid Value, Minimum - 5, Maximum - 30."; close; } mes .n$; mes "The Time to click the NPC has been changed to "+.@dt+"."; set .dex_time,.@dt; break; // ============ DEX - Clicks Needed ============ case 2: mes .n$; mes "Current setting is "+.dex_npc+" times to click the NPC."; mes "Change it?"; if(select("- Yes:- No") - 1) close; next; mes .n$; mes "Please type the new value:"; mes "^FF0000Note: Minimum - 5, Maximum - 30^000000"; next; if(input(.@dts,5,30) != 0) { mes .n$; mes "Invalid Value, Minimum - 5, Maximum - 30."; close; } mes .n$; mes "The Times to click the NPC has been changed to "+.@dts+"."; set .dex_npc,.@dts; break; // ============ DEX - Points required to pass ============ case 3: mes .n$; mes "Current setting is "+.dex_pt+" times to click the NPC."; mes "Change it?"; if(select("- Yes:- No") - 1) close; next; mes .n$; mes "Please type the new value:"; mes "^FF0000Note: Minimum - 3, Maximum - 26^000000"; next; if(input(.@dts,3,26) != 0) { mes .n$; mes "Invalid Value, Minimum - 3, Maximum - 26."; close; } mes .n$; mes "The Points required to Pass has been changed to "+.@dpt+"."; set .dex_pt,.@dpt; break; // ============ DEX - Warp Coordinates ============ case 4: mes .n$; if(.use_glob == 1) { mes "Currently the Global Coordinates will be used, so there is no need to change them."; close; } mes .n$; mes "These are the current coordinates, X: "+.dex_cx+", Y: "+.dex_cy+"."; mes "Change it?"; next; if(select("- Yes:- No") - 1) close; mes "Please type the X Cooardinate, then the Y Cooardinate."; mes "Afterwards I will check if these are passable."; next; input .@x_new; input .@y_new; mes .n$; if(!checkcell(.map$,.@x_new,.@y_new,cell_chkpass) ) { mes "Seems like these coordinates are not passable."; mes "Please type valid coordinates."; close; } mes "The new coordinates have been saved successfully."; set .dex_cx,.@x_new; set .dex_cy,.@y_new; break; } break; // ============ LUK Status Mastery Settings ============ case 6: mes .n$; mes "Which setting do you want to change?"; next; switch(select("- Guess Chances:- Nothing")) { // ============ LUK - Chances to guess ============ case 1: mes .n$; mes "The current chances to guess are "+.luk_gue+", change it?"; next; if(select("- Yes:- No") - 1) close; mes .n$; mes "Please type the new value, but be realistic please."; mes "Recommended: Minimum 5, Maximum 15."; next; if(input(.@luk_c,5,15) != 0) { mes .n$; mes "Invalid Value, Recommended: Minimum 5, Maximum 15."; close; } mes .n$; mes "The chances to guess have been changed to "+.@luk_c+"."; set .luk_gue,.@luk_c; break; case 2: } break; } break; } else { // ============ Specific Weapon Mastery Settings ============ mes .n$; mes "Which setting do you want to change?"; next; switch(select("- Forbidden Weapon Types:- Monster Settings:- Uncustomized Weapon Feature:- Nothing")) { // ============ Forbidden Weapon Types ============ case 1: mes .n$; mes "Currently there are "+getarraysize(.kill_weap)+" weapon types on the forbidden list."; next; switch(select("- Add Weapon Type:- Empty List:- Nothing")) { case 1: mes .n$; mes "Here is the list of the weapon types:"; for ( set .@l,1; .@l < getarraysize($@eq_n$); set .@l,.@l + 1) if(.@l != 9) mes $@eq_n$[.@l]+" = "+.@l; mes " "; mes "Please input the types you want to be forbidden:"; mes "By putting any number above the last weapon type or a '0', you will cancel the input."; while(input(.@w_for,1,getarraysize($@eq_n$)-1) == 0) { next; set .@er,0; for ( set .@q,0; .@q < getarraysize(.kill_weap); set .@q,@q + 1) { if(.@w_for == .kill_weap[.@q]) { mes .n$; mes "CAUTION: Duplicate Entry, try again"; set .@er,1; break; } } if(.@er == 1) continue; setarray .kill_weap[getarraysize(.kill_weap)],.@w_for; mes .n$; mes $@eq_n$[.@w_for]+" has been added."; } next; mes .n$; mes "There are now "+getarraysize($@eq_n$)+" weapon types forbidden."; break; case 2: mes .n$; mes "Do you really want to empty the list?"; next; if(select("- Yes:- No") - 1) break; deletearray .kill_weap[0],128; mes .n$; mes "List has been cleared."; case 3: } break; // ============ Monster Settings ============ case 2: mes .n$; mes "Please choose which setting you want to change:"; next; switch(select("- Last Mob ID:- Mob Spawn Cooardinates:- Minimum Mob Amount:- Maximum Mob Amount:- MVP Settings:- Nothing")) { // ============ Last Mob ID ============ case 1: mes .n$; mes "The last mob ID is currently "+.l_mob+"."; mes "Change it?"; if(select("- Yes:- No") - 1) break; next; mes .n$; if(getmonsterinfo(input(.@m_id),0) == "null") { mes "This mob doesn't exist."; mes "Please type a valid ID."; close; } mes "Last Mob ID has been changed to "+.@m_id+"."; set .l_mob,.@m_id; break; // ============ Weapon - Mob Spawn Coordinates ============ case 2: mes .n$; mes "These are the current coordinates, X: "+.wm_msp_x+", Y: "+.wm_msp_y+"."; mes "Change it?"; next; if(select("- Yes:- No") - 1) close; mes .n$; mes "Please type the X Cooardinate, then the Y Cooardinate."; mes "Afterwards I will check if these are passable."; next; input .@x_new; input .@y_new; mes .n$; if(!checkcell(.map$,.@x_new,.@y_new,cell_chkpass) ) { mes "Seems like these coordinates are not passable."; mes "Please type valid coordinates."; close; } mes "The new coordinates have been saved successfully."; set .wm_msp_x,.@x_new; set .wm_msp_y,.@y_new; break; // ============ Minimum Mob Amount ============ case 3: mes .n$; mes "The current minimum mob amount is "+.wm_mmi+"."; mes "Change it?"; if(select("- Yes:- No") - 1) break; next; mes .n$; if(input(.@m_mmi,1,.wm_mma) != 0) { mes "Invalid Value, minimum 1, maximum "+.wm_mma+"."; mes "If you want to raise it above "+.wm_mma+"."; mes "Raise the Maximum Mob Amount then."; close; } mes "Minimum Mob Amount has been changed to "+.@m_mmi+"."; set .wm_mmi,.@m_mmi; break; // ============ Maximum Mob Amount ============ case 4: mes .n$; mes "The current maximum mob amount is "+.wm_mma+"."; mes "Change it?"; if(select("- Yes:- No") - 1) break; next; mes .n$; if(input(.@m_mma,.wm_mmi,10000) != 0) { mes "Invalid Value, minimum "+.wm_mmi+", maximum 10000."; mes "If you want to lower it below "+.wm_mmi+"."; mes "Lower the Minimum Mob Amount then."; close; } mes "Maximum Mob Amount has been changed to "+.@m_mma+"."; set .wm_mma,.@m_mma; break; // ============ MvP Settings ============ case 5: mes .n$; mes "What do you want to change?"; next; switch(select("- MvP Usage:- MvP ID's:- MvP Minimum Quantity:- MvP Maximum Quantity")) { // ============ MvP Usage ============ case 1: mes .n$; mes "MvP Usage is "+ ( (.wm_mvp == 1)?"Active":"Deactive")+"."; mes "Change it?"; if(select("- Yes:- No") - 1) break; next; mes .n$; mes "The MvP Usage has been changed to "+ ( (.wm_mvp == 1)?"Deactive":"Active")+"."; set .wm_mvp,!.wm_mvp; break; // ============ MvP ID's ============ case 2: mes .n$; if(.wm_mvp == 0) { mes "Since MvP Usage isn't active, there is no need to edit the MVP ID's."; close; } mes "Currently there are "+getarraysize(.wm_mvp_id)+" MvP's in the list,"; mes "which are:"; for ( set .@mvp,0; .@mvp < getarraysize(.wm_mvp_id); set .@mvp,.@mvp + 1) mes "- "+getmonsterinfo(.wm_mvp_id[.@mvp],0); mes " "; mes "So what do you want to do?"; next; switch(select("- Add an MvP:- Remove an MvP:- Nothing")) { case 1: mes .n$; if(getarraysize(.wm_mvp_id) == 128) { mes "I'm sorry, but you can't add any MvP anymore."; close; } mes "You can cancel the input by typing a '0'."; mes "Note: I won't be able to check if the Mob you've put is an MvP or not, so be sure to type the correct ID."; while(input(.@m_add,1,.l_mob) != 0) { next; set .@er,0; for ( set .@q,0; .@q < getarraysize(.wm_mvp_id); set .@q,@q + 1) { if(.@m_add == .wm_mvp_id[.@q]) { mes .n$; mes "CAUTION: Duplicate Entry, try again"; set .@er,1; break; } } if(.@er == 1) continue; setarray .wm_mvp_id[getarraysize(.wm_mvp_id)],.@m_add; mes .n$; mes getmonsterinfo(.@m_add,0)+" has been added."; } break; case 2: mes .n$; if(getarraysize(.wm_mvp_id) < 1) { mes "I'm sorry, but there are no MvPs you could remove."; close; } mes "Please choose which MvP you want to remove:"; mes "Format: Name (Mob ID)"; next; for ( set .@r,0; .@r < getarraysize(.wm_mvp_id); set .@r,.@r + 1) set .@rem_mvp$,.@rem_mvp$ + "- "+getmonsterinfo(.wm_mvp_id[.@r],0)+" ("+.wm_mvp_id[.@r]+")"+ ( (.wm_mvp_id[.@r+1] != 0)?":":""); set .@del,select(.@rem_mvp$) - 1; mes .n$; mes "You have chosen "+getmonsterinfo(.wm_mvp_id[.@del],0)+" ("+.wm_mvp_id[.@del]+")."; mes "Is that correct?"; next; if(select("- Yes:- No") - 1) close; deletearray .wm_mvp_id[.@del],1; mes .n$; mes "Entry removed."; break; } break; // ============ Minimum MvP Amount ============ case 3: mes .n$; mes "The current minimum MvP amount is "+.wm_mvp_min+"."; mes "Change it?"; if(select("- Yes:- No") - 1) break; next; mes .n$; if(input(.@m_mmi,1,.wm_mvp_max) != 0) { mes "Invalid Value, minimum 1, maximum "+.wm_mvp_max+"."; mes "If you want to raise it above "+.wm_mvp_max+"."; mes "Raise the Maximum MvP Amount then."; close; } mes "Minimum MvP Amount has been changed to "+.@m_mmi+"."; set .wm_mvp_min,.@m_mmi; break; // ============ Maximum MvP Amount ============ case 4: mes .n$; mes "The current maximum MvP amount is "+.wm_mvp_max+"."; mes "Change it?"; if(select("- Yes:- No") - 1) break; next; mes .n$; if(input(.@m_mma,.wm_mvp_min,10) != 0) { mes "Invalid Value, minimum "+.wm_mmi+", maximum 10."; mes "If you want to lower it below "+.wm_mvp_min+"."; mes "Lower the Minimum MvP Amount then."; close; } mes "Maximum MvP Amount has been changed to "+.@m_mma+"."; set .wm_mvp_max,.@m_mma; break; } break; case 6: } break; case 3: mes .n$; mes "Uncustomized Weapon Feature is "+ ( (.wm_weap == 1)?"Active":"Deactive")+"."; mes "Change it?"; if(select("- Yes:- No") - 1) break; next; mes .n$; mes "The Uncustomized Weapon Feature has been changed to "+ ( (.wm_weap == 1)?"Deactive":"Active")+"."; set .wm_weap,!.wm_weap; break; case 4: break; } } break; // Equipment Bonus Settings case 3: mes .n$; mes "Please choose which setting you want to change:"; next; switch(select("- Equip Bonus State:- Payment Method:- Payment Amount")) { case 1: mes .n$; mes "Currently the Equip Bonus is "+ ( (.equip_b == 1)?"Online":"Offline")+"."; mes "Do you want to change it?"; if(select("- Yes:- No") - 1) close; next; mes .n$; mes "Equip Bonus State has been changed to "+ ( (.equip_b == 0)?"Online":"Offline")+"."; set .equip_b,!.equip_b; break; case 2: mes .n$; mes "Currently the Payment Method is "+( (.equip_req == 0)?"None":( (.equip_req == 1)?"Zeny":"Cash Points") )+"."; mes "To what do you want to change it?"; next; switch(select("- None:- Zeny:- Cash Points")) { case 1: mes .n$; mes "The Payment Method has been changed to \"None\"."; set .equip_req,0; break; case 2: mes .n$; mes "The Payment Method has been changed to \"Zeny\"."; set .equip_req,1; break; case 3: mes .n$; mes "The Payment Method has been changed to \"Cash Points\"."; set .equip_req,2; break; } case 3: mes .n$; if(.equip_req == 0) { mes "Since the Payment Method is \"None\", you don't have to put an amount."; close; } mes "Currently the Payment Amount is "+.equip_r_am+" "+( (.equip_req == 1)?"Zeny":"Cash Points")+"."; mes "To what do you want to change it?"; switch(.equip_req) { case 1: mes "^FF0000Note: Minimum 10000, Maximum 1,000,000.^000000"; next; if(input(.@eq_r_am,10000,1000000) != 0) { mes .n$; mes "Invalid Value. Minimum 10000, Maximum 1,000,000."; close; } set .equip_r_am,.@eq_r_am; mes "The Payment Amount has been changed to "+.equip_r_am+" Zeny."; break; case 2: mes "^FF0000Note: Minimum 10, Maximum 10,000.^000000"; next; if(input(.@eq_r_am,10,10000) != 0) { mes .n$; mes "Invalid Value. Minimum 10, Maximum 10,000."; close; } set .equip_r_am,.@eq_r_am; mes "The Payment Amount has been changed to "+.equip_r_am+" Cash Points."; break; } break; } break; case 4: break; } } close; OnPCLoginEvent: if(#TrainSys == 0) end; // No Mastery started yet announce .n$+": Your mastery will be saved "+( (.train_b == 0)?"global on your account":"on each character seperatly")+".",bc_self; announce .n$+": This may change anytime, if it does your mastery will be copied, if you agree you have either to start from 0 or from the old level you had at that time.",bc_self; // Mastery Saving has changed if(#db_save != .train_mode) { for ( set @s,1; @s < 6; set @s,@s + 1) { set @db_c,1; set .@val,callfunc("DATA_D-M",2,.train_b,1,@s,2); set @db_c,2; callfunc "DATA_D-M",2,.train_b,1,@s,1,.@val,2; } // Equip Update for ( set @w,1; @w <= 22; set @w,@w + 1) { set @db_c,1; set .@val,callfunc("DATA_D-M",2,.train_b,2,@w,2); set @db_c,2; callfunc "DATA_D-M",2,.train_b,2,@w,1,.@val,2; } set #db_save,.train_mode; } if(.train_b != #b_info) { // Bound Type has changed mes .n$; mes "The bounding type has changed, do you want to copy your mastery level from your current character?"; mes "Any level on the other characters will be overwritten."; mes "If you press \"No\", you can't continue your training neither you gain any effects until you choose to do that by an relogin."; if(set(#Train_Sys,select("- Yes:- No") ) == 2) close; close2; if(.train_mode == 1) query_sql "UPDATE `trainsystem` SET `id` = '"+( (.train_?getcharid(0):getcharid(3))+"' WHERE `id` = '"+( (#b_info)?getcharid(0):getcharid(3))+"'"; else { // Copying Status Mastery for ( set @c,0; @c < 6; set @c,@c + 1) { set .@cs,callfunc("DATA_D-M",2,#b_info,1,@c,2); debugmes .n$+":Status "[email protected]/* */+", Value: "+.@cs; callfunc "DATA_D-M",2,.train_b,1,@c,1,.@cs,2; callfunc "DATA_D-M",2,#b_info,1,@c,1,0,2; } // Copying Weapon Mastery for ( set @w,1; @w < getarraysize(.eq_n$); set @w,@w + 1) { if(@w != 9) { set .@ws,callfunc("DATA_D-M",2,#b_info,2,@w,2); debugmes .n$+":Weapon "[email protected]/* */+", Value: "+.@ws; callfunc "DATA_D-M",2,.train_b,2,@w,1,.@ws,2; callfunc "DATA_D-M",2,#b_info,2,@w,1,0,2; } } } set #b_info,.train_b; } if(.equip_b == 1) if(#eq_timer <= gettimetick(2) && #eq_pay == 1) { announce .n$+": The Payment for the Equip Bonus has worn out. To use the Bonus again, you have to pay once again.",bc_self; set #eq_pay,0; set #eq_timer,0; } end; OnInit: // NPC Name set .n$,"["+strnpcinfo(1)+"]"; // Server Mode: // 0 - TxT // 1 - SQL // How should the saving be done? // TxT = via server temporar variables > $@<name> // SQL = obviously via SQL Database set .train_mode,0; if(.train_mode == 1 && query_sql("SHOW TABLES LIKE 'trainsystem'",.@sys_ck) == -1) query_sql "CREATE TABLE IF NOT EXISTS `trainsystem` ( `id` INT(10) UNSIGNED NOT NULL, `str` INT(8) UNSIGNED DEFAULT '0', `agi` INT(8) UNSIGNED DEFAULT '0', `vit` INT(8) UNSIGNED DEFAULT '0', `int` INT(8) UNSIGNED DEFAULT '0', `dex` INT(8) UNSIGNED DEFAULT '0', `luk` INT(8) UNSIGNED DEFAULT '0', `dagger` INT(8) UNSIGNED DEFAULT '0', `one-sword` INT(8) UNSIGNED DEFAULT '0', `two-sword` INT(8) UNSIGNED DEFAULT '0', `one-spear` INT(8) UNSIGNED DEFAULT '0', `two-spear` INT(8) UNSIGNED DEFAULT '0', `one-axe` INT(8) UNSIGNED DEFAULT '0', `two-axe` INT(8) UNSIGNED DEFAULT '0', `mace` INT(8) UNSIGNED DEFAULT '0', `unused` INT(8) UNSIGNED DEFAULT '0', `stave` INT(8) UNSIGNED DEFAULT '0', `bow` INT(8) UNSIGNED DEFAULT '0', `knuck` INT(8) UNSIGNED DEFAULT '0', `music` INT(8) UNSIGNED DEFAULT '0', `whip` INT(8) UNSIGNED DEFAULT '0', `book` INT(8) UNSIGNED DEFAULT '0', `katar` INT(8) UNSIGNED DEFAULT '0', `revol` INT(8) UNSIGNED DEFAULT '0', `rifle` INT(8) UNSIGNED DEFAULT '0', `gatl` INT(8) UNSIGNED DEFAULT '0', `shotg` INT(8) UNSIGNED DEFAULT '0', `grenade` INT(8) UNSIGNED DEFAULT '0', `fuuma` INT(8) UNSIGNED DEFAULT '0')"; set .map$,"new_zone04.gat"; // Map for Practice // Use Global Cooardinates? Default: 1 // - 1 = Yes // - 0 = No // If "No" then each training which requires the // training map will use their own Warp cooardinates set .use_glob,1; set .coord_x,180; // Global X Cooardinate for the warp set .coord_y,180; // Global Y Cooardinate for the warp // =========== Mapflags =========== setmapflag .map$,mf_noreturn; setmapflag .map$,mf_nosave; setmapflag .map$,mf_nowarpto; setmapflag .map$,mf_nowarp; setmapflag .map$,mf_nobranch; setmapflag .map$,mf_noteleport; setmapflag .map$,mf_loadevent; setmapflag .map$,mf_nomvploot; setmapflag .map$,mf_nomobloot; setmapflag .map$,mf_monster_noteleport; // Delay and Mastery Bounding: // 0 = Account // 1 = Character set .train_b,0; // ======== Training Delay Settings ====== // Type: // - 0 = Off // - 1 = Counts for all Mastery (Weapon & Status) // - 2 = Each status mastery has it own Delay, Weapon mastery has a general delay set .delay_type,1; // Delay Time: if(.delay_type) set .delay_time,86400; // Delay in seconds, Default: 86400 = 1 Day // ======= Status Mastery Settings ======= // Max Level // Suggested values for: // - Low Rate: 20 // - Mid Rate: 45 // - High Rate: 100 // - And higher: 500 set .s_level,20; // Status Training Restriction // 1 = On // 0 = Off // When "1" only one status can be trained at once. // Any other will be reseted. set .solo,0; // Class Restricted // 1 = On // 0 = Off // If "1" training is class depended. // Like Swordman Class is Str and Dex only set .class,0; // Status Bonus Duration is in the NPC "StatusBonus" // ====== Str Mastery ====== // = Training Mob ID // Put in .str_mid the Base Mob ID, like 2900. // Afterwards the scripts calcuates the Mob ID itself. // Just look around at line 191. set .str_mid,2900; set .str_mx,180; // X Cooardinate for the mob set .str_my,184; // Y Cooardinate for the mob // Warp Coordinate if(.use_glob) { // Global Coordinates set .str_cx,.coord_x; set .str_cy,.coord_y; } else { // Put here your coordinates set .str_cx,0; set .str_cy,0; } // ====== Agi Mastery - Fast Typing ====== setarray .agi_txt$[0],"Train me","Moar Speed","Agi r0ckz","I wanna be faster"; set .agi_b_time,15; // x seconds to type the text set .agi_x_red,10; // Every x lvl the duration to type will be reduced by 1 // ====== Vit Mastery - Survival ====== // - Mob Spawn Type at once: // 0 = One Mob // 1 = Multiply Mobs set .vit_mob_s,1; set .vit_cd,30; // x seconds for the first level set .vit_inc,10; // x seconds the countdown increases by every 10th level // ======== Monster Spawn Coordinates =========== // Randomly chosen spawn coordinates in a specified area: // [0] = left-down corner // [1] = right-upper corner setarray .vit_mx[0],171,188; setarray .vit_my[0],171,189; // Warp Coordinate if(.use_glob) { // Global Coordinates set .vit_cx,.coord_x; set .vit_cy,.coord_y; } else { // Put here your coordinates set .vit_cx,0; set .vit_cy,0; } // ====== Int Mastery - Quiz ====== set .int_base,10; // Minium quantity of questions set .int_pt,8; // Minimum points required to pass set .int_rquest,1; // Random question order - 1 = On / 0 = Off set .int_rans,1; // Random answer order - 1 = On / 0 = Off setarray .int_quest$[0],"What is the name of this Server?","Which Card gives +100% HP, -50% DEF?"; setarray .int_ans1$[0],"Dumbass Ro","Tao Gunka Card"; setarray .int_ans2$[0],"Summon Ro","Fabre Card"; setarray .int_ans3$[0],"Pwnage Ro","Acidus Card"; setarray .int_ans4$[0],"Holy Ro","Mimic Card"; setarray .int_right[0],2; // ====== Dex Mastery - Reaction ====== // =============== Note ==================== // There are two coordinate usages available: // - Fixed // - Random selected on an specified area // = See the "OnInit" in the "DEX Training" NPC for more info. // ========================================= set .dex_time,15; // x seconds to click the npc set .dex_npc,10; // x times the NPC have to be clicked set .dex_pt,8; // x Points required to pass the test // Warp Coordinate if(.use_glob) { // Global Coordinates set .dex_cx,.coord_x; set .dex_cy,.coord_y; } else { // Put here your coordinates set .dex_cx,0; set .dex_cy,0; } // ====== Luk Mastery - Number guessing ====== set .luk_gue,20; // Chances to guess // ========= Weapon Mastery Settings ======== // Max Level: // Suggested values for: // - Low Rate: 20 // - Mid Rate: 45 // - High Rate: 100 // - And higher: 500 set .w_level,20; // Warp Coordinate if(.use_glob) { // Global Coordinates set .wm_cx,.coord_x; set .wm_cy,.coord_y; } else { // Put here your coordinates set .wm_cx,0; set .wm_cy,0; } // Insert the numbers of the weapons, which are forbidden to be trained with. // Weapon Types: // 1: Daggers // 2: One-handed swords // 3: Two-handed swords // 4: One-handed spears // 5: Two-handed spears // 6: One-handed axes // 7: Two-handed axes // 8: Maces // 10: Staves // 11: Bows // 12: Knuckles // 13: Musical Instruments // 14: Whips // 15: Books // 16: Katars // 17: Revolvers // 18: Rifles // 19: Gatling guns // 20: Shotguns // 21: Grenade launchers // 22: Fuuma Shurikens setarray .kill_weap[0],0; setarray .eq_n$[1],"Dagger","One-Handed Sword","Two-Handed Sword","One-Handed Spear","Two-Handed Spear","One-Handed Axe","Two-Handed Axe","Mace","Unused","Staff","Bow","Knuckle/Fist","Musical Instrument","Whip","Book","Katar","Revolver","Rifle","Gatling Gun","Shotgun","Grenade Launcher","Fuuma Shuriken"; // Requires to SQL Mode (.train_mode == 1) // Sets the SQL Table names for the weapon types setarray .sql_wn$[1],"dagger","one-sword","two-sword","one-spear","two-spear","one-axe","two-axe","mace","unused","stave","bow","knuck","music","whip","book","katar","revol","rifle","gatl","shotg","grenade","fuuma"; // Equip Bonus: // 0 = Off // 1 = On // Note: Equip bonus will be done via the refine level/2 // and increases the ATK/MATK and DEF/MDEF depending on the Class set .equip_b,1; // Equip Bonus Payment: // 0 = None // 1 = Zeny // 2 = Cash Points set .equip_req,1; set .equip_r_am,100000; // 100k // Setting Equip Bonus Duration in Milliseconds (Seconds*1000) set .eq_dur,3600000; // 1 Hour
  2. I've fixed it on my own
  3. I've done that and I still get the same msg and an error.
  4. https://rathena.org/board/topic/64211-about-sgcp/ I have the same problem as this link please check the link. but, even though i change to "group_id". I still have the error.
  5. INSERT INTO hercules.login (userid,user_pass,sex,email,group_id) VALUES ("myid","12345","M","[email protected]",0) I get this error
  6. When I try to register and create! this is the message I get after. INSERT INTO hercules.login (userid,user_pass,sex,email,group_id) VALUES ("myid","12345","M","[email protected]",0) I've changed registration.php "level" to "group_id". and also changed "register_log" to "group_id". is there somebody who knows how to fix this problem?
×
×
  • Create New...