Advertisement
dann1s

Voćar

Sep 19th, 2019
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 10.86 KB | None | 0 0
  1. //Vocar
  2. new OtresiObject[ MAX_PLAYERS ][ 8 ],
  3.     Otresa[ MAX_PLAYERS ];
  4. new
  5.     Float: Tree_Locations[][3] = {
  6.         {438.3275,1989.6617,499.4821},
  7.         {527.9407,1977.3473,499.8702},
  8.         {561.1748,1911.6949,502.5813},
  9.         {357.8484,2000.7568,499.8065},
  10.         {370.6405,1950.2618,500.7239},
  11.         {266.7906,2010.5984,498.8223}
  12.     };
  13. enum    tree_status_enum
  14. {
  15.     bool:t_Posadjen,
  16.     t_Posadio[ MAX_PLAYER_NAME ],
  17.     t_Tip,
  18.     t_Objekat,
  19.     t_RastTimer,
  20.     Text3D:t_Label,
  21.     t_Faza
  22. }
  23. new Tree_Status[sizeof(Tree_Locations)][tree_status_enum];
  24.  
  25.  
  26. //onplayerdeath && onplayerdisconnect && onplayerconnect
  27. Otresa[ playerid ] = 0;
  28.  
  29. //ongamemodeinit
  30. for( new i; i < sizeof( Tree_Locations ); i++ ) {
  31.     Tree_Status[ i ][ t_Label ] = CreateDynamic3DTextLabel(":: Sadnica ::\n\nPlod nije postavljen\n{ffffff}/staviplod", 0xFFAF00AA, Tree_Locations[ i ][ 0 ], Tree_Locations[ i ][ 1 ], Tree_Locations[ i ][ 2 ] + 1.35, 10.0, _, _, _, 0, 0);
  32.     Tree_Status[ i ][ t_Objekat ] = YUB_CreateDynamicObject(2203, Tree_Locations[ i ][ 0 ], Tree_Locations[ i ][ 1 ], Tree_Locations[ i ][ 2 ], 0.0, 0.0, 180.0, 0, 0);
  33.     Tree_Status[ i ][ t_Posadjen ] = false;
  34.     Tree_Status[ i ][ t_RastTimer ] = -1;
  35.     Tree_Status[ i ][ t_Faza ] = 0;
  36. }
  37.  
  38. //Funkcije
  39. Vocar_BrojVocki( playerid ) {
  40.     new id = 0;
  41.     for( new b = 0; b < sizeof( Tree_Locations ); b++) {
  42.         if(strfind(GetPlayerNameEx(playerid),Tree_Status[ b ][ t_Posadio ],true)!=-1) id++;
  43.     }
  44.     return id;
  45. }
  46. Vocar_VlasnikVocke( playerid, vockaid ) {
  47.     if(strfind(GetPlayerNameEx(playerid),Tree_Status[ vockaid ][ t_Posadio ],true)!=-1) return true;
  48.     return false;
  49. }
  50. Vocar_NajblizeDrvo( playerid ) {
  51.     new Float:p_Pos[ 3 ], Float:maxradius = 5.0, id = -1;
  52.     GetPlayerPos(playerid, p_Pos[ 0 ], p_Pos[ 1 ], p_Pos[ 2 ] );
  53.     for( new b = 0; b < sizeof( Tree_Locations ); b++) {
  54.         if( VectorSize( p_Pos[ 0 ]-Tree_Locations[ i ][ 0 ], p_Pos[ 1 ]-Tree_Locations[ i ][ 1 ], p_Pos[ 2 ]-Tree_Locations[ i ][ 2 ] ) >= maxradius ) continue;
  55.         id = b;
  56.         maxradius = VectorSize( p_Pos[ 0 ]-Tree_Locations[ i ][ 0 ], p_Pos[ 1 ]-Tree_Locations[ i ][ 1 ], p_Pos[ 2 ]-Tree_Locations[ i ][ 2 ] );
  57.     }
  58.     return id;
  59. }
  60. forward Vocar_RastVocke( playerid, id );
  61. public Vocar_RastVocke( playerid, id ) {
  62.     if(!IsPlayerConnected(playerid)) {
  63.         Unisti_Vocku( id );
  64.         return 1;
  65.     }
  66.     new label_string[ 165 ];
  67.     Tree_Status[ id ][ t_RastTimer ] = -1;
  68.     Tree_Status[ id ][ t_Faza ] = 2;
  69.     SendClientMessage( playerid, 0xBFBFBFAA, "{FFFFFF}[YUB]: {FFAF00}Neka od vasih vocki je spremna za otresti.");
  70.     format(label_string, sizeof(label_string), ":: Vocka ::\n\nPlod je izrastao.\nPostavio: {ffffff}%s\n\n{F81414}Komanda: {ffffff}/otresanje", Tree_Status[ id ][ t_Posadio ]);
  71.     UpdateDynamic3DTextLabelText(Tree_Status[ id ][ t_Label ], 0xFFAF00AA, label_string);
  72.     return 1;
  73. }
  74.  
  75. //Komande:
  76. CMD:staviplod(playerid, params[])
  77. {
  78.     //provjere da li igrac ima sjemenki, koji ce tip itd
  79.     new id = Vocar_NajblizeDrvo( playerid ), Float:Z_Kord, label_string[ 222 ];
  80.     if( id == -1 ) return SendClientMessage( playerid, 0xBFBFBFAA, "Niste u blizini mjesta za stavljanje ploda.");
  81.     if( Tree_Status[ id ][ t_Posadjen ] ) return SendClientMessage( playerid, 0xBFBFBFAA, "Ovdje je vec postavljen plod, pronadjite drugo mjesto.");
  82.     if( Vocar_BrojVocki( playerid ) >= 3 ) return SendClientMessage( playerid, 0xBFBFBFAA, "Vec ste posadili maksimalan broj vocki po osobi (tri).");
  83.     Tree_Status[ id ][ t_Posadjen ] = true;
  84.     Tree_Status[ id ][ t_Faza ] = 1;
  85.     CA_FindZ_For2DCoord( Tree_Locations[ id ][ 0 ], Tree_Locations[ 1 ][ 0 ], Z_Kord );
  86.     if(IsValidDynamicObject(Tree_Status[ id ][ t_Objekat ])) DestroyDynamicObject(Tree_Status[ id ][ t_Objekat ]);
  87.     Tree_Status[ id ][ t_Objekat ] = YUB_CreateDynamicObject(673, Tree_Locations[ id ][ 0 ], Tree_Locations[ id ][ 1 ], Z_Kord - 15.0, 0.0, 0.0, 180.0, 0, 0);
  88.     new timertime = MoveDynamicObject(Tree_Status[ id ][ t_Objekat ], Tree_Locations[ id ][ 0 ], Tree_Locations[ id ][ 1 ], Z_Kord, 0.01);
  89.     Tree_Status[ id ][ t_RastTimer ] = SetTimerEx("Vocar_RastVocke", timertime, false, "ii", playerid, id);
  90.     format(label_string, sizeof(label_string), ":: Vocka ::\n\nPlod je postavljen.\nPostavio: {ffffff}%s\n\n{F81414}Pricekajte da izraste\nkako bi otresli vocku.", GetPlayerNameEx(playerid));
  91.     UpdateDynamic3DTextLabelText(Tree_Status[ id ][ t_Label ], 0xFFAF00AA, label_string);
  92.     strmid(Tree_Status[ id ][ t_Posadio ], GetPlayerNameEx(playerid), 0, strlen(GetPlayerNameEx(playerid)), 30 );
  93.     SendClientMessage( playerid, 0xBFBFBFAA, "{FFFFFF}[YUB]: {00C0FF}Plod postavljen, {FFAF00}biti cete obavjesteni kada vocka bude spremna za otresti{00C0FF}.");
  94.     return 1;
  95. }
  96. CMD:otresanje(playerid, params[])
  97. {
  98.     new id = Vocar_NajblizeDrvo( playerid ), Float:Z_Kord, label_string[ 200 ];
  99.     if( id == -1 ) return SendClientMessage( playerid, 0xBFBFBFAA, "Niste u blizini vocke.");
  100.     if( !Tree_Status[ id ][ t_Posadjen ] ) return SendClientMessage( playerid, 0xBFBFBFAA, "Niste u blizini vocke.");
  101.     if( Tree_Status[ id ][ t_Faza ] != 2 ) return SendClientMessage( playerid, 0xBFBFBFAA, "Ova vocka nije spremna za otresanje.");
  102.     if( !Vocar_VlasnikVocke( playerid, id ) ) return SendClientMessage( playerid, 0xBFBFBFAA, "Ovo nije vasa vocka.");
  103.     Tree_Status[ id ][ t_Posadjen ] = true;
  104.     Tree_Status[ id ][ t_Faza ] = 3;
  105.     Otresa[ playerid ] = 1;
  106.     Otresanje( playerid, id, Tree_Status[ id ][ t_Tip ] );
  107.     SetCameraBehindPlayer( playerid );
  108.     format(label_string, sizeof(label_string), ":: Vocka ::\n\n{F81414}Plod je otresen.\n{FFAF00}Postavio: {ffffff}%s", Tree_Status[ id ][ t_Posadio ]);
  109.     UpdateDynamic3DTextLabelText(Tree_Status[ id ][ t_Label ], 0xFFAF00AA, label_string);
  110.     SendClientMessage( playerid, 0xBFBFBFAA, "{FFFFFF}[YUB]: {00C0FF}Vocka otresena, {FFAF00}pricekajte pad plodova{00C0FF}.");
  111.     SendClientMessage( playerid, 0xBFBFBFAA, "{FFFFFF}((Pomaknite svog karaktera kako bi vidjeli animaciju padanja vocki))");
  112.     return 1;
  113. }
  114.  
  115. forward Otresanje( playerid, id, tip );
  116. public Otresanje( playerid, id, tip ) {
  117.  //
  118.     new modelid;
  119.     switch(tip) {
  120.         default: modelid = 19578;
  121.     }
  122.     //
  123.     new Float:x, Float:y, Float:z, Float:HeightZ, Float:Px, Float:Py, Float: Pa;
  124.     GetDynamicObjectPos(Tree_Status[ id ][ t_Objekat ], x, y, z);
  125.     CA_FindZ_For2DCoord( x, y, HeightZ );
  126.     //
  127.     GetPlayerPos(playerid, Px, Py, Pa);
  128.     Pa = floatabs(atan((y-Py)/(x-Px)));
  129.     if (x <= Px && y >= Py) Pa = floatsub(180, Pa);
  130.     else if (x < Px && y < Py) Pa = floatadd(Pa, 180);
  131.     else if (x >= Px && y <= Py) Pa = floatsub(360.0, Pa);
  132.     Pa = floatsub(Pa, 90.0);
  133.     if (Pa >= 360.0) Pa = floatsub(Pa, 360.0);
  134.     SetPlayerFacingAngle(playerid, Pa);
  135.     //
  136.     OtresiObject[ playerid ][ 0 ] = CreateDynamicObject(modelid, x, y+0.5, z+10, 0, 0, 0);
  137.     OtresiObject[ playerid ][ 1 ] = CreateDynamicObject(modelid, x, y+1.5, z+10, 0, 0, 0);
  138.     OtresiObject[ playerid ][ 2 ] = CreateDynamicObject(modelid, x, y-0.5, z+10, 0, 0, 0);
  139.     OtresiObject[ playerid ][ 3 ] = CreateDynamicObject(modelid, x, y-1.5, z+10, 0, 0, 0);
  140.     OtresiObject[ playerid ][ 4 ] = CreateDynamicObject(modelid, x+0.5, y, z+10, 0, 0, 0);
  141.     OtresiObject[ playerid ][ 5 ] = CreateDynamicObject(modelid, x+1.5, y, z+10, 0, 0, 0);
  142.     OtresiObject[ playerid ][ 6 ] = CreateDynamicObject(modelid, x-0.5, y, z+10, 0, 0, 0);
  143.     OtresiObject[ playerid ][ 7 ] = CreateDynamicObject(modelid, x-1.5, y, z+10, 0, 0, 0);
  144.     //
  145.     SetTimerEx("Animacija_Tip", 200, false, "ii", playerid, 2);
  146.     //
  147.     for(new i; i < 8; i++) {
  148.         GetDynamicObjectPos( OtresiObject[ playerid ][ i ], x, y, z );
  149.         CA_FindZ_For2DCoord( x, y, HeightZ );
  150.         MoveDynamicObject(OtresiObject[ playerid ][ i ], x, y, HeightZ, 1.1+(i*0.05));
  151.     }
  152.     //
  153.     SetTimerEx("Otreseno", 1000, false, "ii", playerid, id);
  154.     Streamer_Update( playerid );
  155.     return 1;
  156. }
  157. forward Otreseno( playerid, vocka );
  158. public Otreseno( playerid, vocka ) {
  159.     //
  160.     if(Otresa[ playerid ] == 0) {
  161.         for(new i; i < 8; i++) {
  162.             if(IsValidDynamicObject(OtresiObject[ playerid ][ i ])) DestroyDynamicObject( OtresiObject[ playerid ][ i ] );
  163.         }
  164.         Unisti_Vocku( vocka );
  165.         return 1;
  166.     }
  167.     //
  168.     new Float:x, Float:y, Float:z, Float:HeightZ;
  169.     for(new i; i < 8; i++) {
  170.         GetDynamicObjectPos( OtresiObject[ playerid ][ i ], x, y, z );
  171.         CA_FindZ_For2DCoord( x, y, HeightZ );
  172.         if( z != HeightZ ) return SetTimerEx("Otreseno", 1000, false, "ii", playerid, vocka);
  173.     }
  174.     //
  175.     SendClientMessage( playerid, 0xBFBFBFAA, "{FFFFFF}[YUB]: {00C0FF}Voce otreseno, {FFAF00}pricekajte proces sabiranja{00C0FF}.");
  176.     SetCameraBehindPlayer( playerid );
  177.     SetTimerEx("Animacija_Tip", 200, false, "ii", playerid, 1);
  178.     SetTimerEx("GotovPostupak", 6000, false, "ii", playerid, vocka);
  179.     Streamer_Update( playerid );
  180.     return 1;
  181. }
  182. forward Animacija_Tip( playerid, tip );
  183. public Animacija_Tip( playerid, tip ) {
  184.     if(tip == 1) ApplyAnimation(playerid,"BOMBER","BOM_Plant_Loop", 4.1, 1, 0, 0, 1, 0, 1);
  185.     else if(tip == 2) {
  186.         ApplyAnimation(playerid,"FIGHT_E","FightKick_B", 4.1, 0, 0, 0, 1, 0, 1);
  187.         SetTimerEx("OcistiAnimacije", 1111, false, "i", playerid);
  188.         Streamer_Update( playerid );
  189.     }
  190.     else if(tip == 3) {
  191.         ApplyAnimation(playerid,"CARRY","putdwn05", 4.1, 0, 0, 0, 0, 0, 1);
  192.         SetTimerEx("OcistiAnimacije", 1000, false, "i", playerid);
  193.     }
  194.     return 1;
  195. }
  196. forward GotovPostupak( playerid, vocka );
  197. public GotovPostupak( playerid, vocka ) {
  198.     if(Otresa[ playerid ] == 0) {
  199.         for(new i; i < 8; i++) {
  200.             if(IsValidDynamicObject(OtresiObject[ playerid ][ i ])) DestroyDynamicObject( OtresiObject[ playerid ][ i ] );
  201.             Unisti_Vocku( vocka );
  202.         }
  203.         return 1;
  204.     }
  205.     for(new i; i < 8; i++) {
  206.         if(IsValidDynamicObject(OtresiObject[ playerid ][ i ])) DestroyDynamicObject( OtresiObject[ playerid ][ i ] );
  207.     }
  208.     //gotovo ovdje mu se daje voce itd
  209.     new kolicina = 5+random(16), string[ 112 ];
  210.     format( string, sizeof( string ), "{FFFFFF}[YUB]: {00C0FF}Uspjesno ste pokupili {FFAF00}%d kilograma {00C0FF}banane.", kolicina);
  211.     SendClientMessage( playerid, 0xBFBFBFAA, string);
  212.     Streamer_Update( playerid );
  213.     ClearAnimations( playerid );
  214.     Otresa[ playerid ] = 0;
  215.     SetTimerEx("Unisti_Vocku", 6000, false, "i", vocka);
  216.     UpdateDynamic3DTextLabelText(Tree_Status[ vocka ][ t_Label ], 0xFFAF00AA, ":: Vocka ::\n\n{f81414}Plod je otresen\ni u fazi raspada.");
  217.     return 1;
  218. }
  219.  
  220. forward Unisti_Vocku( id );
  221. public Unisti_Vocku( id ) {
  222.     if(IsValidDynamicObject(Tree_Status[ id ][ t_Objekat ])) DestroyDynamicObject(Tree_Status[ id ][ t_Objekat ]);
  223.     UpdateDynamic3DTextLabelText(Tree_Status[ id ][ t_Label ], 0xFFAF00AA, ":: Sadnica ::\n\nPlod nije postavljen\n{ffffff}/staviplod");
  224.     Tree_Status[ id ][ t_Objekat ] = YUB_CreateDynamicObject(2203, Tree_Locations[ i ][ 0 ], Tree_Locations[ i ][ 1 ], Tree_Locations[ i ][ 2 ], 0.0, 0.0, 180.0, 0, 0);
  225.     Tree_Status[ id ][ t_Posadjen ] = false;
  226.     Tree_Status[ id ][ t_Faza ] = 0;
  227.     return 1;
  228. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement