Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
İlk Plugin ve Hatalar
#1
Bu aralar pluginlerle ilgilenmeye başladım baya ilgimi çekmeye başladılar. Bu konudan esinlenerek (daha doğrusu için bulunan kodları çalarak-alıntı yaparak-) aklıma ilk gelen plugini denemek istedim.

Plugin: (plugin demeye bin şahit ama neyse)
PHP Code:
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>

#define PLUGIN "BuyHP"
#define VERSION "1.0"
#define AUTHOR "Pikachu"

new gPara;

public 
plugin_init() {
    
register_plugin("BuyHP","1.0","Pikachu")
    
    
gPara register_cvar("buyhp_ucret","5000")
    
    
register_clcmd("say /buyhp","Buy_HP")
    
}

public 
Buy_HP(id) {
    
    if(
cs_get_user_money(id) < get_pcvar_num(gUcret)) {
    
client_print(id,print_chat,"Yeterli Paran Yok!",get_pcvar_num(gPara))
    return 
PLUGIN_HANDLED
    
}
cs_set_user_money(id,cs_get_user_money(id) - get_pcvar_num(gPara))
    }  
}
set_user_health(id,200)
return 
PLUGIN_HANDLED


.amxx çevirirken çıkan hatalar:
PHP Code:
buyhp.sma(23) : error 017undefined symbol "cs_get_user_money"
buyhp.sma(27) : warning 217loose indentation
buyhp
.sma(27) : error 017undefined symbol "cs_set_user_money"
buyhp.sma(32) : error 054unmatched closing brace
buyhp
.sma(36) : warning 203symbol is never used"set_user_health" 

32 satır var; 36. satırda nasıl bir hata oluyor onuda açıklarsanız sevinirim Smile

Bu arada fark ettim ki plugin o kadar kötü ki amacımı anlamamış olabilirsiniz, sayden /buyhp yazan kişiden 5000$ para gidicek ve hp si 200 olucak. Daha doğru amacım +100 hp yapmaktı fakat set_user_health ile olmuyor sanırım Smile
uhcakiP
Özel Plugin Kodlanır!

Steam_ID = STEAM_0:0:54912140
Steam_Nick = Ragnar Lothbrok
https://steamcommunity.com/id/lothbrok
Reply
#2
PHP Code:
/* Plugin generated by AMXX-Studio */ 

#include <amxmodx> 
#include <cstrike>
#include <fun>
#include <amxmisc> 

#define PLUGIN "BuyHP" 
#define VERSION "1.0" 
#define AUTHOR "Pikachu" 

new gPara

public 
plugin_init() { 
    
register_plugin("BuyHP","1.0","Pikachu"
    
gPara register_cvar("buyhp_ucret""5000")
     
    
register_clcmd("say /buyhp","Buy_HP"
     


public 
Buy_HP(id) { 
    if(!
is_user_alive(id)) return PLUGIN_HANDLED;
    new  
hp get_pcvar_num(gPara)
    if(
cs_get_user_money(id) < hp){
        
client_print(id,print_center,"Yeterli Paraniz Yok !")
    }
    else{
        
client_print(id,print_center,"+100 HP SATIN ALDINIZ")
        
set_user_health(idget_user_health(id) + 100
        
cs_set_user_money(id,cs_get_user_money(id) - hp)
    }
    return 
PLUGIN_HANDLED

Bende pek anlamam , fakat bi uğraştım dene bakalım oldu mu.
Reply
#3
Öncelikle indentation hatalarını gidermelisin. Bunlar yanlış yerde TAB veya süslü parantez kullanımından kaynaklanır. Bu düzeltilmiş hali, karşılaştırarak nerelerde hata yaptığını görebilirsin.
PHP Code:
/* Plugin generated by AMXX-Studio */ 

#include <amxmodx> 
#include <amxmisc>

#define PLUGIN "BuyHP" 
#define VERSION "1.0" 
#define AUTHOR "Pikachu" 

new gPara

public 
plugin_init() { 
    
register_plugin("BuyHP","1.0","Pikachu"
    
    
gPara register_cvar("buyhp_ucret","5000"
    
    
register_clcmd("say /buyhp","Buy_HP"
    


public 
Buy_HP(id) { 
    
    if(
cs_get_user_money(id) < get_pcvar_num(gUcret)) { 
        
client_print(id,print_chat,"Yeterli Paran Yok!",get_pcvar_num(gPara)) 
        return 
PLUGIN_HANDLED 
    

    
    
cs_set_user_money(id,cs_get_user_money(id) - get_pcvar_num(gPara)) 
    
    
set_user_health(id,200
    return 
PLUGIN_HANDLED 


İkinci olarak "cs_get_user_money" fonksiyonu "cstrike" modülüne ait bir fonksiyondur. Bu yüzden eklentide öncelikle "cstrike" içerir şeklinde belirtmelisin ki compiler o dosyayı da okusun.

#include <cstrike>

PHP Code:
/* Plugin generated by AMXX-Studio */ 

#include <amxmodx> 
#include <amxmisc>
#include <cstrike>

#define PLUGIN "BuyHP" 
#define VERSION "1.0" 
#define AUTHOR "Pikachu" 

new gPara

public 
plugin_init() { 
    
register_plugin("BuyHP","1.0","Pikachu"
    
    
gPara register_cvar("buyhp_ucret","5000"
    
    
register_clcmd("say /buyhp","Buy_HP"
    


public 
Buy_HP(id) { 
    
    if(
cs_get_user_money(id) < get_pcvar_num(gUcret)) { 
        
client_print(id,print_chat,"Yeterli Paran Yok!",get_pcvar_num(gPara)) 
        return 
PLUGIN_HANDLED 
    

    
    
cs_set_user_money(id,cs_get_user_money(id) - get_pcvar_num(gPara)) 
    
    
set_user_health(id,200
    return 
PLUGIN_HANDLED 


Şuanki hatalar:
Error: Undefined symbol "gUcret" on line 24
Error: Undefined symbol "set_user_health" on line 31

İlkinde diyor ki: 24. satırdaki gUcret tanınmıyor. Hemen bakalım nasıl tanımıyormuş ?

Pluginin başında oluşturduğun değişken gPara

new gPara

iken sen karıştırıp gUcret yazmışsın Smile

İkincisinde diyor ki: set_user_health tanınmıyor.
Çünkü set_user_health fonksiyonu "fun" kütüphanesinin bir fonksiyonudur. Yani yine cstrike'ı belirtirken yaptığın gibi fun'u da belitrmelisin

#include <fun>

PHP Code:
/* Plugin generated by AMXX-Studio */ 

#include <amxmodx> 
#include <amxmisc>
#include <cstrike>
#include <fun>

#define PLUGIN "BuyHP" 
#define VERSION "1.0" 
#define AUTHOR "Pikachu" 

new gPara

public 
plugin_init() { 
    
register_plugin("BuyHP","1.0","Pikachu"
    
    
gPara register_cvar("buyhp_ucret","5000"
    
    
register_clcmd("say /buyhp","Buy_HP"
    


public 
Buy_HP(id) { 
    
    if(
cs_get_user_money(id) < get_pcvar_num(gPara)) { 
        
client_print(id,print_chat,"Yeterli Paran Yok!",get_pcvar_num(gPara)) 
        return 
PLUGIN_HANDLED 
    

    
    
cs_set_user_money(id,cs_get_user_money(id) - get_pcvar_num(gPara)) 
    
    
set_user_health(id,200
    return 
PLUGIN_HANDLED 


Ve sonuç:
Welcome to the AMX Mod X 1.8.1-300 Compiler.
Copyright © 1997-2006 ITB CompuPhase, AMX Mod X Team

Header size: 368 bytes
Code size: 612 bytes
Data size: 296 bytes
Stack/heap size: 16384 bytes; estimated max. usage=779 cells (3116 bytes)
Total requirements: 17660 bytes
Done.

Bunlar dışında bazı yerlerde mantıksal hata var. Yani compiler'in göremediği ama amaçlanan olayı sağlamayan yerler var.

Satır 26:
PHP Code:
client_print(id,print_chat,"Yeterli Paran Yok!",get_pcvar_num(gPara)) 

Virgülden sonra ücretin saklandığı cvar ayarından bilgi çıkarmak istemişsin. Bunu kullanmanın bir amacı olabilir, o da kişiye parasının yetmediğinin yanında, ne kadar parası olması gerektiğini belirtmek. Bunun için de gerekli belirtmeyi yapmamışsın.
Doğrusu:

PHP Code:
client_print(id,print_chat,"Yeterli Paran Yok! Gereken Para = %d",get_pcvar_num(gPara)) 

----

Satır 32:
PHP Code:
    set_user_health(id,200

Sanırım burada kişiye 200 hp verilmesini amaçlıyorsun. Çok emin değilim ama buyhp yani hp satın alma olarak düşünülmüş bir eklentide kişiye para karşılığı hp eklenir. Senin yaptığın, kişinin hp'sini 200'e ayarlamak. Dolayısıyla kişinin hp si örneğin 300 ise, hp satın almak istediğinde hp'si 200 e düşecektir. Bu da iyi bir durum olmaz.
200 HP eklemek için yapılması gereken:

PHP Code:
set_user_health(id,  get_user_health(id) + 200


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
#4
Öncelikle ilgilendiğin için teşekkür ederim verdiğin plugin sorunsuz çalışmaktadır. Şimdi bu işlere yeni başladığım ve öğrenmek için bir kaç tane sorum olucak.

1.Bu kodları ezberden mi yazıyorsunuz? yoksa bakabileceğimiz bir yer var mı?

2.Hangi kodun hangi modüle ait olduğunu ezbere mi biliyorsunuz? (include lardan bahsediyorum modül doğru kelime mi tam emin değilim Smile )

3.Alttaki kodda - hp yerine buyhp_ucret gelmesi gerekmiyor muydu, daha mantıklı gibi gelmişti?
PHP Code:
cs_set_user_money(id,cs_get_user_money(id) - hp

4.Else ne işe yarıyor? şimdiye kadar bi tek if in mantığını çözdüm Smile

5.Son olarak alttaki eklediğiniz kod neyi karşılıyor?
PHP Code:
new  hp get_pcvar_num(gPara

34 satırlık pluginden amma soru çıktı diye düşünebilirsiniz bende yazarken 5 tane olacağını düşünmemiştim Big Grin

EDIT: akcaliberkk detaylı anlatım için çok teşekkür ederim. Basit hatalar yapa yapa düzelicek umarım Smile Bu arada bende +200 yapmak istiyordum fakat nasıl yapacağım hakkında bi fikrim yoktu boş durmasın diye set_user_health koydum nasıl olsa olmayacak konuda sorarım diye Big Grin
uhcakiP
Özel Plugin Kodlanır!

Steam_ID = STEAM_0:0:54912140
Steam_Nick = Ragnar Lothbrok
https://steamcommunity.com/id/lothbrok
Reply
#5
1- include dosyalarını kullana kullana biryerden sonra ezberlemeye başlıyorsun zaten senin ilk olduğun için normal zamanla sende ezbere dayalı eklentileri yapabilirsin.
2- İngilizcem var diyorsan forums.alliedmods.net sitesini tavsiye edebilirim.
3- Doğru yazılışı
PHP Code:
cs_set_user_money(id,cs_get_user_money(id) - get_pcvar_num(gPara)) 
bu şekildedir hiçbir yanlışlık yok.
4- else = türkçe anlamı başka,ilaveten,ayrıca anlamına gelmektedir.if ile bağladığın fonksiyonları else if şeklinde devam ettirebilirsin. Örnek vererek açıklarsak:

PHP Code:
if(get_user_team(id) == 1){
        
set_user_health(id,200)
    }
    else if(
get_user_team(id) == 2){
        
set_user_health(id,200)
    } 

yani burada get_user_team(id) == 1 --> Terör takımın sağlığını 200 yap ayrıca get_user_team(id) == 2 --> CT takımınında sağlığını 200 yap anlamını taşımaktadır.
Steam ID: STEAM_1:0:70428872
Steam Name: Seps!s
Skype: jdm.csplague

Takdir ediliyorsan değil, Taklit ediliyorsan başarmışsın demektir.
Albert Einstein
Reply
#6
Şimdi şöyle anlatayım
PHP Code:
new  hp get_pcvar_num(gPara
burda eşittirin sağındaki sola atanır bu mantığı kavra if else if mantığı ise if eğer anlamına geliyor örnek anlaman için söylüyorum
PHP Code:
if(para=1500)
{
       
bunuyap;
}
else if (
para=1500 değilse buraya gelir ve burada ki işlemi yapar
Yine de berk anlatsın şu an detaylı olarak anlatamıyorum ki o kadar detaylı bilgim yok pawn'da ki zaten yazıda yazamıyorum sol baş parmak yalan oldu Smile
Bu arada sağol berk
Reply
#7
Herkese cevapları için teşekkür ederim yavaş yavaş her şey yerli yerine oturuyor. Merak ettiğim bir şey daha var.

PHP Code:
new  hp get_pcvar_num(gPara
Yukardaki kodu uzun uzun get_pcvar_num(gPara) yazmak yerine kolaylık sağlaması için direk hp ye eşitlediniz. Bunu sadece bir public de kullanacağınız için belirli public içine yazdınız. Ama birden fazla public kullanacak olsaydınız global olarak hiçbir public in içine yazmayacak ve istediğiniz publicte kullanılabilir hale getiricektiniz. Doğru anlamış mıyım?
uhcakiP
Özel Plugin Kodlanır!

Steam_ID = STEAM_0:0:54912140
Steam_Nick = Ragnar Lothbrok
https://steamcommunity.com/id/lothbrok
Reply
#8
1. Bana sorarsan ben bunları ezbere biliyorum. Eklenti yazdıkça aklınızda kalıyor zaten. İngilizcem de iyi olduğu için bu kodları ezberlemek sorun olmuyor. Ama elbette hangi fonksiyonun ne işe yaradığını bulabileceğiniz siteler var. Bunlardan biri "funcwiki" diye google'da arattığınızda bulabileceğiniz fonksiyon arama motoru. Daha ayrıntılı bilgi için, fonksiyonu google a yazarak aratabilirsiniz. Yine de bulamazsanız buraya yazın elimizden geldiğince cevaplarız Smile

2. Yine aynı şekilde ben ezbere biliyorum. Kullandıkça ezberliyorsunuz zaten. Kaldı ki, hangi fonksiyonun hangi modül/kütüphane de olduğunu karıştırabilecek kadar fazla karışık fonksiyon yok. Örneğin cstrike modülündeki fonksiyonların neredeyse tamamı "cs_" ön ekiyle başlar. Zaten eklenti yazdıkça cstrike dan fazla bir fonksiyona ihtiyaç duymadığınızı anlıyorsunuz. Ben cstrike'ı, para ayarlamaktan başka bir amaç için kullandığımı fazla hatırlamıyorum. Yine başka bir modül olan hamsandwich e bakıcak olursak. Yine kullanılan kodlar kendini belli eder. Hepsinin kenarında köşesinde bir "ham" vardır.

ExecuteHam, RegisterHam gibi..

Yine de bir bilgi kaynağı arıyorsanız "funcwiki" de ilgili kodu arattığınızda hangi kütüphane/modül e ait olduğu orada yazar. Modül ile kütüphane arasındaki fark, modüller C++ dilinde yazılır ve pawn ile oyun arasındaki iletişimi ayarlar. Örneğin fakemeta bir modüldür ve HL Engine ile .dll fonksiyonları, engine fonksiyonları arasındaki etkileşimi inceleyip düzenleyebilmeyi, health-speed-model gibi client bilgilerini değiştirip gözlemleyebilmeyi sağlar ve pawnda bunları gerçekleştirebileceğimiz fonksiyonları oluşturur.

Bir kütüphane ise, kalıplaşmış, karmaşık kodlar dizisini sadeleştirmek için kullanılır. Örneğin fakemeta_util kütüphanesi bazı yararlı işlemleri kısa yoldan yapabilmemizi sağlar.

Fakemeta_util kütüphanesinden bir stock;
PHP Code:
stock fm_give_item(index, const item[]) {
    if (!
equal(item"weapon_"7) && !equal(item"ammo_"5) && !equal(item"item_"5) && !equal(item"tf_weapon_"10))
        return 
0;

    new 
ent fm_create_entity(item);
    if (!
pev_valid(ent))
        return 
0;

    new 
Float:origin[3];
    
pev(indexpev_originorigin);
    
set_pev(entpev_originorigin);
    
set_pev(entpev_spawnflagspev(entpev_spawnflags) | SF_NORESPAWN);
    
dllfunc(DLLFunc_Spawnent);

    new 
save pev(entpev_solid);
    
dllfunc(DLLFunc_Touchentindex);
    if (
pev(entpev_solid) != save)
        return 
ent;

    
engfunc(EngFunc_RemoveEntityent);

    return -
1;


Görüldüğü gibi uzun uzun işlemleri tek tek yazmak yerine, kısaca bu kütüphaneyi gösterip fm_give_item kullanabiliriz.




3. Zaten orada -hp yazmıyor ki ?
- get_pcvar_num(gPara) yazıyor ?
yani buyhp_ucret ismini verdiğin ayarın sayısal değeri.

4. if = Eğer
else = Aksi halde [değilse]

demektir.
if parantezinin içi sağlamadığında if'in sonunda bir else var ise if sağlamadığı için direk else'i okur.

PHP Code:
public cmdBuyHP(id) {
    
    if(
cs_get_user_money(id) < 5000) { // Eğer para 5000 den az İSE
        
client_print(id,print_chat,"Yeterli Paran yok"// Uyarı mesajı göster
    
}
    else { 
// Eğer para 5000 den az DEĞILSE (Yani bir önceki if doğru değilse)
        
set_user_health(id,get_user_health(id) + 200// 200 HP Ekle
    
}
    return 
PLUGIN_HANDLED // Komutu bitir.


5. Ben öyle bir kod yazmadımkı :S Yine de sana anlamını söyleyeyim.

hp adlı bir değişken yarat ve bu değişkeni "gPara ile belirtilmiş cvar ayarındaki sayısal değere" eşitle.



Edit: Son sorunla ilgili olarak ekleme

Evet tamamen doğru anlamışsın. Global değişkeni her public tanır. Ve bir değeri defalarca hesaplatmaktansa bir defa hesaplatmak her zaman daha iyidir. Fakat cvar ayarlarını global değişkenlerde kullanırsan, yaptığın ayarlar ancak map değiştiğinde aktif olucaktır.


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
O soruları Furkan Dize'nin pluginine bakarak yazmıştım onun plugininde
PHP Code:
cs_set_user_money(id,cs_get_user_money(id) - hp
şeklinde yazıyor ama sonra
PHP Code:
new  hp get_pcvar_num(gPara
bu kodun orada devreye girdiğini anladım.

Bakalım bi ucundan tuttum bu gidişle ezberlicem gibi; en azından set_user_health ve get_user_health i ezberledim bile Big Grin he bide register_clcmd yi Big Grin

Funcwiki bi garip geldi bazı kodları falan göremedim, neyse zaten alliedmodders falan var bişey olursa direk google yazar araştırırım bulamazsam da burası var Smile

Yardımcı olan tüm arkadaşlara teşekkür ederim, umarım 2-3 haftaya bende sizin yerinizde olup diğer insanlara yardım ederim Smile

Sorun çözülmüştür (şimdilik Smile )
uhcakiP
Özel Plugin Kodlanır!

Steam_ID = STEAM_0:0:54912140
Steam_Nick = Ragnar Lothbrok
https://steamcommunity.com/id/lothbrok
Reply
#10
Umarım sen de öğreniceksin Smile
"Herkes programlamayı öğrenmeli. Çünkü programlama, size nasıl düşüneceğinizi öğretir." -Steve Jobs

Çözülmüş İsteklere taşındı.


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
  Oyunyonetıcısı plugın kursatyzc 9 11,458 03-09-17, 18:05
Last Post: tahayasin
  [İSTEK] CT MAVi - T Kırmızı ışık yanan Plugin + Video Çektim ademcan36 9 10,457 26-04-17, 16:15
Last Post: h4m4s
  Parlak pelerin plugin lazım artiz42 8 4,685 03-08-16, 20:45
Last Post: murat1366
  Plugin İstek CFG Tarzı erenstrkl 6 3,768 03-08-16, 20:31
Last Post: murat1366
  Plugin Ufak Ayarlar Config Setting 7 3,487 03-08-16, 20:28
Last Post: murat1366
  Nicke özel plugin bykeremm 12 6,203 03-08-16, 20:18
Last Post: murat1366
  Jailbreak Bahis Plugin hasan06500 49 13,102 03-08-16, 20:18
Last Post: murat1366
  Reklamcılara karsi Acil İstek[Plugin] hasan0650 22 5,546 17-07-16, 18:03
Last Post: BYHAZARD7
  Hoş Geldin Mesajı (Değişik Bir Plugin + Resim Koydum + AMXX Ve SMA) Nobb 13 9,022 18-04-16, 02:59
Last Post: Uzman34666
  Takım ve meslek plugin berkanmtn 9 5,363 09-06-15, 10:10
Last Post: sertanAbi123

Foruma Atla:


Users browsing this thread: 1 Guest(s)