Skocz do zawartości

  • Zaloguj korzystając z Facebooka Zaloguj korzystając z Twittera Zaloguj przez Steam Zaloguj poprzez Google      Logowanie »   
  • Rejestracja

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.

  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Admin ESP [SZUKAM]


  • Zamknięty Temat jest zamknięty
1 odpowiedź w tym temacie

#1 Fenix666

    Zaawansowany

  • Użytkownik

Reputacja: 29
Życzliwy

  • Postów:96
  • Lokalizacja:Tu i Tam
Offline

Napisano 01.09.2009 14:33

Witam ,




Poszukuje pluginu Admin ESP
Znalazlem jedna strone ale tam bylo podane tylko amxx , mi jest potrzebny amxx i sma


Jezeli ktos posiada sma niech doda ja sobie skompliku
I cgvary jak macie




Dziekuje , Czekam na pomoc (Pomogl czeka)
  • +
  • -
  • 0

#2 Grycuk

    Zaawansowany

  • Użytkownik

Reputacja: 16
Początkujący

  • Postów:113
  • GG:
  • Steam:steam
  • Imię:Kamil
  • Lokalizacja:Minsk Mazowiecki
Offline

Napisano 01.09.2009 14:45

nie wiem po co ten kod ale łap
/* AMX Mod X - Script

*

*	Admin Spectator ESP v1.3

*	Copyright (C) 2006 by KoST

*

*	this plugin along with its compiled version can de downloaded here:

*	http://www.amxmodx.org/forums/viewtopic.php?t=24787	

*	

*

*  This program is free software; you can redistribute it and/or

*  modify it under the terms of the GNU General Public License

*  as published by the Free Software Foundation; either version 2

*  of the License, or (at your option) any later version.

*

*  This program is distributed in the hope that it will be useful,

*  but WITHOUT ANY WARRANTY; without even the implied warranty of

*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

*  GNU General Public License for more details.

*

*  You should have received a copy of the GNU General Public License

*  along with this program; if not, write to the Free Software

*  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

*  or download here: http://www.gnu.org/licenses/gpl.txt

*

*  In addition, as a special exception, the author gives permission to

*  link the code of this program with the Half-Life Game Engine ("HL

*  Engine") and Modified Game Libraries ("MODs") developed by Valve,

*  L.L.C ("Valve"). You must obey the GNU General Public License in all

*  respects for all of the code used other than the HL Engine and MODs

*  from Valve. If you modify this file, you may extend this exception

*  to your version of the file, but you are not obligated to do so. If

*  you do not wish to do so, delete this exception statement from your

*  version.

*/

//--------------------------------------------------------------------------------------------------



#include <amxmodx>

#include <engine>



// Here you can adjust the required admin level if needed

// there is a list of all levels http://www.amxmodx.org/funcwiki.php?go=module&id=1#const_admin



#define REQUIRED_ADMIN_LEVEL ADMIN_KICK



//--------------------------------------------------------------------------------------------------



#define PLUGIN "Admin Spectator ESP"

#define VERSION "1.3"

#define AUTHOR "KoST"



enum {

	ESP_ON=0,

	ESP_LINE,

	ESP_BOX,

	ESP_NAME,

	ESP_HEALTH_ARMOR,

	ESP_WEAPON,

	ESP_CLIP_AMMO,

	ESP_DISTANCE,

	ESP_TEAM_MATES,

	ESP_AIM_VEC,

}



new bool:admin[33] // is/is not admin

new bool:first_person[33] //is/is not in first person view

new spec[33] // spec[player_id]=the players id if

new laser // precached model

new max_players // if you start hlds with +maxplayers 20 for example this would be 20

new team_colors[4][3]={{0,0,0},{150,0,0},{0,0,150},{0,150,0}} 

new esp_colors[5][3]={{0,255,0},{100,60,60},{60,60,100},{255,0,255},{128,128,128}}

new bool:ducking[33] //is/is not player ducked

new damage_done_to[33] //damage_done_to[p1]=p2 // p1 has hit p2

new view_target[33] // attackers victim

new bool:admin_options[33][10] // individual esp options

new bool:is_in_menu[33] // has esp menu open



// weapon strings

new weapons[30][10]={"None","P228","Scout","HE","XM1014","C4",

	"MAC-10","AUG","Smoke","Elite","Fiveseven",

	"UMP45","SIG550","Galil","Famas","USP",

	"Glock","AWP","MP5","M249","M3","M4A1",

	"TMP","G3SG1","Flash","Deagle","SG552",

	"AK47","Knife","P90"}



public plugin_precache(){

	laser=precache_model("sprites/laserbeam.spr") 

}



public plugin_init(){

	register_plugin(PLUGIN,VERSION,AUTHOR)

	server_print("^n^t%s v%s, Copyright (C) 2006 by %s^n",PLUGIN,VERSION,AUTHOR)

	

	// cvars

	register_cvar("esp","1")

	register_cvar("esp_timer","0.3")

	register_cvar("esp_allow_all","0")

	register_cvar("esp_disable_default_keys","0")

	register_cvar("aesp_version",VERSION,FCVAR_SERVER|FCVAR_UNLOGGED|FCVAR_SPONLY)

	

	// client commands

	register_clcmd("esp_menu","cmd_esp_menu",REQUIRED_ADMIN_LEVEL,"Shows ESP Menu")

	register_clcmd("esp_toggle","cmd_esp_toggle",REQUIRED_ADMIN_LEVEL,"Toggle ESP on/off")

	register_clcmd("say /esp_menu","cmd_esp_menu",REQUIRED_ADMIN_LEVEL,"Shows ESP Menu")

	register_clcmd("say /esp_toggle","cmd_esp_toggle",REQUIRED_ADMIN_LEVEL,"Toggle ESP on/off")

	register_clcmd("esp_settings","cmd_esp_settings",REQUIRED_ADMIN_LEVEL," ESP adasdsassdasd")

	

	

	// events

	register_event("StatusValue","spec_target","bd","1=2")

	register_event("SpecHealth2","spec_target","bd")

	register_event("TextMsg","spec_mode","b","2&#Spec_Mode")

	register_event("Damage", "event_Damage", "b", "2!0", "3=0", "4!0")

	register_event("ResetHUD", "reset_hud_alive", "be")

	

	

	// menu

	new keys=MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9

	register_menucmd(register_menuid("Admin Specator ESP"),keys,"menu_esp")

	

	max_players=get_maxplayers()

	

	// start esp_timer for the first time

	set_task(1.0,"esp_timer")

} 



public reset_hud_alive(id){

	spec[id]=0

	return PLUGIN_CONTINUE

}



public cmd_esp_settings(id){

	if (admin[id]){

		new out[11]

		read_argv(1,out,10)

		new len=strlen(out) 	

		for (new i=0;i<len;i++){

			if (out[i]=='1'){

				admin_options[id][i]=true

			}else{

				admin_options[id][i]=false

			}

		}

	}

}



public cmd_esp_menu(id){

	if (admin[id] && get_cvar_num("esp")==1){

		show_esp_menu(id)

	}

}



public cmd_esp_toggle(id){

	if (admin[id] && get_cvar_num("esp")==1){

		change_esp_status(id,!admin_options[id][0])

	}

}



public show_esp_menu(id){

	is_in_menu[id]=true

	new menu[301]

	new keys=MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9

	new onoff[2][]={{"roffw"},{"yonw"}} // r=red y=yellow w white

	new text[2][]={{"(use move forward/backward to switch on/off)"},{"(use esp_toggle command to toggle)"}} // r=red y=yellow w white

	new text_index=get_cvar_num("esp_disable_default_keys")

	if (text_index!=1) text_index=0

	format(menu, 300, "Admin Specator ESP^nis %s %s^n^n1. Line is %s^n2. Box is %s^n3. Name is %s^n4. Health/Armor is %s^n5. Weapon is %s^n6. Clip/Ammo is %s^n7. Distance is %s^n8. Show TeamMates is %s^n9. Show AimVector is %s^n^n0. Exit",

	onoff[admin_options[id][ESP_ON]],

	text[text_index],

	onoff[admin_options[id][ESP_LINE]],

	onoff[admin_options[id][ESP_BOX]],

	onoff[admin_options[id][ESP_NAME]],

	onoff[admin_options[id][ESP_HEALTH_ARMOR]],

	onoff[admin_options[id][ESP_WEAPON]],

	onoff[admin_options[id][ESP_CLIP_AMMO]],

	onoff[admin_options[id][ESP_DISTANCE]],

	onoff[admin_options[id][ESP_TEAM_MATES]],

	onoff[admin_options[id][ESP_AIM_VEC]])

	show_menu(id,keys,menu)

	

	return PLUGIN_HANDLED

}



public menu_esp(id,key){

	if (key==9){ // exit

		is_in_menu[id]=false

		return PLUGIN_HANDLED

	}

	// toggle esp options

	if (admin_options[id][key+1]){

		admin_options[id][key+1]=false

		}else{

		admin_options[id][key+1]=true

	}

	show_esp_menu(id)

	return PLUGIN_HANDLED

}



public event_Damage(id){

	if (id>0) {

		new attacker=get_user_attacker(id)

		if (attacker>0 && attacker<=max_players){ 

			if (view_target[attacker]==id){

				damage_done_to[attacker]=id

			}

		}

	}

	return PLUGIN_CONTINUE

}



public spec_mode(id){

	// discover if in first_person_view

	new specMode[12]

	read_data(2,specMode,11)

	

	if(equal(specMode,"#Spec_Mode4")){

		first_person[id]=true

		}else{

		first_person[id]=false

	}

	return PLUGIN_CONTINUE

}



public spec_target(id){

	if (id>0){

		new target=read_data(2)

		if (target!=0){

			spec[id]=target

		}

	}

	return PLUGIN_CONTINUE

}



public client_putinserver(id){

	first_person[id]=false

	if ((get_user_flags(id) & REQUIRED_ADMIN_LEVEL) || get_cvar_num("esp_allow_all")==1){

		admin[id]=true

		init_admin_options(id)

		

		}else{

		admin[id]=false

	}

}



public init_admin_options(id){

	

	for (new i=0;i<10;i++){

		admin_options[id][i]=true

	}

	admin_options[id][ESP_TEAM_MATES]=false

	load_vault_data(id)

}



public save2vault(id){

	if (admin[id]){

		new authid[35]

		get_user_authid (id,authid,34) 

		new tmp[11]

	

		for (new s=0;s<10;s++){

		

			if (admin_options[id][s]){

				tmp[s]='1';

			}else{

				tmp[s]='0';

			}

		}

		tmp[10]=0



		//server_print("STEAMID: %s OPTIONS: %s",authid,tmp);

		new key[41]

		format(key,40,"AESP_%s",authid) 

		

		set_vaultdata(key,tmp)

	}

}



public load_vault_data(id){

	if (admin[id]){

		new data[11]

		new authid[35]

		get_user_authid (id,authid,34)

		new key[41]

		format(key,40,"AESP_%s",authid) 

		get_vaultdata(key,data,10)

		if (strlen(data)>0){

			for (new s=0;s<10;s++){

				if (data[s]=='1'){

					admin_options[id][s]=true

				}else{

					admin_options[id][s]=false

				}

			}

		}

	}	

	

}



public client_disconnect(id){

	save2vault(id)

	admin[id]=false

	spec[id]=0

}



public change_esp_status(id,bool:on){

	if (on){

		admin_options[id][0]=true

		if (!is_in_menu[id]) client_print(id,print_chat,"[%s] ON",PLUGIN)

		if (is_in_menu[id]) show_esp_menu(id)

	}else{

		admin_options[id][0]=false

		if (!is_in_menu[id]) client_print(id,print_chat,"[%s] OFF",PLUGIN)

		if (is_in_menu[id]) show_esp_menu(id)

	}

}



public client_PreThink(id){

	if (!is_user_connected(id)) return PLUGIN_CONTINUE

	

	new button=get_user_button(id)

	if (button==0) return PLUGIN_CONTINUE // saves a lot of cpu

	

	new oldbutton=get_user_oldbutton(id)

	

	if (button & IN_DUCK){

		ducking[id]=true

		}else{

		ducking[id]=false

	}

	

	if ((get_cvar_num("esp")==1) && (get_cvar_num("esp_disable_default_keys")!=1)){

		if (admin[id]){

			if (first_person[id] && !is_user_alive(id)){

				if ((button & IN_RELOAD) && !(oldbutton & IN_RELOAD)){

					show_esp_menu(id)

				}

				if ((button & IN_FORWARD)  && !(oldbutton & IN_FORWARD) && !admin_options[id][0]){

					change_esp_status(id,true)

				}

				if ((button & IN_BACK)  && !(oldbutton & IN_BACK) && admin_options[id][0]){

					change_esp_status(id,false)

				}

			}

		}

	}

	return PLUGIN_CONTINUE

}



public draw_aim_vector(i,s,len){

	new Float:endpoint[3]

	new tmp[3]

	new Float:vec1[3]

	get_user_origin(s, tmp, 1)

	IVecFVec(tmp,vec1)

	vec1[2]-=6.0

	VelocityByAim(s,len,endpoint) // get aim vector

	addVec(endpoint,vec1) // add origin to get absolute coordinates

	make_TE_BEAMPOINTS(i,4,vec1,endpoint,10,0,255)

	return PLUGIN_CONTINUE

}



public esp_timer(){

	

	if (get_cvar_num("esp")!=1) { // if esp is not 1, it is off

		set_task(1.0,"esp_timer") // check for reactivation in 1 sec intervals

		return PLUGIN_CONTINUE

	}

	

	for (new i=1;i<=max_players;i++){ // loop through players

		

		if (admin_options[i][ESP_ON] && first_person[i] && is_user_connected(i) && admin[i] && (!is_user_alive(i)) && (spec[i]>0) && is_user_alive(spec[i])){ // <img src='http://amxx.pl/public/style_emoticons/<#EMO_DIR#>/smile.gif' class='bbc_emoticon' alt=':)' />

			

			new spec_id=spec[i]

			new Float:my_origin[3] 

			entity_get_vector(i,EV_VEC_origin,my_origin) // get origin of spectating admin

			new my_team

			my_team=get_team(spec_id) // get team of spectated <img src='http://amxx.pl/public/style_emoticons/<#EMO_DIR#>/smile.gif' class='bbc_emoticon' alt=':)' />

			

			new Float:smallest_angle=180.0 

			new smallest_id=0

			new Float:<img src='http://amxx.pl/public/style_emoticons/<#EMO_DIR#>/tongue2.gif' class='bbc_emoticon' alt='xP' />=2.0,Float:yp=2.0 // x,y of hudmessage

			new Float:dist

			

			for (new s=1;s<=max_players;s++){ // loop through the targets

				if (is_user_alive(s)){ // target must be alive

					new target_team=get_team(s) // get team of target

					if (!(target_team==3)){ //if not spectator

						if (spec_id!=s){ // do not target myself

							// if the target is in the other team and not spectator

							

							if (((my_team!=target_team && (target_team==1 || target_team==2)) || admin_options[i][ESP_TEAM_MATES])){

								

								new Float:target_origin[3]

								// get origin of target

								entity_get_vector(s,EV_VEC_origin,target_origin)

								

								

								// get distance from me to target

								new Float:distance=vector_distance(my_origin,target_origin)

								

								if (admin_options[i][ESP_LINE]){

									

									new width

									if (distance<2040.0){

										// calculate width according to distance

										width=(255-floatround(distance/8.0))/3

										}else{

										width=1

									}	

									// create temp_ent

									make_TE_BEAMENTPOINT(i,target_origin,width,target_team)

								}

								

								

								// get vector from me to target

								new Float:v_middle[3]

								subVec(target_origin,my_origin,v_middle)

								

								// trace from me to target, getting hitpoint

								new Float:v_hitpoint[3]

								trace_line (-1,my_origin,target_origin,v_hitpoint)

								

								// get distance from me to hitpoint (nearest wall)

								new Float:distance_to_hitpoint=vector_distance(my_origin,v_hitpoint)

								

								// scale

								new Float:scaled_bone_len

								if (ducking[spec_id]){

									scaled_bone_len=distance_to_hitpoint/distance*(50.0-18.0)

									}else{

									scaled_bone_len=distance_to_hitpoint/distance*50.0

								}

								scaled_bone_len=distance_to_hitpoint/distance*50.0

								

								new Float:scaled_bone_width=distance_to_hitpoint/distance*150.0

								

								new Float:v_bone_start[3],Float:v_bone_end[3]

								new Float:offset_vector[3]

								// get the point 10.0 units away from wall

								normalize(v_middle,offset_vector,distance_to_hitpoint-10.0) // offset from wall

								

								// set to eye level

								new Float:eye_level[3]

								copyVec(my_origin,eye_level)

								

								if (ducking[spec_id]){

									eye_level[2]+=12.3

									}else{

									eye_level[2]+=17.5

								}

								

								

								addVec(offset_vector,eye_level)

								

								// start and end of green box

								copyVec(offset_vector,v_bone_start)

								copyVec(offset_vector,v_bone_end)

								v_bone_end[2]-=scaled_bone_len

								

								new Float:distance_target_hitpoint=distance-distance_to_hitpoint

								

								new actual_bright=255

								

								if (admin_options[i][ESP_BOX]){

									// this is to make green box darker if distance is larger

									if (distance_target_hitpoint<2040.0){

										actual_bright=(255-floatround(distance_target_hitpoint/12.0))

										

										}else{

										actual_bright=85

									}	

									new color

									if (distance_to_hitpoint!=distance){ // if no line of sight

										color=0

										}else{ // if line of sight

										color=target_team

									}

									

									if (damage_done_to[spec_id]==s) {

										color=3

										damage_done_to[spec_id]=0

									}

									make_TE_BEAMPOINTS(i,color,v_bone_start,v_bone_end,floatround(scaled_bone_width),target_team,actual_bright)

								}

								

								

								if (admin_options[i][ESP_AIM_VEC] || admin_options[i][ESP_NAME] || admin_options[i][ESP_HEALTH_ARMOR] || admin_options[i][ESP_WEAPON] || admin_options[i][ESP_CLIP_AMMO] || admin_options[i][ESP_DISTANCE]){

									

									

									new Float:ret[2]

									new Float:x_angle=get_screen_pos(spec_id,v_middle,ret)

									

									// find target with the smallest distance to crosshair (on x-axis)

									if (smallest_angle>floatabs(x_angle)){

										if (floatabs(x_angle)!=0.0){

											smallest_angle=floatabs(x_angle)

											view_target[spec_id]=s

											smallest_id=s // store nearest target id..

											<img src='http://amxx.pl/public/style_emoticons/<#EMO_DIR#>/tongue2.gif' class='bbc_emoticon' alt='xP' />=ret[0] // and x,y coordinates of hudmessage

											yp=ret[1]

											dist=distance

										}

									}

								}

							}

						}

					}

				}

			} // inner player loop end

			if (!is_user_alive(smallest_id)) {

				smallest_id=0

				<img src='http://amxx.pl/public/style_emoticons/<#EMO_DIR#>/tongue2.gif' class='bbc_emoticon' alt='xP' />=-1.0

			}

			if (smallest_id>0 && admin_options[i][ESP_AIM_VEC]){

				draw_aim_vector(i,smallest_id,2000)

			}

			if (<img src='http://amxx.pl/public/style_emoticons/<#EMO_DIR#>/tongue2.gif' class='bbc_emoticon' alt='xP' />>0.0 && <img src='http://amxx.pl/public/style_emoticons/<#EMO_DIR#>/tongue2.gif' class='bbc_emoticon' alt='xP' /><=1.0 && yp>0.0 && yp<=1.0){ // if in visible range

				// show the player info

				set_hudmessage(255, 255, 0, floatabs(<img src='http://amxx.pl/public/style_emoticons/<#EMO_DIR#>/tongue2.gif' class='bbc_emoticon' alt='xP' />), floatabs(yp), 0, 0.0, get_cvar_float("esp_timer"), 0.0, 0.0, 2)

				

				new name[37]=""

				new tmp[33]

				get_user_name(smallest_id,tmp,32)

				if (admin_options[i][ESP_NAME]){

					format(name,36,"[%s]^n",tmp)

				}

				

				

				new health[25]=""

				if (admin_options[i][ESP_HEALTH_ARMOR]){

					new hp=get_user_health(smallest_id)

					new armor=get_user_armor(smallest_id)

					format(health,24,"health: %d armor: %d^n",hp,armor)

				}

				

				

				new clip_ammo[22]=""

				new clip,ammo

				new weapon_id=get_user_weapon(smallest_id,clip,ammo)

				if (admin_options[i][ESP_CLIP_AMMO]){

					format(clip_ammo,21,"clip: %d ammo: %d^n",clip,ammo)

				}

				

				new weapon_name[21]=""

				if (admin_options[i][ESP_WEAPON]){

					if ((weapon_id-1)<0 || (weapon_id-1)>29) weapon_id=1

					format(weapon_name,20,"weapon: %s^n",weapons[weapon_id-1])

					//copy(weapon_name,9,weapons[weapon_id-1])

				}

				

				new str_dist[19]

				if (admin_options[i][ESP_DISTANCE]){

					format(str_dist,18,"distance: %d^n",floatround(dist))

				}

				

				show_hudmessage(i, "%s%s%s%s%s",name,health,weapon_name,clip_ammo,str_dist)

			}

		}

	}

	set_task(get_cvar_float("esp_timer"),"esp_timer") // keep it going

	return PLUGIN_CONTINUE	

}



public Float:get_screen_pos(id,Float:v_me_to_target[3],Float:Ret[2]){

	new Float:v_aim[3]

	VelocityByAim(id,1,v_aim) // get aim vector

	new Float:aim[3]

	copyVec(v_aim,aim) // make backup copy of v_aim

	v_aim[2]=0.0 // project aim vector vertically to x,y plane

	new Float:v_target[3]

	copyVec(v_me_to_target,v_target)

	v_target[2]=0.0 // project target vector vertically to x,y plane

	// both v_aim and v_target are in the x,y plane, so angle can be calculated..

	new Float:x_angle

	new Float:x_pos=get_screen_pos_x(v_target,v_aim,x_angle) // get the x coordinate of hudmessage..

	new Float:y_pos=get_screen_pos_y(v_me_to_target,aim) // get the y coordinate of hudmessage..

	Ret[0]=x_pos 

	Ret[1]=y_pos

	return x_angle

}



public Float:get_screen_pos_x(Float:target[3],Float:aim[3],&Float:xangle){

	new Float:x_angle=floatacos(vectorProduct(aim,target)/(getVecLen(aim)*getVecLen(target)),1) // get angle between vectors

	new Float:x_pos

	//this part is a bit tricky..

	//the problem is that the 'angle between vectors' formula returns always positive values

	//how can be determined if the target vector is on the left or right side of the aim vector? with only positive angles?

	//the solution:

	//the scalar triple product returns the volume of the parallelepiped that is created by three input vectors

	//

	//i used the aim and target vectors as the first two input parameters

	//and the third one is a vector pointing straight upwards [0,0,1]

	//if now the target is on the left side of spectator origin the created parallelepipeds volume is negative 

	//and on the right side positive

	//now we can turn x_angle into a signed value..

	if (scalar_triple_product(aim,target)<0.0) x_angle*=-1 // make signed

	if (x_angle>=-45.0 && x_angle<=45.0){ // if in fov of 90

		x_pos=1.0-(floattan(x_angle,degrees)+1.0)/2.0 // calulate y_pos of hudmessage

		xangle=x_angle

		return x_pos

	}

	xangle=0.0

	return -2.0

}



public Float:get_screen_pos_y(Float:v_target[3],Float:aim[3]){

	new Float:target[3]

	

	// rotate vector about z-axis directly over the direction vector (to get height angle)

	rotateVectorZ(v_target,aim,target)

	

	// get angle between aim vector and target vector

	new Float:y_angle=floatacos(vectorProduct(aim,target)/(getVecLen(aim)*getVecLen(target)),1) // get angle between vectors

	

	new Float:y_pos

	new Float:norm_target[3],Float:norm_aim[3]

	

	// get normalized target and aim vectors

	normalize(v_target,norm_target,1.0)

	normalize(aim,norm_aim,1.0)

	

	//since the 'angle between vectors' formula returns always positive values

	if (norm_target[2]<norm_aim[2]) y_angle*=-1 //make signed

	

	if (y_angle>=-45.0 && y_angle<=45.0){ // if in fov of 90

		y_pos=1.0-(floattan(y_angle,degrees)+1.0)/2.0 // calulate y_pos of hudmessage

		if (y_pos>=0.0 && y_pos<=1.0) return y_pos

	}

	return -2.0

}



public get_team(id){

	new team[2]

	get_user_team(id,team,1)

	switch(team[0]){

		case 'T':{

			return 1

		}

		case 'C':{

			return 2

		}

		case 'S':{

			return 3

		}

		default:{}

	}

	return 0

}



// Vector Operations -------------------------------------------------------------------------------



public Float:getVecLen(Float:Vec[3]){

	new Float:VecNull[3]={0.0,0.0,0.0}

	new Float:len=vector_distance(Vec,VecNull)

	return len

}



public Float:scalar_triple_product(Float:a[3],Float:b[3]){

	new Float:up[3]={0.0,0.0,1.0}

	new Float:Ret[3]

	Ret[0]=a[1]*b[2]-a[2]*b[1]

	Ret[1]=a[2]*b[0]-a[0]*b[2]

	Ret[2]=a[0]*b[1]-a[1]*b[0]

	return vectorProduct(Ret,up)

}



public normalize(Float:Vec[3],Float:Ret[3],Float:multiplier){

	new Float:len=getVecLen(Vec)

	copyVec(Vec,Ret)

	Ret[0]/=len

	Ret[1]/=len

	Ret[2]/=len

	Ret[0]*=multiplier

	Ret[1]*=multiplier

	Ret[2]*=multiplier

}



public rotateVectorZ(Float:Vec[3],Float:direction[3],Float:Ret[3]){

	// rotates vector about z-axis

	new Float:tmp[3]

	copyVec(Vec,tmp)

	tmp[2]=0.0

	new Float:dest_len=getVecLen(tmp)

	copyVec(direction,tmp)

	tmp[2]=0.0

	new Float:tmp2[3]

	normalize(tmp,tmp2,dest_len)

	tmp2[2]=Vec[2]

	copyVec(tmp2,Ret)

}



public Float:vectorProduct(Float:Vec1[3],Float:Vec2[3]){

	return Vec1[0]*Vec2[0]+Vec1[1]*Vec2[1]+Vec1[2]*Vec2[2]

}



public copyVec(Float:Vec[3],Float:Ret[3]){

	Ret[0]=Vec[0]

	Ret[1]=Vec[1]

	Ret[2]=Vec[2]

}



public subVec(Float:Vec1[3],Float:Vec2[3],Float:Ret[3]){

	Ret[0]=Vec1[0]-Vec2[0]

	Ret[1]=Vec1[1]-Vec2[1]

	Ret[2]=Vec1[2]-Vec2[2]

}



public addVec(Float:Vec1[3],Float:Vec2[3]){

	Vec1[0]+=Vec2[0]

	Vec1[1]+=Vec2[1]

	Vec1[2]+=Vec2[2]

}



// Temporary Entities ------------------------------------------------------------------------------

// there is a list of much more temp entities at: http://djeyl.net/forum/index.php?act=Attach&type=post&id=290870

// all messages are sent with MSG_ONE_UNRELIABLE flag to avoid overflow in case of very low esp_timer setting and much targets



public make_TE_BEAMPOINTS(id,color,Float:Vec1[3],Float:Vec2[3],width,target_team,brightness){

	message_begin(MSG_ONE_UNRELIABLE ,SVC_TEMPENTITY,{0,0,0},id) //message begin

	write_byte(0)

	write_coord(floatround(Vec1[0])) // start position

	write_coord(floatround(Vec1[1]))

	write_coord(floatround(Vec1[2]))

	write_coord(floatround(Vec2[0])) // end position

	write_coord(floatround(Vec2[1]))

	write_coord(floatround(Vec2[2]))

	write_short(laser) // sprite index

	write_byte(3) // starting frame

	write_byte(0) // frame rate in 0.1's

	write_byte(floatround(get_cvar_float("esp_timer")*10)) // life in 0.1's

	write_byte(width) // line width in 0.1's

	write_byte(0) // noise amplitude in 0.01's

	write_byte(esp_colors[color][0])

	write_byte(esp_colors[color][1])

	write_byte(esp_colors[color][2])

	write_byte(brightness) // brightness)

	write_byte(0) // scroll speed in 0.1's

	message_end()

}



public make_TE_BEAMENTPOINT(id,Float:target_origin[3],width,target_team){

	message_begin(MSG_ONE_UNRELIABLE,SVC_TEMPENTITY,{0,0,0},id)

	write_byte(1)

	write_short(id)

	write_coord(floatround(target_origin[0]))

	write_coord(floatround(target_origin[1]))

	write_coord(floatround(target_origin[2]))

	write_short(laser)

	write_byte(1)		

	write_byte(1)

	write_byte(floatround(get_cvar_float("esp_timer")*10))

	write_byte(width)

	write_byte(0)

	write_byte(team_colors[target_team][0])

	write_byte(team_colors[target_team][1])

	write_byte(team_colors[target_team][2])

	write_byte(255)

	write_byte(0)

	message_end()

}


  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych