Unity’le Hile Yapmaya Ne Dersin ???

alikaya/ Ağustos 22, 2017/ Bilgisayar, Genel, Unity/ 0 comments

Yine ve yeniden merhaba,

Bu derste GTA oyunlarında olduğu gibi (LEAVEMEALONE veya ASPIRINE tarzı) bir hile sistemi kodlamayı göstereceğim.

Kullanabileceğiniz iki farklı sistem oluşturdum. Bunların birbirine göre artıları ve eksileri bulunuyor. Yine de her iki sistem de üzerinde oynamalar yapılarak tam istediğiniz şekle dönüştürülebilir…

Birinci Yöntem (Tavsiye Edilir): Bu sistemi kullanırsanız hileniz sadece A-Z arası harflerden (Türkçe karakter desteği de var) ve 0-9 arası rakamlardan oluşabilir. Yani hilenizde nokta işareti gibi herhangi bir işaret veya boşluk karakteri bulunduramazsınız (yazdığım ufak bir kod sayesinde hilenizdeki noktalar, virgüller ve boşluklar otomatik olarak siliniyor ama bu durum ‘+’ veya ‘*’ gibi diğer karakterler için geçerli değil. Bu karakterleri kullanırsanız bu sistem işe yaramaz).

Sistemi test etmek için aşağıdaki kodu bir objenize JavaScript component olarak atayın ve Inspector’dan “Hile Kodu“na değer olarak birşeyler girin (örneğin 1adamvarmışcanısıkılan girebilirsiniz.):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#pragma strict
public var hileKodu : String;
public var ikiTusArasiMaxZaman : float = 1.0;
private var enSonTusaBasmaZamani : float;
private var basilmasiGerekenSiradakiHarf : int;
function Start()
{
    if( hileKodu == null || hileKodu.Length == 0 )
        Destroy( this );
    // Hile kodundaki tüm harfleri büyük harfe çevir
    hileKodu = hileKodu.ToUpper();
    // İ harflerini I harfiyle değiştir (yoksa işler karışabiliyor)
    hileKodu = hileKodu.Replace( 'İ', 'I' );
    // Hile kodundaki boşluk, nokta ve virgüllerden kurtul
    hileKodu = hileKodu.Replace( " ", "" );
    hileKodu = hileKodu.Replace( ".", "" );
    hileKodu = hileKodu.Replace( ",", "" );
    enSonTusaBasmaZamani = Time.time;
    basilmasiGerekenSiradakiHarf = 0;
}
function OnGUI()
{
    if( Input.anyKeyDown )
    {
        var e : Event = Event.current;
        if( e.type == EventType.KeyDown )
        {
            var tus : KeyCode = e.keyCode;
            if( tus != KeyCode.None )
            {
                if( tus == KeyCode.RightBracket )
                    TusuIslemeAl( 'Ü'[0] );
                else if( tus == KeyCode.LeftBracket )
                    TusuIslemeAl( 'Ğ'[0] );
                else if( tus == KeyCode.Quote )
                    TusuIslemeAl( 'I'[0] );
                else if( tus == KeyCode.Semicolon )
                    TusuIslemeAl( 'Ş'[0] );
                else if( tus == KeyCode.Backslash )
                    TusuIslemeAl( 'Ç'[0] );
                else if( tus == KeyCode.Slash )
                    TusuIslemeAl( 'Ö'[0] );
                else if( tus.ToString().Length == 6 && e.keyCode.ToString().Substring( 0, 5 ) == "Alpha" )
                    TusuIslemeAl( tus.ToString()[5] ); // 0-9 arası rakamlar işleme alınır
                else if( tus.ToString().Length == 7 && e.keyCode.ToString().Substring( 0, 6 ) == "Keypad" )
                    TusuIslemeAl( tus.ToString()[6] ); // 0-9 arası rakamlar işleme alınır
                else if( tus.ToString().Length == 1 )
                    TusuIslemeAl( tus.ToString()[0] ); // A-Z arası harfler işleme alınır
            }
        }
    }
}
function TusuIslemeAl( tus : char )
{
    print( tus + " işleme alındı" );
    // Eğer bir önceki tuşa bastıktan sonra geçen zaman çok fazlaysa hileyi başa sar
    if( Time.time > enSonTusaBasmaZamani + ikiTusArasiMaxZaman )
        basilmasiGerekenSiradakiHarf = 0;
    if( tus == hileKodu[basilmasiGerekenSiradakiHarf] )
    {
        // Eğer doğru tuşa basarsak...
        basilmasiGerekenSiradakiHarf++;
        if( ( basilmasiGerekenSiradakiHarf ) >= hileKodu.Length )
        {
            basilmasiGerekenSiradakiHarf = 0;
            // Hile kodu başarıyla girildi! Yapılacakları buraya yaz...
            print( "Hile " + Time.time + " anında aktifleştirildi!" );
        }
    }
    else
    {
        // Eğer yanlış tuşa basarsak...
        if( hileKodu[0] == tus )
            basilmasiGerekenSiradakiHarf = 1;
        else
            basilmasiGerekenSiradakiHarf = 0;
    }
    enSonTusaBasmaZamani = Time.time;
}

İkinci Yöntem: Bu sistemin önceki sisteme göre artısı klavyenizdeki tüm tuşları destekliyor olmasıdır. Ama Unity’nin KeyCode yapısında Türkçe karakter desteği olmadığı için ğ, ü, ş gibi Türkçe karakterlerin uygun KeyCode karşılığını bilmelisiniz. Dediğim gibi, bu sistem klavyedeki tüm tuşları destekler ve bu yüzden hileyi girerken Tab veya NumLock tuşuna bile bassanız girmekte olduğunuz hile geçersiz hale gelir ve baştan girmeniz gerekir. Bir hilede ‘*’, ‘/’ veya boşluk gibi karakterlerin olmasına pek de gerek olmadığı için ben daha kullanışlı olan Birinci Yöntem’i tavsiye ediyorum.

Bu sistemi test etmek içinse alttaki kodu bir objenize JavaScript component olarak atayın ve Inspector’dan “Hile Kodu“nu genişletip “Size” değerini artırın ve “Element 0” gibi elemanlara sırayla hilenizi oluşturan tuş kombinasyonunu girin. Örneğin “MERHABA” kombinasyonunu deneyebilirsiniz:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#pragma strict
public var hileKodu : KeyCode[];
public var ikiTusArasiMaxZaman : float = 1.0;
private var enSonTusaBasmaZamani : float;
private var basilmasiGerekenSiradakiHarf : int;
function Start()
{
    if( hileKodu == null || hileKodu.Length == 0 )
        Destroy( this );
    enSonTusaBasmaZamani = Time.time;
    basilmasiGerekenSiradakiHarf = 0;
}
function OnGUI()
{
    if( Input.anyKeyDown )
    {
        var e : Event = Event.current;
        if( e.type == EventType.KeyDown )
        {
            var tus : KeyCode = e.keyCode;
            if( tus != KeyCode.None )
            {
                TusuIslemeAl( tus );
            }
        }
    }
}
function TusuIslemeAl( tus : KeyCode )
{
    print( tus + " işleme alındı" );
    // Eğer bir önceki tuşa bastıktan sonra geçen zaman çok fazlaysa hileyi başa sar
    if( Time.time > enSonTusaBasmaZamani + ikiTusArasiMaxZaman )
        basilmasiGerekenSiradakiHarf = 0;
    if( tus == hileKodu[basilmasiGerekenSiradakiHarf] )
    {
        // Eğer doğru tuşa basarsak...
        basilmasiGerekenSiradakiHarf++;
        if( ( basilmasiGerekenSiradakiHarf ) >= hileKodu.Length )
        {
            basilmasiGerekenSiradakiHarf = 0;
            // Hile kodu başarıyla girildi! Yapılacakları buraya yaz...
            print( "Hile " + Time.time + " anında aktifleştirildi!" );
        }
    }
    else
    {
        // Eğer yanlış tuşa basarsak...
        if( hileKodu[0] == tus )
            basilmasiGerekenSiradakiHarf = 1;
        else
            basilmasiGerekenSiradakiHarf = 0;
    }
    enSonTusaBasmaZamani = Time.time;
}

Tekrar görüşmek dileğiyle!

Leave a Comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*