Raised This Month: $12 Target: $400
 3% 

fix bug portal gun


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
shayan123
BANNED
Join Date: Oct 2020
Location: GB
Old 02-23-2021 , 18:15   fix bug portal gun
Reply With Quote #1

Hi everyone Can help
need to fix bug its working only hlds
please fix bug and add rehlds working

CODE
Code:
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <hamsandwich>
#include <fakemeta>
#include <engine>
#include <xs>
#include <cstrike>

#define PLUGIN "Portal"
#define VERSION "1.0"
#define AUTHOR "DarkGL & R3X"

#define SOUNDS
#define SPRITES
//#define TEST
//#define TRACE_HULL

#define MAX 32
#define IsPlayer(%1) (1<=%1<=MAX)

new const szClassNameNieb[] = "portal_shot_niebieski"
new const szClassNamePom[] = "portal_shot_pomaranczowy"
new const szClassTelNieb[] = "teleport_nieb";
new const szClassTelPom[] = "teleport_pom";
new const v_model[] = "models/portal/v_portal.mdl";
new const portal[] = "models/portal/portal.mdl";
new const w_model[] = "models/rpgrocket.mdl";

#if defined SOUNDS
new const portal_shot_blue[] = "portal/portalgun_shoot_blue1.wav"
new const portal_shot_red[] = "portal/portalgun_shoot_red1.wav"
new const soundOpen[][]={
	"portal/portal_open1.wav",
	"portal/portal_open2.wav",
	"portal/portal_open3.wav"
}
new const soundClose[][]={
	"portal/portal_close1.wav",
	"portal/portal_close2.wav"
}
new const soundEnter[][]={
	"portal/portal_enter1.wav",
	"portal/portal_enter2.wav"
}
new const soundInvalid[]= "portal/portal_invalid_surface3.wav";
#endif

new player_ent[MAX+1]
new Float:fNextAttack[MAX+1]
new bool:bMode[MAX+1]
new iEnt[MAX+1][2];
new iTel[MAX+1][2]

#define OFFSET_WEAPONOWNER 41
#define OFFSET_LINUX_WEAPONS 4
#define OFFSET_ACTIVEITEM 374
#define OFFSET_LINUX_PLAYER 5

#define m_flNextPrimaryAttack 46
#define m_flNextSecondaryAttack 47

new const szClassTouch[][]={
	"worldspawn",
	"func_wall",
	"func_door",
	"func_door_rotating",
	"func_breakable"
}

#define  MAX_DISTANCE 70.0
#define  MIN_DISTANCE 50.0

#if defined SPRITES
new sprite;
new g_trail;
new spriteInvalid[2];
#endif

enum eCvar{
	SpriteType,
	FallDamge,
	SpeedBullet,
	PortalCost,
	SpawnPortal
}

new pCvars[eCvar]

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	RegisterHam(Ham_Killed,"player","ham_KilledPost",1)
	RegisterHam( Ham_TakeDamage, "player", "ham_damage" );
	RegisterHam(Ham_Spawn,"player","ham_Spawned",1)
	
	register_logevent("Koniec_Rundy", 2, "1=Round_End") 
	
	register_forward(FM_CmdStart,"fwd_CmdStart")
	
	register_touch(szClassTelPom,"*","touchTeleport")
	register_touch(szClassTelNieb,"*","touchTeleport")
	
	for(new i = 0;i<sizeof szClassTouch;i++){	
		register_touch(szClassTouch[i],szClassNameNieb,"touchNieb")
		register_touch(szClassTouch[i],szClassNamePom,"touchPom")
	}
	
	register_clcmd("say /portal","buyPortal");
	register_clcmd("drop","cmdDrop")
	
	register_clcmd("give_portal","give_weapon",ADMIN_CFG,"<nick>")
	
	return PLUGIN_CONTINUE;
}

public ham_Spawned(id){
	if(!is_user_alive(id)){
		return HAM_IGNORED;
	}
	if(get_pcvar_num(pCvars[SpawnPortal]) && !pev_valid(player_ent[id])){
		new szWeaponName[64],bool:bContinue = false;
		new num, iWeapons[32] 
		
		get_user_weapons(id, iWeapons, num) 
		for(new i = 1;i<=30;i++){
			if(i == 2 || i == 4 || i == 6 || i == 9 || i == 25 || i == 29){
				continue;
			}
			bContinue = false;
			for (new j=0; j<num; j++) 
			{
				if(iWeapons[j] == i){
					bContinue = true;
					break;
				}
			} 
			if(!bContinue){
				get_weaponname(i,szWeaponName,charsmax(szWeaponName));
				player_ent[id] = give_item(id,szWeaponName)
				RegisterHamFromEntity(Ham_Item_Deploy,player_ent[id],"ham_ItemDeploy_Post",1)
				set_pdata_float(player_ent[id], m_flNextPrimaryAttack, 99999.0, OFFSET_LINUX_WEAPONS)
				set_pdata_float(player_ent[id], m_flNextSecondaryAttack, 99999.0, OFFSET_LINUX_WEAPONS)
				break;
			}
		}
		
	}
	return HAM_IGNORED;
}

public buyPortal(id){
	new cost = get_pcvar_num(pCvars[PortalCost]);
	if(cost < 0){
		return PLUGIN_HANDLED;
	}
	if(cs_get_user_money(id) < cost){
		client_print(id,print_console,"Masz za malo kasy");
	}
	else
	{
		if(!is_user_alive(id)){
			client_print(id,print_console,"Musisz byc zywy");
			return PLUGIN_HANDLED
		}
		if(pev_valid(player_ent[id])){
			client_print(id,print_console,"Masz juz portal guna");
			return PLUGIN_HANDLED
		}
		new szWeaponName[64],bool:bContinue = false;
		new num, iWeapons[32] 
		
		get_user_weapons(id, iWeapons, num) 
		for(new i = 1;i<=30;i++){
			if(i == 2 || i == 4 || i == 6 || i == 9 || i == 25 || i == 29){
				continue;
			}
			bContinue = false;
			for (new j=0; j<num; j++) 
			{
				if(iWeapons[j] == i){
					bContinue = true;
					break;
				}
			} 
			if(!bContinue){
				get_weaponname(i,szWeaponName,charsmax(szWeaponName));
				player_ent[id] = give_item(id,szWeaponName)
				RegisterHamFromEntity(Ham_Item_Deploy,player_ent[id],"ham_ItemDeploy_Post",1)
				set_pdata_float(player_ent[id], m_flNextPrimaryAttack, 99999.0, OFFSET_LINUX_WEAPONS)
				set_pdata_float(player_ent[id], m_flNextSecondaryAttack, 99999.0, OFFSET_LINUX_WEAPONS)
				break;
			}
		}
		cs_set_user_money(id,cs_get_user_money(id) - cost,0);
		
	}
	return PLUGIN_HANDLED;
}

public ham_damage( this, inflictor, attacker, Float:damage, damagebits )
{
	if( !( damagebits & DMG_FALL ) || !IsPlayer(this))
	return HAM_IGNORED;
	
	new bool:bCvar = !(!get_pcvar_num(pCvars[FallDamge]))
	
	if(!bCvar || (bCvar && !pev_valid(player_ent[this]))){
		return HAM_IGNORED;
	}
	
	return HAM_SUPERCEDE;
}

public Koniec_Rundy()
{
	remove_entity_name(szClassTelPom)
	remove_entity_name(szClassTelNieb)
	for(new i = 1;i<=MAX;i++){
		iTel[i][0] = 0;
		iTel[i][1] = 0;
	}
}

public touchTeleport(portal,id){
	if(pev_valid(id)){
		if(pev(id,pev_movetype) == MOVETYPE_FOLLOW){
			return PLUGIN_CONTINUE;
		}
		static szClassName[64];
		pev(id,pev_classname,szClassName,charsmax(szClassName));
		if(equal(szClassName,szClassTelPom) || equal(szClassName,szClassTelNieb) || equal(szClassName,szClassNameNieb) || equal(szClassName,szClassNamePom)){
			return PLUGIN_CONTINUE;
		}
		moveTo(id,portal,pev(portal,pev_iuser1))
	}
	return PLUGIN_CONTINUE;
}


moveTo(id, in, out){
	if(pev_valid(out)){
		#if defined TRACE_HULL
		new hull = HULL_POINT;
		
		if(is_user_alive(id)){
			hull = HULL_HUMAN;
		}
		#endif
		
		new Float:fDistance = MIN_DISTANCE;
		while(fDistance <= MAX_DISTANCE){
			new Float:fOrigin[3];
			pev(out, pev_origin, fOrigin);
			
			new Float:fAngles[3];
			pev(out, pev_vuser1, fAngles);
			
			xs_vec_mul_scalar(fAngles, fDistance, fAngles);
			xs_vec_add(fOrigin, fAngles, fOrigin);
			
			new Float:fMins[3],Float:fMaxs[3];
			pev(id,pev_mins,fMins);
			pev(id,pev_maxs,fMaxs);
			
			
			
			#if defined TRACE_HULL
			if(!trace_hull(fOrigin, hull, id, 0)){
				#else
				if(checkPortalPlace(fOrigin,fMins,fMaxs)){
					#endif
					set_pev(id, pev_origin, fOrigin);
					
					#if defined SOUNDS
					engfunc(EngFunc_EmitAmbientSound, 0,fOrigin, soundEnter[random(sizeof soundEnter)],VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
					#endif
					
					parseAngle(id, in, out);
					
					break;
				}
				fDistance += 10.0;
			}
		}
	}

	public fwd_CmdStart(id, uc_handle, seed) {
		if(!is_user_alive(id) || player_ent[id] != get_pdata_cbase(id,OFFSET_ACTIVEITEM,OFFSET_LINUX_PLAYER)){
			return FMRES_IGNORED;
		}
		
		new buttons = get_uc(uc_handle,UC_Buttons)
		new oldbuttons = get_user_oldbutton(id);
		
		if(buttons&IN_ATTACK && fNextAttack[id] < get_gametime()){
			fNextAttack[id] = get_gametime() + 0.5;
			create_shot_portal(id);
			set_animation(id,random_num(1,2))
		}
		if(buttons & IN_ATTACK2 && !(oldbuttons & IN_ATTACK2)){
			bMode[id] = !bMode[id];
			client_print(id,print_center,"Tryb %s",bMode[id] ? "Niebieski":"Pomaranczowy")
		}
		return FMRES_HANDLED
	}

	public plugin_precache(){
		
		cvar_register();
		
		precache_model(v_model);
		precache_model(portal);
		precache_model(w_model);
		#if defined SPRITES
		sprite = precache_model("sprites/white.spr");
		g_trail = precache_model("sprites/smoke.spr")
		spriteInvalid[0] = precache_model("sprites/portal/pom.spr") ;
		spriteInvalid[1] = precache_model("sprites/portal/nieb.spr") ;
		#endif
		
		#if defined SOUNDS
		precache_sound(portal_shot_blue)
		precache_sound(portal_shot_red);
		for(new i = 0 ; i<sizeof soundOpen;i++){
			precache_sound(soundOpen[i])
		}
		for(new i = 0 ; i<sizeof soundClose;i++){
			precache_sound(soundClose[i])
		}
		for(new i = 0 ; i<sizeof soundEnter;i++){
			precache_sound(soundEnter[i])
		}
		precache_sound(soundInvalid)
		#endif
		
		new szConfDir[64],szFullDir[128];
		get_configsdir(szConfDir,charsmax(szConfDir));
		formatex(szFullDir,charsmax(szFullDir),"%s/portal.cfg",szConfDir);
		if(!file_exists(szFullDir)){
			#if defined SPRITES
			write_file(szFullDir,"// 1 or 2 difrent sprites 0 off this")
			write_file(szFullDir,"portal_sprite 1");
			#endif
			
			write_file(szFullDir,"// 1 - no fall damage 0 - normal (no fall damage for person who have portal gun)")
			write_file(szFullDir,"portal_fall_damage 1");
			
			write_file(szFullDir,"// speed of portal bullet")
			write_file(szFullDir,"portal_bullet_speed 1500");
			
			write_file(szFullDir,"//how much money you must have to buy portal with /portal command in say number of negative side off this")
			write_file(szFullDir,"portal_cost -1");
			
			write_file(szFullDir,"//portal gun for free on spawn ?")
			write_file(szFullDir,"portal_spawn 0")
		}
		server_cmd("exec %s",szFullDir)
		
	}

	public client_connect(id){
		player_ent[id] = 0;
		iTel[id][0] = 0;
		iTel[id][1] = 0;
	}

	public client_disconnect(id){
		player_ent[id] = 0;
		iTel[id][0] = 0;
		iTel[id][1] = 0;
	}

	public touchNieb(touched,toucher){
		if(!pev_valid(toucher)){
			remove_entity(toucher)
			return PLUGIN_CONTINUE;
		}
		
		missileTouche(toucher,0);
		
		return PLUGIN_CONTINUE;
	}

	public touchPom(touched,toucher){	
		if(!pev_valid(toucher)){
			remove_entity(toucher)
			return PLUGIN_CONTINUE;
		}
		
		missileTouche(toucher,1);
		
		return PLUGIN_CONTINUE;
	}

	public missileTouche(iEntLocal,iPos){
		new Float:fOrigin[3],iOwner;
		
		pev(iEntLocal,pev_origin,fOrigin);
		
		iOwner = pev(iEntLocal,pev_owner);
		
		new Float:fVelo[3],Float:fEndOrigin[3];
		
		pev(iEntLocal, pev_velocity, fVelo)
		
		xs_vec_normalize(fVelo,fVelo)
		
		xs_vec_mul_scalar(fVelo,50.0,fVelo);
		
		xs_vec_add(fOrigin,fVelo,fEndOrigin);
		
		new ptr = create_tr2()
		
		new Float:vfNormal[3]
		
		engfunc(EngFunc_TraceLine, fOrigin, fEndOrigin, IGNORE_MISSILE | IGNORE_MONSTERS | IGNORE_GLASS, iEntLocal, ptr)
		
		get_tr2(ptr, TR_vecPlaneNormal, vfNormal);
		
		new Float:fOrigin3[3];
		get_tr2(ptr, TR_vecEndPos, fOrigin3);
		
		free_tr2(ptr)
		
		if(!validWall(fOrigin3,vfNormal) || !checkPlace(fOrigin3,iPos,iOwner)){
			#if defined SOUNDS
			engfunc(EngFunc_EmitAmbientSound, 0,fOrigin3, soundInvalid,VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
			#endif
			
			pev(iEntLocal, pev_velocity, fVelo)
			
			xs_vec_normalize(fVelo,fVelo)
			
			xs_vec_mul_scalar(fVelo,-4.0,fVelo);
			xs_vec_add(fOrigin,fVelo,fOrigin3);
			
			#if defined SPRITES
			for(new i = 1; i < 6; i++) {
				engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin3,0)
				write_byte(TE_SPRITETRAIL)
				engfunc(EngFunc_WriteCoord, fOrigin3[0])
				engfunc(EngFunc_WriteCoord, fOrigin3[1])
				engfunc(EngFunc_WriteCoord, fOrigin3[2])
				engfunc(EngFunc_WriteCoord, fOrigin3[0])
				engfunc(EngFunc_WriteCoord, fOrigin3[1])
				engfunc(EngFunc_WriteCoord, fOrigin3[2] + 10)
				write_short(iPos == 0 ? spriteInvalid[1] : spriteInvalid[0])
				write_byte(2)
				write_byte(1)
				write_byte(1)
				write_byte(random_num(5,10))
				write_byte(5)
				message_end()
			}
			#endif
			
			remove_entity(iEntLocal);
			return PLUGIN_CONTINUE;
		}
		
		new Float:fOldNormal[3];
		xs_vec_copy(vfNormal, fOldNormal);
		
		vector_to_angle(vfNormal, vfNormal);
		
		//cosik
		pev(iEntLocal, pev_velocity, fVelo)
		
		xs_vec_normalize(fVelo,fVelo)
		
		xs_vec_mul_scalar(fVelo,-4.0,fVelo);
		xs_vec_add(fOrigin,fVelo,fOrigin);
		//
		
		remove_entity(iEntLocal);
		
		iEnt[iOwner][iPos] = 0;
		
		if(pev_valid(iTel[iOwner][iPos])){ 
			new Float:fOrigin2[3];
			pev(iTel[iOwner][iPos],pev_origin,fOrigin2)
			#if defined SOUNDS
			engfunc(EngFunc_EmitAmbientSound, 0,fOrigin2, soundClose[random(sizeof soundClose)],VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
			#endif
			remove_entity(iTel[iOwner][iPos]);
			iTel[iOwner][iPos] = 0;
		}
		
		iTel[iOwner][iPos] =  engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
		
		set_pev(iTel[iOwner][iPos],pev_classname,iPos == 0 ? szClassTelNieb : szClassTelPom);
		
		set_pev(iTel[iOwner][iPos],pev_origin,fOrigin);
		
		set_pev(iTel[iOwner][iPos],pev_solid,SOLID_TRIGGER)
		set_pev(iTel[iOwner][iPos],pev_movetype,MOVETYPE_FLY)
		
		engfunc(EngFunc_SetModel, iTel[iOwner][iPos], portal)
		
		set_pev(iTel[iOwner][iPos],pev_skin,iPos == 0 ? 0 : 1);
		
		#if defined SOUNDS
		engfunc(EngFunc_EmitAmbientSound, 0,fOrigin, soundOpen[random(sizeof soundOpen)],VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
		#endif
		
		new Float:fMins[3],Float:fMax[3],Float:mul[3];
		
		mul[0] = floatabs(floatabs(fOldNormal[0])-1.0)
		mul[0] = mul[0] + 0.1 > 1.0 ? mul[0]:mul[0]+0.1
		
		mul[1] = floatabs(floatabs(fOldNormal[1])-1.0)
		mul[1] = mul[1] + 0.1 > 1.0 ? mul[1]:mul[1]+0.1
		
		mul[2] = floatabs(floatabs(fOldNormal[2])-1.0)
		mul[2] = mul[2] + 0.1 > 1.0 ? mul[2]:mul[2]+0.1
		
		fMins[0] = floatmul(mul[0],-20.0)-2.0;
		fMins[1] = floatmul(mul[1],-10.0)-2.0;
		fMins[2] = floatmul(mul[2],-42.0)-2.0
		
		fMax[0] = floatmul(mul[0],20.0)+2.0;
		fMax[1] = floatmul(mul[1],10.0)+2.0;
		fMax[2] = floatmul(mul[2],42.0)+2.0
		
		engfunc(EngFunc_SetSize, iTel[iOwner][iPos],fMins, fMax)
		
		set_pev(iTel[iOwner][iPos], pev_angles, vfNormal);
		
		set_pev(iTel[iOwner][iPos],pev_iuser1,iTel[iOwner][iPos == 0 ? 1 : 0]);
		
		if(pev_valid(iTel[iOwner][iPos == 0 ? 1 : 0]) && !pev_valid(pev(iTel[iOwner][iPos == 0 ? 1 : 0],pev_iuser1))){
			set_pev(iTel[iOwner][iPos == 0 ? 1 : 0],pev_iuser1,iTel[iOwner][iPos])
		}
		
		set_pev(iTel[iOwner][iPos], pev_vuser1, fOldNormal);
		
		set_pev(iTel[iOwner][iPos],pev_owner,iOwner);
		
		return PLUGIN_CONTINUE;
	}

	public give_weapon(id,level,cid){
		if(!cmd_access(id,level,cid,2)){
			return PLUGIN_HANDLED;
		}
		new szString[64];
		read_argv(1,szString,charsmax(szString));
		new find = find_player("bl",szString);
		if(!find){
			client_print(id,print_console,"[Portal Gun] Nie moge znalezc takiego gracza");
			return PLUGIN_HANDLED;
		}
		else
		{
			if(!is_user_alive(find)){
				client_print(id,print_console,"[Portal Gun] Gracz musi byc zywy");
				return PLUGIN_HANDLED
			}
			new szName[64];
			get_user_name(find,szName,charsmax(szName));
			if(pev_valid(player_ent[find])){
				client_print(id,print_console,"[Portal Gun] %s ma juz Portal Guna",szName);
				return PLUGIN_HANDLED
			}
			else
			{
				client_print(id,print_console,"[Portal Gun] Dales portal %s",szName);
			}
		}
		new szWeaponName[64],bool:bContinue = false;
		new num, iWeapons[32] 
		
		get_user_weapons(id, iWeapons, num) 
		for(new i = 1;i<=30;i++){
			if(i == 2 || i == 4 || i == 6 || i == 9 || i == 25 || i == 29){
				continue;
			}
			bContinue = false;
			for (new j=0; j<num; j++) 
			{
				if(iWeapons[j] == i){
					bContinue = true;
					break;
				}
			} 
			if(!bContinue){
				get_weaponname(i,szWeaponName,charsmax(szWeaponName));
				player_ent[id] = give_item(id,szWeaponName)
				RegisterHamFromEntity(Ham_Item_Deploy,player_ent[id],"ham_ItemDeploy_Post",1)
				set_pdata_float(player_ent[id], m_flNextPrimaryAttack, 99999.0, OFFSET_LINUX_WEAPONS)
				set_pdata_float(player_ent[id], m_flNextSecondaryAttack, 99999.0, OFFSET_LINUX_WEAPONS)
				break;
			}
		}
		return PLUGIN_HANDLED;
	}

	public ham_ItemDeploy_Post(weapon_ent)
	{
		static owner
		owner = get_pdata_cbase(weapon_ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS);
		
		if(!is_user_alive(owner)){
			return HAM_IGNORED;
		}
		set_pev(owner,pev_viewmodel2,v_model);
		
		set_animation(owner,6)
		return HAM_IGNORED;
	}

	public ham_KilledPost(id){
		if(is_user_connected(id)){
			player_ent[id] = 0;
		}
	}


	public cmdDrop(id){
		if(player_ent[id] == get_pdata_cbase(id,OFFSET_ACTIVEITEM,OFFSET_LINUX_PLAYER)){
			return PLUGIN_HANDLED;
		}
		return PLUGIN_CONTINUE;
	}

	public create_shot_portal(id){
		new iPos = bMode[id] ? 0 : 1;
		if(pev_valid(iEnt[id][iPos]) && pev(iEnt[id][iPos],pev_owner) == id){
			engfunc(EngFunc_RemoveEntity,iEnt[id][iPos])
			iEnt[id][iPos] = 0;
		}
		iEnt[id][iPos] =  engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
		
		if(!pev_valid(iEnt[id][iPos])){
			return PLUGIN_CONTINUE;
		}
		
		set_pev(iEnt[id][iPos],pev_classname,bMode[id] ? szClassNameNieb : szClassNamePom);
		
		new Float:Origin[3], Float: vAngle[3], Float: Velocity[3];
		
		pev(id,pev_v_angle,vAngle)
		
		new iOrigin[3];
		get_user_origin(id,iOrigin,1)
		IVecFVec(iOrigin,Origin)
		
		#if defined SOUNDS
		engfunc(EngFunc_EmitAmbientSound, 0,Origin, bMode[id] ? portal_shot_blue : portal_shot_red,VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
		#endif
		
		set_pev(iEnt[id][iPos],pev_origin,Origin);
		
		vAngle[0] *= -1.0;
		
		set_pev(iEnt[id][iPos],pev_angles,vAngle)
		
		set_pev(iEnt[id][iPos],pev_solid,SOLID_TRIGGER)
		set_pev(iEnt[id][iPos],pev_movetype,MOVETYPE_FLY)
		
		VelocityByAim(id, get_pcvar_num(pCvars[SpeedBullet]) , Velocity);
		
		set_pev(iEnt[id][iPos],pev_owner,id)
		
		set_pev(iEnt[id][iPos],pev_velocity,Velocity)
		
		engfunc(EngFunc_SetModel, iEnt[id][iPos], w_model)
		
		engfunc(EngFunc_SetSize, iEnt[id][iPos], {-1.0, -1.0, -1.0}, {1.0, 1.0, 1.0})
		
		set_rendering(iEnt[id][iPos], kRenderFxGlowShell, bMode[id] ? 0:255,bMode[id] ? 0:165,bMode[id] ? 255:0, kRenderTransColor, 1) 
		
		#if defined SPRITES
		new iMode = get_pcvar_num(pCvars[SpriteType]);
		if(iMode){
			message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
			write_byte(TE_BEAMFOLLOW)
			write_short(iEnt[id][iPos])
			write_short(iMode == 1 ? sprite:g_trail);
			write_byte(10)
			write_byte(5)
			if(bMode[id]){
				write_byte(0)
				write_byte(0)
				write_byte(255)
			}
			else{
				write_byte(255)
				write_byte(165)
				write_byte(0)
			}
			write_byte(192)
			message_end()
		}
		#endif
		
		return PLUGIN_CONTINUE;
	}


	stock bool:validWall(const Float:fOrigin[3], Float:fNormal[3], Float:width=40.0, Float:height = 65.0){
		new Float:fInvNormal[3];
		xs_vec_neg(fNormal, fInvNormal);
		
		new Float:fPoint[3];
		xs_vec_add(fOrigin, fNormal, fPoint);
		
		new Float:fNormalUp[3];
		new Float:fNormalRight[3];
		vector_to_angle(fNormal, fNormalUp);
		
		fNormalUp[0] = -fNormalUp[0];
		
		angle_vector(fNormalUp, ANGLEVECTOR_RIGHT, fNormalRight);
		angle_vector(fNormalUp, ANGLEVECTOR_UP, fNormalUp);
		
		xs_vec_mul_scalar(fNormalUp, height/2, fNormalUp);
		xs_vec_mul_scalar(fNormalRight, width/2, fNormalRight);
		
		new Float:fPoint2[3];
		xs_vec_add(fPoint, fNormalUp, fPoint2);
		xs_vec_add(fPoint2, fNormalRight, fPoint2);
		if(!traceToWall(fPoint2, fInvNormal))
		return false;
		
		xs_vec_add(fPoint, fNormalUp, fPoint2);
		xs_vec_sub(fPoint2, fNormalRight, fPoint2);
		if(!traceToWall(fPoint2, fInvNormal))
		return false;
		
		xs_vec_sub(fPoint, fNormalUp, fPoint2);
		xs_vec_sub(fPoint2, fNormalRight, fPoint2);
		if(!traceToWall(fPoint2, fInvNormal))
		return false;
		
		xs_vec_sub(fPoint, fNormalUp, fPoint2);
		xs_vec_add(fPoint2, fNormalRight, fPoint2);
		if(!traceToWall(fPoint2, fInvNormal))
		return false;
		
		return true;
	}

bool:traceToWall(const Float:fOrigin[3], const Float:fVec[3]){
		new Float:fOrigin2[3];
		xs_vec_add(fOrigin, fVec, fOrigin2);
		xs_vec_add(fOrigin2, fVec, fOrigin2);
		
		new tr = create_tr2();
		engfunc(EngFunc_TraceLine, fOrigin, fOrigin2, IGNORE_MISSILE | IGNORE_MONSTERS | IGNORE_GLASS, 0, tr);
		new Float:fFrac;
		get_tr2(tr, TR_flFraction, fFrac);
		free_tr2(tr);
		
		if( floatabs(fFrac - 0.5) <= 0.02 ){
			return true;
		}
		
		return false;
	}

	set_animation(id, anim) {
		set_pev(id, pev_weaponanim, anim)
		
		message_begin(MSG_ONE, SVC_WEAPONANIM, {0, 0, 0}, id)
		write_byte(anim)
		write_byte(pev(id, pev_body))
		message_end()
	} 

	parseAngle(id, in, out){
		new Float:fAngles[3];
		pev(id, pev_v_angle, fAngles);
		angle_vector(fAngles, ANGLEVECTOR_FORWARD, fAngles);
		
		new Float:fNormalIn[3];
		pev(in, pev_vuser1, fNormalIn);
		xs_vec_neg(fNormalIn, fNormalIn);
		
		new Float:fNormalOut[3];
		pev(out, pev_vuser1, fNormalOut);
		
		xs_vec_sub(fAngles, fNormalIn, fAngles);
		xs_vec_add(fAngles, fNormalOut, fAngles);
		
		//fAngles[2] = -fAngles[2];
		
		vector_to_angle(fAngles, fAngles);
		
		set_pev(id, pev_angles, fAngles);
		set_pev(id, pev_fixangle, 1);
		
		
		pev(id, pev_velocity, fAngles);
		new Float:fSpeed = vector_length(fAngles);
		xs_vec_normalize(fAngles,  fAngles);
		
		xs_vec_sub(fAngles, fNormalIn, fAngles);
		xs_vec_add(fAngles, fNormalOut, fAngles);
		
		xs_vec_normalize(fAngles, fAngles);
		xs_vec_mul_scalar(fAngles, fSpeed, fAngles);
		set_pev(id, pev_velocity, fAngles);
	}

bool:checkPlace(Float:fOrigin[3],iMode,id){
		new ent = -1;
		new szClass[64]
		while((ent = find_ent_in_sphere(ent,fOrigin,45.0))){
			pev(ent,pev_classname,szClass,charsmax(szClass));
			if(equal(szClass,szClassTelNieb) || equal(szClass,szClassTelPom)){
				if(iMode == 0 && equal(szClass,szClassTelNieb) && pev(ent,pev_owner) == id){
					continue;
				}
				else if(iMode == 1 && equal(szClass,szClassTelPom) && pev(ent,pev_owner) == id){
					continue;
				}
				else{
					return false;
				}
			}
		}
		return true;
	}

	public cvar_register(){
		#if defined SPRITES
		pCvars[SpriteType] = register_cvar("portal_sprite","1")
		#endif
		pCvars[FallDamge] = register_cvar("portal_fall_damage","1")
		pCvars[SpeedBullet] = register_cvar("portal_bullet_speed","1500")
		pCvars[PortalCost] = register_cvar("portal_cost","-1")
		pCvars[SpawnPortal] = register_cvar("portal_spawn","0")
	}

bool:checkPortalPlace(Float: fOrigin[3],Float: fMins[3],Float: fMaxs[3]){
		new Float:fOriginTmp[3]
		
		xs_vec_copy(fOrigin,fOriginTmp)
		
		
		fOriginTmp[0] += fMins[0];
		fOriginTmp[1] += fMaxs[1];
		fOriginTmp[2] += fMaxs[2];
		if(!traceTo(fOrigin,fOriginTmp)){
			return false;
		}
		xs_vec_copy(fOrigin,fOriginTmp)
		
		
		fOriginTmp[0] += fMaxs[0];
		fOriginTmp[1] += fMaxs[1];
		fOriginTmp[2] += fMaxs[2];
		if(!traceTo(fOrigin,fOriginTmp)){
			return false;
		}
		xs_vec_copy(fOrigin,fOriginTmp)
		
		
		fOriginTmp[0] += fMins[0];
		fOriginTmp[1] += fMins[1];
		fOriginTmp[2] += fMaxs[2];
		if(!traceTo(fOrigin,fOriginTmp)){
			return false;
		}
		xs_vec_copy(fOrigin,fOriginTmp)
		
		fOriginTmp[0] += fMaxs[0];
		fOriginTmp[1] += fMins[1];
		fOriginTmp[2] += fMaxs[2];
		if(!traceTo(fOrigin,fOriginTmp)){
			return false;
		}
		xs_vec_copy(fOrigin,fOriginTmp)
		
		fOriginTmp[0] += fMins[0];
		fOriginTmp[1] += fMaxs[1];
		fOriginTmp[2] += fMins[2];
		if(!traceTo(fOrigin,fOriginTmp)){
			return false;
		}
		xs_vec_copy(fOrigin,fOriginTmp)
		
		fOriginTmp[0] += fMaxs[0];
		fOriginTmp[1] += fMaxs[1];
		fOriginTmp[2] += fMins[2];
		if(!traceTo(fOrigin,fOriginTmp)){
			return false;
		}
		xs_vec_copy(fOrigin,fOriginTmp)
		
		fOriginTmp[0] += fMins[0];
		fOriginTmp[1] += fMins[1];
		fOriginTmp[2] += fMins[2];
		if(!traceTo(fOrigin,fOriginTmp)){
			return false;
		}
		xs_vec_copy(fOrigin,fOriginTmp)
		
		fOriginTmp[0] += fMaxs[0];
		fOriginTmp[1] += fMins[1];
		fOriginTmp[2] += fMins[2];
		if(!traceTo(fOrigin,fOriginTmp)){
			return false;
		}
		xs_vec_copy(fOrigin,fOriginTmp)
		
		return true;
	}

bool:traceTo(const Float:fFrom[3],const Float:fTo[3]){
		new tr = create_tr2();
		
		engfunc(EngFunc_TraceLine, fFrom, fTo,0, 0, tr);
		
		new Float:fFrac;
		get_tr2(tr, TR_flFraction, fFrac);
		free_tr2(tr);
		
		return (fFrac == 1.0) 
		
	}

#if defined TEST
	Create_Line(const Float:start[3], const Float:stop[3], Float:go=10.0, r=0,g=0,b=255)
	{
		new Float:fStart[3], Float:fStop[3];
		new Float:fVec[3];
		xs_vec_sub(start, stop, fVec);
		xs_vec_normalize(fVec, fVec);

		xs_vec_mul_scalar(fVec, go, fVec);

		xs_vec_add(stop, fVec, fStop);
		xs_vec_sub(start, fVec, fStart);


		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(0)
		engfunc(EngFunc_WriteCoord, fStart[0])
		engfunc(EngFunc_WriteCoord,fStart[1])
		engfunc(EngFunc_WriteCoord,fStart[2])

		engfunc(EngFunc_WriteCoord,fStop[0])
		engfunc(EngFunc_WriteCoord,fStop[1])
		engfunc(EngFunc_WriteCoord,fStop[2])
		write_short(sprite)
		write_byte(1)
		write_byte(5)
		write_byte(1)//life
		write_byte(10)
		write_byte(0)
		write_byte(r)	// RED
		write_byte(g)	// GREEN
		write_byte(b)	// BLUE					
		write_byte(250)	// brightness
		write_byte(5)
		message_end()
	}
#endif
	/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1045\\ f0\\ fs16 \n\\ par }
*/
shayan123 is offline
Send a message via ICQ to shayan123 Send a message via AIM to shayan123 Send a message via Yahoo to shayan123 Send a message via Skype™ to shayan123
loiraolhosazul
Member
Join Date: May 2020
Old 02-23-2021 , 22:32   Re: fix bug portal gun
Reply With Quote #2

the same works for rehlds, see if you are using amxmodx 1.9.xx or 1.10.xx
loiraolhosazul is offline
shayan123
BANNED
Join Date: Oct 2020
Location: GB
Old 02-24-2021 , 05:46   Re: fix bug portal gun
Reply With Quote #3

i am using 1.8.2
shayan123 is offline
Send a message via ICQ to shayan123 Send a message via AIM to shayan123 Send a message via Yahoo to shayan123 Send a message via Skype™ to shayan123
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 09:31.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode