←  Poradniki oraz Łatki

AMXX.pl: Support AMX Mod X i SourceMod

»

Fix
[5.9l] Fireball - wybuchanie na respie, itp.

  • +
  • -
sebul - zdjęcie sebul 28.08.2011

W standardzie fb ma to do siebie, że wybucha na respie, moście (na aztecu) czy też na bsie. W temacie dowiecie się jak temu zaradzić ;]

Znajdź całą funckję
Spoiler

zamień na
Spoiler

Przy okazji możecie też usunąć linijkę z
register_think("PowerUp","Think_PowerUp")

bo nie zauważyłem, żeby ona do czegoś służyła...

Kod poprawiony, teraz fb nie wybucha przy zwłokach.
Odpowiedz

  • +
  • -
QnshT - zdjęcie QnshT 09.09.2011

ten fix nie dziala jak nalezy... fireball ciagle rozbija sie "respa"...
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 09.09.2011

Jaka mapa i który resp? Bo fix działa tylko na byty (chyba tak to się nazywa ^ ^), które podane są w warunku, jeśli na respie jest jeszcze coś, to wtedy fb będzie wybuchać.
Odpowiedz

  • +
  • -
dog_1 - zdjęcie dog_1 09.09.2011

Tak dla upewnienia pana i innych, ten poprawiony kod na fireball działa poprawnie :)
+ za pracę sebula
Użytkownik dog_1 edytował ten post 09.09.2011 17:33
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 09.09.2011

nie sprawdzaj klasy tylko (solid == SOLID_TRIGGER) i wszędzie będzie działać
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 09.09.2011

Ale wtedy nie będzie chyba wybuchać na ścianie...? Czy ściana to zupełnie co innego?
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 09.09.2011

wszystkie byty, które powstrzymują graczy (nie da się przejść) na pewno mają inną wartość pev_solid niż SOLID_TRIGGER
Odpowiedz

  • +
  • -
QnshT - zdjęcie QnshT 10.09.2011

Tak dla upewnienia pana i innych, ten poprawiony kod na fireball działa poprawnie :)
+ za pracę sebula


polecam w takim razie odpalic mape cs_estate i uzyj najpierw FB na respie a nastepnie wyjdz z respa CT i strzel w przerwe miedzy scianami... Jaki efekt? nadal utrzymujesz swoje zdanie?
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 10.09.2011

A może przeczytałbyś mój post to byś się dowiedział czemu może się tak dziać, bo kod działa, ale tak jak pisałem, na niektórych mapkach na respie może znajdować się jeszcze jakiś inny byt i wtedy fb będzie wybuchać. Na tą chwilę domyślam się, że chodzi tutaj o obszar, gdzie doprowadza się zakładników, nie wiem jak on się nazywa, ale mogę to sprawdzić, chyba że ktoś wie, to od razu się tą nazwę doda do warunku.
Odpowiedz

  • +
  • -
Dimni - zdjęcie Dimni 10.09.2011

Hosty: func_hostage_rescue , info_hostage_rescue
VIP (mapki as_ ) info_vip_start , func_vip_safetyzone
Mapki es_ (?) func_escapezone
Może także (ale głowy nie dam) - env_fog , env_rain , env_snow
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 10.09.2011

Dodane, później może zrobię to tak jak R3X napisał.
Odpowiedz

  • +
  • -
QnshT - zdjęcie QnshT 11.09.2011

czyli generalnie mowimy tutaj o pół-fixie bo nie bedzie dzialac na kazdej mapie cs_ oraz jesli dobrze mysle to na czesci map de_ , jednym slowem tylko procent map zostanie odbugowanych ;)
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 11.09.2011

Teraz będzie działać na każdej mapie cs, warunek został poprawiony.
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 11.09.2011

Nie rozumiem co za problem zmienić warunek na proste porównanie dwóch liczb
pev(ent, pev_solid) == SOLID_TRIGGER
nawet jak już się tak upierasz przy klasach to użyj drzewa Trie: ,ale błagam tylko nie ta seria equal`i :stop:
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 11.09.2011

Jest seria equali, bo na początku było tego mało, ale potem okazało się, że jednak takich bytów jest więcej, a nie będę teraz tego zamieniał na "pev(ent, pev_solid) == SOLID_TRIGGER", bo nie chce mi się testować, jak przetestuje i będzie ok, to wtedy pierwszy post zostanie poprawiony.
Odpowiedz

  • +
  • -
::Gogiel:: - zdjęcie ::Gogiel:: 29.09.2011

Sebul a wiesz jakby to wyglądało przy takiej funkcji ??

public pfn_touch ( ptr, ptd )
{
if (ptd == 0)
return PLUGIN_CONTINUE

new szClassName[32]
if(pev_valid(ptd)){
entity_get_string(ptd, EV_SZ_classname, szClassName, 31)
}
else return PLUGIN_HANDLED

if(equal(szClassName, "fireball"))
{
new owner = pev(ptd,pev_owner)
//Touch
if (get_user_team(owner) != get_user_team(ptr))
{
new Float:origin[3]
pev(ptd,pev_origin,origin)
Explode_Origin(owner,origin,55+player_intelligence[owner],150)
remove_entity(ptd)
}
}

if (ptr != 0 && pev_valid(ptr))
{
new szClassNameOther[32]
entity_get_string(ptr, EV_SZ_classname, szClassNameOther, 31)
if(equal(szClassName, "paczka") && equal(szClassNameOther, "player"))
{
new Float:origin[3],exppak
exppak = random_num(250,500) ///////// ile expa za paczke

pev(ptd,pev_origin,origin)
Give_Xp(ptr,exppak)
ColorChat(ptr, GREEN, "Dostales ^x04 %i^x01 expa",exppak)
emit_sound (ptr, 0, "diablosound/paczka.wav", 0.25, 0.8,0, 100 )
remove_entity(ptd)
}


if(equal(szClassName, "PowerUp") && equal(szClassNameOther, "player"))
{
entity_set_int(ptd,EV_INT_iuser2,1)
}

if(equal(szClassName, "Mine") && equal(szClassNameOther, "player"))
{
new owner = pev(ptd,pev_owner)
//Touch
if (get_user_team(owner) != get_user_team(ptr))
{
new Float:origin[3]
pev(ptd,pev_origin,origin)
Explode_Origin(owner,origin,55+player_intelligence[owner],150)
remove_entity(ptd)
}
}


if(equal(szClassName, "grenade") && equal(szClassNameOther, "player"))
{
new greModel[64]
entity_get_string(ptd, EV_SZ_model, greModel, 63)

if(equali(greModel, "models/w_smokegrenade.mdl" ))
{
new id = entity_get_edict(ptd,EV_ENT_owner)

if (is_user_connected(id)
&& is_user_connected(ptr)
&& is_user_alive(ptr)
&& player_b_smokehit[id] > 0
&& get_user_team(id) != get_user_team(ptr))
UTIL_Kill(id,ptr,"grenade")
}


}

}


/*if(equal(szClassName, "fireball"))
{
new Float:origin[3]
pev(ptd,pev_origin,origin)
new id = pev(ptd,pev_owner)
Explode_Origin(id,origin,100,player_b_fireball[id] + player_intelligence[id])
remove_entity(ptd)
}*/


return PLUGIN_CONTINUE
}
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 30.09.2011

Kod poprawiony.
Co do pytania wyżej, to wystarczy trochę pomyśleć
public pfn_touch(ptr, ptd) {
if(!ptd)
return PLUGIN_CONTINUE;

if(!pev_valid(ptd))
return PLUGIN_HANDLED;

new szClassName[32], szClassNameOther[32];
entity_get_string(ptd, EV_SZ_classname, szClassName, 31);

if(ptr && pev_valid(ptr)) {
entity_get_string(ptr, EV_SZ_classname, szClassNameOther, 31);

if(pev(ptr, pev_solid) == SOLID_TRIGGER)
return PLUGIN_CONTINUE;
}

if(equal(szClassName, "fireball"))
{
new owner = pev(ptd,pev_owner)
//Touch
if(get_user_team(owner) != get_user_team(ptr)) {
new Float:origin[3]
pev(ptd,pev_origin,origin)
Explode_Origin(owner,origin,55+player_intelligence[owner],150);
remove_entity(ptd)
}
}

if(equal(szClassNameOther, "player")) {
if(equal(szClassName, "paczka")) {
new Float:origin[3],exppak
exppak = random_num(250,500) ///////// ile expa za paczke

pev(ptd,pev_origin,origin)
Give_Xp(ptr,exppak)
ColorChat(ptr, GREEN, "Dostales ^x04 %i^x01 expa",exppak)
emit_sound (ptr, 0, "diablosound/paczka.wav", 0.25, 0.8,0, 100 )
remove_entity(ptd)
}
else if(equal(szClassName, "Mine")) {
new owner = pev(ptd, pev_owner);
//Touch
if(get_user_team(owner) != get_user_team(ptr)) {
new Float:origin[3];
pev(ptd, pev_origin, origin);
Explode_Origin(owner,origin,55+player_intelligence[owner],150);
remove_entity(ptd);
}
}
else if(equal(szClassName, "grenade")) {
new greModel[64];
entity_get_string(ptd, EV_SZ_model, greModel, 63);

if(equali(greModel, "models/w_smokegrenade.mdl")) {
new id = entity_get_edict(ptd, EV_ENT_owner);

if(is_user_connected(id) && is_user_alive(ptr)
&& player_b_smokehit[id] > 0 && get_user_team(id) != get_user_team(ptr))
UTIL_Kill(id, ptr, "grenade");
}
}
}

return PLUGIN_CONTINUE;
}

Użytkownik sebul edytował ten post 30.09.2011 18:47
Odpowiedz