Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Spowolnienie na surfie


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
2 odpowiedzi w tym temacie

#1 csMaster

    Wszechwiedzący

  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

Napisano 25.09.2020 20:22

Podobno jeśli dany gracz ma więcej niż 99 fps, próbując robić surfa w przeznaczonych do tego miejscach zostanie w losowym momencie zatrzymany. Nie jestem pewien czy rzeczywiście mają na to wpływ fps, ale z opinii graczy właśnie tak jest. Chodzi o to że gracz wchodząc na rampę na której próbuje się rozpędzić w pewnym momencie zostanie zahamowany, jak gdyby na drodze stała jakaś przeszkoda, ale przy tym widać jeszcze taki efekt "lagowania". Być może ktoś kto grał na surfie miał już taki problem i wie o co chodzi.

 

Próbowałem to rozwiązać w następujący sposób:

Spoiler

 

No jednak coś w tym kodzie jest nie tak. Nie wiem czy wykorzystałem zły hook czy może chodzi o wykonująca się instrukcje. Problem jest taki, że kiedy plugin jest włączony, wszyscy gracze nie mogą się ruszać. A właściwie nie tyle nie mogą się ruszać, ale cały czas są teleportowani przez powyższy kod więc w rezultacie wszyscy stoją w miejscu.

 

Czy czegoś w tym kodzie nie przewidziałem i dlatego engfunc wykonuje się zawsze ? A może RG_PM_Move nie jest najlepszym miejscem do tego ? Ogólnie kod był wzorowany na tym który działa na surf'ach csgo. No jednak nie wiem czy rzeczywiście w cs 1.6 takie rozwiązanie też będzie działać. Możliwe że w cs 1.6 rampy na mapach surf są zrobione w jakiś inny sposób i ten kod nawet nie może działać. Jeśli tak, to jest na to jakieś inne rozwiązanie, żeby graczy nie blokowało w trakcie przechodzenia surfa ?


Użytkownik csMaster edytował ten post 25.09.2020 20:24

  • +
  • -
  • 0

#2 Deus Vult

    Nowy

  • Użytkownik

Reputacja: 109
Zaawansowany

  • Postów:213
  • GG:
  • Imię:Mateusz
  • Lokalizacja:Rzeszow
Offline

Napisano 25.09.2020 21:37


Czy czegoś w tym kodzie nie przewidziałem i dlatego engfunc wykonuje się zawsze ?

Tak


A może RG_PM_Move nie jest najlepszym miejscem do tego

Tak


jest na to jakieś inne rozwiązanie, żeby graczy nie blokowało w trakcie przechodzenia surfa ?

Jest


  • +
  • -
  • 0

#3 faken

    Profesjonalista

  • Użytkownik

Reputacja: 35
Życzliwy

  • Postów:192
  • Lokalizacja:Warszawa
Offline

Napisano 25.09.2020 21:46

#include <amxmodx>
#include <fakemeta>
#include <cstrike>
#include <hamsandwich>

#define AUTHOR "Lopol2010"
#define PLUGIN "Surf Fix"
#define VERSION "1.6"

#define TRACE_HULL_HEIGHT 0.01

new isAlive[33]

public plugin_init()
{
	register_plugin ( PLUGIN, VERSION, AUTHOR )
	register_forward( FM_CmdStart, "OnCmdStart" )

	RegisterHam( Ham_Spawn,  "player", "fw_PlayerSpawn",  1 )
	RegisterHam( Ham_Killed, "player", "fw_PlayerKilled", 1 )
}

public client_disconnected( id )
{
    isAlive[id] = false
}

public fw_PlayerSpawn( id )
{
    // Filter out false Ham_Spawn triggers 
    if ( !is_user_alive( id ) || !cs_get_user_team( id ) )
        return;
    
    isAlive[id] = true
}

public fw_PlayerKilled( id /*, attacker, shouldgib*/ )
{
    isAlive[id] = false
}

public OnCmdStart( id /*, handle, seed*/ ) 
{

	if(!isAlive[id])
	{
		return
	}

	static Float:playerOrigin[3], Float:lastGoodVelocity[33][3], Float:basevelocity[3], Float:velocity[3], Float:velocity_unchanged[3]

	pev(id, pev_velocity, velocity)
	velocity_unchanged = velocity
	
	// Check if basevelocity affects velocity
	if(!is_vector_zero(velocity)) 
	{
		pev(id, pev_basevelocity, basevelocity)

		if (!is_vector_zero(basevelocity)) 
		{	
			velocity[0] = floatabs(velocity[0]) - floatabs(basevelocity[0])
			velocity[1] = floatabs(velocity[1]) - floatabs(basevelocity[1])
		}
	}

	// Player might got surf bug
	if(is_vector_zero(velocity) && !is_vector_zero(lastGoodVelocity[id]))
	{
		if(is_player_on_slope(id))
		{
			set_pev(id, pev_velocity, lastGoodVelocity[id])
			
			pev(id, pev_origin, playerOrigin)
			playerOrigin[2] = playerOrigin[2] + UNSTUCK_HEIGHT
			set_pev(id, pev_origin, playerOrigin)
		}
	}
	else
	{
		lastGoodVelocity[id] = velocity_unchanged
	}
}

public bool:is_vector_zero(const Float:v[3]) 
{
	return v[0] == 0.0 && v[1] == 0.0
}

// Slope with any angle
public bool:is_player_on_slope(id) 
{
	static Float:planeNormal[3], Float:traceHullEnd[3], Float:playerOrigin[3]
	static Float:rampAngle, hull

	pev(id, pev_origin, playerOrigin)

	traceHullEnd[0] = playerOrigin[0]
	traceHullEnd[1] = playerOrigin[1]
	traceHullEnd[2] = playerOrigin[2] - TRACE_HULL_HEIGHT

	hull = pev(id, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN

	engfunc(EngFunc_TraceHull, playerOrigin, traceHullEnd, IGNORE_MONSTERS | IGNORE_MISSILE, hull, id, 0)
	get_tr2(0, TR_vecPlaneNormal, planeNormal)

	rampAngle = planeNormal[2]

	return rampAngle != 0.0 && rampAngle != 1.0
}

Znalazłem taki plugin na pendrive, nie testowałem może Ci pomoże.


  • +
  • -
  • 1




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych