Русское сообщество по скриптингу

магические числа 1.8.3 client_connect

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

магические числа 1.8.3 client_connect

Сообщение Dmitry Beast » 19 мар 2017, 21:19

Добрый вечер.

Есть такой код

Код: Выделить всё
new g_Admin
new g_Vip
new g_All

public client_connect
(id)
{
    g_All++
    new iFlags = get_user_flags(id);
    if (iFlags & ADMIN_BAN)
         {
           g_Admin++
           }
    if (iFlags & ADMIN_LEVEL_H)
           {
           g_Vip++
           }
}

public client_disconnected(id)
{
    g_All--
    new iFlags = get_user_flags(id);
    if (iFlags & ADMIN_BAN)
           {
           g_Admin--
           }
    if (iFlags & ADMIN_LEVEL_H)
           {
           g_Vip--
           }


И при выводе этих значений

Код: Выделить всё
            Len += format(Message[Len], 511 - Len, "^n%L: %d из 32", LANG_PLAYER, "APLAYERS", g_All)
            Len += format(Message[Len], 511 - Len, "^n%L: %d", LANG_PLAYER, "ADMINS", g_Admin)
            Len += format(Message[Len], 511 - Len, "^n%L: %d", LANG_PLAYER, "VIPS", g_Vip


Выводит какието магические значения, не подлежащие действительности, иной раз и даже не редко адми\вип показывает отрицательные значения.
До обновления с 182 на 183 было всё нормально, обновился и вот такая ерунда стала. Кто что может подсказать по этому поводу?

Добавлено спустя 4 минуты 19 секунд:
Сейчас проверил, сменилась карта, админов показывает как надо, перезахожу на сервер, становится -1, еще раз -2 и т.д. тоже и с вип, а с общим кол-вом игроков не минусуется, показывает вроде верно теперь(почему-то)..

Добавлено спустя 6 минут 3 секунды:
сначала было так

Код: Выделить всё
new g_Admin=0
new g_Vip=0
new g_All=0

и игроки и админы с вип показывались не правдивые значаения
я изменил на

Код: Выделить всё
new g_Admin
new g_Vip
new g_All


игроков, вроде как стало нормально отображать а вип с админ в минуса уходят при выходе, а при заходе не прибавляются
Аватара пользователя
Dmitry Beast
 
Сообщения: 1560
Зарегистрирован: 24 дек 2010, 10:35
Откуда: Египет
Благодарил (а): 440 раз.
Поблагодарили: 207 раз.
Опыт программирования: Больше трех лет
Языки программирования: All Languages

Re: магические числа 1.8.3 client_connect

Сообщение Bos93 » 19 мар 2017, 21:24

B 183 ведь убрали client_connect, теперь там client_connected
Всем добра, любви и осознанности.

Nosce animum tuum.

А осознание и есть, что понял и осмыслил..
А коль не думал ты о том, то кто о том замыслил..?
Аватара пользователя
Bos93
 
Сообщения: 1425
Зарегистрирован: 03 апр 2010, 13:44
Благодарил (а): 149 раз.
Поблагодарили: 514 раз.

Re: магические числа 1.8.3 client_connect

Сообщение Dmitry Beast » 19 мар 2017, 22:07

до коннекта стояло путинсервер, это я уже сменил попробывать...
И когда компилю. не выдаёт предупреждения, хотя когда компилил с client_disconnect писал пред, что нужно коннектед..
Аватара пользователя
Dmitry Beast
 
Сообщения: 1560
Зарегистрирован: 24 дек 2010, 10:35
Откуда: Египет
Благодарил (а): 440 раз.
Поблагодарили: 207 раз.
Опыт программирования: Больше трех лет
Языки программирования: All Languages

Re: магические числа 1.8.3 client_connect

Сообщение Mistrick » 19 мар 2017, 22:37

Dmitry Beast, флаги админа могут выдать позже чем при коннекте. Зато при выходе они будут. Вот и получаешь отрицательные.
Захотел сэкономить на подсчете игроков, теперь думай как правильно их считать самому.
Аватара пользователя
Mistrick
Скриптер
 
Сообщения: 2940
Зарегистрирован: 04 ноя 2012, 18:15
Благодарил (а): 43 раз.
Поблагодарили: 1247 раз.
Языки программирования: PAWN
С/С++(few above zero)

Re: магические числа 1.8.3 client_connect

Сообщение lop50956 » 20 мар 2017, 00:27

Не занимайся 'оптимизацией', это все говно.
Аватара пользователя
lop50956
 
Сообщения: 178
Зарегистрирован: 29 ноя 2016, 00:36
Забанен
Благодарил (а): 18 раз.
Поблагодарили: 16 раз.
Опыт программирования: Больше трех лет
Языки программирования: Php

Re: магические числа 1.8.3 client_connect

Сообщение Dmitry Beast » 20 мар 2017, 02:56

возможно кто-то столконется с такой же проблеймой..

изначально было так
Код: Выделить всё
new g_Admin=0
new g_Vip
=0
new g_All
=0

public client_putinserver
(id)
{
    g_All++
    new iFlags = get_user_flags(id);
    if (iFlags & ADMIN_BAN)
         {
           g_Admin++
           }
    if (iFlags & ADMIN_LEVEL_H)
           {
           g_Vip++
           }
}

public client_disconnected(id)
{
    g_All--
    new iFlags = get_user_flags(id);
    if (iFlags & ADMIN_BAN)
           {
           g_Admin--
           }
    if (iFlags & ADMIN_LEVEL_H)
           {
           g_Vip--
           }
}


абсолютно все 3 массива "хаотично" меняли данные.

Замаенил на

Код: Выделить всё
new g_Admin
new g_Vip
new g_All

public client_connect
(id)
{
    g_All++
    new iFlags = get_user_flags(id);
    if (iFlags & ADMIN_BAN)
         {
           g_Admin++
           }
    if (iFlags & ADMIN_LEVEL_H)
           {
           g_Vip++
           }
}

public client_disconnected(id)
{
    g_All--
    new iFlags = get_user_flags(id);
    if (iFlags & ADMIN_BAN)
           {
           g_Admin--
           }
    if (iFlags & ADMIN_LEVEL_H)
           {
           g_Vip--
           }
}


игроки начали нормально засчитываться, остальное "магия".

И уже после подсказки Mistrick, всё поменял обратно и убрал "=0" и вернул "client_putinserver"

Код: Выделить всё
new g_Admin
new g_Vip
new g_All

public client_putinserver
(id)
{
    g_All++
    new iFlags = get_user_flags(id);
    if (iFlags & ADMIN_BAN)
         {
           g_Admin++
           }
    if (iFlags & ADMIN_LEVEL_H)
           {
           g_Vip++
           }
}

public client_disconnected(id)
{
    g_All--
    new iFlags = get_user_flags(id);
    if (iFlags & ADMIN_BAN)
           {
           g_Admin--
           }
    if (iFlags & ADMIN_LEVEL_H)
           {
           g_Vip--
           }
}


Добавлено спустя 1 минуту 53 секунды:
Остальное, в плане экономии и оптимизации, ничего вообще не хотел такого, просто обновился с 182 на 183 и началось это.
Так понял каким-то образом повлияло
Код: Выделить всё
new g_Admin=0
new g_Vip
=0
new g_All
=0

вместо
Код: Выделить всё
new g_Admin
new g_Vip
new g_All


Добавлено спустя 1 минуту 11 секунд:
Mistrick писал(а):Dmitry Beast,
Захотел сэкономить на подсчете игроков, теперь думай как правильно их считать самому.

я вот об этом, вообще не понял в какую это кассу?
Че экономить на подсчете игроков? Зашел - плюсанул, вышел минусанул.

Добавлено спустя 2 минуты 3 секунды:
И опять же нет, сейчас, только что захожу на сервер, а там уже с админами всё ок, а игроков вместо 11 пишет 5

Добавлено спустя 4 минуты 14 секунд:
Итог, проблема осталась

Так показывает правильное кол-во игров

Код: Выделить всё
new g_Admin
new g_Vip
new g_All

public client_connect
(id)
{
    g_All++
    new iFlags = get_user_flags(id);
    if (iFlags & ADMIN_BAN)
         {
           g_Admin++
           }
    if (iFlags & ADMIN_LEVEL_H)
           {
           g_Vip++
           }
}

public client_disconnected(id)
{
    g_All--
    new iFlags = get_user_flags(id);
    if (iFlags & ADMIN_BAN)
           {
           g_Admin--
           }
    if (iFlags & ADMIN_LEVEL_H)
           {
           g_Vip--
           }
}

но показывает неправильное кол-во админов и вип
А так наоборот. показывает правильное кол-во вип и админов, но не правильное -кол-во игроков

Код: Выделить всё
new g_Admin
new g_Vip
new g_All

public client_putinserver
(id)
{
    g_All++
    new iFlags = get_user_flags(id);
    if (iFlags & ADMIN_BAN)
         {
           g_Admin++
           }
    if (iFlags & ADMIN_LEVEL_H)
           {
           g_Vip++
           }
}

public client_disconnected(id)
{
    g_All--
    new iFlags = get_user_flags(id);
    if (iFlags & ADMIN_BAN)
           {
           g_Admin--
           }
    if (iFlags & ADMIN_LEVEL_H)
           {
           g_Vip--
           }
}


Подскажите, пожалуйста, что за магия?!

Добавлено спустя 58 секунд:
Это после обновления с 182 на 183
Аватара пользователя
Dmitry Beast
 
Сообщения: 1560
Зарегистрирован: 24 дек 2010, 10:35
Откуда: Египет
Благодарил (а): 440 раз.
Поблагодарили: 207 раз.
Опыт программирования: Больше трех лет
Языки программирования: All Languages

Re: магические числа 1.8.3 client_connect

Сообщение zhorzh78 » 20 мар 2017, 05:29

Сдается, что у игрока есть оба флага
Аватара пользователя
zhorzh78
 
Сообщения: 91
Зарегистрирован: 26 фев 2014, 10:07
Благодарил (а): 1 раз.
Поблагодарили: 23 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn (AMXX)

Re: магические числа 1.8.3 client_connect

Сообщение Dmitry Beast » 20 мар 2017, 15:35

zhorzh78 писал(а):Сдается, что у игрока есть оба флага

так в этом и задумка, есть и тот и тот добавляем в два массива и так же минусуем при выходе
Аватара пользователя
Dmitry Beast
 
Сообщения: 1560
Зарегистрирован: 24 дек 2010, 10:35
Откуда: Египет
Благодарил (а): 440 раз.
Поблагодарили: 207 раз.
Опыт программирования: Больше трех лет
Языки программирования: All Languages

Re: магические числа 1.8.3 client_connect

Сообщение zhorzh78 » 20 мар 2017, 16:09

и тот, и тот- в 3 массива.. составьте алгоритм и поймете в чем ошибка
Аватара пользователя
zhorzh78
 
Сообщения: 91
Зарегистрирован: 26 фев 2014, 10:07
Благодарил (а): 1 раз.
Поблагодарили: 23 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn (AMXX)

Re: магические числа 1.8.3 client_connect

Сообщение Dmitry Beast » 20 мар 2017, 17:23

zhorzh78 писал(а):и тот, и тот- в 3 массива.. составьте алгоритм и поймете в чем ошибка

не понимаю о чем ты мне пытаешься сказать..
на 182 норм работало при путинсервер, перешел на 183 и началась вот эта магия...

Добавлено спустя 59 секунд:
Хотел обойти таким образом, только что затестил, админы\випы также глючат..

Код: Выделить всё
public client_connect(id)g_All++

public client_putinserver(id)
{
    new iFlags = get_user_flags(id);
    if (iFlags & ADMIN_BAN)
         {
           g_Admin++
           }
    if (iFlags & ADMIN_LEVEL_H)
           {
           g_Vip++
           }
}

public client_disconnected(id)
{
    g_All--
    new iFlags = get_user_flags(id);
    if (iFlags & ADMIN_BAN)
           {
           g_Admin--
           }
    if (iFlags & ADMIN_LEVEL_H)
           {
           g_Vip--
           }


Добавлено спустя 53 секунды:
перестаю соображать, что за бред?! :crazy:

Добавлено спустя 50 минут 45 секунд:
Магическим образом этот способ, вроде стал работать, как надо :dntknw: :crazy:

Код: Выделить всё
public client_connect(id)g_All++

public 
client_putinserver(id)
{
    new 
iFlags get_user_flags(id);
    if (
iFlags ADMIN_BAN)
         {
           
g_Admin++
           }
    if (
iFlags ADMIN_LEVEL_H)
           {
           
g_Vip++
           }
}

public 
client_disconnected(id)
{
    
g_All--
    new 
iFlags get_user_flags(id);
    if (
iFlags ADMIN_BAN)
           {
           
g_Admin--
           }
    if (
iFlags ADMIN_LEVEL_H)
           {
           
g_Vip--
           }
Аватара пользователя
Dmitry Beast
 
Сообщения: 1560
Зарегистрирован: 24 дек 2010, 10:35
Откуда: Египет
Благодарил (а): 440 раз.
Поблагодарили: 207 раз.
Опыт программирования: Больше трех лет
Языки программирования: All Languages

След.

Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 11