Skocz do zawartości

  • Zaloguj korzystając z Facebooka Zaloguj korzystając z Twittera Zaloguj przez Steam Zaloguj poprzez Google      Logowanie »   
  • Rejestracja

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.

  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Gotowe funkcjefakemeta_util


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
4 odpowiedzi w tym temacie

#1 Ortega

    mów mi Orti

  • Power User

Reputacja: 361
Wszechpomocny

  • Postów:640
  • GG:
  • Steam:steam
  • Imię:Marcin
  • Lokalizacja:Sosnowiec
Offline

Napisano 01.08.2010 11:21

*
Popularny

Pomyślałem, że wielu się to przyda, a mianowicie chodzi mi o inl fakemeta_util. Zawiera on pełno przydatnych stocków problem w tym, że nie wielu o tym wie. Postaram się objaśnić jak najwięcej.

Dla przypomnienia wszystko jest oparte na bibliotece fakmeta. W util istnieje również kilkadziesiąt niepotrzebnych macro które wykorzystują engine/core dlatego są wykomentowane (to dla ciekawskich).

Usuwa wszystkie byty o określonej nazwie
stock fm_remove_entity_name(const classname[]) {
new ent = -1, num = 0;
while ((ent = fm_find_ent_by_class(ent, classname)))
num += fm_remove_entity(ent);

return num;
}

Uyżycie:
fm_remove_entity_name("info_player_start");


Ustawia renderowanie dla danego bytu
stock fm_set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16) {
new Float:RenderColor[3];
RenderColor[0] = float®;
RenderColor[1] = float(g);
RenderColor[2] = float(b);

set_pev(entity, pev_renderfx, fx);
set_pev(entity, pev_rendercolor, RenderColor);
set_pev(entity, pev_rendermode, render);
set_pev(entity, pev_renderamt, float(amount));

return 1;
}

Użycie:
fm_set_rendering(jakis_ent, kRenderFXNone, RED, GREEN, BLUE, kRenderNormal, STOPIEN(0-255));

+opcje renderowania:
kRenderNormal = 0, /* src */
kRenderTransColor, /* c*a+dest*(1-a) */
kRenderTransTexture, /* src*a+dest*(1-a) */
kRenderGlow, /* src*a+dest -- No Z buffer checks */
kRenderTransAlpha, /* src*srca+dest*(1-srca) */
kRenderTransAdd, /* src*a+dest */

+efekty renderowania:
kRenderFxNone = 0,
kRenderFxPulseSlow,
kRenderFxPulseFast,
kRenderFxPulseSlowWide,
kRenderFxPulseFastWide,
kRenderFxFadeSlow,
kRenderFxFadeFast,
kRenderFxSolidSlow,
kRenderFxSolidFast,
kRenderFxStrobeSlow,
kRenderFxStrobeFast,
kRenderFxStrobeFaster,
kRenderFxFlickerSlow,
kRenderFxFlickerFast,
kRenderFxNoDissipation,
kRenderFxDistort, /* Distort/scale/translate flicker */
kRenderFxHologram, /* kRenderFxDistort + distance fade */
kRenderFxDeadPlayer, /* kRenderAmt is the player index */
kRenderFxExplode, /* Scale up really big! */
kRenderFxGlowShell, /* Glowing Shell */
kRenderFxClampMinScale, /* Keep this sprite from getting very small (SPRITES only!) */
// amxmodx.org //

Ustawia czy byt ma być widzialny
stock fm_set_entity_visibility(index, visible = 1) {
set_pev(index, pev_effects, visible == 1 ? pev(index, pev_effects) & ~EF_NODRAW : pev(index, pev_effects) | EF_NODRAW);

return 1;
}

Użycie:
fm_set_entity_visibility(id, 0); // byt będzie niewidzialny


Ustawia bytowi prędkość
stock fm_set_user_velocity(entity, const Float:vector[3]) {
set_pev(entity, pev_velocity, vector);

return 1;
}

Użycie:
fm_set_user_velocity(ent, vector[3]); // polecam najpierw go pobrać, a potem zmieniać ;)


#define fm_get_user_velocity(%1,%2) pev(%1, pev_velocity, %2)
stock fm_get_user_velocity(entity, Float:vector[3])
return pev(entity, pev_velocity, vector)

Można go pobrać bez tego funkcją z core get_user_velocity albo samym pev tym co wyżej, bo to co dałem jest tylko maco z użyciem fakemeta do fakemeta ? -_-

Sprawdza czy byt ma tryb god
stock fm_get_user_godmode(index) {
new Float:val;
pev(index, pev_takedamage, val);

return (val == DAMAGE_NO);
}

Użycie:
fm_get_user_godmode(id);


Ustawia bytowi godmode
stock fm_set_user_godmode(index, godmode = 0) {
set_pev(index, pev_takedamage, godmode == 1 ? DAMAGE_NO : DAMAGE_AIM);

return 1;
}

Użycie:
fm_set_user_godmode(id, 1); // 0 = off


Ustawia graczowi ilość kamizelki kuloodpornej ;)
stock fm_set_user_armor(index, armor) {
set_pev(index, pev_armorvalue, float(armor));

return 1;
}

Użycie:
fm_set_user_armor(id, 200); // podejrzewam ze maksymalna ilość WYŚWIETLANA w hud to 999, natomiast wszystko jest tak jak z życiem


Ustawia graczowi ilość życia
stock fm_set_user_health(index, health) {
health > 0 ? set_pev(index, pev_health, float(health)) : dllfunc(DLLFunc_ClientKill, index);

return 1;
}

Użycie:
fm_set_user_health(id, 150); // 0 wywoła smierć, do 255 będzie wyświetlane w hud, powyżej będzie ale nie wyświetlane przez hud gracza


Ustawia origin gracza
stock fm_set_user_origin(index, origin[3]) {
new Float:orig[3];
IVecFVec(origin, orig);

return fm_entity_set_origin(index, orig);
}

Użycie:
fm_set_user_origin(id, jakis_origin[3]);

Ustawia graczowi tryb i efekt renderowania( patrzcie wyżej po opcje i uzycie ) //funkcja trochę bezsensowna
stock fm_set_user_rendering(index, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16) {
return fm_set_rendering(index, fx, r, g, b, render, amount);
}


Daje graczowi przedmiot (np. HE)
stock fm_give_item(index, const item[]) {
if (!equal(item, "weapon_", 7) && !equal(item, "ammo_", 5) && !equal(item, "item_", 5) && !equal(item, "tf_weapon_", 10))
return 0;

new ent = fm_create_entity(item);
if (!pev_valid(ent))
return 0;

new Float:origin[3];
pev(index, pev_origin, origin);
set_pev(ent, pev_origin, origin);
set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN);
dllfunc(DLLFunc_Spawn, ent);

new save = pev(ent, pev_solid);
dllfunc(DLLFunc_Touch, ent, index);
if (pev(ent, pev_solid) != save)
return ent;

engfunc(EngFunc_RemoveEntity, ent);

return -1;
}
Użycie:
fm_give_item(id, "weapon_smokegrenade");


Ustawia graczowi szybkość biegu
stock fm_set_user_maxspeed(index, Float:speed = -1.0) {
engfunc(EngFunc_SetClientMaxspeed, index, speed);
set_pev(index, pev_maxspeed, speed);

return 1;
}

Użycie:
fm_set_user_maxspeed(id, 350.0); // ustawi to graczowi szybkość 350


Zwraca szybkość gracza
stock Float:fm_get_user_maxspeed(index) {
new Float:speed;
pev(index, pev_maxspeed, speed);

return speed;
}

Użycie:
fm_get_user_maxspeed(id);
//if(speed == 200.0) coś tam


Ustawia graczowi grawitację
stock fm_set_user_gravity(index, Float:gravity = 1.0) {
set_pev(index, pev_gravity, gravity);

return 1;
}

Użycie:
fm_set_user_gravity(id, 400.0);


Pobiera grawitację gracza
stock Float:fm_get_user_gravity(index) {
new Float:gravity;
pev(index, pev_gravity, gravity);

return gravity;
}

Użycie:
fm_get_user_gravity(id);
//if(gravity == 400.0) coś tam


Ustawia graczowi tryb noclip
stock fm_set_user_noclip(index, noclip = 0) {
set_pev(index, pev_movetype, noclip == 1 ? MOVETYPE_NOCLIP : MOVETYPE_WALK);

return 1;
}

Użycie:
fm_set_user_noclip(id , 1); // 0 = reset


Ustawia graczowi fragi
stock fm_set_user_frags(index, frags) {
set_pev(index, pev_frags, float(frags));

return 1;
}

Użycie:
fm_set_user_frags(id, 5);


Spawnuje gracza
stock fm_cs_user_spawn(index) {
set_pev(index, pev_deadflag, DEAD_RESPAWNABLE);
dllfunc(DLLFunc_Spawn, index);
set_pev(index, pev_iuser1, 0);

return 1;
}

Użycie:
fm_cs_user_spawn(id);


Ustawia właściwości bytu
stock fm_set_kvd(entity, const key[], const value[], const classname[] = "") {
if (classname[0])
set_kvd(0, KV_ClassName, classname);
else {
new class[32];
pev(entity, pev_classname, class, sizeof class - 1);
set_kvd(0, KV_ClassName, class);
}

set_kvd(0, KV_KeyName, key);
set_kvd(0, KV_Value, value);
set_kvd(0, KV_fHandled, 0);

return dllfunc(DLLFunc_KeyValue, entity, 0);
}

Użycie:
fm_set_kvd(ent, "dmg", "255", "jakis_byt");


Zabija( haha ) byt !! Nie zabijać tym bytów broni bo może wystąpic crash !!
stock fm_kill_entity(index) {
set_pev(index, pev_flags, pev(index, pev_flags) | FL_KILLME);

return 1;
}

Użycie:
fm_kill_entity(Ent_id);


Zwraca fałsz kiedy byt nie jest widoczny
stock bool:fm_is_ent_visible(index, entity, ignoremonsters = 0) {
new Float:start[3], Float:dest[3];
pev(index, pev_origin, start);
pev(index, pev_view_ofs, dest);
xs_vec_add(start, dest, start);

pev(entity, pev_origin, dest);
engfunc(EngFunc_TraceLine, start, dest, ignoremonsters, index, 0);

new Float:fraction;
get_tr2(0, TR_flFraction, fraction);
if (fraction == 1.0 || get_tr2(0, TR_pHit) == entity)
return true;

return false;
}

Uzycie:
fm_is_ent_visible(id, ent, 1);
// if(fm_is_ent_visible(id, ent, 1) == true)
// coś tam


Zwraca prawdę jeśli gracz posiada longjump
stock bool:fm_get_user_longjump(index) {
new value[2];
engfunc(EngFunc_GetPhysicsKeyValue, index, "slj", value, 1);
switch (value[0]) {
case '1': return true;
}

return false;
}

Użycie:
fm_get_user_longjump(id);


Sprawdza czy byt jest równy nazwie (true or false)
stock bool:fm_is_ent_classname(index, const classname[]) {
if (!pev_valid(index))
return false;

new class[32];
pev(index, pev_classname, class, sizeof class - 1);
if (equal(class, classname))
return true;

return false;
}

Użycie:
fm_is_ent_classname(id, "jakas_nazwa");


Zabija gracza, zawiera naprawienie bugu z tablica wyników
[sma]stock fm_user_kill(index, flag = 0) {
if (flag) {
new Float:frags;
pev(index, pev_frags, frags);
set_pev(index, pev_frags, ++frags);
}

dllfunc(DLLFunc_ClientKill, index);

return 1;
}

Użycie:
[sma]fm_user_kill(id, 1);


Może się komuś przyda ;) Aha , no i zamiast implementować całego fakemeta_util można dodawać do swoich pluginów wybrane stocki, ale należy pamietać żeby dołączyć <fakemeta>.
  • +
  • -
  • 10

#2 Vertricus

    Godlike

  • Przyjaciel

Reputacja: 426
Wszechobecny

  • Postów:1549
  • Lokalizacja:.
Offline

Napisano 03.08.2010 22:56

no i zamiast implementować całego fakemeta_util można dodawać do swoich pluginów wybrane stocki

stock jak nie użyty to nie ma go w kodzie ;] więc to bez różnicy czy include czy tylko stocki ;]

Ad. samych stocków, znacznie optymalniejsze jest użycie fun np. w przypadku give_item :kwiaty:
  • +
  • -
  • 0

#3 R3X

    Godlike

  • Przyjaciel

Reputacja: 2960
Godlike

  • Postów:4247
  • Lokalizacja:Nie
Offline

Napisano 03.08.2010 23:07

jeśli jest wybór między natywną funkcji z modułu a stockiem robiącymi to samo to zawsze szybsze będzie użycie natywu, to różnica pomiędzy C++ a Pawnem - Pawn jest realizowany za pomocą C++, więc podwójna robota zamienić go na C++ i wykonać, zamiast tylko wykonać w przypadku natywnej funkcji
  • +
  • -
  • 0

#4 camilost

    ^ BotQ - STER.owiec ^

  • Power User

Reputacja: 430
Wszechobecny

  • Postów:968
  • GG:
  • Steam:steam
  • Imię:Kamil
  • Lokalizacja:Tychy
Offline

Napisano 03.08.2010 23:50

Prosiłbym o jakiś prosty opis co robią efekty renderu (Tam gdzie ... to prędkość - to wiem ; D):
kRenderFxStrobe...
kRenderFxFlicker...
kRenderFxNoDissipation
kRenderFxDistort
kRenderFxHologram
kRenderFxDeadPlayer
kRenderFxExplode
kRenderFxClampMinScale
Oczywiście po PL, bo z tych niektórych po ENG to tylko 2 rozumuję :D
  • +
  • -
  • 0

#5 Nakupenda.

    Not yet YODA

  • Użytkownik

Reputacja: 136
Zaawansowany

  • Postów:451
  • Imię:Paweł
  • Lokalizacja:Warszawa
Offline

Napisano 18.11.2011 21:31

zasadnicze pytanie:

1. to działa z tego co wiem:

new Float:vec[3];
get_user_origin ( id, vec);
vec[2] += 50;


więc teraz lepiej to, czy to?

fm_set_user_origin(id,vec[3]);

lub

pev( ent_id, pev_origin, vec );

  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych