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.


Dodatki SourceMod



Temat jest zamknięty

Voices_Management_edited_by_Dudix.amxx








