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

[ROZWIĄZANE] Sprite in Player HUD


  • Zamknięty Temat jest zamknięty
8 odpowiedzi w tym temacie

#1 METALOWIEC

    Zaawansowany

  • Użytkownik

Reputacja: 26
Życzliwy

  • Postów:138
  • GG:
  • Lokalizacja:Szczecin
Offline

Napisano 02.06.2018 23:11

W przypadku korzystania ze spriteFixer'a przy użyciu 2 osobnych pluginów, pozycja "fangle" jest update'owana do najniższej wartości 0.0 .

Czy jest jakiś sposób aby móc korzystać z tego głównego pluginu i jednocześnie implementować wywołania sprite'ów w innych pluginach?

Konkretnie w każdym z pluginów stosuję ten sam element: new gszModel.

Jak powinno to wyglądać prawidłowo? Próbowałem już do głównego dodać inne globalne np. gszModels i wtedy posługiwać się nim w innym pluginie ale efekt był ten sam.

 

 

Załączone pliki


  • +
  • -
  • 0

#2 METALOWIEC

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 26
Życzliwy

  • Postów:138
  • GG:
  • Lokalizacja:Szczecin
Offline

Napisano 05.06.2018 21:49

Dobra, znalazłem wspólną zależność. Ogólnie wszystko jest okey z ustalaniem pozycji. Przez sposób wyświetlania 1 z pluginów (hitmark.amxx - czas trwania sprite wynosił 0.3s) nie byłem w stanie tego dostrzec.

W momencie w którym ustawiłem czas trwania hitmarka na 9999 sprite'y z killstreak wyświetlały się poprawnie, aby to potwierdzić zmieniłem czas hitmarka na 1s.

https://youtu.be/G9W-EaFcUiE

Jeśli wyświetlane są 2 Sprite'y jednocześnie to ten drugi zmienia pozycję (fAngle) w momencie zakończenia wyświetlania pierwszego (fTime).

Chyba coś nie tak z samym kolejkowaniem :/


  • +
  • -
  • 0

#3 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 552
Godlike

  • Postów:11 974
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 05.06.2018 21:54

Której wersji pluginu używasz ( podaj link ) ?
  • +
  • -
  • 0

#4 METALOWIEC

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 26
Życzliwy

  • Postów:138
  • GG:
  • Lokalizacja:Szczecin
Offline

Napisano 05.06.2018 22:04

Tutaj nazwa pliku jest zmieniona, bo testowałem jak zachowa się plugin przy 2 osobnych zmiennych, każdej zrobionej w innym amxx.

Paczka z samego dołu:

https://darkgl.pl/20...-hudzie-gracza/

http://darkgl.pl/wp-...spriteFixer.zip

Dokładne wersje tego co użyłem na filmie w załącznikach.

Limit w spriteFix.sma podbiłem do 30 spriteów i też to nic nie zmienia.

 

Załączone pliki


Użytkownik METALOWIEC edytował ten post 05.06.2018 22:12

  • +
  • -
  • 0

#5 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 552
Godlike

  • Postów:11 974
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 05.06.2018 22:38

Błąd znaleziony

gfOffset[id][ indexSprite ][ 0 ]	=	fAngle;
Powinno być

gfOffset[id][ indexSprite - 1 ][ 0 ]	=	fAngle;
Dodałem jeszcze kilka ifów dla większego bezpieczeństwa. Zaktualizowałem paczkę na blogu.
  • +
  • -
  • 0

#6 METALOWIEC

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 26
Życzliwy

  • Postów:138
  • GG:
  • Lokalizacja:Szczecin
Offline

Napisano 05.06.2018 23:00

Niestety obawiam się że to nie to, w dalszym ciągu ta sytuacja występuje.
Dla pewności wrzucam kompilowany kod:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <engine>
#include <xs>

#include <hamsandwich>

#define PLUGIN "spriteFixer"
#define VERSION "1.0"
#define AUTHOR "AMXX.PL Team"

#define SPRITES_PER_PLAYER 25
#define MAX_PLAYERS 33

#define AUTH_STEAM 2

new const spriteClass[]	=	"spriteFix";

new pcv_dp_r_id_provider;

new bool:gbHaveSprite[MAX_PLAYERS];
new giEntsIds[MAX_PLAYERS][SPRITES_PER_PLAYER];
new Float:gfOffset[MAX_PLAYERS][SPRITES_PER_PLAYER][2];
new Float:gfOffsetLen[MAX_PLAYERS][SPRITES_PER_PLAYER];
new Float:gfPosition[MAX_PLAYERS][3];
new Float: fBob[ MAX_PLAYERS ] ,
Float: fBobUp[ MAX_PLAYERS ]


public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR);
	
	register_forward(FM_AddToFullPack, "fwAddToFullPack", 0 );
	
	register_think( spriteClass, "fwSpriteThink");
	
	pcv_dp_r_id_provider = get_cvar_pointer("dp_r_id_provider");
	
	if( !pcv_dp_r_id_provider ){
		state onlysteam;
	}
	else {
		state dproto;
	}
}

public client_disconnect(id){
	for(new i=0;i<SPRITES_PER_PLAYER;i++){
		if(pev_valid(giEntsIds[id][i])){
			remove_entity(giEntsIds[id][i]);
		}
		giEntsIds[id][i] = 0;
	}
}

public client_authorized(id){
	
	checkUserCvars( id );
	
	gbHaveSprite[id] = false;
}

public checkUserCvars( id ){
	
	if( !is_user_steam( id ) ){
		
		fBob[ id ]		=	0.01;
		fBobUp[ id ]	=	0.5;
		
		return PLUGIN_CONTINUE;
	}
	
	query_client_cvar( id , "cl_bob" , "clBobResult" )
	query_client_cvar( id , "cl_bobup" , "clBobUpResult" )
	
	return PLUGIN_CONTINUE;
}

public clBobResult(id, const cvar[], const value[]){
	fBob[ id ]	=	str_to_float( value );
}

public clBobUpResult(id, const cvar[], const value[]){
	fBobUp[ id ]	=	str_to_float( value );
}

public resetUserCvars( id ){
	
	client_cmd( id , "cl_bob %f" , fBob[ id ] );
	client_cmd( id , "cl_bobup %f" , fBobUp[ id ] );
	
}

public setUserCvars( id ){
	
	client_cmd( id , "cl_bob 0" );
	client_cmd( id , "cl_bobup 0" );
	
}

public plugin_natives(){
	register_native("addPlayerSprite","addSprite");
	
	register_native( "setSpriteFX" , "setSpriteFX" , 1 );
	register_native( "setSpriteRender" , "setSpriteRender" , 1 );
	register_native( "setSpriteColor" , "setSpriteColor" , 1 );
	register_native( "setSpriteSequence" , "setSpriteSequence" , 1 );
	register_native( "setSpriteScale" , "setSpriteScale" , 1 );
	register_native( "setSpriteFrameRate" , "setSpriteFrameRate" , 1 );
	register_native( "setSpriteAmount" , "setSpriteAmount" , 1 );
	
	register_native( "setSpriteAngle" , "setSpriteAngle" , 1 );
}

public setSpriteFX( id , indexSprite , fx ){
	
	if( checkSprite( id , indexSprite ) ){
		
		return PLUGIN_CONTINUE;
		
	}
	
	set_pev( giEntsIds[ id ][ indexSprite - 1 ] , pev_renderfx , fx );
	
	return PLUGIN_CONTINUE;
}

public setSpriteRender( id , indexSprite , render ){
	
	if( checkSprite( id , indexSprite ) ){
		
		return PLUGIN_CONTINUE;
		
	}
	
	set_pev( giEntsIds[ id ][ indexSprite - 1 ] , pev_rendermode , render );
	
	return PLUGIN_CONTINUE;
	
}

public setSpriteColor( id , indexSprite , Float: fColor[ 3 ] ){
	
	if( checkSprite( id , indexSprite ) ){
		
		return PLUGIN_CONTINUE;
		
	}
	
	set_pev( giEntsIds[ id ][ indexSprite - 1 ] , pev_rendercolor , fColor );
	
	return PLUGIN_CONTINUE;
}

public setSpriteSequence( id , indexSprite , iSequence ){
	
	if( checkSprite( id , indexSprite ) ){
		
		return PLUGIN_CONTINUE;
		
	}
	
	set_pev( giEntsIds[ id ][ indexSprite - 1 ] , pev_sequence , iSequence );
	
	return PLUGIN_CONTINUE;
}

public setSpriteScale( id , indexSprite , Float: fScale ){
	
	if( checkSprite( id , indexSprite ) ){
		
		return PLUGIN_CONTINUE;
		
	}
	
	set_pev( giEntsIds[ id ][ indexSprite - 1 ] , pev_scale , fScale );
	
	return PLUGIN_CONTINUE;
}

public setSpriteFrameRate( id , indexSprite , Float: fFrameRate ){
	
	if( checkSprite( id , indexSprite ) ){
		
		return PLUGIN_CONTINUE;
		
	}
	
	set_pev( giEntsIds[ id ][ indexSprite - 1 ] , pev_framerate , fFrameRate );
	
	return PLUGIN_CONTINUE;
}

public setSpriteAmount( id , indexSprite , Float: fAmount ){
	
	if( checkSprite( id , indexSprite ) ){
		
		return PLUGIN_CONTINUE;
		
	}
	
	set_pev( giEntsIds[ id ][ indexSprite - 1 ] , pev_renderamt , fAmount );
	
	return PLUGIN_CONTINUE;
}

public setSpriteAngle( id , indexSprite , Float: fAngle ){
	
	if( checkSprite( id , indexSprite ) ){
		
		return PLUGIN_CONTINUE;
		
	}
	
	gfOffset[id][ indexSprite - 1 ][ 0 ]	=	fAngle;
	
	return PLUGIN_CONTINUE;
}


bool: checkSprite( id , indexSprite ){
	return bool: ( indexSprite <= 0 || !pev_valid( giEntsIds[ id ][ indexSprite - 1 ] ) );
}

public addSprite(plugin,params){
	if(params < 7){
		log_amx("addSprite zbyt malo parametrow!");
		return 0;
	}

	new ent = create_entity("env_sprite");

	if( !ent ){
		return 0;
	}
	
	new id = get_param(1);

	if( !is_user_connected( id ) ){
		return 0;
	}
	
	set_pev(ent, pev_classname, spriteClass );
	set_pev(ent, pev_solid, SOLID_NOT);
	set_pev( ent, pev_movetype, MOVETYPE_FLY );
	
	new szModel[256]
	get_string(4, szModel, charsmax(szModel));
	
	entity_set_model(ent, szModel);
	entity_set_size(ent, Float:{-1.0, -1.0, -1.0}, Float:{1.0, 1.0, 1.0});
	set_rendering(ent, kRenderFxNone, 255, 255, 255, get_param( 9 ) ? kRenderTransAdd : kRenderNormal , 255 );
	
	set_pev(ent, pev_scale, get_param_f(2));
	set_pev(ent, pev_owner, id);
	set_pev(ent, pev_framerate, get_param_f(3));
	
	new Float:fLTime = get_param_f(7);
	
	new iIndex	=	addFixedSprite(id, ent, get_param_f(5), get_param_f(6), get_param_f(8), fLTime);
	
	if( !iIndex ){
		remove_entity(ent);
		return 0;
	}
	
	if( !gbHaveSprite[ id ] ){
		setUserCvars( id );
	}
	
	gbHaveSprite[id] = true;
	
	if(fLTime >= 0.0){
		set_pev(ent, pev_nextthink, get_gametime()+fLTime);
	}
	
	return iIndex;
}

public ent_get(id){
	for(new i=0;i<SPRITES_PER_PLAYER;i++){
		if(giEntsIds[id][i] == 0){
			return i;
		}
	}
	return -1;
}

/**
* Dodaje do kolejki nowy byt
*
*	@param 	id 		Gracz
*	@param 	ent		Byt
*	@param 	fOffset		Przesuniecie katowe (tarcza zegara)
*	@param  fOffsetLen	Odleglosc od srodka ekranu
*	@param  fOffsetDistance	Odleglosc od gracza
*/
addFixedSprite(id, ent, const Float:fOffset, Float:fOffsetLen, Float:fOffsetDistance, Float:fLTime = -1.0){	
	new index = ent_get(id);

	if(index == -1){
		return 0;
	}
	
	gfOffset[id][index][0] = fOffset;
	gfOffset[id][index][1] = fOffsetLen;
	
	gfOffsetLen[id][index] = fOffsetDistance;
	giEntsIds[id][index] = ent;
	
	if(fLTime >= 0.0){
		set_pev(ent, pev_ltime, get_gametime()+fLTime);
	}
	else{
		set_pev(ent, pev_ltime, 0.0);
	}
	
	getPosition(id);
	
	return index + 1;
}
removeFixedSprite(id, ent){
	new index = -1;
	for(new i=0;i<SPRITES_PER_PLAYER;i++){
		if(giEntsIds[id][i] == ent){
			index = i;
			break;
		}
	}
	
	if(index < 0){
		gbHaveSprite[id] = false;
		
		resetUserCvars( id );
		
		return;
	}
	
	giEntsIds[id][index] = 0;
	gfOffsetLen[id][index] = 0.0;
	
	xs_vec_copy(Float:{0.0,0.0,0.0}, gfOffset[id][index]);
}
public fwAddToFullPack(es_handle, e, ENT, HOST, hostflags, player, set){
	if(player || !pev_valid( ENT ) ) return FMRES_IGNORED;
	
	new szClassName[ 64 ];
	
	pev( ENT , pev_classname , szClassName , charsmax( szClassName ) );
	
	if( !equal( szClassName , spriteClass ) ){
		return FMRES_IGNORED;
	}
	
	for(new i=0;i<SPRITES_PER_PLAYER;i++){
		
		if(giEntsIds[HOST][i] == ENT){
			
			getPosition( HOST );
			
			new Float:fAngles[3];
			new Float:fVector[3];
			
			pev(HOST, pev_v_angle, fAngles);
			
			angle_vector(fAngles, ANGLEVECTOR_FORWARD, fVector);
			xs_vec_mul_scalar(fVector, gfOffsetLen[HOST][i], fVector);
			
			fAngles[2] = gfOffset[HOST][i][0];
			angle_vector(fAngles, ANGLEVECTOR_RIGHT, fAngles);
			
			xs_vec_mul_scalar(fAngles, gfOffset[HOST][i][1], fAngles);
			
			xs_vec_add(gfPosition[HOST], fVector, fVector);
			xs_vec_add(fVector, fAngles, fVector);
			
			set_pev(giEntsIds[HOST][i], pev_origin, fVector);
			
			set_es( es_handle , ES_Origin , fVector );
			
			return FMRES_HANDLED;
		}
		
	}
	
	set_es( es_handle , ES_Scale , 0.001 );
	set_es( es_handle , ES_Origin , { 9999.0 , 9999.0 , 9999.0 } );
	
	return FMRES_HANDLED;
}
public fwSpriteThink(ent){
	if(!pev_valid(ent)) 
		return PLUGIN_CONTINUE;
	
	new Float:fNow = get_gametime();
	new Float:fLTime;
	if(pev(ent, pev_ltime, fLTime) && fLTime > 0.0 && fLTime <= fNow){
		removeFixedSprite(pev(ent, pev_owner), ent);
		remove_entity(ent);
	}
	else
	set_pev(ent, pev_nextthink, fNow+0.1);
	return PLUGIN_CONTINUE;
}
getPosition(id){
	pev(id, pev_origin, gfPosition[id]);
	
	static Float:fOffset[3];
	pev(id, pev_view_ofs, fOffset);
	
	xs_vec_add(gfPosition[id], fOffset, gfPosition[id]);
}

stock bool: is_user_steam(id) <dproto>
{
	if( is_user_bot( id ) ){
		return false;
	}
	
	server_cmd("dp_clientinfo %d", id);
	server_exec();
	
	static uClient;
	uClient = get_pcvar_num(pcv_dp_r_id_provider);
	
	if ( uClient == AUTH_STEAM )
		return true;
	
	return false;
}

stock bool: is_user_steam(id) <onlysteam>
{
	return !is_user_bot( id );
	
	#pragma unused id
}

Czy to może być związane z samym rozbiciem wyświetlania sprite'ów na kolejny pluginy:


 
native addPlayerSprite(id,Float:scale,Float:frameRate,szModel[],Float:fAngle, Float:fLen, Float:fTime,Float:fDistance , bool: bTransparent );


new gszModel[][] = 
{
"sprites/ACG_EK/kill_uav.spr",
"sprites/ACG_EK/kill_carepack(4kill).spr",
"sprites/ACG_EK/kill_carepack.spr",
"sprites/ACG_EK/kill_cuav.spr",
"sprites/ACG_EK/kill_predator.spr",
"sprites/ACG_EK/kill_sentry.spr",
"sprites/ACG_EK/kill_airstrike.spr",
"sprites/ACG_EK/kill_emp.spr",
"sprites/ACG_EK/kill_nuke.spr"
};

addPlayerSprite(id,0.09,60.0,gszModel,283.0,25.0,3.0, 80.0 , true );
 

 

native addPlayerSprite(id,Float:scale,Float:frameRate,szModel[],Float:fAngle, Float:fLen, Float:fTime,Float:fDistance , bool: bTransparent );


new gszModel[] = "sprites/hitmark.spr";


addPlayerSprite(idattacker,0.1,0.0,gszModel,0.0,0.0,0.3, 180.0 , true )

Użytkownik METALOWIEC edytował ten post 05.06.2018 23:02

  • +
  • -
  • 0

#7 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 552
Godlike

  • Postów:11 974
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 03.07.2018 21:49

Wprowadziłem jeszcze jedną zmianę jeśli możesz sprawdź ( paczka zaktualizowana na blogu )


  • +
  • -
  • 0

#8 METALOWIEC

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 26
Życzliwy

  • Postów:138
  • GG:
  • Lokalizacja:Szczecin
Offline

Napisano 06.10.2018 13:14

Paczka spriteFixer-1.rar działa poprawnie :) dzięki, temat do zamknięcia


  • +
  • -
  • 0

#9 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 552
Godlike

  • Postów:11 974
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 06.10.2018 13:32

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, report.png raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
  • +
  • -
  • 0




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

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