Jump to content

n0tttt

Members
  • Posts

    303
  • Joined

  • Days Won

    12

Everything posted by n0tttt

  1. I have this function by Tokeiburu. function script get_decimal { .@x = getarg(0); .@y = getarg(1); .@precision = getarg(2,2); // The amount of digits to keep after the dot .@mod = pow(10, .@precision); .@left = .@x / .@y; .@right = (.@x * .@mod / .@y) % .@mod; .@result$ = "" + .@left; if (!.@right) return .@result$; // Removes trailing zeroes, for example: // With .@zeroes set to 0, 5 / 2 will output 2.5 // With .@zeroes set to 1, 5 / 2 will output 2.50 .@zeroes = 0; for (.@i = 0; .@i < .@precision; .@i++) { .@digit = .@right % 10; .@right = .@right / 10; if (!.@zeroes) { if (.@digit == 0) continue; .@output$ = insertchar(.@output$, .@digit + "", 0); .@zeroes = 1; } else { .@output$ = insertchar(.@output$, .@digit + "", 0); } } return .@result$ + "," + .@output$; } dispbottom "Gained "+.@exp_gained+" mastery points ("+get_decimal(.FishingLvl[FishingLvl]*100,.@exp_gained)+")%.";
  2. .@exp_gained = strmobinfo(7,killedrid)/100; .@mob_lvl = strmobinfo(3,killedrid); .@lvl_dif = .@mob_lvl - BaseLevel; if(.@lvl_dif != 0) { if(.@lvl_dif < 0) .@lvl_dif = MAX_LEVEL + (~(.@lvl_dif) + 1); for(;.@i < .penalty_size;.@i+=2) { if(.@lvl_dif >= .penalty[.@i]) break; } if(.@i != .penalty_size) .@exp_gained*= .penalty[.@i + 1]/100; } And manual values: - script Fishing_Exp -1,{ OnInit: setarray .FishingLvl[0], 1, 3800, 6200, 10400, 15200, 22900, 27100, 30000, 32500, 35700, 41300, 45000, 45800, 47600, 50300, 58700, 63900, 67100, 70300, 73500, 90600, 96200, 102700, 110200, 121400, 144700, 152900, 163100, 173300, 183500, 213500, 224700, 236000, 247200, 260700, 299800, 324800, 343600, 362300, 374800, 474400, 497000, 512100, 542200, 564800, 644300, 678200, 712100, 754500, 796900, 873100, 911900, 950600, 989400, 1028100, 1143300, 1199900, 1233800, 1279100, 1324300, 1486900, 1515900, 1603000, 1719200, 1806300, 2040300, 2244300, 2415900, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000; set .MaxFishingLvl, getarraysize(.FishingLvl); end; OnNPCKillEvent: if (fishing !=1 || FishingvLvl >= .MaxFishingLvl) {end;} //this will check if he made a quest to learn the mastery .@mob_jexp = strmobinfo(7,killedrid); .@exp_gained = .@mob_jexp; .@mob_lvl = strmobinfo(3,killedrid); .@lvl_dif = .@mob_lvl - BaseLevel; if(.@lvl_dif != 0) { if(.@lvl_dif <= -31) .@exp_gained*= 10; else if(.@lvl_dif <= -26) .@exp_gained*= 35; else if(.@lvl_dif <= -21) .@exp_gained*= 60; else if(.@lvl_dif <= -16) .@exp_gained*= 85; else if(.@lvl_dif <= -11) .@exp_gained *= 90; else if(.@lvl_dif <= -6) .@exp_gained*= 95; else if(.@lvl_dif <= -1) .@exp_gained*= 100; else if(.@lvl_dif <= 3) .@exp_gained*= 105; else if(.@lvl_dif <= 4) .@exp_gained*= 110; else if(.@lvl_dif <= 5) .@exp_gained*= 115; else if(.@lvl_dif <= 6) .@exp_gained*= 120; else if(.@lvl_dif <= 7) .@exp_gained*= 125; else if(.@lvl_dif <= 8) .@exp_gained*= 130; else if(.@lvl_dif <= 9) .@exp_gained*= 135; else if(.@lvl_dif <= 10) .@exp_gained*= 140; else if(.@lvl_dif <= 11) .@exp_gained*= 135; else if(.@lvl_dif <= 12) .@exp_gained*= 130; else if(.@lvl_dif <= 13) .@exp_gained*= 125; else if(.@lvl_dif <= 14) .@exp_gained*= 120; else if(.@lvl_dif <= 15) .@exp_gained*= 115; else .@exp_gained*= 40; .@exp_gained/= 100; } dispbottom "You gained "+F_InsertComma(.@exp_gained)+" job exp."; set FishingExp, FishingExp + .@exp_gained; if(.FishingLvl[FishingLvl] <= FishingExp){ set FishingLvl, FishingLvl + 1; dispbottom "[Level Up] Congrats! Your Fishing level is now: "+FishingLvl; set FishingExp,0; if(FishingLvl == .MaxFishingLvl) { dispbottom "Your Fishing Mastery is at maximum level."; } } end; }
  3. And like this? .@exp_gained = strmobinfo(7,killedrid)/100; .@mob_lvl = strmobinfo(3,killedrid); .@lvl_dif = .@mob_lvl - BaseLevel; if(.@lvl_dif != 0) { if(.@lvl_dif < 0) .@lvl_dif = MAX_LEVEL + (~(.@lvl_dif) + 1); for(;.@i < .penalty_size;.@i+=2) { if(.@lvl_dif >= .penalty[.@i]) break; } if(.@i != .penalty_size) .@exp_gained*= .penalty[.@i + 1]; }
  4. Nice find man. Anyways I had a typo. .@exp_gained*= .penalty[.@mi + 1]; has to be .@exp_gained*= .penalty[.@i + 1];
  5. //===== eAthena Script ======================================= //= Mini-jeux basique pour Rose Of Sharon //===== Par: ================================================= //= Hiero //===== Version du Script: =================================== //= 1.0 Obtimisation du code, corrections diverses //= 0.5 Ajout du monstre Bonus //= 0.4 Mis en place du système de récompence //= 0.2 Ajout d'un "Cubeception Count" //= 0.3 Ajout d'un killmonsterall //= 0.1 Commencement du script //===== Compatible Avec: ===================================== //= eAthena TxT & SQL //===== Commentaires ========================================= // //= Script automatique de l'event "Chercher le Cubeception". //= Actif toutes les deux heures à partir 00h00. prontera,163,292,3 script Cubeception Guard 627,{ //4_M_PROFESSORWORM if(playerattached()!=0) { end; } set .@GMLevel,60; // GM level required to access NPC. set .@npcname$, "[Cubceptionnist]"; mes .@npcname$; if (getgmlevel()>=.@GMLevel) { if ($@Cubeception_Actif == 0) { mes "Event status: [^FF0000OFF^000000]"; mes "Do you wanna activate it ?"; next; switch( select ("Yes:No") ) { case 1: mes .@npcname$; set $@Cubeception_Actif,2; mes "Allright, let's go !"; close2; doevent "prtcub::OnGmSet"; end; case 2: mes .@npcname$; mes "Farewell then."; close; } } } if ($@Cubeception_Actif == 1) { mes "The event \"Find the Cubeception\" is currently on."; mes "Do you want to be part of it ?"; next; switch (select("Yes:No:See the rules")) { case 1: mes .@npcname$; mes "Perfect. Good luck !"; set $@event_cubeception_tabI,$@event_cubeception_tabI+1; set $event_cc_pig$[$@event_cubeception_tabI],strcharinfo(0); close2; $eventcubUsersAId[getarraysize($eventUsersAId)] = getcharid(3); warp "izlude_d",0,0; end; case 2: mes .@npcname$; mes "Come see me again if you wanna be part of it."; mes "See you soon!"; close; case 3: mes .@npcname$; mes "The principe is quite simple. Players are warped in a town full of Cubeceptions."; mes "You'll simply have to find the good one."; next; mes .@npcname$; mes "Sometimes, Bonus Monsters will appears. If you kill one, a random bonus or malus will be applied !"; close; } } else { mes "The event isn't active."; next; switch (select("See the rules:Leave")) { case 1: mes .@npcname$; mes "The principe is quite simple. Players are warped in a town full of Cubeceptions."; mes "You'll simply have to find the good one."; next; mes .@npcname$; mes "Sometimes, Bonus Monsters will appears. If you kill one, a random bonus or malus will be applied !"; close; case 2: mes .@npcname$; mes "Come see me again when the event will be on."; close; } } OnInit: deletearray $event_cc_pig$; set $@event_cubeception_tabI,0; set .eventMap$, "izlude_d"; setarray $eventcubUsersAId[0],0; end; } - script LancementCubeception::prtcub -1,{ OnWhisperGlobal: OnClock1600: OnStartCubeception: OnGmSet: if ($@Cubeception_Actif == 1 ) { end; // Si par hasard, le Cubeception n'est pas tué lors de 1er lancement de l'event, le script ne sera pas réactivé une 2eme fois. } else { announce "The event \"Find the Cubeception\" will start in 3 minutes!",bc_all | bc_blue; announce "Please go towards to the top in the area of hand statue!.",bc_all | bc_blue; killmonsterall .eventMap$; set $@Cubeception_Actif, 1; // Event actif si la variable $@Cubeception_Actif = 1 set .monster_countCubeception, 99; //Nombre de mauvais Cubeception sur la map set .monster_eventCubeception, 1; // Nombre de bon Cubeception sur la map set .monster_bonusCubeception, 5; // Nombre de monstre Bonus sur la map sleep 60000; announce "The event \"Find the Cubeception\" will start in 2 minutes !",bc_all | bc_blue; sleep 60000; announce "The event \"Find the Cubeception\" will start in 1 minutes !",bc_all | bc_blue; sleep 5900; announce "The event \"Find the Cubeception\" starts!",bc_all | bc_blue; initnpctimer; monster .eventMap$,0,0,"Cubeception",rand(1395,1398),.monster_countCubeception,"prtcub::OnThisMobDeath"; monster .eventMap$,0,0,"Cubeception",rand(1395,1398),.monster_eventCubeception,"prtcub::OnThisMobDeath2"; monster .eventMap$,0,0,"Bonus",rand(1395,1398),.monster_bonusCubeception,"prtcub::OnThisMobDeath3"; setmapflag .eventMap$, 12; setmapflag .eventMap$, 0; setmapflag .eventMap$, 3; setmapflag .eventMap$, 4; setmapflag .eventMap$, 15; setmapflag .eventMap$, 1; setmapflag .eventMap$, 13; setmapflag .eventMap$, 31; initnpctimer; end; OnTimer300000: set $@Cubeception_Actif,0; killmonsterall .eventMap$; removemapflag .eventMap$, 12; removemapflag .eventMap$, 0; removemapflag .eventMap$, 3; removemapflag .eventMap$, 4; removemapflag .eventMap$, 15; removemapflag .eventMap$, 1; removemapflag .eventMap$, 13; removemapflag .eventMap$, 31; mapannounce .eventMap$,"Nobody win the event. What a shame !",bc_map | bc_blue; sleep 3000; for(set .@tmp1,1;.@tmp1<=$@event_cubeception_tabI;set .@tmp1,.@tmp1+1){ charcommand "#size "+event_cc_pig$[.@tmp1]; sleep 500; } sleep 2000; deletearray event_cc_pig$,$@event_cubeception_tabI+1; set $@event_cubeception_tabI,0; for (set .@i,0; .@i<getarraysize($eventcubUsersAId); set .@i,.@i+1) { attachrid($eventcubUsersAId[.@i]); atcommand("@load"); } deletearray $eventcubUsersAId[0], getarraysize($eventcubUsersAId); goto OnEventEnd; end; OnEventEnd: removemapflag .eventMap$, 12; removemapflag .eventMap$, 0; removemapflag .eventMap$, 3; removemapflag .eventMap$, 4; removemapflag .eventMap$, 15; removemapflag .eventMap$, 1; removemapflag .eventMap$, 13; removemapflag .eventMap$, 31; end; OnThisMobDeath: set .monster_countCubeception, .monster_countCubeception-1; dispbottom "I'm not the good Cubeception."; mapannounce .eventMap$,"There's still "+(.monster_countCubeception+.monster_eventCubeception)+" Cubeceptions on the map !",bc_blue|bc_map; end; OnThisMobDeath2: dispbottom "I am the good Cubeception !"; if (.rewardMode == 0) { logmes "[Cubeception] " + strcharinfo(0) + " wins the event and obtains " + .prizeAmt + " Currency Points."; callfunc ("AddPoints", getcharid(3), .prizeAmt); } else { logmes "[CachePoring] " + strcharinfo(0) + " wins the event and obtains " + .prizeAmt + " " + getitemname(rewardId) + "."; getitem .rewardId, .prizeAmt; } mapannounce .eventMap$,strcharinfo(0)+" just found the good Cubeception !",bc_map | bc_blue; killmonsterall .eventMap$; set $@Cubeception_Actif, 0; for(set .@tmp1,1;.@tmp1<=$@event_cubeception_tabI;set .@tmp1,.@tmp1+1){ charcommand "#size "+event_cc_pig$[.@tmp1]; sleep 500; } sleep 2000; deletearray event_cc_pig$,$@event_cubeception_tabI+1; set $@event_cubeception_tabI,0; for (set .@i,0; .@i<getarraysize($eventcubUsersAId); set .@i,.@i+1) { attachrid($eventcubUsersAId[.@i]); atcommand("@load"); } deletearray $eventcubUsersAId[0], getarraysize($eventcubUsersAId); goto OnEventEnd; end; OnThisMobDeath3: set .monster_bonusCubeception, .monster_bonusCubeception-1; if (.monster_bonusCubeception >= 1) mapannounce .eventMap$,""+strcharinfo(0)+" found a bonus monster, there's still "+.monster_bonusCubeception+" !",bc_map | bc_blue; else mapannounce .eventMap$,""+strcharinfo(0)+" found a bonus monster, there's no more !",bc_map | bc_blue; switch (rand(1,4)) { case 1: set Zeny, Zeny + 25000; dispbottom "You're lucky, you become wealhtier !"; break; case 2: dispbottom "You're lucky !"; if (.rewardMode == 0) { logmes "[Cubeception] " + strcharinfo(0) + " kills a bonus monster and obtains " + .prizeAmt + " Currency Points."; callfunc ("AddPoints", getcharid(3), .prizeAmt); } else { logmes "[CachePoring] " + strcharinfo(0) + " kills a bonus monster and obtains " + .prizeAmt + " " + getitemname(rewardId) + "."; getitem .rewardId, .prizeAmt; } break; case 3: percentheal -99, -99; specialeffect2 49,"strcharinfo(0)"; dispbottom "You're unlucky !"; break; // Malus HP/SP case 4: charcommand "#size "+strcharinfo(0)+" 1"; dispbottom "You're lucky, you're getter smaller !"; break; // } end; } OnInit: set .eventMap$, "izlude_d"; set .rewardMode, 0; set .rewardId, 675; set .prizeAmt, rand(15,50); end; } //============================================================== //= Système de sécurité //============================================================== - script mapload::cubmapload -1,{ OnPCLoginEvent: getmapxy(.@map$,.@x,.@y,0); if (.@map$ == .eventMap$) { warp "prontera",155,89; } end; }
  6. I think the script was meant to kill a large amounts of mobs in an instant, but well, I think this fixes it: - script Items_Conf -1,{ OnInit: callsub Ids, 60656, 1, 1004, 1, 60657, 1, 1004, 1, 60658, 1, 1004, 0 ; callsub Ids, 60635, 1, 111, 1, 60636, 1, 111, 1, 60637, 1, 111, 0 ; /* ID[...], evolution mode[...], mob id[...], neccessary to get 1%[...]. If you want any monster, use 111. Evolution modes: 1 = Every X numer of mobs (1%). 2 = Experience (1%). */ /* 0 = Won't be evolved automatically. 1 = Will be evolved automatically */ .auto = 1; /* Color of the announces. */ setarray .c$[0], "4db557", // % of evolution. "d43438", // Wings evolving. "4da5b5"; // Wings evolved. /* slots to check. EQI_ACC_L (0) - Accessory 1 EQI_ACC_R (1) - Accessory 2 EQI_SHOES (2) - Footgear (shoes, boots) EQI_GARMENT (3) - Garment (mufflers, hoods, manteaux) EQI_HEAD_LOW (4) - Lower Headgear (beards, some masks) EQI_HEAD_MID (5) - Middle Headgear (masks, glasses) EQI_HEAD_TOP (6) - Upper Headgear EQI_ARMOR (7) - Armor (jackets, robes) EQI_HAND_L (8) - Left hand (weapons, shields) EQI_HAND_R (9) - Right hand (weapons) EQI_COSTUME_HEAD_TOP (10) - Upper Costume Headgear EQI_COSTUME_HEAD_MID (11) - Middle Costume Headgear EQI_COSTUME_HEAD_LOW (12) - Lower Costume Headgear EQI_COSTUME_GARMENT (13) - Costume Garment EQI_AMMO (14) - Arrow/Ammunition EQI_SHADOW_ARMOR (15) - Shadow Armor EQI_SHADOW_WEAPON (16) - Shadow Weapon EQI_SHADOW_SHIELD (17) - Shadow Shield EQI_SHADOW_SHOES (18) - Shadow Shoes EQI_SHADOW_ACC_R (19) - Shadow Accessory 2 EQI_SHADOW_ACC_L (20) - Shadow Accessory 1 */ setarray .slots[0], EQI_HEAD_LOW, EQI_HEAD_MID, EQI_HEAD_TOP; //============================================= end ; Ids: for ( .@args = getargcount ( ); .@a < .@args ; .@a+=4 ) { .@i = .w2[.w1]++; setd ".a1"+ .w1 +"_"+ .@i, getarg ( .@a ); // id. if ( getarg ( .@a + 4, 0 ) != 0 ) { setd ".a2"+ .w1 +"_"+ .@i, getarg ( .@a + 1 ); // mode. setd ".a3"+ .w1 +"_"+ .@i, getarg ( .@a + 2 ); // mob id. setd ".a4"+ .w1 +"_"+ .@i, getarg ( .@a + 3 ); // amount. } } .w1++; return ; OnNPCKillEvent: if ( @evolving ) end ; // Cache. That old loop on every mob killed... if ( @wing[0] && isequipped ( @wing[0] ) ) { .@c = 1; .@e = @wing[0]; .@i = @wing[1] - 1; .@j = @wing[2] - 1; .@a = @wing[3]; } else { .@size = getarraysize ( .slots ); while ( .@a < .@size && !.@c ) { .@e = getequipid ( .slots[.@a] ); .@a++; if ( .@e < 0 ) continue ; .@i = 0; while ( .@i < .w1 && !.@c ) { .@j = 0; while ( .@j < .w2[.@i] && !.@c ) { if ( .@e == getd ( ".a1"+ .@i +"_"+ .@j ) && getd ( ".a1"+ .@i +"_"+ ( .@j + 1 ) ) ) { if ( getd ( ".a4"+ .@i +"_"+ .@j ) > 0 && ( killedrid == getd ( ".a3"+ .@i +"_"+ .@j ) || getd ( ".a3"+ .@i +"_"+ .@j ) < 1001 ) ) { .@c = 1; setarray @wing[0], .@e, .@i + 1, .@j + 1, .@a; } } if ( !.@c ) .@j++; } if ( !.@c ) .@i++; } } } if ( .@c ) { if ( getd ( ".a2"+ .@i +"_"+ .@j ) == 1 ) { .@amount = getd ( "mobs_"+ .@e ); setd "mobs_"+ .@e, .@amount + 1; if ( getd ( "mobs_"+ .@e ) < getd ( ".a4"+ .@i +"_"+ .@j ) ) end ; setd "mobs_"+ .@e, 0; } else if ( getd ( ".a2"+ .@i +"_"+ .@j ) == 2 ) { .@amount = getd ( "exp_"+ .@e ); setd "exp_"+ .@e, .@amount + strmobinfo ( 6, killedrid ); if ( getd ( "exp_"+ .@e ) < getd ( ".a4"+ .@i +"_"+ .@j ) ) end ; setd "exp_"+ .@e, 0; } else { debugmes "Script Items_Evo, error: wrong mode."; end; } specialeffect2 58 ; sleep2 rand ( 190, 280 ) ; specialeffect2 383 ; .@percent = getd ( "evo"+ .@e ); if ( .@percent < 100 ) { setd "evo"+ .@e, ++.@percent; announce getitemname ( .@e ) +" "+ .@percent +"% to evolve...", bc_self, "0x"+ .c$[0] ; } if ( .@percent >= 100 && .auto && !@evolving ) { @evolving = 1; specialeffect2 263 ; sleep2 500 ; specialeffect2 377 ; sleep2 300 ; specialeffect2 542 ; sleep2 300 ; announce getitemname ( .@e ) +" is evolving..." , bc_self, "0x"+ .c$[1] ; .@k = 3; while ( .@k-- ) { specialeffect2 521 ; sleep2 900 ; } specialeffect2 463 ; sleep2 200; specialeffect2 665 ; sleep2 500 ; .@a--; setarray .@card[1], getequipcardid ( .slots[.@a], 0 ), getequipcardid ( .slots[.@a], 1 ), getequipcardid ( .slots[.@a], 2 ), getequipcardid ( .slots[.@a], 3 ); .@refine = getequiprefinerycnt ( .slots[.@a] ); unequip .slots[.@a]; delitem .@e, 1 ; getitem2 getd ( ".a1"+ .@i +"_"+ ( .@j + 1 ) ) , 1, 1, .@refine, 0, .@card[1], .@card[2], .@card[3], .@card[4] ; equip getd ( ".a1"+ .@i +"_"+ ( .@j + 1 ) ) ; setd "evo"+ .@e, 0; deletearray @wing ; announce "Congratulations, your wings have evolved to "+ getitemname ( getd ( ".a1"+ .@i +"_"+ ( .@j + 1 ) ) ) +"." , bc_self , "0x"+ .c$[2] ; @evolving = 0; } } end ; }
  7. Could it be you having duplicate ids? ACCESSORY_C_Cyber_Income = 1790, ACCESSORY_C_Electro_Two_Side_Up = 1791, Also you could put both files on a pastebin to check better.
  8. Okay, I understand now. - script Items_Conf -1,{ OnInit: callsub Ids, 60656, 1, 1004, 1, 60657, 1, 1004, 1, 60658, 1, 1004, 0 ; callsub Ids, 60635, 1, 111, 1, 60636, 1, 111, 1, 60637, 1, 111, 0 ; /* ID[...], evolution mode[...], mob id[...], neccessary to get 1%[...]. If you want any monster, use 111. Evolution modes: 1 = Every X numer of mobs (1%). 2 = Experience (1%). */ /* 0 = Won't be evolved automatically. 1 = Will be evolved automatically */ .auto = 1; /* Color of the announces. */ setarray .c$[0], "4db557", // % of evolution. "d43438", // Wings evolving. "4da5b5"; // Wings evolved. /* slots to check. EQI_ACC_L (0) - Accessory 1 EQI_ACC_R (1) - Accessory 2 EQI_SHOES (2) - Footgear (shoes, boots) EQI_GARMENT (3) - Garment (mufflers, hoods, manteaux) EQI_HEAD_LOW (4) - Lower Headgear (beards, some masks) EQI_HEAD_MID (5) - Middle Headgear (masks, glasses) EQI_HEAD_TOP (6) - Upper Headgear EQI_ARMOR (7) - Armor (jackets, robes) EQI_HAND_L (8) - Left hand (weapons, shields) EQI_HAND_R (9) - Right hand (weapons) EQI_COSTUME_HEAD_TOP (10) - Upper Costume Headgear EQI_COSTUME_HEAD_MID (11) - Middle Costume Headgear EQI_COSTUME_HEAD_LOW (12) - Lower Costume Headgear EQI_COSTUME_GARMENT (13) - Costume Garment EQI_AMMO (14) - Arrow/Ammunition EQI_SHADOW_ARMOR (15) - Shadow Armor EQI_SHADOW_WEAPON (16) - Shadow Weapon EQI_SHADOW_SHIELD (17) - Shadow Shield EQI_SHADOW_SHOES (18) - Shadow Shoes EQI_SHADOW_ACC_R (19) - Shadow Accessory 2 EQI_SHADOW_ACC_L (20) - Shadow Accessory 1 */ setarray .slots[0], EQI_HEAD_LOW, EQI_HEAD_MID, EQI_HEAD_TOP; //============================================= end ; Ids: for ( .@args = getargcount ( ); .@a < .@args ; .@a+=4 ) { .@i = .w2[.w1]++; setd ".a1"+ .w1 +"_"+ .@i, getarg ( .@a ); // id. if ( getarg ( .@a + 4, 0 ) != 0 ) { setd ".a2"+ .w1 +"_"+ .@i, getarg ( .@a + 1 ); // mode. setd ".a3"+ .w1 +"_"+ .@i, getarg ( .@a + 2 ); // mob id. setd ".a4"+ .w1 +"_"+ .@i, getarg ( .@a + 3 ); // amount. } } .w1++; return ; OnNPCKillEvent: if ( @evolving ) end ; // Cache. That old loop on every mob killed... if ( @wing[0] && isequipped ( @wing[0] ) ) { .@c = 1; .@e = @wing[0]; .@i = @wing[1] - 1; .@j = @wing[2] - 1; .@a = @wing[3]; } else { .@size = getarraysize ( .slots ); while ( .@a < .@size && !.@c ) { .@e = getequipid ( .slots[.@a] ); .@a++; if ( .@e < 0 ) continue ; .@i = 0; while ( .@i < .w1 && !.@c ) { .@j = 0; while ( .@j < .w2[.@i] && !.@c ) { if ( .@e == getd ( ".a1"+ .@i +"_"+ .@j ) && getd ( ".a1"+ .@i +"_"+ ( .@j + 1 ) ) ) { if ( getd ( ".a4"+ .@i +"_"+ .@j ) > 0 && ( killedrid == getd ( ".a3"+ .@i +"_"+ .@j ) || getd ( ".a3"+ .@i +"_"+ .@j ) < 1001 ) ) { .@c = 1; setarray @wing[0], .@e, .@i + 1, .@j + 1, .@a; } } if ( !.@c ) .@j++; } if ( !.@c ) .@i++; } } } if ( .@c ) { .@percent = getd ( "evo"+ .@e ); if ( getd ( ".a2"+ .@i +"_"+ .@j ) == 1 ) { .@amount = getd ( "mobs_"+ .@e ); setd "mobs_"+ .@e, .@amount + 1; if ( getd ( "mobs_"+ .@e ) < getd ( ".a4"+ .@i +"_"+ .@j ) ) end ; setd "mobs_"+ .@e, 0; } else if ( getd ( ".a2"+ .@i +"_"+ .@j ) == 2 ) { .@amount = getd ( "exp_"+ .@e ); setd "exp_"+ .@e, .@amount + strmobinfo ( 6, killedrid ); if ( getd ( "exp_"+ .@e ) < getd ( ".a4"+ .@i +"_"+ .@j ) ) end ; setd "exp_"+ .@e, 0; } else { debugmes "Script Items_Evo, error: wrong mode."; end; } if ( .@percent < 100 ) setd "evo"+ .@e, ++.@percent; announce getitemname ( .@e ) +" "+ .@percent +"% to evolve...", bc_self, "0x"+ .c$[0] ; specialeffect2 58 ; sleep2 200 ; specialeffect2 383 ; if ( .@percent >= 100 && .auto ) { @evolving = 1; specialeffect2 263 ; sleep2 500 ; specialeffect2 377 ; sleep2 300 ; specialeffect2 542 ; sleep2 300 ; announce getitemname ( .@e ) +" is evolving..." , bc_self, "0x"+ .c$[1] ; .@k = 3; while ( .@k-- ) { specialeffect2 521 ; sleep2 900 ; } specialeffect2 463 ; sleep2 200; specialeffect2 665 ; sleep2 500 ; .@a--; setarray .@card[1], getequipcardid ( .slots[.@a], 0 ), getequipcardid ( .slots[.@a], 1 ), getequipcardid ( .slots[.@a], 2 ), getequipcardid ( .slots[.@a], 3 ); .@refine = getequiprefinerycnt ( .slots[.@a] ); unequip .slots[.@a]; delitem .@e, 1 ; getitem2 getd ( ".a1"+ .@i +"_"+ ( .@j + 1 ) ) , 1, 1, .@refine, 0, .@card[1], .@card[2], .@card[3], .@card[4] ; equip getd ( ".a1"+ .@i +"_"+ ( .@j + 1 ) ) ; setd "evo"+ .@e, 0; deletearray @wing ; announce "Congratulations, your wings have evolved to "+ getitemname ( getd ( ".a1"+ .@i +"_"+ ( .@j + 1 ) ) ) +"." , bc_self , "0x"+ .c$[2] ; @evolving = 0; } } end ; }
  9. I didn't understand very well, but with this change, it's impossible for it to reach >100%. - script Items_Conf -1,{ OnInit: callsub Ids, 60656, 1, 1004, 1, 60657, 1, 1004, 1, 60658, 1, 1004, 0 ; callsub Ids, 60635, 1, 111, 1, 60636, 1, 111, 1, 60637, 1, 111, 0 ; /* ID[...], evolution mode[...], mob id[...], neccessary to get 1%[...]. If you want any monster, use 111. Evolution modes: 1 = Every X numer of mobs (1%). 2 = Experience (1%). */ /* 0 = Won't be evolved automatically. 1 = Will be evolved automatically */ .auto = 1; /* Color of the announces. */ setarray .c$[0], "4db557", // % of evolution. "d43438", // Wings evolving. "4da5b5"; // Wings evolved. /* slots to check. EQI_ACC_L (0) - Accessory 1 EQI_ACC_R (1) - Accessory 2 EQI_SHOES (2) - Footgear (shoes, boots) EQI_GARMENT (3) - Garment (mufflers, hoods, manteaux) EQI_HEAD_LOW (4) - Lower Headgear (beards, some masks) EQI_HEAD_MID (5) - Middle Headgear (masks, glasses) EQI_HEAD_TOP (6) - Upper Headgear EQI_ARMOR (7) - Armor (jackets, robes) EQI_HAND_L (8) - Left hand (weapons, shields) EQI_HAND_R (9) - Right hand (weapons) EQI_COSTUME_HEAD_TOP (10) - Upper Costume Headgear EQI_COSTUME_HEAD_MID (11) - Middle Costume Headgear EQI_COSTUME_HEAD_LOW (12) - Lower Costume Headgear EQI_COSTUME_GARMENT (13) - Costume Garment EQI_AMMO (14) - Arrow/Ammunition EQI_SHADOW_ARMOR (15) - Shadow Armor EQI_SHADOW_WEAPON (16) - Shadow Weapon EQI_SHADOW_SHIELD (17) - Shadow Shield EQI_SHADOW_SHOES (18) - Shadow Shoes EQI_SHADOW_ACC_R (19) - Shadow Accessory 2 EQI_SHADOW_ACC_L (20) - Shadow Accessory 1 */ setarray .slots[0], EQI_HEAD_LOW, EQI_HEAD_MID, EQI_HEAD_TOP; //============================================= end ; Ids: for ( .@args = getargcount ( ); .@a < .@args ; .@a+=4 ) { .@i = .w2[.w1]++; setd ".a1"+ .w1 +"_"+ .@i, getarg ( .@a ); // id. if ( getarg ( .@a + 4, 0 ) != 0 ) { setd ".a2"+ .w1 +"_"+ .@i, getarg ( .@a + 1 ); // mode. setd ".a3"+ .w1 +"_"+ .@i, getarg ( .@a + 2 ); // mob id. setd ".a4"+ .w1 +"_"+ .@i, getarg ( .@a + 3 ); // amount. } } .w1++; return ; OnNPCKillEvent: if ( @evolving ) end ; // Cache. That old loop on every mob killed... if ( @wing[0] && isequipped ( @wing[0] ) ) { .@c = 1; .@e = @wing[0]; .@i = @wing[1] - 1; .@j = @wing[2] - 1; .@a = @wing[3]; } else { .@size = getarraysize ( .slots ); while ( .@a < .@size && !.@c ) { .@e = getequipid ( .slots[.@a] ); .@a++; if ( .@e < 0 ) continue ; .@i = 0; while ( .@i < .w1 && !.@c ) { .@j = 0; while ( .@j < .w2[.@i] && !.@c ) { if ( .@e == getd ( ".a1"+ .@i +"_"+ .@j ) && getd ( ".a1"+ .@i +"_"+ ( .@j + 1 ) ) ) { if ( getd ( ".a4"+ .@i +"_"+ .@j ) > 0 && ( killedrid == getd ( ".a3"+ .@i +"_"+ .@j ) || getd ( ".a3"+ .@i +"_"+ .@j ) < 1001 ) ) { .@c = 1; setarray @wing[0], .@e, .@i + 1, .@j + 1, .@a; } } if ( !.@c ) .@j++; } if ( !.@c ) .@i++; } } } if ( .@c ) { if ( getd ( ".a2"+ .@i +"_"+ .@j ) == 1 ) { .@amount = getd ( "mobs_"+ .@e ); setd "mobs_"+ .@e, .@amount + 1; if ( getd ( "mobs_"+ .@e ) < getd ( ".a4"+ .@i +"_"+ .@j ) ) end ; setd "evo"+ .@e, getd ( "evo"+ .@e ) + 1; setd "mobs_"+ .@e, 0; } else if ( getd ( ".a2"+ .@i +"_"+ .@j ) == 2 ) { .@amount = getd ( "exp_"+ .@e ); setd "exp_"+ .@e, .@amount + strmobinfo ( 6, killedrid ); if ( getd ( "exp_"+ .@e ) < getd ( ".a4"+ .@i +"_"+ .@j ) ) end ; setd "evo"+ .@e, getd ( "evo"+ .@e ) + 1; setd "exp_"+ .@e, 0; } else debugmes "Script Items_Evo, error: wrong mode."; announce getitemname ( .@e ) +" is now "+ getd ( "evo"+ .@e ) +"% from evolving...", bc_self, "0x"+ .c$[0] ; specialeffect2 58 ; sleep2 200 ; specialeffect2 383 ; if ( getd ( "evo"+ .@e ) == 100 && .auto ) { @evolving = 1; specialeffect2 263 ; sleep2 500 ; specialeffect2 377 ; sleep2 300 ; specialeffect2 542 ; sleep2 300 ; announce getitemname ( .@e ) +" is evolving..." , bc_self, "0x"+ .c$[1] ; .@k = 3; while ( .@k-- ) { specialeffect2 521 ; sleep2 900 ; } specialeffect2 463 ; sleep2 200; specialeffect2 665 ; sleep2 500 ; .@a--; setarray .@card[1], getequipcardid ( .slots[.@a], 0 ), getequipcardid ( .slots[.@a], 1 ), getequipcardid ( .slots[.@a], 2 ), getequipcardid ( .slots[.@a], 3 ); .@refine = getequiprefinerycnt ( .slots[.@a] ); unequip .slots[.@a]; delitem .@e, 1 ; getitem2 getd ( ".a1"+ .@i +"_"+ ( .@j + 1 ) ) , 1, 1, .@refine, 0, .@card[1], .@card[2], .@card[3], .@card[4] ; equip getd ( ".a1"+ .@i +"_"+ ( .@j + 1 ) ) ; setd "evo"+ .@e, 0; deletearray @wing ; announce "Congratulations, your wings have evolved to "+ getitemname ( getd ( ".a1"+ .@i +"_"+ ( .@j + 1 ) ) ) +"." , bc_self , "0x"+ .c$[2] ; @evolving = 0; } } end ; } Or do you mean something else?
  10. - script Items_Conf -1,{ OnInit: callsub Ids, 60656, 1, 1004, 1, 60657, 1, 1004, 1, 60658, 1, 1004, 0 ; callsub Ids, 60635, 1, 111, 1, 60636, 1, 111, 1, 60637, 1, 111, 0 ; /* ID[...], evolution mode[...], mob id[...], neccessary to get 1%[...]. If you want any monster, use 111. Evolution modes: 1 = Every X numer of mobs (1%). 2 = Experience (1%). */ /* 0 = Won't be evolved automatically. 1 = Will be evolved automatically */ .auto = 1; /* Color of the announces. */ setarray .c$[0], "4db557", // % of evolution. "d43438", // Wings evolving. "4da5b5"; // Wings evolved. /* slots to check. EQI_ACC_L (0) - Accessory 1 EQI_ACC_R (1) - Accessory 2 EQI_SHOES (2) - Footgear (shoes, boots) EQI_GARMENT (3) - Garment (mufflers, hoods, manteaux) EQI_HEAD_LOW (4) - Lower Headgear (beards, some masks) EQI_HEAD_MID (5) - Middle Headgear (masks, glasses) EQI_HEAD_TOP (6) - Upper Headgear EQI_ARMOR (7) - Armor (jackets, robes) EQI_HAND_L (8) - Left hand (weapons, shields) EQI_HAND_R (9) - Right hand (weapons) EQI_COSTUME_HEAD_TOP (10) - Upper Costume Headgear EQI_COSTUME_HEAD_MID (11) - Middle Costume Headgear EQI_COSTUME_HEAD_LOW (12) - Lower Costume Headgear EQI_COSTUME_GARMENT (13) - Costume Garment EQI_AMMO (14) - Arrow/Ammunition EQI_SHADOW_ARMOR (15) - Shadow Armor EQI_SHADOW_WEAPON (16) - Shadow Weapon EQI_SHADOW_SHIELD (17) - Shadow Shield EQI_SHADOW_SHOES (18) - Shadow Shoes EQI_SHADOW_ACC_R (19) - Shadow Accessory 2 EQI_SHADOW_ACC_L (20) - Shadow Accessory 1 */ setarray .slots[0], EQI_HEAD_LOW, EQI_HEAD_MID, EQI_HEAD_TOP; //============================================= end ; Ids: for ( .@args = getargcount ( ); .@a < .@args ; .@a+=4 ) { .@i = .w2[.w1]++; setd ".a1"+ .w1 +"_"+ .@i, getarg ( .@a ); // id. if ( getarg ( .@a + 4, 0 ) != 0 ) { setd ".a2"+ .w1 +"_"+ .@i, getarg ( .@a + 1 ); // mode. setd ".a3"+ .w1 +"_"+ .@i, getarg ( .@a + 2 ); // mob id. setd ".a4"+ .w1 +"_"+ .@i, getarg ( .@a + 3 ); // amount. } } .w1++; return ; OnNPCKillEvent: if ( @evolving ) end ; // Cache. That old loop on every mob killed... if ( @wing[0] && isequipped ( @wing[0] ) ) { .@c = 1; .@e = @wing[0]; .@i = @wing[1] - 1; .@j = @wing[2] - 1; .@a = @wing[3]; } else { .@size = getarraysize ( .slots ); while ( .@a < .@size && !.@c ) { .@e = getequipid ( .slots[.@a] ); .@a++; if ( .@e < 0 ) continue ; .@i = 0; while ( .@i < .w1 && !.@c ) { .@j = 0; while ( .@j < .w2[.@i] && !.@c ) { if ( .@e == getd ( ".a1"+ .@i +"_"+ .@j ) && getd ( ".a1"+ .@i +"_"+ ( .@j + 1 ) ) ) { if ( getd ( ".a4"+ .@i +"_"+ .@j ) > 0 && ( killedrid == getd ( ".a3"+ .@i +"_"+ .@j ) || getd ( ".a3"+ .@i +"_"+ .@j ) < 1001 ) ) { .@c = 1; setarray @wing[0], .@e, .@i + 1, .@j + 1, .@a; } } if ( !.@c ) .@j++; } if ( !.@c ) .@i++; } } } if ( .@c ) { if ( getd ( ".a2"+ .@i +"_"+ .@j ) == 1 ) { .@amount = getd ( "mobs_"+ .@e ); setd "mobs_"+ .@e, .@amount + 1; if ( getd ( "mobs_"+ .@e ) < getd ( ".a4"+ .@i +"_"+ .@j ) ) end ; setd "evo"+ .@e, getd ( "evo"+ .@e ) + 1; setd "mobs_"+ .@e, 0; } else if ( getd ( ".a2"+ .@i +"_"+ .@j ) == 2 ) { .@amount = getd ( "exp_"+ .@e ); setd "exp_"+ .@e, .@amount + strmobinfo ( 6, killedrid ); if ( getd ( "exp_"+ .@e ) < getd ( ".a4"+ .@i +"_"+ .@j ) ) end ; setd "evo"+ .@e, getd ( "evo"+ .@e ) + 1; setd "exp_"+ .@e, 0; } else debugmes "Script Items_Evo, error: wrong mode."; announce getitemname ( .@e ) +" is now "+ getd ( "evo"+ .@e ) +"% from evolving...", bc_self, "0x"+ .c$[0] ; specialeffect2 58 ; sleep2 200 ; specialeffect2 383 ; if ( getd ( "evo"+ .@e ) >= 100 && .auto ) { @evolving = 1; specialeffect2 263 ; sleep2 500 ; specialeffect2 377 ; sleep2 300 ; specialeffect2 542 ; sleep2 300 ; announce getitemname ( .@e ) +" is evolving..." , bc_self, "0x"+ .c$[1] ; .@k = 3; while ( .@k-- ) { specialeffect2 521 ; sleep2 900 ; } specialeffect2 463 ; sleep2 200; specialeffect2 665 ; sleep2 500 ; .@a--; setarray .@card[1], getequipcardid ( .slots[.@a], 0 ), getequipcardid ( .slots[.@a], 1 ), getequipcardid ( .slots[.@a], 2 ), getequipcardid ( .slots[.@a], 3 ); .@refine = getequiprefinerycnt ( .slots[.@a] ); unequip .slots[.@a]; delitem .@e, 1 ; getitem2 getd ( ".a1"+ .@i +"_"+ ( .@j + 1 ) ) , 1, 1, .@refine, 0, .@card[1], .@card[2], .@card[3], .@card[4] ; equip getd ( ".a1"+ .@i +"_"+ ( .@j + 1 ) ) ; setd "evo"+ .@e, 0; deletearray @wing ; announce "Congratulations, your wings have evolved to "+ getitemname ( getd ( ".a1"+ .@i +"_"+ ( .@j + 1 ) ) ) +"." , bc_self , "0x"+ .c$[2] ; @evolving = 0; } } end ; }
  11. What about this? - script Fishing_Exp -1,{ OnInit: setarray .penalty[0], 16,40, 15,115, 14,120, 13,125, 12,130, 11,135, 10,140, 9,135, 8,130, 7,125, 6,120, 5,115, 4,110, 3,105, -1,100, -6,95, -11,90, -16,85, -21,60, -26,35, -31,10; for(.penalty_size = getarraysize(.penalty);.@i < .penalty_size;.@i+=2) { .@diff = .penalty[.@i]; if(.@diff < 0) .penalty[.@i] = min(MAX_LEVEL + (~(.@diff) + 1),MAX_LEVEL*2); } setarray .FishingLvl[0], 1, 3800, 6200, 10400, 15200, 22900, 27100, 30000, 32500, 35700, 41300, 45000, 45800, 47600, 50300, 58700, 63900, 67100, 70300, 73500, 90600, 96200, 102700, 110200, 121400, 144700, 152900, 163100, 173300, 183500, 213500, 224700, 236000, 247200, 260700, 299800, 324800, 343600, 362300, 374800, 474400, 497000, 512100, 542200, 564800, 644300, 678200, 712100, 754500, 796900, 873100, 911900, 950600, 989400, 1028100, 1143300, 1199900, 1233800, 1279100, 1324300, 1486900, 1515900, 1603000, 1719200, 1806300, 2040300, 2244300, 2415900, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000; set .MaxFishingLvl, getarraysize(.FishingLvl); end; OnNPCKillEvent: if (fishing !=1 || FishingvLvl >= .MaxFishingLvl) {end;} //this will check if he made a quest to learn the mastery .@mob_jexp = strmobinfo(7,killedrid); .@rates = getbattleflag("job_exp_rate"); .@exp_gained = .@mob_jexp*.@rates/100; .@mob_lvl = strmobinfo(3,killedrid); .@lvl_dif = .@mob_lvl - BaseLevel; if(.@lvl_dif != 0) { if(.@lvl_dif < 0) .@lvl_dif = MAX_LEVEL + (~(.@lvl_dif) + 1); for(;.@i < .penalty_size;.@i+=2) { if(.@lvl_dif >= .penalty[.@i]) break; } if(.@i != .penalty_size) .@exp_gained*= .penalty[.@mi + 1]; } set FishingExp, FishingExp + .@exp_gained; if(.FishingLvl[FishingLvl] <= FishingExp){ set FishingLvl, FishingLvl + 1; dispbottom "[Level Up] Congrats! Your Fishing level is now: "+FishingLvl; set FishingExp,0; if(FishingLvl == .MaxFishingLvl) { dispbottom "Your Fishing Mastery is at maximum level."; } } end; } If not, I can think of a "hacky" way by using JobExp. - script Fishing_Exp -1,{ OnInit: setarray .FishingLvl[0], 1, 3800, 6200, 10400, 15200, 22900, 27100, 30000, 32500, 35700, 41300, 45000, 45800, 47600, 50300, 58700, 63900, 67100, 70300, 73500, 90600, 96200, 102700, 110200, 121400, 144700, 152900, 163100, 173300, 183500, 213500, 224700, 236000, 247200, 260700, 299800, 324800, 343600, 362300, 374800, 474400, 497000, 512100, 542200, 564800, 644300, 678200, 712100, 754500, 796900, 873100, 911900, 950600, 989400, 1028100, 1143300, 1199900, 1233800, 1279100, 1324300, 1486900, 1515900, 1603000, 1719200, 1806300, 2040300, 2244300, 2415900, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000; set .MaxFishingLvl, getarraysize(.FishingLvl); end; OnPCLoginEvent: if(fishing) @jobexp = JobExp; end; OnNPCKillEvent: if (fishing !=1 || FishingvLvl >= .MaxFishingLvl) {end;} //this will check if he made a quest to learn the mastery .@exp_gained = JobExp - @jobexp; @jobexp = JobExp; dispbottom "You gained "+F_InsertComma(.@exp_gained)+" job exp."; set FishingExp, FishingExp + .@exp_gained; if(.FishingLvl[FishingLvl] <= FishingExp){ set FishingLvl, FishingLvl + 1; dispbottom "[Level Up] Congrats! Your Fishing level is now: "+FishingLvl; set FishingExp,0; if(FishingLvl == .MaxFishingLvl) { dispbottom "Your Fishing Mastery is at maximum level."; } } end; } but you might need to add: @jobexp = JobExp; in your fishing script after set fishing,1;
  12. And like this? - script Fishing_Exp -1,{ OnInit: setarray .penalty[0], 16,40, 15,115, 14,120, 13,125, 12,130, 11,135, 10,140, 9,135, 8,130, 7,125, 6,120, 5,115, 4,110, 3,105, -1,100, -6,95, -11,90, -16,85, -21,60, -26,35, -31,10; for(.@size = getarraysize(.penalty);.@i < .@size;.@i+=2) { .@diff = .penalty[.@i]; if(.@diff < 0) .penalty[.@i] = min(MAX_LEVEL + (~(.@diff) + 1),MAX_LEVEL*2); } setarray .FishingLvl[0], 1, 3800, 6200, 10400, 15200, 22900, 27100, 30000, 32500, 35700, 41300, 45000, 45800, 47600, 50300, 58700, 63900, 67100, 70300, 73500, 90600, 96200, 102700, 110200, 121400, 144700, 152900, 163100, 173300, 183500, 213500, 224700, 236000, 247200, 260700, 299800, 324800, 343600, 362300, 374800, 474400, 497000, 512100, 542200, 564800, 644300, 678200, 712100, 754500, 796900, 873100, 911900, 950600, 989400, 1028100, 1143300, 1199900, 1233800, 1279100, 1324300, 1486900, 1515900, 1603000, 1719200, 1806300, 2040300, 2244300, 2415900, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000, 2746000; set .MaxFishingLvl, getarraysize(.FishingLvl); end; OnNPCKillEvent: if (fishing !=1 || FishingvLvl >= .MaxFishingLvl) {end;} //this will check if he made a quest to learn the mastery .@mob_jexp = strmobinfo(7,killedrid); .@rates = getbattleflag("job_exp_rate"); .@exp_gained = .@mob_jexp*.@rates/100; .@mob_lvl = strmobinfo(3,killedrid); .@lvl_dif = .@mob_lvl - BaseLevel; if(.@lvl_dif != 0) { if(.@lvl_dif < 0) .@lvl_dif = MAX_LEVEL + (~(.@lvl_dif) + 1); .@mod = inarray(.penalty,.@lvl_dif); if(.@mod != -1 && .@mod%2 == 0) .@exp_gained*= .penalty[.@mod + 1]; } set FishingExp, FishingExp + .@exp_gained; if(.FishingLvl[FishingLvl] <= FishingExp){ set FishingLvl, FishingLvl + 1; dispbottom "[Level Up] Congrats! Your Fishing level is now: "+FishingLvl; set FishingExp,0; if(FishingLvl == .MaxFishingLvl) { dispbottom "Your Fishing Mastery is at maximum level."; } } end; }
  13. - script Items_Conf -1,{ OnInit: callsub Ids, 60656, 1, 1004, 1, 60657, 1, 1004, 1, 60658, 1, 1004, 0 ; callsub Ids, 60635, 1, 111, 1, 60636, 1, 111, 1, 60637, 1, 111, 0 ; /* ID[...], evolution mode[...], mob id[...], neccessary to get 1%[...]. If you want any monster, use 111. Evolution modes: 1 = Every X numer of mobs (1%). 2 = Experience (1%). */ /* 0 = Won't be evolved automatically. 1 = Will be evolved automatically */ .auto = 1; /* Color of the announces. */ setarray .c$[0], "4db557", // % of evolution. "d43438", // Wings evolving. "4da5b5"; // Wings evolved. /* slots to check. EQI_ACC_L (0) - Accessory 1 EQI_ACC_R (1) - Accessory 2 EQI_SHOES (2) - Footgear (shoes, boots) EQI_GARMENT (3) - Garment (mufflers, hoods, manteaux) EQI_HEAD_LOW (4) - Lower Headgear (beards, some masks) EQI_HEAD_MID (5) - Middle Headgear (masks, glasses) EQI_HEAD_TOP (6) - Upper Headgear EQI_ARMOR (7) - Armor (jackets, robes) EQI_HAND_L (8) - Left hand (weapons, shields) EQI_HAND_R (9) - Right hand (weapons) EQI_COSTUME_HEAD_TOP (10) - Upper Costume Headgear EQI_COSTUME_HEAD_MID (11) - Middle Costume Headgear EQI_COSTUME_HEAD_LOW (12) - Lower Costume Headgear EQI_COSTUME_GARMENT (13) - Costume Garment EQI_AMMO (14) - Arrow/Ammunition EQI_SHADOW_ARMOR (15) - Shadow Armor EQI_SHADOW_WEAPON (16) - Shadow Weapon EQI_SHADOW_SHIELD (17) - Shadow Shield EQI_SHADOW_SHOES (18) - Shadow Shoes EQI_SHADOW_ACC_R (19) - Shadow Accessory 2 EQI_SHADOW_ACC_L (20) - Shadow Accessory 1 */ setarray .slots[0], EQI_HEAD_LOW, EQI_HEAD_MID, EQI_HEAD_TOP; //============================================= end ; Ids: for ( .@args = getargcount ( ); .@a < .@args ; .@a+=4 ) { .@i = .w2[.w1]++; setd ".a1"+ .w1 +"_"+ .@i, getarg ( .@a ); // id. if ( getarg ( .@a + 4, 0 ) != 0 ) { setd ".a2"+ .w1 +"_"+ .@i, getarg ( .@a + 1 ); // mode. setd ".a3"+ .w1 +"_"+ .@i, getarg ( .@a + 2 ); // mob id. setd ".a4"+ .w1 +"_"+ .@i, getarg ( .@a + 3 ); // amount. } } .w1++; return ; OnNPCKillEvent: // Cache. That old loop on every mob killed... if ( @wing[0] && isequipped ( @wing[0] ) ) { .@c = 1; .@e = @wing[0]; .@i = @wing[1] - 1; .@j = @wing[2] - 1; .@a = @wing[3]; } else { .@size = getarraysize ( .slots ); while ( .@a < .@size && !.@c ) { .@e = getequipid ( .slots[.@a] ); .@a++; if ( .@e < 0 ) continue ; .@i = 0; while ( .@i < .w1 && !.@c ) { .@j = 0; while ( .@j < .w2[.@i] && !.@c ) { if ( .@e == getd ( ".a1"+ .@i +"_"+ .@j ) && getd ( ".a1"+ .@i +"_"+ ( .@j + 1 ) ) ) { if ( getd ( ".a4"+ .@i +"_"+ .@j ) > 0 && ( killedrid == getd ( ".a3"+ .@i +"_"+ .@j ) || getd ( ".a3"+ .@i +"_"+ .@j ) < 1001 ) ) { .@c = 1; setarray @wing[0], .@e, .@i + 1, .@j + 1, .@a; } } if ( !.@c ) .@j++; } if ( !.@c ) .@i++; } } } if ( .@c ) { if ( getd ( ".a2"+ .@i +"_"+ .@j ) == 1 ) { .@amount = getd ( "mobs_"+ .@e ); setd "mobs_"+ .@e, .@amount + 1; if ( getd ( "mobs_"+ .@e ) < getd ( ".a4"+ .@i +"_"+ .@j ) ) end ; setd "evo"+ .@e, getd ( "evo"+ .@e ) + 1; setd "mobs_"+ .@e, 0; } else if ( getd ( ".a2"+ .@i +"_"+ .@j ) == 2 ) { .@amount = getd ( "exp_"+ .@e ); setd "exp_"+ .@e, .@amount + strmobinfo ( 6, killedrid ); if ( getd ( "exp_"+ .@e ) < getd ( ".a4"+ .@i +"_"+ .@j ) ) end ; setd "evo"+ .@e, getd ( "evo"+ .@e ) + 1; setd "exp_"+ .@e, 0; } else debugmes "Script Items_Evo, error: wrong mode."; announce getitemname ( .@e ) +" is now "+ getd ( "evo"+ .@e ) +"% from evolving...", bc_self, "0x"+ .c$[0] ; specialeffect2 58 ; sleep2 200 ; specialeffect2 383 ; if ( getd ( "evo"+ .@e ) >= 100 && .auto ) { specialeffect2 263 ; sleep2 500 ; specialeffect2 377 ; sleep2 300 ; specialeffect2 542 ; sleep2 300 ; announce getitemname ( .@e ) +" is evolving..." , bc_self, "0x"+ .c$[1] ; .@k = 3; while ( .@k-- ) { specialeffect2 521 ; sleep2 900 ; } specialeffect2 463 ; sleep2 200; specialeffect2 665 ; sleep2 500 ; .@a--; setarray .@card[1], getequipcardid ( .slots[.@a], 0 ), getequipcardid ( .slots[.@a], 1 ), getequipcardid ( .slots[.@a], 2 ), getequipcardid ( .slots[.@a], 3 ); .@refine = getequiprefinerycnt ( .slots[.@a] ); //unequip .slots[.@a]; //delitem .@e, 1 ; getitem2 getd ( ".a1"+ .@i +"_"+ ( .@j + 1 ) ) , 1, 1, .@refine, 0, .@card[1], .@card[2], .@card[3], .@card[4] ; equip getd ( ".a1"+ .@i +"_"+ ( .@j + 1 ) ) ; setd "evo"+ .@e, 0; deletearray @wing ; announce "Congratulations, your wings have evolved to "+ getitemname ( getd ( ".a1"+ .@i +"_"+ ( .@j + 1 ) ) ) +"." , bc_self , "0x"+ .c$[2] ; } } end ; }
  14. Change every instance of checkre(RENEWAL_EXP) with checkre(3) then. I thought it used consts.
  15. conf/battle/skill.conf // Does the delay time depend on the caster's DEX and/or AGI? (Note 1) // Note: On Official servers, neither Dex nor Agi affect delay time delay_dependon_dex: no delay_dependon_agi: no
  16. I don't know if this can work. - script Mob_Exp -1,{ OnInit: if(checkre(RENEWAL_EXP)) { setarray .penalty[0], 16,40, 15,115, 14,120, 13,125, 12,130, 11,135, 10,140, 9,135, 8,130, 7,125, 6,120, 5,115, 4,110, 3,105, -1,100, -6,95, -11,90, -16,85, -21,60, -26,35, -31,10; for(.@size = getarraysize(.penalty);.@i < .@size;.@i+=2) { .@diff = .penalty[.@i]; if(.@diff < 0) .penalty[.@i] = min(MAX_LEVEL + (~(.@diff) + 1),MAX_LEVEL*2); } } end; OnNPCKillEvent. .@mob_jexp = strmobinfo(7,killedrid); .@rates = getbattleflag("job_exp_rate"); .@exp_gained = .@mob_jexp*.@rates/100; .@mob_lvl = strmobinfo(3,killedrid); .@lvl_dif = .@mob_lvl - BaseLevel; if(checkre(RENEWAL_EXP) && .@lvl_dif != 0) { if(.@lvl_dif < 0) .@lvl_dif = MAX_LEVEL + (~(.@lvl_dif) + 1); .@mod = inarray(.penalty,.@lvl_dif); if(.@mod != -1 && .@mod%2 == 0) .@exp_gained*= .penalty[.@mod + 1]; } dispbottom "You gained "+F_InsertComma(.@exp_gained)+" job exp."; end; }
  17. You can edit it with NEMO when you patch. This is the last one: https://gitlab.com/4144/Nemo/-/archive/master/Nemo-master.zip http://nemo.herc.ws/patches/CustomAuraLimits/ This is the patch. Check input/auraSpec.txt You can set that yellow aura to the default trans one. I don't know if you can remove the aura though. Might be worth a try.
  18. Well, try with this data/luafiles514/datainfo/petinfo.lub and the file I told you before. I hope it's not server-side related. If it doesn't work try with normal lua files, a lot of time since I don't edit lua files to be honest. And sorry I'm kind of outdated.
  19. bonus bMatkRate,5 + getrefine()/2; bonus bAtkRate,10; bonus bStr,1 + getrefine(); if(readparam(bstr) >= 250) { bonus bAtkRate,20 + getrefine()/2; } bonus bMatkRate,-10; bonus bMatkRate,10 + getrefine()/2;
  20. You probably have to edit here: /data/luafiles514/lua files/exmacro/bossmonsterlist.lub
  21. What if you erase that line and readd it manually?
  22. Sorry about that. - script Items_Conf -1,{ OnInit: callsub Ids, 60656, 1, 1004, 1, 60657, 1, 1004, 1, 60658, 1, 1004, 0 ; callsub Ids, 60635, 1, 111, 1, 60636, 1, 111, 1, 60637, 1, 111, 0 ; /* ID[...], evolution mode[...], mob id[...], neccessary to get 1%[...]. If you want any monster, use 111. Evolution modes: 1 = Every X numer of mobs (1%). 2 = Experience (1%). */ /* 0 = Won't be evolved automatically. 1 = Will be evolved automatically */ .auto = 1; /* Color of the announces. */ setarray .c$[0], "4db557", // % of evolution. "d43438", // Wings evolving. "4da5b5"; // Wings evolved. /* slots to check. EQI_ACC_L (0) - Accessory 1 EQI_ACC_R (1) - Accessory 2 EQI_SHOES (2) - Footgear (shoes, boots) EQI_GARMENT (3) - Garment (mufflers, hoods, manteaux) EQI_HEAD_LOW (4) - Lower Headgear (beards, some masks) EQI_HEAD_MID (5) - Middle Headgear (masks, glasses) EQI_HEAD_TOP (6) - Upper Headgear EQI_ARMOR (7) - Armor (jackets, robes) EQI_HAND_L (8) - Left hand (weapons, shields) EQI_HAND_R (9) - Right hand (weapons) EQI_COSTUME_HEAD_TOP (10) - Upper Costume Headgear EQI_COSTUME_HEAD_MID (11) - Middle Costume Headgear EQI_COSTUME_HEAD_LOW (12) - Lower Costume Headgear EQI_COSTUME_GARMENT (13) - Costume Garment EQI_AMMO (14) - Arrow/Ammunition EQI_SHADOW_ARMOR (15) - Shadow Armor EQI_SHADOW_WEAPON (16) - Shadow Weapon EQI_SHADOW_SHIELD (17) - Shadow Shield EQI_SHADOW_SHOES (18) - Shadow Shoes EQI_SHADOW_ACC_R (19) - Shadow Accessory 2 EQI_SHADOW_ACC_L (20) - Shadow Accessory 1 */ setarray .slots[0], EQI_HEAD_LOW, EQI_HEAD_MID, EQI_HEAD_TOP; //============================================= end ; Ids: for ( .@args = getargcount ( ); .@a < .@args ; .@a+=4 ) { .@i = .w2[.w1]++; setd ".a1"+ .w1 +"_"+ .@i, getarg ( .@a ); // id. if ( getarg ( .@a + 4, 0 ) != 0 ) { setd ".a2"+ .w1 +"_"+ .@i, getarg ( .@a + 1 ); // mode. setd ".a3"+ .w1 +"_"+ .@i, getarg ( .@a + 2 ); // mob id. setd ".a4"+ .w1 +"_"+ .@i, getarg ( .@a + 3 ); // amount. } } .w1++; return ; OnNPCKillEvent: // Cache. That old loop on every mob killed... if ( @wing[0] && isequipped ( @wing[0] ) ) { .@c = 1; .@e = @wing[0]; .@i = @wing[1] - 1; .@j = @wing[2] - 1; .@a = @wing[3]; } else { .@size = getarraysize ( .slots ) while ( .@a < .@size && !.@c ) { .@e = getequipid ( .slots[.@a] ); .@a++; if ( .@e < 0 ) continue ; .@i = 0; while ( .@i < .w1 && !.@c ) { .@j = 0; while ( .@j < .w2[.@i] && !.@c ) { if ( .@e == getd ( ".a1"+ .@i +"_"+ .@j ) && getd ( ".a1"+ .@i +"_"+ ( .@j + 1 ) ) ) { if ( getd ( ".a4"+ .@i +"_"+ .@j ) > 0 && ( killedrid == getd ( ".a3"+ .@i +"_"+ .@j ) || getd ( ".a3"+ .@i +"_"+ .@j ) < 1001 ) ) { .@c = 1; setarray @wing[0], .@e, .@i + 1, .@j + 1, .@a; } } if ( !.@c ) .@j++; } if ( !.@c ) .@i++; } } } if ( .@c ) { if ( getd ( ".a2"+ .@i +"_"+ .@j ) == 1 ) { .@amount = getd ( "mobs_"+ .@e ); setd "mobs_"+ .@e, .@amount + 1; if ( getd ( "mobs_"+ .@e ) < getd ( ".a4"+ .@i +"_"+ .@j ) ) end ; setd "evo"+ .@e, getd ( "evo"+ .@e ) + 1; setd "mobs_"+ .@e, 0; } else if ( getd ( ".a2"+ .@i +"_"+ .@j ) == 2 ) { .@amount = getd ( "exp_"+ .@e ); setd "exp_"+ .@e, .@amount + strmobinfo ( 6, killedrid ); if ( getd ( "exp_"+ .@e ) < getd ( ".a4"+ .@i +"_"+ .@j ) ) end ; setd "evo"+ .@e, getd ( "evo"+ .@e ) + 1; setd "exp_"+ .@e, 0; } else debugmes "Script Items_Evo, error: wrong mode."; announce getitemname ( .@e ) +" is now "+ getd ( "evo"+ .@e ) +"% from evolving...", bc_self, "0x"+ .c$[0] ; specialeffect2 58 ; sleep2 200 ; specialeffect2 383 ; if ( getd ( "evo"+ .@e ) >= 100 && .auto ) { specialeffect2 263 ; sleep2 500 ; specialeffect2 377 ; sleep2 300 ; specialeffect2 542 ; sleep2 300 ; announce getitemname ( .@e ) +" is evolving..." , bc_self, "0x"+ .c$[1] ; .@i = 3; while ( .@i-- ) { specialeffect2 521 ; sleep2 900 ; } specialeffect2 463 ; sleep2 200; specialeffect2 665 ; sleep2 500 ; .@a--; setarray .@card[1], getequipcardid ( .slots[.@a], 0 ), getequipcardid ( .slots[.@a], 1 ), getequipcardid ( .slots[.@a], 2 ), getequipcardid ( .slots[.@a], 3 ); .@refine = getequiprefinerycnt ( .slots[.@a] ); //unequip .slots[.@a]; //delitem .@e, 1 ; getitem2 getd ( ".a1"+ .@i +"_"+ ( .@j + 1 ) ) , 1, 1, .@refine, 0, .@card[1], .@card[2], .@card[3], .@card[4] ; equip getd ( ".a1"+ .@i +"_"+ ( .@j + 1 ) ) ; setd "evo"+ .@e, 0; deletearray @wing ; announce "Congratulations, your wings have evolved to "+ getitemname ( getd ( ".a1"+ .@i +"_"+ ( .@j + 1 ) ) ) +"." , bc_self , "0x"+ .c$[2] ; } } end ; }
  23. - script Items_Conf -1,{ OnInit: callsub Ids, 60656, 1, 1004, 1, 60657, 1, 1004, 1, 60658, 1, 1004, 0 ; callsub Ids, 60635, 1, 111, 1, 60636, 1, 111, 1, 60637, 1, 111, 0 ; /* ID[...], evolution mode[...], mob id[...], neccessary to get 1%[...]. If you want any monster, use 111. Evolution modes: 1 = Every X numer of mobs (1%). 2 = Experience (1%). */ /* 0 = Won't be evolved automatically. 1 = Will be evolved automatically */ .auto = 1; /* Color of the announces. */ setarray .c$[0], "4db557", // % of evolution. "d43438", // Wings evolving. "4da5b5"; // Wings evolved. /* slots to check. EQI_ACC_L (0) - Accessory 1 EQI_ACC_R (1) - Accessory 2 EQI_SHOES (2) - Footgear (shoes, boots) EQI_GARMENT (3) - Garment (mufflers, hoods, manteaux) EQI_HEAD_LOW (4) - Lower Headgear (beards, some masks) EQI_HEAD_MID (5) - Middle Headgear (masks, glasses) EQI_HEAD_TOP (6) - Upper Headgear EQI_ARMOR (7) - Armor (jackets, robes) EQI_HAND_L (8) - Left hand (weapons, shields) EQI_HAND_R (9) - Right hand (weapons) EQI_COSTUME_HEAD_TOP (10) - Upper Costume Headgear EQI_COSTUME_HEAD_MID (11) - Middle Costume Headgear EQI_COSTUME_HEAD_LOW (12) - Lower Costume Headgear EQI_COSTUME_GARMENT (13) - Costume Garment EQI_AMMO (14) - Arrow/Ammunition EQI_SHADOW_ARMOR (15) - Shadow Armor EQI_SHADOW_WEAPON (16) - Shadow Weapon EQI_SHADOW_SHIELD (17) - Shadow Shield EQI_SHADOW_SHOES (18) - Shadow Shoes EQI_SHADOW_ACC_R (19) - Shadow Accessory 2 EQI_SHADOW_ACC_L (20) - Shadow Accessory 1 */ setarray .slots[0], EQI_HEAD_LOW, EQI_HEAD_MID, EQI_HEAD_TOP; //============================================= end ; Ids: for ( .@args = getargcount ( ); .@a < .@args ; .@a+=4 ) { .@i = .w2[.w1]++; setd ".a1"+ .w1 +"_"+ .@i, getarg ( .@a ); // id. if ( getarg ( .@a + 4, 0 ) != 0 ) { setd ".a2"+ .w1 +"_"+ .@i, getarg ( .@a + 1 ); // mode. setd ".a3"+ .w1 +"_"+ .@i, getarg ( .@a + 2 ); // mob id. setd ".a4"+ .w1 +"_"+ .@i, getarg ( .@a + 3 ); // amount. } } .w1++; return ; OnNPCKillEvent: // Cache. That old loop on every mob killed... if ( @wing[0] && isequipped ( @wing[0] ) ) { .@c = 1; .@e = @wing[0]; .@i = @wing[1]; .@j = @wing[2]; .@a = @wing[3]; } else { .@size = getarraysize ( .slots ); while ( .@a < .@size && !.@c ) { .@e = getequipid ( .slots[.@a] ); if ( .@e < 0 ) continue ; .@i = 0; while ( .@i < .w1 && !.@c ) { .@j = 0; while ( .@j < .w2[.@i] && !.@c ) { if ( .@e == getd ( ".a1"+ .@i +"_"+ .@j ) && getd ( ".a1"+ .@i +"_"+ ( .@j + 1 ) ) ) { if ( getd ( ".a4"+ .@i +"_"+ .@j ) > 0 && ( killedrid == getd ( ".a3"+ .@i +"_"+ .@j ) || getd ( ".a3"+ .@i +"_"+ .@j ) < 1001 ) ) { .@c = 1; setarray @wing[0], .@e, .@i, .@j, .@a; } } if ( !.@c ) .@j++; } if ( !.@c ) .@i++; } if ( !.@c ) .@a++; } } if ( .@c ) { if ( getd ( ".a2"+ .@i +"_"+ .@j ) == 1 ) { .@amount = getd ( "mobs_"+ .@e ); setd "mobs_"+ .@e, .@amount + 1; if ( getd ( "mobs_"+ .@e ) < getd ( ".a4"+ .@i +"_"+ .@j ) ) end ; setd "evo"+ .@e, getd ( "evo"+ .@e ) + 1; setd "mobs_"+ .@e, 0; } else if ( getd ( ".a2"+ .@i +"_"+ .@j ) == 2 ) { .@amount = getd ( "exp_"+ .@e ); setd "exp_"+ .@e, .@amount + strmobinfo ( 6, killedrid ); if ( getd ( "exp_"+ .@e ) < getd ( ".a4"+ .@i +"_"+ .@j ) ) end ; setd "evo"+ .@e, getd ( "evo"+ .@e ) + 1; setd "exp_"+ .@e, 0; } else debugmes "Script Items_Evo, error: wrong mode."; announce getitemname ( .@e ) +" is now "+ getd ( "evo"+ .@e ) +"% from evolving...", bc_self, "0x"+ .c$[0] ; specialeffect2 58 ; sleep2 200 ; specialeffect2 383 ; if ( getd ( "evo"+ .@e ) >= 100 && .auto ) { specialeffect2 263 ; sleep2 500 ; specialeffect2 377 ; sleep2 300 ; specialeffect2 542 ; sleep2 300 ; announce getitemname ( .@e ) +" is evolving..." , bc_self, "0x"+ .c$[1] ; .@i = 3; while ( .@i-- ) { specialeffect2 521 ; sleep2 900 ; } specialeffect2 463 ; sleep2 200; specialeffect2 665 ; sleep2 500 ; setarray .@card[1], getequipcardid ( .slots[.@a], 0 ), getequipcardid ( .slots[.@a], 1 ), getequipcardid ( .slots[.@a], 2 ), getequipcardid ( .slots[.@a], 3 ); .@refine = getequiprefinerycnt ( .slots[.@a] ); //unequip .slots[.@a]; //delitem .@e, 1 ; getitem2 getd ( ".a1"+ .@i +"_"+ ( .@j + 1 ) ) , 1, 1, .@refine, 0, .@card[1], .@card[2], .@card[3], .@card[4] ; equip getd ( ".a1"+ .@i +"_"+ ( .@j + 1 ) ) ; setd "evo"+ .@e, 0; deletearray @wing ; announce "Congratulations, your wings have evolved to "+ getitemname ( getd ( ".a1"+ .@i +"_"+ ( .@j + 1 ) ) ) +"." , bc_self , "0x"+ .c$[2] ; } } end ; }
  24. For those I checked the scripts. First I look on the Internet for some guide, then look up the name of some NPC of that guide in the npc folder. After that you have to look for the final part. A lot of times that part has a "getexp" condition. Or sometimes some items. It depends, but the guide can help you find that.
×
×
  • Create New...