Jump to content

Rizz

Members
  • Posts

    72
  • Joined

  • Last visited

Everything posted by Rizz

  1. Thanks @Mabuhay , the configuration within 15x15 cell is worked.. and thank you @Diospectre for always helping me
  2. 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) I have tested, yours also worked well but Ifound that the other party member in different screen/died member stilll get the item. ?
  3. 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.
  4. 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)
  5. Thanks, 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
  6. 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;
  7. 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..
  8. 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.
  9. 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..
  10. 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; }
  11. 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
  12. 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.
  13. 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.
  14. 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; },{},{}
  15. 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?
  16. 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 ?
  17. 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>
  18. 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 ?
  19. 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; }
  20. it means, if I want to make it 20%, it would be like this, if (rand(1,10) >=8) ? thanks for your respond..
×
×
  • Create New...