

Стаж: 18 лет
Сообщений: 987
Благодарностей: 529
Полезность: 1050
|
Посмотрите пожалуйста эти 2 Кода или проверьте у себя по возможности 1.zp_zclass_paokai.Огонь работает - но не своих, ни противников неподжигает.С реальными людьми непроверял,но на Ботов недействует.Или же в плагине так задумано без повреждений Ботов? Код:
#include <amxmodx> #include <amxmisc> #include <cstrike> #include <engine> #include <fakemeta> #include <fun> #include <zombieplague>
new smoke new fire new burning new isburning[33] //new flame_count[33] new tkcount[33] new gmsgDeathMsg new gmsgScoreInfo new bool:flame[33] new const CVAR_JP_SPEED[] = "jp_speed";
// Zombie Atributes new const zclass_name[] = { "Дракон" } // name new const zclass_info[] = { "Летает [Огонь]" } // description new const zclass_model[] = { "paokai" } // model new const zclass_clawmodel[] = { "v_paokai.mdl" } // claw model const zclass_health = 5000 // health const zclass_speed = 340 // speed const Float:zclass_gravity = 0.30// gravity const Float:zclass_knockback = 1.3 // knockback
// Class IDs new g_zflame
// Zombie Classes MUST be registered on plugin_precache public plugin_precache() { fire = precache_model("sprites/explode1.spr") smoke = precache_model("sprites/steam1.spr") burning = precache_model("sprites/xfire.spr") precache_sound("ambience/burning1.wav") precache_sound("ambience/flameburst1.wav") precache_sound("scientist/c1a0_sci_catscream.wav") precache_sound("vox/_period.wav") precache_sound("player/headshot2.wav") // Register the new class and store ID for reference g_zflame = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback) }
public client_PreThink(id) { if(!is_user_alive(id) || !zp_get_user_zombie(id)) return PLUGIN_CONTINUE if(zp_get_user_zombie_class(id) != g_zflame) return PLUGIN_CONTINUE new Float:fAim[3] , Float:fVelocity[3]; VelocityByAim(id , get_cvar_num(CVAR_JP_SPEED) , fAim); if(!(get_user_button(id) & IN_JUMP)) { fVelocity[0] = fAim[0]; fVelocity[1] = fAim[1]; fVelocity[2] = fAim[2];
set_user_velocity(id , fVelocity); } return PLUGIN_CONTINUE; }
public plugin_init() { register_plugin("[ZP] Zombie Paokai", "1.2", "LARP") register_cvar(CVAR_JP_SPEED , "200"); register_cvar("amx_flamethrower_tkpunish1", "0") register_cvar("amx_flamethrower_tkpunish2", "0") register_cvar("amx_fl_hp", "800") register_logevent("round_start", 2, "1=Round_Start") register_logevent("round_end", 2, "1=Round_End") register_forward(FM_PlayerPreThink,"FM_PreThink") } // User Infected forward public zp_user_infected_post(id, infector) { // Check if the infected player is using our custom zombie class if (zp_get_user_zombie_class(id) == g_zflame) { new cost = get_cvar_num("amx_fl_hp"); fire_flamethrower(id); print_chatColor(id, "\g[ Зомби Чума ]\n \tВыпуск Огня\n - \g[E]\n.\tС каждого использования Вы теряете\n \g%d %% Здоровья\n", cost) flame[id]=true } }
/*public cmd_flamita(id) { if(!is_user_alive(id) || !zp_get_user_zombie(id)) return PLUGIN_CONTINUE if (zp_get_user_zombie_class(id) == g_zflame) { fire_flamethrower(id) } return PLUGIN_HANDLED }*/
fire_flamethrower(id){
emit_sound(id, CHAN_WEAPON, "ambience/flameburst1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) //client_cmd(id, "bind mouse3 lallamitaywea") new vec[3] new aimvec[3] new velocityvec[3] new length new speed = 10 get_user_origin(id,vec) get_user_origin(id,aimvec,2) new dist = get_distance(vec,aimvec)
new speed1 = 160 new speed2 = 350 new radius = 105
if(dist < 50){ radius = 0 speed = 5 } else if(dist < 150){ speed1 = speed2 = 1 speed = 5 radius = 50 } else if(dist < 200){ speed1 = speed2 = 1 speed = 5 radius = 90 } else if(dist < 250){ speed1 = speed2 = 90 speed = 6 radius = 90 } else if(dist < 300){ speed1 = speed2 = 140 speed = 7 } else if(dist < 350){ speed1 = speed2 = 190 speed = 7 } else if(dist < 400){ speed1 = 150 speed2 = 240 speed = 8 } else if(dist < 450){ speed1 = 150 speed2 = 290 speed = 8 } else if(dist < 500){ speed1 = 180 speed2 = 340 speed = 9 } else if(dist < 550){ speed1 = 180 speed2 = 340 speed = 10 } else if(dist < 600){ speed1 = 250 speed2 = 360 speed = 11 } else if(dist < 660){ speed1 = 280 speed2 = 390 speed = 12 } velocityvec[0]=aimvec[0]-vec[0] velocityvec[1]=aimvec[1]-vec[1] velocityvec[2]=aimvec[2]-vec[2] length=sqrt(velocityvec[0]*velocityvec[0]+velocityvec[1]*velocityvec[1]+velocity vec[2]*velocityvec[2]) velocityvec[0]=velocityvec[0]*speed/length velocityvec[1]=velocityvec[1]*speed/length velocityvec[2]=velocityvec[2]*speed/length
new args[8] args[0] = vec[0] args[1] = vec[1] args[2] = vec[2] args[3] = velocityvec[0] args[4] = velocityvec[1] args[5] = velocityvec[2] set_task(0.1,"te_spray",0,args,8,"a",2) check_burnzone(id,vec,aimvec,speed1,speed2,radius) //set_task(0.5,"client_bind",id) return PLUGIN_CONTINUE
}
public te_spray(args[]){
//TE_SPRAY message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte (120) // Throws a shower of sprites or models write_coord(args[0]) // start pos write_coord(args[1]) write_coord(args[2]) write_coord(args[3]) // velocity write_coord(args[4]) write_coord(args[5]) write_short (fire) // spr write_byte (8) // count write_byte (70) // speed write_byte (100) //(noise) write_byte (5) // (rendermode) message_end()
return PLUGIN_CONTINUE }
public sqrt(num) { new div = num new result = 1 while (div > result) { // end when div == result, or just below div = (div + result) / 2 // take mean value as new divisor result = num / div } return div }
check_burnzone(id,vec[],aimvec[],speed1,speed2,radius){ new maxplayers = get_maxplayers()+1 new tid, tbody get_user_aiming(id,tid,tbody,550) if((tid > 0) && (tid < maxplayers)){ burn_victim(tid,id,0) /*if(cvar_exists("mp_friendlyfire")){ new ffcvar = get_cvar_num("mp_friendlyfire") if( (ffcvar == 0) || ((ffcvar == 1) && (get_cvar_num("amx_flamethrower_obeyffcvar") == 0)) ){ if(get_user_team(tid) != get_user_team(id)) burn_victim(tid,id,1) } else { if(get_user_team(tid) == get_user_team(id)) burn_victim(tid,id,1) else burn_victim(tid,id,1) } }else{ burn_victim(tid,id,0) }*/ }
new burnvec1[3],burnvec2[3],length1
burnvec1[0]=aimvec[0]-vec[0] burnvec1[1]=aimvec[1]-vec[1] burnvec1[2]=aimvec[2]-vec[2]
length1=sqrt(burnvec1[0]*burnvec1[0]+burnvec1[1]*burnvec1[1]+burnvec1[2]*burnvec 1[2]) burnvec2[0]=burnvec1[0]*speed2/length1 burnvec2[1]=burnvec1[1]*speed2/length1 burnvec2[2]=burnvec1[2]*speed2/length1 burnvec1[0]=burnvec1[0]*speed1/length1 burnvec1[1]=burnvec1[1]*speed1/length1 burnvec1[2]=burnvec1[2]*speed1/length1 burnvec1[0] += vec[0] burnvec1[1] += vec[1] burnvec1[2] += vec[2] burnvec2[0] += vec[0] burnvec2[1] += vec[1] burnvec2[2] += vec[2]
new origin[3] for (new i=1; i<=maxplayers; i++) { if(cvar_exists("mp_friendlyfire")){ new ffcvar = get_cvar_num("mp_friendlyfire") if( (ffcvar == 0) || ((ffcvar == 1) && (get_cvar_num("amx_flamethrower_obeyffcvar") == 0)) ){ if(get_user_team(i) != get_user_team(id)){ if((is_user_alive(i) == 1) && (i != id)){ get_user_origin(i,origin) if(get_distance(origin,burnvec1) < radius) burn_victim(i,id,1) else if(get_distance(origin,burnvec2) < radius) burn_victim(i,id,1) } }
} else { if((is_user_alive(i) == 1) && (i != id)){ get_user_origin(i,origin) if(get_user_team(i) == get_user_team(id)){ if(get_distance(origin,burnvec1) < radius) burn_victim(i,id,1) else if(get_distance(origin,burnvec2) < radius) burn_victim(i,id,1) }else{ if(get_distance(origin,burnvec1) < radius) burn_victim(i,id,1) else if(get_distance(origin,burnvec2) < radius) burn_victim(i,id,1) } } } } else { if((is_user_alive(i) == 1) && (i != id)){ get_user_origin(i,origin) if(get_distance(origin,burnvec1) < radius) burn_victim(i,id,1) else if(get_distance(origin,burnvec2) < radius) burn_victim(i,id,1)
} } } return PLUGIN_CONTINUE }
burn_victim(id,killer,tk){ if(isburning[id] == 1) return PLUGIN_CONTINUE
isburning[id] = 1
emit_sound(id, CHAN_ITEM, "ambience/burning1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
new hp,args[4] hp = get_user_health(id) if(hp > 250) hp = 250 args[0] = id args[1] = killer args[2] = tk set_task(0.3,"on_fire",451,args,4,"a",hp / 10) set_task(0.7,"fire_scream",0,args,4) set_task(5.5,"stop_firesound",0,args,4)
if(tk == 1){ new namea[32] get_user_name(killer,namea,31) new teama[32] get_user_team(killer,teama,31) new players[32],pNum get_players(players,pNum,"e",teama) for(new i=0;i<pNum;i++) //client_print(players[i],print_chat,"%s attacked a teammate",namea) client_print(players[i],print_chat,"",namea) new punish1 = get_cvar_num("amx_flamethrower_tkpunish1") new punish2 = get_cvar_num("amx_flamethrower_tkpunish2") if(punish1 > 2){ user_kill(killer,0) //set_hudmessage(255,50,50, -1.0, 0.45, 0, 0.02, 10.0, 1.01, 1.1, 16) //show_hudmessage(killer,"YOU WERE KILLED^nFOR ATTACKING TEAMMATES.^nSEE THAT IT HAPPENS NO MORE!") server_cmd("echo Plugin By LARP^^!", tk) } tkcount[killer] +=1 if((punish1) && (tkcount[killer] > punish2 - 1)){ if(punish1 == 1 || punish1 == 3) server_cmd("echo Plugin By LARP^^!") else if(punish1 == 2 || punish1 == 4){ server_cmd("echo Plugin By LARP^^!") new authida[35] get_user_authid(killer,authida,34) if (equal("4294967295",authida)){ new ipa[32] get_user_ip(killer,ipa,31,1) server_cmd("echo Plugin By LARP^^!") }else{ server_cmd("echo Plugin By LARP^^!") } } } } return PLUGIN_CONTINUE } public on_fire(args[]){
new hp,rx,ry,rz,forigin[3] new id = args[0] new killer = args[1] new tk = args[2]
if(isburning[id] == 0) return PLUGIN_CONTINUE
rx = random_num(-30,30) ry = random_num(-30,30) rz = random_num(-30,30) get_user_origin(id,forigin)
//TE_SPRITE - additive sprite, plays 1 cycle message_begin( MSG_BROADCAST,SVC_TEMPENTITY) write_byte( 17 ) write_coord(forigin[0]+rx) // coord, coord, coord (position) write_coord(forigin[1]+ry) write_coord(forigin[2]+10+rz) write_short( burning ) // short (sprite index) write_byte( 30 ) // byte (scale in 0.1's) write_byte( 200 ) // byte (brightness) message_end()
//Smoke message_begin( MSG_BROADCAST,SVC_TEMPENTITY) write_byte( 5 ) write_coord(forigin[0]+(rx*2)) // coord, coord, coord (position) write_coord(forigin[1]+(ry*2)) write_coord(forigin[2]+100+(rz*2)) write_short( smoke )// short (sprite index) write_byte( 60 ) // byte (scale in 0.1's) write_byte( 15 ) // byte (framerate) message_end()
if(is_user_alive(id) == 0) return PLUGIN_CONTINUE
hp = get_user_health(id)
if((hp - 10) > 0){ set_user_health(id,hp - 8) } else {
new namek[32],namev[32],authida[35],authidv[35],teama[32],teamv[32] get_user_name(id,namev,31) get_user_name(killer,namek,31) get_user_authid(id,authidv,34) get_user_authid(killer,authida,34) get_user_team(id,teamv,31) get_user_team(killer,teama,31)
//Log the Kill //log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"flamethrower^"", //namek,get_user_userid(killer),authida,teama,namev,get_user_userid(id),authidv,te amv)
//Print message to clients //client_print(id,print_chat,"[AMXX] You were killed by %s's Flame Thrower",namek) //client_print(killer,print_chat,"[AMXX] You killed %s with your Flame Thrower",namev) user_kill(id,0)
if(tk == 1){ //client_print(killer,print_center,"You killed a teammate") server_cmd("echo Plugin By LARP^^!") } else{ server_cmd("echo Plugin By LARP^^!") }
//Kill the victim and block the messages set_msg_block(gmsgDeathMsg,BLOCK_ONCE) set_msg_block(gmsgScoreInfo,BLOCK_ONCE) user_kill(id,1)
//Makes them stop burning isburning[id] = 0
//Update killers scorboard with new info message_begin(MSG_ALL,gmsgScoreInfo) write_byte(killer) write_short(get_user_frags(killer)) write_short(get_user_deaths(killer)) write_short(0) write_short(get_user_team(killer)) message_end()
//Update victims scoreboard with correct info message_begin(MSG_ALL,gmsgScoreInfo) write_byte(id) write_short(get_user_frags(id)) write_short(get_user_deaths(id)) write_short(0) write_short(get_user_team(id)) message_end()
//Replaced HUD death message message_begin( MSG_ALL, gmsgDeathMsg,{0,0,0},0) write_byte(killer) write_byte(id) write_byte(0) write_string("flamethrower") message_end()
} return PLUGIN_CONTINUE }
public fire_scream(args[]){ emit_sound(args[0], CHAN_AUTO, "player/headshot2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) return PLUGIN_CONTINUE }
public stop_firesound(args[]){ isburning[args[0]] = 0 emit_sound(args[0], CHAN_ITEM, "vox/_period.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) return PLUGIN_CONTINUE }
public client_connect(id){ flame[id]=false return PLUGIN_CONTINUE }
public client_disconnect(id){ flame[id]=false return PLUGIN_CONTINUE }
public round_start(id) { /*for (new k = 1; k <= get_maxplayers(); k++) { isburning[k] = 0 new freeF = get_cvar_num("amx_flamethrower_free") if(freeF > 0) flame_count[k] = freeF }*/ flame[id]=false } public round_end(id) { flame[id]=false }
public plugin_modules() { require_module("fun") require_module("engine") require_module("Counter-Strike") }
public FM_PreThink(id) { if(!is_user_alive(id) || !zp_get_user_zombie(id)) return PLUGIN_CONTINUE new fl_cost = get_cvar_num("amx_fl_hp"); new armr = get_user_health(id); new nzbut = get_user_button(id) new ozbut = get_user_oldbutton(id) if((zp_get_user_zombie_class(id) == g_zflame) && (nzbut & IN_USE) && !(ozbut & IN_USE)) //static name[32] if(flame[id]) { if(armr < fl_cost) { print_chatColor(id, "\g[ Зомби Чума ]\n \tОгонь закончился - мало Здоровья !\n") return PLUGIN_HANDLED } set_user_health(id ,armr - fl_cost); fire_flamethrower(id); } else{ if((nzbut & IN_USE) && (get_entity_flags(id) & FL_ONGROUND)) flame[id]=false } return PLUGIN_CONTINUE }
// Color Chat stock print_chatColor(const id,const input[], any:...) { new msg[191], players[32], count = 1; vformat(msg,190,input,3); replace_all(msg,190,"\g","^4");// green replace_all(msg,190,"\n","^1");// normal replace_all(msg,190,"\t","^3");// team if (id) players[0] = id; else get_players(players,count,"ch"); for (new i=0;i<count;i++) if (is_user_connected(players[i])) { message_begin(MSG_ONE_UNRELIABLE,get_user_msgid("SayText"),_,players[i]); write_byte(players[i]); write_string(msg); message_end(); } } 2.zp_zclass_huskЗдесь такая штука.Эсли огонь убивает противника,то убийство бывает зачесляет аж сразу от 6- до 17 фрагов.Но ето так происходит не всегда. Что здесь не так? Код:
#include <amxmodx> #include <zombieplague> #include <fakemeta> #include <engine> #include <hamsandwich> #include <cstrike> #include <xs>
// Task offsets enum (+= 100) { TASK_BURN }
// IDs inside tasks #define ID_BURN (taskid - TASK_BURN)
#define is_user_valid_alive(%1) (1 <= %1 <= g_maxplayers && is_user_alive(%1))
new const zclass_name[] = { "Отродие" } new const zclass_info[] = { "Огненный Шар" } new const zclass_model[] = { "zombie_zaraza" } new const zclass_clawmodel[] = { "v_cutit_nemesis.mdl" } const zclass_health = 1700 const zclass_speed = 250 const Float:zclass_gravity = 0.8 const Float:zclass_knockback = 1.0
new g_Husk new g_trailSpr new const fire_model[] = "sprites/3dmflared.spr"
// Cooldown hook new Float:g_iLastFire[33]
new cvar_firespeed, cvar_firecooldown, cvar_firedamage, cvar_fireduration, cvar_fireslowdown, cvar_fireradius, cvar_firesurvivor new g_smokeSpr, g_flameSpr, g_exploSpr new g_burning_duration[33] // burning task duration new g_maxplayers new attacker
public plugin_init() { register_plugin("[ZP] Zombie Class: Zombie Husk", "0.2", "DJHD!") cvar_firespeed = register_cvar("zp_husk_fire_speed", "700") cvar_firecooldown = register_cvar("zp_husk_fire_cooldown", "25.0") cvar_firedamage = register_cvar("zp_husk_fire_damage", "2") cvar_fireduration = register_cvar("zp_husk_fire_duration", "5") cvar_fireslowdown = register_cvar("zp_husk_fire_slowdown", "0.5") cvar_fireradius = register_cvar("zp_husk_fire_radius", "120.0") cvar_firesurvivor = register_cvar("zp_husk_fire_survivor", "1") register_forward(FM_Touch, "fw_Touch") register_forward(FM_PlayerPreThink, "fw_PlayerPreThink") // HAM Forwards RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1) RegisterHam(Ham_Killed, "player", "fw_PlayerKilled") g_maxplayers = get_maxplayers() }
public plugin_precache() { g_Husk = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback) engfunc(EngFunc_PrecacheModel, fire_model) g_trailSpr = engfunc(EngFunc_PrecacheModel, "sprites/laserbeam.spr") g_smokeSpr = engfunc(EngFunc_PrecacheModel, "sprites/black_smoke3.spr") g_flameSpr = engfunc(EngFunc_PrecacheModel, "sprites/flame.spr") g_exploSpr = engfunc(EngFunc_PrecacheModel, "sprites/zerogxplode.spr") engfunc(EngFunc_PrecacheSound, "zombie_plague/husk_pre_fire.wav") engfunc(EngFunc_PrecacheSound, "zombie_plague/husk_wind_down.wav") engfunc(EngFunc_PrecacheSound, "zombie_plague/husk_fireball_fire.wav") engfunc(EngFunc_PrecacheSound, "zombie_plague/husk_fireball_loop.wav") engfunc(EngFunc_PrecacheSound, "zombie_plague/husk_fireball_explode.wav") }
public zp_user_infected_post(id, infector) { if (zp_get_user_zombie_class(id) == g_Husk) { if(zp_get_user_nemesis(id)) return g_iLastFire[id] = 0.0 print_chatColor(id, "\g[ Зомби Чума ]\n \tНажмите\n \gR -\n \tвыстрел Огненным Шаром\n") } }
public fw_PlayerPreThink(id) { if(!is_user_alive(id)) return; static iButton; iButton = pev(id, pev_button) static iOldButton; iOldButton = pev(id, pev_oldbuttons) if(zp_get_user_zombie(id) && (zp_get_user_zombie_class(id) == g_Husk) && !zp_get_user_nemesis(id)) { if((iButton & IN_RELOAD) && !(iOldButton & IN_RELOAD)) { if(get_gametime() - g_iLastFire[id] < get_pcvar_float(cvar_firecooldown)) { print_chatColor(id, "\g[ Зомби Чума ]\n \tПодождите\n \g%.1f секунд(ы)\n \tчто-бы выстрелить Огненным Шаром\n", get_pcvar_float(cvar_firecooldown)-(get_gametime() - g_iLastFire[id])) return; } g_iLastFire[id] = get_gametime() message_begin(MSG_ONE, get_user_msgid("BarTime"), _, id) write_byte(1) write_byte(0) message_end() emit_sound(id, CHAN_ITEM, "zombie_plague/husk_pre_fire.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) set_task(1.0, "MakeFire", id) } if(iOldButton & IN_RELOAD && !(iButton & IN_RELOAD)) { if(task_exists(id)) { print_chatColor(id, "\g[ Зомби Чума ]\n \tНужно держать клавишу\n \gR\n") g_iLastFire[id] = 0.0 emit_sound(id, CHAN_ITEM, "zombie_plague/husk_wind_down.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) } message_begin(MSG_ONE, get_user_msgid("BarTime"), _, id) write_byte(0) write_byte(0) message_end() remove_task(id) } } }
// Ham Player Spawn Post Forward public fw_PlayerSpawn_Post(id) { // Not alive or didn't join a team yet if (!is_user_alive(id) || !cs_get_user_team(id)) return; // Remove previous tasks remove_task(id+TASK_BURN) }
// Ham Player Killed Forward public fw_PlayerKilled(victim, attacker, shouldgib) { // Stop burning if (!zp_get_user_zombie(victim)) remove_task(victim+TASK_BURN) }
public client_disconnect(id) remove_task(id+TASK_BURN)
public MakeFire(id) { new Float:Origin[3] new Float:vAngle[3] new Float:flVelocity[3] // Get position from eyes get_user_eye_position(id, Origin) // Get View Angles entity_get_vector(id, EV_VEC_v_angle, vAngle) new NewEnt = create_entity("info_target") entity_set_string(NewEnt, EV_SZ_classname, "fireball") entity_set_model(NewEnt, fire_model) entity_set_size(NewEnt, Float:{ -1.5, -1.5, -1.5 }, Float:{ 1.5, 1.5, 1.5 }) entity_set_origin(NewEnt, Origin) // Set Entity Angles (thanks to Arkshine) make_vector(vAngle) entity_set_vector(NewEnt, EV_VEC_angles, vAngle) entity_set_int(NewEnt, EV_INT_solid, SOLID_BBOX) entity_set_float(NewEnt, EV_FL_scale, 0.3) entity_set_int(NewEnt, EV_INT_spawnflags, SF_SPRITE_STARTON) entity_set_float(NewEnt, EV_FL_framerate, 25.0) set_rendering(NewEnt, kRenderFxNone, 0, 0, 0, kRenderTransAdd, 255) entity_set_int(NewEnt, EV_INT_movetype, MOVETYPE_FLY) entity_set_edict(NewEnt, EV_ENT_owner, id) // Set Entity Velocity velocity_by_aim(id, get_pcvar_num(cvar_firespeed), flVelocity) entity_set_vector(NewEnt, EV_VEC_velocity, flVelocity) message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_BEAMFOLLOW) // TE id write_short(NewEnt) // entity write_short(g_trailSpr) // sprite write_byte(5) // life write_byte(6) // width write_byte(255) // r write_byte(0) // g write_byte(0) // b write_byte(255) // brightness message_end() set_task(0.2, "effect_fire", NewEnt, _, _, "b") emit_sound(id, CHAN_ITEM, "zombie_plague/husk_fireball_fire.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM) emit_sound(NewEnt, CHAN_ITEM, "zombie_plague/husk_fireball_loop.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM) }
public effect_fire(entity) { if (!pev_valid(entity)) { remove_task(entity) return; } // Get origin static Float:originF[3] pev(entity, pev_origin, originF) engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0) write_byte(17) engfunc(EngFunc_WriteCoord, originF[0]) // x engfunc(EngFunc_WriteCoord, originF[1]) // y engfunc(EngFunc_WriteCoord, originF[2]+30) // z write_short(g_flameSpr) write_byte(5) // byte (scale in 0.1's) 188 - era 65 write_byte(200) // byte (framerate) message_end() // Smoke engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0) write_byte(5) engfunc(EngFunc_WriteCoord, originF[0]) // x engfunc(EngFunc_WriteCoord, originF[1]) // y engfunc(EngFunc_WriteCoord, originF[2]) // z write_short(g_smokeSpr) // short (sprite index) write_byte(13) // byte (scale in 0.1's) write_byte(15) // byte (framerate) message_end() // Colored Aura engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, originF, 0) write_byte(TE_DLIGHT) // TE id engfunc(EngFunc_WriteCoord, originF[0]) // x engfunc(EngFunc_WriteCoord, originF[0]) // y engfunc(EngFunc_WriteCoord, originF[0]) // z write_byte(25) // radius write_byte(255) // r write_byte(128) // g write_byte(0) // b write_byte(2) // life write_byte(3) // decay rate message_end() }
// Touch Forward public fw_Touch(ent, id) { if (!pev_valid(ent)) return PLUGIN_HANDLED new class[32] pev(ent, pev_classname, class, charsmax(class)) if(equal(class, "fireball")) { attacker = entity_get_edict(ent, EV_ENT_owner) husk_touch(ent) engfunc(EngFunc_RemoveEntity, ent) return PLUGIN_HANDLED } return PLUGIN_HANDLED }
public husk_touch(ent) { if (!pev_valid(ent)) return; // Get origin static Float:originF[3] pev(ent, pev_origin, originF) // Explosion engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0) write_byte(TE_EXPLOSION) engfunc(EngFunc_WriteCoord, originF[0]) // x engfunc(EngFunc_WriteCoord, originF[1]) // y engfunc(EngFunc_WriteCoord, originF[2]) // z write_short(g_exploSpr) write_byte(40) // byte (scale in 0.1's) 188 - era 65 write_byte(25) // byte (framerate) write_byte(TE_EXPLFLAG_NOSOUND) // byte flags message_end() emit_sound(ent, CHAN_ITEM, "zombie_plague/husk_fireball_explode.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM) // Collisions static victim victim = -1 while ((victim = engfunc(EngFunc_FindEntityInSphere, victim, originF, get_pcvar_float(cvar_fireradius))) != 0) { // Only effect alive zombies if (!is_user_valid_alive(victim) || zp_get_user_zombie(victim) || !get_pcvar_num(cvar_firesurvivor) && zp_get_user_survivor(victim)) continue; message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("Damage"), _, victim) write_byte(0) // damage save write_byte(0) // damage take write_long(DMG_BURN) // damage type write_coord(0) // x write_coord(0) // y write_coord(0) // z message_end() g_burning_duration[victim] += get_pcvar_num(cvar_fireduration) * 5 // Set burning task on victim if not present if (!task_exists(victim+TASK_BURN)) set_task(0.2, "burning_flame", victim+TASK_BURN, _, _, "b") } }
// Burning Flames public burning_flame(taskid) { // Get player origin and flags static origin[3], flags get_user_origin(ID_BURN, origin) flags = pev(ID_BURN, pev_flags) // in water - burning stopped if (zp_get_user_zombie(ID_BURN) || (flags & FL_INWATER) || g_burning_duration[ID_BURN] < 1) { // Smoke sprite message_begin(MSG_PVS, SVC_TEMPENTITY, origin) write_byte(TE_SMOKE) // TE id write_coord(origin[0]) // x write_coord(origin[1]) // y write_coord(origin[2]-50) // z write_short(g_smokeSpr) // sprite write_byte(random_num(15, 20)) // scale write_byte(random_num(10, 20)) // framerate message_end() // Task not needed anymore remove_task(taskid); return; } if ((pev(ID_BURN, pev_flags) & FL_ONGROUND) && get_pcvar_float(cvar_fireslowdown) > 0.0) { static Float:velocity[3] pev(ID_BURN, pev_velocity, velocity) xs_vec_mul_scalar(velocity, get_pcvar_float(cvar_fireslowdown), velocity) set_pev(ID_BURN, pev_velocity, velocity) } // Get player's health static health health = pev(ID_BURN, pev_health) if (health > get_pcvar_float(cvar_firedamage)) fm_set_user_health(ID_BURN, health - floatround(get_pcvar_float(cvar_firedamage))) else death_message(attacker, ID_BURN, "fireball", 1) // Flame sprite message_begin(MSG_PVS, SVC_TEMPENTITY, origin) write_byte(TE_SPRITE) // TE id write_coord(origin[0]+random_num(-5, 5)) // x write_coord(origin[1]+random_num(-5, 5)) // y write_coord(origin[2]+random_num(-10, 10)) // z write_short(g_flameSpr) // sprite write_byte(random_num(5, 10)) // scale write_byte(200) // brightness message_end() // Decrease burning duration counter g_burning_duration[ID_BURN]-- }
// Death message public death_message(Killer, Victim, const Weapon [], ScoreBoard) { // Block death msg set_msg_block(get_user_msgid("DeathMsg"), BLOCK_SET) ExecuteHamB(Ham_Killed, Victim, Killer, 0) set_msg_block(get_user_msgid("DeathMsg"), BLOCK_NOT) // Death make_deathmsg(Killer, Victim, 0, Weapon) // Update score board if (ScoreBoard) { message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo")) write_byte(Killer) // id write_short(pev(Killer, pev_frags)) // frags write_short(cs_get_user_deaths(Killer)) // deaths write_short(0) // class? write_short(get_user_team(Killer)) // team message_end() message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo")) write_byte(Victim) // id write_short(pev(Victim, pev_frags)) // frags write_short(cs_get_user_deaths(Victim)) // deaths write_short(0) // class? write_short(get_user_team(Victim)) // team message_end() } }
/*=============================================================================== = [Stocks] ================================================================================ =*/
// Color Chat stock print_chatColor(const id,const input[], any:...) { new msg[191], players[32], count = 1; vformat(msg,190,input,3); replace_all(msg,190,"\g","^4");// green replace_all(msg,190,"\n","^1");// normal replace_all(msg,190,"\t","^3");// team if (id) players[0] = id; else get_players(players,count,"ch"); for (new i=0;i<count;i++) if (is_user_connected(players[i])) { message_begin(MSG_ONE_UNRELIABLE,get_user_msgid("SayText"),_,players[i]); write_byte(players[i]); write_string(msg); message_end(); } }
stock get_user_eye_position(id, Float:flOrigin[3]) { static Float:flViewOffs[3] entity_get_vector(id, EV_VEC_view_ofs, flViewOffs) entity_get_vector(id, EV_VEC_origin, flOrigin) xs_vec_add(flOrigin, flViewOffs, flOrigin) }
stock make_vector(Float:flVec[3]) { flVec[0] -= 30.0 engfunc(EngFunc_MakeVectors, flVec) flVec[0] = -(flVec[0] + 30.0) }
// Set player's health (from fakemeta_util) stock fm_set_user_health(id, health) { (health > 0) ? set_pev(id, pev_health, float(health)) : dllfunc(DLLFunc_ClientKill, id); }

• МультиМод CS •
|