Przenoszenie do TT FUNCKAJ
Pawlik4Ver
08.02.2019
Witam, chciałbym się spytać czy ta funkcja niżej jest dobrze skonstruowana:
Napisałem kod który po wejściu na serwer przenosi do TT, i działa dopiero jeżeli jest minimum 1 budowniczy, i jeżeli nie ma czasu budowania i przygotowania to przenosi do TT.
Może ktoś luknąć?
Użytkownik Pawlik4Ver edytował ten post 08.02.2019 19:05
Rivit
08.02.2019
Odpowiedz sobie na jedno, ale to jedno za***iście ważne pytanie... "Dlaczego sam tego nie przetestuje?", a potem sam przetestuj.
Ludzie niedługo wam trzeba będzie tyłki podcierać.... troche samodzielnosci
A co do kodu - wygląda jak krowie z gardła wyciągnięty. proszę dbać o tabulacje, bo tutejsi forumowicze niechętnie patrzą na takie wstawki.
Also, pozmieniałbym kolejność warunków itp, jeden nawet zbędny jest
Robiin
08.02.2019
Wersja z możliwością rozszyfrowania kodu:
PrzeniesDoTT(index) { const minplayers = 1; for(new i = 1; i <= 32; i++) { if(!is_user_connected(i)) continue; new team = get_user_team(i); if(team != get_user_team(index) || team != 2) continue; if(get_playersnum() < minplayers) continue; if(g_boolCanBuild || g_boolPrepTime) continue; engclient_cmd(index, "jointeam", "1"); break; } }
Fun fact: nie wiem po co robisz to w ten sposób.
Tworzysz pętlę, która wykonuje się (przykładowo) 32 razy, i za każdym razem, kiedy spełni się każdy z warunków, to przenosisz gracza do TT, po czym lecisz pętlę dalej.
Najlepiej opisz nam, jak ma działać ta funkcja.
Dodatkowo, pomyśl sam - jak przebiega proces tejże funkcji:
- Wywołanie (przy connect'cie, tak jak napisałeś wyżej),
- Deklaracja zmiennej,
- Pętla dla (przykładowo) 32 graczy, a w niej:
- Sprawdzenie teamu graczy, które prowadzi do niczego.
- Sprawdzenie z każdą iteracją, czy get_playersnum() >= playersnum.
- Sprawdzenie z każdą iteracją, czy zmienne g_boolCanBuild oraz g_boolPrepTime mają wartość 1.
- Wykonanie komendy na graczu, jeśli przejdzie przez wszystkie ify.
- Powtórzenie iteracji.
Możesz zrobić tak:
PrzeniesDoTT(index) { if(!is_user_connected(index)) return; if(get_user_team(index) == 1) return; if(g_boolCanBuild || g_boolPrepTime) return; const minPlayers = 1; if(get_playersnum() < minPlayers) return; const minBuilders = 1; if(getBuildersCount() < minBuilders) return; engclient_cmd(index, "jointeam", "1"); } getBuildersCount() { new counter; for(new i = 1; i <= 32; i++) if(is_user_connected(i) && get_user_team(i) == 2 && is_user_alive(i)) counter++; return counter; }
Pawlik4Ver
08.02.2019
Wersja z możliwością rozszyfrowania kodu:
PrzeniesDoTT(index) { const minplayers = 1; for(new i = 1; i <= 32; i++) { if(!is_user_connected(i)) continue; new team = get_user_team(i); if(team != get_user_team(index) || team != 2) continue; if(get_playersnum() < minplayers) continue; if(g_boolCanBuild || g_boolPrepTime) continue; engclient_cmd(index, "jointeam", "1"); break; } }Fun fact: nie wiem po co robisz to w ten sposób.
Tworzysz pętlę, która wykonuje się (przykładowo) 32 razy, i za każdym razem, kiedy spełni się każdy z warunków, to przenosisz gracza do TT, po czym lecisz pętlę dalej.
Najlepiej opisz nam, jak ma działać ta funkcja.
Dodatkowo, pomyśl sam - jak przebiega proces tejże funkcji:
- Wywołanie (przy connect'cie, tak jak napisałeś wyżej),
- Deklaracja zmiennej,
- Pętla dla (przykładowo) 32 graczy, a w niej:
- Sprawdzenie teamu graczy, które prowadzi do niczego.
- Sprawdzenie z każdą iteracją, czy get_playersnum() >= playersnum.
- Sprawdzenie z każdą iteracją, czy zmienne g_boolCanBuild oraz g_boolPrepTime mają wartość 1.
- Wykonanie komendy na graczu, jeśli przejdzie przez wszystkie ify.
- Powtórzenie iteracji.
Możesz zrobić tak:
PrzeniesDoTT(index) { if(!is_user_connected(index)) return; if(get_user_team(index) == 1) return; if(g_boolCanBuild || g_boolPrepTime) return; const minPlayers = 1; if(get_playersnum() < minPlayers) return; const minBuilders = 1; if(getBuildersCount() < minBuilders) return; engclient_cmd(index, "jointeam", "1"); } getBuildersCount() { new counter; for(new i = 1; i <= 32; i++) if(is_user_connected(i) && get_user_team(i) == 2 && is_user_alive(i)) counter++; return counter; }
czy zamiast engclient_cmd(index, "jointeam", "1"); moge zastosować cs_set_user_team(id, CS_TEAM_CT)?
chodzi mi o:
aby gdy gracz wejdzie na serwer po czasie budowania czyli g_boolCanBuild , to przerzuca go do TT
Użytkownik Pawlik4Ver edytował ten post 08.02.2019 19:44
Robiin
08.02.2019
Jak dobrze pamiętam, to był jakiś problem z cs_set_user_team, że to nie działało zgodnie z nazwą (bądź w nieoczekiwany sposó, ale na 100% nie wiem. Możesz spróbować, ewentualnie posiłkować się tym, ale zaczerpnąłem to z zp 4.3, więc nie wiem jak zadziała na nowszych AMXXach.
const OFFSET_CSTEAMS = 114; const OFFSET_LINUX = 5; const TASK_TEAMUPDATE = 1337; switchTeam(index, team, bool:update) { set_pdata_int(index, OFFSET_CSTEAMS, team, OFFSET_LINUX); if(update) set_task(0.1, "updateTeam", index + TASK_TEAMUPDATE); } public updateTeam(taskIndex) { new index = taskIndex - TASK_TEAMUPDATE; if(!is_user_connected(index)) return; static messageTeamInfo; if(!messageTeamInfo) messageTeamInfo = get_user_msgid("TeamInfo"); new const teamNames[][] = { "UNASSIGNED", "TERRORIST", "CT", "SPECTATOR" }; emessage_begin(MSG_ALL, messageTeamInfo); ewrite_byte(index); ewrite_string(teamNames[get_pdata_int(index, OFFSET_CSTEAMS, OFFSET_LINUX)]); emessage_end(); }
Albertd
12.02.2019
Czytając twoją sygnę można by się spodziewać że takiego rzeczy potrafisz robić.
Tworze strony Internetowe/WWW (HTML5/CSS, PHP), oraz robię paczki do cs1.6( pisze pluginy też ) na zamówienie. SPRZEDAM PACZKĘ BASEBUILDER DNKS, mod doskonalony paczka możliwa do zobaczenia przed zakupem, więcej na priv lub GG: 62653757 Skontaktować możesz się zemną przez GG:62653757
A twoje rozwiązanie to: putinserver można by zamienić na faktyczne dołączenie do drużyny ale już powinieneś wiedzieć jak to zrobić.
public client_putinserver(id){ if( task_exists(id+581222) ) remove_task(id+581222) set_task(5.0, "checkTeam", id+581222) } public checkTeam(id){ id -= 581222 if(g_boolCanBuild) return if( get_user_team(id) == 1 ) return cs_set_user_team(id, 1) }
Użytkownik Albertd edytował ten post 12.02.2019 22:03
Pawlik4Ver
24.02.2019
A dziękuję
No niestety Albertd nie miałem pomysłu, stwierdzam lenia. Ale dzięki.