GTAMulti.com - Türkiye'nin Türkçe GTA Sitesi

Deathmatch Sistemi Yapmak (ZCMD-DCMD)

Başlatan Pablo, 08 Aralık 2017, 00:34:03

« önceki - sonraki »

0 Üye ve 2 Ziyaretçi konuyu incelemekte.

Pablo

Deathmatch Sistemi Yapmak (ZCMD-DCMD)

Merhaba Arkadaşlar. Bu anlatimda Deathmatch sistemi nasil yapilir onu anlattim ,eğer modunuz ZCMD gibi kodlama şekli ile kodlanmışsa ona göre de yöntemlerimiz olacaktır. Önceki anlatımımda eğer modunuz ZCMD ise bir işe yaramıyordu. Oyuncu yine komut kullanabiliyordu. Fakat bu anlatım ile oyuncu komutları hiçbir şekilde kullanamayacak.

İlk olarak, yine önceki anlatımımızda olduğu gibi bir değişken oluşturmamız gerekiyor. Bunun sebebi oyuncunun deathmatch oynayıp oynamadığını tespit etmek. Eğer oynuyorsa if yardımı ile birtakım şeyleri kullanmasını engelleyeceğiz.

PAWN Kodu: Seç
Modun başına aşağıdaki kodu ekliyoruz:
new dmstate[MAX_PLAYERS];

Deathmatch gitmek için bir komut hazırlıyoruz. Modunuz ZCMD ise aşağıdaki komutu modun boş bir kısmına yerleştirin. (Örneğin modun sonu olabilir, boş aralıklar olabilir. Sığdırabildiğiniz yere artık.)

CMD:dm(playerid,params[])
{
if(IsPlayerInAnyVehicle(playerid)){ // Burada eğer araçtaysa parantezini açtık.
GameTextForPlayer(playerid,"~w~Hop, aractan in delikanli.",1000,3); // Buraya ise araçtaysa olacakları işledik.
}else{ // Burada eğer araçta değilse olacaklar parantezini açtık.
SetPlayerPos(playerid,246.375991,109.245994,1003.218750); // Burası San Fierro Polis Departmanı oluyor.
SetPlayerInterior(playerid,10); // Etrafın siyah görünmemesi için 0 olan interior değerini SFPD değeri ile değiştik.
SetPlayerVirtualWorld(playerid,51); // Default dünyadaki oyuncu ile karşılaşmaması için dünyalarını değiştik.
dmstate[playerid] = 1; // Oyuncunun dm değişkenini 1 yaptık. Oyuncu artık deathmatch moduna girmiş bulunmakta.
SendClientMessage(playerid,-1,"{74E8CD}[D-System]: {FFFFFF}Deathmatch moduna hoş geldiniz!");
} // Açtığımız parantezi kapattık.
return 1;
} // En başta komutu başlatırken açtığımız parantezi kapattık.

Burada yaptığımız işlemleri bir tekrarlayalım.
Oyuncu "/dm" yazarak deathmatch alanına ışınlandı.
Interior değeri 10 oldu.
Dünyası değişti.
Deathmatch değişkeni aktif oldu.
Değişmeniz gereken kısımları öğrenelim.

SetPlayerPos(playerid,x,y,z); X,Y,Z kısmına oyun içerisinde aldığınız kordinat değerlerini yazacaksınız.
SetPlayerInterior(playerid,x); X kısmına eğer ışınlandığı yer bir interior ise o interior değerini yazacaksınız. Eğer 0 ise, yani interior yoksa bu satırı silebilirsiniz.
SetPlayerVirtualWorld(playerid,X); Burada, oyuncuyu 0 haricinde herhangi bir dünyaya postalıyoruz. /dm komutunu kullananlar o değeri benimseyecek. Diğer dünyadakiler haritada asla karşılaşmayacaklar.

Burayı artık anladığımızı varsayıyorum. Sıradaki durağımız OnPlayerSpawn oluyor. Bu callback oyuncu doğduğunda yapılacak işlemleri uygulamamıza yaramakta.

public OnPlayerSpawn(playerid)
{
if(dmstate[playerid] == 1)
{
SetPlayerPos(playerid,246.375991,109.245994,1003.218750); // Burası San Fierro Polis Departmanı oluyor.
SetPlayerInterior(playerid,10); // Etrafın siyah görünmemesi için 0 olan interior değerini SFPD değeri ile değiştik.
SetPlayerVirtualWorld(playerid,51); // Default dünyadaki oyuncu ile karşılaşmaması için dünyalarını değiştik.
dmstate[playerid] = 1; // Oyuncunun dm değişkenini 1 yaptık. Oyuncu artık deathmatch moduna girmiş bulunmakta.
}
return 1;
}

/dm komutunda yaptığımız işlemleri aynen buraya aktarıyoruz. Oyuncunun değeri 1 ise yeniden oraya ışınlanmış oluyor. Bunu kullanıp kullanmamak sizin elinizde. Eğer oyuncunun her doğduğunda /dm yazarak gitmesini istiyorsanız bunu OnPlayerSpawn bölümüne eklemeyin, unutun gitsin. Eğer otomatik olarak /dmcik yazmadıkça çıkmamasını istiyorsanız, bu tam size göre.

Evet, belki de en kolayına geldik. Sıra geldi oyuncunun komut kullanamama yasağına.

Burada eğer modunuz ZCMD ise OnPlayerCommandText callbacki geçersiz olmakta. Onun yerine yeni bir callback işimizi görecek. OnPlayerCommandPerformed ile tanıştınız mı bilmiyorum ama eğer bir diğer anlatımımız olan, Unknown Command anlatımımıza bakmış iseniz kesinlikle tanışmışsınız demektir.

Modunuzun boş bir kısmına aşağıdaki kodu ekleyiniz:

public OnPlayerCommandPerformed(playerid, cmdtext[], success)
{
if(dmstate[playerid] == 1) SendClientMessage(playerid,-1,"{74E8CD}[D-System]: {FFFFFF}Şu an ölüm modunuz aktif. (Çıkmak için /ayril komutunu kullanınız.)");
/* Eğer modda hatalı komut yazıldığında hata mesajını değiştirmek istiyorsanız aşağıdaki kodu ekleyiniz */
if(!success) SendClientMessage(playerid,-1,"{74E8CD}[System]: {FFFFFF}Hatalı komut girdiniz.");
/* Konumuz ile alakası yok ama bir faydamız dokunsun istedik. */
return 1;
}

Eğer modunuz DCMD ise endişe yapmanıza gerek yok demektir. OnPlayerCommandText sizin yardımınıza koşacaktır. Biliyorsunuz ki DCMD kodlama mantığında komutu oluşturduğumuzda birde OnPlayerCommandText e bir not düşmemiz gerekmekte. Örnek not olarak dcmd(asd,3,cmdtext); diyebiliriz. Şimdi bizim alttaki kodu hepsinin üzerine, OnPlayerCommandText in başına eklememiz gerekiyor.

public OnPlayerCommandText(playerid, cmdtext[])
{
if(dmstate[playerid] == 1) SendClientMessage(playerid,-1,"{74E8CD}[D-System]: {FFFFFF}Şu an ölüm modunuz aktif. (Çıkmak için /ayril komutunu kullanınız.)");

New butonuna bastığınızda OnPlayerCommandText callbacki otomatik gelmekte. Fakat ZCMD sonradan ekleme, yani bir üyenin kodlamasıyla geliştiği için gelmemekte. OnPlayerCommandText te gösterdiğimiz gibi başına ekleyip compile ederseniz işlem tamam demektir.

Eh, geldik en kolay kısmına. Deathmatch dan ayrılma komutuna, değerleri sıfırlayarak ölüm maçından şutlama kısmına.

CMD:ayril(playerid,params[])
{
SpawnPlayer(playerid); // Oyuncuyu geri OnPlayerSpawn kısmına yolladık, yani spawn ettik.
SetPlayerInterior(playerid,0); // Etrafın siyah görünmemesi için geri default değerine aldık.
SetPlayerVirtualWorld(playerid,0); // Default dünyaya geri postaladık.
dmstate[playerid] = 0; // Oyuncunun dm değişkenini 0 yaptık. Oyuncu artık deathmatch modundan çıkmış bulunmakta.
SendClientMessage(playerid,-1,"{74E8CD}[D-System]: {FFFFFF}Deathmatch modundan ayrıldınız.");
return 1;
} // En başta komutu başlatırken açtığımız parantezi kapattık.

Konunun orjinal:https://samp-destek-sitesi.tr.gg/Deathmatch-Sistemi-Yapmak--k1-ZCMD_DCMD-k2-.htm
Son düzenlenme: 05 Ocak 2018, 08:00:26 ByGold
Alıntı




Pawnotürk Üyesi 2017-2020

pag

Elinize sağlık konu biraz daha düzenlenebilir.


Pablo

Alıntı




Pawnotürk Üyesi 2017-2020

Dyternal


Excision

Alıntı yapılan: STaRDuST10 - 08 Aralık 2017, 10:03:16

Anlatımın iyi gelişiyorsun :helal:. Başarılar.
[Alıntı]
Alıntı yapmayı bırakıp, kendin bir şeyler yapmalısın.
Son düzenlenme: 08 Aralık 2017, 10:47:19 Excision

Pablo

Alıntı yapılan: STaRDuST10 - 08 Aralık 2017, 10:03:16

Anlatımın iyi gelişiyorsun :helal:. Başarılar.

Teşekkürler :D

Alıntı yapılan: Excision - 08 Aralık 2017, 10:36:03

Alıntı yapılan: STaRDuST10 - 08 Aralık 2017, 10:03:16

Anlatımın iyi gelişiyorsun :helal:. Başarılar.
[Alıntı]
Alıntı yapmayı bırakıp, kendin bir şeyler yapmalısın.

Tmm abi :helal:
Son düzenlenme: 08 Aralık 2017, 11:13:47 Excision
Alıntı




Pawnotürk Üyesi 2017-2020

Lé Spîke

Alıntı yapılan: Excision - 08 Aralık 2017, 10:36:03

Alıntı yapılan: STaRDuST10 - 08 Aralık 2017, 10:03:16

Anlatımın iyi gelişiyorsun :helal:. Başarılar.
[Alıntı]
Alıntı yapmayı bırakıp, kendin bir şeyler yapmalısın.


Katılıyorum. Varolan birseyi herkes paylaşır. Ya gelistir yada yeni birşey yap

         

Pablo

Alıntı yapılan: DeliOqlan - 10 Aralık 2017, 18:35:19

Alıntı yapılan: Excision - 08 Aralık 2017, 10:36:03

Alıntı yapılan: STaRDuST10 - 08 Aralık 2017, 10:03:16

Anlatımın iyi gelişiyorsun :helal:. Başarılar.
[Alıntı]
Alıntı yapmayı bırakıp, kendin bir şeyler yapmalısın.


Katılıyorum. Varolan birseyi herkes paylaşır. Ya gelistir yada yeni birşey yap

:helal:

Alıntı




Pawnotürk Üyesi 2017-2020

Jawié

Kaynak belirtmelisin. Aldığın yerde daha ayrıntılı bir şekilde anlatıldı.


Pablo

Alıntı yapılan: Jawié - 10 Aralık 2017, 21:11:23

Kaynak belirtmelisin. Aldığın yerde daha ayrıntılı bir şekilde anlatıldı.

Eklendi :helal:

Alıntı




Pawnotürk Üyesi 2017-2020

Federico

İnsanları Tanıdıkça
Seveceksin Yalnızlığı...

Pablo

Alıntı




Pawnotürk Üyesi 2017-2020

Jizzy


LanceX

Oyuncu ayril yazınca onu da engellemeyecek mi?


Pablo

Alıntı yapılan: SelimBasKaN - 06 Ocak 2018, 13:56:00

Oyuncu ayril yazınca onu da engellemeyecek mi?

Suan Bilgisayarım Arızalı Engellermi Bilmiyorum Bi Deneyin İsterseniz İyi Günler.

Alıntı




Pawnotürk Üyesi 2017-2020