Jak zrobic cos z otrzymywanym dmg?
Enson
27.03.2012
Mam problem poniewaz nie wiem jak zrobic taka: gdy ktos w nas strzela i dostajemy obrazenia to zaczyna sie cos dziac
Robilem cos takiego:
Ten kod ktory podalem wyzej dziala w sposob ze gdy my strzelamy w kogos zadajemy mniejsze obrazenia a ja chcialem zrobic ze jezeli ktos w nas strzela to dostajemy mniejsze obrazenia. Lecz nie wiem jak zrobic petle z tym ze ktos w nas strzela ;x
Molgby ktos pomoc? Bylbym bardzo wdzieczny
Chyba dobrze to wytlumaczylem
Robilem cos takiego:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#define PLUGIN "plugins"
#define VERSION "1.0"
#define AUTHOR "Enson"
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
RegisterHam(Ham_TakeDamage, "player","Damage");
}
public Damage(this, idinflictor, idattacker, Float:damage, damagebits)
{
SetHamParamFloat(4, damage-65.0);
return HAM_IGNORED;
}
Ten kod ktory podalem wyzej dziala w sposob ze gdy my strzelamy w kogos zadajemy mniejsze obrazenia a ja chcialem zrobic ze jezeli ktos w nas strzela to dostajemy mniejsze obrazenia. Lecz nie wiem jak zrobic petle z tym ze ktos w nas strzela ;x
Molgby ktos pomoc? Bylbym bardzo wdzieczny
Chyba dobrze to wytlumaczylem
dasiek
27.03.2012
@Duży EDIT
Skoro ktoś do nas strzela to non stop zadawane są obrażenia. więc - To co napisałeś w zupełności wystarczy
Skoro ktoś do nas strzela to non stop zadawane są obrażenia. więc - To co napisałeś w zupełności wystarczy
Enson
27.03.2012
nie wystarczy bo juz testowalem
i obniza to moje dmg a nie dmg ktore otrzymuje ;x
i obniza to moje dmg a nie dmg ktore otrzymuje ;x
dasiek
27.03.2012
Jeśli gracz(this) to wtedy usuń. coś takiego spróbój.
public Damage(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; if(graczCosMa[this]) { damage-=65.0) } SetHamParamFloat(4, damage); return HAM_IGNORED; }
Enson
27.03.2012
nadal nie dziala ;x
teraz ani nie zmniejsza dmg moich ani otrzymywanych
Użytkownik Enson edytował ten post 27.03.2012 17:25
teraz ani nie zmniejsza dmg moich ani otrzymywanych
Użytkownik Enson edytował ten post 27.03.2012 17:25
Enson
27.03.2012
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#define PLUGIN "redukcja dmg"
#define VERSION "1.0"
#define AUTHOR "Enson"
new graczCosMa[33];
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
RegisterHam(Ham_TakeDamage, "player","Damage");
}
public Damage(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;
if(graczCosMa[this])
SetHamParamFloat(4, damage-65.0);
return HAM_IGNORED;
}
dasiek
27.03.2012
Mogłeś powiedzieć że wklejałeś bez namysłu to co podałem.
Po wpisaniu /zmiejsz gracz dostanie zmien gracz dostanie zmiejszenie obrażeń (graczCosMa[id] jest tru) i jak ktoś mu zada obrażenia o te 65.0 mniejsze. Poprzednio nie działało bo graczNieMiałCzegos[id]. Rozumiesz? &--#60;/div&--#62;
#include <amxmodx> #include <amxmisc> #include <hamsandwich> #define PLUGIN "redukcja dmg" #define VERSION "1.0" #define AUTHOR "Enson" new graczCosMa[33]; public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_clcmd("say /zmiejsz","DajTrue") RegisterHam(Ham_TakeDamage, "player","Damage"); } DajTrue(id) { graczCosMa[id] = true; } public Damage(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; if(graczCosMa[this]) damage=-65.0; SetHamParamFloat(4, damage); return HAM_IGNORED; }
Po wpisaniu /zmiejsz gracz dostanie zmien gracz dostanie zmiejszenie obrażeń (graczCosMa[id] jest tru) i jak ktoś mu zada obrażenia o te 65.0 mniejsze. Poprzednio nie działało bo graczNieMiałCzegos[id]. Rozumiesz? &--#60;/div&--#62;
Enson
27.03.2012
aa czyli jezeli będę chcial uzyc tego w klasie do cod moda to poprostu zamiast graczCosMa mam dac ma_klase ze zdefiniowanym boolem na ma_klase w enabled i disabled tak?
bo wlasnie nie wiedzialem na poczatku co to jest to graczCosMa
ok to przetestuje
bo wlasnie nie wiedzialem na poczatku co to jest to graczCosMa
ok to przetestuje
dasiek
27.03.2012
Dając Ten Kod co Ty Podałeś na początku Każdy bedzie zadawał x obrażeń mniej. a Tobie Chodzi o to żeby Tylko jeden gracz miał mniejsze obrażenia. I tak tu To robisz. Jak strzelisz w kogoś to Wyłapujesz sam moment Jednej Kuli Kto strzelił, w kogo strzelił i czym strzelił.
Enson
27.03.2012
Spoiler
zrobilem w taki sposob i cos nie chce dzialac ;x
wiesz moze co by tu bylo zle? bo zamiast wpisywania komendy to poprostu dalem to jako cod_class_enabled zebym wpisywac nie musial ;x
dasiek
27.03.2012
Apteczek nie sprawdzałem i całej klasy też nie - ale o ile się nie myle chcesz zeby jak ktoś maTwoją klase otrzymywał 65 obrazen mniej tak? jeśli tak to warunek powinien być taki
albo po prostu
if(redukcja[this] && ma_klase[this]) { damage=-65.0; }
albo po prostu
if(redukcja[this]) { damage=-65.0; }
Goliath
27.03.2012
#include <amxmodx>
#include <amxmisc>
#include <codmod>
#include <engine>
#include <hamsandwich>
#include <colorchat>
new const nazwa[] = "Zolnierz Wsparcia";
new const opis[] = "Posiada 1 apteczke";
new const bronie = (1<<CSW_M249);
new const zdrowie = 0;
new const kondycja = 20;
new const inteligencja = 0;
new const wytrzymalosc = 20;
new sprite_white_apteczki;
new ilosc_apteczek_gracza[33];
new bool:ma_klase[33];
public plugin_init()
{
register_plugin(nazwa, "1.0", "Enson");
cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc);
register_think("medkit", "Think_Apteczki");
RegisterHam(Ham_Spawn, "player", "fwSpawn_Apteczki", 1);
RegisterHam(Ham_TakeDamage, "player", "Damage");
}
public plugin_precache()
{
sprite_white_apteczki = precache_model("sprites/white.spr");
precache_model("models/w_medkit.mdl");
}
public client_disconnect(id)
{
new entApteczki = find_ent_by_class(0, "medkit");
while(entApteczki > 0)
{
if(entity_get_edict(entApteczki, EV_ENT_owner) == id)
remove_entity(entApteczki);
entApteczki = find_ent_by_class(entApteczki, "medkit");
}
}
public cod_class_enabled(id)
{
ColorChat(id, GREY, "[FreedoM-Strike.PL] Klasa %s stworzona przez Enson.", nazwa);
ilosc_apteczek_gracza[id] = 1;
ma_klase[id] = true;
}
public cod_class_disabled(id)
{
ma_klase[id] = false;
}
public cod_class_skill_used(id)
{
if (!ilosc_apteczek_gracza[id])
{
client_print(id, print_center, "Masz tylko 1 apteczki na runde!");
}
else
{
ilosc_apteczek_gracza[id]--;
new Float:origin[3];
entity_get_vector(id, EV_VEC_origin, origin);
new ent = create_entity("info_target");
entity_set_string(ent, EV_SZ_classname, "medkit");
entity_set_edict(ent, EV_ENT_owner, id);
entity_set_int(ent, EV_INT_solid, SOLID_NOT);
entity_set_vector(ent, EV_VEC_origin, origin);
entity_set_float(ent, EV_FL_ltime, halflife_time() + 7 + 0.1);
entity_set_model(ent, "models/w_medkit.mdl");
set_rendering ( ent, kRenderFxGlowShell, 255,0,0, kRenderFxNone, 255 ) ;
drop_to_floor(ent);
entity_set_float(ent, EV_FL_nextthink, halflife_time() + 0.1);
}
}
public fwSpawn_Apteczki(id)
{
if(is_user_alive(id))
ilosc_apteczek_gracza[id] = 1;
}
public Think_Apteczki(ent)
{
if(!is_valid_ent(ent))
return PLUGIN_CONTINUE;
new id = entity_get_edict(ent, EV_ENT_owner);
new dist = 300;
new heal = 5+floatround(cod_get_user_intelligence(id)*0.5);
if (entity_get_edict(ent, EV_ENT_euser2) == 1)
{
new Float:forigin[3];
entity_get_vector(ent, EV_VEC_origin, forigin);
new entlist[33];
new numfound = find_sphere_class(0,"player", float(dist),entlist, 32,forigin);
for (new i=0; i < numfound; i++)
{
new pid = entlist[i];
if (get_user_team(pid) != get_user_team(id))
continue;
new maksymalne_zdrowie = 100+cod_get_user_health(pid);
new zdrowie = get_user_health(pid);
new Float:nowe_zdrowie = (zdrowie+heal<maksymalne_zdrowie)?zdrowie+heal+0.0:maksymalne_zdrowie+0.0;
if (is_user_alive(pid)) entity_set_float(pid, EV_FL_health, nowe_zdrowie);
}
entity_set_edict(ent, EV_ENT_euser2, 0);
entity_set_float(ent, EV_FL_nextthink, halflife_time() + 1.5);
return PLUGIN_CONTINUE;
}
if (entity_get_float(ent, EV_FL_ltime) < halflife_time() || !is_user_alive(id))
{
remove_entity(ent);
return PLUGIN_CONTINUE;
}
if (entity_get_float(ent, EV_FL_ltime)-2.0 < halflife_time())
set_rendering ( ent, kRenderFxNone, 255,255,255, kRenderTransAlpha, 100 );
new Float:forigin[3];
entity_get_vector(ent, EV_VEC_origin, forigin);
new iOrigin[3];
for(new i=0;i<3;i++)
iOrigin[i] = floatround(forigin[i]);
message_begin( MSG_BROADCAST, SVC_TEMPENTITY, iOrigin );
write_byte( TE_BEAMCYLINDER );
write_coord( iOrigin[0] );
write_coord( iOrigin[1] );
write_coord( iOrigin[2] );
write_coord( iOrigin[0] );
write_coord( iOrigin[1] + dist );
write_coord( iOrigin[2] + dist );
write_short( sprite_white_apteczki );
write_byte( 0 ); // startframe
write_byte( 0 ); // framerate
write_byte( 10 ); // life
write_byte( 10 ); // width
write_byte( 255 ); // noise
write_byte( 255 ); // r, g, b
write_byte( 100 );// r, g, b
write_byte( 100 ); // r, g, b
write_byte( 128 ); // brightness
write_byte( 0 ); // speed
message_end();
entity_set_edict(ent, EV_ENT_euser2 ,1);
entity_set_float(ent, EV_FL_nextthink, halflife_time() + 0.5);
return PLUGIN_CONTINUE;
}
public Damage(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;
if(ma_klase[this])
damage -= 65.0;
SetHamParamFloat(4, damage);
return HAM_IGNORED;
}
Źle zbudowałeś warunek sprawdzający, czy gracz ma klasę. Tak powinno działać.
dasiek
28.03.2012
Gracz który ma Klase Otrzymuje mniejsze obrażenia? Może dlatego że ktoś zadaje mu obrażenia mniejsze od 65...
Enson
28.03.2012
nie bo testowalem z kumplem i kazalem mu strzelac mi w glowe z m4 i normalnie dostawalem 100+