Jump to content

Dynamický Ohňostroj [Jednoduchý]


Recommended Posts

Tak nebudu to nijak okecávat, jen že po zadání příkazu vyletí random objekt a v random výšce vybuchne a rozdělí se na random dalších světélek která poletí na do random směru random daleko ;).

new vybuch[] = {354, 3526}; // id objektů ketré se vytvoří po výbuchu rakety a poletí od epicentra
new odpal[] = {345}; // toto je samotná raketa která bude vylétavat, můžete za to dát ještě 354(světlice)
new objekt; // raketa
new FW[100]; // další pole, naplní se objekty, které se vytvoří při výbuchu rakety
new Float:fw_X, Float:fw_Y, Float:fw_Z, Float:ftw_ZTR, Float:ftw_YTR, Float:ftw_XTR, Float:fX, Float:fY, Float:fZ; //pár souřadnic, brzy zjistíte k čemu
new objcts;
new stop;
new bool:fws; // booleanská proměnná nám zajistí abychom ohnostroj neodpálili 2x nebo vícekrát 

 

Tak to by byly všechny newsky, jdem na publicy

OnGameModeInit

fws=true; // true hodnota znamená že je ohnostroj povolen

 

OnPlayerCommandText(playerid, cmdtext[])

if(strcmp(cmdtext, "/pozice", true) == 0){
    GetPlayerPos(playerid, fw_X, fw_Y, fw_Z); //uloží naší pozici
    ApplyAnimation(playerid,"BOMBER","BOM_Plant",4.1,0,1,1,1,1); // pro lepší efekt
    SetTimerEx("odmrz",2000,false,"i",playerid); // pouze odbugne hráče 
    return 1;
 	}
if(strcmp(cmdtext, "/fw", true) == 0){ // obyčejný strcmp command
	if(fws == true){ // pokud ohnostroj je připraven
    	SetTimerEx("vystrel",2000,false,"i",true); //spustí se public výstřel za 2s nebo lze udělat jen vystrel();
    	stop = 0; // ohnostroj už není zastaven
    	fws = false; // ohnostroj je odpálen
    	return 1;
    }else{
    	return SendClientMessage(playerid, 0x000000FF, "Firework 1 je už spuštěn.");}
 	}
if(strcmp(cmdtext, "/stop", true) == 0){
    stop = 1; // ohnostroj zastaven
    fws = true; //nastaví že lze ohnostroj opět spustit
    return 1;
 	}

 

Tak to jsou jen takové maličkosti, i když důležité. Teď přejdeme na to hlavní... Vezmu to jednim kodem

forward vybuchr(); //public s výbuchem
forward vystrel(); // public který zajistí výlet rakety
forward odmrz(playerid); // odbugne animaci, lze udělat i jinak ale je to fuk...

public odmrz(playerid){
   ApplyAnimation(playerid,"BSKTBALL","BBALL_walk_start_O",4.1,0,1,1,1,1); // všem jasné - animace zapalování rakety
  return 1;
}

public vybuchr(){
   CreateExplosion(ftw_XTR, ftw_YTR, ftw_ZTR, 11, 1); // malá neškodná exploze
   DestroyObject(objekt); // zničíme raketu
  for(new i = objcts; i<20+random(10); i++){ // 20 jak daleko poletí světlice + random(10)
      new rnd = random(sizeof(vybuch)); // jestli se vytvoří červené světélko nebo bílé :-)
       FW[i] = CreateObject(vybuch[rnd],ftw_XTR, ftw_YTR, ftw_ZTR, 0, 0, 0); // vytvoří se rnd světélko na souřadnicích výbuchu
     fX = ftw_XTR+random(40)-random(40); // kam poletí může letět jakýmkoli směrem
     fY = ftw_YTR+random(40)-random(40); // -||-
     fZ = ftw_ZTR+20+random(30)-random(30); // výšku lehce omezíme
       MoveObject(FW[i],fX, fY, fZ, 10); // samotný pohyb světélka
    }
    SetTimerEx("vystrel",2000,false,"i",true); // tímto vytvoříme cyklus, bude se odpalovat raketa po raketě, doporučuji čas neměnit
  return 1;
}

public vystrel(){
   for(new i = 0; i      DestroyObject(FW[i]);
    }
    if(stop == 0){ // pokud beží
  new rnd = random(sizeof(odpal)); //další random vybere z pole odpal
  objekt = CreateObject(odpal[rnd], fw_X, fw_Y, fw_Z, 90,0,0); // vytvoříme raketu
  ftw_ZTR = fw_Z+20+random(10)-random(10); // aby nelétala pořád na stejné místo
  ftw_XTR = fw_X+random(10)-random(10); // -||-
  ftw_YTR = fw_Y+random(10)-random(10); // -||-
  MoveObject(objekt, ftw_XTR, ftw_YTR, ftw_ZTR, 10);// a raketa letí...
  objcts = 1;
  SetTimerEx("vybuchr",2000,false,"i",true);} // takovou dobu to asi poletí
  return 1;
}

Nezaručuji, že to bude fungovat vytáhl jsem to ze SVÉHO scriptu trochu pozměnil proměnné, ale je to bez erorrů a warningů snad...

Myslím že je to vážně jednoduché, pokud jich chcete víc stačí proměnné změnit na pole apod... ;) nedalo to ani moc práce, jelikož je to opravdu dost dynamický ohnostroj, takže se všechny souřadnice počítají "samy"...

Link to comment
Share on other sites

  • 9 months later...

Dal jsem to jako FS na server a běží :);)

 

-- dnes, 23:33 --

 

OnPlayerCommandText(blabla)

ten cervenej text bych upravil ;)

Upraveno... a chci taky oživit topic, třeba se to bude někomu v přednovoročním období hodit...

Link to comment
Share on other sites

  • 1 month later...
  • 7 months later...
  • Globální moderátor

cau sry za starý topic ale píšeš že se da udělat více ohnostroju ale kdyz jsem si udelal 4 -jede ale kdyz spustim vsechny 4 tak jede jen posledni zpustenej predchozi jen bouchnou a mozna tam jsou znamky svetlic ale vubec se nerozleti a pak se prestanou mazat a zustavaji na obloze z toho posledniho

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...