Skocz do zawartości

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.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

[ROZWIĄZANE] strip_user_weapons // zniszczenie broni trzymanej ?


  • Zamknięty Temat jest zamknięty
15 odpowiedzi w tym temacie

#1 ogieR8

    Wszechmogący

  • Power User

Reputacja: 203
Profesjonalista

  • Postów:641
  • Imię:Mariusz
  • Lokalizacja:Ruda Śląska
Offline

Napisano 22.04.2012 18:10

~ Witam.
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.
  • +
  • -
  • 0

Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !


#2 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 22.04.2012 18:17

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);
}
}

  • +
  • -
  • 1

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#3 mierzwi

    Banned

  • Zbanowany

Reputacja: 235
Wszechwidzący

  • Postów:651
  • Lokalizacja:Polska
Offline

Napisano 22.04.2012 18:23

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 );
        }
    }
}

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 ogieR8

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 203
Profesjonalista

  • Postów:641
  • Imię:Mariusz
  • Lokalizacja:Ruda Śląska
Offline

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.
  • +
  • -
  • 0

Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !


#5 KariiO

    Super Hero

  • Power User

Reputacja: 396
Wszechpomocny

  • Postów:1 133
  • GG:
  • Imię:Korneliusz
  • Lokalizacja:Cieszyn
Offline

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])

		}

}

  • +
  • -
  • 0

#6 ogieR8

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 203
Profesjonalista

  • Postów:641
  • Imię:Mariusz
  • Lokalizacja:Ruda Śląska
Offline

Napisano 22.04.2012 19:20

class_weapons[player_class[i]] & weapon) && 


??
  • +
  • -
  • 0

Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !


#7 mierzwi

    Banned

  • Zbanowany

Reputacja: 235
Wszechwidzący

  • Postów:651
  • Lokalizacja:Polska
Offline

Napisano 22.04.2012 19:21

tam dajesz nazwe broni, a jak chcesz żeby była co ją ma to musisz get_weaponname :D

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 :D

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 ogieR8

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 203
Profesjonalista

  • Postów:641
  • Imię:Mariusz
  • Lokalizacja:Ruda Śląska
Offline

Napisano 22.04.2012 19:42

Twój kod KariiO usuwał mi wszystkie bronie, oprócz bomby, wiem że mogłem sobie tam np usunąć ze zmiennej kose, ale i tak usuwa reszte, których nie ma w zmiennej, a miała usuwać tą, którą trzymam w ręcę. Już sprawdzam Twój kod emu, ale i tak dzięki bo 'ham_strip_weapon' otworzył mi oczy, jeśli oczywiście uda mi się to zniekształcić nieco, ale i tak pierwsza kolejność teraz : emu :D

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 ;P
  • +
  • -
  • 0

Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !


#9 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 22.04.2012 21:13

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 :D

Otóż to ^ ^ te logi nijak mają się do tej funkcji, którą podałem.

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);
}
}

  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#10 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 980
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

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;

}

  • +
  • -
  • 0

#11 mierzwi

    Banned

  • Zbanowany

Reputacja: 235
Wszechwidzący

  • Postów:651
  • Lokalizacja:Polska
Offline

Napisano 23.04.2012 14:01

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;
}

może głupie pytanie, ale czemu
pev(wEnt,pev_owner) != id
o_O ?

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 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 23.04.2012 14:59

Pętla (pusta) będzie się wykonywać dotąd, aż znajdzie odpowiednią broń, czyli gdy zostanie spełniony warunek "pev(wEnt,pev_owner) == id" to do zmiennej "wEnt" przypisze się id broni.

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;
}

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.
  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#13 ogieR8

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 203
Profesjonalista

  • Postów:641
  • Imię:Mariusz
  • Lokalizacja:Ruda Śląska
Offline

Napisano 23.04.2012 16:24

To można dostać końcowy, poprawny kodzik ?
  • +
  • -
  • 0

Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !


#14 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 980
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

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;

}

  • +
  • -
  • 1

#15 ogieR8

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 203
Profesjonalista

  • Postów:641
  • Imię:Mariusz
  • Lokalizacja:Ruda Śląska
Offline

Napisano 14.05.2012 20:50

Sorry, że dopiero teraz, myślałem, że się wypowiedziałem już, no to tak : działa znakomicie, +, można zamknąć ;>
  • +
  • -
  • 0

Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !


#16 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 14.05.2012 20:52

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, Dołączona grafika raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
  • +
  • -
  • 0

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