←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Dodawanie bool dla gracza


Best Answer Rivit 21.08.2019 10:42

public player_attack(victim, attacker, Float:damage, Float:direction[3], tracehandle, damagebits)
{
    if(!is_user_connected(victim) || !is_user_connected(attacker) || victim == attacker)
        return HAM_IGNORED

    if(oznacz[victim] && oznacz[attacker]){
        return HAM_IGNORED
    }

    return HAM_SUPERCEDE
}

cos takiego mozesz zrobic.

Pamietaj ze w RegisterHam musisz miec event typu pre (ostatni parametr na 0). Więcej o tym poczytasz tu: RegisterHam

if(!oznacz[victim] && !oznacz[attacker])
return HAM_SUPERCEDE

if(oznacz[victim] && oznacz[attacker]))
return HAM_SUPERCEDE

Pierwszy warunek w twoim kodzie mówi:

jeśli victim jest nieoznaczony i attacker jest nieoznaczony to zablokuj obrazenia

Drugi zaś mówi:

jeśli victim jest oznaczony i attacker jest oznaczony to zablokuj obrazenia

 

wniosek: jesli ktorys z graczy jest oznaczony a drugi nie, to obrazenia beda zadawane

 

 

PS. proszę wstawiać kod na forum w odpowiednich tagach lub użyć przycisku "Kod" w edytorze posta

 
Go to the full post

  • +
  • -
mlekovita's Photo mlekovita 21.08.2019

Witam, w jaki sposób mógłbym po jakiejś wykonanej pętli czy po wykonaniu kodu przypisać bool dla gracza?
Np. gdy coś się tam stanie to graczowi (id) włącza się takie coś asysty[id] = 1 - i ta wartosc chciałbym też zwrócic w natywie.

Quote

  • +
  • -
Rivit's Photo Rivit 21.08.2019

https://amxx.pl/topi...ę-tablic-wstęp/

https://amxx.pl/topi...e-api-w-amxxie/

https://amxx.pl/topi...tywy/?hl=natywy

 

wartosc w natywie zwracasz jak każda inna, wykorzystujesz return i tyle. Pokaż jakiś kawałek kodu to Ci nakreśle co i jak ;)

Quote

  • +
  • -
mlekovita's Photo mlekovita 21.08.2019

new pid, pidBody;
get_user_aiming(id, pid, pidBody);

if(!is_user_alive(pid)) {
ColorChat(id, GREEN, "[CSGO] Nie mozesz kontynuowac!");
} else {
oznacz[pid] = 1;
ColorChat(id, GREEN, "[CSGO]^x03 %s^x01 zostal zaznaczony przez admina", nickGracza);
}
 
 
następnie chciałbym zrobić że jeżeli gracz ma oznacz[pid] = 1 to moze bic innego gracza ktory tez ma oznacz[pid] = 1
 
Czy to będzie prawidłowe?
 
public player_attack(victim, attacker, Float:damage, Float:direction[3], tracehandle, damagebits)
{
if(!is_user_connected(victim) || !is_user_connected(attacker) || victim == attacker)
return HAM_IGNORED


if(!oznacz[victim] && !oznacz[attacker])
return HAM_SUPERCEDE

if(oznacz[victim] && oznacz[attacker]))
return HAM_SUPERCEDE

return HAM_IGNORED
}
Quote

  • +
  • -
Best Answer Rivit's Photo Rivit 21.08.2019

public player_attack(victim, attacker, Float:damage, Float:direction[3], tracehandle, damagebits)
{
    if(!is_user_connected(victim) || !is_user_connected(attacker) || victim == attacker)
        return HAM_IGNORED

    if(oznacz[victim] && oznacz[attacker]){
        return HAM_IGNORED
    }

    return HAM_SUPERCEDE
}

cos takiego mozesz zrobic.

Pamietaj ze w RegisterHam musisz miec event typu pre (ostatni parametr na 0). Więcej o tym poczytasz tu: RegisterHam

if(!oznacz[victim] && !oznacz[attacker])
return HAM_SUPERCEDE

if(oznacz[victim] && oznacz[attacker]))
return HAM_SUPERCEDE

Pierwszy warunek w twoim kodzie mówi:

jeśli victim jest nieoznaczony i attacker jest nieoznaczony to zablokuj obrazenia

Drugi zaś mówi:

jeśli victim jest oznaczony i attacker jest oznaczony to zablokuj obrazenia

 

wniosek: jesli ktorys z graczy jest oznaczony a drugi nie, to obrazenia beda zadawane

 

 

PS. proszę wstawiać kod na forum w odpowiednich tagach lub użyć przycisku "Kod" w edytorze posta

 
Quote

  • +
  • -
mlekovita's Photo mlekovita 21.08.2019

czyli jakbym chciał przenieść ten bool do innego pluginu w którym ustawiam player_attack to natyw tak ma wyglądac?

public oznacz(pid) {
  return oznacz[pid];
}

a następnie wykonać to?

public player_attack(victim, attacker, Float:damage, Float:direction[3], tracehandle, damagebits)
{
    if(!is_user_connected(victim) || !is_user_connected(attacker) || victim == attacker)
        return HAM_IGNORED
 
    if(oznacz(victim) && oznacz(attacker)){
        return HAM_IGNORED
    }
 
    return HAM_SUPERCEDE
}
Quote

  • +
  • -
Rivit's Photo Rivit 21.08.2019

Nie, proszę poczytaj poradniki, które Ci wysłałem.

 

Quote

  • +
  • -
mlekovita's Photo mlekovita 21.08.2019

Edytuje ponieważ jest błąd. Jak oznacze gracza to moga sie wszyscy bic a jak nie oznacze to nikt sie bic nie moze.

Quote

  • +
  • -
Rivit's Photo Rivit 21.08.2019


następnie chciałbym zrobić że jeżeli gracz ma oznacz[pid] = 1 to moze bic innego gracza ktory tez ma oznacz[pid] = 1

 

Z tego wynika, że chcesz żeby gracze którzy są oznaczeni się mogli bić.

Więc jak nikt nie jest oznaczony to nikt sie nie moze bic.

Jeśli jedna osoba jest ozn, a druga nie to one sie nie moga mic.

jesli obie sa ozn to moga sie bic. 

 

Pokaz wiecej kodu

Quote

  • +
  • -
mlekovita's Photo mlekovita 22.08.2019

Tu jest cala funkcja z zabijania

if(gTeam[id] == 1 && gTeam[attacker] == 1) {
		if(!oznacz(id) && !oznacz(attacker))
			return HAM_SUPERCEDE;
		}

I wyglada to aktualnie tak ze kazdy moze kazdego bic a chce ze jak jest wlaczony mode_gracza[FF_TT] i sa jacys oznaczeni to moga sie bic oznaczeni


Edited by mlekovita, 22.08.2019 19:57.
Quote

  • +
  • -
K@MILOVVSKY's Photo K@MILOVVSKY 22.08.2019

if(gTeam[id] == 1 && gTeam[attacker] == 1) {
		if(!oznacz[id] && !oznacz[attacker])
			return HAM_SUPERCEDE;
		}
Quote

  • +
  • -
mlekovita's Photo mlekovita 22.08.2019

Niestety nadal nie działa to poprawnie podrzucam cały kod z pluginu na zabijanie aktualnie wyglada to tak: Jezeli walka dla wszystkich jest wlaczona a gracze nie sa oznaczeni to nie moze sie nikt bic, natomiast jesli walka dla wszystkich jest wlaczona a gracze sa oznaczeni to gracze moga lac tych co nie sa oznaczeni i odwrotnie.

public TakeDamage(id, ent, attacker, Float:damage, damagebits)
	return vAttackDamagePlayer(id, attacker, damage, damagebits, true);

public TraceAttack(id, attacker, Float:damage, Float:direction[3], tracehandle, damagebits)
	return vAttackDamagePlayer(id, attacker);

stock vAttackDamagePlayer(id, attacker, Float:damage=0.0, damagebits=0, bool:dmg=false)
{
	if(!is_user_connected(id))
		return HAM_IGNORED;
	
	if(is_user_connected(attacker))
	{
		new Float:fObr = damage;
		
		if(gTeam[id] == 1 && gTeam[attacker] == 1) {
				if(dmg) {
				fObr *= 2.954;
				//return HAM_HANDLED;
			}
		}

		if(gTeam[id] == 1 && gTeam[attacker] == 1) {
			if(!walkaDlaWszystkichTT){
			return HAM_SUPERCEDE;
			}
			if(!oznacz[id] && !oznacz[attacker] && walkaDlaWszystkichTT) {
			  return HAM_SUPERCEDE;
			}
		}
		
		if(dmg)
		{
			if(get_user_weapon(attacker) == CSW_KNIFE && damagebits & DMG_BULLET)
				fObr *= 0.4;
		}
		
		if(fObr != damage) {
			SetHamParamFloat(4, fObr);
			return HAM_HANDLED;
		}
	}
	return HAM_IGNORED;
}
Quote

  • +
  • -
Rivit's Photo Rivit 23.08.2019

if(!oznacz[id] || !oznacz[attacker])


Takie coś próbowałeś?
Quote