new ghave[33];
public TakeDamage(ent, idinflictor, attacker, Float:damage, damagebits)
{
if(!pev_valid(ent))
{
gMonsterAlive--;
if(gMonsterAlive < 0)
gMonsterAlive=0
if(gMonsterAlive <= 0 && gWave && gStart && gGame)
EndRound()
remove_entity(pev(ent, pev_ent_health));
remove_entity(ent)
return PLUGIN_CONTINUE
}
new classname[32];
entity_get_string(ent, EV_SZ_classname, classname, 31);
if(equal(classname, "monster"))
{
new hp = floatround(entity_get_float(ent, EV_FL_health))
/* Pokazuje zadane obrazenia */
new id = 0
if(is_turret(attacker))
{
id = get_sentry_owner_by_ent_id(attacker)
if(gPlayerDamage[id])
damage+=float(gPlayerNewDamage[id])
}
if(is_turret(attacker))
{
new sentryid = get_sentry_id_by_ent(id, attacker)
if(damagebits & DMG_SLASH && sentryid == 0)
{
set_hudmessage(100, 255, 0, 0.81, 0.27, 0, 6.0, 1.0)
ShowSyncHudMsg(id, gSync9, "W 1: %d", floatround(damage))
}
if(damagebits & DMG_BLAST && sentryid == 1)
{
set_hudmessage(100, 255, 0, 0.81, 0.32, 0, 6.0, 1.0)
ShowSyncHudMsg(id, gSync10, "W 2: %d", floatround(damage))
}
if(damagebits & DMG_BURN && sentryid == 2)
{
set_hudmessage(100, 255, 0, 0.81, 0.37, 0, 6.0, 1.0)
ShowSyncHudMsg(id, gSync11, "W 3: %d", floatround(damage))
}
if(damagebits & DMG_DROWN && sentryid == 3)
{
set_hudmessage(100, 255, 0, 0.81, 0.42, 0, 6.0, 1.0)
ShowSyncHudMsg(id, gSync12, "W 4: %d", floatround(damage))
}
if(MAX_SENTRY > 4 && sentryid >= 4)
{
set_hudmessage(100, 0, 255, 0.81, 0.47, 0, 6.0, 1.0)
ShowSyncHudMsg(id, gSync13, "O: %d", floatround(damage))
}
}
else
{
ghave[attacker]++
if(ghave[attacker] == 1)
{
set_hudmessage(0, 255, 0, 0.55, 0.465, 0, 0.0, 1.0, 0.0, 0.2, 1)
ShowSyncHudMsg(attacker, gSync5, "%d", floatround(damage))
}
if(ghave[attacker] == 2)
{
set_hudmessage(0, 255, 0, 0.55, 0.5, 0, 0.0, 1.0, 0.0, 0.2, 2)
ShowSyncHudMsg(attacker, gSync5, "%d", floatround(damage))
}
if(ghave[attacker] == 3)
{
set_hudmessage(0, 255, 0, 0.55, 0.535, 0, 0.0, 1.0, 0.0, 0.2, 3)
ShowSyncHudMsg(attacker, gSync5, "%d", floatround(damage))
}
if(ghave[attacker] == 4)
{
set_hudmessage(0, 255, 0, 0.55, 0.57, 0, 0.0, 1.0, 0.0, 0.2, 4)
ShowSyncHudMsg(attacker, gSync5, "%d", floatround(damage))
}
if(ghave[attacker] == 5)
{
set_hudmessage(0, 255, 0, 0.55, 0.605, 0, 0.0, 1.0, 0.0, 0.2, 1)
ShowSyncHudMsg(attacker, gSync5, "%d", floatround(damage))
ghave[attacker] = 0
}
}
/* -- */
static Float:fOrigin[3]
static Origin[3]
pev(ent, pev_origin, fOrigin)
Origin[0] = floatround(fOrigin[0])
Origin[1] = floatround(fOrigin[1])
Origin[2] = floatround(fOrigin[2])
static Color[33][3] ;
Color[id?id:attacker][0] = gPlayerAttackColorValue[id?id:attacker][0]
Color[id?id:attacker][1] = gPlayerAttackColorValue[id?id:attacker][1]
Color[id?id:attacker][2] = gPlayerAttackColorValue[id?id:attacker][2]
msg_dlight(Origin, 10, Color[id?id:attacker], 3, 1)
if(hp <= floatround(damage) && pev_valid(ent))
{
gMonsterAlive--;
if(gMonsterAlive < 0)
gMonsterAlive=0
if(gMonsterAlive <= 0 && gWave && gStart && gGame)
EndRound()
if(pev_valid(ent))
remove_entity(pev(ent, pev_ent_health));
if(is_user_alive(id?id:attacker))
{
gPlayerPoints[id?id:attacker]+=get_pcvar_num(cvar_points_kill)
cs_set_user_money(id?id:attacker, cs_get_user_money(id?id:attacker)+450)
GiveAmmo(id?id:attacker, 20)
set_user_frags(id?id:attacker, get_user_frags(id?id:attacker)+1)
refreshFrags(id?id:attacker)
}
}
}
SetHamParamFloat(4, damage)
return PLUGIN_CONTINUE
}
Proszę o pomoc w znalezieniu jego i o optymalizacje kodu. Jak jest to zły dział to przepraszam, lecz nie widzę innego. Jeśli chcecie, mogę dać inne funkcje.
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.
|
[ROZWIĄZANE] Problem z crashem gdzieś w tym thinku
Najlepsza odpowiedź GT Team , 08.05.2013 19:15
A JEDNAK
Działa! Rozłożyłem TakeDamage, bo sądziłem, że wykonuje się za dużo w 1 i oto co zrobiłem:
public TakeDamage(ent, idinflictor, attacker, Float:damage, damagebits)
{
static classname[32];
entity_get_string(ent, EV_SZ_classname, classname, 31);
if(equal(classname, "monster"))
{
new hp = floatround(entity_get_float(ent, EV_FL_health))
/* Pokazuje zadane obrazenia */
new id = 0
if(is_turret(attacker))
{
id = SentryOwner(attacker)
if(gPlayerDamage[id])
damage+=float(gPlayerNewDamage[id])
}
if(is_turret(attacker))
{
new sentryid = SentryId(ent)
if(damagebits & DMG_SLASH && sentryid == 0)
{
set_hudmessage(100, 255, 0, 0.81, 0.27, 0, 6.0, 1.0)
ShowSyncHudMsg(id, gSync9, "W 1: %d", floatround(damage))
}
if(damagebits & DMG_BLAST && sentryid == 1)
{
set_hudmessage(100, 255, 0, 0.81, 0.32, 0, 6.0, 1.0)
ShowSyncHudMsg(id, gSync10, "W 2: %d", floatround(damage))
}
if(damagebits & DMG_BURN && sentryid == 2)
{
set_hudmessage(100, 255, 0, 0.81, 0.37, 0, 6.0, 1.0)
ShowSyncHudMsg(id, gSync11, "W 3: %d", floatround(damage))
}
if(damagebits & DMG_DROWN && sentryid == 3)
{
set_hudmessage(100, 255, 0, 0.81, 0.42, 0, 6.0, 1.0)
ShowSyncHudMsg(id, gSync12, "W 4: %d", floatround(damage))
}
if(MAX_SENTRY > 4 && sentryid >= 4)
{
set_hudmessage(100, 0, 255, 0.81, 0.47, 0, 6.0, 1.0)
ShowSyncHudMsg(id, gSync13, "O: %d", floatround(damage))
}
}
else
{
ghave[attacker]++
if(ghave[attacker] == 1)
{
set_hudmessage(0, 255, 0, 0.55, 0.465, 0, 0.0, 1.0, 0.0, 0.2, 1)
ShowSyncHudMsg(attacker, gSync5, "%d", floatround(damage))
}
if(ghave[attacker] == 2)
{
set_hudmessage(0, 255, 0, 0.55, 0.5, 0, 0.0, 1.0, 0.0, 0.2, 2)
ShowSyncHudMsg(attacker, gSync5, "%d", floatround(damage))
}
if(ghave[attacker] == 3)
{
set_hudmessage(0, 255, 0, 0.55, 0.535, 0, 0.0, 1.0, 0.0, 0.2, 3)
ShowSyncHudMsg(attacker, gSync5, "%d", floatround(damage))
}
if(ghave[attacker] == 4)
{
set_hudmessage(0, 255, 0, 0.55, 0.57, 0, 0.0, 1.0, 0.0, 0.2, 4)
ShowSyncHudMsg(attacker, gSync5, "%d", floatround(damage))
}
if(ghave[attacker] == 5)
{
set_hudmessage(0, 255, 0, 0.55, 0.605, 0, 0.0, 1.0, 0.0, 0.2, 1)
ShowSyncHudMsg(attacker, gSync5, "%d", floatround(damage))
ghave[attacker] = 0
}
}
/* -- */
static Float:fOrigin[3]
static Origin[3]
pev(ent, pev_origin, fOrigin)
FVecIVec(Origin, fOrigin)
static Color[33][3] ;
Color[id?id:attacker][0] = gPlayerAttackColorValue[id?id:attacker][0]
Color[id?id:attacker][1] = gPlayerAttackColorValue[id?id:attacker][1]
Color[id?id:attacker][2] = gPlayerAttackColorValue[id?id:attacker][2]
msg_dlight(Origin, 10, Color[id?id:attacker], 3, 1)
if(hp <= floatround(damage))
{
new data[1]
data[0] = id?id:attacker
set_task(0.1, "TakeDamage2", ent, data, 1)
if(is_valid_ent(pev(ent, pev_ent_health)))
remove_entity(pev(ent, pev_ent_health))
}
}
if(!is_valid_ent(ent))
{
client_print(0, 3, "take damage !pev vaild")
gMonsterAlive--;
if(gMonsterAlive < 0)
gMonsterAlive=0
if(gMonsterAlive <= 0 && gWave && gStart && gGame)
EndRound()
return HAM_IGNORED
}
SetHamParamFloat(4, damage)
return HAM_IGNORED
}
public TakeDamage2(Params[], ent)
{
new id = Params[0]
gMonsterAlive--;
if(gMonsterAlive < 0)
gMonsterAlive=0
if(gMonsterAlive <= 0 && gWave && gStart && gGame)
EndRound()
if(is_user_connected(id))
{
set_hudmessage(255, 255, 255, -1.0, 0.6, 0, 0.0, 1.0, 0.0, 0.3)
ShowSyncHudMsg(id, gSync3, "KILL!")
gPlayerPoints[id]+=get_pcvar_num(cvar_points_kill)
cs_set_user_money(id, cs_get_user_money(id)+450)
if(is_user_alive(id))
GiveAmmo(id, 20)
set_user_frags(id, get_user_frags(id)+1)
refreshFrags(id)
}
}
Do zamknięcia!
Przejdź do postu
#1
Napisano 05.05.2013 12:44
Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości
#2
Napisano 05.05.2013 12:53
O co chodzi w tym, że tak powiem?
id?id:attacker
Sprawdzasz czy id jest większe, równe od 1 i jeżeli tak to nadajesz id=1, a jeżeli warunek jest niespełniony (id=0 - id serwera) to ?
Sell - System Klanów (wojny, top15 etc)
Kontakt GG: 7285018
#3
Napisano 05.05.2013 13:03
new id = 0
if(is_turret(attacker))
{
id = get_sentry_owner_by_ent_id(attacker)Id jest wtedy, gdy jest to właściciel wieżyczki ( gracz ), attacker jest wtedy kiedy jest to atakujący ( gracz ). Bo przecież nie mogę dać fragów wieżyczce
Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości
#4
Napisano 05.05.2013 13:05
Sory, nie zauważyłem
![]()
Sell - System Klanów (wojny, top15 etc)
Kontakt GG: 7285018
#5
Napisano 05.05.2013 13:22
Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości
#6
Napisano 05.05.2013 23:38
Polecam debug "na diodę"
albo jak kto woli: na dziel i rządź.
Dodajesz po kolei console print, albo log z różnymi wartościami co każdy znaczący fragment kodu. Przy crashu patrzysz który z printów, czy tam logów zdążył się wypisać, a który nie. Pomiędzy masz swój błąd, szatkujesz więc ten kawałek na drobniejsze kawałki logami i jeszcze raz operacja taka ![]()
Użytkownik GwynBleidD edytował ten post 05.05.2013 23:39
NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.

#7
Napisano 06.05.2013 07:25
if(is_user_alive(id?id:attacker))
{
gPlayerPoints[id?id:attacker]+=get_pcvar_num(cvar_points_kill)
cs_set_user_money(id?id:attacker, cs_get_user_money(id?id:attacker)+450)
GiveAmmo(id?id:attacker, 20)
set_user_frags(id?id:attacker, get_user_frags(id?id:attacker)+1)
refreshFrags(id?id:attacker)
}
client_print(0, 3,"kill")
}
Nie wiem czy lepiej dać częśc kodu w post bo ten aktualny jest w pre
Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości
#9
Napisano 06.05.2013 13:18
if(pev_valid(ent)) remove_entity(pev(ent, pev_ent_health)); - TUTAJ
Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości
#10
Napisano 06.05.2013 14:28
To pokaż co po tym kill się wykonuje.
Co do invalid entity, sprawdź czy ent zwracany przez pev(ent, pev_ent_health) jest prawidłowy.
NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.

#11
Napisano 06.05.2013 14:33
if(hp <= floatround(damage) && pev_valid(ent))
{
gMonsterAlive--;
if(gMonsterAlive < 0)
gMonsterAlive=0
if(gMonsterAlive <= 0 && gWave && gStart && gGame)
EndRound()
if(pev_valid(ent))
remove_entity(pev(ent, pev_ent_health));
if(is_user_alive(id?id:attacker))
{
gPlayerPoints[id?id:attacker]+=get_pcvar_num(cvar_points_kill)
cs_set_user_money(id?id:attacker, cs_get_user_money(id?id:attacker)+450)
GiveAmmo(id?id:attacker, 20)
set_user_frags(id?id:attacker, get_user_frags(id?id:attacker)+1)
refreshFrags(id?id:attacker)
}
client_print(0, 3,"kill")
}
}
SetHamParamFloat(4, damage)
return PLUGIN_CONTINUE
}
2. Dawałem i invalid entity pokazywało w tym ifie
Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości
#12
Napisano 06.05.2013 15:01
Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo
#13
Napisano 06.05.2013 17:24
Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości
#14
Napisano 06.05.2013 18:32
if(pev_valid(ent))
remove_entity(pev(ent, pev_ent_health));
Sprawdzasz, czy istnieje "ent", a potem usuwasz coś co znajduje się pod "pev(ent, pev_ent_health)".
Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo
#15
Napisano 06.05.2013 18:57
Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości
#16
Napisano 06.05.2013 19:05
Ale to, co zwraca pev(ent, pev_ent_health) niekoniecznie musi istnieć...
NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.

#17
Napisano 06.05.2013 19:20
pev(ent, pev_ent_health)Jest to id Ent'a healthbara tego potwora
Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości
#18
Napisano 07.05.2013 06:36
💸 SellYourSkins.com - Łatwo sprzedaj swoje skiny do CS:GO
💸⇄🃏 Automatyczny Bot Levelowania Steam - LVLUPSteam.com
🛒Coinsy CSGOPolygon Za SMS, PSC, Przelew - CoinSell.pro
Twój Sklep CS2 - CSGOPAKA
Coinsy do CSGOPolygon, CSGO500, CSGOEmpire - CSGOLombard.com
💸 Graj w CS2 / CS 1.6 i zarabiaj - BoostProject.pro
CS2 Gambling Sites and Free Betting Codes - DreamCodes.gg
Otwieraj skrzynki i wygrywaj najlepsze skiny CS2 na SkinsProject.gg
🤑 Accept CS2 skins for online payments and donations - SkinsMoney
Płatności SMS Premium Rate oraz Direct Biling - SimPay.pl
Szukasz noclegu? Kwatery, noclegi, tanie noclegi, wakacje oferty, wczasy nad jeziorem - RuszajWPolske.pl
StreamPay.pl - Legalna platforma do dotacji dla streamerów i twórców
#19
Napisano 07.05.2013 12:12
if(pev_valid(pev(ent, pev_ent_health)))
remove_entity(pev(ent, pev_ent_health))Wywala błąd na ifie, Invalid entity
Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości
#20
Napisano 07.05.2013 13:30
if(pev_valid(ent)) if(pev_valid(pev(ent, pev_ent_health))) remove_entity(pev(ent, pev_ent_health))
Musisz wszak sprawdzać, czy oba enty są prawidłowe ![]()
NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.

Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych


Dodatki SourceMod



Temat jest zamknięty









