Skip to content

Instantly share code, notes, and snippets.

@diamondo25
Last active June 16, 2020 02:13
Show Gist options
  • Save diamondo25/68052b4350e8ab78a220a816c11573ea to your computer and use it in GitHub Desktop.
Save diamondo25/68052b4350e8ab78a220a816c11573ea to your computer and use it in GitHub Desktop.
Maple NPC chat options
enum QR {
MonsterBook = 1047,
SAVE_EXP_BUFF = 1062,
WeddingDivorce = 1103,
WeddingVows30days = 1125,
WeddingVows100days = 1126,
RecommendPartyQuestSave = 1216,
MonsterCarnival = 1301,
MonsterCarnivalS2 = 1302,
BeastFormWing_On_Off = 1544,
CrossHunterUI_Alert = 1652,
MysticFieldTuto = 1676,
MysticFieldReward = 1683,
MysticFieldTrasferCheck = 1685,
MysticFieldTuto_Reopen = 1693,
EvolvingSystemTutorial = 1807,
EvolvingSystemDayLimit = 1817,
EvolvingSystemMedal_Quest = 1841,
EvolvingSystemMedal_Record = 1842,
MakingTutorial = 2550,
AdventureJournal_Start_Dual = 2646,
LionKing = 3162,
DojangRankBest = 3850,
DojangMindBodyTraining = 3889,
DojangRankInfo = 3890,
Aswan_Clear_Easy = 3970,
Aswan_Clear_Normal = 3971,
Hillah_Achievement = 3990,
Circulator_Gift = 3994,
Circulator_Quest = 3995,
CharmPocket_SlotOpen = 6500,
Tutorial_PirateBless = 6600,
Tutorial_ElfsReturn = 6601,
Tutorial_DemonsFury = 6602,
Tutorial_DeadlyInstinct = 6606,
Tutorial_MichaelStance = 6607,
Tutorial_LightmagePermeate = 6608,
Tutorial_KaiserStrongStamina = 6609,
Tutorial_DragonPirateSoulRage = 6610,
Tutorial_XenonAggressiveLogic = 6611,
Tutorial_DavangerWildRage = 6612,
Tutorial_CygnusBless = 6613,
Tutorial_HiddenExcapeDeath = 6614,
ZakumDungeon = 7000,
AswanEnter = 7034,
AswanCoin_History = 7035,
Circulator_Data = 7036,
MonsterCarnival_OurTotalCP = 7051,
MonsterCarnivalS3_TotalCP = 7051,
MonsterCarnival_OpponentTotalCP = 7052,
MonsterCarnival_ElaspedTime = 7053,
MonsterCarnival_WinCount = 7054,
MonsterCarnival_LoseCount = 7055,
MonsterCarnival_DrawCount = 7056,
MonsterCarnivalS3 = 7057,
MonsterCarnivalS3_EnterCount = 7058,
MonsterCarnivalS3_MatchingFailed = 7059,
Dojang_Ranking_Reward = 7212,
DailyCallenge_Dojang = 7216,
Balrog_Clear = 7222,
Defense_Wave = 7240,
Defense_Life = 7241,
DailyCallenge_Pyramid = 7242,
SkillSPReset_2012_SUMMER = 7249,
Dojang_JobRanking = 7264,
BossWaitlinesReturnMap = 7265,
Tower_Chair_Info = 7266,
Dojang_ClearPoint = 7281,
Dojang_UserPoint = 7282,
ActiveNickName = 7290,
ActiveDamageSkin = 7291,
ActiveCustomizeEffect = 7292,
AriantArenaResult = 7334,
AriantArenaPlayTime = 7335,
MonsterCarnivalS2_BP = 7560,
MonsterCarnivalS2_OurTotalCP = 7562,
MonsterCarnivalS2_OpponentTotalCP = 7563,
MonsterCarnivalS2_ElaspedTime = 7564,
MonsterCarnivalS2_WinCount = 7565,
MonsterCarnivalS2_LoseCount = 7566,
MonsterCarnivalS2_DrawCount = 7567,
MateSupportedPhone = 7601,
MatePhoneNumber = 7602,
WeddingVillage = 7610,
WeddingType = 7612,
WeddingDay = 7614,
WeddingStatus = 7616,
_2012Battle_RPSGame = 7708,
Massacre_TotalHitCount = 7760,
Massacre_Clear = 7761,
SettingSonOfLinkedSkill = 7783,
ElfEarRecord = 7784,
InnerAbillityInsurance = 7785,
EventStamp = 7790,
MECHANIC_HUEVALUE = 7825,
BuyEquipExt = 7830,
MakingMapTransfer = 7860,
PvPMode_LastRoomOut = 7881,
PvP_HardCore_WinLose = 7882,
PvP_HardCore_Result = 7883,
CharmPocket_SlotOpen2 = 7884,
PvP_HardCore_Nickname = 7885,
PvP_HardCore_Gladiator = 7886,
WU_Moonrabbit = 7905,
WU_Quest_enter = 7906,
PartyQuestPoint = 7907,
DailyCallenge_Aswan = 7963,
Hyper_Skill_Record_Cost_Money = 7965,
SkillUIHelperPopup = 7966,
ExpPlusEventAccountRecord = 7980,
ExpPlusEventProgress = 7981,
ExpPlusEventPushItemInfo = 7982,
ExpPlusEventFlowInfo = 7983,
ExpPlusItemBackUp = 7985,
Rune_Use_Date = 7994,
MacroDetect = 7995,
MacroDetectEx = 7996,
RPSGame = 9480,
Plant = 9876,
AdminShop = 10201,
AdminShopItemRegister = 10204,
CookieHouse_MaxPoint = 10226,
CookieHouse_LastPoint = 10227,
MaxCombo = 10335,
PremiumUserQuest_Base = 10661,
_2010FallMoon = 10876,
BoomUpEvent_Character_Begin = 10940,
BoomUpEvent_Character_End = 10942,
PvPMode_Score = 11020,
PvPMode_TeamDeath_Win_Count = 11021,
PvPMode_IceKnight_Win_Count_For_IceKnight = 11022,
PvPMode_IceKnight_Score = 11024,
PvPMode_IceKnight_Win_Count_For_Challenger = 11025,
PvPMode_TeamDeath_Win_Count_Daily = 11026,
PvPMode_DeathMatch_Score = 11027,
PvPMode_Participate_Count = 11028,
PvPMode_IceKnight_Win_Count_Daily = 11029,
EliminationOfBigMoonRabbit = 11030,
PvPMode_IceKnight_Score_Quest1 = 11047,
PvPMode_IceKnight_Score_Quest2 = 11048,
PvPMode_IceKnight_Morph_Quest = 11049,
PvPMode_IceKnight_Morph_Check = 11050,
JumpEvent_NewCharacter = 11335,
JumpEvent_NewCharacter_JobChange = 11337,
PrizeEvent = 11444,
PvPMode_BoomUpEvent_Check1 = 11560,
PvPMode_BoomUpEvent_PvPPoint = 11561,
PvPMode_BoomUpEvent_Check2 = 11563,
PvPMode_BoomUpEvent_Check3 = 11564,
PvP_OneDay_MAX_Battle_Point = 11565,
Macro_Exp_Decresase_Check = 11620,
LittleIndian = 11840,
FallSportsDay_BakCrash = 11868,
FallSportsDay_JulDarigi = 11871,
RelaxEXP_Time = 11920,
Halloween_Candy = 11930,
LevelUpGuideNotice = 12071,
NewyearBlackDragon = 12092,
EVENTSKILL_USED_COUNT_INADAY = 12251,
EVENTSKILL_LAST_USED_DAY = 12252,
SamSamSamEvent_MobCount = 12265,
KeyOfLiberation0 = 12300,
KeyOfLiberation1 = 12301,
KeyOfLiberation2 = 12302,
KeyOfLiberation3 = 12303,
KeyOfLiberation4 = 12304,
KeyOfLiberation5 = 12305,
KeyOfLiberation6 = 12306,
KeyOfLiberation7 = 12307,
KeyOfLiberation8 = 12308,
KeyOfLiberation9 = 12309,
KeyOfLiberation10 = 12310,
KeyOfLiberation11 = 12311,
KeyOfLiberation12 = 12312,
KeyOfLiberation13 = 12313,
KeyOfLiberation14 = 12314,
KeyOfLiberation15 = 12315,
KeyOfLiberation16 = 12316,
KeyOfLiberation17 = 12317,
KeyOfLiberation18 = 12318,
KeyOfLiberation19 = 12319,
KeyOfLiberation20 = 12320,
WeddingExStatus = 12326,
BossShieldCoolTime = 12330,
PetSkillSetting = 12334,
ValuePack_Info = 12348,
MapleStyle = 12359,
MapleStyle_Bonus = 12360,
PremiumUserQuest_Reward1 = 12373,
Character_Potential_Cash_Cube_Use = 12393,
Character_Potential_Get_Cube = 12397,
BoardGame_Info = 12501,
Bingo_Deck = 12509,
Bingo_Info = 12510,
Bingo_Start = 12511,
PvP_HardCore_Event = 12632,
PvP_HardCore_Event_1 = 12633,
PvP_HardCore_Event_2 = 12634,
PvP_HardCore_Event_3 = 12635,
PvP_HardCore_Event_Check = 12636,
MesoRanger = 12690,
MesoRanger_Start = 12691,
KaiserColorOrMorphChange = 12860,
BoardGame_Start = 12896,
MapleSchool_Start = 12915,
MapleSchool_Chapter1 = 12916,
MapleSchool_Chapter2 = 12918,
MapleSchool_Chapter3 = 12920,
MapleSchool_Chapter4 = 12922,
MapleSchool_Chapter5 = 12924,
MapleSchool_Chapter6 = 12926,
MapleSchool_Chapter7 = 12928,
MapleSchool_ClearCount = 12931,
MapleSchool_Event = 12934,
Event_MapleMuseumUI = 12935,
Event_MapleMuseum = 12936,
Event_MuseumKing_1 = 12937,
Event_MuseumKing_2 = 12938,
Event_MuseumKing_3 = 12939,
Event_MapleMuseumReset = 12940,
YutGame_Info_2012 = 12960,
YutGame_Info_2012_History = 12961,
YutGame_Achivement_2012 = 12962,
YutGame_Start_2012 = 12963,
_2012Fall_Weave = 12987,
_2012Fall_SportsDay_TugOfWar = 13003,
_2012Fall_SportsDay_GourdCrash = 13005,
_2012HalloweenCandy = 13035,
_2012HalloweenCandyReward = 13036,
ActionHero = 13037,
_2012HalloweenAnnocement = 13042,
Indian_Achivement_2012 = 13160,
ActionHero2 = 13174,
SaveDamageSkinInfo = 13190,
SaveDamageSkinList = 13191,
Action_Achivement_2012 = 13225,
Winter2012_Achievement = 13280,
Attendance = 13309,
Event_Lottery_Reward_Mon_1 = 13314,
Event_Lottery_Reward_Mon_2 = 13315,
Event_Lottery_Reward_Mon_3 = 13316,
Event_Lottery_Reward_Tue_1 = 13317,
Event_Lottery_Reward_Tue_2 = 13318,
Event_Lottery_Reward_Tue_3 = 13319,
Event_Lottery_Reward_Wed_1 = 13320,
Event_Lottery_Reward_Wed_2 = 13321,
Event_Lottery_Reward_Wed_3 = 13322,
Event_Lottery_Reward_Thu_1 = 13323,
Event_Lottery_Reward_Thu_2 = 13324,
Event_Lottery_Reward_Thu_3 = 13325,
Event_Lottery_Reward_Fri_1 = 13326,
Event_Lottery_Reward_Fri_2 = 13327,
Event_Lottery_Reward_Fri_3 = 13328,
Event_Lottery_Reward_Sat_1 = 13329,
Event_Lottery_Reward_Sat_2 = 13330,
Event_Lottery_Reward_Sat_3 = 13331,
Event_Lottery_Reward_Sun_1 = 13332,
Event_Lottery_Reward_Sun_2 = 13333,
Event_Lottery_Reward_Sun_3 = 13334,
Event_Lottery_Reward_NextMon_1 = 13335,
Event_Lottery_Reward_NextMon_2 = 13336,
Event_Lottery_Reward_NextMon_3 = 13337,
Event_Lottery_Mon = 13338,
Event_Lottery_Tue = 13339,
Event_Lottery_Wed = 13340,
Event_Lottery_Thu = 13341,
Event_Lottery_Fri = 13342,
Event_Lottery_Sat = 13343,
Event_Lottery_Sun = 13344,
Event_Lottery_MonNext = 13345,
Roulette_Roll_Count = 13378,
Winter2012_Achievement_Start = 13500,
BingoCassandra_Deck = 13504,
BingoCassandra_Info = 13505,
BingoCassandra_Start = 13506,
GilSsam = 13518,
MultiYutGiveUp = 13525,
BigRabbit = 13579,
Event_MuseumKingS2_1 = 13649,
Event_MuseumKingS2_2 = 13650,
Event_MuseumKingS2_3 = 13651,
Event_MuseumKingS2_Reward_1 = 13652,
Event_MuseumKingS2_RewardRecord = 13653,
Event_MuseumKingS2_Reward_2 = 13655,
Event_MuseumKingS2_Reward_3 = 13656,
Event_MuseumKingS2_ChangeItem_1 = 13657,
Event_MuseumKingS2_ChangeItem_2 = 13658,
Event_MuseumKingS2_ChangeItem_3 = 13659,
Maple10Ago = 13760,
TenthAnniGiveUp = 13783,
TenthAnniFirst = 13808,
MapleGift = 13850,
MapleMiniParty_Invite = 13885,
MiniParty_Reward = 13888,
Event_Name_Tag = 13902,
BattleField_Invite = 13925,
BattleField_Medal = 13927,
BattleField_Reward = 13928,
RhythmGame_Invite = 14025,
MiniGame_SpaceMoonRabbit = 14192,
MiniGame_Catapult = 14200,
Catapult_Reward = 14203,
_2013_Chuseok_Coin_Record_1st = 14228,
_2013_Chuseok_Coin_Record_2nd = 14229,
_2013_Halloween_Gamsper_Info = 14243,
_2013_Halloween_Gamsper_MissionA = 14245,
_2013_Capture_Flag = 14265,
WORLD_TRANSFER_RECORD = 14280,
GroupInvitationSaveMap = 14283,
HundredBingoReward = 14284,
_2013_Capture_Flag2 = 14286,
_2013_Capture_Flag3 = 14287,
WORLD_TRANSFER_RECORD_2ND = 14288,
YnIFestival_GiveUp = 14290,
OmokRenew_Cur = 14303,
MemoryGame_2013_Result = 14307,
TABG_Result = 14315,
MYG_Result = 14319,
OmokRenew_Record = 14323,
MemoryGame_2013_Recode = 14324,
WORLD_TRANSFER_RECORD_2015 = 14346,
WORLD_TRANSFER_RECORD_2015_2ND = 14347,
WORLD_TRANSFER_RECORDEX = 14356,
TypingGameRecode = 14376,
TypingGameMode = 14377,
HundredOxQuizRecode = 14383,
_2014_event_butterfly = 14410,
Event_ForceAtom = 14417,
Event_Name_Tag_2 = 14489,
BattleField_2015_Invite = 14642,
BattleField_2015_Medal = 14644,
BattleField_2015_Result = 14645,
DorajiPotRecord = 14755,
PlantPotRecord1 = 14756,
DorajiPotResult = 14759,
_12TH_TRESURE = 14762,
_12TH_TRESURE_RANK = 14767,
DorajiPotRecord2 = 14775,
MosterStory_2015_04_Episode = 14801,
Secret_Diary_Rinforce = 14917,
BingsooUpdateCheck = 14939,
PremiumUserQuest_Reward2 = 14946,
PremiumUserQuest_Reward3 = 14947,
PremiumUserQuest_Reward4 = 14948,
ToadsHammer_Tutorial = 14950,
ToadsHammer_Help = 14951,
HotTimeAbnormal = 14959,
CowGame_Result = 14994,
RP_CHARACTER_INDEX = 15008,
RP_Sengoku_15017 = 15017,
RP_Sengoku_15018 = 15018,
RP_Sengoku_15019 = 15019,
RP_Sengoku_15020 = 15020,
RP_Sengoku_15021 = 15021,
Chuseok_2015_Rabbit_Invite = 15059,
Chuseok_2015_Mouse_Invite = 15067,
PoloFrito_EagleHunting = 15141,
PoloFrito_CourtshipDance = 15143,
Halloween_2015_ActionHero_Invite = 15150,
PoloFrito_FlameWolf_Dead = 15172,
NewYearEventGuide = 15285,
TradeKing_NPC_ItemInfo_Reset1 = 15317,
TradeKing_NPC_ItemInfo_Reset2 = 15318,
TradeKing_NPC_ItemInfo_Reset3 = 15319,
TradeKing_NPC_ItemInfo_Reset4 = 15320,
TradeKing_Item1 = 15321,
TradeKing_Item2 = 15322,
TradeKing_Item3 = 15323,
TradeKing_Coin = 15324,
TradeKing_Porter = 15325,
TradeKing_Riding = 15326,
WORLD_TRANSFER_RECORD_2016 = 15341,
SaveDamageSkinBlockServerValue = 15353,
_2016_NewYear_Sign_Event = 15384,
StarEventRecord = 15410,
MonsterBattle_Tutorial_QuickSlot = 17321,
MonsterBattle_Tutorial_Capture = 17323,
MonsterBattle_Tutorial_Wear_Equip = 17326,
MonsterBattle_Tutorial_Reg_Skill = 17327,
MonsterBattle_Tutorial_LevelUp = 17328,
MonsterBattle_Tutorial_First_Battle = 17329,
MonsterBattle_Tutorial_Ranking_UI_Open = 17330,
MonsterBattle_Tutorial_QuickSlot_Ret = 17332,
MonsterBattle_Tutorial_Capture_Ret = 17333,
MonsterBattle_Tutorial_Wear_Equip_Ret = 17336,
MonsterBattle_Tutorial_Reg_Skill_Ret = 17337,
MonsterBattle_Tutorial_LevelUp_Ret = 17338,
MonsterBattle_Tutorial_First_Battle_Ret = 17339,
MonsterBattle_Tutorial_Ranking_UI_Open_Ret = 17340,
CharSlotIncItemEvent_Count = 18001,
RelaxEXP_Account = 18004,
RenameCharacterEventItem_1 = 18026,
RenameCharacterEventItem_2 = 18027,
RenameCharacterEventItem_3 = 18054,
IncubatorHotBonus = 18111,
Maple10SignEvent = 18127,
Cashshop_Vip = 18146,
CashShop_Amount = 18155,
Auction_Search = 18170,
CashMileage_Charge = 18192,
Auction_Register = 18195,
Auction_Success = 18196,
Auction_Premium = 18202,
RenameCharacterEventItem_4 = 18222,
_2013_Chuseok_Sign_Event = 18240,
CoordinationContest_AccInfo = 18255,
CoordinationContest_AccVote = 18257,
CoordinationContest_AccInfo2 = 18303,
UserResearch = 18326,
StarPlanet_AttendanceAccount = 18363,
CashMileage_Charge2 = 18364,
StarPlanet_AttendanceRestore = 18369,
FreezeAndHotEvent = 18416,
Contents_Stamp_Book_Guild = 18418,
Contents_Stamp_Book_Reinforce = 18420,
Contents_Stamp_Hub2 = 18421,
Contents_Stamp_Hub = 18426,
Contents_Stamp_Book_Reward = 18427,
EventBestFriend = 18428,
MesoExchange_TradedCount = 18431,
RenameCharacterEventItem_5 = 18496,
MosterStory_2015_04 = 18498,
URUS_ENTER = 18683,
Soul_Party_Dungeon_InterCount = 18688,
CashMileage_Earned_By_SPM_Charge = 18700,
SPM_Attendance_Account = 18701,
MonsterCollection_Record = 18821,
PlatformerStage_TryInfo = 18838,
PlatformerStage_Record_Bronze = 18874,
PlatformerStage_Record_Silver = 18875,
PlatformerStage_Record_Gold = 18876,
PlatformerStage_EventInfo = 18884,
ActiveNickSkillTimeLimited = 19019,
Cygnus_Rebirth_Ereb = 20954,
AranTutorial = 21001,
AranCommand_State = 21770,
Evan_Incubator = 22007,
Evan_No_Egg = 22011,
Evan_Glove = 22012,
Evan_Promoted = 22130,
Evan_Riding = 22402,
WildHunter_Jaguar = 23008,
FromFieldToPhantomShip = 25010,
Light_Mage_Tutorial1 = 25500,
Light_Mage_Tutorial2 = 25501,
Light_Mage_Tutorial_Count = 25502,
kaiser_Tutorial_Count = 25700,
Kaiser_Tutorial1 = 25722,
kaiser_Tutorial2 = 25723,
kaiser_Tutorial3 = 25724,
AngelicBurster_SoulRecharge_Tutorial = 25837,
AngelicBurster_SoulRecharge_Tutorial_Count = 25838,
JobSwap_Cost = 25946,
MakingSkill = 25948,
JobSwap_LastDay = 25957,
BossArenaTotalInfo = 25960,
BossArenaRecentlyPlayInfo = 25961,
BossArenaEtcInfo = 25962,
BossArenaTodayInfo = 25963,
EliteMonsterCount = 25965,
HyperUpgradeHelp = 25968,
HyperUpgradeFatigue = 25974,
BattleStatisticsHelp = 25976,
GrowthHelperInfo = 25980,
GuildPoint = 26011,
GuildJoinReqeust = 26015,
MesoExchange_Info = 26350,
BUYLIMIT_RESET = 26351,
MesoExchange_TradedPrice = 26353,
Hyper_Upgrade_Event = 26362,
DayOfMemoInGameSendCount = 26375,
NaviFlying = 26422,
NaviFlyingNPC = 26454,
PremiumGuide = 26458,
SoulCollection = 26467,
CoordinationContest_Info = 26486,
Soul_Dungeon_Init = 26491,
CoordinationContest_Reg_PreEntry = 26497,
CoordinationContest_Reward_PreEntry = 26498,
CoordinationContest_Reward_PreVote = 26499,
CoordinationContest_Reward_Vote = 26500,
CoordinationContest_Reward_Evaluate = 26508,
SoulEffect = 26535,
Mannequin_0 = 26544,
Mannequin_1 = 26545,
PET_EVOLUTION = 26549,
MesoExchange_TaxInfo = 26579,
RenameCharacterLog = 26580,
PigStick_MiniGame_Invite = 26587,
Soul_Dungeon_Result_And_Rank = 26600,
Soul_Dungeon_Mvp = 26604,
RenameCharacterNewLog = 26606,
MesoExchange_Discount_TaxRate_Buy1 = 26800,
MesoExchange_Discount_TaxRate_Buy10 = 26809,
MesoExchange_Discount_TaxPrice_Buy1 = 26810,
MesoExchange_Discount_TaxPrice_Buy10 = 26819,
MesoExchange_Discount_TaxRate_Sell1 = 26820,
MesoExchange_Discount_TaxRate_Sell10 = 26829,
MesoExchange_Discount_TaxPrice_Sell1 = 26830,
MesoExchange_Discount_TaxPrice_Sell10 = 26839,
MesoExchange_Bonus_Meso1 = 26840,
MesoExchange_Bonus_Meso10 = 26849,
MesoExchange_Bonus_MaplePoint1 = 26850,
MesoExchange_Bonus_MaplePoint10 = 26859,
MentoringMatchedList1 = 26906,
MentoringMatchedList2 = 26907,
ActivePremiumDamageSkin = 27022,
HuntingMaster = 29400,
HontaleSlayer = 29501,
BabyBossSlayer = 29502,
MedalReissue_Count = 29949,
DailyRandomQuest = 30022,
RootabyssReturnMap = 30028,
Rootabyss = 30029,
GhostParkClearCheck = 30200,
New_Krease_Partner_1 = 31075,
New_Krease_Partner_2 = 31077,
New_Krease_Partner_3 = 31078,
New_Krease_Partner_4 = 31079,
New_Krease_Partner_5 = 31080,
Cygnus_Clear = 31195,
FPSMode_Success = 31359,
AdventureJournal_Start_Adventurer = 32240,
InvasionSupport_AttackSay = 32420,
InvasionSupport_AttackWeapon = 32421,
InvasionSupport_AttackEnd = 32422,
InvasionSupport_BossKiller = 32423,
InvasionSupport_BestAttacker = 32424,
InvasionSupport_Count = 32425,
Hekaton_Reward_Alarm = 32544,
ItemLevelPoint = 32547,
Hekaton_Reward = 32548,
Hekaton_Entrance = 32550,
Capture_the_flag_lap = 32581,
DimensionLibrary = 32600,
Spinoff_Prologue = 32700,
Spinoff_Chapter1 = 32701,
Spinoff_Chapter2 = 32702,
Spinoff_Chapter3 = 32703,
Spinoff_Chapter4 = 32704,
Spinoff_Chapter5 = 32705,
Spinoff_NewIcon = 32719,
Spinoff_Dungeon_First_Direction = 33100,
Blockbuster_BlackHeaven = 33120,
Blockbuster_Alarm = 33129,
Blockbuster_Progress = 33130,
Blockbuster_BlackHeaven_SSFS = 33180,
MazeInfo_BlackHeaven = 33213,
MazeRecord_BlackHeaven = 33214,
MazeArea_BackHeaven = 33215,
BlackHeaven_Partner_NineHeart_1 = 33225,
BlackHeaven_Partner_NineHeart_2 = 33226,
BlackHeaven_Partner_NineHeart_3 = 33227,
BlackHeaven_Partner_NineHeart_4 = 33228,
BlackHeaven_Partner_Sigmund = 33248,
BlackHeaven_Partner_Helena = 33249,
Blockbuster_BlackHeaven_MGC = 33316,
Spinoff_Chapter6 = 33530,
URUS_SKILL = 33551,
URUS_RETURN_MAP = 33553,
Urus_Result_TimeAssist = 33554,
Urus_Result_Damage = 33555,
Urus_Result_ScoreGrade = 33556,
Urus_Result_Rank1 = 33557,
Urus_Result_Rank2 = 33558,
Urus_Result_Rank3 = 33559,
Urus_Result_Rank4 = 33560,
Urus_Result_KingList = 33561,
Urus_Medal_Info = 33562,
Urus_Penalty = 33565,
Urus_Pre = 33565,
Urus_More_LogInfo = 33590,
Urus_Team_HP = 33800,
Urus_Team_CatchSuccess = 33801,
Urus_Team_CatchFail = 33802,
Urus_Team_Rescue = 33803,
Urus_Team_TouchMe = 33804,
Urus_Team_GrabSuccess = 33805,
Urus_Team_GrabFail = 33806,
Urus_Team_Clear = 33807,
Urus_Team_PartArm = 33808,
Urus_Team_PartShoulder = 33809,
Urus_Team_PartHead = 33810,
Urus_Team_DamageTaken = 33811,
Urus_Team_HitAss = 33812,
Urus_Team_HitEnv = 33813,
Urus_User_CatchCount = 33850,
Urus_User_CatchRate = 33851,
Urus_User_RescueCount = 33852,
Urus_User_RescueRate = 33853,
Urus_User_TouchMe = 33854,
Urus_User_DealRate = 33855,
Urus_User_Heal = 33856,
Urus_User_Finish = 33857,
Urus_User_HitEnv = 33858,
Urus_User_DamateTaken = 33859,
SwitchRP_LastIndex = 33900,
SwitchRP_ACT1 = 33901,
SwitchRP_ACT2 = 33902,
SwitchRP_ACT3 = 33903,
SwitchRP_ACT4 = 33904,
HofM_Alarm = 33917,
PlatformerStage_EnterInfo = 34502,
Hidden_Tutorial_Teleport = 38997,
UserResearchMap = 39000,
First_TearOfGoddess = 40112,
Second_TearOfGoddess = 40210,
Third_TearOfGoddess = 40310,
Last_TearOfGoddess = 40705,
Zero_ACT_START = 40900,
Zero_ACT_FREE = 40980,
Zero_Lucky_Equip = 41907,
ZeroTagTutorial = 41929,
HazyStoneTimer = 42000,
TheSeedTowerRanking = 42002,
ABYSSTOWER_FLOOR = 42002,
ABYSSTOWER_POINT = 42003,
SeedTowerRankingSave = 42102,
SeedTowerWeekSave = 42106,
StarPlanet_HundredRps = 43600,
StarPlanet_HundredRps_JoinUser = 43601,
StarPlanet_HundredBingo = 43602,
StarPlanet_HundredBingo_JoinUser = 43603,
StarPlanet_OneCard_Customizing = 43604,
StarPlanet_TypingGame_Customizing = 43605,
StarPlanet_TABG_Customizing = 43606,
StarPlanet_Yut_Customizing = 43607,
StarPlanet_TypingGameSolo_Customizing = 43608,
StarPlanet_Matching_ExceptUser1 = 43609,
StarPlanet_Matching_ExceptUser2 = 43610,
StarPlanet_Matching_LastMatching = 43611,
StarPlanet_WorldEvent_Reward = 43618,
StarPlanet_TypingGame = 43621,
StarPlanet_TypingGameSolo = 43622,
StarPlanet_TABGResult = 43623,
StarPlanet_YutResult = 43624,
StarPlanet_SuperYutResult = 43625,
StarPlanet_OneCard = 43626,
StarPlanet_OneCardResult = 43627,
StarPlanet_GSRPSGame = 43628,
StarPlanet_MiniGame = 43629,
StarPlanet_MiniGamePlay = 43630,
StarPlanet_Enter_ReturnMap = 43636,
StarPlanet_LastFieldID = 43640,
StarPlanet_OPGameScore = 43642,
StarPlanet_MiniGame_Rating_1 = 43643,
StarPlanet_MiniGame_Rating_2 = 43644,
StarPlanet_PointInfo = 43710,
StarPlanet_UI = 43711,
StarPlanet_RewardRecv = 43724,
StarPlanet_RewardInfo = 43727,
StarPlanet_MaxPoint = 43728,
StarPlanet_HundredRps_PlayCount = 43737,
StarPlanet_HundredBingo_PlayCount = 43738,
StarPlanet_ExpBuff = 43740,
StarPlanet_RelaxExp = 43740,
StarPlanet_Ranking = 43742,
StarPlanet_GradeUp_G03 = 43756,
StarPlanet_GradeUp_G04 = 43757,
StarPlanet_GradeUp_G05 = 43758,
StarPlanet_GradeUp_G06 = 43759,
StarPlanet_GradeUp_G07 = 43760,
StarPlanet_GradeUp_G08 = 43761,
StarPlanet_GradeUp_G09 = 43762,
StarPlanet_GradeUp_G10 = 43763,
StarPlanet_GradeUp_G11 = 43764,
StarPlanet_ShiningStar = 43769,
StarPlanet_DanceEndTime = 43775,
StarPlanet_Omok_Record = 43782,
StarPlanet_Omok_CurrentRet = 43783,
StarPlanet_Attendance = 43785,
StarPlanet_WorldEventParticipant = 43786,
StarPlanet_BuffLog_Start = 43790,
StarPlanet_BuffLog_End = 43799,
StarPlanet_GroupDance = 43821,
StarPlanet_GroupDance_MaxSuccess = 43830,
StarPlanet_YutResultForTime = 43833,
StarPlanet_GSRPSGameForTime = 43834,
StarPlanet_TypingGameSoloForTime = 43835,
StarPlanet_TypingGameForTime = 43836,
StarPlanet_TABGResultForTime = 43837,
StarPlanet_OneCardResultForTime = 43838,
StarPlanet_SuperYutResultForTime = 43839,
BattlePvP_ResultForTime = 43840,
StarPlanet_SuperYutSkill = 43853,
BattlePvP_Result = 43860,
STARPLANET_PLAY_LOG = 47500,
STARPLANET_ACT_LOG = 47501,
STARPLANET_SOCIAL_LOG = 47502,
STARPLANET_SYSTEM_LOG = 47503,
YUT_DICE = 47701,
YUT_CATCH = 47702,
TABG_DICE = 47706,
TABG_BOSS_CELL = 47707,
ONECARD_DAMAGED = 47711,
ONECARD_LOG = 47712,
TYPINGGAME_LOG = 47716,
TYPINGGAME_SKILL = 47717,
BATTLEPVP_CHAR_SEL = 47721,
SUPER_YUT_DICE = 47726,
SUPER_YUT_CATCH = 47727,
SUPER_YUT_SKILL_YUT = 47728,
SUPER_YUT_SKILL_PIECE = 47729,
SUPER_YUT_NO_USE_SKILL = 47730,
SUPER_YUT_USE_ALLSKILL = 47731,
RandomMission = 49000,
RunnerGame = 53448,
}
enum Phrase {
None = 0,
List = 1,
Func0 = 2,
Func1 = 3,
Func2 = 4,
Func3 = 5,
Reward = 6,
ItemIcon = 7,
ItemIcon_Outline = 8,
ItemIcon_Secret = 9,
SkillIcon = 10,
Canvas = 11,
Canvas_Outline = 12,
Canvas_ProgressBar = 13,
PartyQuestKeyword = 14,
TimeLimitQuest = 15,
DailyPlayQuest = 16,
QuestSummary = 17,
QuestOrder = 18,
Text = 19,
Illustration = 20,
IllustEmotion = 21,
ForceNextNpc = 22,
MirrorDungeon = 23,
FontName = 24,
FontSize = 25,
FontColor = 26,
IllustAvatarEmotion = 27,
}
enum CT {
TEXT = 0,
ICON = 1,
DRAW = 2,
FUNC = 3,
SELECT = 4,
ILLUFACEEMOTION = 5,
FORCESELECTNEXTNPC = 6,
ILLUAVATAREMOTION = 7,
}
GetPhraseType
L 1 Show list #L0#blah#l
E 2 Activate 'equipment' button flashing, 'Func0'
I 3 Activate 'Inventory' button flashing, 'Func1'
S 4 Activate 'Stats' button flashing, 'Func2'
K 5 Activate 'Skills' button flashing, 'Func3'
w 6 Toggles 'bIsReward' in AnalyzeText, 'Reward'
i 7 item icon
e 9 'secret' item icon
s 10 skill icon
f 11 file ref (canvas)
F 11 file ref
j 14 PartyQuestKeyword
v 7 item icon
W 17 QuestSummary
B 13 Progress bar
D 16 DailyPlayQuest
Q 15 TimeLimitQuest ?
--- KMST
questorder 18 For chained quests? See 'Quest Order', #questorder 1# ?
illu 20 #illu Lv3# ? Illustration
face 21 IllustEmotion #face 0# ?
avatar 27 IllustAvatarEmotion #avatar chu#
npc 22 ForceNextNpc
fn 24 FontName (!)
fs 25 FontSize (!)
fc 26 FontColor (!)
MD 23 Mirror Dungeon image?
default 19
GetParamNo's
q skill
t item Something going on with :
u
x quest bonus exp? (shows 0% in most cases)
y ???
p npc ref
M quest mob name
R get quest? needs more info
a quest mob count?
c item count
h playerref
m mapref
o mobref
Party stuff:
[IDX6348] #jrank#
[IDX6349] #jtry#
[IDX6350] #jvic#
[IDX6351] #jcmp#
[IDX6352] #jlose#
[IDX6353] #jdraw#
[IDX6354] #jmin#
[IDX6355] #jgvup#
[IDX6356] #jhave
[IDX6357] #jsec#
[IDX6358] #jpop#
[IDX6359] #jpopgap#
[IDX6360] #jlevel#
[IDX6361] #jscnt#
[IDX6362] #jcmpcnt#
[IDX6363] #jgaugePqS#
[IDX6364] #jgaugeQCnt#
[IDX6365] #jgaugeDays#
[IDX6366] #jgaugePop#
[IDX6367] #jgaugeHunt#
[IDX6368] #jperPqS#
[IDX6369] #jperQCnt#
[IDX6370] #jperDays#
[IDX6371] #jperPop#
[IDX6372] #jperHunt#
Color stuff (nColor in AnalyzeText)
character color extra
k 0 (4 if white based)
r 1 Alias: Cred
g 2 Alias: Cgreen
b 3 Alias: Cblue
d 5 Alias: Cviolet
y 6 Alias: Cgray
Cyellow 7
Formatting
e Set text to bold
n Set text to not bold
Extra
l Stop select/menu/list item (-1)
- Quest Order
When the text is analyzed (CTextAnalyzer::AnalyzeText), nQuestCurOrder is set to 1.
If the nQuestID passed to the AnalyzeText function is not zero,
the QuestDemand is loaded through CQuestMan::GetCompleteDemand using this nQuestID
if QuestDemand is not null,
the nQuestCurOrder is set using get_quest_cur_order function. This function
uses an argument bVipAccount, which is read off the User bitflags (set on login).
get_quest_cur_order function is pretty complex. It calls get_quest_last_order,
which will get the demand of the quest (GetCompleteDemand) and will try to
figure out which quest is first:
func get_quest_last_order(questId):
demand = CQuestMan::GetCompleteDemand(questId)
a = 1
a = max(a, demand.nCharInfoOrder)
foreach demand.PrecedeQuest as QuestRecord qr:
a = max(a, qr.nOrder)
foreach demand.DemandItem as ItemInfo item:
a = max(a, item.nOrder)
foreach demand.DemandMob as MobInfo mob:
a = max(a, mob.nOrder)
if demand.Info_CondContent.length > 0:
// Possible exception here, not null checked (others are)
foreach demand.Info_Order as Long unk
a = max(a, unk)
foreach demand.NpcSpeech as QuestDemand::NpcSpeech words:
a = max(a, words.nOrder)
return a
func get_quest_cur_order(questId, npcTemplateId, characterData, basicStat, bs, vipAccount):
last_order = get_quest_last_order(questId)
vipGrade = 0 // Unset
if last_order >= 1:
a = 1
b = 0 // Unset
while CQuestMan::Instance()->CheckCompleteDemand(questId, npcTemplateId, characterData, basicStat, vipAccount, vipGrade) == false:
a += 1
if a > b:
return b
last_order = a
return last_order
if, while parsing, GetPhraseType 18(questorder) is found:
if atoi(phraseText) >= nQuestCurOrder:
add_text(18, phraseText)
func add_text(phraseType, phraseText):
// add_text is not the actual name, but its referred to by another func
line = lines.add()
line.lineNumber = global.lineNumber // Ehh.. something.. not very interesting
line.select = nSelect // Set by #L and reset by #l
line.bLineChange = 0
// prepare some stuff for rendering, eg line width and size
// ...
// skip
if phraseType == QuestOrder:
phraseText = "???"
switch phraseType:
case List:
line.type = Select
if !bSkipListIcon:
line.width = 18
nSelect = GetParamNo(phraseText)
line.select = nSelect
do_next(phraseType, phraseText)
break
case Func0:
line.type = Func
line.funcCode = 0
do_next(phraseType, phraseText)
break
case Func1:
line.type = Func
line.funcCode = 1
do_next(phraseType, phraseText)
break
case Func2:
line.type = Func
line.funcCode = 2
do_next(phraseType, phraseText)
break
case Func3:
line.type = Func
line.funcCode = 3
do_next(phraseType, phraseText)
break
case ItemIcon:
case ItemIcon_Outline:
case ItemIcon_Secret:
line.type = Icon
itemId = GetParamNo(phraseText)
if phraseType == ItemIcon_Secret:
itemId = CheckSecretItemID(itemId)
if phraseText.contains(':'):
line.itemNo = itemId
else:
line.itemNo = 0 // Make hoverable?
itemName = CItemInfo::GetItemName(itemId)
line.text = itemName
if line.text.length > 0:
testerText = "[%d]%s" % (itemId, line.text)
userText = line.text
line.text = CWvsContext::MakeHelpStrings(userText, testerText) // Adds the itemid infront of the name when tester
itemIcon = CItemInfo::GetItemIcon(itemId, bWithShadow: 1, bDifferent: 0, bIgnoreBAEmblem: 0, pItem: 0)
if phraseType == ItemIcon:
line.icon = itemIcon
else:
line.icon = GetOutlineCanvas(itemIcon)
line.width = line.icon.Getwidth()
line.height = line.icon.Getheight()
line.reward = bReward
line.itemUnrelease = phraseText.contains('U')
do_next(phraseType, phraseText)
break
case SkillIcon:
skillId = GetParamNo(phraseText)
skillInfo = CSkillInfo::GetSkill(skillId)
if skillInfo != null:
line.type = Icon
line.text = skillInfo.name
line.icon = skillInfo.GetIconCanvas()
CWvsContext::DrawForceInfoIcon(line.icon, skillId) // If the skill has a force icon, render it on top.
line.width = line.icon.Getwidth()
line.height = line.icon.Getheight()
do_next(phraseType, phraseText)
break
case Canvas:
case Canvas_Outline:
line.type = Draw
image = IWzResMan::GetObjectA(phraseText)
// No null check!
if phraseType == Canvas:
line.icon = image
else:
line.icon = GetOutlineCanvas(image)
line.width = line.icon.Getwidth()
line.height = line.icon.Getheight()
do_next(phraseType, phraseText)
break
case Illustration:
level = 0
key = ''
if phraseText.contains('Lv'):
level = atoi(phraseText.substr(phraseText.find('Lv'))) // Converts 'Lv12345' to 12345
if phraseText.contains('illu'):
key = phraseText.substr(phraseText.find('illu'))
atoi(key) // This is done, but value is not saved?
if !key.empty:
line.icon = MakeIllustration(key, level)
if line.icon == null:
throw exception
line.type = Draw
line.width = line.icon.Getwidth()
line.height = line.icon.Getheight()
do_next(phraseType, phraseText)
break
case IllustEmotion:
// So this illustration thing can show emotion? wow
line.type = IlluFaceEmotion
if phraseText.contains('face'):
line.select = atoi(phraseText.substr(phraseText.find('face')))
do_next(phraseType, phraseText)
break
case IllustAvatarEmotion:
line.type = IlluAvatarEmotion
emotion_code = 0
if phraseText.contains('avatar'):
emotion_name = phraseText.substr(phraseText.find('avatar'))
emotion_code = get_emotion_code_from_name(emotion_name)
line.select = max(emotion_code, 0)
do_next(phraseType, phraseText)
break
case ForceNextNpc:
line.type = ForceSelectNextNpc
if phraseText.contains('npc'):
line.forceNpc = atoi(phraseText.substr(phraseText.find('npc')))
do_next(phraseType, phraseText)
break
case MirrorDungeon:
// Renders the name of the mirror dungeon...
mdStr = phraseText.substr(phraseText.find('MD'))
ID = 'String/mirrorDungeon.img/%s' % (mdStr)
object = IWzResMan::GetObjectA(ID)
if object != null:
line.text = object.Getitem('name')
line.type = Text
line.font = pCurFont
line.width = font.CalcTextWidth(line.text)
line.height = font.GetfullHeight()
line.reward = bIsReward
do_next(phraseType, phraseText)
break
case Canvas_ProgressBar:
line.type = Canvas
amount = GetParamNo(phraseText)
amount = max(min(100, amount), 10) // between 10 and 100
object = IWzResMan::GetObjectA('UI/Login.img/Notice/Loading/bar/%d' % (amount)) // Im not kidding, they use the login bar...
canvas = IWzCanvas::Create
canvas.Copy(0, 0, object, 0) // Copy the image over...
line.icon = canvas
line.width = line.icon.Getwidth()
line.height = line.icon.Getheight()
do_next(phraseType, phraseText)
break
case PartyQuestKeyword:
key = phraseText.substr(2)
if phraseText.contains('@'):
atSignPos = key.find('@')
phraseQuestId = key.substr(0, atSignPos)
key = key.substr(atSignPos + 1)
key += '#'
// TODO: extend this code. its pretty huge.
case TimeLimitQuest:
orig = phraseText.substr(2)
CQuestMan::IsRandomMissionQuest(nQuestID) // Discarded...
expireTime = CharacterData::GetQuestExpireTime(nQuestID)
actualTime = get_field()->GetCorrectTime()
timeDiff = expireTime - actualTime
textValue = 0
switch orig:
case 'daylimit': textValue = timeDiff / (24 * 60 * 60); break
case 'hourlimit': textValue = timeDiff / (60 * 60) % 24; break
case 'minlimit': textValue = timeDiff / 60 % 60; break
case 'seclimit': textValue = timeDiff % 60; break
line.text = '%d' % (textValue)
if pCurFont == null:
// Why does nexon check for null here??
line.font = get_basic_font(FONT_BASIC_BLACK)
else:
line.font = pCurFont
line.width = font.CalcTextWidth(line.text)
line.height = font.GetfullHeight()
line.reward = bIsReward
do_next(phraseType, phraseText)
break
case DailyPlayQuest:
name = phraseText.substr(2)
ptrData = CharacterData::GetQuestPlayTimeRecord(nQuestID)
time = ptrData.PlayTime
if ptrData.done:
time = CQuestMan::GetQuestDailyPlayMinTime(nQuestID)
textValue = 0
switch name:
case 'day': textValue = time / (24 * 60 * 60); break
case 'hour': textValue = time / (60 * 60) % 24; break
case 'min': textValue = time / 60 % 60; break
case 'sec': textValue = time % 60; break
case 'daylimit':
textValue = CQuestMan::GetQuestTimeLimit2(nQuestID) / 24 / 60 / 60
textValue *= 0.9
break
case 'count': textValue = ptrData.DoneCount; break
line.text = '%d' % (textValue)
if pCurFont == null:
// Why does nexon check for null here??
line.font = get_basic_font(FONT_BASIC_BLACK)
else:
line.font = pCurFont
line.width = font.CalcTextWidth(line.text)
line.height = font.GetfullHeight()
line.reward = bIsReward
do_next(phraseType, phraseText)
break
case QuestSummary:
// Options:
// basic, prob, reward, select, startcondition
imageName = phraseText.substr(2)
ID = 'UI/UIWindow2.img/Quest/quest_info/summary_icon/%s' % (imageName)
image = IWzResMan::GetObjectA(ID)
line.icon = image
line.width = line.icon.Getwidth()
line.height = line.icon.Getheight()
line.reward = bIsReward
do_next(phraseType, phraseText)
break
case None:
case Text:
if phraseType == Text:
paramNo = GetParamNo(phraseText)
switch phraseText[1]:
case 'h':
charname = CWvsContext::GetCharacterName()
// Korean text additions
if phraseText.length >= 3:
switch phraseText[2]:
case '1': charname = Util::AddJosa_EUN(charname); break
case '2': charname = Util::AddJosa_I(charname); break
case '3': charname = Util::AddJosa_EUL(charname); break
line.text = charname
break
case 'o':
// mob string
line.text = get_labeled_string(paramNo, "name")
break
case 'e':
case 't':
if phraseText[1] == 'e':
itemId = CheckSecretItemID(paramNo)
else:
itemId = paramNo
line.text = CItemInfo::GetItemName(itemId)
if phraseText.contains(':'):
line.itemNo = itemId
else:
line.itemNo = 0 // Make hoverable?
itemName = CItemInfo::GetItemName(itemId)
line.text = itemName
if line.text.length > 0:
testerText = "[%d]%s" % (itemId, line.text)
userText = line.text
line.text = CWvsContext::MakeHelpStrings(userText, testerText) // Adds the itemid infront of the name when tester
break
case 'z':
// Maybe backwards compatible with old inventory system?
// The code is basically the same...
itemId = paramNo
line.text = CItemInfo::GetItemName(itemId)
if line.text.length > 0:
testerText = "[%d]%s" % (itemId, line.text)
userText = line.text
line.text = CWvsContext::MakeHelpStrings(userText, testerText) // Adds the itemid infront of the name when tester
break
case 'p':
// npc string
line.text = get_labeled_string(paramNo, "name")
break
case 'm':
// map string
line.text = CItemInfo::GetMapString(paramNo, "mapName")
break
case 'q':
skillIdStr = '%07d' % (paramNo)
line.text = get_labeled_string(skillIdStr, "name")
break
case 'c':
line.text = _Int2Str(CWvsContext::GetItemCount(paramNo))
break
case 'a':
line.text = CWvsContext::GetQuestMobCount(paramNo) // paramNo == questid. Also, it already returns a string...
break
case 'M':
line.text = CWvsContext::GetQuestMobName(paramNo) // paramNo == Quest Record Key
break
case 'x':
line.text = CWvsContext::GetQuestBonusEXP(paramNo) // paramNo == Quest Record Key
break
case 'y':
// Reads a property from the QuestInfo.img/questid/N
// Or N@
questPropId = _Int2Str(paramNo)
prop = IWzResMan::GetObjectA('Quest/QuestInfo.img/%d/%s' % (nQuestID, questPropId))
if prop != null:
// If '@' is after the ID, we do something special
// Options are: 0@, 1@, 2@, 3@
// Additionally, : can be appended to print the time...? otherwise only the date
if phraseText[2] == '@':
printTime = phraseText.contains(':')
switch phraseText[1]:
case '0': line.text = CQuestMan::GetStartDate(nQuestID, printTime); break
case '1': line.text = CQuestMan::GetEndDate(nQuestID, printTime); break
// Yes, these two are the same. I'm not sure why
case '2': line.text = CQuestMan::GetStartDate(nQuestID, printTime); break
case '3': line.text = CQuestMan::GetEndDate(nQuestID, printTime); break
else:
line.text = prop.Getitem('name') // ???
else:
line.text = '.'
break
case 'u':
// Get quest status
questId = paramNo
questState = 0
if CharacterData::IsQuestInProgress(questId):
questState = 1
else if CharacterData::GetQuestComplete(questId) != null:
questState = 2
switch questState:
case 0: line.text = 'not started'; break // Not sure, korean...
case 1: line.text = 'in progress'; break // Not sure, korean...
case 2: line.text = 'complete'; break // Not sure, korean...
break
case 'R':
exPos = phraseText.find('Ex')
if !phraseText.contains('Ex'):
questData = CharacterData::GetQuest(paramNo) // Get quest data for questid (paramNo)
if questData == null:
line.text = '(empty)'
else:
line.text = questData
else:
// #R1234Ex#
questId = atoi(phraseText.substr(2, exPos))
// #R1234ExRef9999#
// Ref is a quest id
refPos = phraseText.find('Ref')
refStr = phraseText.substr(refPos + 3)
refId = atoi(refStr)
stuffBetweenExAndRef = phraseText.substr(exPos, refPos - exPos)
name = ''
if !stuffBetweenExAndRef.empty:
// #R1234Ex5678Ref9999# , what a mess
// Reference for the value
name = CharacterData::GetQuestEx(questId, stuffBetweenExAndRef)
if name.empty:
name = '0'
demand = CQuestMan::GetCompleteDemand(refId)
if demand == null:
line.text = '(error)'
else:
infoId = 0
foreach demand.info as QuestInfo info
if demand.Info_ExVariable[infoId] == name:
break
infoId += 1
if demand.InfoCond[infoId] != 0:
line.text = name
else if EqualsIgnoreCase(name, demand.Info[infoId]):
line.text = 'unfinished' // 미완
else
line.text = 'finished' // 완료
// End of switch
if pCurFont == null:
// Why does nexon check for null here??
line.font = get_basic_font(FONT_BASIC_BLACK)
else:
line.font = pCurFont
line.width = font.CalcTextWidth(line.text)
line.height = font.GetfullHeight()
line.reward = bIsReward
do_next(phraseType, phraseText)
break
default:
do_next(phraseType, phraseText)
break
else: // not Text, None
line.text = phraseText
case
func get_emotion_code_from_name(name):
list = [
"blink",
"hit",
"smile",
"troubled",
"cry",
"angry",
"stunned",
"vomit",
"oops",
"cheers",
"chu",
"wink",
"pain",
"glitter",
"blaze",
"shine",
"love",
"despair",
"hum",
"bowing",
"hot",
"dam",
// Repeated.. for some reason...
"vomit",
"oops",
"cheers",
"chu",
"wink",
"pain",
"glitter",
"blaze",
"shine",
"love",
"despair",
"hum",
"bowing",
"hot",
"dam",
"qBlue"
]
return list.find(name)
func CheckSecretItemID(itemId):
questItemId = GetQuestItemId(itemId / 10, itemId % 10)
// Check if the user already has this item in the inventory
// Does not work for cash items (inv 5)
if IsExist(questItemId):
return questItemId
else:
return 3800088
func GetQuestItemId(questId, num):
demand = GetCompleteDemand(questId)
if demand == null || num < 1 || demand.length < num:
return 0
return demand[num].ItemId
func do_next(phraseType, phraseText):
GetPhrase()
func GetQuestMobcount(id):
questId = id / 10
questMobDemandIdx = id % 10
id %= 10
qrStr = chardata.QuestRecord[id]
if qrStr != null:
count = 0
qrStrLen = qrStr.length
if qrStrLen >= 3 * questMobDemandIdx:
// Get the mob count, max 999 mobs
qrStr = qrStr.substr(3 * questMobDemandIdx - 3, 3)
count = qrStr != null ? atoi(qrStr) : 0
demand = GetCompleteDemand(questId)
mobDemand = demad.DemandMob[questMobDemandIdx]
return "%d / %d" % (count, mobDemand)
else:
return ""
func GetQuestMobName(questRecordKey):
info = _GetQuestValue(questRecordKey)
if info.MobID == 0:
return ""
return get_labeled_string(info.MobID, "name")
func _GetQuestValue(questRecordKey):
qrStr = chardata.QuestRecord[questRecordKey]
result = CharacterData::SELECTEDMOB::Decode(qrStr)
return result
func CharacterData::SELECTEDMOB::Decode(questRecordValue):
result = {}
result.MobID = 0
result.Abs = 0
result.BonusEXP = 0
elems = questRecordValue.split('/')
if elems.length >= 3:
result.MobID = atoi(elems[0])
result.Abs = atoi(elems[1])
result.BonusEXP = atoi(elems[2])
return result
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment