//모든 NPC에게 영향을 주는 패러미터를 세팅한다. class default_npc { parameter: int DesirePqSize = 50; int FavorListSize = 30; //디자이어 자연 감소량 float IdleDesire_DecayRatio = 0.0; float MoveAround_DecayRatio = 0.0; float DoNothing_DecayRatio = 0.0; float Attack_DecayRatio = 0.0; float Chase_DecayRatio = 0.0; float Flee_DecayRatio = 0.0; float GetItem_DecayRatio = 0.0; float Follow_DecayRatio = 0.0; float Decaying_DecayRatio = 0.0; float MoveToWayPoint_DecayRatio = 0.0; float UseSkill_DecayRatio = 0.0; float MoveTo_DecayRatio = 0.0; float EffectAction_DecayRatio = 0.0; //디자이어의 부스트값 //부스트값이란 디자이어가 최상위 디자이어가 됐을 때 추가되는 디자이어값이다. float IdleDesire_BoostValue = 0.0; float MoveAround_BoostValue = 0.0; float DoNothing_BoostValue = 0.0; float Attack_BoostValue = 0.0; float Chase_BoostValue = 0.0; float Flee_BoostValue = 0.0; float GetItem_BoostValue = 0.0; float Follow_BoostValue = 0.0; float Decaying_BoostValue = 0.0; float MoveToWayPoint_BoostValue = 0.0; float UseSkill_BoostValue = 0.0; float MoveTo_BoostValue = 0.0; float EffectAction_BoostValue = 0.0; handler: EventHandler NO_DESIRE() { } EventHandler TALK_SELECTED(talker) { ShowPage(talker, "noquest.htm"); } } ///////////////////////////////////////////////////////// /////////마을 NPC //마을에 돌아다니는 사람 class citizen : default_npc { parameter: string fnHi = "chi.htm"; //001 handler: EventHandler TALKED(talker) { ShowPage(talker, fnHi); } } class ticket_inspector : citizen { } class npc_elder : citizen { } class ruler : citizen { } class royal_guard : citizen { } //가드 class guard : default_npc { parameter: string fnHi = "chi.htm"; //001 float Attack_DecayRatio = 6.6; float UseSkill_DecayRatio = 66000; float Attack_BoostValue = 500.0; float UseSkill_BoostValue = 100000.0; handler: EventHandler TALKED(talker) { ShowPage(talker, fnHi); } EventHandler ATTACKED(attacker, damage) { AddAttackDesire(attacker, @AMT_MOVE_TO_TARGET, 2000); } EventHandler SEE_CREATURE(creature) { if(creature.karma > 0) { AddAttackDesire(creature, @AMT_MOVE_TO_TARGET, 1500); } } } //가드 서 있음 class guard_stand : guard { parameter: float DoNothing_DecayRatio = 1.0; handler: EventHandler NO_DESIRE() { /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ AddMoveToDesire(myself.start_x, myself.start_y, myself.start_z, 30); /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ } EventHandler MOVE_TO_FINISHED(x,y,z) { /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ { if(x == myself.start_x && y == myself.start_y && z == myself.start_z) AddDoNothingDesire(40, 30); else AddMoveToDesire(myself.start_x, myself.start_y, myself.start_z, 30); } /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ } } //가드 서 있음 class guard_fixed : guard_stand { handler: EventHandler ATTACKED(attacker, damage) { AddAttackDesire(attacker, @AMT_STAND, 2000); } EventHandler SEE_CREATURE(creature) { if(creature.karma > 0) { AddAttackDesire(creature, @AMT_STAND, 1500); } } } class guard_move_around : guard { handler: EventHandler NO_DESIRE() { AddMoveAroundDesire(5, 5); } } class guard_patrol : guard { parameter: WayPointsType WayPoints; WayPointDelaysType WayPointDelays; handler: EventHandler NO_DESIRE() { /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ AddDoNothingDesire(40, 5); /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ } EventHandler CREATED() { /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ AddMoveToWayPointDesire(WayPoints, WayPointDelays, 1, 10); /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ } EventHandler MOVE_TO_WAY_POINT_FINISHED(way_point_index, next_way_point_index) { /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ { //delay myself.i_ai0 = next_way_point_index; SetTimerPeriod(GetWayPointDelay(WayPointDelays, way_point_index)); } /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ } EventHandler TIMER_FIRED() { /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ { SetTimerPeriod(0); if (myself.i_ai0 > 0) { AddMoveToWayPointDesire(WayPoints, WayPointDelays, myself.i_ai0, 10); } else { //다시 시작 지점으로 AddMoveToWayPointDesire(WayPoints, WayPointDelays, 1, 10); } } /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ } } class chief_guard : guard_stand { } //길드마스터 class guild_master : default_npc { parameter: string fnHi = "gmhi.htm"; //001 string fnClassMismatch = "gmhi.htm"; //002 string fnClassList1 = "gmhi.htm"; //003 string fnClassList2 = "gmhi.htm"; //003 string fnClassList3 = "gmhi.htm"; //003 string fnClassList4 = "gmhi.htm"; //003 string fnClassList5 = "gmhi.htm"; //003 string fnYouAreSecondClass = "gmhi.htm"; //004 string fnYouAreThirdClass = "gmhi.htm"; //005 //006 //007 string fnLowLevelNoProof11 = "gmhi.htm"; //008 string fnLowLevelNoProof12 = "gmhi.htm"; //008 string fnLowLevelNoProof13 = "gmhi.htm"; //008 string fnLowLevelNoProof21 = "gmhi.htm"; //008 string fnLowLevelNoProof22 = "gmhi.htm"; //008 string fnLowLevelNoProof23 = "gmhi.htm"; //008 string fnLowLevelNoProof31 = "gmhi.htm"; //008 string fnLowLevelNoProof32 = "gmhi.htm"; //008 string fnLowLevelNoProof33 = "gmhi.htm"; //008 string fnLowLevelNoProof41 = "gmhi.htm"; //008 string fnLowLevelNoProof42 = "gmhi.htm"; //008 string fnLowLevelNoProof43 = "gmhi.htm"; //008 string fnLowLevelNoProof51 = "gmhi.htm"; //008 string fnLowLevelNoProof52 = "gmhi.htm"; //008 string fnLowLevelNoProof53 = "gmhi.htm"; //008 string fnLowLevel11 = "gmhi.htm"; //009 string fnLowLevel12 = "gmhi.htm"; //009 string fnLowLevel13 = "gmhi.htm"; //009 string fnLowLevel21 = "gmhi.htm"; //009 string fnLowLevel22 = "gmhi.htm"; //009 string fnLowLevel23 = "gmhi.htm"; //009 string fnLowLevel31 = "gmhi.htm"; //009 string fnLowLevel32 = "gmhi.htm"; //009 string fnLowLevel33 = "gmhi.htm"; //009 string fnLowLevel41 = "gmhi.htm"; //009 string fnLowLevel42 = "gmhi.htm"; //009 string fnLowLevel43 = "gmhi.htm"; //009 string fnLowLevel51 = "gmhi.htm"; //009 string fnLowLevel52 = "gmhi.htm"; //009 string fnLowLevel53 = "gmhi.htm"; //009 string fnNoProof11 = "gmhi.htm"; //010 string fnNoProof12 = "gmhi.htm"; //010 string fnNoProof13 = "gmhi.htm"; //010 string fnNoProof21 = "gmhi.htm"; //010 string fnNoProof22 = "gmhi.htm"; //010 string fnNoProof23 = "gmhi.htm"; //010 string fnNoProof31 = "gmhi.htm"; //010 string fnNoProof32 = "gmhi.htm"; //010 string fnNoProof33 = "gmhi.htm"; //010 string fnNoProof41 = "gmhi.htm"; //010 string fnNoProof42 = "gmhi.htm"; //010 string fnNoProof43 = "gmhi.htm"; //010 string fnNoProof51 = "gmhi.htm"; //010 string fnNoProof52 = "gmhi.htm"; //010 string fnNoProof53 = "gmhi.htm"; //010 string fnAfterClassChange11 = "gmhi.htm"; //011 string fnAfterClassChange12 = "gmhi.htm"; //011 string fnAfterClassChange13 = "gmhi.htm"; //011 string fnAfterClassChange21 = "gmhi.htm"; //011 string fnAfterClassChange22 = "gmhi.htm"; //011 string fnAfterClassChange23 = "gmhi.htm"; //011 string fnAfterClassChange31 = "gmhi.htm"; //011 string fnAfterClassChange32 = "gmhi.htm"; //011 string fnAfterClassChange33 = "gmhi.htm"; //011 string fnAfterClassChange41 = "gmhi.htm"; //011 string fnAfterClassChange42 = "gmhi.htm"; //011 string fnAfterClassChange43 = "gmhi.htm"; //011 string fnAfterClassChange51 = "gmhi.htm"; //011 string fnAfterClassChange52 = "gmhi.htm"; //011 string fnAfterClassChange53 = "gmhi.htm"; //011 string fnYouAreFirstClass = "gmhi.htm"; //012 handler: EventHandler TALKED(talker) { ShowPage(talker, fnHi); } EventHandler CREATE_PLEDGE(talker, reply) { if(reply == 1) ShowPage(talker, "pl006.htm"); } EventHandler CREATE_ALLIANCE(talker, reply) { if(reply == 1) ShowPage(talker, "al006.htm"); } EventHandler DISMISS_PLEDGE(talker, reply) { if(reply == 1) ShowPage(talker, "pl009.htm"); } EventHandler REVIVE_PLEDGE(talker, reply) { if(reply == 1) ShowPage(talker, "pl012.htm"); } EventHandler LEVEL_UP_PLEDGE(talker, reply) { if(reply == 0) { if(talker.sp >= 30000 && OwnItemCount(talker, @adena) >= 650000) { if(DeleteItem1(talker, @adena, 650000)) { IncrementParam(talker, @PARAM_SP, -30000); PledgeLevelUp(talker); } } else ShowPage(talker, "pl016.htm"); } else if(reply == 1) { if(talker.sp >= 150000 && OwnItemCount(talker, @adena) >= 2500000) { if(DeleteItem1(talker, @adena, 2500000)) { IncrementParam(talker, @PARAM_SP, -150000); PledgeLevelUp(talker); } } else ShowPage(talker, "pl016.htm"); } else if(reply == 2) { if(talker.sp >= 500000 && OwnItemCount(talker, @proof_of_blood) >= 1) { if(DeleteItem1(talker, @proof_of_blood, 1)) { IncrementParam(talker, @PARAM_SP, -500000); PledgeLevelUp(talker); } } else ShowPage(talker, "pl016.htm"); } else if(reply == 3) { if(talker.sp >= 1400000 && OwnItemCount(talker, @adena) >= 16000000) { if(DeleteItem1(talker, @adena, 16000000)) { IncrementParam(talker, @PARAM_SP, -1400000); PledgeLevelUp(talker); } } else ShowPage(talker, "pl016.htm"); } else if(reply == 4) { if(talker.sp >= 3500000 && OwnItemCount(talker, @adena) >= 30000000) { if(DeleteItem1(talker, @adena, 30000000)) { IncrementParam(talker, @PARAM_SP, -3500000); PledgeLevelUp(talker); } } else ShowPage(talker, "pl016.htm"); } } EventHandler MENU_SELECTED(talker, ask ,reply) { if(ask == -3) //-3은 길드마스터의 혈맹용 메뉴 { if (reply == 0) { if(talker.level < 10) ShowPage(talker, "pl002.htm"); else if(talker.is_pledge_master != 0) ShowPage(talker, "pl003.htm"); else if(talker.pledge_id != 0) ShowPage(talker, "pl004.htm"); else ShowPage(talker, "pl005.htm"); } else if (reply == 2) { if(talker.is_pledge_master != 0) ShowPage(talker, "pl007.htm"); else ShowPage(talker, "pl008.htm"); } else if (reply == 3) { if(talker.is_pledge_master != 0) ShowPage(talker, "pl010.htm"); else ShowPage(talker, "pl011.htm"); } else if (reply == 1) { if(talker.is_pledge_master != 0) ShowPage(talker, "pl013.htm"); else ShowPage(talker, "pl014.htm"); } } else if(ask == -4) // -4는 길드마스터의 동맹용 메뉴 { if (reply == 0) { // 조건 check ippai 이건 형민이한테 돌림 -_-)/ ShowPage(talker, "al005.htm"); } } } } class guild_master_lv1 : guild_master { } //인간전사 스타트존 class human_fighter_lv1_master : guild_master_lv1 { handler: EventHandler MENU_SELECTED(talker, ask ,reply) { if(ask == -2 && reply == 1) { if(talker.race == @race_human && IsInCategory(@fighter_group, talker.occupation)) ShowPage(talker, fnClassList1); else ShowPage(talker, fnClassMismatch); } super; } } //인간법사 스타트존 class human_mage_lv1_master : guild_master_lv1 { handler: EventHandler MENU_SELECTED(talker, ask ,reply) { if(ask == -2 && reply == 1) { if(talker.race == @race_human && IsInCategory(@mage_group, talker.occupation)) ShowPage(talker, fnClassList1); else ShowPage(talker, fnClassMismatch); } super; } } //엘프 스타트존 class elf_lv1_master : guild_master_lv1 { handler: EventHandler MENU_SELECTED(talker, ask ,reply) { if(ask == -2 && reply == 1) { if(talker.race == @race_elf) { if(IsInCategory(@fighter_group, talker.occupation)) ShowPage(talker, fnClassList1); else if(IsInCategory(@mage_group, talker.occupation)) ShowPage(talker, fnClassList2); } else ShowPage(talker, fnClassMismatch); } super; } } //다크엘프 스타트존 class dark_elf_lv1_master : guild_master_lv1 { handler: EventHandler MENU_SELECTED(talker, ask ,reply) { if(ask == -2 && reply == 1) { if(talker.race == @race_dark_elf) { if(IsInCategory(@fighter_group, talker.occupation)) ShowPage(talker, fnClassList1); else if(IsInCategory(@mage_group, talker.occupation)) ShowPage(talker, fnClassList2); } else ShowPage(talker, fnClassMismatch); } super; } } //오크 스타트존 class orc_lv1_master : guild_master_lv1 { handler: EventHandler MENU_SELECTED(talker, ask ,reply) { if(ask == -2 && reply == 1) { if(talker.race == @race_orc) { if(IsInCategory(@fighter_group, talker.occupation)) ShowPage(talker, fnClassList1); else if(IsInCategory(@mage_group, talker.occupation)) ShowPage(talker, fnClassList2); } else ShowPage(talker, fnClassMismatch); } super; } } //드워프 스타트존 창고지기 대빵. class lv1_warehouse_chief : guild_master_lv1 { handler: EventHandler MENU_SELECTED(talker, ask ,reply) { if(ask == -2 && reply == 1) { if(talker.race == @race_dwarf) ShowPage(talker, fnClassList1); else ShowPage(talker, fnClassMismatch); } super; } } //드워프 스타트존 대장장이 대빵. class lv1_head_blacksmith : guild_master_lv1 { handler: EventHandler TALKED(talker) { if(talker.race == @race_dwarf) { ShowPage(talker, fnHi); } else { ShowPage(talker, fnClassMismatch); } } EventHandler MENU_SELECTED(talker, ask ,reply) { if(ask == -2 && reply == 1) { ShowPage(talker, fnClassList1); } super; } } class guild_master_lv2 : guild_master { parameter: int lv1_class1 = -1; int lv1_class2 = -1; int lv2_class11 = -1; int lv2_class12 = -1; int lv2_class13 = -1; int lv2_class21 = -1; int lv2_class22 = -1; int lv2_class23 = -1; int proof11 = 0; int proof12 = 0; int proof13 = 0; int proof21 = 0; int proof22 = 0; int proof23 = 0; handler: EventHandler CLASS_CHANGE_REQUESTED(talker, occupation_name_id) { if(IsInCategory(@second_class_group, talker.occupation)) ShowPage(talker, fnYouAreSecondClass); else if(IsInCategory(@third_class_group, talker.occupation)) ShowPage(talker, fnYouAreThirdClass); else { /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ { if(lv2_class11 != -1 && occupation_name_id == lv2_class11 && talker.occupation == lv1_class1) { if(talker.level < 20) { if(OwnItemCount(talker, proof11) == 0) ShowPage(talker, fnLowLevelNoProof11); else ShowPage(talker, fnLowLevel11); } else { if(OwnItemCount(talker, proof11) == 0) ShowPage(talker, fnNoProof11); else { DeleteItem1(talker, proof11, OwnItemCount(talker, proof11)); ClassChange(talker, lv2_class11); SoundEffect(talker, "ItemSound.quest_fanfare_1"); ShowPage(talker, fnAfterClassChange11); } } } } /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ { if(lv2_class12 != -1 && occupation_name_id == lv2_class12 && talker.occupation == lv1_class1) { if(talker.level < 20) { if(OwnItemCount(talker, proof12) == 0) ShowPage(talker, fnLowLevelNoProof12); else ShowPage(talker, fnLowLevel12); } else { if(OwnItemCount(talker, proof12) == 0) ShowPage(talker, fnNoProof12); else { DeleteItem1(talker, proof12, OwnItemCount(talker, proof12)); ClassChange(talker, lv2_class12); SoundEffect(talker, "ItemSound.quest_fanfare_1"); ShowPage(talker, fnAfterClassChange12); } } } } /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ { if(lv2_class13 != -1 && occupation_name_id == lv2_class13 && talker.occupation == lv1_class1) { if(talker.level < 20) { if(OwnItemCount(talker, proof13) == 0) ShowPage(talker, fnLowLevelNoProof13); else ShowPage(talker, fnLowLevel13); } else { if(OwnItemCount(talker, proof13) == 0) ShowPage(talker, fnNoProof13); else { DeleteItem1(talker, proof13, OwnItemCount(talker, proof13)); ClassChange(talker, lv2_class13); SoundEffect(talker, "ItemSound.quest_fanfare_1"); ShowPage(talker, fnAfterClassChange13); } } } } /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ { if(lv2_class21 != -1 && occupation_name_id == lv2_class21 && talker.occupation == lv1_class2) { if(talker.level < 20) { if(OwnItemCount(talker, proof21) == 0) ShowPage(talker, fnLowLevelNoProof21); else ShowPage(talker, fnLowLevel21); } else { if(OwnItemCount(talker, proof21) == 0) ShowPage(talker, fnNoProof21); else { DeleteItem1(talker, proof21, OwnItemCount(talker, proof21)); ClassChange(talker, lv2_class21); SoundEffect(talker, "ItemSound.quest_fanfare_1"); ShowPage(talker, fnAfterClassChange21); } } } } /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ { if(lv2_class22 != -1 && occupation_name_id == lv2_class22 && talker.occupation == lv1_class2) { if(talker.level < 20) { if(OwnItemCount(talker, proof22) == 0) ShowPage(talker, fnLowLevelNoProof22); else ShowPage(talker, fnLowLevel22); } else { if(OwnItemCount(talker, proof22) == 0) ShowPage(talker, fnNoProof22); else { DeleteItem1(talker, proof22, OwnItemCount(talker, proof22)); ClassChange(talker, lv2_class22); SoundEffect(talker, "ItemSound.quest_fanfare_1"); ShowPage(talker, fnAfterClassChange22); } } } } /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ { if(lv2_class23 != -1 && occupation_name_id == lv2_class23 && talker.occupation == lv1_class2) { if(talker.level < 20) { if(OwnItemCount(talker, proof23) == 0) ShowPage(talker, fnLowLevelNoProof23); else ShowPage(talker, fnLowLevel23); } else { if(OwnItemCount(talker, proof23) == 0) ShowPage(talker, fnNoProof23); else { DeleteItem1(talker, proof23, OwnItemCount(talker, proof23)); ClassChange(talker, lv2_class23); SoundEffect(talker, "ItemSound.quest_fanfare_1"); ShowPage(talker, fnAfterClassChange23); } } } } /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ } } } //인간, 엘프 전사 1차전직 class human_elf_fighter_lv2_master : guild_master_lv2 { parameter: int lv1_class1 = @fighter; int lv1_class2 = @elven_fighter; int lv2_class11 = @warrior; int lv2_class12 = @knight; int lv2_class13 = @rogue; int lv2_class21 = @elven_knight; int lv2_class22 = @elven_scout; int proof11 = @medallion_of_warrior; int proof12 = @sword_of_ritual; int proof13 = @beziques_recommendation; int proof21 = @elven_knight_brooch; int proof22 = @reoria_recommendation; handler: EventHandler MENU_SELECTED(talker, ask ,reply) { if(ask == -2 && reply == 1) { if(IsInCategory(@fighter_group, talker.occupation) && (talker.race == @race_human || talker.race == @race_elf)) { if(talker.race == @race_human) ShowPage(talker, fnClassList1); else if(talker.race == @race_elf) ShowPage(talker, fnClassList2); } else ShowPage(talker, fnClassMismatch); } super; } } //인간, 엘프 법사 1차전직 class human_elf_mage_lv2_master : guild_master_lv2 { parameter: int lv1_class1 = @mage; int lv1_class2 = @elven_mage; int lv2_class11 = @wizard; int lv2_class12 = @cleric; int lv2_class21 = @elven_wizard; int lv2_class22 = @oracle; int proof11 = @bead_of_season; int proof12 = @mark_of_faith; int proof21 = @eternity_diamond; int proof22 = @leaf_of_oracle; handler: EventHandler MENU_SELECTED(talker, ask ,reply) { if(ask == -2 && reply == 1) { if(IsInCategory(@mage_group, talker.occupation) && (talker.race == @race_human || talker.race == @race_elf)) { if(talker.race == @race_human) ShowPage(talker, fnClassList1); else if(talker.race == @race_elf) ShowPage(talker, fnClassList2); } else ShowPage(talker, fnClassMismatch); } super; } } //다크엘프 1차전직 class dark_elf_lv2_master : guild_master_lv2 { parameter: int lv1_class1 = @dark_fighter; int lv1_class2 = @dark_mage; int lv2_class11 = @palus_knight; int lv2_class12 = @assassin; int lv2_class21 = @dark_wizard; int lv2_class22 = @shillien_oracle; int proof11 = @gaze_of_abyss; int proof12 = @iron_heart; int proof21 = @jewel_of_darkness; int proof22 = @orb_of_abyss; handler: EventHandler MENU_SELECTED(talker, ask ,reply) { if(ask == -2 && reply == 1) { if(talker.race == @race_dark_elf) { if(IsInCategory(@fighter_group, talker.occupation)) ShowPage(talker, fnClassList1); else if(IsInCategory(@mage_group, talker.occupation)) ShowPage(talker, fnClassList2); } else ShowPage(talker, fnClassMismatch); } super; } } //오크 1차전직 class orc_lv2_master : guild_master_lv2 { parameter: int lv1_class1 = @orc_fighter; int lv1_class2 = @orc_mage; int lv2_class11 = @orc_raider; int lv2_class12 = @orc_monk; int lv2_class21 = @orc_shaman; int proof11 = @mark_of_raider; int proof12 = @khavatari_totem; int proof21 = @mask_of_medium; handler: EventHandler MENU_SELECTED(talker, ask ,reply) { if(ask == -2 && reply == 1) { if(talker.race == @race_orc) { if(IsInCategory(@fighter_group, talker.occupation)) ShowPage(talker, fnClassList1); else if(IsInCategory(@mage_group, talker.occupation)) ShowPage(talker, fnClassList2); } else ShowPage(talker, fnClassMismatch); } super; } } //바운티헌터계 드워프 1차전직 class lv2_warehouse_chief : guild_master_lv2 { parameter: int lv1_class1 = @dwarven_fighter; int lv2_class11 = @scavenger; int proof11 = @ring_of_raven; handler: EventHandler MENU_SELECTED(talker, ask ,reply) { if(ask == -2 && reply == 1) { if(IsInCategory(@bounty_hunter_group, talker.occupation)) ShowPage(talker, fnClassList1); else ShowPage(talker, fnClassMismatch); } super; } } //워스미스계 드워프 1차전직 class lv2_head_blacksmith : guild_master_lv2 { parameter: int lv1_class1 = @dwarven_fighter; int lv2_class11 = @artisan; int proof11 = @pass_final; handler: EventHandler MENU_SELECTED(talker, ask ,reply) { if(ask == -2 && reply == 1) { if(IsInCategory(@warsmith_group, talker.occupation)) ShowPage(talker, fnClassList1); else ShowPage(talker, fnClassMismatch); } super; } } class guild_master_lv3 : guild_master { parameter: int lv2_class1 = -1; int lv2_class2 = -1; int lv2_class3 = -1; int lv2_class4 = -1; int lv2_class5 = -1; int lv3_class11 = -1; int lv3_class12 = -1; int lv3_class13 = -1; int lv3_class21 = -1; int lv3_class22 = -1; int lv3_class23 = -1; int lv3_class31 = -1; int lv3_class32 = -1; int lv3_class33 = -1; int lv3_class41 = -1; int lv3_class42 = -1; int lv3_class43 = -1; int lv3_class51 = -1; int lv3_class52 = -1; int lv3_class53 = -1; int proof11x = 0; int proof11y = 0; int proof11z = 0; int proof12x = 0; int proof12y = 0; int proof12z = 0; int proof13x = 0; int proof13y = 0; int proof13z = 0; int proof21x = 0; int proof21y = 0; int proof21z = 0; int proof22x = 0; int proof22y = 0; int proof22z = 0; int proof23x = 0; int proof23y = 0; int proof23z = 0; int proof31x = 0; int proof31y = 0; int proof31z = 0; int proof32x = 0; int proof32y = 0; int proof32z = 0; int proof33x = 0; int proof33y = 0; int proof33z = 0; int proof41x = 0; int proof41y = 0; int proof41z = 0; int proof42x = 0; int proof42y = 0; int proof42z = 0; int proof43x = 0; int proof43y = 0; int proof43z = 0; int proof51x = 0; int proof51y = 0; int proof51z = 0; int proof52x = 0; int proof52y = 0; int proof52z = 0; int proof53x = 0; int proof53y = 0; int proof53z = 0; handler: EventHandler CLASS_CHANGE_REQUESTED(talker, occupation_name_id) { if(IsInCategory(@third_class_group, talker.occupation)) { ShowPage(talker, fnYouAreThirdClass); } else { /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ { if(lv3_class11 != -1 && occupation_name_id == lv3_class11 && talker.occupation == lv2_class1) { if(talker.level < 40) { if(OwnItemCount(talker, proof11x) == 0 || OwnItemCount(talker, proof11y) == 0 || OwnItemCount(talker, proof11z) == 0) ShowPage(talker, fnLowLevelNoProof11); else ShowPage(talker, fnLowLevel11); } else { if(OwnItemCount(talker, proof11x) == 0 || OwnItemCount(talker, proof11y) == 0 || OwnItemCount(talker, proof11z) == 0) ShowPage(talker, fnNoProof11); else { DeleteItem1(talker, proof11x, OwnItemCount(talker, proof11x)); DeleteItem1(talker, proof11y, OwnItemCount(talker, proof11y)); DeleteItem1(talker, proof11z, OwnItemCount(talker, proof11z)); ClassChange(talker, lv3_class11); SoundEffect(talker, "ItemSound.quest_fanfare_2"); ShowPage(talker, fnAfterClassChange11); } } } } /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ { if(lv3_class12 != -1 && occupation_name_id == lv3_class12 && talker.occupation == lv2_class1) { if(talker.level < 40) { if(OwnItemCount(talker, proof12x) == 0 || OwnItemCount(talker, proof12y) == 0 || OwnItemCount(talker, proof12z) == 0) ShowPage(talker, fnLowLevelNoProof12); else ShowPage(talker, fnLowLevel12); } else { if(OwnItemCount(talker, proof12x) == 0 || OwnItemCount(talker, proof12y) == 0 || OwnItemCount(talker, proof12z) == 0) ShowPage(talker, fnNoProof12); else { DeleteItem1(talker, proof12x, OwnItemCount(talker, proof12x)); DeleteItem1(talker, proof12y, OwnItemCount(talker, proof12y)); DeleteItem1(talker, proof12z, OwnItemCount(talker, proof12z)); ClassChange(talker, lv3_class12); SoundEffect(talker, "ItemSound.quest_fanfare_2"); ShowPage(talker, fnAfterClassChange12); } } } } /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ { if(lv3_class13 != -1 && occupation_name_id == lv3_class13 && talker.occupation == lv2_class1) { if(talker.level < 40) { if(OwnItemCount(talker, proof13x) == 0 || OwnItemCount(talker, proof13y) == 0 || OwnItemCount(talker, proof13z) == 0) ShowPage(talker, fnLowLevelNoProof13); else ShowPage(talker, fnLowLevel13); } else { if(OwnItemCount(talker, proof13x) == 0 || OwnItemCount(talker, proof13y) == 0 || OwnItemCount(talker, proof13z) == 0) ShowPage(talker, fnNoProof13); else { DeleteItem1(talker, proof13x, OwnItemCount(talker, proof13x)); DeleteItem1(talker, proof13y, OwnItemCount(talker, proof13y)); DeleteItem1(talker, proof13z, OwnItemCount(talker, proof13z)); ClassChange(talker, lv3_class13); SoundEffect(talker, "ItemSound.quest_fanfare_2"); ShowPage(talker, fnAfterClassChange13); } } } } /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ { if(lv3_class21 != -1 && occupation_name_id == lv3_class21 && talker.occupation == lv2_class2) { if(talker.level < 40) { if(OwnItemCount(talker, proof21x) == 0 || OwnItemCount(talker, proof21y) == 0 || OwnItemCount(talker, proof21z) == 0) ShowPage(talker, fnLowLevelNoProof21); else ShowPage(talker, fnLowLevel21); } else { if(OwnItemCount(talker, proof21x) == 0 || OwnItemCount(talker, proof21y) == 0 || OwnItemCount(talker, proof21z) == 0) ShowPage(talker, fnNoProof21); else { DeleteItem1(talker, proof21x, OwnItemCount(talker, proof21x)); DeleteItem1(talker, proof21y, OwnItemCount(talker, proof21y)); DeleteItem1(talker, proof21z, OwnItemCount(talker, proof21z)); ClassChange(talker, lv3_class21); SoundEffect(talker, "ItemSound.quest_fanfare_2"); ShowPage(talker, fnAfterClassChange21); } } } } /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ { if(lv3_class22 != -1 && occupation_name_id == lv3_class22 && talker.occupation == lv2_class2) { if(talker.level < 40) { if(OwnItemCount(talker, proof22x) == 0 || OwnItemCount(talker, proof22y) == 0 || OwnItemCount(talker, proof22z) == 0) ShowPage(talker, fnLowLevelNoProof22); else ShowPage(talker, fnLowLevel22); } else { if(OwnItemCount(talker, proof22x) == 0 || OwnItemCount(talker, proof22y) == 0 || OwnItemCount(talker, proof22z) == 0) ShowPage(talker, fnNoProof22); else { DeleteItem1(talker, proof22x, OwnItemCount(talker, proof22x)); DeleteItem1(talker, proof22y, OwnItemCount(talker, proof22y)); DeleteItem1(talker, proof22z, OwnItemCount(talker, proof22z)); ClassChange(talker, lv3_class22); SoundEffect(talker, "ItemSound.quest_fanfare_2"); ShowPage(talker, fnAfterClassChange22); } } } } /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ { if(lv3_class23 != -1 && occupation_name_id == lv3_class23 && talker.occupation == lv2_class2) { if(talker.level < 40) { if(OwnItemCount(talker, proof23x) == 0 || OwnItemCount(talker, proof23y) == 0 || OwnItemCount(talker, proof23z) == 0) ShowPage(talker, fnLowLevelNoProof23); else ShowPage(talker, fnLowLevel23); } else { if(OwnItemCount(talker, proof23x) == 0 || OwnItemCount(talker, proof23y) == 0 || OwnItemCount(talker, proof23z) == 0) ShowPage(talker, fnNoProof23); else { DeleteItem1(talker, proof23x, OwnItemCount(talker, proof23x)); DeleteItem1(talker, proof23y, OwnItemCount(talker, proof23y)); DeleteItem1(talker, proof23z, OwnItemCount(talker, proof23z)); ClassChange(talker, lv3_class23); SoundEffect(talker, "ItemSound.quest_fanfare_2"); ShowPage(talker, fnAfterClassChange23); } } } } /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ { if(lv3_class31 != -1 && occupation_name_id == lv3_class31 && talker.occupation == lv2_class3) { if(talker.level < 40) { if(OwnItemCount(talker, proof31x) == 0 || OwnItemCount(talker, proof31y) == 0 || OwnItemCount(talker, proof31z) == 0) ShowPage(talker, fnLowLevelNoProof31); else ShowPage(talker, fnLowLevel31); } else { if(OwnItemCount(talker, proof31x) == 0 || OwnItemCount(talker, proof31y) == 0 || OwnItemCount(talker, proof31z) == 0) ShowPage(talker, fnNoProof31); else { DeleteItem1(talker, proof31x, OwnItemCount(talker, proof31x)); DeleteItem1(talker, proof31y, OwnItemCount(talker, proof31y)); DeleteItem1(talker, proof31z, OwnItemCount(talker, proof31z)); ClassChange(talker, lv3_class31); SoundEffect(talker, "ItemSound.quest_fanfare_2"); ShowPage(talker, fnAfterClassChange31); } } } } /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ { if(lv3_class32 != -1 && occupation_name_id == lv3_class32 && talker.occupation == lv2_class3) { if(talker.level < 40) { if(OwnItemCount(talker, proof32x) == 0 || OwnItemCount(talker, proof32y) == 0 || OwnItemCount(talker, proof32z) == 0) ShowPage(talker, fnLowLevelNoProof32); else ShowPage(talker, fnLowLevel32); } else { if(OwnItemCount(talker, proof32x) == 0 || OwnItemCount(talker, proof32y) == 0 || OwnItemCount(talker, proof32z) == 0) ShowPage(talker, fnNoProof32); else { DeleteItem1(talker, proof32x, OwnItemCount(talker, proof32x)); DeleteItem1(talker, proof32y, OwnItemCount(talker, proof32y)); DeleteItem1(talker, proof32z, OwnItemCount(talker, proof32z)); ClassChange(talker, lv3_class32); SoundEffect(talker, "ItemSound.quest_fanfare_2"); ShowPage(talker, fnAfterClassChange32); } } } } /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ { if(lv3_class33 != -1 && occupation_name_id == lv3_class33 && talker.occupation == lv2_class3) { if(talker.level < 40) { if(OwnItemCount(talker, proof33x) == 0 || OwnItemCount(talker, proof33y) == 0 || OwnItemCount(talker, proof33z) == 0) ShowPage(talker, fnLowLevelNoProof33); else ShowPage(talker, fnLowLevel33); } else { if(OwnItemCount(talker, proof33x) == 0 || OwnItemCount(talker, proof33y) == 0 || OwnItemCount(talker, proof33z) == 0) ShowPage(talker, fnNoProof33); else { DeleteItem1(talker, proof33x, OwnItemCount(talker, proof33x)); DeleteItem1(talker, proof33y, OwnItemCount(talker, proof33y)); DeleteItem1(talker, proof33z, OwnItemCount(talker, proof33z)); ClassChange(talker, lv3_class33); SoundEffect(talker, "ItemSound.quest_fanfare_2"); ShowPage(talker, fnAfterClassChange33); } } } } /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ { if(lv3_class41 != -1 && occupation_name_id == lv3_class41 && talker.occupation == lv2_class4) { if(talker.level < 40) { if(OwnItemCount(talker, proof41x) == 0 || OwnItemCount(talker, proof41y) == 0 || OwnItemCount(talker, proof41z) == 0) ShowPage(talker, fnLowLevelNoProof41); else ShowPage(talker, fnLowLevel41); } else { if(OwnItemCount(talker, proof41x) == 0 || OwnItemCount(talker, proof41y) == 0 || OwnItemCount(talker, proof41z) == 0) ShowPage(talker, fnNoProof41); else { DeleteItem1(talker, proof41x, OwnItemCount(talker, proof41x)); DeleteItem1(talker, proof41y, OwnItemCount(talker, proof41y)); DeleteItem1(talker, proof41z, OwnItemCount(talker, proof41z)); ClassChange(talker, lv3_class41); SoundEffect(talker, "ItemSound.quest_fanfare_2"); ShowPage(talker, fnAfterClassChange41); } } } } /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ { if(lv3_class42 != -1 && occupation_name_id == lv3_class42 && talker.occupation == lv2_class4) { if(talker.level < 40) { if(OwnItemCount(talker, proof42x) == 0 || OwnItemCount(talker, proof42y) == 0 || OwnItemCount(talker, proof42z) == 0) ShowPage(talker, fnLowLevelNoProof42); else ShowPage(talker, fnLowLevel42); } else { if(OwnItemCount(talker, proof42x) == 0 || OwnItemCount(talker, proof42y) == 0 || OwnItemCount(talker, proof42z) == 0) ShowPage(talker, fnNoProof42); else { DeleteItem1(talker, proof42x, OwnItemCount(talker, proof42x)); DeleteItem1(talker, proof42y, OwnItemCount(talker, proof42y)); DeleteItem1(talker, proof42z, OwnItemCount(talker, proof42z)); ClassChange(talker, lv3_class42); SoundEffect(talker, "ItemSound.quest_fanfare_2"); ShowPage(talker, fnAfterClassChange42); } } } } /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ { if(lv3_class43 != -1 && occupation_name_id == lv3_class43 && talker.occupation == lv2_class4) { if(talker.level < 40) { if(OwnItemCount(talker, proof43x) == 0 || OwnItemCount(talker, proof43y) == 0 || OwnItemCount(talker, proof43z) == 0) ShowPage(talker, fnLowLevelNoProof43); else ShowPage(talker, fnLowLevel43); } else { if(OwnItemCount(talker, proof43x) == 0 || OwnItemCount(talker, proof43y) == 0 || OwnItemCount(talker, proof43z) == 0) ShowPage(talker, fnNoProof43); else { DeleteItem1(talker, proof43x, OwnItemCount(talker, proof43x)); DeleteItem1(talker, proof43y, OwnItemCount(talker, proof43y)); DeleteItem1(talker, proof43z, OwnItemCount(talker, proof43z)); ClassChange(talker, lv3_class43); SoundEffect(talker, "ItemSound.quest_fanfare_2"); ShowPage(talker, fnAfterClassChange43); } } } } /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ { if(lv3_class51 != -1 && occupation_name_id == lv3_class51 && talker.occupation == lv2_class5) { if(talker.level < 40) { if(OwnItemCount(talker, proof51x) == 0 || OwnItemCount(talker, proof51y) == 0 || OwnItemCount(talker, proof51z) == 0) ShowPage(talker, fnLowLevelNoProof51); else ShowPage(talker, fnLowLevel51); } else { if(OwnItemCount(talker, proof51x) == 0 || OwnItemCount(talker, proof51y) == 0 || OwnItemCount(talker, proof51z) == 0) ShowPage(talker, fnNoProof51); else { DeleteItem1(talker, proof51x, OwnItemCount(talker, proof51x)); DeleteItem1(talker, proof51y, OwnItemCount(talker, proof51y)); DeleteItem1(talker, proof51z, OwnItemCount(talker, proof51z)); ClassChange(talker, lv3_class51); SoundEffect(talker, "ItemSound.quest_fanfare_2"); ShowPage(talker, fnAfterClassChange51); } } } } /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ { if(lv3_class52 != -1 && occupation_name_id == lv3_class52 && talker.occupation == lv2_class5) { if(talker.level < 40) { if(OwnItemCount(talker, proof52x) == 0 || OwnItemCount(talker, proof52y) == 0 || OwnItemCount(talker, proof52z) == 0) ShowPage(talker, fnLowLevelNoProof52); else ShowPage(talker, fnLowLevel52); } else { if(OwnItemCount(talker, proof52x) == 0 || OwnItemCount(talker, proof52y) == 0 || OwnItemCount(talker, proof52z) == 0) ShowPage(talker, fnNoProof52); else { DeleteItem1(talker, proof52x, OwnItemCount(talker, proof52x)); DeleteItem1(talker, proof52y, OwnItemCount(talker, proof52y)); DeleteItem1(talker, proof52z, OwnItemCount(talker, proof52z)); ClassChange(talker, lv3_class52); SoundEffect(talker, "ItemSound.quest_fanfare_2"); ShowPage(talker, fnAfterClassChange52); } } } } /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ { if(lv3_class53 != -1 && occupation_name_id == lv3_class53 && talker.occupation == lv2_class5) { if(talker.level < 40) { if(OwnItemCount(talker, proof53x) == 0 || OwnItemCount(talker, proof53y) == 0 || OwnItemCount(talker, proof53z) == 0) ShowPage(talker, fnLowLevelNoProof53); else ShowPage(talker, fnLowLevel53); } else { if(OwnItemCount(talker, proof53x) == 0 || OwnItemCount(talker, proof53y) == 0 || OwnItemCount(talker, proof53z) == 0) ShowPage(talker, fnNoProof53); else { DeleteItem1(talker, proof53x, OwnItemCount(talker, proof53x)); DeleteItem1(talker, proof53y, OwnItemCount(talker, proof53y)); DeleteItem1(talker, proof53z, OwnItemCount(talker, proof53z)); ClassChange(talker, lv3_class53); SoundEffect(talker, "ItemSound.quest_fanfare_2"); ShowPage(talker, fnAfterClassChange53); } } } } /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ } } } //인간, 엘프 전사 2차전직 class master_lv3_hef : guild_master_lv3 { parameter: int lv2_class1 = @warrior; int lv2_class2 = @knight; int lv2_class3 = @rogue; int lv2_class4 = @elven_knight; int lv2_class5 = @elven_scout; int lv3_class11 = @gladiator; int lv3_class12 = @warlord; int lv3_class21 = @paladin; int lv3_class22 = @dark_avenger; int lv3_class31 = @treasure_hunter; int lv3_class32 = @hawkeye; int lv3_class41 = @temple_knight; int lv3_class42 = @swordsinger; int lv3_class51 = @plains_walker; int lv3_class52 = @silver_ranger; int proof11x = @mark_of_challenger; int proof11y = @mark_of_trust; int proof11z = @mark_of_duelist; int proof12x = @mark_of_challenger; int proof12y = @mark_of_trust; int proof12z = @mark_of_champion; int proof21x = @mark_of_duty; int proof21y = @mark_of_trust; int proof21z = @mark_of_healer; int proof22x = @mark_of_duty; int proof22y = @mark_of_trust; int proof22z = @mark_of_witchcraft; int proof31x = @mark_of_seeker; int proof31y = @mark_of_trust; int proof31z = @mark_of_searcher; int proof32x = @mark_of_seeker; int proof32y = @mark_of_trust; int proof32z = @mark_of_sagittarius; int proof41x = @mark_of_duty; int proof41y = @mark_of_life; int proof41z = @mark_of_healer; int proof42x = @mark_of_challenger; int proof42y = @mark_of_life; int proof42z = @mark_of_duelist; int proof51x = @mark_of_seeker; int proof51y = @mark_of_life; int proof51z = @mark_of_searcher; int proof52x = @mark_of_seeker; int proof52y = @mark_of_life; int proof52z = @mark_of_sagittarius; handler: EventHandler MENU_SELECTED(talker, ask ,reply) { if(ask == -2 && reply == 1) { if(IsInCategory(@fighter_group, talker.occupation) && (talker.race == @race_human || talker.race == @race_elf)) /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ { if(talker.occupation == lv2_class1 || talker.occupation == lv3_class11 || talker.occupation == lv3_class12 || talker.occupation == lv3_class13) ShowPage(talker, fnClassList1); else if(talker.occupation == lv2_class2 || talker.occupation == lv3_class21 || talker.occupation == lv3_class22 || talker.occupation == lv3_class23) ShowPage(talker, fnClassList2); else if(talker.occupation == lv2_class3 || talker.occupation == lv3_class31 || talker.occupation == lv3_class32 || talker.occupation == lv3_class33) ShowPage(talker, fnClassList3); else if(talker.occupation == lv2_class4 || talker.occupation == lv3_class41 || talker.occupation == lv3_class42 || talker.occupation == lv3_class43) ShowPage(talker, fnClassList4); else if(talker.occupation == lv2_class5 || talker.occupation == lv3_class51 || talker.occupation == lv3_class52 || talker.occupation == lv3_class53) ShowPage(talker, fnClassList5); else ShowPage(talker, fnYouAreFirstClass); } /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ else ShowPage(talker, fnClassMismatch); } super; } } //인간, 엘프 위저드 2차전직 class master_lv3_hew : guild_master_lv3 { parameter: int lv2_class1 = @wizard; int lv2_class2 = @elven_wizard; int lv3_class11 = @sorcerer; int lv3_class12 = @necromancer; int lv3_class13 = @warlock; int lv3_class21 = @spellsinger; int lv3_class22 = @elemental_summoner; int proof11x = @mark_of_scholar; int proof11y = @mark_of_trust; int proof11z = @mark_of_magus; int proof12x = @mark_of_scholar; int proof12y = @mark_of_trust; int proof12z = @mark_of_witchcraft; int proof13x = @mark_of_scholar; int proof13y = @mark_of_trust; int proof13z = @mark_of_summoner; int proof21x = @mark_of_scholar; int proof21y = @mark_of_life; int proof21z = @mark_of_magus; int proof22x = @mark_of_scholar; int proof22y = @mark_of_life; int proof22z = @mark_of_summoner; handler: EventHandler MENU_SELECTED(talker, ask ,reply) { if(ask == -2 && reply == 1) { if(IsInCategory(@wizard_group, talker.occupation) && (talker.race == @race_human || talker.race == @race_elf)) /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ { if(talker.occupation == lv2_class1 || talker.occupation == lv3_class11 || talker.occupation == lv3_class12 || talker.occupation == lv3_class13) ShowPage(talker, fnClassList1); else if(talker.occupation == lv2_class2 || talker.occupation == lv3_class21 || talker.occupation == lv3_class22 || talker.occupation == lv3_class23) ShowPage(talker, fnClassList2); else if(talker.occupation == lv2_class3 || talker.occupation == lv3_class31 || talker.occupation == lv3_class32 || talker.occupation == lv3_class33) ShowPage(talker, fnClassList3); else if(talker.occupation == lv2_class4 || talker.occupation == lv3_class41 || talker.occupation == lv3_class42 || talker.occupation == lv3_class43) ShowPage(talker, fnClassList4); else if(talker.occupation == lv2_class5 || talker.occupation == lv3_class51 || talker.occupation == lv3_class52 || talker.occupation == lv3_class53) ShowPage(talker, fnClassList5); else ShowPage(talker, fnYouAreFirstClass); } /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ else ShowPage(talker, fnClassMismatch); } super; } } //인간, 엘프 클레릭 2차전직 class master_lv3_hec : guild_master_lv3 { parameter: int lv2_class1 = @cleric; int lv2_class2 = @oracle; int lv3_class11 = @bishop; int lv3_class12 = @prophet; int lv3_class21 = @elder; int proof11x = @mark_of_pilgrim; int proof11y = @mark_of_trust; int proof11z = @mark_of_healer; int proof12x = @mark_of_pilgrim; int proof12y = @mark_of_trust; int proof12z = @mark_of_reformer; int proof21x = @mark_of_pilgrim; int proof21y = @mark_of_life; int proof21z = @mark_of_healer; handler: EventHandler MENU_SELECTED(talker, ask ,reply) { if(ask == -2 && reply == 1) { if(IsInCategory(@cleric_group, talker.occupation) && (talker.race == @race_human || talker.race == @race_elf)) /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ { if(talker.occupation == lv2_class1 || talker.occupation == lv3_class11 || talker.occupation == lv3_class12 || talker.occupation == lv3_class13) ShowPage(talker, fnClassList1); else if(talker.occupation == lv2_class2 || talker.occupation == lv3_class21 || talker.occupation == lv3_class22 || talker.occupation == lv3_class23) ShowPage(talker, fnClassList2); else if(talker.occupation == lv2_class3 || talker.occupation == lv3_class31 || talker.occupation == lv3_class32 || talker.occupation == lv3_class33) ShowPage(talker, fnClassList3); else if(talker.occupation == lv2_class4 || talker.occupation == lv3_class41 || talker.occupation == lv3_class42 || talker.occupation == lv3_class43) ShowPage(talker, fnClassList4); else if(talker.occupation == lv2_class5 || talker.occupation == lv3_class51 || talker.occupation == lv3_class52 || talker.occupation == lv3_class53) ShowPage(talker, fnClassList5); else ShowPage(talker, fnYouAreFirstClass); } /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ else ShowPage(talker, fnClassMismatch); } super; } } //다크엘프 2차전직 class master_lv3_de : guild_master_lv3 { parameter: int lv2_class1 = @palus_knight; int lv2_class2 = @assassin; int lv2_class3 = @dark_wizard; int lv2_class4 = @shillien_oracle; int lv3_class11 = @shillien_knight; int lv3_class12 = @bladedancer; int lv3_class21 = @abyss_walker; int lv3_class22 = @phantom_ranger; int lv3_class31 = @spellhowler; int lv3_class32 = @phantom_summoner; int lv3_class41 = @shillien_elder; int proof11x = @mark_of_duty; int proof11y = @mark_of_fate; int proof11z = @mark_of_witchcraft; int proof12x = @mark_of_challenger; int proof12y = @mark_of_fate; int proof12z = @mark_of_duelist; int proof21x = @mark_of_seeker; int proof21y = @mark_of_fate; int proof21z = @mark_of_searcher; int proof22x = @mark_of_seeker; int proof22y = @mark_of_fate; int proof22z = @mark_of_sagittarius; int proof31x = @mark_of_scholar; int proof31y = @mark_of_fate; int proof31z = @mark_of_magus; int proof32x = @mark_of_scholar; int proof32y = @mark_of_fate; int proof32z = @mark_of_summoner; int proof41x = @mark_of_pilgrim; int proof41y = @mark_of_fate; int proof41z = @mark_of_reformer; handler: EventHandler MENU_SELECTED(talker, ask ,reply) { if(ask == -2 && reply == 1) { if(talker.race == @race_dark_elf) /*************************************************************************** Generated by Macro Preprocessor, begin ^^ ****************************************************************************/ { if(talker.occupation == lv2_class1 || talker.occupation == lv3_class11 || talker.occupation == lv3_class12 || talker.occupation == lv3_class13) ShowPage(talker, fnClassList1); else if(talker.occupation == lv2_class2 || talker.occupation == lv3_class21 || talker.occupation == lv3_class22 || talker.occupation == lv3_class23) ShowPage(talker, fnClassList2); else if(talker.occupation == lv2_class3 || talker.occupation == lv3_class31 || talker.occupation == lv3_class32 || talker.occupation == lv3_class33) ShowPage(talker, fnClassList3); else if(talker.occupation == lv2_class4 || talker.occupation == lv3_class41 || talker.occupation == lv3_class42 || talker.occupation == lv3_class43) ShowPage(talker, fnClassList4); else if(talker.occupation == lv2_class5 || talker.occupation == lv3_class51 || talker.occupation == lv3_class52 || talker.occupation == lv3_class53) ShowPage(talker, fnClassList5); else ShowPage(talker, fnYouAreFirstClass); } /*************************************************************************** Generated by Macro Preprocessor, end ^^ ****************************************************************************/ else ShowPage(talker, fnClassMismatch); } super; } }