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

Szanse na wylosowanie czegoś w procentach


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
10 odpowiedzi w tym temacie

#1 faken

    Profesjonalista

  • Użytkownik

Reputacja: 35
Życzliwy

  • Postów:192
  • Lokalizacja:Warszawa
Offline

Napisano 18.12.2012 19:32

Witam szukam kodu , który pokaze mi to co w temacie, załóżmy ze np, mamy 20% szans na wylosowanie granata HE i proszę abyście taki kod mi podali reszte sam zrozumiem.
  • +
  • -
  • 0

#2 speedkill

    Godlike

  • Przyjaciel

Reputacja: 1 592
Godlike

  • Postów:2 733
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Prudnik
Offline

Napisano 18.12.2012 19:40

http://amxx.pl/dokum...cja/f359/random

Następnie w warunku, sprawdzasz czy random(liczba) == 0, jeżeli tak daj graczowi granat ;)
  • +
  • -
  • 0

If you can dream it, you can do it.


#3 faken

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 35
Życzliwy

  • Postów:192
  • Lokalizacja:Warszawa
Offline

Napisano 18.12.2012 19:45

Mówiłem że proszę o przykładowy kodzik :P
  • +
  • -
  • 0

#4 Krytykiewicz

    Zaawansowany

  • Użytkownik

Reputacja: 18
Początkujący

  • Postów:114
  • Lokalizacja:Stąd
Offline

Napisano 18.12.2012 19:47

http://amxx.pl/dokum...cja/f359/random

Następnie w warunku, sprawdzasz czy random(liczba) == 0, jeżeli tak daj graczowi granat ;)


A można też zrobić case 1..20, case 21..50, prawda?

Użytkownik Krytykiewicz edytował ten post 18.12.2012 19:47

  • +
  • -
  • 0

#5 speedkill

    Godlike

  • Przyjaciel

Reputacja: 1 592
Godlike

  • Postów:2 733
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Prudnik
Offline

Napisano 18.12.2012 19:59

Tak na szybko:
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "Administrator"

public plugin_init(){
    register_plugin(PLUGIN, VERSION, AUTHOR);
    register_clcmd("say /test", "GiveHe");
}
public GiveHe(id){
    if(is_user_alive(id) && random(5) == 0){
        //Daj granat
    }
}

  • +
  • -
  • 2

If you can dream it, you can do it.


#6 faken

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 35
Życzliwy

  • Postów:192
  • Lokalizacja:Warszawa
Offline

Napisano 18.12.2012 20:02

teraz mi powiedz te procenty w randomach bo nie zabardzo rozumiem
Edit: a czym może być tak if(random_num(1,100)<=20) ( 20% szans na wylosowanie ) ??

Użytkownik fakeN edytował ten post 18.12.2012 20:06

  • +
  • -
  • 0

#7 Droso

    Dawniej HubertTM

  • Support Team

Reputacja: 1 291
Godlike

  • Postów:2 371
  • Steam:steam
  • Imię:Hubert
  • Lokalizacja:Wrocław
Offline

Napisano 18.12.2012 20:48

Z matematycznego punktu widzenia tak, zakres 20 liczb ze 100 to 20%, ale nie wiem po co tak się męczyć i losować większe liczby jak można mniejsze i to samo będzie.

@edit
Wyjaśnienie kodu speedkill
		if(is_user_alive(id) && random(4) == 0){
				//Daj granat
		}
random(4) - czyli losuje 4 liczb (0, 1, 2, 3), więc 1/4 - 25%


@edit czyli speedkillu ty też dałeś błędny kod, bo chciał 20% :D, a ja tobie zaufałem :P
Sorry za błąd, ale zawsze uzywam random_num'a ;D

@edit2 spoko :D
speedkill (18.12.2012 20:58):
Jesteś pewny, że 20% ?

Opis: Zwraca pseudo-losową liczbę całkowitą z przedziału od 0 do max-1.

speedkill (18.12.2012 21:08):
Gość chciał przykładowy kod, więc go dałem ;)

Btw. poprawione.

Użytkownik HubertTM edytował ten post 19.12.2012 15:19

  • +
  • -
  • 2

Piszę pluginy pod: AMX MOD X oraz SOURCE MOD!

Na zlecenie i bez zlecenia zresztą też!


#8 faken

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 35
Życzliwy

  • Postów:192
  • Lokalizacja:Warszawa
Offline

Napisano 18.12.2012 21:40

a jak żeby wylosowało raz na runde.
  • +
  • -
  • 0

#9 Filip1512

    Wszechmogący

  • Power User

Reputacja: 137
Zaawansowany

  • Postów:641
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:Poland
Offline

Napisano 18.12.2012 22:28

Ja bym na poczatku stworzył zmienną bool:

new bool: ma_losowac[33]


Później w plugin_init zarejestrować zdarzenie początku rundy

register_logevent("PoczatekRundy", 2, "1=Round_Start")


Następnie public, moim zdaniem lepiej z taskiem na parę sekund:

public PoczatekRundy(){
ma_losowac[id] = true;
set_task(3.0, "losowanie", id)
}


I funkcja do losowania:

public losowanie(id){
if(is_user_alive(id) && ma_losowac[id] == true){
if(random(5) == 0){
give_item(id, "weapon_hegrenade")
ma_losowac[id] = false
}
}
}


Standardowo mogłem oczywiście(a pewnie to zrobiłem) coś pokiełbasić. W sumie nie wiem, czy w ogóle trzeba do tego robić zmienną, bo początek rundy jest tylko raz w każdej rundzie.

Użytkownik `NN edytował ten post 18.12.2012 22:29

  • +
  • -
  • 0
Filip / `NN
Wymuszanie rate'ów co spawna - update v2.1!

#10 Krytykiewicz

    Zaawansowany

  • Użytkownik

Reputacja: 18
Początkujący

  • Postów:114
  • Lokalizacja:Stąd
Offline

Napisano 18.12.2012 22:38

public losowanie(id){
if(ma_losowac[id] && is_user_alive(id)){
if(random(5) == 0){
give_item(id, "weapon_hegrenade")
ma_losowac[id] = false
}
}
}


według mnie tak to powinno być. Nie trzeba sprawdzać czy true, wystarczy "!" lub bez. Natomiast lepiej będzie najpierw sprawdzić czy losował aniżeli wysyłać najpierw sprawdzenie do Metamoda:P czy on żyje. Benio na to zwracał uwagę w poradniku.
  • +
  • -
  • 0

#11 Gość_21977_*

  • Gość

Reputacja: 0

Offline

Napisano 19.12.2012 00:26

O, widzę, że mój poradnik jednak się komuś przydał :)

btw. Dla n=0 nie wywołujemy kodu w ogóle, dla n=100 zawsze, ∀n∈ℕ∩[2;99] warunek powinien przyjąć postać
if(random(100/NWD(n, 100))<n/(NWD(n, 100)))
Dla n=1 zaś wykonamy
if(!random(n))





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

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