Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
SourceMod странности/заметки
_wS_ Дата: Суббота, 06.05.2017, 02:00:58 | Сообщение # 1
1

Похоже если удалить entity, то перед удалением чистится m_iName (targetname).

1. AcceptEntityInput(index, "Kill"); index был здесь "1.0 2.0 3.0" (origin x y z).
2. Старт трасировки с "1.0 2.0 5.0" до "1.0 2.0 0.0" (по идее entity не должна встретиться лучу).
3. entity встречается, ну и ладно, но тут интересно то, что удаётся узнать её classname, но в m_iName уже пусто "".

RequestFrame не помогает.
Пришлось делать CreateTimer(0.15, чтобы entity не встретилась лучу.
 
_wS_ Дата: Суббота, 27.01.2018, 06:54:19 | Сообщение # 2
2

Код
X(v[])
{
   v[0] += 1;
   PrintToServer("%d", v[0]);
}

public OnPluginStart()
{
   xz();
   xz();
   xz();
}

xz()
{
   X({2});
}

// Ожидалось:
3
3
3

// Результат:
3
4
5


Но если сделать:

Код
public OnPluginStart()
{
   X({2});
   X({2});
   X({2});
}


То результат:
3
3
3
 
_wS_ Дата: Воскресенье, 04.03.2018, 12:29:12 | Сообщение # 3
3

Код
public OnPluginStart()
{
    new Handle:hPack = CreateDataPack();
    WritePackCell(hPack, 1);
    WritePackCell(hPack, 2);
    
    ResetPack(hPack);
    PrintToServer("%d %d", ReadPackCell(hPack), ReadPackCell(hPack)); // Хотели: "1 2". Получили: "2 1".
    
    // Решение:
    ResetPack(hPack);
    new v1 = ReadPackCell(hPack);
    new v2 = ReadPackCell(hPack);
    PrintToServer("%d %d", v1, v2); // "1 2"

    CloseHandle(hPack);
}
 
_R1KO_ Дата: Четверг, 21.06.2018, 22:31:44 | Сообщение # 4
Сообщений: 200
Репутация: 30 [ +/- ]
Цитата _wS_ ()
 PrintToServer("%d\n%d", ReadPackCell(hPack), ReadPackCell(hPack));

Вероятно форматирование начинается с конца строки (и соответственно с последних аргументов)
 
_wS_ Дата: Пятница, 28.09.2018, 17:56:53 | Сообщение # 5
Код
Func(a, b) PrintToServer("%d, %d", a, b); // 2, 1 - в обратном порядке

public OnPluginStart()
{
    new v = 0;
    Func(++v, ++v);
}
 
_wS_ Дата: Пятница, 19.10.2018, 01:45:12 | Сообщение # 6
Код
#define VAR 50

public OnPluginStart()
{
    if (VAR < 10) {} // warning 205: redundant code: constant expression is zero.
    // Fix: if (VAR < StringToInt("10")) {}
}

Но так можно:

Код
#define VAR 50.0

public OnPluginStart()
{
    if (VAR < 10.0) {}
}

Ага, это же float, а не int, это же прям всё меняет ppc
 
_wS_ Дата: Понедельник, 22.10.2018, 22:04:59 | Сообщение # 7
Код
PrintToServer("-> %d", StrContains("SMtiSeryozno?", "", false));
// -> 0

Что? ..
 
_wS_ Дата: Понедельник, 22.10.2018, 22:10:52 | Сообщение # 8
Код
new Handle:kv = CreateKeyValues("");
KvJumpToKey(kv, "chat", true);
KvSetNum(kv, "x", 1);
    
decl String:s[12];
s[0] = 0;
KvGetSectionName(kv, s, sizeof(s));
PrintToServer("-> '%s'", s);
    
CloseHandle(kv);

-> 'Chat'
Да да, меняй регистр символов как тебе захочется.
Лучше использовать SMCParser.
 
_wS_ Дата: Вторник, 06.09.2022, 01:10:43 | Сообщение # 9
Код
public void OnPluginStart()
{
    char s[] = "abc";
    PrintToServer("'%s'", s[1]); // "bc" OK
    PrintToServer("'%s'", s[1] ? s[1] : s[1]); // "b" FAIL

    // Решение:
    PrintToServer("'%s'", s[s[0] ? 1 : 1]); // "bc"
}


Код
// Так работает.
public void OnPluginStart()
{
    char a[] = "aa";
    char b[] = "bb";

    int i = 0;
    PrintToServer("'%s'", i ? a : b]); // "bb" OK
}
 
_wS_ Дата: Вторник, 06.09.2022, 01:16:13 | Сообщение # 10
После смены карты userid'ы ботов меняются без player_disconnect вызова (userid'ы игроков не меняются).
Получается бот покинул сервер, но не покинул его, ок.
 
_wS_ Дата: Пятница, 16.08.2024, 13:09:45 | Сообщение # 11
Код
void A()
{
    PrintToServer("1");
}

public void OnPluginStart()
{
    //PrintToServer(A() ? "2" : "3"); // warning 209: function "A" should return a value

    if (A()) { // No errors
        PrintToServer("2");
    } else {
        PrintToServer("3");
    }
}

// 1
// 3


gde
 
_wS_ Дата: Пятница, 06.09.2024, 19:49:08 | Сообщение # 12
Код
char[] S()
{
    static char s[] = "b";
    return s;
}

void V()
{
    int i = 0;
    i++;
    i++;
    i++;
    i++;
    PrintToServer("%s", i ? "a" : S()); // [SM] Exception reported: Instruction contained invalid parameter
}

public void OnPluginStart()
{
    V();
}


Это в этом маленьком коде видно место ошибки, но если вы вызываете функцию с большим кол-вом строк кода и вызывающий ошибку код где-то внизу, то найти такую ошибку сложно. Лог пытается пожаловаться на строку, где вызывается проблемная функция, а когда вы пытаетесь добавить пошаговый дебаг в этой функции, то ничего не работает, не PrintTo, не LogTo, и удачи вам в поисках, говорит SM. Мне лог пожаловался на строку "return Plugin_Handled", хотя вызов проблемной функции находился на 3 строки выше.

Так тоже не работает:

Код
static char s[] = "a";
PrintToServer("%s", i ? s : S()); // [SM] Exception reported: Instruction contained invalid parameter


Так работает:

Код
char[] X()
{
    static char s[] = "x";
    return s;
}

PrintToServer("%s", i ? X() : S());
 
  • Страница 1 из 1
  • 1
Поиск: