Ulepszanie perków
1stADXionC
20.06.2016
Witam!
Stworzyłem za pomocą użytkownika Andrzejek system ulepszania perków. Lecz mam małe problemy podczas kompilacji.
Do silnika dodałem:
poziomy_runy[MAX_ILOSC_RUNY+1][MAX_WIELKOSC_POZIOMU+1] register_native("cod_get_runa_poziom", "PobierzPoziomRuny", 1); public PobierzPoziomRuny(runa, Return[], len) { if(runa <= ilosc_runy) { param_convert(2); copy(Return, len, poziomy_runy[runa]); } }
Przykładowy perk:
/* Plugin generated by AMXX-Studio */ #include <amxmodx> #include <amxmisc> #include <codmod> #include <runy> #include <hamsandwich> new const runa_name[] = "Golden"; new const runa_desc[] = "Obrazenia zwiekszone o"; new const runa_poziom[] = "1"; new bool:ma_rune[33]; public plugin_init() { register_plugin(runa_name, "0.1", "1stADXionC"); cod_get_register_runa(runa_name, runa_desc, runa_poziom); RegisterHam(Ham_TakeDamage, "player", "TakeDamage"); } public cod_get_runa_enabled(id) { ma_rune[id] = true; } public cod_get_runa_disabled(id) { ma_rune[id] = false; } public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits) { if(!is_user_connected(idattacker)) return HAM_IGNORED; if(!ma_rune[idattacker]) { if(cod_get_runa_poziom() = 1) cod_inflict_damage(idattacker, this, 10.0, 0.00, idinflictor, damagebits); else if(cod_get_runa_poziom() = 2) cod_inflict_damage(idattacker, this, 10.0, 0.0, idinflictor, damagebits); else if(cod_get_runa_poziom() = 3) cod_inflict_damage(idattacker, this, 15.0, 0.0, idinflictor, damagebits); else if(cod_get_runa_poziom() = 4) cod_inflict_damage(idattacker, this, 20.0, 0.0, idinflictor, damagebits); else if(cod_get_runa_poziom() = 5) cod_inflict_damage(idattacker, this, 25.0, 0.0, idinflictor, damagebits); } return HAM_IGNORED; }
Błędy podczas kompilacji perku:
Welcome to the AMX Mod X 1.8.1-300 Compiler. Copyright (c) 1997-2013 ITB CompuPhase, AMX Mod X Team Error: Number of arguments does not match definition on line 41 Warning: Expression has no effect on line 41 Error: Expected token: ";", but found ")" on line 41 Error: Invalid expression, assumed zero on line 41 Error: Too many error messages on one line on line 41 Compilation aborted. 4 Errors. Could not locate output file C:\Users\1stADXionC\Desktop\AleLulaaaa\codruna_golden.amx (compile failed).
1stADXionC
20.06.2016
Welcome to the AMX Mod X 1.8.1-300 Compiler. Copyright (c) 1997-2013 ITB CompuPhase, AMX Mod X Team Error: Number of arguments does not match definition on line 41 Error: Number of arguments does not match definition on line 42 Error: Number of arguments does not match definition on line 43 Error: Number of arguments does not match definition on line 44 Error: Number of arguments does not match definition on line 45 5 Errors. Could not locate output file C:\Users\1stADXionC\Desktop\AleLulaaaa\codruna_golden.amx (compile failed).
rzeznik9871
20.06.2016
PobierzPoziomRuny(runa, Return[], len)
musisz zwrocic rune (co kolwiek to znaczy) do osobnej tablicy
czyli cos takiego
public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits) { if(!is_user_connected(idattacker)) return HAM_IGNORED; if(!ma_rune[idattacker]) { new wartosc_runy[31] cod_get_runa_poziom(runa_name,wartosc_runy,30) if(wartosc_runy == 1) cod_inflict_damage(idattacker, this, 10.0, 0.00, idinflictor, damagebits); else if(wartosc_runy == 2) cod_inflict_damage(idattacker, this, 10.0, 0.0, idinflictor, damagebits); else if(wartosc_runy == 3) cod_inflict_damage(idattacker, this, 15.0, 0.0, idinflictor, damagebits); else if(wartosc_runy == 4) cod_inflict_damage(idattacker, this, 20.0, 0.0, idinflictor, damagebits); else if(wartosc_runy == 5) cod_inflict_damage(idattacker, this, 25.0, 0.0, idinflictor, damagebits); } return HAM_IGNORED; }
czy jakos tak nie jestem do konca pewny bo nie bardzo rozumiem jak to dziala
/edit
dobra rozumiem powinno byc ok
Edited by rzeznik9871, 20.06.2016 11:27.
1stADXionC
20.06.2016
Welcome to the AMX Mod X 1.8.1-300 Compiler. Copyright (c) 1997-2013 ITB CompuPhase, AMX Mod X Team Error: Argument type mismatch (argument 1) on line 42 Error: Array must be indexed (variable "wartosc_runy") on line 43 Error: Array must be indexed (variable "wartosc_runy") on line 44 Error: Array must be indexed (variable "wartosc_runy") on line 45 Error: Array must be indexed (variable "wartosc_runy") on line 46 Error: Array must be indexed (variable "wartosc_runy") on line 47 6 Errors. Could not locate output file C:\Users\1stADXionC\Desktop\AleLulaaaa\codruna_golden.amx (compile failed).
No to ja proponuje, pierwsze zrobić to menu i natyw jeden od pobierania aktualnego poziomu i w pluginie od perku, tak gdzie jest jesgo umiejetnosci pobierać poziom i ustawic dla niego odpowiedni dodatek np. jak mowiles o obrażeniach to np.
new Float:Damage = 0.0;
if(cod_get_poziom_perku() = 1) Damage += 10;
else if(cod_get_poziom_perku() = 2) Damage += 20;
else if(cod_get_poziom_perku() = 3) Damage += 30;
else if(cod_get_poziom_perku() = 4) Damage += 40;
else if(cod_get_poziom_perku() = 5) Damage += 50;
//I COŚ TU DALEJDlaczego tak, bo uwżam że to będzie najlepsze rozwiązanie. Bo każdy perk ma inna umiejetność.
new gPoziom_perku_id[33] = 0; // rejestrujesz zmienna globalna
A tak robisz w głównym pluginie, lub w osobnym pluginie jak wolisz
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
// Add your code here...
}
public plugin_natives() {
register_native("cod_get_poziom_perku", "PobierzPoziomPerku", 1); //rejestrujesz natyw cod_get_poziom_perku() w pluginie od perka dodajesz native cod_get_poziom_perku();
}
public PobierzPoziomPerku(id) {
return gPoziom_perku_id[id]; //odczytujesz wartosc poziomu perku
}Jeżeli chcesz dodać również opisy do menu co daje poziom do aktualnego perku wystarczy prosty natyw i będzie wszystko git, możesz też ustawiać ceny do każdego perku jaką chcesz, no możliwości masz wiele.
Edited by 1stADXionC, 20.06.2016 11:41.
rzeznik9871
20.06.2016
public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits) { if(!is_user_connected(idattacker)) return HAM_IGNORED; if(!ma_rune[idattacker]) { cod_get_runa_poziom(runa,wartosc_runy,idattacker) if(wartosc_runy[idattacker] == 1) cod_inflict_damage(idattacker, this, 10.0, 0.00, idinflictor, damagebits); else if(wartosc_runy[idattacker] == 2) cod_inflict_damage(idattacker, this, 10.0, 0.0, idinflictor, damagebits); else if(wartosc_runy[idattacker] == 3) cod_inflict_damage(idattacker, this, 15.0, 0.0, idinflictor, damagebits); else if(wartosc_runy[idattacker] == 4) cod_inflict_damage(idattacker, this, 20.0, 0.0, idinflictor, damagebits); else if(wartosc_runy[idattacker] == 5) cod_inflict_damage(idattacker, this, 25.0, 0.0, idinflictor, damagebits); } return HAM_IGNORED; }
new wartosc_runy[33] jako zmienna globalna daj
public PobierzPoziomRuny(runa, Return[], len)
to runa to id runy tak? tylko teraz pytanie skąd to pobrac spróbuj zrobic tak jak napisalem ale nie jestem pewny czy zadziala niestety na codzie znam sie jak kon rafal na motoryzacji wiec to tak troche pomoc w ciemno
1stADXionC
20.06.2016
1stADXionC
20.06.2016
AwIlL^^
20.06.2016
została zmieniona konstrukcja cod_get_runa_poziom(runa, return[], len) na cod_get_runa_poziom(id)
miłej zabawy