Merge pull request #526 from AttorneyOnline/crystalwarrior/demo-reload
Add a /reload command that quickly reloads the current demo
This commit is contained in:
		
						commit
						bea9fc1a05
					
				@ -25,6 +25,7 @@ public:
 | 
				
			|||||||
private:
 | 
					private:
 | 
				
			||||||
    void handle_packet(AOPacket packet);
 | 
					    void handle_packet(AOPacket packet);
 | 
				
			||||||
    void load_demo(QString filename);
 | 
					    void load_demo(QString filename);
 | 
				
			||||||
 | 
					    void reset_state();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    QTcpServer* tcp_server;
 | 
					    QTcpServer* tcp_server;
 | 
				
			||||||
    QTcpSocket* client_sock = nullptr;
 | 
					    QTcpSocket* client_sock = nullptr;
 | 
				
			||||||
 | 
				
			|||||||
@ -162,6 +162,7 @@ void DemoServer::handle_packet(AOPacket packet)
 | 
				
			|||||||
          load_demo(path);
 | 
					          load_demo(path);
 | 
				
			||||||
          QString packet = "CT#DEMO#" + tr("Demo file loaded. Send /play or > in OOC to begin playback.") + "#1#%";
 | 
					          QString packet = "CT#DEMO#" + tr("Demo file loaded. Send /play or > in OOC to begin playback.") + "#1#%";
 | 
				
			||||||
          client_sock->write(packet.toUtf8());
 | 
					          client_sock->write(packet.toUtf8());
 | 
				
			||||||
 | 
					          reset_state();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else if (contents[1].startsWith("/play") || contents[1] == ">")
 | 
					        else if (contents[1].startsWith("/play") || contents[1] == ">")
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@ -220,6 +221,13 @@ void DemoServer::handle_packet(AOPacket packet)
 | 
				
			|||||||
              client_sock->write(packet.toUtf8());
 | 
					              client_sock->write(packet.toUtf8());
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        else if (contents[1].startsWith("/reload"))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            load_demo(p_path);
 | 
				
			||||||
 | 
					            QString packet = "CT#DEMO#" + tr("Current demo file reloaded. Send /play or > in OOC to begin playback.") + "#1#%";
 | 
				
			||||||
 | 
					            client_sock->write(packet.toUtf8());
 | 
				
			||||||
 | 
					            reset_state();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        else if (contents[1].startsWith("/min_wait"))
 | 
					        else if (contents[1].startsWith("/min_wait"))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            QString packet = "CT#DEMO#" + tr("min_wait is deprecated. Use the client Settings for minimum wait instead!") + "#1#%";
 | 
					            QString packet = "CT#DEMO#" + tr("min_wait is deprecated. Use the client Settings for minimum wait instead!") + "#1#%";
 | 
				
			||||||
@ -227,7 +235,7 @@ void DemoServer::handle_packet(AOPacket packet)
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        else if (contents[1].startsWith("/help"))
 | 
					        else if (contents[1].startsWith("/help"))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            QString packet = "CT#DEMO#" + tr("Available commands:\nload, play, pause, max_wait, help") + "#1#%";
 | 
					            QString packet = "CT#DEMO#" + tr("Available commands:\nload, reload, play, pause, max_wait, help") + "#1#%";
 | 
				
			||||||
            client_sock->write(packet.toUtf8());
 | 
					            client_sock->write(packet.toUtf8());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -239,8 +247,11 @@ void DemoServer::load_demo(QString filename)
 | 
				
			|||||||
    demo_file.open(QIODevice::ReadOnly);
 | 
					    demo_file.open(QIODevice::ReadOnly);
 | 
				
			||||||
    if (!demo_file.isOpen())
 | 
					    if (!demo_file.isOpen())
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
 | 
					    // Clear demo data
 | 
				
			||||||
    demo_data.clear();
 | 
					    demo_data.clear();
 | 
				
			||||||
 | 
					    // Set the demo filepath
 | 
				
			||||||
    p_path = filename;
 | 
					    p_path = filename;
 | 
				
			||||||
 | 
					    // Process the demo file
 | 
				
			||||||
    QTextStream demo_stream(&demo_file);
 | 
					    QTextStream demo_stream(&demo_file);
 | 
				
			||||||
    demo_stream.setCodec("UTF-8");
 | 
					    demo_stream.setCodec("UTF-8");
 | 
				
			||||||
    QString line = demo_stream.readLine();
 | 
					    QString line = demo_stream.readLine();
 | 
				
			||||||
@ -304,6 +315,30 @@ void DemoServer::load_demo(QString filename)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DemoServer::reset_state()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // Reset evidence list
 | 
				
			||||||
 | 
					    client_sock->write("LE##%");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Reset timers
 | 
				
			||||||
 | 
					    client_sock->write("TI#0#3#0#%");
 | 
				
			||||||
 | 
					    client_sock->write("TI#0#1#0#%");
 | 
				
			||||||
 | 
					    client_sock->write("TI#1#1#0#%");
 | 
				
			||||||
 | 
					    client_sock->write("TI#1#3#0#%");
 | 
				
			||||||
 | 
					    client_sock->write("TI#2#1#0#%");
 | 
				
			||||||
 | 
					    client_sock->write("TI#2#3#0#%");
 | 
				
			||||||
 | 
					    client_sock->write("TI#3#1#0#%");
 | 
				
			||||||
 | 
					    client_sock->write("TI#3#3#0#%");
 | 
				
			||||||
 | 
					    client_sock->write("TI#4#1#0#%");
 | 
				
			||||||
 | 
					    client_sock->write("TI#4#3#0#%");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Set the BG to default (also breaks up the message queue)
 | 
				
			||||||
 | 
					    client_sock->write("BN#default#wit#%");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Stop the wait packet timer
 | 
				
			||||||
 | 
					    timer->stop();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void DemoServer::playback()
 | 
					void DemoServer::playback()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (demo_data.isEmpty())
 | 
					    if (demo_data.isEmpty())
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user