| Zobacz poprzedni temat :: Zobacz następny temat | 
    
    
        | Autor | Wiadomość | 
    
        | kazzmir Administrator
 
  
 
 Dołączył: 24 Sie 2005
 Posty: 354
 Przeczytał: 0 tematów
 
 Skąd: kraków
 
 | 
            
                |  Wysłany: 2006/01/31 17:03    Temat postu: |  |  
                | 
 |  
                | zajebiście! 
 Post został pochwalony 0 razy
 |  | 
    
        | Powrót do góry |  | 
    
        |  | 
        |  | 
       |  | 
    
    
        | zysk Administrator
 
  
 
 Dołączył: 26 Sty 2006
 Posty: 49
 Przeczytał: 0 tematów
 
 
 
 | 
            
                |  Wysłany: 2006/01/31 17:10    Temat postu: |  |  
                | 
 |  
                | nie można bo setday... służy do sprawdzania dnia tylko gdy jest już późno daje datę następną. jak się zrobi wilk to zabije okoliczne ścierwojady (bo występują zazwyczaj w grupach), chyba że gracz je uratuje...
 
 Post został pochwalony 0 razy
 |  | 
    
        | Powrót do góry |  | 
    
        |  | 
        
    
        | Bubby Administrator
 
  
 
 Dołączył: 24 Sie 2005
 Posty: 238
 Przeczytał: 0 tematów
 
 Skąd: Wawa
 
 | 
            
                |  Wysłany: 2006/01/31 17:28    Temat postu: |  |  
                | 
 |  
                | Pomysł na respawn potworów jest bardzo fajny. 
 IMO powinno to tak wyglądać, że drobnica (gobliny, ścierwojady, kretoszczury i podobne) pojawiały by się po każdym śnie. Średni potwory pojawiały by się już żadziej, a najmocniejsze co kikla-kilkanaście cylki dobowych
 
 Post został pochwalony 0 razy
 |  | 
    
        | Powrót do góry |  | 
    
        |  | 
        
    
        | orcwarrior Administrator
 
  
 
 Dołączył: 24 Sie 2005
 Posty: 495
 Przeczytał: 0 tematów
 
 Skąd: Brzeziny
 
 | 
            
                |  Wysłany: 2006/01/31 18:14    Temat postu: |  |  
                | 
 |  
                | dobry pomysł teraz trzeba zrealizować... trzeba bedzie wszystko ustalić razem z Zyskiem... 
 Post został pochwalony 0 razy
 |  | 
    
        | Powrót do góry |  | 
    
        |  | 
        
    
        | zysk Administrator
 
  
 
 Dołączył: 26 Sty 2006
 Posty: 49
 Przeczytał: 0 tematów
 
 
 
 | 
            
                |  Wysłany: 2006/01/31 18:35    Temat postu: |  |  
                | 
 |  
                | -zmienne 
 
 
	  | Kod: |  
	  | const AIV_MM_respawndelay=25; // Ustaw ten aivar dla wszystkich bestii.
 const delays;
 delays=8; //Najpotężniejszy stwór po siedmiu dniach
 const monster_number=1000; //Ilość potworów każdego typu
 var int respawn_instance[monster_number][delays]; // Instancje potworów które się pojawią
 var string respawn_waypoint[monster_number][delays]; // Gdzie się pojawią...
 var int respawn_day[monster_number][delays]; // i kiedy
 var int respawn_oldest[delays]; // Najdawniej zabity potwór.
 respawn_oldest=0;
 var respawn_next[delays]; // Numer następnego potwora.
 respawn_next=0;
 
 |  -funkcja przy śmierci - do uruchomienia w ZS_dead w if C_NpcIsMonster(self)
 
 
 
	  | Kod: |  
	  | func void addrespawn()
 {
 if(/*potwór jest przywołany lub powiązany z misją*/)
 {return;};// ten potwór się nie respawnuje
 respawn_waypoint[respawn_next][self.aivar[AIV_MM_respawndelay]]=self.spawnpoint; //Ustawiamy opcje nastęnego potwora.
 respawn_instance[respawn_next][self.aivar[AIV_MM_respawndelay]]=Hlp_GetInstanceID(self);
 respawn_day[respawn_next][self.aivar[AIV_MM_respawndelay]]=Wld_Getday()+respawn_delay;
 respawn_next[self.aivar[AIV_MM_respawndelay]]=respawn_next[self.aivar[AIV_MM_respawndelay]]+1; // podnosimy numer następnego potwora.
 if (respawn_next[self.aivar[AIV_MM_respawndelay]]==monster_number) //jeśli przekroczyliśmy zakres wracamy na początek
 {
 respawn_next[self.aivar[AIV_MM_respawndelay]]=0
 };
 };
 
 |  - funkcja do uruchomienia w PC_Sleep (po zmianie dnia) z parametrem delays
 
 
 
	  | Kod: |  
	  | func void nowrespawn(var int delay)
 {
 if(respawn_oldest[delay]==respawn_next[delay]||Wld_getday()<respawn_day[respawn_oldest][delay]) //jeśli brak potwórów w pamięci lub ma się dziś nie pojawić.
 {
 if(delay==0)
 {return;};
 nowrespawn(delay-1);
 };
 Wld_InsertNpc(respawn_instance[respawn_oldest][delay],respawn_waypoint[respawn_oldest][delay]);
 respawn_oldest[delay]=respawn_oldest[delay]+1;
 if(respawn_oldest[delay]==monster_number[delay])
 {
 respawn_oldest[delay]=0
 };
 nowrespawn(delay); // dalej
 };
 |  
 Post został pochwalony 0 razy
 |  | 
    
        | Powrót do góry |  | 
    
        |  | 
        
    
        | orcwarrior Administrator
 
  
 
 Dołączył: 24 Sie 2005
 Posty: 495
 Przeczytał: 0 tematów
 
 Skąd: Brzeziny
 
 | 
            
                |  Wysłany: 2006/01/31 22:27    Temat postu: |  |  
                | 
 |  
                | Ujme to tak: -Moja propozycja zwerbowania cię do składu bylaa strzałem w "10" :P
 -a co ktoś się może nie zgodzi??
   EDIT:
 Aż się zastanawiam po co jestem jeszcze w teamie;P
 
 Post został pochwalony 0 razy
 |  | 
    
        | Powrót do góry |  | 
    
        |  | 
        
    
        | kazzmir Administrator
 
  
 
 Dołączył: 24 Sie 2005
 Posty: 354
 Przeczytał: 0 tematów
 
 Skąd: kraków
 
 | 
            
                |  Wysłany: 2006/01/31 22:44    Temat postu: |  |  
                | 
 |  
                | przypominam że byłem ZA! ja tam nie wnikam w te całe skrypty chociaż coś tam kumam z html i innych ale wiecie jest super, naprawde idzie dobrze. 
 Post został pochwalony 0 razy
 |  | 
    
        | Powrót do góry |  | 
    
        |  | 
        
    
        | zysk Administrator
 
  
 
 Dołączył: 26 Sty 2006
 Posty: 49
 Przeczytał: 0 tematów
 
 
 
 | 
            
                |  Wysłany: 2006/02/01 21:31    Temat postu: |  |  
                | 
 |  
                | 
 
	  | orcwarrior napisał: |  
	  | Aż się zastanawiam po co jestem jeszcze w teamie;P
 |  A kto będzie pisał proste i monotonne skrypty. :P
 
 A co do tematu to nie wiem czy w G są tablice dwuwymiarowe więc to może nie działać, jest też nieefektywne pamięciowo, więc wkrótce napiszę coś nowego.
 
 Post został pochwalony 0 razy
 |  | 
    
        | Powrót do góry |  | 
    
        |  | 
        
    
        | zysk Administrator
 
  
 
 Dołączył: 26 Sty 2006
 Posty: 49
 Przeczytał: 0 tematów
 
 
 
 | 
            
                |  Wysłany: 2006/02/03 21:34    Temat postu: |  |  
                | 
 |  
                | Oto nowy skrypt respawnu: Zmienne i stałe:
 
 
 
	  | Kod: |  
	  | const int worlds=//tu wpisz ilość światów
 
 const int world_zen=1;
 const int oldmine_zen=2;
 /*i cała reszta*/
 
 var int currentworld;
 
 const int monster_number=1<<10;//1024
 
 const int AIV_MM_RESPAWNDELAY=25; //Ustaw ten aivar na czas jaki potrzeba do respawnu, nie ustawiaj dla nieodradzających
 var int respawn_instance[monster_number];
 var string respawn_wp[monster_number];
 var int respawn_day[monster_number];
 var int respawn_next[monster_number]; //Następna komórka tego samego typu (świata lub też pusta)
 
 var int respawn_pointer;
 var int respawn_ptwo;
 
 var int respawn_first[worlds+1]={
 0,
 monster_number,//world_zen
 monster_number,//oldmine_zen
 /*tyle ile światów (koniecznie monster_number)*/
 };
 
 |  Na początku każdego init'a napisz:
 
 
 
	  | Kod: |  
	  | currentworld=//Nazwa tego świata
 respawn_pointer=respawn_first[currentworld];
 respawn_ptwo=monster_number;
 nowrespawn();
 
 |  Funkcje (przy nagłówkach podane gdzie uruchomić):
 
 
 
	  | Kod: |  
	  | func void preparerespawn(int last)// funkcja ustawia elementy respawn_next na {1,2,3,4,5,...,monster_number} uruchom w startup_world przed init_world
 {
 if (last==respawn_pointer)
 {
 respawn_pointer=respawn_pointer+1;
 respawn_next[last]=respawn_pointer;
 return;
 };
 preparerespawn(last>>2);// 1/4 last
 preparerespawn(last>>1);// 1/2 last
 preparerespawn(last-(last>>2));// 3/4 last
 preparerespawn(last);// last
 };
 func void addrespawn() //uruchom w ZS_dead w if(C_Npcismonster)
 {
 if(!self.aivar[AIV_MM_RESPAWNDELAY]){return;};//stworzenie się nie odradza
 respawn_pointer=respawn_first[0];//Wstawimy w pierwsze wolne miejsce
 respawn_first[0]=respawn_next[respawn_pointer];
 
 respawn_next[respawn_pointer]=respawn_first[currentworld];
 respawn_first[currentworld]=respawn_pointer;
 
 respawn_instance[respawn_pointer]=Hlp_Getinstanceid(self);
 respawn_day[respawn_pointer]=self.aivar[AIV_MM_RESPAWNDELAY];
 respawn_wp[respawn_pointer]=self.wp;
 };
 func void nowrespawn() //uruchom w PC_sleep, po ustawieniu respawn_ptwo=monster_number
 {
 if(respawn_pointer==monster_number)
 {
 respawn_pointer=respawn_first[currentworld];
 return;
 };
 if(respawn_day[respawn_pointer]>=Wld_getDay())
 {
 if(respawn_ptwo==monster_number)
 {
 respawn_first[current_world]=respawn_next[respawn_pointer];
 }
 else
 {
 respawn_next[respawn_ptwo]=respawn_next[respawn_pointer];
 };
 Wld_insertNpc(respawn_instance[respawn_pointer],respawn_wp[respawn_pointer])
 respawn_next[respawn_pointer]=respawn_first[0];
 respawn_first[0]=respawn_pointer;
 }
 else
 {
 respawn_ptwo=respawn_pointer;
 };
 respawn_pointer=respawn_next[respawn_pointer];
 nowrespawn();
 };
 
 |  
 Post został pochwalony 0 razy
 |  | 
    
        | Powrót do góry |  | 
    
        |  | 
        
    
        | orcwarrior Administrator
 
  
 
 Dołączył: 24 Sie 2005
 Posty: 495
 Przeczytał: 0 tematów
 
 Skąd: Brzeziny
 
 | 
            
                |  Wysłany: 2006/02/08 19:53    Temat postu: |  |  
                | 
 |  
                | no więc tak mam nawięcej problemów z plikiem w story_globals 
 
 
	  | Kod: |  
	  | const int worlds=5//tu wpisz ilość światów 
 const int world_zen=1;
 const int oldmine_zen=2;
 const int freemine_zen=3;
 const int orctemple_zen=4;
 const int orcgraveyard_zen=5;//dobrze ?? jezeli tak coś z tym dalej zrobić?
 
 /*i cała reszta*/
 
 var int currentworld; //rozumiem ze to ma byc coś tkaiego currentworld=world_zen; w takim razie po co worlds tak własciwie??
 
 
 const int monster_number=1<<10;//1024 nie wiem czy skrypt przetrawi to <<
 
 const int AIV_MM_RESPAWNDELAY=25; //Ustaw ten aivar na czas jaki potrzeba do respawnu, nie ustawiaj dla nieodradzających to ma być w story_globals?? lepiej ustawic u bestji...
 var int respawn_instance[monster_number];//instance odradzanego npc tak?
 var string respawn_wp[monster_number]; //waypoint..proste
 var int respawn_day[monster_number];//To niezbyt kumam chodzi o to ile dni do respawnu???
 var int respawn_next[monster_number]; //Następna komórka tego samego typu (świata lub też pusta)
 
 var int respawn_pointer; //skomentuje tak ???????
 var int respawn_ptwo; //jak wyzej :P
 
 var int respawn_first[worlds+1]={0,monster_number,
 monster_number,)//nie wiem jak to miało by wyglądać ?? //world_zen //oldmine_zen
 /*tyle ile światów (koniecznie monster_number)*/
 ///czy napewno , na koncu moze ; ?? ogolnie to mi ciezko zakapowac wątpie aby działało
 |  EDIT z wiekszoscią poradziłem sobie tyle ze musiałem coś  takiego dać w zastąp:
 
 
 
	  | Kod: |  
	  | var int respawn_first[currentworld]; |  ale w "[" "]" moze byc tylko const int.... co robic:P??
 zrobie to tak ze zamiast curentworld przy initach dam nazwe swiata...moze zadziałac..
   Hymmm...tak sobie myśle moze zamiast sie meczyć uzyć tej funkcji:)
 
 
 
	  | Kod: |  
	  | func void    Wld_InsertNpcAndRespawn (VAR INT instance, VAR STRING spawnPoint, VAR FLOAT spawnDelay) |  
 Post został pochwalony 0 razy
 |  | 
    
        | Powrót do góry |  | 
    
        |  | 
        
    
        | zysk Administrator
 
  
 
 Dołączył: 26 Sty 2006
 Posty: 49
 Przeczytał: 0 tematów
 
 
 
 | 
            
                |  Wysłany: 2006/02/10 17:39    Temat postu: |  |  
                | 
 |  
                | worlds określa ile światów wogóle jest w grze, a currentworld w którym się znajdujemy możesz wpisać ręcznie 1024, ale skrypt rozumie chyba przesunięcia bitowe.
 stała AIV_MM_RESPAWNDELAY służy do tego aby można było używać tego aivara nie pamiętając że jest on 25/
 respawn_day oznacza którego dnia potwór ma się pojawić.
 respawn_pointer jest używany przez funkcje, aby zaznaczyć którą komórką tablic się aktualnie zajmujemy
 Co do respawn_first:
 
 
 
	  | Kod: |  
	  | var int respawn_first[worlds+1]={
 0,
 monster_number,
 monster_number,
 monster_number,
 monster_number,
 monster_number};
 
 |  natomiast kiedy indziej już nie piszesz var int.
 A co do tej funkcji to trochę się nią nie chciałem posługiwać bo nie wiem jak działa.
 
 Post został pochwalony 0 razy
 |  | 
    
        | Powrót do góry |  | 
    
        |  | 
        
    
        |  |