←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

CoD Nowy
1/x z he, pytanie

Locked

C@w@ler's Photo C@w@ler 14.05.2012

Witam!
Mam pytanie jak zrobic 1/x z he i 1/1, do tej pory robilem taka funkcja, ktora nie dziala. proszę tylko o ten wycinek z public take damage dot. granatu.
Quote

  • +
  • -
dasiek's Photo dasiek 14.05.2012

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
    if(!is_user_alive(this) || !is_user_connected(this) || !is_user_connected(idattacker) || get_user_team(this) == get_user_team(idattacker))
	    return HAM_IGNORED;
    
    new health = get_user_health(this);

    new klasaa[32];
    cod_get_class_name(cod_get_user_class(idattacker),klasaa,32)
    if(get_user_weapon(idattacker) == CSW_HEGRENADE && random_num(1,x) == 1 && equal(klasaa,"Nazwa Klasy"))
	    damage = float(health);
    
    SetHamParamFloat(4, damage);
    
    return HAM_IGNORED;
}

moze tak.?
Edited by CheQ, 14.05.2012 15:46.
Quote

C@w@ler's Photo C@w@ler 14.05.2012

&& equal(klasaa,"Nazwa Klasy"))
A to co? Bo jakoś nie ogarniam?

A to zadziała?

#include <amxmodx>
#include <amxmisc>
#include <codmod_frakcje>
#include <hamsandwich>
#include <fun>
#define DMG_HEGRENADE (1<<24)

new const nazwa[] = "General [PREMIUM]";
new const opis[] = "1/1 z he, szybko biega";
new const bronie = (1<<CSW_HEGRENADE)|(1<<CSW_DEAGLE)|(1<<CSW_AK47);
new const zdrowie = 40;
new const kondycja = 30;
new const inteligencja = 0;
new const wytrzymalosc = 0;
new const frakcja[] = "Klasy premium";
new bool:ma_klase[33];

public plugin_init()
{
register_plugin(nazwa, "1.0", "C@w@ler");
cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc, frakcja);
RegisterHam(Ham_TakeDamage, "player", "TakeDamage");
}
public cod_class_enabled(id)
{
if(!(get_user_flags(id) & ADMIN_LEVEL_H))
{
client_print(id, print_chat, "[General [PREMIUM]] Nie masz uprawnien, aby uzywac tej klasy.")
return COD_STOP;
}
give_item(id, "weapon_hegrenade");

return COD_CONTINUE;
}
public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
if(!is_user_connected(idattacker))
return HAM_IGNORED;

if(!ma_klase[idattacker])
return HAM_IGNORED;

if(get_user_weapon(idattacker) == CSW_HEGRENADE && damagebits & DMG_HEGRENADE && damage > 20.0)
cod_inflict_damage(idattacker, this, float(get_user_health(this))-damage+1.0, 0.0, idinflictor, damagebits);
return HAM_IGNORED;
}

Edited by C@w@ler, 14.05.2012 16:59.
Quote

  • +
  • -
dasiek's Photo dasiek 14.05.2012

dodałem ifa bo nie wiem czy masz w cod_class enablet zmienną logiczną więc sprawdziłem czy nazwa klasy gracza jest taka sama jak Klasa w pluginie.


Sprawdz to.

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
if(!is_user_connected(idattacker))
  return HAM_IGNORED;

if(!ma_klase[idattacker])
  return HAM_IGNORED;

if(get_user_weapon(idattacker) == CSW_HEGRENADE && damagebits & DMG_HEGRENADE && damage > 20.0)
  damage=float(get_user_health(this);

SetHamParamFloat(4, damage);
return HAM_IGNORED;
}
Quote

C@w@ler's Photo C@w@ler 14.05.2012


codclass_general.sma(47) : error 001: expected token: ",", but found ";"

Quote

  • +
  • -
radim's Photo radim 14.05.2012

1. C@w@ler Twój kod zadziała tylko usuń:
damage > 20.0
Bo ta linijka sprawia, że 1/1 z granata zadziała wtedy, gdy podstawowe obrażenia z he będą wynosić 20 lub więcej. Takiego kodu się używa do kosy PPM

2. Co do Kodu Cheq jest błąd w tym samym co podałem przed chwilą (znaczy to nie jest błąd, ale jeśli chcesz aby 1/1 z kosy działał cały czas to usuń to) i w tym:
damage=float(get_user_health(this);
Nie każdy nawias jest zamknięty. Zamień na to:
damage=float(get_user_health(this));

Ale polecam standardowy sposób czyli ten z cod_inflict_damage.

Poprawiona klasa:
Spoiler

Edited by radim, 14.05.2012 18:06.
Quote

C@w@ler's Photo C@w@ler 14.05.2012

Jutro sprawdzę czy działa. Dzięki.
Quote
Locked