←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

CoD Nowy
Problem z perkiem termowizja

  • +
  • -
Kaleka's Photo Kaleka 19.11.2011

Witam mam problem z perkiem.
Udało mi się go zrobić, jednak każdy miał "Termowizje" bez wgłędu czy miał perka czy nie, więc dodałem ma_perk i teraz osoba która posiada perka nie otrzymuje mocy termowizji. Cóż żem źle zrobił :lol: ?

Perk:
#include <amxmodx>
#include <hamsandwich>
#include <engine>
#include <codmod>
#include <xs>

new sprite_playerheat

new const perk_name[] = "Termowizja";
new const perk_desc[] = "Widzisz graczy przez sciany w zasiegu 3000";


new bool:ma_perk[33];

public plugin_init()
{
register_plugin(perk_name, "1.0", "Zielony Smerf");

cod_register_perk(perk_name, perk_desc);

register_event("ResetHUD", "ResetHUD", "abe");

set_task(0.1, "sprawdz", 0, "", 0, "b")
set_task(0.1, "ResetHUD", 0, "", 0, "b")
}
public plugin_precache()
{
sprite_playerheat = precache_model("sprites/poison.spr");
}

public cod_perk_enabled(id)
{
ma_perk[id] = true;
return COD_CONTINUE;
}

public cod_perk_disabled(id)
ma_perk[id] = false;

public sprawdz(id)
{

new Players[32], playerCount, a
get_players(Players, playerCount, "ah")

if(ma_perk[id])

for (new i=0; i<playerCount; i++)
{
a = Players[i]
Predator_ThermalGoggles(a)

}

}

public Predator_ThermalGoggles(id) {



new Float:fMyOrigin[3]
entity_get_vector(id, EV_VEC_origin, fMyOrigin)

static Players[32], iNum
get_players(Players, iNum, "a")
for(new i = 0; i < iNum; ++i) if(id != Players[i])
{
if(get_user_team(id) == get_user_team(Players[i])) continue;
new target = Players[i]

new Float:fTargetOrigin[3]
entity_get_vector(target, EV_VEC_origin, fTargetOrigin)

if((get_distance_f(fMyOrigin, fTargetOrigin) >3000)
|| !is_in_viewcone(id, fTargetOrigin))
continue

new Float:fMiddle[3], Float:fHitPoint[3]
xs_vec_sub(fTargetOrigin, fMyOrigin, fMiddle)
trace_line(-1, fMyOrigin, fTargetOrigin, fHitPoint)

new Float:fWallOffset[3], Float:fDistanceToWall
fDistanceToWall = vector_distance(fMyOrigin, fHitPoint) - 10.0
normalize(fMiddle, fWallOffset, fDistanceToWall)

new Float:fSpriteOffset[3]
xs_vec_add(fWallOffset, fMyOrigin, fSpriteOffset)
new Float:fScale, Float:fDistanceToTarget = vector_distance(fMyOrigin, fTargetOrigin)
if(fDistanceToWall > 100.0)
fScale = 8.0 * (fDistanceToWall / fDistanceToTarget)
else
fScale = 2.0

te_sprite(id, fSpriteOffset, sprite_playerheat, floatround(fScale), 125)
}
return PLUGIN_CONTINUE

}

stock te_sprite(id, Float:origin[3], sprite, scale, brightness)
{
message_begin(MSG_ONE, SVC_TEMPENTITY, _, id)
write_byte(TE_SPRITE)
write_coord(floatround(origin[0]))
write_coord(floatround(origin[1]))
write_coord(floatround(origin[2]))
write_short(sprite)
write_byte(scale)
write_byte(brightness)
message_end()
}

stock normalize(Float:fIn[3], Float:fOut[3], Float:fMul)
{
new Float:fLen = xs_vec_len(fIn)
xs_vec_copy(fIn, fOut)

fOut[0] /= fLen, fOut[1] /= fLen, fOut[2] /= fLen
fOut[0] *= fMul, fOut[1] *= fMul, fOut[2] *= fMul
}

public ResetHUD(id)
{
if(ma_perk[id])
Predator_ThermalGoggles(id);
}

Quote

  • +
  • -
radim's Photo radim 19.11.2011

Delete:
return COD_CONTINUE;
Quote

  • +
  • -
Kaleka's Photo Kaleka 20.11.2011

Niestety nadal nie działa
Aktualnie perk wygląda tak:
Spoiler


Odswieżam
Quote

  • +
  • -
Na 5tyk's Photo Na 5tyk 20.11.2011


public sprawdz(id)
{

new Players[32], playerCount, a
get_players(Players, playerCount, "ah")

if(ma_perk[id])
{
for (new i=0; i<playerCount; i++)
{
a = Players[i]
Predator_ThermalGoggles(a)

}
}
}


Podmień tą funkcję.
Quote