[ROZWIĄZANE] Czy musze sprawdzać damagebit...
Najlepsza odpowiedź BlackPerfum 29.06.2014 16:25
Powinno być lub na +10 dmgKod na celu ma: 1/6 na natychmiastowe zabicie z p228 i +10 obrazen z niego
Nie musi a rzuć HE i zmień broń na p228 następnie zobacz jakią wykryło twoją broń a jakie damagebitskoro broń gracza to p228 to damagebits musi byd DMG_BULLET
Dużej różnicy to nie robi zwracaj między 1 a 3 Tzn wybierz sobie między:Co zwrocic po zabiciu?
HAM_IGNORED HAM_HANDLED HAM_OVERRIDEAle już jest różnica co zwrócisz po SetHamParamFloat. Osobiście polecam operowanie nad zmienną nagłówkową damage a dopiero na sam koniec funkcji ustawiać dmg Przejdź do postu
Rivit
29.06.2014
Witam.
Czy w tym:
public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits) { if(!is_user_connected(idattacker)) return HAM_IGNORED; if(!ma_perk[idattacker]) return HAM_IGNORED; if(get_user_weapon(idattacker) != CSW_P228) return HAM_IGNORED; if(!random(6)) { ExecuteHamB(Ham_Killed, this, idattacker, 1) return PLUGIN_HANDLED //CO TU ZWROCIC? } else SetHamParamFloat(4, damage+10) return HAM_IGNORED }
Kod na celu ma: 1/6 na natychmiastowe zabicie z p228 i +10 obrazen z niego
Skoro broń gracza to p228 to damagebits musi byd DMG_BULLET
+ Co zwrocic po zabiciu?
Najlepsza odpowiedź
BlackPerfum
29.06.2014
Powinno być lub na +10 dmgKod na celu ma: 1/6 na natychmiastowe zabicie z p228 i +10 obrazen z niego
Nie musi a rzuć HE i zmień broń na p228 następnie zobacz jakią wykryło twoją broń a jakie damagebitskoro broń gracza to p228 to damagebits musi byd DMG_BULLET
Dużej różnicy to nie robi zwracaj między 1 a 3 Tzn wybierz sobie między:Co zwrocic po zabiciu?
HAM_IGNORED HAM_HANDLED HAM_OVERRIDEAle już jest różnica co zwrócisz po SetHamParamFloat. Osobiście polecam operowanie nad zmienną nagłówkową damage a dopiero na sam koniec funkcji ustawiać dmg
Użytkownik BlackPerfum edytował ten post 29.06.2014 16:27
Rivit
29.06.2014
@BlackPerfum
Uzywam SetHamParamFloat w srodku i co mam zwrocic? A czasem na koncu i co wtedy?
BlackPerfum
01.07.2014
Polecam używanie tego na samym końcu gdyż nie ma się problemów z zakańczaniem na parę sposobów funkcji ;DUzywam SetHamParamFloat w srodku i co mam zwrocic? A czasem na koncu i co wtedy?
Najlepiej pokaż przykładowy kod
Rivit
01.07.2014
public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits) { if(!is_user_connected(idattacker)|| !ma_perk[idattacker] || get_user_weapon(idattacker) != CSW_P228 || !(damagebits & DMG_BULLET)) return HAM_IGNORED; if(!random(6)) { SetHamParamFloat(4, float(get_user_health)) return //CO TU ZWROCIC? } else { SetHamParamFloat(4, damage+10) return //CO TU ZWROCIC? } return HAM_IGNORED }Kurde. Sam nie wiem. W tutorialu 'wplywanie na obrazenia' pisze zeby zwracac HAM_HANDLED zeby zatwierdzic zmiany. Wiec jak to jest?
szelbi
01.07.2014
Ja bym to zrobił tak, ale nie wiem czy zadziała:
public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits) { if(!is_user_connected(idattacker)|| !ma_perk[idattacker] || get_user_weapon(idattacker) != CSW_P228 || !(damagebits & DMG_BULLET)) return HAM_IGNORED; if(!random(6)) damage = float(get_user_health(id)); // zapomniales o id else damage += 10.0; SetHamParamFloat(4, damage); return HAM_IGNORED; }
//edit
Tak btw. to stosując to, co napisałeś wyżej, możesz równie dobrze nic nie zwracać i powinno działać
Rivit
01.07.2014
Ale jestes pewien ze obrazenia zostana dodane/ustawienie? Potem zwracasz IGNORED.
amxx.pl/topic/14829-wplywanie-na-obrazenia/
szelbi
01.07.2014
Stosuję identyczny patent w innym pluginie i tam działa bez problemu. Co do tych poradników, to ja przy pisaniu pluginów używam tylko HAM_IGNORED oraz HAM_SUPERCEDE i jakoś nigdy nie miałem problemu
Rivit
01.07.2014
Moglbys rzucic jakis kod? Przykladowy, dzialajacy plugin.
szelbi
01.07.2014
HAM_SUPERCEDE używałem w silniku JB, kiedy chciałem całkowicie zatrzymać zadawanie obrażeń, np. żeby CT nie mogło bić TT w danym przypadku itp.
public player_damage(victim, ent, attacker, Float:damage, bits) { if(victim == attacker || !is_user_connected(attacker)) return HAM_IGNORED; /* Gracz majacy FreeDay'a nie zadaje obrazen CT */ if(cs_get_user_team(victim) == CS_TEAM_CT && FreeDayGracz[attacker]) return HAM_SUPERCEDE; /* CT nie zadaje obrazen TT, jesli zmienna nieaktywna */ if(cs_get_user_team(attacker) == CS_TEAM_CT && cs_get_user_team(victim) == CS_TEAM_T && !zmienna[CT_HIT_TT]) return HAM_SUPERCEDE; /* TT nie zadaje sobie nawzajem obrazen, jesli zmienna nieaktywna */ if(cs_get_user_team(attacker) == CS_TEAM_T && cs_get_user_team(victim) == CS_TEAM_T && !zmienna[WALKA]) return HAM_SUPERCEDE; }
Rivit
01.07.2014
Czyli SUPERCEDE blokuje tak ze inne pluginy nie moga tego wychwycic?
To dlaczego R3X pisal ze HANDLED zatwierdza zmiany?
Chce zeby to wylapywaly inne pluginy...
BlackPerfum
01.07.2014
I dobrze tam prawią ;DW tutorialu 'wplywanie na obrazenia' pisze zeby zwracac HAM_HANDLED zeby zatwierdzic zmiany
Tylko że pisząc wszyscy powinniśmy być pewni że nasz kod zadziała ;Dmożesz równie dobrze nic nie zwracać i powinno działać
Oczywiście szansa na to że metamod czegoś nieogarnie wynosi 1/
Ale powinniśmy się bać tej malutkiej szansy i to bardzo
Zawsze się w jakiś sposób da wychwycić albo po prostu info o dmg najpierw doszło do jakiegoś pluginu potem do pluginu blokującegoDobra.
Czyli SUPERCEDE blokuje tak ze inne pluginy nie moga tego wychwycic?
Czyli pewni nie jesteśmy że nie dojdzie ale ogułem zwrócenie tej wartości równa się z zablokowaniem funkcji
Żeby inny pluginy łapały zmienione dmg ;DTo dlaczego R3X pisal ze HANDLED zatwierdza zmiany?
Chce zeby to wylapywaly inne pluginy...
Rivit
01.07.2014
Jak tam wepchnac return HAM_HANDLED ?
Do mojego jest prosto bo dajesz miedzy klamrami.
Rivit
01.07.2014
Chociaz faktycznie. Jesli nie spelnia warunkow to zwroci sie IGNORED a jesli spelni to SetHamParamFloat.
Dobra dzięki wam plusy rozdam pozniej