Hello, I found this script from one of our contributor. However, due to the lack of my ability, I could not reproduce the script like making the NPC asking for catalyst or fee/zeny before giving ramdom opt enchantment. So would you mind helping me making one?
//===== rAthena Script =======================================
//= Vicious Mind Weapon Random Option Enchanter
//===== By ===================================================
//= llchrisll
//===== Version ==============================================
//= 1.0 - Initial Version
//===== Tested With ==========================================
//= rAthena 03/26/2018 Revision
//= GIT Hash: 333f0dddc8353663eacba0423751988c9bc38e34
//===== Description ==========================================
//= This script handles the random options for the Vicious Mind Weapons
// until rAthena changes the way the Random Option Database is handled.
//= Instead of defining every possible random option for each option slot
// this enchanter will be used.
//===== Comments =============================================
//===== Credits ==============================================
//= NovaRo for their Information regarding the possible Options.
//============================================================
prontera,158,179,4 script Disciple of Hades 101,{
mes .n$;
mes "Hey.., "+strcharinfo(0)+"!";
mes "You look strong, I can make you stronger";
mes "I am the lost gods disciples, he taught me many things.";
mes "Including art of enchanting.";
if(select("- Enchant Ancient Weapons:- Nevermind") - 1) close;
next;
mes .n$;
mes "To apply an random properity to an Ancient weapon, you need to have it equipped in your right hand.";
mes "Also be warned, that what you get and with which value is completely random!";
next;
mes .n$;
mes "First, let's see what you have equipped...:";
next;
set .@part,EQI_HAND_R; // Save equip location
mes .n$;
if(!getequipid(.@part)) {
mes "You don't have anything equipped!";
close;
}
switch(getequipid(.@part)) {
case 1268: // Wild Beast Claw
case 1236: // Sucsamad
case 1363: // Bloody Axe
case 1141: // Immaterial Sword
case 1175: // Atlas Weapon
case 1474: // Gae Bolg
case 1559: // Legacy of Dragon
case 1815: // Garm Claw
set .@Type$,"P";
break;
case 2005: // Dea Staff
case 1631: // Holy Stick
case 1541: // Nemesis
set .@Type$,"M";
break;
case 1223: // Fortune Sword
case 1420: // Long Horn
case 1722: // Ballista
case 1919: // Bass Guitar
case 13170: // Lever Action Rifle
case 1970: // Queen's Whip
set .@Type$,"R";
break;
default:
mes "I don't recognize this weapon, please be sure to equip one and come back again.";
close;
}
mes "Equipped Weapon: "+getitemname(getequipid(.@part));
set .@ropt1,getequiprandomoption(.@part,0,ROA_ID);
set .@ropt2,getequiprandomoption(.@part,1,ROA_ID);
set .@ropt3,getequiprandomoption(.@part,2,ROA_ID);
if(.@ropt1 || .@ropt2 || .@ropt2) {
mes " ";
mes "I'm sorry, but this weapon already has bonus properities applied.";
mes "Please choose a different one.";
close;
}
next;
// Randomize each Option Slot:
// Random Option 1
set .@Opt1,rand(getarraysize(getd(".RandOpt1_"+.@Type$)));
if(getd(".RandOpt1_"+.@Type$+"_MinV["+.@Opt1+"]") != getd(".RandOpt1_"+.@Type$+"_MaxV["+.@Opt1+"]"))
set .@Opt1_V,rand(getd(".RandOpt1_"+.@Type$+"_MinV["+.@Opt1+"]"),getd(".RandOpt1_"+.@Type$+"_MaxV["+.@Opt1+"]"));
else
set .@Opt1_V,getd(".RandOpt1_"+.@Type$+"_MaxV["+.@Opt1+"]");
// Random Option 2
set .@Opt2,rand(getarraysize(getd(".RandOpt2_"+.@Type$)));
if(getd(".RandOpt2_"+.@Type$+"_MinV["+.@Opt2+"]") != getd(".RandOpt2_"+.@Type$+"_MaxV["+.@Opt2+"]"))
set .@Opt2_V,rand(getd(".RandOpt2_"+.@Type$+"_MinV["+.@Opt2+"]"),getd(".RandOpt2_"+.@Type$+"_MaxV["+.@Opt2+"]"));
else
set .@Opt2_V,getd(".RandOpt2_"+.@Type$+"_MaxV["+.@Opt2+"]");
// Random Option 3
set .@Opt3,rand(getarraysize(getd(".RandOpt3_"+.@Type$)));
if(getd(".RandOpt3_"+.@Type$+"_MinV["+.@Opt3+"]") != getd(".RandOpt3_"+.@Type$+"_MaxV["+.@Opt3+"]"))
set .@Opt3_V,rand(getd(".RandOpt3_"+.@Type$+"_MinV["+.@Opt3+"]"),getd(".RandOpt3_"+.@Type$+"_MaxV["+.@Opt3+"]"));
else
set .@Opt3_V,getd(".RandOpt3_"+.@Type$+"_MaxV["+.@Opt3+"]");
// Apply options to equipped weapon
setrandomoption(.@part,0,getd(".RandOpt1_"+.@Type$+"["+.@Opt1+"]"),.@Opt1_V,0);
setrandomoption(.@part,1,getd(".RandOpt2_"+.@Type$+"["+.@Opt2+"]"),.@Opt2_V,0);
setrandomoption(.@part,2,getd(".RandOpt3_"+.@Type$+"["+.@Opt3+"]"),.@Opt3_V,0);
mes .n$;
mes "Random bonus properities have been applied on your \""+getitemname(getequipid(.@part))+"\" successfully.";
end;
OnInit:
set .n$,"[Vicious Enchanter]";
// ========= Random Option Slot 1 =========
// - Physical
setarray .RandOpt1_P[0],RDMOPT_HP_DRAIN, // HP Drain
RDMOPT_SP_DRAIN, // SP Drain
RDMOPT_VAR_HPACCELERATION, // HP Regen
RDMOPT_VAR_SPACCELERATION, // SP Regen
RDMOPT_VAR_PLUSAVOIDSUCCESSVALUE, // Perfect Dodge
RDMOPT_VAR_AVOIDSUCCESSVALUE, // Dodge
RDMOPT_DEC_SP_CONSUMPTION,// Delay SP Cons
RDMOPT_DAMAGE_PROPERTY_NOTHING_TARGET, // Damage to Neutral Element
RDMOPT_DAMAGE_PROPERTY_GROUND_TARGET, // Damage to Earth Element
RDMOPT_DAMAGE_PROPERTY_FIRE_TARGET, // Damage to Fire Element
RDMOPT_DAMAGE_PROPERTY_WATER_TARGET, // Damage to Water Element
RDMOPT_DAMAGE_PROPERTY_WIND_TARGET, // Damage to Wind Element
RDMOPT_DAMAGE_PROPERTY_POISON_TARGET, // Damage to Poison Element
RDMOPT_DAMAGE_PROPERTY_SAINT_TARGET, // Damage to Holy Element
RDMOPT_DAMAGE_PROPERTY_DARKNESS_TARGET, // Damage to Dark Element
RDMOPT_DAMAGE_PROPERTY_TELEKINESIS_TARGET, // Damage to Ghost Element
RDMOPT_DAMAGE_PROPERTY_UNDEAD_TARGET, // Damage to Undead Element
RDMOPT_HEAL_MODIFY_PERCENT, // Heal Power %
RDMOPT_WEAPON_INDESTRUCTIBLE, // Weapon Instructible
RDMOPT_DAMAGE_SIZE_PERFECT; // Size will be ignored
// ToDo: // Recover 1000 of Damage lost from size penalties
// - Magical
setarray .RandOpt1_M[0],RDMOPT_HP_DRAIN, // HP Drain
RDMOPT_SP_DRAIN, // SP Drain
RDMOPT_VAR_HPACCELERATION, // HP Regen
RDMOPT_VAR_SPACCELERATION, // SP Regen
RDMOPT_VAR_PLUSAVOIDSUCCESSVALUE, // Perfect Dodge
RDMOPT_VAR_AVOIDSUCCESSVALUE, // Dodge
RDMOPT_DEC_SP_CONSUMPTION,// Delay SP Cons
RDMOPT_MDAMAGE_PROPERTY_NOTHING_TARGET, // Damage to Neutral Element
RDMOPT_MDAMAGE_PROPERTY_GROUND_TARGET, // Damage to Earth Element
RDMOPT_MDAMAGE_PROPERTY_FIRE_TARGET, // Damage to Fire Element
RDMOPT_MDAMAGE_PROPERTY_WATER_TARGET, // Damage to Water Element
RDMOPT_MDAMAGE_PROPERTY_WIND_TARGET, // Damage to Wind Element
RDMOPT_MDAMAGE_PROPERTY_POISON_TARGET, // Damage to Poison Element
RDMOPT_MDAMAGE_PROPERTY_SAINT_TARGET, // Damage to Holy Element
RDMOPT_MDAMAGE_PROPERTY_DARKNESS_TARGET, // Damage to Dark Element
RDMOPT_MDAMAGE_PROPERTY_TELEKINESIS_TARGET, // Damage to Ghost Element
RDMOPT_MDAMAGE_PROPERTY_UNDEAD_TARGET, // Damage to Undead Element
RDMOPT_HEAL_MODIFY_PERCENT, // Heal Power %
RDMOPT_WEAPON_INDESTRUCTIBLE, // Weapon Instructible
RDMOPT_DAMAGE_SIZE_PERFECT; // Size will be ignored
// ToDo: // Recover 1000 of Damage lost from size penalties
// - Ranged
setarray .RandOpt1_R[0],RDMOPT_HP_DRAIN, // HP Drain
RDMOPT_SP_DRAIN, // SP Drain
RDMOPT_VAR_HPACCELERATION, // HP Regen
RDMOPT_VAR_SPACCELERATION, // SP Regen
RDMOPT_VAR_PLUSAVOIDSUCCESSVALUE, // Perfect Dodge
RDMOPT_VAR_AVOIDSUCCESSVALUE, // Dodge
RDMOPT_DEC_SP_CONSUMPTION,// Delay SP Cons
RDMOPT_DAMAGE_PROPERTY_NOTHING_TARGET, // Damage to Neutral Element
RDMOPT_DAMAGE_PROPERTY_GROUND_TARGET, // Damage to Earth Element
RDMOPT_DAMAGE_PROPERTY_FIRE_TARGET, // Damage to Fire Element
RDMOPT_DAMAGE_PROPERTY_WATER_TARGET, // Damage to Water Element
RDMOPT_DAMAGE_PROPERTY_WIND_TARGET, // Damage to Wind Element
RDMOPT_DAMAGE_PROPERTY_POISON_TARGET, // Damage to Poison Element
RDMOPT_DAMAGE_PROPERTY_SAINT_TARGET, // Damage to Holy Element
RDMOPT_DAMAGE_PROPERTY_DARKNESS_TARGET, // Damage to Dark Element
RDMOPT_DAMAGE_PROPERTY_TELEKINESIS_TARGET, // Damage to Ghost Element
RDMOPT_DAMAGE_PROPERTY_UNDEAD_TARGET, // Damage to Undead Element
RDMOPT_HEAL_MODIFY_PERCENT, // Heal Power %
RDMOPT_WEAPON_INDESTRUCTIBLE, // Weapon Instructible
RDMOPT_DAMAGE_SIZE_PERFECT; // Size will be ignored
// ToDo: // Recover 1000 of Damage lost from size penalties
// - Values
// Note: When MinV and MaxV are the same, rand() will not be used!
setarray .RandOpt1_P_MinV[0],1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,20,0,0;
setarray .RandOpt1_P_MaxV[0],3,3,20,20,5,5,20,20,20,20,20,20,20,20,20,20,20,20,0,0;
setarray .RandOpt1_M_MinV[0],1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,20,0,0;
setarray .RandOpt1_M_MaxV[0],3,3,20,20,5,5,20,20,20,20,20,20,20,20,20,20,20,20,0,0;
setarray .RandOpt1_R_MinV[0],1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,20,0,0;
setarray .RandOpt1_R_MaxV[0],3,3,20,20,5,5,20,20,20,20,20,20,20,20,20,20,20,20,0,0;
// ========= Random Option Slot 2 =========
// - Physical
setarray .RandOpt2_P[0],RDMOPT_RACE_DAMAGE_NOTHING, // Damage to Neutral Race
RDMOPT_RACE_DAMAGE_UNDEAD, // Damage to Undead Race
RDMOPT_RACE_DAMAGE_ANIMAL, // Damage to Animal Race
RDMOPT_RACE_DAMAGE_PLANT, // Damage to Plant Race
RDMOPT_RACE_DAMAGE_INSECT, // Damage to Insect Race
RDMOPT_RACE_DAMAGE_FISHS, // Damage to Fish Race
RDMOPT_RACE_DAMAGE_DEVIL, // Damage to Demon Race
RDMOPT_RACE_DAMAGE_HUMAN, // Damage to Human Race
RDMOPT_RACE_DAMAGE_ANGEL, // Damage to Angel Race
RDMOPT_RACE_DAMAGE_DRAGON, // Damage to Dragon Race
RDMOPT_RACE_IGNORE_DEF_PERCENT_NOTHING, // Bypass DEF of Neutral Race
RDMOPT_RACE_IGNORE_DEF_PERCENT_UNDEAD, // Bypass DEF of Undead Race
RDMOPT_RACE_IGNORE_DEF_PERCENT_ANIMAL, // Bypass DEF of Animal Race
RDMOPT_RACE_IGNORE_DEF_PERCENT_PLANT, // Bypass DEF of Plant Race
RDMOPT_RACE_IGNORE_DEF_PERCENT_INSECT, // Bypass DEF of Insect Race
RDMOPT_RACE_IGNORE_DEF_PERCENT_FISHS, // Bypass DEF of Fish Race
RDMOPT_RACE_IGNORE_DEF_PERCENT_DEVIL, // Bypass DEF of Demon Race
RDMOPT_RACE_IGNORE_DEF_PERCENT_HUMAN, // Bypass DEF of Human Race
RDMOPT_RACE_IGNORE_DEF_PERCENT_ANGEL, // Bypass DEF of Angel Race
RDMOPT_RACE_IGNORE_DEF_PERCENT_DRAGON, // Bypass DEF of Dragon Race
RDMOPT_CLASS_DAMAGE_NORMAL_TARGET, // Bypass DEF of Normal Class Enemies
RDMOPT_CLASS_DAMAGE_BOSS_TARGET; // Damage to Boss monsters
// - Magical
setarray .RandOpt2_M[0],RDMOPT_RACE_MDAMAGE_NOTHING,// Damage to Neutral Race
RDMOPT_RACE_MDAMAGE_UNDEAD, // Damage to Undead Race
RDMOPT_RACE_MDAMAGE_ANIMAL, // Damage to Animal Race
RDMOPT_RACE_MDAMAGE_PLANT, // Damage to Plant Race
RDMOPT_RACE_MDAMAGE_INSECT, // Damage to Insect Race
RDMOPT_RACE_MDAMAGE_FISHS, // Damage to Fish Race
RDMOPT_RACE_MDAMAGE_DEVIL, // Damage to Devil Race
RDMOPT_RACE_MDAMAGE_HUMAN, // Damage to Human Race
RDMOPT_RACE_MDAMAGE_ANGEL, // Damage to Angel Race
RDMOPT_RACE_MDAMAGE_DRAGON, // Damage to Dragon Race
RDMOPT_RACE_IGNORE_MDEF_PERCENT_NOTHING, // Bypass MDEF of Neutral Race
RDMOPT_RACE_IGNORE_MDEF_PERCENT_UNDEAD, // Bypass MDEF of Undead Race
RDMOPT_RACE_IGNORE_MDEF_PERCENT_ANIMAL, // Bypass MDEF of Animal Race
RDMOPT_RACE_IGNORE_MDEF_PERCENT_PLANT, // Bypass MDEF of Plant Race
RDMOPT_RACE_IGNORE_MDEF_PERCENT_INSECT, // Bypass MDEF of Insect Race
RDMOPT_RACE_IGNORE_MDEF_PERCENT_FISHS, // Bypass MDEF of Fish Race
RDMOPT_RACE_IGNORE_MDEF_PERCENT_DEVIL, // Bypass MDEF of Demon Race
RDMOPT_RACE_IGNORE_MDEF_PERCENT_HUMAN, // Bypass MDEF of Human Race
RDMOPT_RACE_IGNORE_MDEF_PERCENT_ANGEL, // Bypass MDEF of Angel Race
RDMOPT_RACE_IGNORE_MDEF_PERCENT_DRAGON, // Bypass MDEF of Dragon Race
RDMOPT_CLASS_MDAMAGE_NORMAL, // Bypass MDEF of Normal Class Enemies
RDMOPT_CLASS_MDAMAGE_BOSS; // Damage to Boss monsters
// - Ranged
setarray .RandOpt2_R[0],RDMOPT_RACE_DAMAGE_NOTHING, // Damage to Neutral Race
RDMOPT_RACE_DAMAGE_UNDEAD, // Damage to Undead Race
RDMOPT_RACE_DAMAGE_ANIMAL, // Damage to Animal Race
RDMOPT_RACE_DAMAGE_PLANT, // Damage to Plant Race
RDMOPT_RACE_DAMAGE_INSECT, // Damage to Insect Race
RDMOPT_RACE_DAMAGE_FISHS, // Damage to Fish Race
RDMOPT_RACE_DAMAGE_DEVIL, // Damage to Demon Race
RDMOPT_RACE_DAMAGE_HUMAN, // Damage to Human Race
RDMOPT_RACE_DAMAGE_ANGEL, // Damage to Angel Race
RDMOPT_RACE_DAMAGE_DRAGON, // Damage to Dragon Race
RDMOPT_RACE_IGNORE_DEF_PERCENT_NOTHING, // Bypass DEF of Neutral Race
RDMOPT_RACE_IGNORE_DEF_PERCENT_UNDEAD, // Bypass DEF of Undead Race
RDMOPT_RACE_IGNORE_DEF_PERCENT_ANIMAL, // Bypass DEF of Animal Race
RDMOPT_RACE_IGNORE_DEF_PERCENT_PLANT, // Bypass DEF of Plant Race
RDMOPT_RACE_IGNORE_DEF_PERCENT_INSECT, // Bypass DEF of Insect Race
RDMOPT_RACE_IGNORE_DEF_PERCENT_FISHS, // Bypass DEF of Fish Race
RDMOPT_RACE_IGNORE_DEF_PERCENT_DEVIL, // Bypass DEF of Demon Race
RDMOPT_RACE_IGNORE_DEF_PERCENT_HUMAN, // Bypass DEF of Human Race
RDMOPT_RACE_IGNORE_DEF_PERCENT_ANGEL, // Bypass DEF of Angel Race
RDMOPT_RACE_IGNORE_DEF_PERCENT_DRAGON, // Bypass DEF of Dragon Race
RDMOPT_CLASS_DAMAGE_NORMAL_TARGET, // Bypass DEF of Normal Class Enemies
RDMOPT_CLASS_DAMAGE_BOSS_TARGET; // Damage to Boss monsters
// - Values
// Note: When MinV and MaxV are the same, rand() will not be used!
setarray .RandOpt2_P_MinV[0],1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,16,20;
setarray .RandOpt2_P_MaxV[0],20,20,20,20,20,20,20,20,20,20,30,30,30,30,30,30,30,30,30,30,25,20;
setarray .RandOpt2_M_MinV[0],1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,16,20;
setarray .RandOpt2_M_MaxV[0],20,20,20,20,20,20,20,20,20,20,30,30,30,30,30,30,30,30,30,30,25,20;
setarray .RandOpt2_R_MinV[0],1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,16,20;
setarray .RandOpt2_R_MaxV[0],20,20,20,20,20,20,20,20,20,20,30,30,30,30,30,30,30,30,30,30,25,20;
// ========= Random Option Slot 3 =========
// - Physical
setarray .RandOpt3_P[0],RDMOPT_VAR_STRAMOUNT, // STR
RDMOPT_VAR_AGIAMOUNT, // AGI
RDMOPT_VAR_VITAMOUNT, // VIT
RDMOPT_VAR_INTAMOUNT, // INT
RDMOPT_VAR_DEXAMOUNT, // DEX
RDMOPT_VAR_LUKAMOUNT, // LUK
RDMOPT_VAR_ATTPOWER, // ATK
RDMOPT_VAR_CRITICALSUCCESSVALUE, // Crit Chance
RDMOPT_DAMAGE_CRI_TARGET, // Crit Damage %
RDMOPT_VAR_PLUSASPDPERCENT, // ASPD %
RDMOPT_DEC_SPELL_CAST_TIME, // Variable Cast Time -%
RDMOPT_DEC_SPELL_DELAY_TIME,// Cast Delay -%
RDMOPT_DEC_SP_CONSUMPTION; // Skill SP Cost -%
// - Magical
setarray .RandOpt3_M[0],RDMOPT_VAR_STRAMOUNT, // STR
RDMOPT_VAR_AGIAMOUNT, // AGI
RDMOPT_VAR_VITAMOUNT, // VIT
RDMOPT_VAR_INTAMOUNT, // INT
RDMOPT_VAR_DEXAMOUNT, // DEX
RDMOPT_VAR_LUKAMOUNT, // LUK
RDMOPT_VAR_ATTMPOWER, // MATK
RDMOPT_DEC_SPELL_CAST_TIME, // Variable Cast Time -%
RDMOPT_DEC_SPELL_DELAY_TIME,// Cast Delay -%
RDMOPT_DEC_SP_CONSUMPTION; // Skill SP Cost -%
// - Ranged
setarray .RandOpt3_R[0],RDMOPT_VAR_STRAMOUNT, // STR
RDMOPT_VAR_AGIAMOUNT, // AGI
RDMOPT_VAR_VITAMOUNT, // VIT
RDMOPT_VAR_INTAMOUNT, // INT
RDMOPT_VAR_DEXAMOUNT, // DEX
RDMOPT_VAR_LUKAMOUNT, // LUK
RDMOPT_VAR_ATTPOWER, // ATK
RDMOPT_VAR_ATTMPOWER, // MATK
RDMOPT_VAR_CRITICALSUCCESSVALUE, // Crit Chance
RDMOPT_DAMAGE_CRI_TARGET, // Crit Damage %
RDMOPT_VAR_PLUSASPDPERCENT, // ASPD %
RDMOPT_DEC_SPELL_CAST_TIME, // Variable Cast Time -%
RDMOPT_DEC_SPELL_DELAY_TIME,// Cast Delay -%
RDMOPT_DEC_SP_CONSUMPTION, // Skill SP Cost -%
RDMOPT_RANGE_ATTACK_DAMAGE_TARGET; // Ranged Damage +%
// - Values
// Note: When MinV and MaxV are the same, rand() will not be used!
setarray .RandOpt3_P_MinV[0],1,1,1,1,1,1,4,10,1,1,1,1,1;
setarray .RandOpt3_P_MaxV[0],10,10,10,10,10,10,25,19,20,5,5,5,5;
setarray .RandOpt3_M_MinV[0],1,1,1,1,1,1,4,1,1,1;
setarray .RandOpt3_M_MaxV[0],10,10,10,10,10,10,30,10,10,5;
setarray .RandOpt3_R_MinV[0],1,1,1,1,1,1,4,4,10,1,1,1,5,5,1;
setarray .RandOpt3_R_MaxV[0],10,10,10,10,10,10,25,20,19,20,5,20,20,5,8;
end;
}
Question
Rizz
Hello, I found this script from one of our contributor. However, due to the lack of my ability, I could not reproduce the script like making the NPC asking for catalyst or fee/zeny before giving ramdom opt enchantment. So would you mind helping me making one?
//===== rAthena Script ======================================= //= Vicious Mind Weapon Random Option Enchanter //===== By =================================================== //= llchrisll //===== Version ============================================== //= 1.0 - Initial Version //===== Tested With ========================================== //= rAthena 03/26/2018 Revision //= GIT Hash: 333f0dddc8353663eacba0423751988c9bc38e34 //===== Description ========================================== //= This script handles the random options for the Vicious Mind Weapons // until rAthena changes the way the Random Option Database is handled. //= Instead of defining every possible random option for each option slot // this enchanter will be used. //===== Comments ============================================= //===== Credits ============================================== //= NovaRo for their Information regarding the possible Options. //============================================================ prontera,158,179,4 script Disciple of Hades 101,{ mes .n$; mes "Hey.., "+strcharinfo(0)+"!"; mes "You look strong, I can make you stronger"; mes "I am the lost gods disciples, he taught me many things."; mes "Including art of enchanting."; if(select("- Enchant Ancient Weapons:- Nevermind") - 1) close; next; mes .n$; mes "To apply an random properity to an Ancient weapon, you need to have it equipped in your right hand."; mes "Also be warned, that what you get and with which value is completely random!"; next; mes .n$; mes "First, let's see what you have equipped...:"; next; set .@part,EQI_HAND_R; // Save equip location mes .n$; if(!getequipid(.@part)) { mes "You don't have anything equipped!"; close; } switch(getequipid(.@part)) { case 1268: // Wild Beast Claw case 1236: // Sucsamad case 1363: // Bloody Axe case 1141: // Immaterial Sword case 1175: // Atlas Weapon case 1474: // Gae Bolg case 1559: // Legacy of Dragon case 1815: // Garm Claw set .@Type$,"P"; break; case 2005: // Dea Staff case 1631: // Holy Stick case 1541: // Nemesis set .@Type$,"M"; break; case 1223: // Fortune Sword case 1420: // Long Horn case 1722: // Ballista case 1919: // Bass Guitar case 13170: // Lever Action Rifle case 1970: // Queen's Whip set .@Type$,"R"; break; default: mes "I don't recognize this weapon, please be sure to equip one and come back again."; close; } mes "Equipped Weapon: "+getitemname(getequipid(.@part)); set .@ropt1,getequiprandomoption(.@part,0,ROA_ID); set .@ropt2,getequiprandomoption(.@part,1,ROA_ID); set .@ropt3,getequiprandomoption(.@part,2,ROA_ID); if(.@ropt1 || .@ropt2 || .@ropt2) { mes " "; mes "I'm sorry, but this weapon already has bonus properities applied."; mes "Please choose a different one."; close; } next; // Randomize each Option Slot: // Random Option 1 set .@Opt1,rand(getarraysize(getd(".RandOpt1_"+.@Type$))); if(getd(".RandOpt1_"+.@Type$+"_MinV["+.@Opt1+"]") != getd(".RandOpt1_"+.@Type$+"_MaxV["+.@Opt1+"]")) set .@Opt1_V,rand(getd(".RandOpt1_"+.@Type$+"_MinV["+.@Opt1+"]"),getd(".RandOpt1_"+.@Type$+"_MaxV["+.@Opt1+"]")); else set .@Opt1_V,getd(".RandOpt1_"+.@Type$+"_MaxV["+.@Opt1+"]"); // Random Option 2 set .@Opt2,rand(getarraysize(getd(".RandOpt2_"+.@Type$))); if(getd(".RandOpt2_"+.@Type$+"_MinV["+.@Opt2+"]") != getd(".RandOpt2_"+.@Type$+"_MaxV["+.@Opt2+"]")) set .@Opt2_V,rand(getd(".RandOpt2_"+.@Type$+"_MinV["+.@Opt2+"]"),getd(".RandOpt2_"+.@Type$+"_MaxV["+.@Opt2+"]")); else set .@Opt2_V,getd(".RandOpt2_"+.@Type$+"_MaxV["+.@Opt2+"]"); // Random Option 3 set .@Opt3,rand(getarraysize(getd(".RandOpt3_"+.@Type$))); if(getd(".RandOpt3_"+.@Type$+"_MinV["+.@Opt3+"]") != getd(".RandOpt3_"+.@Type$+"_MaxV["+.@Opt3+"]")) set .@Opt3_V,rand(getd(".RandOpt3_"+.@Type$+"_MinV["+.@Opt3+"]"),getd(".RandOpt3_"+.@Type$+"_MaxV["+.@Opt3+"]")); else set .@Opt3_V,getd(".RandOpt3_"+.@Type$+"_MaxV["+.@Opt3+"]"); // Apply options to equipped weapon setrandomoption(.@part,0,getd(".RandOpt1_"+.@Type$+"["+.@Opt1+"]"),.@Opt1_V,0); setrandomoption(.@part,1,getd(".RandOpt2_"+.@Type$+"["+.@Opt2+"]"),.@Opt2_V,0); setrandomoption(.@part,2,getd(".RandOpt3_"+.@Type$+"["+.@Opt3+"]"),.@Opt3_V,0); mes .n$; mes "Random bonus properities have been applied on your \""+getitemname(getequipid(.@part))+"\" successfully."; end; OnInit: set .n$,"[Vicious Enchanter]"; // ========= Random Option Slot 1 ========= // - Physical setarray .RandOpt1_P[0],RDMOPT_HP_DRAIN, // HP Drain RDMOPT_SP_DRAIN, // SP Drain RDMOPT_VAR_HPACCELERATION, // HP Regen RDMOPT_VAR_SPACCELERATION, // SP Regen RDMOPT_VAR_PLUSAVOIDSUCCESSVALUE, // Perfect Dodge RDMOPT_VAR_AVOIDSUCCESSVALUE, // Dodge RDMOPT_DEC_SP_CONSUMPTION,// Delay SP Cons RDMOPT_DAMAGE_PROPERTY_NOTHING_TARGET, // Damage to Neutral Element RDMOPT_DAMAGE_PROPERTY_GROUND_TARGET, // Damage to Earth Element RDMOPT_DAMAGE_PROPERTY_FIRE_TARGET, // Damage to Fire Element RDMOPT_DAMAGE_PROPERTY_WATER_TARGET, // Damage to Water Element RDMOPT_DAMAGE_PROPERTY_WIND_TARGET, // Damage to Wind Element RDMOPT_DAMAGE_PROPERTY_POISON_TARGET, // Damage to Poison Element RDMOPT_DAMAGE_PROPERTY_SAINT_TARGET, // Damage to Holy Element RDMOPT_DAMAGE_PROPERTY_DARKNESS_TARGET, // Damage to Dark Element RDMOPT_DAMAGE_PROPERTY_TELEKINESIS_TARGET, // Damage to Ghost Element RDMOPT_DAMAGE_PROPERTY_UNDEAD_TARGET, // Damage to Undead Element RDMOPT_HEAL_MODIFY_PERCENT, // Heal Power % RDMOPT_WEAPON_INDESTRUCTIBLE, // Weapon Instructible RDMOPT_DAMAGE_SIZE_PERFECT; // Size will be ignored // ToDo: // Recover 1000 of Damage lost from size penalties // - Magical setarray .RandOpt1_M[0],RDMOPT_HP_DRAIN, // HP Drain RDMOPT_SP_DRAIN, // SP Drain RDMOPT_VAR_HPACCELERATION, // HP Regen RDMOPT_VAR_SPACCELERATION, // SP Regen RDMOPT_VAR_PLUSAVOIDSUCCESSVALUE, // Perfect Dodge RDMOPT_VAR_AVOIDSUCCESSVALUE, // Dodge RDMOPT_DEC_SP_CONSUMPTION,// Delay SP Cons RDMOPT_MDAMAGE_PROPERTY_NOTHING_TARGET, // Damage to Neutral Element RDMOPT_MDAMAGE_PROPERTY_GROUND_TARGET, // Damage to Earth Element RDMOPT_MDAMAGE_PROPERTY_FIRE_TARGET, // Damage to Fire Element RDMOPT_MDAMAGE_PROPERTY_WATER_TARGET, // Damage to Water Element RDMOPT_MDAMAGE_PROPERTY_WIND_TARGET, // Damage to Wind Element RDMOPT_MDAMAGE_PROPERTY_POISON_TARGET, // Damage to Poison Element RDMOPT_MDAMAGE_PROPERTY_SAINT_TARGET, // Damage to Holy Element RDMOPT_MDAMAGE_PROPERTY_DARKNESS_TARGET, // Damage to Dark Element RDMOPT_MDAMAGE_PROPERTY_TELEKINESIS_TARGET, // Damage to Ghost Element RDMOPT_MDAMAGE_PROPERTY_UNDEAD_TARGET, // Damage to Undead Element RDMOPT_HEAL_MODIFY_PERCENT, // Heal Power % RDMOPT_WEAPON_INDESTRUCTIBLE, // Weapon Instructible RDMOPT_DAMAGE_SIZE_PERFECT; // Size will be ignored // ToDo: // Recover 1000 of Damage lost from size penalties // - Ranged setarray .RandOpt1_R[0],RDMOPT_HP_DRAIN, // HP Drain RDMOPT_SP_DRAIN, // SP Drain RDMOPT_VAR_HPACCELERATION, // HP Regen RDMOPT_VAR_SPACCELERATION, // SP Regen RDMOPT_VAR_PLUSAVOIDSUCCESSVALUE, // Perfect Dodge RDMOPT_VAR_AVOIDSUCCESSVALUE, // Dodge RDMOPT_DEC_SP_CONSUMPTION,// Delay SP Cons RDMOPT_DAMAGE_PROPERTY_NOTHING_TARGET, // Damage to Neutral Element RDMOPT_DAMAGE_PROPERTY_GROUND_TARGET, // Damage to Earth Element RDMOPT_DAMAGE_PROPERTY_FIRE_TARGET, // Damage to Fire Element RDMOPT_DAMAGE_PROPERTY_WATER_TARGET, // Damage to Water Element RDMOPT_DAMAGE_PROPERTY_WIND_TARGET, // Damage to Wind Element RDMOPT_DAMAGE_PROPERTY_POISON_TARGET, // Damage to Poison Element RDMOPT_DAMAGE_PROPERTY_SAINT_TARGET, // Damage to Holy Element RDMOPT_DAMAGE_PROPERTY_DARKNESS_TARGET, // Damage to Dark Element RDMOPT_DAMAGE_PROPERTY_TELEKINESIS_TARGET, // Damage to Ghost Element RDMOPT_DAMAGE_PROPERTY_UNDEAD_TARGET, // Damage to Undead Element RDMOPT_HEAL_MODIFY_PERCENT, // Heal Power % RDMOPT_WEAPON_INDESTRUCTIBLE, // Weapon Instructible RDMOPT_DAMAGE_SIZE_PERFECT; // Size will be ignored // ToDo: // Recover 1000 of Damage lost from size penalties // - Values // Note: When MinV and MaxV are the same, rand() will not be used! setarray .RandOpt1_P_MinV[0],1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,20,0,0; setarray .RandOpt1_P_MaxV[0],3,3,20,20,5,5,20,20,20,20,20,20,20,20,20,20,20,20,0,0; setarray .RandOpt1_M_MinV[0],1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,20,0,0; setarray .RandOpt1_M_MaxV[0],3,3,20,20,5,5,20,20,20,20,20,20,20,20,20,20,20,20,0,0; setarray .RandOpt1_R_MinV[0],1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,20,0,0; setarray .RandOpt1_R_MaxV[0],3,3,20,20,5,5,20,20,20,20,20,20,20,20,20,20,20,20,0,0; // ========= Random Option Slot 2 ========= // - Physical setarray .RandOpt2_P[0],RDMOPT_RACE_DAMAGE_NOTHING, // Damage to Neutral Race RDMOPT_RACE_DAMAGE_UNDEAD, // Damage to Undead Race RDMOPT_RACE_DAMAGE_ANIMAL, // Damage to Animal Race RDMOPT_RACE_DAMAGE_PLANT, // Damage to Plant Race RDMOPT_RACE_DAMAGE_INSECT, // Damage to Insect Race RDMOPT_RACE_DAMAGE_FISHS, // Damage to Fish Race RDMOPT_RACE_DAMAGE_DEVIL, // Damage to Demon Race RDMOPT_RACE_DAMAGE_HUMAN, // Damage to Human Race RDMOPT_RACE_DAMAGE_ANGEL, // Damage to Angel Race RDMOPT_RACE_DAMAGE_DRAGON, // Damage to Dragon Race RDMOPT_RACE_IGNORE_DEF_PERCENT_NOTHING, // Bypass DEF of Neutral Race RDMOPT_RACE_IGNORE_DEF_PERCENT_UNDEAD, // Bypass DEF of Undead Race RDMOPT_RACE_IGNORE_DEF_PERCENT_ANIMAL, // Bypass DEF of Animal Race RDMOPT_RACE_IGNORE_DEF_PERCENT_PLANT, // Bypass DEF of Plant Race RDMOPT_RACE_IGNORE_DEF_PERCENT_INSECT, // Bypass DEF of Insect Race RDMOPT_RACE_IGNORE_DEF_PERCENT_FISHS, // Bypass DEF of Fish Race RDMOPT_RACE_IGNORE_DEF_PERCENT_DEVIL, // Bypass DEF of Demon Race RDMOPT_RACE_IGNORE_DEF_PERCENT_HUMAN, // Bypass DEF of Human Race RDMOPT_RACE_IGNORE_DEF_PERCENT_ANGEL, // Bypass DEF of Angel Race RDMOPT_RACE_IGNORE_DEF_PERCENT_DRAGON, // Bypass DEF of Dragon Race RDMOPT_CLASS_DAMAGE_NORMAL_TARGET, // Bypass DEF of Normal Class Enemies RDMOPT_CLASS_DAMAGE_BOSS_TARGET; // Damage to Boss monsters // - Magical setarray .RandOpt2_M[0],RDMOPT_RACE_MDAMAGE_NOTHING,// Damage to Neutral Race RDMOPT_RACE_MDAMAGE_UNDEAD, // Damage to Undead Race RDMOPT_RACE_MDAMAGE_ANIMAL, // Damage to Animal Race RDMOPT_RACE_MDAMAGE_PLANT, // Damage to Plant Race RDMOPT_RACE_MDAMAGE_INSECT, // Damage to Insect Race RDMOPT_RACE_MDAMAGE_FISHS, // Damage to Fish Race RDMOPT_RACE_MDAMAGE_DEVIL, // Damage to Devil Race RDMOPT_RACE_MDAMAGE_HUMAN, // Damage to Human Race RDMOPT_RACE_MDAMAGE_ANGEL, // Damage to Angel Race RDMOPT_RACE_MDAMAGE_DRAGON, // Damage to Dragon Race RDMOPT_RACE_IGNORE_MDEF_PERCENT_NOTHING, // Bypass MDEF of Neutral Race RDMOPT_RACE_IGNORE_MDEF_PERCENT_UNDEAD, // Bypass MDEF of Undead Race RDMOPT_RACE_IGNORE_MDEF_PERCENT_ANIMAL, // Bypass MDEF of Animal Race RDMOPT_RACE_IGNORE_MDEF_PERCENT_PLANT, // Bypass MDEF of Plant Race RDMOPT_RACE_IGNORE_MDEF_PERCENT_INSECT, // Bypass MDEF of Insect Race RDMOPT_RACE_IGNORE_MDEF_PERCENT_FISHS, // Bypass MDEF of Fish Race RDMOPT_RACE_IGNORE_MDEF_PERCENT_DEVIL, // Bypass MDEF of Demon Race RDMOPT_RACE_IGNORE_MDEF_PERCENT_HUMAN, // Bypass MDEF of Human Race RDMOPT_RACE_IGNORE_MDEF_PERCENT_ANGEL, // Bypass MDEF of Angel Race RDMOPT_RACE_IGNORE_MDEF_PERCENT_DRAGON, // Bypass MDEF of Dragon Race RDMOPT_CLASS_MDAMAGE_NORMAL, // Bypass MDEF of Normal Class Enemies RDMOPT_CLASS_MDAMAGE_BOSS; // Damage to Boss monsters // - Ranged setarray .RandOpt2_R[0],RDMOPT_RACE_DAMAGE_NOTHING, // Damage to Neutral Race RDMOPT_RACE_DAMAGE_UNDEAD, // Damage to Undead Race RDMOPT_RACE_DAMAGE_ANIMAL, // Damage to Animal Race RDMOPT_RACE_DAMAGE_PLANT, // Damage to Plant Race RDMOPT_RACE_DAMAGE_INSECT, // Damage to Insect Race RDMOPT_RACE_DAMAGE_FISHS, // Damage to Fish Race RDMOPT_RACE_DAMAGE_DEVIL, // Damage to Demon Race RDMOPT_RACE_DAMAGE_HUMAN, // Damage to Human Race RDMOPT_RACE_DAMAGE_ANGEL, // Damage to Angel Race RDMOPT_RACE_DAMAGE_DRAGON, // Damage to Dragon Race RDMOPT_RACE_IGNORE_DEF_PERCENT_NOTHING, // Bypass DEF of Neutral Race RDMOPT_RACE_IGNORE_DEF_PERCENT_UNDEAD, // Bypass DEF of Undead Race RDMOPT_RACE_IGNORE_DEF_PERCENT_ANIMAL, // Bypass DEF of Animal Race RDMOPT_RACE_IGNORE_DEF_PERCENT_PLANT, // Bypass DEF of Plant Race RDMOPT_RACE_IGNORE_DEF_PERCENT_INSECT, // Bypass DEF of Insect Race RDMOPT_RACE_IGNORE_DEF_PERCENT_FISHS, // Bypass DEF of Fish Race RDMOPT_RACE_IGNORE_DEF_PERCENT_DEVIL, // Bypass DEF of Demon Race RDMOPT_RACE_IGNORE_DEF_PERCENT_HUMAN, // Bypass DEF of Human Race RDMOPT_RACE_IGNORE_DEF_PERCENT_ANGEL, // Bypass DEF of Angel Race RDMOPT_RACE_IGNORE_DEF_PERCENT_DRAGON, // Bypass DEF of Dragon Race RDMOPT_CLASS_DAMAGE_NORMAL_TARGET, // Bypass DEF of Normal Class Enemies RDMOPT_CLASS_DAMAGE_BOSS_TARGET; // Damage to Boss monsters // - Values // Note: When MinV and MaxV are the same, rand() will not be used! setarray .RandOpt2_P_MinV[0],1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,16,20; setarray .RandOpt2_P_MaxV[0],20,20,20,20,20,20,20,20,20,20,30,30,30,30,30,30,30,30,30,30,25,20; setarray .RandOpt2_M_MinV[0],1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,16,20; setarray .RandOpt2_M_MaxV[0],20,20,20,20,20,20,20,20,20,20,30,30,30,30,30,30,30,30,30,30,25,20; setarray .RandOpt2_R_MinV[0],1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,16,20; setarray .RandOpt2_R_MaxV[0],20,20,20,20,20,20,20,20,20,20,30,30,30,30,30,30,30,30,30,30,25,20; // ========= Random Option Slot 3 ========= // - Physical setarray .RandOpt3_P[0],RDMOPT_VAR_STRAMOUNT, // STR RDMOPT_VAR_AGIAMOUNT, // AGI RDMOPT_VAR_VITAMOUNT, // VIT RDMOPT_VAR_INTAMOUNT, // INT RDMOPT_VAR_DEXAMOUNT, // DEX RDMOPT_VAR_LUKAMOUNT, // LUK RDMOPT_VAR_ATTPOWER, // ATK RDMOPT_VAR_CRITICALSUCCESSVALUE, // Crit Chance RDMOPT_DAMAGE_CRI_TARGET, // Crit Damage % RDMOPT_VAR_PLUSASPDPERCENT, // ASPD % RDMOPT_DEC_SPELL_CAST_TIME, // Variable Cast Time -% RDMOPT_DEC_SPELL_DELAY_TIME,// Cast Delay -% RDMOPT_DEC_SP_CONSUMPTION; // Skill SP Cost -% // - Magical setarray .RandOpt3_M[0],RDMOPT_VAR_STRAMOUNT, // STR RDMOPT_VAR_AGIAMOUNT, // AGI RDMOPT_VAR_VITAMOUNT, // VIT RDMOPT_VAR_INTAMOUNT, // INT RDMOPT_VAR_DEXAMOUNT, // DEX RDMOPT_VAR_LUKAMOUNT, // LUK RDMOPT_VAR_ATTMPOWER, // MATK RDMOPT_DEC_SPELL_CAST_TIME, // Variable Cast Time -% RDMOPT_DEC_SPELL_DELAY_TIME,// Cast Delay -% RDMOPT_DEC_SP_CONSUMPTION; // Skill SP Cost -% // - Ranged setarray .RandOpt3_R[0],RDMOPT_VAR_STRAMOUNT, // STR RDMOPT_VAR_AGIAMOUNT, // AGI RDMOPT_VAR_VITAMOUNT, // VIT RDMOPT_VAR_INTAMOUNT, // INT RDMOPT_VAR_DEXAMOUNT, // DEX RDMOPT_VAR_LUKAMOUNT, // LUK RDMOPT_VAR_ATTPOWER, // ATK RDMOPT_VAR_ATTMPOWER, // MATK RDMOPT_VAR_CRITICALSUCCESSVALUE, // Crit Chance RDMOPT_DAMAGE_CRI_TARGET, // Crit Damage % RDMOPT_VAR_PLUSASPDPERCENT, // ASPD % RDMOPT_DEC_SPELL_CAST_TIME, // Variable Cast Time -% RDMOPT_DEC_SPELL_DELAY_TIME,// Cast Delay -% RDMOPT_DEC_SP_CONSUMPTION, // Skill SP Cost -% RDMOPT_RANGE_ATTACK_DAMAGE_TARGET; // Ranged Damage +% // - Values // Note: When MinV and MaxV are the same, rand() will not be used! setarray .RandOpt3_P_MinV[0],1,1,1,1,1,1,4,10,1,1,1,1,1; setarray .RandOpt3_P_MaxV[0],10,10,10,10,10,10,25,19,20,5,5,5,5; setarray .RandOpt3_M_MinV[0],1,1,1,1,1,1,4,1,1,1; setarray .RandOpt3_M_MaxV[0],10,10,10,10,10,10,30,10,10,5; setarray .RandOpt3_R_MinV[0],1,1,1,1,1,1,4,4,10,1,1,1,5,5,1; setarray .RandOpt3_R_MaxV[0],10,10,10,10,10,10,25,20,19,20,5,20,20,5,8; end; }
Link to comment
Share on other sites
3 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.