Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

[ROZWIĄZANE] Zmienianie się szansy na coś wraz ze wzrostem zmiennej


Najlepsza odpowiedź sebul, 12.05.2014 15:01

random(100)

Coś takiego losuje nam liczby z przedziału od 0 do 99, czyli jest 100 wartości, więc jeśli damy taki warunek
random(100) < 5

to będzie 5% szansy na jego spełnienie, a jeśli taki
random(100) < 19

to będzie 19% szansy. Chyba reszty nie trzeba tłumaczyć?

A co do warunku
if(!random(unikChance))

on spełni się tylko wtedy, gdy wylosowaną wartością będzie liczba 0, czyli jeśli "unikChance" będzie równe powiedzmy 40, to na spełnienie tego warunku będziemy mieli 1/40, czyli 2.5%. Przejdź do postu


  • Zamknięty Temat jest zamknięty
5 odpowiedzi w tym temacie

#1 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 12.05.2014 14:28

Witam,

Zrobiłem sobie takiego stats moda i nwm jak zrobić dalej statystykę unik.

new unikChance = floatround(unik_gracza[vid] * 0.5, floatround_floor)
            
if(!random(unikChance)) return HAM_IGNORED; //pomin obrazenia

Chodzi mi o to, żeby to była procentowa szansa na unik.

Czyli jeśli mam 2 punkty w statystyce unik to mam 1% szansy na unik.

 

Czy to będzie poprawne?

Widziałem jeszcze coś takiego:

if(random(100) > unikChance)

  • +
  • -
  • 0

#2 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 12.05.2014 14:44

Ja bym zrobił to tak:

new x //Liczba pkt. uniku gracza
if((random(100)+1) <= floatround(float(x)/2.0)) // Jee Zrobilismy unik

(random(100)+1) - losowa liczba z przedziału 1,100 (1,100 takze sie wlicza)

floatround(float(x)/2.0) - połowa liczby pkt. gracza bo chciałeś by 2 pkt to 1%

 

To wcale nie jest trudne do wymyślenia xD

Teraz jeśli gracz będzie miał 10 pkt to będzie miał 5% dlaczego?

Bo będzie miał 5% na to że zostanie wylosowana liczba mniejsza lub równa 5


  • +
  • -
  • 1
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#3 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 12.05.2014 15:00

No okej ale czy random nie losuje od 0 do max-1 ?

random(2)  // 0 lub 1

A mój sposób? Jest zły?


  • +
  • -
  • 0

#4 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 12.05.2014 15:01   Najlepsza odpowiedź

random(100)

Coś takiego losuje nam liczby z przedziału od 0 do 99, czyli jest 100 wartości, więc jeśli damy taki warunek
random(100) < 5

to będzie 5% szansy na jego spełnienie, a jeśli taki
random(100) < 19

to będzie 19% szansy. Chyba reszty nie trzeba tłumaczyć?

A co do warunku
if(!random(unikChance))

on spełni się tylko wtedy, gdy wylosowaną wartością będzie liczba 0, czyli jeśli "unikChance" będzie równe powiedzmy 40, to na spełnienie tego warunku będziemy mieli 1/40, czyli 2.5%.
  • +
  • -
  • 2

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#5 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 12.05.2014 15:08

            new unikChance = floatround(unik_gracza[vid] * 0.5, floatround_floor)
            
            if(random(100) < unikChance)//unik

Takie coś mam czy pierwsza linia jest dobra? Nie chcę dzielić przez 2 (wole mnożenie)


  • +
  • -
  • 0

#6 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 12.05.2014 15:34

Nie chcę dzielić przez 2 (wole mnożenie)

 

Ależ nie ma róznicy (no prawie bo nwm jak ująć dzielenie przez 0 mnożeniem)

 

Takie coś mam czy pierwsza linia jest dobra

 

Względnie tak a nawet powiem więcej druga także jest dobra


  • +
  • -
  • 1
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych