Добавяне на два модела за парашут в zp_sub_parachute

Ако имате затруднения при изработката/преработката на даден плъгин - пишете тук, ще се опитаме да ви помогнем!
Аватар
User12
Извън линия
Потребител
Потребител
Мнения: 321
Регистриран на: 25 Яну 2018, 22:39
Местоположение: Сливен
Се отблагодари: 40 пъти
Получена благодарност: 17 пъти
Обратна връзка:

Добавяне на два модела за парашут в zp_sub_parachute

Мнение от User12 » 27 Яну 2018, 01:49

Добър вечер от мен , опитвам се да направя този плъгин да работи със 2 скина на парашута 1 за хюманите и 1 за зомбитата . Разглеждах из нета теми затова как да направя определен модел да работи само за зомби , но сигурно не търся където трябва и не намерих никаква информация , обръщам се към вас ако можете да ми помогнете да настроя плъгина както искам . Ако е възможно да ми подскажете какви промени трябва да направя по кода или вие да го настройте и после малко да ми обясните да ми стане по ясно . В кода съм написал пътищата до моделите но само толкова .

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>

new const paramodel[] = "models/AZM/krilo2.mdl"
new const humanmodel[] = "models/AZM/parachute.mdl"

new bool:has_parachute[33], para_ent[33];

enum pcvar
{
	humans = 1,
	survivors,
	zombies,
	nemesis,
	fallspeed,
	detach
}

new pcvars[pcvar]

public plugin_init()
{
	register_plugin("[ZP] Sub-Plugin: Parachute", "1.1", "Random1, 93()|29!/<")
	
	pcvars[humans] =	register_cvar("zp_parachute_humans", "1")
	pcvars[survivors] =	register_cvar("zp_parachute_survivors", "1")
	pcvars[zombies] = 	register_cvar("zp_parachute_zombies", "1")
	pcvars[nemesis] = 	register_cvar("zp_parachute_nemesis", "1")
	pcvars[fallspeed] =	register_cvar("zp_parachute_fallspeed", "75")
	pcvars[detach] =	register_cvar("zp_parachute_detach", "1")
	
	register_forward(FM_PlayerPreThink, "fw_PreThink")
	RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
}

public plugin_precache()
{
	engfunc(EngFunc_PrecacheModel, "models/AZM/krilo2.mdl")
	engfunc(EngFunc_PrecacheModel, "models/AZM/parachute.mdl")
}

public client_connect(id)
	parachute_reset(id)

public client_disconnect(id)
	parachute_reset(id)

parachute_reset(id, keep = 0)
{
	if(para_ent[id] > 0) 
		if (pev_valid(para_ent[id])) 
			engfunc(EngFunc_RemoveEntity, para_ent[id]);
	
	if (!keep)
		has_parachute[id] = false;
	
	para_ent[id] = 0
	
	if (!has_parachute[id])
		has_parachute[id] = true;
}

// Ham Player Killed Forward
public fw_PlayerKilled(victim, attacker, shouldgib)
{
	engfunc(EngFunc_RemoveEntity, para_ent[victim]);
	para_ent[victim] = 0;
}

public fw_PreThink(id)
{
	//Parachute model animation information
	//0 - deploy - 84 frames
	//1 - idle - 39 frames
	//2 - detach - 29 frames
	
	if (!is_user_alive(id) || !has_parachute[id]
	|| !get_pcvar_num(pcvars[humans]) && !zp_get_user_zombie(id)
	&& !zp_get_user_survivor(id) || !get_pcvar_num(pcvars[survivors])
	&& zp_get_user_survivor(id)	|| !get_pcvar_num(pcvars[zombies])
	&& zp_get_user_zombie(id) && !zp_get_user_nemesis(id)
	|| !get_pcvar_num(pcvars[nemesis]) && zp_get_user_nemesis(id))
		return;
	
	new Float:fallingspeed = get_pcvar_float(pcvars[fallspeed]) * -1.0;
	new Float:frame;
	
	new button = pev(id, pev_button);
	new oldbutton = pev(id, pev_oldbuttons);
	new flags = pev(id, pev_flags);
	
	if (para_ent[id] > 0 && (flags & FL_ONGROUND))
	{
		if (get_pcvar_num(pcvars[detach]))
		{
			if (pev(para_ent[id],pev_sequence) != 2)
			{
				set_pev(para_ent[id], pev_sequence, 2);
				set_pev(para_ent[id], pev_gaitsequence, 1);
				set_pev(para_ent[id], pev_frame, 0.0);
				set_pev(para_ent[id], pev_fuser1, 0.0);
				set_pev(para_ent[id], pev_animtime, 0.0);
				return;
			}
			
			pev(para_ent[id],pev_fuser1, frame);
			frame += 2.0;
			set_pev(para_ent[id],pev_fuser1,frame);
			set_pev(para_ent[id],pev_frame,frame);

			if (frame > 254.0)
			{
				engfunc(EngFunc_RemoveEntity, para_ent[id]);
				para_ent[id] = 0;
			}
		}
		else
		{
			engfunc(EngFunc_RemoveEntity, para_ent[id]);
			para_ent[id] = 0;
		}
		
		return;
	}

	if (button & IN_USE)
	{

		new Float:velocity[3];
		pev(id, pev_velocity, velocity);

		if (velocity[2] < 0.0)
		{
			if(para_ent[id] <= 0)
			{
				para_ent[id] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
				
				if(para_ent[id] > 0)
				{
					set_pev(para_ent[id],pev_classname,"parachute");
					set_pev(para_ent[id], pev_aiment, id)
					set_pev(para_ent[id], pev_owner, id);
					set_pev(para_ent[id], pev_movetype, MOVETYPE_FOLLOW);
					engfunc(EngFunc_SetModel, para_ent[id], paramodel);
					engfunc(EngFunc_SetModel, para_ent[id], humanmodel);
					set_pev(para_ent[id], pev_sequence, 0);
					set_pev(para_ent[id], pev_gaitsequence, 1);
					set_pev(para_ent[id], pev_frame, 0.0);
					set_pev(para_ent[id], pev_fuser1, 0.0);
				}
			}
			
			if (para_ent[id] > 0)
			{
				set_pev(id, pev_sequence, 3)
				set_pev(id, pev_gaitsequence, 1)
				set_pev(id, pev_frame, 1.0)
				set_pev(id, pev_framerate, 1.0)

				velocity[2] = (velocity[2] + 40.0 < fallingspeed) ? velocity[2] + 40.0 : fallingspeed
				set_pev(id, pev_velocity, velocity)

				if (pev(para_ent[id],pev_sequence) == 0)
				{

					pev(para_ent[id],pev_fuser1, frame);
					frame += 1.0;
					set_pev(para_ent[id],pev_fuser1,frame);
					set_pev(para_ent[id],pev_frame,frame);

					if (frame > 100.0)
					{
						set_pev(para_ent[id], pev_animtime, 0.0);
						set_pev(para_ent[id], pev_framerate, 0.4);
						set_pev(para_ent[id], pev_sequence, 1);
						set_pev(para_ent[id], pev_gaitsequence, 1);
						set_pev(para_ent[id], pev_frame, 0.0);
						set_pev(para_ent[id], pev_fuser1, 0.0);
					}
				}
			}
		}
		else if (para_ent[id] > 0)
		{
			engfunc(EngFunc_RemoveEntity, para_ent[id]);
			para_ent[id] = 0;
		}
	}
	else if ((oldbutton & IN_USE) && para_ent[id] > 0)
	{
		engfunc(EngFunc_RemoveEntity, para_ent[id]);
		para_ent[id] = 0;
	}
}

public zp_user_infected_post(id, nemesis)
{
	if (!nemesis && get_pcvar_num(pcvars[zombies])
	|| nemesis && get_pcvar_num(pcvars[nemesis]))
		return;
	
	engfunc(EngFunc_RemoveEntity, para_ent[id]);
	para_ent[id] = 0;
}

public zp_user_humanized_post(id, survivor)
{
	if (!survivor && get_pcvar_num(pcvars[humans])
	|| survivor	&& get_pcvar_num(pcvars[survivors]))
		return;
	
	engfunc(EngFunc_RemoveEntity, para_ent[id]);
	para_ent[id] = 0;
}
Последно промяна от WaLkZ на 27 Яну 2018, 02:09, променено общо 1 път.
Причина: променено заглавие!
Каналът ми в YouTube : Георги Пламенов

Изображение

Аватар
WaLkZ
Извън линия
Администратор
Администратор
Мнения: 799
Регистриран на: 05 Окт 2016, 21:13
Местоположение: Варна
Се отблагодари: 75 пъти
Получена благодарност: 227 пъти
Обратна връзка:

Добавяне на два модела за парашут в zp_sub_parachute

Мнение от WaLkZ » 27 Яну 2018, 02:09

Код за потвърждение: Избери целия код

engfunc(EngFunc_SetModel, para_ent[id], paramodel);
engfunc(EngFunc_SetModel, para_ent[id], humanmodel);
->

Код за потвърждение: Избери целия код

engfunc(EngFunc_SetModel, para_ent[id], zp_get_user_zombie(id) ? paramodel : humanmodel);
Използвам тернарен оператор за проверка, вместо стандартна if else конструкция.

Аватар
User12
Извън линия
Потребител
Потребител
Мнения: 321
Регистриран на: 25 Яну 2018, 22:39
Местоположение: Сливен
Се отблагодари: 40 пъти
Получена благодарност: 17 пъти
Обратна връзка:

Добавяне на два модела за парашут в zp_sub_parachute

Мнение от User12 » 27 Яну 2018, 04:29

Супер , отговора беше навреме стана като заместих кода , по късно може да ми потрябва пак този Тернарен оператор , прикачвам 2 снимки да се види на хюмана и на зомбито как изглежда парашута . Може да локвате .
Изображение Изображение
Каналът ми в YouTube : Георги Пламенов

Изображение

Заключено
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Помощ в скриптирането”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 9 госта