Kto kogo oślepił - nicki po przecinku
MrStrajker
08.11.2022
Witam,
Czy byłby ktoś tak miły i przerobiłby mi plugin team flash snitch
Sprawa wygląda tak, że chciałbym aby na chacie lista nicków o oślepionych graczach pojawiała się po przecinku w jednej wiadomości.
W przypadku gdy oślepię 3 graczy: Oślepiłeś graczy: nick1, nick2, nick 3
W przypadku gdy oślepię tylko jednego gracza: Oślepiłeś gracza: nick
Aktualnie wygląda to tak, że każda informacja o kolejnym graczu jest osobna:
Oślepiłeś gracza: nick
Oślepiłeś gracza: nick2
#include <amxmodx> #include <amxmisc> #include <fakemeta> #define PLUGIN "Flash Snitch" #define VERSION "1.0" #define AUTHOR "Sn!ff3r" #define ID 3322 new msg_saytext new g_flasher public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) msg_saytext = get_user_msgid("SayText") register_event("ScreenFade", "ScreenFade", "be", "4=255", "5=255", "6=255", "7>199") register_event("23", "TEMPENTITY", "a", "1=5", "6=25", "7=6") register_forward(FM_SetModel, "SetModel") } public SetModel(ent, model[]) { if(equal(model, "models/w_flashbang.mdl")) { static owner owner = pev(ent, pev_owner) if(owner) { set_task(1.52,"get_flasher", ID + owner) } } } public TEMPENTITY() { set_task(0.05, "reset_flasher") return PLUGIN_CONTINUE } public reset_flasher() { g_flasher = 0 } public get_flasher(id) { g_flasher = (id - ID) } public ScreenFade(id) { if(is_user_alive(id)) { if(id != g_flasher && get_user_team(id) == get_user_team(g_flasher)) { static name[33], message[128] get_user_name(g_flasher, name, 32) formatex(message, 127, "^x04~^x01 Zostales oslepiony przez:^x03 %s", name) print_that(id, message) get_user_name(id, name, 32) formatex(message, 127, "^x04~^x01 Oslepiles gracza:^x03 %s", name) print_that(g_flasher, message) } } } stock print_that(id, text[]) { message_begin(MSG_ONE_UNRELIABLE, msg_saytext, {0,0,0}, id) write_byte(id) write_string(text) message_end() }
Z góry dziękuje
Boski Z Polski
08.11.2022
Nie testowane, zrobiłem coś takiego na szybko:
#include <amxmodx> #include <amxmisc> #include <reapi> #define PLUGIN "Kto kogo oslepil" #define VERSION "1.0.0" #define AUTHOR "Boski Z Polski" #define TASK_WIADOMOSC 1000 new kogo_oslepil[33][33][33]; new ilosc_oslepionych[33]; public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); RegisterHookChain(RG_PlayerBlind, "oslepienie_hook", 0); } public client_disconnected(id) { if(task_exists(id + TASK_WIADOMOSC)) { remove_task(id + TASK_WIADOMOSC); } if(ilosc_oslepionych[id]) { for(new i = 1; i <= ilosc_oslepionych[id]; i++) { copy(kogo_oslepil[id][i], charsmax(kogo_oslepil), ""); } ilosc_oslepionych[id] = 0; } } public oslepienie_hook (const index, const inflictor, const attacker, const Float:fadeTime, const Float:fadeHold, const alpha, Float:color[3]) { if(is_user_alive(index) && index != attacker) { if(get_user_team(index) == get_user_team(attacker)) { new name_oslepiony[33]; get_user_name(index, name_oslepiony, charsmax(name_oslepiony)); ++ ilosc_oslepionych[attacker]; copy(kogo_oslepil[attacker][ilosc_oslepionych[attacker]], charsmax(kogo_oslepil), name_oslepiony); new name_oslepiajacy[33]; get_user_name(attacker, name_oslepiajacy, charsmax(name_oslepiajacy)); new wiadomosc[100]; formatex(wiadomosc, charsmax(wiadomosc), "zostales oslepiony przez: %s", name_oslepiajacy); client_print(index, print_chat, wiadomosc); if(!task_exists(attacker + TASK_WIADOMOSC)) { set_task(0.1, "wiadmosc_oslepiajacy", attacker + TASK_WIADOMOSC); } } } } public wiadmosc_oslepiajacy(id) { id -= TASK_WIADOMOSC; if(!is_user_connected(id)) { return PLUGIN_CONTINUE; } new kogo[200] for(new i = 1; i <= ilosc_oslepionych[id]; i++) { new formate[100]; formatex(formate, charsmax(formate), " %s", kogo_oslepil[id][ilosc_oslepionych[i]]); add(kogo, charsmax(kogo), formate); } new wiadomosc[100]; if(ilosc_oslepionych[id] == 1) { formatex(wiadomosc, charsmax(wiadomosc), "oslepiles:%s", kogo); } else { formatex(wiadomosc, charsmax(wiadomosc), "oslepiles graczy:%s", kogo); } client_print(id, print_chat, wiadomosc); for(new i = 1; i <= ilosc_oslepionych[id]; i++) { copy(kogo_oslepil[id][i], charsmax(kogo_oslepil), ""); } ilosc_oslepionych[id] = 0; return PLUGIN_CONTINUE; }
Użytkownik Boski Z Polski edytował ten post 08.11.2022 19:31
MrStrajker
09.11.2022
Działa, lecz mam zagwozdkę jak zastosować przecinek po każdym nicku?
Na początku myślałem by użyć ", %s" ale wyglądałoby to tak:
oślepiłes graczy:, nick1, nick2, nick3
Dodatkowo moglibyśmy zastosować colorchat w tych wiadomościach?
mordoryjacz
09.11.2022
Działa, lecz mam zagwozdkę jak zastosować przecinek po każdym nicku?
Na początku myślałem by użyć ", %s" ale wyglądałoby to tak:
oślepiłes graczy:, nick1, nick2, nick3
Dodatkowo moglibyśmy zastosować colorchat w tych wiadomościach?
to zrob tak jak napisales, a jesli chcesz uzyc colorchat to dodaj
#include <colorchat>i zamien to
client_print(id, print_chat, wiadomosc);na to
ColorChat(id, GREEN, wiadomosc);
Boski Z Polski
09.11.2022
Działa, lecz mam zagwozdkę jak zastosować przecinek po każdym nicku?
Na początku myślałem by użyć ", %s" ale wyglądałoby to tak:
oślepiłes graczy:, nick1, nick2, nick3
Dodatkowo moglibyśmy zastosować colorchat w tych wiadomościach?
to zrob tak jak napisales, a jesli chcesz uzyc colorchat to dodaj
#include <colorchat>i zamien to
client_print(id, print_chat, wiadomosc);na to
ColorChat(id, GREEN, wiadomosc);
Zgadza się, ale zapomniałeś dodać, że trzeba zmodyfikować include ColorChat
#include <amxmodx> #include <amxmisc> #include <reapi> #include <colorchat> #define PLUGIN "Kto kogo oslepil" #define VERSION "1.0.0" #define AUTHOR "Boski Z Polski" #define TASK_WIADOMOSC 1000 new kogo_oslepil[33][33][33]; new ilosc_oslepionych[33]; public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); RegisterHookChain(RG_PlayerBlind, "oslepienie_hook", 0); } public client_disconnected(id) { if(task_exists(id + TASK_WIADOMOSC)) { remove_task(id + TASK_WIADOMOSC); } if(ilosc_oslepionych[id]) { for(new i = 1; i <= ilosc_oslepionych[id]; i++) { copy(kogo_oslepil[id][i], charsmax(kogo_oslepil), ""); } ilosc_oslepionych[id] = 0; } } public oslepienie_hook (const index, const inflictor, const attacker, const Float:fadeTime, const Float:fadeHold, const alpha, Float:color[3]) { if(is_user_alive(index) && index != attacker) { if(get_user_team(index) == get_user_team(attacker)) { new name_oslepiony[33]; get_user_name(index, name_oslepiony, charsmax(name_oslepiony)); ++ ilosc_oslepionych[attacker]; copy(kogo_oslepil[attacker][ilosc_oslepionych[attacker]], charsmax(kogo_oslepil), name_oslepiony); new name_oslepiajacy[33]; get_user_name(attacker, name_oslepiajacy, charsmax(name_oslepiajacy)); new wiadomosc[100]; formatex(wiadomosc, charsmax(wiadomosc), "^x04zostales oslepiony przez:^x03 %s", name_oslepiajacy); ColorChat(index, TEAM_COLOR, wiadomosc); if(!task_exists(attacker + TASK_WIADOMOSC)) { set_task(0.1, "wiadmosc_oslepiajacy", attacker + TASK_WIADOMOSC); } } } } public wiadmosc_oslepiajacy(id) { id -= TASK_WIADOMOSC; if(!is_user_connected(id)) { return PLUGIN_CONTINUE; } new kogo[100] for(new i = 1; i <= ilosc_oslepionych[id]; i++) { new formate[100]; if(i == 1) { formatex(formate, charsmax(formate), " %s", kogo_oslepil[id][ilosc_oslepionych[i]]); } else { formatex(formate, charsmax(formate), " ,%s", kogo_oslepil[id][ilosc_oslepionych[i]]); } add(kogo, charsmax(kogo), formate); } new wiadomosc[100]; if(ilosc_oslepionych[id] == 1) { formatex(wiadomosc, charsmax(wiadomosc), "^x03oslepiles:^x04%s", kogo); } else { formatex(wiadomosc, charsmax(wiadomosc), "^x03oslepiles graczy:^x04%s", kogo); } ColorChat(id, TEAM_COLOR, wiadomosc); for(new i = 1; i <= ilosc_oslepionych[id]; i++) { copy(kogo_oslepil[id][i], charsmax(kogo_oslepil), ""); } ilosc_oslepionych[id] = 0; return PLUGIN_CONTINUE; } Podmień dodatkowo załącznik.
Załączone pliki
MrStrajker
10.11.2022
Super, dziękuje.
Tylko mam pytanie jesteśmy w stanie ogarnąć aby przed pierwszym nickiem nie było przecinka?
Aktualnie wygląda to tak:
oslepiles graczy:, nick1, nick 2
Chodzi mi o to żeby przecinek pojawiał się tylko i wyłącznie miedzy nickami a nie przed ani po
PANDA_2zl
10.11.2022
to
,%szamien na to%s,
Nope, wtedy będzie miał zbędny przecinek na końcu, już lepiej zostawić z przecinkiem na początku i podmianę przez funkcje replace pierwszego przecinka na "nic"
jak masz to pod koniec kodu
ColorChat(id, TEAM_COLOR, wiadomosc);
to dodajesz nad tym to:
replace(wiadomosc, 20, ",", "");
powinno zalatwic sprawe
Użytkownik SezonowyGracz edytował ten post 10.11.2022 21:20
MrStrajker
11.11.2022
to
,%szamien na to%s,
Nope, wtedy będzie miał zbędny przecinek na końcu, już lepiej zostawić z przecinkiem na początku i podmianę przez funkcje replace pierwszego przecinka na "nic"
jak masz to pod koniec koduColorChat(id, TEAM_COLOR, wiadomosc);to dodajesz nad tym to:
replace(wiadomosc, 20, ",", "");powinno zalatwic sprawe
Dziękuje, spróbuje aczkolwiek wysypuje takimi błędami podczas próby kompilacji:
flash.sma(18) : error 017: undefined symbol "RegisterHookChain" flash.sma(18) : warning 215: expression has no effect flash.sma(18) : warning 215: expression has no effect flash.sma(18) : error 001: expected token: ";", but found ")" flash.sma(18) : error 029: invalid expression, assumed zero flash.sma(18) : fatal error 107: too many error messages on one line
W załączniku przesyłam cały kod.
Załączone pliki
PANDA_2zl
11.11.2022
kompiluje normalnie, wrzuc te includy na dysk
https://www40.zippyshare.com/v/7Q2E67Uy/file.html
MrStrajker
12.11.2022
kompiluje normalnie, wrzuc te includy na dysk
https://www40.zippyshare.com/v/7Q2E67Uy/file.html
Wrzuciłem całą tą paczke i wyrzuca mi taki błąd:
include\reapi.inc(92) : fatal error 100: cannot read from file: "cssdk_const"
MrStrajker
13.11.2022
Plugin udało się wreszcie skompilowac natomiast kompletnie nie działa.
Nie wyświetla żadnych informacji, że kogoś oślepiłem ani to przez kogo zostałem oślepiony.
PANDA_2zl
13.11.2022
Użytkownik SezonowyGracz edytował ten post 13.11.2022 18:17
MrStrajker
13.11.2022
Moduł reapi wgrałeś na serwer? I uruchomiłes?
Tak wrzuciłem do folderu modules i w modules.ini dodałem "reapi"
Pojawiają się takie error logi:
L 11/13/2022 - 18:27:59: Start of error session. L 11/13/2022 - 18:27:59: Info (map "de_dust2") (file "addons/amxmodx/logs/error_20221113.log") L 11/13/2022 - 18:27:59: [AMXX] Plugin ("flash.amxx") is setting itself as failed. L 11/13/2022 - 18:27:59: [AMXX] Plugin says: [ReAPI]: Api minor version mismatch; expected at least 22, real 21 L 11/13/2022 - 18:27:59: [AMXX] Run time error 1 (plugin "flash.amxx") - forced exit
MrStrajker
13.11.2022
wgraj to najnowsze reapi https://www111.zippy...3o5WV/file.html
Wgrałem tą wersje i pojawiły się takie error logi:
L 11/13/2022 - 18:37:49: Info (map "de_dust2") (file "addons/amxmodx/logs/error_20221113.log") L 11/13/2022 - 18:37:49: [ReAPI] RegisterHookChain: function (PlayerBlind) is not available, ReGameDLL required. L 11/13/2022 - 18:37:49: [AMXX] Run time error 10 (plugin "flash.amxx") (native "RegisterHookChain") - debug not enabled! L 11/13/2022 - 18:37:49: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
Po zdebugowaniu:
L 11/13/2022 - 18:38:34: Info (map "de_dust2") (file "addons/amxmodx/logs/error_20221113.log") L 11/13/2022 - 18:38:34: [ReAPI] RegisterHookChain: function (PlayerBlind) is not available, ReGameDLL required. L 11/13/2022 - 18:38:34: [AMXX] Displaying debug trace (plugin "flash.amxx", version "1.0.0") L 11/13/2022 - 18:38:34: [AMXX] Run time error 10: native error (native "RegisterHookChain") L 11/13/2022 - 18:38:34: [AMXX] [0] flash.sma::plugin_init (line 18)
MrStrajker
14.11.2022
L 11/14/2022 - 14:01:02: replace() buffer not big enough (28>=20) L 11/14/2022 - 14:01:02: [AMXX] Displaying debug trace (plugin "flash.amxx", version "1.0.0") L 11/14/2022 - 14:01:02: [AMXX] Run time error 10: native error (native "replace") L 11/14/2022 - 14:01:02: [AMXX] [0] flash.sma::wiadmosc_oslepiajacy (line 103)
PANDA_2zl
14.11.2022
Użytkownik SezonowyGracz edytował ten post 14.11.2022 15:15