- Katılım
- 26 Eki 2021
- Konular
- 132
- Mesajlar
- 825
- Online süresi
- 3ay 5g
- Reaksiyon Skoru
- 936
- Altın Konu
- 39
- Başarım Puanı
- 184
- Yaş
- 28
- TM Yaşı
- 4 Yıl 5 Ay 26 Gün
- MmoLira
- 4,736
- DevLira
- 6
Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. HEMEN TIKLA!
Merhaba,
Şebnem öğelerini JSON kullanarak yüklemek için tamamen yeni ve taze bir yaklaşım. Önceki versiyonlardan daha mı iyi? Sanırım öyle. Bu versiyona ait kaynak sadece 50 satır civarında, bu yüzden oldukça hafif.
YMIR kodlama stiline uymaya karar verildi, bu yüzden sınıflar veya yapılar (struct) yok.
Peki, bu "sistemi" nasıl kuracaksınız?
Örnek blend.json içeriği
blend_item.cpp
blend_item.h
Reload için cmd_gm.cpp
Alıntıdır.
Şebnem öğelerini JSON kullanarak yüklemek için tamamen yeni ve taze bir yaklaşım. Önceki versiyonlardan daha mı iyi? Sanırım öyle. Bu versiyona ait kaynak sadece 50 satır civarında, bu yüzden oldukça hafif.
YMIR kodlama stiline uymaya karar verildi, bu yüzden sınıflar veya yapılar (struct) yok.
Peki, bu "sistemi" nasıl kuracaksınız?
- Kullanmakta olduğunuz derleyicinin en az C++11'i desteklediğinden emin olun.
- JSON ayrıştırıcısını (parser) kurun.
- Eski blend_item.h ve blend_item.cpp dosyalarını yeni olanlarla değiştirin, hepsi bu kadar.
- Eğer JSON dosyasının "hot-reload" (anında güncellenmesi) işlevini istiyorsanız, cmd_gm.cpp kısmını ekleyebilirsiniz (önerilir).
Örnek blend.json içeriği
Kod:
{
"50821": {
"type": "CRITICAL_PCT",
"value": [ 8, 10, 12, 15, 20 ],
"duration": [ 60, 120, 180, 300, 600 ]
},
"50822": {
"type": "PENETRATE_PCT",
"value": [ 8, 10, 12, 15, 20 ],
"duration": [ 60, 120, 180, 300, 600 ]
},
"50823": {
"type": "ATTACK_SPEED",
"value": [ 2, 3, 4, 5, 8 ],
"duration": [ 60, 120, 180, 300, 600 ]
},
"50824": {
"type": "RESIST_MAGIC",
"value": [ 8, 10, 12, 15, 20 ],
"duration": [ 60, 120, 180, 300, 600 ]
},
"50825": {
"type": "ATT_BONUS",
"value": [ 30, 50, 70, 90, 120 ],
"duration": [ 60, 120, 180, 300, 600 ]
},
"50826": {
"type": "DEF_BONUS",
"value": [ 40, 70, 100, 150, 200 ],
"duration": [ 60, 120, 180, 300, 600 ]
},
"51002": {
"type": "ENERGY",
"value": [ 1, 3, 5, 7, 10 ],
"duration": 1800 // It is possible to use only one duration (and value).
}
}
blend_item.cpp
Kod:
#include "stdafx.h"
#include "constants.h"
#include "blend_item.h"
#include "locale_service.h"
#include <fstream>
nlohmann::json json_blend;
bool Blend_Item_init()
{
try
{
json_blend = nlohmann::json::parse(std::ifstream(LocaleService_GetBasePath() + "/blend.json"), nullptr, true, true);
return true;
}
catch (const nlohmann::json::parse_error& message)
{
sys_err("%s", message.what());
return false;
}
}
bool Blend_Item_find(const uint32_t item)
{
return json_blend.contains(std::to_string(item));
}
int32_t Blend_Item_verify(const nlohmann::json& item, const bool can_string)
{
if (item.is_number())
return item.get<int32_t>();
return can_string ? FN_get_apply_type(item.get<std::string>().c_str()) : item.at(number(0, item.size() - 1)).get<int32_t>();
}
void Blend_Item_set_value(const LPITEM item)
{
if (!item)
return;
try
{
const auto& find = json_blend.find(std::to_string(item->GetVnum())).value();
item->SetSocket(0, Blend_Item_verify(find.at("type"), true));
item->SetSocket(1, Blend_Item_verify(find.at("value"), false));
item->SetSocket(2, Blend_Item_verify(find.at("duration"), false));
}
catch (const nlohmann::json::exception& message)
{
sys_err("%s", message.what());
}
}
blend_item.h
Kod:
#pragma once
#include "item.h"
#include <cstdint>
#include <nlohmann/json.hpp>
bool Blend_Item_init();
bool Blend_Item_find(uint32_t item);
int32_t Blend_Item_verify(const nlohmann::json& item, bool can_string);
void Blend_Item_set_value(LPITEM item);
Reload için cmd_gm.cpp
Kod:
// Add:
#include "blend_item.h"
// Find:
case 'c': // cube
Cube_init ();
break;
// Paste (under):
case 'b':
{
if (Blend_Item_init())
ch->ChatPacket(CHAT_TYPE_INFO, "Blend items reloaded.");
else
ch->ChatPacket(CHAT_TYPE_INFO, "Something went wrong while loading blend items, check syserr.txt!");
}
break;
Linkleri görebilmek için Turkmmo Forumuna ÜYE olmanız gerekmektedir.
- Katılım
- 13 Ocak 2020
- Konular
- 1,399
- Mesajlar
- 9,717
- Online süresi
- 1y 29g
- Reaksiyon Skoru
- 7,086
- Altın Konu
- 306
- Başarım Puanı
- 393
- TM Yaşı
- 6 Yıl 3 Ay 8 Gün
- MmoLira
- 3,922
- DevLira
- 15
Paylaşım için teşekkürler
- Katılım
- 1 Kas 2022
- Konular
- 11
- Mesajlar
- 170
- Online süresi
- 1ay 28g
- Reaksiyon Skoru
- 51
- Altın Konu
- 0
- Başarım Puanı
- 72
- TM Yaşı
- 3 Yıl 5 Ay 19 Gün
- MmoLira
- 1,019
- DevLira
- 9
GameSource dosyanız JSON eklentisini desteklemezse hatta verecektir oo yüzden json destekliyen bir filesden direk çekebilirsiniz.
- Katılım
- 20 Haz 2022
- Konular
- 10
- Mesajlar
- 68
- Online süresi
- 1ay 2g
- Reaksiyon Skoru
- 20
- Altın Konu
- 0
- Başarım Puanı
- 50
- TM Yaşı
- 3 Yıl 10 Ay 4 Gün
- MmoLira
- 1,876
- DevLira
- 6
peki kendi sunucumuza json nasıl eklerizGameSource dosyanız JSON eklentisini desteklemezse hatta verecektir oo yüzden json destekliyen bir filesden direk çekebilirsiniz.
Şu an konuyu görüntüleyenler (Toplam : 1, Üye: 0, Misafir: 1)
Benzer konular
- Cevaplar
- 14
- Görüntüleme
- 554
- Cevaplar
- 8
- Görüntüleme
- 659
- Cevaplar
- 37
- Görüntüleme
- 2K
- Cevaplar
- 5
- Görüntüleme
- 365