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
-
Voices_Management_edited_by_Dudix.sma 15,6 KB
30 Ilość pobrań
Voices_Management_edited_by_Dudix.amxx