Knife duel 1vs1

В този раздел можете да подавате всякакви заявки за намиране, изработка или преработка на плъгини/модове.
Аватар
eLBuToY
Извън линия
Потребител
Потребител
Мнения: 18
Регистриран на: 24 Авг 2020, 10:57
Местоположение: S.Brenica
Се отблагодари: 5 пъти

Knife duel 1vs1

Мнение от eLBuToY » 25 Авг 2020, 18:37

Може ли да ми направите дин knife duel 1vs1 за knife arena моля ако може да ми направите такъв плъгин или да ми дадете линк към него :yahoo:

Аватар
Drea<M>40BG ;]]
Извън линия
Потребител
Потребител
Мнения: 750
Регистриран на: 11 Окт 2016, 11:35
Се отблагодари: 115 пъти
Получена благодарност: 63 пъти
Обратна връзка:

Knife duel 1vs1

Мнение от Drea<M>40BG ;]] » 25 Авг 2020, 18:39


Аватар
eLBuToY
Извън линия
Потребител
Потребител
Мнения: 18
Регистриран на: 24 Авг 2020, 10:57
Местоположение: S.Brenica
Се отблагодари: 5 пъти

Knife duel 1vs1

Мнение от eLBuToY » 25 Авг 2020, 18:53

Drea<M>40BG ;]]
Този е когато останат двама от разлицни отботи а.. на мен ми трябва за кнайф мод арена ако се.. сещаш когато пишеш /kdc или /duel

Аватар
impossible
Извън линия
Потребител
Потребител
Мнения: 488
Регистриран на: 15 Юни 2019, 12:41
Се отблагодари: 23 пъти
Получена благодарност: 47 пъти

Knife duel 1vs1

Мнение от impossible » 25 Авг 2020, 18:58


Аватар
impossible
Извън линия
Потребител
Потребител
Мнения: 488
Регистриран на: 15 Юни 2019, 12:41
Се отблагодари: 23 пъти
Получена благодарност: 47 пъти

Knife duel 1vs1

Мнение от impossible » 25 Авг 2020, 19:08

хмм .. този плъгин до колкто виждам е платен
https://amxx-bg.info/forum/viewtopic.php?f=33&t=1469

Аватар
eLBuToY
Извън линия
Потребител
Потребител
Мнения: 18
Регистриран на: 24 Авг 2020, 10:57
Местоположение: S.Brenica
Се отблагодари: 5 пъти

Knife duel 1vs1

Мнение от eLBuToY » 25 Авг 2020, 19:40

impossible може ли да ме по-съветваш от къде мога да го купя

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

Knife duel 1vs1

Мнение от WaLkZ » 25 Авг 2020, 19:42

Може да ползваш тази руска версия. Единствено трябва да си преведеш менюта, съобщения в чата... Иначе добре е написан, не съм го тествал.

Изображение

Изображение

knife-arena.rar
в случай, че няма достъп до линка, който съм дал
(206.47 KiB) Свалено 273 пъти
knife-arena.rar
в случай, че няма достъп до линка, който съм дал
(206.47 KiB) Свалено 273 пъти

Аватар
eLBuToY
Извън линия
Потребител
Потребител
Мнения: 18
Регистриран на: 24 Авг 2020, 10:57
Местоположение: S.Brenica
Се отблагодари: 5 пъти

Knife duel 1vs1

Мнение от eLBuToY » 25 Авг 2020, 19:50

WaLkZ Благодаря ти ей сега ще го стествам.

Аватар
eLBuToY
Извън линия
Потребител
Потребител
Мнения: 18
Регистриран на: 24 Авг 2020, 10:57
Местоположение: S.Brenica
Се отблагодари: 5 пъти

Knife duel 1vs1

Мнение от eLBuToY » 25 Авг 2020, 19:56

WaLkZ Благодаря ти тествах го работи няма проблем при компилиране всичко бачка МС.

Аватар
eLBuToY
Извън линия
Потребител
Потребител
Мнения: 18
Регистриран на: 24 Авг 2020, 10:57
Местоположение: S.Brenica
Се отблагодари: 5 пъти

Knife duel 1vs1

Мнение от eLBuToY » 25 Авг 2020, 20:13

може ли някой да ми помогне с превода от руски ма български моля

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

#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>

#if AMXX_VERSION_NUM < 183
	#include <dhudmessage>
#endif

new const PLUGIN_NAME[] = "Knife Arena";
new const PLUGIN_VERSION[] = "1.0";
new const PLUGIN_AUTHOR[] = "6u3oH";

const ARENA_SETTINGS_ACCESS = ADMIN_IMMUNITY; // Флаг доступа к меню настроек арены
const ARENA_DUEL_TIMER_PRE = 10; // Время подготовки перед дуэлью (сек)
const ARENA_DUEL_TIMER_FIGHT = 180; // Время битвы на арене (сек)
const ARENA_DUEL_ROUNDS = 10; // Кол-во раундов на арене
const ARENA_DUEL_HEALTH = 50; // Устанавливаемое здоровье дуэлянтам
const ARENA_DUEL_AWARDS = 6000; // Награда за победу

new const ARENA_CLASSNAME[] = "arena";
new const ARENA_PREFIX[] = "Арена";
new const ARENA_MODEL[] = "models/arena/arena.mdl";
new const Float: ARENA_MINSIZE[] = {-337.0, -237.0, -2.5};
new const Float: ARENA_MAXSIZE[] = {337.0, 237.0, 2.5};
const ARENA_SEC_KEY = 0x846;
const TASK_DUEL_PRE = 0x131;
const TASK_ARENA = 0x152;

enum _:
{
	DUELANT_ONE = 0,
	DUELANT_TWO,
	ARENA_STATE_NOT,
	ARENA_STATE_EDIT,
	ARENA_STATE_READY,
	ARENA_STATE_BLOCK
};

new g_iMaxPlayers, g_iArenaSettingsMenu, g_iArenaEnt, g_iArenaState, g_iSpriteBeam;
new g_iDuelantOne, g_iDuelantTwo, g_iDuelRound, g_iDuelTimerPre, g_iDuelTimer, g_iDuelantKillsOne, g_iDuelantKillsTwo;
new g_iTempID[33];
new g_sArenaCfgSaveFile[256];
new HamHook: g_iFwdSpawn, HamHook: g_iFwdKilled, HamHook: g_iFwdTakeDmg;

public plugin_precache()
{
	precache_model(ARENA_MODEL);
	g_iSpriteBeam = precache_model("sprites/zbeam3.spr");
}

public client_disconnected(id)
{
	for(new iPlayer = 1; iPlayer <= g_iMaxPlayers; iPlayer++)
		if(g_iTempID[iPlayer] == id)
			g_iTempID[iPlayer] = FM_NULLENT;
			
	if(g_iArenaState == ARENA_STATE_BLOCK && id == g_iDuelantOne || id == g_iDuelantTwo)
		duel_reset_settings();
}

public plugin_init()
{
	register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
	
	register_clcmd("arena_settings", "Clcmd_ArenaSettings");
	register_clcmd("say /arena", "Clcmd_ArenaMenu");
	register_clcmd("say_team /arena", "Clcmd_ArenaMenu");
	register_clcmd("say /duel", "Clcmd_ArenaMenu");
	register_clcmd("say_team /duel", "Clcmd_ArenaMenu");
	
	DisableHamForward(g_iFwdSpawn = RegisterHam(Ham_Spawn, "player", "fwHam_SpawnPlayer_Post", 1));
	DisableHamForward(g_iFwdKilled = RegisterHam(Ham_Killed, "player", "fwHam_KilledPlayer_Post", 1));
	DisableHamForward(g_iFwdTakeDmg = RegisterHam(Ham_TakeDamage, "player", "fwHam_TakeDmgPlayer_Pre", 0));
	
	create_menu_arena_settings();
	check_cfg_save_file();
	
	g_iMaxPlayers = get_maxplayers();
}

public Clcmd_ArenaSettings(id)
{
	if(!is_user_alive(id))
	{
		color_print(id, "!y[!g%s!y] !yТолько для живых", ARENA_PREFIX);
		return;
	}
	
	if(~get_user_flags(id) & ARENA_SETTINGS_ACCESS)
	{
		color_print(id, "!y[!g%s!y] !yУ вас нет доступа", ARENA_PREFIX);
		return;
	}
	
	if(g_iArenaState == ARENA_STATE_BLOCK)
	{
		color_print(id, "!y[!g%s!y] !yАрена занята боем", ARENA_PREFIX);
		return;
	}
	
	menu_display(id, g_iArenaSettingsMenu);
}

public ArenaSettings_Handler(id, iMenu, iItem)
{
	if(iItem == MENU_EXIT || g_iArenaState == ARENA_STATE_BLOCK || !is_user_alive(id))
		return;
	
	switch(iItem)
	{
		case 0:
		{
			if(is_valid_ent(g_iArenaEnt))
			{
				color_print(id, "!y[!g%s!y] !yАрена уже создана", ARENA_PREFIX);
				return;
			}
			
			new Float: fOrigin[3];
			get_origin_aiming(id, fOrigin);
			arena_platform_create(fOrigin);
			
			g_iArenaState = ARENA_STATE_EDIT;
			color_print(id, "!y[!g%s!y] !yАрена успешно создана", ARENA_PREFIX);
		}
		
		case 1..6:
		{
			if(!is_valid_ent(g_iArenaEnt))
			{
				color_print(id, "!y[!g%s!y] !yАрена не создана", ARENA_PREFIX);
				return;
			}
			
			if(g_iArenaState != ARENA_STATE_EDIT)
			{
				color_print(id, "!y[!g%s!y] !yАрена должна быть в режиме редактирования", ARENA_PREFIX);
				return;
			}
			
			static iAxis[6]; iAxis = {0, 0, 1, 1, 2, 2};
			static iValue[6]; iValue = {10, -10, 10, -10, 10, -10};
			static Float: fOrigin[3];
			
			entity_get_vector(g_iArenaEnt, EV_VEC_origin, fOrigin);
			fOrigin[iAxis[iItem-1]] += iValue[iItem-1];
			entity_set_vector(g_iArenaEnt, EV_VEC_origin, fOrigin);
		}
		
		case 7:
		{
			if(!is_valid_ent(g_iArenaEnt))
			{
				color_print(id, "!y[!g%s!y] !yАрена не создана", ARENA_PREFIX);
				return;
			}
			
			if(entity_get_int(g_iArenaEnt, EV_INT_solid) == SOLID_TRIGGER)
			{
				color_print(id, "!y[!g%s!y] !yАрена уже сохранена", ARENA_PREFIX);
				return;
			}
			
			static Float: fOrigin[3], sOrigin[3][8], sData[32];
			entity_get_vector(g_iArenaEnt, EV_VEC_origin, fOrigin);
			
			float_to_str(fOrigin[0], sOrigin[0], 7);
			float_to_str(fOrigin[1], sOrigin[1], 7);
			float_to_str(fOrigin[2], sOrigin[2], 7);
			
			formatex(sData, charsmax(sData), "%s %s %s", sOrigin[0], sOrigin[1], sOrigin[2]);
			write_file(g_sArenaCfgSaveFile, sData, 1);
			
			entity_set_int(g_iArenaEnt, EV_INT_solid, SOLID_TRIGGER);
			set_rendering(g_iArenaEnt, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 0);
			
			g_iArenaState = ARENA_STATE_READY;
			color_print(id, "!y[!g%s!y] !yАрена скрыта, сохранена и готова к боям", ARENA_PREFIX);
		}
		
		case 8:
		{
			if(!is_valid_ent(g_iArenaEnt))
			{
				color_print(id, "!y[!g%s!y] !yАрена не создана", ARENA_PREFIX);
				return;
			}
			
			if(g_iArenaState == ARENA_STATE_EDIT)
			{
				color_print(id, "!y[!g%s!y] !yАрена уже в режиме редактирования", ARENA_PREFIX);
				return;
			}
			
			entity_set_int(g_iArenaEnt, EV_INT_solid, SOLID_BBOX);
			set_rendering(g_iArenaEnt, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 255);
			
			g_iArenaState = ARENA_STATE_EDIT;
			color_print(id, "!y[!g%s!y] !yАрена переведена в режим редактирования", ARENA_PREFIX);
		}
		
		case 9:
		{
			if(!is_valid_ent(g_iArenaEnt))
			{
				color_print(id, "!y[!g%s!y] !yАрена не создана", ARENA_PREFIX);
				return;
			}
			
			remove_entity(g_iArenaEnt);
			write_file(g_sArenaCfgSaveFile, "", 1);
			
			g_iArenaState = ARENA_STATE_NOT;
			color_print(id, "!y[!g%s!y] !yАрена удалена", ARENA_PREFIX);
		}
	}
	
	menu_display(id, g_iArenaSettingsMenu);
}

public Clcmd_ArenaMenu(id)
{
	if(!is_user_alive(id))
	{
		color_print(id, "!y[!g%s!y] !yАрена для живых", ARENA_PREFIX);
		return;
	}
	
	if(g_iArenaState != ARENA_STATE_READY)
	{
		color_print(id, "!y[!g%s!y] !yАрена в данный момент недоступна", ARENA_PREFIX);
		return;
	}
	
	new iTeam = get_user_team(id), iMenu = menu_create("\rВыбор противника для арены\w", "ChooseEnemy_Handler"), iCount;
	static sName[32], sID[3];
	
	for(new iPlayer = 1; iPlayer <= g_iMaxPlayers; iPlayer++)
	{
		if(!is_user_alive(iPlayer))
			continue;
			
		if(iTeam == get_user_team(iPlayer))
			continue;
			
		get_user_name(iPlayer, sName, charsmax(sName));
		num_to_str(iPlayer, sID, charsmax(sID));
		menu_additem(iMenu, sName, sID);
			
		iCount++;
	}
	
	if(iCount > 0)
	{
		menu_setprop(iMenu, MPROP_BACKNAME, "Назад");
		menu_setprop(iMenu, MPROP_NEXTNAME, "Далее");
		menu_setprop(iMenu, MPROP_EXITNAME, "Выход");
		
		menu_display(id, iMenu);
	}else{
		color_print(id, "!y[!g%s!y] !yНет игроков для битвы на арене", ARENA_PREFIX);
		menu_destroy(iMenu);
	}
}

public ChooseEnemy_Handler(id, iMenu, iItem)
{
	new sID[3], sTemp[1], iPlayer;
	menu_item_getinfo(iMenu, iItem, iPlayer, sID, charsmax(sID), sTemp, charsmax(sTemp), iPlayer);
	iPlayer = str_to_num(sID);
	
	if(is_user_alive(id) && is_user_alive(iPlayer) && g_iArenaState == ARENA_STATE_READY)
	{
		static sName[32], sInfo[128];
		get_user_name(id, sName, charsmax(sName));
		formatex(sInfo, charsmax(sInfo), "\y%s \wвызвал вас на дуэль", sName);
		
		new iMenuEnemy = menu_create(sInfo, "ChooseEnemyAgree_Handler");
		g_iTempID[iPlayer] = id;
		
		menu_additem(iMenuEnemy, "Согласиться");
		menu_setprop(iMenuEnemy, MPROP_EXITNAME, "Отказаться");
		
		menu_display(iPlayer, iMenuEnemy, 0);
	}
	
	menu_destroy(iMenu);
}

public ChooseEnemyAgree_Handler(iPlayer, iMenu, iItem)
{
	if(iItem == ITEM_IGNORE && is_user_alive(iPlayer) && is_user_alive(g_iTempID[iPlayer]) && g_iArenaState == ARENA_STATE_READY)
		start_duel_pre(g_iTempID[iPlayer], iPlayer);
	else if(is_user_connected(g_iTempID[iPlayer]))
		color_print(g_iTempID[iPlayer], "!y[!g%s!y] !yБитва на арене отменена", ARENA_PREFIX);
	
	menu_destroy(iMenu);
}

public start_duel_pre(id, iPlayer)
{
	g_iArenaState = ARENA_STATE_BLOCK;
	g_iDuelantOne = id;
	g_iDuelantTwo = iPlayer;
	
	entity_set_int(g_iArenaEnt, EV_INT_solid, SOLID_BBOX);
	set_rendering(g_iArenaEnt, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 255);
	
	EnableHamForward(g_iFwdSpawn);
	EnableHamForward(g_iFwdKilled);
	EnableHamForward(g_iFwdTakeDmg);
	
	ExecuteHamB(Ham_CS_RoundRespawn, id);
	ExecuteHamB(Ham_CS_RoundRespawn, iPlayer);
	
	teleport_to_points(id, DUELANT_ONE);
	teleport_to_points(iPlayer, DUELANT_TWO);
	
	entity_set_int(id, EV_INT_flags, entity_get_int(id, EV_INT_flags) | FL_FROZEN);
	entity_set_int(iPlayer, EV_INT_flags, entity_get_int(iPlayer, EV_INT_flags) | FL_FROZEN);
	entity_set_float(id, EV_FL_takedamage, DAMAGE_NO);
	entity_set_float(iPlayer, EV_FL_takedamage, DAMAGE_NO);
	
	g_iDuelTimerPre = ARENA_DUEL_TIMER_PRE;
	g_iDuelRound = 1;
	g_iDuelantKillsOne = g_iDuelantKillsTwo = 0;
	set_task(1.0, "Task_DuelPre", TASK_DUEL_PRE, .flags = "b");
}

public Task_DuelPre()
{
	if(--g_iDuelTimerPre <= 0)
	{
		if(is_user_alive(g_iDuelantOne))
		{
			entity_set_int(g_iDuelantOne, EV_INT_flags, entity_get_int(g_iDuelantOne, EV_INT_flags) & ~FL_FROZEN);
			entity_set_float(g_iDuelantOne, EV_FL_takedamage, DAMAGE_YES);
		}
		
		if(is_user_alive(g_iDuelantTwo))
		{
			entity_set_int(g_iDuelantTwo, EV_INT_flags, entity_get_int(g_iDuelantTwo, EV_INT_flags) & ~FL_FROZEN);
			entity_set_float(g_iDuelantTwo, EV_FL_takedamage, DAMAGE_YES);
		}
		
		remove_task(TASK_DUEL_PRE);
		g_iDuelTimer = ARENA_DUEL_TIMER_FIGHT;
		set_task(1.0, "Task_Arena", TASK_ARENA, .flags = "b");
		return;
	}
	
	if(is_user_alive(g_iDuelantOne))
		create_beam_cylinder(g_iDuelantOne);
		
	if(is_user_alive(g_iDuelantTwo))
		create_beam_cylinder(g_iDuelantTwo);
	
	static sName1[32], sName2[32];
	get_user_name(g_iDuelantOne, sName1, charsmax(sName1));
	get_user_name(g_iDuelantTwo, sName2, charsmax(sName2));
		
	set_dhudmessage(random_num(0, 255), random_num(0, 255), random_num(0, 255), -1.0, 0.15, 0, 0.1, 1.0, 0.1, 0.1);
	show_dhudmessage(g_iDuelantOne, "Дуэль^n[%s vs %s]^nПодготовка: %i сек", sName1, sName2, g_iDuelTimerPre);
	show_dhudmessage(g_iDuelantTwo, "Дуэль^n[%s vs %s]^nПодготовка: %i сек", sName1, sName2, g_iDuelTimerPre);
}

public Task_Arena()
{
	if(is_user_alive(g_iDuelantOne) && is_user_alive(g_iDuelantTwo))
	{
		static sTime[32];
		g_iDuelTimer--;
		
		if(g_iDuelTimer >= 60)
			formatex(sTime, charsmax(sTime), "%i мин %i сек", g_iDuelTimer / 60, g_iDuelTimer % 60);
		else if(g_iDuelTimer > 0)
			formatex(sTime, charsmax(sTime), "%i сек", g_iDuelTimer);
		else
		{
			duel_arena_end();
			duel_reset_settings();
			return;
		}
		
		static sName1[32], sName2[32];
		get_user_name(g_iDuelantOne, sName1, charsmax(sName1));
		get_user_name(g_iDuelantTwo, sName2, charsmax(sName2));
		
		set_dhudmessage(255, 0, 0, -1.0, 0.01, 0, 0.1, 1.0, 0.1, 0.1);
		show_dhudmessage(0, "Дуэль [%s]^n[%s vs %s]^nРаунд: [%i/%i]^nСчёт: [%i | %i]", sTime, sName1, sName2, g_iDuelRound, ARENA_DUEL_ROUNDS, g_iDuelantKillsOne, g_iDuelantKillsTwo);
			
		check_is_duelant_to_plat(g_iDuelantOne);
		check_is_duelant_to_plat(g_iDuelantTwo);
	}
}

public fwHam_SpawnPlayer_Post(id)
{
	if(id == g_iDuelantOne)
	{
		entity_set_float(id, EV_FL_health, float(ARENA_DUEL_HEALTH));
		
		fm_strip_user_weapons(id);
		fm_give_item(id, "weapon_knife");
		
		teleport_to_points(id, DUELANT_ONE);
	}
	else if(id == g_iDuelantTwo)
	{
		entity_set_float(id, EV_FL_health, float(ARENA_DUEL_HEALTH));
		
		fm_strip_user_weapons(id);
		fm_give_item(id, "weapon_knife");
		
		teleport_to_points(id, DUELANT_TWO);
	}
}

public fwHam_KilledPlayer_Post(id)
{
	if(id == g_iDuelantOne)
	{
		if(++g_iDuelRound > ARENA_DUEL_ROUNDS)
		{
			duel_arena_end();
			duel_reset_settings();
		}
		
		if(is_user_connected(g_iDuelantOne))
			ExecuteHamB(Ham_CS_RoundRespawn, g_iDuelantOne);
			
		if(is_user_connected(g_iDuelantTwo))	
			ExecuteHamB(Ham_CS_RoundRespawn, g_iDuelantTwo);
		
		g_iDuelantKillsTwo++;
	}
	else if(id == g_iDuelantTwo)
	{
		if(++g_iDuelRound >= ARENA_DUEL_ROUNDS)
		{
			duel_arena_end();
			duel_reset_settings();
		}
		
		if(is_user_connected(g_iDuelantOne))
			ExecuteHamB(Ham_CS_RoundRespawn, g_iDuelantOne);
			
		if(is_user_connected(g_iDuelantTwo))	
			ExecuteHamB(Ham_CS_RoundRespawn, g_iDuelantTwo);
		
		g_iDuelantKillsOne++;
	}
}

public fwHam_TakeDmgPlayer_Pre(iVictim, iInflictor, iAttacker, Float: fDmg, iTypeDmg)
{
	return (iVictim == g_iDuelantOne && iAttacker != g_iDuelantTwo ||
	iVictim == g_iDuelantTwo && iAttacker != g_iDuelantOne) ? HAM_SUPERCEDE : HAM_IGNORED;
}

public teleport_to_points(id, iDuelantNum)
{
	new Float: fOrigin[3];
	entity_get_vector(g_iArenaEnt, EV_VEC_origin, fOrigin);
	fOrigin[2] += 40;
	
	switch(iDuelantNum)
	{
		case DUELANT_ONE: fOrigin[0] -= 300;
		case DUELANT_TWO: fOrigin[0] += 300;
	}
	
	entity_set_vector(id, EV_VEC_origin, fOrigin);
}

public check_is_duelant_to_plat(id)
{
	new iEnt, iTrace, Float: fOriginStart[3], Float: fOriginEnd[3];
	
	entity_get_vector(id, EV_VEC_origin, fOriginStart);
	fOriginEnd = fOriginStart; fOriginEnd[2] -= 500;
	iTrace = create_tr2();
	engfunc(EngFunc_TraceLine, fOriginStart, fOriginEnd, 0, id, iTrace);
	iEnt = get_tr2(iTrace, TR_pHit);
		
	if(!pev_valid(iEnt) || entity_get_int(iEnt, EV_INT_iuser1) != ARENA_SEC_KEY)
	{
		teleport_to_points(g_iDuelantOne, DUELANT_ONE);
		teleport_to_points(g_iDuelantTwo, DUELANT_TWO);
	}
}

public create_menu_arena_settings()
{
	g_iArenaSettingsMenu = menu_create("\rНастройки арены", "ArenaSettings_Handler");
	
	menu_additem(g_iArenaSettingsMenu, "\yУстановить");
	menu_additem(g_iArenaSettingsMenu, "\wСместить \yвперёд");
	menu_additem(g_iArenaSettingsMenu, "\wСместить \yназад");
	menu_additem(g_iArenaSettingsMenu, "\wСместить \yвправо");
	menu_additem(g_iArenaSettingsMenu, "\wСместить \yвлево");
	menu_additem(g_iArenaSettingsMenu, "\wСместить \yвверх");
	menu_additem(g_iArenaSettingsMenu, "\wСместить \yвниз");
	menu_additem(g_iArenaSettingsMenu, "Сохранить");
	menu_additem(g_iArenaSettingsMenu, "Редактировать");
	menu_additem(g_iArenaSettingsMenu, "Удалить");
	
	menu_setprop(g_iArenaSettingsMenu, MPROP_BACKNAME, "\wНазад");
	menu_setprop(g_iArenaSettingsMenu, MPROP_NEXTNAME, "Далее");
	menu_setprop(g_iArenaSettingsMenu, MPROP_EXITNAME, "Выход");
}

public check_cfg_save_file()
{
	if(!dir_exists("addons/amxmodx/data/arena"))
		mkdir("addons/amxmodx/data/arena")
	
	new sData[32]; get_mapname(sData, charsmax(sData));
	formatex(g_sArenaCfgSaveFile, charsmax(g_sArenaCfgSaveFile), "addons/amxmodx/data/arena/%s.cfg", sData);
	write_file(g_sArenaCfgSaveFile, "[Система сохранения координат арены] [by 6u3oH]", 0);
	
	new sOrigin[3][8], Float: fOrigin[3], iLen;
	read_file(g_sArenaCfgSaveFile, 1, sData, charsmax(sData), iLen);
	
	if(sData[0] == EOS)
		g_iArenaState = ARENA_STATE_NOT;
	else
	{
		parse(sData, sOrigin[0], 7, sOrigin[1], 7, sOrigin[2], 7);
		
		fOrigin[0] = str_to_float(sOrigin[0]);
		fOrigin[1] = str_to_float(sOrigin[1]);
		fOrigin[2] = str_to_float(sOrigin[2]);
		
		arena_platform_create(fOrigin);
		
		entity_set_int(g_iArenaEnt, EV_INT_solid, SOLID_TRIGGER);
		set_rendering(g_iArenaEnt, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 0);
		
		g_iArenaState = ARENA_STATE_READY;
	}
}

public arena_platform_create(Float: fOrigin[3])
{
	g_iArenaEnt = create_entity("info_null");
	
	entity_set_string(g_iArenaEnt, EV_SZ_classname, ARENA_CLASSNAME);
	entity_set_int(g_iArenaEnt, EV_INT_solid, SOLID_BBOX);
	entity_set_int(g_iArenaEnt, EV_INT_movetype, MOVETYPE_FLY);
	entity_set_int(g_iArenaEnt, EV_INT_iuser1, ARENA_SEC_KEY);
	entity_set_vector(g_iArenaEnt, EV_VEC_origin, fOrigin);
	entity_set_model(g_iArenaEnt, ARENA_MODEL);
	entity_set_size(g_iArenaEnt, ARENA_MINSIZE, ARENA_MAXSIZE);	
}

public get_origin_aiming(id, Float: fData[3])
{
	new Float: fOrigin[3], Float: fViewOfs[3];
	
	entity_get_vector(id, EV_VEC_origin, fOrigin);
	entity_get_vector(id, EV_VEC_view_ofs, fViewOfs);
	
	for(new i; i < 3; i++)
		fOrigin[i] += fViewOfs[i];
	
	entity_get_vector(id, EV_VEC_v_angle, fData);
	engfunc(EngFunc_MakeVectors, fData);
	global_get(glb_v_forward, fData);
	
	for(new i; i < 3; i++)
		fData[i] = fData[i] * 9999.0 + fOrigin[i];

	engfunc(EngFunc_TraceLine, fOrigin, fData, IGNORE_MONSTERS, id, 0);
	get_tr2(0, TR_vecEndPos, fData);
}

public duel_reset_settings()
{		
	entity_set_int(g_iArenaEnt, EV_INT_solid, SOLID_TRIGGER);
	set_rendering(g_iArenaEnt, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 0);
		
	if(is_user_alive(g_iDuelantOne))
	{
		entity_set_int(g_iDuelantOne, EV_INT_flags, entity_get_int(g_iDuelantOne, EV_INT_flags) & ~FL_FROZEN);
		entity_set_float(g_iDuelantOne, EV_FL_takedamage, DAMAGE_YES);
		ExecuteHamB(Ham_CS_RoundRespawn, g_iDuelantOne);
	}
		
	if(is_user_alive(g_iDuelantTwo))
	{
		entity_set_int(g_iDuelantTwo, EV_INT_flags, entity_get_int(g_iDuelantTwo, EV_INT_flags) & ~FL_FROZEN);
		entity_set_float(g_iDuelantTwo, EV_FL_takedamage, DAMAGE_YES);
		ExecuteHamB(Ham_CS_RoundRespawn, g_iDuelantTwo);
	}
	
	remove_task(TASK_ARENA);
	g_iArenaState = ARENA_STATE_READY;
	g_iDuelantOne = FM_NULLENT;
	g_iDuelantTwo = FM_NULLENT;
}

public duel_arena_end()
{
	static sName1[32], sName2[32];
	get_user_name(g_iDuelantOne, sName1, charsmax(sName1));
	get_user_name(g_iDuelantTwo, sName2, charsmax(sName2));
	
	if(g_iDuelRound == 0)
		color_print(0, "!y[!g%s!y] !g%s !yи !g%s !yза бездействие в дуэли ничего не получают", ARENA_PREFIX, sName1, sName2);
	else if(g_iDuelantKillsOne > g_iDuelantKillsTwo)
	{
		fm_set_user_money(g_iDuelantOne, fm_get_user_money(g_iDuelantOne) + ARENA_DUEL_AWARDS);
		color_print(0, "!y[!g%s!y] !g%s !yпобедил !g%s !yв дуэли и получает !g%i$", ARENA_PREFIX, sName1, sName2, ARENA_DUEL_AWARDS);
	}
	else if(g_iDuelantKillsOne < g_iDuelantKillsTwo)
	{
		fm_set_user_money(g_iDuelantTwo, fm_get_user_money(g_iDuelantTwo) + ARENA_DUEL_AWARDS);
		color_print(0, "!y[!g%s!y] !g%s !yпобедил !g%s !yв дуэли и получает !g%i$", ARENA_PREFIX, sName2, sName1, ARENA_DUEL_AWARDS);
	}else{
		fm_set_user_money(g_iDuelantOne, fm_get_user_money(g_iDuelantOne) + ARENA_DUEL_AWARDS / 2);
		fm_set_user_money(g_iDuelantTwo, fm_get_user_money(g_iDuelantTwo) + ARENA_DUEL_AWARDS / 2);
		color_print(0, "!y[!g%s!y] !g%s !yи !g%s !yсыграли в ничью на дуэли и получают !g%i$", ARENA_PREFIX, sName1, sName2, ARENA_DUEL_AWARDS / 2);
	}
}

public create_beam_cylinder(id)
{
	new Float: fOrigin[3];
	entity_get_vector(id, EV_VEC_origin, fOrigin);
	
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0);
	write_byte(TE_BEAMCYLINDER);
	engfunc(EngFunc_WriteCoord, fOrigin[0]);
	engfunc(EngFunc_WriteCoord, fOrigin[1]);
	engfunc(EngFunc_WriteCoord, fOrigin[2]);
	engfunc(EngFunc_WriteCoord, fOrigin[0]);
	engfunc(EngFunc_WriteCoord, fOrigin[1]);
	engfunc(EngFunc_WriteCoord, fOrigin[2] + 400.0);
	write_short(g_iSpriteBeam);
	write_byte(0);
	write_byte(0);
	write_byte(4);
	write_byte(60);
	write_byte(0);
	
	switch(get_user_team(id))
	{
		case 1:
		{
			write_byte(255);
			write_byte(0);
			write_byte(0);
		}
		
		case 2:
		{
			write_byte(0);
			write_byte(0);
			write_byte(255);
		}
		
		default:
		{
			write_byte(0);
			write_byte(255);
			write_byte(0);
		}
	}
	
	write_byte(200);
	write_byte(0);
	message_end()
}

public fm_get_user_money(id)
{
	return get_pdata_int(id, 0x73);
}

public fm_set_user_money(id, iMoney)
{
	static iMsg;
	if(!iMsg)
		iMsg = get_user_msgid("Money");
	
	set_pdata_int(id, 0x73, iMoney);
	message_begin(MSG_ONE, iMsg, {0, 0, 0}, id);
	write_long(iMoney);
	write_byte(1);
	message_end();
}

public fm_strip_user_weapons(id)
{
	new iEnt = create_entity("player_weaponstrip");

	dllfunc(DLLFunc_Spawn, iEnt);
	dllfunc(DLLFunc_Use, iEnt, id);
	engfunc(EngFunc_RemoveEntity, iEnt);
}

public fm_give_item(id, const sItem[])
{
	new iEnt = create_entity(sItem);

	new Float: fOrigin[3];
	entity_get_vector(id, EV_VEC_origin, fOrigin);
	entity_set_vector(iEnt, EV_VEC_origin, fOrigin);
	entity_set_int(iEnt, EV_INT_spawnflags, entity_get_int(iEnt, EV_INT_spawnflags) | SF_NORESPAWN);
	dllfunc(DLLFunc_Spawn, iEnt);
	dllfunc(DLLFunc_Touch, iEnt, id);
}

public color_print(const id, const input[], any:...)
{
	new count = 1, players[32]; static msg[191], iMsg;
	
	if(!iMsg)
		iMsg = get_user_msgid("SayText");
	
	vformat(msg, 190, input, 3);
	
	replace_all(msg, 190, "!g", "^4"); // Green Color
	replace_all(msg, 190, "!y", "^1"); // Default Color
	replace_all(msg, 190, "!t", "^3"); // Team Color
	
	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, iMsg, _, players[i]);
			write_byte(players[i]);
			write_string(msg); 
			message_end();
		}
	}
}
Последно промяна от OciXCrom на 25 Авг 2020, 21:18, променено общо 1 път.
Причина: Ползвай [code] таг.

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

Обратно към “Заявки за плъгини”

Кой е на линия

Потребители разглеждащи този форум: Bing [Bot], Google [Bot] и 10 госта