Проблем с [ZP] Extra Item : Strip Bomb не работи (работи но като огнена граната)

Въпроси и проблеми свързани с AMXModX.
Отговори
Потребителски аватар

Автор на темата
yrango
Потребител
Потребител
Мнения: 8
Регистриран: 22 фев 2019, 23:42
Се отблагодари: 1 път
Получена благодарност: 1 път

Проблем с [ZP] Extra Item : Strip Bomb не работи (работи но като огнена граната)

Мнение от yrango » 12 юли 2019, 00:05

Имам следния проблем слагам гранатата всичко се компилира и е ОК добавям е в сървара но не работи "не вади грешки" няма експлозия не маха армора на хората даже друго прави запалва зомбитата като обикновената граната. Може ли някой да помогне да се оправи това нещо. Същия проблем го имах и с един друг код на граната EMP za nanosuit пак по същия начин и не работеше. Използвам zombie_plague_special_new мисля че от тук идва проблема но не съм много на ясно за това моля за помощ. Ето кода на стрип бомбата

Код: Избери всички

#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <zombie_plague_special>

#define fm_create_entity(%1) engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, %1))

new const NADE_TYPE_STRIPBOMB= 7777
new const sprite_grenade_trail[] = "sprites/laserbeam.spr"
new const sprite_grenade_ring[] = "sprites/shockwave.spr"
new const model_grenade_infect[] = "models/v_grenade_astrip.mdl"
new const bcost = 5;

new g_trailSpr, g_exploSpr, item_id, cvar_enabled, cvar_mode, cvar_radius, cvar_max
new has_bomb[33],had_bombs[33];

public plugin_init()
{
	register_plugin("[ZP] Extra Item: Strip Bomb", "1.6", "Hezerf")
	
	RegisterHam(Ham_Think, "grenade", "fw_ThinkGrenade")
	RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
	
	register_forward(FM_SetModel, "fw_SetModel")
	
	register_message(get_user_msgid("CurWeapon"), "message_cur_weapon")
	
	register_event("HLTV","Event_New_Round","a", "1=0", "2=0")
	
	cvar_enabled = register_cvar("zp_strip_bomb", "1")
	cvar_mode = register_cvar("zp_strip_mode", "0")
	cvar_radius = register_cvar("zp_strip_radius", "250.0")
	cvar_max = register_cvar("zp_strip_max","10")
}

public plugin_precache()
{
	g_trailSpr = engfunc(EngFunc_PrecacheModel, sprite_grenade_trail)
	g_exploSpr = engfunc(EngFunc_PrecacheModel, sprite_grenade_ring)
	
	engfunc(EngFunc_PrecacheModel, model_grenade_infect)
	
	item_id = zp_register_extra_item("Strip Bomb", bcost, ZP_TEAM_ZOMBIE)
}

public client_disconnected(id)
{
	has_bomb[id] = 0;
	had_bombs[id] = 0;
}

public Event_New_Round()
{
	arrayset(had_bombs,0,32);
	arrayset(has_bomb,0,32);
}
public zp_extra_item_selected(player, itemid)
{
	if(itemid != item_id)
		return;
	if(get_pcvar_num(cvar_max) == had_bombs[player])
	{
		zp_set_user_ammo_packs(player,zp_get_user_ammo_packs(player) + bcost)
		client_print(player, print_chat, "[ZP] You can't buy Strip Bomb !")
		return;
	}
	
	has_bomb[player] = 1
	had_bombs[player]++;
	fm_strip_user_gun(player, 9)
	fm_give_item(player, "weapon_smokegrenade")
}

public fw_PlayerKilled(victim, attacker, shouldgib)
	has_bomb[victim] = 0;

public fw_ThinkGrenade(entity)
{	
	if(!pev_valid(entity))
		return HAM_IGNORED
	
	static Float:dmgtime	
	pev(entity, pev_dmgtime, dmgtime)
	
	if (dmgtime > get_gametime())
		return HAM_IGNORED	
	
	if(pev(entity, pev_flTimeStepSound) == NADE_TYPE_STRIPBOMB)
	{
		stripbomb_explode(entity)
		
		return HAM_SUPERCEDE
	}
	
	return HAM_IGNORED  
}

public fw_SetModel(entity, const model[])
{
	static Float:dmgtime
	pev(entity, pev_dmgtime, dmgtime)
	
	new owner = pev(entity, pev_owner)
	
	if(!get_pcvar_num(cvar_enabled) || !dmgtime || !(equal(model[7], "w_sm", 4)) || !zp_get_user_zombie(owner) || !has_bomb[owner])
		return;
	
	fm_set_rendering(entity, kRenderFxGlowShell, 255, 128, 0, kRenderNormal, 16)
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_BEAMFOLLOW) // TE id
	write_short(entity) // entity
	write_short(g_trailSpr) // sprite
	write_byte(10) // life
	write_byte(10) // width
	write_byte(255) // r
	write_byte(128) // g
	write_byte(0) // b
	write_byte(200) // brightness
	message_end()
	
	set_pev(entity, pev_flTimeStepSound, NADE_TYPE_STRIPBOMB)
}

public stripbomb_explode(ent)
{
	if (!zp_has_round_started())
		return;
	
	static Float:originF[3]
	pev(ent, pev_origin, originF)
	
	create_blast(originF)
	
	//engfunc(EngFunc_EmitSound, ent, CHAN_WEAPON, grenade_infect[random_num(0, sizeof grenade_infect - 1)], 1.0, ATTN_NORM, 0, PITCH_NORM)
	
	static attacker
	attacker = pev(ent, pev_owner)
	
	has_bomb[attacker] = 0
	
	static victim
	victim = -1
	while ((victim = engfunc(EngFunc_FindEntityInSphere, victim, originF, get_pcvar_float(cvar_radius))) != 0)
	{
		if (!is_user_alive(victim) || zp_get_user_zombie(victim))
			continue;
		
		switch(get_pcvar_num(cvar_mode))
		{
			case 0 :
			{
				if (pev(victim, pev_armorvalue) <= 0)
					continue;
				
				set_pev(victim, pev_armorvalue, 0);
			}
			case 1 :
			{
				fm_strip_user_weapons(victim)
				fm_give_item(victim, "weapon_knife")
			}
			case 2 :
			{
				if (pev(victim, pev_armorvalue) > 0)				
					set_pev(victim, pev_armorvalue, 0)
				
				fm_strip_user_weapons(victim)
				fm_give_item(victim, "weapon_knife")
			}
		}
	}
	
	engfunc(EngFunc_RemoveEntity, ent)
}

public create_blast(const Float:originF[3])
{
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
	write_byte(TE_BEAMCYLINDER) // TE id
	engfunc(EngFunc_WriteCoord, originF[0]) // x
	engfunc(EngFunc_WriteCoord, originF[1]) // y
	engfunc(EngFunc_WriteCoord, originF[2]) // z
	engfunc(EngFunc_WriteCoord, originF[0]) // x axis
	engfunc(EngFunc_WriteCoord, originF[1]) // y axis
	engfunc(EngFunc_WriteCoord, originF[2]+385.0) // z axis
	write_short(g_exploSpr) // sprite
	write_byte(0) // startframe
	write_byte(0) // framerate
	write_byte(4) // life
	write_byte(60) // width
	write_byte(0) // noise
	write_byte(255) // red
	write_byte(128) // green
	write_byte(0) // blue
	write_byte(200) // brightness
	write_byte(0) // speed
	message_end()
	
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
	write_byte(TE_BEAMCYLINDER) // TE id
	engfunc(EngFunc_WriteCoord, originF[0]) // x
	engfunc(EngFunc_WriteCoord, originF[1]) // y
	engfunc(EngFunc_WriteCoord, originF[2]) // z
	engfunc(EngFunc_WriteCoord, originF[0]) // x axis
	engfunc(EngFunc_WriteCoord, originF[1]) // y axis
	engfunc(EngFunc_WriteCoord, originF[2]+470.0) // z axis
	write_short(g_exploSpr) // sprite
	write_byte(0) // startframe
	write_byte(0) // framerate
	write_byte(4) // life
	write_byte(60) // width
	write_byte(0) // noise
	write_byte(255) // red
	write_byte(164) // green
	write_byte(0) // blue
	write_byte(200) // brightness
	write_byte(0) // speed
	message_end()
	
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
	write_byte(TE_BEAMCYLINDER) // TE id
	engfunc(EngFunc_WriteCoord, originF[0]) // x
	engfunc(EngFunc_WriteCoord, originF[1]) // y
	engfunc(EngFunc_WriteCoord, originF[2]) // z
	engfunc(EngFunc_WriteCoord, originF[0]) // x axis
	engfunc(EngFunc_WriteCoord, originF[1]) // y axis
	engfunc(EngFunc_WriteCoord, originF[2]+555.0) // z axis
	write_short(g_exploSpr) // sprite
	write_byte(0) // startframe
	write_byte(0) // framerate
	write_byte(4) // life
	write_byte(60) // width
	write_byte(0) // noise
	write_byte(255) // red
	write_byte(200) // green
	write_byte(0) // blue
	write_byte(200) // brightness
	write_byte(0) // speed
	message_end()
}

public replace_models(id)
{
	if (!is_user_alive(id) || get_user_weapon(id) != CSW_SMOKEGRENADE || !has_bomb[id])
		return
	
	set_pev(id, pev_viewmodel2, model_grenade_infect)
}

public message_cur_weapon(msg_id, msg_dest, msg_entity)
	replace_models(msg_entity);

// Stocks from fakemeta_util
stock bool:fm_strip_user_gun(index, wid = 0, const wname[] = "")
{
	new ent_class[32];
	if (!wid && wname[0])
		copy(ent_class, sizeof ent_class - 1, wname);
	else
	{
		new weapon = wid, clip, ammo;
		if (!weapon && !(weapon = get_user_weapon(index, clip, ammo)))
			return false;
		
		get_weaponname(weapon, ent_class, sizeof ent_class - 1);
	}
	
	new ent_weap = fm_find_ent_by_owner(-1, ent_class, index);
	if (!ent_weap)
		return false;
	
	engclient_cmd(index, "drop", ent_class);
	
	new ent_box = pev(ent_weap, pev_owner);
	if (!ent_box || ent_box == index)
		return false;
	
	dllfunc(DLLFunc_Think, ent_box);
	
	return true;
}

stock fm_give_item(index, const item[])
{
	if (!equal(item, "weapon_", 7) && !equal(item, "ammo_", 5) && !equal(item, "item_", 5) && !equal(item, "tf_weapon_", 10))
		return 0;

	new ent = fm_create_entity(item);
	if (!pev_valid(ent))
		return 0;
	
	new Float:origin[3];
	pev(index, pev_origin, origin);
	set_pev(ent, pev_origin, origin);
	set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN);
	dllfunc(DLLFunc_Spawn, ent);
	
	new save = pev(ent, pev_solid);
	dllfunc(DLLFunc_Touch, ent, index);
	if (pev(ent, pev_solid) != save)
		return ent;
	
	engfunc(EngFunc_RemoveEntity, ent);
	
	return -1;
}

stock fm_set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16)
{
	new Float:RenderColor[3];
	RenderColor[0] = float(r);
	RenderColor[1] = float(g);
	RenderColor[2] = float(b);
	
	set_pev(entity, pev_renderfx, fx);
	set_pev(entity, pev_rendercolor, RenderColor);
	set_pev(entity, pev_rendermode, render);
	set_pev(entity, pev_renderamt, float(amount));
	
	return 1;
}

stock fm_strip_user_weapons(index)
{
	new ent = fm_create_entity("player_weaponstrip");
	if (!pev_valid(ent))
		return 0;
	
	dllfunc(DLLFunc_Spawn, ent);
	dllfunc(DLLFunc_Use, ent, index);
	engfunc(EngFunc_RemoveEntity, ent);
	
	return 1;
}

stock fm_find_ent_by_owner(index, const classname[], owner, jghgtype = 0)
{
	new strtype[11] = "classname", ent = index;
	switch (jghgtype)
	{
		case 1: strtype = "target";
		case 2: strtype = "targetname";
	}
	
	while ((ent = engfunc(EngFunc_FindEntityByString, ent, strtype, classname)) && pev(ent, pev_owner) != owner) {}
	
	return ent;
}

Отговори

Върни се в “Поддръжка / Помощ”

Кой е на линия

Потребители, разглеждащи този форум: Няма регистрирани потребители и 2 госта