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.
|
[ROZWIĄZANE] strip_user_weapons // zniszczenie broni trzymanej ?
#1
Napisano 22.04.2012 18:10
Chciałbym zrobić moc, która niszczy broń graczowi, taką jaką ma aktualnie w rękach. Wiem, że 'strip_user_weapons' niszczy wszyscy, wraz z kosą, ale nie mogę odnaleść kodu, który odpowiada za zniszczenie. Dodatkowo czy jest inna możliwość, niż bawienie się w taskach z wybieraniem slotów graczowi i ustawienie niszczenia broni. Od razu mówię, że nie zadowoli mnie client_cmd(id, "drop"), a tym bardziej zablokowanie podnoszenia takiej broni, gdyż jeśli graczowi zniszczy się broń to jest możliwość, że jeśli znajdzie na mapie taką broń i ją podniesie. I jeśli już taka funkcja się nie odnajdzie, to czy muszę zapisywać w zmiennej jakie bronie ma i dawać mu je od razu po użyciu 'strip_user_weapons' ? Nie wiem czy jasno się wyrażam.. Ech, czy jeśli nie ma funkcji, która NISZCZY graczowi broń aktualnie trzymaną w ręcę czy muszę wtedy graczowi wybierać kolejno sloty i zapisywać z każdego slota bronie do zmiennej i po użyciu 'strip_user_weapons' znów mu je dawać oprócz tej, którą trzymał ? Czy można jakoś zapisać do zmiennej wszystkie ID broni jakie posiada bez ingerencji w bawienie się 'slot1,slot2' itd ? Jeśli dalej nie jasno się wyraziłem to proszę o zareagowanie.
Pozdrawiam.
Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !
#2
Napisano 22.04.2012 18:17
stock remove_current_weapon(id) {
new weaponname[32], weaponid = -1;
get_weaponname(get_user_weapon(id), weaponname, 31);
if((weaponid = find_ent_by_owner(weaponid, weaponname, id))) {
engclient_cmd(id, "drop", weaponname);
remove_entity(weaponid);
}
}
Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo
#3
Napisano 22.04.2012 18:23
_func_( id, sWeaponName ) { new iWeapon = -1; while( ( iWeapon = engfunc( EngFunc_FindEntityByString, iWeapon, "classname", sWeaponName ) ) != 0 ) { if( pev( iWeapon, pev_owner ) == id ) { remove_entity( iWeapon ); } } }
Użytkownik emu edytował ten post 22.04.2012 18:24
jeśli masz fejsa i chcesz mi pomóc to wejdź tutaj: Zaproś kumpla by lubił nasz sklep | Facebook
na pewno jakoś C się odwdzięczę!
#4
Napisano 22.04.2012 19:09
Sprawdź coś takiego
stock remove_current_weapon(id) {
new weaponname[32], weaponid = -1;
get_weaponname(get_user_weapon(id), weaponname, 31);
if((weaponid = find_ent_by_owner(weaponid, weaponname, id))) {
engclient_cmd(id, "drop", weaponname);
remove_entity(weaponid);
}
}
Działa, wyrzuca broń, której potem nie mogę podnieść. Aczkolwiek chciałem sobie kupić drugiego glock'a i czy mogę tego 2 wtedy podnieść, aczkolwiek nie zdążyłem. Crash servera po 3 sekundach około po użyciu funkcji, w logach :
L 04/22/2012 - 20:06:13: [AMXX] Run time error 10: native error (native "SQL_ReadResult")
L 04/22/2012 - 20:06:13: [AMXX] [0] db_impressive.sma::Load_xp_handle (line 1680)
L 04/22/2012 - 20:06:44: Start of error session.
L 04/22/2012 - 20:06:44: Info (map "de_dust2") (file "addons/amxmodx/logs/error_20120422.log")
L 04/22/2012 - 20:06:44: [AMXX] Plugin file open error (plugin "god_test.amxx")
L 04/22/2012 - 20:06:45: Function "event_start_freezetime" was not found
L 04/22/2012 - 20:06:45: [AMXX] Displaying debug trace (plugin "db_impressive.amxx")
L 04/22/2012 - 20:06:45: [AMXX] Run time error 19: function not found
L 04/22/2012 - 20:06:45: [AMXX] [0] db_impressive.sma::plugin_init (line 827)
L 04/22/2012 - 20:08:18: [MySQL] Invalid column: -1
L 04/22/2012 - 20:08:18: [AMXX] Displaying debug trace (plugin "db_impressive.amxx")
L 04/22/2012 - 20:08:18: [AMXX] Run time error 10: native error (native "SQL_ReadResult")
L 04/22/2012 - 20:08:18: [AMXX] [0] db_impressive.sma::Load_xp_handle (line 1680)
Nie przejmować się test_god, to zaraz wywalę, a co do MySQL to też nie wiem czemu błąd, e.. ale nic o tym w logach nie ma, po prostu nagle crash i wątpię, że to przez inną część niż Twoja sebul, funkcja dobra, aczkolwiek crash. Jeślibyś to poprawił byłbym bardzo wdzięczny.
może coś takiego?
_func_( id, sWeaponName ) { new iWeapon = -1; while( ( iWeapon = engfunc( EngFunc_FindEntityByString, iWeapon, "classname", sWeaponName ) ) != 0 ) { if( pev( iWeapon, pev_owner ) == id ) { remove_entity( iWeapon ); } } }
Twojego nie testowałem, ale nie wiem jak użyć tego, gdyż jest 2 parametr w publicu, jakaś mini-porada ?
A co do chłopaków wyżej to obydwaj mają po plusie za chęci, wielkie dzięki. Ale proszę o poprawienie, bardzo mi zależy.
Pozdrawiam.
Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !
#5
Napisano 22.04.2012 19:15
stock ham_strip_weapon(id,weapon[]) { if(!equal(weapon,"weapon_",7)) return 0; new wId = get_weaponid(weapon); if(!wId) return 0; new wEnt; while((wEnt = engfunc(EngFunc_FindEntityByString,wEnt,"classname",weapon)) && pev(wEnt,pev_owner) != id) {} if(!wEnt) return 0; if(get_user_weapon(id) == wId) ExecuteHamB(Ham_Weapon_RetireWeapon,wEnt); if(!ExecuteHamB(Ham_RemovePlayerItem,id,wEnt)) return 0; ExecuteHamB(Ham_Item_Kill,wEnt); set_pev(id,pev_weapons,pev(id,pev_weapons) & ~(1<<wId)); return 1; } new weapon_name[31][]={"none","weapon_p228","weapon_shield","weapon_scout", "weapon_hegrenade","weapon_xm1014","weapon_c4","weapon_mac10","weapon_aug", "weapon_smokegrenade","weapon_elite","weapon_fiveseven","weapon_ump45", "weapon_sg550","weapon_galil","weapon_famas","weapon_usp","weapon_glock18", "weapon_awp","weapon_mp5navy","weapon_m249","weapon_m3","weapon_m4a1", "weapon_tmp","weapon_g3sg1","weapon_flashbang","weapon_deagle","weapon_sg552", "weapon_ak47","weapon_knife","weapon_p90"}//bronie ktore maja byc usuniete public usun_bron(id) { new weapons[32], num get_user_weapons(i, weapons, num) new weapon; for( new n = 0; n < num; n++ ) { weapon = weapons[n] if( weapon!=CSW_C4) ham_strip_weapon(i,weapon_name[weapon]) } }
#6
Napisano 22.04.2012 19:20
class_weapons[player_class[i]] & weapon) &&
??
Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !
#7
Napisano 22.04.2012 19:21
ps.
L 04/22/2012 - 20:06:13: [AMXX] Run time error 10: native error (native "SQL_ReadResult") L 04/22/2012 - 20:06:13: [AMXX] [0] db_impressive.sma::Load_xp_handle (line 1680) L 04/22/2012 - 20:06:44: Start of error session. L 04/22/2012 - 20:06:44: Info (map "de_dust2") (file "addons/amxmodx/logs/error_20120422.log") L 04/22/2012 - 20:06:44: [AMXX] Plugin file open error (plugin "god_test.amxx") L 04/22/2012 - 20:06:45: Function "event_start_freezetime" was not found L 04/22/2012 - 20:06:45: [AMXX] Displaying debug trace (plugin "db_impressive.amxx") L 04/22/2012 - 20:06:45: [AMXX] Run time error 19: function not found L 04/22/2012 - 20:06:45: [AMXX] [0] db_impressive.sma::plugin_init (line 827) L 04/22/2012 - 20:08:18: [MySQL] Invalid column: -1 L 04/22/2012 - 20:08:18: [AMXX] Displaying debug trace (plugin "db_impressive.amxx") L 04/22/2012 - 20:08:18: [AMXX] Run time error 10: native error (native "SQL_ReadResult") L 04/22/2012 - 20:08:18: [AMXX] [0] db_impressive.sma::Load_xp_handle (line 1680)to nic z tego kodu co dał sebul
jeśli masz fejsa i chcesz mi pomóc to wejdź tutaj: Zaproś kumpla by lubił nasz sklep | Facebook
na pewno jakoś C się odwdzięczę!
#8
Napisano 22.04.2012 19:42
Można prosić małą 'poradę' ? Kombinowałem z : get_user_weapon, aby miec id broni trzymanej, a potem zamienić to na 'weapon_...' przez funkcję get_weaponname, ale d*pa. Sorki
Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !
#9
Napisano 22.04.2012 21:13
Otóż to ^ ^ te logi nijak mają się do tej funkcji, którą podałem.ps.
L 04/22/2012 - 20:06:13: [AMXX] Run time error 10: native error (native "SQL_ReadResult") L 04/22/2012 - 20:06:13: [AMXX] [0] db_impressive.sma::Load_xp_handle (line 1680) L 04/22/2012 - 20:06:44: Start of error session. L 04/22/2012 - 20:06:44: Info (map "de_dust2") (file "addons/amxmodx/logs/error_20120422.log") L 04/22/2012 - 20:06:44: [AMXX] Plugin file open error (plugin "god_test.amxx") L 04/22/2012 - 20:06:45: Function "event_start_freezetime" was not found L 04/22/2012 - 20:06:45: [AMXX] Displaying debug trace (plugin "db_impressive.amxx") L 04/22/2012 - 20:06:45: [AMXX] Run time error 19: function not found L 04/22/2012 - 20:06:45: [AMXX] [0] db_impressive.sma::plugin_init (line 827) L 04/22/2012 - 20:08:18: [MySQL] Invalid column: -1 L 04/22/2012 - 20:08:18: [AMXX] Displaying debug trace (plugin "db_impressive.amxx") L 04/22/2012 - 20:08:18: [AMXX] Run time error 10: native error (native "SQL_ReadResult") L 04/22/2012 - 20:08:18: [AMXX] [0] db_impressive.sma::Load_xp_handle (line 1680)to nic z tego kodu co dał sebul
Wersja z kanapką powinna działać, ale chyba można to zrobić jeszcze tak
(...)
register_forward(FM_SetModel, "FW_SetModel", 1);
(...)
public FW_SetModel(ent, const model[]) {
if(pev(ent, pev_iuser4) == -1)
remove_entity(ent);
}
stock remove_current_weapon(id) {
new weaponname[32], weaponid = -1;
get_weaponname(get_user_weapon(id), weaponname, 31);
if((weaponid = find_ent_by_owner(weaponid, weaponname, id))) {
set_pev(weaponid, pev_iuser4, -1);
engclient_cmd(id, "drop", weaponname);
}
}
Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo
#10
Napisano 22.04.2012 21:36
stock ham_strip_user_weapon(id){ new wId = get_user_weapon(weapon); if(!wId) return 0; new wEnt; while((wEnt = engfunc(EngFunc_FindEntityByString,wEnt,"classname",weapon)) && pev(wEnt,pev_owner) != id) {} if(!wEnt) return 0; ExecuteHamB(Ham_Weapon_RetireWeapon,wEnt); if(!ExecuteHamB(Ham_RemovePlayerItem,id,wEnt)) return 0; ExecuteHamB(Ham_Item_Kill,wEnt); set_pev(id,pev_weapons,pev(id,pev_weapons) & ~(1<<wId)); // this block should be used for Counter-Strike: if(wId == CSW_C4) { cs_set_user_plant(id,0,0); cs_set_user_bpammo(id,CSW_C4,0); } else if(wId == CSW_SMOKEGRENADE || wId == CSW_FLASHBANG || wId == CSW_HEGRENADE) cs_set_user_bpammo(id,wId,0); return 1; }
#11
Napisano 23.04.2012 14:01
może głupie pytanie, ale czemustock ham_strip_user_weapon(id){ new wId = get_user_weapon(weapon); if(!wId) return 0; new wEnt; while((wEnt = engfunc(EngFunc_FindEntityByString,wEnt,"classname",weapon)) && pev(wEnt,pev_owner) != id) {} if(!wEnt) return 0; ExecuteHamB(Ham_Weapon_RetireWeapon,wEnt); if(!ExecuteHamB(Ham_RemovePlayerItem,id,wEnt)) return 0; ExecuteHamB(Ham_Item_Kill,wEnt); set_pev(id,pev_weapons,pev(id,pev_weapons) & ~(1<<wId)); // this block should be used for Counter-Strike: if(wId == CSW_C4) { cs_set_user_plant(id,0,0); cs_set_user_bpammo(id,CSW_C4,0); } else if(wId == CSW_SMOKEGRENADE || wId == CSW_FLASHBANG || wId == CSW_HEGRENADE) cs_set_user_bpammo(id,wId,0); return 1; }
pev(wEnt,pev_owner) != id?
jeśli masz fejsa i chcesz mi pomóc to wejdź tutaj: Zaproś kumpla by lubił nasz sklep | Facebook
na pewno jakoś C się odwdzięczę!
#12
Napisano 23.04.2012 14:59
Coś chyba jest tutaj nie tak, bo na początku pobierasz broń nie wiadomo jakiego gracza, bo "weapon" nie jest nigdzie zadeklarowane, w dodatku "weapon" wykorzystane jest także w tej pustej pętli jako string.stock ham_strip_user_weapon(id){ new wId = get_user_weapon(weapon); if(!wId) return 0; new wEnt; while((wEnt = engfunc(EngFunc_FindEntityByString,wEnt,"classname",weapon)) && pev(wEnt,pev_owner) != id) {} if(!wEnt) return 0; ExecuteHamB(Ham_Weapon_RetireWeapon,wEnt); if(!ExecuteHamB(Ham_RemovePlayerItem,id,wEnt)) return 0; ExecuteHamB(Ham_Item_Kill,wEnt); set_pev(id,pev_weapons,pev(id,pev_weapons) & ~(1<<wId)); // this block should be used for Counter-Strike: if(wId == CSW_C4) { cs_set_user_plant(id,0,0); cs_set_user_bpammo(id,CSW_C4,0); } else if(wId == CSW_SMOKEGRENADE || wId == CSW_FLASHBANG || wId == CSW_HEGRENADE) cs_set_user_bpammo(id,wId,0); return 1; }
Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo
#13
Napisano 23.04.2012 16:24
Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !
#14
Napisano 23.04.2012 16:27
stock ham_strip_user_weapon(id){ new wId = get_user_weapon(id); if(!wId) return 0; new weapon[ 32 ]; get_weaponname( wId , weapon , charsmax( weapon ) ); new wEnt; while((wEnt = engfunc(EngFunc_FindEntityByString,wEnt,"classname",weapon)) && pev(wEnt,pev_owner) != id) {} if(!wEnt) return 0; ExecuteHamB(Ham_Weapon_RetireWeapon,wEnt); if(!ExecuteHamB(Ham_RemovePlayerItem,id,wEnt)) return 0; ExecuteHamB(Ham_Item_Kill,wEnt); set_pev(id,pev_weapons,pev(id,pev_weapons) & ~(1<<wId)); // this block should be used for Counter-Strike: if(wId == CSW_C4) { cs_set_user_plant(id,0,0); cs_set_user_bpammo(id,CSW_C4,0); } else if(wId == CSW_SMOKEGRENADE || wId == CSW_FLASHBANG || wId == CSW_HEGRENADE) cs_set_user_bpammo(id,wId,0); return 1; }
#15
Napisano 14.05.2012 20:50
Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !
#16
Napisano 14.05.2012 20:52
Ten temat został zamknięty przez moderatora.
Powód: Pomoc udzielona
Jeśli się z tym nie zgadzasz, raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.
Z pozdrowieniami,
Zespół AMXX.PL
Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych