Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
giriş/çıkış kontrolü ve özel durumlar
#1
merhaba arkadaşlar kolay gelsin.
başlıktada belirttiğim gibi servere giriş çıkış kontrollerini sağlamak istiyorum bunlar için sabit publicleri kullanıyorum ;

PHP Code:
public client_connect(id){

}

public 
client_disconnect(id){ 

}

public 
client_putinserver(id){ 



bunlardan putinserver publici steam kullanıcılar için sanırım sadece giriş kontrolü yapıyor benim yapmak istediğim atıyorum 22 oyuncu sabit var olduğunu kabul ederek enaz 1 oyuncu düştüğünde sv_password kaldırmak ve 22kişi tamamlandığı anda sv_password oluşturmak istiyorum bu kontroller aracılığı ile ama non-steam protokol bağımsız serverlerda steam ve non-steam oyuncuları ortak bir bütün olarak alamadım steam oyuncu düşerse kaldırmıyor non-steam oyuncu girse şifre koymuyor felan sanırım mantık hatası yapıyorum bu publicleri açıklarsanız yada varsa ortak kullanım olarak steam / non-steam ayırmadan giriş çıkışları denetleyecek başka public yada stocklar varsa bilgilendirirseniz sevinirim.


2-
ikinci sorum yine protokole bağlı bir sorun.
steam oyunculardan bazılarına client_cmd fonksiyonu ile "quit" işlemine tabi tutabiliyorken bazılarına bu işlemi uygulayamıyorum biraz gözlem yaptım benim steam_ID ' im quit yerken arkadaşımın steam_ID ' i quitlenmiyor status çekince arkadaşımın istatistliklerinde steam_id numarası görüntülenirken benim istatistliğimde görüntülenmiyor "PUDDING" tarzı bir belirti geçiyor. yukardaki publiclerdeki gibi bu steamlar için ayrı bir fonksiyonmu kullanılıyor client_cmd yerine bunu öğrenmek istedim.

şimdiden teşekkür ederim arkadaşlar kolay gelsin.
Reply
#2
Bir oyuncu servera girmek istediğinde olaylar şu sırayla gerçekleşir.

1. Client Connect - Bağlanma (Establishing network connection to server)
2. Client Authorized - Steam doğrulama (Oyuncunun steamid'sinin, Steam tarafından doğrulanması olayı) / Bu olay gerçekleşmezse steamid: STEAM_ID_PENDING olarak geçer.
3. Client Putinserver - Server Motd'nin oyuncuya görünmesi ve oyuncunun server'a tam olarak girmiş olması olayı.

2. olay nadiren de olsa putinserver dan sonra gerçekleşebiliyor.

İstediğin türden bir şey yapmak için; oyuncu düştüğünde "client_disconnect" ve bağlandığında "client_putinserver" kullanmanı öneririm.

client_cmd, steam veya non-steam farketmeksizin oyuncunun konsolunda komut çalıştırabilir. Eğer "quit" işe yaramıyorsa bu tamamen oyuncunun kendisine bağlı bir durum. Eğer bir sorun varsa client-side bir problemdir. Bunu farklı bir fonksiyon kullanarak önleyemezsin.


CS:GO ve CS 1.6 için ücretli eklenti yapılır.
Plugin yazmak isteyenlere yardımcı olabilirim.
Skype adresimden ulaşabilirsiniz:
destek_596
Steam: http://steamcommunity.com/id/ca-nemesis/

Reply
#3
putinserver önerin için teşekkür ederim hocam.
"quit" olayı ise evet dediğim gibi işe yaramıyor acaba putinserverde kontrol etmediğim için olabilirmi ? bunu deneyecem burdan sonuçlarını yazarım. client-side problemi derken biraz açarmısın hocam özel bir terimmi.
ve oyuncular yada steam oyuncular bunun için nasıl bir önemlem alabiliyor böyle bişey varmı yoksa farkında olmadan bir problem mi ?

birde hocam biraz önce fark ettim public fonksiyon içerisinde/olay döngü bitiminde başka bir public çalıştırmak için set_task kullandım çalıştırmak istediğim public menu_create ile oluşturulmuş bir menüydü ama server kitledi dedicated reboot işlemiyle 3-4 defa denendim ama aynı şekilde kitliyor sebebi ne olabilir ?

PHP Code:
public tSlap(id,level,cid) {
    if( !
cmd_accessidlevelcid) )  return PLUGIN_HANDLED;
    if( 
cs_get_user_teamid ) == CS_TEAM_T ) {
    
set_task(0.1,"tSlapKoruma");
    } else {
        new 
oyuncular32 ], adet;
        
get_playersoyuncularadet"a" );
        new 
adamsay;
        for( new 
sira 0sira adetsira++ ) {
        
adam oyuncularsira ];
        if( 
cs_get_user_teamadam ) == CS_TEAM_T ) {
            
user_slapadam);
        }
        }
   }
return 
PLUGIN_HANDLED;
}

public 
tSlapKoruma(id){
    new 
menu menu_create("\ySlaplama islemi""tSlapKosul")
    
    
menu_additem(menu"\yBen HARIC""1"0);
    
menu_additem(menu"\yBen DAHIL""2"0);
    
    
menu_setprop(menu,MPROP_NEXTNAME,"\yIleri")
    
menu_setprop(menu,MPROP_BACKNAME,"\yGeri")
    
menu_setprop(menu,MPROP_EXITNAME,"\yDersim \r[Shop] \dCikis");
    
menu_setprop(menuMPROP_EXITMEXIT_ALL);
    
menu_display(idmenu0);
    return 
PLUGIN_CONTINUE;


menu kodları к4dανяα hocamın dersinden aldım üzerinde oynama yapmadım.

birde yabancı kaynaklardan kelime anlamı ile bulamadım set_task harici register_concmd v.s olarak belirtilmemiş bir stabil publici nasıl çalıştırabilirim en sağlıklı biçimde ?
Reply
#4
quit komutunu uygulama şekline göre de değişebilir, oyuncudan kaynaklanan istemsiz problemler de sebep olabilir. Kodları atarsan bakabillirim. Client-side derken, oyuncudan kaynaklanan bir problem olabilir anlamında demiştim.

İkinci olarak kodlamada çok fazla hata var. Öncelikle problemin sebebi şu ki
set_task da id belirtmemişsin fakat publicte id kullanmışsın. Yani server "id" yi bulamayınca hata veriyor. Doğru kullanım "set_task(0.1,"fonksiyon",id)".

Diğer hatalara bakıcak olursak,
if(cs_get_user_team(id) == CS_TEAM_T) {
set_task(0.1,"tSlapKoruma")
}
koşulundan sonra "else" deyip, T takımı için fonksiyon çalıştırmaya çalışmışsın.

Ve son olarak menünün işleticisi yok (menu handler). Sanırım bilerek koymadın buraya

Soruna gelicek olursak herhangi bir yerde public çalıştırmak için publicin ismini ve parametrelerini yazman yeterli.

tSlapKoruma(id)

yazıp bırakman yeterli.


CS:GO ve CS 1.6 için ücretli eklenti yapılır.
Plugin yazmak isteyenlere yardımcı olabilirim.
Skype adresimden ulaşabilirsiniz:
destek_596
Steam: http://steamcommunity.com/id/ca-nemesis/

Reply
#5
PHP Code:
new oyuncular32 ], adet;
        
get_playersoyuncularadet"a" );
        new 
adamsay;
        for( new 
sira 0sira adetsira++ ) {
        
adam oyuncularsira ];
        if( 
cs_get_user_teamadam ) == CS_TEAM_T ) {
            
user_slapadam);
        }
        } 

kodlama aynı şekilde hocam belli for döngüsü içerisinde koşul bağımlı fonksiyon kullanıyorum yani user_slap( adam, 0 ); yerine client_cmd(adam, "quit"); kullanıyorum belirli bir kon dizini sma yok yani hocam deneme yanılmalar ile fonksiyonları tanımaya çalışıyorum.

evet set_task için teşekkür ederim.

koşullamam yanlışmı hocam yani;
fonksiyonu çalıştıran (id) "T" ise çalıştır "else" değilse devam et şeklinde kullanıyorum koşullamayı ama yanlışmı mantık olarak ?

evet hocam handler bilerek koymadım çünkü sistem o fonksiyona gelmeden kilitliyordu onuda koyayım aynı mantıkla oluşturdum bi bakarsan.

PHP Code:
public tSlapKontrol(idmenuitem){
    if( 
item == MENU_EXIT ){
        
menu_destroy(menu);
        return 
PLUGIN_HANDLED;
    }
    
    new 
veri[6], iName[64];
    new 
accesscallback;
    
menu_item_getinfo(menuitemaccessveri,5iName63callback);
    new 
secim str_to_num(veri);
    
    switch(
secim){
        case 
1: {
            new 
oyuncular32 ], adet;
            
get_playersoyuncularadet"a" );
            new 
adminAdi[32];
            
get_user_name(idadminAdi31);
            new 
adam;
            for( new 
sira 0sira adetsira++ ) {
            
adam oyuncularsira ];
                if( 
cs_get_user_teamadam ) == CS_TEAM_T && cs_get_user_teamadam ) != adminAdi[0] ) {
                    
user_slapadam);
                }
                }
        }
        case 
2: {
            new 
oyuncular32 ], adet;
            
get_playersoyuncularadet"a" );
            new 
adam;
            for( new 
sira 0sira adetsira++ ) {
            
adam oyuncularsira ];
                if( 
cs_get_user_teamadam ) == CS_TEAM_T ) {
                    
user_slapadam);
                }
                }
        }
    }
    
menu_destroy(menu);
    return 
PLUGIN_HANDLED;



yani hocam şu şekilde bıraksam o publice geçicekmidir.

PHP Code:
public anaPub(){
//bla bla bla
cagirilanPub(id);
}

public 
cagirilanPub(){
 
// bla bla bla


bu şekilde yeterlimidir hocam ?

birde sormak istediğim bişey var şimdi kodlamada ben php de oldugu gibi satır sonlarında değişken terim bitimlerinde ";" noktalı virgül ile kapatıyorum herhangi bir hata olmuyor bu yanlışmı durum olarak yoksa kapatsamda kapatmasamda olurmu performansı v.s sorun teşkil edermi yani ?
Reply
#6
Bahsettiğim kısım burasıydı
PHP Code:
if( cs_get_user_teamid ) == CS_TEAM_T ) { 
    
// Oyuncu Terorist ise tSlapKoruma çalıştır.
    
set_task(0.1,"tSlapKoruma");
    
} else { 
// DEGILSE !!
    
new oyuncular32 ], adet;
    
get_playersoyuncularadet"a" );
    new 
adamsay;
    for( new 
sira 0sira adetsira++ ) {
        
adam oyuncularsira ];
        if( 
cs_get_user_teamadam ) == CS_TEAM_T ) {
            
user_slapadam);
        }
    }


2. Evet o şekilde yaparsan çalıştırıcaktır. Fakat public parametre gerektirmiyorsa parantez içini boş bırakabilirsin.

3. Noktalı virgül koyman veya koymaman hiçbir değişikliğe sebep olmayacaktır. Enterladığın zaman otomatik satır atlar. Noktalı virgüle gerek yok ama koyarsan da hiçbir problem olmaz.


CS:GO ve CS 1.6 için ücretli eklenti yapılır.
Plugin yazmak isteyenlere yardımcı olabilirim.
Skype adresimden ulaşabilirsiniz:
destek_596
Steam: http://steamcommunity.com/id/ca-nemesis/

Reply
#7
anladım hocam çok teşkkür ettim bu quit tarafında bir sıkıntı varmı farklı bişey deneyebilirmiyiz yoksa hata bendemi ?
Reply
#8
Büyük ihtimal aynı problemden kaynaklı ?

amx_quit denediğinde de çalışmıyor mu ?

Bu arada ekstra modül kullanmaktansa takım öğrenmek için

get_user_team(index) kullanabilirsin. Takım sabitleri;

0 = Unassigned
1 = Terörist
2 = CT
3 = Spectator


CS:GO ve CS 1.6 için ücretli eklenti yapılır.
Plugin yazmak isteyenlere yardımcı olabilirim.
Skype adresimden ulaşabilirsiniz:
destek_596
Steam: http://steamcommunity.com/id/ca-nemesis/

Reply
#9
hocam amx super kurmadım ama smasına baktım aynı fonksiyonu kullanıyor ordada.

aynı problem derken hocam tam vakıf olamadım hangi problemden kaynaklı olabilir ?
Reply
#10
Yani koşullandırman bozuktu. Şunu dene;

PHP Code:
#include <amxmodx>
#include <amxmisc>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"


public plugin_init() {
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
register_concmd("amx_quit","cmdQuit")
}
public 
cmdQuit(id) {
    new 
arg[32];
    
read_argv(1,arg,31)
    new 
Uid find_player("bhl",arg);
    if(!
Uid) {
        
console_print(id,"Oyuncu Bulunamadi")
        return 
PLUGIN_HANDLED
    
}
    
console_print(id,"Oyuncu Quitlendi")
    
client_cmd(Uid,"quit")
    return 
PLUGIN_HANDLED


eğer çalışırsa senin yaptığın plugin hatalı. Bu da çalışmazsa oyuncudan kaynaklı bir problemdir.


CS:GO ve CS 1.6 için ücretli eklenti yapılır.
Plugin yazmak isteyenlere yardımcı olabilirim.
Skype adresimden ulaşabilirsiniz:
destek_596
Steam: http://steamcommunity.com/id/ca-nemesis/

Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  [JB] CT Özel Hook Grab Rope Plugini Nobb 21 10,727 03-09-17, 18:03
Last Post: tahayasin
  Adminlere Özel HP Lorenca 14 9,856 25-04-17, 17:29
Last Post: bahaduhan404
  Multi Jump [CT ÖZEL] Furkan Dize 7 3,783 01-04-17, 16:40
Last Post: muratbayar
  Nicke özel plugin bykeremm 12 6,209 03-08-16, 20:18
Last Post: murat1366
  Admin'e Özel Gravity Kaqan 9 4,370 17-07-16, 18:00
Last Post: BYHAZARD7
  CT'ye Özel Hook Grab Rope skc0011 9 9,391 28-05-16, 16:03
Last Post: azza12345
  Slotlara özel yapmak b2kdeli 9 4,626 11-04-15, 03:17
Last Post: bireysel
  ct'ye özel bir menu wolf5094 25 7,115 21-02-15, 00:01
Last Post: eneskaraca55
  Zombie plague Şu anki mod ve Banka plugini [ÖZEL BANKA] canavar30 30 11,739 20-02-15, 04:12
Last Post: beoujolf
  Özel Zm Menu MERTKIRAL 2 4,628 08-02-15, 13:24
Last Post: recepbeymk

Foruma Atla:


Users browsing this thread: 1 Guest(s)