Пример #1
0
//==============================================================================
void GameServer::HandlePutItem_(const QVariantMap& request, QVariantMap& response)
{
  if (!testingStageActive_)
  {
    WriteResult_(response, EFEMPResult::BAD_ACTION);
    return;
  }

  if (!request["x"].toFloat() || !request["y"].toFloat())
  {
    WriteResult_(response, EFEMPResult::BAD_PLACING);
    return;
  }

  float x = request["x"].toFloat();
  float y = request["y"].toFloat();

  if (levelMap_.GetCell(x, y) != '.')
  {
    WriteResult_(response, EFEMPResult::BAD_PLACING);
    return;
  }

  Item* item = CreateActor_<Item>();
  SetActorPosition_(item, Vector2(x, y));
  SetItemDescription(request["item"].toMap(), item);
  response["id"] = item->GetId();
}
ItemMaterial::ItemMaterial()
{
	ItemID = 2;
	SubID = 0;

	vector<char*> description;
	description.push_back(new char[35]);
	strcpy_s(description.back(), 35, "Basic building material needed");
	description.push_back(new char[35]);
	strcpy_s(description.back(), 35, "for a lot of different things.");

	SetItemDescription(description);
};
Пример #3
0
ItemWeapon::ItemWeapon()
{
	ItemID = 1;

	vector<char*> description;
	description.push_back(new char[30]);
	strcpy_s(description.back(), 30, "A simple handy weapon for the");
	description.push_back(new char[30]);
	strcpy_s(description.back(), 30, "allday use!");

	itemDamage = 0;
	SetItemName("Iron Sword");
	SetItemDescription(description);
};
Пример #4
0
//==============================================================================
void GameServer::HandlePutPlayer_(const QVariantMap& request, QVariantMap& response)
{
  if (!testingStageActive_)
  {
    WriteResult_(response, EFEMPResult::BAD_ACTION);
    return;
  }

  if (!request["x"].toFloat() || !request["y"].toFloat())
  {
    WriteResult_(response, EFEMPResult::BAD_PLACING);
    return;
  }

  float x = request["x"].toFloat();
  float y = request["y"].toFloat();

  Player* player = CreateActor_<Player>();
  SetActorPosition_(player, Vector2(x, y));

  if (IsPositionWrong(x, y, player))
  {
    KillActor_(player);
    WriteResult_(response, EFEMPResult::BAD_PLACING);
    return;
  }

  auto inventory = request["inventory"].toList();
  for (auto elem: inventory)
  {
    Item* item = CreateActor_<Item>();
    SetItemDescription(elem.toMap(), item);
    item->SetOnTheGround(false);
    player->items_.push_back(item);
    actors_.erase(std::remove(actors_.begin(), actors_.end(), item), actors_.end());
    //idToActor_.erase(item->GetId());
  }

  auto stats = request["stats"].toMap();
  for (auto s = stats.begin(); s != stats.end(); s++)
  {
    EStatConst stat = StringToStat[s.key()];
    QVariant val = s.value();
    player->SetStat(stat, val.toFloat());
  }

  if (stats.size() == 0)
  {
    player->SetSpeed(playerVelocity_);
  }

  QVariantList items;
  for (auto& elem: player->items_)
  {
    QVariantMap item;
    item["id"] = elem->GetId();
    item["name"] = elem->Getname();
    item["type"] = elem->GetTypeItem();
    item["class"] = elem->GetClass();
    item["subtype"] = elem->GetSubtype();
    item["weight"] = elem->GetWeight();
    items << item;
  }
  response["inventory"] = items;

  auto slot = request["slots"].toMap();
  QVariantMap id_slot;
  for (auto i = SlotToString.begin(); i != SlotToString.end(); i++)
  {
    if (slot.find(i.key()) != slot.end())
    {
      Item* item = CreateActor_<Item>();
      SetItemDescription(slot[i.key()].toMap(), item);
      player->items_.push_back(item);
      player->SetSlot(i.value(), item);
      player->SetStat(true, item);
      id_slot[i.key()] = item->GetId();
    }
  }
  response["slots"] = id_slot;
  response["id"] = player->GetId();

  QByteArray sid;
  do
  {
    QByteArray id = QString::number(qrand()).toLatin1();
    sid = QCryptographicHash::hash(id, QCryptographicHash::Sha1);

  } while (sidToPlayer_.find(sid) != sidToPlayer_.end());
  sid = sid.toHex();

  sidToPlayer_.insert(sid, player);
  response["sid"] = sid;
  response["fistId"] = FistId_;
}
Пример #5
0
//==============================================================================
void GameServer::HandlePutMob_(const QVariantMap& request, QVariantMap& response)
{
  if (!testingStageActive_)
  {
    WriteResult_(response, EFEMPResult::BAD_ACTION);
    return;
  }

  if (!request["x"].toFloat()
      || !request["y"].toFloat())
  {
    WriteResult_(response, EFEMPResult::BAD_PLACING);
    return;
  }

  float x = request["x"].toFloat();
  float y = request["y"].toFloat();

  Monster* monster = CreateActor_<Monster>();
  SetActorPosition_(monster, Vector2(x, y));

  monster->SetDirection(EActorDirection::SOUTH);

  if (IsPositionWrong(x, y, monster))
  {
    KillActor_(monster);
    WriteResult_(response, EFEMPResult::BAD_PLACING);
    return;
  }

  auto flags = request["flags"].toList();
  for (auto flag: flags)
  {
    if (monster->possibleFlags.lastIndexOf(flag.toString()) == -1)
    {
      WriteResult_(response, EFEMPResult::BAD_FLAG);
      return;
    }
     monster->Flags.push_back(flag.toString());
  }

  monster->SetRace(request["race"].toString());
  if (monster->GetRace() == "NONE")
  {
    WriteResult_(response, EFEMPResult::BAD_RACE);
    return;
  }

  auto stats = request["stats"].toMap();
  for (auto s = stats.begin(); s != stats.end(); s++)
  {
    EStatConst stat = StringToStat[s.key()];
    QVariant val = s.value();
    monster->SetStat(stat, val.toFloat());
  }

  auto inventory = request["inventory"].toList();
  for (auto elem: inventory)
  {
    Item* item = CreateActor_<Item>();
    SetItemDescription(elem.toMap(), item);
    item->SetOnTheGround(false);
    monster->items.push_back(item);
    actors_.erase(std::remove(actors_.begin(), actors_.end(), item)
                , actors_.end()); //???
  }

  QStringList damage;
  damage << request["dealtDamage"].toString().split("d");

  if (damage.size() < 2
      || !damage[0].toInt()
      || !damage[1].toInt())
  {
    WriteResult_(response, EFEMPResult::BAD_DAMAGE);
    return;
  }

  response["id"] = monster->GetId();
}
Пример #6
0
//Checking Collisionable Objects
void Player::CheckCollisions()
{
	for (int i = 0; i < mEntities.size(); i++)
	{
		for (int j = 0; j < mEntities[i].size(); j++)
		{
			if (mEntities[i][j]->mLabel == "ground")
			{
				if (XNA::IntersectAxisAlignedBoxAxisAlignedBox(&mSelf->mMeshBox, &mEntities[i][j]->mMeshBox)) //Broad phase quick check
				{
					XMFLOAT3 Correction = MathHelper::AABBCollision(mSelf->mMeshBox, mEntities[i][j]->mMeshBox);
					if(		 Correction.x != 0.0f){ mSelf->Strafe(Correction.x);}
					else if (Correction.z != 0.0f){ mSelf->Walk(  Correction.z);}
					else if (Correction.y != 0.0f)
					{
						mSelf->Jump(Correction.y);
					
						if (!onGround)
						{
							mSelf->mAnim->OverRidePlayOnce(false); (GoBW) ? mSelf->mAnim->SetAnim(6, true, true) : mSelf->mAnim->SetAnim(6, true, false); 
							mSelf->mAnim->ResetFrame();
						}//LANDING ANIMATION
					
						mVelocity.y = 0.0f; onGround = true; 
					}//Means it Hit Ground Reset Y Velocity So it Doesnt Go To Much And Jitter
				}
			}
			if (mEntities[i][j]->mLabel.size() > 3)
			{
				std::string str(mEntities[i][j]->mLabel.begin(), mEntities[i][j]->mLabel.begin() + 4);
				if (str == "item")
				{
					if (XNA::IntersectAxisAlignedBoxAxisAlignedBox(&mSelf->mMeshBox, &mEntities[i][j]->mMeshBox)) //Broad phase quick check
					{
						std::string str2(mEntities[i][j]->mLabel.begin() + 5, mEntities[i][j]->mLabel.end()); // Minus one or you get an Iterator past the end of the string 
						SetItemDescription(str2);
						mEntities[i][j]->mDead = true; Inventory::AddToInventory(str2);
						mEntities[i].erase(mEntities[i].begin() + j);
					}
				}
			}
			if (mEntities[i][j]->mLabel.size() > 7)
			{
				std::string str(mEntities[i][j]->mLabel.begin(), mEntities[i][j]->mLabel.begin() + 5);
				if (str == "enemy")
				{
					if (!mEntities[i][j]->mDead)
					{
						if (XNA::IntersectAxisAlignedBoxAxisAlignedBox(&mSelf->mMeshBox, &mEntities[i][j]->mMeshBox)) //Broad phase quick check
						{
							std::string str2(mEntities[i][j]->mLabel.begin() + 6, mEntities[i][j]->mLabel.end()); // Minus one or you get an Iterator past the end of the string 
							Battle::SetBattleType(str2);
							Engine::NewBattle();
							*StateMachine::pGameState = GameState::BATTLE;
							mEntities[i].erase(mEntities[i].begin() + j);
						}
					}
				}
			}
			if (mEntities[i][j]->mLabel == "portal")
			{
				if (XNA::IntersectAxisAlignedBoxAxisAlignedBox(&mSelf->mMeshBox, &mEntities[i][j]->mMeshBox)) //Broad phase quick check
				{
					mBeatLevel = true;
				}
			}
		}
	}
}