Drobna zmiana w SuperHero Mod
SzyjaN
11.06.2012
Witam. Przerabiam lekko pod swoje wymogi zagraniczny mod - superhero, jednak w jednym miejscu napotkałem mały problem. Dotyczy on usunięcia jednej części ze zdania, które wyświetla się po dodaniu komuś XP przez admina, lub też po kupieniu XP za pomocą komendy.
Konkretnie chodzi mi o tą linię:
Niestety, samo skasowanie powoduje błąd przy kompilacji "argument type mismatch <argument 1>"
Proszę więc o pomoc, najlepiej w postaci wyjaśnienia, jak sobie z takim problemem poradzić.
Użytkownik *Szyjanq* edytował ten post 11.06.2012 14:22
new xp = str_to_num(arg2)
new cmd[32], arg[32]
new bool:giveXP = false
read_argv(0, cmd, charsmax(cmd))
read_argv(1, arg, charsmax(arg))
if ( equali(cmd, "amx_shaddxp") ) giveXP = true
new name2[32], authid2[32]
get_user_name(id, name2, charsmax(name2))
get_user_authid(id, authid2, charsmax(authid2))
if ( arg[0] == '@' ) {
new players[32], inum
if ( equali("T", arg[1]) ) {
copy(arg[1], charsmax(arg)-1, "TERRORIST")
}
if ( equali("ALL", arg[1]) ) {
get_players(players, inum)
}
else {
get_players(players, inum, "eg", arg[1])
}
if ( !inum ) {
console_print(id, "No clients in such team")
return PLUGIN_HANDLED
}
new user
for ( new a = 0; a < inum; a++ ) {
user = players[a]
if ( giveXP ) localAddXP(user, xp)
else gPlayerXP[user] = xp
displayPowers(user, false)
}
show_activity(id, name2, "%s %d XP graczowi %s", giveXP ? "dodal" : "set", xp, arg[1])
console_print(id, "[SH] %s %d XP on %s players", giveXP ? "Added" : "Set", xp, arg[1])
log_amx("[SH] ^"%s<%d><%s><>^" %s %d XP graczowi %s", name2, get_user_userid(id), authid2, giveXP ? "added" : "set", xp, arg[1])
}
else {
new player = cmd_target(id, arg, CMDTARGET_ALLOW_SELF)
if ( !player ) return PLUGIN_HANDLED
if ( giveXP ) localAddXP(player, xp)
else gPlayerXP[player] = xp
displayPowers(player, false)
new name[32], authid[32]
get_user_name(player, name, charsmax(name))
get_user_authid(player, authid, charsmax(authid))
show_activity(id, name2, "%s %d XP graczowi %s", giveXP ? "dodal" : "set", xp, name)
console_print(id, "[SH] Client ^"%s^" has been %s %d XP", name, giveXP ? "given" : "set to", xp)
log_amx("[SH] ^"%s<%d><%s><>^" %s %d XP on ^"%s<%d><%s><>^"", name2, get_user_userid(id), authid2, giveXP ? "added" : "set", xp, name, get_user_userid(player), authid)
}
return PLUGIN_HANDLED
}
Konkretnie chodzi mi o tą linię:
show_activity(id, name2, "%s %d XP graczowi %s", giveXP ? "dodal" : "set", xp, arg[1])Chciałbym usunąć z niej pierwszą część, tj. "id", gdyż po prostu paskudnie to wygląda, gdy w chacie wyświetla się wiadomość typu "GRACZ nazwa serwera dodał graczowi xxxx XP"
Niestety, samo skasowanie powoduje błąd przy kompilacji "argument type mismatch <argument 1>"
Proszę więc o pomoc, najlepiej w postaci wyjaśnienia, jak sobie z takim problemem poradzić.
Użytkownik *Szyjanq* edytował ten post 11.06.2012 14:22
Gość_21977_* 11.06.2012
W funkcji show_activity pierwszym argumentem jest id gracza, więc nie możesz go pominąć. Wówczas debugger za pierwszy argument bierze nick gracza (string), a powinno nim być id gracza (typ integer).
Stąd komunikat o niezgodności typów argumentów. Nie powinieneś (a w tym wypadku nie możesz) stosować funkcji inaczej, niż stanowi dokumentacja.
edit. W podanej przez Ciebie linijce nie może zostać wygenerowany tekst "GRACZ nazwa serwera dodał graczowi xxxx XP"
Zamiast name2 jako drugi argument, wstaw inny, wybrany nick, lub pozostaw pole puste. Wtedy nazwa serwera zostanie zastąpiona innym nickiem, bądź pominięta.
Stąd komunikat o niezgodności typów argumentów. Nie powinieneś (a w tym wypadku nie możesz) stosować funkcji inaczej, niż stanowi dokumentacja.
edit. W podanej przez Ciebie linijce nie może zostać wygenerowany tekst "GRACZ nazwa serwera dodał graczowi xxxx XP"
Zamiast name2 jako drugi argument, wstaw inny, wybrany nick, lub pozostaw pole puste. Wtedy nazwa serwera zostanie zastąpiona innym nickiem, bądź pominięta.
SzyjaN
11.06.2012
Nie wiem czy nie może, skoro jednak to robi
Skoro ta funkcja nie może obyć się bez 'id', to czy mogę ją zastąpić jakąś inną, z którą nie będzie tego problemu?
Gość_21977_* 11.06.2012
No nie wiedzę tutaj formy "GRACZ nazwa serwera dodał graczowi xxxx XP".
SzyjaN
11.06.2012
Cytuję ze screena: GRACZ DancingDead @ NetShoot.pl added 100 XP on snieg
Opis cytatu:
GRACZ - ...
DancingDead @ NetShoot.pl - nazwa serwera
snieg - nick gracza, który otrzymał XP
Opis cytatu:
GRACZ - ...
DancingDead @ NetShoot.pl - nazwa serwera
snieg - nick gracza, który otrzymał XP
Gość_21977_* 11.06.2012
"GRACZ @ nazwa serwera dodał xxx XP graczowi GRACZ2"
Tak nazwałbym tę formę, ale wracając do tematu: może zwykły say wystarczy?
Np.:
Tak nazwałbym tę formę, ale wracając do tematu: może zwykły say wystarczy?
Np.:
client_print(id, print_chat, "%s %s %d XP", arg[1], giveXP ? "otrzymal" : "ma teraz", xp)
SzyjaN
11.06.2012
Pomysł działa, ale teraz zrobił mi kolejne niespodzianki:
Załóżmy, że gracz ma nick "Crimus". Przy wpisaniu komendy dodającej XP w chacie pokazuje się:
Do tego - przy użyciu komendy buyxp, zamiast nicku pojawiło się STEAM_ID
Załóżmy, że gracz ma nick "Crimus". Przy wpisaniu komendy dodającej XP w chacie pokazuje się:
rimus otrzymal xxxx XPUsuwa pierwszą literę z nicku - testowane na 5ciu różnych, na każdym to samo
Do tego - przy użyciu komendy buyxp, zamiast nicku pojawiło się STEAM_ID
Gość_21977_* 11.06.2012
Podaj pełne sma, bo buyxp nie widzę.
Jeśli Ci obcina pierwszą literę, to użyj po prostu arg, zamiast arg[1].
Jeśli Ci obcina pierwszą literę, to użyj po prostu arg, zamiast arg[1].
SzyjaN
11.06.2012
superheronvault - główny od superhero
sh_merchant - tu jest funkcja buyxp
Myślałem tez, czy nie byłoby lepiej przenieść tą wiadomość z chata od razu do pluginu sh_menchart (obecnie wykorzystuje główny plugin)
Użytkownik SzyjaN edytował ten post 11.06.2012 21:38
sh_merchant - tu jest funkcja buyxp
Myślałem tez, czy nie byłoby lepiej przenieść tą wiadomość z chata od razu do pluginu sh_menchart (obecnie wykorzystuje główny plugin)
Załączone pliki
Użytkownik SzyjaN edytował ten post 11.06.2012 21:38
SzyjaN
15.06.2012
Dobra, już sobie poradziłem i wszystko działa tak, jak powinno. Temat można zamknąć
Goliath
15.06.2012
Wiadomość wygenerowana automatycznie
Ten temat został zamknięty przez moderatora.
Powód: Temat zamknięty na prośbę użytkownika.
Z pozdrowieniami,
Zespół AMXX.PL
Ten temat został zamknięty przez moderatora.
Powód: Temat zamknięty na prośbę użytkownika.
Z pozdrowieniami,
Zespół AMXX.PL