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 572
- 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 32 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 316 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
adminchat_1.rar 5,51 KB 3042 Ilość pobrańScreenshot

Download
adminchat_2.rar 5,5 KB 2473 Ilość pobrańScreenshot

Download
adminchat_3.rar 5,49 KB 459 Ilość pobrańScreenshot

Download
adminchat_4.rar 5,5 KB 1591 Ilość pobrańScreenshot

Download
adminchat_5.rar 5,5 KB 890 Ilość pobrań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.

hpk.sma 1,4 KB 1802 Ilość pobrań
hpk.amxx
Stara wersja:
hpk.sma 1,35 KB 520 Ilość pobrań
hpk.amxx
- AMXX.pl: Support AMX Mod X i SourceMod
- → Przeglądanie profilu: Reputacja: Shaxu
- Regulamin


Dodatki SourceMod



Moja zawartość

