←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

[ROZWIĄZANE] Pytanie odnośnie undefined sy...

Zablokowany

  • +
  • -
Mr. Dziwny - zdjęcie Mr. Dziwny 27.11.2012

Witam,
otóż posiadam dobry plugin bossa (jest zaje ..). Wszystko pięknie itd., aczkolwiek był on zrobiony pod zombie. Ja natomiast chcę, aby był na serwer COD. Już wszystko co należało zmienić zmieniłem, ale nie mogę uporać się z jedną rzeczą, tzn. jak dodaję, że po zabiciu bossa ma iść exp dla każdego :

cod_set_user_xp(0, cod_get_user_xp(id)+40000);

a za zabranie mu 1 hp ma iść jeden exp:

cod_set_user_xp(id, cod_get_user_xp(id)+1);

Wyskakują mi błędy przy kompilacji :

boss.sma(689) : error 017: undefined symbol "id"
boss.sma(689) : error 017: undefined symbol "i"
boss.sma(764) : error 017: undefined symbol "i"
boss.sma(764) : error 001: expected token: ",", but found ";"

Podsyłam 2 public odpowiedzialne 1 za zadane obrażenia (chyba ^^ ), a 2 za zabójstwo bossa.

public npc_takedamage(ent, inflictor, attacker, Float:damage, damage_type)
{
if(!is_user_alive(attacker) || !is_valid_ent(ent))
return;

new className[32];
entity_get_string(ent, EV_SZ_classname, className, charsmax(className))

if(!equali(className, npc_classname) || !g_alive[ent])
return;

g_fUserDamage[attacker] += damage;

//client_print(attacker, print_center, "%f" , g_fUserDamage[attacker]);
if(g_fUserDamage[attacker] >= 1){
g_fUserDamage[attacker] -= 1;
cod_set_user_xp(id, cod_get_user_xp(id)+1);

}

entity_set_float(g_pSprite, EV_FL_frame, entity_get_float(ent, EV_FL_health) / (ALIEN_HEALTH / 100.0));
}

public npc_killed(ent, attacker) 
{
new className[32];
entity_get_string(ent, EV_SZ_classname, className, charsmax(className))

if(!equali(className, npc_classname) || !g_alive[ent])
return HAM_IGNORED;

g_alive[ent] = 0
Util_PlayAnimation(ent, ANIM_DEATH);
emit_sound(ent, CHAN_VOICE, g_AlienSound[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
remove_task(ent)
set_pev(ent, pev_solid, SOLID_NOT)
set_task(4.5, "npc_remove", ent)

entity_set_int(ent, EV_INT_iuser4, 1);

//cs_set_user_money(attacker, cs_get_user_money(attacker) + g_reward[ent])

cod_set_user_xp(0, cod_get_user_xp(id)+40000);

entity_set_int(g_pSprite, EV_INT_rendermode, kRenderTransTexture);
entity_set_float(g_pSprite, EV_FL_renderamt, 0.0);

begin_changelevel();

client_print(0, print_chat, "BOSS nie zyje! Zmiana mapy na de_dust2");

return HAM_SUPERCEDE;
}


Nie mam pojęcia co z tym zrobić ; /
Proszę o pomoc, za pomoc leci :plus:
Odpowiedz

  • +
  • -
DEADP00L - zdjęcie DEADP00L 27.11.2012

To

cod_set_user_xp(0, cod_get_user_xp(id)+40000);


zamień na:

cod_set_user_xp(0, cod_get_user_xp(0)+40000);

Odpowiedz

  • +
  • -
Mr. Dziwny - zdjęcie Mr. Dziwny 28.11.2012

a 0 to nie jest przypadkiem funkcja dla wszystkich ? Czyli exp wszystkich , tj. jak to będzie to się poziomy wyzerują i doda się 40 k expa.. bynajmniej tak mi się wydaję ;x
Odpowiedz

  • +
  • -
JabLuszko - zdjęcie JabLuszko 28.11.2012

Nie masz id, bo autor nazwał to attacker - w przypadku npc_takedamage.
W przypadku npc_killed wersja z 0 nie zadziała (chyba, że poprawiałeś silnik QTM_CodMod, żeby to obsługiwał;)) => musisz przeiterować po wszystkich graczach i dać im EXP osobno - http://amxx.pl/dokum...f90/get_players
Użytkownik JabLuszko edytował ten post 28.11.2012 07:52
Odpowiedz

  • +
  • -
Mr. Dziwny - zdjęcie Mr. Dziwny 28.11.2012

Czyli jak powinno wyglądać npc_killed, bo nie za bardzo załapałem ;)


Mam pytanie jeszcze odnośnie tego:
public npc_takedamage(ent, inflictor, attacker, Float:damage, damage_type)
{
if(!is_user_alive(attacker) || !is_valid_ent(ent))
return;

new className[32];
entity_get_string(ent, EV_SZ_classname, className, charsmax(className))

if(!equali(className, npc_classname) || !g_alive[ent])
return;

g_fUserDamage[attacker] += damage;

//client_print(attacker, print_center, "%f" , g_fUserDamage[attacker]);
if(g_fUserDamage[attacker] >= 1){
g_fUserDamage[attacker] -= 1;
cod_set_user_xp(id, cod_get_user_xp(id)+1);

}

entity_set_float(g_pSprite, EV_FL_frame, entity_get_float(ent, EV_FL_health) / (ALIEN_HEALTH / 100.0));

}
Odpowiedz

  • +
  • -
JabLuszko - zdjęcie JabLuszko 28.11.2012

Wydało mi się, że coś tam potrafisz - jednak się przeliczyłem.

if(g_fUserDamage[attacker] >= 1){
g_fUserDamage[attacker] -= 1;
cod_set_user_xp(id, cod_get_user_xp(id)+1);

}


Czy ten powyższy if to Twoje dzieło? Jeśli to Twoje dzieło to skasuj i zamień na

cod_set_user_xp(attacker, cod_get_user_xp(attacker)+floatround(dmg));


Co przykładu z npc_killed to nie wiem czego nie zrozumiałeś (warto by napisać...).
Masz tam w linku przykładową pętlę iterującą po wszystkich graczach (oraz ewentualne warunki-flagi) skopiuj oraz dopisz tam tylko cod_set_user_xp(id, cod_get_user_xp(id)+ILE_EXPA));. Oczywiście z odpowiednimi flagami - są one w dokumentacji wytłumaczone - ja nie wiem czy wszyscy mają dostać, czy wszyscy żywi, czy wszyscy w CT i tak dalej...
Użytkownik JabLuszko edytował ten post 28.11.2012 18:37
Odpowiedz

  • +
  • -
Mr. Dziwny - zdjęcie Mr. Dziwny 29.11.2012

Dobra doszedłem do wniosku , ze lepiej mi się myśli nocą.. Wszystko dziala jak należy ^^
Dziwie się tylko sb że nie załapałem od początku o co w tym chodzi (odnośnie 1 funkcji, co do killied to pomogłeś mi i to za***iście) ^^
Oczywiście leci :plus:

Temat do zamknięcia.
Odpowiedz

Gość_21977_* 29.11.2012

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, Dołączona grafika raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
Odpowiedz

Gość_21977_* 29.11.2012

Automatyczna wiadomość


Ten temat został przeniesiony z forum

AMX Mod XPytania

do

Scripting AMXXProblemy
Odpowiedz
Zablokowany