Перейти к публикации
View in the app

A better way to browse. Learn more.

VimeWorld - Форум

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[C++] VimeCpp — SDK для работы с API VImeWorld.

Featured Replies

Опубликовано:

Привет, ты пришёл сюда из интереса или искал что-то полезное? Тогда ты в нужном месте, потому что это C++ библиотека для работы с VimeWorld API.
Всю полезную информацию я разбил на главы, так что ориентироваться будет относительно легко.

[История]
C++ один из первых языков, который я стал изучать и один из первых, на который я забил. Вспомнив о нём я поставил себе задачу: написать что-то полезное для программистов, интересное для меня и при этом получить новых знаний с закреплением старых. Так и пришла в голову эта тема. Из SDK уже существовали реализации на Java, Python и Go, так почему бы мне не опробовать сделать такое?..

[Зависимости и версии]
Стандарт: C++17 и новее.
CMake: 3.11 и новее. Но лучше самую свежую...
Внешние зависимости:
1. libcpr 1.10.2 - Легковесная библиотека для HTTP-запросов, ссылка на документацию.
2. jsoncpp 1.9.5 - Легковесная библиотека для JSON, ссылка на документацию.

[Установка]
 1. Скачать репозиторий.

git clone https://github.com/coroutined/VimeCpp.git

2. Собрать проект с помощью cmake.

mkdir VimeCpp\build && cd VimeCpp\build && cmake ..

3. Собрать библиотеку (--config может быть Debug/Release).

cmake --build . --config=Release


[Документация]
Если вам необходимо знать всё о методах, то в client.hpp вы сможете прочитать какой метод за что отвечает. А может я в будущем сделаю нормальную документацию, не знаю. Будущее до безумия непредсказуемо.

[Примеры]
Взаимодействие с игроками:

Скрытый текст
auto [users, status] = api.getUsersByNames({"AlesteZ", "Okssi", "CharkosOff"});
std::tie(users, status) = api.getUsersByIDs({1476864, 94245, 4278493});
std::cout << "Users by nicknames:" << std::endl;
if(status == RequestStatus::SUCCESS_CODE) {
  for(std::size_t index = 0; index < users.size(); index++) {
    User &user = users.at(index);
    std::cout << format("\tUser #{0}: {1} ({2} lvl, {3}%)", 
                        index, user.username, user.level, user.levelPercentage * 100) << std::endl;
  }
} else {
  std::cout << "\tCode error: " << status << std::endl;
}

 

Взаимодействие со статистикой игрока:

Скрытый текст
auto [stats, status] = api.getUserStats(38609);
std::cout << "BlockParty global stats:" << std::endl;
for(std::string &key: stats["BP"]["global"].getMemberNames()) {
	std::cout << format("\t{0}: {1}", key, stats["BP"]["global"][key]) << std::endl;
}
std::cout << "BlockParty season stats:" << std::endl;
for(std::string &key: stats["BP"]["season"]["monthly"].getMemberNames()) {
	std::cout << format("\t{0}: {1}", key, stats["BP"]["season"]["monthly"][key]) << std::endl;
}

auto bwhypeGlobal = stats["BWHYPE"]["global"];
std::cout << format("BedWars Hype total kills/deaths: {0}/{1}",
					bwhypeGlobal["kills"], bwhypeGlobal["deaths"]) << std::endl;

Взаимодействие с матчами игрока:

Скрытый текст
auto [userMatches, status] = api.getUserMatchesOffset(38609); // 20 последних матчей игрока.
std::tie(userMatches, status) = api.getUserMatchesOffset(38609, 5); // 20 матчей игрока после 5 последних игр.
std::tie(userMatches, status) = api.getUserMatchesOffset(38609, 0, 1); // Последний матч.

Взаимодействие с таблицами рекордов:

Скрытый текст
auto [leaders, status] = api.getLeaderboard("user", 20, 0); // Топ 20 пользователей по уровню.
std::cout << leaders.leaderboard << std::endl;
for(uint index = 0; index < leaders.records.size(); index++) {
	auto record = leaders.records[index];
	std::cout << format("#{0}: {1} ({2} lvl, {3}%);",
                        index + 1, record["username"], record["level"], 
                        record["levelPercentage"].asFloat() * 100) << std::endl;
}
std::tie(leaders, status) = api.getLeaderboard("guild", 10, 10, "total_coins"); // Топ 10 гильдий по вложенным коинам после 10 первых гильдий.
std::cout << std::endl << leaders.leaderboard << std::endl;
for(uint index = 0; index < leaders.records.size(); index++) {
	auto record = leaders.records[index];
	std::cout << format("#{0}: {1}, ({2} lvl, {3}%), {4} coins total;",
                        index + 11, record["name"], record["level"],
                        record["levelPercentage"].asFloat() * 100,
                        record["total_blocks"]) << std::endl;
}
std::tie(leaders, status) = api.getLeaderboard("prison", 5, 0); // Топ 5 игроков по блокам на Prison.
std::cout << std::endl << leaders.leaderboard << std::endl;
for(uint index = 0; index < leaders.records.size(); index++) {
	auto record = leaders.records[index];
	std::cout << format("#{0}: {1}, {2} blocks total;",
                        index + 1, record["user"]["username"],
                        record["total_blocks"]) << std::endl;
}

Взаимодействие с информацией о матчах:

Скрытый текст
auto [match, status] = api.getMatch("572314156045172736");
if(match.game == "BP") {
	std::cout << "Found BlockParty:" << std::endl;
	std::cout << "\tTotal levels: " << match.additional["levels"];
	std::cout << "Events:" << std::endl;
	for(uint index = 0; index < match.events.size(); index++) {
		auto gameEvent = match.events[index];
		std::cout << format("\tEvent #{0}: {1}, player {2}, time elapsed {3};",
                            index + 1, gameEvent["type"], gameEvent["player"],
                            gameEvent["time"]) << std::endl;
    }
  	std::cout << "Winner: " << match.winner["player"] << std::endl;
} // else ...


[Исходный код]
Ссылка на GitHub-репозиторий.

[Просто мысли]
Если рассуждать на холодную голову, то я не отрицаю наличие говно-кода, который буду стараться править, поэтому опытных прошу писать в эту тему. Бонусом нужно отметить, что я ни разу не писал библиотеки, для меня это казалось что-то на ступеньке выше.
А ещё я уверен, что людей пищущих на C++ найдётся не так уж много, но это уже не так важно.

[Список изменений]
[29.04.2023] v1.0: Релиз проекта.

Изменено пользователем coroutined
Незначительные исправления в теме.

Опубликовано:
  • Автор
1 час назад, KaiHavertz сказал:

подпись крутая 

Благодарю. Жаль работа не моя, руки не из того места растут.

  • 1 месяц спустя...
  • 3 недели спустя...
  • 3 месяца спустя...

Создайте аккаунт или войдите в него для комментирования

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Account

Navigation

Поиск

Поиск

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.