Контакты Поиск

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

  • Страница 1 из 1
  • 1
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Смена индексов на карте
Смена индексов на карте
Regedit Дата: Среда, 03.12.2014, 03:52:37 | Сообщение # 1
Сообщений: 135
Репутация: 1 [ +/- ]
1)В начале каждого раунда индексы предметов (оружия\дверей\ведер..) меняются? (экспериментально выяснил что да, хотел бы уточнить у бывалых кодеров нормально ли это)
В чем заключаться эксперимент:
Я создал на карте "свет" и его индекс записал в переменную чтоб потом удалить свет. Если я в конце раунда удаляю свет, свет удалился хорошо, а если я удалю свет в начале раунда, есть большая вероятность, что удалиться оружие или что-то другое на карте. Так происходит потому что, индексы предметов на карте поменялись в новом раунде, и теперь значение которое я записал в переменную может быть равно оружию или предмету на карте, следовательно в таком случае удалиться предмет или оружие.
Так вот еще 2 вопроса:
1.1)Верно ли мое утверждение?
1.2)Если я не буду удалять в таком случае свет (он сам пропадает в начале нового раунда) ничего страшного?
 
хвостег Дата: Среда, 03.12.2014, 10:30:34 | Сообщение # 2
Сообщений: 161
Репутация: 53 [ +/- ]
Создаю триггер и запускаю на него сингл хук.
Как известно, после события раунд старт все энтити пересоздаются (кроме кастомных), отсюда вопрос, сингл хук продолжает свою работу, после этого события, или нет, стоит ли делать анхук?
Заранее спасибо.
 
BarD Дата: Среда, 03.12.2014, 11:41:41 | Сообщение # 3
Сообщений: 942
Репутация: 132 [ +/- ]
Сингл хук делается на определенный энтити, так? Если энтити нет, то и хук тоже не будет работать. Следовательно, хук надо каждый раунд делать заново. Думаю, создатели СМ предусмотрели такой вариант :)

Добавлено (03.12.2014, 11:41:41)
---------------------------------------------
Regedit, насколько я знаю, нестандартные энтити удаляются после начала каждого раунда. Если ты не "зачищаешь" переменную после конца/начала раунда, и в прошлом раунде на ней висел индекс, то вполне возможно, что будет проблема. Советую занулять переменную в начале каждого раунда, дабы избежать конфликтов.

 
Regedit Дата: Среда, 03.12.2014, 14:31:12 | Сообщение # 4
Сообщений: 135
Репутация: 1 [ +/- ]
кроме кастомных - что это?
 
_wS_ Дата: Среда, 03.12.2014, 15:02:11 | Сообщение # 5
Цитата Regedit ()
1)В начале каждого раунда индексы предметов (оружия\дверей\ведер..) меняются? (экспериментально выяснил что да, хотел бы уточнить у бывалых кодеров нормально ли это)

Да, индекс того же самого предмета в следующем раунде может быть другим, ничего не поделать.

Цитата Regedit ()
Я создал на карте "свет" и его индекс записал в переменную чтоб потом удалить свет. Если я в конце раунда удаляю свет, свет удалился хорошо, а если я удалю свет в начале раунда, есть большая вероятность, что удалиться оружие или что-то другое на карте.

Если ты создал предмет, то ты не можешь удалить его в начале следующего раунда - он удалится сам (хотя есть несколько classname исключений). Индексы хранить ненадежно, есть полезные функции EntIndexToEntRef и EntRefToEntIndex:

Код
// глоб переменная, в которой храним наш созданный предмет
new g_Ref = INVALID_ENT_REFERENCE;

// Создал предмет (есть entity индекс) и сохраняешь его так
g_Ref = EntIndexToEntRef(entity);

// Теперь если надо удалить его, то
if (g_Ref != INVALID_ENT_REFERENCE)
{
    new entity = EntRefToEntIndex(g_Ref);
    if (entity > 0)
    {
       // Это точно тот предмет, который мы создавали
       AcceptEntityInput(entity, "Kill");
    }
    g_Ref = INVALID_ENT_REFERENCE;
}


Цитата Regedit ()
Если я не буду удалять в таком случае свет (он сам пропадает в начале нового раунда) ничего страшного?

Ничего страшного. Создавать свет надо каждый раунд, в начале следующего сам удалится. Команда есть report_entities, тестируй.

Цитата хвостег ()
стоит ли делать анхук

Unhook имеет смысл делать, только если entity еще жива. В начале след раунда удалится, значит не нужно.
И проверить это несложно:

1. Создай проп, выведи в чат индекс (допустим 350 он), хукни OnTakeDamage
2. После OnTakeDamage в чат выводи что-нить "work"
3. Долбани по пропу, чтобы в чат написало "work"
4. Удали проп (sv_cheats 1;ent_remove 305)
5. Снова создай проп, выведи в чат индекс (он будет таким же 305) - OnTakeDamage хук не делай
6. Долбани по новому пропу, в чат сообщение не выдает, значит был unhook этого индекса, когда он был удален
 
Regedit Дата: Среда, 03.12.2014, 17:42:25 | Сообщение # 6
Сообщений: 135
Репутация: 1 [ +/- ]
wS, спасибо.
 
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Смена индексов на карте
  • Страница 1 из 1
  • 1
Поиск: