Na początek tworzymy jakąś klasę u mnie to będzie Duch.
#include <amxmodx> #include <amxmisc> #include <codmod> new const nazwa[] = "Duch"; new const opis[] = "Umie przechodzić przez ściany (10s)."; new const bronie = (1<<CSW_M4A1); new const zdrowie = 30; new const kondycja = 20; new const inteligencja = 0; new const wytrzymalosc = 0; public plugin_init() { register_plugin(nazwa, "1.0", "amxx.pl"); cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc); }
Do includów dopisujemy:
#include <fakemeta> #include <colorchat>Jeśi już je mamy to nie trzeba.
Powinno wyglądać to tak:
#include <amxmodx> #include <amxmisc> #include <codmod> #include <fakemeta> #include <colorchat> new const nazwa[] = "Duch"; new const opis[] = "Umie przechodzić przez ściany (10s)."; new const bronie = (1<<CSW_M4A1); new const zdrowie = 30; new const kondycja = 20; new const inteligencja = 0; new const wytrzymalosc = 0; public plugin_init() { register_plugin(nazwa, "1.0", "amxx.pl"); cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc); }
Potem pod includami dopisujemy:
#define CZAS_NOCLIP XTu gdzie jest "X" to oznacza ile sekund może przechodzić przez ściany, wpisujemy dowolną wartość.
Powinno wyglądać to tak:
#include <amxmodx> #include <amxmisc> #include <codmod> #include <fakemeta> #include <colorchat> #define CZAS_NOCLIP X new const nazwa[] = "Duch"; new const opis[] = "Umie przechodzić przez ściany (10s)."; new const bronie = (1<<CSW_M4A1); new const zdrowie = 30; new const kondycja = 20; new const inteligencja = 0; new const wytrzymalosc = 0; public plugin_init() { register_plugin(nazwa, "1.0", "amxx.pl"); cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc); }
Pózniej pod "new const wytrzymalosc" dopisujemy:
new bool:ma_klase[33]; new bool:uzyl[33]; new msg_bartime;
Powinno wyglądać to tak:
#include <amxmodx> #include <amxmisc> #include <codmod> #include <fakemeta> #include <colorchat> #define CZAS_NOCLIP X new const nazwa[] = "Duch"; new const opis[] = "Umie przechodzić przez ściany (10s)."; new const bronie = (1<<CSW_M4A1); new const zdrowie = 30; new const kondycja = 20; new const inteligencja = 0; new const wytrzymalosc = 0; new bool:ma_klase[33]; new bool:uzyl[33]; new msg_bartime; public plugin_init() { register_plugin(nazwa, "1.0", "amxx.pl"); cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc); }
Kolejno w public plugin_init na samym końcu dopisujemy:
register_event("ResetHUD", "ResetHUD", "abe"); msg_bartime = get_user_msgid("BarTime");
Powinno wyglądać to tak:
#include <amxmodx> #include <amxmisc> #include <codmod> #include <fakemeta> #include <colorchat> #define CZAS_NOCLIP X new const nazwa[] = "Duch"; new const opis[] = "Umie przechodzić przez ściany (10s)."; new const bronie = (1<<CSW_M4A1); new const zdrowie = 30; new const kondycja = 20; new const inteligencja = 0; new const wytrzymalosc = 0; new bool:ma_klase[33]; new bool:uzyl[33]; new msg_bartime; public plugin_init() { register_plugin(nazwa, "1.0", "amxx.pl"); cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc); register_event("ResetHUD", "ResetHUD", "abe"); msg_bartime = get_user_msgid("BarTime"); }
Do public cod_class_enabled dopisujemy:
ma_klase[id] = true; uzyl[id] = false;
A do public cod_class_disabled dopisujemy:
ma_klase[id] = false;
Będzie to wyglądać tak:
#include <amxmodx> #include <amxmisc> #include <codmod> #include <fakemeta> #include <colorchat> #define CZAS_NOCLIP X new const nazwa[] = "Duch"; new const opis[] = "Umie przechodzić przez ściany (10s)."; new const bronie = (1<<CSW_M4A1); new const zdrowie = 30; new const kondycja = 20; new const inteligencja = 0; new const wytrzymalosc = 0; new bool:ma_klase[33]; new bool:uzyl[33]; new msg_bartime; public plugin_init() { register_plugin(nazwa, "1.0", "amxx.pl"); cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc); register_event("ResetHUD", "ResetHUD", "abe"); msg_bartime = get_user_msgid("BarTime"); } public cod_class_enabled(id) { ma_klase[id] = true; uzyl[id] = false; } public cod_class_disabled(id) { ma_klase[id] = false; }
A na samym końcu pluginu dopisujemy:
public cod_class_skill_used(id) { if(!is_user_alive(id) || !ma_klase[id]) return PLUGIN_CONTINUE; if(uzyl[id]) { ColorChat(id, RED, "Juz wykorzystales moc diabla!"); return PLUGIN_CONTINUE; } set_pev(id, pev_movetype, MOVETYPE_NOCLIP); set_bartime(id, CZAS_NOCLIP); set_task(CZAS_NOCLIP.0, "WylaczNoclip", id); uzyl[id] = true; return PLUGIN_CONTINUE; } public ResetHUD(id) uzyl[id] = false; public WylaczNoclip(id) { if(!is_user_connected(id)) return; set_pev(id, pev_movetype, MOVETYPE_WALK); new Float:origin[3]; pev(id, pev_origin, origin); if (!is_hull_vacant(origin, pev(id, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN, id)) user_silentkill(id); } stock bool:is_hull_vacant(const Float:origin[3], hull,id) { static tr; engfunc(EngFunc_TraceHull, origin, origin, 0, hull, id, tr) if (!get_tr2(tr, TR_StartSolid) || !get_tr2(tr, TR_AllSolid)) return true; return false; } public set_bartime(id, czas) { message_begin(MSG_ONE, msg_bartime, _, id); write_short(czas); message_end(); }
Końcowy efekt powinien wyglądać tak:
#include <amxmodx> #include <amxmisc> #include <codmod> #include <fakemeta> #include <colorchat> #define CZAS_NOCLIP X new const nazwa[] = "Duch"; new const opis[] = "Umie przechodzić przez ściany (10s)."; new const bronie = (1<<CSW_M4A1); new const zdrowie = 30; new const kondycja = 20; new const inteligencja = 0; new const wytrzymalosc = 0; new bool:ma_klase[33]; new bool:uzyl[33]; new msg_bartime; public plugin_init() { register_plugin(nazwa, "1.0", "amxx.pl"); cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc); register_event("ResetHUD", "ResetHUD", "abe"); msg_bartime = get_user_msgid("BarTime"); } public cod_class_enabled(id) { ma_klase[id] = true; uzyl[id] = false; } public cod_class_disabled(id) { ma_klase[id] = false; } public cod_class_skill_used(id) { if(!is_user_alive(id) || !ma_klase[id]) return PLUGIN_CONTINUE; if(uzyl[id]) { ColorChat(id, RED, "Juz wykorzystales moc diabla!"); return PLUGIN_CONTINUE; } set_pev(id, pev_movetype, MOVETYPE_NOCLIP); set_bartime(id, CZAS_NOCLIP); set_task(CZAS_NOCLIP.0, "WylaczNoclip", id); uzyl[id] = true; return PLUGIN_CONTINUE; } public ResetHUD(id) uzyl[id] = false; public WylaczNoclip(id) { if(!is_user_connected(id)) return; set_pev(id, pev_movetype, MOVETYPE_WALK); new Float:origin[3]; pev(id, pev_origin, origin); if (!is_hull_vacant(origin, pev(id, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN, id)) user_silentkill(id); } stock bool:is_hull_vacant(const Float:origin[3], hull,id) { static tr; engfunc(EngFunc_TraceHull, origin, origin, 0, hull, id, tr) if (!get_tr2(tr, TR_StartSolid) || !get_tr2(tr, TR_AllSolid)) return true; return false; } public set_bartime(id, czas) { message_begin(MSG_ONE, msg_bartime, _, id); write_short(czas); message_end(); }
I oto powstała klasa która umie przechodzić przez ściany.