Random - prosty skrypt losowania 8328 2

O temacie

Autor Buła

Zaczęty 23.10.2008 roku

Wyświetleń 8328

Odpowiedzi 2

Buła

Buła

Użytkownicy
wyłącz komputer i wyjdź z domu
posty2402
Propsy3163
NagrodyV
Profesjabrak
  • Użytkownicy
  • wyłącz komputer i wyjdź z domu

Buła

Random - prosty skrypt losowania
2008-10-23, 17:31(Ostatnia zmiana: 2009-07-11, 11:53)

Witam.
W tym tutorialu opowiem nieco o randomie - czyli o losowości.
Sprawa wygląda banalnie prosto, ale żeby zrozumieć coś z tego co pisze, trzeba umieć już pisać podstawowe dialogi.

Więc zaczynamy.
Najpierw wymyślany nazwę do zmiennej. Wiadomo, bez polskich znaków, spacji innych tego typu.
Ja użyję po prostu nazwy 'Zmienna'.

Teraz zdefiniowanie jej:

Cytuj
Zmienna = Hlp_Random (10);

Jak wiadomo zamiast mojego 'Zmienna' wpisujemy swoją wybraną nazwę.
Co do '(10)' to jest dowolność... To jest ilość liczb jakie wylosuje gra.

Tą linijkę umieszczamy w _Info() nad poszczególnymi dialogami.
Przykład:

Cytuj
**************************************************
INSTANCE DIA_Mud_Random (C_INFO)
{
   npc      = Vlk_574_Mud;
   nr       = 1;
   condition   = DIA_Mud_Random_Condition;
   information   = DIA_Mud_Random_Info;
   permanent   = 0;
   important    = 0;
};                      

FUNC INT DIA_Mud_Random_Condition()
{
   return 1;
};


FUNC VOID DIA_Mud_Random_Info()
{
   Zmienna = Hlp_Random (10);

[...]



Skoro mamy już to wpisane, teraz trzeba zrobić warunki.

Ja zrobię tak:
Jeśli wylosuje więcej niż 5 - NPC mówi: "Wygrałeś!" i daje nam 10 bryłek.
Jeśli wylosuje mniej niż 5 lub 5 - NPC mówi: "Przegrałeś!" i zabiera nam 10 bryłek.

Więc skrypt bedzie taki:

Cytuj
FUNC VOID DIA_Mud_Random_Info()
{
   Zmienna = Hlp_Random (10);

if (Zmienna <= 5)
{
   AI_Output (self, other,"DIA_Mud_Dialog_01"); //Wygrałeś! Oto twoja ruda.
   CreateInvItems  (self, ItMiNugget, 10);
   B_GiveInvItems   (self, other, ItMiNugget, 10);      
}
else if (Zmienna > 5)
{
   AI_Output (self, other,"DIA_Mud_Dialog_02"); //Przegrałeś! Ruda jest moja.
   B_GiveInvItems   (othe, self, ItMiNugget, 10);
};

Teraz wyjaśnienie.
if (Zmienna <= 5) - jeśli wylosowana liczba jest mniejsza lub równa 5.
else if (Zmienna > 5) - jeśli wylosowana liczna jest większa od 5.


Tutaj dalej sprawa wygląda tak, że jeśli np. wpisaliście sobie np. Zmienna = Hlp_Random (6); to nie dajcie 5 tylko 3...
Można oczywiście dodać więcej warunków, na przykład 5. Wtedy jeśli wpisaliśmy 10, to zrobimy poszczególne warunki:

Cytuj
if (Zmienna == 1) || (Zmienna == 2)
if (Zmienna == 3) || (Zmienna == 4)
if (Zmienna == 5) || (Zmienna == 6)
if (Zmienna == 7) || (Zmienna == 8)
if (Zmienna == 9) || (Zmienna == 10)

I małe wyjaśnienie. Niektórzy zapewne dziwią się co oznacza to ||. Jest to inaczej 'LUB'. Czyli jeśli Zmienna jest równa 1 LUB Zmienna jest równa 2.

To by było na tyle. Od was już zależy jak wykorzystacie tą funkcję.

Pozdro
Buła xD

 

muttley

muttley

Użytkownicy
posty567
Propsy381
  • Użytkownicy
Masz mały błąd, w gotowym skrypcie
Poprawka

Cytuj
FUNC VOID DIA_Mud_Random_Info()
{
Zmienna = Hlp_Random (10);

if (Zmienna <= 5)
{
AI_Output (self, other,"DIA_Mud_Dialog_01"); //Wygrałeś! Oto twoja ruda.
CreateInvItems (self, ItMiNugget, 10);
B_GiveInvItems (self, other, ItMiNugget, 10);
}
else if (Zmienna > 5)
{
AI_Output (self, other,"DIA_Mud_Dialog_02"); //Przegrałeś! Ruda jest moja.
B_GiveInvItems (other, self, ItMiNugget, 10);
};
 

orcwarrior

orcwarrior

The Modders
posty475
Propsy317
Profesjabrak
  • The Modders

orcwarrior
The Modders

Random - prosty skrypt losowania
#2 2009-03-07, 19:09(Ostatnia zmiana: 2009-07-11, 11:55)
Tak dla informacji można to uprościć:
FUNC VOID DIA_Mud_Random_Info()
{
Zmienna = Hlp_Random (10);

if (Zmienna <= 5)
{
AI_Output (self, other,"DIA_Mud_Dialog_01"); //Wygrałeś! Oto twoja ruda.
CreateInvItems (self, ItMiNugget, 10);
B_GiveInvItems (self, other, ItMiNugget, 10);
}
else if (Zmienna > 5)
{
AI_Output (self, other,"DIA_Mud_Dialog_02"); //Przegrałeś! Ruda jest moja.
B_GiveInvItems (othe<span style="color: red;">r</span>, self, ItMiNugget, 10);
};
NA
  FUNC VOID DIA_Mud_Random_Info()
   {
   Zmienna = Hlp_Random (2);//wartosc 0 lub 1
   
   if (Zmienna)
   {
   AI_Output (self, other,"DIA_Mud_Dialog_01"); //Wygrałeś! Oto twoja ruda.
   CreateInvItems (self, ItMiNugget, 10);
   B_GiveInvItems (self, other, ItMiNugget, 10);
   }
   else
   {
   AI_Output (self, other,"DIA_Mud_Dialog_02"); //Przegrałeś! Ruda jest moja.
   B_GiveInvItems (other, self, ItMiNugget, 10);
   };

Choć wątpię żeby to jakoś znacząco wpływało na wydajność, o ile wogóle wpływa choć wydaje mi się że tak, tu musiałby się wypowiedzieć Zysk.


Jeżeli chodzi o przypadek w którym chciałeś wybrać 5 par różnych liczb wystarczyłoby zamiast
if (Zmienna == 1) || (Zmienna == 2)
 if (Zmienna == 3) || (Zmienna == 4)
 if (Zmienna == 5) || (Zmienna == 6)
 if (Zmienna == 7) || (Zmienna == 8)
 if (Zmienna == 9) || (Zmienna == 10)</span>
Zrobić
Zmienna = Hlp_Random (5);//skoro 5 wariantów to w zupełności wystarczy
if (Zmienna == 0) {instrukcja();}
else if (Zmienna == 1) {instrukcja2();}
else if (Zmienna == 2) {instrukcja3();}
else if (Zmienna == 3) {instrukcja4();}
else /*zmienna przyjęła wartość 4*/{instrukcja5();};

Poza tym wpisując
Zmienna = Hlp_Random (10);
otrzymamy zmienna od 0 do 9, nie od 1 do 10 (tak jak wynikałoby z twoich warunków)

acha brakuje jeszcze deklaracji zmiennej tu w zupełności wystarczy zmienna lokalna (wewnątrz klamry funkcji w której będzie używana) czyli:
var int zmienna;
 




0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry