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
Modyfikacja

random_num() - jak powtórzyć "losowanie"

modyfikacja

Najlepsza odpowiedź MAGNET, 19.11.2014 19:13

new utwor;
 
public RoundSound()
{
numer = random_num(1, 13);
if(utwor == numer)
RoundSound();
else
{
utwor = numer;
new Players[32],num;
get_players(Players,num)
for(new ajdi = 0;ajdi<num;ajdi++)
{
if(mute[ajdi])
Graj(ajdi);
}
}
return PLUGIN_CONTINUE;
}
Przejdź do postu


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

#1 psilocybe

    Toasty!

  • Power User

Reputacja: 252
Wszechwidzący

  • Postów:524
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:PL
Offline

Napisano 18.11.2014 11:50

Jak w tytule, modyfikuję plugin SmartRS od Cheq i chciałem dodać warunek aby nie losowało mi dwa razy tej samej liczby.

Wstawiam fragment *.sma

public RoundSound()
{
numer = random_num(1, 13);
new Players[32],num;
get_players(Players,num)
for(new ajdi = 0;ajdi<num;ajdi++)
{
if(mute[ajdi])
Graj(ajdi);
}
return PLUGIN_CONTINUE;
}

Ktoś zapoda jakiś prosty przykład? Nie mogę nic znaleźć ;)

 

Edit: poza tym http://amxx.pl/topic...-bez-powtorzen/

Ale nie mam pojęcia o dynamicznych tablicach dobrze o tym wiecie :D

Liczę na pomoc.


Użytkownik psilocybe edytował ten post 18.11.2014 11:59

  • +
  • -
  • 0

Dołączona grafika

Dołączona grafika


#2 dasiek

    Nie wiem, nie znam się, nie orientuję się, zarobiony jestem.

  • Junior Admin

Reputacja: 2 077
Godlike

  • Postów:5 706
  • Imię:Adaś
  • Lokalizacja:No teraz trochę dalej od WWy
Offline

Napisano 18.11.2014 12:42

chcesz żeby 2 razy z rzędu nie leciała taka sama piosenka, czy żeby nie powtórzyła się póki wszystkie się nie wylosują?

 


  • +
  • -
  • 0

#3 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 661
Wszechmogący

  • Postów:1 535
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 18.11.2014 12:59

Pisane z telefonu, wiec nie miałem jak użyć tabulacji. Jeśli przykładowo wylosuje się numer 7 siódma komórka zostanie zapelniona. Jeśli teraz wylosuje się 7, losowanie zostanie wykonane ponownie. Jeśli natomiast wszystikie komórki zostaną zapełnione, wszystkie komórki zostają wyzerowane. Metoda sama w sobie jest bardzo brzydka, ale na lekcji nie znajduje jak na razie innej możliwości

new zmienna[13]

public RoundSound()
{
for(new i;i<13;i++)
{
if(zmienna[i]) zmienna[i] = 0;
else
{

numer = random_num(1, 13);
if(!zmienna[zmienna])
{
new Players[32],num;
get_players(Players,num)
for(new ajdi = 0;ajdi<num;ajdi++)
{
if(mute[ajdi])
Graj(ajdi);
}
}
else RoundSound();
return PLUGIN_CONTINUE;
}
}

  • +
  • -
  • 0

#4 psilocybe

    Toasty!

  • Autor tematu
  • Power User

Reputacja: 252
Wszechwidzący

  • Postów:524
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:PL
Offline

Napisano 18.11.2014 13:59

MAGNET, dzięki za odpowiedź ale pomimo że doszedłem do ładu z Twoim kodem to przy kompilacji:

 

linijka

if(!zmienna[zmienna])

zwraca

array must be indexed - variable "zmienna"

i na końcu publica RoundSound warn w kompilatorze

function RoundSound should return a value

Nie znam się, ale dlaczego pozornie proste rzeczy są tak skomplikowane? Nie ogarniam.

 

Btw.

 

Jeżeli losujemy numer to nie możemy go od razu zapisać do drugiej tablicy np. lastnumer[] i przed każdym puszczeniem sprawdzić czy wylosowany numer != lastnumer, jeżeli jest inaczej to PublicRoundsound :D

 

Nie było by?

 

Edit: CheQ nie zauważyłem Twojego posta, chcę opcję 1 :) Po prostu nie chce 2 razy z rzędu tej samej nuty.


Użytkownik psilocybe edytował ten post 18.11.2014 14:11

  • +
  • -
  • 0

Dołączona grafika

Dołączona grafika


#5 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 661
Wszechmogący

  • Postów:1 535
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 18.11.2014 15:04

zmienna[numer], pomyłkę zrobiłem ;)
a returna daj pod ostatnią klamrą

Ah, myślałem ze chcesz aby przeleciała cała playlista, a potem od nowa. Nie mam teraz czasu, ale jak ktoś mnie nie uprzedzi to napisze co i jak. Ale na postawione pytanie odpowiedziałeś sobie sam
  • +
  • -
  • 1

#6 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 661
Wszechmogący

  • Postów:1 535
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 18.11.2014 15:06

Jeżeli losujemy numer to możemy go od razu zapisać do drugiej tablicy np. lastnumer[] i przed każdym puszczeniem sprawdzić czy wylosowany numer != lastnumer, jeżeli jest inaczej to PublicRoundsound :D - masz odpowiedź
  • +
  • -
  • 0

#7 dasiek

    Nie wiem, nie znam się, nie orientuję się, zarobiony jestem.

  • Junior Admin

Reputacja: 2 077
Godlike

  • Postów:5 706
  • Imię:Adaś
  • Lokalizacja:No teraz trochę dalej od WWy
Offline

Napisano 18.11.2014 15:15

spróbuj zmienić linijkę losowanie na tę.

public RoundSound() 
{ 
	new bardzoStaryNumer = numer;
	do{
		numer = random_num(1, sizeof numery_nut);
	}
	while(numer != bardzoStaryNumer);
	//dalszy kod
}

  • +
  • -
  • 0

#8 psilocybe

    Toasty!

  • Autor tematu
  • Power User

Reputacja: 252
Wszechwidzący

  • Postów:524
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:PL
Offline

Napisano 18.11.2014 17:00

CheQ, plugin się kompiluje bez problemów ale crashuje serwer bez logów pomimo włączonego debug'a. Przecież powinno działać.

 


  • +
  • -
  • 0

Dołączona grafika

Dołączona grafika


#9 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 661
Wszechmogący

  • Postów:1 535
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 19.11.2014 19:13   Najlepsza odpowiedź

new utwor;
 
public RoundSound()
{
numer = random_num(1, 13);
if(utwor == numer)
RoundSound();
else
{
utwor = numer;
new Players[32],num;
get_players(Players,num)
for(new ajdi = 0;ajdi<num;ajdi++)
{
if(mute[ajdi])
Graj(ajdi);
}
}
return PLUGIN_CONTINUE;
}

dasiek (20.11.2014 10:01):
wiedziałem że coś rekurencyjnie można ^^
MAGNET (20.11.2014 15:07):
Twój kod działał prawie tak samo, ale źle ulozyles warunek i wykonywał się on bez konca ;_

Użytkownik MAGNET edytował ten post 19.11.2014 19:13

  • +
  • -
  • 2

#10 psilocybe

    Toasty!

  • Autor tematu
  • Power User

Reputacja: 252
Wszechwidzący

  • Postów:524
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:PL
Offline

Napisano 19.11.2014 19:40

Dziękuję :D

 

Plusik dla Ciebie zasłużony.


  • +
  • -
  • 0

Dołączona grafika

Dołączona grafika






Również z jednym lub większą ilością słów kluczowych: modyfikacja

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

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