←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

CoD Stary
[ROZWIĄZANE] Działo - przesłanie natywem i...

  • +
  • -
Sniper Elite's Photo Sniper Elite 01.07.2012

Witam.
Mam działo przy klasie i nie wiem jak dodać do niej inteligencje, która zwiększy właściwości działka.
Natyw już przesłałem, ale nie wiem do jakiego id się odwołać w dodawaniu hp, obrażeń i szybkości stawiania działa.

Niżej podaję sma działka.

Dzięki za pomoc.

Attached Files


Edited by Sniper Elite, 01.07.2012 07:06.
Quote

xstrime's Photo xstrime 01.07.2012

hp, obrażeń


 pcvarHealth = register_cvar("inzynier_health","200")
pcvarDamage = register_cvar("inzynier_damage","10.0");
Quote

  • +
  • -
Sniper Elite's Photo Sniper Elite 01.07.2012

Tyle wiem, ale chodzi mi jak to dodać do odpowiednich funkcji (jak w nich się odwołać do odpowiedniego id).
Quote

  • +
  • -
d0naciak's Photo d0naciak 01.07.2012

Nad plugin_init() dodajesz
native ma_dzialko(id,flaga,int);

do publica Spawn(id) do if(nowa_klasa_gracza[id]) dodajesz
ma_dzialko(id, 0);

do switch(klasa_gracza[id]) do case klasy dodajesz (tam gdzie bronie)
ma_dzialko(id, 1, 100); //to tylko przyklad, wartosci mozna zmienic

Edited by d0n tHe Pr0oo, 01.07.2012 08:07.
Quote

  • +
  • -
Sniper Elite's Photo Sniper Elite 01.07.2012

pobieram z coda wartość inteligencji gracza, ktorego jest dzialo.

public stawdzialo2(ent)
{
new Float:origin[3];
pev(ent,pev_origin,origin);
new sentry_shot2 = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"func_breakable"))
if (!sentry_shot2)
{
return 0
}
new szHealth[16]
get_pcvar_string(pcvarHealth + inteligencja_gracza[ent]*2,szHealth,charsmax(szHealth))

fm_set_kvd(sentry_shot2, "health", szHealth, "func_breakable")
fm_set_kvd(sentry_shot2, "material", "6", "func_breakable")
fm_DispatchSpawn(sentry_shot2)

set_pev(sentry_shot2, pev_classname, "sentry_shot")

engfunc(EngFunc_SetModel, sentry_shot2, "models/sentry2.mdl")
engfunc(EngFunc_SetSize, sentry_shot2, {-16.0, -16.0, 0.0}, {16.0, 16.0, 20.0})
origin[2] += 25.0;
engfunc(EngFunc_SetOrigin, sentry_shot2, origin)
new Float:fAngle[3];
pev(pev(ent,pev_iuser1), pev_v_angle, fAngle)
fAngle[0] = 0.0
fAngle[1] += 180.0
fAngle[2] = 0.0
set_pev(sentry_shot2, pev_angles, fAngle)
set_pev(sentry_shot2, pev_solid, SOLID_BBOX)
set_pev(sentry_shot2, pev_movetype, MOVETYPE_TOSS)
set_pev(sentry_shot2, pev_iuser1, pev(ent,pev_iuser1))
set_pev(sentry_shot2, pev_iuser2, ent)

set_pev( sentry_shot2, pev_sequence, 0 );
set_pev( sentry_shot2, pev_animtime, get_gametime() );
set_pev( sentry_shot2, pev_framerate, 1.0 );

set_pev(sentry_shot2, pev_nextthink, get_gametime() + SENTRY_THINK)
return sentry_shot2;
}

Jakie tu wpisać pobrac id, gracza, ktory stawia dzialko, aby mogl uzaleznic hp od inteligencji.
I w którym miejscu te inteligencje dodac.


public sentry_shot3(ent,target)
{
new Float:sentryOrigin[3], Float:targetOrigin[3], Float:hitOrigin[3]
pev(ent, pev_origin, sentryOrigin)
sentryOrigin[2] += 18.0
pev(target, pev_origin, targetOrigin)
targetOrigin[0] += random_float(-16.0, 16.0)
targetOrigin[1] += random_float(-16.0, 16.0)
targetOrigin[2] += random_float(-16.0, 16.0)
new hit = fm_trace_line(ent, sentryOrigin, targetOrigin, hitOrigin)
if(hit == target)
{
knockback_explode(target, sentryOrigin, 5.0)
new Float:dam = get_pcvar_float(pcvarDamage) + float(inteligencja_gracza[ent])/10
ExecuteHam(Ham_TakeDamage, target, 0, pev(ent,pev_iuser1), dam, 1);
set_pev( ent, pev_sequence, 1 );
set_pev( ent, pev_animtime, get_gametime() );
set_pev( ent, pev_framerate, 1.0 );
}
FX_Trace(sentryOrigin, hitOrigin)
engfunc(EngFunc_EmitSound, ent, CHAN_STATIC, "sentry_shoot.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
}

To samo tutaj.
Jak pobrać id gracza, którego jest działo, abym mógł dodać jego inteligencje do obrazen.

mam nadzieje, że teraz mnie zrozumiecie.
Edited by Sniper Elite, 01.07.2012 09:09.
Quote

  • +
  • -
dasiek's Photo dasiek 01.07.2012

ExecuteHam(Ham_TakeDamage, target, 0, pev(ent,pev_iuser1), dam+cod_get_int(pev(ent,pev_iuser1)), 1);

Powinno być chyba coś takiego. Ofc jak masz natyw cod_get_int jak się inaczej nazywa to zmień.
Quote

  • +
  • -
Sniper Elite's Photo Sniper Elite 01.07.2012

dmg dziala, dzięki, a jak z tym hp?
Edited by Sniper Elite, 01.07.2012 09:34.
Quote

  • +
  • -
d0naciak's Photo d0naciak 01.07.2012

jezeli hp ustawiasz entowi, to nie potrzebne id gracza, przy obrazeniach jest potrzebne po to, aby plugin wiedział komu naliczyć obrazenia
Quote

  • +
  • -
dasiek's Photo dasiek 01.07.2012

dmg dziala, dzieki, a jak z tym hp?


Co chcesz z Tym hp? Chcesz pobrać HP ownera działka? Samego działka czy co?
Quote

  • +
  • -
Sniper Elite's Photo Sniper Elite 01.07.2012

chcę dodać działkowi hp ustalane cvarem + inteligencja_gracza[id] *2

Ale jak robie tak jak pokazałem to nie działa.
Quote

  • +
  • -
dasiek's Photo dasiek 01.07.2012

fm_set_kvd(sentry_shot2, "health", szHealth+get_int(entity_get_edict(ent, EV_ENT_owner);)/2, "func_breakable")

ja bym to tak spróbował. w public stawdzialo2(ent)
Quote

  • +
  • -
Sniper Elite's Photo Sniper Elite 02.07.2012

fm_set_kvd(sentry_shot2, "health", szHealth + inteligencja_gracza[entity_get_edict(ent, EV_ENT_owner)]*2, "func_breakable")


array must be indexed <variable "szHealth">

O to się czepia teraz.
Quote

  • +
  • -
dasiek's Photo dasiek 02.07.2012

Nie zauważyłęm że szHealth jest tekstem. Cały kod Stawiania działka. Powinno działać.

public stawdzialo2(ent)
{
new Float:origin[3];
pev(ent,pev_origin,origin);
new sentry_shot2 = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"func_breakable"))
if (!sentry_shot2)
{
  return 0
}
new szHealth[16]
get_pcvar_string(pcvarHealth,szHealth,charsmax(szHealth))

new health = pcvarHealth + inteligencja_gracza[entity_get_edict(ent, EV_ENT_owner)];
num_to_str(health,szHealth,15)

fm_set_kvd(sentry_shot2, "health",szHealth , "func_breakable")
fm_set_kvd(sentry_shot2, "material", "6", "func_breakable")
fm_DispatchSpawn(sentry_shot2)

set_pev(sentry_shot2, pev_classname, "sentry_shot")

engfunc(EngFunc_SetModel, sentry_shot2, "models/sentry2.mdl")
engfunc(EngFunc_SetSize, sentry_shot2, {-16.0, -16.0, 0.0}, {16.0, 16.0, 20.0})
origin[2] += 25.0;
engfunc(EngFunc_SetOrigin, sentry_shot2, origin)
new Float:fAngle[3];
pev(pev(ent,pev_iuser1), pev_v_angle, fAngle)
fAngle[0] = 0.0
fAngle[1] += 180.0
fAngle[2] = 0.0
set_pev(sentry_shot2, pev_angles, fAngle)
set_pev(sentry_shot2, pev_solid, SOLID_BBOX)
set_pev(sentry_shot2, pev_movetype, MOVETYPE_TOSS)
set_pev(sentry_shot2, pev_iuser1, pev(ent,pev_iuser1))
set_pev(sentry_shot2, pev_iuser2, ent)

set_pev( sentry_shot2, pev_sequence, 0 );
set_pev( sentry_shot2, pev_animtime, get_gametime() );
set_pev( sentry_shot2, pev_framerate, 1.0 );

set_pev(sentry_shot2, pev_nextthink, get_gametime() + SENTRY_THINK)
return sentry_shot2;
}
Quote

  • +
  • -
Sniper Elite's Photo Sniper Elite 02.07.2012

dzięki miszczu.
Quote

Gość_21977_* 02.07.2012

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, Posted Image raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
Quote

  • +
  • -
Sniper Elite's Photo Sniper Elite 05.07.2012

Witam ponownie.
Jednak to nie działa. Nie da się działka rozwalić jak zrobię tak jak mi podał

CheQ
Quote