Заказать Плагин Контакты Поиск

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

  • Страница 1 из 1
  • 1
Форум » SourceMod - Counter Strike Source && CS GO » Уроки/Статьи/Функции/Задачи » SourceMod странности/заметки
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
Сообщений: 201
Репутация: 29 [ +/- ]
Цитата _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'
Да да, меняй регистр символов как тебе захочется, молодец.
 
_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 сработает верно
 
Форум » SourceMod - Counter Strike Source && CS GO » Уроки/Статьи/Функции/Задачи » SourceMod странности/заметки
  • Страница 1 из 1
  • 1
Поиск: