BevezetésGondolom 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ényMerevlemez : 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 kellNyisd meg a Microsoft Visual C++-t.
Start > Minden program > Microsoft Visual Studio > Microsoft Visual C++http://koncznorbert.sampforum.hu/kepek/plugintut/plugintut01.pngKattints a
File menüsorra, majd válaszd a
New > Projecthttp://koncznorbert.sampforum.hu/kepek/plugintut/plugintut02.pngAz 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.pngA project létrehozása után egy úgynevetett varázsló ablak ugrik elõ, ahol a
Nextgombot kell választanod.
http://koncznorbert.sampforum.hu/kepek/plugintut/plugintut04.pngAz
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.pngAz ablak bal oldalán a projected nevére jobb kattintás, majd válaszd a
Properties-t.
http://koncznorbert.sampforum.hu/kepek/plugintut/plugintut06.pngAz 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.pngAz 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.pngA
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.pngAz ablak bal oldalán a projected nevére jobb gomb, és
Add > New Itemhttp://koncznorbert.sampforum.hu/kepek/plugintut/plugintut11.pngAz 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.pngEgy 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.pngA 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.pngNevezd á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.pngJobb 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.pngMost 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.pngVisszaté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.pngA 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.pngNyiss 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.pngNyisd 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.pngFuttasd a szervered a tesztelésért.
http://koncznorbert.sampforum.hu/kepek/plugintut/plugintut22.pngHasználjátok egészséggel.
Letöltések