←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Voices Management

Zablokowany

  • +
  • -
Dudix - zdjęcie Dudix 02.01.2011

Witam.
Widząc zalety pluginu Voices Management, wpadłem na pomysł by rozbudować go nieco, tak aby mógł być wykorzystywany na serwerach TP. Mianowicie, aby gracze z drużyny bez względu na to czy są żywi czy nie, slyszeli siebie i mogli mówić do siebie. Czyli plugin zastępowałby działanie zewnętrznego serwera głosowego. Przeanalizowałem dokładnie kod pluginu i wprowadziłem wartość dwóch cvarów, cyfrę 3.

vm_alives 3
vm_deads 3

Następnie dodałem do dwóch switch'y "case 3"

switch( iAlives )
	{
		case 0:szAlivesStatus = "VM_ALIVES_TEAMATES"
		case 1:szAlivesStatus = "VM_ALIVES"
		case 2:szAlivesStatus = "VM_ALL"
		case 3:szAlivesStatus = "VM_TEAMATES"
	}

	switch( iDeads )
	{
		case 0:szDeadsStatus = "VM_DEADS_TEAMATES"
		case 1:szDeadsStatus = "VM_DEADS"
		case 2:szDeadsStatus = "VM_ALL"
		case 3:szDeadsStatus = "VM_TEAMATES"
	}

oraz do kolejnych dwóch switch'y "case 3".

if(g_bAlive[iReceiver])
	{
		switch(get_pcvar_num(g_pcvarAlivesHear))
		{
			case 0:
			{
				if( g_bAlive[iSender] && get_pdata_int(iReceiver, OFFSET_TEAM) == get_pdata_int(iSender, OFFSET_TEAM) )
				{
					engfunc(EngFunc_SetClientListening, iReceiver, iSender, true)
					forward_return(FMV_CELL, true)
					return FMRES_SUPERCEDE
				}
			}
			case 1:
			{
				if( g_bAlive[iSender] )
				{
					engfunc(EngFunc_SetClientListening, iReceiver, iSender, true)
					forward_return(FMV_CELL, true)
					return FMRES_SUPERCEDE
				}
			}
			case 2:
			{
				engfunc(EngFunc_SetClientListening, iReceiver, iSender, true)
				forward_return(FMV_CELL, true)
				return FMRES_SUPERCEDE
			}
			case 3:
			{
				if( get_pdata_int(iReceiver, OFFSET_TEAM) == get_pdata_int(iSender, OFFSET_TEAM) )
				{
					engfunc(EngFunc_SetClientListening, iReceiver, iSender, true)
					forward_return(FMV_CELL, true)
					return FMRES_SUPERCEDE
				}
			}
		}
	}
	else
	{
		switch(get_pcvar_num(g_pcvarDeadsHear))
		{
			case 0:
			{
				if( !g_bAlive[iSender] && get_pdata_int(iReceiver, OFFSET_TEAM) == get_pdata_int(iSender, OFFSET_TEAM) )
				{
					engfunc(EngFunc_SetClientListening, iReceiver, iSender, true)
					forward_return(FMV_CELL, true)
					return FMRES_SUPERCEDE
				}
			}
			case 1:
			{
				if( !g_bAlive[iSender] )
				{
					engfunc(EngFunc_SetClientListening, iReceiver, iSender, true)
					forward_return(FMV_CELL, true)
					return FMRES_SUPERCEDE
				}
			}
			case 2:
			{
				engfunc(EngFunc_SetClientListening, iReceiver, iSender, true)
				forward_return(FMV_CELL, true)
				return FMRES_SUPERCEDE
			}
			case 3:
			{
				if( get_pdata_int(iReceiver, OFFSET_TEAM) == get_pdata_int(iSender, OFFSET_TEAM) )
				{
					engfunc(EngFunc_SetClientListening, iReceiver, iSender, true)
					forward_return(FMV_CELL, true)
					return FMRES_SUPERCEDE
				}
			}
		}
	}

Kompilacja przebiegła pomyślnie. Niestety plugin nie działa poprawnie, gdyż po dołączeniu na serwer i wybraniu drużyny serwer się crashuje. Dzięki metodzie prób i błędów zauważyłem, że problem występuje w instrukcji warunkowej znajdującej się w "case 3". Co może być błędem?
W załączniku zamieściłem całe .sma.

Załączone pliki

Odpowiedz

  • +
  • -
Dudix - zdjęcie Dudix 02.01.2011

Chciałem być pierwszy ;)
Przydałoby się plugin z tamtego tematu opublikować bo trudno go znaleźć.
Odpowiedz

  • +
  • -
mgr inż. Pavulon - zdjęcie mgr inż. Pavulon 02.01.2011

Ale tam wciąż nikt nie odpisał czy to działa, a ja nie testowałem.
Odpowiedz

  • +
  • -
Dudix - zdjęcie Dudix 10.01.2011

Tamten plugin nie działa. Ma taki sam błąd w działaniu jak mój. Mógłby ktoś przenalizować kod?
Odpowiedz
Zablokowany