Mustafa Eroğlu
Kilopat
- Katılım
- 15 Kasım 2015
- Mesajlar
- 218
- Çözümler
- 3
Daha fazla
- Cinsiyet
- Erkek
Merhaba,
Ben unity ile oyun geliştirmeye çalışıyorum ve veritabanına unity ile bağlanmanın yani oyun dosyalarının içerisinde SQL bağlantı satırlarının yazmasının güvenli olmadığını düşünüyorum. Bunun için sunucuda çalışan "GameServerManager " belirlenmiş opcode (işlem kodu) ile oyundan gelen opcode ve parametreleri veritabanına işleyecek. Mesela karakter hareket ettiğinde kordinant bilgileri direkt veritabanına değil Game Server Manager'a ulaşacak ve o da veritabanına işleyecek.
Opcode ile ilgili internette böyle bir örnek buldum.
[CODE lang="c" title="GameServerManager"]bool MoveTo(uint32_t GameWorldId, uint16_t RegionId, float PosX, float PosY, float PosZ);
bool MoveTo(uint16_t RegionId, float PosX, float PosY, float PosZ);
bool MoveTo(const uint32_t GameWorldId, CPosition Position, int32_t Type);
// Read params
SQLUSMALLINT cParam02, cParam03, cParam04;
SQLSMALLINT cParam05;
if (m_dbLink.sqlCmd.GetData(5, SQL_C_USHORT, &cParam02, 0, NULL)
&& m_dbLink.sqlCmd.GetData(6, SQL_C_USHORT, &cParam03, 0, NULL)
&& m_dbLink.sqlCmd.GetData(7, SQL_C_SHORT, &cParam04, 0, NULL)
&& m_dbLink.sqlCmd.GetData(8, SQL_C_USHORT, &cParam05, 0, NULL))
{
// Check player existence
CGObjPC* player = CGObjManager::GetObjPCByCharName16(cCharName);
if (player)
{
if(!player->MoveTo(cParam02, cParam03, cParam04, cParam05))
actionResult = FETCH_ACTION_STATE::FUNCTION_ERROR;
}
else
actionResult = FETCH_ACTION_STATE::CHARNAME_NOT_FOUND;
}
else
actionResult = FETCH_ACTION_STATE:ARAMS_NOT_SUPPLIED;[/CODE]
Unity ile ilgili bilgiler Unity Documentation adresinde bulunuyor fakat ben bu konuyla alakalı bir konu bulamadım. Bu konuda nasıl bir yol izlemem gerekir? Yardımlarınız için şimdiden teşekkürler.
Ben unity ile oyun geliştirmeye çalışıyorum ve veritabanına unity ile bağlanmanın yani oyun dosyalarının içerisinde SQL bağlantı satırlarının yazmasının güvenli olmadığını düşünüyorum. Bunun için sunucuda çalışan "GameServerManager " belirlenmiş opcode (işlem kodu) ile oyundan gelen opcode ve parametreleri veritabanına işleyecek. Mesela karakter hareket ettiğinde kordinant bilgileri direkt veritabanına değil Game Server Manager'a ulaşacak ve o da veritabanına işleyecek.
Opcode ile ilgili internette böyle bir örnek buldum.
C#:
INSERT INTO [SHARD_DATABASE].[dbo].[_ExeGameServer]
(
Action_ID,
CharName16,
Param02, -- Region Id
Param03, -- PosX
Param04, -- PosY
Param05 -- PosZ
)
VALUES
(
4,
'Test123',
22103,
1918,89893,
17,3228645,
1424,07336
);
[CODE lang="c" title="GameServerManager"]bool MoveTo(uint32_t GameWorldId, uint16_t RegionId, float PosX, float PosY, float PosZ);
bool MoveTo(uint16_t RegionId, float PosX, float PosY, float PosZ);
bool MoveTo(const uint32_t GameWorldId, CPosition Position, int32_t Type);
// Read params
SQLUSMALLINT cParam02, cParam03, cParam04;
SQLSMALLINT cParam05;
if (m_dbLink.sqlCmd.GetData(5, SQL_C_USHORT, &cParam02, 0, NULL)
&& m_dbLink.sqlCmd.GetData(6, SQL_C_USHORT, &cParam03, 0, NULL)
&& m_dbLink.sqlCmd.GetData(7, SQL_C_SHORT, &cParam04, 0, NULL)
&& m_dbLink.sqlCmd.GetData(8, SQL_C_USHORT, &cParam05, 0, NULL))
{
// Check player existence
CGObjPC* player = CGObjManager::GetObjPCByCharName16(cCharName);
if (player)
{
if(!player->MoveTo(cParam02, cParam03, cParam04, cParam05))
actionResult = FETCH_ACTION_STATE::FUNCTION_ERROR;
}
else
actionResult = FETCH_ACTION_STATE::CHARNAME_NOT_FOUND;
}
else
actionResult = FETCH_ACTION_STATE:ARAMS_NOT_SUPPLIED;[/CODE]
Unity ile ilgili bilgiler Unity Documentation adresinde bulunuyor fakat ben bu konuyla alakalı bir konu bulamadım. Bu konuda nasıl bir yol izlemem gerekir? Yardımlarınız için şimdiden teşekkürler.
Son düzenleyen: Moderatör: