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, это же прям всё меняет
|
|
| |
_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
|
|
| |
_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());
|
|
| |