Dobry sposób na blokadę ataku
d0naciak
22.08.2013
Witam.
Niżej macie kod przy którym łatwo zatrzymać atak a także dodać od siebie parę bajerów typu rakiety itp. (na razie jest dodana tylko animacja dla glock'a, taki ala "fejk szot")
Do rzeczy, niżej macie kod, blokuje on pierwszorzędny atak, tzn. że nie zablokuje "prawego" ataku z noża, ale to dodam wkrótce
Brawa dla G[o]Q za wykrycie można powiedzieć buga, po którym kod (wg. mnie) musiał wyglądać inaczej.
#include <amxmodx> #include <fakemeta> #include <hamsandwich> new const g_iBlockedWeaponId = CSW_GLOCK18; //Id broni do zablokowania new const g_szBlockedWeaponName[] = "weapon_glock18"; //Nazwa broni do zablokowania new const Float:g_fAttackTime = 1.1; //Czas ataku (tzn. po ilu sekundach od zaatakowania, mozna atakowac znowu :)) new Float:g_fTimeToNextPlayerAttack[33]; public plugin_init() { register_plugin("Fejk szot", "0.1", "d0naciak"); register_forward(FM_CmdStart, "fw_CmdStart_Post", 1); RegisterHam(Ham_Item_Deploy, g_szBlockedWeaponName, "fw_ItemDeploy_Post", 1); } public fw_CmdStart_Post(id, iUc) { if(!is_user_alive(id)) return FMRES_IGNORED; if(get_user_weapon(id) != g_iBlockedWeaponId) return FMRES_IGNORED; static iButtons, iOldButtons; iButtons = get_uc(iUc, UC_Buttons); iOldButtons = pev(id, pev_oldbuttons); if(iButtons & IN_ATTACK && !(iOldButtons & IN_ATTACK)) { if(get_gametime() < g_fTimeToNextPlayerAttack[id]) return FMRES_IGNORED; //Co sie ma zdarzyc po ataku? client_print(id, print_center, "ATAK!") //Tutaj atakujacy dostanie wiadomosc: ATAK! g_fTimeToNextPlayerAttack[id] = get_gametime() + g_fAttackTime; } return FMRES_IGNORED; } public fw_ItemDeploy_Post(iEnt) set_pdata_float(iEnt, 46, 999.0, 4);
Użytkownik d0naciak edytował ten post 03.10.2013 20:00
K!113r
22.08.2013

Jednak mój mod wcale nie będzie taki mój tylko wasz (wasz w sensie grona osób udostępniająca jakieś kody z których korzystam lub wzoruje się na nich. Samo kopiuj wklej, a przynależe do ST, więc muszę więcej sam pisać

d0naciak
22.08.2013
Dwa razy masz Blokuje atak PPM:
Napisz które jest które bo nie wiadomo ;]
Poprawiono
dasiek
23.08.2013
zawsze używałem a się nie podzieliłem
Co za lisek chytrusek.
mam rozumieć że żeby zablokować dla kilku broni to muszę kilka razy walnać register ham (np w pętli)?
sebul
23.08.2013
register_forward(FM_CmdStart, "FW_CmdStart");
register_forward(FM_UpdateClientData, "FW_UpdateClientData", 1);
(...)
public FW_CmdStart(id, uc_handle, randseed) {
static buttons; buttons = get_uc(uc_handle, UC_Buttons);
if(buttons & IN_ATTACK) {
set_uc(uc_handle, UC_Buttons, buttons & ~IN_ATTACK);
return FMRES_HANDLED;
}
return FMRES_IGNORED;
}
public FW_UpdateClientData(id, sendweapons, cd_handle) {
set_cd(cd_handle, CD_flNextAttack, get_gametime() + 0.001);
return FMRES_HANDLED;
}
tylko teraz się zastanawiam, że może jednak lepiej by było dać drugą funkcję jako pre, ale nie testowałem tego.
d0naciak
23.08.2013
(a nawet jest) lepszy
i zle opisany
Eh, zignorowałem twój poprzedni post, myślałem że się nie mylę
Poprawiono
Ogen Dogen
23.08.2013
+
A co jeśli chce wszystkie zablokować ? Można to jakoś w miarę w jednym kawałku zrobić ?
Czy muszę osobno każdą ?
Misiaczek ;c
25.08.2013
+
A co jeśli chce wszystkie zablokować ?
Można to jakoś w miarę w jednym kawałku zrobić ?
Czy muszę osobno każdą ?
/* Plugin generated by AMXX-Studio */ #include <amxmodx> #include <hamsandwich> #include <fakemeta> #define PLUGIN "New Plug-In" #define VERSION "1.0" #define AUTHOR "MisieQ" stock const gszWeaponsNames[][] = { "weapon_scout", "weapon_mac10", "weapon_aug", "weapon_ump45", "weapon_sg550", "weapon_galil", "weapon_famas", "weapon_awp", "weapon_mp5navy", "weapon_m249", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_sg552", "weapon_ak47", "weapon_p90", "weapon_p228", "weapon_shield", "weapon_hegrenade", "weapon_xm1014", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_usp", "weapon_glock18", "weapon_flashbang", "weapon_deagle" } public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) for( new i = 0; i < 27; i ++ ) { RegisterHam(Ham_Item_Deploy, gszWeaponsNames[i], "fw_ItemDeploy"); RegisterHam(Ham_Weapon_PrimaryAttack, gszWeaponsNames[i], "fw_PrimaryAttack"); RegisterHam(Ham_Weapon_SecondaryAttack, gszWeaponsNames[i], "fw_SecondaryAttack"); } } public fw_PrimaryAttack(iEnt) { set_pdata_float(iEnt, 46, get_gametime() + 0.001, 4); return HAM_SUPERCEDE; } public fw_SecondaryAttack(iEnt) { set_pdata_float(iEnt, 47, get_gametime() + 0.001, 4); return HAM_SUPERCEDE; } public fw_ItemDeploy(iEnt) { set_pdata_float(iEnt, 46, get_gametime() + 0.001, 4); set_pdata_float(iEnt, 47, get_gametime() + 0.001, 4); }
Kod nie testowany, może być błąd
sebul
26.08.2013
A bez tablicy+
A co jeśli chce wszystkie zablokować ?Można to jakoś w miarę w jednym kawałku zrobić ?
Czy muszę osobno każdą ?/* Plugin generated by AMXX-Studio */ #include <amxmodx> #include <hamsandwich> #include <fakemeta> #define PLUGIN "New Plug-In" #define VERSION "1.0" #define AUTHOR "MisieQ" stock const gszWeaponsNames[][] = { "weapon_scout", "weapon_mac10", "weapon_aug", "weapon_ump45", "weapon_sg550", "weapon_galil", "weapon_famas", "weapon_awp", "weapon_mp5navy", "weapon_m249", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_sg552", "weapon_ak47", "weapon_p90", "weapon_p228", "weapon_shield", "weapon_hegrenade", "weapon_xm1014", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_usp", "weapon_glock18", "weapon_flashbang", "weapon_deagle" } public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) for( new i = 0; i < 27; i ++ ) { RegisterHam(Ham_Item_Deploy, gszWeaponsNames[i], "fw_ItemDeploy"); RegisterHam(Ham_Weapon_PrimaryAttack, gszWeaponsNames[i], "fw_PrimaryAttack"); RegisterHam(Ham_Weapon_SecondaryAttack, gszWeaponsNames[i], "fw_SecondaryAttack"); } } public fw_PrimaryAttack(iEnt) { set_pdata_float(iEnt, 46, get_gametime() + 0.001, 4); return HAM_SUPERCEDE; } public fw_SecondaryAttack(iEnt) { set_pdata_float(iEnt, 47, get_gametime() + 0.001, 4); return HAM_SUPERCEDE; } public fw_ItemDeploy(iEnt) { set_pdata_float(iEnt, 46, get_gametime() + 0.001, 4); set_pdata_float(iEnt, 47, get_gametime() + 0.001, 4); }Kod nie testowany, może być błąd
for(new szWeapon[20],i=1; i<=CSW_P90; ++i) {
if(get_weaponname(i, szWeapon, 19)) {
// rejestrowanie
}
}
tylko to zablokuje każdą broń, nawet nóż.
Misiaczek ;c
26.08.2013
A bez tablicy
+
A co jeśli chce wszystkie zablokować ?Można to jakoś w miarę w jednym kawałku zrobić ?
Czy muszę osobno każdą ?/* Plugin generated by AMXX-Studio */ #include <amxmodx> #include <hamsandwich> #include <fakemeta> #define PLUGIN "New Plug-In" #define VERSION "1.0" #define AUTHOR "MisieQ" stock const gszWeaponsNames[][] = { "weapon_scout", "weapon_mac10", "weapon_aug", "weapon_ump45", "weapon_sg550", "weapon_galil", "weapon_famas", "weapon_awp", "weapon_mp5navy", "weapon_m249", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_sg552", "weapon_ak47", "weapon_p90", "weapon_p228", "weapon_shield", "weapon_hegrenade", "weapon_xm1014", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_usp", "weapon_glock18", "weapon_flashbang", "weapon_deagle" } public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) for( new i = 0; i < 27; i ++ ) { RegisterHam(Ham_Item_Deploy, gszWeaponsNames[i], "fw_ItemDeploy"); RegisterHam(Ham_Weapon_PrimaryAttack, gszWeaponsNames[i], "fw_PrimaryAttack"); RegisterHam(Ham_Weapon_SecondaryAttack, gszWeaponsNames[i], "fw_SecondaryAttack"); } } public fw_PrimaryAttack(iEnt) { set_pdata_float(iEnt, 46, get_gametime() + 0.001, 4); return HAM_SUPERCEDE; } public fw_SecondaryAttack(iEnt) { set_pdata_float(iEnt, 47, get_gametime() + 0.001, 4); return HAM_SUPERCEDE; } public fw_ItemDeploy(iEnt) { set_pdata_float(iEnt, 46, get_gametime() + 0.001, 4); set_pdata_float(iEnt, 47, get_gametime() + 0.001, 4); }Kod nie testowany, może być błąd
for(new szWeapon[20],i=1; i<=CSW_P90; ++i) {
if(get_weaponname(i, szWeapon, 19)) {
// rejestrowanie
}
}
tylko to zablokuje każdą broń, nawet nóż.
niby tak, ale gostek pisał że wszystkie
G[o]Q
01.09.2013
z jednej strony to dziala ale dziala az za dobrze bo nie mozna nic wykonać zamiast strzału przynajmniej mi sie nie udalo
no i zauwazylem cos takiego ze jak zmieniam na glocka to dostaje nagle przyspieszenie
d0naciak
02.09.2013
Jeszcze to sprawdzę, akurat dzisiaj testuje klasę do Cod'a z wykorzystaniem tego kodu
G[o]Q
02.09.2013
to jak sprawdzisz to daj znać bo chce wiedziec czy mam uposledzony server czy nie
d0naciak
02.09.2013
Jeszcze popatrzę, ale to raczej zła droga jest :<
Próbowałem nawet najgłupszych sposobów (przykładem jest kod niżej), ale i tak nie chce działać
#include <amxmodx> #include <hamsandwich> #include <fakemeta> new const g_szBlockedWeapon[] = "weapon_glock18"; //w tym przypadku będzie to glock18 public plugin_init() { register_plugin("Block Attack", "0.1", "d0naciak") RegisterHam(Ham_Weapon_PrimaryAttack, g_szBlockedWeapon, "fw_PrimaryAttack_Post", 1); RegisterHam(Ham_Item_Deploy, g_szBlockedWeapon, "fw_ItemDeploy_Post", 1); } public fw_PrimaryAttack_Post(iEnt) { client_print(0, print_chat, "tak to dziala C:"); set_task(0.1, "BlockAttack", iEnt); return HAM_IGNORED; } public fw_ItemDeploy_Post(iEnt) { BlockAttack(iEnt); return HAM_IGNORED; } public BlockAttack(iEnt) set_pdata_float(iEnt, 46, get_gametime() + 0.001, 4);