Jump to content

kalabasa

Members
  • Posts

    478
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by kalabasa

  1. okay found the raw script. sorry for that. prontera,184,177,5 script Refine Master 851,{ function _check { if(getequiprefinerycnt(getarg(0))) { next; mes "Your equip refine level should be 0."; close; } if(!getequipisenableref(getarg(0))) { next; mes "I can't refine this."; close; } return; } mes "I'll make your item refined up to same level with your Ticket you have."; mes "You don't have to worry! There's no chance to break your item."; set @c,select("+5 Weapon Deed", "+6 Weapon Deed", "+7 Weapon Deed", "+8 Weapon Deed", "+9 Weapon Deed", "+10 Weapon Deed", "+11 Weapon Deed", "+12 Weapon Deed", "+5 Armor Deed", "+6 Armor Deed", "+7 Armor Deed", "+8 Armor Deed", "+9 Armor Deed", "+10 Armor Deed", "+11 Armor Deed", "+12 Armor Deed"); set @deed_item_id,8000+@c; //set @deed_item_id,7037; if(!countitem(@deed_item_id)) { next; mes "You don't have '"+getitemname(@deed_item_id)+"'"; close; } if(0<@c&&@c<9) { set @b,5-select(""+getequipname(EQI_HAND_R)+":"+(getiteminfo(EQI_HAND_L,2)==4?getequipname(EQI_HAND_L):"")); _check(@b); }else{ set @b,select(getequipname(EQI_HEAD_TOP)+":"+getequipname(EQI_ARMOR)+":"+getequipname(EQI_GARMENT)+":"+getequipname(EQI_SHOES)+":"+(getiteminfo(EQI_HAND_L,2)==4?"":getequipname(EQI_HAND_L))); deletearray .@way[0],128; setarray .@way[1],1,2,5,6,3; set @b,.@way[@b]; _check(@b); } next; setarray .@ref[0],12,5,6,7,8,9,10,11; set @r,.@ref[@c%8]; mes "I'm going to refine"; mes ""+getequipname(@b)+""; mes "up to "+@r+" level with"; mes ""+getitemname(@deed_item_id)+""; mes "may I go on this job?"; if(select("No","Yes")==2) { if(!countitem(@deed_item_id)) { next; mes "You don't have '"+getitemname(@deed_item_id)+"'"; close; } _check(@b); for(set .@i,0;.@i<@r;set .@i,.@i+1) successrefitem @b; mes "Done"; delitem @deed_item_id,1; } set @c,0; set @b,0; set @r,0; set @deed_item_id,0; close; }
  2. which part should be edited? already change values but still refining the lower headgear instead of weapon right hand
  3. can you make this compatible with KoE script too? - KoE participation
  4. all seems to be working correctly now except is when refining weapons Right hand any idea? instead it always read the Lower Equipment set @b,5-select(""+getequipname(EQI_HAND_R)+":"+(getiteminfo(EQI_HAND_L,2)==4?getequipname(EQI_HAND_L):"")); _check(@b); }else{ set @b,select(getequipname(EQI_HEAD_TOP)+":"+getequipname(EQI_ARMOR)+":"+getequipname(EQI_GARMENT)+":"+getequipname(EQI_SHOES)+":"+(getiteminfo(EQI_HAND_L,2)==4?"":getequipname(EQI_HAND_L))); deletearray .@way[0],128; setarray .@way[1],6,7,3,2,8;
  5. //===== rAthena Script ======================================= //= Monster Invasion //===== By =================================================== //= llchrisll //===== Version ============================================== //= 1.0 - Initial Release //= 1.1 - Added custom Commands for GM's to start/end the invasion manually. // - Exchanged the Custom Variable Settings for the Reward NPC with // the forgotten Cash Points reward (ups..) // - Removed the idea about using an Invasion Shop // - Fixed reward announcer to display correct lines //= 1.2 - Adjusted announce messages // - Fixed Force End not working //===== Tested With ========================================== //= rAthena 04/26/2019 Revision //= GIT Hash: 67e1583f9fec7ac95a954634f6b7600ebe428df0 //===== Description ========================================== //= There are 2 Invasion Types: // - Single // - Multiply //= Each can be seperatly customized, but can not be switched via ingame. //= Changing settings means to restart/reload the server for them to become active //= Also there is an "Invasion Rewarder" available after the Invasion, // which can be turned on or off // To change the reward itself, scroll down to the bottom of the file // where the NPC is located. There are extra settings. //= See "OnInit:" for the main settings //===== Comments ============================================= //= None yet... //=========================================================== - script MobInvaInit -1,{ function DELAY; OnTimer1000: // Every Second stopnpctimer; set .s,.s + 1; if(.debug) // Showing Debug every minute only. if(.s%60 == 0) debugmes .n$+": Delay Timer: "+.s+" seconds (Minutes: "+(.s/60)+"), Delay Function returns: "+DELAY(.delay_type,.delay_pos,1)+", Invasion Re-/Starts: "+.time[.delay_pos]+" (in seconds), Force End: "+.inva_fend+" (in seconds)"; if(.delay == 1 && .s == DELAY(.delay_type,.delay_pos,1) ) donpcevent strnpcinfo(0)+"::OnInvaInit"; if(.inva_status && .s == .inva_fend) donpcevent strnpcinfo(0)+"::OnInvaForceEnd"; initnpctimer; end; OnClock1300: // 1 p.m. if(.delay == 1) // Delay Usage active end; OnInvaInit: if(.inva_status) end; if(getvariableofnpc(.rew_type,"Invasion Rewarder") > 0) disablenpc "Invasion Rewarder"; switch(.inva_type) { // Single Town Invasion case 1: if(!.s_inva_spec) { // No Map Specification > Random if(rand(1,10) <= 5) { // 50% chance to use either a big city or a small one set .t,rand(getarraysize(.map_b$)); set .map_use,1; // Use big Maps } else { set .t,rand(getarraysize(.map_s$)); set .map_use,2; // Use small Maps } } else { set .map_use,.s_inva_spec; set .t,.s_inva_pos; } if(.map_use == 1) { for ( set .@m,0; .@m < getarraysize(getd(".mob_"+.map_post_b$[.t])); set .@m,.@m + 1) { monster .map_b$[.t],0,0,""+getmonsterinfo(getd(".mob_"+.map_post_b$[.t]+"["+.@m+"]"),0),getd(".mob_"+.map_post_b$[.t]+"["+.@m+"]"),getd(".mam_"+.map_post_b$),strnpcinfo(0)+"::OnMobSingleKilled"; set .MobSKilled,.MobSKilled + getd(".mam_"+.map_post_b$); } announce .n$+": The town "+.map_b$[.t]+" is being invaded by "+.MobSKilled+" monsters, please help use to defend it.",0; } else if(.map_use == 2) { for ( set .@m,0; .@m < getarraysize(getd(".mob_"+.map_post_s$[.t])); set .@m,.@m + 1) { monster .map_s$[.t],0,0,""+getmonsterinfo(getd(".mob_"+.map_post_s$[.t]+"["+.@m+"]"),0),getd(".mob_"+.map_post_s$[.t]+"["+.@m+"]"),getd(".mam_"+.map_post_s$),strnpcinfo(0)+"::OnMobSingleKilled"; set .MobSKilled,.MobSKilled + getd(".mam_"+.map_post_s$); } announce .n$+": The town "+.map_s$[.t]+" is being invaded by "+.MobSKilled+" monsters, please help use to defend it.",0; } break; // Multiply Town Invasion case 2: if( .inva_spawn == 1) { for ( set .@t,0; .@t < getarraysize(.map_b$); set .@t,.@t + 1) { for ( set .@m,0; .@m < getarraysize(getd(".mob_"+.map_post_b$[.@t])); set .@m,.@m + 1) { monster .map_b$[.@t],0,0,""+getmonsterinfo(getd(".mob_"+.map_post_b$[.@t]+"["+.@m+"]"),0),getd(".mob_"+.map_post_b$[.@t]+"["+.@m+"]"),getd(".mam_"+.map_post_b$[.@t]),strnpcinfo(0)+"::OnMobMultiKilled"; setd(".Mob_"+.map_post_b$[.@t]+"_Killed"),getd(".Mob_"+.map_post_b$[.@t]+"_Killed") + getd(".mam_"+.map_post_b$[.@t]); } announce .n$+": The town "+.map_b$[.@t]+" is being invaded by "+getd(".Mob_"+.map_post_b$[.@t]+"_Killed")+" monsters, please help use to defend it.",0; } sleep 500; for ( set .@t,0; .@t < getarraysize(.map_s$); set .@t,.@t + 1) { for ( set .@m,0; .@m < getarraysize(getd(".mob_"+.map_post_s$[.@t])); set .@m,.@m + 1) { monster .map_s$[.@t],0,0,""+getmonsterinfo(getd(".mob_"+.map_post_s$[.@t]+"["+.@m+"]"),0),getd(".mob_"+.map_post_s$[.@t]+"["+.@m+"]"),getd(".mam_"+.map_post_s$[.@t]),strnpcinfo(0)+"::OnMobMultiKilled"; setd(".Mob_"+.map_post_s$[.@t]+"_Killed"),getd(".Mob_"+.map_post_s$[.@t]+"_Killed") + getd(".mam_"+.map_post_s$[.@t]); } announce .n$+": The town "+.map_s$[.@t]+" is being invaded by "+getd(".Mob_"+.map_post_s$[.@t]+"_Killed")+" monsters, please help use to defend it.",0; } // * Spawn Option - Specific Maps } else if( .inva_spawn == 2) { set .@map_am,.inva_maps; // Copying Map Quantity if(.debug) debugmes .n$+": Map Quantity - .inva_maps: "+.inva_maps+" > .@map_am"; // * Map Size - Big Maps if( .inva_size == 1) { // - Checking if .map_am exceeds the size of the map array, or is 0 if( .@map_am > getarraysize(.map_b$) || .@map_am == 0) set .@map_am,getarraysize(.map_b$); if(.debug) debugmes .n$+": Map Quantity - Check: .@map_am: "+.@map_am; // * Map Randomness - Yes if( .inva_rand == 1) { if(.debug) debugmes .n$+": Map Randomness: Yes"; while ( .@c < .@map_am ) { if(.debug) debugmes .n$+": Big Maps - Counter: "+.@c+", Map Index: "+.@t; set .@t,rand(.@map_am); set .@f,0; for ( set .@e,0; .@e < getarraysize(.@t_c); set .@e,.@e + 1) if((.@t+1) == .@t_c[.@e]) { set .@f,1; break; } if(.@f == 1) continue; if(.debug) { debugmes .n$+": Big Maps - Map Index: "+.@t+", Map Name: "+.map_b$[.@t]; debugmes .n$+": Big Maps - Mob Array Size: "+getarraysize(getd(".mob_"+.map_post_b$[.@t])); } for ( set .@m,0; .@m < getarraysize(getd(".mob_"+.map_post_b$[.@t])); set .@m,.@m + 1) { monster .map_b$[.@t],0,0,""+getmonsterinfo(getd(".mob_"+.map_post_b$[.@t]+"["+.@m+"]"),0),getd(".mob_"+.map_post_b$[.@t]+"["+.@m+"]"),getd(".mam_"+.map_post_b$[.@t]),strnpcinfo(0)+"::OnMobMultiKilled"; setd(".Mob_"+.map_post_b$[.@t]+"_Killed"),getd(".Mob_"+.map_post_b$[.@t]+"_Killed") + getd(".mam_"+.map_post_b$[.@t]); if(.debug) { debugmes .n$+": Big Maps - Map Index: "+.@t+", Mob Index: "+.@m+", Map Name: "+.map_b$[.@t]+", Mob ID + Name: "+getd(".mob_"+.map_post_b$[.@t]+"["+.@m+"]")+"; "+getmonsterinfo(getd(".mob_"+.map_post_b$[.@t]+"["+.@m+"]"),0); debugmes .n$+": Total Mob Amount - Map Index: "+.@t+": "+getd(".Mob_"+.map_post_b$[.@t]+"_Killed")+", Spawn Amount per Mob: "+getd(".mam_"+.map_post_b$[.@t]); } } announce .n$+": The town "+.map_b$[.@t]+" is being invaded by "+getd(".Mob_"+.map_post_b$[.@t]+"_Killed")+" monsters, please help use to defend it.",0; setarray .@t_c[getarraysize(.@t_c)],(.@t+1); // Copying already use maps. set .@c,.@c + 1; } // * Map Randomness - No } else if( .inva_rand == 0) { if(.debug) debugmes .n$+": Map Randomness: No"; for ( set .@t,0; .@t < .@map_am; set .@t,.@t + 1) { if(.debug) { debugmes .n$+": Big Maps - Map Index: "+.@t+", Map Name: "+.map_b$[.@t]; debugmes .n$+": Big Maps - Mob Array Size: "+getarraysize(getd(".mob_"+.map_post_b$[.@t])); } for ( set .@m,0; .@m < getarraysize(getd(".mob_"+.map_post_b$[.@t])); set .@m,.@m + 1) { monster .map_b$[.@t],0,0,""+getmonsterinfo(getd(".mob_"+.map_post_b$[.@t]+"["+.@m+"]"),0),getd(".mob_"+.map_post_b$[.@t]+"["+.@m+"]"),getd(".mam_"+.map_post_b$[.@t]),strnpcinfo(0)+"::OnMobMultiKilled"; setd(".Mob_"+.map_post_b$[.@t]+"_Killed"),getd(".Mob_"+.map_post_b$[.@t]+"_Killed") + getd(".mam_"+.map_post_b$[.@t]); if(.debug) { debugmes .n$+": Big Maps - Map Index: "+.@t+", Mob Index: "+.@m+", Map Name: "+.map_b$[.@t]+", Mob ID + Name: "+getd(".mob_"+.map_post_b$[.@t]+"["+.@m+"]")+"; "+getmonsterinfo(getd(".mob_"+.map_post_b$[.@t]+"["+.@m+"]"),0); debugmes .n$+": Total Mob Amount - Map Index: "+.@t+": "+getd(".Mob_"+.map_post_b$[.@t]+"_Killed")+", Spawn Amount per Mob: "+getd(".mam_"+.map_post_b$[.@t]); } } announce .n$+": The town "+.map_b$[.@t]+" is being invaded by "+getd(".Mob_"+.map_post_b$[.@t]+"_Killed")+" monsters, please help use to defend it.",0; } } // * Map Size - Small Maps } else if( .inva_size == 2) { // - Checking if .map_am exceeds the size of the map array, or is 0 if( .@map_am > getarraysize(.map_s$) || .@map_am == 0) set .@map_am,getarraysize(.map_s$); if(.debug) debugmes .n$+": Map Quantity - Check: .@map_am: "+.@map_am; // * Map Randomness - Yes if( .inva_rand == 1) { while ( .@c < .@map_am ) { set .@t,rand(.@map_am); set .@f,0; for ( set .@e,0; .@e < getarraysize(.@t_c); set .@e,.@e + 1) if(.@t == .@t_c[.@e]) { set .@f,1; break; } if(.@f == 1) continue; if(.debug) { debugmes .n$+": Small Maps - Map Index: "+.@t+", Map Name: "+.map_s$[.@t]; debugmes .n$+": Small Maps - Mob Array Size: "+getarraysize(getd(".mob_"+.map_post_s$[.@t])); } for ( set .@m,0; .@m < getarraysize(getd(".mob_"+.map_post_s$[.@t])); set .@m,.@m + 1) { monster .map_s$[.@t],0,0,""+getmonsterinfo(getd(".mob_"+.map_post_s$[.@t]+"["+.@m+"]"),0),getd(".mob_"+.map_post_s$[.@t]+"["+.@m+"]"),getd(".mam_"+.map_post_s$),strnpcinfo(0)+"::OnMobMultiKilled"; setd(".Mob_"+.map_post_s$[.@t]+"_Killed"),getd(".Mob_"+.map_post_s$[.@t]+"_Killed") + getd(".mam_"+.map_post_s$[.@t]); if(.debug) { debugmes .n$+": Small Maps - Map Index: "+.@t+", Mob Index: "+.@m+", Map Name: "+.map_s$[.@t]+", Mob ID + Name: "+getd(".mob_"+.map_post_s$[.@t]+"["+.@m+"]")+"; "+getmonsterinfo(getd(".mob_"+.map_post_s$[.@t]+"["+.@m+"]"),0); debugmes .n$+": Total Mob Amount - Map Index: "+.@t+": "+getd(".Mob_"+.map_post_s$[.@t]+"_Killed")+", Spawn Amount per Mob: "+getd(".mam_"+.map_post_s$[.@t]); } } announce .n$+": The town "+.map_s$[.@t]+" is being invaded by "+getd(".Mob_"+.map_post_s$[.@t]+"_Killed")+" monsters, please help use to defend it.",0; setarray .@t_c[getarraysize(.@t_c)],.@t; // Copying already use maps. } // * Map Randomness - No } else if( .inva_rand == 0) { if(.debug) debugmes .n$+": Map Randomness: No"; for ( set .@t,0; .@t < .map_am; set .@t,.@t + 1) { if(.debug) { debugmes .n$+": Small Maps - Map Index: "+.@t+", Map Name: "+.map_s$[.@t]; debugmes .n$+": Small Maps - Mob Array Size: "+getarraysize(getd(".mob_"+.map_post_s$[.@t])); } for ( set .@m,0; .@m < getarraysize(getd(".mob_"+.map_post_s$[.@t])); set .@m,.@m + 1) { monster .map_s$[.@t],0,0,""+getmonsterinfo(getd(".mob_"+.map_post_s$[.@t]+"["+.@m+"]"),0),getd(".mob_"+.map_post_s$[.@t]+"["+.@m+"]"),getd(".mam_"+.map_post_s$[.@t]),strnpcinfo(0)+"::OnMobMultiKilled"; setd(".Mob_"+.map_post_s$[.@t]+"_Killed"),getd(".Mob_"+.map_post_s$[.@t]+"_Killed") + getd(".mam_"+.map_post_s$[.@t]); if(.debug) { debugmes .n$+": Small Maps - Map Index: "+.@t+", Mob Index: "+.@m+", Map Name: "+.map_s$[.@t]+", Mob ID + Name: "+getd(".mob_"+.map_post_s$[.@t]+"["+.@m+"]")+"; "+getmonsterinfo(getd(".mob_"+.map_post_s$[.@t]+"["+.@m+"]"),0); debugmes .n$+": Total Mob Amount - Map Index: "+.@t+": "+getd(".Mob_"+.map_post_s$[.@t]+"_Killed")+", Spawn Amount per Mob: "+getd(".mam_"+.map_post_s$[.@t]); } } announce .n$+": The town "+.map_s$[.@t]+" is being invaded by "+getd(".Mob_"+.map_post_s$[.@t]+"_Killed")+" monsters, please help use to defend it.",0; } } } } break; } set .inva_status,1; end; OnMobSingleKilled: if(!.inva_status) end; // Shouldn't be possible if(getvariableofnpc(.rew_type,"Invasion Rewarder") > 0) set InvaKill,InvaKill + 1; // Kill Counter for Reward set .MobSKilled,.MobSKilled - 1; if(.MobSKilled == 0) { announce .n$+": Congratulation to ["+strcharinfo(0)+"] who delivered the final blow!!! Nicely Done!!!",0; if(.inva_final) { announce .n$+": You also get an \"Final Kill Reward\", just take a look in the Chat Box. See ya next time *g*",bc_self; dispbottom .n$+": You have been rewarded with:"; if(.inva_f_id == 1) { set Zeny,Zeny + .inva_f_am; dispbottom .n$+": "+.inva_f_am+" Zeny."; } else if(.inva_f_id == 2) { set #CASHPOINTS,#CASHPOINTS + .inva_f_am; dispbottom .n$+": "+.inva_f_am+" Cash Points. New Balance is "+#CASHPOINTS+"."; } else if(.inva_f_id >= 512) { getitem .inva_f_id,.inva_f_am; dispbottom .n$+": "+.inva_f_am+"x "+getitemname(.inva_f_id)+"."; } } sleep 10000; donpcevent strnpcinfo(0)+"::OnInvaEnd"; } else if(.MobSKilled == 1) mapannounce strcharinfo(3),.n$+": JUST 1 MONSTER is left!!!! FINAL BLOW, GO GO!!!",bc_yellow; else if(.MobSKilled == 5) mapannounce strcharinfo(3),.n$+": LAST ["+.MobSKilled+"] Monsters!!!! We can do it!!!",bc_yellow; else mapannounce strcharinfo(3),.n$+": "+.MobSKilled+" Monsters are left!",bc_yellow; end; OnMobMultiKilled: if(!.inva_status) end; // Shouldn't be possible if(getvariableofnpc(.rew_type,"Invasion Rewarder") > 0) set InvaKill,InvaKill + 1; // Kill Counter for Reward set @loc,0; for ( set .@l,0; .@l < getarraysize(.map_b$); set .@l,.@l + 1) if(strcharinfo(3) == .map_b$[.@l]) { set @loc,1; set @map,.@l; break; } for ( set .@l,0; .@l < getarraysize(.map_s$); set .@l,.@l + 1) if(strcharinfo(3) == .map_s$[.@l]) { set @loc,2; set @map,.@l; break; } OnMMobKilled: if(.debug) debugmes .n$+": 2nd Loc Check: @Loc; "+@loc+", @map: "+@map; switch( @loc ) { case 1: setd(".Mob_"+.map_post_b$[@map]+"_Killed"),getd(".Mob_"+.map_post_b$[@map]+"_Killed") - 1; if(.debug) debugmes .n$+": Mobs: "+mobcount(.map_b$[@map],strnpcinfo(0)+"::OnMobMultiKilled")+", Variable: "+getd(".Mob_"+.map_post_b$[@map]+"_Killed"); if(getd(".Mob_"+.map_post_b$[@map]+"_Killed") > 0) mapannounce strcharinfo(3),.n$+": The player ["+strcharinfo(0)+"] has killed another monster, "+getd(".Mob_"+.map_post_b$[@map]+"_Killed")+" monsters are left!!!! Good work !!!",0; else { announce .n$+": Every Monster in "+.map_s$[@map]+" has been defeated, thank you guys!!!",0; donpcevent strnpcinfo(0)+"::OnOtherTown"; } break; case 2: setd(".Mob_"+.map_post_s$[@map]+"_Killed"),getd(".Mob_"+.map_post_s$[@map]+"_Killed") - 1; if(.debug) debugmes .n$+": Mobs: "+mobcount(.map_s$[@map],strnpcinfo(0)+"::OnMobMultiKilled")+", Variable: "+getd(".Mob_"+.map_post_s$[@map]+"_Killed"); if(getd(".Mob_"+.map_post_s$[@map]+"_Killed") > 0) mapannounce strcharinfo(3),.n$+": The player ["+strcharinfo(0)+"] has killed another monster, "+getd(".Mob_"+.map_post_s$[@map]+"_Killed")+" monsters are left!!!! Good work !!!",0; else { announce .n$+": Every Monster in "+.map_s$[@map]+" has been defeated, thank you guys!!!",0; donpcevent strnpcinfo(0)+"::OnOtherTown"; } break; } end; OnOtherTown: for ( set .@t,0; .@t < getarraysize(.map_b$); set .@t,.@t + 1) if(getd(".Mob_"+.map_post_b$[.@m]+"_Killed") > 0) set .@mapb_left$,.@mapb_left$ + .map_b$[.@m]+ ( (.map_b$[.@m+1] != "")?", ":""); for ( set .@t,0; .@t < getarraysize(.map_s$); set .@t,.@t + 1) if(getd(".Mob_"+.map_post_s$[.@m]+"_Killed") > 0) set .@maps_left$,.@maps_left$ + .map_s$[.@m]+ ( (.map_s$[.@m+1] != "")?", ":""); if(.@maps_left$ == "" && .@mapb_left$ == "") donpcevent strnpcinfo(0)+"::OnInvaEnd"; announce .n$+": In the "+ ( (.@mapb_left$ != "")?"big towns "+.@mapb_left$+ ( (.@maps_left$ != "")?" and small towns "+.@maps_left$:""):"small towns "+.@maps_left$)+" are still Monsters, please help use to defeat them!!!",0; end; OnInvaEnd: announce .n$+": Thank you guys for your help in defeating the invaders, we will counting on you for the next time as well.",0; donpcevent strnpcinfo(0)+"::OnInvaRestart"; end; OnInvaForceEnd: if(.delay == 1) set .s,0; // Reseting Delay Counter announce .n$+": NOOOOO!!! The monsters successfully invaded the towns, RETREAT GUARDS!!!",0; // Removing Mobs if(.inva_type == 1) // Single Town if(.map_use == 1) killmonster .map_b$[.t],strnpcinfo(0)+"::OnMobSingleKilled"; else killmonster .map_s$[.t],strnpcinfo(0)+"::OnMobSingleKilled"; else if(.inva_type == 2) { // Multi Town for ( set .@t,0; .@t < getarraysize(.map_b$); set .@t,.@t + 1) killmonster .map_b$[.@t],strnpcinfo(0)+"::OnMobMultiKilled"; for ( set .@t,0; .@t < getarraysize(.map_s$); set .@t,.@t + 1) killmonster .map_s$[.@t],strnpcinfo(0)+"::OnMobMultiKilled"; } set .inva_status,0; sleep 10000; announce .n$+": Brave Fighters, I thank you for your support, but we failed!!",0; sleep 10000; announce .n$+": Let's regroup and let's try again, I will inform you when we are ready!!",0; OnInvaRestart: DELAY(.delay_type,.delay_pos,2); if(getvariableofnpc(.rew_type,"Invasion Rewarder") > 0) { enablenpc "Invasion Rewarder"; announce .n$+": Visit the \"Invasion Rewarder\" to recieve rewards for your kills. But hurry, he will disappear in "+getvariableofnpc(.rew_dis,"Invasion Rewarder")+" minutes.",0; donpcevent strnpcinfo(0)+"::OnRewardDisable"; } end; // Auto Disable Reward NPC OnRewardDisable: set .m,getvariableofnpc(.rew_dis,"Invasion Rewarder"); while( .m != 0 ) { switch(.m) { case 4: case 3: case 2: announce .n$+": The \"Invasion Rewarder\" will disappear in "+.m+" minutes.",bc_all; break; case 1: announce .n$+": HURRY, the \"Invasion Rewarder\" will disappear in 1 minute.",bc_all; break; } set .m,.m - 1; sleep 60000; } announce "Invasion Rewarder: Okay, I'm done here. See ya next time!!!",0; set .m,0; disablenpc "Invasion Rewarder"; end; OnPCLoginEvent: if(.inva_status == 0) end; announce .n$+": The Monster Invasion Event is currently running, please hurry and help us!!",bc_self; sleep2 2000; if(.inva_type == 1) set .@map_left$,( (.map_use == 1) ? .map_b$[.t]:.map_s$[.t]); else if(.inva_type == 2) { for ( set .@m,0; .@m < getarraysize(.map_b$); set .@m,.@m + 1) if(getd(".Mob_"+.map_post_b$[.@m]+"_Killed") > 0) set .@map_left$,.@map_left$ + .map_b$[.@m]+ ( (.map_b$[.@m+1] != "")?", ":""); for ( set .@m,0; .@m < getarraysize(.map_s$); set .@m,.@m + 1) if(getd(".Mob_"+.map_post_s$[.@m]+"_Killed") > 0) set .@map_left$,.@map_left$ +" and "+ .map_s$[.@m]+ ( (.map_s$[.@m+1] != "")?", ":""); } announce .n$+": We are defending at "+ .@map_left$+"!!!",bc_self; end; OnInit: set .n$,"[Ragnarok Guard]"; // Debug Mode - See Map Server Console for Debug messages set .debug,0; // ======= Invasion Type ======= // - 1: Single // - 2: Multiply set .inva_type,1; // ====== Single Invasion Settings ========= if(.inva_type == 1) { // * Specific Map Usage // - 0 = Random // - 1 = Big Maps // - 2 = Small Maps set .s_inva_spec,0; if(.s_inva_spec > 0) { // * Map Index // X = Array Index of the Map Array set .s_inva_pos,0; } // ======= Multiply Invasion Settings ======== } else if(.inva_type == 2) { // * Spawn Option // - 1: All Maps // - 2: Specific Maps set .inva_spawn,2; if(.inva_spawn == 2) { // * Map Usage: // - 1: Big Maps // - 2: Small Maps set .inva_size,1; // * Map Amount: // - 0: All Maps from .inva_size above // - 1+: ... // Note: If this value exceeds the size of the map array, // then it will use all maps of .inva_size. set .inva_maps,0; if(.inva_maps > 0 && .inva_maps < ( (.inva_size == 1)?getarraysize(.map_b$):getarraysize(.map_s$) ) ) // * Map Randoming: // - 0: No // - 1: Yes // Note: Map Randoming is only possible when not all maps are wanted // It would be ineffective to make map randoming when there are all maps active :I set .inva_rand,1; } } // * Invasion on Server Start // - 0: No // - 1: Yes set .inva_statusinit,1; // * Invasion Force End // - Default: 3600 seconds // 1 Hour // - 0: Not used // - 1+: ... // Note: The Event will automatically end after this value has passed (in seconds) set .inva_fend,3600; // =======*======= DELAY SETTINGS =======*======= // * Delay Usage // - 0: Off - OnClockXXXX will be used // - 1: On set .delay,1; // * Delay Type // - 1: Random (Default) // - 2: Fixed Delay // - 3: Ranged Delay set .delay_type,1; // ---- Fixed Delay ---- // Array Position in ".time" if(.delay_type == 2) set .delay_pos,0; // ---- Ranged Delay ---- // Array Position for start index if(.delay_type == 3) set .delay_pos,3; // * Delay Times setarray .time[0], // In Seconds - is equal to - Array Position 10800, // 3 Hours - 0 14400, // 4 Hours - 1 21600, // 6 Hours - 2 86400, // 1 Day - 3 172800, // 2 Days - 4 259200; // 3 Days - 5 // =======*======= MONSTER SETTINGS =======*======= // * Mob Quantity Limit depending on the map size // - Big Maps set .m_limit_b,100; // - Small Maps set .m_limit_s,30; // * Maps List // - Big Maps setarray .map_b$[0],"prontera","geffen","payon","morocc","aldebaran","alberta"; // For every map you have to add an postfix in the same order, // which has been put in the array for the Maps // After this, just set an array with the Mob IDs where the // array name contains the postfix you set-up, see the examples setarray .map_post_b$[0],"pron","gef","pay","mor","alde","alb"; // - Small Maps setarray .map_s$[0],"izlude"; setarray .map_post_s$[0],"izl"; // ======= Monster ID's ======= // ------ Big Maps ------ // * Prontera - Mantis, Thief Bug Male, Argos, Side Winder setarray .mob_pron[0],1139,1054,1100,1037; // * Geffen - Poison Spore, Ghoul, Jakk, High Orc setarray .mob_gef[0],1855,1036,1130,1213; // * Payon - Zombie, Elder Willow, Munak, Nine Tail, Drainliar setarray .mob_pay[0],1015,1033,1026,1180,1111; // * Morocc - Requiem, Isis, Mummy, Minorous setarray .mob_mor[0],1164,1029,1041,1149; // * Aldebaran - Cramp, Penomena, Punk, Orc Archer, Bathory setarray .mob_alde[0],1209,1029,1199,1189,1102; // * Alberta - Pirate Skeleton, Penomena, Poison Spore, Whisper, Mimic setarray .mob_alb[0],1071,1029,1077,1179,1191; // ------ Small Maps ------ // * Izlude - Obeaune, Merman, Swordfish, Strouf setarray .mob_izl[0],1044,1264,1069,1065; // ------ Mob Amount Calculation for Big Maps ------ for ( set .@c,0; .@c < getarraysize(.map_post_b$); set .@c,.@c + 1) setd(".mam_"+.map_post_b$[.@c]),( .m_limit_b/getarraysize(getd(".mob_"+.map_post_b$)) ); // ------ Mob Amount Calculation for Small Maps ------ for ( set .@c,0; .@c < getarraysize(.map_post_s$); set .@c,.@c + 1) setd(".mam_"+.map_post_s$[.@c]),( .m_limit_s/getarraysize(getd(".mob_"+.map_post_s$)) ); // ======= Final Kill Settings ======= // * Will the player who gets the final kill be rewarded? // Only working during a Single Invasion // - 1: Yes // - 0: No set .inva_final,1; if(.inva_final == 1) { // * Reward Type: // - 1: Zeny // - 2: Cash Points // - 512+: Item ID (the Value is already the Item ID) set .inva_f_id,1; // * Reward Amount: set .inva_f_am,10000; } // =======*======= END of SETTINGS =======*======= // Even if .delay is 0, its required to start the timer for force ending the event :I initnpctimer; if(.debug) { debugmes .n$+": .inva_delay: "+.inva_delay; debugmes .n$+": gettimetick(2): "+gettimetick(2); } if(.delay == 1 && DELAY(.delay_type,.delay_pos,1) < 1) // If the delay value is empty, set it!! DELAY(.delay_type,.delay_pos,2); if(.debug) debugmes .n$+": .inva_delay: "+.inva_delay; if(.inva_statusinit == 1) // Starting Invasion on Server Start donpcevent strnpcinfo(0)+"::OnInvaInit"; // Custom Commands for GM's bindatcmd "invastart",strnpcinfo(0)+"::OnInvaInit",1,99; bindatcmd "invaend",strnpcinfo(0)+"::OnInvaForceEnd",1,99; end; function DELAY { // Format: DELAY(.delay_type,.delay_pos,1/2); // getarg(0) = Delay Type // * 1: Random // * 2: Fixed Delay // * 3: Ranged Delay // getarg(1) = Array Position if getarg(0) == 2 || 3 // getarg(2): Read/Write // * 1: Read // * 2: Write if(getarg(2) == 1) return (.inva_delay - gettimetick(2)); switch(getarg(0)) { case 1: set .@new_inva,.time[rand(getarraysize(.time))]; break; case 2: set .@new_inva,.time[getarg(1)]; break; case 3: set .@new_inva,.time[rand(getarg(1),getarraysize(.time) - 1)]; break; } set .inva_delay,gettimetick(2) + .@new_inva; return .@new_inva; } } prontera,150,175,4 script Invasion Rewarder 110,{ mes .n$; mes "Hello, "+strcharinfo(0)+"!"; mes "So you want to be rewarded from the Mob Invasion Event, huh?"; mes "Let me take a look at your battle record."; next; mes .n$; if(!InvaKill) { mes "It seems like you didn't participated at all or you got your reward already."; mes "So I can't give you any kind of reward."; mes "Try your best next time."; close; } mes "You haved killed "+InvaKill+" monsters, good job there."; next; mes .n$; set .@rew_am,InvaKill*.rew_am; set .@rew_bonus, ( (.rew_bonus > 0)?(InvaKill*.rew_bonus):.rew_bonus); set .@total,.@rew_am + .@rew_bonus; if(.rew_type == 1) { mes "You have recieved "+.@total+"x "+( (.rew_bonus == 1)?"(Bonus: +"+.@rew_bonus+") ":"") + getitemname(.rew_id)+"."; getitem .rew_id,.@total; } else if(.rew_type == 2) { mes "You have recieved "+.@total+"x "+( (.rew_bonus == 1)?"(Bonus: +"+.@rew_bonus+") ":"") + "Cash Points."; set #CASHPOINTS,#CASHPOINTS + (.rew_am+.rew_bonus); } set InvaKill,0; close; OnInit: set .n$,"["+strnpcinfo(0)+"]"; // =======*======= REWARD SETTINGS =======*======= // * Reward Type: // - 0: None // - 1: Item // - 2: Cash Points set .rew_type,1; // * Reward Bonus // - 0: Off // - 1 and higher: On // = This bonus will be given to the kill additionally. set .rew_bonus,0; // ----- Item ----- if(.rew_type == 1) set .rew_id,7929; // Item ID // ----- Reward Quantity ----- set .rew_am,10; // Amount per Kill // ----- NPC Auto Disable ----- // After how many minutes will the NPC be disabled again: set .rew_dis,3; disablenpc strnpcinfo(0); end; } This is the npc and related settings see spoiler
  6. ito gamitin mo brod https://github.com/rathena/rathena/blob/master/npc/custom/etc/mvp_room.txt
  7. It's not what you want but i think it's the same as what it does use the Card Trader 1.1 here https://rathena.org/board/topic/64394-✰-euphys-scripts-✰/ you can instantly sell the cards via shop
  8. I'm trying this one too.. item 8105 is a custom item and it's refineable item. Add(1,5135,1,0,0,8105,1,10); but gave me this one.
  9. So, i start adding achievements but i'm having a problem i could not claim a reward. so basically if i obtain a Valkyrie Armor( itemID 2357 ) i will get a title achievement. i tried @item 2357 and it's working. but the claim reward is still grayed out. here's what i am adding. achievement_db.yml Body: - Id: 240021 Group: Get_Item Name: Ride of the Valkyrie I Condition: " (countitem(2357) == 1) " Rewards: TitleId: 1045 Score: 10 achievement_list_EN.lub }, [250000] = { UI_Type = 0, group = "GET_ITEM", major = 1, minor = 2, title = "Ride of the Valkyrie I", content = { summary = "Own a Valkyrie Armor", details = "Reward: " }, resource = { [1] = { text = "Own a Valkyrie Armor" } }, reward = { title = 1045 }, score = 10 titletable.lub [1045] = "Ride of the Valkyrie I"
  10. for flag emotions it is located at. nemo\Input\flags.txt since the flags there are outdated just check here https://github.com/rathena/rathena/wiki/Emotion-List-Constants for the updated ones.
  11. I'm currently using the PRO style-coupon when im trying to delete a code it says ragnarok_db.reward_logs doen't exist already executed the sql files.
  12. thanks for the effort but i got a mistake here my fault. it should be on Zeny to Coin where in i want to limit the Zeny that can be exchanged into Coin up to 50m only. eg. so 1 Coin = 10m for example the user input/exchange 4 Coins so that's 4 coins = 40m if the user exchange again for example another 4 coins it should not convert because he got only 1 more coin left to exchange to complete the 50m limit should notify that the user has xxx more left to exchange then after that the cooldown applies.
  13. prontera,128,213,5 script Coin Manager#1::CM 733,{ // Your Server Max Zeny Amount set .MaxZeny,1000000000; // Coins Item ID and each Coins Costs setarray .Coins[1],677; setarray .Zeny[1],10000000; set .@change_zeny_per_day, 50000000; // Quest setarray .@item_need, 7227,5, 7444,100, 969,100, 999,100; .@size_need = getarraysize( .@item_need ); set @Menu$,""; for( set .@a,1; .@a < getarraysize( .Coins ); set .@a,.@a+1 ) set @Menu$,@Menu$ + getitemname( .Coins[.@a] )+":"; while( 1 ){ mes "Hello I am the Coin Manager, if you are interested in coins you have to talk with me,What can i help you with?"; next; switch( select( "I want trade Coin to Zeny:I want trade Zeny to Coin" ) ){ Case 1: mes "Very well. But im only interested on really expensive Coins made of Platinum:"; for( set .@a,1; .@a < getarraysize( .Coins ); set .@a,.@a+1 ){ mes "^0000FF"+getitemname( .Coins[.@a] )+" ^FF0000"+.Zeny[.@a]+"^000000 Zeny."; } next; set .@a,select( @Menu$ ); mes "Select the Amount of Coins you want to trade into Zeny."; mes "You have "+countitem( .Coins[.@a] )+" "+getitemname( .Coins[.@a] )+"."; input @Amount,0,countitem( .Coins[.@a] ); if( @Amount < 1 ){ mes "You don't have that quantity of Coins."; }else if( ( Zeny + ( @Amount * .Zeny[.@a] ) ) > .MaxZeny ){ mes "You can't hold this amount of Zeny."; }else{ set Zeny,Zeny + ( @Amount * .Zeny[.@a] ); delitem .Coins[.@a],@Amount; mes "Done, you have traded "+@Amount+" of "+getitemname(.Coins[.@a])+" into "+( @Amount * .Zeny[.@a] )+" Zeny."; } next; break; Case 2: if ( zeny_coin_quest < gettimetick(2) ) { mes "im sory but you have to make platinum permit quest to trade zeny into platinum coins, do you want to make platinum permit quest?"; next; if ( select( "yes", "no" ) -1 ) end; mes "you need :"; for ( .@i = 0; .@i < .@size_need; .@i += 2 ) mes "- "+ .@item_need[.@i+1] +" "+ getitemname( .@item_need[.@i] ); mes "and 100,000,000z"; next; if ( select( "give the items", "leave" ) -1 ) close; .@j = 0; for ( .@i = 0; .@i < .@size_need; .@i += 2 ) if ( countitem( .@item_need[.@i] ) < .@item_need[.@i+1] ) { if ( !.@j ) mes "I'm sorry you need"; mes "- "+ ( .@item_need[.@i+1] - countitem( .@item_need[.@i] ) ) +" "+ getitemname( .@item_need[.@i] ); .@j++; } if ( Zeny < 100000000 ) mes "You need "+ ( 100000000 - Zeny ) +" zeny."; if ( .@j || Zeny < 100000000 ) close; for ( .@i = 0; .@i < .@size_need; .@i += 2 ) delitem .@item_need[.@i], .@item_need[.@i+1]; Zeny = Zeny - 100000000; zeny_coin_quest = gettimetick(2) + 30 * 86400; close; } else if ( getstrlen( maxchange_zeny_per_day$ ) ) { explode( .@tmp$, maxchange_zeny_per_day$, "|" ); if ( atoi( .@tmp$ ) == gettime(4) && atoi( .@tmp$[1] ) > .@change_zeny_per_day ) { mes "I'm sorry you can't exchange more than "+ .@change_zeny_per_day +" zeny per day."; close; } else if ( atoi( .@tmp$ ) != gettime(4) ) .@tmp$[1] = 0; } mes "Very well. Here is the list on how much each coin is worth:"; for( set .@a,1; .@a < getarraysize( .Coins ); set .@a,.@a+1 ){ mes "^0000FF"+getitemname( .Coins[.@a] )+" ^FF0000"+.Zeny[.@a]+"^000000 Zeny."; } next; set .@a,select( @Menu$ ); mes "Select the Amount of Zeny you want to trade into "+getitemname( .Coins[.@a] )+"."; mes "You can get maximum of "+Zeny/.Zeny[.@a]+" "+getitemname( .Coins[.@a] )+"."; input @Amount,0,Zeny/.Zeny[.@a]; if( @Amount < 1 ){ mes "You don't have that quantity of Zeny."; }else{ set Zeny,Zeny - ( @Amount * .Zeny[.@a] ); getitem .Coins[.@a],@Amount; mes "Done, you have traded "+( @Amount * .Zeny[.@a] )+" Zeny into "+@Amount+" of "+getitemname(.Coins[.@a])+" ."; .@tmp$ = gettime(4); .@tmp$[1] = atoi( .@tmp$[1] ) + @Amount * .Zeny[.@a]; maxchange_zeny_per_day$ = implode( .@tmp$, "|" ); } next; break; } } close; } can anyone update this script? for example i want to limit 5 coins to be exchanged per day. if i exactly input 5 coins it will automatically stop you from exchanging but let's say you exchange 4 coins first and then you exchange 4 again. it wont let you stop from exchanging it will only stop you from exchanging if you input the exact number
  14. im using two years behind to the latest i only have one error though chat_createchat identifier not found this part... cd = chat_createchat( &md->bl, market_title, "", 1, false, 0, "", 0, 1, MAX_LEVEL );
  15. i did try to add more letters on it. but it can only display up to 4 letters. i still cant find where did i got the script for the source.
  16. I want to add this NPC from here https://raw.githubusercontent.com/rathena/rathena/master/npc/re/merchants/hd_refiner.txt i also added this onto my refine_db from renewal refine_db - Type: REFINE_COST_OVER10 Price: 100000 Material: 6223 - Type: REFINE_COST_HD Price: 20000 - Type: REFINE_COST_OVER10_HD Price: 100000 Material: 6225 But, the NPC still cannot read the requirements needed to upgrade and the zeny cost. // Basta (+10 and up) :: cash_smelting //============================================================ - script ::Basta -1,{ disable_items; mes "[Basta]"; mes "I'm the best Blacksmith in the whole world, Basta."; mes "But I don't provide a normal refine service."; mes "I only refine equipment ^CC0000over +10^000000."; next; mes "[Basta]"; mes "Which equipment do you want to refine?"; next; setarray .@indices[1], EQI_HEAD_TOP, EQI_ARMOR, EQI_HAND_L, EQI_HAND_R, EQI_GARMENT, EQI_SHOES, EQI_ACC_L, EQI_ACC_R, EQI_HEAD_MID, EQI_HEAD_LOW; for ( .@i = 1; .@i <= 10; ++.@i ) .@menu$ = .@menu$ + ( getequipisequiped(.@indices[.@i]) ? getequipname(.@indices[.@i]) : F_getpositionname(.@indices[.@i]) + "-[Unequipped]" ) + ":"; .@part = .@indices[ select(.@menu$) ]; if (!getequipisequiped(.@part)) { mes "[Basta]"; switch(.@part) { case EQI_HEAD_TOP: mes "Is your head an equipment?"; break; case EQI_ARMOR: mes "What do you want me to do?"; break; case EQI_HAND_L: case EQI_HAND_R: mes "Making artificial hands is not my specialty."; break; case EQI_GARMENT: mes "Do you even know what a robe is?"; break; case EQI_SHOES: mes "If you want to refine your feet, don't come to me, try running a marathon."; break; case EQI_ACC_L: case EQI_ACC_R: mes "Where is the accessory?"; break; case EQI_HEAD_MID: mes "Well... I don't see any equipment worth refining."; break; case EQI_HEAD_LOW: mes "I can't make you smart. Go see a school teacher for that."; break; } close; } if (!getequipisenableref(.@part)) { mes "[Basta]"; mes "Even I cannot refine this item. There's no way."; close; } .@refine_count = getequiprefinerycnt(.@part); if (.@refine_count < 10) { mes "[Basta]"; mes "Haven't I told you? I only refine equipment that are +10 and above."; close; } else if (.@refine_count == 10) .@blacksmith_blessing_count = 7; else if (.@refine_count == 11) .@blacksmith_blessing_count = 11; else if (.@refine_count == 20) { mes "[Basta]"; mes "This weapon is perfect, no need to refine it anymore~"; close; } .@refineitemid = getequipid(.@part); // save id of the item .@itemtype = getiteminfo( .@refineitemid, ITEMINFO_TYPE ); .@refinerycnt = getequiprefinerycnt(.@part); //save refinery count setarray .@card[0], getequipcardid(.@part,0), getequipcardid(.@part,1), getequipcardid(.@part,2), getequipcardid(.@part,3); .@price = getequiprefinecost(.@part, REFINE_COST_HD, REFINE_ZENY_COST); .@material = getequiprefinecost(.@part, REFINE_COST_HD, REFINE_MATERIAL_ID); if ( .@itemtype != IT_WEAPON ) .@type$ = "armor"; else .@type$ = "weapon"; mes "[Basta]"; mes "Hmm... is this the one you want to refine?"; mes "To refine this equipment, I need 1 ^ff9999" + getitemname(.@material) + "^000000 and " + callfunc("F_InsertComma",.@price) + " zeny as a fee."; mes "Do you really want to refine this?"; next; if (select("Yes:No") == 2) { mes "[Basta]"; mes "Okay. If that's what you want..."; close; } if (getequippercentrefinery(.@part, true) < 100) { mes "[Basta]"; mes "This " + .@type$ + " has already been refined pretty high."; mes "If you try to refine it more, the refine level could decrease."; next; mes "[Basta]"; mes "I am different from the blacksmiths in others places."; mes "It is impossible that the refine level will drop by, say, 3 or 4... that sounds scary."; mes "Here it can only decrease by 1 level."; next; if (.@blacksmith_blessing_count == 0 || countitem(6635) < .@blacksmith_blessing_count) { mes "[Basta]"; mes "Compared to other blacksmiths, the risk is smaller."; mes "I've given all precautions. Do you want to try it?"; next; setarray .@menu$[0], "", "Yes", "No"; } else { mes "[Basta]"; mes "Woah~ Is it the ^316AC5Blacksmith Blessing^000000? It is difficult to get~ But, you have it!"; next; mes "[Basta]"; mes "For +" + .@refine_count + " " + .@type$ + " need ^316AC5" + .@blacksmith_blessing_count + " unit(s) Blacksmith Blessing^000000 can prevent the equipment from vanishing. Do you want to refine with Blacksmith Blessing?"; next; setarray .@menu$[0], "Refine with Blacksmith Blessing", "Refine without Blacksmith Blessing", "Don't refine yet"; } switch( select(.@menu$[0], .@menu$[1], .@menu$[2]) ) { case 1: .@bless_who = 1; break; case 2: break; case 3: mes "[Basta]"; mes "Well~"; mes "Not challenging at all could also be a kind of wisdom in life."; close; } } if ((.@bless_who && countitem(6635) < .@blacksmith_blessing_count) || countitem(.@material) == 0 || Zeny < .@price) { mes "[Basta]"; mes "Hmm... You didn't bring all the materials needed."; mes "Come back when you have them all."; close; } if (.@bless_who) delitem 6635, .@blacksmith_blessing_count; delitem .@material,1; Zeny = Zeny - .@price; // anti-hack if (callfunc("F_IsEquipIDHack", .@part, .@refineitemid) || callfunc("F_IsEquipCardHack", .@part, .@card[0], .@card[1], .@card[2], .@card[3]) || callfunc("F_IsEquipRefineHack", .@part, .@refinerycnt)) { mes "[Basta]"; emotion ET_FRET; mes "Wait a second..."; mes "Do you think I'm stupid?!"; mes "You switched the item while I wasn't looking! Get out of here!"; close; } mes "Pow! Pow! Pow! Pow!"; if (getequippercentrefinery(.@part, true) > rand(100)) { successrefitem .@part; next; emotion ET_BEST; mes "[Basta]"; mes "Great! Nicely done!!"; mes "I really am the best blacksmith in the whole wide world!"; close; } if (.@bless_who == 1) { specialeffect EF_HOLYHIT; next; emotion (!rand(5))?ET_MONEY:ET_HUK; mes "[Basta]"; mes "Aaaaaaaaaaak!!!"; next; mes "[Basta]"; mes "Refining has failed!"; mes "The best blacksmith in the world like me..."; mes "doesn't guarantee 100% success~"; } else { downrefitem .@part; next; emotion (!rand(5))?ET_MONEY:ET_HUK; mes "[Basta]"; mes "Aaaaaaaaaaak!!!"; next; mes "[Basta]"; mes "Damn it!"; mes "Refining has failed and refine level has decreased!"; mes "Even the best blacksmith in the world doesn't guarantee 100% success!"; } mes "Too bad."; next; mes "[Basta]"; mes "I'll do better next time! Don't worry!"; close; } prt_in,57,54,3 duplicate(Basta) Basta#prt 4_M_DWARF morocc_in,68,30,3 duplicate(Basta) Basta#morocc 4_M_DWARF payon,148,174,3 duplicate(Basta) Basta#payon 4_M_DWARF alberta_in,18,56,3 duplicate(Basta) Basta#alberta 4_M_DWARF yuno_in01,173,18,3 duplicate(Basta) Basta#yuno 4_M_DWARF ein_in01,24,82,3 duplicate(Basta) Basta#einbroch 4_M_DWARF lhz_in02,280,17,3 duplicate(Basta) Basta#lighthalzen 4_M_DWARF
  17. IsEnsemble: true did you try already to set to false in skill_db?
  18. https://rathena.org/board/topic/71961-gold-room-request/
  19. which particular file? idk why but i tried to uncheck the read data folder first and it solve my problem.
  20. First off im using 2015-11-04a and i decided to use 2018-06-20e as usual i do the basic thing diffing client after that works fine . i manage to run the game without errors. i can @item them and properly showing in the inventory so what i did was im using the same grf, same iteminfo.lua as i use wayback when im using the 2015 client can someone tell me if i miss something?
  21. if you unequipped any item that you already hide it will show up again upon re-equipping it
  22. if a player enters the PvP room and they have choose to turn OFF their annoucement the other players that have their annoucement ON on the other hand they will recieve the annoucement blank [PvP Annoucement]: has entered the PvP Room
  23. from doc\skill_db.txt always check for proper tab or alignment i guess you can always check for samples at db\pre-re\skill_db.yml or db\re\skill_db.yml Cooldown: Time before the character can use the same skill again in milliseconds. Can be defined in scalar form or sequence map form: Scalar Form Cooldown: 1000 Sequence Map Form Cooldown: - Level: 1 Time: 1000 - Level: 2 Time: 2000 - Level: 3 Time: 3000 - Level: 4 Time: 4000 - Level: 5 Time: 5000
  24. saw this at discord answered by nitrous Change `struct item_data *itemdata` to `std::shared_ptr<item_data> item_data`
  25. its working but it wont let me show the letters that i obtained it will show only Letter's Collected: _____
×
×
  • Create New...