Zmiana modelu gracza dla klasy/perku
Goliath
21.02.2011
Witam.
Dziś pokażę wam, jak w prosty sposób zmienić model postaci dla klasy/perku. Weźmy przykładową klasę np. Rushera.
Dodajmy teraz na początku:
A następnie tworzymy zmienną typu true/false (o nazwie ma_klase dla klasy lub ma_perk dla perku) i dodajemy są do publiców cod_class_enabled i cod_class_disabled (lub cod_perk_enabled i cod_perk_disabled dla perku) w następujący sposób:
Następnym krokiem jest przygotowanie modeli graczy do ściągnięcia w taki sposób:
Oczywiście wy musicie wpisać ścieżki do waszych modeli. Teraz musimy dodać to do plugin_init:
I stworzyć następujący public:
Następnie dodajemy to do cod_class_enabled (lub cod_perk_enabled dla perku):
A to do cod_class_disabled (lub cod_perk_disabled dla perku):
W podanym wyżej przypadku terrorysta będzie otrzymywał model classic2, a CT model swat. Zmieńcie to na wasze nazwy modeli. Dla leniwych - gotowe .sma:
UWAGA!
Jeżeli nazwa waszego modelu to np. predator to należy go umieścić w katalogu models/player/predator/predator.mdl uwzględniając wielkość liter!
To już koniec. Mam nadzieję, że wszystko zrozumieliście .
PS. Jeśli chcecie, aby klasa/perk miała model niezależnie od drużyny używajcie tej funkcji:
Dziś pokażę wam, jak w prosty sposób zmienić model postaci dla klasy/perku. Weźmy przykładową klasę np. Rushera.
Spoiler
Dodajmy teraz na początku:
#include <hamsandwich>
#include <cstrike>
A następnie tworzymy zmienną typu true/false (o nazwie ma_klase dla klasy lub ma_perk dla perku) i dodajemy są do publiców cod_class_enabled i cod_class_disabled (lub cod_perk_enabled i cod_perk_disabled dla perku) w następujący sposób:
Spoiler
Następnym krokiem jest przygotowanie modeli graczy do ściągnięcia w taki sposób:
public plugin_precache()
{
precache_model("models/player/classic2/classic2.mdl");
precache_model("models/player/swat/swat.mdl");
}
Oczywiście wy musicie wpisać ścieżki do waszych modeli. Teraz musimy dodać to do plugin_init:
RegisterHam(Ham_Spawn, "player", "Odrodzenie", 1);
I stworzyć następujący public:
public Odrodzenie(id)
{
if(ma_klase[id])
{
cs_set_user_model(id, (get_user_team(id) == 1)? "classic2": "swat");
}
}
Następnie dodajemy to do cod_class_enabled (lub cod_perk_enabled dla perku):
cs_set_user_model(id, (get_user_team(id) == 1)? "classic2": "swat");
A to do cod_class_disabled (lub cod_perk_disabled dla perku):
cs_reset_user_model(id);
W podanym wyżej przypadku terrorysta będzie otrzymywał model classic2, a CT model swat. Zmieńcie to na wasze nazwy modeli. Dla leniwych - gotowe .sma:
Spoiler
UWAGA!
Jeżeli nazwa waszego modelu to np. predator to należy go umieścić w katalogu models/player/predator/predator.mdl uwzględniając wielkość liter!
To już koniec. Mam nadzieję, że wszystko zrozumieliście .
PS. Jeśli chcecie, aby klasa/perk miała model niezależnie od drużyny używajcie tej funkcji:
cs_set_user_model(id, "nazwa_modelu");
aVee`
29.12.2011
Ładnie, czy ktoś by się podjął przerobić tą klasę tak żeby miała inny skin - jeden (obojętny od teamu)
#include <amxmodx>
#include <amxmisc>
#include <codmod>
#include <engine>
#include <hamsandwich>
#include <fakemeta>
#include <fun>
new const nazwa[] = "Stalker [Premium]";
new const opis[] = "Posiada AWP - M4A1 oraz 2 rakiety, 2 skoki.";
new const bronie = (1<<CSW_AWP)|(1<<CSW_M4A1);
new const zdrowie = 60;
new const kondycja = 20;
new const inteligencja = 10;
new const wytrzymalosc = 10;
new sprite_blast;
new ilosc_rakiet_gracza[33];
new poprzednia_rakieta_gracza[33];
new skoki[33];
new ma_klase[33];
public plugin_init()
{
register_plugin(nazwa, "1.0", "amxx.pl");
cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc);
register_touch("rocket", "*" , "DotykRakiety");
RegisterHam(Ham_Spawn, "player", "fwSpawn_Rakiety", 1);
register_forward(FM_CmdStart, "fwCmdStart_MultiJump");
}
public plugin_precache()
{
sprite_blast = precache_model("sprites/dexplo.spr");
precache_model("models/rpgrocket.mdl");
}
public client_disconnect(id)
{
new entRakiety = find_ent_by_class(0, "rocket");
while(entRakiety > 0)
{
if(entity_get_edict(entRakiety, EV_ENT_owner) == id)
remove_entity(entRakiety);
entRakiety = find_ent_by_class(entRakiety, "rocket");
}
}
public cod_class_enabled(id)
{
if(!(get_user_flags(id) & ADMIN_LEVEL_A))
{
client_print(id, print_chat, "[Stalker] Nie masz uprawnien, aby uzywac tej klasy.")
return COD_STOP;
}
ilosc_rakiet_gracza[id] = 2;
give_item(id, "weapon_hegrenade");
ma_klase[id] = true;
return COD_CONTINUE;
}
public cod_class_disabled(id)
{
ma_klase[id] = false;
}
public cod_class_skill_used(id)
{
if (!ilosc_rakiet_gracza[id])
{
client_print(id, print_center, "Wykorzystales juz wszystkie rakiety!");
}
else
{
if(poprzednia_rakieta_gracza[id] + 2.0 > get_gametime())
{
client_print(id, print_center, "Rakiet mozesz uzywac co 2 sekundy!");
}
else
{
if (is_user_alive(id))
{
poprzednia_rakieta_gracza[id] = floatround(get_gametime());
ilosc_rakiet_gracza[id]--;
new Float: Origin[3], Float: vAngle[3], Float: Velocity[3];
entity_get_vector(id, EV_VEC_v_angle, vAngle);
entity_get_vector(id, EV_VEC_origin , Origin);
new Ent = create_entity("info_target");
entity_set_string(Ent, EV_SZ_classname, "rocket");
entity_set_model(Ent, "models/rpgrocket.mdl");
vAngle[0] *= -1.0;
entity_set_origin(Ent, Origin);
entity_set_vector(Ent, EV_VEC_angles, vAngle);
entity_set_int(Ent, EV_INT_effects, 2);
entity_set_int(Ent, EV_INT_solid, SOLID_BBOX);
entity_set_int(Ent, EV_INT_movetype, MOVETYPE_FLY);
entity_set_edict(Ent, EV_ENT_owner, id);
VelocityByAim(id, 1000 , Velocity);
entity_set_vector(Ent, EV_VEC_velocity ,Velocity);
}
}
}
}
public fwSpawn_Rakiety(id)
{
if(is_user_alive(id))
ilosc_rakiet_gracza[id] = 2;
}
public DotykRakiety(ent)
{
if (!is_valid_ent(ent))
return;
new attacker = entity_get_edict(ent, EV_ENT_owner);
new Float:fOrigin[3];
entity_get_vector(ent, EV_VEC_origin, fOrigin);
new iOrigin[3];
for(new i=0;i<3;i++)
iOrigin[i] = floatround(fOrigin[i]);
message_begin(MSG_BROADCAST,SVC_TEMPENTITY, iOrigin);
write_byte(TE_EXPLOSION);
write_coord(iOrigin[0]);
write_coord(iOrigin[1]);
write_coord(iOrigin[2]);
write_short(sprite_blast);
write_byte(32);
write_byte(20);
write_byte(0);
message_end();
new entlist[33];
new numfound = find_sphere_class(ent, "player", 190.0, entlist, 32);
for (new i=0; i < numfound; i++)
{
new pid = entlist[i];
if (!is_user_alive(pid) || get_user_team(attacker) == get_user_team(pid))
continue;
cod_inflict_damage(attacker, pid, 55.0, 0.9, ent, (1<<24));
}
remove_entity(ent);
}
public fwCmdStart_MultiJump(id, uc_handle)
{
if(!is_user_alive(id) || !ma_klase[id])
return FMRES_IGNORED;
new flags = pev(id, pev_flags);
if((get_uc(uc_handle, UC_Buttons) & IN_JUMP) && !(flags & FL_ONGROUND) && !(pev(id, pev_oldbuttons) & IN_JUMP) && skoki[id])
{
skoki[id]--;
new Float:velocity[3];
pev(id, pev_velocity,velocity);
velocity[2] = random_float(265.0,285.0);
set_pev(id, pev_velocity,velocity);
}
else if(flags & FL_ONGROUND)
skoki[id] = 2;
return FMRES_IGNORED;
}
d0naciak
29.12.2011
zamiast tego
uzywasz
cs_set_user_model(id, (get_user_team(id) == 1)? "classic2": "swat");
uzywasz
cs_set_user_model(id, "NAZWA@MODELU");
aVee`
30.12.2011
Tak jeśli ma być jeden :
cstrike/models/premium/sas.mdl
A jak dwa skiny CT i TT to:
cstrike/models/premium/sas.mdl
cstrike/models/premium/sasT.mdl
cstrike/models/premium/sas.mdl
A jak dwa skiny CT i TT to:
cstrike/models/premium/sas.mdl
cstrike/models/premium/sasT.mdl
d0naciak
30.12.2011
#include <amxmodx>
#include <amxmisc>
#include <codmod>
#include <engine>
#include <hamsandwich>
#include <fakemeta>
#include <fun>
#include <cstrike>
new const nazwa[] = "Stalker [Premium]";
new const opis[] = "Posiada AWP - M4A1 oraz 2 rakiety, 2 skoki";
new const bronie = (1<<CSW_AWP)|(1<<CSW_M4A1);
new const zdrowie = 60;
new const kondycja = 20;
new const inteligencja = 10;
new const wytrzymalosc = 10;
new sprite_blast;
new ilosc_rakiet_gracza[33];
new poprzednia_rakieta_gracza[33];
new skoki[33];
new ma_klase[33];
public plugin_init()
{
register_plugin(nazwa, "1.0", "amxx.pl");
cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc);
register_touch("rocket", "*" , "DotykRakiety");
RegisterHam(Ham_Spawn, "player", "fwSpawn_Rakiety", 1);
register_forward(FM_CmdStart, "fwCmdStart_MultiJump");
}
public plugin_precache()
{
sprite_blast = precache_model("sprites/dexplo.spr");
precache_model("models/rpgrocket.mdl");
precache_model("models/player/premium/sas/sas.mdl");
precache_model("models/player/premium/sasT/sasT.mdl");
}
public client_disconnect(id)
{
new entRakiety = find_ent_by_class(0, "rocket");
while(entRakiety > 0)
{
if(entity_get_edict(entRakiety, EV_ENT_owner) == id)
remove_entity(entRakiety);
entRakiety = find_ent_by_class(entRakiety, "rocket");
}
}
public cod_class_enabled(id)
{
if(!(get_user_flags(id) & ADMIN_LEVEL_A))
{
client_print(id, print_chat, "[Stalker] Nie masz uprawnien, aby uzywac tej klasy.")
return COD_STOP;
}
ilosc_rakiet_gracza[id] = 2;
give_item(id, "weapon_hegrenade");
cs_set_user_model(id, (get_user_team(id) == 1)? "classic2": "swat");
ma_klase[id] = true;
return COD_CONTINUE;
}
public cod_class_disabled(id)
{
ma_klase[id] = false;
cs_reset_user_model(id);
}
public cod_class_skill_used(id)
{
if (!ilosc_rakiet_gracza[id])
{
client_print(id, print_center, "Wykorzystales juz wszystkie rakiety!");
}
else
{
if(poprzednia_rakieta_gracza[id] + 2.0 > get_gametime())
{
client_print(id, print_center, "Rakiet mozesz uzywac co 2 sekundy!");
}
else
{
if (is_user_alive(id))
{
poprzednia_rakieta_gracza[id] = floatround(get_gametime());
ilosc_rakiet_gracza[id]--;
new Float: Origin[3], Float: vAngle[3], Float: Velocity[3];
entity_get_vector(id, EV_VEC_v_angle, vAngle);
entity_get_vector(id, EV_VEC_origin , Origin);
new Ent = create_entity("info_target");
entity_set_string(Ent, EV_SZ_classname, "rocket");
entity_set_model(Ent, "models/rpgrocket.mdl");
vAngle[0] *= -1.0;
entity_set_origin(Ent, Origin);
entity_set_vector(Ent, EV_VEC_angles, vAngle);
entity_set_int(Ent, EV_INT_effects, 2);
entity_set_int(Ent, EV_INT_solid, SOLID_BBOX);
entity_set_int(Ent, EV_INT_movetype, MOVETYPE_FLY);
entity_set_edict(Ent, EV_ENT_owner, id);
VelocityByAim(id, 1000 , Velocity);
entity_set_vector(Ent, EV_VEC_velocity ,Velocity);
}
}
}
}
public fwSpawn_Rakiety(id)
{
if(is_user_alive(id))
ilosc_rakiet_gracza[id] = 2;
cs_set_user_model(id, (get_user_team(id) == 1)? "sasT": "sas");
}
public DotykRakiety(ent)
{
if (!is_valid_ent(ent))
return;
new attacker = entity_get_edict(ent, EV_ENT_owner);
new Float:fOrigin[3];
entity_get_vector(ent, EV_VEC_origin, fOrigin);
new iOrigin[3];
for(new i=0;i<3;i++)
iOrigin[i] = floatround(fOrigin[i]);
message_begin(MSG_BROADCAST,SVC_TEMPENTITY, iOrigin);
write_byte(TE_EXPLOSION);
write_coord(iOrigin[0]);
write_coord(iOrigin[1]);
write_coord(iOrigin[2]);
write_short(sprite_blast);
write_byte(32);
write_byte(20);
write_byte(0);
message_end();
new entlist[33];
new numfound = find_sphere_class(ent, "player", 190.0, entlist, 32);
for (new i=0; i < numfound; i++)
{
new pid = entlist[i];
if (!is_user_alive(pid) || get_user_team(attacker) == get_user_team(pid))
continue;
cod_inflict_damage(attacker, pid, 55.0, 0.9, ent, (1<<24));
}
remove_entity(ent);
}
public fwCmdStart_MultiJump(id, uc_handle)
{
if(!is_user_alive(id) || !ma_klase[id])
return FMRES_IGNORED;
new flags = pev(id, pev_flags);
if((get_uc(uc_handle, UC_Buttons) & IN_JUMP) && !(flags & FL_ONGROUND) && !(pev(id, pev_oldbuttons) & IN_JUMP) && skoki[id])
{
skoki[id]--;
new Float:velocity[3];
pev(id, pev_velocity,velocity);
velocity[2] = random_float(265.0,285.0);
set_pev(id, pev_velocity,velocity);
}
else if(flags & FL_ONGROUND)
skoki[id] = 2;
return FMRES_IGNORED;
}
ALe modele mają byc w
cstrike/models/premium/sasT/sasT.mdl
cstrike/models/premium/sas/sas.mdl
aVee`
30.12.2011
W tym kawałku masz błąd:
- na czerwono
ilosc_rakiet_gracza[id] = 2;
give_item(id, "weapon_hegrenade");
cs_set_user_model(id, (get_user_team(id) == 1)? "classic2": "swat");
ma_klase[id] = true;
Po poprawieniu tego serwer odpala pobierają się skiny, ale w grze ich nie widać.
Użytkownik aVee` edytował ten post 30.12.2011 20:31
- na czerwono
ilosc_rakiet_gracza[id] = 2;
give_item(id, "weapon_hegrenade");
cs_set_user_model(id, (get_user_team(id) == 1)? "classic2": "swat");
ma_klase[id] = true;
Po poprawieniu tego serwer odpala pobierają się skiny, ale w grze ich nie widać.
Użytkownik aVee` edytował ten post 30.12.2011 20:31
Goliath
30.12.2011
UWAGA!
Jeżeli nazwa waszego modelu to np. predator to należy go umieścić w katalogu models/player/predator/predator.mdl uwzględniając wielkość liter!
aVee`
31.12.2011
Wszystko robię dobrze, klasa autora działa - wstawię skin i jest, a stalker nie działa, pobiera się skin ale nie działa.
Już się naumiałem, d0n tHe Pr0oo w twoim kodzie jest kilka błędów jak przerobie swoje klasy premium to wstawię poprawioną wersje.
Niby jak testowałem sam to działała, ale jak wgrałem na serwer to wszyscy mieli takiego skina.
Użytkownik aVee` edytował ten post 30.12.2011 23:01
Już się naumiałem, d0n tHe Pr0oo w twoim kodzie jest kilka błędów jak przerobie swoje klasy premium to wstawię poprawioną wersje.
Niby jak testowałem sam to działała, ale jak wgrałem na serwer to wszyscy mieli takiego skina.
#include <amxmodx>
#include <amxmisc>
#include <codmod>
#include <engine>
#include <hamsandwich>
#include <fakemeta>
#include <fun>
#include <cstrike>
new const nazwa[] = "Robocop [Premium]";
new const opis[] = "Posiada AWP oraz zestaw pistoletow, rakiete.";
new const bronie = (1<<CSW_AWP)|(1<<CSW_DEAGLE)|(1<<CSW_GLOCK18)|(1<<CSW_USP);
new const zdrowie = 50;
new const kondycja = 10;
new const inteligencja = 10;
new const wytrzymalosc = 50;
new sprite_blast;
new ilosc_rakiet_gracza[33];
new poprzednia_rakieta_gracza[33];
new skoki[33];
new ma_klase[33];
public plugin_init()
{
register_plugin(nazwa, "1.0", "amxx.pl");
cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc);
register_touch("rocket", "*" , "DotykRakiety");
RegisterHam(Ham_Spawn, "player", "fwSpawn_Rakiety", 1);
RegisterHam(Ham_Spawn, "player", "Odrodzenie", 1);
register_forward(FM_CmdStart, "fwCmdStart_MultiJump");
}
public plugin_precache()
{
sprite_blast = precache_model("sprites/dexplo.spr");
precache_model("models/rpgrocket.mdl");
precache_model("models/player/robo/robo.mdl");
precache_model("models/player/roboT/roboT.mdl");
}
public client_disconnect(id)
{
new entRakiety = find_ent_by_class(0, "rocket");
while(entRakiety > 0)
{
if(entity_get_edict(entRakiety, EV_ENT_owner) == id)
remove_entity(entRakiety);
entRakiety = find_ent_by_class(entRakiety, "rocket");
}
}
public cod_class_enabled(id)
{
if(!(get_user_flags(id) & ADMIN_LEVEL_C))
{
client_print(id, print_chat, "[Robocop] Nie masz uprawnien, aby uzywac tej klasy.")
return COD_STOP;
}
ilosc_rakiet_gracza[id] = 1;
give_item(id, "weapon_flashbang");
cs_set_user_model(id, (get_user_team(id) == 1)? "robo": "roboT");
ma_klase[id] = true;
return COD_CONTINUE;
}
public cod_class_disabled(id)
{
ma_klase[id] = false;
cs_reset_user_model(id);
}
public cod_class_skill_used(id)
{
if (!ilosc_rakiet_gracza[id])
{
client_print(id, print_center, "Wykorzystales juz wszystkie rakiety!");
}
else
{
if(poprzednia_rakieta_gracza[id] + 2.0 > get_gametime())
{
client_print(id, print_center, "Rakiet mozesz uzywac co 2 sekundy!");
}
else
{
if (is_user_alive(id))
{
poprzednia_rakieta_gracza[id] = floatround(get_gametime());
ilosc_rakiet_gracza[id]--;
new Float: Origin[3], Float: vAngle[3], Float: Velocity[3];
entity_get_vector(id, EV_VEC_v_angle, vAngle);
entity_get_vector(id, EV_VEC_origin , Origin);
new Ent = create_entity("info_target");
entity_set_string(Ent, EV_SZ_classname, "rocket");
entity_set_model(Ent, "models/rpgrocket.mdl");
vAngle[0] *= -1.0;
entity_set_origin(Ent, Origin);
entity_set_vector(Ent, EV_VEC_angles, vAngle);
entity_set_int(Ent, EV_INT_effects, 2);
entity_set_int(Ent, EV_INT_solid, SOLID_BBOX);
entity_set_int(Ent, EV_INT_movetype, MOVETYPE_FLY);
entity_set_edict(Ent, EV_ENT_owner, id);
VelocityByAim(id, 1000 , Velocity);
entity_set_vector(Ent, EV_VEC_velocity ,Velocity);
}
}
}
}
public fwSpawn_Rakiety(id)
{
if(is_user_alive(id))
ilosc_rakiet_gracza[id] = 1;
cs_set_user_model(id, (get_user_team(id) == 1)? "robo": "roboT");
}
public DotykRakiety(ent)
{
if (!is_valid_ent(ent))
return;
new attacker = entity_get_edict(ent, EV_ENT_owner);
new Float:fOrigin[3];
entity_get_vector(ent, EV_VEC_origin, fOrigin);
new iOrigin[3];
for(new i=0;i<3;i++)
iOrigin[i] = floatround(fOrigin[i]);
message_begin(MSG_BROADCAST,SVC_TEMPENTITY, iOrigin);
write_byte(TE_EXPLOSION);
write_coord(iOrigin[0]);
write_coord(iOrigin[1]);
write_coord(iOrigin[2]);
write_short(sprite_blast);
write_byte(32);
write_byte(20);
write_byte(0);
message_end();
new entlist[33];
new numfound = find_sphere_class(ent, "player", 190.0, entlist, 32);
for (new i=0; i < numfound; i++)
{
new pid = entlist[i];
if (!is_user_alive(pid) || get_user_team(attacker) == get_user_team(pid))
continue;
cod_inflict_damage(attacker, pid, 55.0, 0.9, ent, (1<<24));
}
remove_entity(ent);
}
public fwCmdStart_MultiJump(id, uc_handle)
{
if(!is_user_alive(id) || !ma_klase[id])
return FMRES_IGNORED;
new flags = pev(id, pev_flags);
if((get_uc(uc_handle, UC_Buttons) & IN_JUMP) && !(flags & FL_ONGROUND) && !(pev(id, pev_oldbuttons) & IN_JUMP) && skoki[id])
{
skoki[id]--;
new Float:velocity[3];
pev(id, pev_velocity,velocity);
velocity[2] = random_float(265.0,285.0);
set_pev(id, pev_velocity,velocity);
}
else if(flags & FL_ONGROUND)
skoki[id] = 2;
return FMRES_IGNORED;
}
Użytkownik aVee` edytował ten post 30.12.2011 23:01
Goliath
31.12.2011
public fwSpawn_Rakiety(id)
{
if(is_user_alive(id))
ilosc_rakiet_gracza[id] = 1;
cs_set_user_model(id, (get_user_team(id) == 1)? "robo": "roboT");
}
Nie ma warunku, czy gracz ma klasę.
aVee`
31.12.2011
No to jak zrobić ten warunek, tzn żeby osoby posiadające daną klasę miała ten skin a nie wszystkie klasy.
d0naciak
31.12.2011
zamieniasz fwSpawn_Rakiety(id) na
public fwSpawn_Rakiety(id)
{
if(is_user_alive(id))
if(ma_klase[id])
{
ilosc_rakiet_gracza[id] = 1;
cs_set_user_model(id, (get_user_team(id) == 1)? "robo": "roboT");
}
}
PAKOV9 13.02.2012
Doda mi ktoś model do tej klasy?
Dla TT:
models/player/spy_red/spy_red.mdl
Dla CT:
models/player/spy_blue/spy_blue.mdl
Dodaje .sma
Użytkownik DeeJay Andy edytował ten post 13.02.2012 20:10
Dla TT:
models/player/spy_red/spy_red.mdl
Dla CT:
models/player/spy_blue/spy_blue.mdl
Dodaje .sma
Załączone pliki
Użytkownik DeeJay Andy edytował ten post 13.02.2012 20:10
d0naciak
15.02.2012
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <fakemeta>
#include <engine>
#include <hamsandwich>
#include <codmod>
#include <cstrike>
#define PLUGIN "Spy [TF2]"
#define VERSION "1.0"
#define AUTHOR "CheQ"
#define PASEK 5178
#define PASEK_LAD 4321
new bool:jest_niewidzialny[32];
new przez[32];
new czas[32]
new HUD;
new bool:is_spy[32];
new const nazwa[] = "Szpieg";
new const opis[] = "Ma noz. wpisujac /pomoc dowiesz sie jak grac ";
new const bronie = 1<<CSW_KNIFE;
new const zdrowie = 25;
new const kondycja = 20;
new const inteligencja = 0;
new const wytrzymalosc = 0;
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc);
RegisterHam(Ham_Spawn,"player","Spawn",1);
RegisterHam(Ham_TakeDamage, "player", "TakeDmg");
register_clcmd("say /pomoc","Pomoc")
register_forward(FM_PlayerPreThink, "PokazPasek");
HUD= CreateHudSyncObj()
}
public Pomoc(id)
{
if(is_spy[id])
{
client_print(id,print_chat,"Prawym klawiszem myszki wlaczasz niewidzialnosc")
client_print(id,print_chat,"Masz 10 sekund ale przy jakimkolwiek ataku jestes widzialny")
client_print(id,print_chat,"Masz 1/1 z noza gdy atakujesz z Tylu przeciwnika")
}
}
public plugin_precache()
{
precache_model("models/player/spy_red/spy_red.mdl");
precache_model("models/player/spy_blue/spy_blue.mdl");
}
public cod_class_enabled(id)
{
cs_set_user_model(id, (get_user_team(id) == 1)? "spy_red": "spy_blue");
is_spy[id] = true;
czas[id] = 10;
}
public cod_class_disabled(id)
{
cs_reset_user_model(id);
is_spy[id] = false;
}
public Spawn(id)
{
if(is_spy[id])
{
przez[id]=255
remove_task(id + 9823)
remove_task(id + PASEK)
jest_niewidzialny[id]=false;
czas[id] = 10;
client_print(id,print_chat,"Nie wiesz jak grac Super Szpiegiem? Wpisz /pomoc")
cs_set_user_model(id, (get_user_team(id) == 1)? "spy_red": "spy_blue");
}
}
public client_PreThink(id)
{
if(!is_user_alive(id) || !is_spy[id])
return PLUGIN_CONTINUE;
if((pev(id,pev_button) & IN_ATTACK2) && (pev(id,pev_oldbuttons) & IN_ATTACK2) && czas[id] && jest_niewidzialny[id])
{
remove_task(id + 9823)
remove_task(id+PASEK)
remove_task(id+PASEK_LAD)
set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransColor, 255);
przez[id] = 255;
if(czas[id]<10)
set_task(2.0,"LadowaniePaska",id+PASEK_LAD)
}
if((pev(id,pev_button) & IN_ATTACK2) && (pev(id,pev_oldbuttons) & IN_ATTACK2) && czas[id] && !jest_niewidzialny[id])
{
remove_task(id+PASEK_LAD)
remove_task(id+PASEK)
remove_task(id + 9823)
set_task(0.1,"niewidzialny",id + 9823)
}
if((pev(id,pev_button) & IN_ATTACK) && (jest_niewidzialny[id]))
{
if(task_exists(id + 9823))
remove_task(id + 9823)
remove_task(id+PASEK)
set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransColor, 255);
przez[id] = 255;
jest_niewidzialny[id]=false;
if(czas[id]<10)
set_task(1.0,"LadowaniePaska",id+PASEK_LAD)
}
return PLUGIN_CONTINUE;
}
public TakeDmg(this, idinflictor, idattacker, Float:damage, damagebits)
{
if(!is_user_alive(this) || !is_user_connected(this) || !is_user_connected(idattacker) || get_user_team(this) == get_user_team(idattacker))
return HAM_IGNORED;
if(!is_spy[idattacker])
return HAM_IGNORED;
new health = get_user_health(this);
new weapon = get_user_weapon(idattacker);
if(health < 2)
return HAM_IGNORED;
if(weapon == CSW_KNIFE && !UTIL_In_FOV(this, idattacker) && UTIL_In_FOV(idattacker, this))
damage=float(health);
SetHamParamFloat(4, damage);
return HAM_IGNORED;
}
public niewidzialny(id)
{
id-=9823;
if(przez[id]>0)
{
przez[id]-=15;
set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransColor, przez[id]);
set_task(0.1,"niewidzialny",id + 9823)
}
else
{
client_print(id,print_center,"Jestes niewidzialny")
remove_task(id + 9823)
jest_niewidzialny[id]=true;
set_task(1.0,"CzasFun",id+PASEK)
return PLUGIN_CONTINUE;
}
return PLUGIN_CONTINUE;
}
public CzasFun(id)
{
id-=PASEK;
if(czas[id]!=0)
{
czas[id]-=1;
set_task(1.0,"CzasFun",id+PASEK)
}
else
{
set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransColor, 255);
przez[id] = 255;
jest_niewidzialny[id]=false;
remove_task(id+PASEK)
set_task(2.0,"LadowaniePaska",id+PASEK_LAD)
}
}
public LadowaniePaska(id)
{
id-=PASEK_LAD;
jest_niewidzialny[id]=false;
if(czas[id]<10)
{
czas[id]++
set_task(1.0,"LadowaniePaska",id+PASEK_LAD)
}
else
remove_task(id+PASEK_LAD)
}
public PokazPasek(id)
{
if(!is_user_alive(id) || !is_spy[id])
return PLUGIN_CONTINUE;
if(czas[id]<4)
set_hudmessage(255, 0, 0, 0.03, 0.6, 0, 0.0, 0.3, 0.0, 0.0);
else
set_hudmessage(0, 255, 0, 0.03, 0.6, 0, 0.0, 0.3, 0.0, 0.0);
ShowSyncHudMsg(id, HUD,"Spy^n[------%d-----]",czas[id])
return PLUGIN_CONTINUE;
}
//Kod wziety CodMod.
stock bool:UTIL_In_FOV(id,target)
{
if (Find_Angle(id,target,9999.9) > 0.0)
return true;
return false;
}
stock Float:Find_Angle(Core,Target,Float:dist)
{
new Float:vec2LOS[2];
new Float:flDot;
new Float:CoreOrigin[3];
new Float:TargetOrigin[3];
new Float:CoreAngles[3];
pev(Core,pev_origin,CoreOrigin);
pev(Target,pev_origin,TargetOrigin);
if (get_distance_f(CoreOrigin,TargetOrigin) > dist)
return 0.0;
pev(Core,pev_angles, CoreAngles);
for ( new i = 0; i < 2; i++ )
vec2LOS[i] = TargetOrigin[i] - CoreOrigin[i];
new Float:veclength = Vec2DLength(vec2LOS);
//Normalize V2LOS
if (veclength <= 0.0)
{
vec2LOS[0] = 0.0;
vec2LOS[1] = 0.0;
}
else
{
new Float:flLen = 1.0 / veclength;
vec2LOS[0] = vec2LOS[0]*flLen;
vec2LOS[1] = vec2LOS[1]*flLen;
}
//Do a makevector to make v_forward right
engfunc(EngFunc_MakeVectors,CoreAngles);
new Float:v_forward[3];
new Float:v_forward2D[2];
get_global_vector(GL_v_forward, v_forward);
v_forward2D[0] = v_forward[0];
v_forward2D[1] = v_forward[1];
flDot = vec2LOS[0]*v_forward2D[0]+vec2LOS[1]*v_forward2D[1];
if ( flDot > 0.5 )
{
return flDot;
}
return 0.0;
}
stock Float:Vec2DLength( Float:Vec[2] )
{
return floatsqroot(Vec[0]*Vec[0] + Vec[1]*Vec[1] );
}