UoKit.com Форумы > Ultima Online : Dev > Sphere Server > Sphere Server 0.55R
Страницы: 1, 2
Jakut
Здравствуйте, вот скрипт, ну хочу сделать так чтоб он по группам был и выдавал только с одной группы по ранду. А то он выдает итем с одной группы и с другой сразу тоже, а нужно чтоб давал только с одной и один итем. Он например нажимаю дает 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

Вверх
Sirocco
вместо if - elseif начиная со 2й по порядку группы
хотя я себе с трудом представляю как он доберется до последней группы с таким rand.
Вверх
M0rBiT
Цитата(Sirocco @ 16.3.2016, 13:25)

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

Так всегда ж так было) Лотереи это лохотрон
Вверх
Jakut
Да хорошо все падает с таким рандом. Ну вопрос теперь такой, как поставить мне правильнее процент выпада?

Код
(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 групы. А не с нищей.
Вверх
Sirocco
facepalm.jpg
if rand(100) < 4
что тебе еще надо человече?
Вверх
Soteric
Код
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 не нужно.
Вверх
Sirocco
Тогда у него в любом случае что-то выпадет...
а ведь есть шанс что не выпадет ничего.


нужно именно каждый раз новое число генерировать. иначе не получится одинаковый шанс в 4%.
Вверх
Soteric
Цитата(Sirocco @ 17.3.2016, 17:37)

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

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

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

ADDED: Посмотрел бегло скрипты сферы. Похоже таки предпочитают каждый раз вызывать rand(). Тогда все проще, Sirocco прав.
Вверх
Sirocco
Можно вообще сделать вот так {1 2 2 4 3 4 4 4 5 4 5 5 9 63 0 37}
а потом использоваться doswitch
Вверх
KaPeIkA
Jakut здорово ты еще жив все с олдп капаешся 5 лет прошло а нефига не поменялось пора работать детей иметь :-):-) а ты все с олдп ...копируешь
Вверх
Invision Power Board © 2001-2024 Invision Power Services, Inc.
Version for Pocket PC © 2006-2024, IPBest Studio.