-
Постов
122 -
Зарегистрирован
-
Посещение
-
Победитель дней
11
Сообщения, опубликованные wl.illusion
-
-
чем плох переход по лейбел?
Споры про goto так же сильны как споры о религии, почти любой форум по программированию забит срачами на тему, что goto это low и им нельзя пользоваться. Правда основные два тезиса, которые выдвигают противники goto мягко говоря сомнительны:
1. goto портит структурный вид кода
2. goto может создать dead infinity loop
Ну, если программист с руками из жопы, то конечно на один из этих пунктов он нарвётся, а то и на оба. На хабре было пару хороших статей в защиту goto и судя по выносу кармы крикунов о том, что goto зло - можно сказать, что большинство поддерживает умеренное использование явных переходов.
А так, вообще в любом даже крупном и крутом проекте используются goto. Парочка, но есть.
-
Итак, я веру в местное сообщество малость потерял (без обид, это личное мнение), так что не думаю, что кто-то поймёт и вот эти данные (а тут кроме меня вообще кто-то проверят свои алгоритмы в стресс-тестах?):
Для вас терпел пол миллиарда запросов (да это чертовски долго), суть картинки отображение максимальных и минимальныйх отклонений от желаемого значения (в нашем случае 30% от 10000 запросов), сейчас смотря на картинку некоторые двоечники потирают руки, глаза уже залились счастьем и сердцебиение зашкаливает от радости, что вот они же правы! Но нет, я не буду слишком вдаваться в подробности, но в среднем минимальное значение для rand(101) на 0.10% хуже, чем у rand(100), а вот максимальное значение в среднем у rand(101) лучше на 0.25%, чем у rand(100). По-сути, это настолько незначительные отклонения, что их разве что в астрономическом масштабе можно воспринимать серьёзно. Я не думаю, что за всё время жизни любого пиратского сервера кто-то вообще проделает столько запрососв, сколько было сделано мной в стресс-тесте.
Тем не менее итог: rand(101) даёт более точные результаты с отклонение шанса в худшую сторону, но в целом показатель на 0.15% для пол миллиарда запросов ближе к искомому значению, а значит на 750 000 запросов будет ближе к желаемому результату.
Объективный совет: хотите более честного подхода, тогда ваш выбор rand(101), хотите стабильного отклонения, то ваш выбор rand(100).
В рамках данного скрипта это роли особой не играет.
ps при увеличении значений (то есть rand(10000) и rand(10001) результат не меняется ни на сотую процента).
-
Дополню отдельно по поводу тестового скрипта, личное наблюдение, при rand(101) флуктуации желаемого результата значительно ниже, чем при rand(100) - разброс значительно дальше уходит в обоих направлениях.
-
Сам себе противоречишь.
Давай по пальцам: rand()%10 вернет нам 10 возможных результатов, включая 0.
Математик хренов..
не путай кол-во результатов и значения, которые они дают - это ваша ошибка, в нашем случае нас интересуют _только_ значения.
ну и чтобы закрыть вопрос раз и навсегда:
Кубик кидается 10000 раз для каждого варианта, значения имеют приблизительные результаты разброса от желаемого. На картинке проверял шанс в 30%. Результаты для других шансов совпадают.
upd ps а, ну и я к вашим словам о том, что эта 1 имеет колосальное значение, с точки зрения математики результаты должны быть в диапозоне от 0 до 100, и думаю на этом вопрос можно закрыть, если вам лично не нравится эта 1, то исправьте для себя, мой учитель по вышке конечно бы на вас посмотре с укором, но вам есть до него дело?
-
При использовании 'rand(101)' в итоге мы получаем 101 возможный результат, если при 10000 эту 1 ты и не заметишь, то при значении 100 это уже играет роль.
Хотя какая разница, может это задумка автора, чтоб шансов поболее было. =)
Похоже документацию читал плохо не я, а кто-то другой, ну да ладно, вот что нам говорит официальная документация по скриптам:
rand(10) would result in 0,1,2,3,4,5,6,7,8 or 9
проще говоря rand(101) даст результат в диапозоне от 0 до 100 включительно. И да, 0 - это тоже результат, который должен учитываться, так же как и 100, но это уже вопрос к некоторым особенностям высшей математики.
-
И к какому же это месту тут 101?
Давно это 1/101 = 1%?
И насчет goto - даже в доках рафины есть про его использование.
Но конечно же ты самый умный
Неумение пользоваться goto не означает, что оно зло, все его боятся из-за риска создать цикличность, это кстати ещё в гайдах по Сям было написано, но вы то тоже самый умный и не читали их. А создание избыточных условий и функций для единственного вызова несут в себе куда большее зло, что в гайдах по тем же Сям имеется.
А бросание кубика сделано правильно, можно сделать, как в афине 10000, но статистически процент совпадения будет почти одинаковый, с разницей не превышающей ~5%, что допустимо (провренно написанием скрипта в 1000 запросов тем и другим методом), плюс сотые в нашем вопросе не нужны (они банально не используются, так зачем?). 101 = rand(0,100) (сорц script.c смотреть: max-min+1), но на выполнение у афины уходит меньше времени у запроса с одним входящим, так зачем попу рвать? Можно назвать не нужной оптимизацией.
И да, я очень умный, спасибо за комплимент но ещё я очень добрый и скромный, так что такие похвалы мне греют сердце.
-
Он и отписался)
Я что-то на форуме не видел общей концепции скрипта/нпц, просто предложение за $ сделать что-то, а я говорю о том, что человек описывает подробно, что ему нужно, и желающие сами решают для себя делать или нет, брать за это денюжку или можно так.
Я вот в свободное время может и хотел что-нибудь сделать, время бывает, возможности тоже есть, как и идеи, но мои идеи сложные и долгие, а тут может на час работы будет. И почему нет тогда?
-
имхо, можно писать где-нибудь на форуме об идеи скрипта/нпц/квеста/ивента, если найдутся желающие сделать так или за плату - то сами отпишутся.
-
goto
Ну и rand(101)
вы один из тех огромных любителей даже для самых простых задач напихивать кучи ненужных конструкций из if/switch и создавать избыточность функций?
А rand(101) вполне к месту.
ps я по работе занимаюсь поддержкой чужих сорцов, костылей из кучи функций для вызова 1 раз за всё время работы и конструкций из 15-20 if/switch уже навидался. Спасибо, goto - идеальное решение.
- 1
- 1
-
ругается на 174 строку.
какая ревизия афины?
- 1
-
[NPC] Случайная заточка v1.02
Вступление
Выполнено по просьбе пользователя форума в этой теме.
Описание
Случайная заточка предметов из указанного списка с шансом сломать вещь (вещь ломается, а не удаляется навсегда, но если нужно, то можно удалить пару строк и предмет будет исчезать навсегда).
Скачать
Готовый NPC: nt_randomrefine.txt v1.02
Настройка
Все настройки прописываются в OnInit, разрешённые предметы прописывать в :
setarray .allowed[0],1163,2280;
Прописан клеймор и саккат, если первым числом идёт 0, то будут допустимы все предметы. В будущем возможно добавление и списка deny предметов.
Цены на заточку:
setarray .price[0],5000,5000,10000,15000,25000,50000;
Самая первая цена - для бронек, шапок и акссесуаров (у них всегда уровень 0).
Шанс поломать предмет:
set .breakrate, 30;
от 0 до 100 (моё личное мнение: идеально всё-таки 50 и выше).
Для совместимости со старыми версиями афины и eA-Mod добавлены закомментированные строчки, искать в файле два места по:
// oldversion compatibility
Комментируем и снимаем блоки комментариев по необходимости.
- 7
- 1
-
Решил вспомнить молодость, глянь насколько тебе подойдёт.
Разрешённые предметы прописывать в OnInit:
setarray .allowed[0],1163,2280;
Прописан клеймор и саккат, если первым числом идёт 0, то будут допустимы все предметы, потом может чёрный список добавлю.
Цены там же в OnInit:
setarray .price[0],5000,5000,10000,15000,25000,50000;
Самая первая цена - для бронек и акссесуаров (у них всегда уровень 0).
Шанс поломать предмет:
set .breakrate, 30;
от 0 до 100, я тут погонял и вроде идеально всё-таки 50.
Диалоги с кучей отсебятины, карточки и подписанные предметы не корёжит, небольшие проверки на читерство присутствуют.
- 1
-
http://ea-support.ws...862-wlillusion/ Именно так, но при этом она может сломаться, а так же можно было сново ее точить, пример дьябла роба заточилось на +5, далее ее можно переточить снова и опять же когда ее точим она точится от 0-10 а заточка +5 в повторной заточке не учавствует, т.е. Заточка +5 убирается и предмет точится как будто он небыл еще заточён.
Ясно, забавная рулетка.
-
А в чём принцип работы нпц должен быть?
Приходит игрок, выбирает вещь для заточки и кузнец рандомно её затачивает? Подробнее, если можно, а то стало интересно.
-
:DB error-unknown column extended)vending_item in field list это может косатся что нпц пропадает?
Вполне может быть, но это не из стандартной афины - какая-то модификация, и с ней я помочь не с могу.
upd а вообще глянуть бы всё-таки на .conf и сам npc
-
Если у вас реневал, то в npc/re/scripts_main.conf, если не реневал, то npc/pre-re/scripts_main.conf должна быть строчка:
import: npc/scripts_custom.conf
по пути в файле: npc/scripts_custom.conf должны быть прописаны уже ваши npc, что-то вроде такого:
npc: npc/custom/customnpc.txt
если не разберётесь, то нужно смотреть указанные файлы и что в них прописано.
- 1
-
В данный момент на работе)поаробую объяснить так) в общем сервер рабочий и нпц на нем уже стояли.В script custom уже прописаны пути к ним тоесть от меня только требовалось сделал loadnpc после того как прописывала load npc и путь указывала он появляля .Но после выключения сервера либо релоаде он пропадает
Полагаю, что непрописана подгрузка кастом npc и всё, нужно смотреть, если реневал, то открыть npc/re/scripts_main.conf и проверить есть ли там загрузка scripts_custom.conf ну и вообще пути проверить к файлам.
- 1
-
Не совсем понимаю, вы прописываете в какой-нибудь npc/scripts_custom.conf путь до npc, запускаете сервер и делаете load или вы прописываете путь для уже работающего сервера и делаете load в самой игре?
ps штатные телепаты в отпуске, Санасол как всегда им з/п зажимает, так что подробно: ревизия афины, как чего и куда прописываете (подробно, идеально - прикрепить файлы к посту), что и куда вводите - дословно, если есть - логи мап-серва.
-
А как вы его добавляете?
-
Спасибо, за активную помощ.
Хорошие идеи не у одного вас пропадают, так что не стоит обижаться на то, что никто не желает помочь или разбираться.
-
Я когда-то писал API с примерами, если пригодится, то вот эта тема.
- 1
-
вот сли в игре устанавливаешь значение #lang=1 То в базе
account_id key index value
2000001 #lang 0 1
Следовательно, могу ли я при регистрации в эту же таблицу добавить номер аккаунта зарегистрированного и ему уже значение #lang занести в таблицу.
Можешь.
-
Это уже обсуждалось, если вы реализуете выбор языка к примеру на сайте, это ничего не даст. В любом случае в игре придется делать множество проверок (Запросов в базу), что не есть зер гуд.
Зачем к бд кучу запросов? Делайте запись в переменную аккаунта и всё. Выше уже писали. В самих скриптах идея с созданием массивов с текстом даже очень интересная.
-
Я бы сказал, что это весьма не лучший способ, т.к. запрос к БД через скрипты очень медленный, а вообще покопаться можно в примерах mysql запросов, вам полагаю достаточно использовать LIMIT (добавляется в конце запроса). В доках скриптов вполне неплохой пример имеется.
- 1
[NPC] Случайная заточка (испытай судьбу)
в Скрипты
Опубликовано · Изменено пользователем wl.illusion
Наглядные графики и пояснения.
rand(1,100) и 1 миллион запросов, кучность неплохая.
rand(101) заметное смещение на 0.1% (да-да, ровно так выглядит смещение в 0.1%)
rand(1,100) и один миллиард запросов, по непонятным мне причинам разброс сглаживается и распределяется равномернее (результаты с отклонением выше 1.5% не учитывались при построение графика).
rand(101) и один миллиард запросов, на глаз определить разницу не удалось, но присутствует всё то же отклонение в -0.1%
использование rand(100) давало смещение в лучшую сторону:
на глаз это не сильно заметно, но смещение в сторону удачного выпадения есть на 0.13% на этом графике. В среднем смещение при rand(100) составляет +0.1% относительно rand(1,100).
Отсюда могу сделать только один вывод - используйте rand(1,100), остальные варианты дают смещение.
наглядное пособие о жопоруком программисте, такие и без явных переходов наделают говна в коде (точнее оно уже есть в коде и без goto), тут если не читали гайды о правильном программирование, то о чём речь вообще?