-
Posts
303 -
Joined
-
Days Won
12
Content Type
Profiles
Forums
Downloads
Jobs Available
Server Database
Third-Party Services
Top Guides
Store
Crowdfunding
Everything posted by n0tttt
-
How to get JobEXP to a variable when mob killed?
n0tttt replied to LucianoCP's question in Scripting Support
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)+")%."; -
How to get JobEXP to a variable when mob killed?
n0tttt replied to LucianoCP's question in Scripting Support
.@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; } -
How to get JobEXP to a variable when mob killed?
n0tttt replied to LucianoCP's question in Scripting Support
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]; } -
How to get JobEXP to a variable when mob killed?
n0tttt replied to LucianoCP's question in Scripting Support
Nice find man. Anyways I had a typo. .@exp_gained*= .penalty[.@mi + 1]; has to be .@exp_gained*= .penalty[.@i + 1]; -
[Error]: buildin_setr: fatal error ! player not attached!
n0tttt replied to LearningRO's question in Scripting Support
//===== 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; } -
buildin_delitem: failed to delete 1 item
n0tttt replied to Giant Whisper's question in Scripting Support
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 ; } -
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.
-
buildin_delitem: failed to delete 1 item
n0tttt replied to Giant Whisper's question in Scripting Support
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 ; } -
buildin_delitem: failed to delete 1 item
n0tttt replied to Giant Whisper's question in Scripting Support
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? -
buildin_delitem: failed to delete 1 item
n0tttt replied to Giant Whisper's question in Scripting Support
- 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 ; } -
How to get JobEXP to a variable when mob killed?
n0tttt replied to LucianoCP's question in Scripting Support
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; -
How to get JobEXP to a variable when mob killed?
n0tttt replied to LucianoCP's question in Scripting Support
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; } -
buildin_delitem: failed to delete 1 item
n0tttt replied to Giant Whisper's question in Scripting Support
- 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 ; } -
How to get JobEXP to a variable when mob killed?
n0tttt replied to LucianoCP's question in Scripting Support
Change every instance of checkre(RENEWAL_EXP) with checkre(3) then. I thought it used consts. -
Need help for skill after cast delay please. [Newbie here]
n0tttt replied to JamS's question in Database Requests
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 -
How to get JobEXP to a variable when mob killed?
n0tttt replied to LucianoCP's question in Scripting Support
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; } -
How to remove lvl aura? & How to add it on my pet?
n0tttt replied to eppc0330's question in Scripting Support
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. -
How to add BOSS/MVP mark after name of Boss monster/Boss pet?
n0tttt replied to eppc0330's question in Scripting Support
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. -
How to add BOSS/MVP mark after name of Boss monster/Boss pet?
n0tttt replied to eppc0330's question in Scripting Support
As far as I know, they're all custom. -
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;
-
How to add BOSS/MVP mark after name of Boss monster/Boss pet?
n0tttt replied to eppc0330's question in Scripting Support
You probably have to edit here: /data/luafiles514/lua files/exmacro/bossmonsterlist.lub -
What if you erase that line and readd it manually?
-
buildin_delitem: failed to delete 1 item
n0tttt replied to Giant Whisper's question in Scripting Support
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 ; } -
buildin_delitem: failed to delete 1 item
n0tttt replied to Giant Whisper's question in Scripting Support
- 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 ; } -
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.