[5.9l] Fireball - wybuchanie na respie, itp.
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ę
zamień na
Przy okazji możecie też usunąć linijkę z
bo nie zauważyłem, żeby ona do czegoś służyła...
Kod poprawiony, teraz fb nie wybucha przy zwłokach.
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.
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ć.
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
+ za pracę sebula
Użytkownik dog_1 edytował ten post 09.09.2011 17:33
R3X
09.09.2011
nie sprawdzaj klasy tylko (solid == SOLID_TRIGGER) i wszędzie będzie działać
sebul
09.09.2011
Ale wtedy nie będzie chyba wybuchać na ścianie...? Czy ściana to zupełnie co innego?
R3X
09.09.2011
wszystkie byty, które powstrzymują graczy (nie da się przejść) na pewno mają inną wartość pev_solid niż SOLID_TRIGGER
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?
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.
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
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
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
R3X
11.09.2011
Nie rozumiem co za problem zmienić warunek na proste porównanie dwóch liczb
pev(ent, pev_solid) == SOLID_TRIGGERnawet jak już się tak upierasz przy klasach to użyj drzewa Trie: ,ale błagam tylko nie ta seria equal`i
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.
::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
}
sebul
30.09.2011
Kod poprawiony.
Co do pytania wyżej, to wystarczy trochę pomyśleć
Użytkownik sebul edytował ten post 30.09.2011 18:47
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