Иконка ресурса

filipok

Участник
Сообщения
72
Реакции
28
  • Автор ресурса
  • #61
Ого. Спасибо, как только появится время, начну тестировать и разбираться в алгоритме.
Я тоже набросал на основе ваших замечаний и предложенеий алгоритм, который основывается на таймере как и говорил @gibs . Но выкладывать пока не стал, так как не тестил на сервере (времени к сожалению нет). Пытаюсь что-то делать по пути с работы и на работу на планшете.

К сожалению времени свободного очень мало.
 

Вложения

  • MapLimit.sp
    4 КБ · Просмотры: 11

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
Ого. Спасибо, как только появится время, начну тестировать и разбираться в алгоритме.
Я тоже набросал на основе ваших замечаний и предложенеий алгоритм, который основывается на таймере как и говорил @gibs . Но выкладывать пока не стал, так как не тестил на сервере (времени к сожалению нет). Пытаюсь что-то делать по пути с работы и на работу на планшете.

К сожалению времени свободного очень мало.
Это работать не будет.
Над элементарным плагином в 100 строчек нет нужны работать бессонными ночами.
Ты понимаешь что делает оператор return?
 

filipok

Участник
Сообщения
72
Реакции
28
  • Автор ресурса
  • #63
Это работать не будет.
работать не будет то, что я сделал или сам принцип неверен?
Над элементарным плагином в 100 строчек нет нужны работать бессонными ночами.
Есть примерно час по дороге с работы и на работу. Ночью я сплю, не переживай.
Ты понимаешь что делает оператор return?
видимо нет, расскажи.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #64
видимо нет, расскажи.
завершает работу функции и если задано то возвращает значение.
Ты просто налепил его где не нужно.
Например
PHP:
}else{
                        IsPlayerInZone[iclient] = false;
                        AlreadyNotifyed[iclient] = false;
                        return;
                    }
Он здесь не нужно т.к. дальше по коду ничего не идет зачем завершать ф-ю с помощью return если она и так завершится
 

filipok

Участник
Сообщения
72
Реакции
28
  • Автор ресурса
  • #65
@R1KO , спасибо. Не могли бы вы тогда пояснить, с какой целью return стоит в первой части условия if?
PHP:
if ((StrEqual(location, MZones[i]))){
                        IgniteEntity(iclient, 1.0);
                        SetEntPropFloat(iclient, Prop_Data, "m_flLaggedMovementValue", 0.3);
                        IsPlayerInZone[iclient] = true;
                        if(!AlreadyNotifyed[iclient]){
                            PrintHintText(iclient, "Запрещенная зона, на сервере менее %d игроков", (MAX_PLAYERS_WHITHOUT_MIDDLE +1));
                            AlreadyNotifyed[iclient] = true;
                        }
                        return;
                    }else{
                        IsPlayerInZone[iclient] = false;
                        AlreadyNotifyed[iclient] = false;
                        //return;
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #66
@filipok, а откуда инфа что оно там нужно?
 

filipok

Участник
Сообщения
72
Реакции
28
  • Автор ресурса
  • #67
Return появился по чьей-то подсказке, после чего этот кусок кода заработал. Я подумал, что ретурн возвращает выполнение функции к началу условия)
 

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
работать не будет то, что я сделал или сам принцип неверен?

Есть примерно час по дороге с работы и на работу. Ночью я сплю, не переживай.
видимо нет, расскажи.
Ну тут как-то нет причин выпендриваться с твоей стороны. Там масса ошибок, начиная, что ты создаешь таймер, который делает одно и то же, каждый раз, когда игрок входит на сервер, и заканчивая не понимаем стандартных операторов языка. Зачем-то хукнул событие попадания пули, коллбек ничего не делает.
return - это выход из функции. Если функция не имеет тип void, то return должен возвращать значение.
ЗЫ: Рико, он использует ретурн в середине цикла при обходе клиентов.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Больше всего позабавил этот момент:
C-подобный:
for (int i = 0; i < sizeof(MZones); ++i){
        MZones[i][0] = 0;
    }

    ...
        for (i = 0; i < sizeof(MZones); ++i){
            FormatEx(MapName, sizeof(MapName), "Zone_%i", i);
            MZones[i][0] = '\0';
Два цикла, один из которых выполняет двойную работу (предыдущего цикла и свою).
И отдельно:
C-подобный:
CreateTimer(1.0, Timer_UserCheck, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);

public Action:Timer_UserCheck(Handle:timer){
    for( int iclient = 1; iclient <= MaxClients; iclient++ )
С таким плагином, при частом посещении игроками, сервер ляжет уже через несколько десятков минут (повезёт, если сменится карта), не говоря о жутких лагах до этого. :biggrin: Оффтоп
@filipok, таймер нужен общий, с циклом по всем игрокам. Либо управляемый через событие player_team для каждого игрока. Тогда ещё смысл есть.
 

filipok

Участник
Сообщения
72
Реакции
28
  • Автор ресурса
  • #70
таймер нужен общий, с циклом по всем игрокам. Либо управляемый через событие player_team для каждого игрока. Тогда ещё смысл есть.
На будущее уточню. Правильно ли я понял? Т.е. нужно было подобрать событие, которое не выполняется для отдельного игрока? Например так?
PHP:
public Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast){
    CreateTimer(1.0, Timer_UserCheck, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}
public Action:Timer_UserCheck(Handle:timer){
    for( int iclient = 1; iclient <= MaxClients; iclient++ ){
        ....
}
Зачем-то хукнул событие попадания пули, коллбек ничего не делает.
Идея была в том, что бы заблочить попадание пули по цели, когда игрок в запретной зоне.

ЗЫ, никто не выпендривается, это реакция на твой "папский" стиль общения.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Т.е. нужно было подобрать событие
Ничего тут не нужно подбирать. Всего по варианту (обобщённо говоря) на таймер с флагом TIMER_FLAG_NO_MAPCHANGE и без него:
PHP:
public void OnConfigsExecuted() CreateTimer(1.0, Timer_UserCheck, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
PHP:
public void OnPluginStart() CreateTimer(1.0, Timer_UserCheck, _, TIMER_REPEAT);
С внутренним содержимым для обоих:
PHP:
public Action:Timer_UserCheck(Handle:timer){
    for( int iclient = 1; iclient <= MaxClients; iclient++ ){
        if (IsClientInGame(iclient) && IsPlayerAlive(iclient)){
            ...
        }
    }
    return Plugin_Continue;
}
 

maize

Участник
Сообщения
100
Реакции
7
Баги плагина: на CS:GO

1. На скрине видно, как иногда бегают живые люди, как селедки, и это касается всех карт, в том числе д2.

2. Играя на дасте 2, после конца раунда, бывает жгет по 3 ед урона огнем в начале нового раунда.

3. Меняя карту на 35 хп или остальные карты другого формата, огонь начинает жечь со старта, например на карте 35 хп, после смены с даста, в каждом раунде начинает жечь пока не умрем, убирая оружие. И этот огонь переходит с нами на другие карты.

4. В сп я настроил bury_time 120 , думал, что оружие будет исчезать в запрещенной зоне через 120 секунд, ан нет, исчезает как обычно.

Отдельно вопрос от себя, если я не правильно бури тайм настроил - отпишитесь пожалуйста, и как настроить игнайт, чтобы он не тикал по 1 хп в сек, а тикал по 1 хп в 2 секунды?
 

Вложения

  • plugin.jpg
    plugin.jpg
    140.8 КБ · Просмотры: 33

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
@maize, можешь попробовать мой. Правда, я набрал показательную версию, почти не проверяя. Но, может и удачно)
 

maize

Участник
Сообщения
100
Реакции
7
@maize, можешь попробовать мой. Правда, я набрал показательную версию, почти не проверяя. Но, может и удачно)

Проверил, новый раунд не поджигает по 3хп, на других картах все нормально. Бури тайм работает адекватно. В секунду жарит по 2.5.

Альмазон, что нужно поменять, чтобы настроить 1 хп через 2 секунды ignite.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
что нужно поменять, чтобы настроить 1 хп через 2 секунды ignite
Ничего. Функция поджигания не имеет подобных настроек. Только время и "размерность" горения.
не поджигает по 3хп, на других картах все нормально
В смысле, тоже нормально, везде всё ОК?
 

maize

Участник
Сообщения
100
Реакции
7
Ничего. Функция поджигания не имеет подобных настроек. Только время и "размерность" горения.
В смысле, тоже нормально, везде всё ОК?

Да, все нормально.
так как там настроить это? Где настраивать по игнайту Только время и "размерность" горения.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
настраивать по игнайту
У него же: IgniteEntity(client, Время, false, Размерность); Оффтоп Допишешь внутри скобок размер, как показано.
Значит, это последняя нормальная версия без SDKHooks и таймеров.
Обхитрить то запрет теперь куда сложнее?
 

maize

Участник
Сообщения
100
Реакции
7
У него же: IgniteEntity(client, Время, false, Размерность); Оффтоп Допишешь внутри скобок размер, как показано.Значит, это последняя нормальная версия без SDKHooks и таймеров.
Обхитрить то запрет теперь куда сложнее?

Есть лазейки) кстати кеш и кобблстоне не работают. заходя туда нету возгорания , хотя пишет , что запрещено. и в маплимите они присутствуют.

даст 2, инферно, мираж - работают.

На счет лазеек - есть места в которые огонь не попадает, типо на дасте2 в самом пленте можно не сгореть, прекращает жарить. Чуть дальше от мидла ближе к пленту Б есть место где тоже не жгет, ну это и не важно, никто не полезит.
 

filipok

Участник
Сообщения
72
Реакции
28
  • Автор ресурса
  • #80
Всем привет. В общем в первом посте плагин на основе SDHook. В запретных зонах замедляет и поджигает игроков. Последующие более оптимизированные версии лично для себя отмел. Запретные зоны легко обойти (идите на шифте и ничего не произойдет). По поводу нагрузки. Да, она больше, но лучше уж так, чем с возможностью обхода (вариант обхода игроки находят очень быстро, тем самым весь функционал плагина сводится на нет).
 
Сверху Снизу