⭐🚀 TkyNET | Blacklist ve Profesyonel DDoS Korumalı TeamSpeak 3 Sunucuları 🚀⭐
Sponsor Görsel
🇹🇷 TR Lokasyon | 🛡️ Gelişmiş DDoS Koruması | ⚡ Düşük Ping | 🎧 Kesintisiz TS3 | Hostlar
Sponsor Görsel 2
SponsorSponsor

Eklenti yazılırken yapılan hatalar & çözümleri

Konu

#1
Merhaba WebAilesi forumu sakinleri;
Eklentilerde yapılan hataları ve çözümlerini anlattım. Umarım daha güzel yazılmış eklentiler görürüm. Gülümse


1.PreThink & PostThink gibi komutlar
PreThink komutu oyuncuya saniyede çok kez gönderildiği için çok önemli bir komuttur.

Yapılan büyük yanlış; [Oyuncuların ölü olup olmadığını vs tanıtma;]
PHP Kod:
public plugin_init()
{
    
RegisterHookChain(RG_CBasePlayer_PreThink"CBasePlayer_PreThink");
}

public 
CBasePlayer_PreThink(const id)
{
    if(
get_user_team(id) == && is_user_alive(id))
    {
        
//blabla
    
}

Defalarca oyuncunun takımını algılıyor ve ölü olmadığını algılıyor.
Bunun yerine bir değişken oluşturacağız.

PHP Kod:
new bool:ctveyasiyor[33];

public 
plugin_init()
{
    
RegisterHookChain(RG_CBasePlayer_PreThink"CBasePlayer_PreThink");
    
RegisterHookChain(RG_CBasePlayer_Spawn"CBasePlayer_Spawn");
    
RegisterHookChain(RG_CBasePlayer_Killed"CBasePlayer_Killed");
}

public 
CBasePlayer_PreThink(const id)
{
    if(
ctveyasiyor)
    {
        
//blabla
    
}
}

public 
CBasePlayer_Spawn(const id)
{
    
/*
    if(!is_user_alive(id))
    {
        return;
    }
    // Bunu kullanabilirsiniz. Bug olursa kesin çözümü
    */

    
if(get_member(idm_iTeam) == TEAM_CT && is_user_alive(id)) // Reapi ile ct olduğunu tanıtmak
    
{
        
ctveyasiyor[id] = true;
    }
    
    
// veya (fark etmez)  [reapi önerilir, biraz daha hızlı]

    
if(get_user_team(id) == && is_user_alive(id)) // Reapi ile ct olduğunu tanıtmak
    
{
        
ctveyasiyor[id] = true;
    }
    
}

public 
CBasePlayer_Killed(const victim, const attacker)
{
    
// Bu komutu kullanmak zorunda değilsiniz. Attacker kullanmadığımız için yazdım.
    #pragma unused attacker

    
ctveyasiyor[id] = false;

2.Switch
Switch komutu eklentide bir değişkenin veya komutun değerlerini algılamamızı sağlıyor.
İf ile tanıtmaktan daha iyi ve hızlı.

Yapılan hata [Bir değişken oluşturmadan değer algılatmak

PHP Kod:
switch(str_to_num(data))
{
    
//blabla

Bunun yerine değişken oluşturacağız.

PHP Kod:
new key str_to_num(data);
switch(
key)
{
    
//blabla

3.Set_Task
Aynı PreThink açıklamasındaki gibi yapılan bir hata.
'0.1' olarak ayarlanan bir task olayında ölü ve takım algılatması;
Bu sefer bot olup olmadığı şeklinde örnek vereceğim.

PHP Kod:
public bilmemne(id)
{
    
set_task(0.1"loc_pec_wec"id__"b"); // 0.1 saniyede bir gönderilecek
}

public 
loc_pec_wec(id)
{
    if(
is_user_bot(id))
    {
        
client_print_color(idid"Sen botsun.");
    }

Doğru kullanımı;

PHP Kod:
new bool:bot[33];

public 
client_putinserver(id)
{
    if(
is_user_bot(id))
    {
        
bot[id] = true;
    }
    
    
// veya
    
    
bot[id] = is_user_bot(id) ? true:false// botsa true değilse false
}

public 
bilmemne(id)
{
    
set_task(0.1"loc_pec_wec"id__"b"); // 0.1 saniyede bir gönderilecek
}

public 
loc_pec_wec(id)
{
    if(
bot[id])
    {
        
client_print_color(idid"Sen botsun.");
    }

4.Bool nedir, nasıl kullanılır?
Eklentilerde pek çok gördüğümüz, bildiğimiz fakat kullanamadığımız veya bilmediğimiz bool?
Bir değişken eğer sadece 1-0 olarak ayarlanacaksa bool kullanılmalı.

Yapılan yanlış [degisken = 1 ; degisken = 0]

PHP Kod:
new bot[33];

public 
client_putinserver(id)
{
    if(
is_user_bot(id))
    {
        
bot[id] = 1;
    }

Bool kullanılmalı;

PHP Kod:
new bool:bot[33];

public 
client_putinserver(id)
{
    if(
is_user_bot(id))
    {
        
bot[id] = true;
    }

5.Cvar oluşturmak
1.8.3 e kadar bir sorun yoktu fakat değişti.
Artık kullanalım;

Yapılan yanlış [register_cvar & 0 - 1]

PHP Kod:
new lololol;

public 
plugin_init() {
    
lololol register_cvar("bh_enabled""1");
}

public 
blabla(id)
{
    if(
get_pcvar_num(lololol))
    {
        
//blabla
    
}

Burada yine bool kullanılmamakta. Ve register_cvar yerine bu komut daha kullanışlı ve hızlı.
Sunucuda olan cvarlar için get_cvar_pointer ve get_pcvar_ num,string...

PHP Kod:
new bool:lololol;
new 
normalcvar;
new 
mp_freeforall// ff cvarı her sunucuda var (CSDURAGI)

public plugin_init() {
    
bind_pcvar_num(create_cvar("bh_enabled""1"_"Cvar aciklamasi"true0.0true1.0), lololol);
    
bind_pcvar_num(create_cvar("normalcvar""832"_"Sonu yok"true0.0), normalcvar);

    
mp_freeforall get_cvar_pointer("mp_freeforall"); // Sunucudaki cvarı çekiyor.
}

public 
blabla(id)
{
    if(
lololol)
    {
        
//blabla
    
}

    new 
deger normalcvar;
    
deger--;
    
// değer 831 oldu. get_pcvar_num kullanmaya gerek kalmadi

    // burada kullanıyoruz
    
if(get_pcvar_num(mp_freeforall))
    {
        
set_pcvar_num(mp_freeforall0);
    }

6.Const nedir, nasıl kullanılır?
Const, bir değişkenin sabit olduğu durumlarda kullanılır. Örneğin tag;

Yapılan yanlış [Const kullanılmaması]

PHP Kod:
new tag[] = "LOLOLOL";

client_print_color(00"Tagimiz budur: %s"tag); 
tag bir daha değiştirilemeyeceği için const eklemeliyiz.

PHP Kod:
new const tag[] = "LOLOLOL";

client_print_color(00"Tagimiz budur: %s"tag); 

Anlatımı ve emeği için Colditz adlı arkadaşa teşekkür ederiz.
Cevapla
#2
Teşekkürler
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da