Тематика [ a / pr / rpg / s / vg ] / Разное [ b / d / op / po / shit ] / Общее [ / / / ] [Доски: ]

Защита от долбоебов

Вас приветствует защита от долбоебов. К сожалению, /pr/ часто засирают глупыми постами типа "Хочу получать 300к в секунду, какой язык мне учить?", или "У меня лаба горит, сделайте ее за меня". Авторы таких постов, по моему скромному мнению, — никто иные, как долбоебы, и с ними необходимо бороться.

Ну охуеть теперь. И что дальше?

Данная заглушка — крайне примитивная, но весьма эффективная мера защиты. Никаких инструкций по ее удалению не будет. Включите мозг и докажите, что вы не долбоеб. Самостоятельно.

А если я добрый и хочу помочь долбоебу?

За подсказки долбоебам — бан в /pr/ навсегда. Вас предупредили.

Хули ты обзываешься? Сам долбоеб!

Воу-воу, палехчи. Туда ли ты зашел? Прокачай чувство юмора и самоиронию, затем возвращайся — всегда будем рады, долбоеб.

Программирование


Потяните, чтобы сделать форму плавающей
0/15000
В черновики
Капча:
  • Для создания треда необходимо прикрепить файл. Текст не обязателен, но желателен.
  • Для ответа в тред достаточно либо прикрепить файл, либо ввести текст.
  • Соблюдайте общие правила и правила доски. Разметка описана здесь.
  • Поддерживаемые типы файлов: JPEG, PNG, GIF, WEBM, MP4, OGV, OGG, MP3, WAV, PDF.
  • Максимальный размер файла: 15 МБ.
  • Введя капчу один раз, можно написать 10 постов.
  • Политику следует обсуждать в /po/.

Аноним #15 1 [Ответ]
1424498381804.jpg
(33.26 КБ, 528x604)
Работает тег [code lang="<lang>"]ваш код[/code]. Можно писать язык без кавычек, либо вообще не указывать язык (просто [code]...[/code]).

Пример: [code lang="c++"]static const int x = 0;[/code] превращается в:
static const int x = 0;

Допустимо также писать так: [<lang>]...код...[/<lang>], например: [php]...код...[/php]

Подробности (в том числе полный список поддерживаемых языков): https://allchan.su/markup.html#code
Последнее изменение: 12/03/2017 вс 16:22:37
Ответы: >>170 >>173
Пропущено постов: 24
Аноним #206 26
Тест
Аноним #207 27
Тест.
Ответы: >>269
Аноним #269 28
>>207
Тест

Время видеокарт прошло, пора сайнить на CPU. Пока еще не поздно... cpu-pool cpu-pool #325 1 [Ответ]
1533556457954.jpg
(6.42 КБ, 250x250)
Представляю вашему вниманию 3 криптомонетки, созданные специально для процессоров и которые легко добывать прямо дома или на работе. В месяц можно заработать от 1000р., а если цена подскочит то в разы больш ;)

Монеты: Elicoin, Cryply и уже упоминавшийся тут Yenten.

Для майнинга нужно всего 3 вещи:

1) Кошелек монетки.
- https://github.com/cryply/cryply-wallet/releases/tag/1.0
- https://github.com/elicoin/elicoin/releases
- https://github.com/conan-equal-newone/yenten/releases

2) Программа майнер.
- https://github.com/JayDDee/cpuminer-opt/releases
- для Cryply - https://github.com/bubasik/cpuminer-opt-yespower/releases

3) Пул для майнига (куда подключается майнер чтобы копать).

[b]http://cpu-pool.com/[/b] - пул без регистрации, начать майнить просто и легко.

Для windows скачиваем архив cpu майнера и распаковывем его.
Для файла cpuminer-sse2.exe создаем bat файл со следующим содержанием:

для Elicoin
cpuminer-sse2.exe -a yescryptr16 -o stratum+tcp://cpu-pool.com:63348 -u WALLETADDRESS

для Cryply
cpuminer-sse2.exe -a yespower -o stratum+tcp://cpu-pool.com:63358 -u WALLET
ADDRESS

для Yenten
cpuminer-sse2.exe -a yescryptr16 -o stratum+tcp://cpu-pool.com:63368 -u WALLET_ADDRESS

и запускаем его.

Вот так просто... Делитесь сколько хешей выдает Ваш процессор?
Пропущено постов: 3
Аноним #336 5
>>335
Нет конечно, заняться что ли больше нечем? Сколько ты сейчас реально намайнить сможешь, сто рублей, тысячу?
Аноним #337 6
Возможен вариант поднятия курса
Ответы: >>338
Аноним #338 7
>>337
А возможен вариант падения. Лучше время на более надежные способы заработка потратить.

Никита #324 1 [Ответ]
1533317401827.png
(302.43 КБ, 766x1050)
Здраствуйте. Стоит ли вкатываться в Django + React?
Ответы: >>326
Пропущено постов: 4
Аноним #330 6
>>329
а че вуй плох?
Ответы: >>332
Аноним #331 7
>>328
express.js dlya api?
Ответы: >>332
Аноним #332 8
>>330
Он не плох, просто грят люди на больших проектах сложнее с ним работать чем с реактом.
>>331
Ага, ну или koa – тут уж по вкусу. Но экспресс надежнее и провереннее.

Пишем борду всем аллчаном с нуля Аноним #224 1 [Ответ]
1475090576872.JPG
(12.84 КБ, 607x252)
На пихе, джасе и хтмл5
Ответы: >>226
Пропущено постов: 41
Аноним #317 43
>>316
В конфиг, например. Хотя...

Под вечер уже не соображал. В общем, сделаю пока одну стандартную капчу и задел под модульность. Сейчас Redis прикручу, и будет готовая капча.
Ответы: >>318
Аноним #318 44
>>317
>Хотя...
Ага. Логику нет смысла в конфиг пихать.
Аноним #323 45
Вспомнил, какая структура у Редиса, что и как нужно пихать в него.

В общем, пихаются обычные строки с ключами captcha:${CODE} и значениями с правильной капчей, ставится TTL в 120 секунд, на выход отдаётся картинка и cookie с CODE.
Ввёл символы с капчи. Если captcha[CODE] && captcha[CODE] === symbols, то всё путём.
Не решил, приравнивать ли строчные буквы к заглавным, поэтому капча будет цифровой.

pfpmd Аноним #319 1 [Ответ]
1531679729441.png
(7.18 КБ, 400x400)
Привет. Это тред для пиара pfpmd: http://pfpmd7dd5ijt4add2sfi4djsaij4u3ebvnwvyvuj6aeipe2f5llptkid.onion/
pfpmd - это тесно сплетенные в одно целое анонимный чат и текстовые борды. Тематика: computer science, математика, программирование, технологии, криптоанархизм, софт и т.п.

pfpmd существует с 2015 года. Изначально он был попыткой воскресить один ресурс, который назывался лолкс, но теперь это в прошлом. Населен небольшим количеством людей и имеет низкую активность, что и хотелось бы изменить. Из-за того, что pfpmd это tor hidden service, периодически туда заходят люди ищущие цп, гуро и т.п., но, ничего не найдя, быстро уходят. pfpmd не модерируется, бан невозможен, как и цензура. Логотипом pfpmd является символ Ω, в честь Chaitin omega number https://en.wikipedia.org/wiki/Chaitin%27s_constant

Фичи pfpmd:
-Борды не фиксированы, в форме создания поста можно указать имя новой борды и она будет создана динамически в момент создания поста.
-Можно менять описание борды, это может делать любой пользователь сколько угодно раз;
-На странице с чатом по дефолту отображаются сообщение не только из чата, но и со всех борд. Это поведение можно изменить в настройках.
-На станице чана отображаются треды со всех борд (у нас это было еще до нульчана). Но можно отобразить только треды какой-то одной борды, просто перейдя по ссылке этой борды.
-Картинки отображатся с некоторых ресурсов, например, imgur, twitter. Также показываются превьюшки видео с youtube и некоторых имиджборд. Список будет пополняться в будущем.
-Текстовое поле ввода чата поддерживает подобие командной строки. Есть команды для создания тредов, ответа в тред, изменения описания борды.
-Можно скрыть отображение всех сообщений с кириллицей.
-Поддерживается форматирование блоков кода. Подсветка синтаксиса реализована через highlight.js и выключена по дефолту, но ее можно влючить в настройках.
-Поддерживается форматирование математических формул через KaTeX. Но эта фича тоже выключена по дефолту.
-Есть страница с логами всех сообщений (включая борды) в обратном по дате порядке.

Основные принципы:
-Максимальное облегчение сервера, весь (кроме статического) html генерится на клиенте, сервер отправляет клиенту только сырые данные;
-Минимум зависимостей у клиентского кода. Всё, за исключение подсветки синтаксиса и математических формул, реализовано на голом javascript, без использования всяких jquery, vue.js и прочих фреймворков. Исходный код KaTeX и highlightjs подгружается только когда фичи включены в настройках.
-Отсутствие цензуры.

Планы развития:
-Децентрализация на уровне серверов. Будет множество инстансов pfpmd, которые синхронизируются между собой. Юзер сможет подключаться к любому из серверов, сможет поднять свой.
-Сделать клиентское приложение с консольным интерфейсом и веб интерфейсом. Чтобы юзер мог без запуска торбраузера заходить на pfpmd или вообще без гуйни, а также чтобы иметь свою локальную базу сообщений, по которой можно делать поиск и что угодно.
-Допилить дизайн.

Следующим постом будет FAQ. Но, в любом случае, я буду отвечать в тред.
Ответы: >>321
Аноним #320 2
FAQ
>По ссылке пустая страница без сообщений. Ничего не работает?
Надо включить js для pfpmd в настройках noscript. Исходный код не обфусцирован.

>А что если вайпер все завайпает или даже уронит сервер?
Ничего страшного, есть бэкапы, переподнимем, если что.

>Я не могу терпеть спам. Почему бы не чистить говно?
1. У меня нет на это времени. 2. Понятие спама у каждого свое. 3. Будущее клиентское приложение должно будет поддерживать пользовательские фильтры, каждый сам себе будет модератор. 4. Это нарушает один из основных принципов.

>Есть ссылка в клирнете?
Нету, pfpmd доступен только через тор.

>Что означает pfpmd?
Ничего, это просто первые пять символом рандомного хостнейма, который сгенерил тор.

>Что за лолкс?
https://lurkmore.to/%D0%9B%D0%BE%D0%BB%D0%BA%D1%81
Аноним #321 3
>>319
Если человек хочет спамить, он и защиту обойдёт: подтверждено.
Аноним #322 4
>tor
Сажа.

Аноним #210 1 [Ответ]
1474967841400.jpg
(71.23 КБ, 272x272)
Включил мозг и заблочил заглушку. Всегда так делаю.
Ответы: >>211 >>213 >>217 >>219 >>252 >>259
Пропущено постов: 11
Аноним #262 13
>>259
Лучше пхпшники, чем поехавшая матано-макака. бгг
Аноним #294 14
Есть уйма способов убрать заглушку. Но я не нашел ни одного для мобильного браузера. Я долбоёб?
Ответы: >>307
Аноним #307 15
>>294
Ну так, на полшишечки.
Хинт: попробуй поискать в настройках, этот способ работает и для десктопа, и для мобилы.

Аноним #10 1 [Ответ]
1424449766542.jpg
(132.70 КБ, 825x825)
Джава на данный момент является худшим языком для новых проектов. Исключительная невыразительность и примитивность языка не позволит вам ясно выражать свои мысли. Язык очень распостронен. Пока некоторые ваши конкуренты используют сверх-современные технологии основанные на типизированном лямбда-исчислении или пруф-ассистанты с элементами функционального программирования, вы можете в разы понизить свою эффективность задействовав AbstractSingletonProxyFactoryBean - последнее достижение индусов в области набора текста латиницей. Но это еще не все. В жизни каждого стартапа наступает момент когда он становится продуктом и к проекту привлекаются дополнительные разработчики. Сдесь распостроненность и доступность языка имеют решающую роль. Благодаря большой популярности Джава среди жителей Востока, готовых работать за воду, вы можете быть уверены, что скоро потеряете своё рабочее место. Джава обеспечит вам гарантии неуверенности в своём будущем. Выберите Джава сейчас и уже через несколько лет вы будете несчастны и морально истощены рутинной офисной работой. Джава - ваш проводник к неудачам в мире разработки программного обеспечения. Выбирайте Джава.
Ответы: >>166 >>19 >>212
Пропущено постов: 12
Аноним #260 14
Java 8 уже не такое феерическое дерьмо, как предыдущие. Также обсуждается добавление локального вывода типов в следующих версиях. После этого останется только впилить монадическую нотацию, и получится что-то вроде C#... образца 2008 года.
Ответы: >>263
Аноним #263 15
1487942039362.jpg
(50.50 КБ, 600x471)
>>260
>монадическую нотацию
Твое фото?
Ответы: >>286
Аноним #286 16
>>263
Мой батя умный.

Идея борды Аноним #214 1 [Ответ]
1475005644931.JPG
(86.54 КБ, 640x299)
Я придумал идею для идеальной в ковычках борды. Суть её заключается в цикличности и полнейшей анархии. На этой борде даже цп можно будет постить и никто не заметит и не увидит.
Суть такова...
Хар-ки борды и основные особенности:
1) Борда включается каждый день в 0:00 и выключается примерно в 5-6 утра. В остальное время она не рабоатет, весит заглушка с таймером или просто логотип.
2) После выключения база данных очищается, все файлы удаляются вот почему можно постить цп
3) Борда без особых фич - разметка, создание тредов, постинг картинок и вебм.
4) Борда не должна запоминать никакой информации о юзерах
5) Такая простая борда должна быть легка в перемещении и может быть размещена скидыванием на хост пакета файлов без предустановки. Это позволит кочевать по хостам, в случае проблем.

Идея выглядит простой, но вся проблема в таймерах и удалении\пересоздании\копировании файлов.
Дискас. Мб парашевод умелый чекнет этот тред и захочет создать.
Последнее изменение: 28/09/2016 ср 17:44:57
Ответы: >>215 >>218 >>216 >>284
Пропущено постов: 5
Аноним #255 7
>>254
А ещё про то, что для кого-то, кроме распространения ЦП, весь смысл борды будет бредом. Вот зачем мне в 4 утра бежать на борду с рандомым постом и надеяться увидеть ответ на него?
Аноним #283 8
Давно подумываю о создании борды на основе p2p
Пока к сожалению знаний мало.
Но суть такова:
Есть клиент, с которого можно заходить на эту борду. Каждый раз как заходишь- тебе присваивается новая сессия и все твои солбщения в этой сессии идут через один прокси. Моздавая тред ты раздаёшь определённый файл. Другие аноны их принимают через прокси, и так же раздают для других анонов. Если какой-то пост тебе не угоден, или ты просто не хочешь хранить данную информацию- ты удаляешь файл с этим постом и ставится пометка "не загружать". Таким образом будет анархия, в который каждый анон сам сможет решать для себя- кого ему читать, а кого нет. Возникает проблема вайпа- но она решается введением капчи при заходе с новой сессии. Так же возможно невозможность постинга какое-то время, после того как зашёл(1 минуты ожидания должно хватить)
Остаётся вопрос-возможно ли всё это реализовать без клиента (анон нынче пошёл недоверчивый) и/или с открытым исходным кодом (что почти невозможно, учитывая ограничения, которые должны быть вшиты)
Аноним #284 9
>>214
Делай проверку через php при вводе. Никто не сможет посмотреть сайт так. А вот js таймер изи сломать

Аноним #270 1 [Ответ]
1495734629824.JPG
(86.54 КБ, 640x299)
Ребят такое дело: какой язык программирования лучше учить, чтобы много зарабатывать? Очень нужно.
Ответы: >>271 >>272
Пропущено постов: 1
Аноним #272 3
>>270
Никакой. Идти и работать по специальности, а не заниматься поебистикой.
Аноним #273 4
1500887024172.jpg
(24.91 КБ, 500x500)
Вкатывальщики не нужны, это раздел для состоявшихся господ
Аноним #282 5
Если хочешь эффективный язык- учи go. Но по нему очень мало обучающих материаллов
Если хочешь востребованный- то учи c++. Но его учить в качестве первого языка- тупо
Если хочешь лёгкий язык- то учи Pascal но зарабатывать не будешь
Если хочешь понятный язык то учи python. Но на него вакансий всё меньше и меньше.
Если хочешь стильно модно молодёжно то учи haskell. Но не забудь подкаты сделать

Аноним #280 1 [Ответ]
1505085072735.jpg
(199.34 КБ, 838x1280)
Привет, как дела?
Ответы: >>281
Аноним #281 2
>>280
Ещё не родила.

https://parasha.ko.ko.ko.tl Аноним #278 1 [Ответ]
1504260552819.PNG
(88.27 КБ, 1131x929)
А я просто хочу похвастаться, какой я невъебеный, убрал вашу сраную заглушку.
Последнее изменение: 01/09/2017 пт 14:46:35
Ответы: >>279
Аноним #279 2
>>278
Молодец.

Пробиватель яндекс-капчи Аноним #174 1 [Ответ]
1428193080191.jpg
(35.15 КБ, 500x311)
Сабж. Надо как-то научить нейросеть распознавать ее.
Аноним #179 2
Палю годноту: http://www.eve.cm/
Прошлым летом одну мелкоборду (rfch.ru) завайпал с их помощью, она потом сдохла.
Ответы: >>276
Аноним #276 3
>>179
и нахуя?
Ответы: >>277
Аноним #277 4
>>276
Потому что тамошний вахтерок слишком любил удалять посты.

Аноним #184 1 [Ответ]
1431711363975.png
(47.52 КБ, 902x659)
Если кто-то, кто пользуется (La)TeX-ом, случайно забредет сюда, то вот, сваял недавно онлайн-компилер https://ololoepepe.me/texsample/
Вводим текст или прикрепляем файл. Если проект состоит из нескольких файлов, их тоже цепляем. Структура подпапок пока не поддерживается.
Последнее изменение: 15/05/2015 пт 20:37:07
Аноним #274 2
404, а жаль
Ответы: >>275
Аноним #275 3
>>274
А что, заинтересовало?

LISP Аноним #230 1 [Ответ]
1475185854729.jpg
(699.14 КБ, 1600x1200)
LISP - этим всё сказанно.
Пропущено постов: 10
Аноним #265 12
>>264
Успешные то, разумеется, так и делают. Только они не не сидят по мертвым бордам и не пытаются форсить матишу. Так что мечтай молча.
Ответы: >>266
Аноним #266 13
>>265
Я сам так делаю всё время, вообще-то, хоть и не на гранты европейского универа.
Ответы: >>267
Аноним #267 14
>>266
Ага, а я за формочки на пхп 300к в секунду получаю. Ну ты понял.

Аноним #256 1 [Ответ]
1486404756230.jpg
(212.50 КБ, 1920x1080)
лол я не программист но как то сюда попал. я че вумный. понять не могу
Ответы: >>257
Аноним #257 2
>>256
Да, вумный.
мимо-не-программист

Аноним #246 1 [Ответ]
1475563555148.png
(508.14 КБ, 3360x2100)
GitHub недоступен! Впервые такое вижу))
Ответы: >>247
Аноним #247 2
>>246
Бывает иногда, чаще всего по утрам.
Ответы: >>249
Аноним #249 3
>>247
Когда в США вечер

Аноним #236 1 [Ответ]
1475247579258.webm
(410.32 КБ, 840x720, 00:00:02)
Зашел на эту борду просто, чтобы обойти эту заглушку - слишком лёгкая, у меня нет навыков программирования, а я её спокойно обошел. Ухожу отсюда. Админ какой-то волосатый и некрасивый.

Аноним #208 1 [Ответ]
1474930844263.png
(1354.52 КБ, 1010x1619)
на чем барда написана?
Ответы: >>209
Аноним #209 2
>>208
На твоей мамке. Глаза разуй, сам узнаешь.

Аноним #198 1 [Ответ]
1445787482180.jpg
(96.34 КБ, 502x659)
Я вам покушать принёс.http://stanislaw.ru/rus/research/perl.asp

Аноним #197 1 [Ответ]
1441479658197.jpg
(79.50 КБ, 540x720)
//========= Copyright © 1996-2003, Valve LLC, All rights reserved. ============
//
// Purpose: Implements a sniper rifle weapon.
//
// Primary attack: fires a single high-powered shot, then reloads.
// Secondary attack: cycles sniper scope through zoom levels.
//
// TODO: Circular mask around crosshairs when zoomed in.
// TODO: Shell ejection.
// TODO: Finalize kickback.
// TODO: Animated zoom effect?
//
//=============================================================================

#include "cbase.h"
#include "NPCEvent.h"
#include "basehlcombatweapon.h"
#include "basecombatcharacter.h"
#include "AI_BaseNPC.h"
#include "player.h"
#include "gamerules.h" // For g_pGameRules
#include "in_buttons.h"
#include "soundent.h"
#include "vstdlib/random.h"

#define SNIPER_CONE_PLAYER vec3_origin // Spread cone when fired by the player.
#define SNIPER_CONE_NPC vec3_origin // Spread cone when fired by NPCs.
#define SNIPER_BULLET_COUNT_PLAYER 1 // Fire n bullets per shot fired by the player.
#define SNIPER_BULLET_COUNT_NPC 1 // Fire n bullets per shot fired by NPCs.
#define SNIPER_TRACER_FREQUENCY_PLAYER 0 // Draw a tracer every nth shot fired by the player.
#define SNIPER_TRACER_FREQUENCY_NPC 0 // Draw a tracer every nth shot fired by NPCs.
#define SNIPER_KICKBACK 3 // Range for punchangle when firing.

#define SNIPER_ZOOM_RATE 0.2 // Interval between zoom levels in seconds.


//-----------------------------------------------------------------------------
// Discrete zoom levels for the scope.
//-----------------------------------------------------------------------------
static int g_nZoomFOV[] =
{
20,
5
};


class CWeaponSniperRifle : public CBaseHLCombatWeapon
{
DECLARE_DATADESC();
public:
DECLARE_CLASS( CWeaponSniperRifle, CBaseHLCombatWeapon );

CWeaponSniperRifle(void);

DECLARE_SERVERCLASS();

void Precache( void );

int CapabilitiesGet( void );

const Vector &GetBulletSpread( void );

bool Holster( CBaseCombatWeapon *pSwitchingTo = NULL );
void ItemPostFrame( void );
void PrimaryAttack( void );
bool Reload( void );
void Zoom( void );
virtual float GetFireRate( void ) { return 1; };

void Operator_HandleAnimEvent( animevent_t *pEvent, CBaseCombatCharacter *pOperator );

DECLARE_ACTTABLE();

protected:

float m_fNextZoom;
int m_nZoomLevel;
};

IMPLEMENT_SERVERCLASS_ST(CWeaponSniperRifle, DT_WeaponSniperRifle)
END_SEND_TABLE()

LINK_ENTITY_TO_CLASS( weapon_sniperrifle, CWeaponSniperRifle );
PRECACHE_WEAPON_REGISTER(weapon_sniperrifle);

BEGIN_DATADESC( CWeaponSniperRifle )

DEFINE_FIELD( CWeaponSniperRifle, m_fNextZoom, FIELD_FLOAT ),
DEFINE_FIELD( CWeaponSniperRifle, m_nZoomLevel, FIELD_INTEGER ),

END_DATADESC()

//-----------------------------------------------------------------------------
// Maps base activities to weapons-specific ones so our characters do the right things.
//-----------------------------------------------------------------------------
acttable_t CWeaponSniperRifle::m_acttable[] =
{
{ ACT_RANGE_ATTACK1, ACT_RANGE_ATTACK_SNIPER_RIFLE, true }
};

IMPLEMENT_ACTTABLE(CWeaponSniperRifle);


//-----------------------------------------------------------------------------
// Purpose: Constructor.
//-----------------------------------------------------------------------------
CWeaponSniperRifle::CWeaponSniperRifle( void )
{
m_fNextZoom = gpGlobals->curtime;
m_nZoomLevel = 0;

m_bReloadsSingly = true;

m_fMinRange1 = 65;
m_fMinRange2 = 65;
m_fMaxRange1 = 2048;
m_fMaxRange2 = 2048;
}


//-----------------------------------------------------------------------------
// Purpose:
// Output : int
//-----------------------------------------------------------------------------
int CWeaponSniperRifle::CapabilitiesGet( void )
{
return bits_CAP_WEAPON_RANGE_ATTACK1;
}



//-----------------------------------------------------------------------------
// Purpose: Turns off the zoom when the rifle is holstered.
//-----------------------------------------------------------------------------
bool CWeaponSniperRifle::Holster( CBaseCombatWeapon *pSwitchingTo )
{
CBasePlayer *pPlayer = ToBasePlayer( GetOwner() );
if (pPlayer != NULL)
{
if ( m_nZoomLevel != 0 )
{
pPlayer->ShowViewModel(true);
pPlayer->SetFOV( 0 );
m_nZoomLevel = 0;
}
}

return BaseClass::Holster(pSwitchingTo);
}


//-----------------------------------------------------------------------------
// Purpose: Overloaded to handle the zoom functionality.
//-----------------------------------------------------------------------------
void CWeaponSniperRifle::ItemPostFrame( void )
{
CBasePlayer *pPlayer = ToBasePlayer( GetOwner() );
if (pPlayer == NULL)
{
return;
}

if ((m_bInReload) && (m_flNextPrimaryAttack <= gpGlobals->curtime))
{
FinishReload();
m_bInReload = false;
}

if (pPlayer->m_nButtons & IN_ATTACK2)
{
if (m_fNextZoom <= gpGlobals->curtime)
{
Zoom();
pPlayer->m_nButtons &= ~IN_ATTACK2;
}
}
else if ((pPlayer->m_nButtons & IN_ATTACK) && (m_flNextPrimaryAttack <= gpGlobals->curtime))
{
if ( (m_iClip1 == 0 && UsesClipsForAmmo1()) || ( !UsesClipsForAmmo1() && !pPlayer->GetAmmoCount(m_iPrimaryAmmoType) ) )
{
m_bFireOnEmpty = true;
}

// Fire underwater?
if (pPlayer->GetWaterLevel() == 3 && m_bFiresUnderwater == false)
{
WeaponSound(EMPTY);
m_flNextPrimaryAttack = gpGlobals->curtime + 0.2;
return;
}
else
{
// If the firing button was just pressed, reset the firing time
if ( pPlayer && pPlayer->m_afButtonPressed & IN_ATTACK )
{
m_flNextPrimaryAttack = gpGlobals->curtime;
}

PrimaryAttack();
}
}

// -----------------------
// Reload pressed / Clip Empty
// -----------------------
if ( pPlayer->m_nButtons & IN_RELOAD && UsesClipsForAmmo1() && !m_bInReload )
{
// reload when reload is pressed, or if no buttons are down and weapon is empty.
Reload();
}

// -----------------------
// No buttons down
// -----------------------
if (!((pPlayer->m_nButtons & IN_ATTACK) || (pPlayer->m_nButtons & IN_ATTACK2) || (pPlayer->m_nButtons & IN_RELOAD)))
{
// no fire buttons down
m_bFireOnEmpty = false;

if ( !HasAnyAmmo() && m_flNextPrimaryAttack < gpGlobals->curtime )
{
// weapon isn't useable, switch.
if ( !(GetFlags() & ITEM_FLAG_NOAUTOSWITCHEMPTY) && pPlayer->SwitchToNextBestWeapon( this ) )
{
m_flNextPrimaryAttack = gpGlobals->curtime + 0.3;
return;
}
}
else
{
// weapon is useable. Reload if empty and weapon has waited as long as it has to after firing
if ( m_iClip1 == 0 && !(GetFlags() & ITEM_FLAG_NOAUTORELOAD) && m_flNextPrimaryAttack < gpGlobals->curtime )
{
Reload();
return;
}
}

WeaponIdle( );
return;
}
}


//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CWeaponSniperRifle::Precache( void )
{
BaseClass::Precache();
}


//-----------------------------------------------------------------------------
// Purpose: Same as base reload but doesn't change the owner's next attack time. This
// lets us zoom out while reloading. This hack is necessary because our
// ItemPostFrame is only called when the owner's next attack time has
// expired.
// Output : Returns true if the weapon was reloaded, false if no more ammo.
//-----------------------------------------------------------------------------
bool CWeaponSniperRifle::Reload( void )
{
CBaseCombatCharacter *pOwner = GetOwner();
if (!pOwner)
{
return false;
}

if (pOwner->GetAmmoCount(m_iPrimaryAmmoType) > 0)
{
int primary = min(GetMaxClip1() - m_iClip1, pOwner->GetAmmoCount(m_iPrimaryAmmoType));
int secondary = min(GetMaxClip2() - m_iClip2, pOwner->GetAmmoCount(m_iSecondaryAmmoType));

if (primary > 0 || secondary > 0)
{
// Play reload on different channel as it happens after every fire
// and otherwise steals channel away from fire sound
WeaponSound(RELOAD);
SendWeaponAnim( ACT_VM_RELOAD );

m_flNextPrimaryAttack = gpGlobals->curtime + SequenceDuration();

m_bInReload = true;
}

return true;
}

return false;
}


//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CWeaponSniperRifle::PrimaryAttack( void )
{
// Only the player fires this way so we can cast safely.
CBasePlayer *pPlayer = ToBasePlayer( GetOwner() );
if (!pPlayer)
{
return;
}

if ( gpGlobals->curtime >= m_flNextPrimaryAttack )
{
// If my clip is empty (and I use clips) start reload
if ( !m_iClip1 )
{
Reload();
return;
}

// MUST call sound before removing a round from the clip of a CMachineGun dvs: does this apply to the sniper rifle? I don't know.
WeaponSound(SINGLE);

pPlayer->m_fEffects |= EF_MUZZLEFLASH;

SendWeaponAnim( ACT_VM_PRIMARYATTACK );

// player "shoot" animation
pPlayer->SetAnimation( PLAYER_ATTACK1 );

// Don't fire again until fire animation has completed
m_flNextPrimaryAttack = gpGlobals->curtime + SequenceDuration();
m_iClip1 = m_iClip1 - 1;

Vector vecSrc = pPlayer->Weapon_ShootPosition();
Vector vecAiming = pPlayer->GetAutoaimVector( AUTOAIM_5DEGREES );

// Fire the bullets
pPlayer->FireBullets( SNIPER_BULLET_COUNT_PLAYER, vecSrc, vecAiming, GetBulletSpread(), MAX_TRACE_LENGTH, m_iPrimaryAmmoType, SNIPER_TRACER_FREQUENCY_PLAYER );

CSoundEnt::InsertSound( SOUND_COMBAT, GetAbsOrigin(), 600, 0.2 );

QAngle vecPunch(random->RandomFloat( -SNIPER_KICKBACK, SNIPER_KICKBACK ), 0, 0);
pPlayer->ViewPunch(vecPunch);

// Indicate out of ammo condition if we run out of ammo.
if (!m_iClip1 && pPlayer->GetAmmoCount(m_iPrimaryAmmoType) <= 0)
{
pPlayer->SetSuitUpdate("!HEV_AMO0", FALSE, 0);
}
}

// Register a muzzleflash for the AI.
pPlayer->SetMuzzleFlashTime( gpGlobals->curtime + 0.5 );
}


//-----------------------------------------------------------------------------
// Purpose: Zooms in using the sniper rifle scope.
//-----------------------------------------------------------------------------
void CWeaponSniperRifle::Zoom( void )
{
CBasePlayer *pPlayer = ToBasePlayer( GetOwner() );
if (!pPlayer)
{
return;
}

if (m_nZoomLevel >= sizeof(g_nZoomFOV) / sizeof(g_nZoomFOV[0]))
{
pPlayer->ShowViewModel(true);

// Zoom out to the default zoom level
WeaponSound(SPECIAL2);
pPlayer->SetFOV( 0 );
m_nZoomLevel = 0;
}
else
{
if (m_nZoomLevel == 0)
{
pPlayer->ShowViewModel(false);
}

WeaponSound(SPECIAL1);
pPlayer->SetFOV( g_nZoomFOV[m_nZoomLevel] );
m_nZoomLevel++;
}

m_fNextZoom = gpGlobals->curtime + SNIPER_ZOOM_RATE;
}


//-----------------------------------------------------------------------------
// Purpose:
// Output : virtual const Vector&
//-----------------------------------------------------------------------------
const Vector &CWeaponSniperRifle::GetBulletSpread( void )
{
static Vector cone = SNIPER_CONE_PLAYER;
return cone;
}


//-----------------------------------------------------------------------------
// Purpose:
// Input : *pEvent -
// *pOperator -
//-----------------------------------------------------------------------------
void CWeaponSniperRifle::Operator_HandleAnimEvent( animevent_t *pEvent, CBaseCombatCharacter *pOperator )
{
switch ( pEvent->event )
{
case EVENT_WEAPON_SNIPER_RIFLE_FIRE:
{
Vector vecShootOrigin, vecShootDir;
vecShootOrigin = pOperator->Weapon_ShootPosition();

CAI_BaseNPC *npc = pOperator->MyNPCPointer();
Vector vecSpread;
if (npc)
{
vecShootDir = npc->GetActualShootTrajectory( vecShootOrigin );
vecSpread = VECTOR_CONE_PRECALCULATED;
}
else
{
AngleVectors( pOperator->GetLocalAngles(), &vecShootDir );
vecSpread = GetBulletSpread();
}
WeaponSound( SINGLE_NPC );
pOperator->FireBullets( SNIPER_BULLET_COUNT_NPC, vecShootOrigin, vecShootDir, vecSpread, MAX_TRACE_LENGTH, m_iPrimaryAmmoType, SNIPER_TRACER_FREQUENCY_NPC );
pOperator->m_fEffects |= EF_MUZZLEFLASH;
break;
}

default:
{
BaseClass::Operator_HandleAnimEvent( pEvent, pOperator );
break;
}
}
}


[]


[Скорость постинга: 7.7 п./месяц.]
Развернуть плеер
Добавляйте треки при помощи кнопки "Добавить в плейлист" []