class VhtEvents : StaticEventHandler { bool m_useQuestLog; string m_questLog; VhtFnPlayerInv m_fGetQuests; VhtQuestHolder vhtGetQuests() const { return m_fGetQuests.vhtRun() ? VhtQuestHolder(m_fGetQuests.m_result) : null; } override void playerEntered(PlayerEvent e) { let p = players[e.playerNumber].mo; if(p && !p.findInventory("VhtQuestHolder")) { p.giveInventoryType("VhtQuestHolder"); } if(!m_fGetQuests) { m_fGetQuests = new("VhtFnPlayerInvExist").vhtInit("VhtQuestHolder"); } let qh = vhtGetQuests(); if(!e.isReturn && m_fGetQuests.m_player == e.playerNumber) { qh.vhtAddQuest("VhtQuest" .. level.levelNum); } } override void playerDisconnected(PlayerEvent e) { let p = players[e.playerNumber].mo; if(p) { let qh_ply = VhtQuestHolder(p.findInventory("VhtQuestHolder")); let qh_cur = vhtGetQuests(); if(qh_cur == qh_ply) { p.removeInventory(qh_ply); qh_cur = vhtGetQuests(); qh_ply.m_quests.move(qh_cur.m_quests); } } } override void worldTick() { m_useQuestLog = vht_player_questlog; let qh = vhtGetQuests(); if(qh) { qh.vhtTick(); if(m_useQuestLog) { m_questLog = qh.vhtDescribe(); } } } override void renderUnderlay(RenderEvent e) { if(automapActive && m_useQuestLog) { double x = Screen.getWidth() / 320.0; double y = Screen.getHeight() / 8.0; Screen.drawText(smallfont, Font.CR_UNTRANSLATED, x+x, y+x, m_questLog, DTA_CLEANNOMOVE_1,true, DTA_ALPHA,0.406, DTA_FILLCOLOR,0); Screen.drawText(smallfont, Font.CR_UNTRANSLATED, x, y, m_questLog, DTA_CLEANNOMOVE_1,true); } } }