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

Сборник полезных функций

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

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

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

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

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

Re: Сборник полезных функций

Сообщение noo00oob » 16 авг 2011, 09:52

Что это вообще за бредятина - посылаем игроку команду, чтоб он послал команду серверу, что он отсоединился. Если пакет с этой мессагой вдруг не дойдет до игрока, то он так и останется на сервере.
Один фрукт, страдающий недостачей времени, нашел его ради меня любимого и писал(а):
noo00oob, зачем родился на свет вообще? срать на форумах это понятно.. больше изъеба не найти как бэ? а то, что ты недоношенная скотина, сдерживайся, детка.
noo00oob
 
Сообщения: 1061
Зарегистрирован: 09 янв 2010, 21:52
Благодарил (а): 258 раз.
Поблагодарили: 394 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Half-Life

Re: Сборник полезных функций

Сообщение Fedcomp » 16 авг 2011, 11:21

А разве пакет от консольного кика доходит на 100%?
Не помогаю в ЛС - есть форум.
Плагины тоже не пишу, на форуме достаточно хороших скриптеров.


"я ставлю зависимости потому что мне приятно" - subb98 @ 2017
Аватара пользователя
Fedcomp
Администратор
 
Сообщения: 4936
Зарегистрирован: 28 авг 2009, 20:47
Благодарил (а): 813 раз.
Поблагодарили: 1317 раз.
Языки программирования: =>
pawn / php / python / ruby
javascript / rust

Re: Сборник полезных функций

Сообщение noo00oob » 16 авг 2011, 11:26

А ты сам подумай. Даже если от консольного кика пакет не дойдет, сервер игрока отсоеденит. А тут отсоеденение произойдет только если этот пакет дойдет до клиента, клиент его обработает, пошлет пакет что он отсоеденился, и этот последний пакет дойдет до сервера. Просто гениально, да?
Один фрукт, страдающий недостачей времени, нашел его ради меня любимого и писал(а):
noo00oob, зачем родился на свет вообще? срать на форумах это понятно.. больше изъеба не найти как бэ? а то, что ты недоношенная скотина, сдерживайся, детка.
noo00oob
 
Сообщения: 1061
Зарегистрирован: 09 янв 2010, 21:52
Благодарил (а): 258 раз.
Поблагодарили: 394 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Half-Life

Re: Сборник полезных функций

Сообщение Sho0ter » 16 авг 2011, 16:09

noo00oob писал(а):А ты сам подумай. Даже если от консольного кика пакет не дойдет, сервер игрока отсоеденит. А тут отсоеденение произойдет только если этот пакет дойдет до клиента, клиент его обработает, пошлет пакет что он отсоеденился, и этот последний пакет дойдет до сервера. Просто гениально, да?

MSG_ONE гарантирует доставку. КО.
Аватара пользователя
Sho0ter
 
Сообщения: 585
Зарегистрирован: 31 мар 2010, 19:18
Откуда: г. Белая Церковь, Украина
Благодарил (а): 12 раз.
Поблагодарили: 307 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Half-Life 1

Re: Сборник полезных функций

Сообщение noo00oob » 16 авг 2011, 16:26

Гарантирует, что сообщение отправится с сервера, а не дойдет до игрока. Даже если я и ошибаюсь - это способ через заднее место. Тем более где гарантия что от игрока сообщение дойдет и на сервере он не останется стоять посреди карты.
Один фрукт, страдающий недостачей времени, нашел его ради меня любимого и писал(а):
noo00oob, зачем родился на свет вообще? срать на форумах это понятно.. больше изъеба не найти как бэ? а то, что ты недоношенная скотина, сдерживайся, детка.
noo00oob
 
Сообщения: 1061
Зарегистрирован: 09 янв 2010, 21:52
Благодарил (а): 258 раз.
Поблагодарили: 394 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Half-Life

Re: Сборник полезных функций

Сообщение PRoSToTeM@ » 16 авг 2011, 17:13

Аватара пользователя
PRoSToTeM@
Скриптер
 
Сообщения: 2498
Зарегистрирован: 26 мар 2010, 00:12
Благодарил (а): 438 раз.
Поблагодарили: 1125 раз.

Re: Сборник полезных функций

Сообщение PRoSToTeM@ » 16 авг 2011, 21:37

Берёт наблюдателей игрока, возвращает число наблюдателей:
Код: Выделить всё
#include <engine>
 
stock FindPlayerSpectators
(pIdapSpectators[32])
{
        static iMaxPlayers;
        
        
if (!iMaxPlayers)
                iMaxPlayers get_maxplayers();
        
        
new iSpectators 0;
        
        
for (new pPlayer 1pPlayer <= iMaxPlayerspPlayer++)
        {
                if (!is_user_connected(pPlayer))
                        continue;
                if (is_user_alive(pPlayer))
                        continue;
                if (entity_get_int(pPlayerEV_INT_iuser2) != pId)
                        continue;
                
                apSpectators
[iSpectators++] = pPlayer;
        }
        
        
return iSpectators;
Аватара пользователя
PRoSToTeM@
Скриптер
 
Сообщения: 2498
Зарегистрирован: 26 мар 2010, 00:12
Благодарил (а): 438 раз.
Поблагодарили: 1125 раз.

Re: Сборник полезных функций

Сообщение Lt.RAT » 16 авг 2011, 23:27

noo00oob писал(а):А ты сам подумай. Даже если от консольного кика пакет не дойдет, сервер игрока отсоеденит. А тут отсоеденение произойдет только если этот пакет дойдет до клиента, клиент его обработает, пошлет пакет что он отсоеденился, и этот последний пакет дойдет до сервера. Просто гениально, да?


Ты правда считаешь, что все svc_ пакеты которые можно отправить (сервом или плагином) обрабатываются сервом после их отправки? Что за бред... Формирование нашего пакета, это чисто добавление его в нужную очередь на отправку и не более того, нечего больше серву чтоли делать, чтобы их самому исполнять...

Во вторых очередь на отправку в этом плане реализованна грамотно. Каждый байт в reliable stream подтверждается клиентом, и пока клиент не подтвердит доставку этих байт, серв будет их слать до посинения, делается там это окнами итп итд (кому интересно могут поискать примерную реализацию в других игрушках отправляющих пакеты юзая UDP, хл мало чем отличается, да и в хлсдк есть структуры по которым можно судить о реализации юзаемых буферов). Если клиент не будет подтверждать доставку, то серв будет отправлять все больше и больше данных, что приведет к переполнению и клиент будет отсоединен.

Насчет глючности работы, это конечно да, часть работы выполняет сам клиент, есть читы которые блокируют ряд пакетов, например svc_intermission, что приводит к тому что игрок может бегать и расстреливать всех, когда серв сообщает о смене карты, правда клиент к этому не может подготовиться, но это пофег, побегать пострелять это круче чем подождать лишние 2-5 секунд, или принудительно нажать реконнект (те читы которые я знал уже палит вак)

Кстати пакета, который бы соовщал серверу о дисконнекте как бы нету... Список клиентских пакетов:
Код: Выделить всё

clc_bad
clc_nop
clc_move
clc_stringcmd
clc_delta
clc_resourcelist
clc_tmove
clc_fileconsistiency
clc_voicedata
clc_hltv
clc_cvarvalue
clc_cvarvalue2

фактически как происходит дисконнект сказать трудно, сейчас лень лезть в код клиента, насколько я помню, при обработке svc_disconnect, там генерится один из видов intermission (виды intermission: svc_intermission, svc_finale, svc_disconnect) и все, судя по всему дальше где-то идет обработчик по этому флагу, а вот как общается он после этого с сервом надо смотреть... (может в clc_stringcmd, что-то посылает может нет... еще можно в коде посмотреть реагирование на ввод команды "disconnect" в консоли, может ее и отправляет он в clc_stringcmd)

Но то что сервер не обрабатывает пакеты, которые формируются плагинами (и не только) это точно!

ЗЫ тот вариант кика вполне пригоден, но я юзаю
Код: Выделить всё
 
stock kick_user
(id, const szKickMsg[]) 

    emessage_begin(MSG_ONESVC_DISCONNECT_id); // oranguntanz 
    ewrite_string(szKickMsg);
    emessage_end();


И чисто технически, лучше не использовать (szReason[] = "Your kicked !") константные предопределенные строки в объявлении, темболее с ошибками в тексте... хотя вам видней что в инклюд кидать.

Добавлено спустя 13 минут 24 секунды:
Отправка двух пакетов, надо ли оно вам в ваших инках смотрите сами, но обе мессаги имеют баги, о которых надо оговаривать заранее, хотя я отписывал в вики: Вы должны зарегистрироваться, чтобы видеть ссылки. ... SVC_FINALE
Код: Выделить всё
 
stock svc_finale
(id, const szMsg[]) 

    emessage_begin(MSG_ONESVC_FINALE_id);
    ewrite_string(szMsg);
    emessage_end();
}
 
stock svc_timescale
(idFloat:timescale

    emessage_begin(MSG_ONESVC_TIMESCALE_id);
    ewrite_long(_:timescale) ;
    emessage_end();
}  
Аватара пользователя
Lt.RAT
 
Сообщения: 301
Зарегистрирован: 30 сен 2009, 01:44
Благодарил (а): 4 раз.
Поблагодарили: 151 раз.
Языки программирования: Counter-Strike 1.6

Re: Сборник полезных функций

Сообщение DJ_WEST » 19 авг 2011, 10:41

Код: Выделить всё
stock crc32(const s_Buffer[])
{
        new a_CRC_Table[256] =
        {
                0x000000000x770730960xEE0E612C0x990951BA0x076DC4190x706AF48F0xE963A535,
                0x9E6495A30x0EDB88320x79DCB8A40xE0D5E91E0x97D2D9880x09B64C2B0x7EB17CBD,
                0xE7B82D070x90BF1D910x1DB710640x6AB020F20xF3B971480x84BE41DE0x1ADAD47D,
                0x6DDDE4EB0xF4D4B5510x83D385C70x136C98560x646BA8C00xFD62F97A0x8A65C9EC,
                0x14015C4F0x63066CD90xFA0F3D630x8D080DF50x3B6E20C80x4C69105E0xD56041E4,
                0xA26771720x3C03E4D10x4B04D4470xD20D85FD0xA50AB56B0x35B5A8FA0x42B2986C,
                0xDBBBC9D60xACBCF9400x32D86CE30x45DF5C750xDCD60DCF0xABD13D590x26D930AC,
                0x51DE003A0xC8D751800xBFD061160x21B4F4B50x56B3C4230xCFBA95990xB8BDA50F,
                0x2802B89E0x5F0588080xC60CD9B20xB10BE9240x2F6F7C870x58684C110xC1611DAB,
                0xB6662D3D0x76DC41900x01DB71060x98D220BC0xEFD5102A0x71B185890x06B6B51F,
                0x9FBFE4A50xE8B8D4330x7807C9A20x0F00F9340x9609A88E0xE10E98180x7F6A0DBB,
                0x086D3D2D0x91646C970xE6635C010x6B6B51F40x1C6C61620x856530D80xF262004E,
                0x6C0695ED0x1B01A57B0x8208F4C10xF50FC4570x65B0D9C60x12B7E9500x8BBEB8EA,
                0xFCB9887C0x62DD1DDF0x15DA2D490x8CD37CF30xFBD44C650x4DB261580x3AB551CE,
                0xA3BC00740xD4BB30E20x4ADFA5410x3DD895D70xA4D1C46D0xD3D6F4FB0x4369E96A,
                0x346ED9FC0xAD6788460xDA60B8D00x44042D730x33031DE50xAA0A4C5F0xDD0D7CC9,
                0x5005713C0x270241AA0xBE0B10100xC90C20860x5768B5250x206F85B30xB966D409,
                0xCE61E49F0x5EDEF90E0x29D9C9980xB0D098220xC7D7A8B40x59B33D170x2EB40D81,
                0xB7BD5C3B0xC0BA6CAD0xEDB883200x9ABFB3B60x03B6E20C0x74B1D29A0xEAD54739,
                0x9DD277AF0x04DB26150x73DC16830xE3630B120x94643B840x0D6D6A3E0x7A6A5AA8,
                0xE40ECF0B0x9309FF9D0x0A00AE270x7D079EB10xF00F93440x8708A3D20x1E01F268,
                0x6906C2FE0xF762575D0x806567CB0x196C36710x6E6B06E70xFED41B760x89D32BE0,
                0x10DA7A5A0x67DD4ACC0xF9B9DF6F0x8EBEEFF90x17B7BE430x60B08ED50xD6D6A3E8,
                0xA1D1937E0x38D8C2C40x4FDFF2520xD1BB67F10xA6BC57670x3FB506DD0x48B2364B,
                0xD80D2BDA0xAF0A1B4C0x36034AF60x41047A600xDF60EFC30xA867DF550x316E8EEF,
                0x4669BE790xCB61B38C0xBC66831A0x256FD2A00x5268E2360xCC0C77950xBB0B4703,
                0x220216B90x5505262F0xC5BA3BBE0xB2BD0B280x2BB45A920x5CB36A040xC2D7FFA7,
                0xB5D0CF310x2CD99E8B0x5BDEAE1D0x9B64C2B00xEC63F2260x756AA39C0x026D930A,
                0x9C0906A90xEB0E363F0x720767850x050057130x95BF4A820xE2B87A140x7BB12BAE,
                0x0CB61B380x92D28E9B0xE5D5BE0D0x7CDCEFB70x0BDBDF210x86D3D2D40xF1D4E242,
                0x68DDB3F80x1FDA836E0x81BE16CD0xF6B9265B0x6FB077E10x18B747770x88085AE6,
                0xFF0F6A700x66063BCA0x11010B5C0x8F659EFF0xF862AE690x616BFFD30x166CCF45,
                0xA00AE2780xD70DD2EE0x4E0483540x3903B3C20xA76726610xD06016F70x4969474D,
                0x3E6E77DB0xAED16A4A0xD9D65ADC0x40DF0B660x37D83BF00xA9BCAE530xDEBB9EC5,
                0x47B2CF7F0x30B5FFE90xBDBDF21C0xCABAC28A0x53B393300x24B4A3A60xBAD03605,
                0xCDD706930x54DE57290x23D967BF0xB3667A2E0xC4614AB80x5D681B020x2A6F2B94,
                0xB40BBE370xC30C8EA10x5A05DF1B0x2D02EF8D
        
}
 
        
new i_CRC 0xFFFFFFFF
        
        
for (new istrlen(s_Buffer); i++)
            i_CRC = (i_CRC >>> 8) ^ a_CRC_Table[(i_CRC s_Buffer[i]) & 0xFF]
            
        
return i_CRC 0xFFFFFFFF
Не пишите мне в ЛС: если вам нужна помощь на бесплатной основе. Любые вопросы на форум.
Аватара пользователя
DJ_WEST
Администратор
 
Сообщения: 3641
Зарегистрирован: 22 авг 2009, 00:38
Благодарил (а): 48 раз.
Поблагодарили: 2209 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Left 4 Dead
Left 4 Dead 2

Re: Сборник полезных функций

Сообщение noo00oob » 19 авг 2011, 11:17

Ты правда считаешь, что все svc_ пакеты которые можно отправить (сервом или плагином) обрабатываются сервом после их отправки? Что за бред...

Действительно, что за бред? Где я такое писал?

Вобщем суть такова. Если писать в консоле "kick" - сервер отсоеденяет игрока и посылает ему svc_disconnect. Если же посылать просто svc_disconnect, клиент получив эту мессагу отправит на сервер команду ( через clc_stringcmd ) "dropclient", и сервер отсоеденит игрока только в случае если эта команда дойдет до него. Посылается она всего 1 раз, так как клиент сразу отсоеденяется, и вероятность того что она не дойдет крайне велика, следовательно и вероятность того что игрок после такого ( через svc_disconnect ) кика останется стоять на сервере пока сервер не отсоеденит его ругнувшись на timeout.
Один фрукт, страдающий недостачей времени, нашел его ради меня любимого и писал(а):
noo00oob, зачем родился на свет вообще? срать на форумах это понятно.. больше изъеба не найти как бэ? а то, что ты недоношенная скотина, сдерживайся, детка.
noo00oob
 
Сообщения: 1061
Зарегистрирован: 09 янв 2010, 21:52
Благодарил (а): 258 раз.
Поблагодарили: 394 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Half-Life

Пред.След.

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

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

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