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.
|
Shaxu
Rejestracja: 19.04.2013Aktualnie: Nieaktywny
Poza forum Ostatnio: 07.10.2021 22:51





Statystyki
- Grupa: Użytkownik
- Całość postów: 89
- Odwiedzin: 7 081
- Tytuł: Zaawansowany
- Wiek: Wiek nie został ustalony
- Urodziny: Data urodzin nie została podana
-
Imię
Adam
-
Płeć
Mężczyzna
-
Lokalizacja
Olsztyn
Kontakt
Narzędzia użytkownika
Ostatnio byli
#772203 [ROZWIĄZANE] Dekompilacja modeli players/zombie
Napisane przez viper367
w 07.07.2021 16:39
#772160 Non steam nie może użyć komendy
Napisane przez Anonymuss
w 01.07.2021 21:07
Bardzo dobry tutorial, kilka komend zostało naprawionych customowych komend przy uzyciu natywów, oczywiście daje plusika.
Spróbujemy podnieść troche blokowanie CSXGuarda o poziom wyzej w tym momencie.
Nastepny problem jaki można zauważyc jest odczyt plików motd przy użyciu funkcji show_motd, czy jest jakieś konkretne rozwiązanie dla graczy którzy mają wgranego protectora CSXguard?
Ogólnie próbowałem rozwiązać issue przy użyciu podobnego rozwiązania przedstawionego powyżej, aczokolwiek naprawia błąd w dziwny sposób poniżej prezentuje opis jak wygląda sytuacja:
Step 1 ) Gracz CSSetti nie ma możliwości uruchomienia komendy /top15 z poziomu customowego menu ( od razu dostaje odpowiedź do konsoli z informacją [CSXGuard] MOTD: Blocked )
Step 2 ) Nastepnie jeśli gracz wpiszę /top15 manualnie przez say, landing page czy też plik txt. załaduje się bez problemu
Step 3 ) Przez kilka prób około 3-4 razy będzie mógł zobaczyć /top15 z poziomu customowego menu
Step 4 ) Po upływie tych prób, ponownie komenda /top15 nie bedzie działać z poziomu menu oraz będzie trzeba powtarzać cały proceder od początku czyli wpisanie manualnie /top15 oraz przez kilka prób będzie można sprawdzić w customowym menu /top15
Pytanie moje brzmi czy jest jakaś alternatywa na ładowanie informacji z okienka MOTD czy też da się naprawic ładowanie MOTD dla CSXguarda tak aby od razu ładował z poziomu zamiast wpisywania ręcznie /top15 oraz mieć możliwośc podglądu na kilka prób.
Pozdrawiam Serdecznie Shaxu
Nie ma rozwiązania na blokadę motd przez protector (chociaż nie zawsze zadziała ta blokada motd, wiem z autopsji). Gorsza alternatywa (ponieważ w motd jest więcej opcji) - jeśli chcesz zrobić jakiś krótki opis możesz po prostu wykorzystać show_menu, zrobić puste menu bez przycisków z samym tekstem. Co do podglądu na ilość prób chodzi Ci o to, że chcesz widzieć kto, ile razy wybrał opcję "top15" z Twojego menu czy jak?
#772148 Non steam nie może użyć komendy
Napisane przez Anonymuss
w 29.06.2021 22:37
Witam powoli uczę się pisać plugini i za pomocą jednego z poradników zrobiłem menu z komendami. i okazuje się, że ludzie z non steam nie działa
Zasada pluginu jest prosta wpisujesz /komendy masz listę komend wybierasz i się wywołuje. ale graczom non steam pojawia się takie coś [CSXGuard] "say /sklep": (SD Blocked)
/* Plugin generated by AMXX-Studio */ #include <amxmodx> #include <amxmisc> #define PLUGIN "komendy" #define VERSION "1.0" #define AUTHOR "xmox" new komendy; public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_clcmd("say /komendy", "nowemenu"); komendy = menu_create("lista komend","nowemenuhandle"); menu_additem(komendy,"Zaloguj sie ");//item = 0 menu_additem(komendy,"Sklep ");//item = 1 menu_additem(komendy,"Sklep SmS");//item = 2 menu_additem(komendy,"Przekaz guziki ");//item = 3 menu_additem(komendy,"Widok z trzeciej osoby ");//item = 4 menu_additem(komendy,"Widok z pierwszej osoby ");//item = 5 menu_additem(komendy,"Wycisz gracza ");//item = 6 menu_additem(komendy,"Menu rang ");//item = 7 menu_additem(komendy,"Info o VIP ");//item = 8 menu_additem(komendy,"wyłącz HUD");//item = 9 menu_setprop(komendy, MPROP_EXITNAME, "Wyjscie"); } public nowemenu(id){ menu_display(id, komendy); return PLUGIN_HANDLED; } public nowemenuhandle(id, menu, item){ if(item == MENU_EXIT) { return PLUGIN_HANDLED; } switch(item) { case 0:{ client_cmd(id, "say /konto"); } case 1:{ client_cmd(id, "say /sklep"); } case 2:{ client_cmd(id, "say /sklepsms"); } case 3:{ client_cmd(id, "say /daj"); } case 4:{ client_cmd(id, "say /thirdperson"); } case 5:{ client_cmd(id, "say /firstperson"); } case 6:{ client_cmd(id, "say /mute"); } case 7:{ client_cmd(id, "say /rangmenu"); } case 8:{ client_cmd(id, "say /vip"); } case 9:{ client_cmd(id, "say /hud"); } } return PLUGIN_HANDLED; }Z góry dziękuję za pomoc i pozdrawiam.
Skoro uczysz się pisać pluginy to dam Ci wskazówkę. Najlepiej jakby to menu było napisane w ten sposób:
/* Plugin generated by AMXX-Studio */ #include <amxmodx> #include <amxmisc> #define PLUGIN "komendy" #define VERSION "1.0" #define AUTHOR "xmox" public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); register_clcmd("say /komendy", "nowemenu"); } public nowemenu(id) { new komendy = menu_create("lista komend", "nowemenuhandle"); menu_additem(komendy, "Zaloguj sie ");//item = 0 menu_additem(komendy, "Sklep ");//item = 1 menu_additem(komendy, "Sklep SmS");//item = 2 menu_additem(komendy, "Przekaz guziki ");//item = 3 menu_additem(komendy, "Widok z trzeciej osoby ");//item = 4 menu_additem(komendy, "Widok z pierwszej osoby ");//item = 5 menu_additem(komendy, "Wycisz gracza ");//item = 6 menu_additem(komendy, "Menu rang ");//item = 7 menu_additem(komendy, "Info o VIP ");//item = 8 menu_additem(komendy, "wyłącz HUD");//item = 9 menu_setprop(komendy, MPROP_EXITNAME, "Wyjscie"); menu_display(id, komendy); return PLUGIN_HANDLED; } public nowemenuhandle(id, menu, item) { if(item == MENU_EXIT) return PLUGIN_HANDLED; switch(item) { case 0: client_cmd(id, "say /konto"); case 1: client_cmd(id, "say /sklep"); case 2: client_cmd(id, "say /sklepsms"); case 3: client_cmd(id, "say /daj"); case 4: client_cmd(id, "say /thirdperson"); case 5: client_cmd(id, "say /firstperson"); case 6: client_cmd(id, "say /mute"); case 7: client_cmd(id, "say /rangmenu"); case 8: client_cmd(id, "say /vip"); case 9: client_cmd(id, "say /hud"); } return PLUGIN_HANDLED; }
[CSXGuard] "say /sklep": (SD Blocked)
Takie coś wyskakuje wszystkim ns'om którzy pobrali cs z cssetti, ponieważ tam w standardzie jest dodawany skrypt csx guard, który blokuje komendy z configu tego skryptu "CSXGuard.ini" wykonywane przez serwer na graczu. W tym pliku są wpisane komendy "say" i "say_team" dlatego przez natyw client_cmd nie zadziała to na ns'ach.
Albo ludzie którym nie działa Twoje menu, w CSXGuard.ini (w folderze swojego cs'a) wyłączą sobie ten skrypt w ten sposób
Enabled = True
na
Enabled = False
bądź w konsoli gry wpiszą sobie komendę csx guarda
csx_setcvar2 "Enabled" "False"
Albo są jeszcze dwie metody ale ja używam tylko jednej dlatego drugą niech Ci wytłumaczy ktoś kto używa tego natywu https://amxx.pl/doku.../callfunc-begindo omijania guarda
Musisz edytować wszystkie pluginy, które chcesz aby odpalały się przez Twoje menu /komendy, dlatego w tym przypadku prawdopodobnie będziesz miał problem z komendą /sklepsms, ponieważ zapewne go kupiłeś i posiadasz sam plik .amxx bez .sma. W każdym pluginie trzeba zrobić natyw do funkcji którą chcesz wywołać przez swoje menu. Na koniec do swojego pluginu /komendy dopisujesz gdzieś nad "public plugin_init()" wszystkie te natywy z innych pluginów, a później w "case" używasz tych natywów zamiast client_cmd.
Przykład jak stworzyć natyw w jakimś randomowym pluginie:
#include <amxmodx> #define PLUGIN ".." #define VERSION ".." #define AUTHOR ".." public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); register_clcmd("say /konto", "menu_kont"); } public plugin_natives() { register_native("natyw_menukont", "menu_kont", 1); } public menu_kont(id) { //jakis tam kod na menu }
Przykład jak go użyć w Twoim menu:
/* Plugin generated by AMXX-Studio */ #include <amxmodx> #include <amxmisc> #define PLUGIN "komendy" #define VERSION "1.0" #define AUTHOR "xmox" native natyw_menukont(id); // na gorze kodu dodajemy stworzony przez nas natyw new komendy; public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_clcmd("say /komendy", "nowemenu"); komendy = menu_create("lista komend","nowemenuhandle"); menu_additem(komendy,"Zaloguj sie ");//item = 0 menu_additem(komendy,"Sklep ");//item = 1 menu_additem(komendy,"Sklep SmS");//item = 2 menu_additem(komendy,"Przekaz guziki ");//item = 3 menu_additem(komendy,"Widok z trzeciej osoby ");//item = 4 menu_additem(komendy,"Widok z pierwszej osoby ");//item = 5 menu_additem(komendy,"Wycisz gracza ");//item = 6 menu_additem(komendy,"Menu rang ");//item = 7 menu_additem(komendy,"Info o VIP ");//item = 8 menu_additem(komendy,"wyłącz HUD");//item = 9 menu_setprop(komendy, MPROP_EXITNAME, "Wyjscie"); } public nowemenu(id){ menu_display(id, komendy); return PLUGIN_HANDLED; } public nowemenuhandle(id, menu, item){ if(item == MENU_EXIT) { return PLUGIN_HANDLED; } switch(item) { case 0:{ natyw_menukont(id); // tu go uzywamy omijajac w ten sposob csx guarda } case 1:{ client_cmd(id, "say /sklep"); } case 2:{ client_cmd(id, "say /sklepsms"); } case 3:{ client_cmd(id, "say /daj"); } case 4:{ client_cmd(id, "say /thirdperson"); } case 5:{ client_cmd(id, "say /firstperson"); } case 6:{ client_cmd(id, "say /mute"); } case 7:{ client_cmd(id, "say /rangmenu"); } case 8:{ client_cmd(id, "say /vip"); } case 9:{ client_cmd(id, "say /hud"); } } return PLUGIN_HANDLED; }
#772157 Non steam nie może użyć komendy
Napisane przez Anonymuss
w 30.06.2021 12:44
Jeny ile z tym zabawy to już chyba wolę by to się wyświetlał w modt. Chyba że się da zrobić plugin ktory po wejściu na server wymusi to graczom. Bo kurcze i tak nikt raczej z tego nie będzie korzystać.
Nie można wymusić na graczu wyłączenia CSX Guarda a modyfikowanie plików graczom jest zabronione. Jest pewna opcja z ReChecker (jeśli masz ReHLDS na serwerze), który by wykrywał ten skrypt i kickował dopóki NS go nie usunie ale wtedy podejrzewam, że prawie nikt by u Ciebie nie grał.
#640597 [ROZWIĄZANE] Respawn Zombie 3 razy
Napisane przez VertekS
w 28.05.2014 13:53
Dodatkowo na początku rundy / przy wyjściu gracza resetuj wszystkie komórki tablicy.
W plugin_init dodajesz obsługę eventu nowej rundy:
register_event("HLTV", "newRound", "a", "1=0", "2=0")
Na początku rundy ustawiasz wszystkim graczom ilość respawnów na 3:
public newRound(id){ g_respawn3times[id] = 3 }
To samo, co przy evencie HLTV, robisz przy wyjściu gracza z serwera:
public client_disconnect(id){ g_respawn3times[id] = 3 }
Można też dodać resetowanie możliwych respawnów przy wzięciu antidotum (w ZP 4.3 funkcja zp_user_humanized_post).
EDIT: Pomysł Vasto_Lorde jest bardziej przejrzysty dla człowieka. Odejmowanie licznika i sprawdzanie, czy jest większy niż zero, to lepsze rozwiązanie.
#639672 [ROZWIĄZANE] Respawn Zombie 3 razy
Napisane przez VertekS
w 21.05.2014 15:11
Linia 2271:
if (get_pcvar_num(cvar_deathmatch) == 2 || (get_pcvar_num(cvar_deathmatch) == 3 && random_num(0, 1)) || (get_pcvar_num(cvar_deathmatch) == 4 && fnGetZombies() < fnGetAlive()/2))
Utwórz globalną tablicę 33 - elementową (np. moznaRespic[33]), dodaj warunek w linii 2271, bądź w jej pobliżu, że jeżeli moznaRespic[id] jest mniejsze niż 3, to respisz gracza i powiększ moznaRespic[id] o 1. Dodatkowo na początku rundy / przy wyjściu gracza resetuj wszystkie komórki tablicy.
#636247 Usunięcie nie potrzebnych klas, zostawienie tylko jednej
Napisane przez VertekS
w 03.05.2014 08:07
Nie lepiej było poszukać tej jednej, konkretnej klasy osobno? Wiem, że hunter jest osobnym pluginem. Co do edycji kodu, to nie gwarantuję, że działa:
#include <amxmodx> #include <engine> #include <fakemeta> #include <hamsandwich> #include <dhudmessage> #include <cstrike> #include <fun> #include <xs> #include <zombieplague> /*============================================================================================*/ new const zclass_name[] = "Hunter Zombie" new const zclass_info[] = "[ Sprint ]" new const zclass_model[] = "sc_hunter" new const zclass_clawmodel[] = "v_claws_hunter.mdl" const zclass_health = 3100 const zclass_speed = 235 const Float:zclass_gravity = 0.79 const Float:zclass_knockback = 0.43 /*============================================================================================*/ // Scream ring color R G B const Float:fastrun_time = 2.5 const Float:fastrun_timewait = 15.0 const Float:fastrun_speed = 1000.0 const fastrun_fov = 110 const glow_red = 255 const glow_green = 0 const glow_blue = 0 new const sound_fastrun_start[] = "blackcat_sc/hunter/ability.wav" new const sound_fastrun_heartbeat[][] = { "blackcat_sc/hunter/ability_idle.wav" } new const sound_fastrun_end[][] = { "blackcat_sc/nemesis/idle.wav" } #define MAXPLAYERS 33 // Variables new g_cooldown[33] // Arrays new g_iPlayerTaskTimes[33] // Some constants const FFADE_IN = 0x0000 const GIB_NEVER = 0 const UNIT_SECOND = (1<<12) const TASK_SCREAM = 37729 const TASK_SCREAMDMG = 48289 const NADE_TYPE_JUMP = 6666 const NADE_TYPE_CONC = 7777 // Plug info. #define PLUG_VERSION "0.2" #define PLUG_AUTH "meTaLiCroSS" // Macros #define zp_get_grenade_type(%1) (entity_get_int(%1, EV_INT_flTimeStepSound)) #define is_user_valid_alive(%1) (1 <= %1 <= g_maxplayers && is_user_alive(%1)) #define is_user_valid_connected(%1) (1 <= %1 <= g_maxplayers && is_user_alive(%1)) new zclassid_hunter new g_fastrun[33] new g_msgSetFOV // Hack to be able to use Ham_Player_ResetMaxSpeed (by joaquimandrade) new Ham:Ham_Player_ResetMaxSpeed = Ham_Item_PreFrame enum (+= 100) { TASK_FASTRUN = 2000, TASK_FASTRUN_HEARTBEAT, TASK_COOLDOWN } #define ID_FASTRUN (taskid - TASK_FASTRUN) #define ID_FASTRUN_HEARTBEAT (taskid - TASK_FASTRUN_HEARTBEAT) #define ID_COOLDOWN (taskid - TASK_COOLDOWN) new h_playername[33][32] const FFADE_IN = 0x0000 const FFADE_STAYOUT = 0x0004 const UNIT_SECOND = (1<<12) #define DAMAGE 2.0 const Max_Traps = 6 const OFFSET_flNextPrimaryAttack = 46 const OFFSET_flNextSecondaryAttack = 47 const OFFSET_flTimeWeaponIdle = 48 const OFFSET_LINUX_WEAPONS = 4 new g_maxplayers new g_msgBarTime new const sound_sleep[] = "blackcat_sc/big/ability.wav" public plugin_init() { register_forward(FM_CmdStart, "fw_CmdStart") register_forward(FM_StartFrame, "fw_StartFrame") register_forward(FM_PlayerPreThink, "fw_PlayerPreThink") register_forward(FM_Touch, "fw_Touch") register_forward(FM_Think, "fw_Think") register_message(get_user_msgid("DeathMsg"), "message_DeathMsg") RegisterHam(Ham_TakeDamage, "player", "ham_takedamage") RegisterHam(Ham_TakeDamage, "func_breakable", "ham_takedamage") RegisterHam(Ham_Killed, "player", "fw_PlayerKilled") RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1) g_msgBarTime = get_user_msgid("BarTime") g_msgSetFOV = get_user_msgid("SetFOV") g_maxplayers = get_maxplayers() register_clcmd("drop", "use_ability_one") register_impulse(100, "cmd_fastrun") register_dictionary("hunter_zombie.txt") register_dictionary("zombie_plague.txt") } public plugin_precache() { precache_sound(sound_sleep) new i for(i = 0; i < sizeof sound_fastrun_heartbeat; i++ ) precache_sound(sound_fastrun_heartbeat[i]); for(i = 0; i < sizeof sound_fastrun_end; i++ ) precache_sound(sound_fastrun_end[i]); precache_sound(sound_fastrun_start) zclassid_hunter = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback) } public zp_user_infected_post(id, infector, nema) { if(zp_get_user_zombie_class(id) == zclassid_hunter) { g_fastrun[id] = 0 print(id, "^x04[ZP]^x01 %L", id, "HUNTER_ABILITY_INFO") } g_cooldown[id] = 0 } /* //////////////////////////////////////////// */ public zp_user_humanized_post(id) { g_fastrun[id] = 0 if(g_fastrun[id]) { message_begin(MSG_ONE, g_msgSetFOV, {0,0,0}, id) write_byte(90) message_end() } g_iPlayerTaskTimes[id] = 0 } public zp_round_ended(winteam) { // Make a loop static id for(id = 1; id <= g_maxplayers; id++) { // Valid connected if(is_user_connected(id)) { // Remove mainly tasks remove_task(id+TASK_COOLDOWN) } } } public client_disconnect(id) { remove_task(id+TASK_FASTRUN) remove_task(id+TASK_FASTRUN_HEARTBEAT) remove_task(id+TASK_COOLDOWN) } stock fm_set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16) { new Float:RenderColor[3]; RenderColor[0] = float(r); RenderColor[1] = float(g); RenderColor[2] = float(b); set_pev(entity, pev_renderfx, fx); set_pev(entity, pev_rendercolor, RenderColor); set_pev(entity, pev_rendermode, render); set_pev(entity, pev_renderamt, float(amount)); return 1; } stock fm_find_ent_by_class(index, const classname[]) { return engfunc(EngFunc_FindEntityByString, index, "classname", classname) } stock PlaySound(id, const sound[]) { if (equal(sound[strlen(sound)-4], ".mp3")) client_cmd(id, "mp3 play ^"sound/%s^"", sound) else client_cmd(id, "spk ^"%s^"", sound) } stock user_screen_shake(id, amplitude = 4, duration = 2, frequency = 10) { message_begin(MSG_ONE_UNRELIABLE, g_msgScreenShake, _, id) write_short((1<<12)*amplitude) write_short((1<<12)*duration) write_short((1<<12)*frequency) message_end() } stock show_user_taskbar(id, time) { message_begin(MSG_ONE_UNRELIABLE, g_msgBarTime, _, id) write_short(time) message_end() } stock show_user_sprite(id, const sprite_index) { message_begin(MSG_ALL, SVC_TEMPENTITY) write_byte(TE_PLAYERATTACHMENT) write_byte(id) write_coord(45) write_short(sprite_index) write_short(32767) message_end() } stock clear_user_sprite(id) { message_begin(MSG_ALL, SVC_TEMPENTITY) write_byte(TE_KILLPLAYERATTACHMENTS) write_byte(id) message_end() } stock bool:fm_is_point_visible(index, const Float:point[3], ignoremonsters = 1) { new Float:start[3], Float:dest[3]; pev(index, pev_origin, start); pev(index, pev_view_ofs, dest); xs_vec_add(start, dest, start); engfunc(EngFunc_TraceLine, start, point, ignoremonsters, index, 0); new Float:fraction; get_tr2(0, TR_flFraction, fraction); if (fraction == 1.0) return true; get_tr2(0, TR_vecEndPos, dest); if ((dest[0] == point[0]) && (dest[1] == point[1]) && (dest[2] == point[2])) return true; return false; } stock create_user_sprite(id, const Float:originF[3], sprite_index, scale) { message_begin(MSG_ONE, SVC_TEMPENTITY, _, id) write_byte(TE_SPRITE) engfunc(EngFunc_WriteCoord, originF[0]) engfunc(EngFunc_WriteCoord, originF[1]) engfunc(EngFunc_WriteCoord, originF[2]) write_short(sprite_index) write_byte(scale) write_byte(200) message_end() } stock fm_find_ent_by_owner(entity, const classname[], owner) { while ((entity = engfunc(EngFunc_FindEntityByString, entity, "classname", classname)) && (pev(entity, pev_owner) != owner)) {} return entity; } stock Float:get_weapon_next_pri_attack(entity) { return get_pdata_float(entity, OFFSET_flNextPrimaryAttack, OFFSET_LINUX_WEAPONS) } stock set_weapon_next_pri_attack(entity, Float:time) { set_pdata_float(entity, OFFSET_flNextPrimaryAttack, time, OFFSET_LINUX_WEAPONS) } stock Float:get_weapon_next_sec_attack(entity) { return get_pdata_float(entity, OFFSET_flNextSecondaryAttack, OFFSET_LINUX_WEAPONS) } stock set_weapon_next_sec_attack(entity, Float:time) { set_pdata_float(entity, OFFSET_flNextSecondaryAttack, time, OFFSET_LINUX_WEAPONS) } stock Float:get_weapon_idle_time(entity) { return get_pdata_float(entity, OFFSET_flTimeWeaponIdle, OFFSET_LINUX_WEAPONS) } stock set_weapon_idle_time(entity, Float:time) { set_pdata_float(entity, OFFSET_flTimeWeaponIdle, time, OFFSET_LINUX_WEAPONS) } stock ChatColor(const id, const input[], any:...) { new count = 1, players[32] static msg[191] vformat(msg, 190, input, 3) replace_all(msg, 190, "!g", "^4") replace_all(msg, 190, "!y", "^1") replace_all(msg, 190, "!t", "^3") if (id) players[0] = id; else get_players(players, count, "ch") { for (new i = 0; i < count; i++) { if (is_user_connected(players[i])) { message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]); write_byte(players[i]); write_string(msg); message_end(); } } } } public client_putinserver(id) { get_user_name(id, h_playername[id], charsmax(h_playername[])) } public cmd_fastrun(id) { if (!is_user_connected(id) || !is_user_alive(id) || !zp_get_user_zombie(id) || zp_get_user_nemesis(id) || zp_get_user_zombie_class(id) != zclassid_hunter) return PLUGIN_CONTINUE if(g_fastrun[id] || g_cooldown[id]) return PLUGIN_CONTINUE g_fastrun[id] = 1 set_pev(id, pev_maxspeed, fastrun_speed) set_task(fastrun_time, "sprint_remove", id+TASK_FASTRUN) set_task(2.0, "sprint_sound", id+TASK_FASTRUN_HEARTBEAT, _, _, "b") set_user_rendering(id, kRenderFxGlowShell, glow_red, glow_green, glow_blue, kRenderNormal, 0) // Glow Effect message_begin(MSG_ONE, g_msgSetFOV, {0,0,0}, id) write_byte(fastrun_fov) message_end() // FOV Effect message_begin(MSG_ONE,get_user_msgid("ScreenFade"), _, id) write_short(7007) write_short(7007) write_short(0x0000) write_byte(255) write_byte(0) write_byte(0) write_byte(125) message_end() // Red Screen message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("ScreenShake"), _, id) write_short((1<<12)*6) // amplitude write_short((1<<12)*6) // duration write_short((1<<12)*10) // frequency message_end() // Shake Screen emit_sound(id, CHAN_VOICE, sound_fastrun_start, 1.0, ATTN_NORM, 0, PITCH_NORM) // Sound Sprint return PLUGIN_HANDLED } public sprint_remove(taskid) { if(!zp_get_user_zombie(ID_FASTRUN) || zp_get_user_zombie_class(ID_FASTRUN) != zclassid_hunter || zp_get_user_nemesis(ID_FASTRUN)) { remove_task(ID_FASTRUN+TASK_FASTRUN) return } g_fastrun[ID_FASTRUN] = 0 ExecuteHamB(Ham_Player_ResetMaxSpeed, ID_FASTRUN) set_user_rendering(ID_FASTRUN) message_begin(MSG_ONE, g_msgSetFOV, {0,0,0}, ID_FASTRUN) write_byte(90) message_end() g_cooldown[ID_FASTRUN] = floatround(fastrun_timewait) set_task(1.0, "ShowHUD", ID_FASTRUN+TASK_COOLDOWN, _, _, "b") } public sprint_sound(taskid) { if(!zp_get_user_zombie(ID_FASTRUN_HEARTBEAT) || zp_get_user_zombie_class(ID_FASTRUN_HEARTBEAT) != zclassid_hunter || zp_get_user_nemesis(ID_FASTRUN_HEARTBEAT)) { remove_task(ID_FASTRUN_HEARTBEAT+TASK_FASTRUN_HEARTBEAT) return; } if (g_fastrun[ID_FASTRUN_HEARTBEAT]) emit_sound(ID_FASTRUN_HEARTBEAT, CHAN_VOICE, sound_fastrun_heartbeat[random_num(0, sizeof sound_fastrun_heartbeat - 1)], 1.0, ATTN_NORM, 0, PITCH_NORM) else { emit_sound(ID_FASTRUN_HEARTBEAT, CHAN_VOICE, sound_fastrun_end[random_num(0, sizeof sound_fastrun_end - 1)], 1.0, ATTN_NORM, 0, PITCH_NORM) remove_task(ID_FASTRUN_HEARTBEAT+TASK_FASTRUN_HEARTBEAT) } } public zp_user_unfrozen(id) { if(!zp_get_user_zombie(id) || zp_get_user_zombie_class(id) != zclassid_hunter || !g_fastrun[id] || zp_get_user_nemesis(id)) return set_user_rendering(id, kRenderFxGlowShell, glow_red, glow_green, glow_blue, kRenderNormal, 0) } public ShowHUD(taskid){ new id = ID_COOLDOWN g_cooldown[id]-- if(!is_user_alive(id) || !zp_get_user_zombie(id) || zp_get_user_nemesis(id)) { remove_task(id+TASK_COOLDOWN) return } if(!g_cooldown[id]) { if(zp_get_user_zombie_class(id) == zclassid_hunter) { print(id, "^x04[ZP]^x01 %L", id, "HUNTER_ABILITY_READY") } remove_task(id+TASK_COOLDOWN) return } set_dhudmessage(200, 200, 0, -1.0, 0.86, 0, 1.0, 1.1, 0.0, 0.0, false) show_dhudmessage(id, "%L", id, "ABILITY_COOLDOWN", g_cooldown[id]) } stock print(const id, const input[], any:...) { new iCount = 1, iPlayers[32] static szMsg[191] vformat(szMsg, charsmax(szMsg), input, 3) replace_all(szMsg, 190, "!g", "^4") // green txt replace_all(szMsg, 190, "!y", "^1") // orange txt replace_all(szMsg, 190, "!t", "^3") replace_all(szMsg, 190, "^x04", "^4") // green txt replace_all(szMsg, 190, "^x01", "^1") // orange txt replace_all(szMsg, 190, "^x03", "^3") // team txt replace_all(szMsg, 190, "^x00", "^0") // team txt if(id) iPlayers[0] = id else get_players(iPlayers, iCount, "ch") for (new i = 0; i < iCount; i++) { if (is_user_connected(iPlayers[i])) { message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayers[i]) write_byte(iPlayers[i]) write_string(szMsg) message_end() } } }
Załączone pliki
-
zp_zclasses40.sma 13,01 KB 27 Ilość pobrań
zp_zclasses40.amxx
#630927 Limit Ammo Packs VIP
Napisane przez Drago36
w 08.04.2014 15:23
Spróbuj tak:
#define AMMOPACK_LIMIT 500 #define VIP_AMMOPACK_LIMIT 1000 ... SaveAmmo(id) { if(!flag_get(g_LoadSuccess,id)) { server_print("[AutoSaveAmmoPack] User [%i] failed to save AP because it not loaded yet!", id) return } g_ammo[id] = zp_get_user_ammo_packs(id) if(get_user_flags(id) & ADMIN_LEVEL_H) { if(g_ammo[id] >= VIP_AMMOPACK_LIMIT) { g_ammo[id] = VIP_AMMOPACK_LIMIT } } else if(g_ammo[id] >= AMMOPACK_LIMIT) { g_ammo[id] = AMMOPACK_LIMIT } new data[16] num_to_str(g_ammo[id], data, 15) fvault_set_data(g_vault_name, g_authid[id], data) }
#628810 [ROZWIĄZANE] T-Virus blokada na innych modach
Napisane przez sNH.
w 28.03.2014 20:33
Daj warunek sprawdzający:
w set_zombie
{
if(!(tyb || kolejnytryb || itryb))
{
//wiadomość np nie możesz teraz tego kupić
}
else
{
get_user_name(id, name, 31)server_cmd("amx_show_activity 0")server_cmd("zp_zombie %s", name)server_cmd("amx_show_activity 2")}

#628849 [ROZWIĄZANE] T-Virus blokada na innych modach
Napisane przez Drago36
w 28.03.2014 23:00
Daj warunek sprawdzający:
w set_zombie
Spoiler{
if(!(tyb || kolejnytryb || itryb))
{
//wiadomość np nie możesz teraz tego kupić
}
else
{
get_user_name(id, name, 31)server_cmd("amx_show_activity 0")server_cmd("zp_zombie %s", name)server_cmd("amx_show_activity 2")}//Kod pisany ręcznie GwynCoś takiego, dawno się nie bawiłem więc daję wskazówki. Odnośnie sprawdzania trybów pewnie masz w bibliotekachTak jak sharku napisał w notatce. Jeżeli chodzi o || -> i, jeżeli ma być tylko i wyłącznie dla wszystkich tych trybów to daj &&
Nie może dać w set_zombie, ponieważ gracz który kupi extra item podczas swarmu, zostaną mu pożarte ammo packi, a czynność się nie wykona.
Należy wykonać w publiku zp_extra_item_selected po warunku if (itemid == g_virus).
Więc zamiast:
public zp_extra_item_selected(id, itemid) { if (itemid == g_virus) { get_user_name(id, name, 31) set_hudmessage(0, 255, 0, -0.05, -0.45, 1, 0.0, 5.0, 1.0, 1.0, -1) show_hudmessage(0, "%s has infected himself with the T-Virus!", name) set_task(5.0, "set_zombie", id) } }
Daj:
public zp_extra_item_selected(id, itemid) { if (itemid == g_virus) { if(zp_is_swarm_round() || zp_is_plague_round() || zp_is_nemesis_round()) { client_print(id, print_chat, "Nie mozesz tego kupic, na tym trybie!!"); return ZP_PLUGIN_HANDLED; } get_user_name(id, name, 31) set_hudmessage(0, 255, 0, -0.05, -0.45, 1, 0.0, 5.0, 1.0, 1.0, -1) show_hudmessage(0, "%s has infected himself with the T-Virus!", name) set_task(5.0, "set_zombie", id) } }
#617253 de_rats_lata90 by pomen
Napisane przez pomen
w 17.02.2014 11:49
Cześć ostatnio zrobiłem sobie mapkę rats jest w stylu lat 90 i posiada sporo sekretów.
Zresztą popatrzcie sobie na screeeny, bo pewnie ściągać wam się nie będzie chciało.
overview:
Jeśli ktoś potrzebowałby pomocy w mappowaniu albo ma dla mnie jakieś "zlecenie" chętnie wysłucham go na pw
Załączone pliki
-
de_rats_lata90.rar 2,48 MB 304 Ilość pobrań
#586279 Pisanie na zielono
Napisane przez GeDox
w 17.11.2013 18:41
#575792 Admin chat (u@) - różne kolory
Napisane przez szelbi
w 06.10.2013 13:03

Download

Screenshot

Download

Screenshot

Download

Screenshot

Download

Screenshot

Download

FAQ
Aby to zrobić, wystarczy wejść w SMA pluginu, zakomentować 39. linijkę tak jak poniżej, przekompilować ponownie plugin i wrzucić na serwer

//#define SOUND 1
Inne informacje
Chcecie jakieś inne kolory u@? Piszcie poniżej, a z pewnością je dodam.
#580633 [ROZWIĄZANE] Autozapis limit AP VIP
Napisane przez sNH.
w 27.10.2013 10:13
Nie wiem czy takie coś "pyknie", bo dawno nie bazgrałem w kodzie, ale sprawdź. Ew zrobię poprawkę
#include <amxmodx>#include <fakemeta>#include <zombieplague>#include <nvault>#define PLUGIN "[ZP] Can Auto Save Ammo"#define VERSION "0.1.0"#define AUTHOR "HsK"new g_save, g_ammo[33], g_ammo_can_save[33]new cvar_save_in#define MAX_SAVE 500 // max przechowywanych ammo paczek#define MAX_SAVE_VIP 1000 // max przechowywanych ammo paczek dla vipapublic plugin_init(){register_plugin(PLUGIN, VERSION, AUTHOR)register_event("DeathMsg","event_deathmsg","a")register_forward(FM_PlayerPreThink, "fw_PlayerPreThink")cvar_save_in = register_cvar("zp_ammo_save_in", "0") // 0 = nick / 1 = ip / 2 = steam idg_save = nvault_open("g_ammo_save")}// Save Ammopublic zp_user_infected_post(id, infector){if (g_ammo_can_save[infector])Save_Ammo_date(infector)if (g_ammo_can_save[id])Save_Ammo_date(id)}public zp_extra_item_selected(id, itemid){if (g_ammo_can_save[id])Save_Ammo_date(id)}public event_deathmsg(){new killer = read_data(1)new victim = read_data(2)if (!killer && !victim)return PLUGIN_CONTINUE;if (g_ammo_can_save[killer])Save_Ammo_date(killer)if (g_ammo_can_save[victim])Save_Ammo_date(victim)return PLUGIN_CONTINUE;}public fw_PlayerPreThink(id){if (g_ammo_can_save[id]){new ammo_packs = zp_get_user_ammo_packs(id)g_ammo[id] = ammo_packs}return FMRES_IGNORED;}public client_disconnect(id){if(g_ammo_can_save[id])Save_Ammo_date(id)}public client_putinserver(id)set_task(2.0, "now_can_save", id)public now_can_save(id){Load_Ammo_date(id)set_task(0.5, "can_save_true", id)}public can_save_true(id)g_ammo_can_save[id] = truepublic Save_Ammo_date(id){new vaultkey[64], vaultdata[256]switch (get_pcvar_num(cvar_save_in)){case 0:{new name[33];get_user_name(id,name,32)format(vaultkey, 63, "%s-/", name)}case 1:{new player_ip[33]get_user_ip(id, player_ip, 32);format(vaultkey, 63, "%s-/", player_ip)}case 2:{new AuthID[33];get_user_authid(id, AuthID, 32);formatex(vaultkey, 64, "%s-/", AuthID);}}format(vaultdata, 255, "%i#", g_ammo[id])nvault_set(g_save, vaultkey, vaultdata)return PLUGIN_CONTINUE;}public Load_Ammo_date(id){new vaultkey[64], vaultdata[256]switch (get_pcvar_num(cvar_save_in)){case 0:{new name[33];get_user_name(id,name,32)format(vaultkey, 63, "%s-/", name)}case 1:{new player_ip[33]get_user_ip(id, player_ip, 32);format(vaultkey, 63, "%s-/", player_ip)}case 2:{new AuthID[33];get_user_authid(id, AuthID, 32);formatex(vaultkey, 64, "%s-/", AuthID);}}format(vaultdata, 255, "%i#", g_ammo[id])nvault_get(g_save, vaultkey, vaultdata, 255)replace_all(vaultdata, 255, "#", " ")new playammo[32]parse(vaultdata, playammo, 31)g_ammo[id] = str_to_num(playammo)if(get_user_flags(id) & ADMIN_LEVEL_H){set_ammo_vip(id)}else{set_ammo(id)}return PLUGIN_CONTINUE;}public set_ammo(id){if (g_ammo[id] > MAX_SAVE){zp_set_user_ammo_packs(id, MAX_SAVE)g_ammo[id] = MAX_SAVE}elsezp_set_user_ammo_packs(id, g_ammo[id])client_print(id, print_chat, "Twoje Ammo Paczki : %d ", g_ammo[id])}public set_ammo_vip(id){if(get_user_flags(id) & ADMIN_LEVEL_H){if (g_ammo[id] > MAX_SAVE_VIP){zp_set_user_ammo_packs(id, MAX_SAVE_VIP)g_ammo[id] = MAX_SAVE_VIP}elsezp_set_user_ammo_packs(id, g_ammo[id])client_print(id, print_chat, "Twoje Ammo Paczki : %d ", g_ammo[id])}}
#490106 High Ping Kicker dla (Gm)AMXBans [Brak spamu]
Napisane przez
Gość
w 14.12.2012 03:19
Plugin banuje graczy z wysokim pingiem poprzez (Gm)AmxBans.

hpk_max_ping 120 // maksymalny dozwolony ping
hpk_check_times 6 // maksymalna liczba sprawdzeń podczas których można mieć ping większy niż dozwolony
hpk_check_delay 5.0 // interwał sprawdzania wartości pingu u graczy
hpk_ban_time 5 // czas (w minutach) na ile gracz będzie banowany za zbyt wysoki ping
hpk_immunitet_flags "a" // flagi immunitetu, osoby z tymi flagami nie będą sprawdzane

amxmodx
Działający (Gm)AmxBans z racji banowania poprzez niego.
Plugin działa zarówno na Steamie, S/NS, jak i na Non-Steamie.

Plugin co określony interwał (hpk_check_delay) sprawdza pingi graczy bez immunitetu (hpk_immunitet_flags).
Jeśli dany gracz ma zbyt wysoki ping (ponad hpk_max_ping) ponad określoną liczbę wystąpień (hpk_check_times) z rzędu,
to zostaje zbanowany poprzez (Gm)AmxBans na określoną liczbę minut (hpk_ban_time).

Czas bana winien być liczbą naturalną, najlepiej dodatnią.
hpk_ban_time ustawiony na zero da bana permanentnego.
Powód bana można edytować poprzez zmianę tekstu z linijki zawierającej
Zbyt wysoki ping. Limit: %dms
zamieniając powód bana na inny, przy czym %d będzie zamienione na liczbę minut w postaci liczby.
Uwaga, by przypadkiem nie usunąć daszka ani cudzysłowów (tak, mają być dwa na końcu).
Plugin ma zastosowanie tylko dla serwerów, które korzystają z (Gm)Amxbans i banują za ping min. na minutę.
HPK nie spamuje, jak pozostałe jego wersje. Plusem jest także możliwość konfiguracji maksymalnego pingu cvarem.



Stara wersja:


- AMXX.pl: Support AMX Mod X i SourceMod
- → Przeglądanie profilu: Reputacja: Shaxu
- Regulamin