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 |
|
|
|