[ROZWIĄZANE COD NOWY] Przerobienie kodu ra...
Raen
18.06.2012
Witam.
Chciałbym was prosić aby ktoś przerobił mi aby rakieta nie zadawała obrażeń przez cod_inflict_damage tylko przez ExecuteHamB. Gdy zadaje obrażenia normalnie to nie zapisują się do rankingu, słyszałem że przez ExecuteHamB będzie zliczane do rankingu. Czy da się w ogóle. to przerobić? z góry dzięki.
Chciałbym was prosić aby ktoś przerobił mi aby rakieta nie zadawała obrażeń przez cod_inflict_damage tylko przez ExecuteHamB. Gdy zadaje obrażenia normalnie to nie zapisują się do rankingu, słyszałem że przez ExecuteHamB będzie zliczane do rankingu. Czy da się w ogóle. to przerobić? z góry dzięki.
Raen
19.06.2012
#include <amxmodx>
#include <amxmisc>
#include <codmod>
#include <engine>
#include <hamsandwich>
#include <fun>
#include <ColorChat>
new const nazwa[] = "Kamikadze";
new const opis[] = "Posiada ak47 i jedna rakiete";
new const bronie = (1<<CSW_HEGRENADE)|(1<<CSW_SMOKEGRENADE)|(1<<CSW_FLASHBANG)|(1<<CSW_DEAGLE)|(1<<CSW_AK47);
new const zdrowie = 50;
new const kondycja = 10;
new const inteligencja = 0;
new const wytrzymalosc = 50;
new sprite_blast;
new ilosc_rakiet_gracza[33];
new poprzednia_rakieta_gracza[33];
public plugin_init()
{
register_plugin(nazwa, "1.0", "amxx.pl");
cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc);
register_touch("rocket", "*" , "DotykRakiety");
RegisterHam(Ham_Spawn, "player", "fwSpawn_Rakiety", 1);
}
public plugin_precache()
{
sprite_blast = precache_model("sprites/dexplo.spr");
precache_model("models/rpgrocket.mdl");
}
public client_disconnect(id)
{
new entRakiety = find_ent_by_class(0, "rocket");
while(entRakiety > 0)
{
if(entity_get_edict(entRakiety, EV_ENT_owner) == id)
remove_entity(entRakiety);
entRakiety = find_ent_by_class(entRakiety, "rocket");
}
}
public cod_class_enabled(id)
{
ColorChat(id, YELLOW, "^x04[XXXX]^x01 Aktualnie grasz klasa %s, odwiedz nasze forum XXXXX", nazwa)
ilosc_rakiet_gracza[id] = 1;
give_item(id, "weapon_hegrenade");
give_item(id, "weapon_flashbang");
give_item(id, "weapon_flashbang");
give_item(id, "weapon_smokegrenade");
}
public cod_class_skill_used(id)
{
if (!ilosc_rakiet_gracza[id])
{
client_print(id, print_center, "Wykorzystales juz wszystkie rakiety!");
}
else
{
if(poprzednia_rakieta_gracza[id] + 2.0 > get_gametime())
{
client_print(id, print_center, "Rakiety mozesz uzywac co 2 sekundy!");
}
else
{
if (is_user_alive(id))
{
poprzednia_rakieta_gracza[id] = floatround(get_gametime());
ilosc_rakiet_gracza[id]--;
new Float: Origin[3], Float: vAngle[3], Float: Velocity[3];
entity_get_vector(id, EV_VEC_v_angle, vAngle);
entity_get_vector(id, EV_VEC_origin , Origin);
new Ent = create_entity("info_target");
entity_set_string(Ent, EV_SZ_classname, "rocket");
entity_set_model(Ent, "models/rpgrocket.mdl");
vAngle[0] *= -1.0;
entity_set_origin(Ent, Origin);
entity_set_vector(Ent, EV_VEC_angles, vAngle);
entity_set_int(Ent, EV_INT_effects, 2);
entity_set_int(Ent, EV_INT_solid, SOLID_BBOX);
entity_set_int(Ent, EV_INT_movetype, MOVETYPE_FLY);
entity_set_edict(Ent, EV_ENT_owner, id);
VelocityByAim(id, 1000 , Velocity);
entity_set_vector(Ent, EV_VEC_velocity ,Velocity);
}
}
}
}
public fwSpawn_Rakiety(id)
{
if(is_user_alive(id))
ilosc_rakiet_gracza[id] = 1;
}
public DotykRakiety(ent)
{
if (!is_valid_ent(ent))
return;
new attacker = entity_get_edict(ent, EV_ENT_owner);
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_EXPLOSION);
write_coord(iOrigin[0]);
write_coord(iOrigin[1]);
write_coord(iOrigin[2]);
write_short(sprite_blast);
write_byte(32);
write_byte(20);
write_byte(0);
message_end();
new entlist[33];
new numfound = find_sphere_class(ent, "player", 190.0, entlist, 32);
for (new i=0; i < numfound; i++)
{
new pid = entlist[i];
if (!is_user_alive(pid) || get_user_team(attacker) == get_user_team(pid))
continue;
cod_inflict_damage(attacker, pid, 50.0, 0.5, ent, (1<<24));
}
remove_entity(ent);
}
PS. Jeśli możesz to wytłumacz mi jak to przerobić
Edited by Raen, 19.06.2012 22:18.
Gość_21977_* 19.06.2012
Bardzo rzeczowo opisał to R3X.
My zamiast ExecuteHam, użyjemy ExecuteHamB.
Jedyne, co zmieniam, to zamiast linijki
Untitled.sma 4.88KB 105 downloads
My zamiast ExecuteHam, użyjemy ExecuteHamB.
Jedyne, co zmieniam, to zamiast linijki
cod_inflict_damage(attacker, pid, 50.0, 0.5, ent, (1<<24));daję
ExecuteHamB(Ham_TakeDamage, pid, ent, attacker, 50.0, (1<<24));
Untitled.sma 4.88KB 105 downloads
Raen
19.06.2012
Plus dla Ciebie, niestety teraz nie sprawdzę klasy.
Ale i tak dzięki za pomoc.
Ale i tak dzięki za pomoc.
Gość_21977_* 19.06.2012
Ja się ogólnie na CodModzie nie znam, ale w funkcji ' class='bbc_url' title=''>http://amxx.pl/dokumentacja/f332/cod_inflict_damage'] widzę jeszcze parametr Float:czynnik_inteligencji, więc będzie drobna poprawka do wgrania.
edit.
Będzie trzeba dodać do obrażeń (50.0) połowę cod_get_user_intelligence(id) tylko nie wiem jeszcze, z jakimi parametrami (http://amxx.pl/dokum...er-intelligence).
edit.
Po zapoznaniu się z fragmentem dokumentacji codmoda, już wiem, że należy użyć trzech ostatnich parametrów domyślnie, tj. jako jedynek.
Poprawka
W związku z tym, ostatecznie zamienimy linijkę
nie na
lecz na
Poprawione SMA o uwzględnienie punktów inteligencji:
Untitled.sma 4.92KB 95 downloads
Edited by benio101, 19.06.2012 23:08.
uwzględnienie punktów inteligencji atakującego
edit.
Będzie trzeba dodać do obrażeń (50.0) połowę cod_get_user_intelligence(id) tylko nie wiem jeszcze, z jakimi parametrami (http://amxx.pl/dokum...er-intelligence).
edit.
Po zapoznaniu się z fragmentem dokumentacji codmoda, już wiem, że należy użyć trzech ostatnich parametrów domyślnie, tj. jako jedynek.
Poprawka
W związku z tym, ostatecznie zamienimy linijkę
cod_inflict_damage(attacker, pid, 50.0, 0.5, ent, (1<<24));
nie na
ExecuteHamB(Ham_TakeDamage, pid, ent, attacker, 50.0, (1<<24));
lecz na
ExecuteHamB(Ham_TakeDamage, pid, ent, attacker, 50.0+cod_get_user_intelligence(attacker)/2, (1<<24));aby uwzględnić posiadane punkty inteligencji gracza atakującego.
Poprawione SMA o uwzględnienie punktów inteligencji:
Untitled.sma 4.92KB 95 downloads
Edited by benio101, 19.06.2012 23:08.
uwzględnienie punktów inteligencji atakującego
Raen
20.06.2012
50.0+cod_get_user_intelligence(attacker)/2Ten kod ustawia 50 obrazen + 2 pkt w int = 1 dmg?
Popraw mnie jeśli się mylę
Gość_21977_* 20.06.2012
tak
Czwarty parametr był równy 0.5, więc można zarówno pomnożyć inteligencję przez pół, jak i podzielić ją przez 2.
Tak więc mamy 50 pkt obrażeń podstawowych zawsze plus kolejny punkt obrażeń za każde 2 punkty inteligencji.
cod_inflict_damage(attacker, pid, 50.0, 0.5, ent, (1<<24));
Czwarty parametr był równy 0.5, więc można zarówno pomnożyć inteligencję przez pół, jak i podzielić ją przez 2.
Tak więc mamy 50 pkt obrażeń podstawowych zawsze plus kolejny punkt obrażeń za każde 2 punkty inteligencji.
Gość_21977_* 20.06.2012
Wiadomość wygenerowana automatycznie
Ten temat został zamknięty przez moderatora.
Powód: Pomoc udzielona
Jeśli się z tym nie zgadzasz, raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.
Z pozdrowieniami,
Zespół AMXX.PL
Ten temat został zamknięty przez moderatora.
Powód: Pomoc udzielona
Jeśli się z tym nie zgadzasz, raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.
Z pozdrowieniami,
Zespół AMXX.PL