←  Pluginy

AMXX.pl: Support AMX Mod X i SourceMod

»

Modyfikacja
Admin vote

  • +
  • -
adi7 - zdjęcie adi7 04.11.2012

Teraz jest tak. Admin robi vote gracze głosują a później wyskakuje menu czy zaakceptować wynik. Jak zrobić by nie było tego menu i mapa zmieniała się po rundzie?
Odpowiedz

Gość_21977_* 05.11.2012

Automatyczna wiadomość


Ten temat został przeniesiony z forum

AMX Mod XPytania

do

Scripting AMXXPluginy
Odpowiedz

Gość_21977_* 05.11.2012

1. Ponieważ będziemy chcieli zmienić mapę dopiero w nowej rundzie, to potrzebować będziemy nowej zmiennej, np.
new bool:g_changeMapInNewRound=false
która będzie informować, czy w nowej rundzie zmienić mapę, czy też nie. Dodajemy więc tę linijkę.

2. Ponieważ będziemy musieli zmienić mapę oraz ją pobrać do zmiennej, to wpiszemy ją do cvaru amx_nextmap. Tym samym stworzymy sobie pointer wskazujący na ten cvar
new pCvarAmxNextMap
oraz rejestrujemy ten cvar
plugin_cfg(){
pCvarAmxNextMap=get_cvar_pointer("amx_nextmap");
}


3. Następnie zarejestrujemy nową rundę (w plugin_init)
register_event("HLTV", "event_new_round", "a", "1=0", "2=0")
Od razu zaimplementujemy działanie listenera
public event_new_round(){
if(g_changeMapInNewRound){
new map[32];
get_pcvar_string(pCvarAmxNextMap, map, 31);
server_cmd("amx_map %s", map);
}
}


4. W funkcji checkVotes, dla komendy zmiany mapy będziemy musieli zablokować wywołanie zapytania i zamiast tego poinformować plugin o chęci zmiany mapy w nowej rundzie, w tym celu najpierw wyłaniamy polecenie zmiany mapy (changelevel [map])
if(equali(g_Execute,"changelevel",11)){
a następnie dodać instrukcję zmiany cvaru amx_nextmap i poinformowania pluginu o tym, że w nowej rundzie chcemy mieć inną mapę
set_pcvar_string(pCvarAmxNextMap,g_Execute[12]);
g_changeMapInNewRound=true;
Tym samym, fragment funkcji checkVotes będzie wyglądał nastęopująco
	if (g_execResult)
{
g_execResult = false

if (is_user_connected(g_voteCaller))
{
if(equali(g_Execute,"changelevel",11)){
set_pcvar_string(pCvarAmxNextMap,g_Execute[12]);
g_changeMapInNewRound=true;
} else {
new menuBody[512], lTheResult[32], lYes[16], lNo[16]

format(lTheResult, 31, "%L", g_voteCaller, "THE_RESULT")
format(lYes, 15, "%L", g_voteCaller, "YES")
format(lNo, 15, "%L", g_voteCaller, "NO")

new len = format(menuBody, 511, g_coloredMenus ? "\y%s: \w%s^n^n" : "%s: %s^n^n", lTheResult, g_Execute)

len += format(menuBody[len], 511 - len, g_coloredMenus ? "\y%L^n\w" : "%L^n", g_voteCaller, "WANT_CONTINUE")
format(menuBody[len], 511 - len, "^n1. %s^n2. %s", lYes, lNo)
show_menu(g_voteCaller, 0x03, menuBody, 10, "The result: ")
set_task(10.0, "autoRefuse", 4545454)
}
}
else if(equali(g_Execute,"changelevel",11)){
set_pcvar_string(pCvarAmxNextMap,g_Execute[12]);
g_changeMapInNewRound=true;
} else
set_task(2.0, "delayedExec", 0, g_Execute, g_execLen)
}


Załączam także poglądowo pełne SMA (możliwe, że macie inną wersję lub zmodyfikowaną)

Załączony plik  adminvote.sma   16,91 KB   46 Ilość pobrań
Odpowiedz

  • +
  • -
adi7 - zdjęcie adi7 06.11.2012

Nie wiem czemu ,ale mi to nie działa. Nawet mi się to nie wyświetla to menu. Jest tak samo jak wcześniej. Może to czy chcesz kontynuować blokuje to? Wciskałem nawet nie i czekałem do końca rundy ,ale mapa pozostaje ta sama. Może wyrzucić to czy chcesz kontynuować? Mi to nie potrzebne
Użytkownik adi7 edytował ten post 06.11.2012 06:21
Odpowiedz

Gość_21977_* 06.11.2012

Jak zrobić by nie było tego menu (…)

Nawet mi się to nie wyświetla to menu.

?
Odpowiedz

  • +
  • -
adi7 - zdjęcie adi7 06.11.2012

Po prostu nic się nie zmieniło. Najpierw zachowałem sobie czystą kopię. Edytowałem i nic. Pomyślałem że pewnie coś zrobiłem źle. Porównałem sma twoje do mojego i takie same ,ale wrzuciłem twoje i nadal to samo. Mapa po rundzie się nie zmienia i nadal wyskakuje czy kontynuować.

P.s tak kompilowałem i aktualizowałem serwer.

U ciebie działa? Może ktoś sprawdzić?
Odpowiedz

  • +
  • -
adi7 - zdjęcie adi7 09.11.2012

Up. Benio wiesz czemu to nie działa?
Odpowiedz