#include <amxmodx> #include <cstrike> new runda = 0 new CT = 0 new TT = 0 public plugin_init() { register_plugin("zamiana druzynami", "1.0" ,"wizu") register_event("SendAudio","koniec_rundy","a","2=%!MRAD_terwin","2=%!MRAD_ctwin","2=%!MRAD_rounddraw") register_event("SendAudio", "t_win", "a", "2&%!MRAD_terwin") register_event("SendAudio", "ct_win", "a", "2&%!MRAD_ctwin") register_event("HLTV", "Nowa_Runda", "a", "1=0", "2=0") set_cvar_num("mp_maxrounds", 16) set_cvar_num("mp_timelimit", 0) } public koniec_rundy() { if (++runda == 8) { client_print(0,print_chat,"Runda zakonczona, zamiana teamami.") for(new i=1;i<32;i++) { if (is_user_connected(i)) { new CsTeams:team = cs_get_user_team(i) if (team==CS_TEAM_T) { switch(random_num(1,4)) { case 1: { cs_set_user_team( i, CS_TEAM_CT, CS_CT_URBAN ) } case 2: { cs_set_user_team( i, CS_TEAM_CT, CS_CT_GSG9 ) } case 3: { cs_set_user_team( i, CS_TEAM_CT, CS_CT_GIGN ) } case 4: { cs_set_user_team( i, CS_TEAM_CT, CS_CT_SAS ) } } cs_set_user_money(i, 800, 1) } if (team==CS_TEAM_CT) { switch(random_num(1,4)) { case 1: { cs_set_user_team( i, CS_TEAM_T, CS_T_TERROR ) } case 2: { cs_set_user_team( i, CS_TEAM_T, CS_T_LEET ) } case 3: { cs_set_user_team( i, CS_TEAM_T, CS_T_ARCTIC ) } case 4: { cs_set_user_team( i, CS_TEAM_T, CS_T_GUERILLA ) } } cs_set_user_money(i, 800, 1) } } } } } public ct_win() { CT++ if (runda == 8) { new s_TT = TT TT = CT CT = s_TT } } public t_win() { TT++ if (runda == 8) { new s_TT = TT TT = CT CT = s_TT } } public Nowa_Runda() { message_begin(MSG_ALL, get_user_msgid("TeamScore"),{0,0,0},0) write_string("TERRORIST") write_byte(TT) write_byte(0) message_end() message_begin(MSG_ALL, get_user_msgid("TeamScore"),{0,0,0},0) write_string("CT") write_byte(CT) write_byte(0) message_end() }Dzięki.
Witamy w Nieoficjalnym polskim support'cie AMX Mod X
Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
|
Guest Message by DevFuse
Po 8 rundach zamiana teamów
Started By wizu, 11.10.2008 14:58
13 replies to this topic
#1
Posted 11.10.2008 14:58
Witam. Chciałem sobie napisać plugin, który po 8 rundach zamieni teamami graczy (tzn. jeśli ktoś był w ct, to teraz będzie w tt). Fragi i deady mają zostać, ale chciałem też zamienić punty teamów. Coś mi jednak nie wychodzi. Ogólnie dziwnie to działa. Nie jestem pewny, czy wszystkich zamienia i na dodatek zamiast zmieniać punkty teamów pokazuje -1... Pomoże ktoś? Oto mój kod:
#2
Posted 11.10.2008 15:22
Mi ta funkcja cs_set_user_team w ogóle się nie podoba (jej działanie). I to przez nią mogą się dziać różne dziwne rzeczy.
Proponuje Ci zrobić to tak jak tutaj zrobiłem: http://amxx.pl/viewtopic.php?t=3595
Z wykorzystaniem engclient_cmd(index,"jointeam","TEAM")
Proponuje Ci zrobić to tak jak tutaj zrobiłem: http://amxx.pl/viewtopic.php?t=3595
Z wykorzystaniem engclient_cmd(index,"jointeam","TEAM")
#3
Posted 11.10.2008 16:52
Ale ona działa elegancko. Przenosi graczy bez zabijania ich. Największym problemem teraz są te punkty teamów.
Poza tym, jeżeli użyję tej funkcji
Poza tym, jeżeli użyję tej funkcji
engclient_cmdTo serwerowi będzie się wydawać, że gracz sam zmienił team. A ja mam na serwerze blokadę zmiany teamów i limitteams więc to rozwiązanie odpada.
#4
Posted 11.10.2008 17:54
pozmieniałem troche, aczkolwiek powiem że oszpeciłem ten kod jaknajbardziej sie da z powodu braku chęci, motywacji i czasu załącznik
Attached Files
#5
Posted 11.10.2008 20:49
Twoje sma to:
Jest tu kilka błędów:
1.
2.
3.
#include <amxmodx> #include <cstrike> new runda, TT, CT, old_ct, old_tt public plugin_init() { register_plugin("zamiana druzynami", "1.0" ,"wizu") register_logevent("koniec_rundy", 2, "1=Round_end") register_event("SendAudio", "ct_win", "a", "2&%!MRAD_ctwin") register_event("SendAudio", "t_win", "a", "2&%!MRAD_terwin") register_event("HLTV", "Nowa_Runda", "a", "1=0", "2=0") register_event("TextMsg", "fwRestart", "a", "2Game_will_restart_in") set_cvar_num("mp_maxrounds", 16) set_cvar_num("mp_timelimit", 0) } public koniec_rundy() { if (runda == 8) { new playerstt[32], pnumtt, i, terror, playersct[32], pnumct, x, cterror get_players(playerstt, pnumtt, "e", "TERRORIST") get_players(playersct, pnumct, "e", "CT") for(i=0; i < pnumtt; i++) terror = playerstt[i] for(x=0; x < pnumct; x++) cterror = playersct[x] client_print(0,print_chat,"Runda zakonczona, zamiana teamami.") cs_set_user_team(terror, CS_TEAM_CT, CS_CT_SAS) cs_set_user_money(terror, 800, 1) cs_set_user_team(cterror, CS_TEAM_T, CS_T_ARCTIC) cs_set_user_money(cterror, 800, 1) } } public ct_win() { CT++ if(runda >= 8) old_ct = CT } public t_win() { TT++ if(runda >=8) old_tt = TT } public fwRestart(){ TT = 0; CT = 0; } public Nowa_Runda() { if(runda >= 8) { message_begin(MSG_ALL, get_user_msgid("TeamScore"),{0,0,0},0) write_string("TERRORIST") write_byte(old_ct) message_end() message_begin(MSG_ALL, get_user_msgid("TeamScore"),{0,0,0},0) write_string("CT") write_byte(old_tt) message_end() } }
Jest tu kilka błędów:
1.
public Nowa_Runda() { if(runda >= 8) {Powinno być:
public Nowa_Runda() { if(++runda >= 8) {Żeby zwiększało liczbę rund przy końcu rundy. Inaczej w ogóle plugin nie zadziała.
2.
public ct_win() { CT++ if(runda == 8) old_ct = CT } public t_win() { TT++ if(runda ==8) old_tt = TT }Powinno być:
public ct_win() { CT++ if(runda >= 8) old_ct = CT } public t_win() { TT++ if(runda >=8) old_tt = TT }Ponieważ funkcja, która zmienia wynik teamu zmienia tylko wyświetlaną liczbę, a zmienną z wynikiem cs przechowuje u siebie i wyświetla od nowa po każdej rundzie.
3.
for(i=0; i < pnumtt; i++) terror = playerstt[i] for(x=0; x < pnumct; x++) [b]cterror[/b] = playersct[x] client_print(0,print_chat,"Runda zakonczona, zamiana teamami.") cs_set_user_team(terror, CS_TEAM_CT, CS_CT_SAS) cs_set_user_money(terror, 800, 1) cs_set_user_team(cterror, CS_TEAM_T, CS_T_ARCTIC) cs_set_user_money(cterror, 800, 1)Tutaj, to już w ogóle odpada. Ponieważ do zmiennej terror oraz cterror zostanie przypisane ID tylko i wyłącznie ostatniej osoby. Trzeba trochę pozmieniać
#6
Posted 11.10.2008 21:46
3. proponuje
new players[32],num get_players(players,num) for(new i=0;i<num;i++) { if(cs_get_user_team(players[i])==CS_TEAM_T) cs_set_user_team(players[i], CS_TEAM_CT,random_num(5,8)) else if(cs_get_user_team(players[i])==CS_TEAM_CT) cs_set_user_team(players[i], CS_TEAM_T,random_num(1,4)) else continue cs_set_user_money(players[i], 800, 1) } client_print(0,print_chat,"Runda zakonczona, zamiana teamami.")
#7
Posted 11.10.2008 21:51
Jednak co najdziwniejsze w ogóle nie pokazuje mi się
po 8 rundachRunda zakonczona, zamiana teamami.
#8
Posted 11.10.2008 22:20
Daj caly kod co masz sklejony
#9
Posted 12.10.2008 08:49
W tej chwili wygląda to tak:
#include <amxmodx> #include <cstrike> new runda, TT, CT, old_ct, old_tt public plugin_init() { register_plugin("zamiana druzynami", "1.0" ,"wizu") register_logevent("koniec_rundy", 2, "1=Round_end") register_event("SendAudio", "ct_win", "a", "2&%!MRAD_ctwin") register_event("SendAudio", "t_win", "a", "2&%!MRAD_terwin") register_event("HLTV", "Nowa_Runda", "a", "1=0", "2=0") register_event("TextMsg", "fwRestart", "a", "2Game_will_restart_in") set_cvar_num("mp_maxrounds", 16) set_cvar_num("mp_timelimit", 0) } public koniec_rundy() { if (++runda == 8) { new players[32],num get_players(players,num) for(new i=0;i<num;i++) { if(cs_get_user_team(players[i])==CS_TEAM_T) cs_set_user_team(players[i], CS_TEAM_CT,random_num(5,8)) else if(cs_get_user_team(players[i])==CS_TEAM_CT) cs_set_user_team(players[i], CS_TEAM_T,random_num(1,4)) else continue cs_set_user_money(players[i], 800, 1) } client_print(0,print_chat,"Runda zakonczona, zamiana teamami.") } } public ct_win() { CT++ if(runda >= 8) old_ct = CT } public t_win() { TT++ if(runda >=8) old_tt = TT } public fwRestart(){ TT = 0; CT = 0; } public Nowa_Runda() { if(runda >= 8) { message_begin(MSG_ALL, get_user_msgid("TeamScore"),{0,0,0},0) write_string("TERRORIST") write_byte(old_ct) message_end() message_begin(MSG_ALL, get_user_msgid("TeamScore"),{0,0,0},0) write_string("CT") write_byte(old_tt) message_end() } }I działa tak, jakby zmienna runda przez cały była równa 0. Może rundę będę przetrzymywał w cvarze?
#10
Posted 12.10.2008 12:48
w Nowa_Runda() daj sobie
client_print(0,print_chat,"Runda numer - %d",runda)i co runda będziesz widział jaką wartość ma zmienna runda.
#11
Posted 12.10.2008 13:05
No właśnie. Tylko dedyk mi coś świruje i nie mam jak sprawdzić.
#12
Posted 12.10.2008 15:32
Rozwiń nieco tą wypowiedź...
#13
Posted 12.10.2008 15:33
Chodziło mi o to, że serwer dedykowany, na którym mam swoje serwery cs jakoś dziwnie się zachowuje i nie mam jak dorzucić pluginów.
#14
Posted 12.10.2008 17:58
.....
1 user(s) are reading this topic
0 members, 1 guests, 0 anonymous users