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.


Dodatki SourceMod










