←  Pluginy

AMXX.pl: Support AMX Mod X i SourceMod

»

Modyfikacja
Drobna zmiana w SuperHero Mod

Locked

  • +
  • -
SzyjaN's Photo 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ć.
Edited by *Szyjanq*, 11.06.2012 14:22.
Quote

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

  • +
  • -
SzyjaN's Photo SzyjaN 11.06.2012

Posted Image

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

Gość_21977_* 11.06.2012

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

  • +
  • -
SzyjaN's Photo 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
Quote

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)
Quote

  • +
  • -
SzyjaN's Photo 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
Quote

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

  • +
  • -
SzyjaN's Photo 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)

Attached Files


Edited by SzyjaN, 11.06.2012 21:38.
Quote

  • +
  • -
SzyjaN's Photo SzyjaN 14.06.2012

@@Refresh
Quote

  • +
  • -
SzyjaN's Photo SzyjaN 15.06.2012

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

  • +
  • -
Goliath's Photo 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
Quote
Locked