←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

read_data a Wpływanie na obrażenia

  • +
  • -
Eustachy8 - zdjęcie Eustachy8 27.09.2012

zrobiłem to tak:
RegisterHam(Ham_TakeDamage, "player", "Fw_HamPlayerTakeDamage", 0)
(...)

public Fw_HamPlayerTakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
if (ma_g36c[this])
{
new iWeapon = read_data(2);
if(iWeapon == CSW_P90)
{
        SetHamParamFloat(4, damage*2) //Wszystkie obrażenia są zmienione na 1 obojętnie od miejsca trafienia i broni

}
}
}
a dmg się nie zmienia ;<

if (ma_g36c[this])
ten warunek na pewno przechodzi, ponieważ w innej funkcji podmienia dobrze broń
(27.09.2012 20:48):
Temat został wydzielony stąd
Odpowiedz

  • +
  • -
Fili:P - zdjęcie Fili:P 27.09.2012



new iWeapon = read_data(2);
if(iWeapon == CSW_P90)
{

read_data tu nie zadziała użyj get_user_weapon( this );
Odpowiedz

Gość_21977_* 27.09.2012

Fili:P ma rację. Od siebie dodam, że read_data służy odczytaniu wartości danego parametru forwardu, w tym wypadku będzie to idinflictor.
Odpowiedz

  • +
  • -
Eustachy8 - zdjęcie Eustachy8 28.09.2012

dziękować ;)
Odpowiedz

  • +
  • -
Eustachy8 - zdjęcie Eustachy8 30.09.2012

jest tak:

public Fw_HamPlayerTakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
if (ma_g36c[this])
{
new iWeapon=get_user_weapon( this ); 
if(iWeapon == CSW_P90)
{
ExecuteHam(Ham_TakeDamage, idinflictor, this, this, damage*2, (1<<31) | damagebits);
}
}
}
i zdarza się, że jak ktoś mnie zabije, sam również ginie
Odpowiedz

Gość_21977_* 14.10.2012

Nie bardzo rozumiem, co chcesz tutaj uzyskać.

Jeśli ofiara ataku ma g36c i jej obecna broń to CSW_P90,
to bytowi zadającemu obrażenia, ofiara sama z siebie zadaje dwukrotnie większe obrażenia od otrzymanych.

Nic dziwnego, że atakujący czasem ginie, ale chyba jest coś źle,
bo nie sądzę, żebyś chciał bytowi zadawać obrażenia (np. granatowi czy ścianie)
Sprecyzuj jeszcze raz, dokładnie, na czym Ci zależy (co chcesz osiągnąć).
Odpowiedz

  • +
  • -
Eustachy8 - zdjęcie Eustachy8 21.10.2012

kupuje g36c i zadaje 2x obrażenia przeciwnikom. Jak standardowo strzał p90 w noge zabiera np. 15dmg to ma 2x15
Odpowiedz

Gość_21977_* 21.10.2012

public Fw_HamPlayerTakeDamage(this, idinflictor, idattacker, Float:damage, damagebits){
if(ma_g36c[idattacker] && get_user_weapon(idattacker)==CSW_P90){
SetHamParamFloat(4, damage*2);
}
}

(22.10.2012 22:22):
Kod poprawiłem (w kanapce nie ma read_data).
Nie wiem, czemu wcześniej źle napisałem :(
(22.10.2012 22:23):
W każdym razie, wygląda to identycznie, jak w poradniku r3xa, czyli zwracasz zwiększony argument czwarty, który odpowiada za damage.
(23.10.2012 01:14):
Ja mam wrażenie, że skopiowałem zły kod.
@down: Oczywiście masz rację, Poprawione.

Użytkownik benio101 edytował ten post 23.10.2012 01:11
Poprawiłem kod pod HamSandwich
Odpowiedz

AztekHQS - zdjęcie AztekHQS 23.10.2012

czemu this skoro to jest ofiara ?
powinno być idattacker ;)
Odpowiedz

  • +
  • -
Jak się nazwać - zdjęcie Jak się nazwać 23.10.2012

public Fw_HamPlayerTakeDamage(this, idinflictor, idattacker, Float:damage, damagebits){
if(ma_g36c[idattacker] && get_user_weapon(idattacker)==CSW_P90){
SetHamParamFloat(4, damage*2);
}
}

A co gdy rzucimy granat i szybko zmienimy na P90 ?
Odpowiedz

  • +
  • -
K!113r - zdjęcie K!113r 23.10.2012

Można zawsze poszukać podobnego problemu, np. w cod starym był właśnie taki bug z HE + Awp Sniper, wystarczy w dziale z łatkami coda poszukać.
dasiek (23.10.2012 17:58):
Wystarczy sprawdzić "rodzaj" zadawanych obrażeń.
Odpowiedz