SourceMod странности/заметки
| |
_wS_
|
Дата: Суббота, 06.05.2017, 02:00:58 | Сообщение # 1 |
|
Частенько нелогичная ерунда встречается в SM скриптинге, думаю пригодится эта темка со списком найденных глупостей. Вы если наткнулись, тоже можете поделиться.
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
Пишешь код, придерживаясь логики, и думаешь что SM покажет: 3 3 3
Но у SM своя логика, и он показывает: 3 4 5
Код stock X(v[]) { static key = 0; if (!key) key = 1; v[0] += key; PrintToServer("%d", v[0]); }
public OnPluginStart() { xz(); xz(); xz(); }
stock xz() { X({2}); } Но если сделать
Код public OnPluginStart() { X({2}); X({2}); X({2}); } Или
Код public OnPluginStart() { xz(); }
stock xz() { 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\n%d", ReadPackCell(hPack), ReadPackCell(hPack)); // результат: // 2 // 1 // SM, ты серьёзно? Ну ок, придётся записывать в обратном порядке или делать так: ResetPack(hPack); new v1 = ReadPackCell(hPack); new v2 = ReadPackCell(hPack); PrintToServer("%d\n%d", v1, v2); // результат: // 1 // 2 // Спасибо SM, да, так и нужно, молодец..
CloseHandle(hPack); }
SDKHooks_TakeDamage тоже тупой. Нанес боту 75 dmg, через сек проверил, у него осталось 25 (все правильно). Нанес 100, у него осталось 27, пздц.
|
|
| |
_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' Да да, меняй регистр символов как тебе захочется, молодец.
|
|
| |
_wS_
|
Дата: Пятница, 02.11.2018, 01:11:23 | Сообщение # 9 |
|
На такой нелогичный бред я еще не натыкался, это рекорд.
Код stock zzz() // вызывается после каждой смены карты { LogError("my text"); // тут именно const текст и нет никаких переменных } Меняем карту пецот раз и в логе видим my text - всё правильно. Но как только перезагружаем один из VIP модулей, которые по VIP_ITEM_SELECT флагу (я так и не понял почему именно они) (sm plugins reload ws_vip/vip_flags_and_immunity), и меняем карту, то после смены карты мы видим не my text, а s_and_immunity - это просто полный бред нелогичный. Раз ошибка тупая, то и фиксить её будем по-тупому:
Код stock zzz() { LogError("Eto kostiL, ne udivlyaytes'"); // выводит бред LogError("my text"); // выводит правильно } Но у меня было так:
Код decl String:s[100]; FormatEx(s, ... Поэтому чтобы FormatEx не сломался пришлось сделать:
Код decl String:s[100]; for (new i = 0; i <= 5; i++) strcopy(s, sizeof(s), "Kostil' - rekord tuposti"); FormatEx(s, ... // и только теперь FormatEx сработает верно
|
|
| |
_wS_
|
Дата: Вторник, 06.09.2022, 01:10:43 | Сообщение # 10 |
|
Цитата public void OnPluginStart() { char s[] = "abc"; PrintToServer("'%s'", s[1]); // "bc"  PrintToServer("'%s'", s[1] ? s[1] : s[1]); // "b"  }
|
|
| |
_wS_
|
Дата: Вторник, 06.09.2022, 01:16:13 | Сообщение # 11 |
|
После смены карты userid'ы ботов меняются без player_disconnect вызова (userid'ы игроков не меняются). Получается бот покинул сервер, но не покинул его, ок.
|
|
| |
|