←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Precache modelu tylko dla danego teamu

Zablokowany

  • +
  • -
becometa - zdjęcie becometa 28.11.2010

Cały czas zastanawiam się czy jest możliwe aby precache'owany model działał tylko na graczy z danego team'u.

new entity = fm_create_entity("info_target")
	set_pev(entity, pev_classname, "wgz")
	fm_entity_set_model(entity, "models/gib_skull.mdl")
	fm_entity_set_origin(entity, position)

	set_pev(entity, pev_movetype, MOVETYPE_FLY)
	new id = pev(entity, ZID)
	if (editor)
	{
		set_pev(entity, pev_solid, SOLID_NOT)
	} else
	{
		set_pev(entity, pev_solid, solidtyp[ZM:id])
	}
	
	fm_entity_set_size(entity, mins, maxs)
	
	fm_set_entity_visibility(entity, 0)
	
	set_pev(entity, ZONE, zm)
	set_pev(entity, CTIME, campt)
dajmy na to, że chcę aby był widoczny tylko dla teamu CT, w jaki sposób tego dokonać?
Użytkownik becometa edytował ten post 28.11.2010 12:02
Odpowiedz

  • +
  • -
ShoWmaN - zdjęcie ShoWmaN 28.11.2010

Łap ;D w tym przypadku tt dostaje inna kose.
zmień se nazwę modelu bo tu jest pod base bulidera

#include < amxmodx >
#include < cstrike >
#include < engine >
#include < hamsandwich >

const m_pPlayer = 41;

new const g_szTerrKnife[ ] = "models/v_knife_zombie.mdl";

public plugin_precache( ) {
precache_model( g_szTerrKnife );
}

public plugin_init( ) {
register_plugin( "Terrorist Knife Model", "0.0.1", "Exolent" );
RegisterHam( Ham_Item_Deploy, "weapon_knife", "FwdKnifeDeploy", 1 );
}

public FwdKnifeDeploy( iEntity ) {
new client = get_pdata_cbase( iEntity, m_pPlayer, 4 );
if( cs_get_user_team( client ) == CS_TEAM_T ) {
entity_set_string( client, EV_SZ_viewmodel, g_szTerrKnife );
}
}
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 28.11.2010

chyba nie o to chodzi :P

Jest taka funkcja, która decyduje o wysłanym do konkretnego gracza stanie bytu, tzn jednemu możesz go wysłać z normalnym renderowaniem i innemu z TransAlfa+0 - czyli niewidzialny. Ta funkcja nazywa się FM_AddToFullPack, jest to bardzo często wywolywany forward i nie powinieneś tam używać zbyt wielu funkcji, dlatego przyda Ci się tablica drużyn

giTeams[] - każdy gracz ma tam wpisane do której drużyny należy (Event TeamInfo)

oraz tablica bytów
giEnts[512] - każdy byt ma tam wpisane 0, jeśli każdy ma go zobaczyć i 1 jeśli tylko CT


register_forward(FM_AddToFullPack, "fwAddToFullPack", 1);

public fwAddToFullPack(es_handle, e, ENT, HOST, hostflags, player, set){
	if(player) return FMRES_IGNORED;
	if(giTeams[HOST] == 1 && giEnts[ENT]){
		set_es( es_handle, ES_RenderMode, kRenderTransAlpha ); 
		set_es( es_handle, ES_RenderAmt, 0);
		return FMRES_HANDLED;
	}
	return FMRES_IGNORED;
}
Odpowiedz

  • +
  • -
becometa - zdjęcie becometa 28.11.2010

Ogółem to chodzi mi o przerobienie oryginalnego walkguarda, aby funkcja numer 5

new zonemode[ZONEMODE][] = { "ZONE_MODE_NONE", "ZONE_MODE_CAMPER", "ZONE_MODE_CAMPER_T1", "ZONE_MODE_CAMPER_T2", "ZONE_MODE_BLOCKING", "ZONE_MODE_CHEATER", "ZONE_MODE_CHEATER_T1", "ZONE_MODE_CHEATER_T2" }

nie blokowała wszystkich graczy ale tylko team 2(CT), tym samym przepuszczając team 1(TT) przez precache'owany model.

Prościej mówiąc chcę stworzyć niewidzialną ścianę oddziaływającą tylko na team 2.

R3X, dzięki za wytłumaczenie, cenię sobie to ale wiedzę to ja mam praktycznie zerową, cały czas lecę na dokumentacji i gotowych funkcjach ;f
Gdybyś ty bądź ktokolwiek inny był w stanie takie coś wykonać i wytłumaczyć po ludzku co za co odpowiada i dlaczego akurat to tutaj, byłbym arcy wdzięczny :)
Użytkownik becometa edytował ten post 28.11.2010 15:33
Odpowiedz
Zablokowany