aliens have damage!
This commit is contained in:
@@ -51,7 +51,8 @@ void AD_Graphics::drawBackground(QPainter * p, const QRectF & )
|
|||||||
brush.setColor(Qt::white);
|
brush.setColor(Qt::white);
|
||||||
brush.setStyle(Qt::SolidPattern);
|
brush.setStyle(Qt::SolidPattern);
|
||||||
int cel = data->map->cells().at(i).at(j);
|
int cel = data->map->cells().at(i).at(j);
|
||||||
if (cel == Map::Wall) {
|
if (cel == Map::Wall)
|
||||||
|
{
|
||||||
pen.setColor(Qt::black);
|
pen.setColor(Qt::black);
|
||||||
brush.setColor(Qt::black);
|
brush.setColor(Qt::black);
|
||||||
}
|
}
|
||||||
@@ -63,35 +64,39 @@ void AD_Graphics::drawBackground(QPainter * p, const QRectF & )
|
|||||||
// pen.setColor(Qt::yellow);
|
// pen.setColor(Qt::yellow);
|
||||||
// brush.setColor(Qt::yellow);
|
// brush.setColor(Qt::yellow);
|
||||||
// }
|
// }
|
||||||
if (cel >= Map::Player) {
|
if (cel >= Map::Player || (cel <= Map::PlayerTower && cel !=Map::Wall))
|
||||||
pen.setColor(QColor(cel%255,(cel*100)%255,(cel+100)%255,50));
|
{
|
||||||
brush.setColor(QColor(cel%255,(cel*100)%255,(cel+100)%255,50));
|
pen.setColor(QColor(qAbs(cel)%255,(qAbs(cel)*100)%255,(qAbs(cel)+100)%255,50));
|
||||||
|
brush.setColor(QColor(qAbs(cel)%255,(qAbs(cel)*100)%255,(qAbs(cel)+100)%255,50));
|
||||||
}
|
}
|
||||||
p->setPen(pen);
|
p->setPen(pen);
|
||||||
p->setBrush(brush);
|
p->setBrush(brush);
|
||||||
p->drawRect(i*cellSize,j*cellSize,cellSize,cellSize);
|
p->drawRect(i*cellSize,j*cellSize,cellSize,cellSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
qDebug() << "t:" << data->curTowers.size();
|
//qDebug() << "t:" << data->curTowers.size();
|
||||||
for (QHash<QPoint, TowerType>::iterator i = data->curTowers.begin(); i != data->curTowers.end(); ++i) {
|
for (QHash<QPoint, TowerType>::iterator i = data->curTowers.begin(); i != data->curTowers.end(); ++i)
|
||||||
|
{
|
||||||
//qDebug() << "draw alien";
|
//qDebug() << "draw alien";
|
||||||
//p->rotate(-90);
|
//p->rotate(-90);
|
||||||
//p->scale(cellSize, cellSize);
|
//p->scale(cellSize, cellSize);
|
||||||
//p->translate(rec.width()/2, rec.height()/2);
|
//p->translate(rec.width()/2, rec.height()/2);
|
||||||
//p->rotate(-90);
|
//p->rotate(-90);
|
||||||
//p->translate(-rec.height()/2, -rec.width()/2);
|
//p->translate(-rec.height()/2, -rec.width()/2);
|
||||||
QBrush brush;
|
//QBrush brush;
|
||||||
brush.setColor(Qt::darkRed);
|
//brush.setColor(Qt::darkRed);
|
||||||
brush.setStyle(Qt::DiagCrossPattern);
|
//brush.setStyle(Qt::DiagCrossPattern);
|
||||||
p->translate((*i).pos * cellSize+QPointF(10,10));
|
p->translate((*i).pos * cellSize+QPointF(20,20));
|
||||||
p->rotate((*i).angle);
|
p->rotate((*i).angle);
|
||||||
p->setPen(QColor(0,0,0,0));
|
//p->setPen(QColor(0,0,0,0));
|
||||||
p->setBrush(brush);
|
//p->setBrush(brush);
|
||||||
p->drawRect(QRect(-10,-10,20,20));
|
//p->drawRect(QRect(-10,-10,20,20));
|
||||||
|
p->drawImage(QRect(-20,-20,40,40), images[itTowers][0]->at(0));
|
||||||
p->resetTransform();
|
p->resetTransform();
|
||||||
}
|
}
|
||||||
qDebug() << "a:" << data->curAliens.size();
|
//qDebug() << "a:" << data->curAliens.size();
|
||||||
for (QHash<int, AlienType>::iterator i = data->curAliens.begin(); i != data->curAliens.end(); ++i) {
|
for (QHash<int, AlienType>::iterator i = data->curAliens.begin(); i != data->curAliens.end(); ++i)
|
||||||
|
{
|
||||||
//qDebug() << "draw alien";
|
//qDebug() << "draw alien";
|
||||||
//p->rotate(-90);
|
//p->rotate(-90);
|
||||||
//p->scale(cellSize, cellSize);
|
//p->scale(cellSize, cellSize);
|
||||||
@@ -103,22 +108,24 @@ void AD_Graphics::drawBackground(QPainter * p, const QRectF & )
|
|||||||
p->drawImage(QRect(-20,-20,40,40), images[itAliens][0]->at(0));
|
p->drawImage(QRect(-20,-20,40,40), images[itAliens][0]->at(0));
|
||||||
p->resetTransform();
|
p->resetTransform();
|
||||||
}
|
}
|
||||||
qDebug() << "s:" << data->curSplashes.size();
|
//qDebug() << "s:" << data->curSplashes.size();
|
||||||
for (QHash<int, SplashType>::iterator i = data->curSplashes.begin(); i != data->curSplashes.end(); ++i) {
|
for (QHash<int, SplashType>::iterator i = data->curSplashes.begin(); i != data->curSplashes.end(); ++i)
|
||||||
|
{
|
||||||
//qDebug() << "draw alien";
|
//qDebug() << "draw alien";
|
||||||
//p->rotate(-90);
|
//p->rotate(-90);
|
||||||
//p->scale(cellSize, cellSize);
|
//p->scale(cellSize, cellSize);
|
||||||
//p->translate(rec.width()/2, rec.height()/2);
|
//p->translate(rec.width()/2, rec.height()/2);
|
||||||
//p->rotate(-90);
|
//p->rotate(-90);
|
||||||
//p->translate(-rec.height()/2, -rec.width()/2);
|
//p->translate(-rec.height()/2, -rec.width()/2);
|
||||||
QBrush brush;
|
//QBrush brush;
|
||||||
brush.setColor(Qt::red);
|
//brush.setColor(Qt::red);
|
||||||
brush.setStyle(Qt::SolidPattern);
|
//brush.setStyle(Qt::SolidPattern);
|
||||||
p->translate((*i).pos * cellSize+QPointF(10,10));
|
p->translate((*i).pos * cellSize+QPointF(10,10));
|
||||||
p->rotate((*i).angle);
|
p->rotate((*i).angle);
|
||||||
p->setBrush(brush);
|
//p->setBrush(brush);
|
||||||
p->setPen(QColor(0,0,0,0));
|
//p->setPen(QColor(0,0,0,0));
|
||||||
p->drawEllipse(QPoint(),5,5);
|
//p->drawEllipse(QPoint(),5,5);
|
||||||
|
p->drawImage(QRect(-10,-10,20,20), images[itSplashes][0]->at(0));
|
||||||
p->resetTransform();
|
p->resetTransform();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -138,8 +145,12 @@ void AD_Graphics::loadImages()
|
|||||||
for (int i = 0; i < images.size(); i++) {
|
for (int i = 0; i < images.size(); i++) {
|
||||||
switch ((imagesType)i) {
|
switch ((imagesType)i) {
|
||||||
case itAliens:
|
case itAliens:
|
||||||
images[i].push_back(new Animation(":/images/images/Aliens/Al_00_"));
|
images[i].push_back(new Animation(":/images/images/Aliens/Al_00_0.png"));
|
||||||
break;
|
break;
|
||||||
|
case itTowers:
|
||||||
|
images[i].push_back(new Animation(":/images/images/Towers/01_6.png"));
|
||||||
|
case itSplashes:
|
||||||
|
images[i].push_back(new Animation(":/images/images/Splashes/Rocket.png"));
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
12
adcore.cpp
12
adcore.cpp
@@ -24,11 +24,13 @@ AD_Core::AD_Core(QObject *parent) :
|
|||||||
// adaliens->addAlien(0);
|
// adaliens->addAlien(0);
|
||||||
// adaliens->AddAlien(0);
|
// adaliens->AddAlien(0);
|
||||||
// adaliens->AddAlien(0);
|
// adaliens->AddAlien(0);
|
||||||
adtowers->addTower(0,1,QPoint(9,9));
|
adtowers->addTower(0,0,QPoint(19,7));
|
||||||
for (int i=0; i<qMin(addata->map->rect().width(),addata->map->rect().height()); i++)
|
for (int i=0; i<20;i++)
|
||||||
adtowers->addTower(0,1,QPoint(i,i));
|
adtowers->addTower(0,0,QPoint(8,20-i));
|
||||||
for (int i=0; i<qMin(addata->map->rect().width(),addata->map->rect().height());i++)
|
for (int i=0; i<20; i++)
|
||||||
adtowers->addTower(0,0,QPoint(addata->map->rect().width()-2,i));
|
adtowers->addTower(0,1,QPoint(12,i));
|
||||||
|
for (int i=0; i<20;i++)
|
||||||
|
adtowers->addTower(0,0,QPoint(16,20-i));
|
||||||
waveInProgress = false;
|
waveInProgress = false;
|
||||||
startTimer(50);
|
startTimer(50);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,14 +5,18 @@
|
|||||||
|
|
||||||
Animation::Animation(const QString & path)
|
Animation::Animation(const QString & path)
|
||||||
{
|
{
|
||||||
int i = 0;
|
// int i = 0;
|
||||||
QString s = path + QString::number(i) + ".png";
|
// QString s = path + QString::number(i) + ".png";
|
||||||
//qDebug() << "check " << s;
|
// //qDebug() << "check " << s;
|
||||||
while (QFile::exists(s)) {
|
// while (QFile::exists(s)) {
|
||||||
images.push_back(new QImage(s));
|
// images.push_back(new QImage(s));
|
||||||
s = path + QString::number(++i) + ".png";
|
// s = path + QString::number(++i) + ".png";
|
||||||
|
// }
|
||||||
|
// qDebug() << "found " << images.size() << " images";
|
||||||
|
if (QFile::exists(path))
|
||||||
|
{
|
||||||
|
images.push_back(new QImage(path));
|
||||||
}
|
}
|
||||||
qDebug() << "found " << images.size() << " images";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
12
data2.xml
12
data2.xml
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE data>
|
<!DOCTYPE data>
|
||||||
<ADdata>
|
<ADdata>
|
||||||
<aliens>
|
<aliens>
|
||||||
<alien flying="true" speed="0.3" imageType="31" prise="15" id="2" score="12" name="Monstr" health="150"/>
|
<alien flying="true" speed="0.3" imageType="31" prise="15" id="2" score="12" name="Monstr" health="20"/>
|
||||||
<alien flying="true" speed="0.05" imageType="-1078580008" prise="1" id="4" score="10" name="test" health="60"/>
|
<alien flying="true" speed="0.2" imageType="-1078580008" prise="1" id="4" score="10" name="test" health="50"/>
|
||||||
<alien speed="0.2" imageType="1" prise="4" id="10" score="99" name="first" health="100"/>
|
<alien speed="0.1" imageType="1" prise="4" id="10" score="99" name="first" health="33"/>
|
||||||
<alien regeneration="3" speed="0.15" imageType="1" prise="10" armor="1.5" id="12" score="99" name="MONSTR" health="100"/>
|
<alien regeneration="3" speed="0.15" imageType="1" prise="10" armor="1.5" id="12" score="99" name="MONSTR" health="100"/>
|
||||||
</aliens>
|
</aliens>
|
||||||
<maps>
|
<maps>
|
||||||
@@ -61,8 +61,8 @@
|
|||||||
</wavesOnLevels>
|
</wavesOnLevels>
|
||||||
<splashes>
|
<splashes>
|
||||||
<splash speed="0.5" imageType="1" lifetime="9999" id="1" name="rocket"/>
|
<splash speed="0.5" imageType="1" lifetime="9999" id="1" name="rocket"/>
|
||||||
<splash speed="0.3" imageType="1" lifetime="9999" autoControl="true" id="2" name="smart rocket"/>
|
<splash speed="0.5" imageType="1" lifetime="9999" autoControl="true" id="2" name="smart rocket"/>
|
||||||
<splash speed="1" imageType="2" lifetime="4" id="3" name="bullet"/>
|
<splash speed="1" imageType="2" lifetime="9999" autoControl="true" id="3" name="bullet"/>
|
||||||
<splash speed="1" imageType="3" lifetime="10" id="4" name="bum"/>
|
<splash speed="1" imageType="3" lifetime="10" id="4" name="bum"/>
|
||||||
<splash speed="0" imageType="4" lifetime="10" id="5" name="smoke"/>
|
<splash speed="0" imageType="4" lifetime="10" id="5" name="smoke"/>
|
||||||
</splashes>
|
</splashes>
|
||||||
@@ -73,7 +73,7 @@
|
|||||||
</towers>
|
</towers>
|
||||||
<triggers>
|
<triggers>
|
||||||
<trigger damage="5" childAim="noAim" delParent="true" type="onDestination" id="2" name="shot"/>
|
<trigger damage="5" childAim="noAim" delParent="true" type="onDestination" id="2" name="shot"/>
|
||||||
<trigger damage="5" childAim="noAim" radius="1.5" delParent="true" count="1" type="onDestination" id="3" name="explosion"/>
|
<trigger damage="21" childAim="noAim" radius="2.5" delParent="true" count="1" type="onDestination" id="3" name="explosion"/>
|
||||||
<trigger childAim="noAim" count="1" type="onTimer" id="4" name="smoke"/>
|
<trigger childAim="noAim" count="1" type="onTimer" id="4" name="smoke"/>
|
||||||
</triggers>
|
</triggers>
|
||||||
<chains>
|
<chains>
|
||||||
|
|||||||
@@ -20,5 +20,8 @@
|
|||||||
<file>images/Aliens/Al_00_17.png</file>
|
<file>images/Aliens/Al_00_17.png</file>
|
||||||
<file>images/Aliens/Al_00_18.png</file>
|
<file>images/Aliens/Al_00_18.png</file>
|
||||||
<file>images/Aliens/Al_00_19.png</file>
|
<file>images/Aliens/Al_00_19.png</file>
|
||||||
|
<file>images/Towers/00_0.png</file>
|
||||||
|
<file>images/Splashes/Rocket.png</file>
|
||||||
|
<file>images/Towers/01_6.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|||||||
30
map.cpp
30
map.cpp
@@ -80,27 +80,44 @@ void Map::removeAliensPath()
|
|||||||
|
|
||||||
bool Map::addTowerOnMap(int playerId, QPoint pos)
|
bool Map::addTowerOnMap(int playerId, QPoint pos)
|
||||||
{
|
{
|
||||||
qDebug() << pos;
|
//qDebug() << pos;
|
||||||
if (playerId < 0 || playerId > players) return false;
|
if (playerId < 0 || playerId > players) return false;
|
||||||
QRect r(QPoint(),mapSize);
|
QRect r(QPoint(),mapSize);
|
||||||
if (!r.contains(pos)) return false;
|
if (!r.contains(pos) ||
|
||||||
if (Cells[pos.x()][pos.y()]==Player+playerId)
|
!r.contains(pos+QPoint(1,0)) ||
|
||||||
|
!r.contains(pos+QPoint(0,1)) ||
|
||||||
|
!r.contains(pos+QPoint(1,1))) return false;
|
||||||
|
if (Cells[pos.x()][pos.y()]==Player+playerId &&
|
||||||
|
Cells[pos.x()+1][pos.y()]==Player+playerId &&
|
||||||
|
Cells[pos.x()][pos.y()+1]==Player+playerId &&
|
||||||
|
Cells[pos.x()+1][pos.y()+1]==Player+playerId)
|
||||||
{
|
{
|
||||||
Cells[pos.x()][pos.y()]=PlayerTower-playerId;
|
Cells[pos.x()][pos.y()]=PlayerTower-playerId;
|
||||||
|
Cells[pos.x()+1][pos.y()]=PlayerTower-playerId;
|
||||||
|
Cells[pos.x()][pos.y()+1]=PlayerTower-playerId;
|
||||||
|
Cells[pos.x()+1][pos.y()+1]=PlayerTower-playerId;
|
||||||
for (int i=0; i<Starts.size(); i++) {
|
for (int i=0; i<Starts.size(); i++) {
|
||||||
for (int j=0; j<Finishs.size(); j++) {
|
for (int j=0; j<Finishs.size(); j++) {
|
||||||
if (waveTrace(Starts.at(i),Finishs.at(j))<0) {
|
if (waveTrace(Starts.at(i),Finishs.at(j))<0) {
|
||||||
qDebug("AAAAAA");
|
|
||||||
Cells[pos.x()][pos.y()]=Player+playerId;
|
Cells[pos.x()][pos.y()]=Player+playerId;
|
||||||
|
Cells[pos.x()+1][pos.y()]=Player+playerId;
|
||||||
|
Cells[pos.x()][pos.y()+1]=Player+playerId;
|
||||||
|
Cells[pos.x()+1][pos.y()+1]=Player+playerId;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (Cells[pos.x()][pos.y()]==AlienPath+playerId)
|
if (Cells[pos.x()][pos.y()]==AlienPath+playerId &&
|
||||||
|
Cells[pos.x()+1][pos.y()]==AlienPath+playerId &&
|
||||||
|
Cells[pos.x()][pos.y()+1]==AlienPath+playerId &&
|
||||||
|
Cells[pos.x()+1][pos.y()+1]==AlienPath+playerId)
|
||||||
{
|
{
|
||||||
Cells[pos.x()][pos.y()]=PlayerTower-playerId;
|
Cells[pos.x()][pos.y()]=PlayerTower-playerId;
|
||||||
|
Cells[pos.x()+1][pos.y()]=PlayerTower-playerId;
|
||||||
|
Cells[pos.x()][pos.y()+1]=PlayerTower-playerId;
|
||||||
|
Cells[pos.x()+1][pos.y()+1]=PlayerTower-playerId;
|
||||||
// bool ok=true;
|
// bool ok=true;
|
||||||
// for (int i=0; i<Starts.size(); i++)
|
// for (int i=0; i<Starts.size(); i++)
|
||||||
// for (int j=0; j<Finishs.size(); j++)
|
// for (int j=0; j<Finishs.size(); j++)
|
||||||
@@ -121,6 +138,9 @@ bool Map::addTowerOnMap(int playerId, QPoint pos)
|
|||||||
if (!pathOK)
|
if (!pathOK)
|
||||||
{
|
{
|
||||||
Cells[pos.x()][pos.y()]=AlienPath+playerId;
|
Cells[pos.x()][pos.y()]=AlienPath+playerId;
|
||||||
|
Cells[pos.x()+1][pos.y()]=AlienPath+playerId;
|
||||||
|
Cells[pos.x()][pos.y()+1]=AlienPath+playerId;
|
||||||
|
Cells[pos.x()+1][pos.y()+1]=AlienPath+playerId;
|
||||||
emit recreateAlienPath(pathOK);
|
emit recreateAlienPath(pathOK);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
37
splashes.cpp
37
splashes.cpp
@@ -96,7 +96,9 @@ void Splashes::addSplash(QPoint curTowerId)
|
|||||||
spl.trigsOnTimer.append(tot);
|
spl.trigsOnTimer.append(tot);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
qDebug() << "t=" << src.triggerIndexes.size() << "d=" << spl.trigsOnDest.size();
|
||||||
gameData->curSplashes.insert(spl.id,spl);
|
gameData->curSplashes.insert(spl.id,spl);
|
||||||
nextId++;
|
nextId++;
|
||||||
}
|
}
|
||||||
@@ -137,6 +139,23 @@ void Splashes::update()
|
|||||||
for (int k=0; k<spl.trigsOnDest.size(); k++)
|
for (int k=0; k<spl.trigsOnDest.size(); k++)
|
||||||
{
|
{
|
||||||
// TODO: activate trigger
|
// TODO: activate trigger
|
||||||
|
srcTriggerType strig = gameData->players.at(spl.PlayerId)->srcTowers.at(spl.srcTower).triggers.at(spl.trigsOnDest.at(k).src);
|
||||||
|
if (strig.delParent) deadIndexes.push_back(spl.id);
|
||||||
|
if (strig.damage > 0)
|
||||||
|
{
|
||||||
|
if (!(strig.radius > 0))
|
||||||
|
{
|
||||||
|
if (!badAl)
|
||||||
|
{
|
||||||
|
float hh = gameData->curAliens[spl.AlienId].health -= strig.damage;
|
||||||
|
if (hh < 0)
|
||||||
|
gameData->curAliens.remove(spl.AlienId);
|
||||||
|
qDebug() << "health=" << hh;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
processTrigger(strig,spl.pos);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
arctg = std::atan2(spl.pos.x() - spl.destination.x(),spl.pos.y() - spl.destination.y());
|
arctg = std::atan2(spl.pos.x() - spl.destination.x(),spl.pos.y() - spl.destination.y());
|
||||||
@@ -168,3 +187,21 @@ void Splashes::delSplash(int Id)
|
|||||||
{
|
{
|
||||||
gameData->curSplashes.remove(Id);
|
gameData->curSplashes.remove(Id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Splashes::processTrigger(srcTriggerType srctrig, QPointF pos)
|
||||||
|
{
|
||||||
|
qDebug("trig proc");
|
||||||
|
QList <int> dead;
|
||||||
|
for (QHash<int, AlienType>::iterator i = gameData->curAliens.begin(); i != gameData->curAliens.end(); ++i)
|
||||||
|
{
|
||||||
|
if (distance2(pos, (*i).pos) < srctrig.radius*srctrig.radius)
|
||||||
|
{
|
||||||
|
(*i).health -= srctrig.damage;
|
||||||
|
//qDebug() << "health=" << hh;
|
||||||
|
if ((*i).health < 0) dead.append((*i).id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int i=0; i<dead.size(); ++i)
|
||||||
|
gameData->curAliens.remove(dead.at(i));
|
||||||
|
}
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ public slots:
|
|||||||
private:
|
private:
|
||||||
Game_Data *gameData;
|
Game_Data *gameData;
|
||||||
int nextId;
|
int nextId;
|
||||||
|
|
||||||
|
void processTrigger(srcTriggerType srctrig,QPointF pos);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SPLASHES_H
|
#endif // SPLASHES_H
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ bool Towers::addTower(int playerId, int srcId, QPoint pos)
|
|||||||
if (gameData->map->addTowerOnMap(playerId,pos))
|
if (gameData->map->addTowerOnMap(playerId,pos))
|
||||||
{
|
{
|
||||||
tw.pos = pos;
|
tw.pos = pos;
|
||||||
qDebug() << "tw" << pos;
|
//qDebug() << "tw" << pos;
|
||||||
//gameData->map->printMap();
|
//gameData->map->printMap();
|
||||||
gameData->curTowers.insert(tw.pos,tw);
|
gameData->curTowers.insert(tw.pos,tw);
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
Reference in New Issue
Block a user