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

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.
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
mlekovita
21.08.2019
{
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
}
Best Answer
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
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 }
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.
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
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.
K@MILOVVSKY
22.08.2019
if(gTeam[id] == 1 && gTeam[attacker] == 1) { if(!oznacz[id] && !oznacz[attacker]) return HAM_SUPERCEDE; }
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; }