void GameCFGWidget::schemeChanged(int index) { QStringList sl; int size = GameSchemes->model()->columnCount(); for(int i = 0; i < size; ++i) sl << schemeData(i).toString(); if (sl.size() >= 42) { sl[sl.size()-1].prepend('!'); emit paramChanged("SCHEME", sl); // this is a stupid hack for the fact that SCHEME is being sent once, empty. Still need to find out why. } if (isEnabled() && bindEntries->isEnabled() && bindEntries->isChecked()) { QString schemeName = GameSchemes->itemText(index); for (int i = 0; i < WeaponsName->count(); i++) { QString weapName = WeaponsName->itemText(i); int res = QString::compare(weapName, schemeName, Qt::CaseSensitive); if (0 == res) { WeaponsName->setCurrentIndex(i); emit ammoChanged(i); break; } } } pMapContainer->setScript(Scripts->itemData(Scripts->currentIndex(), GameStyleModel::ScriptRole).toString().toUtf8(), schemeData(43).toString()); }
void GameCFGWidget::schemeChanged(int index) { QStringList sl; int size = GameSchemes->model()->columnCount(); for(int i = 0; i < size; ++i) sl << schemeData(i).toString(); if (sl.size()!=1) emit paramChanged("SCHEME", sl); // this is a stupid hack for the fact that SCHEME is being sent once, empty. Still need to find out why. if (isEnabled() && bindEntries->isEnabled() && bindEntries->isChecked()) { QString schemeName = GameSchemes->itemText(index); for (int i = 0; i < WeaponsName->count(); i++) { QString weapName = WeaponsName->itemText(i); int res = QString::compare(weapName, schemeName, Qt::CaseSensitive); if (0 == res) { WeaponsName->setCurrentIndex(i); emit ammoChanged(i); break; } } } }
void GameCFGWidget::scriptChanged(int index) { const QString & name = Scripts->itemText(index); m_curScript = name; if(isEnabled() && index > 0) { QString scheme = Scripts->itemData(index, GameStyleModel::SchemeRole).toString(); QString weapons = Scripts->itemData(index, GameStyleModel::WeaponsRole).toString(); if (scheme == "locked") { GameSchemes->setEnabled(false); GameSchemes->setCurrentIndex(GameSchemes->findText("Default")); } else if (m_master) { GameSchemes->setEnabled(true); int num = GameSchemes->findText(scheme); if (num != -1) GameSchemes->setCurrentIndex(num); //else // GameSchemes->setCurrentIndex(GameSchemes->findText("Default")); } if (weapons == "locked") { WeaponsName->setEnabled(false); WeaponsName->setCurrentIndex(WeaponsName->findText("Default")); } else if (m_master) { WeaponsName->setEnabled(true); int num = WeaponsName->findText(weapons); if (num != -1) WeaponsName->setCurrentIndex(num); //else // WeaponsName->setCurrentIndex(WeaponsName->findText("Default")); } if (scheme != "locked" && weapons != "locked") bindEntries->setEnabled(true); else bindEntries->setEnabled(false); } else { GameSchemes->setEnabled(true); WeaponsName->setEnabled(true); bindEntries->setEnabled(true); } if (!index) { pMapContainer->setScript(QString(""), QString("")); } else { pMapContainer->setScript(Scripts->itemData(index, GameStyleModel::ScriptRole).toString().toUtf8(), schemeData(43).toString()); } emit paramChanged("SCRIPT", QStringList(name)); }
void GameCFGWidget::setParam(const QString & param, const QStringList & slValue) { if (slValue.size() == 1) { QString value = slValue[0]; if (param == "MAP") { pMapContainer->setMap(value); return; } if (param == "SEED") { pMapContainer->setSeed(value); return; } if (param == "THEME") { pMapContainer->setTheme(value); return; } if (param == "TEMPLATE") { pMapContainer->setTemplateFilter(value.toUInt()); return; } if (param == "MAPGEN") { pMapContainer->setMapgen((MapGenerator)value.toUInt()); return; } if (param == "FEATURE_SIZE") { pMapContainer->setFeatureSize(value.toUInt()); return; } if (param == "MAZE_SIZE") { pMapContainer->setMazeSize(value.toUInt()); return; } if (param == "SCRIPT") { Scripts->setCurrentIndex(Scripts->findText(value)); pMapContainer->setScript(Scripts->itemData(Scripts->currentIndex(), GameStyleModel::ScriptRole).toString().toUtf8(), schemeData(43).toString()); return; } if (param == "DRAWNMAP") { pMapContainer->setDrawnMapData(qUncompress(QByteArray::fromBase64(slValue[0].toLatin1()))); return; } } if (slValue.size() == 2) { if (param == "AMMO") { setNetAmmo(slValue[0], slValue[1]); return; } } if (slValue.size() == 6) { if (param == "FULLMAPCONFIG") { QString seed = slValue[4]; pMapContainer->setAllMapParameters( slValue[1], (MapGenerator)slValue[2].toUInt(), slValue[3].toUInt(), seed, slValue[5].toUInt(), slValue[0].toUInt() ); return; } } qWarning("Got bad config param from net"); }
QByteArray GameCFGWidget::getFullConfig() const { QList<QByteArray> bcfg; int mapgen = pMapContainer->get_mapgen(); if (Scripts->currentIndex() > 0) { bcfg << QString("escript Scripts/Multiplayer/%1.lua").arg(Scripts->itemData(Scripts->currentIndex(), GameStyleModel::ScriptRole).toString()).toUtf8(); } QString currentMap = pMapContainer->getCurrentMap(); if (currentMap.size() > 0) { bcfg << QString("emap " + currentMap).toUtf8(); // engine should figure it out on its own // if(pMapContainer->getCurrentIsMission()) // bcfg << QString("escript Maps/%1/map.lua").arg(currentMap).toUtf8(); } bcfg << QString("etheme " + pMapContainer->getCurrentTheme()).toUtf8(); bcfg << QString("eseed " + pMapContainer->getCurrentSeed()).toUtf8(); bcfg << QString("e$gmflags %1").arg(getGameFlags()).toUtf8(); bcfg << QString("e$damagepct %1").arg(schemeData(26).toInt()).toUtf8(); bcfg << QString("e$turntime %1").arg(schemeData(27).toInt() * 1000).toUtf8(); bcfg << QString("e$sd_turns %1").arg(schemeData(29).toInt()).toUtf8(); bcfg << QString("e$casefreq %1").arg(schemeData(30).toInt()).toUtf8(); bcfg << QString("e$minestime %1").arg(schemeData(31).toInt() * 1000).toUtf8(); bcfg << QString("e$minesnum %1").arg(schemeData(32).toInt()).toUtf8(); bcfg << QString("e$minedudpct %1").arg(schemeData(33).toInt()).toUtf8(); bcfg << QString("e$explosives %1").arg(schemeData(34).toInt()).toUtf8(); bcfg << QString("e$airmines %1").arg(schemeData(35).toInt()).toUtf8(); bcfg << QString("e$healthprob %1").arg(schemeData(36).toInt()).toUtf8(); bcfg << QString("e$hcaseamount %1").arg(schemeData(37).toInt()).toUtf8(); bcfg << QString("e$waterrise %1").arg(schemeData(38).toInt()).toUtf8(); bcfg << QString("e$healthdec %1").arg(schemeData(39).toInt()).toUtf8(); bcfg << QString("e$ropepct %1").arg(schemeData(40).toInt()).toUtf8(); bcfg << QString("e$getawaytime %1").arg(schemeData(41).toInt()).toUtf8(); bcfg << QString("e$worldedge %1").arg(schemeData(42).toInt()).toUtf8(); bcfg << QString("e$template_filter %1").arg(pMapContainer->getTemplateFilter()).toUtf8(); bcfg << QString("e$feature_size %1").arg(pMapContainer->getFeatureSize()).toUtf8(); bcfg << QString("e$mapgen %1").arg(mapgen).toUtf8(); if(!schemeData(43).isNull()) bcfg << QString("e$scriptparam %1").arg(schemeData(43).toString()).toUtf8(); switch (mapgen) { case MAPGEN_MAZE: case MAPGEN_PERLIN: bcfg << QString("e$maze_size %1").arg(pMapContainer->getMazeSize()).toUtf8(); break; case MAPGEN_DRAWN: { QByteArray data = pMapContainer->getDrawnMapData(); while(data.size() > 0) { QByteArray tmp = data; tmp.truncate(200); tmp.prepend("edraw "); bcfg << tmp; data.remove(0, 200); } break; } default: ; } QByteArray result; foreach(QByteArray ba, bcfg) HWProto::addByteArrayToBuffer(result, ba); return result; }
quint32 GameCFGWidget::getInitHealth() const { return schemeData(28).toInt(); }
quint32 GameCFGWidget::getGameFlags() const { quint32 result = 0; if (schemeData(1).toBool()) result |= 0x00001000; // fort if (schemeData(2).toBool()) result |= 0x00000010; // divide teams if (schemeData(3).toBool()) result |= 0x00000004; // solid land if (schemeData(4).toBool()) result |= 0x00000008; // border if (schemeData(5).toBool()) result |= 0x00000020; // low gravity if (schemeData(6).toBool()) result |= 0x00000040; // laser sight if (schemeData(7).toBool()) result |= 0x00000080; // invulnerable if (schemeData(8).toBool()) result |= 0x00000100; // mines if (schemeData(9).toBool()) result |= 0x00000200; // vampirism if (schemeData(10).toBool()) result |= 0x00000400; // karma if (schemeData(11).toBool()) result |= 0x00000800; // artillery if (schemeData(12).toBool()) result |= 0x00002000; // random if (schemeData(13).toBool()) result |= 0x00004000; // king if (schemeData(14).toBool()) result |= 0x00008000; // place hogs if (schemeData(15).toBool()) result |= 0x00010000; // shared ammo if (schemeData(16).toBool()) result |= 0x00020000; // disable girders if (schemeData(17).toBool()) result |= 0x00040000; // disable land obj if (schemeData(18).toBool()) result |= 0x00080000; // ai survival if (schemeData(19).toBool()) result |= 0x00100000; // infinite attacks if (schemeData(20).toBool()) result |= 0x00200000; // reset weaps if (schemeData(21).toBool()) result |= 0x00400000; // per hog ammo if (schemeData(22).toBool()) result |= 0x00800000; // no wind if (schemeData(23).toBool()) result |= 0x01000000; // more wind if (schemeData(24).toBool()) result |= 0x02000000; // tag team if (schemeData(25).toBool()) result |= 0x04000000; // bottom return result; }