←  Poradniki, Łatki oraz Pluginy

AMXX.pl: Support AMX Mod X i SourceMod

»

CoD Nowy
Podnoszenie broni z ziemi

  • +
  • -
Czaso Umilacz - zdjęcie Czaso Umilacz 07.08.2013

Witam,
postanowiłem podzielić się kodem na podnoszenie broni z ziemi gdy już jedną mamy na slocie, przykład:

Klasa posiada dwie bronie, AWP i M4, jak wyrzuci AWP ma w slocie M4 i nie może podnieść AWP, po dodaniu tego będzie mogła.

Zaczynajmy, na początku kodu dodajemy nową zmienna:
 

new bool:just_droped[MAX+1];

Następnie w plugin_init dodajemy:

register_clcmd("drop", "DropWeapon");

Gdzieś w kodzie dodajemy następujące funkcje:

public DropWeapon(id){
	just_droped[id] = true;
	
	set_task(0.5, "Unlock", id);
}

public Unlock(id){
	just_droped[id] = false
}

Na samym końcu podmieniamy funkcje DotykBroni na:

public DotykBroni(weapon, id){
	static model[24];
	pev(weapon, pev_model, model, 23);
	
	if(containi(model, "w_backpack") != -1)
		return HAM_IGNORED;
		
	if(!just_droped[id] && pev(weapon, pev_owner) == id){
		static classname[64], weaponname[32], temp[32], del[4];
		pev(weapon, pev_model, classname, 63);
		
		replace(classname, 63, "w_", " ");
		replace(classname, 63, ".mdl", "");
		
		strbreak(classname, del, 3, classname, 63);
		
		format(weaponname, 32, "weapon_%s", classname);
		
		new weapons[32], weaponsnum, stop;
		get_user_weapons(id, weapons, weaponsnum);
		
		for(new i = 0; i < weaponsnum; i ++){
			get_weaponname(weapons[i], temp, 31);
			
			if(equal(temp, weaponname))
				stop = 1;
		}
		
		if(!stop)
			fm_give_item(id, weaponname);
			
		engfunc(EngFunc_RemoveEntity, weapon);
	}	
		
	return HAM_SUPERCEDE;
}

Kod sprawdzony i działa, sprawdza czy gracz nie posiada już broni którą chce podnieść, liczę na masę hejtu.

Pozdrawiam :)

Odpowiedz

  • +
  • -
sNH. - zdjęcie sNH. 07.08.2013

Już chyba było, ale łap +

Odpowiedz

  • +
  • -
M4n1k`` - zdjęcie M4n1k`` 08.08.2013

A jeżeli mamy zablokowane podnoszenie broni, poprzez cvar z codmoda, to będę mógł podnieść w tym przypadku awp?

Odpowiedz

  • +
  • -
d0naciak - zdjęcie d0naciak 08.08.2013

tutaj cvar cod_weaponsblocking nie ma znaczenia, jest on usunięty, więc nie można wyłączyć blokady podnoszenia broni obcych

Odpowiedz

  • +
  • -
Czaso Umilacz - zdjęcie Czaso Umilacz 09.08.2013

Dla bezpieczeństwa do funkcji DotykBroni, na sam początek można dodać:
 

if(!is_user_connected(id))
	return HAM_SUPERCEDE;
		
if(!is_user_alive(id) || !pev_valid(weapon))
	return HAM_SUPERCEDE;

Ma to wyglądać mniej/więcej tak:
 

public DotykBroni(weapon, id){
        if(!is_user_connected(id))
                return HAM_SUPERCEDE;

        if(!is_user_alive(id) || !pev_vaild(weapon))
                return HAM_SUPERCEDE;
      
	static model[24];
	pev(weapon, pev_model, model, 23);
	
	if(containi(model, "w_backpack") != -1)
		return HAM_IGNORED;
		
	if(!just_droped[id] && pev(weapon, pev_owner) == id){
		static classname[64], weaponname[32], temp[32], del[4];
		pev(weapon, pev_model, classname, 63);
		
		replace(classname, 63, "w_", " ");
		replace(classname, 63, ".mdl", "");
		
		strbreak(classname, del, 3, classname, 63);
		
		format(weaponname, 32, "weapon_%s", classname);
		
		new weapons[32], weaponsnum, stop;
		get_user_weapons(id, weapons, weaponsnum);
		
		for(new i = 0; i < weaponsnum; i ++){
			get_weaponname(weapons[i], temp, 31);
			
			if(equal(temp, weaponname))
				stop = 1;
		}
		
		if(!stop)
			fm_give_item(id, weaponname);
			
		engfunc(EngFunc_RemoveEntity, weapon);
	}	
		
	return HAM_SUPERCEDE;
}
Odpowiedz