-
Posts
72 -
Joined
-
Last visited
Content Type
Profiles
Forums
Downloads
Jobs Available
Server Database
Third-Party Services
Top Guides
Store
Crowdfunding
Posts posted by Rizz
-
-
On 10/21/2019 at 10:37 PM, Diospectre said:
- If the member is not at the same map as the killer, he will get skipped.
Thanks your script worked well when I tested it but one feature isn't worked properly. The other member still get the item even they are died or in different screen.
I got this notification in the emulator:
[Error]: buildin_getitem: Nonexistant item 25276 requested.
[Debug]: Source (NPC): PartyLoot (invisible/not on a map)On 10/21/2019 at 10:59 PM, Mabuhay said:Untested
I have tested, yours also worked well but Ifound that the other party member in different screen/died member stilll get the item.
-
Ah my bad, this is the complete script
- script PartyLoot -1,{ OnNPCKillEvent: if ( getmonsterinfo( killedrid, 1014 ) && rand(100) < 40 ) { if ( getcharid(1) ) { getpartymember getcharid(1), 1; getpartymember getcharid(1), 2; for ( .@i = 0; .@i < $@partymembercount; .@i++ ) { if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) { // what happens if someone in the party member is offline =/ .@partymemberaid[.@c] = $@partymemberaid[.@i]; .@c++; } } getitem 607, 3, .@partymemberaid[ rand( .@c ) ]; getitem 616, 3, .@partymemberaid[ rand( .@c ) ]; } else { getitem 607, 3; getitem 607, 3; } } end; }
ill test the config you've provided.., I will tell you later if it works
EDIT: It would not work for me man
EDIT: I managed to make it work. But You may inspect it first, I am afraid if I made a mistake which can be exploited.
EDIT: It seems the other party members still get the item even they are in different map. I killed the spore in pay fild08, other member in prontera also get the drop. Any suggestion for fixing this issue?
- script PartyLoot -1,{ OnNPCKillEvent: if( killedrid == 1014 ){ if ( getcharid(1) ) { getpartymember getcharid(1), 1; getpartymember getcharid(1), 2; for ( .@i = 0; .@i < $@partymembercount; .@i++ ) { if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) { // what happens if someone in the party member is offline =/ .@partymemberaid[.@c] = $@partymemberaid[.@i]; .@c++; } } if(rand(100)<10) getitem 607, 3, .@partymemberaid[ rand( .@c ) ]; //it gives pt member 3 Ygg berry and 3 OCA for 10% if(rand(100)<10) getitem 616, 3, .@partymemberaid[ rand( .@c ) ]; } else { if(rand(100)<10) getitem 607, 3; if(rand(100)<10) getitem 607, 3; } } end; }
Previously I tried to edit a script from contributor regarding MVP share loot script. I want to make this script only gives an item to party member in the same area. However, I failed and when member A killed Z monster, member outside the screen still got the item prize. Please give me an insight..
- script partyshare -1,{ OnNPCKillEvent: if( killedrid == 1014 ){ if ( getcharid(1) ) { getpartymember getcharid(1), 1; getpartymember getcharid(1), 2; getmapxy(.@mapname$,.@mapx,.@mapy,BL_PC); for ( .@i = 0; .@i < $@partymembercount; .@i++ ) { if ( !isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) || // what happens if someone in the party member is offline =/ strcharinfo(3,$@partymembercid[.@i]) != .@mapname$ ) // If the party member is not on the same map of the killer continue; if(rand(100)<10) getitem 607, 1, $@partymemberaid[.@i]; } announce "Wow! A party named [ "+ strcharinfo(1) +" ] has killed "+ getmonsterinfo( killedrid, MOB_NAME ) +" at "+ strcharinfo(3) +"! Awesome work guys!",bc_all,0x6666CC; } else { if(rand(100)<10) getitem 607,1; announce "Amazing! A lone wolf named [ "+ strcharinfo(0) +" ] has killed "+ getmonsterinfo( killedrid, MOB_NAME ) +" himself at "+ strcharinfo(3) +"! Reckless, but still, good work!",bc_all,0x6666CC; } } end; }
EDIT: Dead member still get the item, please tell me how to limit the drop so Only the surviving party members can get the item.
EDIT: Already answered in the other thread. -
11 hours ago, Diospectre said:
setarray .@moblist, 1014, 1015; // LIST OF MOB ID
set .@mobsize,getarraysize(.@moblist);
set .@val,0;while (.@val <= .@mobsize) {
set .@val,.@val+1;
set .@moblist[.@val];Where should I put this sir?
Sry, what I meant is, I tried to make a party member got similar chance to get an item from a monster even though they dont kill it.
Ex: DPS kill poring and has 10% to get a knife, the supports also have 10% chance as well (pure communism :D) -
On 10/19/2019 at 3:23 PM, DevKira said:
I have an Custom Enchantment Script. Easy to modified in just a seconds.
My first made script. DM if you wantThanks, but is it random option enchantment or the regular one?
I found how to make it anyway, I tried to make a simple improvement for this script.
//===== 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 ^0000ffJotun Eye^000000."; mes "Also be warned, that what you get and with which value is completely random!"; next; mes "Please remember remove the cards in the weapon before enchanting or it might be lost."; menu "Okay I have it",-; next; mes "1 ^0000ffJotun Eye^000000."; if(countitem(607) < 1 ) goto Lne; // testing used Ygg berry - change the catalyst here 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; Lne: mes "Are you trying to fool me!?"; 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$; delitem 607,1; 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; }
Thanks rathena, I learn a lot
-
Hello, it is me again.., I need a help to make Priest's MG can deal damage to every type and monster element. I tried to change the RC_DEMON to RC_ALL but it found it didnt change anything
case UNT_MAGNUS: if (!battle_check_undead(tstatus->race,tstatus->def_ele) && tstatus->race!=RC_ALL) break; skill_attack(BF_MAGIC,ss,&unit->bl,bl,sg->skill_id,sg->skill_lv,tick,0); break;
-
Woa, thanks alot, I just need to modify it a little
for specific mob i just changed the the MOB_MVPEXP into specific mob id
- script PartyLoot -1,{ OnNPCKillEvent: if ( getmonsterinfo( killedrid, 1014 ) && rand(100) < 40 ) { if ( getcharid(1) ) { getpartymember getcharid(1), 1; getpartymember getcharid(1), 2; for ( .@i = 0; .@i < $@partymembercount; .@i++ ) { if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) { // what happens if someone in the party member is offline =/ .@partymemberaid[.@c] = $@partymemberaid[.@i]; .@c++; }
Hello, someone gave me a link about a script which can give a party member similar chance to get specific item from a mob even they are not the killer.
However, I would like to make it only work on certain mob for example, Spore. But when I killed other mob, the script also being activated.- script PartyLoot -1,{ OnNPCKillEvent: if ( getmonsterinfo( killedrid, 1014 ) && rand(100) < 40 ) { if ( getcharid(1) ) { getpartymember getcharid(1), 1; getpartymember getcharid(1), 2; for ( .@i = 0; .@i < $@partymembercount; .@i++ ) { if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) { // what happens if someone in the party member is offline =/ .@partymemberaid[.@c] = $@partymemberaid[.@i]; .@c++; }
I would appreciate if anyone telling me how to make this script only worked on specific mob..
-
Thanks for the response, but it is possible if the party loot applies in regular monster which is spawned normally in field or dun?. I mean it is not only for an instance or the event one.
-
Hello, is there any script or configuration making every the party member within the screen range has similar chance to get an item from a monster eventhough they arent the killer. I mean if poring has a chance to drop 10% knife, and being killed by the DPS, the Healer/Supports have 10% chance to get the same item..
-
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; }
-
Hello, I need a help.. I'd like to make the Ghost Palace can be accessed by party member.., so maybe someone can tell how to configure the script to make it so?
//===== rAthena Script ======================================= //= Ghost Palace //===== Description: ========================================= //= [Walkthrough Conversion] //= Ghost Palace Instance //===== Changelogs: ========================================== //= 1.0 First version. [Capuche] //============================================================ prontera,171,152,5 script Unpleasant Royal Guard# 4_M_SAKRAYROYAL,{ if (BaseLevel < 90) { mes "[Unpleasant Royal Guard]"; mes "Althought I need help with a task, you are not strong enough to assist me, noob~!"; next; mes "[Unpleasant Royal Guard]"; mes "Come back later when you have done some training and are at least level 90!"; close; } .@party_id = getcharid(1); if (getcharid(0) != getpartyleader(.@party_id,2) || .@party_id < 1) { mes "[Unpleasant Royal Guard]"; mes "I can only open the secret passage for party leaders. Please have your party leader talk to me."; close; } switch( checkquest(1261,PLAYTIME) ) { case -1: break; case 0: case 1: mes "[Unpleasant Royal Guard]"; mes "Have you found the princess yet?! Is she safe?"; close; case 2: mes "[Unpleasant Royal Guard]"; mes "The monsters around the secret passage have disappeared. Now is our chance to save the princess!"; erasequest 1261;// Cursed Swordman close; } mes "[Unpleasant Royal Guard]"; mes "I need help, even from the likes of you."; next; mes "[Unpleasant Royal Guard]"; mes "In the middle of battle the princess disappeared while I was guarding the palace."; next; mes "[Unpleasant Royal Guard]"; mes "You run ahead and I will catch up. We must save her."; next; if (select( "I will help.", "This is not a good time." ) == 2) { mes "[Unpleasant Royal Guard]"; mes "Even now all the royal guards are fighting and dying from the monsters."; next; mes "[Unpleasant Royal Guard]"; mes "We must, no matter how much fear grips our hearts, save the princess!"; close; } instance_create("Ghost Palace"); mes "[Unpleasant Royal Guard]"; mes "Thank you.."; mes "I will open the secret passage to the ^0000ffGhost Palace^000000."; mes "Please be ready!"; close; } prontera,178,149,5 script Interdimensional Device#dk PORTAL,{ if (BaseLevel < 90) { mes "[Unpleasant Royal Guard]"; mes "Althought I need help with a task, you are not strong enough to assist me, noob~!"; next; mes "[Unpleasant Royal Guard]"; mes "Come back later when you have done some training and are at least level 90!"; close; } mes "[Unpleasant Royal Guard]"; mes "I can see the secret passage into the palace. Are you ready to save the princess?!"; next; if (select( "Enter", "Stop" ) == 2) { mes "[Unpleasant Royal Guard]"; mes "Even now all the royal guards are fighting and dying from the monsters."; next; mes "[Unpleasant Royal Guard]"; mes "We must, no matter how much fear grips our hearts, save the princess!"; close; } switch( checkquest(1261,PLAYTIME) ) { case -1: break; case 0: case 1: mes "[Unpleasant Royal Guard]"; mes "The monsters that attacked the palace are wandering around the secret entrance. It would be very bad if they spotted us... Please wait."; next; mes "When the time limit for the entrance is up"; mes "let's try to re-enter."; close; case 2: mes "^0000ffThe time limit for entering to the Curse of the Swordsman is finished. Please try to talk to the Unpleasent Royal Guard again..^000000"; erasequest 1261;// Cursed Swordman close; } .@party_id = getcharid(1); if (getcharid(0) != getpartyleader(.@party_id,2) || .@party_id < 1) { mes "[Unpleasant Royal Guard]"; mes "I can only open the secret passage for party leaders. Please have your party leader talk to me."; close; } .@md_name$ = "Ghost Palace"; switch( instance_enter(.@md_name$) ) { case IE_OTHER: mes "An unknown error occurred."; close; case IE_NOINSTANCE: mes "^ff0000Inside the devices you see a dark hole. If you wish to enter you must to talk to the Unpleasent Royal Guard first.^000000"; close; case IE_NOMEMBER: mes "Only registered members can enter the " + .@md_name$ + " instance."; close; case IE_OK: mapannounce "prontera", "" + strcharinfo(0) + " of the party, " + getpartyname(.@party_id) + ", is entering the Ghost Palace.", bc_map, 0x00ff99; // warp "1@spa",42,196; setquest 1261;// Cursed Swordman end; } } // 1st floor 1@spa,41,204,5 script King#dk 4_M_RUSKING,{ mes "[King]"; mes "You are hereby appointed as the personal guard to Princess Tiara. I trust your loyalty above all else."; npctalk "King: You are hereby appointed as the personal guard to Princess Tiara. I trust your loyalty above all else."; next; mes "[Lurid Royal Guard]"; mes "I will protect the princess with my life."; npctalk "Lurid Royal Guard: I will protect the princess with my life.", instance_npcname("Lurid Royal Guard#dk"); next; mes "[King]"; mes "The marriage arrangements are going as planned. The prince is here to meet with the princess."; npctalk "King: The marriage arrangements are going as planned. The prince is here to meet with the princess."; next; mes "[Lurid Royal Guard]"; mes "...Yes, your majesty."; npctalk "Lurid Royal Guard: ...Yes, your majesty.", instance_npcname("Lurid Royal Guard#dk"); next; mes "[King]"; mes "My gods, there are monsters in the castle! Get rid of them now!"; npctalk "King: My gods, there are monsters in the castle! Get rid of them now!"; close2; donpcevent instance_npcname("#gp_control_1") + "::OnStart"; end; OnInstanceInit: // 1: enabled potential double spawn (official), 0: disabled 'bool_double_spawn = 1; 'map_spa$ = instance_mapname("1@spa"); // warps disablenpc instance_npcname("The second floor of Palace"); disablenpc instance_npcname("3rd floor in the palace"); disablenpc instance_npcname("4th floor in the palace"); disablenpc instance_npcname("5th floor of Palace"); disablenpc instance_npcname("Way out of Palace"); // first floor disablenpc instance_npcname("#gp_control_1"); // second floor disablenpc instance_npcname("Lurid Royal Guard#dk1"); disablenpc instance_npcname("Princess Tiara#dk"); disablenpc instance_npcname("#gp_control_2"); // 3rd floor disablenpc instance_npcname("King#dk1"); disablenpc instance_npcname("Lurid Royal Guard#dk2"); disablenpc instance_npcname("Captain of the Guard#dk"); disablenpc instance_npcname("Soldier#dk1"); disablenpc instance_npcname("Soldier#dk2"); disablenpc instance_npcname("Soldier#dk3"); disablenpc instance_npcname("Lurid Royal Guard#dk3"); disablenpc instance_npcname("Thanatos Magic Trace#dk1"); disablenpc instance_npcname("#gp_control_3"); // 4th floor disablenpc instance_npcname("#gp_control_4"); disablenpc instance_npcname("#gp_control_5"); disablenpc instance_npcname("Thanatos Magic Trace#dk2"); disablenpc instance_npcname("Visiting Prince#dk"); disablenpc instance_npcname("Lurid Royal Guard#dk4"); disablenpc instance_npcname("King's Corpse#dk"); disablenpc instance_npcname("Captain's Corpse#dk"); disablenpc instance_npcname("Soldier's Corpse#dk"); disablenpc instance_npcname("Soldier's Corpse#dk1"); disablenpc instance_npcname("Soldier's Corpse#dk2"); disablenpc instance_npcname("Soldier's Corpse#dk3"); disablenpc instance_npcname("Soldier's Corpse#dk4"); // 5th floor disablenpc instance_npcname("#gp_control_6"); disablenpc instance_npcname("Princess Tiara#dk1"); disablenpc instance_npcname("Lurid Royal Guard#dk5"); disablenpc instance_npcname("King#dk11"); disablenpc instance_npcname("Sakray#dk"); disablenpc instance_npcname("Thanatos Magic Trace#dk3"); disablenpc instance_npcname("#tb"); disablenpc instance_npcname("#sv"); disablenpc instance_npcname("#tv"); end; } 1@spa,42,201,1 script Lurid Royal Guard#dk 4_M_SAKRAYROYAL,{ end; } 1@spa,1,1,1 script #gp_control_1 HIDDEN_WARP_NPC,{ end; OnStart: enablenpc instance_npcname("#gp_control_1"); disablenpc instance_npcname("King#dk"); disablenpc instance_npcname("Lurid Royal Guard#dk"); initnpctimer; end; OnTimer2000: .@label$ = instance_npcname("#gp_control_1") + "::OnMyMobDead1"; monster 'map_spa$,50,194,"Cursed Soldier",2948,1, .@label$; // CURSED_SOLDIER monster 'map_spa$,34,208,"Cursed Soldier",2948,1, .@label$; // CURSED_SOLDIER monster 'map_spa$,32,194,"Cursed Gatekeeper",2949,1, .@label$; // CURSED_SENTINEL monster 'map_spa$,52,209,"Cursed Gatekeeper",2949,1, .@label$; // CURSED_SENTINEL stopnpctimer; end; OnMyMobDead1: if (mobcount('map_spa$, instance_npcname("#gp_control_1") + "::OnMyMobDead1") < (1 + 'bool_double_spawn)) { deltimer instance_npcname("#gp_control_1") + "::OnSpawn1"; // stop double spawn if timer is running addtimer 2000, instance_npcname("#gp_control_1") + "::OnSpawn1"; } end; OnSpawn1: .@label$ = instance_npcname("#gp_control_1") + "::OnMyMobDead2"; monster 'map_spa$,37,182,"Cursed Soldier",2948,1, .@label$; // CURSED_SOLDIER monster 'map_spa$,46,182,"Cursed Gatekeeper",2949,1, .@label$; // CURSED_SENTINEL end; OnMyMobDead2: if (mobcount('map_spa$, instance_npcname("#gp_control_1") + "::OnMyMobDead2") < 1) { deltimer instance_npcname("#gp_control_1") + "::OnSpawn1"; // stop double spawn if timer is running deltimer instance_npcname("#gp_control_1") + "::OnSpawn2"; addtimer 2000, instance_npcname("#gp_control_1") + "::OnSpawn2"; } end; OnSpawn2: .@label$ = instance_npcname("#gp_control_1") + "::OnMyMobDead3"; monster 'map_spa$,30,200,"Cursed Soldier",2948,1, .@label$; // CURSED_SOLDIER monster 'map_spa$,51,200,"Cursed Gatekeeper",2949,1, .@label$; // CURSED_SENTINEL monster 'map_spa$,53,199,"Cursed Gatekeeper",2949,1, .@label$; // CURSED_SENTINEL end; OnMyMobDead3: if (mobcount('map_spa$, instance_npcname("#gp_control_1") + "::OnMyMobDead3") < 1) { mapannounce 'map_spa$, "The passage on the 2nd floor in the palace of ghost is open .", bc_map,0xFFFF00; enablenpc instance_npcname("The second floor of Palace"); enablenpc instance_npcname("Lurid Royal Guard#dk1"); enablenpc instance_npcname("Princess Tiara#dk"); } end; } // 2nd floor 1@spa,132,122,7 script Lurid Royal Guard#dk1 4_M_SAKRAYROYAL,{ .@tiara$ = instance_npcname("Princess Tiara#dk"); cutin "npc-tiara.bmp",3; mes "[Lurid Royal Guard]"; mes "Your highness, the King has invited a prince from a neighboring country to be your betrothed. Be ready to meet him..."; npctalk "Lurid Royal Guard: Your highness, the King has invited a prince from a neighboring country to be your betrothed. Be ready to meet him..."; next; mes "[Princess Tiara]"; mes "If...If a marriage is arranged what should I do?"; npctalk "Princess Tiara: If...If a marriage is arranged what should I do?", .@tiara$; next; mes "[Lurid Royal Guard]"; mes "The only thing I can do is protect you from physical harm."; npctalk "Lurid Royal Guard: The only thing I can do is protect you from physical harm."; next; mes "[Princess Tiara]"; mes "Then, what can I do?"; npctalk "Princess Tiara: Then, what can I do?", .@tiara$; next; mes "[Lurid Royal Guard]"; mes "You must decide that for yourself your highness..."; npctalk "Lurid Royal Guard: You must decide that for yourself your highness..."; next; mes "[Princess Tiara]"; mes "Would it be easier for you if I were married and sent off to another country?"; npctalk "Princess Tiara: Would it be easier for you if I were married and sent off to another country?", .@tiara$; next; mes "[Lurid Royal Guard]"; mes "I will always stand by you and protect you forever."; npctalk "Lurid Royal Guard: I will always stand by you and protect you forever."; cutin "npc-tiara.bmp",255; next; mes "[Princess Tiara]"; mes "Monsters have gotten inside the castle? Please, protect me!"; npctalk "Princess Tiara: Monsters have gotten inside the castle? Please, protect me!", .@tiara$; next; mes "[Lurid Royal Guard]"; mes "Stay behind me. Let's go!"; npctalk "Lurid Royal Guard: Stay behind me. Let's go!"; close2; donpcevent instance_npcname("#gp_control_2") + "::OnStart"; end; } 1@spa,135,125,3 duplicate(Lurid Royal Guard#dk) Princess Tiara#dk 4_F_MAYSEL 1@spa,1,1,1 script #gp_control_2 HIDDEN_WARP_NPC,{ end; OnStart: enablenpc instance_npcname("#gp_control_2"); disablenpc instance_npcname("Lurid Royal Guard#dk1"); disablenpc instance_npcname("Princess Tiara#dk"); disablenpc instance_npcname("The second floor of Palace"); killmonster 'map_spa$, instance_npcname("#gp_control_1") + "::OnMyMobDead1"; killmonster 'map_spa$, instance_npcname("#gp_control_1") + "::OnMyMobDead2"; killmonster 'map_spa$, instance_npcname("#gp_control_1") + "::OnMyMobDead3"; disablenpc instance_npcname("#gp_control_1"); initnpctimer; end; OnTimer2000: .@label$ = instance_npcname("#gp_control_2") + "::OnMyMobDead1"; monster 'map_spa$,135,116,"Broken Promise",2950,1, .@label$; // BROKEN_MIND monster 'map_spa$,110,120,"Broken Promise",2950,1, .@label$; // BROKEN_MIND monster 'map_spa$,122,112,"Floating Sorrow",2951,1, .@label$; // FLOATING_WORD monster 'map_spa$,121,129,"Unfulfilled Love",2952,1, .@label$; // LIKE_LOVE stopnpctimer; end; OnMyMobDead1: if (mobcount('map_spa$, instance_npcname("#gp_control_2") + "::OnMyMobDead1") < 1) { sleep 2000; .@label$ = instance_npcname("#gp_control_2") + "::OnMyMobDead2"; monster 'map_spa$,120,103,"Broken Promise",2950,1, .@label$; // BROKEN_MIND monster 'map_spa$,115,137,"Floating Sorrow",2951,1, .@label$; // FLOATING_WORD monster 'map_spa$,103,130,"Unfulfilled Love",2952,1, .@label$; // LIKE_LOVE } end; OnMyMobDead2: if (mobcount('map_spa$, instance_npcname("#gp_control_2") + "::OnMyMobDead2") < 1) { sleep 2000; .@label$ = instance_npcname("#gp_control_2") + "::OnMyMobDead3"; monster 'map_spa$,98,119,"Floating Sorrow",2951,1, .@label$; // FLOATING_WORD monster 'map_spa$,98,120,"Floating Sorrow",2951,1, .@label$; // FLOATING_WORD monster 'map_spa$,103,109,"Unfulfilled Love",2952,1, .@label$; // LIKE_LOVE } end; OnMyMobDead3: if (mobcount('map_spa$, instance_npcname("#gp_control_2") + "::OnMyMobDead3") < 1) { mapannounce 'map_spa$, "The passage on the 3rd floor of the palace is open.", bc_map,0xFFFF00; enablenpc instance_npcname("3rd floor in the palace"); enablenpc instance_npcname("King#dk1"); enablenpc instance_npcname("Lurid Royal Guard#dk2"); enablenpc instance_npcname("Captain of the Guard#dk"); enablenpc instance_npcname("Soldier#dk1"); enablenpc instance_npcname("Soldier#dk2"); enablenpc instance_npcname("Soldier#dk3"); disablenpc instance_npcname("#gp_control_2"); } end; } // 3rd floor 1@spa,32,54,1 script King#dk1 4_M_RUSKING,{ mes "[King]"; mes "It was you who brought the monsters here! You want to get rid of me and have the princess for yourself?"; npctalk "King: It was you who brought the monsters here! You want to get rid of me and have the princess for yourself?"; next; mes "[Lurid Royal Guard]"; mes "It is a trap your majesty! You must trust me!"; npctalk "Lurid Royal Guard: It is a trap your majesty! You must trust me!", instance_npcname("Lurid Royal Guard#dk2"); next; mes "[King]"; mes "Shut up! You've betrayed me! I trusted you... you must pay for your disgrace."; npctalk "King: Shut up! You've betrayed me! I trusted you... you must pay for your disgrace."; next; mes "[King]"; mes "You will suffer for the rest of your life."; npctalk "King: You will suffer for the rest of your life."; close2; disablenpc instance_npcname("3rd floor in the palace"); disablenpc instance_npcname("King#dk1"); disablenpc instance_npcname("Captain of the Guard#dk"); disablenpc instance_npcname("Soldier#dk1"); disablenpc instance_npcname("Soldier#dk2"); disablenpc instance_npcname("Soldier#dk3"); disablenpc instance_npcname("Lurid Royal Guard#dk2"); donpcevent instance_npcname("Thanatos Magic Trace#dk1") + "::OnStart"; end; } 1@spa,35,56,5 script Thanatos Magic Trace#dk1 4_TRACE,{ end; OnStart: enablenpc instance_npcname("Thanatos Magic Trace#dk1"); enablenpc instance_npcname("Lurid Royal Guard#dk3"); initnpctimer; end; OnTimer5000: npctalk "Ominous Voice: Oh, faithful royal guard, you are trapped."; end; OnTimer8000: npctalk "Ominous Voice: The conspiracy in the palace has your princess in grave danger..."; end; OnTimer12000: npctalk "Lurid Royal Guard: Who are you? Show yourself!", instance_npcname("Lurid Royal Guard#dk3"); end; OnTimer15000: npctalk "Ominous Voice: Ah... so you do you hear me?"; end; OnTimer20000: npctalk "Lurid Royal Guard: ...?", instance_npcname("Lurid Royal Guard#dk3"); end; OnTimer23000: npctalk "Ominous Voice: I can give you unlimited power. If you make a pact with me."; end; OnTimer28000: npctalk "Lurid Royal Guard: I..I...", instance_npcname("Lurid Royal Guard#dk3"); end; OnTimer33000: npctalk "Thanatos Magic Trace: Kukuku... What do you want boy?"; end; OnTimer34000: stopnpctimer; disablenpc instance_npcname("Thanatos Magic Trace#dk1"); disablenpc instance_npcname("Lurid Royal Guard#dk3"); donpcevent instance_npcname("#gp_control_3") + "::OnStart"; end; } 1@spa,28,52,7 duplicate(Lurid Royal Guard#dk) Captain of the Guard#dk 4_M_KY_KNT 1@spa,25,53,7 duplicate(Lurid Royal Guard#dk) Soldier#dk1 4_M_CRU_SOLD 1@spa,34,53,1 duplicate(Lurid Royal Guard#dk) Soldier#dk2 4_M_CRU_SOLD 1@spa,30,52,7 duplicate(Lurid Royal Guard#dk) Soldier#dk3 4_M_KY_SOLD 1@spa,30,58,5 duplicate(Lurid Royal Guard#dk) Lurid Royal Guard#dk2 4_M_SAKRAY_TIED 1@spa,31,57,5 duplicate(Lurid Royal Guard#dk) Lurid Royal Guard#dk3 4_M_SAKRAY_TIED 1@spa,1,1,1 script #gp_control_3 HIDDEN_WARP_NPC,{ end; OnStart: enablenpc instance_npcname("#gp_control_3"); initnpctimer; end; OnTimer2000: .@label$ = instance_npcname("#gp_control_3") + "::OnMyMobDead1"; monster 'map_spa$,31,57, "Regretful Memory",2953,1, .@label$; // CURSED_MEMORY monster 'map_spa$,59,24, "Regretful Memory",2953,1, .@label$; // CURSED_MEMORY monster 'map_spa$,23,40, "Wasted Friendship",2955,1, .@label$; // OLD_FRIENDSHIP monster 'map_spa$,54,45, "Tarnished Oath",2954,1, .@label$; // COLORLESS_VOW monster 'map_spa$,26,20, "Tarnished Oath",2954,1, .@label$; // COLORLESS_VOW stopnpctimer; end; OnMyMobDead1: if (mobcount('map_spa$, instance_npcname("#gp_control_3") + "::OnMyMobDead1") < 1) addtimer 2000, instance_npcname("#gp_control_3") + "::OnSpawn1"; end; OnSpawn1: .@label$ = instance_npcname("#gp_control_3") + "::OnMyMobDead2"; monster 'map_spa$,30,52, "Tarnished Oath",2954,1, .@label$; // COLORLESS_VOW monster 'map_spa$,58,58, "Wasted Friendship",2955,1, .@label$; // OLD_FRIENDSHIP monster 'map_spa$,54,24, "Regretful Memory",2953,1, .@label$; // CURSED_MEMORY end; OnMyMobDead2: if (mobcount('map_spa$, instance_npcname("#gp_control_3") + "::OnMyMobDead2") < (1 + 'bool_double_spawn)) { deltimer instance_npcname("#gp_control_3") + "::OnAnnounce"; addtimer 500, instance_npcname("#gp_control_3") + "::OnAnnounce"; } end; OnAnnounce: mapannounce 'map_spa$, "The passage on the 4th floor of the palace is open.", bc_map,0xFFFF00; enablenpc instance_npcname("4th floor in the palace"); deltimer instance_npcname("#gp_control_3") + "::OnSpawn2"; // stop double spawn if timer is running addtimer 2000, instance_npcname("#gp_control_3") + "::OnSpawn2"; end; OnSpawn2: donpcevent instance_npcname("#gp_control_4") + "::OnStart"; // 35 mobs .@label$ = instance_npcname("#gp_control_3") + "::OnMyMobDead3"; monster 'map_spa$,67,46, "Regretful Memory",2953,1, .@label$; // CURSED_MEMORY unittalk $@mobid[0], "You are trapped..."; monster 'map_spa$,62,48, "Tarnished Oath",2954,1, .@label$; // COLORLESS_VOW unittalk $@mobid[0], "Run away!"; monster 'map_spa$,57,46, "Wasted Friendship",2955,1, .@label$; // OLD_FRIENDSHIP unittalk $@mobid[0], "Run away quickly!"; monster 'map_spa$,51,48, "Regretful Memory",2953,1, .@label$; // CURSED_MEMORY unittalk $@mobid[0], "Faithful royal guard..."; monster 'map_spa$,56,55, "Tarnished Oath",2954,1, .@label$; // COLORLESS_VOW unittalk $@mobid[0], "Run away!"; monster 'map_spa$,62,56, "Wasted Friendship",2955,1, .@label$; // OLD_FRIENDSHIP unittalk $@mobid[0], "You are trapped..."; monster 'map_spa$,66,58, "Regretful Memory",2953,1, .@label$; // CURSED_MEMORY unittalk $@mobid[0], "You put your princess in grave danger..."; monster 'map_spa$,66,64, "Tarnished Oath",2954,1, .@label$; // COLORLESS_VOW unittalk $@mobid[0], "Faithful royal guard..."; monster 'map_spa$,62,65, "Regretful Memory",2953,1, .@label$; // CURSED_MEMORY unittalk $@mobid[0], "Run away quickly!"; monster 'map_spa$,57,67, "Tarnished Oath",2954,1, .@label$; // COLORLESS_VOW unittalk $@mobid[0], "You are trapped..."; monster 'map_spa$,49,66, "Wasted Friendship",2955,1, .@label$; // OLD_FRIENDSHIP unittalk $@mobid[0], "Run away!"; monster 'map_spa$,44,66, "Regretful Memory",2953,1, .@label$; // CURSED_MEMORY unittalk $@mobid[0], "Run away quickly!"; monster 'map_spa$,45,20, "Tarnished Oath",2954,1, .@label$; // COLORLESS_VOW unittalk $@mobid[0], "Run away!"; monster 'map_spa$,38,20, "Regretful Memory",2953,1, .@label$; // CURSED_MEMORY unittalk $@mobid[0], "You are trapped..."; monster 'map_spa$,32,20, "Wasted Friendship",2955,1, .@label$; // OLD_FRIENDSHIP unittalk $@mobid[0], "Run away quickly!"; monster 'map_spa$,51,22, "Wasted Friendship",2955,1, .@label$; // OLD_FRIENDSHIP unittalk $@mobid[0], "Run away quickly!"; monster 'map_spa$,26,34,"Wasted Friendship",2955,1, .@label$; // OLD_FRIENDSHIP unittalk $@mobid[0], "Run away!"; monster 'map_spa$,21,37,"Tarnished Oath",2954,1, .@label$; // COLORLESS_VOW unittalk $@mobid[0], "Faithful royal guard..."; monster 'map_spa$,18,39,"Regretful Memory",2953,1, .@label$; // CURSED_MEMORY unittalk $@mobid[0], "Run away quickly!"; monster 'map_spa$,21,45,"Tarnished Oath",2954,1, .@label$; // COLORLESS_VOW unittalk $@mobid[0], "Run away!"; monster 'map_spa$,23,49,"Regretful Memory",2953,1, .@label$; // CURSED_MEMORY unittalk $@mobid[0], "You are trapped..."; monster 'map_spa$,25,54,"Wasted Friendship",2955,1, .@label$; // OLD_FRIENDSHIP unittalk $@mobid[0], "Run away quickly!"; monster 'map_spa$,29,54,"Tarnished Oath",2954,1, .@label$; // COLORLESS_VOW unittalk $@mobid[0], "You put your princess in grave danger..."; monster 'map_spa$,56,39,"Regretful Memory",2953,1, .@label$; // CURSED_MEMORY unittalk $@mobid[0], "Run away!"; monster 'map_spa$,61,36,"Tarnished Oath",2954,1, .@label$; // COLORLESS_VOW unittalk $@mobid[0], "Faithful royal guard..."; monster 'map_spa$,66,38,"Wasted Friendship",2955,1, .@label$; // OLD_FRIENDSHIP unittalk $@mobid[0], "Run away quickly!"; monster 'map_spa$,42,54,"Wasted Friendship",2955,1, .@label$; // OLD_FRIENDSHIP unittalk $@mobid[0], "Run away!"; monster 'map_spa$,35,54,"Regretful Memory",2953,1, .@label$; // CURSED_MEMORY unittalk $@mobid[0], "You are trapped..."; monster 'map_spa$,43,60,"Tarnished Oath",2954,1, .@label$; // COLORLESS_VOW unittalk $@mobid[0], "Faithful royal guard..."; monster 'map_spa$,30,25,"Tarnished Oath",2954,1, .@label$; // COLORLESS_VOW unittalk $@mobid[0], "You put your princess in grave danger..."; monster 'map_spa$,30,31,"Regretful Memory",2953,1, .@label$; // CURSED_MEMORY unittalk $@mobid[0], "You are trapped..."; monster 'map_spa$,65,64, "Regretful Memory",2953,1, .@label$; // CURSED_MEMORY monster 'map_spa$,65,67, "Regretful Memory",2953,1, .@label$; // CURSED_MEMORY monster 'map_spa$,18,43,"Regretful Memory",2953,1, .@label$; // CURSED_MEMORY monster 'map_spa$,21,43,"Regretful Memory",2953,1, .@label$; // CURSED_MEMORY end; OnMyMobDead3: end; } // 4th floor 1@spa,1,1,1 script #gp_control_4 HIDDEN_WARP_NPC,{ end; OnStart: enablenpc instance_npcname("#gp_control_4"); .@label$ = instance_npcname("#gp_control_4") + "::OnMyMobDead1"; monster 'map_spa$,215,194, "Sweet Slaughter",2956,1, .@label$; // SWEET_SLAUGHTER monster 'map_spa$,194,178, "Sweet Slaughter",2956,1, .@label$; // SWEET_SLAUGHTER monster 'map_spa$,191,211, "Sweet Slaughter",2956,1, .@label$; // SWEET_SLAUGHTER monster 'map_spa$,185,203, "Cursed Gatekeeper",2949,1, .@label$; // CURSED_SENTINEL monster 'map_spa$,209,218, "Cursed Gatekeeper",2949,1, .@label$; // CURSED_SENTINEL end; OnMyMobDead1: if (mobcount('map_spa$, instance_npcname("#gp_control_4") + "::OnMyMobDead1") < (1 + 'bool_double_spawn)) { deltimer instance_npcname("#gp_control_4") + "::OnSpawn1"; addtimer 2000, instance_npcname("#gp_control_4") + "::OnSpawn1"; } end; OnSpawn1: .@label$ = instance_npcname("#gp_control_4") + "::OnMyMobDead2"; monster 'map_spa$,189,192, "Cursed Gatekeeper",2949,1, .@label$; // CURSED_SENTINEL monster 'map_spa$,211,209, "Sweet Slaughter",2956,1, .@label$; // SWEET_SLAUGHTER end; OnMyMobDead2: if (mobcount('map_spa$, instance_npcname("#gp_control_4") + "::OnMyMobDead2") < 1) { enablenpc instance_npcname("Thanatos Magic Trace#dk2"); enablenpc instance_npcname("Visiting Prince#dk"); enablenpc instance_npcname("Lurid Royal Guard#dk4"); enablenpc instance_npcname("King's Corpse#dk"); enablenpc instance_npcname("Captain's Corpse#dk"); enablenpc instance_npcname("Soldier's Corpse#dk"); enablenpc instance_npcname("Soldier's Corpse#dk1"); enablenpc instance_npcname("Soldier's Corpse#dk2"); enablenpc instance_npcname("Soldier's Corpse#dk3"); enablenpc instance_npcname("Soldier's Corpse#dk4"); } end; } 1@spa,199,214,1 script Lurid Royal Guard#dk4 4_M_SAKRAYROYAL,{ .@prince$ = instance_npcname("Visiting Prince#dk"); mes "[Lurid Royal Guard]"; mes "Where is Princess Tiara?"; npctalk "Lurid Royal Guard: Where is Princess Tiara?"; next; mes "[Visiting Prince]"; mes "You are too late... but you brought what I was looking for. Thanks for your help."; npctalk "Visiting Prince: You are too late... but you brought what I was looking for. Thanks for your help.", .@prince$; next; mes "[Visiting Prince]"; mes "Cursed Thanatos Magic Trace! Are you ready to have a new master?"; npctalk "Visiting Prince: Cursed Thanatos Magic Trace! Are you ready to have a new master?", .@prince$; next; cutin "tartanos.bmp",3; mes "[Thanatos Magic Trace]"; mes "How dare you!"; npctalk "Thanatos Magic Trace: How dare you!", instance_npcname("Thanatos Magic Trace#dk2"); next; mes "[Visiting Prince]"; mes "aah, aah !!!"; npctalk "Visiting Prince: Aah, aah!!!", .@prince$; donpcevent instance_npcname("#gp_control_5") + "::OnStart"; close2; cutin "",255; end; } 1@spa,201,214,1 duplicate(Lurid Royal Guard#dk) Thanatos Magic Trace#dk2 CLEAR_NPC 1@spa,197,218,5 duplicate(Lurid Royal Guard#dk) Visiting Prince#dk 4_M_KNIGHT_SILVER 1@spa,194,214,5 duplicate(Lurid Royal Guard#dk) King's Corpse#dk 4_M_TRISTAN 1@spa,211,194,3 duplicate(Lurid Royal Guard#dk) Captain's Corpse#dk 4_M_LIEMAN 1@spa,201,198,1 duplicate(Lurid Royal Guard#dk) Soldier's Corpse#dk 4_M_DIEMAN 1@spa,197,190,1 duplicate(Lurid Royal Guard#dk) Soldier's Corpse#dk1 4_M_DIEMAN 1@spa,191,207,7 duplicate(Lurid Royal Guard#dk) Soldier's Corpse#dk2 4_M_DIEMAN 1@spa,206,209,7 duplicate(Lurid Royal Guard#dk) Soldier's Corpse#dk3 4_M_DIEMAN 1@spa,189,195,1 duplicate(Lurid Royal Guard#dk) Soldier's Corpse#dk4 4_M_DIEMAN 1@spa,1,1,1 script #gp_control_5 HIDDEN_WARP_NPC,{ end; OnStart: enablenpc instance_npcname("#gp_control_5"); disablenpc instance_npcname("Thanatos Magic Trace#dk2"); disablenpc instance_npcname("Visiting Prince#dk"); disablenpc instance_npcname("Lurid Royal Guard#dk4"); disablenpc instance_npcname("King's Corpse#dk"); disablenpc instance_npcname("Captain's Corpse#dk"); disablenpc instance_npcname("Soldier's Corpse#dk"); disablenpc instance_npcname("Soldier's Corpse#dk1"); disablenpc instance_npcname("Soldier's Corpse#dk2"); disablenpc instance_npcname("Soldier's Corpse#dk3"); disablenpc instance_npcname("Soldier's Corpse#dk4"); sleep 1000; .@label$ = instance_npcname("#gp_control_5") + "::OnMyMobDead"; monster 'map_spa$,198,218, "Torturous Redeemer",2959,1, .@label$; // TORTUROUS_REDEEMER monster 'map_spa$,198,182, "Sweet Slaughter",2956,1, .@label$; // SWEET_SLAUGHTER end; OnMyMobDead: if (mobcount('map_spa$, instance_npcname("#gp_control_5") + "::OnMyMobDead") < 1) { deltimer instance_npcname("#gp_control_4") + "::OnSpawn1"; // stop double spawn if timer is running mapannounce 'map_spa$, "The passage on the 5th floor of the palace is open.", bc_map,0xFFFF00; disablenpc instance_npcname("4th floor in the palace"); enablenpc instance_npcname("5th floor of Palace"); enablenpc instance_npcname("Princess Tiara#dk1"); enablenpc instance_npcname("Lurid Royal Guard#dk5"); killmonster 'map_spa$, instance_npcname("#gp_control_3") + "::OnMyMobDead2"; killmonster 'map_spa$, instance_npcname("#gp_control_3") + "::OnMyMobDead3"; disablenpc instance_npcname("#gp_control_3"); } end; } // 5th floor 1@spa,216,43,3 script Princess Tiara#dk1 4_F_MAYSEL,{ .@guard$ = instance_npcname("Lurid Royal Guard#dk5"); mes "[Princess Tiara]"; mes "You kept your promise."; npctalk "Princess Tiara: You kept your promise."; next; mes "[Lurid Royal Guard]"; mes "princess!"; npctalk "Lurid Royal Guard: Princess!", .@guard$; next; cutin "npc-tiara.bmp",3; mes "[Princess Tiara]"; mes "Thank you... now I can rest beside you..."; npctalk "Princess Tiara: Thank you... now I can rest beside you..."; next; mes "[Lurid Royal Guard]"; mes "No..No!!!!!"; npctalk "Lurid Royal Guard: No..No!!!!!", .@guard$; next; mes "[The voice of Princess Tiara]"; mes "I want to be with you forever in peace...forever..."; npctalk "Princess Tiara: I want to be with you forever in peace...forever..."; next; cutin "b-tiara.BMP",3; mes "[Lurid Royal Guard]"; mes "no.....Ahh ahh ahh!!!!~!"; npctalk "Lurid Royal Guard: no.....Ahh ahh ahh!!!!~!", .@guard$; next; mes "[The voice of Princess Tiara]"; mes "I love you..."; npctalk "Princess Tiara: I love you..."; cutin "",255; close2; donpcevent instance_npcname("#gp_control_6") + "::OnStart"; end; } 1@spa,213,42,7 duplicate(Lurid Royal Guard#dk) Lurid Royal Guard#dk5 4_M_SAKRAYROYAL 1@spa,1,1,1 script #gp_control_6 HIDDEN_WARP_NPC,{ end; OnStart: enablenpc instance_npcname("#gp_control_6"); disablenpc instance_npcname("Princess Tiara#dk1"); disablenpc instance_npcname("Lurid Royal Guard#dk5"); killmonster 'map_spa$, instance_npcname("#gp_control_4") + "::OnMyMobDead1"; killmonster 'map_spa$, instance_npcname("#gp_control_4") + "::OnMyMobDead2"; killmonster 'map_spa$, instance_npcname("#gp_control_5") + "::OnMyMobDead"; disablenpc instance_npcname("#gp_control_4"); disablenpc instance_npcname("#gp_control_5"); disablenpc instance_npcname("5th floor of Palace"); sleep 2000; .@label$ = instance_npcname("#gp_control_6") + "::OnMyMobDead1"; monster 'map_spa$,217,52, "Forgotten Name" ,2957,1, .@label$; // FORGOTTEN_NAME unittalk $@mobid[0], "Wake up! look at us... We are monsters?"; monster 'map_spa$,190,21, "Tarnished Oath" ,2954,1, .@label$; // COLORLESS_VOW unittalk $@mobid[0], "Sakray killed the King and tried to kill us!"; monster 'map_spa$,198,49, "Tarnished Oath" ,2954,1, .@label$; // COLORLESS_VOW unittalk $@mobid[0], "What is this..??"; monster 'map_spa$,212,28, "Fatal Days" ,2958,1, .@label$; // FATAL_DAYS unittalk $@mobid[0], "Sakray killed a princess!"; end; OnMyMobDead1: if (mobcount('map_spa$, instance_npcname("#gp_control_6") + "::OnMyMobDead1") < 1) { sleep 2000; .@label$ = instance_npcname("#gp_control_6") + "::OnMyMobDead2"; monster 'map_spa$,217,43, "Forgotten Name" ,2957,1, .@label$; // FORGOTTEN_NAME unittalk $@mobid[0], "Wake up! look at us... We are monsters?"; monster 'map_spa$,193,24, "Forgotten Name" ,2957,1, .@label$; // FORGOTTEN_NAME unittalk $@mobid[0], "Sakray..?? why.....Sakray!"; monster 'map_spa$,216,59, "Tarnished Oath" ,2954,1, .@label$; // COLORLESS_VOW unittalk $@mobid[0], "Sakray killed the King and tried to kill us!"; monster 'map_spa$,197,57, "Fatal Days" ,2958,1, .@label$; // FATAL_DAYS unittalk $@mobid[0], "Sakray killed a princess!"; } end; OnMyMobDead2: if (mobcount('map_spa$, instance_npcname("#gp_control_6") + "::OnMyMobDead2") < 1) { sleep 2000; .@label$ = instance_npcname("#gp_control_6") + "::OnMyMobDead3"; monster 'map_spa$,193,39, "Forgotten Name" ,2957,1, .@label$; // FORGOTTEN_NAME unittalk $@mobid[0], "Wake up! look at us... We are monsters?"; monster 'map_spa$,212,34, "Forgotten Name" ,2957,1, .@label$; // FORGOTTEN_NAME unittalk $@mobid[0], "Sakray..?? why.....Sakray!"; monster 'map_spa$,201,64, "Tarnished Oath" ,2954,1, .@label$; // COLORLESS_VOW unittalk $@mobid[0], "Sakray killed the King and tried to kill us!"; monster 'map_spa$,175,44, "Fatal Days" ,2958,1, .@label$; // FATAL_DAYS unittalk $@mobid[0], "Sakray killed a princess!"; } end; OnMyMobDead3: if (mobcount('map_spa$, instance_npcname("#gp_control_6") + "::OnMyMobDead3") < 1) { sleep 2000; monster 'map_spa$,200,45, "Torturous Redeemer" ,2961,1, instance_npcname("#gp_control_6") + "::OnMyMobDead4"; // E_TORTUROUS_REDEEMER unittalk $@mobid[0], "Thanatos Magic Trace! I will destroy you if I can't have you... Oh no! How could this be?"; sleep 5000; killmonster 'map_spa$, instance_npcname("#gp_control_6") + "::OnMyMobDead4"; enablenpc instance_npcname("Sakray#dk"); enablenpc instance_npcname("Thanatos Magic Trace#dk3"); disablenpc instance_npcname("#gp_control_6"); } end; OnMyMobDead4: end; } 1@spa,196,44,5 script Sakray#dk 4_M_SAKRAY,{ mes "[Lurid Royal Guard]"; mes "Are you satisfied..? Thanatos Magic Trace?"; npctalk "Lurid Royal Guard: Are you satisfied..? Thanatos Magic Trace?"; next; mes "[Thanatos Magic Trace]"; mes "I need more blood..Sakray, offer me his blood."; npctalk "Thanatos Magic Trace: I need more blood..Sakray, offer me his blood.", instance_npcname("Thanatos Magic Trace#dk3"); next; mes "[Sakray]"; mes "Okay, that is good. A traveller. Did you see?"; npctalk "Sakray: Okay, that is good. A traveller. Did you see?"; next; mes "[" + strcharinfo(0) + "]"; mes "Sakray, what do you want? Sympathy? Or is it a trap?"; unittalk getcharid(3), "" + strcharinfo(0) + " : Sakray, what do you want? Sympathy? Or is it a trap?"; next; mes "[Sakray]"; mes "No... I do not need to make any effort to catch a novice."; npctalk "Sakray: No... I do not need to make any effort to catch a novice."; next; mes "[" + strcharinfo(0) + "]"; mes "If so... then why...?"; unittalk getcharid(3), "" + strcharinfo(0) + " : If so... then why...?"; next; cutin "cry-b.bmp",2; mes "[Sakray]"; mes "I wanted to get rid of a piece of humanity inside of me through you."; npctalk "Sakray: I wanted to get rid of a piece of humanity inside of me through you."; next; mes "[Sakray]"; mes "I am quite satisfied with the result."; npctalk "Sakray: I am quite satisfied with the result."; next; mes "[Thanatos Magic Trace]"; mes "Sakray, offer the blood to me now!"; npctalk "Thanatos Magic Trace: Sakray, offer the blood to me now!", instance_npcname("Thanatos Magic Trace#dk3"); next; mes "[Sakray]"; mes "If you were me, what would you do?"; npctalk "Sakray: If you were me, what would you do?"; next; mes "[Sakray]"; mes "Can you set yourself free from this curse?"; npctalk "Sakray: Can you set yourself free from this curse?"; next; mes "[" + strcharinfo(0) + "]"; mes "..."; unittalk getcharid(3), "" + strcharinfo(0) + " : ..."; next; mes "[Sakray]"; mes "Heh heh... I will keep watching you until the day comes when you are old enough."; npctalk "Sakray: Heh heh... I will keep watching you until the day comes when you are old enough."; next; mes "[Sakray]"; mes "I am willing to hunt you later for Thanatos."; npctalk "Sakray: I am willing to hunt you later for Thanatos."; cutin "",255; next; mes "[Sakray]"; mes "Farewell then."; npctalk "Sakray: Farewell then."; close2; donpcevent instance_npcname("#tb") + "::OnStart"; end; } 1@spa,196,46,1 script #tb CLEAR_NPC,{ end; OnStart: disablenpc instance_npcname("Sakray#dk"); disablenpc instance_npcname("Thanatos Magic Trace#dk3"); enablenpc instance_npcname("#tb"); enablenpc instance_npcname("#sv"); enablenpc instance_npcname("#tv"); initnpctimer; end; OnTimer3000: npctalk "Voice of Princess Tiara : What can I do for you?"; end; OnTimer8000: npctalk "Voice of Sakray : I will always stand by you. Please rest beside me.", instance_npcname("#sv"); end; OnTimer13000: npctalk "Thanatos Magic Trace: Sakray, do not forget the covenant of blood between us.", instance_npcname("#tv"); end; OnTimer17000: npctalk "Thanatos Magic Trace: Your soul is mine until you find the blood that satisfies me...", instance_npcname("#tv"); end; OnTimer22000: npctalk "Voice of Sakray : Rest in the shadow with me.", instance_npcname("#sv"); end; OnTimer25000: npctalk "Voice of Sakray : In the dark forever...", instance_npcname("#sv"); end; OnTimer28500: disablenpc instance_npcname("#tb"); disablenpc instance_npcname("#sv"); disablenpc instance_npcname("#tv"); mapannounce 'map_spa$, "It is time to leave the Ghost Palace.", bc_map,0xFFFF00; enablenpc instance_npcname("Way out of Palace"); enablenpc instance_npcname("King#dk11"); end; } 1@spa,195,41,1 duplicate(Lurid Royal Guard#dk) Thanatos Magic Trace#dk3 CLEAR_NPC 1@spa,198,43,1 duplicate(Lurid Royal Guard#dk) #sv CLEAR_NPC 1@spa,196,41,1 duplicate(Lurid Royal Guard#dk) #tv CLEAR_NPC 1@spa,204,29,1 script King#dk11 4_M_RUSKING,{ disable_items; mes "[King]"; mes "Hey there, are you alive?"; mes "I did not expect to meet someone who is still alive."; next; mes "[King]"; mes "Do you possibly have the ^006400Gray Shard^000000?"; mes "Can you give it to me?"; mes "The memories of the faithful royal guard"; mes "and the memories of everyone he loved"; mes "are contained inside of these shards."; next; mes "[King]"; mes "Will you give the ^006400Gray Shard^000000 to me?"; mes "The guilt is eating my soul."; mes "My soul is stuck within the Ghost Palace."; next; mes "[King]"; mes "I am collecting Sakray's abandoned memories from these shards."; next; mes "[King]"; mes "If you give any ^006400Gray Shard^000000s to me, I can make equipment for you."; next; mes "[King]"; mes "The cursed knight..."; mes "Please help me save the soul of Sakray."; next; setarray .@item_name$[0], "Thanatos Sword", "Thanatos Great Sword", "Thanatos Spear", "Thanatos Long Spear", "Thanatos Staff", "Thanatos Two-handed Staff", "Thanatos Bow", "Thanatos Dagger", "Thanatos Katar", "Thanatos Knuckle", "Thanatos Hammer", "Thanatos Axe", "Thanatos Violin", "Thanatos Whip", "Gray Shield", "Gray Armor", "Gray Robe", "Gray Cloak", "Gray Shoes", "Gray Helmet"; setarray .@items_list[0],13441,21009,1438,1496,1669,2023,18119,13093,28000,1836,16028,28100,1933,1988,2187,15090,15091,20721,22033,18820; for ( .@i = 0; .@i < 20; .@i++ ) .@menu$ += .@item_name$[.@i] + ":"; .@menu$ += "Cancel"; while(true) { .@s = select(.@menu$) - 1; if (.@s == 20) { mes "[King]"; mes "Someday, Sakray will"; mes "get out of this curse for sure."; mes "I believe"; mes "^006400Gray Shard^000000s are the only method"; mes "to save him...."; close; } .@cost = ( .@s > 13 ? 200 : 200 ); mes "[King]"; mes "To make a ^FF0000" + .@item_name$[.@s] + "^000000"; mes "I need " + .@cost + " ^006400Gray Shard^000000."; next; if (select( "Cancel", "Hand over " + .@cost + " Gray Shard." ) == 1) { mes "[King]"; mes "Someday, Sakray will"; mes "get out of this curse for sure."; next; continue; } if (countitem(6672) < .@cost) { mes "[King]"; mes "You do not have enough ^006400Gray Shard^000000"; mes "to make a ^FF0000" + .@item_name$[.@s] + "^000000."; mes "I need " + .@cost + " ^006400Gray Shard^000000."; next; continue; } mes "[King]"; mes "I will make a ^FF0000" + .@item_name$[.@s] + "^000000"; mes "with " + .@cost + " ^006400Gray Shard^000000."; next; mes "You see a light through the folded hands of the king and it gradually takes on a shape."; next; mes "[King]"; mes "All right, it is done."; mes "Take this ^FF0000" + .@item_name$[.@s] + "^000000"; mes "to confront Sakray and Thanatos."; next; mes "[King]"; mes "The power requires a sacrifice."; mes "Please be careful..."; delitem 6672,.@cost;// Gray Shard getitem .@items_list[.@s],1; close; } } 1@spa,210,28,0 script Way out of Palace WARPNPC,2,2,{ end; OnTouch_: mes "It is time to leave the Ghost Palace."; mes "Everything is now complete"; mes "and will vanish.."; close2; if (isbegin_quest(1263) == 2) getitem 6672,1;// Gray Shard else { setquest 1263;// Cursed Swordman completequest 1263; getexp 900000,500000; getitem 6672,2;// Gray Shard } warp "prontera",178,149; end; } 1@spa,41,217,0 warp The second floor of Palace 2,2,1@spa,114,120 1@spa,117,137,0 warp 3rd floor in the palace 2,2,1@spa,60,43 1@spa,54,28,0 warp 4th floor in the palace 2,2,1@spa,218,186 1@spa,178,186,0 warp 5th floor of Palace 2,2,1@spa,186,57
-
Thanks, Elys, it works like a magic
-
Hello, I have a problem in making doram race character. I configured my server having a Doram in Pre-renewal server. However, when trying to create a new character it said that the character creation is denied. So how to make Doram can be made in character creation? Thanks in advance.
-
Thanks it works like a magic.. can I ask one more favor? How to make player could inflict a certain negative status when using the skill? ex: Rogue use backstab may inflict stun.
-
Thanks sir emistry
-
Hello, I'm sorry I ask a newbie question. I tried editing itemsthat would have different effects based on the class using this item. However, when I tried to implement it. The server notified that there is a wrong effect. I beg if there are friends here who can provide solutions for this script? Thank you in advance.
20507,C_Poring_Bag,Costume Poring Bag,4,0,,0,,0,,0,0xFFFFFFFF,63,2,8192,,1,0,16,{ if(BaseJob==Job_Rogue) bonus2 bSkillAtk,"RG_RAID",25; bonus2 bSkillAtk,"RG_BACKSTAP",25; bonus5 bAutoSpell,"NPC_WIDESTONE",1,70,BF_WEAPON,0; else if(BaseJob==Job_Knight) bonus bAspdRate,10; bonus bCritical,15; bonus2 bSkillAtk,"KN_PIERCE",30; bonus2 bSkillAtk,"KN_BRANDISHSPEAR",30; bonus2 bSkillAtk,"KN_SPEARSTAB",30; bonus2 bSkillAtk,"KN_SPEARBOOMERANG",30; else if(BaseJob==Job_Crusader) bonus2 bSkillAtk,"CR_GRANDCROSS",30; bonus2 bSkillAtk,"CR_SHIELDBOOMERANG",10; bonus2 bSubClass,Class_Boss,25; bonus2 bSubSize,Size_Large,25; else if(BaseJob==Job_Monk) bonus3 bAutoSpell,"MO_CALLSPIRITS",1,20; bonus bHit,30; bonus bAspdRate,5; bonus2 bSkillAtk,"MO_COMBOFINISH",40; bonus2 bSkillCooldown,"MO_EXTREMITYFIST",20000; else if(BaseJob==Job_Priest) bonus bMaxSPrate,25; bonus2 bSkillAtk,"PR_MAGNUS",30; bonus2 bVariableCastrate,"PR_MAGNUS",-30; bonus bMatkRate,20; skill "ALL_ODINS_POWER",1; else if(BaseJob==Job_Hunter) bonus bCritical,15; bonus2 bSkillAtk,"HT_BLITZBEAT",30; bonus3 bAutoSpell,"HT_BLITZBEAT",5,500; bonus bLongAtkRate,10; else if(BaseJob==Job_Bard) bonus bLongAtkRate,10; bonus2 bSkillAtk,"BA_MUSICALSTRIKE",300; bonus4 bAutoSpellOnSkill,"BA_MUSICALSTRIKE","BA_PANGVOICE",1,1000; else if(BaseJob==Job_Dancer) bonus bLongAtkRate,10; bonus2 bSkillAtk,"DC_THROWARROW",300; bonus4 bAutoSpellOnSkill,"DC_THROWARROW","DC_WINKCHARM",1,1000; else if(BaseJob==Job_Wizard) bonus2 bSkillAtk,"WZ_EARTHSPIKE",40; bonus2 bVariableCastrate,"WZ_EARTHSPIKE",-25; bonus4 bAutoSpellOnSkill,"WZ_HEAVENDRIVE","WZ_EARTHSPIKE",5,2500; bonus2 bSubEle,Ele_Neutral,15; else if(BaseJob==Job_Sage) bonus2 bSkillAtk,"MG_THUNDERSTORM",40; bonus2 bVariableCastrate,"MG_THUNDERSTORM",-10; bonus bLongAtkDef,15; bonus2 bSkillAtk,"MG_NAPALMBEAT",40; else if(BaseJob==Job_Blacksmith) bonus bSplashRange,1; bonus bBaseAtk,50; bonus2 bSubEle,Ele_Neutral,15; bonus2 bSubEle,Ele_Fire,15; bonus2 bSkillAtk,"MC_MAMMONITE",20; else if(BaseJob==Job_Alchemist) bonus2 bSkillAtk,"AM_ACIDTERROR",20; bonus2 bSkillAtk,"AM_DEMONSTRATION",20; bonus2 bAddMonsterDropItem,929,2500; else if(BaseJob==Job_Assassin) bonus bAspdRate,5; bonus bCritAtkRate,20; bonus2 bIgnoreDefClassRate,Class_Normal,25; bonus2 bSkillAtk,"AS_SPLASHER",25; },{},{}
-
-
Hello, Just cut to the chase. I have a problem with the fluxcp. Before, everything runs smoothly. However, when I changed the 'ServerName' => 'FluxRO', in the server.php. The control panel/website always show Install and Update panel. My question is how to resolve this matter, I mean how to make it show the normal flux cp control panel?
-
Thanks again Haruka
-
Hi, I have a problem in adding item script. I intend to make a certain item could kill the user for certain chance ( for event purpose ).
12233,Kvass,Kvass,0,20,,200,,,,,0xFFFFFFFF,7,2,,,,,,{ skilleffect "AC_CONCENTRATION",0; atcommand "@kill",50; },{},{}
I want to make this Kvass could instakill the user for 50% chance.
I hope someone can help, thanks anyway
-
Thanks Haruka :)
-
Hello, just jump into it. I intended to add new staff/admin account so I also edited the clientinfo.xml hoping that the sprite would occur. However it does not. So I hope my rathena fellows can find out what wrong with my clientinfo.xml. Thanks.
<?xml version="1.0" encoding="euc-kr" ?> <clientinfo> <desc>Ragnarok Client Information</desc> <servicetype>korea</servicetype> <servertype>primary</servertype> <connection> <display>Ragnarok</display> <address>127.0.0.0</address> <port>6900</port> <version>55</version> <langtype>0</langtype> <registrationweb>www.ragnarok.com</registrationweb> <yellow> <admin>2000000</admin> <admin>2000001</admin> <admin>2000002</admin> <admin>2000003</admin> <admin>2000004</admin> <admin>2000005</admin> <admin>2000006</admin> <admin>2000007</admin> <admin>2000008</admin> <admin>2000009</admin> </yellow> <loading> <image>loading00.jpg</image> <image>loading01.jpg</image> <image>loading02.jpg</image> <image>loading03.jpg</image> <image>loading04.jpg</image> <image>loading05.jpg</image> <image>loading06.jpg</image> </loading> </connection> </clientinfo>
-
Hello, I have a problem with my server since I can't use every MAGIC GEAR oriented skill even though I had fulfilled every requirement for the skill. For example, I tried to use KNUCKLE BOOTS in MADO mode but it says that the skill cannot be used without MADO gear.. -__-. I hope someone can explain to me what happened here. I would be grateful
-
How to disable certain class from this jobmaster script, for example, soul linker? since when I edit the menu, the taekwon still can access the soul linker option. I would be grateful if someone can help me.
//===== rAthena Script ======================================= //= Job Master //===== Description: ========================================= //= A fully functional job changer. //===== Additional Comments: ================================= //= 1.0 Initial script. [Euphy] //= 1.1 Fixed reset on Baby job change. //= 1.2 Added Expanded Super Novice support and initial Kagerou/Oboro support. //= 1.3 Kagerou/Oboro added. //= 1.4 Rebellion added. //= 1.5 Added option to disable RebirthClass. [mazvi] //= 1.6 Added option to get job related equipment on change. [Braniff] //= 1.7 Readability changes. Also added BabyExpanded and BabySummoner classes. [Jey] //= 1.8 Added option to disable Baby Novice Only but Baby Class can be Enabled [mazvi] //= 1.9 Migrate/Integrate to Global Functions Platinum Skills. [mazvi] //============================================================ prontera,153,193,6 script Job Master 123,{ function Get_Job_Equip; // Checks if the Player has the required level. // closes if not, returns if yes function Require_Level { if (BaseLevel < getarg(0) || JobLevel < getarg(1)) { .@blvl = getarg(0) - BaseLevel; .@jlvl = getarg(1) - JobLevel; mes "Level requirement:"; mes ((getarg(0)>1)? "^bb0000"+getarg(0)+"^000000 (^bb0000Base^000000) / ":"")+"^00bb00"+ getarg(1)+"^000000 (^00bb00Job^000000)"; mes "You need " + ((.@blvl > 0) ? "^bb0000"+.@blvl+"^000000 more base levels " + ((.@jlvl > 0) ? "and " : "") : "") + ((.@jlvl > 0) ? "^00bb00"+.@jlvl+"^000000 more job levels " : "") + "to continue."; close; } return; } // Checks if the given eac is a baby class function Is_Baby { return ((getarg(0, eaclass())&EAJL_BABY)>0); } // Checks if the player can change to third class. // Note: This does not include the level checks. function Can_Change_Third { // To change to third class you either need to be: // * Second Class // * Transcendent Second Class // * Baby Second Class if( !.ThirdClass ) return false; // Third job change disabled if( !(eaclass()&EAJL_2) ) return false; // Not second Class if( eaclass()&EAJL_THIRD ) return false; // Already Third Class if( roclass(eaclass()|EAJL_THIRD) < 0 ) return false; // Job has no third Class if( (eaclass()&EAJ_UPPERMASK) == EAJ_SUPER_NOVICE ) return false; // Exp. Super Novice equals 3rd Cls, but has it's own case if( Is_Baby() && (!.BabyClass || !.BabyThird) ) return false; // No Baby (Third) change allowed return true; } function Can_Rebirth { // To rebirth, you need to be: // * Second Class if( !.RebirthClass ) return false; // Rebirth disabled if( !(eaclass()&EAJL_2) ) return false; // Not second Class if( eaclass()&EAJL_UPPER ) return false; // Already Rebirthed if( roclass(eaclass()|EAJL_UPPER) < 0 ) return false; // Job has no transcended class if( Is_Baby() && !.BabyClass ) return false; // No Baby changes allowed return true; } // Checks if the given eac is a first class function Is_First_Cls { return (getarg(0) <= EAJ_TAEKWON); } function Check_Riding { // Note: Why we should always check for Riding: // Mounts are considered as another class, which // would make this NPC bigger just to handle with // those special cases. if (checkfalcon() || checkcart() || checkriding() || ismounting()) { mes "Please remove your " + ((checkfalcon()) ? "falcon" : "") + ((checkcart()) ? "cart" : "") + ((checkriding()) ? "Peco" : "") + ((ismounting()) ? "mount" : "") + " before proceeding."; close; } return; } function Check_SkillPoints { if (.SkillPointCheck && SkillPoint) { mes "Please use all your skill points before proceeding."; close; } return; } // addJobOptions is essentially the same like // setarray .@array[getarraysize(.@array)],opt1,opt2,...; // It's just easier to read, since we're using it very often function Job_Options { .@argcount = getargcount(); .@arr_size = getarraysize(getarg(0)); for( .@i = 1; .@i < .@argcount; .@i++) { setarray getelementofarray(getarg(0), .@arr_size++),getarg(.@i); } } // Begin of the NPC mes .NPCName$; Check_Riding(); Check_SkillPoints(); // initialisation deletearray .@job_opt[0],getarraysize(.@job_opt); .@eac = eaclass(); .@third_possible = Can_Change_Third(); .@rebirth_possible = Can_Rebirth(); .@first_eac = .@eac&EAJ_BASEMASK; .@second_eac = .@eac&EAJ_UPPERMASK; // Note: These are already set in pc.c // BaseClass = roclass(.@eac&EAJ_BASEMASK) which is the players First Class // BaseJob = roclass(.@eac&EAJ_UPPERMASK) which is the players Second Class //dispbottom "Debug: eac ("+.@eac+"), third ("+.@third_possible+"), rebirth("+.@rebirth_possible+"), BaseClass ("+BaseClass+"), BaseJob ("+BaseJob+")"; // From here on the jobmaster checks the current class // and fills the the array `.@job_opt` with possible // job options for the player. if( .@rebirth_possible ) { // Rebirth option (displayed on the top of the menu) Require_Level(.Req_Rebirth[0], .Req_Rebirth[1]); Job_Options(.@job_opt, Job_Novice_High); } if( .@third_possible ) { // Third Job change (displayed below rebirth) Require_Level(.Req_Third[0], .Req_Third[1]); Job_Options(.@job_opt, roclass(.@eac|EAJL_THIRD)); } if (.SecondExpanded && (.@eac&EAJ_UPPERMASK) == EAJ_SUPER_NOVICE && // is Super Novice !(eaclass()&EAJL_THIRD) ) { // not already Expanded SN // (Baby) Super Novice to Expanded (Baby) Super Novice if( !Is_Baby(.@eac) || (.BabyClass && .BabyExpanded) ) { // .BabyClass & .BabyExpanded must be enabled if the is a baby Require_Level(.Req_Exp_SNOVI[0], .Req_Exp_SNOVI[1]); Job_Options(.@job_opt,roclass(.@eac|EAJL_THIRD)); // Expanded SN is "third" cls } } if (.SecondExpanded && ((.@eac&(~EAJL_BABY)) == EAJ_NINJA || // is (Baby) Ninja (.@eac&(~EAJL_BABY)) == EAJ_GUNSLINGER)) { // is (Baby) Gunslinger // (Baby) Ninja to (Baby) Kagerou / Oboro // (Baby) Gunslinger to (Baby) Rebellion if( !Is_Baby(.@eac) || (.BabyClass && .BabyExpanded) ) { // .BabyClass & .BabyExpanded must be enabled if the is a baby Require_Level(.Req_Exp_NJ_GS[0], .Req_Exp_NJ_GS[1]); // Kagerou, Oboro, Rebellion are considered as a 2-1 class Job_Options(.@job_opt, roclass(.@eac|EAJL_2_1)); } } // Player is Job_Novice, Job_Novice_High or Job_Baby if (.@first_eac == EAJ_NOVICE && .@second_eac != EAJ_SUPER_NOVICE) { // MAPID_NOVICE, MAPID_SUPER_NOVICE, MAPID_NOVICE_HIGH, MAPID_BABY Require_Level(.Req_First[0], .Req_First[1]); switch(Class) { case Job_Novice: // First job change Job_Options(.@job_opt,Job_Swordman, Job_Mage, Job_Archer, Job_Acolyte, Job_Merchant, Job_Thief, Job_Super_Novice, Job_Taekwon, Job_Gunslinger, Job_Ninja); if( .BabyNovice ) Job_Options(.@job_opt, Job_Baby); break; case Job_Novice_High: // Job change after rebirth if( .LastJob && lastJob ) Job_Options(.@job_opt, roclass((eaclass(lastJob)&EAJ_BASEMASK)|EAJL_UPPER)); else Job_Options(.@job_opt, Job_Swordman_High, Job_Mage_High, Job_Archer_High, Job_Acolyte_High, Job_Merchant_High, Job_Thief_High); break; case Job_Baby: if( !.BabyClass ) break; // First job change as a baby Job_Options(.@job_opt, Job_Baby_Swordman, Job_Baby_Mage, Job_Baby_Archer,Job_Baby_Acolyte, Job_Baby_Merchant, Job_Baby_Thief); if( .BabyExpanded ) Job_Options(.@job_opt, Job_Super_Baby, Job_Baby_Taekwon, Job_Baby_Gunslinger, Job_Baby_Ninja); if( .BabySummoner ) Job_Options(.@job_opt, Job_Baby_Summoner); break; default: mes "An error has occurred."; close; } } else if( Is_First_Cls(.@eac) || // First Class Is_First_Cls(.@eac&(~EAJL_UPPER)) || // Trans. First Cls (.BabyClass && Is_First_Cls(.@eac&(~EAJL_BABY))) ) { // Baby First Cls // Player is First Class (not Novice) // most jobs should have two options here (2-1 and 2-2) .@class1 = roclass(.@eac|EAJL_2_1); // 2-1 .@class2 = roclass(.@eac|EAJL_2_2); // 2-2 // dispbottom "Debug: Classes: class1 ("+.@class1+"), class2 ("+.@class2+")"; if(.LastJob && lastJob && (.@eac&EAJL_UPPER)) { // Player is rebirth Cls and linear class changes are enforced Require_Level(.Req_Second[0], .Req_Second[1]); Job_Options(.@job_opt, lastJob + Job_Novice_High); } else { // Class is not enforced, player can decide. if( .@class1 > 0 ) { // 2-1 Require_Level(.Req_Second[0], .Req_Second[1]); Job_Options(.@job_opt, .@class1); } if( .@class2 > 0 ) { // 2-2 Require_Level(.Req_Second[0], .Req_Second[1]); Job_Options(.@job_opt, .@class2); } } } // Displaying the Job Menu defined by .@job_opt. // .@job_opt should not be changed below this line. function Job_Menu; Job_Menu(.@job_opt); close; // Displays the job menu function Job_Menu { // getarg(0) is the .@job_opt array holding all available job changes. function Confirm_Change; while(true) { .@opt_cnt = getarraysize(getarg(0)); if( .@opt_cnt <= 0 ) { mes "No more jobs are available."; close; } .@selected = 0; // Just a single job class given, no select needed if (.@opt_cnt > 1) { // Multiple job classes given. Select one and save it to .@class // After that confirm .@class mes "Select a job."; .@menu$ = ""; for (.@i = 0; .@i < .@opt_cnt; .@i++) { if( getelementofarray(getarg(0), .@i) == Job_Novice_High) .@jobname$ = "^0055FFRebirth^000000"; else .@jobname$ = jobname(getelementofarray(getarg(0), .@i)); .@menu$ = .@menu$ + " ~ " + .@jobname$ + ":"; } .@menu$ = .@menu$+" ~ ^777777Cancel^000000"; .@selected = select(.@menu$) - 1; if( .@selected < 0 || .@selected >= .@opt_cnt ) close; next; mes .NPCName$; } .@class = getelementofarray(getarg(0), .@selected); if ((.@class == Job_Super_Novice || .@class == Job_Super_Baby) && BaseLevel < .SNovice) { // Special Level Requirement because Super Novice and // Super Baby can both be selected in one of the first class // changes. That's why the Level Requirement is after and not before // the selection. mes "A base level of " + .SNovice + " is required to turn into a " + jobname(.@class) + "."; return; } // Confirm the Class Confirm_Change(.@class, .@opt_cnt > 1); next; mes .NPCName$; } return; } // Executes the actual jobchange and closes. function Job_Change { .@to_cls = getarg(0); next; mes .NPCName$; mes "You are now " + callfunc("F_InsertArticle", jobname(.@to_cls)) + "!"; if (.@to_cls == Job_Novice_High && .LastJob) lastJob = Class; // Saves the lastJob for rebirth jobchange .@to_cls; if (.@to_cls == Job_Novice_High) resetlvl(1); else if (.@to_cls == Job_Baby) { resetstatus; resetskill; set SkillPoint,0; } specialeffect2 EF_ANGEL2; specialeffect2 EF_ELECTRIC; if (.Platinum) callfunc "F_GetPlatinumSkills"; if (.GetJobEquip) Get_Job_Equip(); close; // Always closes after the change } function Confirm_Change { // Player confirms he want to change into .@class .@class = getarg(0, -1); .@back = getarg(1, false); if( .@class < 0 ) { mes "Unknown Class Error."; close; } mes "Do you want to change into ^0055FF"+jobname(.@class)+"^000000 class?"; .@job_option$ = " ~ Change into ^0055FF"+jobname(.@class)+"^000000 class"; if( .@class == Job_Novice_High) .@job_option$ = " ~ ^0055FFRebirth^000000"; if (select(.@job_option$+": ~ ^777777" + ((.@back) ?"Go back" : "Cancel") + "^000000") == 1) { Job_Change(.@class); } if (!.@back) close; // "Cancel" pressed return; } // Function which gives a job related item to the player // the items are the rewards from the original job change quests function Get_Job_Equip { // Note: The item is dropping, when the player can't hold it. // But that's better than not giving the item at all. .@eac = eaclass(); if( .@eac&EAJL_THIRD ) { // Third Class Items getitem 2795,1; // Green Apple Ring for every 3rd Class switch(BaseJob) { // BaseJob of Third Cls // For Normal Third, Baby Third and Transcended Third Cls case Job_Knight: getitem 5746,1; break; // Rune Circlet [1] case Job_Wizard: getitem 5753,1; break; // Magic Stone Hat [1] case Job_Hunter: getitem 5748,1; break; // Sniper Goggle [1] case Job_Priest: getitem 5747,1; break; // Mitra [1] case Job_Blacksmith: getitem 5749,1; break; // Driver Band [1] case Job_Assassin: getitem 5755,1; break; // Silent Executor [1] case Job_Crusader: getitem 5757,1; break; // Dip Schmidt Helm [1] case Job_Sage: getitem 5756,1; break; // Wind Whisper [1] case Job_Bard: getitem 5751,1; break; // Maestro Song's Hat [1] case Job_Dancer: getitem 5758,1; break; // Dying Swan [1] case Job_Monk: getitem 5754,1; break; // Blazing Soul [1] case Job_Alchemist: getitem 5752,1; break; // Midas Whisper[1] case Job_Rogue: getitem 5750,1; // Shadow Handicraft [1] getitem 6121,1; // Makeover Brush getitem 6122,1; break; // Paint Brush } } else if (.@eac&EAJL_2) { // Second Class (And not Third Class) switch(BaseJob) { // Second Class case Job_Knight: getitem 1163,1; break; // Claymore [0] case Job_Priest: getitem 1522,1; break; // Stunner [0] case Job_Wizard: getitem 1617,1; break; // Survivor's Rod [0] case Job_Blacksmith: getitem 1360,1; break; // Two-Handed-Axe [1] case Job_Hunter: getitem 1718,1; break; // Hunter Bow [0] case Job_Assassin: getitem 1254,1; break; // Jamadhar [0] case Job_Crusader: getitem 1410,1; break; // Lance [0] case Job_Monk: getitem 1807,1; break; // Fist [0] case Job_Sage: getitem 1550,1; break; // Book [3] case Job_Rogue: getitem 1222,1; break; // Damascus [1] case Job_Alchemist: getitem 1126,1; break; // Saber [2] case Job_Bard: getitem 1907,1; break; // Guitar [0] case Job_Dancer: getitem 1960,1; break; // Whip [1] case Job_Super_Novice: getitem 1208,1; break; // Main Gauche [4] case Job_Gunslinger: getitem 13101,1; break; // Six Shooter [2] case Job_Ninja: getitem 13010,1; break; // Asura [2] case Job_Star_Gladiator: getitem 1550,1; break; // Book [3] case Job_Soul_Linker: getitem 1617,1; break; // Survivor's Rod [0] } } else { // Neither Second or Third Cls // => First Cls or not covered by the switch switch(BaseClass) { // First Class case Job_Swordman: getitem 1108,1; break; // Blade [4] case Job_Mage: getitem 1602,1; break; // Rod [4] case Job_Archer: getitem 1705,1; break; // Composite Bow [4] case Job_Acolyte: getitem 1505,1; break; // Mace [4] case Job_Merchant: getitem 1302,1; break; // Axe [4] case Job_Thief: getitem 1208,1; break; // Main Gauche [4] } } return; } OnInit: // Initialisation, do not edit these .NPCName$ = "[Job Master]"; // Settings .ThirdClass = true; // Enable third classes? .RebirthClass = true; // Enable rebirth classes? .SecondExpanded = true; // Enable new expanded second classes: Ex. Super Novice, Kagerou/Oboro, Rebellion? .BabyNovice = true; // Enable Baby novice classes? Disable it if you like player must have parent to get job baby. .BabyClass = true; // Enable Baby classes? .BabyThird = true; // Enable Baby third classes? .BabyExpanded = true; // Enable Baby Expanded classes: Ex. Baby Ninja, Baby Taekwon, etc. .BabySummoner = true; // Enable Baby Summoner? .LastJob = true; // Enforce linear class changes? .SkillPointCheck = true; // Force player to use up all skill points? .Platinum = true; // Get platinum skills automatically? .GetJobEquip = false; // Get job equipment (mostly weapons) on job change? // Level Requirements setarray .Req_First[0],1,10; // Minimum base level, job level to turn into 1st class setarray .Req_Second[0],1,40; // Minimum base level, job level to turn into 2nd class setarray .Req_Rebirth[0],99,50; // Minimum base level, job level to rebirth setarray .Req_Third[0],99,50; // Minimum base level, job level to change to third class setarray .Req_Exp_NJ_GS[0],99,70; // Minimum base level, job level to turn into Expanded Ninja and Gunslinger setarray .Req_Exp_SNOVI[0],99,99; // Minimum base level, job level to turn into Expanded Super Novice .SNovice = 45; // Minimum base level to turn into Super Novice // Setting adjustments by PACKETVER if( PACKETVER < 20161207 ) { if( .BabyExpanded ) debugmes "jobmaster: BabyExpanded is disabled due to outdated PACKETVER."; if( .BabySummoner ) debugmes "jobmaster: BabySummoner is disabled due to outdated PACKETVER."; .BabyExpanded = false; .BabySummoner = false; } end; }
-
59 minutes ago, crazyarashi said:
if (rand(1,10) == 7){ 10% TO if (rand(1,10) >= 6){ 40% if (rand(1,10) == 1) { 10% dispbottom "[Fishing] Kraken drags your feet!!!"; if (rand(1,10) >= 5) { 50% dispbottom "[Fishing] Kraken drags your feet!!!";
Well if you apply basic math to it you can just simply increase it or reduce it.
it means, if I want to make it 20%, it would be like this, if (rand(1,10) >=8) ?
thanks for your respond..
How to make mob only gives item for party in the same screen? [SOLVED]
in Scripting Support
Posted
Thanks @Mabuhay , the configuration within 15x15 cell is worked.. and thank you @Diospectre for always helping me