Jump to content

script DaVe Object Streamer include 1.0


ĐaVe

Recommended Posts

tak dneska jsem byl u kamose na serveru a mel tam jeden barak co se mu pres streamer spatne nacital tak jsem mu rekl ze mu udelam streamer... :d povedlo se uz ho ma :d

 

 

POPIS:

===============================================================================================================
=      ****        *    *          ****      *                                           ======================
=     *   *        *   *          *   *     *                                            ======================
=    *   *  ***    *  *  ***       *      ****                                           ======================
=   *   *  *  *    * *  ****        *     *     * **   ***   ***      * * *   ***   * *  ======================
=  *****   *** *   **   *            *   *     **  *  ****  *  *     ** * *  ****  ** *  ======================
=                       ***     *   *   *  *  *      *     *  * *   *  * *  *     *      ======================
=                                ***    ***  *       ***   ***   * *  * *   ***  *       ======================
===============================================================================================================
= DaVe Object Streamer = verze 1.0 = Vytvořeno: 8.3.2015 ======================================================
===============================================================================================================

  Použití includu:                                                                                           
  1) nakopírujte tento include do pawno/include                                                              
                                                                                                             
  2) Do vyšeho pawno scriptu zadejte úplně nahoru include <DOS>                                              
                                                                                                             
  3) do vašeho scriptu přiřaďte do publiců:                                                                  

        OnFilterScriptInit() / OnGameModeInit() (dle vašeho scriptu)-> Streamer_OnInit()                      
        OnPlayerConnect(playerid) -> Streamer_OnPlayerConnect(playerid)                                       
        OnPlayerDisconnect(playerid) -> Streamer_OnPlayerDisconnect(playerid)  

                              
                                                                                                             
                                                                                                             
  4) Využijeme funkce:                                                                                       

        CreateDynamicObject(modelid,Float:X,Float:Y,Float:Z,Float:rX,Float:rY,Float:rZ)                        
        DestroyDynamicObject(objectid)                                                                        
        MoveDynamicObject(objectid,Float:ToX,Float:ToY,Float:ToZ,Float:speed,Float:torx,Float:tory,Float:torz)
        StopDynamicObject(objectid)     

                                                                     
                                                                                                            
  5) upravíme definici MAX_DYNAMIC_OBJECTS v tomto includu na počet vašich vytvořených objektů               
     (aby jste je nemuseli počítat, podívejte se do server.log, include vám napíše kolik objektů vytvořil):

         #define    MAX_DYNAMIC_OBJECTS 2000 //(toto je příklad jenom)     

STREAMER TESTOVÁN NA MÓDU HARRY POTTER 

 

 

Jak na to? jednoduchý příklad tady ve spoileru

 

 

#include a_samp
#include DOS

public OnGameModeInit()
{
   Streamer_OnInit();
   CreateDynamicObject(/*sem pozice id a vse co tam patri */);
   CreateDynamicObject(/*sem pozice id a vse co tam patri */);
   return 1;  
}
                  
public OnPlayerConnect(playerid)
{
   Streamer_OnPlayerConnect(playerid);
   return 1;
}

public OnPlayerDisconnect(playerid)
{
   Streamer_OnPlayerDisconnect(playerid);
   return 1;
}                               

v tomto pripade jsme vyuzili pouze 2 objekty, tudiz otevreme potom include a upravime definici:

#define    MAX_DYNAMIC_OBJECTS 2

 

 

 

DOWNLOAD INCLUDE

PASTEBIN

post-8501-0-60942400-1425825328_thumb.jpg

Edited by ĐaVe
Link to comment
Share on other sites

sam nevim co to "hook" je :d zatim jen 4 funkce :d

        CreateDynamicObject(modelid,Float:X,Float:Y,Float:Z,Float:rX,Float:rY,Float:rZ)                        
        DestroyDynamicObject(objectid)                                                                        
        MoveDynamicObject(objectid,Float:ToX,Float:ToY,Float:ToZ,Float:speed,Float:torx,Float:tory,Float:torz)
        StopDynamicObject(objectid)    

:d jojo qwer mi to zkritizuje :d a tak aspon se poucim :d


jo jinak testoval jsem jen CreateDynamicObject :d tak kdyby neco neslo napiste :d

Link to comment
Share on other sites

jen když vidím ten mod harry potter na kterém sem dřív chvíli hrál sem si uvědomil že kdyby si to udělal v MTA šlo by to udělat lépe ale k tématu s pracemi od tebe nemam nikdy problém vesměs se mi všechno líbí jen tak dál :)

Link to comment
Share on other sites

 

 

To ešte je v móde robiť takéto nefunkčné/polofunkčné systémy ktorých je milión a kopec z toho lepších? (rečnícka otázka ^.^)

Ach jaj, tak sa do toho vrhneme... (budem používať spoiler lebo keď som použil code tak sa po prvom zmazalo všetko ostatné ^.^ gj AT)

- Knižnica ktorá potrebuje aby som niečo mal dať do gamemode je na P**U ^.^ Oh cmon guyz je rok 2015 a tu asi nikto nevie hookovať callbacky/funkcie


public OnGameModeInit()
{
SetTimer("StreamerControll",1000,true);
for(new i=0; i<MAX_PLAYERS; i++)
{
for(new o=0; o<MAX_DYNAMIC_OBJECTS; o++)
{
COE[o] = false;
}
}
#if defined ObjStreamer_OnGameModeInit
return ObjStreamer_OnGameModeInit();
#else
return 1;
#endif
}
#if defined _ALS_OnGameModeInit
#undef OnGameModeInit
#else
#define _ALS_OnGameModeInit
#endif

#define OnGameModeInit ObjStreamer_OnGameModeInit
#if defined ObjStreamer_OnGameModeInit
forward ObjStreamer_OnGameModeInit();
#endif


a už netreba dávať nič do OnGameModeInit

To isté s OnPlayerConnect


public OnPlayerConnect(plyerid)
{
for(new o=0; o<MAX_DYNAMIC_OBJECTS; o++)
{
COE[playerid][o] = false;
}
#if defined ObjStreamer_OnPlayerConnect
return ObjStreamer_OnPlayerConnect(plyerid);
#else
return 1;
#endif
}
#if defined _ALS_OnPlayerConnect
#undef OnPlayerConnect
#else
#define _ALS_OnPlayerConnect
#endif

#define OnPlayerConnect ObjStreamer_OnPlayerConnect
#if defined ObjStreamer_OnPlayerConnect
forward ObjStreamer_OnPlayerConnect(plyerid);
#endif



- Premeny majú divné pomenovanie, moc obyčajné pomenovanie čo môže byť problém ak by bol niekto (o.O) až taký odvážny alebo až taký blázon a použil to vo svojom móde a mal by premenu new Object; tak by to hádzalo errory :) npr. Streamaer_Objects

- Podmienka je blbosť, lebo ak by si vytvoril tisíci objekt (čiže by celkemvytvoreno malo hodnotu 1000) tak by si už bol mimo veľkosť pola lebo veľkosť poľa je od [0] po [999] a neexistujúcemu polu by si nastavil hodnoty


if(celkemvytvoreno > MAX_DYNAMIC_OBJECTS) { printf("ERROR: Překročená definice MAX_DYNAMIC_OBJECTS"); }



- Globálna premena "DOmsg[70];" je zbytočná o.O Využil si to iba tu


format(DOmsg,70,"Vytvářím %d. dynamický objekt",celkemvytvoreno);
printf(DOmsg);


Tam by sa dala použiť normálne lokálna premena a btw... vieš o tom že existuje printf?


printf("Vytvářím %d. dynamický objekt",celkemvytvoreno", celkemvytvoreno);
Ja som myslel, že print a printf je základ



- Si si vedomý, že novo vytvorená premena má hodnotu 0 že? Lebo keby si si toho bol vedomý tak by si vedel že toto je chujovina


stock Streamer_OnInit()
for(new i=0; i<MAX_PLAYERS; i++)
{
for(new o=0; o<MAX_DYNAMIC_OBJECTS; o++)
{
COE[o] = false;
}
}



- CreateDynamicObject nemá žiadnu návratovú hodnotu, takže sa nedá potom s objektom pohybovať/mazať

- Ou ja som zabudol DestroyDynamicObject nefunguje ^.^ Nemáš vôbec žiadnu premenu na to, že je objekt zmazaný. Zmaže sa len tým hráčom, ktorým je objekt streamovaný (čiže stačí sa vzdialiť a vrátiť a objekt tam je znovu)

- Znova DestroyDynamicObject ^.^ Ty asi nevieš čo to je testovanie že?


DestroyPlayerObject(i,CO[objectid]);
Nemá to byť náhodou
DestroyPlayerObject(i,CO[objectid]);



- A znova... čo tam tak dať podmienku že má hráč ten objekt vytvorený (streamovany)?

- Je pekné že máš rád MoveObject ~ MoveDynamicObject Ale prečo nastavuješ 1000x pozíciu objektu?


stock MoveDynamicObject(objectid,Float:ToX,Float:ToY,Float:ToZ,Float:speed,Float:torx,Float:tory,Float:torz)
{
for(new i=0; i<MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) && COE[objectid] == true)
{
MovePlayerObject(objectid,CO[objectid],ToX,ToY,ToZ,speed,torx,tory,torz);
}
Object[objectid][sTREAMER_x] = ToX;
Object[objectid][sTREAMER_y] = ToY;
Object[objectid][sTREAMER_z] = ToZ;
Object[objectid][sTREAMER_Rx] = torx;
Object[objectid][sTREAMER_Ry] = tory;
Object[objectid][sTREAMER_Rz] = torz;
}
}



- StopDynamicObject je iná káva ^.^ Prečo tam je tá premena pocet? Je v cykle takže môže mať hodnotu iba 0 alebo 1. Aha no jasne, povedal si si že nastavovať pozíciu objektu 1000x je moc mainstream tak to urobíš iba toľko krát, koľko ľuďom je ten objekt streamovaný :d i get it [ale čo ak ten objekt nie je nikomu nestramovaný, tak sa nestopne a neprenastavia sa hodnoty pre streamovanie?]


stock StopDynamicObject(objectid)
{
for(new i=0; i<MAX_PLAYERS; i++)
{
new Float:ToX, Float:ToY, Float:ToZ, Float:torx, Float:tory, Float:torz, pocet = 0;
if(IsPlayerConnected(i) && COE[objectid] == true)
{
StopPlayerObject(objectid,CO[objectid]);
GetPlayerObjectPos(i,CO[objectid],ToX,ToY,ToZ);
pocet++;
}
if(pocet != 0) { Object[objectid][sTREAMER_x] = ToX; Object[objectid][sTREAMER_y] = ToY; Object[objectid][sTREAMER_z] = ToZ; Object[objectid][RSTREAMER_x] = torx; Object[objectid][sTREAMER_Ry] = tory; Object[objectid][sTREAMER_Rz] = torz; }
}
}



- Streamer_OnPlayerDisconnect(playerid) Chýba podmienka či je objekt streamovany (vytvorený)

- A čerešnička na torte .... StreamerControll()
Je to úplne zle. Čo to je za logiku? Jaj, to nemá logiku


for(new i=0; i<MAX_PLAYERS; i++)
{
for(new o=0; o<MAX_DYNAMIC_OBJECTS; o++)
{
if(IsPlayerConnected(i))
{


Najskôr precyklíme 1000 hráčov ale to nestačí horste! My to totiž môžeme cykliť 1000*MAX_DYNAMIC_OBJECTS aby sme prišli na to, že hráč nie je na servery (bola by to prdel to niekomu dať na server a MAX_DYNAMIC_OBJECTS nastaviť na hodnotu .... 25 000)

- Namiesto IsPlayerInRangeOfPos by si mal urobiť nejaké zóny bolo by to omnoho efektívnejšie

- Kašlite na amatérske object streamery a použite nejaký ktorý je osvedčený :)

EDIT ^.^ a to týpek nad týmto potom napísal že nemá žiadny problém... oh my god
EDIT2 Ale chápem, je to pekné (*pekne vtipné) keď ti napíšu že to je super, síce ani nevedia čo to je, nevedia že je to takmer nefunkčné ale čo, koment treba a samozrejme karma+ musí byť...

 

 

:d nj co si budem nalhavat :) mas pravdu :d asi bych to rovnou smazal :d lepsi vyuzit Incognito Object Streamer :) ten je osvedceny :d ale aspon jsem se zasmal jak jsi to popisoval :d


pripadne jak se mi bude chtit a jak budu mit cas to upravim dle tvyho navodu, diky

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