Forum Modders
Forum modderów gier cRPG
 
 FAQFAQ   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  GalerieGalerie   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

[Respawn]-Czyli odnawianie się potworów
Idź do strony Poprzedni  1, 2
 
Napisz nowy temat   Odpowiedz do tematu    Forum Modders Strona Główna -> Skrypty
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
kazzmir
Administrator
Administrator



Dołączył: 24 Sie 2005
Posty: 354
Przeczytał: 0 tematów

Skąd: kraków

PostWysłany: 2006/01/31 17:03    Temat postu:

zajebiście!

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
zysk
Administrator
Administrator



Dołączył: 26 Sty 2006
Posty: 49
Przeczytał: 0 tematów


PostWysł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
Zobacz profil autora
Bubby
Administrator
Administrator



Dołączył: 24 Sie 2005
Posty: 238
Przeczytał: 0 tematów

Skąd: Wawa

PostWysł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
Zobacz profil autora
orcwarrior
Administrator
Administrator



Dołączył: 24 Sie 2005
Posty: 495
Przeczytał: 0 tematów

Skąd: Brzeziny

PostWysł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
Zobacz profil autora
zysk
Administrator
Administrator



Dołączył: 26 Sty 2006
Posty: 49
Przeczytał: 0 tematów


PostWysł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
Zobacz profil autora
orcwarrior
Administrator
Administrator



Dołączył: 24 Sie 2005
Posty: 495
Przeczytał: 0 tematów

Skąd: Brzeziny

PostWysł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
Zobacz profil autora
kazzmir
Administrator
Administrator



Dołączył: 24 Sie 2005
Posty: 354
Przeczytał: 0 tematów

Skąd: kraków

PostWysł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
Zobacz profil autora
zysk
Administrator
Administrator



Dołączył: 26 Sty 2006
Posty: 49
Przeczytał: 0 tematów


PostWysł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
Zobacz profil autora
zysk
Administrator
Administrator



Dołączył: 26 Sty 2006
Posty: 49
Przeczytał: 0 tematów


PostWysł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
Zobacz profil autora
orcwarrior
Administrator
Administrator



Dołączył: 24 Sie 2005
Posty: 495
Przeczytał: 0 tematów

Skąd: Brzeziny

PostWysł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
Zobacz profil autora
zysk
Administrator
Administrator



Dołączył: 26 Sty 2006
Posty: 49
Przeczytał: 0 tematów


PostWysł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
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Modders Strona Główna -> Skrypty Wszystkie czasy w strefie CET (Europa)
Idź do strony Poprzedni  1, 2
Strona 2 z 2

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach


fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2002 phpBB Group
Regulamin