←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Tablice

Zablokowany

  • +
  • -
conseil - zdjęcie conseil 24.07.2009

z dokumentacji AmxModX'a
(http://wiki.alliedmo...Mod_X_Scripting)

public cmd_hp(id, level, cid)
{
     if (!cmd_access(id, level, cid, 3))
        return PLUGIN_HANDLED
 
     new Arg1[24]
     new Arg2[4]
 
     //Get the command arguments from the console
     read_argv(1, Arg1, 23)
     read_argv(2, Arg2, 3)
 
     //Convert the health from a string to a number
     new Health = str_to_num(Arg2)
 
     //Is the first character the @ symbol?
     if (Arg1[0] == '@')
     {
          new Team = 0
          //Check which team was specified.
          //Note that we start from [1], this is okay
          // it just means the @ isn't included
          if (equali(Arg1[1], "CT"))
          {
               Team = 2
          } else if (equali(Arg1[1], "T")) {
               Team = 1
          }
           //.
Zdziwiło mnie to:
if (equali(Arg1[1], "CT"))
Przecież każdy element tablicy zawiera jeden znak.
to znaczy jeżeli tablica
Arg1[] = "@CT"
to:
Arg1[0] = '@'
Arg1[1] = 'C'
Arg1[2] = 'T'

To jaki cudem 1 element tablicy zawiera znak(i) "CT"?
I dlaczego jest użyto " a nie '
Odpowiedz

  • +
  • -
mgr inż. Pavulon - zdjęcie mgr inż. Pavulon 24.07.2009

if (equali(Arg1[1], "CT"))

to jest błąd, powinno być samo C
chyba że tablica była by wielo(dwu)wymiarowa.
poza tym chyba nie ma sensu używania equali dla jednego znaku.
if (Arg1[1]=='C')) powinno chyba działać.


A i cudzysłów(") używany jest do string'ów a apostrof (') do char'ów
Odpowiedz

  • +
  • -
conseil - zdjęcie conseil 24.07.2009

Właśnie też podejrzewałem błąd, ale nie chciałem uważać się za mądrzejszego od twórców AmxModX'a :]
ok, dzięki +pomógł.
Odpowiedz

  • +
  • -
mgr inż. Pavulon - zdjęcie mgr inż. Pavulon 24.07.2009

nie chciałem uważać się za mądrzejszego od twórców AmxModX'a

pomyłki się zdarzają każdemu ;)
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 24.07.2009

Poprawny jest zapis:
if (equali(Arg1[1], "CT"))
Oznacza, że string Arg1 zostanie porównany od drugiego znaku.

natomiast ten jest zły
if (equali(Arg1[1], "C"))
do porównania pojedynczego znaku służy jak napisał Pavulon zwykłe == ,skoro equali to trzeba jeszcze ujednolicić zapis przez &32
if (Arg1[1]&32 == 'c')
Odpowiedz

  • +
  • -
mgr inż. Pavulon - zdjęcie mgr inż. Pavulon 24.07.2009

W takim razie przepraszam za wprowadzenie w błąd.
Odpowiedz
Zablokowany