File indexing completed on 2024-12-01 06:51:43
0001 /*************************************************************************** 0002 cmapfilter.cpp 0003 ------------------- 0004 begin : Thu Nov 1 2001 0005 copyright : (C) 2001 by Kmud Developer Team 0006 (C) 2007 by Tomas Mecir <kmuddy@kmuddy.net> 0007 email : kmud-devel@kmud.de 0008 ***************************************************************************/ 0009 0010 /*************************************************************************** 0011 * * 0012 * This program is free software; you can redistribute it and/or modify * 0013 * it under the terms of the GNU General Public License as published by * 0014 * the Free Software Foundation; either version 2 of the License, or * 0015 * (at your option) any later version. * 0016 * * 0017 ***************************************************************************/ 0018 0019 #include "cmapfilter.h" 0020 0021 #include "cmapmanager.h" 0022 #include "cmapview.h" 0023 #include "cmaproom.h" 0024 #include "cmappath.h" 0025 0026 #include <qregexp.h> 0027 0028 CMapFilter::CMapFilter(CMapManager *manager) 0029 { 0030 mapManager = manager; 0031 } 0032 0033 CMapFilter::~CMapFilter() 0034 { 0035 } 0036 0037 /** This method is called with when input is sent to the mud */ 0038 QString CMapFilter::processCommand (const QString &command) 0039 { 0040 if (mapManager->validMoveCmd(command)) 0041 { 0042 CMapView *view = mapManager->getActiveView(); 0043 if (view->getFollowMode()) 0044 { 0045 QString newStr; 0046 newStr += executeBeforeCommand (command); 0047 newStr += command; 0048 newStr += executeAfterCommand (command); 0049 0050 if (mapManager->getMapData()->validRoomCheck) 0051 directionCmdQueue.append (command); 0052 else 0053 mapManager->movePlayerBy(command); 0054 return newStr; 0055 } 0056 } 0057 return command; 0058 } 0059 0060 QString CMapFilter::executeBeforeCommand (const QString &command) 0061 { 0062 QString specialCmd; 0063 directionTyp dir = mapManager->textToDirection(command); 0064 if (dir == SPECIAL) 0065 specialCmd = command; 0066 0067 CMapPath *path = mapManager->getCurrentRoom()->getPathDirection(dir,specialCmd); 0068 0069 if (path) 0070 { 0071 QString roomCmd = path->getBeforeCommand(); 0072 0073 if (!roomCmd.trimmed().isEmpty()) 0074 return roomCmd + "\n"; 0075 } 0076 return QString(); 0077 } 0078 0079 QString CMapFilter::executeAfterCommand (const QString &command) 0080 { 0081 QString specialCmd; 0082 directionTyp dir = mapManager->textToDirection(command); 0083 if (dir == SPECIAL) 0084 specialCmd = command; 0085 0086 CMapPath *path = mapManager->getCurrentRoom()->getPathDirection(dir,specialCmd); 0087 0088 if (path) 0089 { 0090 QString roomCmd = path->getAfterCommand(); 0091 0092 if (!roomCmd.trimmed().isEmpty()) 0093 return "\n" + roomCmd; 0094 } 0095 return QString(); 0096 } 0097 0098 /** This method is called when output is sent to the mud */ 0099 void CMapFilter::processServerOutput(const QString &s) 0100 { 0101 if (!directionCmdQueue.isEmpty()) { 0102 QString dirCmd = directionCmdQueue.takeFirst(); 0103 0104 if (mapManager->getActiveView()->getFollowMode()) 0105 { 0106 bool movePlayer = true; 0107 0108 QStringList::iterator it; 0109 for (it = mapManager->getMapData()->failedMoveMsg.begin(); 0110 it != mapManager->getMapData()->failedMoveMsg.end(); ++it) 0111 { 0112 QString str = *it; 0113 if (!str.isEmpty()) 0114 { 0115 QRegExp r(str); 0116 0117 if ( r.indexIn(s) != -1) 0118 { 0119 movePlayer = false; 0120 break; 0121 } 0122 } 0123 0124 } 0125 0126 if (movePlayer) 0127 mapManager->movePlayerBy(dirCmd); 0128 } 0129 } 0130 } 0131