Funkcja /me i najwiecej DMG pod koniec rundy
camilost
29.07.2010
Witam.
Potrzebuję pluginu z funkcją /me (Wyświetla zadane obrażenia - DMG), nie chcę statsx, ponieważ ma on funkcje które nie są dla mnie przydatne.
Jeśli gracz napisze "/me" i zadał jakieś DMG, wyświetla mu się wiadomość:
Co rundę oczywiście ma się DMG restartować(zerować)
I jeszcze, aby pod koniec przed zerowaniem wyświetlało:
PS. Najlepiej by było, aby inni gracze nie widzieli jak ktoś wpisał /me .
01 sierpień 2010 - 15:41:
Refresz.
03 sierpień 2010 - 13:55:
Refresz 2. Pls pomóżcie ^.^
Potrzebuję pluginu z funkcją /me (Wyświetla zadane obrażenia - DMG), nie chcę statsx, ponieważ ma on funkcje które nie są dla mnie przydatne.
Jeśli gracz napisze "/me" i zadał jakieś DMG, wyświetla mu się wiadomość:
Jeśli nie zadał DMG:Zadales dotychczas %d obrazen.
na razie nie zadales obrazen przeciwnikowi.
Co rundę oczywiście ma się DMG restartować(zerować)
I jeszcze, aby pod koniec przed zerowaniem wyświetlało:
Jeśli jest tylko 1 osoba grająca nie wyświetla ; pNajwiecej obrazen zadal %s (%d obrazen!).
PS. Najlepiej by było, aby inni gracze nie widzieli jak ktoś wpisał /me .
01 sierpień 2010 - 15:41:
Refresz.
03 sierpień 2010 - 13:55:
Refresz 2. Pls pomóżcie ^.^
Ortega
03.08.2010
Powinno działać ale ręki za to nie daję :F
#include < amxmodx >
#include < fakemeta >
#include < hamsandwich >
new Damage[33];
new Xdamage[33];
new g_playersnum;
new const PLUGIN_VERSION[] = "1.0";
public plugin_init() {
register_plugin("My Damage", PLUGIN_VERSION, "Ortega");
register_event( "HLTV", "NewRound", "a", "1=0", "2=0" );
register_logevent( "EndRound", 2, "1=Round_End" );
RegisterHam(Ham_TakeDamage, "player", "ForwardPlayerDmg", 1);
register_clcmd("say /me", "HookSay");
}
public ForwardPlayerDmg(iVictim, iInflictor, iAttacker, Float:fDamage, iDamageBits) {
Damage[iAttacker] = pev(iVictim, pev_dmg_take);
return Damage[iAttacker];
}
public HookSay(id) {
if(Damage[id]) {
client_print(id, print_chat, "Zadales dotychczas %d obrazen.", Damage[id]);
}
else client_print(id, print_chat, "na razie nie zadales obrazen przeciwnikowi.");
return PLUGIN_HANDLED;
}
public NewRound() {
for(new id = 0; id<33; id++) {
Damage[id] = 0;
}
g_playersnum = get_playersnum();
}
public EndRound( ) {
//while by G[o]Q ;)
new k = 0; while( Damage[k] = Xdamage[k] ) k++;
SortIntegers(Xdamage[k], 33, Sort_Descending);
for(new i = 0; i<33; i++) {
static szName[32];
get_user_name(i, szName, sizeof(szName)-1);
if( ( Xdamage[0] == Damage[i] ) && g_playersnum > 1 ) {
client_print(i, print_chat, "Najwiecej obrazen zadal %s (%i obrazen!).", szName[i], Xdamage[0] );
}
}
}
G[o]Q
03.08.2010
Ortega ostatnia petla
i pozbywasz sie fakemety + Damage zmien na Float zeby uniknac mismatcha przy kompilacji
03 sierpień 2010 - 17:12:
dodatkowo mozesz zatrzymac ostatnia petle jak juz znajdziez wynik - break
Użytkownik G[o]Q edytował ten post 03.08.2010 16:11
if(!is_user_connected(i)) continue
public ForwardPlayerDmg(iVictim, iInflictor, iAttacker, Float:fDamage, iDamageBits) { Damage[iAttacker] +=fDamage // inaczej nikt nie bedzie miec wiekszego wyniku niz 100 hp na normalnym serverze }
i pozbywasz sie fakemety + Damage zmien na Float zeby uniknac mismatcha przy kompilacji
03 sierpień 2010 - 17:12:
dodatkowo mozesz zatrzymac ostatnia petle jak juz znajdziez wynik - break
Użytkownik G[o]Q edytował ten post 03.08.2010 16:11
camilost
03.08.2010
posibbly unintended assigment
GoQ weź pokaż cały poprawiony kod, ja WC.
new k = 0; while( Damage[k] = Xdamage[k] ) k++;WTF? : D
GoQ weź pokaż cały poprawiony kod, ja WC.
G[o]Q
03.08.2010
powinno byc
warningiem sie nie przejmuj bo kompialtor mysli ze zle zrobiona petla
new k = 0; while( Xdamage[k] = Damage[k] ) k+
warningiem sie nie przejmuj bo kompialtor mysli ze zle zrobiona petla
camilost
03.08.2010
Ortega ostatnia petla
if(!is_user_connected(i)) continuepublic ForwardPlayerDmg(iVictim, iInflictor, iAttacker, Float:fDamage, iDamageBits) { Damage[iAttacker] +=fDamage // inaczej nikt nie bedzie miec wiekszego wyniku niz 100 hp na normalnym serverze }
i pozbywasz sie fakemety + Damage zmien na Float zeby uniknac mismatcha przy kompilacji
03 sierpień 2010 - 17:12:
dodatkowo mozesz zatrzymac ostatnia petle jak juz znajdziez wynik - break
Pokaż jak to ma wyglądać
PS. new k = 0; while( Xdamage[k] = Damage[k] ) k++? Bo bez jednego + mi 1 error wyskoczył +dodatkowy warning ^.^
03 sierpień 2010 - 19:21:
Ile zadałem DMG działa ale wyświetlanie kto zadał najwięcej nie działa.
public EndRound( ) { //while by G[o]Q ;) new k = 0; while( Xdamage[k] = Damage[k] ) k++; SortIntegers(Xdamage[k], 33, Sort_Descending); for(new i = 0; i<33; i++) { static szName[32]; get_user_name(i, szName, sizeof(szName)-1); if( ( Xdamage[0] == Damage[i] ) && g_playersnum >= 2 ) { client_print(i, print_chat, "Najwiecej obrazen zadal %s (%i obrazen!).", szName[i], Xdamage[0] ); } } }
W sumie g_playersnum >= 2 to to samo jak > 1 Ale co tam tak sobie dałem ^.^ .
03 sierpień 2010 - 19:50:
/me działa ale pokazuje ile ostatnio zadałem obrażen (np. trafiłem w głowe to pokazuje tylko te ostatnie obrażenie (140) : D a nie dodaje tych pozostałych.
camilost
03.08.2010
A czemu pokazuje tylko zadane ostatnio obrażenie (jedno) np. jeśli strzele w klatkę (60hp) i później w Heada(140) to wyskakuje zadane obrażenie 140 (Jak wpisze /me)
G[o]Q
03.08.2010
public ForwardPlayerDmg(iVictim, iInflictor, iAttacker, Float:fDamage, iDamageBits) { Damage[iAttacker] +=fDamage // inaczej nikt nie bedzie miec wiekszego wyniku niz 100 hp na normalnym serverze }
camilost
03.08.2010
Aha i takie coś wyskoczyło jak zamieniłem id na 0:
hehehe
SMA:
Użytkownik camilost edytował ten post 03.08.2010 20:26
Spoiler
hehehe
SMA:
Spoiler
Użytkownik camilost edytował ten post 03.08.2010 20:26
G[o]Q
03.08.2010
zamen all %d i %i na %f
oraz
na
oraz
new Damage[33]; new Xdamage[33];
na
new Float:Damage[33]; new Float:Xdamage[33];
camilost
03.08.2010
Tag mismatch:
i
WTD, wiem że chdzi o te Xdamage i Damage, bo dodałem w float!? : D
Zamiennik mam zrobić?
new zadanedmg = Float:Damage[id]
a samo new Float:Damage na new Damage? dobrze kombinuję?
Użytkownik camilost edytował ten post 03.08.2010 20:54
SortIntegers(Xdamage[k], 33, Sort_Descending);
i
Damage[id] = 0;
WTD, wiem że chdzi o te Xdamage i Damage, bo dodałem w float!? : D
Zamiennik mam zrobić?
new zadanedmg = Float:Damage[id]
a samo new Float:Damage na new Damage? dobrze kombinuję?
Użytkownik camilost edytował ten post 03.08.2010 20:54
G[o]Q
03.08.2010
SortFloats(Xdamage[k], 33, Sort_Descending);
zamiast
SortIntegers(Xdamage[k], 33, Sort_Descending);
03 sierpień 2010 - 22:07:
nieeeee poprostu na samej gorze po new dodaj Float: i nic wiecej przed tymi dwoma funkcjami i zmien funkcje sortintegers na sortfloat
Użytkownik G[o]Q edytował ten post 03.08.2010 20:54
camilost
03.08.2010
z tym drugi Tag mimatch zrobiłem: Damage[id] = 0.0; i odpuściło ^.^ Skoro float to float
03 sierpień 2010 - 22:08:
Teraz kod wygląda tak:
03 sierpień 2010 - 22:08:
Teraz kod wygląda tak:
Spoiler
camilost
03.08.2010
Nikogo nie ma na serwie już, muszę na botach sprawdzić : D
@EDIT:
Hmmm.. na botach: Ciągle pisze że jeszcze nie zadałem dmg ale to pewnie dlatego że na botach
I dalej jest problem z:
Z tymi zerami to wiem jak sobie poradzić ale z tym spamem to nie
Może:
get_user_name(i, szName, sizeof(szName)-1);
zamienić na:
get_user_name(i, szName, sizeof szName - 1);
Pewnie się mylę bo to to samo teoretycznie.
@EDIT2:
Racja myliłem się
04 sierpień 2010 - 20:29:
Jak zlikwidować ten spam? : /
Wiem że trzeba jakoś wyłapać tego co ma najwięcej DMG, bo teraz tylko sortuje i wysyła spam posortowany
Użytkownik camilost edytował ten post 03.08.2010 21:36
@EDIT:
Hmmm.. na botach: Ciągle pisze że jeszcze nie zadałem dmg ale to pewnie dlatego że na botach
I dalej jest problem z:
Spoiler
Z tymi zerami to wiem jak sobie poradzić ale z tym spamem to nie
Może:
get_user_name(i, szName, sizeof(szName)-1);
zamienić na:
get_user_name(i, szName, sizeof szName - 1);
Pewnie się mylę bo to to samo teoretycznie.
@EDIT2:
Racja myliłem się
04 sierpień 2010 - 20:29:
Jak zlikwidować ten spam? : /
Wiem że trzeba jakoś wyłapać tego co ma najwięcej DMG, bo teraz tylko sortuje i wysyła spam posortowany
Użytkownik camilost edytował ten post 03.08.2010 21:36
G[o]Q
04.08.2010
for(new i = 0; i<33; i++) { static szName[32]; get_user_name(i, szName, sizeof(szName)-1); if( ( Xdamage[0] == Damage[i] ) && g_playersnum > 1 ) { client_print(0, print_chat, "Najwiecej obrazen zadal %s (%f obrazen!).", szName[i], Xdamage[0] ); break } }
camilost
05.08.2010
No no już jest prawie cacy:
Te .00 to mi zwisa na razie pozniej osune ale ze zle sortuje ;d
Najwiecej obrazen zadal Nazwa [email protected] (0.000000 obrazen!)
Te .00 to mi zwisa na razie pozniej osune ale ze zle sortuje ;d
Ortega
05.08.2010
Do trzech razy sztuka
#include < amxmodx >
#include < hamsandwich >
new Float:Damage[33];
new Float:Xdamage[33];
new g_playersnum;
new const PLUGIN_VERSION[] = "1.0";
public plugin_init() {
register_plugin("My Damage", PLUGIN_VERSION, "Ortega");
register_event( "HLTV", "NewRound", "a", "1=0", "2=0" );
register_logevent( "EndRound", 2, "1=Round_End" );
RegisterHam(Ham_TakeDamage, "player", "ForwardPlayerDmg", 1);
register_clcmd("say /me", "HookSay");
}
public ForwardPlayerDmg(iVictim, iInflictor, iAttacker, Float:fDamage, iDamageBits) {
Damage[iAttacker] += fDamage;
floatround(Damage[iAttacker], floatround_floor);
}
public HookSay(id) {
if(Damage[id]) {
client_print(id, print_chat, "Zadales dotychczas %d obrazen.", Damage[id]);
}
else client_print(id, print_chat, "na razie nie zadales obrazen przeciwnikowi.");
return PLUGIN_HANDLED;
}
public NewRound() {
for(new id = 0; id<33; id++) {
Damage[id] = 0.0;
Xdamage[id] = 0.0;
}
g_playersnum = get_playersnum();
}
public EndRound( ) {
new k = 0; while( Damage[k] == Xdamage[k] ) k++;
SortFloats(Xdamage[k], 33, Sort_Descending);
for(new i = 0; i<33; i++) {
static szName[32];
get_user_name(i, szName, sizeof(szName)-1);
floatround(Xdamage[i], floatround_floor);
if( ( Xdamage[0] == Damage[i] ) && g_playersnum > 1 ) {
client_print(0, print_chat, "Najwiecej obrazen zadal %s (%d obrazen!).", szName[i], Xdamage[0] );
break;
}
}
}
G[o]Q
05.08.2010
public EndRound( ) { new k = 0; while( Xdamage[k] = Damage[k] ) k++; SortFloats(Xdamage[k], 33, Sort_Descending); for(new i = 0; i<33; i++) { static szName[32]; get_user_name(i, szName, sizeof(szName)-1); floatround(Xdamage[i], floatround_floor); if( ( Xdamage[0] == Damage[i] ) && g_playersnum > 1 ) { client_print(0, print_chat, "Najwiecej obrazen zadal %s (%d obrazen!).", szName[i], Xdamage[0] ); break; } } }
hmm jak tak nie zadziala to polecam dodanie jakiegos debuga sobie zeby tablice wyswietlic cala albo cos