Merhabalar arkadaşlar öncelik olarak, bu konuda sizlere kendi yapmış olduğum ve 2021 yılında güncel versiyonu ile r41-4 mysql sürümüyle kayıt/giriş sistemi nasıl oluşturursunuz basit bir şekilde onu göstereceğim şimdiden anladıysanız ne mutlu bana. :kro: MySQL R41-4 Direkt LinkGithub (https://github.com/pBlueG/SA-MP-MySQL/releases)
Öncelik olarak kayıt/giriş sistemine geçmeden önce MySQL R41-4 indirme linki attığım yerden include klasörüne ".inc" kısmına atın ve plugins klasörünede mysql.dll veya mysql.so uzantılı dosyasını atınız işletim sisteminiz neyse benim ki windows olduğu için windows üzerinden gideceğiz maalesef. Ek olarak; Aşağı kısımdan resim ile çizerek gösterdim bakabilirsiniz. :pc: (https://i.hizliresim.com/gdnMXX.png)
Şimdi kayıt/giriş sistemine geçelim. :serefe: Öncelik olarak mysql kütüphanesini yani includesini modumuza tanımlamamız gerek tabi.#include <a_mysql>
(https://i.hizliresim.com/OPGrKp.png)
Tamam işte bu kadar, şimdi ilk satır kodunu yazdın haydi başlayalım. :DŞaka bir yana, ehm tabi mysql için host, user, pass, db ayarlarımızı yapmamız gerekli aşağıdaki gibi.#define MYSQL_HOST "localhost" // host girişiniz local olabilir ya da aldığınız bir firmadaki ip kısmına göre olabilir.
#define MYSQL_USER "root" // user girişi
#define MYSQL_PASS "" // şifre kısmı
#define MYSQL_DB "dbtyronsql" // burası db kısmıdır kendinize göre ayarlayınız.
(https://i.hizliresim.com/H3RQ9M.png)
Haydi bastır be, senden olacak olacak. :D(https://s2.gifyu.com/images/aykutab3.gif)
Ama tabi, dur daha bitmedi hemen sevinme istersen. :melek:(https://s2.gifyu.com/images/aykutab2.gif)
Bunları yaptıktan sonra mysql değişkenimizi oluşturalım aşağıdaki gibi. Siz de kendinize göre ayarlayabilirsiniz. Ama TyroN ismini benim için silmezsen sevinirim tabi. :)(https://s2.gifyu.com/images/halilab.gif)
new MySQL:TyronSQL;
Dialogları enum şeklinde tanıtırsak daha iyi olur.enum {
dialogRegister,
dialogLogin,
dialogWarningPass
};
Şimdi öncelik olarak bir de oyuncu değişkenlerimizi tanıtalım aşağıdaki gibi.enum PlayerData {
pID,
pName[MAX_PLAYER_NAME],
pPass[65],
pSkor,
pPara,
pSkin,
Float:pPos[3]
};
new pData[MAX_PLAYERS][PlayerData];
OnGameModeInit publicine giderek boş bir yerine tanıtalım.print("MySQL Baglantisi kuruluyor...");
TyronSQL = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DB);
if(mysql_errno(TyronSQL) == 0)
{
print("MySQL Baglantisi Kuruldu!");
}
else
{
print("MySQL Baglantisi Kurulamadi!");
}
OnPlayerConnect publicine giderek boş bir yerine tanıtalım.new Query[512];
GetPlayerName(playerid, pData[playerid][pName], MAX_PLAYER_NAME);
mysql_format(TyronSQL, Query, sizeof(Query), "SELECT * FROM `oyuncuveri` WHERE `isim` = '%s' LIMIT 1", pData[playerid][pName]);
mysql_tquery(TyronSQL, Query, "CachePlayerData", "d", playerid);
OnPlayerDisconnect publicine giderek boş bir yerine tanıtalım.new Query[512];
SetPlayerScore(playerid, pData[playerid][pSkor]);
GivePlayerMoney(playerid, pData[playerid][pPara]);
SetPlayerSkin(playerid, pData[playerid][pSkin]);
GetPlayerPos(playerid, pData[playerid][pPos]
pData[playerid][pPos][1], pData[playerid][pPos][2]);[/li][/list]
mysql_format(TyronSQL, Query, sizeof(Query), "UPDATE `oyuncuveri` SET `skor` = '%d', `para` = '%d', `skin` = '%d', `xpos` = '%f', `ypos` = '%f', `zpos` = '%d' WHERE `isim` = '%s'", pData[playerid][pSkor], pData[playerid][pPara], pData[playerid][pSkin], pData[playerid][pPos]
pData[playerid][pPos][1], pData[playerid][pPos][2], pData[playerid][pName]);
mysql_query(TyronSQL, Query);
OnDialogResponse publicinin boş bir yerine.switch(dialogid)
{
case dialogRegister:
{
SendClientMessage(playerid, -1, "Başarıyla kayıt oldunuz, iyi oyunlar dileriz!");
new Query[512];
GetPlayerName(playerid, pData[playerid][pName], MAX_PLAYER_NAME);
mysql_format(TyronSQL, Query, sizeof(Query), "INSERT INTO `oyuncuveri` (`isim`, `sifre`) VALUES ('%s', '%s')", pData[playerid][pName], inputtext);
mysql_query(TyronSQL, Query);
return true;
}
case dialogLogin:
{
if(strcmp(inputtext, pData[playerid][pPass]) == 0)
{
SendClientMessage(playerid, -1, "Başarıyla giriş yaptınız, otomatik spawn oldunuz.");
SetPlayerScore(playerid, pData[playerid][pSkor]);
GivePlayerMoney(playerid, pData[playerid][pPara]);
SetPlayerSkin(playerid, pData[playerid][pSkin]);
GetPlayerPos(playerid, pData[playerid][pPos]
pData[playerid][pPos][1], pData[playerid][pPos][2]);[/li][/list]
cache_get_value_name_int(0, "playerid", pData[playerid][pID]);
cache_get_value_name_int(0, "skor", pData[playerid][pSkor]);
cache_get_value_name_int(0, "para", pData[playerid][pPara]);
cache_get_value_name_int(0, "skin", pData[playerid][pSkin]);
cache_get_value_name_float(0, "xpos", pData[playerid][pPos]
);
cache_get_value_name_float(0, "ypos", pData[playerid][pPos][1]);
cache_get_value_name_float(0, "zpos", pData[playerid][pPos][2]);
SpawnPlayer(playerid);
}
else
{
ShowPlayerDialog(playerid, dialogWarningPass, DIALOG_STYLE_MSGBOX, "Hatalı Giriş", "Hatalı giriş yaptığınız için sunucudan atıldınız.", "Tamam", "");
Kick(playerid);
}
}
}
Son olarak kayıt ve giriş hakkında callbackimizi tanıtalım.forward CachePlayerData(playerid);
public CachePlayerData(playerid)
{
if(cache_num_rows() > 0)
{
ShowPlayerDialog(playerid, dialogLogin, DIALOG_STYLE_PASSWORD, "Giriş Yap", "Aşağıdaki kutucuğa şifrenizi girerek giriş yapabilirsiniz:", "Giris", "");
}
else
{
ShowPlayerDialog(playerid, dialogRegister, DIALOG_STYLE_PASSWORD, "Kayıt", "Aşağıdaki kutucuğa güçlü bir şifre oluşturarak kayıt olabilirsiniz:", "Kayıt", "Iptal");
}
return true;
}
Şimdi PhpMyAdmin kısmından veritabanı ve tablo oluşturmak kaldı. Ben size direk aşağıda resimlerle gösterdim kendinize göre uyarlayabilirsiniz.(https://i.hizliresim.com/NIWEkz.png)
(https://i.hizliresim.com/WjgzTY.png)
Son olarak oyuna girip test edelim.Sonuç;(https://i.hizliresim.com/inALwr.png)
Benden bu kadar, iyi forumlar. :kro:
bu bir anlatım mı
Alıntı yapılan: Glorfin - 16 Şubat 2021, 21:47:04bu bir anlatım mı
Değişik fikirleri destekliyorum başarılar. :D
Dostum, bütün tabloları "Unique" yapmışsın eğer böyle olursa aynı kordinatta çıkmış bi adamın kordinatını kaydetmeyecek veya aynı SKORA sahip birisinin skorunu kaydetmeyecek çünkü olduğu için "Unique" kelimesi "Eşsiz, eşi benzeri olmayan." anlamlarında kullanılır yani bi tane SKOR = 10 varsa başka SKOR=10 olamıyor yani.
Alıntı yapılan: Goddew - 17 Şubat 2021, 18:47:50Dostum, bütün tabloları "Unique" yapmışsın eğer böyle olursa aynı kordinatta çıkmış bi adamın kordinatını kaydetmeyecek veya aynı SKORA sahip birisinin skorunu kaydetmeyecek çünkü olduğu için "Unique" kelimesi "Eşsiz, eşi benzeri olmayan." anlamlarında kullanılır yani bi tane SKOR = 10 varsa başka SKOR=10 olamıyor yani.
Bu sisteme göre o işlevi kendime göre yapmıştım, zaten konu içerisinde de diyorum kendinize göre uyarlayabilirsiniz diye iyi forumlar.
Calismadi neden olabilir?
Teşekkürler.
Teşekkürler.
Teşekkürler güzel paylaşım