diff -r f329fbf1ffb4 -r dc17ffdf0702 QTfrontend/game.cpp --- a/QTfrontend/game.cpp Fri Jun 08 19:25:40 2012 +0200 +++ b/QTfrontend/game.cpp Mon Jun 25 10:46:48 2012 +0300 @@ -21,6 +21,7 @@ #include #include #include +#include #include "game.h" #include "hwconsts.h" @@ -29,10 +30,11 @@ #include "teamselect.h" #include "KB.h" #include "proto.h" +#include "campaign.h" #include -QString training, campaign; // TODO: Cleaner solution? +QString training, campaign, campaignScript, campaignTeam; // TODO: Cleaner solution? HWGame::HWGame(GameUIConfig * config, GameCFGWidget * gamecfg, QString ammo, TeamSelWidget* pTeamSelWidget) : TCPBase(true), @@ -165,7 +167,7 @@ HWProto::addStringToBuffer(campaigncfg, "TL"); HWProto::addStringToBuffer(campaigncfg, "eseed " + QUuid::createUuid().toString()); - HWProto::addStringToBuffer(campaigncfg, "escript " + campaign); + HWProto::addStringToBuffer(campaigncfg, "escript " + campaignScript); RawSendIPC(campaigncfg); } @@ -277,6 +279,14 @@ emit SendTeamMessage(msgbody); break; } + case 'V': + { + if (msg.at(2) == '?') + sendCampaignVar(msg.right(msg.size() - 3)); + else if (msg.at(2) == '!') + writeCampaignVar(msg.right(msg.size() - 3)); + break; + } default: { if (gameType == gtNet && !netSuspend) @@ -391,10 +401,12 @@ SetGameState(gsStarted); } -void HWGame::StartCampaign(const QString & file) +void HWGame::StartCampaign(const QString & camp, const QString & campScript, const QString & campTeam) { gameType = gtCampaign; - campaign = "Missions/Campaign/" + file + ".lua"; + campaign = camp; + campaignScript = "Missions/Campaign/" + camp + "/" + campScript; + campaignTeam = campTeam; demo.clear(); Start(); SetGameState(gsStarted); @@ -412,3 +424,37 @@ HWProto::addStringToBuffer(buf, QString("efinish")); RawSendIPC(buf); } + +void HWGame::sendCampaignVar(QByteArray varToSend) +{ + QString varToFind(varToSend); + QSettings teamfile(cfgdir->absolutePath() + "/Teams/" + campaignTeam + ".hwt", QSettings::IniFormat, 0); + teamfile.setIniCodec("UTF-8"); + QString varValue = teamfile.value("Campaign " + campaign + "/" + varToFind, "").toString(); + QByteArray command; + HWProto::addStringToBuffer(command, "V." + varValue); + RawSendIPC(command); +} + +void HWGame::writeCampaignVar(QByteArray varVal) +{ + QString varToWrite(""); + QString varValue(""); + unsigned int i = 0; + while (i < varVal.size() && varVal.at(i) != ' ') + { + varToWrite.append(varVal.at(i)); + i++; + } + i++; + while (i < varVal.size() && varVal.at(i) != '\0') + { + varValue.append(varVal.at(i)); + i++; + } + + QSettings teamfile(cfgdir->absolutePath() + "/Teams/" + campaignTeam + ".hwt", QSettings::IniFormat, 0); + teamfile.setIniCodec("UTF-8"); + teamfile.setValue("Campaign " + campaign + "/" + varToWrite, varValue); +} +