![]() |
|
İlk Plugin ve Hatalar - Printable Version +- CSPLague (https://www.csplague.com) +-- Forum: CS 1.6 Plugin (Eklenti) Bölümü (https://www.csplague.com/forumdisplay.php?fid=6) +--- Forum: [İSTEK] Cs 1.6 Plugin İstek Bölümü (https://www.csplague.com/forumdisplay.php?fid=80) +---- Forum: Çözülmüş İstekler (https://www.csplague.com/forumdisplay.php?fid=87) +---- Thread: İlk Plugin ve Hatalar (/showthread.php?tid=7634) |
İlk Plugin ve Hatalar - Pikachu - 17-05-13 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 */.amxx çevirirken çıkan hatalar: PHP Code: buyhp.sma(23) : error 017: undefined symbol "cs_get_user_money"32 satır var; 36. satırda nasıl bir hata oluyor onuda açıklarsanız sevinirim ![]() 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
Cevap: İlk Plugin ve Hatalar - Furkan Dize - 18-05-13 PHP Code: /* Plugin generated by AMXX-Studio */ Cevap: İlk Plugin ve Hatalar - akcaliberkk - 18-05-13 Ö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 */ İ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 */ Ş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 ![]() İ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 */ 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) Cevap: İlk Plugin ve Hatalar - Pikachu - 18-05-13 Ö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 )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 ![]() 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 ![]() EDIT: akcaliberkk detaylı anlatım için çok teşekkür ederim. Basit hatalar yapa yapa düzelicek umarım 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
Cevap: İlk Plugin ve Hatalar - JDM - 18-05-13 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)) 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){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. Cevap: İlk Plugin ve Hatalar - Furkan Dize - 18-05-13 Şimdi şöyle anlatayım PHP Code: new hp = get_pcvar_num(gPara) PHP Code: if(para=1500) Bu arada sağol berk Cevap: İlk Plugin ve Hatalar - Pikachu - 18-05-13 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) Cevap: İlk Plugin ve Hatalar - akcaliberkk - 18-05-13 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 ![]() 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[]) {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) {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. Cevap: İlk Plugin ve Hatalar - Pikachu - 18-05-13 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) PHP Code: new hp = get_pcvar_num(gPara) Bakalım bi ucundan tuttum bu gidişle ezberlicem gibi; en azından set_user_health ve get_user_health i ezberledim bile he bide register_clcmd yi ![]() 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 ![]() 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 ![]() Sorun çözülmüştür (şimdilik )
Cevap: İlk Plugin ve Hatalar - akcaliberkk - 18-05-13 Umarım sen de öğreniceksin ![]() "Herkes programlamayı öğrenmeli. Çünkü programlama, size nasıl düşüneceğinizi öğretir." -Steve Jobs Çözülmüş İsteklere taşındı. |