[Anlatım] Basit Bir Plugin Oluşturma

Başlatan casper, Nisan 11, 2020, 05:36:33 ÖS

« önceki - sonraki »

casper



Neler Lazım ?

* Microsoft Visual Studio 2010 veya daha üstü bir sürüm
* SA:MP Plugin SDK dosyaları


SA:MP Plugin SDK Dosyalarını Nereden İndirebilirim ?

Buraya tıklayarak gerekli dosyayı indirebilirsiniz.


Her şey hazırsa başlayalım:

1: Microsoft Visual Studio 2010 açalım.
2: New Project tıklayalım.
3: Sol taraftan Visual C++ seçelim.
4: Önümüzdeki ekrandan Win32 Console Application seçelim ve projemize isim verelim.


5: Şimdi önünüze bir ekran gelecek. Next basın.
6: Burada Application Type: DLL seçiyoruz. Additional options kısmından da Empty project seçip Finish diyoruz.


7: Şimdi sağ tarafta Solution Explorer kısmından Yazmış olduğunuz plugin ismine sağ tıklayın.
8: Sağ tıkladıktan sonra > Add > New Filter tıklayın.
9: Bir klasör oluşacak. İsmini SDK yazın.



10: Şimdi > Belgelerim > Visual Studio xxxx > Projects > Yazdığınız Plugin İsmi > gelin.
11: SDK adında bir klasör oluşturun.


12: Şimdi Visual Studio gelelim ve SDK klasörümüzün içine indirmiş olduğumuz dosya ve klasörü sürükleyelim.



13: Tekrardan Plugin İsmine sağ tıklayıp > Add > New Item tıklayın.
14: Önümüzdeki ekrandan Code tıklayın. Ordan Module-Definiton File (.def) tıklayıp Add basın.



15: Şimdi ekranınızda tek LIBRARY yazacak. Onu silip aşağıda verdiğim kodu ekleyip CTRL + S yapın.

LIBRARY "Yazdığınız Plugin İsmi"
EXPORTS
Supports
Load
Unload
AmxLoad
AmxUnload

   

16: Tekrardan Plugin İsmine sağ tıklayıp > Add > New Item tıklayın.
17: Önümüzdeki ekrandan Code tıklayın. Ordan C++ File (.cpp) tıklayıp Add basın.



18: Şimdi > Project > Plugin İsmi Properties... > tıklayalım.


19: Burada Module Definition kontrol edeceğiz. Bunun için,
20: Configuration Properties > Linker > Input tıklayalım ve sağ tarafta Module Definition File: Source.def olup olmadığını kontrol edelim.
21: Eğer Source.def ise tamam basalım.


22: Şimdi Source.cpp açıp şu kodları yazalım.

#include "..\SDK\amx\amx.h"
#include "..\SDK\plugincommon.h"


typedef void(*logprintf_t)(char* format, ...);


logprintf_t logprintf;
extern void *pAMXFunctions;


cell AMX_NATIVE_CALL Topla(AMX* amx, cell* params)
{
return params[1] + params[2];
}

cell AMX_NATIVE_CALL Cikar(AMX* amx, cell* params)
{
return params[1] - params[2];
}

cell AMX_NATIVE_CALL Bol(AMX* amx, cell* params)
{
return params[1] / params[2];
}

cell AMX_NATIVE_CALL Carp(AMX* amx, cell* params)
{
return params[1] * params[2];
}

PLUGIN_EXPORT unsigned int PLUGIN_CALL Supports()
{
return SUPPORTS_VERSION | SUPPORTS_AMX_NATIVES;
}

PLUGIN_EXPORT bool PLUGIN_CALL Load(void **ppData)
{
pAMXFunctions = ppData[PLUGIN_DATA_AMX_EXPORTS];
logprintf = (logprintf_t)ppData[PLUGIN_DATA_LOGPRINTF];

logprintf("\n ========================\n");
logprintf("       Plugin Açıldı !     \n");
logprintf("   ========================\n");
return true;
}

PLUGIN_EXPORT void PLUGIN_CALL Unload()
{
logprintf("\n ========================\n");
logprintf("      Plugin Kapatıldı     \n");
logprintf("   ========================\n");
}

AMX_NATIVE_INFO PluginNatives[] =
{
{ "Topla", Topla },
{ "Cikar", Cikar },
{ "Bol", Bol },
{ "Carp", Carp },
{ 0, 0 }
};

PLUGIN_EXPORT int PLUGIN_CALL AmxLoad(AMX *amx)
{
return amx_Register(amx, PluginNatives, -1);
}


PLUGIN_EXPORT int PLUGIN_CALL AmxUnload(AMX *amx)
{
return AMX_ERR_NONE;
}


23: Eğer böyle gözükürse, her şey sıkıntısız olmuş demektir.


24: Şimdi F5 basalım ve Pluginimiz (.dll) oluşsun.
25: Burada Yes basıyoruz.


26: Eğer aşağıda ki resim gibi sonuç aldıysanız, plugininiz hazır demektir. (Build kısmının 1 olması gerek)


27: Şimdi > Belgelerim > Visual Studio xxxx > Project > Plugin İsmi > Debug > PluginIsmi.dll kopyalayın.


28: Kopyaladığınız plugini serverinizin plugins klasörünün içine atın ve server.cfg düzenleyin.
29: Şimdi include dosyamızı oluşturalım.

native Topla(nTopla1, nTopla2);
native Cikar(ncikar1, ncikar2);
native Bol(nBol1, nBol2);
native Carp(nCarp1, nCarp2);



30: Modunuzu açın ve #include <IncludeIsmi> girin.
31: Şimdi modunuzun main() kısmına gelin ve şu kodları yapıştırıp F5 basın.

main()
{
printf("\n========== PLUGIN TEST ========== \n");
printf(" Toplama: %d", Topla(10, 10));
printf(" Çıkar: %d", Cikar(10, 5));
printf(" Böl: %d", Bol(10, 2));
printf(" Çarp: %d\n", Carp(20, 2));
printf("========== PLUGIN TEST ========== \n");
}



32: Şimdi modumuzu çalıştıralım ve sonuçlara bakalım.

33: Ve sonuç, takıldığınız yerler olursa yorumlarda belirtebilirsiniz.


Melek