←  Pluginy

AMXX.pl: Support AMX Mod X i SourceMod

»

Modyfikacja
Drobna zmiana w SuperHero Mod

Zablokowany

  • +
  • -
SzyjaN - zdjęcie 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.

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
Odpowiedz

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.
Odpowiedz

  • +
  • -
SzyjaN - zdjęcie SzyjaN 11.06.2012

Dołączona grafika

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?
Odpowiedz

Gość_21977_* 11.06.2012

No nie wiedzę tutaj formy "GRACZ nazwa serwera dodał graczowi xxxx XP".
Odpowiedz

  • +
  • -
SzyjaN - zdjęcie 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
Odpowiedz

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.:
client_print(id, print_chat, "%s %s %d XP", arg[1], giveXP ? "otrzymal" : "ma teraz", xp)
Odpowiedz

  • +
  • -
SzyjaN - zdjęcie 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ę:
rimus otrzymal xxxx XP
Usuwa 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
Odpowiedz

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].
Odpowiedz

  • +
  • -
SzyjaN - zdjęcie 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)

Załączone pliki


Użytkownik SzyjaN edytował ten post 11.06.2012 21:38
Odpowiedz

  • +
  • -
SzyjaN - zdjęcie SzyjaN 14.06.2012

@@Refresh
Odpowiedz

  • +
  • -
SzyjaN - zdjęcie SzyjaN 15.06.2012

Dobra, już sobie poradziłem i wszystko działa tak, jak powinno. Temat można zamknąć ;)
Odpowiedz

  • +
  • -
Goliath - zdjęcie 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
Odpowiedz
Zablokowany