Advertisement
Guest User

[INC] Kreditni sustav 1.0 BETA

a guest
Jul 29th, 2013
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 11.18 KB | None | 0 0
  1. #if defined _kredit_included
  2.     #endinput
  3. #endif
  4. #define _kredit_included
  5.  
  6. #if !defined _samp_included
  7.     #error "Prvo include-aj a_samp.inc - tek onda include-aj kredit.inc"
  8. #endif
  9.  
  10. #tryinclude "YSI\y_ini"
  11. #tryinclude "YSI\y_hooks"
  12.  
  13. #define ENUMERATOR                     enum
  14. #define __VERZIJA                      ("Beta 1.0")
  15. #define INC_PREFIKS(::)                SL@Y_KREDITI_ // Ovo je prefiks koji se koristi samo kako bi vas osigurao o mogućim konfliktima imena naredbi i sl.
  16. #define KREDITIRANJE                   ("Krediti/%s.ini") // Ne zaboravite kreirati u scriptfiles folderu novi folder pod imenom 'Krediti' u protivnom će vam crashati server
  17. #define MAXIMALNO_KREDITA              (2) // Ovo morate paziti kako bi održali ekonomiju svog servera čitavom, savjet je najviše 3 kredita po igraču
  18. #define PREPORUCENA_KAMATNA_STOPA      (8.6) // Moj savjet je da koristite između 5.0 i 10.0 u protivnom će igrač imati veliku kamatu
  19.  
  20. ENUMERATOR _@KREDIT@_
  21. {
  22.     bool:_KREDIT[MAXIMALNO_KREDITA], // Lista mjesta kredita kojeg je igrač podignuo
  23.     _GLAVNICA[MAXIMALNO_KREDITA], // Lista glavnica posuđenog novca
  24.     Float:_KAMATNA_STOPA[MAXIMALNO_KREDITA], // Lista kamatne stope svakog podignutog kredita
  25.     _VRACENO[MAXIMALNO_KREDITA], // Lista vračenog novca za svaki podignuti kredit
  26.     _RATA[MAXIMALNO_KREDITA], // Iznos svakog 'računa' za svaki podignuti kredit
  27.     _PERIOD[MAXIMALNO_KREDITA] // Period za svaki dignuti kredit za koje će mu doći naplata
  28. };
  29.  
  30. new
  31.    __KREDIT[MAX_PLAYERS][_@KREDIT@_];
  32.    
  33.  
  34. // Napomena: Neke varijable imaju dodane vrijednosti, primjer: _PERIOD ili __KREDIT, ova povlaka nije bzvz to je također kako bi vas sačuvao od mogućih konflikata sa ostalim skriptama...
  35.  
  36. stock rataKredita(const glavnica, const Float:kamatna_stopa, const period)
  37. {
  38.     new
  39.        Float:rata = (0), Float:kamata = (0);
  40.     kamata = (glavnica*period)*(kamatna_stopa/100);
  41.     rata = ((glavnica+kamata)/period);
  42.     return floatround(rata);
  43. }
  44.  
  45. stock podignutihKredita(playerid)
  46. {
  47.     new
  48.         iterator = (0), brojac = (0);
  49.     while(iterator < MAXIMALNO_KREDITA)
  50.     {
  51.         if(__KREDIT[playerid][_KREDIT][iterator] == true) ++ brojac;
  52.         ++ iterator;
  53.     }
  54.     return (brojac);
  55. }
  56.  
  57. stock podigniKredit(playerid, const glavnica, const Float:kamatna_stopa = PREPORUCENA_KAMATNA_STOPA, const period)
  58. {
  59.     if(glavnica <= 0 || kamatna_stopa <= 0 || kamatna_stopa > 20.0 || period <= 2) return \
  60.                                                                                         print("#GRESKA ID:1! KREDIT NIJE VALJAN!");
  61.     new
  62.        ITERATOR_KREDITA = (0), ID_KREDITA = (-1), IME_IGRACA[MAX_PLAYER_NAME] = "\0", Float:kamata = (glavnica*period)*(kamatna_stopa/100);
  63.     GetPlayerName(playerid, IME_IGRACA, MAX_PLAYER_NAME);
  64.     while(ITERATOR_KREDITA < MAXIMALNO_KREDITA)
  65.     {
  66.         if(__KREDIT[playerid][_KREDIT][ITERATOR_KREDITA] == false)
  67.         {
  68.             ID_KREDITA = (ITERATOR_KREDITA);
  69.             break;
  70.         }
  71.         ++ ITERATOR_KREDITA;
  72.     }
  73.     if(ID_KREDITA == -1) return \
  74.                               printf("#GRESKA ID:2! IGRAC %s NE MOZE DOBITI KREDIT JER IH VEC IMA %d.", IME_IGRACA, MAXIMALNO_KREDITA);
  75.        
  76.     // IGRAC SMIJE DOBITI KREDIT
  77.     __KREDIT[playerid][_KREDIT][ID_KREDITA] = (true);
  78.     __KREDIT[playerid][_GLAVNICA][ID_KREDITA] = (glavnica);
  79.     __KREDIT[playerid][_KAMATNA_STOPA][ID_KREDITA] = (kamatna_stopa);
  80.     __KREDIT[playerid][_VRACENO][ID_KREDITA] = (0);
  81.     __KREDIT[playerid][_RATA][ID_KREDITA] = rataKredita(glavnica, kamatna_stopa, period);
  82.     __KREDIT[playerid][_PERIOD][ID_KREDITA] = (period);
  83.     GivePlayerMoney(playerid, glavnica);
  84.     // IGRAC JE PODIGNUO KREDIT
  85.     print("[========================[ NOVOSTI IZ BANKE ]========================]");
  86.     printf("#IGRAC %s je podignuo kredit u iznosu od $%d.", IME_IGRACA, glavnica);
  87.     printf("Igrac sada trenutno ima %d dignutih kredita.", podignutihKredita(playerid));
  88.     printf("Igrac ce kredit otplatiti za %d payday-a", period);
  89.     printf("Rata po svakom payday-u ovog kredita kostat ce ga $%d.", rataKredita(glavnica, kamatna_stopa, period));
  90.     printf("Kamata ovog kredita ce ga kostati dodatnih $%d.", floatround(kamata));
  91.     printf("ZAKLJUCNO: Igrac je posudio $%d, a ukupno ce vratiti $%d (kamata uracunata).", glavnica, floatround((glavnica+kamata)));
  92.     print("[====================================================================]");
  93.     INC_PREFIKS(::)updateKredit(playerid);
  94.     return (false);
  95. }
  96.  
  97. stock dajRacun(playerid)
  98. {
  99.     new
  100.         iterator = (0), racun = (0), Float:provjera = (0.000), IME_IGRACA[MAX_PLAYER_NAME] = "\0";
  101.     GetPlayerName(playerid, IME_IGRACA, MAX_PLAYER_NAME);
  102.  
  103.     // PRIKUPLJANJE UKUPNE SUME RACUNA ZA KREDITE!
  104.     while(iterator < MAXIMALNO_KREDITA)
  105.     {
  106.         if(__KREDIT[playerid][_KREDIT][iterator] == true)
  107.         {
  108.              __KREDIT[playerid][_VRACENO][iterator] += (__KREDIT[playerid][_RATA][iterator]);
  109.              racun += (__KREDIT[playerid][_RATA][iterator]);
  110.         }
  111.         ++ iterator;
  112.     }
  113.    
  114.     // NAPLATA RACUNA ZA KREDIT
  115.     GivePlayerMoney(playerid, - racun);
  116.    
  117.     // ISKLJUCIVANJE KREDITA AKO JE NEKI UPRAVO OTPLATIO
  118.     iterator = (0);
  119.     while(iterator < MAXIMALNO_KREDITA)
  120.     {
  121.         provjera = (__KREDIT[playerid][_GLAVNICA][iterator]+(__KREDIT[playerid][_GLAVNICA][iterator]*__KREDIT[playerid][_PERIOD][iterator])*(__KREDIT[playerid][_KAMATNA_STOPA][iterator]/100));
  122.         if(__KREDIT[playerid][_KREDIT][iterator] == true && __KREDIT[playerid][_VRACENO][iterator] >= provjera)
  123.         {
  124.             __KREDIT[playerid][_KREDIT][iterator] = (false);
  125.             __KREDIT[playerid][_GLAVNICA][iterator] = (0);
  126.             __KREDIT[playerid][_KAMATNA_STOPA][iterator] = (0.0000);
  127.             __KREDIT[playerid][_VRACENO][iterator] = (0);
  128.             __KREDIT[playerid][_RATA][iterator] = (0);
  129.             __KREDIT[playerid][_PERIOD][iterator] = (0);
  130.             print("[========================[ NOVOSTI IZ BANKE ]========================]");
  131.             printf("#IGRAC %s je upravo otplatio kredit kojeg je digao prije %d payday-a", IME_IGRACA, __KREDIT[playerid][_PERIOD][iterator]);
  132.             print("[====================================================================]");
  133.         }
  134.         provjera = (0.000);
  135.         ++ iterator;
  136.     }
  137.     INC_PREFIKS(::)updateKredit(playerid);
  138. }
  139.  
  140. stock INC_PREFIKS(::)updateKredit(playerid)
  141. {
  142.     new
  143.        Data[64] = "\0", IME_IGRACA[MAX_PLAYER_NAME] = "\0";
  144.     GetPlayerName(playerid, IME_IGRACA, MAX_PLAYER_NAME);
  145.     format(Data, (sizeof Data), KREDITIRANJE, IME_IGRACA);
  146.     if(fexist(Data))
  147.     {
  148.         new INI:KREDIT_ = INI_Open(Data);
  149.         for(new DIGNUTIH_KREDITA = (0), string[MAX_PLAYER_NAME+5] = "\0"; DIGNUTIH_KREDITA < MAXIMALNO_KREDITA; ++ DIGNUTIH_KREDITA)
  150.         {
  151.             format(string, (sizeof string), "DIGNUTI_KREDIT_%d", DIGNUTIH_KREDITA+1);
  152.             INI_WriteBool(KREDIT_, string, __KREDIT[playerid][_KREDIT][DIGNUTIH_KREDITA]);
  153.  
  154.             format(string, (sizeof string), "GLAVNICA_KREDITA_%d", DIGNUTIH_KREDITA+1);
  155.             INI_WriteInt(KREDIT_, string, __KREDIT[playerid][_GLAVNICA][DIGNUTIH_KREDITA]);
  156.  
  157.             format(string, (sizeof string), "KAMATNA_STOPA_KREDITA_%d", DIGNUTIH_KREDITA+1);
  158.             INI_WriteFloat(KREDIT_, string, __KREDIT[playerid][_KAMATNA_STOPA][DIGNUTIH_KREDITA]);
  159.  
  160.             format(string, (sizeof string), "VRACENO_KREDITA_%d", DIGNUTIH_KREDITA+1);
  161.             INI_WriteInt(KREDIT_, string, __KREDIT[playerid][_VRACENO][DIGNUTIH_KREDITA]);
  162.  
  163.             format(string, (sizeof string), "RATA_KREDITA_%d", DIGNUTIH_KREDITA+1);
  164.             INI_WriteInt(KREDIT_, string, __KREDIT[playerid][_RATA][DIGNUTIH_KREDITA]);
  165.  
  166.             format(string, (sizeof string), "PERIOD_KREDITA_%d", DIGNUTIH_KREDITA+1);
  167.             INI_WriteInt(KREDIT_, string, __KREDIT[playerid][_PERIOD][DIGNUTIH_KREDITA]);
  168.         }
  169.         INI_Close(KREDIT_);
  170.     }
  171. }
  172.  
  173. stock INC_PREFIKS(::)enumReset(playerid)
  174. {
  175.     for(new iterator = (0); iterator < MAXIMALNO_KREDITA; ++ iterator)
  176.     {
  177.         __KREDIT[playerid][_KREDIT][iterator] = (false);
  178.         __KREDIT[playerid][_GLAVNICA][iterator] = (0);
  179.         __KREDIT[playerid][_KAMATNA_STOPA][iterator] = (0.000);
  180.         __KREDIT[playerid][_VRACENO][iterator] = (0);
  181.         __KREDIT[playerid][_RATA][iterator] = (0);
  182.         __KREDIT[playerid][_PERIOD][iterator] = (0);
  183.     }
  184.     return (true);
  185. }
  186.  
  187. hook INC_PREFIKS(::)OnPlayerConnect(playerid)
  188. {
  189.     new
  190.        Data[64] = "\0", IME_IGRACA[MAX_PLAYER_NAME] = "\0";
  191.     GetPlayerName(playerid, IME_IGRACA, MAX_PLAYER_NAME);
  192.     format(Data, (sizeof Data), KREDITIRANJE, IME_IGRACA);
  193.     INC_PREFIKS(::)enumReset(playerid);
  194.     if(fexist(Data)) // Učitaj kredite
  195.     {
  196.          INI_ParseFile(Data, "ucitavanjeKredita", .bExtra = true, .extra = playerid);
  197.     }
  198.     else if(!fexist(Data)) // Kreiraj prostor za kredite igrača
  199.     {
  200.         new INI:KREDIT_ = INI_Open(Data);
  201.         for(new DIGNUTIH_KREDITA = (0), string[MAX_PLAYER_NAME+5] = "\0"; DIGNUTIH_KREDITA < MAXIMALNO_KREDITA; ++ DIGNUTIH_KREDITA)
  202.         {
  203.             format(string, (sizeof string), "DIGNUTI_KREDIT_%d", DIGNUTIH_KREDITA+1);
  204.             INI_WriteBool(KREDIT_, string, __KREDIT[playerid][_KREDIT][DIGNUTIH_KREDITA]);
  205.                
  206.             format(string, (sizeof string), "GLAVNICA_KREDITA_%d", DIGNUTIH_KREDITA+1);
  207.             INI_WriteInt(KREDIT_, string, __KREDIT[playerid][_GLAVNICA][DIGNUTIH_KREDITA]);
  208.                
  209.             format(string, (sizeof string), "KAMATNA_STOPA_KREDITA_%d", DIGNUTIH_KREDITA+1);
  210.             INI_WriteFloat(KREDIT_, string, __KREDIT[playerid][_KAMATNA_STOPA][DIGNUTIH_KREDITA]);
  211.                
  212.             format(string, (sizeof string), "VRACENO_KREDITA_%d", DIGNUTIH_KREDITA+1);
  213.             INI_WriteInt(KREDIT_, string, __KREDIT[playerid][_VRACENO][DIGNUTIH_KREDITA]);
  214.                
  215.             format(string, (sizeof string), "RATA_KREDITA_%d", DIGNUTIH_KREDITA+1);
  216.             INI_WriteInt(KREDIT_, string, __KREDIT[playerid][_RATA][DIGNUTIH_KREDITA]);
  217.                
  218.             format(string, (sizeof string), "PERIOD_KREDITA_%d", DIGNUTIH_KREDITA+1);
  219.             INI_WriteInt(KREDIT_, string, __KREDIT[playerid][_PERIOD][DIGNUTIH_KREDITA]);
  220.         }
  221.         INI_Close(KREDIT_);
  222.     }
  223.     return (true);
  224. }
  225.  
  226. forward ucitavanjeKredita(playerid, name[], value[]);
  227. public ucitavanjeKredita(playerid, name[], value[])
  228. {
  229.     for(new DIGNUTIH_KREDITA = (0), string[MAX_PLAYER_NAME+5] = "\0"; DIGNUTIH_KREDITA < MAXIMALNO_KREDITA; ++ DIGNUTIH_KREDITA)
  230.     {
  231.         format(string, (sizeof string), "DIGNUTI_KREDIT_%d", DIGNUTIH_KREDITA+1);
  232.         INI_Bool(string, __KREDIT[playerid][_KREDIT][DIGNUTIH_KREDITA]);
  233.  
  234.         format(string, (sizeof string), "GLAVNICA_KREDITA_%d", DIGNUTIH_KREDITA+1);
  235.         INI_Int(string, __KREDIT[playerid][_GLAVNICA][DIGNUTIH_KREDITA]);
  236.  
  237.         format(string, (sizeof string), "KAMATNA_STOPA_KREDITA_%d", DIGNUTIH_KREDITA+1);
  238.         INI_Float(string, __KREDIT[playerid][_KAMATNA_STOPA][DIGNUTIH_KREDITA]);
  239.  
  240.         format(string, (sizeof string), "VRACENO_KREDITA_%d", DIGNUTIH_KREDITA+1);
  241.         INI_Int(string, __KREDIT[playerid][_VRACENO][DIGNUTIH_KREDITA]);
  242.  
  243.         format(string, (sizeof string), "RATA_KREDITA_%d", DIGNUTIH_KREDITA+1);
  244.         INI_Int(string, __KREDIT[playerid][_RATA][DIGNUTIH_KREDITA]);
  245.  
  246.         format(string, (sizeof string), "PERIOD_KREDITA_%d", DIGNUTIH_KREDITA+1);
  247.         INI_Int(string, __KREDIT[playerid][_PERIOD][DIGNUTIH_KREDITA]);
  248.     }
  249.     return (true);
  250. }
  251.  
  252. hook INC_PREFIKS(::)OnGameModeInit()
  253. {
  254.     print("[===============[ KREDITNI SUSTAV JE USPJESNO UCITAN ]===============]");
  255.     printf("VERZIJA: %s", __VERZIJA);
  256.     print("[====================================================================]");
  257.     return (true);
  258. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement