Jump to content

qtdan

Members
  • Posts

    223
  • Joined

  • Last visited

  • Days Won

    5

qtdan last won the day on November 25 2023

qtdan had the most liked content!

3 Followers

About qtdan

  • Birthday 12/21/1995

Profile Information

  • Gender
    Male
  • Location
    Bulacan
  • Server
    PrestigeRO

Recent Profile Visitors

5956 profile views

qtdan's Achievements

Metaling

Metaling (6/15)

  • Reacting Well
  • Conversation Starter
  • First Post
  • Collaborator
  • Dedicated

Recent Badges

29

Reputation

3

Community Answers

  1. //===== rAthena Script ======================================= //= saders All in one Random Option Script //= Free Script!!!! //===== By: ================================================== //= sader1992 //= https://sader1992.com/ //= https://rathena.org/board/profile/30766-sader1992/ //= https://sader1992.com/?page=item&item=54 //= For more , check out here > //= https://sader1992.com/?page=ra_services //= https://sader1992.com/?page=store //= https://rathena.org/board/profile/30766-sader1992/content/?type=downloads_file //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== //= rAthena Project //https://rathena.org/board/files/file/4309-all-in-one-random-options-script/ //https://github.com/sader1992/sader_scripts //===== Update Log: ========================================= //= Version 1.0 Creating the script. //===== Description: ========================================= //= This is a Highly Custumizable random option script //= you can reuse the script by just creating a new file with different setting!. //= read and understand the settings. //============================================================ prt_in,30,108,5 script Random Option 10434,{ disable_items; function rnd; switch(select("Insert Random Options:Allowed Items List")){ case 1: mes "You must equip the item to appear here!"; for(.@i=0;.@i<EQI_MAX;.@i++){ if(getequipisequiped(.@i)) { .@m1$ += (inarray(.item_list,getequipid(.@i)) != -1?"^11AD09":"^F73831") + F_getpositionname(.@i) + "-[" + getequipname(.@i) + "]^000000"; .@exist = true; } .@m1$ += ":"; } if(!.@exist){ mes "You have to equip the item you want to insert the random options into!."; end; } .@eq = select(.@m1$) -1; clear; .@id = getequipid(.@eq); if(inarray(.item_list,.@id) == -1){ mes "Sorry , I cannot deal with this item!"; end; } .@gid = .it[.@id]; if(!.@gid){ mes "Something went wrong!"; end; } if(!getequiprandomoption(.@eq,0,ROA_ID)){ .@zeny = .nz[.@gid]; .@cashpoint = .nk[.@gid]; .@costumpoint = .nc[.@gid]; copyarray(.@item,getd(".ni_" + .@gid),getarraysize(getd(".ni_" + .@gid))); copyarray(.@amount,getd(".na_" + .@gid),getarraysize(getd(".na_" + .@gid))); }else{ if(!.g_reroll[.@gid]){ mes "Sorry , i cannot reroll the random options in this item!"; end; } .@zeny = .rz[.@gid]; .@cashpoint = .rk[.@gid]; .@costumpoint = .rc[.@gid]; copyarray(.@item,getd(".ri_" + .@gid),getarraysize(getd(".ri_" + .@gid))); copyarray(.@amount,getd(".ra_" + .@gid),getarraysize(getd(".ra_" + .@gid))); } mes "Selected Item [" + getequipname(.@eq) + "]"; mes "==== Cost ===="; if(.@zeny) mes "Zeny: " + .@zeny; if(.@cashpoint) mes "CashPoint: " + .@cashpoint; if(.@costumpoint) mes .CustomPointsName$ + ": " + .@costumpoint; for(.@i=0;.@i<getarraysize(.@item);.@i++){ mes "(" + .@amount[.@i] + "pcs.) " + getitemname(.@item[.@i]) + " (" + .@item[.@i] + ")"; } if(!.KeepItemData){ mes "^E01E00You will loss all the refine and cards in the item if you continue.^000000"; } mes "Would you like to continue?"; if(select("Yes:No") == 2){ clear; mes "Ok, see you next time!"; end; } clear; if(Zeny < .@zeny){ mes "You don't have " + .@zeny + " Zeny"; .@close = true; } if(#CASHPOINTS < .@cashpoint){ mes "You don't have " + .@cashpoint + " CashPoints"; .@close = true; } if(getd(.CustomPointsVariable$) < .@costumpoint){ mes "You don't have " + .@costumpoint + " " + .CustomPointsName$; .@close = true; } for(.@i=0;.@i<getarraysize(.@item);.@i++){ if(countitem(.@item[.@i]) < .@amount[.@i]){ mes "You don't have (" + .@amount[.@i] + ") " + getitemname(.@item[.@i]); .@close = true; } } if(.@close) end; .@r = getequiprefinerycnt(.@eq); for(.@i=0;.@i<4;.@i++){ if(getequipcardid(.@eq,.@i)){ setd ".@c" + .@i,getequipcardid(.@eq,.@i); .@re[getarraysize(.@re)] = true; } } copyarray(.@opt_id,getd(".ro_id_" + .@gid + "_0"),getarraysize(getd(".ro_id_" + .@gid + "_0"))); copyarray(.@opt_mn,getd(".ro_mn_" + .@gid + "_0"),getarraysize(getd(".ro_mn_" + .@gid + "_0"))); copyarray(.@opt_mx,getd(".ro_mx_" + .@gid + "_0"),getarraysize(getd(".ro_mx_" + .@gid + "_0"))); for(.@i=1;.@i<6;.@i++){ copyarray(getd(".@opt_id" + .@i),getd(".ro_id_" + .@gid + "_" + .@i),getarraysize(getd(".ro_id_" + .@gid + "_" + .@i))); copyarray(getd(".@opt_mn" + .@i),getd(".ro_mn_" + .@gid + "_" + .@i),getarraysize(getd(".ro_mn_" + .@gid + "_" + .@i))); copyarray(getd(".@opt_mx" + .@i),getd(".ro_mx_" + .@gid + "_" + .@i),getarraysize(getd(".ro_mx_" + .@gid + "_" + .@i))); } for(.@i=1;.@i<6;.@i++){ if(rand(100) > getd(".s_" + .@i + "[" + .@gid + "]")) break; if(getd(".ro_id_" + .@gid + "_" + .@i)){ if(!getarraysize(getd(".@opt_id" + .@i))) break; .@ndx = rand(getarraysize(getd(".@opt_id" + .@i))); .@result_id = getd(".@opt_id" + .@i + "[" + .@ndx + "]"); .@result_vl = rnd(getd(".@opt_mn" + .@i + "[" + .@ndx + "]"),getd(".@opt_mx" + .@i + "[" + .@ndx + "]")); deletearray(getd(".@opt_id" + .@i + "[" + .@ndx + "]"),1); deletearray(getd(".@opt_mn" + .@i + "[" + .@ndx + "]"),1); deletearray(getd(".@opt_mx" + .@i + "[" + .@ndx + "]"),1); }else{ if(!.@opt_id) break; .@ndx = rand(getarraysize(.@opt_id)); .@result_id = .@opt_id[.@ndx]; .@result_vl = rnd(.@opt_mn[.@ndx],.@opt_mx[.@ndx]); if(!.g_reuse[.@gid]){ deletearray(.@opt_id[.@ndx],1); deletearray(.@opt_mn[.@ndx],1); deletearray(.@opt_mx[.@ndx],1); } } if(.ex[.@result_id]){ for(.@i2=0;.@i2<getarraysize(.@r_id);.@i2++){ if(.ex[.@result_id] == .ex[.@r_id[.@i2]]){ .@reject = true; } } } if(!.@reject){ .@s1 = getarraysize(.@r_id); .@r_id[.@s1] = .@result_id; .@r_v[.@s1] = .@result_vl; }else{ .@i--; .@failsafe++; if(.@failsafe > 50){ mes "Something went wrong , The server admin need to make sure that the config is done correctly!"; end; } } } if(Zeny < .@zeny) end; if(#CASHPOINTS < .@cashpoint) end; if(getd(.CustomPointsVariable$) < .@costumpoint) end; for(.@i=0;.@i<getarraysize(.@item);.@i++){ if(countitem(.@item[.@i]) < .@amount[.@i]){ end; } } // anti-hack if (callfunc("F_IsEquipIDHack", .@eq, .@id) || callfunc("F_IsEquipCardHack", .@eq, .@c0, .@c1, .@c2, .@c3)) { // anti-hack emotion ET_FRET; mes "Item Switch detected!"; end; } Zeny -= .@zeny; #CASHPOINTS-= .@cashpoint; setd(.CustomPointsVariable$,getd(.CustomPointsVariable$) - .@costumpoint); for(.@i=0;.@i<getarraysize(.@item);.@i++){ delitem(.@item[.@i],.@amount[.@i]); } if(!.@r_id){ specialeffect2 EF_REFINEOK; mes "Look Like you didn't get any random option, your luck is really bad!"; end; } delequip(.@eq); specialeffect2 EF_REFINEOK; if(.KeepItemData) getitem3(.@id,1,1,.@r,0,.@c0,.@c1,.@c2,.@c3,.@r_id,.@r_v,.@null); else getitem3(.@id,1,1,0,0,0,0,0,0,.@r_id,.@r_v,.@null); equip(.@id); mes "Done!"; end; case 2: mes "The list of the allowed items in this npc!"; for(.@i=0;.@i<getarraysize(.item_list);.@i++){ mes "<ITEM>" + getitemname(.item_list[.@i]) + "[" + getitemslots(.item_list[.@i]) + "]<INFO>" + .item_list[.@i] + "</INFO></ITEM>"; if(.@i >= 10 && !(.@i%10)) next; } end; } end; function rnd { if(.HardBalance){ return rand(getarg(0),rand(getarg(0)+1,getarg(1))); } return rand(getarg(0),getarg(1)); } function AddGroup { .@id = getarg(0); for(.@i=1;.@i<getargcount();.@i++){ .it[getarg(.@i)] = .@id; .item_list[getarraysize(.item_list)] = getarg(.@i); } return; } function AddGroupOption { .@id = getarg(0); .g_reroll[.@id] = getarg(1); .g_reuse[.@id] = getarg(2); return; } function AddGroupCost { .@id = getarg(0); .nz[.@id] = getarg(1); .nk[.@id] = getarg(2); .nc[.@id] = getarg(3); for(.@i=4;.@i<getargcount();.@i+=2){ .@s = getarraysize(getd(".ni_" + .@id)); setd(".ni_" + .@id + "[" + .@s + "]",getarg(.@i)); setd(".na_" + .@id + "[" + .@s + "]",getarg(.@i+1)); } return; } function AddGroupReRollCost { .@id = getarg(0); .rz[.@id] = getarg(1); .rk[.@id] = getarg(2); .rc[.@id] = getarg(3); for(.@i=4;.@i<getargcount();.@i+=2){ .@s = getarraysize(getd(".ri_" + .@id)); setd(".ri_" + .@id + "[" + .@s + "]",getarg(.@i)); setd(".ra_" + .@id + "[" + .@s + "]",getarg(.@i+1)); } return; } function AddGroupChance { .@id = getarg(0); .s_1[.@id] = getarg(1); .s_2[.@id] = getarg(2); .s_3[.@id] = getarg(3); .s_4[.@id] = getarg(4); .s_5[.@id] = getarg(5); return; } function AddOpt { .@id = getarg(0); .@loc = getarg(1); .@s = getarraysize(getd(".ro_id_" + .@id + "_" + .@loc)); setd(".ro_id_" + .@id + "_" + .@loc + "[" + .@s + "]",getarg(2)); setd(".ro_mn_" + .@id + "_" + .@loc + "[" + .@s + "]",getarg(3)); setd(".ro_mx_" + .@id + "_" + .@loc + "[" + .@s + "]",getarg(4)); return; } function AddExclusiveOpt { .@s1 = getarraysize(.exv); .exv[.@s1] = true; for(.@i=0;.@i<getargcount();.@i++){ .ex[getarg(.@i)] = .@s1; } return; } OnInit: .exv = true;//DO NOT REMOVE THIS. .KeepItemData = true;//if this is 'false , the player will loss the refine+cards from the item when he use this npc. .CustomPointsVariable$ = "#COSTUMPOINTS";//The variable name of the costum points. .CustomPointsName$ = "Server RO Points";//The name of the costum points, this what the player will see. .HardBalance = true;//if this is true , it would be much harder to get high value in the random option. //AddGroup(<Group ID>,<ItemID>,<ItemID>,<ItemID>,<ItemID>,<ItemID>); /* AddGroup Doc <Group ID> = a number between 1 and MAX_INT64 DO NOT REUSE THE GROUP ID IN THE SAME FILE CONFIG! DO NOT REUSE THE SAME ITEM ID IN DIFFERENT GROUP! will create a group id you can add as many as you want items inside a group. */ //AddGroupOption(<Group ID>,<Allow ReRoll?true:false>,<Allow reuse already gotten option?true:false>,<Zeny Cost>,<CashPoint Cost>,<Custom Points Cost>,<Item1 ID Cost>,<Item1 Amount Cost>,<Item2 ID Cost>,<Item2 Amount Cost>,<....ETC>); /* AddGroupOption Doc <Group ID> = A group id that is already created in AddGroup()!. <Allow ReRoll?true:false> = allow reroll an item with random option or not <Allow reuse already gotten option?true:false> = for exammple if you have str in the options and the player gor it , can he get it again in another slot? */ //AddGroupCost(<Group ID>,<Zeny Cost>,<CashPoint Cost>,<Custom Points Cost>,<Item1 ID Cost>,<Item1 Amount Cost>,<Item2 ID Cost>,<Item2 Amount Cost>,<....ETC>); /* AddGroupCost Doc <Group ID> = A group id that is already created in AddGroup()!. <Zeny Cost> = the zeny cost (can be 0) <CashPoint Cost> = the cashpoints cost (can be 0) <Custom Points Cost> = if you are using costum points in the script , check out .CustomPointsVariable$ and .CustomPointsName$ at the start of the script (can be 0) <Item1 ID Cost> = the item cost <Item1 Amount Cost> = the item amount cost You can use as many item,amount cost at the end of the function. */ //AddGroupReRollCost(<Group ID>,<Zeny Cost>,<CashPoint Cost>,<Custom Points Cost>,<Item1 ID Cost>,<Item1 Amount Cost>,<Item2 ID Cost>,<Item2 Amount Cost>,<....ETC>); /* AddGroupReRollCost Doc <Group ID> = A group id that is already created in AddGroup()!. <Zeny Cost> = the zeny cost (can be 0) <CashPoint Cost> = the cashpoints cost (can be 0) <Custom Points Cost> = if you are using costum points in the script , check out .CustomPointsVariable$ and .CustomPointsName$ at the start of the script (can be 0) <Item1 ID Cost> = the item cost <Item1 Amount Cost> = the item amount cost You can use as many item,amount cost at the end of the function. */ //AddGroupChance(<Group ID>,<1st Option Chance>,<2nd Option Chance>,<3rd Option Chance>,<4th Option Chance>,<5th Option Chance>); /* AddGroupChance Doc <Group ID> = A group id that is already created in AddGroup()!. <1st Option Chance> = the Chance to get one of the random options in the slot 1 (can be 0) <2nd Option Chance> = the Chance to get one of the random options in the slot 2 (can be 0) <3rd Option Chance> = the Chance to get one of the random options in the slot 3 (can be 0) <4th Option Chance> = the Chance to get one of the random options in the slot 4 (can be 0) <5th Option Chance> = the Chance to get one of the random options in the slot 5 (can be 0) Keep inmind that if the player didn't get lucky for example at the slot 2 , all the chances after will be ignored you cannot skip a random option slot that would bug the game client. */ //AddOpt(<Group ID>,<Location>,<Random Option ID>,<Minimum Value>,<Maximum Value>); /* AddOpt Doc <Group ID> = A group id that is already created in AddGroup()!. <Location> = you can spisfiy random option to a location from 1 to 5 , but you can use 0 , if you used 0 it will apply to all locations that doesn't have spisfied random options. <Random Option ID> = random option id , you can use the id or the variable , check out the file /rathena/db/re/item_randomopt_db.yml <Minimum Value> = the minimum value <Maximum Value> = the maximum value */ //AddExclusiveOpt(<Random Option ID>,<Random Option ID>,<Random Option ID>,<Random Option ID>,<Random Option ID>); /* AddExclusiveOpt Doc this will help you to prevent a group of random opions typs in the same item in different slots for example RDMOPT_DAMAGE_PROPERTY_NOTHING_TARGET RDMOPT_DAMAGE_PROPERTY_WATER_TARGET RDMOPT_DAMAGE_PROPERTY_GROUND_TARGET RDMOPT_DAMAGE_PROPERTY_FIRE_TARGET RDMOPT_DAMAGE_PROPERTY_WIND_TARGET RDMOPT_DAMAGE_PROPERTY_POISON_TARGET RDMOPT_DAMAGE_PROPERTY_SAINT_TARGET RDMOPT_DAMAGE_PROPERTY_DARKNESS_TARGET RDMOPT_DAMAGE_PROPERTY_TELEKINESIS_TARGET RDMOPT_DAMAGE_PROPERTY_UNDEAD_TARGET if the player got 1 of them in a slot , he wont get another one to another slot */ //Example!!!> //this is just an example , this script allow you to create any random option system you want. // BAAL HELM ====================================================================== //Creating Group id 1 , with Hat items inside. AddGroup(1,50001); //Group id 1 Options AddGroupOption(1,true,false); //Group id 1 Cost AddGroupCost(1,0,0,0,70501,1,677,50); //Group id 1 ReRoll Cost AddGroupReRollCost(1,0,0,0,70501,1,677,50); //Group id 1 Chances. AddGroupChance(1,100,100,100,0,0); //Group id 1 Random Option List. location 0 mean all the slot locations AddOpt(1,1,RDMOPT_VAR_STRAMOUNT,1,5); AddOpt(1,1,RDMOPT_VAR_INTAMOUNT,1,5); AddOpt(1,1,RDMOPT_VAR_VITAMOUNT,1,5); AddOpt(1,1,RDMOPT_VAR_LUKAMOUNT,1,5); AddOpt(1,1,RDMOPT_VAR_AGIAMOUNT,1,5); AddOpt(1,1,RDMOPT_VAR_DEXAMOUNT,1,5); AddOpt(1,2,RDMOPT_VAR_MAXHPPERCENT,1,5); AddOpt(1,2,RDMOPT_VAR_MAXSPPERCENT,1,5); AddOpt(1,2,RDMOPT_VAR_ATKPERCENT,1,5); AddOpt(1,2,RDMOPT_VAR_MAGICATKPERCENT,1,5); AddOpt(1,2,RDMOPT_VAR_MDEFPOWER,1,5); AddOpt(1,2,RDMOPT_VAR_ITEMDEFPOWER,1,5); AddOpt(1,2,RDMOPT_VAR_HITSUCCESSVALUE,1,5); AddOpt(1,2,RDMOPT_VAR_CRITICALSUCCESSVALUE,1,5); AddOpt(1,3,RDMOPT_VAR_SPIRALPIERCE,8,12); AddOpt(1,3,RDMOPT_VAR_BOWLINGBASH,8,12); AddOpt(1,3,RDMOPT_VAR_SACRIFICE,8,12); AddOpt(1,3,RDMOPT_VAR_SHIELDCHAIN,8,12); AddOpt(1,3,RDMOPT_VAR_FIREBOLT,8,12); AddOpt(1,3,RDMOPT_VAR_COLDBOLT,8,12); AddOpt(1,3,RDMOPT_VAR_LIGHTNINGBOLT,8,12); AddOpt(1,3,RDMOPT_VAR_STORMGUST,8,12); AddOpt(1,3,RDMOPT_VAR_METEOR,8,12); AddOpt(1,3,RDMOPT_VAR_DOUBLE,8,12); AddOpt(1,3,RDMOPT_VAR_SHARPSHOOTING,8,12); AddOpt(1,3,RDMOPT_VAR_ARROWVULCAN,8,12); AddOpt(1,3,RDMOPT_VAR_ACIDDEMONSTRATION,8,12); AddOpt(1,3,RDMOPT_VAR_DEMONSTRATION,8,12); AddOpt(1,3,RDMOPT_VAR_CARTTERMINATION,8,12); AddOpt(1,3,RDMOPT_VAR_SONICBLOW,8,12); AddOpt(1,3,RDMOPT_VAR_BREAKER,8,12); AddOpt(1,3,RDMOPT_VAR_TURNUNDEAD,8,12); AddOpt(1,3,RDMOPT_VAR_HOLYLIGHT,8,12); AddOpt(1,3,RDMOPT_VAR_EXTREMITYFIST,8,12); AddOpt(1,3,RDMOPT_VAR_FINGEROFFENSIVE,8,12); AddOpt(1,3,RDMOPT_VAR_JUMPKICK,8,12); AddOpt(1,3,RDMOPT_VAR_SMA,8,12); AddOpt(1,3,RDMOPT_VAR_ISSEN,8,12); AddOpt(1,3,RDMOPT_VAR_HYOUSENSOU,8,12); AddOpt(1,3,RDMOPT_VAR_DESPERADO,8,12); AddOpt(1,3,RDMOPT_VAR_RAPIDSHOWER,8,12); // SKULL BEANIE HELM ====================================================================== //Creating Group id 2 , with Hat items inside. AddGroup(2,50002); //Group id 2 Options AddGroupOption(2,true,false); //Group id 2 Cost AddGroupCost(2,0,0,0,70502,1,677,50); //Group id 2 ReRoll Cost AddGroupReRollCost(2,0,0,0,70502,1,677,50); //Group id 2 Chances. AddGroupChance(2,100,100,100,0,0); //Group id 1 Random Option List. location 0 mean all the slot locations AddOpt(2,1,RDMOPT_VAR_STRAMOUNT,1,5); AddOpt(2,1,RDMOPT_VAR_INTAMOUNT,1,5); AddOpt(2,1,RDMOPT_VAR_VITAMOUNT,1,5); AddOpt(2,1,RDMOPT_VAR_LUKAMOUNT,1,5); AddOpt(2,1,RDMOPT_VAR_AGIAMOUNT,1,5); AddOpt(2,1,RDMOPT_VAR_DEXAMOUNT,1,5); AddOpt(2,2,RDMOPT_VAR_MAXHPPERCENT,1,5); AddOpt(2,2,RDMOPT_VAR_MAXSPPERCENT,1,5); AddOpt(2,2,RDMOPT_VAR_ATKPERCENT,1,5); AddOpt(2,2,RDMOPT_VAR_MAGICATKPERCENT,1,5); AddOpt(2,2,RDMOPT_VAR_MDEFPOWER,1,5); AddOpt(2,2,RDMOPT_VAR_ITEMDEFPOWER,1,5); AddOpt(2,2,RDMOPT_VAR_HITSUCCESSVALUE,1,5); AddOpt(2,2,RDMOPT_VAR_CRITICALSUCCESSVALUE,1,5); AddOpt(2,3,RDMOPT_VAR_SPIRALPIERCE,8,12); AddOpt(2,3,RDMOPT_VAR_BOWLINGBASH,8,12); AddOpt(2,3,RDMOPT_VAR_SACRIFICE,8,12); AddOpt(2,3,RDMOPT_VAR_SHIELDCHAIN,8,12); AddOpt(2,3,RDMOPT_VAR_FIREBOLT,8,12); AddOpt(2,3,RDMOPT_VAR_COLDBOLT,8,12); AddOpt(2,3,RDMOPT_VAR_LIGHTNINGBOLT,8,12); AddOpt(2,3,RDMOPT_VAR_STORMGUST,8,12); AddOpt(2,3,RDMOPT_VAR_METEOR,8,12); AddOpt(2,3,RDMOPT_VAR_DOUBLE,8,12); AddOpt(2,3,RDMOPT_VAR_SHARPSHOOTING,8,12); AddOpt(2,3,RDMOPT_VAR_ARROWVULCAN,8,12); AddOpt(2,3,RDMOPT_VAR_ACIDDEMONSTRATION,8,12); AddOpt(2,3,RDMOPT_VAR_DEMONSTRATION,8,12); AddOpt(2,3,RDMOPT_VAR_CARTTERMINATION,8,12); AddOpt(2,3,RDMOPT_VAR_SONICBLOW,8,12); AddOpt(2,3,RDMOPT_VAR_BREAKER,8,12); AddOpt(2,3,RDMOPT_VAR_TURNUNDEAD,8,12); AddOpt(2,3,RDMOPT_VAR_HOLYLIGHT,8,12); AddOpt(2,3,RDMOPT_VAR_EXTREMITYFIST,8,12); AddOpt(2,3,RDMOPT_VAR_FINGEROFFENSIVE,8,12); AddOpt(2,3,RDMOPT_VAR_JUMPKICK,8,12); AddOpt(2,3,RDMOPT_VAR_SMA,8,12); AddOpt(2,3,RDMOPT_VAR_ISSEN,8,12); AddOpt(2,3,RDMOPT_VAR_HYOUSENSOU,8,12); AddOpt(2,3,RDMOPT_VAR_DESPERADO,8,12); AddOpt(2,3,RDMOPT_VAR_RAPIDSHOWER,8,12); // DROOPING MAYA HAT ====================================================================== //Creating Group id 3 , with Hat items inside. AddGroup(3,50004); //Group id 3 Options AddGroupOption(3,true,false); //Group id 3 Cost AddGroupCost(3,0,0,0,70503,1,677,50); //Group id 3 ReRoll Cost AddGroupReRollCost(3,0,0,0,70503,1,677,50); //Group id 3 Chances. AddGroupChance(3,100,100,100,0,0); //Group id 3 Random Option List. location 0 mean all the slot locations AddOpt(3,1,RDMOPT_VAR_STRAMOUNT,1,5); AddOpt(3,1,RDMOPT_VAR_INTAMOUNT,1,5); AddOpt(3,1,RDMOPT_VAR_VITAMOUNT,1,5); AddOpt(3,1,RDMOPT_VAR_LUKAMOUNT,1,5); AddOpt(3,1,RDMOPT_VAR_AGIAMOUNT,1,5); AddOpt(3,1,RDMOPT_VAR_DEXAMOUNT,1,5); AddOpt(3,2,RDMOPT_VAR_MAXHPPERCENT,1,5); AddOpt(3,2,RDMOPT_VAR_MAXSPPERCENT,1,5); AddOpt(3,2,RDMOPT_VAR_ATKPERCENT,1,5); AddOpt(3,2,RDMOPT_VAR_MAGICATKPERCENT,1,5); AddOpt(3,2,RDMOPT_VAR_MDEFPOWER,1,5); AddOpt(3,2,RDMOPT_VAR_ITEMDEFPOWER,1,5); AddOpt(3,2,RDMOPT_VAR_HITSUCCESSVALUE,1,5); AddOpt(3,2,RDMOPT_VAR_CRITICALSUCCESSVALUE,1,5); AddOpt(3,3,RDMOPT_VAR_SPIRALPIERCE,8,12); AddOpt(3,3,RDMOPT_VAR_BOWLINGBASH,8,12); AddOpt(3,3,RDMOPT_VAR_SACRIFICE,8,12); AddOpt(3,3,RDMOPT_VAR_SHIELDCHAIN,8,12); AddOpt(3,3,RDMOPT_VAR_FIREBOLT,8,12); AddOpt(3,3,RDMOPT_VAR_COLDBOLT,8,12); AddOpt(3,3,RDMOPT_VAR_LIGHTNINGBOLT,8,12); AddOpt(3,3,RDMOPT_VAR_STORMGUST,8,12); AddOpt(3,3,RDMOPT_VAR_METEOR,8,12); AddOpt(3,3,RDMOPT_VAR_DOUBLE,8,12); AddOpt(3,3,RDMOPT_VAR_SHARPSHOOTING,8,12); AddOpt(3,3,RDMOPT_VAR_ARROWVULCAN,8,12); AddOpt(3,3,RDMOPT_VAR_ACIDDEMONSTRATION,8,12); AddOpt(3,3,RDMOPT_VAR_DEMONSTRATION,8,12); AddOpt(3,3,RDMOPT_VAR_CARTTERMINATION,8,12); AddOpt(3,3,RDMOPT_VAR_SONICBLOW,8,12); AddOpt(3,3,RDMOPT_VAR_BREAKER,8,12); AddOpt(3,3,RDMOPT_VAR_TURNUNDEAD,8,12); AddOpt(3,3,RDMOPT_VAR_HOLYLIGHT,8,12); AddOpt(3,3,RDMOPT_VAR_EXTREMITYFIST,8,12); AddOpt(3,3,RDMOPT_VAR_FINGEROFFENSIVE,8,12); AddOpt(3,3,RDMOPT_VAR_JUMPKICK,8,12); AddOpt(3,3,RDMOPT_VAR_SMA,8,12); AddOpt(3,3,RDMOPT_VAR_ISSEN,8,12); AddOpt(3,3,RDMOPT_VAR_HYOUSENSOU,8,12); AddOpt(3,3,RDMOPT_VAR_DESPERADO,8,12); AddOpt(3,3,RDMOPT_VAR_RAPIDSHOWER,8,12); // DROOPING GARM HAT ====================================================================== //Creating Group id 4 , with Hat items inside. AddGroup(4,50005); //Group id 4 Options AddGroupOption(4,true,false); //Group id 4 Cost AddGroupCost(4,0,0,0,70504,1,677,50); //Group id 4 ReRoll Cost AddGroupReRollCost(4,0,0,0,70504,1,677,50); //Group id 4 Chances. AddGroupChance(4,100,100,100,0,0); //Group id 4 Random Option List. location 0 mean all the slot locations AddOpt(4,1,RDMOPT_VAR_STRAMOUNT,1,5); AddOpt(4,1,RDMOPT_VAR_INTAMOUNT,1,5); AddOpt(4,1,RDMOPT_VAR_VITAMOUNT,1,5); AddOpt(4,1,RDMOPT_VAR_LUKAMOUNT,1,5); AddOpt(4,1,RDMOPT_VAR_AGIAMOUNT,1,5); AddOpt(4,1,RDMOPT_VAR_DEXAMOUNT,1,5); AddOpt(4,2,RDMOPT_VAR_MAXHPPERCENT,1,5); AddOpt(4,2,RDMOPT_VAR_MAXSPPERCENT,1,5); AddOpt(4,2,RDMOPT_VAR_ATKPERCENT,1,5); AddOpt(4,2,RDMOPT_VAR_MAGICATKPERCENT,1,5); AddOpt(4,2,RDMOPT_VAR_MDEFPOWER,1,5); AddOpt(4,2,RDMOPT_VAR_ITEMDEFPOWER,1,5); AddOpt(4,2,RDMOPT_VAR_HITSUCCESSVALUE,1,5); AddOpt(4,2,RDMOPT_VAR_CRITICALSUCCESSVALUE,1,5); AddOpt(4,3,RDMOPT_VAR_SPIRALPIERCE,8,12); AddOpt(4,3,RDMOPT_VAR_BOWLINGBASH,8,12); AddOpt(4,3,RDMOPT_VAR_SACRIFICE,8,12); AddOpt(4,3,RDMOPT_VAR_SHIELDCHAIN,8,12); AddOpt(4,3,RDMOPT_VAR_FIREBOLT,8,12); AddOpt(4,3,RDMOPT_VAR_COLDBOLT,8,12); AddOpt(4,3,RDMOPT_VAR_LIGHTNINGBOLT,8,12); AddOpt(4,3,RDMOPT_VAR_STORMGUST,8,12); AddOpt(4,3,RDMOPT_VAR_METEOR,8,12); AddOpt(4,3,RDMOPT_VAR_DOUBLE,8,12); AddOpt(4,3,RDMOPT_VAR_SHARPSHOOTING,8,12); AddOpt(4,3,RDMOPT_VAR_ARROWVULCAN,8,12); AddOpt(4,3,RDMOPT_VAR_ACIDDEMONSTRATION,8,12); AddOpt(4,3,RDMOPT_VAR_DEMONSTRATION,8,12); AddOpt(4,3,RDMOPT_VAR_CARTTERMINATION,8,12); AddOpt(4,3,RDMOPT_VAR_SONICBLOW,8,12); AddOpt(4,3,RDMOPT_VAR_BREAKER,8,12); AddOpt(4,3,RDMOPT_VAR_TURNUNDEAD,8,12); AddOpt(4,3,RDMOPT_VAR_HOLYLIGHT,8,12); AddOpt(4,3,RDMOPT_VAR_EXTREMITYFIST,8,12); AddOpt(4,3,RDMOPT_VAR_FINGEROFFENSIVE,8,12); AddOpt(4,3,RDMOPT_VAR_JUMPKICK,8,12); AddOpt(4,3,RDMOPT_VAR_SMA,8,12); AddOpt(4,3,RDMOPT_VAR_ISSEN,8,12); AddOpt(4,3,RDMOPT_VAR_HYOUSENSOU,8,12); AddOpt(4,3,RDMOPT_VAR_DESPERADO,8,12); AddOpt(4,3,RDMOPT_VAR_RAPIDSHOWER,8,12); // Greate E. HAT ====================================================================== //Creating Group id 5 , with Hat items inside. AddGroup(11,50047); //Group id 11 Options AddGroupOption(11,true,false); //Group id 11 Cost AddGroupCost(11,0,0,0,70511,1,677,50); //Group id 11 ReRoll Cost AddGroupReRollCost(11,0,0,0,70511,1,677,50); //Group id 11 Chances. AddGroupChance(11,100,100,100,0,0); //Group id 4 Random Option List. location 0 mean all the slot locations AddOpt(11,1,RDMOPT_VAR_STRAMOUNT,1,5); AddOpt(11,1,RDMOPT_VAR_INTAMOUNT,1,5); AddOpt(11,1,RDMOPT_VAR_VITAMOUNT,1,5); AddOpt(11,1,RDMOPT_VAR_LUKAMOUNT,1,5); AddOpt(11,1,RDMOPT_VAR_AGIAMOUNT,1,5); AddOpt(11,1,RDMOPT_VAR_DEXAMOUNT,1,5); AddOpt(11,2,RDMOPT_VAR_MAXHPPERCENT,1,5); AddOpt(11,2,RDMOPT_VAR_MAXSPPERCENT,1,5); AddOpt(11,2,RDMOPT_VAR_ATKPERCENT,1,5); AddOpt(11,2,RDMOPT_VAR_MAGICATKPERCENT,1,5); AddOpt(11,2,RDMOPT_VAR_MDEFPOWER,1,5); AddOpt(11,2,RDMOPT_VAR_ITEMDEFPOWER,1,5); AddOpt(11,2,RDMOPT_VAR_HITSUCCESSVALUE,1,5); AddOpt(11,2,RDMOPT_VAR_CRITICALSUCCESSVALUE,1,5); AddOpt(11,3,RDMOPT_VAR_SPIRALPIERCE,8,12); AddOpt(11,3,RDMOPT_VAR_BOWLINGBASH,8,12); AddOpt(11,3,RDMOPT_VAR_SACRIFICE,8,12); AddOpt(11,3,RDMOPT_VAR_SHIELDCHAIN,8,12); AddOpt(11,3,RDMOPT_VAR_FIREBOLT,8,12); AddOpt(11,3,RDMOPT_VAR_COLDBOLT,8,12); AddOpt(11,3,RDMOPT_VAR_LIGHTNINGBOLT,8,12); AddOpt(11,3,RDMOPT_VAR_STORMGUST,8,12); AddOpt(11,3,RDMOPT_VAR_METEOR,8,12); AddOpt(11,3,RDMOPT_VAR_DOUBLE,8,12); AddOpt(11,3,RDMOPT_VAR_SHARPSHOOTING,8,12); AddOpt(11,3,RDMOPT_VAR_ARROWVULCAN,8,12); AddOpt(11,3,RDMOPT_VAR_ACIDDEMONSTRATION,8,12); AddOpt(11,3,RDMOPT_VAR_DEMONSTRATION,8,12); AddOpt(11,3,RDMOPT_VAR_CARTTERMINATION,8,12); AddOpt(11,3,RDMOPT_VAR_SONICBLOW,8,12); AddOpt(11,3,RDMOPT_VAR_BREAKER,8,12); AddOpt(11,3,RDMOPT_VAR_TURNUNDEAD,8,12); AddOpt(11,3,RDMOPT_VAR_HOLYLIGHT,8,12); AddOpt(11,3,RDMOPT_VAR_EXTREMITYFIST,8,12); AddOpt(11,3,RDMOPT_VAR_FINGEROFFENSIVE,8,12); AddOpt(11,3,RDMOPT_VAR_JUMPKICK,8,12); AddOpt(11,3,RDMOPT_VAR_SMA,8,12); AddOpt(11,3,RDMOPT_VAR_ISSEN,8,12); AddOpt(11,3,RDMOPT_VAR_HYOUSENSOU,8,12); AddOpt(11,3,RDMOPT_VAR_DESPERADO,8,12); AddOpt(11,3,RDMOPT_VAR_RAPIDSHOWER,8,12); //this mean those random options cannot coexist in the same item!. AddExclusiveOpt(RDMOPT_DAMAGE_PROPERTY_NOTHING_TARGET, RDMOPT_DAMAGE_PROPERTY_WATER_TARGET, RDMOPT_DAMAGE_PROPERTY_GROUND_TARGET, RDMOPT_DAMAGE_PROPERTY_FIRE_TARGET, RDMOPT_DAMAGE_PROPERTY_WIND_TARGET, RDMOPT_DAMAGE_PROPERTY_POISON_TARGET, RDMOPT_DAMAGE_PROPERTY_SAINT_TARGET, RDMOPT_DAMAGE_PROPERTY_DARKNESS_TARGET, RDMOPT_DAMAGE_PROPERTY_TELEKINESIS_TARGET, RDMOPT_DAMAGE_PROPERTY_UNDEAD_TARGET); end; } Hello @sader1992 is it possible to make in 1 group with different cost per item instead i'm making lots of groups? Thanksss
  2. //===== rAthena Script ======================================= //= saders All in one Random Option Script //= Free Script!!!! //===== By: ================================================== //= sader1992 //= https://sader1992.com/ //= https://rathena.org/board/profile/30766-sader1992/ //= https://sader1992.com/?page=item&item=54 //= For more , check out here > //= https://sader1992.com/?page=ra_services //= https://sader1992.com/?page=store //= https://rathena.org/board/profile/30766-sader1992/content/?type=downloads_file //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== //= rAthena Project //https://rathena.org/board/files/file/4309-all-in-one-random-options-script/ //https://github.com/sader1992/sader_scripts //===== Update Log: ========================================= //= Version 1.0 Creating the script. //===== Description: ========================================= //= This is a Highly Custumizable random option script //= you can reuse the script by just creating a new file with different setting!. //= read and understand the settings. //============================================================ payon_in01,57,67,5 script Random Option 10434,{ disable_items; function rnd; switch(select("Insert Random Options:Allowed Items List")){ case 1: mes "You must equip the item to appear here!"; for(.@i=0;.@i<EQI_MAX;.@i++){ if(getequipisequiped(.@i)) { .@m1$ += (inarray(.item_list,getequipid(.@i)) != -1?"^11AD09":"^F73831") + F_getpositionname(.@i) + "-[" + getequipname(.@i) + "]^000000"; .@exist = true; } .@m1$ += ":"; } if(!.@exist){ mes "You have to equip the item you want to insert the random options into!."; end; } .@eq = select(.@m1$) -1; clear; .@id = getequipid(.@eq); if(inarray(.item_list,.@id) == -1){ mes "Sorry , I cannot deal with this item!"; end; } .@gid = .it[.@id]; if(!.@gid){ mes "Something went wrong!"; end; } if(!getequiprandomoption(.@eq,0,ROA_ID)){ .@zeny = .nz[.@gid]; .@cashpoint = .nk[.@gid]; .@costumpoint = .nc[.@gid]; copyarray(.@item,getd(".ni_" + .@gid),getarraysize(getd(".ni_" + .@gid))); copyarray(.@amount,getd(".na_" + .@gid),getarraysize(getd(".na_" + .@gid))); }else{ if(!.g_reroll[.@gid]){ mes "Sorry , i cannot reroll the random options in this item!"; end; } .@zeny = .rz[.@gid]; .@cashpoint = .rk[.@gid]; .@costumpoint = .rc[.@gid]; copyarray(.@item,getd(".ri_" + .@gid),getarraysize(getd(".ri_" + .@gid))); copyarray(.@amount,getd(".ra_" + .@gid),getarraysize(getd(".ra_" + .@gid))); } mes "Selected Item [" + getequipname(.@eq) + "]"; mes "==== Cost ===="; if(.@zeny) mes "Zeny: " + .@zeny; if(.@cashpoint) mes "CashPoint: " + .@cashpoint; if(.@costumpoint) mes .CustomPointsName$ + ": " + .@costumpoint; for(.@i=0;.@i<getarraysize(.@item);.@i++){ mes "(" + .@amount[.@i] + "pcs.) " + getitemname(.@item[.@i]) + " (" + .@item[.@i] + ")"; } if(!.KeepItemData){ mes "^E01E00You will loss all the refine and cards in the item if you continue.^000000"; } mes "Would you like to continue?"; if(select("Yes:No") == 2){ clear; mes "Ok, see you next time!"; end; } clear; if(Zeny < .@zeny){ mes "You don't have " + .@zeny + " Zeny"; .@close = true; } if(#CASHPOINTS < .@cashpoint){ mes "You don't have " + .@cashpoint + " CashPoints"; .@close = true; } if(getd(.CustomPointsVariable$) < .@costumpoint){ mes "You don't have " + .@costumpoint + " " + .CustomPointsName$; .@close = true; } for(.@i=0;.@i<getarraysize(.@item);.@i++){ if(countitem(.@item[.@i]) < .@amount[.@i]){ mes "You don't have (" + .@amount[.@i] + ") " + getitemname(.@item[.@i]); .@close = true; } } if(.@close) end; .@r = getequiprefinerycnt(.@eq); for(.@i=0;.@i<4;.@i++){ if(getequipcardid(.@eq,.@i)){ setd ".@c" + .@i,getequipcardid(.@eq,.@i); .@re[getarraysize(.@re)] = true; } } copyarray(.@opt_id,getd(".ro_id_" + .@gid + "_0"),getarraysize(getd(".ro_id_" + .@gid + "_0"))); copyarray(.@opt_mn,getd(".ro_mn_" + .@gid + "_0"),getarraysize(getd(".ro_mn_" + .@gid + "_0"))); copyarray(.@opt_mx,getd(".ro_mx_" + .@gid + "_0"),getarraysize(getd(".ro_mx_" + .@gid + "_0"))); for(.@i=1;.@i<6;.@i++){ copyarray(getd(".@opt_id" + .@i),getd(".ro_id_" + .@gid + "_" + .@i),getarraysize(getd(".ro_id_" + .@gid + "_" + .@i))); copyarray(getd(".@opt_mn" + .@i),getd(".ro_mn_" + .@gid + "_" + .@i),getarraysize(getd(".ro_mn_" + .@gid + "_" + .@i))); copyarray(getd(".@opt_mx" + .@i),getd(".ro_mx_" + .@gid + "_" + .@i),getarraysize(getd(".ro_mx_" + .@gid + "_" + .@i))); } for(.@i=1;.@i<6;.@i++){ if(rand(100) > getd(".s_" + .@i + "[" + .@gid + "]")) break; if(getd(".ro_id_" + .@gid + "_" + .@i)){ if(!getarraysize(getd(".@opt_id" + .@i))) break; .@ndx = rand(getarraysize(getd(".@opt_id" + .@i))); .@result_id = getd(".@opt_id" + .@i + "[" + .@ndx + "]"); .@result_vl = rnd(getd(".@opt_mn" + .@i + "[" + .@ndx + "]"),getd(".@opt_mx" + .@i + "[" + .@ndx + "]")); deletearray(getd(".@opt_id" + .@i + "[" + .@ndx + "]"),1); deletearray(getd(".@opt_mn" + .@i + "[" + .@ndx + "]"),1); deletearray(getd(".@opt_mx" + .@i + "[" + .@ndx + "]"),1); }else{ if(!.@opt_id) break; .@ndx = rand(getarraysize(.@opt_id)); .@result_id = .@opt_id[.@ndx]; .@result_vl = rnd(.@opt_mn[.@ndx],.@opt_mx[.@ndx]); if(!.g_reuse[.@gid]){ deletearray(.@opt_id[.@ndx],1); deletearray(.@opt_mn[.@ndx],1); deletearray(.@opt_mx[.@ndx],1); } } if(.ex[.@result_id]){ for(.@i2=0;.@i2<getarraysize(.@r_id);.@i2++){ if(.ex[.@result_id] == .ex[.@r_id[.@i2]]){ .@reject = true; } } } if(!.@reject){ .@s1 = getarraysize(.@r_id); .@r_id[.@s1] = .@result_id; .@r_v[.@s1] = .@result_vl; }else{ .@i--; .@failsafe++; if(.@failsafe > 50){ mes "Something went wrong , The server admin need to make sure that the config is done correctly!"; end; } } } if(Zeny < .@zeny) end; if(#CASHPOINTS < .@cashpoint) end; if(getd(.CustomPointsVariable$) < .@costumpoint) end; for(.@i=0;.@i<getarraysize(.@item);.@i++){ if(countitem(.@item[.@i]) < .@amount[.@i]){ end; } } // anti-hack if (callfunc("F_IsEquipIDHack", .@eq, .@id) || callfunc("F_IsEquipCardHack", .@eq, .@c0, .@c1, .@c2, .@c3)) { // anti-hack emotion ET_FRET; mes "Item Switch detected!"; end; } Zeny -= .@zeny; #CASHPOINTS-= .@cashpoint; setd(.CustomPointsVariable$,getd(.CustomPointsVariable$) - .@costumpoint); for(.@i=0;.@i<getarraysize(.@item);.@i++){ delitem(.@item[.@i],.@amount[.@i]); } if(!.@r_id){ specialeffect2 EF_REFINEOK; mes "Look Like you didn't get any random option, your luck is really bad!"; end; } delequip(.@eq); specialeffect2 EF_REFINEOK; if(.KeepItemData) getitem3(.@id,1,1,.@r,0,.@c0,.@c1,.@c2,.@c3,.@r_id,.@r_v,.@null); else getitem3(.@id,1,1,0,0,0,0,0,0,.@r_id,.@r_v,.@null); equip(.@id); mes "Done!"; end; case 2: mes "The list of the allowed items in this npc!"; for(.@i=0;.@i<getarraysize(.item_list);.@i++){ mes "<ITEM>" + getitemname(.item_list[.@i]) + "[" + getitemslots(.item_list[.@i]) + "]<INFO>" + .item_list[.@i] + "</INFO></ITEM>"; if(.@i >= 10 && !(.@i%10)) next; } end; } end; function rnd { if(.HardBalance){ return rand(getarg(0),rand(getarg(0)+1,getarg(1))); } return rand(getarg(0),getarg(1)); } function AddGroup { .@id = getarg(0); for(.@i=1;.@i<getargcount();.@i++){ .it[getarg(.@i)] = .@id; .item_list[getarraysize(.item_list)] = getarg(.@i); } return; } function AddGroupOption { .@id = getarg(0); .g_reroll[.@id] = getarg(1); .g_reuse[.@id] = getarg(2); return; } function AddGroupCost { .@id = getarg(0); .nz[.@id] = getarg(1); .nk[.@id] = getarg(2); .nc[.@id] = getarg(3); for(.@i=4;.@i<getargcount();.@i+=2){ .@s = getarraysize(getd(".ni_" + .@id)); setd(".ni_" + .@id + "[" + .@s + "]",getarg(.@i)); setd(".na_" + .@id + "[" + .@s + "]",getarg(.@i+1)); } return; } function AddGroupReRollCost { .@id = getarg(0); .rz[.@id] = getarg(1); .rk[.@id] = getarg(2); .rc[.@id] = getarg(3); for(.@i=4;.@i<getargcount();.@i+=2){ .@s = getarraysize(getd(".ri_" + .@id)); setd(".ri_" + .@id + "[" + .@s + "]",getarg(.@i)); setd(".ra_" + .@id + "[" + .@s + "]",getarg(.@i+1)); } return; } function AddGroupChance { .@id = getarg(0); .s_1[.@id] = getarg(1); .s_2[.@id] = getarg(2); .s_3[.@id] = getarg(3); .s_4[.@id] = getarg(4); .s_5[.@id] = getarg(5); return; } function AddOpt { .@id = getarg(0); .@loc = getarg(1); .@s = getarraysize(getd(".ro_id_" + .@id + "_" + .@loc)); setd(".ro_id_" + .@id + "_" + .@loc + "[" + .@s + "]",getarg(2)); setd(".ro_mn_" + .@id + "_" + .@loc + "[" + .@s + "]",getarg(3)); setd(".ro_mx_" + .@id + "_" + .@loc + "[" + .@s + "]",getarg(4)); return; } function AddExclusiveOpt { .@s1 = getarraysize(.exv); .exv[.@s1] = true; for(.@i=0;.@i<getargcount();.@i++){ .ex[getarg(.@i)] = .@s1; } return; } OnInit: .exv = true;//DO NOT REMOVE THIS. .KeepItemData = true;//if this is 'false , the player will loss the refine+cards from the item when he use this npc. .CustomPointsVariable$ = "#COSTUMPOINTS";//The variable name of the costum points. .CustomPointsName$ = "Server RO Points";//The name of the costum points, this what the player will see. .HardBalance = true;//if this is true , it would be much harder to get high value in the random option. //AddGroup(<Group ID>,<ItemID>,<ItemID>,<ItemID>,<ItemID>,<ItemID>); /* AddGroup Doc <Group ID> = a number between 1 and MAX_INT64 DO NOT REUSE THE GROUP ID IN THE SAME FILE CONFIG! DO NOT REUSE THE SAME ITEM ID IN DIFFERENT GROUP! will create a group id you can add as many as you want items inside a group. */ //AddGroupOption(<Group ID>,<Allow ReRoll?true:false>,<Allow reuse already gotten option?true:false>,<Zeny Cost>,<CashPoint Cost>,<Custom Points Cost>,<Item1 ID Cost>,<Item1 Amount Cost>,<Item2 ID Cost>,<Item2 Amount Cost>,<....ETC>); /* AddGroupOption Doc <Group ID> = A group id that is already created in AddGroup()!. <Allow ReRoll?true:false> = allow reroll an item with random option or not <Allow reuse already gotten option?true:false> = for exammple if you have str in the options and the player gor it , can he get it again in another slot? */ //AddGroupCost(<Group ID>,<Zeny Cost>,<CashPoint Cost>,<Custom Points Cost>,<Item1 ID Cost>,<Item1 Amount Cost>,<Item2 ID Cost>,<Item2 Amount Cost>,<....ETC>); /* AddGroupCost Doc <Group ID> = A group id that is already created in AddGroup()!. <Zeny Cost> = the zeny cost (can be 0) <CashPoint Cost> = the cashpoints cost (can be 0) <Custom Points Cost> = if you are using costum points in the script , check out .CustomPointsVariable$ and .CustomPointsName$ at the start of the script (can be 0) <Item1 ID Cost> = the item cost <Item1 Amount Cost> = the item amount cost You can use as many item,amount cost at the end of the function. */ //AddGroupReRollCost(<Group ID>,<Zeny Cost>,<CashPoint Cost>,<Custom Points Cost>,<Item1 ID Cost>,<Item1 Amount Cost>,<Item2 ID Cost>,<Item2 Amount Cost>,<....ETC>); /* AddGroupReRollCost Doc <Group ID> = A group id that is already created in AddGroup()!. <Zeny Cost> = the zeny cost (can be 0) <CashPoint Cost> = the cashpoints cost (can be 0) <Custom Points Cost> = if you are using costum points in the script , check out .CustomPointsVariable$ and .CustomPointsName$ at the start of the script (can be 0) <Item1 ID Cost> = the item cost <Item1 Amount Cost> = the item amount cost You can use as many item,amount cost at the end of the function. */ //AddGroupChance(<Group ID>,<1st Option Chance>,<2nd Option Chance>,<3rd Option Chance>,<4th Option Chance>,<5th Option Chance>); /* AddGroupChance Doc <Group ID> = A group id that is already created in AddGroup()!. <1st Option Chance> = the Chance to get one of the random options in the slot 1 (can be 0) <2nd Option Chance> = the Chance to get one of the random options in the slot 2 (can be 0) <3rd Option Chance> = the Chance to get one of the random options in the slot 3 (can be 0) <4th Option Chance> = the Chance to get one of the random options in the slot 4 (can be 0) <5th Option Chance> = the Chance to get one of the random options in the slot 5 (can be 0) Keep inmind that if the player didn't get lucky for example at the slot 2 , all the chances after will be ignored you cannot skip a random option slot that would bug the game client. */ //AddOpt(<Group ID>,<Location>,<Random Option ID>,<Minimum Value>,<Maximum Value>); /* AddOpt Doc <Group ID> = A group id that is already created in AddGroup()!. <Location> = you can spisfiy random option to a location from 1 to 5 , but you can use 0 , if you used 0 it will apply to all locations that doesn't have spisfied random options. <Random Option ID> = random option id , you can use the id or the variable , check out the file /rathena/db/re/item_randomopt_db.yml <Minimum Value> = the minimum value <Maximum Value> = the maximum value */ //AddExclusiveOpt(<Random Option ID>,<Random Option ID>,<Random Option ID>,<Random Option ID>,<Random Option ID>); /* AddExclusiveOpt Doc this will help you to prevent a group of random opions typs in the same item in different slots for example RDMOPT_DAMAGE_PROPERTY_NOTHING_TARGET RDMOPT_DAMAGE_PROPERTY_WATER_TARGET RDMOPT_DAMAGE_PROPERTY_GROUND_TARGET RDMOPT_DAMAGE_PROPERTY_FIRE_TARGET RDMOPT_DAMAGE_PROPERTY_WIND_TARGET RDMOPT_DAMAGE_PROPERTY_POISON_TARGET RDMOPT_DAMAGE_PROPERTY_SAINT_TARGET RDMOPT_DAMAGE_PROPERTY_DARKNESS_TARGET RDMOPT_DAMAGE_PROPERTY_TELEKINESIS_TARGET RDMOPT_DAMAGE_PROPERTY_UNDEAD_TARGET if the player got 1 of them in a slot , he wont get another one to another slot */ //Example!!!> //this is just an example , this script allow you to create any random option system you want. //Creating Group id 1 , with Hat items inside. AddGroup(1,50001,50002,50004,50005,50006,50007,50008,50009,50010,50011,50014,50015); //Group id 1 Options AddGroupOption(1,true,false); //Group id 1 Cost AddGroupCost(1,0,0,0,677,50); //Group id 1 ReRoll Cost AddGroupReRollCost(1,0,0,0,677,50); //Group id 1 Chances. AddGroupChance(1,100,100,0,0,0); //Group id 1 Random Option List. location 0 mean all the slot locations AddOpt(1,1,RDMOPT_VAR_STRAMOUNT,5,10); AddOpt(1,1,RDMOPT_VAR_INTAMOUNT,5,10); AddOpt(1,1,RDMOPT_VAR_VITAMOUNT,5,10); AddOpt(1,1,RDMOPT_VAR_LUKAMOUNT,5,10); AddOpt(1,1,RDMOPT_VAR_AGIAMOUNT,5,10); AddOpt(1,1,RDMOPT_VAR_DEXAMOUNT,5,10); AddOpt(1,2,RDMOPT_VAR_MAXHPPERCENT,5,10); AddOpt(1,2,RDMOPT_VAR_MAXSPPERCENT,5,10); AddOpt(1,2,RDMOPT_VAR_ATKPERCENT,5,10); AddOpt(1,2,RDMOPT_VAR_MAGICATKPERCENT,5,10); AddOpt(1,2,RDMOPT_VAR_MDEFPOWER,5,10); AddOpt(1,2,RDMOPT_VAR_ITEMDEFPOWER,5,10); AddOpt(1,2,RDMOPT_VAR_HITSUCCESSVALUE,5,10); AddOpt(1,2,RDMOPT_VAR_CRITICALSUCCESSVALUE,5,10); //those enchantment you wont get unless in slot 5 AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_NOTHING_TARGET,1,100); AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_WATER_TARGET,1,100); AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_GROUND_TARGET,1,100); AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_FIRE_TARGET,1,100); AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_WIND_TARGET,1,100); AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_POISON_TARGET,1,100); AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_SAINT_TARGET,1,100); AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_DARKNESS_TARGET,1,100); AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_TELEKINESIS_TARGET,1,100); AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_UNDEAD_TARGET,1,100); //this mean those random options cannot coexist in the same item!. AddExclusiveOpt(RDMOPT_DAMAGE_PROPERTY_NOTHING_TARGET, RDMOPT_DAMAGE_PROPERTY_WATER_TARGET, RDMOPT_DAMAGE_PROPERTY_GROUND_TARGET, RDMOPT_DAMAGE_PROPERTY_FIRE_TARGET, RDMOPT_DAMAGE_PROPERTY_WIND_TARGET, RDMOPT_DAMAGE_PROPERTY_POISON_TARGET, RDMOPT_DAMAGE_PROPERTY_SAINT_TARGET, RDMOPT_DAMAGE_PROPERTY_DARKNESS_TARGET, RDMOPT_DAMAGE_PROPERTY_TELEKINESIS_TARGET, RDMOPT_DAMAGE_PROPERTY_UNDEAD_TARGET); end; } Can someone help me to add a requirment that the same item. Example to add Option in item 30002 you need another 30002 to proceed adding option same item requirment is need specially the item requirments from the script it self right now! TIA ♥
  3. is there a way i can make normal mobs x2 stats and x5 their hp and the mvp mobs will be x10 stats and x10 hp?
  4. Damnnn it works thanks a lot man.
  5. Already done that. Just the cancel is my issue.
  6. /** * Extended Vending system [Lilith] **/ int skill_vending(struct map_session_data *sd, t_itemid nameid) { struct item_data *item; char output[1024]; nullpo_ret(sd); if (!pc_can_give_items(sd) || (item = itemdb_search(nameid)) == NULL) { sd->state.prevend = 0; sd->vend_loot = 0; sd->state.workinprogress = WIP_DISABLE_NONE; clif_skill_fail(sd, MC_VENDING, USESKILL_FAIL_LEVEL, 0); } else { sd->vend_loot = nameid; sd->state.prevend = 1; clif_openvendingreq(sd, 2 + sd->vend_lvl); sprintf(output, msg_txt(sd, 1594), item->ename.c_str()); clif_messagecolor(&sd->bl, color_table[COLOR_CYAN], output, false, SELF); } return 0; } how do you guys solve this part when canceling the vending it still go for vending and the currency becomes unknown item. if (!pc_can_give_items(sd) || (item = itemdb_search(nameid)) == NULL) {
  7. Is there an update code for this? I test this on latest rA it cancels the vending when u press cancel but when u try to ok the map disconnects.
  8. Hello @sader1992 I'm using your All in one Random Option Script. I encounter an error. I think when the random goes to the minimum value of the option it will error. //===== rAthena Script ======================================= //= saders All in one Random Option Script //= Free Script!!!! //===== By: ================================================== //= sader1992 //= https://sader1992.com/ //= https://rathena.org/board/profile/30766-sader1992/ //= https://sader1992.com/?page=item&item=54 //= For more , check out here > //= https://sader1992.com/?page=ra_services //= https://sader1992.com/?page=store //= https://rathena.org/board/profile/30766-sader1992/content/?type=downloads_file //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== //= rAthena Project //https://rathena.org/board/files/file/4309-all-in-one-random-options-script/ //https://github.com/sader1992/sader_scripts //===== Update Log: ========================================= //= Version 1.0 Creating the script. //===== Description: ========================================= //= This is a Highly Custumizable random option script //= you can reuse the script by just creating a new file with different setting!. //= read and understand the settings. //============================================================ prontera,108,172,5 script Random Option 10434,{ disable_items; function rnd; switch(select("Insert Random Options:Allowed Items List")){ case 1: mes "You must equip the item to appear here!"; for(.@i=0;.@i<EQI_MAX;.@i++){ if(getequipisequiped(.@i)) { .@m1$ += (inarray(.item_list,getequipid(.@i)) != -1?"^11AD09":"^F73831") + F_getpositionname(.@i) + "-[" + getequipname(.@i) + "]^000000"; .@exist = true; } .@m1$ += ":"; } if(!.@exist){ mes "You have to equip the item you want to insert the random options into!."; end; } .@eq = select(.@m1$) -1; clear; .@id = getequipid(.@eq); if(inarray(.item_list,.@id) == -1){ mes "Sorry , I cannot deal with this item!"; end; } .@gid = .it[.@id]; if(!.@gid){ mes "Something went wrong!"; end; } if(!getequiprandomoption(.@eq,0,ROA_ID)){ .@zeny = .nz[.@gid]; .@cashpoint = .nk[.@gid]; .@costumpoint = .nc[.@gid]; copyarray(.@item,getd(".ni_" + .@gid),getarraysize(getd(".ni_" + .@gid))); copyarray(.@amount,getd(".na_" + .@gid),getarraysize(getd(".na_" + .@gid))); }else{ if(!.g_reroll[.@gid]){ mes "Sorry , i cannot reroll the random options in this item!"; end; } .@zeny = .rz[.@gid]; .@cashpoint = .rk[.@gid]; .@costumpoint = .rc[.@gid]; copyarray(.@item,getd(".ri_" + .@gid),getarraysize(getd(".ri_" + .@gid))); copyarray(.@amount,getd(".ra_" + .@gid),getarraysize(getd(".ra_" + .@gid))); } mes "Selected Item [" + getequipname(.@eq) + "]"; mes "==== Cost ===="; if(.@zeny) mes "Zeny: " + .@zeny; if(.@cashpoint) mes "CashPoint: " + .@cashpoint; if(.@costumpoint) mes .CustomPointsName$ + ": " + .@costumpoint; for(.@i=0;.@i<getarraysize(.@item);.@i++){ mes "(" + .@amount[.@i] + "pcs.) " + getitemname(.@item[.@i]) + " (" + .@item[.@i] + ")"; } if(!.KeepItemData){ mes "^E01E00You will loss all the refine and cards in the item if you continue.^000000"; } mes "Would you like to continue?"; if(select("Yes:No") == 2){ clear; mes "Ok, see you next time!"; end; } clear; if(Zeny < .@zeny){ mes "You don't have " + .@zeny + " Zeny"; .@close = true; } if(#CASHPOINTS < .@cashpoint){ mes "You don't have " + .@cashpoint + " CashPoints"; .@close = true; } if(getd(.CustomPointsVariable$) < .@costumpoint){ mes "You don't have " + .@costumpoint + " " + .CustomPointsName$; .@close = true; } for(.@i=0;.@i<getarraysize(.@item);.@i++){ if(countitem(.@item[.@i]) < .@amount[.@i]){ mes "You don't have (" + .@amount[.@i] + ") " + getitemname(.@item[.@i]); .@close = true; } } if(.@close) end; .@r = getequiprefinerycnt(.@eq); for(.@i=0;.@i<4;.@i++){ if(getequipcardid(.@eq,.@i)){ setd ".@c" + .@i,getequipcardid(.@eq,.@i); .@re[getarraysize(.@re)] = true; } } copyarray(.@opt_id,getd(".ro_id_" + .@gid + "_0"),getarraysize(getd(".ro_id_" + .@gid + "_0"))); copyarray(.@opt_mn,getd(".ro_mn_" + .@gid + "_0"),getarraysize(getd(".ro_mn_" + .@gid + "_0"))); copyarray(.@opt_mx,getd(".ro_mx_" + .@gid + "_0"),getarraysize(getd(".ro_mx_" + .@gid + "_0"))); for(.@i=1;.@i<6;.@i++){ copyarray(getd(".@opt_id" + .@i),getd(".ro_id_" + .@gid + "_" + .@i),getarraysize(getd(".ro_id_" + .@gid + "_" + .@i))); copyarray(getd(".@opt_mn" + .@i),getd(".ro_mn_" + .@gid + "_" + .@i),getarraysize(getd(".ro_mn_" + .@gid + "_" + .@i))); copyarray(getd(".@opt_mx" + .@i),getd(".ro_mx_" + .@gid + "_" + .@i),getarraysize(getd(".ro_mx_" + .@gid + "_" + .@i))); } for(.@i=1;.@i<6;.@i++){ if(rand(100) > getd(".s_" + .@i + "[" + .@gid + "]")) break; if(getd(".ro_id_" + .@gid + "_" + .@i)){ if(!getarraysize(getd(".@opt_id" + .@i))) break; .@ndx = rand(getarraysize(getd(".@opt_id" + .@i))); .@result_id = getd(".@opt_id" + .@i + "[" + .@ndx + "]"); .@result_vl = rnd(getd(".@opt_mn" + .@i + "[" + .@ndx + "]"),getd(".@opt_mx" + .@i + "[" + .@ndx + "]")); deletearray(getd(".@opt_id" + .@i + "[" + .@ndx + "]"),1); deletearray(getd(".@opt_mn" + .@i + "[" + .@ndx + "]"),1); deletearray(getd(".@opt_mx" + .@i + "[" + .@ndx + "]"),1); }else{ if(!.@opt_id) break; .@ndx = rand(getarraysize(.@opt_id)); .@result_id = .@opt_id[.@ndx]; .@result_vl = rnd(.@opt_mn[.@ndx],.@opt_mx[.@ndx]); if(!.g_reuse[.@gid]){ deletearray(.@opt_id[.@ndx],1); deletearray(.@opt_mn[.@ndx],1); deletearray(.@opt_mx[.@ndx],1); } } if(.ex[.@result_id]){ for(.@i2=0;.@i2<getarraysize(.@r_id);.@i2++){ if(.ex[.@result_id] == .ex[.@r_id[.@i2]]){ .@reject = true; } } } if(!.@reject){ .@s1 = getarraysize(.@r_id); .@r_id[.@s1] = .@result_id; .@r_v[.@s1] = .@result_vl; }else{ .@i--; .@failsafe++; if(.@failsafe > 50){ mes "Something went wrong , The server admin need to make sure that the config is done correctly!"; end; } } } if(Zeny < .@zeny) end; if(#CASHPOINTS < .@cashpoint) end; if(getd(.CustomPointsVariable$) < .@costumpoint) end; for(.@i=0;.@i<getarraysize(.@item);.@i++){ if(countitem(.@item[.@i]) < .@amount[.@i]){ end; } } // anti-hack if (callfunc("F_IsEquipIDHack", .@eq, .@id) || callfunc("F_IsEquipCardHack", .@eq, .@c0, .@c1, .@c2, .@c3)) { // anti-hack emotion ET_FRET; mes "Item Switch detected!"; end; } Zeny -= .@zeny; #CASHPOINTS-= .@cashpoint; setd(.CustomPointsVariable$,getd(.CustomPointsVariable$) - .@costumpoint); for(.@i=0;.@i<getarraysize(.@item);.@i++){ delitem(.@item[.@i],.@amount[.@i]); } if(!.@r_id){ specialeffect2 EF_REFINEOK; mes "Look Like you didn't get any random option, your luck is really bad!"; end; } delequip(.@eq); specialeffect2 EF_REFINEOK; if(.KeepItemData) getitem3(.@id,1,1,.@r,0,.@c0,.@c1,.@c2,.@c3,.@r_id,.@r_v,.@null); else getitem3(.@id,1,1,0,0,0,0,0,0,.@r_id,.@r_v,.@null); equip(.@id); mes "Done!"; end; case 2: mes "The list of the allowed items in this npc!"; for(.@i=0;.@i<getarraysize(.item_list);.@i++){ mes "<ITEM>" + getitemname(.item_list[.@i]) + "[" + getitemslots(.item_list[.@i]) + "]<INFO>" + .item_list[.@i] + "</INFO></ITEM>"; if(.@i >= 10 && !(.@i%10)) next; } end; } end; function rnd { if(.HardBalance){ return rand(getarg(0),rand(getarg(0),getarg(1))); } return rand(getarg(0),getarg(1)); } function AddGroup { .@id = getarg(0); for(.@i=1;.@i<getargcount();.@i++){ .it[getarg(.@i)] = .@id; .item_list[getarraysize(.item_list)] = getarg(.@i); } return; } function AddGroupOption { .@id = getarg(0); .g_reroll[.@id] = getarg(1); .g_reuse[.@id] = getarg(2); return; } function AddGroupCost { .@id = getarg(0); .nz[.@id] = getarg(1); .nk[.@id] = getarg(2); .nc[.@id] = getarg(3); for(.@i=4;.@i<getargcount();.@i+=2){ .@s = getarraysize(getd(".ni_" + .@id)); setd(".ni_" + .@id + "[" + .@s + "]",getarg(.@i)); setd(".na_" + .@id + "[" + .@s + "]",getarg(.@i+1)); } return; } function AddGroupReRollCost { .@id = getarg(0); .rz[.@id] = getarg(1); .rk[.@id] = getarg(2); .rc[.@id] = getarg(3); for(.@i=4;.@i<getargcount();.@i+=2){ .@s = getarraysize(getd(".ri_" + .@id)); setd(".ri_" + .@id + "[" + .@s + "]",getarg(.@i)); setd(".ra_" + .@id + "[" + .@s + "]",getarg(.@i+1)); } return; } function AddGroupChance { .@id = getarg(0); .s_1[.@id] = getarg(1); .s_2[.@id] = getarg(2); .s_3[.@id] = getarg(3); .s_4[.@id] = getarg(4); .s_5[.@id] = getarg(5); return; } function AddOpt { .@id = getarg(0); .@loc = getarg(1); .@s = getarraysize(getd(".ro_id_" + .@id + "_" + .@loc)); setd(".ro_id_" + .@id + "_" + .@loc + "[" + .@s + "]",getarg(2)); setd(".ro_mn_" + .@id + "_" + .@loc + "[" + .@s + "]",getarg(3)); setd(".ro_mx_" + .@id + "_" + .@loc + "[" + .@s + "]",getarg(4)); return; } function AddExclusiveOpt { .@s1 = getarraysize(.exv); .exv[.@s1] = true; for(.@i=0;.@i<getargcount();.@i++){ .ex[getarg(.@i)] = .@s1; } return; } OnInit: .exv = true;//DO NOT REMOVE THIS. .KeepItemData = true;//if this is 'false , the player will loss the refine+cards from the item when he use this npc. .CustomPointsVariable$ = "#COSTUMPOINTS";//The variable name of the costum points. .CustomPointsName$ = "Server RO Points";//The name of the costum points, this what the player will see. .HardBalance = true;//if this is true , it would be much harder to get high value in the random option. //AddGroup(<Group ID>,<ItemID>,<ItemID>,<ItemID>,<ItemID>,<ItemID>); /* AddGroup Doc <Group ID> = a number between 1 and MAX_INT64 DO NOT REUSE THE GROUP ID IN THE SAME FILE CONFIG! DO NOT REUSE THE SAME ITEM ID IN DIFFERENT GROUP! will create a group id you can add as many as you want items inside a group. */ //AddGroupOption(<Group ID>,<Allow ReRoll?true:false>,<Allow reuse already gotten option?true:false>,<Zeny Cost>,<CashPoint Cost>,<Custom Points Cost>,<Item1 ID Cost>,<Item1 Amount Cost>,<Item2 ID Cost>,<Item2 Amount Cost>,<....ETC>); /* AddGroupOption Doc <Group ID> = A group id that is already created in AddGroup()!. <Allow ReRoll?true:false> = allow reroll an item with random option or not <Allow reuse already gotten option?true:false> = for exammple if you have str in the options and the player gor it , can he get it again in another slot? */ //AddGroupCost(<Group ID>,<Zeny Cost>,<CashPoint Cost>,<Custom Points Cost>,<Item1 ID Cost>,<Item1 Amount Cost>,<Item2 ID Cost>,<Item2 Amount Cost>,<....ETC>); /* AddGroupCost Doc <Group ID> = A group id that is already created in AddGroup()!. <Zeny Cost> = the zeny cost (can be 0) <CashPoint Cost> = the cashpoints cost (can be 0) <Custom Points Cost> = if you are using costum points in the script , check out .CustomPointsVariable$ and .CustomPointsName$ at the start of the script (can be 0) <Item1 ID Cost> = the item cost <Item1 Amount Cost> = the item amount cost You can use as many item,amount cost at the end of the function. */ //AddGroupReRollCost(<Group ID>,<Zeny Cost>,<CashPoint Cost>,<Custom Points Cost>,<Item1 ID Cost>,<Item1 Amount Cost>,<Item2 ID Cost>,<Item2 Amount Cost>,<....ETC>); /* AddGroupReRollCost Doc <Group ID> = A group id that is already created in AddGroup()!. <Zeny Cost> = the zeny cost (can be 0) <CashPoint Cost> = the cashpoints cost (can be 0) <Custom Points Cost> = if you are using costum points in the script , check out .CustomPointsVariable$ and .CustomPointsName$ at the start of the script (can be 0) <Item1 ID Cost> = the item cost <Item1 Amount Cost> = the item amount cost You can use as many item,amount cost at the end of the function. */ //AddGroupChance(<Group ID>,<1st Option Chance>,<2nd Option Chance>,<3rd Option Chance>,<4th Option Chance>,<5th Option Chance>); /* AddGroupChance Doc <Group ID> = A group id that is already created in AddGroup()!. <1st Option Chance> = the Chance to get one of the random options in the slot 1 (can be 0) <2nd Option Chance> = the Chance to get one of the random options in the slot 2 (can be 0) <3rd Option Chance> = the Chance to get one of the random options in the slot 3 (can be 0) <4th Option Chance> = the Chance to get one of the random options in the slot 4 (can be 0) <5th Option Chance> = the Chance to get one of the random options in the slot 5 (can be 0) Keep inmind that if the player didn't get lucky for example at the slot 2 , all the chances after will be ignored you cannot skip a random option slot that would bug the game client. */ //AddOpt(<Group ID>,<Location>,<Random Option ID>,<Minimum Value>,<Maximum Value>); /* AddOpt Doc <Group ID> = A group id that is already created in AddGroup()!. <Location> = you can spisfiy random option to a location from 1 to 5 , but you can use 0 , if you used 0 it will apply to all locations that doesn't have spisfied random options. <Random Option ID> = random option id , you can use the id or the variable , check out the file /rathena/db/re/item_randomopt_db.yml <Minimum Value> = the minimum value <Maximum Value> = the maximum value */ //AddExclusiveOpt(<Random Option ID>,<Random Option ID>,<Random Option ID>,<Random Option ID>,<Random Option ID>); /* AddExclusiveOpt Doc this will help you to prevent a group of random opions typs in the same item in different slots for example RDMOPT_DAMAGE_PROPERTY_NOTHING_TARGET RDMOPT_DAMAGE_PROPERTY_WATER_TARGET RDMOPT_DAMAGE_PROPERTY_GROUND_TARGET RDMOPT_DAMAGE_PROPERTY_FIRE_TARGET RDMOPT_DAMAGE_PROPERTY_WIND_TARGET RDMOPT_DAMAGE_PROPERTY_POISON_TARGET RDMOPT_DAMAGE_PROPERTY_SAINT_TARGET RDMOPT_DAMAGE_PROPERTY_DARKNESS_TARGET RDMOPT_DAMAGE_PROPERTY_TELEKINESIS_TARGET RDMOPT_DAMAGE_PROPERTY_UNDEAD_TARGET if the player got 1 of them in a slot , he wont get another one to another slot */ //Example!!!> //this is just an example , this script allow you to create any random option system you want. //Creating Group id 1 , with Hat items inside. AddGroup(1,50001,50002,50004,50005,50006,50007,50008,50009,50010,50011,50014,50015); //Group id 1 Options AddGroupOption(1,true,false); //Group id 1 Cost AddGroupCost(1,0,0,0,677,50); //Group id 1 ReRoll Cost AddGroupReRollCost(1,0,0,0,677,50); //Group id 1 Chances. AddGroupChance(1,100,100,0,0,0); //Group id 1 Random Option List. location 0 mean all the slot locations AddOpt(1,1,RDMOPT_VAR_STRAMOUNT,5,10); AddOpt(1,1,RDMOPT_VAR_INTAMOUNT,5,10); //AddOpt(1,0,RDMOPT_VAR_VITAMOUNT,5,10); //AddOpt(1,0,RDMOPT_VAR_LUKAMOUNT,5,10); //AddOpt(1,0,RDMOPT_VAR_AGIAMOUNT,5,10); //AddOpt(1,0,RDMOPT_VAR_DEXAMOUNT,5,10); AddOpt(1,2,RDMOPT_VAR_MAXHPPERCENT,5,10); AddOpt(1,2,RDMOPT_VAR_MAXSPPERCENT,5,10); //those enchantment you wont get unless in slot 5 AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_NOTHING_TARGET,1,100); AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_WATER_TARGET,1,100); AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_GROUND_TARGET,1,100); AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_FIRE_TARGET,1,100); AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_WIND_TARGET,1,100); AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_POISON_TARGET,1,100); AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_SAINT_TARGET,1,100); AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_DARKNESS_TARGET,1,100); AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_TELEKINESIS_TARGET,1,100); AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_UNDEAD_TARGET,1,100); //this mean those random options cannot coexist in the same item!. AddExclusiveOpt(RDMOPT_DAMAGE_PROPERTY_NOTHING_TARGET, RDMOPT_DAMAGE_PROPERTY_WATER_TARGET, RDMOPT_DAMAGE_PROPERTY_GROUND_TARGET, RDMOPT_DAMAGE_PROPERTY_FIRE_TARGET, RDMOPT_DAMAGE_PROPERTY_WIND_TARGET, RDMOPT_DAMAGE_PROPERTY_POISON_TARGET, RDMOPT_DAMAGE_PROPERTY_SAINT_TARGET, RDMOPT_DAMAGE_PROPERTY_DARKNESS_TARGET, RDMOPT_DAMAGE_PROPERTY_TELEKINESIS_TARGET, RDMOPT_DAMAGE_PROPERTY_UNDEAD_TARGET); end; }
  9. Looking for Level 999 EXP & Stats Generator, Thanksss
  10. @nobc = No Broadcast command DIsabling Broadcast such as the Dota Announce when you want to. but not affecting the GM shouts, all NPC broadcast will be disabled by the use who use @nobc Thankss ~
  11. - script Fishing Chest -1,{ set #fishc,0; //Fishing rod set .@Rod,2764; //Fishing Lure set .@Lure,2775; //Fishing Muffler set .@Muffler,2550; //Fishing Boots set .@Boots,2443; //Auto-Fish set .@Auto,1; //Auto-Fish on Fail set .@AutoFail,1; Fish: if (isequipped(.@Muffler)) && (isequipped(.@Boots)) { if( #fishc >= 30000) end; } else { if( #fishc >= 15000) end; } if (isequipped(.@Rod)) && (isequipped(.@Lure)){ specialeffect EF_BUBBLE,"Fishing Hole"; //soundeffect "fishingrod.wav",0; set #fishc,#fishc+1; set .@fcast,10; if (isequipped(.@Muffler)) && (isequipped(.@Boots)) { set .@fcast,.@fcast - 8; dispbottom "[Fishing] Casting... "+#fishc+"/30000"; } else { dispbottom "[Fishing] Casting... "+#fishc+"/15000"; } progressbar "ffffff",.@fcast; if (rand(1,20) == 2){ getitem 12103,1; //Bloody Branch specialeffect2 EF_TEMP_OK; //soundeffectall "success.wav",0,strcharinfo(3); //mapannounce strcharinfo(3),strcharinfo(0)+" has caught a Blue Fish!",bc_map,"0xff77ff"; if(.@Auto==1){ goto Fish;}else{ end;} } if (rand(1,6) == 1) ||(rand(1,6) == 3) || (rand(1,6) == 6){ setarray .@Catch[0],579,908,909,963,956,6049,918,960,910,938,624;// List of Junk/Other set .@CatchRand,.@Catch[rand(getarraysize(.@Catch))]; getitem .@CatchRand,1; } else { dispbottom "[Fishing] Nothing was caught..."; if(.@AutoFail == 1){ goto Fish;} else{ end;} } if (rand(1,100) == 3){ //setarray .@Rare[0],7179,7179,7179; //set .@RareCatch, .@Rare[rand(getarraysize(.@Rare))]; //getitem .@RareCatch,1; //Reward set #EventP,#EventP+10; message strcharinfo(0),"[Fishing]: you've gained 10 event points."; //mapannounce strcharinfo(3),strcharinfo(0)+" has caught a "+getitemname(.@RareCatch)+"!",bc_map,"0x33CC00"; } if(.@Auto == 1){ goto Fish;} else{ end;} } else { dispbottom "[Fishing] You need a Rod and Lure."; end; } } maintown,93,305,3 duplicate(Fishing Chest) Fishing Chest#1 10005 maintown,93,310,3 duplicate(Fishing Chest) Fishing Chest#2 10005 maintown,93,315,3 duplicate(Fishing Chest) Fishing Chest#3 10005 can someone add gepard check on this script that no one dual can fishing. TIA ♥
×
×
  • Create New...