Eksplozja po śmierci gracza
alc0
07.09.2011
Mam wszystko zrobione wg. tego poradnika --> http://amxx.pl/topic...cha-po-smierci/ , ale mój problem polega na tym że eksplozja zawsze zabija pobliskich graczy bez względu na ich ilość hp. Czy to jakiś bug lub specyficzna wada w funkcji?
Zauważyłem że kod jest niemal identyczny do funkcji PoluzDynamit(id)...
Ktoś potrafi pomóc, tak to u mnie wygląda:
Zauważyłem że kod jest niemal identyczny do funkcji PoluzDynamit(id)...
Ktoś potrafi pomóc, tak to u mnie wygląda:
public Death() { new id = read_data(2); new attacker = read_data(1); if(!is_user_alive(attacker) || !is_user_connected(attacker)) return PLUGIN_CONTINUE; new weapon = get_user_weapon(attacker); new zdrowie = get_user_health(attacker); if(informacje_przedmiotu_gracza[id][0]) { new zniszcz = random_num(10,30) if(wytrzymalosc_itemu[id] - zniszcz >= 0) { wytrzymalosc_itemu[id] -= zniszcz; } if(wytrzymalosc_itemu[id] - zniszcz > 0) { client_print(id, print_chat, "[CoD] Zniszczenia przedmiotu: %i/100.", wytrzymalosc_itemu[id]); } else { client_print(id, print_chat, "[CoD] Przedmiot: %s, zostal calkowicie zniszczony.", nazwy_przedmiotow[informacje_przedmiotu_gracza[id][0]]); UsunPrzedmiot(id); } } if(klasa_gracza[id] == Ultra || klasa_gracza[id] == Admin) { Eksploduj(id); } if(get_user_team(id) != get_user_team(attacker) && klasa_gracza[attacker]) { new nowe_doswiadczenie = 0; nowe_doswiadczenie += doswiadczenia_za_zabojstwo; if(klasa_gracza[id] == Rambo && klasa_gracza[attacker] != Rambo || klasa_gracza[id] == Admin && klasa_gracza[attacker] != Admin) nowe_doswiadczenie += doswiadczenia_za_zabojstwo*2; if(poziom_gracza[id] > poziom_gracza[attacker]) nowe_doswiadczenie += (poziom_gracza[id] - poziom_gracza[attacker])/2; if(klasa_gracza[attacker] == Rambo || informacje_przedmiotu_gracza[attacker][0] == 15 && maxClip[weapon] != -1) { new nowe_zdrowie = (zdrowie+20<maksymalne_zdrowie_gracza[attacker])? zdrowie+20: maksymalne_zdrowie_gracza[attacker]; set_user_clip(attacker, maxClip[weapon]); set_user_health(attacker, nowe_zdrowie); } #if defined BOTY if(is_user_bot2(attacker) && random(9) == 0) WyrzucPrzedmiot(id); #endif if(!informacje_przedmiotu_gracza[attacker][0]) DajPrzedmiot(attacker, random_num(1, sizeof nazwy_przedmiotow-1)); if(informacje_przedmiotu_gracza[attacker][0] == 14) { new nowe_zdrowie = (zdrowie+50<maksymalne_zdrowie_gracza[attacker])? zdrowie+50: maksymalne_zdrowie_gracza[attacker]; set_user_health(attacker, nowe_zdrowie); } new bonus_doswiadczenie = 50 if(informacje_przedmiotu_gracza[attacker][0] == 31) nowe_doswiadczenie += bonus_doswiadczenie set_hudmessage(80, 0, 255, 0.50, 0.33, 1, 6.0, 4.0); ShowSyncHudMsg(attacker, SyncHudObj2, "+%i", nowe_doswiadczenie); doswiadczenie_gracza[attacker] += nowe_doswiadczenie; } SprawdzPoziom(attacker); if(informacje_przedmiotu_gracza[id][0] == 7 && random_num(1, informacje_przedmiotu_gracza[id][1]) == 1) set_task(0.1, "Wskrzes", id+ZADANIE_WSKRZES); return PLUGIN_CONTINUE; }
public Eksploduj(id) { new Float:fOrigin[3], iOrigin[3]; entity_get_vector( id, EV_VEC_origin, fOrigin); iOrigin[0] = floatround(fOrigin[0]); iOrigin[1] = floatround(fOrigin[1]); iOrigin[2] = floatround(fOrigin[2]); message_begin(MSG_BROADCAST,SVC_TEMPENTITY, iOrigin); write_byte(TE_EXPLOSION); write_coord(iOrigin[0]); write_coord(iOrigin[1]); write_coord(iOrigin[2]); write_short(sprite_blast); write_byte(32); write_byte(20); write_byte(0); message_end(); message_begin( MSG_BROADCAST, SVC_TEMPENTITY, iOrigin ); write_byte( TE_BEAMCYLINDER ); write_coord( iOrigin[0] ); write_coord( iOrigin[1] ); write_coord( iOrigin[2] ); write_coord( iOrigin[0] ); write_coord( iOrigin[1] + 300 ); write_coord( iOrigin[2] + 300 ); write_short( sprite_white ); write_byte( 0 ); // startframe write_byte( 0 ); // framerate write_byte( 10 ); // life write_byte( 10 ); // width write_byte( 255 ); // noise write_byte( 255 ); // r, g, b write_byte( 100 );// r, g, b write_byte( 100 ); // r, g, b write_byte( 128 ); // brightness write_byte( 8 ); // speed message_end(); new entlist[33]; new numfound = find_sphere_class(id, "player", 300.0 , entlist, 32); for (new i=0; i < numfound; i++) { new pid = entlist[i]; if (!is_user_alive(pid) || get_user_team(id) == get_user_team(pid) || informacje_przedmiotu_gracza[pid][0] == 24 || informacje_przedmiotu_gracza[pid][0] == 52 || klasa_gracza[pid] == Admin) continue; ExecuteHam(Ham_TakeDamage, pid, 0, id, 50.0+float(inteligencja_gracza[id]/2), 1); } return PLUGIN_CONTINUE; }
radim
08.09.2011
Zamiast
ExecuteHam(Ham_TakeDamage, pid, 0, id, 50.0+float(inteligencja_gracza[id]/2), 1);spróbuj to:
ExecuteHamB(Ham_TakeDamage, pid, CSW_HEGRENADE, id, 60.0, DMG_BLAST)Tylko ten wybuch teraz nie będzie zależał od inteligencji.
alc0
09.09.2011
Może niech ktoś chociaż podrzuci mi swoje sma. w którym to działa. Oczywiście mowa o starej wersji Cod.
Hajtowy 09.09.2011
Ściągnij sobie QTM_CodMod by Peyote - oryginalna wersja bez przeróbek i tam wszystko działa
alc0
09.09.2011
Ale mi pomogłeś geniuszu... Tak się składa że tam nie ma tej funkcji, a bugów i braków jest więcej niż klas...
Potrzebuje sma w którym działa eksplozja po śmierci.
Potrzebuje sma w którym działa eksplozja po śmierci.