O co chodzi z cod-mod'em?
Najlepsza odpowiedź
Alelluja
21.08.2015 09:31
Ptaku Skorzystaj z tego poradnika http://amxx.pl/topic...broni-w-klasie/
I tutaj masz jeszcze 2: http://amxx.pl/topic...broni-w-klasie/
http://amxx.pl/topic...o-pisania-klas/
Przejdź do postu
Ptak..u
20.08.2015
Witam,
Mam problem ponieważ chcę robić cod-mod'a i tak:
Poradników pt."Jak robic klasę/Perk cod-mod" jest pełno
ale jak zrobic plugin cod-mod (czyli ogólnie komendy /klasa, /klasy itp.)
Mógł by ktoś wytłumaczyć o co chodzi?
I jeszcze jedno pytanie na amxx.pl jest generator XP gdzie mam ten kod wkleić ? (domyślam się że do pliku cod-mod.sma)
Z góry Dzięki ![]()
*Mateo*
20.08.2015
Musisz nauczyć się robić pluginy ale przed tobą daleka droga
poszperaj w internecie ja osobiście polecam AmXxStudio
poradnik link : http://amxx.pl/topic...napisac-plugin/
dokumentacja: http://amxx.pl/dokumentacja/
a jeśli chodzi ci o czystego Cod moda to tutaj masz link : http://amxx.pl/topic...-mw-mod-update/
Ptak..u
21.08.2015
OK to poproszęo jeszcze jedno ![]()
Prubuję zrobić klasę która na mieć 1/10 z ak 47 i 1/2 z HE
to jest mój kod ale nie działa (jak ustawiłem ze tylko ak 1/10 śmiga)
Output z kompilatora:
codclass_pat.sma(108) : warning 204: symbol is assigned a value that is never used: "liczba" codclass_pat.sma(111) : warning 204: symbol is assigned a value that is never used: "liczba" codclass_pat.sma(112) : error 017: undefined symbol "liczba"
Mój kod:
new weapon = get_user_weapon(idAtt);
if(weapon == CSW_AK47){
new liczba = 10;
}
else{
new liczba = 2;
}
if(!is_user_alive(idAtt) || !ma_klase[idAtt] || !(dmgBits & (1<<1) ) || random_num(1, liczba) != 1 ) // 1, L1 = 20%. 1, 4 = 25%. 1, 3 = 33%. 1, 2 = 50% itd., może być nawet 1, 100 czyli 1%
return HAM_IGNORED;
if(weapon == CSW_AK47)
SetHamParamFloat(4, float(get_user_health(this) + 1));
if(weapon == CSW_HEGRENADE)
SetHamParamFloat(4, float(get_user_health(this) + 1));
return HAM_HANDLED;
}
Maciejek.
21.08.2015
Musisz nauczyć się robić pluginy ale przed tobą daleka droga
poszperaj w internecie ja osobiście polecam AmXxStudio
poradnik link : http://amxx.pl/topic...napisac-plugin/
dokumentacja: http://amxx.pl/dokumentacja/
a jeśli chodzi ci o czystego Cod moda to tutaj masz link : http://amxx.pl/topic...-mw-mod-update/
po pierwsze: robić to możesz obiad. (pluginy się pisze
)
po drugie: PAWN moim zdaniem jest najprostszym językiem więc raczej "krótka droga", ponieważ wystarczy znać podstawy.
OK to poproszęo jeszcze jedno
Prubuję zrobić klasę która na mieć 1/10 z ak 47 i 1/2 z HE
to jest mój kod ale nie działa (jak ustawiłem ze tylko ak 1/10 śmiga)
Output z kompilatora:
codclass_pat.sma(108) : warning 204: symbol is assigned a value that is never used: "liczba" codclass_pat.sma(111) : warning 204: symbol is assigned a value that is never used: "liczba" codclass_pat.sma(112) : error 017: undefined symbol "liczba"Mój kod:
new weapon = get_user_weapon(idAtt); if(weapon == CSW_AK47){ new liczba = 10; } else{ new liczba = 2; } if(!is_user_alive(idAtt) || !ma_klase[idAtt] || !(dmgBits & (1<<1) ) || random_num(1, liczba) != 1 ) // 1, L1 = 20%. 1, 4 = 25%. 1, 3 = 33%. 1, 2 = 50% itd., może być nawet 1, 100 czyli 1% return HAM_IGNORED; if(weapon == CSW_AK47) SetHamParamFloat(4, float(get_user_health(this) + 1)); if(weapon == CSW_HEGRENADE) SetHamParamFloat(4, float(get_user_health(this) + 1)); return HAM_HANDLED; }wydaje mi się, że nie przypisałeś zmiennej do "liczba" (mogę się mylić)
co do tej tabeli expa to ogólnie jest ona stworzona dla starej wersji silnika jednak zawsze możesz zmodyfikować nowy silnik i ją tam dodać.
Użytkownik Maciejek. edytował ten post 21.08.2015 00:29
*Mateo*
21.08.2015
Maciejak po 1. może i się pomyliłem robić pisać pluginy nie masz co robić ? tylko krytykować ludzi
a co do cb Ptaku skorzystaj z http://amxx.pl/generator-klas/
jak już zrobisz 1/10 z ak to wciśnij generuj i tam zmień że he ma 1/2 ![]()
Najlepsza odpowiedź
Alelluja
21.08.2015
Ptaku Skorzystaj z tego poradnika http://amxx.pl/topic...broni-w-klasie/
I tutaj masz jeszcze 2: http://amxx.pl/topic...broni-w-klasie/
Ptak..u
22.08.2015
Ok no to jeszcze jedno pytanie jak mam to "GUI" co mi info wyswietla:
[Klasa : Admiral}
doswiadczenie itd.
Moge to z edytować jak tak to gdzie?
Ptak..u
23.08.2015
No to jeszcze jedno (jak wam tak dobrze idzie
)
Szukam kodu aby jakaś klasa raz na runde po nacisnięcie klawisza E w promieniu x leczyła ludzi z swojego teamu.
Ptak..u
23.08.2015
Dobra znalazłem taki perk ale potrzebuje klasę próbowałem przerobic ale (chyba) problem jest taki ze ten perk uruchania sie komendą useperk a po przerobieniu na klasę ani E ani useperk nie działa łapcie kod ![]()
Z tego :
#include <amxmodx>
#include <cstrike>
#include <fakemeta_util>
#include <codmod>
#define PLUGIN "Wskrzeszanie medyk"
#define VERSION "0.2"
#define AUTHOR "Cypis, edited by Hleb"
#define pev_zorigin pev_fuser4
#define seconds(%1) ((1<<12) * (%1))
new const perk_name[] = "Moc Medyka"
new const perk_desc[] = "Mozesz wskrzeszac swoich oraz bezczescic przeciwnikow LW razy"
new SOUND_START[] = "items/medshot4.wav"
new SOUND_FINISHED[] = "items/smallmedkit2.wav"
new SOUND_FAILED[] = "items/medshotno1.wav"
enum
{
ICON_HIDE = 0,
ICON_SHOW,
ICON_FLASH
}
enum
{
TASKID_REVIVE = 1337,
TASKID_RESPAWN,
TASKID_CHECKRE,
TASKID_CHECKST,
TASKID_ORIGIN,
TASKID_SETUSER
}
new g_haskit[33]
new ile_ma[33]
new Float:g_revive_delay[33]
new Float:g_body_origin[33][3]
new bool:g_wasducking[33]
new g_msg_bartime,
g_msg_statusicon,
g_msg_screenfade,
g_msg_clcorpse;
new cvar_revival_time,
cvar_revival_health,
cvar_revival_dis,
cvar_za_zbeszczeszczenie,
cvar_za_wskrzeszenie,
cvar_za_hpdefiling,
ilerazy[33];
public plugin_init()
{
cod_register_perk(perk_name, perk_desc, 5, 8)
register_plugin(PLUGIN, VERSION, AUTHOR)
cvar_revival_time = register_cvar("cod_perk_revkit_time", "3")
cvar_revival_health = register_cvar("cod_perk_revkit_health", "100")
cvar_revival_dis = register_cvar("cod_perk_revkit_distance", "100.0")
cvar_za_zbeszczeszczenie = register_cvar("cod_perk_revkit_xpdefiling", "20")
cvar_za_wskrzeszenie = register_cvar("cod_perk_revkit_xpraise", "40")
cvar_za_hpdefiling = register_cvar("cod_perk_revkit_hpdefiling", "30")
register_event("HLTV", "event_hltv", "a", "1=0", "2=0")
register_event("DeathMsg","DeathMsg","ade")
register_forward(FM_EmitSound, "fwd_emitsound")
register_forward(FM_PlayerPostThink, "fwd_playerpostthink")
g_msg_bartime = get_user_msgid("BarTime")
g_msg_clcorpse = get_user_msgid("ClCorpse")
g_msg_screenfade= get_user_msgid("ScreenFade")
g_msg_statusicon = get_user_msgid("StatusIcon")
register_message(g_msg_clcorpse, "message_clcorpse")
}
public cod_perk_enabled(id, wartosc)
{
if(cod_get_user_class(id) == cod_get_classid("Medyk"))
return COD_STOP;
g_haskit[id] = 1
ile_ma[id] = 0
ilerazy[id] = wartosc;
return COD_CONTINUE;
}
public cod_perk_disabled(id)
{
g_haskit[id] = 0;
ile_ma[id] = 0;
remove_task(TASKID_REVIVE + id)
Display_Icon(id, ICON_HIDE , "dmg_shock")
}
public plugin_precache()
{
precache_model("models/player/arctic/arctic.mdl")
precache_model("models/player/leet/leet.mdl")
precache_model("models/player/guerilla/guerilla.mdl")
precache_model("models/player/terror/terror.mdl")
precache_model("models/player/urban/urban.mdl")
precache_model("models/player/sas/sas.mdl")
precache_model("models/player/gsg9/gsg9.mdl")
precache_model("models/player/gign/gign.mdl")
precache_model("models/player/vip/vip.mdl")
precache_sound(SOUND_START)
precache_sound(SOUND_FINISHED)
precache_sound(SOUND_FAILED)
}
public client_connect(id)
{
g_haskit[id] = 0
ile_ma[id] = 0
reset_player(id)
}
public client_disconnect(id)
{
new ent
while((ent = fm_find_ent_by_owner(ent, "fake_corpse", id)) != 0)
fm_remove_entity(ent)
}
public DeathMsg(id)
{
new vid = read_data(2)
reset_player(vid)
msg_bartime(id, 0)
static Float:minsize[3]
pev(vid, pev_mins, minsize)
if(minsize[2] == -18.0)
g_wasducking[vid] = true
else
g_wasducking[vid] = false
set_task(0.5, "task_check_dead_flag", vid)
}
public event_hltv()
{
fm_remove_entity_name("fake_corpse")
static players[32], num
get_players(players, num, "a")
for(new i = 0; i < num; i++)
{
if(is_user_connected(players[i]))
{
reset_player(players[i])
msg_bartime(players[i], 0)
}
}
}
public reset_player(id)
{
remove_task(TASKID_REVIVE + id)
remove_task(TASKID_RESPAWN + id)
remove_task(TASKID_CHECKRE + id)
remove_task(TASKID_CHECKST + id)
remove_task(TASKID_ORIGIN + id)
remove_task(TASKID_SETUSER + id)
g_revive_delay[id] = 0.0
g_wasducking[id] = false
g_body_origin[id] = Float:{0.0, 0.0, 0.0}
}
public fwd_playerpostthink(id)
{
if(!is_user_connected(id))
return FMRES_IGNORED
if(g_haskit[id]==0)
return FMRES_IGNORED
if(!is_user_alive(id))
{
Display_Icon(id, ICON_HIDE , "dmg_shock")
return FMRES_IGNORED
}
new body = find_dead_body(id)
if(fm_is_valid_ent(body))
{
new lucky_bastard = pev(body, pev_owner)
if(!is_user_connected(lucky_bastard))
return FMRES_IGNORED
new lb_team = get_user_team(lucky_bastard)
if(lb_team == 1 || lb_team == 2 )
Display_Icon(id, ICON_FLASH , "dmg_shock")
}
else
Display_Icon(id, ICON_SHOW , "dmg_shock")
return FMRES_IGNORED
}
public task_check_dead_flag(id)
{
if(!is_user_connected(id))
return
if(pev(id, pev_deadflag) == DEAD_DEAD)
create_fake_corpse(id)
else
set_task(0.5, "task_check_dead_flag", id)
}
public create_fake_corpse(id)
{
set_pev(id, pev_effects, EF_NODRAW)
static model[32]
cs_get_user_model(id, model, 31)
static player_model[64]
format(player_model, 63, "models/player/%s/%s.mdl", model, model)
static Float: player_origin[3]
pev(id, pev_origin, player_origin)
static Float:mins[3]
mins[0] = -16.0
mins[1] = -16.0
mins[2] = -34.0
static Float:maxs[3]
maxs[0] = 16.0
maxs[1] = 16.0
maxs[2] = 34.0
if(g_wasducking[id])
{
mins[2] /= 2
maxs[2] /= 2
}
static Float:player_angles[3]
pev(id, pev_angles, player_angles)
player_angles[2] = 0.0
new sequence = pev(id, pev_sequence)
new ent = fm_create_entity("info_target")
if(ent)
{
set_pev(ent, pev_classname, "fake_corpse")
engfunc(EngFunc_SetModel, ent, player_model)
engfunc(EngFunc_SetOrigin, ent, player_origin)
engfunc(EngFunc_SetSize, ent, mins, maxs)
set_pev(ent, pev_solid, SOLID_TRIGGER)
set_pev(ent, pev_movetype, MOVETYPE_TOSS)
set_pev(ent, pev_owner, id)
set_pev(ent, pev_angles, player_angles)
set_pev(ent, pev_sequence, sequence)
set_pev(ent, pev_frame, 9999.9)
}
}
public cod_perk_used(id)
{
if(!is_user_alive(id) || !g_haskit[id])
return FMRES_IGNORED
if(task_exists(TASKID_REVIVE + id))
return FMRES_IGNORED
new body = find_dead_body(id)
if(!fm_is_valid_ent(body))
return FMRES_IGNORED
new lucky_bastard = pev(body, pev_owner)
new lb_team = get_user_team(lucky_bastard)
if(lb_team != 1 && lb_team != 2)
return FMRES_IGNORED
static name[32]
get_user_name(lucky_bastard, name, 31)
client_print(id, print_chat, "Reanimacja %s Trwa", name)
new revivaltime = get_pcvar_num(cvar_revival_time)
msg_bartime(id, revivaltime)
new Float:gametime = get_gametime()
g_revive_delay[id] = gametime + float(revivaltime) - 0.01
emit_sound(id, CHAN_AUTO, SOUND_START, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
set_task(0.0, "task_revive", TASKID_REVIVE + id)
return FMRES_SUPERCEDE
}
public task_revive(taskid)
{
new id = taskid - TASKID_REVIVE
if(!is_user_alive(id))
{
failed_revive(id)
return FMRES_IGNORED
}
new body = find_dead_body(id)
if(!fm_is_valid_ent(body))
{
failed_revive(id)
return FMRES_IGNORED
}
new lucky_bastard = pev(body, pev_owner)
if(!is_user_connected(lucky_bastard))
{
failed_revive(id)
return FMRES_IGNORED
}
new lb_team = get_user_team(lucky_bastard)
if(lb_team != 1 && lb_team != 2)
{
failed_revive(id)
return FMRES_IGNORED
}
static Float:velocity[3]
pev(id, pev_velocity, velocity)
velocity[0] = 0.0
velocity[1] = 0.0
set_pev(id, pev_velocity, velocity)
new Float:gametime = get_gametime()
if(g_revive_delay[id] < gametime)
{
if(findemptyloc(body, 10.0))
{
fm_remove_entity(body)
emit_sound(id, CHAN_AUTO, SOUND_FINISHED, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
ile_ma[id]++;
if(ile_ma[id] == ilerazy[id])
off(id)
new args[2]
args[0]=lucky_bastard
if(get_user_team(id)!=get_user_team(lucky_bastard))
{
args[1]=1
new za_zbeszczeszczenie = get_pcvar_num(cvar_za_zbeszczeszczenie)
new za_hpdefiling = get_pcvar_num(cvar_za_hpdefiling)
new health = 100+cod_get_user_health(id);
new nowe_zdrowie = (get_user_health(id)+za_hpdefiling<health)? get_user_health(id)+za_hpdefiling: health;
fm_set_user_health(id, nowe_zdrowie);
cod_set_user_xp(id, cod_get_user_xp(id)+za_zbeszczeszczenie)
client_print(id, print_chat, "[COD:MW] Dostales %i doswiadczenia za zbeszczeszczenie zwlok wroga.", za_zbeszczeszczenie);
}
else
{
args[1]=0
new za_wskrzeszenie = get_pcvar_num(cvar_za_wskrzeszenie)
cod_set_user_xp(id, cod_get_user_xp(id)+za_wskrzeszenie)
client_print(id, print_chat, "[COD:MW] Dostales %i doswiadczenia za wskrzeszenie kolegi z teamu.", za_wskrzeszenie);
set_task(0.1, "task_respawn", TASKID_RESPAWN + lucky_bastard,args,2)
}
}
else
failed_revive(id)
}
else
set_task(0.1, "task_revive", TASKID_REVIVE + id)
return FMRES_IGNORED
}
public failed_revive(id)
{
msg_bartime(id, 0)
emit_sound(id, CHAN_AUTO, SOUND_FAILED, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
}
public off(id)
{
g_haskit[id] = 0
msg_bartime(id, 0)
reset_player(id)
Display_Icon(id, ICON_HIDE , "dmg_shock")
}
public task_origin(args[])
{
new id = args[0]
engfunc(EngFunc_SetOrigin, id, g_body_origin[id])
static Float:origin[3]
pev(id, pev_origin, origin)
set_pev(id, pev_zorigin, origin[2])
set_task(0.1, "task_stuck_check", TASKID_CHECKST + id,args,2)
}
stock find_dead_body(id)
{
static Float:origin[3]
pev(id, pev_origin, origin)
new ent
static classname[32]
while((ent = fm_find_ent_in_sphere(ent, origin, get_pcvar_float(cvar_revival_dis))) != 0)
{
pev(ent, pev_classname, classname, 31)
if(equali(classname, "fake_corpse") && fm_is_ent_visible(id, ent))
return ent
}
return 0
}
stock msg_bartime(id, seconds)
{
if(is_user_bot(id)||!is_user_alive(id)||!is_user_connected(id))
return
message_begin(MSG_ONE, g_msg_bartime, _, id)
write_byte(seconds)
write_byte(0)
message_end()
}
public task_respawn(args[])
{
new id = args[0]
if (!is_user_connected(id) || is_user_alive(id) || cs_get_user_team(id) == CS_TEAM_SPECTATOR) return
set_pev(id, pev_deadflag, DEAD_RESPAWNABLE)
dllfunc(DLLFunc_Think, id)
dllfunc(DLLFunc_Spawn, id)
set_pev(id, pev_iuser1, 0)
set_task(0.1, "task_check_respawn", TASKID_CHECKRE + id,args,2)
}
public task_check_respawn(args[])
{
new id = args[0]
if(pev(id, pev_iuser1))
set_task(0.1, "task_respawn", TASKID_RESPAWN + id,args,2)
else
set_task(0.1, "task_origin", TASKID_ORIGIN + id,args,2)
}
public task_stuck_check(args[])
{
new id = args[0]
static Float:origin[3]
pev(id, pev_origin, origin)
if(origin[2] == pev(id, pev_zorigin))
set_task(0.1, "task_respawn", TASKID_RESPAWN + id,args,2)
else
set_task(0.1, "task_setplayer", TASKID_SETUSER + id,args,2)
}
public task_setplayer(args[])
{
new id = args[0]
fm_set_user_health(id, get_pcvar_num(cvar_revival_health))
Display_Fade(id,seconds(2),seconds(2),0,0,0,0,255)
}
stock bool:findemptyloc(ent, Float:radius)
{
if(!fm_is_valid_ent(ent))
return false
static Float:origin[3]
pev(ent, pev_origin, origin)
origin[2] += 2.0
new owner = pev(ent, pev_owner)
new num = 0, bool:found = false
while(num <= 100)
{
if(is_hull_vacant(origin))
{
g_body_origin[owner][0] = origin[0]
g_body_origin[owner][1] = origin[1]
g_body_origin[owner][2] = origin[2]
found = true
break
}
else
{
origin[0] += random_float(-radius, radius)
origin[1] += random_float(-radius, radius)
origin[2] += random_float(-radius, radius)
num++
}
}
return found
}
stock bool:is_hull_vacant(const Float:origin[3])
{
new tr = 0
engfunc(EngFunc_TraceHull, origin, origin, 0, HULL_HUMAN, 0, tr)
if(!get_tr2(tr, TR_StartSolid) && !get_tr2(tr, TR_AllSolid) && get_tr2(tr, TR_InOpen))
return true
return false
}
stock Display_Fade(id,duration,holdtime,fadetype,red,green,blue,alpha)
{
message_begin(MSG_ONE, g_msg_screenfade,{0,0,0},id)
write_short(duration)
write_short(holdtime)
write_short(fadetype)
write_byte(red)
write_byte(green)
write_byte(blue)
write_byte(alpha)
message_end()
}
stock Display_Icon(id ,enable ,name[])
{
if(!pev_valid(id) || is_user_bot(id))
return PLUGIN_HANDLED
message_begin(MSG_ONE, g_msg_statusicon, {0,0,0}, id)
write_byte(enable)
write_string(name)
write_byte(42)
write_byte(42)
write_byte(255)
message_end()
return PLUGIN_CONTINUE
}
public message_clcorpse()
return PLUGIN_HANDLED
Zrobiłem to:
#include <amxmodx>
#include <cstrike>
#include <fakemeta_util>
#include <codmod>
#define PLUGIN "Wskrzeszanie medyk"
#define VERSION "0.2"
#define AUTHOR "Cypis, edited by Hleb"
#define pev_zorigin pev_fuser4
#define seconds(%1) ((1<<12) * (%1))
// Informacje ogólne, pokazywane po wpisaniu /klasy
new const nazwa[] = "Brak"; // Tu wpisujesz nazwę swojej klasy
new const opis[] = "Opis"; // Tu wpisujesz opis swojej klasy (wyświetlany po wpisaniu /klasy)
new const bronie = (1<<CSW_KNIFE); // Tu wpisujesz nazwy broni w taki sposób
new const zdrowie = 0; // Tu wpisujesz, ile ma mieć życia (100 + stała [w tym przypadku 100+0])
new const kondycja = 0; // Tu wpisujesz, ile ma mieć kondycji (normalny bieg + stala [w tym przypadku brak dodatkowej kondycji])
new const inteligencja = 0; // Tu wpisujesz, ile ma mieć inteligencji (0 + stała [w tym przypadku 0+0])
new const wytrzymalosc = 0; // Tu wpisujesz, ile ma mieć wytrzymałości (0 + stała [w tym przypadku 0+0])
// Nie ruszaj! To ma być w każdej klasie!
new ma_klase[33];
new SOUND_START[] = "items/medshot4.wav"
new SOUND_FINISHED[] = "items/smallmedkit2.wav"
new SOUND_FAILED[] = "items/medshotno1.wav"
enum
{
ICON_HIDE = 0,
ICON_SHOW,
ICON_FLASH
}
enum
{
TASKID_REVIVE = 1337,
TASKID_RESPAWN,
TASKID_CHECKRE,
TASKID_CHECKST,
TASKID_ORIGIN,
TASKID_SETUSER
}
new g_haskit[33]
new ile_ma[33]
new Float:g_revive_delay[33]
new Float:g_body_origin[33][3]
new bool:g_wasducking[33]
new g_msg_bartime,
g_msg_statusicon,
g_msg_screenfade,
g_msg_clcorpse;
new cvar_revival_time,
cvar_revival_health,
cvar_revival_dis,
cvar_za_zbeszczeszczenie,
cvar_za_wskrzeszenie,
cvar_za_hpdefiling,
ilerazy[33];
public plugin_init()
{
register_plugin(nazwa, "1.0", "QuatZo"); // Pola "nazwa" nie ruszamy, drugie pole to wersja, a trzecie to autor.
cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc); // Rejestrujemy klasę w silniku COD'a (patrz: Informacje ogólne)
cvar_revival_time = register_cvar("cod_class_revkit_time", "3")
cvar_revival_health = register_cvar("cod_class_revkit_health", "100")
cvar_revival_dis = register_cvar("cod_class_revkit_distance", "100.0")
cvar_za_zbeszczeszczenie = register_cvar("cod_class_revkit_xpdefiling", "20")
cvar_za_wskrzeszenie = register_cvar("cod_class_revkit_xpraise", "40")
cvar_za_hpdefiling = register_cvar("cod_class_revkit_hpdefiling", "30")
register_event("HLTV", "event_hltv", "a", "1=0", "2=0")
register_event("DeathMsg","DeathMsg","ade")
register_forward(FM_EmitSound, "fwd_emitsound")
register_forward(FM_PlayerPostThink, "fwd_playerpostthink")
g_msg_bartime = get_user_msgid("BarTime")
g_msg_clcorpse = get_user_msgid("ClCorpse")
g_msg_screenfade= get_user_msgid("ScreenFade")
g_msg_statusicon = get_user_msgid("StatusIcon")
register_message(g_msg_clcorpse, "message_clcorpse")
}
public cod_class_enabled(id)
{
ma_klase[id] = true;
g_haskit[id] = 1;
ile_ma[id] = 0;
ilerazy[id] = 1;
return COD_CONTINUE;
}
public cod_class_disabled(id)
{
ma_klase[id] = false;
g_haskit[id] = 0;
ile_ma[id] = 0;
remove_task(TASKID_REVIVE + id)
Display_Icon(id, ICON_HIDE , "dmg_shock")
}
public plugin_precache()
{
precache_model("models/player/arctic/arctic.mdl")
precache_model("models/player/leet/leet.mdl")
precache_model("models/player/guerilla/guerilla.mdl")
precache_model("models/player/terror/terror.mdl")
precache_model("models/player/urban/urban.mdl")
precache_model("models/player/sas/sas.mdl")
precache_model("models/player/gsg9/gsg9.mdl")
precache_model("models/player/gign/gign.mdl")
precache_model("models/player/vip/vip.mdl")
precache_sound(SOUND_START)
precache_sound(SOUND_FINISHED)
precache_sound(SOUND_FAILED)
}
public client_connect(id)
{
g_haskit[id] = 0
ile_ma[id] = 0
reset_player(id)
}
public client_disconnect(id)
{
new ent
while((ent = fm_find_ent_by_owner(ent, "fake_corpse", id)) != 0)
fm_remove_entity(ent)
}
public DeathMsg(id)
{
new vid = read_data(2)
reset_player(vid)
msg_bartime(id, 0)
static Float:minsize[3]
pev(vid, pev_mins, minsize)
if(minsize[2] == -18.0)
g_wasducking[vid] = true
else
g_wasducking[vid] = false
set_task(0.5, "task_check_dead_flag", vid)
}
public event_hltv()
{
fm_remove_entity_name("fake_corpse")
static players[32], num
get_players(players, num, "a")
for(new i = 0; i < num; i++)
{
if(is_user_connected(players[i]))
{
reset_player(players[i])
msg_bartime(players[i], 0)
}
}
}
public reset_player(id)
{
remove_task(TASKID_REVIVE + id)
remove_task(TASKID_RESPAWN + id)
remove_task(TASKID_CHECKRE + id)
remove_task(TASKID_CHECKST + id)
remove_task(TASKID_ORIGIN + id)
remove_task(TASKID_SETUSER + id)
g_revive_delay[id] = 0.0
g_wasducking[id] = false
g_body_origin[id] = Float:{0.0, 0.0, 0.0}
}
public fwd_playerpostthink(id)
{
if(!is_user_connected(id))
return FMRES_IGNORED
if(g_haskit[id]==0)
return FMRES_IGNORED
if(!is_user_alive(id))
{
Display_Icon(id, ICON_HIDE , "dmg_shock")
return FMRES_IGNORED
}
new body = find_dead_body(id)
if(fm_is_valid_ent(body))
{
new lucky_bastard = pev(body, pev_owner)
if(!is_user_connected(lucky_bastard))
return FMRES_IGNORED
new lb_team = get_user_team(lucky_bastard)
if(lb_team == 1 || lb_team == 2 )
Display_Icon(id, ICON_FLASH , "dmg_shock")
}
else
Display_Icon(id, ICON_SHOW , "dmg_shock")
return FMRES_IGNORED
}
public task_check_dead_flag(id)
{
if(!is_user_connected(id))
return
if(pev(id, pev_deadflag) == DEAD_DEAD)
create_fake_corpse(id)
else
set_task(0.5, "task_check_dead_flag", id)
}
public create_fake_corpse(id)
{
set_pev(id, pev_effects, EF_NODRAW)
static model[32]
cs_get_user_model(id, model, 31)
static player_model[64]
format(player_model, 63, "models/player/%s/%s.mdl", model, model)
static Float: player_origin[3]
pev(id, pev_origin, player_origin)
static Float:mins[3]
mins[0] = -16.0
mins[1] = -16.0
mins[2] = -34.0
static Float:maxs[3]
maxs[0] = 16.0
maxs[1] = 16.0
maxs[2] = 34.0
if(g_wasducking[id])
{
mins[2] /= 2
maxs[2] /= 2
}
static Float:player_angles[3]
pev(id, pev_angles, player_angles)
player_angles[2] = 0.0
new sequence = pev(id, pev_sequence)
new ent = fm_create_entity("info_target")
if(ent)
{
set_pev(ent, pev_classname, "fake_corpse")
engfunc(EngFunc_SetModel, ent, player_model)
engfunc(EngFunc_SetOrigin, ent, player_origin)
engfunc(EngFunc_SetSize, ent, mins, maxs)
set_pev(ent, pev_solid, SOLID_TRIGGER)
set_pev(ent, pev_movetype, MOVETYPE_TOSS)
set_pev(ent, pev_owner, id)
set_pev(ent, pev_angles, player_angles)
set_pev(ent, pev_sequence, sequence)
set_pev(ent, pev_frame, 9999.9)
}
}
public cod_class_used(id)
{
if(!is_user_alive(id) || !g_haskit[id])
return FMRES_IGNORED
if(task_exists(TASKID_REVIVE + id))
return FMRES_IGNORED
new body = find_dead_body(id)
if(!fm_is_valid_ent(body))
return FMRES_IGNORED
new lucky_bastard = pev(body, pev_owner)
new lb_team = get_user_team(lucky_bastard)
if(lb_team != 1 && lb_team != 2)
return FMRES_IGNORED
static name[32]
get_user_name(lucky_bastard, name, 31)
client_print(id, print_chat, "Reanimacja %s Trwa", name)
new revivaltime = get_pcvar_num(cvar_revival_time)
msg_bartime(id, revivaltime)
new Float:gametime = get_gametime()
g_revive_delay[id] = gametime + float(revivaltime) - 0.01
emit_sound(id, CHAN_AUTO, SOUND_START, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
set_task(0.0, "task_revive", TASKID_REVIVE + id)
return FMRES_SUPERCEDE
}
public task_revive(taskid)
{
new id = taskid - TASKID_REVIVE
if(!is_user_alive(id))
{
failed_revive(id)
return FMRES_IGNORED
}
new body = find_dead_body(id)
if(!fm_is_valid_ent(body))
{
failed_revive(id)
return FMRES_IGNORED
}
new lucky_bastard = pev(body, pev_owner)
if(!is_user_connected(lucky_bastard))
{
failed_revive(id)
return FMRES_IGNORED
}
new lb_team = get_user_team(lucky_bastard)
if(lb_team != 1 && lb_team != 2)
{
failed_revive(id)
return FMRES_IGNORED
}
static Float:velocity[3]
pev(id, pev_velocity, velocity)
velocity[0] = 0.0
velocity[1] = 0.0
set_pev(id, pev_velocity, velocity)
new Float:gametime = get_gametime()
if(g_revive_delay[id] < gametime)
{
if(findemptyloc(body, 10.0))
{
fm_remove_entity(body)
emit_sound(id, CHAN_AUTO, SOUND_FINISHED, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
ile_ma[id]++;
if(ile_ma[id] == ilerazy[id])
off(id)
new args[2]
args[0]=lucky_bastard
if(get_user_team(id)!=get_user_team(lucky_bastard))
{
args[1]=1
new za_zbeszczeszczenie = get_pcvar_num(cvar_za_zbeszczeszczenie)
new za_hpdefiling = get_pcvar_num(cvar_za_hpdefiling)
new health = 100+cod_get_user_health(id);
new nowe_zdrowie = (get_user_health(id)+za_hpdefiling<health)? get_user_health(id)+za_hpdefiling: health;
fm_set_user_health(id, nowe_zdrowie);
cod_set_user_xp(id, cod_get_user_xp(id)+za_zbeszczeszczenie)
client_print(id, print_chat, "[COD:MW] Dostales %i doswiadczenia za zbeszczeszczenie zwlok wroga.", za_zbeszczeszczenie);
}
else
{
args[1]=0
new za_wskrzeszenie = get_pcvar_num(cvar_za_wskrzeszenie)
cod_set_user_xp(id, cod_get_user_xp(id)+za_wskrzeszenie)
client_print(id, print_chat, "[COD:MW] Dostales %i doswiadczenia za wskrzeszenie kolegi z teamu.", za_wskrzeszenie);
set_task(0.1, "task_respawn", TASKID_RESPAWN + lucky_bastard,args,2)
}
}
else
failed_revive(id)
}
else
set_task(0.1, "task_revive", TASKID_REVIVE + id)
return FMRES_IGNORED
}
public failed_revive(id)
{
msg_bartime(id, 0)
emit_sound(id, CHAN_AUTO, SOUND_FAILED, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
}
public off(id)
{
g_haskit[id] = 0
msg_bartime(id, 0)
reset_player(id)
Display_Icon(id, ICON_HIDE , "dmg_shock")
}
public task_origin(args[])
{
new id = args[0]
engfunc(EngFunc_SetOrigin, id, g_body_origin[id])
static Float:origin[3]
pev(id, pev_origin, origin)
set_pev(id, pev_zorigin, origin[2])
set_task(0.1, "task_stuck_check", TASKID_CHECKST + id,args,2)
}
stock find_dead_body(id)
{
static Float:origin[3]
pev(id, pev_origin, origin)
new ent
static classname[32]
while((ent = fm_find_ent_in_sphere(ent, origin, get_pcvar_float(cvar_revival_dis))) != 0)
{
pev(ent, pev_classname, classname, 31)
if(equali(classname, "fake_corpse") && fm_is_ent_visible(id, ent))
return ent
}
return 0
}
stock msg_bartime(id, seconds)
{
if(is_user_bot(id)||!is_user_alive(id)||!is_user_connected(id))
return
message_begin(MSG_ONE, g_msg_bartime, _, id)
write_byte(seconds)
write_byte(0)
message_end()
}
public task_respawn(args[])
{
new id = args[0]
if (!is_user_connected(id) || is_user_alive(id) || cs_get_user_team(id) == CS_TEAM_SPECTATOR) return
set_pev(id, pev_deadflag, DEAD_RESPAWNABLE)
dllfunc(DLLFunc_Think, id)
dllfunc(DLLFunc_Spawn, id)
set_pev(id, pev_iuser1, 0)
set_task(0.1, "task_check_respawn", TASKID_CHECKRE + id,args,2)
}
public task_check_respawn(args[])
{
new id = args[0]
if(pev(id, pev_iuser1))
set_task(0.1, "task_respawn", TASKID_RESPAWN + id,args,2)
else
set_task(0.1, "task_origin", TASKID_ORIGIN + id,args,2)
}
public task_stuck_check(args[])
{
new id = args[0]
static Float:origin[3]
pev(id, pev_origin, origin)
if(origin[2] == pev(id, pev_zorigin))
set_task(0.1, "task_respawn", TASKID_RESPAWN + id,args,2)
else
set_task(0.1, "task_setplayer", TASKID_SETUSER + id,args,2)
}
public task_setplayer(args[])
{
new id = args[0]
fm_set_user_health(id, get_pcvar_num(cvar_revival_health))
Display_Fade(id,seconds(2),seconds(2),0,0,0,0,255)
}
stock bool:findemptyloc(ent, Float:radius)
{
if(!fm_is_valid_ent(ent))
return false
static Float:origin[3]
pev(ent, pev_origin, origin)
origin[2] += 2.0
new owner = pev(ent, pev_owner)
new num = 0, bool:found = false
while(num <= 100)
{
if(is_hull_vacant(origin))
{
g_body_origin[owner][0] = origin[0]
g_body_origin[owner][1] = origin[1]
g_body_origin[owner][2] = origin[2]
found = true
break
}
else
{
origin[0] += random_float(-radius, radius)
origin[1] += random_float(-radius, radius)
origin[2] += random_float(-radius, radius)
num++
}
}
return found
}
stock bool:is_hull_vacant(const Float:origin[3])
{
new tr = 0
engfunc(EngFunc_TraceHull, origin, origin, 0, HULL_HUMAN, 0, tr)
if(!get_tr2(tr, TR_StartSolid) && !get_tr2(tr, TR_AllSolid) && get_tr2(tr, TR_InOpen))
return true
return false
}
stock Display_Fade(id,duration,holdtime,fadetype,red,green,blue,alpha)
{
message_begin(MSG_ONE, g_msg_screenfade,{0,0,0},id)
write_short(duration)
write_short(holdtime)
write_short(fadetype)
write_byte(red)
write_byte(green)
write_byte(blue)
write_byte(alpha)
message_end()
}
stock Display_Icon(id ,enable ,name[])
{
if(!pev_valid(id) || is_user_bot(id))
return PLUGIN_HANDLED
message_begin(MSG_ONE, g_msg_statusicon, {0,0,0}, id)
write_byte(enable)
write_string(name)
write_byte(42)
write_byte(42)
write_byte(255)
message_end()
return PLUGIN_CONTINUE
}
public message_clcorpse()
return PLUGIN_HANDLED
// Biblioteki, ich nie ruszamy, znajdują się w każdym pluginie, nie tylko w klasach i classach
#include <amxmodx>
#include <amxmisc>
#include <codmod>




