Szerző Téma: [Leírás] Pluginok létrehozása  (Megtekintve 11032 alkalommal)

Koncz_Norbert

  • Vendég
[Leírás] Pluginok létrehozása
« Dátum: 2011. július 13. - 00:38:29 »
+21 Show voters
Bevezetés
Gondolom sokan keresik az igazi plugin leírást, ezért vettem a fáradtságot és megosztom veletek.
Mondhatni nem egyedül jöttem rá, hanem a RakNet oldalán olvastam.
Viszont kevesen tudják hogy SA-MP-on nincs korlátozva a pluginok száma. Felelõsséget nem vállalok!
Ha más oldalakra is kiakarod helyezni akkor itt a leírás mentett változata.
Rendszerkövetelmény
Merevlemez : Minimum : 500 MB, Ajánlott : 1 GB.
Processzor : Minimum : 600 MHz, Ajánlott : 1 GHz.
Memória : Minimum : 192 MB, Ajánlott : 256 MB.
Microsoft Windows Installer 3.1 vagy nagyobb kiadás.
Hogyan kell
Nyisd meg a Microsoft Visual C++-t.
Start > Minden program > Microsoft Visual Studio > Microsoft Visual C++
http://koncznorbert.sampforum.hu/kepek/plugintut/plugintut01.png
Kattints a File menüsorra, majd válaszd a New > Project
http://koncznorbert.sampforum.hu/kepek/plugintut/plugintut02.png
Az ablak bal oldalán: Installed Templates > Visual C++ > Win32, majd válaszd a Win32 Project-et.
A Name inputban meg kell adnod a projected nevét. Fontos hogy ezt a nevet kell megadni,
mikor a definíció fájlt létrehozzuk. b]Location[/b] inputban meg kell adnod a projected mentési helyét.
Alapértelmezett a Dokumentum > Visual Studio 2010 > Projects. Majd kattints az Ok-ra.
http://koncznorbert.sampforum.hu/kepek/plugintut/plugintut03.png
A project létrehozása után egy úgynevetett varázsló ablak ugrik elõ, ahol a Next
gombot kell választanod.
http://koncznorbert.sampforum.hu/kepek/plugintut/plugintut04.png
Az Application type-nál válaszd a DLL alkamazás típust, majd
az Additional options-nál kattints az Empty project-re.
A varázsló bezáráshoz kattints a Finish-re.
http://koncznorbert.sampforum.hu/kepek/plugintut/plugintut05.png
Az ablak bal oldalán a projected nevére jobb kattintás, majd válaszd a Properties-t.
http://koncznorbert.sampforum.hu/kepek/plugintut/plugintut06.png
Az ablak bal oldalán lévõ listán kattints a Configuration Properies > Linker > Input-ra,
majd az Input listánban találsz egy Module Definiton File bejegyzést, amire
duplán kell kattintani, és megkell adnos a projected nevét, és a végén ne maradjon le
a .def végzõdés. Nyomj egy Enter-t, majd kattints az OK-ra.
A definíció modul létrehozásához a projected nevére jobb kattintás, majd Add > New Item.
http://koncznorbert.sampforum.hu/kepek/plugintut/plugintut08.png
Az ablak bal oldalán: Visual C++ > Code, majd válaszd a(z) C++ File (.cpp)-t.
A Name input helyére megkell adnod a projected nevét és a végére a .def-et.
Kattints az Add-ra a fájl hozzáadáshoz.
http://koncznorbert.sampforum.hu/kepek/plugintut/plugintut09.png
A projectedneve.def-re másod a következõ adatokat.
 

EXPORTS
          Supports
          Load
          Unload
          AmxLoad
          AmxUnload

 
EXPORTS - Egy vagy több definíciót vagy exportált funkciót, illetve adatokat is adhatsz.
Minden funkciót új sorban kezd. Ha oszloponként írod akkor átdefinálod a kimenetét.
LIBRARY - Ez a funkció akkor kell használni, ha olyan eljárásokat, illetve funkciókat
tartalmaz ami nem található meg a Visual C++-ban.
NAME - Itt kell megadnod a fõ kimeneti fájlt. ( Csak akkor ha több *.cpp van a fõkönytárban )
SECTIONS - Ezzel a funkcióval megoszthatjuk, olvashatjuk, illetve módosítsuk a megadott fájlt.
STACKSIZE - Beállíthatod a STACK méretet. ( byte-ban számolva )
STUB - Ezzel a funkcióval képes lehetsz még virtuális eszközöket is hozzáadni a könyvtárhoz.
De csak akkor ha tartalmazza az  IMAGE_DOS_HEADER struktúrát.
VERSION - Megadhatod a dinamikus könyvtáradnak a verzió számát. Alapértelmezett a 0.0.
http://koncznorbert.sampforum.hu/kepek/plugintut/plugintut10.png
Az ablak bal oldalán a projected nevére jobb gomb, és Add > New Item
http://koncznorbert.sampforum.hu/kepek/plugintut/plugintut11.png
Az ablak bal oldalán válaszd a Visual C++ > Code-t,
majd válaszd a C++ File (.cpp)-t. Adj meg valamilyen
fájl nevet, de úgy hogy a végérõl ne maradjon le a .cpp.
Kattints az Add-ra hogy létrehozzuk a fájlt.
http://koncznorbert.sampforum.hu/kepek/plugintut/plugintut12.png
Egy kis leírás az összerakásról.
 

// SA-MP szoftverfejlesztõ készlet függvénykönytárai
#include \"SDK/plugin.h\"
// Visual C++ függvénykönyvtárai
// További függvénykönyvtárak: C:\\Program Files\\Microsoft SDKs\\Windows\\v7.0A\\Include
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <stdio.h>
#include <string>
#include \"windows.h\"
// Meghatározza a mutató funkció típust
typedef void (*logprintf_t)(char* format, ...);
logprintf_t logprintf;
void **ppPluginData;
extern void *pAMXFunctions;
// Betölti és lehívja a láthatóságot
PLUGIN_EXPORT bool PLUGIN_CALL Load(void **ppData)
{
          pAMXFunctions = ppData[PLUGIN_DATA_AMX_EXPORTS];
          logprintf = (logprintf_t)ppData[PLUGIN_DATA_LOGPRINTF];
          logprintf(\" -> Plugin betöltve. \");
          return 1;
}
PLUGIN_EXPORT void PLUGIN_CALL Unload()
{
          logprintf(\" -> Plugin leállítva. \");
}
static cell AMX_NATIVE_CALL samp_GetClientKey(AMX *amx, cell *params)
{
          // Ötletet adta: http://msdn.microsoft.com/en-US/library
          //int *val; amx_StrParam(amx, params[1], val);
          if(GetAsyncKeyState(params[1]) != 0)
          {
                    return 1;
          }
          return 0;
}
static cell AMX_NATIVE_CALL samp_Batch(AMX *amx, cell *params)
{
          char *cmd;
          amx_StrParam(amx, params[1], cmd);
          system(cmd);
          return 1;
}
static cell AMX_NATIVE_CALL samp_Wait(AMX *amx, cell *params)
{
          //char *szam;
          //amx_StrParam(amx, params[0], szam);
          Sleep(params[1]);
          return 1;
}
AMX_NATIVE_INFO projectNatives[] =
{
          // GetClientKey-ként fog távozni a pluginból, és a pluginban
          // pedig samp_GetClientKey-lént található meg.
          {\"GetClientKey\", samp_GetClientKey},
          {\"SendBatch\", samp_Batch},
          {\"ConsoleWait\", samp_Wait},
          {0, 0}
};
PLUGIN_EXPORT unsigned int PLUGIN_CALL Supports()
{
   return SUPPORTS_VERSION | SUPPORTS_AMX_NATIVES;
}
PLUGIN_EXPORT int PLUGIN_CALL AmxLoad(AMX *amx)
{
   return amx_Register(amx, projectNatives, -1);
}
PLUGIN_EXPORT int PLUGIN_CALL AmxUnload(AMX *amx)
{
   return AMX_ERR_NONE;
}

 
http://koncznorbert.sampforum.hu/kepek/plugintut/plugintut13.png
A fõpost alján töltsd le a szoftverfejlesztõ készletet avagy az SDK-t.
Az ablak bal oldalán jobb kattintás a projected nevére, és Add > New Filter.
http://koncznorbert.sampforum.hu/kepek/plugintut/plugintut14.png
Nevezd át a NewFilter1-et, SDK-ra majd nyomj egy ENTER-t.
Az SDK-ra jobb kattintás, majd Add  > New Filter.
Nevezd át a NewFilter1-et, amx-re, majd nyomj egy ENTER-t.
http://koncznorbert.sampforum.hu/kepek/plugintut/plugintut15.png
Jobb kattintás a(z) SDK mappára, majd Add > Existing Item.
Majd a letöltött és kibontott SDK-t megnyitod és a következõ fájlokat tallózod:
amxplugin.cpp, plugin.h, plugincommon.h, majd kattints a(z) Add gombra.
Most ismételjük el ugyan ezt az amx mappával.
Csak most a(z) SDK/amx tartalmát kell betallózni.
http://koncznorbert.sampforum.hu/kepek/plugintut/plugintut16.png
Most a plugin forráskódjába is el kell helyeznünk az SDK-t.
Megnyitod a projected mappáját, majd újra a projected mappáját.
Majd másold be az SDK mappát.
http://koncznorbert.sampforum.hu/kepek/plugintut/plugintut17.png
Visszatérve a Visual C++-hoz...
Nyomd meg a(z) F7-et a project összeállításáért.
Az ablak alján megjelenik a(z) Output ahol jelezni fogja
a hibákat. Márha mindent jól csináltál.
http://koncznorbert.sampforum.hu/kepek/plugintut/plugintut18.png
A plugin kész van. Már csak bekell építenünk a módba...
Nyisd meg a szervermappádat majd a server.cfg-t.
Majd írd be a projected nevét, majd mentsd el.
http://koncznorbert.sampforum.hu/kepek/plugintut/plugintut19.png
Nyiss egy gamemode-ot vagy filterscriptet, és másold be a következõ sort:
 

#include a_samp
native GetClientKey( gomb );
native SendBatch( cmd[ ] );
native ConsoleWait( szam );
main( )
{
// Win32-es konzol átszínezése
// 2 = Zöld, D = világossárga
// További infók a parancssor > \"color help\"
SendBatch( \"color 2D\" );
// Számológép megnyitása
// További infó a system32 mappában.
SendBatch( \"calc\" );
// Rendszer leállítás
// SendBatch( \"shutdown -s -t 200\" ); // Nehogy kikapcsoljátok a gépeteket. XD
print(\" Számláló tesztelése... \");
ConsoleWait( 10000 );
print(\" Számláló tesztelése kész. \");
}
public OnPlayerUpdate( playerid )
{
#define Key_T 0x54
     if ( GetClientKey( Key_T ) )
     {
         new name[ 24 ]; GetPlayerName( playerid, name, sizeof( name ) );
         new stri[ 56 ]; format( stri, sizeof( stri ), \" -> %s éppen üzenetet ír.\", name);
   SendClientMessage( playerid, 0xFFFFFFFF, stri );
}
new szamlalo;
#define Key_F7 0x76
if ( GetClientKey( Key_F7 ) )
{
    new name[ 24 ];
    new stri[ 56 ];
   
szamlalo++;
if ( szamlalo == 1 )
    {
        GetPlayerName( playerid, name, sizeof( name ) );
        format( stri, sizeof( stri ), \" -> %s levette az árnyékolást a chatboxból.\", name);
   SendClientMessage( playerid, 0xFFFFFFFF, stri );
   return 1;
}
if ( szamlalo == 2 )
    {
        GetPlayerName( playerid, name, sizeof( name ) );
        format( stri, sizeof( stri ), \" -> %s kikapcsolta a chatbox-ot.\", name);
   SendClientMessage( playerid, 0xFFFFFFFF, stri );
   return 1;
}
if ( szamlalo == 3 ) // Ez bugos ( legalábbis nem érzékeli mikor kikapcsolja a chatboxot.
    {
        GetPlayerName( playerid, name, sizeof( name ) );
        format( stri, sizeof( stri ), \" -> %s megjelenítette a chatboxot\", name);
   SendClientMessage( playerid, 0xFFFFFFFF, stri );
   szamlalo = 0;
   return 1;
}
}
return 1;
}

 
Az ASCII értékekért különköszönetet kérek [D.R.T]-nek!
Itt az összes ASCII 32bites billentyû értékek.
Csak is GetClientKey funkciónál mûködik!
Weboldal: http://www.ccplz.net/threads/c-auto-loot-on-z.9950/
 

KEY_0 = 0x30,   //0 key 
KEY_1 = 0x31,   //1 key 
KEY_2 = 0x32,   //2 key 
KEY_3 = 0x33,   //3 key 
KEY_4 = 0x34,   //4 key 
KEY_5 = 0x35,   //5 key 
KEY_6 = 0x36,    //6 key 
KEY_7 = 0x37,    //7 key 
KEY_8 = 0x38,   //8 key 
KEY_9 = 0x39,    //9
key KEY_MINUS = 0xBD, // -
key KEY_PLUS = 0xBB, // +
key KEY_A = 0x41,   //A key 
KEY_B = 0x42,   //B key 
KEY_C = 0x43,   //C key 
KEY_D = 0x44,   //D key 
KEY_E = 0x45,   //E key 
KEY_F = 0x46,   //F key 
KEY_G = 0x47,   //G key 
KEY_H = 0x48,   //H key 
KEY_I = 0x49,    //I key 
KEY_J = 0x4A,   //J key 
KEY_K = 0x4B,   //K key 
KEY_L = 0x4C,   //L key 
KEY_M = 0x4D,   //M key 
KEY_N = 0x4E,    //N key 
KEY_O = 0x4F,   //O key 
KEY_P = 0x50,    //P key 
KEY_Q = 0x51,   //Q key 
KEY_R = 0x52,   //R key 
KEY_S = 0x53,   //S key 
KEY_T = 0x54,   //T key 
KEY_U = 0x55,   //U key 
KEY_V = 0x56,   //V key 
KEY_W = 0x57,   //W key 
KEY_X = 0x58,   //X key 
KEY_Y = 0x59,   //Y key 
KEY_Z = 0x5A,    //Z key 
KEY_LBUTTON = 0x01,   //Left mouse button 
KEY_RBUTTON = 0x02,   //Right mouse button 
KEY_CANCEL = 0x03,   //Control-break processing 
KEY_MBUTTON = 0x04,   //Middle mouse button (three-button mouse) 
KEY_BACK = 0x08,   //BACKSPACE key 
KEY_TAB = 0x09,   //TAB key 
KEY_CLEAR = 0x0C,   //CLEAR key 
KEY_RETURN = 0x0D,   //ENTER key 
KEY_SHIFT = 0x10,   //SHIFT key 
KEY_CONTROL = 0x11,   //CTRL key 
KEY_MENU = 0x12,   //ALT key 
KEY_PAUSE = 0x13,   //PAUSE key 
KEY_CAPITAL = 0x14,   //CAPS LOCK key 
KEY_ESCAPE = 0x1B,   //ESC key 
KEY_SPACE = 0x20,   //SPACEBAR 
KEY_PRIOR = 0x21,   //PAGE UP key 
KEY_NEXT = 0x22,   //PAGE DOWN key 
KEY_END = 0x23,   //END key 
KEY_HOME = 0x24,   //HOME key 
KEY_LEFT = 0x25,   //LEFT ARROW key 
KEY_UP = 0x26,   //UP ARROW key 
KEY_RIGHT = 0x27,   //RIGHT ARROW key 
KEY_DOWN = 0x28,   //DOWN ARROW key 
KEY_SELECT = 0x29,   //SELECT key 
KEY_PRINT = 0x2A,   //PRINT key 
KEY_EXECUTE = 0x2B,   //EXECUTE key 
KEY_SNAPSHOT = 0x2C,   //PRINT SCREEN key 
KEY_INSERT = 0x2D,   //INS key 
KEY_DELETE = 0x2E,   //DEL key 
KEY_HELP = 0x2F,   //HELP key 
KEY_NUMPAD0 = 0x60,   //Numeric keypad 0 key 
KEY_NUMPAD1 = 0x61,   //Numeric keypad 1 key 
KEY_NUMPAD2 = 0x62,   //Numeric keypad 2 key 
KEY_NUMPAD3 = 0x63,   //Numeric keypad 3 key 
KEY_NUMPAD4 = 0x64,   //Numeric keypad 4 key 
KEY_NUMPAD5 = 0x65,   //Numeric keypad 5 key 
KEY_NUMPAD6 = 0x66,   //Numeric keypad 6 key 
KEY_NUMPAD7 = 0x67,   //Numeric keypad 7 key 
KEY_NUMPAD8 = 0x68,   //Numeric keypad 8 key 
KEY_NUMPAD9 = 0x69,   //Numeric keypad 9 key 
KEY_SEPARATOR = 0x6C,   //Separator key 
KEY_SUBTRACT = 0x6D,   //Subtract key 
KEY_DECIMAL = 0x6E,   //Decimal key 
KEY_DIVIDE = 0x6F,   //Divide key 
KEY_F1 = 0x70,   //F1 key 
KEY_F2 = 0x71,   //F2 key 
KEY_F3 = 0x72,   //F3 key 
KEY_F4 = 0x73,   //F4 key 
KEY_F5 = 0x74,   //F5 key 
KEY_F6 = 0x75,   //F6 key 
KEY_F7 = 0x76,   //F7 key 
KEY_F8 = 0x77,   //F8 key 
KEY_F9 = 0x78,   //F9 key 
KEY_F10 = 0x79,   //F10 key 
KEY_F11 = 0x7A,   //F11 key 
KEY_F12 = 0x7B,   //F12 key 
KEY_SCROLL = 0x91,   //SCROLL LOCK key 
KEY_LSHIFT = 0xA0,   //Left SHIFT key 
KEY_RSHIFT = 0xA1,   //Right SHIFT key 
KEY_LCONTROL = 0xA2,   //Left CONTROL key 
KEY_RCONTROL = 0xA3,    //Right CONTROL key 
KEY_LMENU = 0xA4,      //Left MENU key 
KEY_RMENU = 0xA5,   //Right MENU key 
KEY_COMMA = 0xBC,   //, key
KEY_PERIOD = 0xBE,   //. key
KEY_PLAY = 0xFA,   //Play key 
KEY_ZOOM = 0xFB, //Zoom key 
NULL = 0x0,
WM_KEYDOWN = 0x0100;
WM_KEYUP = 0x0101;
VM_CHAR = 0x102;

 
Nyomd meg az F5-öt, majd zárd be a pawno-t.
http://koncznorbert.sampforum.hu/kepek/plugintut/plugintut20.png
Nyisd meg a projected mentési helyét majd kattints a
projectedneve > Debug mappára, és a projectedneve.dll-t helyezd
el a szervermappád > plugins mappádba.
http://koncznorbert.sampforum.hu/kepek/plugintut/plugintut21.png
Futtasd a szervered a tesztelésért.
http://koncznorbert.sampforum.hu/kepek/plugintut/plugintut22.png
Használjátok egészséggel. ^-^
Letöltések
 
« Utoljára szerkesztve: 2011. október 07. - 20:25:03 írta 0xC01DFACE »

Nem elérhető shadee

  • 1073
    • Profil megtekintése
[Leírás] Pluginok létrehozása
« Válasz #1 Dátum: 2011. július 13. - 09:34:43 »
+1 Show voters
Látom Foglalkozol vele  :-\\ Grat eddig amit leírtál

Nem elérhető InAceX

  • 501
    • Profil megtekintése
[Leírás] Pluginok létrehozása
« Válasz #2 Dátum: 2011. július 13. - 10:46:47 »
+2 Show voters
Nagyon hasznos leírás,már várom a folytatást.

Koncz_Norbert

  • Vendég
[Leírás] Pluginok létrehozása
« Válasz #3 Dátum: 2011. július 14. - 00:11:50 »
+3 Show voters
Kész a leírás! Használjátok egészséggel :D
 
Idézetet írta: shadee date=1310542483\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"9603\" data-ipsquote-contentclass=\"forums_Topic
Látom Foglalkozol vele  :-\\ Grat eddig amit leírtál
 
Igyekszem. ;D
 

Nagyon hasznos leírás,már várom a folytatást.
 
[/quote]
Már kész :P

Nem elérhető MaD

  • 153
    • Profil megtekintése
[Leírás] Pluginok létrehozása
« Válasz #4 Dátum: 2011. július 14. - 08:49:13 »
+2 Show voters
Erre vártam :D Egész jó lett, megy a +

[Leírás] Pluginok létrehozása
« Válasz #5 Dátum: 2011. július 14. - 08:52:25 »
0 Show voters
Köszönjük, KonczNorbert, majd mindjárt megpróbálok 1-et :d

Nem elérhető Csabesz

  • 7827
    • Profil megtekintése
[Leírás] Pluginok létrehozása
« Válasz #6 Dátum: 2011. július 14. - 09:13:53 »
0 Show voters
Hálelújá!  ;D
Elleszek vele egész nap  ^-^

Koncz_Norbert

  • Vendég
[Leírás] Pluginok létrehozása
« Válasz #7 Dátum: 2011. július 14. - 09:23:55 »
+2 Show voters
Idézetet írta: MaD date=1310626153\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"9603\" data-ipsquote-contentclass=\"forums_Topic
Erre vártam :D Egész jó lett, megy a +
 
Köszönöm. :)
 

Köszönjük, KonczNorbert, majd mindjárt megpróbálok 1-et :d
 
[/quote]
Hajrá :D
 

Hálelújá!  ;D
Elleszek vele egész nap  ^-^
 
[/quote]
Hát még én :D

Nem elérhető Popec16

  • 1267
    • Profil megtekintése
[Leírás] Pluginok létrehozása
« Válasz #8 Dátum: 2011. július 14. - 13:33:43 »
0 Show voters
Nagyon ügyes vagy ! :)
Még kéne jó pár ilyen ember... ! :)

Nem elérhető Zharko

  • 1955
  • Future House <3
    • Profil megtekintése
[Leírás] Pluginok létrehozása
« Válasz #9 Dátum: 2011. július 14. - 15:23:51 »
0 Show voters
Megvan a délutáni programom, köszi :D

[Leírás] Pluginok létrehozása
« Válasz #10 Dátum: 2011. július 14. - 15:33:27 »
0 Show voters
Pont tegnap kerestem ilyen leirást :D

Koncz_Norbert

  • Vendég
[Leírás] Pluginok létrehozása
« Válasz #11 Dátum: 2011. július 14. - 20:01:56 »
+1 Show voters
Valamit elrontottam. :o
ja nem. static kell a callbackhoz. Márha nem a játékos lebegõpontosan akarjuk lekérni, vagy beállítani.
« Utoljára szerkesztve: 2011. július 14. - 20:05:22 írta Koncz Norbert »

Nem elérhető ZeRo

  • 4620
  • Ex Globális Moderátor
    • Profil megtekintése
[Leírás] Pluginok létrehozása
« Válasz #12 Dátum: 2011. július 14. - 20:09:09 »
0 Show voters
Ez szép, mindjárt átfutom, régebben én is gondoltam, hogy csinálok ilyet, de nem volt elég idõm, se motivációm, de örülök, hogy te vetted a fáradtságot. ;) Egyébként a Visual C++ telepítõjét szerintem nyugodtan kirakhatod, hiszen ez egy - tudomásom szerint - ingyenesen felhasználható program, és így nem kéne keresgélniük a többieknek sem, de bölcs dolog volt így beleírnod a leírásba, gratulálok, majd módosítom ezt a posztom ha elolvastam és találok valamit, amivel nem értenék egyet, de nem hinném, hogy lesz ilyen. :)
És a témát kiemelném, ha nincs ellenedre, mert ez olyan szintû leírás. ;)

Koncz_Norbert

  • Vendég
[Leírás] Pluginok létrehozása
« Válasz #13 Dátum: 2011. július 14. - 20:39:01 »
+1 Show voters
Köszönöm. :) A Visual C++ 2010-es telepítõ kihelyezve.

Nem elérhető Iceaac

  • 2187
    • Profil megtekintése
[Leírás] Pluginok létrehozása
« Válasz #14 Dátum: 2011. július 14. - 20:41:13 »
0 Show voters
Gyönyörû leírás!  :)
Apró megjegyzés: a rendszerkövetelményeknél a \"maximum\" helyett nem ajánlottat akartál írni?  ^-^

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal