Skocz do zawartości

Artykuł o "AMX MOD X"


1shociksquizy

Rekomendowane odpowiedzi

Wstęp

Na samym początku, wiem ze w 2k23r większość ludzi już ogarnia amxx'a, lecz teraz bardzo dużo jestem w nauce amxx'a, więc chciałbym trochu opisać, co to jest, itd.

AMX MOD X

AMX MOD X (AMXX) - jest to dodatek do gry "CS 1.6", który pozwala tworzyć pluginy / modyfikację w języku PAWN

Ten dodatek jest dodany do metamoda, bardzo pozwala zmienić naszą rozgrywke, niz zwykły dust / itd

Głównymi folderami, które umożliwiają dodać pluginy to "plugins, configs, scripting".

AMX MOD X posiada 4 wersje (1.8.1 / 1.8.3 / 1.9 / 1.10 )

Raczej nikt już nie uzywa wersji 1.81 / 1.8.3.

Aby pisać pluginy, trzeba umiec natywy, komendy, które znajdziecie w dokumentacji amxx'a (Dokumentacja AMXX.pl)

 

PLUGINY / SKRYPTY

 

Pierwszym krokiem, do napisania własnego kodu, jest pobranie "AMXX Studio"

U góry są 3 okienka, każde ma swojego zastosowanie.

a/1 - W tym okienku, po zaznaczeniu danego fragmentu kodu, zobaczymy (czy jest to funkcja, metoda, etc.).
b/2 - W tym okienku zobaczymy  ile razy użyliśmy danej funkcji, metody, zmiennej, etc.
c/3 - Główne okno programu. To w nim piszemy kod plugin'u.

 

W następnym kroku, klikamy F12

Wybieramy sciezke 

addons/amxmodx/scripting

W Default Output Directory podajemy miejsce, gdzie będą zapisywały się skompilowane pliki.

Po tym wszystkim, jesteśmy gotowi do pracy.

Zapisujemy ustawienia, oraz resetujemy program.

Wlaczamy AMX MOD X Studio, i klikamy CTRL + N

Powinno wyskoczyć wam, kod od amxx'a, bez którego nie zrobicie pluginu.

 

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>

#define PLUGIN "New Plugin"
#define VERSION "1.0"
#define AUTHOR "Author"


public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)

   
    // Add your code here...
}

W budowie pluginu, pojawiają sie takie rzeczy jak "funkcje, rejestracje komend itd, informacje, wywolana funkcja". Znajdziecie wszystko w "Dokumentacjii AMXX"

U góry, gdy dopisujemy dodatkową komende, dodajemy includ'a cstrike, lub innych np fun.

 

A teraz dla prostych ludzi 😄

 

public plugin_init() ( -> główna funkcja, która rejestruje komende

register_plugin(PLUGIN, VERSION, AUTHOR) -> rejestruje, to co u góry, czyli autora pluginu, nazwa pluginu, i wersje pluginu

register_clcmd -> rejestruje komende pluginu np ./czapki (drugi to natyw)

register_clcmd("/czapki","czapki")

public cmd_czapki(id) -> zeby ./czapki mialo jakies menu, musimy dodac kolejny szItem.

Czyli coś takiego

public cmd_Czapki(id)
{
    new szItem[128], iMenu;
    
    if(!g_iCzapkaGracza[id]) {
        copy(szItem, 127, "\y[\r»\y]\w Twoj chuj:\d Brak^n^nWybierz chuja:");
    } else {
        formatex(szItem, 127, "\y[\r»\y]\w Twoja chuj:\r %s^n^n\y[\r»\y]\w Wybierz chuja:", g_szListaCzapek[g_iCzapkaGracza[id]][0]);
    }
    
    iMenu = menu_create(szItem, "Czapki_Handler");
    
    menu_additem(iMenu, "\y[\r»\y]\w Zdejmij chuja");
    
    for(new i = 0; i < sizeof g_szListaCzapek; i++) {
        menu_additem(iMenu, g_szListaCzapek[i][0]);
    }
    
    menu_setprop(iMenu, MPROP_NEXTNAME, "\y[\r»\y]\w Dalej");
    menu_setprop(iMenu, MPROP_BACKNAME, "\y[\r»\y]\w Powrot");
    menu_setprop(iMenu, MPROP_EXITNAME, "\y[\r»\y]\w Wyjscie");
    
    menu_display(id, iMenu);
    
    return PLUGIN_HANDLED;
}

 

menu_additem -> menu, które się pokazuje do wybrania

menu_set_prop -> to same menu, ale ukazane na dole 

 

-------------------------------------------------------------------------------------------------

A teraz ukaze wam prosty plugin, z tymi czapkami (jak to ma wyglądać)

#include <amxmodx>
#include <fakemeta>
#include <fakemeta_util>
#include <ColorChat>

static const name[]			= "CZAPKI Z CHUJEM";
static const version[]		= "1.0";
static const author[]		= "squizy";
static const url_author[]	= "squizytotopka.pl";

new const g_szSciezkiCzapek[][] = {
	"models/czapki_squizy/v1/czapki_squizy_v1.mdl",
	"models/czapki_squizy/v1/czapki_squizy_v2.mdl",
	"models/czapki_squizy/v1/czapki_squizy_v3.mdl"
}

//Wzor: "Nazwa", submodel, "flagi", ktora sciezka
new const g_szListaCzapek[][][] = {
	{ "Wielki chuj", 6, "", 2 }
}

new g_iCzapkaGracza[33];
public plugin_init() {
	register_plugin(name, version, author);
	register_clcmd("say /siusiak", "cmd_Czapki");
	register_clcmd("say /siusiaki", "cmd_Czapki");
}

public plugin_natives() {
	register_native("hats_menu", "cmd_Czapki", 1);
	register_native("set_user_hat", "nat_UstawCzapke", 1);
}

public nat_UstawCzapke(id, iModel, iSubModel) {
	new iEnt = fm_find_ent_by_owner(0, "hat_dd2", id), bool:bMial = true;
		
	if(iEnt <= 0) {
		iEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
		bMial = false;
	}
		
	if(iEnt > 0) {
		if(!bMial) {
			set_pev(iEnt, pev_classname, "hat_jb");
			set_pev(iEnt, pev_movetype, MOVETYPE_FOLLOW);
			set_pev(iEnt, pev_solid, SOLID_NOT);
			set_pev(iEnt, pev_aiment, id);
			set_pev(iEnt, pev_owner, id);
			set_pev(iEnt, pev_rendermode, kRenderNormal);
		}
			
		engfunc(EngFunc_SetModel, iEnt, g_szSciezkiCzapek[iModel]);
		set_pev(iEnt, pev_body, iSubModel);
	}
}

public plugin_precache() {
	for(new i = 0; i < sizeof g_szSciezkiCzapek; i++) {
		precache_model(g_szSciezkiCzapek[i]);
	}
}

public client_disconnected(id) {
	Set_Hat(id, 0, false);
}

public cmd_Czapki(id)
{
	new szItem[128], iMenu;
	
	if(!g_iCzapkaGracza[id]) {
		copy(szItem, 127, "\y[\r»\y]\w Twoj chuj:\d Brak^n^nWybierz chuja:");
	} else {
		formatex(szItem, 127, "\y[\r»\y]\w Twoja chuj:\r %s^n^n\y[\r»\y]\w Wybierz chuja:", g_szListaCzapek[g_iCzapkaGracza[id]][0]);
	}
	
	iMenu = menu_create(szItem, "Czapki_Handler");
	
	menu_additem(iMenu, "\y[\r»\y]\w Zdejmij chuja");
	
	for(new i = 0; i < sizeof g_szListaCzapek; i++) {
		menu_additem(iMenu, g_szListaCzapek[i][0]);
	}
	
	menu_setprop(iMenu, MPROP_NEXTNAME, "\y[\r»\y]\w Dalej");
	menu_setprop(iMenu, MPROP_BACKNAME, "\y[\r»\y]\w Powrot");
	menu_setprop(iMenu, MPROP_EXITNAME, "\y[\r»\y]\w Wyjscie");
	
	menu_display(id, iMenu);
	
	return PLUGIN_HANDLED;
}
public Czapki_Handler(id, iMenu, iItem) {
	switch(iItem) {
		case MENU_EXIT: {
			menu_destroy(iMenu);
		}
		
		case 0..99: {
			if(!Set_Hat(id, iItem)) {
				ColorChat(id, GREEN, "[Chuj]^x01 Nie masz dostepu do chuja [BRAK SVIP'a]");
				ColorChat(id, GREEN, "[Chuj]^x01 Aby ja zdobyc, uzyj komendy^x03 /sklepsms");
				
				menu_display(id, iMenu);
			}
		}
	}
}

Set_Hat(id, iCzapka, const bool:bCzyPolaczony = true) {
	if(iCzapka) {
		iCzapka --;
		
		if(g_szListaCzapek[iCzapka][2][0] && !(get_user_flags(id) & read_flags(g_szListaCzapek[iCzapka][2]))) {
			return 0;
		}
		
		new iEnt = fm_find_ent_by_owner(0, "hat_jb", id), bool:bMial = true;
		
		if(iEnt <= 0) {
			iEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
			bMial = false;
		}
		
		if(iEnt > 0) {
			if(!bMial) {
				set_pev(iEnt, pev_classname, "hat_jb");
				set_pev(iEnt, pev_movetype, MOVETYPE_FOLLOW);
				set_pev(iEnt, pev_solid, SOLID_NOT);
				set_pev(iEnt, pev_aiment, id);
				set_pev(iEnt, pev_owner, id);
				set_pev(iEnt, pev_rendermode, kRenderNormal);
			}
			
			engfunc(EngFunc_SetModel, iEnt, g_szSciezkiCzapek[g_szListaCzapek[iCzapka][3][0]]);
			set_pev(iEnt, pev_body, g_szListaCzapek[iCzapka][1][0]);
		}
		
		new szNazwaCzapki[32];

		copy(szNazwaCzapki, 31, g_szListaCzapek[iCzapka][0]);
		replace(szNazwaCzapki, 31, "\r", "");
		replace(szNazwaCzapki, 31, "\y", "");
		ColorChat(id, GREEN, "[CHUJ]^x01 Zalozyles chuja:^x03 %s", g_szListaCzapek[iCzapka][0]);
	} else {
		new iEnt = fm_find_ent_by_owner(0, "hat_jb", id);
		
		if(iEnt > 0) {
			fm_remove_entity(iEnt);
		}
		
		if(bCzyPolaczony) {
			ColorChat(id, GREEN, "[CHUJ]^x01 Zdjales chuja.");
		}
	}
	
	g_iCzapkaGracza[id] = iCzapka;
	return 1;
}

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • Odpowiedzi 0
  • Dodano
  • Ostatnia odpowiedź

Top użytkownicy w tym temacie

Popularne dni

Top użytkownicy w tym temacie

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.