Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Lottereja
Jakut
сообщение 16.3.2016, 10:50
Сообщение #1


***

Novice
Сообщений: 86
Регистрация: 9.12.2005
Группа: Пользователи
Наличность: 0
Пользователь №: 4.567



Здравствуйте, вот скрипт, ну хочу сделать так чтоб он по группам был и выдавал только с одной группы по ранду. А то он выдает итем с одной группы и с другой сразу тоже, а нужно чтоб давал только с одной и один итем. Он например нажимаю дает i_aqua с 8 группы и с 6 группы tm_dm сразу, а надо чтоб с одной группы только давал. и одну вещь.
Код
IF (rand(2)==1) // 9 grupa
    DORAND 2  
        NEWITEM i_1000exp
        NEWITEM I_100k

    ENDDO
    NEW.BOUNCE
    ENDIF

IF (rand(2)==1) // 8 grupa
    DORAND 26  
        NEWITEM rand_random_oldparadise
        NEWITEM rand_random_aqua
        NEWITEM rand_random_glory
        NEWITEM rand_random_acid
        NEWITEM i_aqua
        NEWITEM i_glory
        NEWITEM i_aqua_ringmail
        NEWITEM i_glory_ringmail
        NEWITEM i_aqua_chainmail
        NEWITEM i_glory_chainmail
        NEWITEM i_OldParadise_shield_round_metal
        NEWITEM i_aqua_shield_round_metal
        NEWITEM i_glory_shield_round_metal
        NEWITEM i_cargo_shield_round_metal
        NEWITEM i_OldParadise_shield_kite_metal
        NEWITEM i_aqua_shield_kite_metal
        NEWITEM i_glory_shield_kite_metal
        NEWITEM i_cargo_shield_kite_metal
        NEWITEM i_OldParadise_shield_heater
        NEWITEM i_aqua_shield_heater
        NEWITEM i_cargo_shield_heater
        NEWITEM i_arian_bow
        NEWITEM i_frozen_bow
        NEWITEM i_club_arian
        NEWITEM i_club_frozen
        NEWITEM i_blackdragon_Studded

    ENDDO
    NEW.BOUNCE
    ENDIF

IF (rand(2)==1) // 7 grupa
    DORAND 34  
        NEWITEM i_full_spellbook
        NEWITEM i_oldparadise
        NEWITEM i_oldparadise_ringmail
        NEWITEM i_oldparadise_chainmail
        NEWITEM i_club_terium
        NEWITEM i_terium_bow
        NEWITEM i_shield_terium
        NEWITEM i_sash_Stamina5
        NEWITEM i_barbarian_helm
        NEWITEM i_barbarian_chest
        NEWITEM i_barbarian_gloves
        NEWITEM i_barbarian_arms
        NEWITEM i_barbarian_leggings
        NEWITEM i_barbarian_gorget
        NEWITEM i_barbarian_shield
        NEWITEM i_barbarian_hope
        NEWITEM i_barbarian_mace
        NEWITEM i_necro_shield
        NEWITEM i_necro_helmet
        NEWITEM i_necro_gloves
        NEWITEM i_necro_leggings
        NEWITEM i_necro_chest
        NEWITEM i_necro_arms
        NEWITEM i_necro_destroyer
        NEWITEM i_necro_cape
        NEWITEM i_necro_wand
        NEWITEM i_Elfian_ringmail_tunic
        NEWITEM i_Elfian_ringmail_gloves
        NEWITEM i_Elfian_ringmail_sleeves
        NEWITEM i_Elfian_ringmail_leggings
        NEWITEM i_Elfian_Cloak
        NEWITEM i_Elfian_Sandals
        NEWITEM i_Elfian_Bow
        NEWITEM i_Elfian_Mustang

    ENDDO
    NEW.BOUNCE
    ENDIF

IF (rand(2)==1) // 6 grupa
    DORAND 18  
        NEWITEM i_sash_mana20
        NEWITEM i_sash_health10
        NEWITEM i_light_mage
        NEWITEM tm_fire
        NEWITEM tm_air
        NEWITEM tm_dm
        NEWITEM tm_earth
        NEWITEM i_luxor_leggings
        NEWITEM i_luxor_female
        NEWITEM i_luxor_shroud
        NEWITEM i_luxor_symbol
        NEWITEM i_luxor_llama
        NEWITEM i_skill_bracelet
        NEWITEM i_skill_mask
        NEWITEM i_skill_robe
        NEWITEM i_skill_cloak
        NEWITEM i_spell_cloak
        NEWITEM i_spell_robe

    ENDDO
    NEW.BOUNCE
    ENDIF

IF (rand(2)==1) // 5 grupa
    DORAND 30  
        NEWITEM i_fury_staff
        NEWITEM i_club_cargo
        NEWITEM i_shield_blessed
        NEWITEM i_cargon_bow
        NEWITEM i_bottle_repair50
        NEWITEM i_cargo
        NEWITEM i_cargo_ringmail
        NEWITEM i_cargo_chainmail
        NEWITEM i_luxor_female
        NEWITEM i_luxor_shroud
        NEWITEM i_luxor_symbol
        NEWITEM i_luxor_llama
        NEWITEM i_skill_bracelet
        NEWITEM i_skill_mask
        NEWITEM i_skill_robe
        NEWITEM i_skill_cloak
        NEWITEM i_spell_cloak
        NEWITEM i_spell_robe
        NEWITEM i_bracelet_hp3
        NEWITEM i_bracelet_stam3
        NEWITEM i_bracelet_mana3
        NEWITEM i_earrings_hp3
        NEWITEM i_earrings_mana3
        NEWITEM i_earrings_stam3
        NEWITEM i_ring_hp3
        NEWITEM i_ring_mana3
        NEWITEM i_ring_stam3
        NEWITEM i_necklace_hp3
        NEWITEM i_necklace_mana3
        NEWITEM i_necklace_stam3

    ENDDO
    NEW.BOUNCE
    ENDIF

IF (rand(2)==1) // 4 grupa
    DORAND 6
        NEWITEM i_cloth_dye
        NEWITEM i_hair_dye
        NEWITEM i_bottle_repair200
        NEWITEM i_cargo_Studded
        NEWITEM i_club_newbie_frozen
        NEWITEM i_frozen_newbie_bow



    ENDDO
    NEW.BOUNCE
    ENDIF
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sirocco
сообщение 16.3.2016, 13:25
Сообщение #2


******

Expert
Сообщений: 809
Регистрация: 2.2.2012
Группа: Пользователи
Наличность: 15408
Пользователь №: 14.566
Возраст: 30



вместо if - elseif начиная со 2й по порядку группы
хотя я себе с трудом представляю как он доберется до последней группы с таким rand.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
M0rBiT
сообщение 16.3.2016, 17:36
Сообщение #3


********

Группа: Пользователи
Наличность: 5990
Пользователь №: 11.468



Цитата(Sirocco @ 16.3.2016, 13:25) *

вместо if - elseif начиная со 2й по порядку группы
хотя я себе с трудом представляю как он доберется до последней группы с таким rand.

Так всегда ж так было) Лотереи это лохотрон (IMG:style_emoticons/default/cool.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Jakut
сообщение 17.3.2016, 2:01
Сообщение #4


***

Novice
Сообщений: 86
Регистрация: 9.12.2005
Группа: Пользователи
Наличность: 0
Пользователь №: 4.567



Да хорошо все падает с таким рандом. Ну вопрос теперь такой, как поставить мне правильнее процент выпада?

Код
(rand(99)>28) //72%
Или
IF (rand(2)==1)


Мне просто надо например вот такой процент выпада,
Код
Группа 1 - шанс 2%

Группа 2 - шанс 4%

Группа 3 - шанс 4%

Группа 4 - шанс 4%

Группа 5 - шанс 4%

Группа 6 - шанс 5%

Группа 7 - шанс 7%

Группа 8 - шанс 7%

Группа 9 - шанс 63%


А по такому IF (rand(2)==1) принципу, я не знаю как высчитать процент. Так как с таким рандом как наверху скрипт, там вещи все время выпадают и из 1-2-3-4 групы. А не с нищей.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sirocco
сообщение 17.3.2016, 9:37
Сообщение #5


******

Expert
Сообщений: 809
Регистрация: 2.2.2012
Группа: Пользователи
Наличность: 15408
Пользователь №: 14.566
Возраст: 30



facepalm.jpg
if rand(100) < 4
что тебе еще надо человече?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Soteric
сообщение 17.3.2016, 12:12
Сообщение #6


********

Master
Сообщений: 1.377
Регистрация: 7.8.2006
Группа: Пользователи
Наличность: 3227
Пользователь №: 7.166



Код
rollResult = rand(100)

if(rollResult < 2)
  // группа 1
else if(rollResult < 6)
  // группа 2
else if(rollResult < 10)
  // группа 3

Принцип такой, что ты начинаешь с % первой группы, а потом прибавляешь процент следующей. Т.е. если проценты 1 2 3 группы это 2 4 4, то числа должны быть 2, 2+4, 2+4+4. В итоге ты должен придти к rollResult < 100, который будет последней группой.

Генерировать случайное число в каждом if не нужно.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sirocco
сообщение 17.3.2016, 17:37
Сообщение #7


******

Expert
Сообщений: 809
Регистрация: 2.2.2012
Группа: Пользователи
Наличность: 15408
Пользователь №: 14.566
Возраст: 30



Тогда у него в любом случае что-то выпадет...
а ведь есть шанс что не выпадет ничего.


нужно именно каждый раз новое число генерировать. иначе не получится одинаковый шанс в 4%.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Soteric
сообщение 17.3.2016, 18:02
Сообщение #8


********

Master
Сообщений: 1.377
Регистрация: 7.8.2006
Группа: Пользователи
Наличность: 3227
Пользователь №: 7.166



Цитата(Sirocco @ 17.3.2016, 17:37) *

Тогда у него в любом случае что-то выпадет...
а ведь есть шанс что не выпадет ничего.
нужно именно каждый раз новое число генерировать. иначе не получится одинаковый шанс в 4%.

Про "есть шанс что не выпадет ничего" ничего не сказано. Новое число генерировать можно, но излишне. По предложенному алгоритму шанс 4% будет одинаковый.

В целом это довольно типичная задача. В РанУО она решается именно так. Я полагаю, что и в Сфере тоже, можно поискать примеры.

ADDED: Посмотрел бегло скрипты сферы. Похоже таки предпочитают каждый раз вызывать rand(). Тогда все проще, Sirocco прав.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sirocco
сообщение 17.3.2016, 23:17
Сообщение #9


******

Expert
Сообщений: 809
Регистрация: 2.2.2012
Группа: Пользователи
Наличность: 15408
Пользователь №: 14.566
Возраст: 30



Можно вообще сделать вот так {1 2 2 4 3 4 4 4 5 4 5 5 9 63 0 37}
а потом использоваться doswitch
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
KaPeIkA
сообщение 23.8.2016, 19:09
Сообщение #10


*****

Journeyman
Сообщений: 354
Регистрация: 21.12.2010
Группа: Пользователи
Наличность: 1824
Из: Aberdeen,Stockholm
Пользователь №: 13.302
Возраст: 29



Jakut здорово ты еще жив все с олдп капаешся 5 лет прошло а нефига не поменялось пора работать детей иметь :-):-) а ты все с олдп ...копируешь


--------------------
Изображение
✵♛✵♛http://uowos.lv/

Skype Kapeika8
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
TeS
сообщение 24.8.2016, 4:10
Сообщение #11


*********

Grandmaster
Сообщений: 1.843
Регистрация: 10.2.2007
Группа: Пользователи
Наличность: 0
Из: Южное Бутово
Пользователь №: 9.448
Возраст: 21



Цитата(Kapeika @ 23.8.2016, 19:09) *

Jakut здорово ты еще жив все с олдп капаешся 5 лет прошло а нефига не поменялось пора работать детей иметь :-):-) а ты все с олдп ...копируешь


готовые сборки серверов зло )


--------------------
ОперацияУтринникЮжноеБутовоРожиВсалатПрибылиКрута
ПохватилиТопорыПолетелиВлесБульварДонсковаЧечерскийПроезд
ВотЭтоЯназываюЭкшенРезатьМачитРубить:)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Jose Cuervo
сообщение 24.8.2016, 14:56
Сообщение #12


********

UO Antares
Сообщений: 1.555
Регистрация: 12.2.2005
Группа: Пользователи
Наличность: 6139
Из: Санкт-Петербург
Пользователь №: 3.061
Возраст: 45



Можно сделать так:

Код

[DEFNAME LOTTO_GROUPS]
LOTTO_GROUP_4    {i_frozen_newbie_bow 1 i_club_newbie_frozen 1 i_cargo_Studded 1 i_bottle_repair200 1 i_hair_dye 1 i_cloth_dye 1}
LOTTO_GROUP_5    {i_ring_hp3 1 i_ring_mana3 1 i_ring_stam3 1 i_necklace_hp3 1 i_necklace_mana3 1 i_necklace_stam3 1}
LOTTO_GROUP_6    {i_luxor_llama 1 i_skill_bracelet 1 i_skill_mask 1 i_skill_robe 1 i_skill_cloak 1 i_spell_cloak 1 i_spell_robe 1}
LOTTO_GROUP_7    {i_Elfian_ringmail_leggings 1 i_Elfian_Cloak 1 i_Elfian_Sandals 1 i_Elfian_Bow 1 i_Elfian_Mustang 1}
LOTTO_GROUP_8    {i_cargo_shield_heater 1 i_arian_bow 1 i_frozen_bow 1 i_club_arian 1 i_club_frozen 1 i_blackdragon_Studded 1}
LOTTO_GROUP_9    {i_1000exp 1 I_100k 1}

[TEMPLATE LOTTO_REWARD]
    ITEM={LOTTO_GROUP_4 1 LOTTO_GROUP_5 1 LOTTO_GROUP_6 1 LOTTO_GROUP_7 1 LOTTO_GROUP_8 1 LOTTO_GROUP_9 1}

//    ...
    NEWITEM LOTTO_REWARD
    NEW.BOUNCE


Шансы можно проставить как для групп, так и для отдельных предметов внутри групп. Если на конкретном примере, о котором спрашивал Jakut, то выглядеть будет так:

Код
[TEMPLATE LOTTO_REWARD]
    ITEM={LOTTO_GROUP_1 2 LOTTO_GROUP_2 4 LOTTO_GROUP_3 4 LOTTO_GROUP_4 4 LOTTO_GROUP_5 4 LOTTO_GROUP_6 5 LOTTO_GROUP_7 7 LOTTO_GROUP_8 7 LOTTO_GROUP_9 63}


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 28.3.2024, 11:44
Designed by Nickostyle