GTAMulti.com - Türkiye'nin Türkçe GTA Sitesi
28 Kasım 2024, 22:41:29

Iterator Plugin Kullanımı

Başlatan NexoR, 21 Nisan 2019, 19:00:46

« önceki - sonraki »

0 Üye ve 2 Ziyaretçi konuyu incelemekte.

NexoR

Selam, bugün sizlere Iterator Plugin kullanımı hakkında bilgi vereceğim. Bu sistem sizi gereksiz döngülerden ve büyük AMX boyutlarından kurtarır. Ayrıca C++ ile yazıldığı için PAWN işlemlerinden daha da hızlıdır.


Iterator Plugin Ne İşe Yarıyor ?

Aslında "for" veya "while" döngüleriyle aynı işlemi görüyor. Ama tek farkı gereksiz yere döngü yapmıyor. Bu sayede sunucunuzun performansını arttırıyor. Ayrıca sınırsız veri eklemenizi de sağlıyor. Küçük bir özellik daha eklemek gerekirse Sort özelliği ile verilerinizi küçükten büyüğe veya büyükten küçüğe doğru sıralayabiliyor.


Nasıl Kullanılır ?

Eğer 1D şeklinde bir array dizesi oluşturmak istiyorsanız (new Nex[MAX_PLAYERS]) şu şekilde kullanmanız gerekmektedir:

#include <a_samp>
#include <iterator>

new Iter: Nex;

public OnGameModeInit()
{
Nex = Iter1D::Olustur(100);
return 1;
}

main()
{
new id;

id = Iter1D::Kontrol(Nex);
Iter1D::Ekle(Nex, id);

id = Iter1D::Kontrol(Nex);
Iter1D::Ekle(Nex, id);

id = Iter1D::Kontrol(Nex);
Iter1D::Ekle(Nex, id);
}


Burada yaptığımız işlem "Nex" adlı değişkene 100 adet veri ekleyebileceğimiz bir işlev oluşturduk. Burada id = Iter1D::Kontrol(Nex); kullanıldığında 0,1,2... şeklinde sizlere id değeri verir. Eğer böyle otomatik değilde kendiniz veri eklemek istiyorsanız Iter1D::Ekle(Nex, 10); , Iter1D::Ekle(Nex, 20); şeklinde kullanabilirsiniz.

Peki 100 adet limit değerine ulaştım bunu nasıl anlayabilirim derseniz şu şekilde tespit edebilirsiniz.

main()
{
new id;

id = Iter1D::Kontrol(Nex);
if(id == -1)
{
printf("Slot dolmuş !");
}
}


Eklediğim bir değeri nasıl silebilirim derseniz onuda şu şekilde kullanmanız yeterlidir.

main()
{
Iter1D::Ekle(Nex, 10);
Iter1D::Sil(Nex, 10);
}


Değişkende bir değer var mı yok mu kontrol etme.

main()
{
if(!Iter1D::Bul(Nex, 50))
{
printf("Yok");
}
else
{
printf("Var");
}
}


Değişkenin içinde ne kadar veri olduğunu öğrenme.

main()
{
printf("Nex Adlı Değişkendeki Veri Sayısı: %d", Iter1D::Size(Nex));
}


Sort ile sıralama işlemleri.

main()
{
// Küçükten büyüğe doğru sıralamak isterseniz böyle
Iter1D::Sort(Nex, SORT_KUCUK);

// veya

Iter1D::Sort(Nex);

// böyle kullanabilirsiniz.

// Bu şekilde kullandığınızda 5, 3, 8, 1 gibi verileriniz -> 1, 3, 5, 8 şeklinde sıralanır.

// Büyükten küçüğe sıralamak isterseniz şu şeklide kullanın.
Iter1D::Sort(Nex, SORT_BUYUK);

// Böyle kullandığınızda 5, 3, 8, 1 gibi verileriniz -> 8, 5, 3, 1 şeklinde sıralanır.
}


Rastgele bir sayı alma.

main()
{
Iter1D::Ekle(Nex, 10);
Iter1D::Ekle(Nex, 20);
Iter1D::Ekle(Nex, 30);

new rnd = Iter1D::Random(Nex);
printf("Rastgele Sayı: %d", rnd);

// 10, 20, 30 sayılarından birini verecektir.
}


Değişkenin içindeki tüm verileri silme.

main()
{
// Nex adlı değişkendeki tüm verileri sildi.
Iter1D::Temizle(Nex);
}


Nex adlı değişkendeki tüm verileri okumak için şu yöntemi kullanın.

main()
{
Iter1D::Ekle(Nex, 10);
Iter1D::Ekle(Nex, 20);
Iter1D::Ekle(Nex, 30);

for_1D(i, Nex){
printf("%d", i);
}
}


Çıktı:

10
20
30




2 Boyutlu Dize Kullanımı (2D)

Bu yöntem foreach da kullandığınız yöntemden biraz farklıdır. Ama hemen şu şekilde gösterebiliriz:

Foreach'da

new Iterator: Nex[MAX_PLAYERS][MAX_VEHICLES];

Iterator'de

new Iter: Nex;

public OnGameModeInit()
{
Nex = Iter2D::Olustur(MAX_PLAYERS);
return 1;
}


[!] Iterator'de MAX_VEHICLES kısmı limitlendirilmez, sınırsız veri ekleyebilirsiniz. İsterseniz MAX_PLAYERS kısmını da dilediğiniz değeri girerek o kadar kullanım sunabilirsiniz. Örneğin: 500000 gibi.

2D kullanım da slot bulma. Bu slot kısmı MAX_PLAYERS kısmıdır. Bir çete araç sistemi yapıyorsanız bu özelliği kullanmanız lazım. Yani şu şekilde:

main()
{
new id = Iter2D::Slot(Nex);
printf("%d", id);

// Slotların hepsi boşsa 0 verecektir. veya 0, 1, 3 ise 2 verecek sonrasında 4 verecektir.
// Eğer tüm slotlar dolduysa -1 dönecektir.

if(id == -1){
printf("Tüm slotlar dolu !");
}
}


Slot içine veri ekleme. Burada slotu çete id olarak düşünün 10 kısmını da aracın id si şeklinde düşünün.

main()
{
new slot = Iter2D::Slot(Nex);
Iter2D::Ekle(Nex, slot, 10);
}


Slot içinden veri silme.

main()
{
Iter2D::Ekle(Nex, slot, 10);
Iter2D::Sil(Nex, slot, 10);
}


Slot içinde değer var mı yok mu kontrol etme.

main()
{
if(!Iter2D::Bul(Nex, slot, 10))
{
printf("Değer yok");
}
else
{
printf("Değer var");
}
}


Slotun içinden en düşük değeri üretme. Yani slotunuz boş diyelim id 0 verecektir. Yada 0, 1, 3 değerleri var diyelim ilk önce 2 sonra 4 verecektir.

main()
{
new id = Iter2D::Kontrol(Nex, slot);
printf("Değer: %d", id);

Iter2D::Ekle(Nex, slot, id);
}


Slotunuzun içindeki veri sayısını öğrenme.

main()
{
printf("Ekli Veri: %d", Iter2D::Size(Nex, slot));
}


Slotunuzu küçükten büyüğe veya büyükten küçüğe sıralama.

main()
{
// İkiside aynı işlev, küçükten büyüğe
Iter2D::Sort(Nex, slot);
Iter2D::Sort(Nex, slot, SORT_KUCUK);

// Büyükten küçüğe sıralama
Iter2D::Sort(Nex, slot, SORT_BUYUK);
}


Slot içinden rastgele bir değer alma:

main()
{
printf("Değer: %d", Iter2D::Random(Nex, slot));
}


Oluşturmuş olduğunuz slotu silme. Yani MAX_PLAYERS deki playerid kısmından birini. Bu işlemi yaptığınızda slotunuzun içindeki verilerde temizlenir, ekstradan temizlemenize gerek yoktur.

main()
{
Iter2D::SlotSil(Nex, slot);
}


Değişkende ekli olan slotları sort ile büyükten küçüğe veya küçükten büyüğe sıralama:

main()
{
Iter2D::SlotSort(Nex);
Iter2D::SlotSort(Nex, SORT_KUCUK);

Iter2D::SlotSort(Nex, SORT_BUYUK);
}


Değişkende kaç tane slot olduğunu öğrenme:

main()
{
printf("Değişkende ekli olan slot sayısı: %d", Iter2D::SlotSize(Nex));
}


Nex adlı değişkenin slotundaki veriyi okumak için şu yöntemi kullanın.

main()
{
Iter2D::Ekle(Nex, slot, 10);
Iter2D::Ekle(Nex, slot, 20);
Iter2D::Ekle(Nex, slot, 30);

for_2D(i, Nex, slot){
printf("%d", i);
}
}


Çıktı:

10
20
30


Nex adlı değişkenin içindeki slotları öğrenme.

main()
{
for_Slot(i, Nex)
{
printf("Slotlar: %d", i);
}
}




Hazır Olarak Gelen Döngüler

Oyuncular:

main()
{
for_1D(i, Oyuncu)
{
printf("Oyuncu id leri: %d", i);
}

printf("Toplam Oyuncu Sayısı: %d", Iter1D::Size(Oyuncu));
}


Botlar:

main()
{
for_1D(i, Bot)
{
printf("Bot id leri: %d", i);
}

printf("Toplam Bot Sayısı: %d", Iter1D::Size(Bot));
}


Araçlar:

main()
{
for_1D(i, Arac)
{
printf("Araç id leri: %d", i);
}

printf("Toplam Araç Sayısı: %d", Iter1D::Size(Arac));
}




[!] Anlamadığınız bir nokta olursa konuda hiç çekinmeden sorabilirsiniz.
Son düzenlenme: 30 Nisan 2019, 16:25:57 NexoR

Enkei

Detaylı ve güzel bir anlatım. Paylaşım için teşekkürler.


Joker

open.mp Turkey Department Manager
victimrp.com founder

PuReBReDTuRK

Detaylı anlatım yaparak öğrenmek isteyenlere katkıda bulunduğun için teşekkürler NexoR


5YPEXE



NexoR

Yorumlarınız için teşekkürler.


Prisoners

Detaylı ve güzel bir anlatım. Paylaşim İçin Teşekkürler, Başarılar


Özkan

..
Son düzenlenme: 24 Haziran 2020, 12:59:35 Özkan

Ryroz

Konu mükemmel. Elinize sağlık teşekkürler.


Kalashnikoff

███████████████████  %71

QrzR


FelleR