Не отчита правилната база при залагането на Ц4?

В този раздел можете да подавате всякакви заявки за намиране, изработка или преработка на плъгини/модове.
Аватар
iv69
Извън линия
Потребител
Потребител
Мнения: 744
Регистриран на: 17 Мар 2018, 15:34
Се отблагодари: 214 пъти
Получена благодарност: 39 пъти

Не отчита правилната база при залагането на Ц4?

Мнение от iv69 » 17 Ное 2019, 11:28

Здравейте отново,
Ползвам кода по-долу, който постоянно показва в радара на играчите какво е състоянието на бомбата(С4): ако е изпусната от терорист например, дава "метрите" до там къде е паднала, ако е заложена: къде(на коя база) и след колко секунди ще избухне! Проблема е обаче, че след залагане така написан кода винаги показва(не ми е ясно защо), че е заложена само на база "В" ?!
Може ли да бъде оправен този проблем, но така, че дори и да се преинсталира сървъра - плъгина пак да си работи точно?
Благодаря!

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

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

#define REFRESH_DELAY    0.2
#define UnitsToMeters(%1) (%1 * 0.0254)

new Float:gflLastCheck[ 33 ];
new bool:IsBombPlanted
new HandleHudSyncObject, gMaxPlayers
new UsedBombSite
new pointnum, g_c4timer


public plugin_init()
{
	register_plugin("C4 Huds", "0.1", "N" )
	
	pointnum = get_cvar_pointer("mp_c4timer");
	
	register_logevent("Logevent_RoundEnd", 2, "1&Restart_Round_");
	register_logevent("Logevent_RoundEnd"   , 2, "1=Round_End")  
	register_logevent("Logevent_RoundStart", 2, "1=Round_Start");
	
	register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0")
	register_event("TextMsg", "Event_NewRound", "a", "2=#Game_Commencing")  
	
	RegisterHam( Ham_Player_PostThink, "player", "bacon_PostThink" );

	HandleHudSyncObject = CreateHudSyncObj()
	gMaxPlayers = get_maxplayers( );
}

public Logevent_RoundStart()
{
	g_c4timer = -1;
	remove_task(652450);
	IsBombPlanted = false;
}

public bacon_PostThink( id )
{
    if( is_user_alive( id ) /*&& get_user_team( id ) == 1*/ )
    {
        new Float:flGameTime = get_gametime( );
        
        if( flGameTime - gflLastCheck[ id ] > REFRESH_DELAY )
        {
            new iEntity = find_ent_by_class( -1, "weapon_c4" ), iWeaponBox;
            if( iEntity > 0 && (iWeaponBox = entity_get_edict( iEntity, EV_ENT_owner )) > gMaxPlayers && is_valid_ent( iWeaponBox ) )
            {
                set_hudmessage( 0, 200, 0, 0.01, 0.13, 0, 6.0, REFRESH_DELAY );
                ShowSyncHudMsg( id, HandleHudSyncObject, "C4 Distance: %.0f m", UnitsToMeters( entity_range( id, iWeaponBox ) ) );
            
                gflLastCheck[ id ] = flGameTime;
            }
        }
    }            
}

public dispTime()
{   
	if(!IsBombPlanted)
	{
		remove_task(652450);
		return;
	}
 
	if(g_c4timer >= 0)
	{
		if(g_c4timer > 13) set_hudmessage(0, 150, 0, 0.01, 0.13, 0, 1.0, 1.0, 0.01, 0.01, -1);
		else if(g_c4timer > 7) set_hudmessage(150, 150, 0, 0.01, 0.13, 0, 1.0, 1.0, 0.01, 0.01, -1);
		else set_hudmessage(150, 0, 0, 0.01, 0.13, 0, 1.0, 1.0, 0.01, 0.01, -1);
		
		ShowSyncHudMsg(0, HandleHudSyncObject, "Warning - C4^nBombSite: %s^nTimer: %d",UsedBombSite == 1 ? "A" :"B", g_c4timer)   
 
		--g_c4timer;
	}
} 

public bomb_planted(id) 
{ 
	set_bombsite(id)
	IsBombPlanted = true 
	
	g_c4timer = get_pcvar_num(pointnum);
	dispTime()
	set_task(1.0, "dispTime", 652450, "", 0, "b");
} 

public set_bombsite(id)
{
	new Float:origin[3];
	pev(id,pev_origin,origin);
	new ent = -1
	while((ent = find_ent_in_sphere(ent,origin,300.0)))
	{
        if(ent == 6) 
			UsedBombSite = 0
		else if (ent == 43)
			UsedBombSite = 1
	}
}

public bomb_explode() 
{ 
	IsBombPlanted = false 
	remove_task(652450);
} 

public bomb_defused() 
{
	IsBombPlanted = false 
	remove_task(652450);
}

public Logevent_RoundEnd() 
{ 
	IsBombPlanted      = false     
	g_c4timer = -1;
	remove_task(652450);
} 

public Event_NewRound() 
{  
	IsBombPlanted  = false
}

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Не отчита правилната база при залагането на Ц4?

Мнение от OciXCrom » 17 Ное 2019, 14:50

Както виждам този плъгин е направен да работи само за някоя определена карта. Предполагам dust2? Надали е възможно плъгинът сам да намира коя база е коя на всяка карта.

Аватар
iv69
Извън линия
Потребител
Потребител
Мнения: 744
Регистриран на: 17 Мар 2018, 15:34
Се отблагодари: 214 пъти
Получена благодарност: 39 пъти

Не отчита правилната база при залагането на Ц4?

Мнение от iv69 » 17 Ное 2019, 17:07

OciXCrom написа: 17 Ное 2019, 14:50 Както виждам този плъгин е направен да работи само за някоя определена карта. Предполагам dust2? Надали е възможно плъгинът сам да намира коя база е коя на всяка карта.
Точно така е ! Забравил бях за тази подробност да я подчертая! Може ли да се направи така, че да си намира винаги базата за картата de_dust2 ?

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Не отчита правилната база при залагането на Ц4?

Мнение от OciXCrom » 17 Ное 2019, 21:13

Промени функцията set_bombsite() по този начин:

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

public set_bombsite(id)
{
	new iEnts[2]
	find_sphere_class(id, "func_bomb_target", 300.0, iEnts, sizeof(iEnts))
	UsedBombSite = iEnts[0] == 75 ? 1 : 0
}
Ако не засича правилно на някои места, увеличи радиуса (300.0).

Аватар
iv69
Извън линия
Потребител
Потребител
Мнения: 744
Регистриран на: 17 Мар 2018, 15:34
Се отблагодари: 214 пъти
Получена благодарност: 39 пъти

Не отчита правилната база при залагането на Ц4?

Мнение от iv69 » 17 Ное 2019, 21:55

OciXCrom написа: 17 Ное 2019, 21:13 Промени функцията set_bombsite() по този начин:

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

public set_bombsite(id)
{
	new iEnts[2]
	find_sphere_class(id, "func_bomb_target", 300.0, iEnts, sizeof(iEnts))
	UsedBombSite = iEnts[0] == 75 ? 1 : 0
}
Ако не засича правилно на някои места, увеличи радиуса (300.0).
Тествам го. Благодаря. Ще дам отзиви :clap:

Добавено преди 24 минути 49 секунди:
Не, пробвах с 300.0 не стана. Сега смених на 500.0 , но мисля, че пак ще е същото. Всъщност ако е някаква помощ: И преди и сега, без значение на коя база е заложено С4 - винаги показва че е заложена на база "В". Не знам , говорят ли ти нещо тези две стойности:
60 - A
53 - B

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Не отчита правилната база при залагането на Ц4?

Мнение от OciXCrom » 17 Ное 2019, 22:38

Откъде ги намери тези стойности? Предполагам това са id-тата за базите, обаче аз когато тествах, id-то за А беше 75, което сложих в кода и работеше. Да не би да ползваш различна карта? Сложи 60 на мястото на 75.

Всъщност сега като се замисля, май id-то зависеше и от плъгините и другите entity-та в сървъра.

Аватар
mi0
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 534
Регистриран на: 09 Дек 2016, 22:02
Се отблагодари: 97 пъти
Получена благодарност: 120 пъти
Обратна връзка:

Не отчита правилната база при залагането на Ц4?

Мнение от mi0 » 18 Ное 2019, 00:25

Ето ви малко полезен код -

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

new DecalIndex[2]
DecalIndex[0] = get_decal_index("{siteA")
DecalIndex[1] = get_decal_index("{siteB")
	
new Float:TempOrigin[3]
get_brush_entity_origin(BombSiteIndex, TempOrigin)
	
while((Target = find_ent_in_sphere(Target, TempOrigin, 250.0)))
{
	if(pev_valid(Target))
	{
		pev(Target, pev_classname, EntityClassName, charsmax(EntityClassName))
		if(equal(EntityClassName, InfoDecal))
		{
			InfoDecalSkin = pev(Target, pev_skin)
			if(pev(BombSiteIndex, pev_iuser3) == 0)
			{
				if(InfoDecalSkin == DecalIndex[0])
				{
					//This bombsite is A
					set_pev(BombSiteIndex, pev_iuser3, A)
					BombSitesOrigins[0] = TempOrigin
					
					DetectionMethod = 1
				}
				else if(InfoDecalSkin == DecalIndex[1])
				{
					//This bombsite is B
					set_pev(BombSiteIndex, pev_iuser3, B)
					BombSitesOrigins[1] = TempOrigin
					
					DetectionMethod = 1
				}	
			}
			else 
			{
				//Done searching, we found what we wanted
				break
			}
		}
	}
}
источник - https://forums.alliedmods.net/showthrea ... 320&page=2
aka kurdokoleno
Catch Mod - 87.121.112.232:27021

Аватар
iv69
Извън линия
Потребител
Потребител
Мнения: 744
Регистриран на: 17 Мар 2018, 15:34
Се отблагодари: 214 пъти
Получена благодарност: 39 пъти

Не отчита правилната база при залагането на Ц4?

Мнение от iv69 » 18 Ное 2019, 12:19

Кроме съжалявам, изпробвах всички възможни "комбинации" за които ме посъветва, но... не става. Винаги ми изписва , че С4 е заложено само на база "В" :( . Има ли начин да се измисли друга система, друг начин ... , или дори съвсем друг плъгин... ? Идеята да се "локализира" С4 и играчите да се ориентират така е супер, дори самия сървър съм си "прекръстил" на тази бомба :) .
Мио съжалявам безкрайно много, на много хора си помагал и то, понякога доста добре, но сега изобщо не разбирам от плъгини и нямам никаква идея за посоченото от теб. Това не е ли код за CS-GO ? Ако имаш идея или пък можеш да направиш подобен плъгин за CS1.6 - заповядай, бих се радвал на всякаква помощ. Предполагам и си давам сметка, че такъв плъгин изисква доста умения и е почти невъзможно да се направитака, че да работи безотказно !?

Аватар
mi0
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 534
Регистриран на: 09 Дек 2016, 22:02
Се отблагодари: 97 пъти
Получена благодарност: 120 пъти
Обратна връзка:

Не отчита правилната база при залагането на Ц4?

Мнение от mi0 » 18 Ное 2019, 13:52

Нямам възможност и щом го пращам очевидно не е Source Pawn плъгин, няма смисъл да говорим, че Source Pawn използва различни Data Types, а не тагове, което го прави очевидно... Пращам го този код, за който реши, да го направи. А ти не мислиш ли, че след толко заявки, е редно, поне да се опиташ? Надали ще стане само със заявки, готови плъгини и без желание...
aka kurdokoleno
Catch Mod - 87.121.112.232:27021

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Не отчита правилната база при залагането на Ц4?

Мнение от OciXCrom » 18 Ное 2019, 14:44

@mi0 - този код е част от по-голям плъгин и има доста други неща които трябва да се направят преди да може да се ползва. Аз не мога да се оправя с него толкова лесно, камо ли някой начинаещ.
@iv69 - по този начин вече би трябвало да стане:

1. Добави нова глобална променлива new g_iSiteA (при останалите в началото на кода).

2. В plugin_init() добави: g_iSiteA = find_ent_by_class(-1, "func_bomb_target")

3. Промени функцията set_bombsite() по този начин:

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

public set_bombsite(id)
{
	new iEnts[2]
	find_sphere_class(id, "func_bomb_target", 300.0, iEnts, sizeof(iEnts))
	UsedBombSite = iEnts[0] == g_iSiteA ? 0 : 1
}
Тествах го и работи. В случай да показва базите наобратно, замени числата 0 и 1 в последния ред на функцията set_bombsite().

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

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

Кой е на линия

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