Advertisement
Guest User

Aktiensystem by ErikSon

a guest
Mar 18th, 2014
413
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 13.99 KB | None | 0 0
  1. //                                      Aktiensystem by ErikSon
  2.  
  3. #include <a_samp>
  4. #include <dini>
  5.  
  6. #define MAX_AKTIEN      15
  7.  
  8. //Farben
  9. #define Schwarz         0x000000FF
  10. #define Rot             0xE10000FF
  11. #define Gelb            0xFFE600FF
  12. #define HBlau           0x00FFFFFF
  13. #define DBlau           0x0000FFFF
  14. #define Blau            0x2E9AFEFF
  15. #define HGruen          0x00FF00FF
  16. #define Orange          0xFFAB00FF
  17. #define Weiss           0xFFFFFFFF
  18. #define Grau            0xDCDCDCFF
  19. #define Gold            0xD4A017AA
  20. #define Lila            0x7800FFFF
  21. #define Pink            0xFF00CDFF
  22. #define Gruen           0x009F32FF
  23.  
  24.  
  25. enum
  26. {
  27.     dAktien = 3000,
  28.     dAktien2 = 3001,
  29.     dAktieKaufen = 3002,
  30.     dAktieVerkaufen = 3003,
  31.     dEditAktie = 3004,
  32.     dEAktienName = 3005,
  33.     dEAktienProzentsatz = 3006,
  34.     dEAktienKosten = 3007,
  35.     dCAktienName = 3008,
  36.     dCAktienProzentsatz = 3009,
  37.     dCAktienKosten = 3010
  38. }
  39.  
  40.  
  41. enum EEA
  42. {
  43.     aname[16],
  44.     Float:prozentsatz,
  45.     kosten,
  46.     erstellt
  47. };
  48. new Aktie[MAX_AKTIEN][EEA];
  49.  
  50.  
  51. enum lEA
  52. {
  53.     aname[16],
  54.     kosten,
  55.     prozentsatz
  56. };
  57. new EA[MAX_PLAYERS][lEA];
  58.  
  59.  
  60. enum ES
  61. {
  62.     aid,
  63.     menge
  64. };
  65. new Spieler[MAX_PLAYERS][ES][MAX_AKTIEN];
  66.  
  67.  
  68.  
  69. new akt[MAX_PLAYERS],
  70.     au[MAX_PLAYERS];
  71. forward update();
  72.  
  73.  
  74.  
  75.  
  76. new fmex[128];
  77. #define SendClientMessageToAllF(%0,%1,%2)  format(fmex,128,%1,%2) && SendClientMessageToAll(%0, fmex)
  78. #define SendClientMessageF(%0,%1,%2)  format(fmex,128,%2) && SendClientMessage(%0,%1,fmex)
  79.  
  80. //////////////////////////////////////////////////////
  81. public OnFilterScriptInit()
  82. {
  83.     print("\n--------------------------------------");
  84.     print("Aktiensystem by ErikSon");
  85.     print("--------------------------------------\n");
  86.    
  87.     new ad[64]; format(ad,64,"/Aktien/Aktien.ini");
  88.     if(!dini_Exists(ad))dini_Create(ad);
  89.     SetTimer("update",888*15,true);
  90.     return LoadAktien(),SaveAktien();
  91. }
  92.  
  93. public OnFilterScriptExit()return SaveAktien();
  94.  
  95. public OnPlayerConnect(playerid)return LPAktien(playerid),au[playerid] = 0;
  96.  
  97. public OnPlayerDisconnect(playerid, reason)return SPAktien(playerid);
  98.  
  99. public OnPlayerCommandText(playerid, cmdtext[])
  100. {
  101.     if (strcmp("/aktien", cmdtext, true, 10) == 0)
  102.     {
  103.         new string[1024],buffer[1024],i = 0;
  104.         for(; i<MAX_AKTIEN; i++)if(Aktie[i][erstellt] == 1)format(buffer,1024,"%i| %s | %.2f%% | %i$%c",i,Aktie[i][aname],Aktie[i][prozentsatz],Aktie[i][kosten],(i == MAX_AKTIEN) ? '\0' : '\n'),strins(string,buffer,strlen(string),sizeof(string));
  105.         ShowPlayerDialog(playerid,dAktien,DIALOG_STYLE_LIST,"Aktien",string,"Auswählen","Abbrechen");
  106.         return au[playerid] = 1;
  107.     }
  108.     if(strcmp("/caktie",cmdtext,true,10) == 0)
  109.     {
  110.         if(!IsPlayerAdmin(playerid))return SendClientMessage(playerid,Rot,"Du bist kein RCON-Admin!");
  111.         for(new i = 0; i<MAX_AKTIEN; i++)
  112.         {
  113.             if(Aktie[i][erstellt] == 1)continue;
  114.             akt[playerid] = i;
  115.             break;
  116.         }
  117.         return ShowPlayerDialog(playerid,dCAktienName,DIALOG_STYLE_INPUT,"Aktie erstellen - Aktienname","Bitte gebe einen Namen für die Aktie ein.","Weiter","Abbrechen");
  118.     }
  119.     return 0;
  120. }
  121.  
  122. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  123. {
  124.     new header[64],text[256],i = 0;
  125.     switch(dialogid)
  126.     {
  127.         case dAktien:
  128.         {
  129.             if(response)
  130.             {
  131.                 format(header,64,"Aktie - %s",Aktie[listitem][aname]);
  132.                 if(IsPlayerAdmin(playerid))format(text,256,"Aktien kaufen (%i$ / Aktie)\nAktien verkaufen (Besitz: %i Aktien | %i$ / Aktie)\nAktie bearbeiten",Aktie[listitem][kosten],Spieler[playerid][menge][listitem],Aktie[listitem][kosten]);
  133.                 else format(text,256,"Aktien kaufen (%i$ / Aktie)\nAktien verkaufen (Besitz: %i Aktien | %i$ / Aktie)",Aktie[listitem][kosten],Spieler[playerid][menge][listitem],Aktie[listitem][kosten]);
  134.                 akt[playerid] = listitem;
  135.                 ShowPlayerDialog(playerid,dAktien2,DIALOG_STYLE_LIST,header,text,"Auswählen","Abbrechen");
  136.                 return au[playerid] = 0;
  137.             }
  138.             return au[playerid] = 0;
  139.         }
  140.         case dAktien2:
  141.         {
  142.             if(response)
  143.             {
  144.                 switch(listitem)
  145.                 {
  146.                     case 0:
  147.                     {
  148.                         format(header,64,"Aktie kaufen - %s",Aktie[akt[playerid]][aname]);
  149.                         format(text,256,"Bitte gebe die Anzahl der Aktien ein,\ndie du kaufen möchtest.\n\nEine Aktie kostet %i$.",Aktie[akt[playerid]][kosten]);
  150.                         return ShowPlayerDialog(playerid,dAktieKaufen,DIALOG_STYLE_INPUT,header,text,"Kaufen","Abbrechen");
  151.                     }
  152.                     case 1:
  153.                     {
  154.                         format(header,64,"Aktie verkaufen - %s",Aktie[akt[playerid]][aname]);
  155.                         format(text,256,"Bitte gebe die Anzahl der Aktien ein,\ndie du verkaufen möchtest.\n\nEine Aktie kannst du für %i$ verkaufen.",Aktie[akt[playerid]][kosten]);
  156.                         return ShowPlayerDialog(playerid,dAktieVerkaufen,DIALOG_STYLE_INPUT,header,text,"Verkaufen","Abbrechen");
  157.                     }
  158.                     case 2:
  159.                     {
  160.                         if(!IsPlayerAdmin(playerid))return 1;
  161.                         format(header,64,"Aktie bearbeiten - %s",Aktie[akt[playerid]][aname]);
  162.                         format(text,256,"Aktienname: '%s'\nKosten / Aktie: %i$",Aktie[akt[playerid]][aname],Aktie[akt[playerid]][kosten]);
  163.                         return ShowPlayerDialog(playerid,dEditAktie,DIALOG_STYLE_LIST,header,text,"Bearbeiten","Abbrechen");
  164.                     }
  165.                 }
  166.             }
  167.         }
  168.         case dAktieKaufen:
  169.         {
  170.             if(response)
  171.             {
  172.                 if(!strval(inputtext))return SendClientMessage(playerid,Rot,"Bitte gebe eine Zahl ab 1 ein!");
  173.                 if(GetPlayerMoney(playerid) < (Aktie[akt[playerid]][kosten] * strval(inputtext)))return SendClientMessage(playerid,Rot,"Du hast nicht genug Geld!");
  174.                 Spieler[playerid][menge][akt[playerid]] = strval(inputtext);
  175.                 GivePlayerMoney(playerid,-(Aktie[akt[playerid]][kosten] * strval(inputtext)));
  176.                 return SendClientMessageF(playerid,Blau,"Du hast dir %i '%s' Aktien für %i$ gekauft.",strval(inputtext),Aktie[akt[playerid]][aname],(Aktie[akt[playerid]][kosten] * strval(inputtext)));
  177.             }
  178.         }
  179.         case dAktieVerkaufen:
  180.         {
  181.             if(response)
  182.             {
  183.                 if(!strval(inputtext))return SendClientMessage(playerid,Rot,"Bitte gebe eine Zahl ab 1 ein!");
  184.                 if(Spieler[playerid][menge][akt[playerid]] < strval(inputtext))return SendClientMessage(playerid,Rot,"Du hast nicht genug Aktien!");
  185.                 Spieler[playerid][menge][akt[playerid]] -= strval(inputtext);
  186.                 GivePlayerMoney(playerid,(Aktie[akt[playerid]][kosten] * strval(inputtext)));
  187.                 return SendClientMessageF(playerid,Blau,"Du hast %i '%s' Aktien für %i$ verkauft.",strval(inputtext),Aktie[akt[playerid]][aname],(Aktie[akt[playerid]][kosten] * strval(inputtext)));
  188.             }
  189.         }
  190.         case dEditAktie:
  191.         {
  192.             if(response)
  193.             {
  194.                 switch(listitem)
  195.                 {
  196.                     case 0:
  197.                     {
  198.                         format(header,64,"Aktienname bearbeiten - %s",Aktie[akt[playerid]][aname]);
  199.                         format(text,256,"Bitte gebe einen neuen Namen für die Aktie ein.\n\nDie Aktie heißt zur Zeit '%s'.",Aktie[akt[playerid]][aname]);
  200.                         return ShowPlayerDialog(playerid,dEAktienName,DIALOG_STYLE_INPUT,header,text,"Aktualisieren","Abbrechen");
  201.                     }
  202.                     case 1:
  203.                     {
  204.                         format(header,64,"Aktienpreis bearbeiten - %s",Aktie[akt[playerid]][aname]);
  205.                         format(text,256,"Bitte gebe einen neuen Preis für die Aktie '%s' ein.\n\nDie Aktie kostet zur Zeit %i$.",Aktie[akt[playerid]][aname],Aktie[akt[playerid]][kosten]);
  206.                         return ShowPlayerDialog(playerid,dEAktienKosten,DIALOG_STYLE_INPUT,header,text,"Aktualisieren","Abbrechen");
  207.                     }
  208.                     case 2:
  209.                     {
  210.                         format(header,64,"Aktienprozentsatz bearbeiten - %s",Aktie[akt[playerid]][aname]);
  211.                         format(text,256,"Bitte gebe einen neuen Prozentsatz für die Aktie '%s' ein.\n\nDer Prozentsatz beträgt zur Zeit %.2f.",Aktie[akt[playerid]][aname],Aktie[akt[playerid]][prozentsatz]);
  212.                         return ShowPlayerDialog(playerid,dEAktienProzentsatz,DIALOG_STYLE_INPUT,header,text,"Aktualisieren","Abbrechen");
  213.                     }
  214.                 }
  215.             }
  216.         }
  217.         case dEAktienName:
  218.         {
  219.             if(response)
  220.             {
  221.                 if(!strlen(inputtext))return SendClientMessage(playerid,Rot,"Bitte gebe einen neuen Namen für die Aktie ein!");
  222.                 format(Aktie[akt[playerid]][aname],16,"%s",inputtext);
  223.                 return SendClientMessageF(playerid,Orange,"Du hast die Aktie in '%s' umbenannt.",inputtext),SaveAktien();
  224.             }
  225.         }
  226.         case dEAktienKosten:
  227.         {
  228.             if(response)
  229.             {
  230.                 if(!strval(inputtext))return SendClientMessage(playerid,Rot,"Bitte gebe einen neuen Preis für die Aktie ein!");
  231.                 Aktie[akt[playerid]][kosten] = strval(inputtext);
  232.                 return SendClientMessageF(playerid,Orange,"Du hast den Preis der Aktie auf %i$ gesetzt.",strval(inputtext));
  233.             }
  234.         }
  235.         case dEAktienProzentsatz:
  236.         {
  237.             if(response)
  238.             {
  239.                 if(!strval(inputtext))return SendClientMessage(playerid,Rot,"Bitte gebe einen neuen Prozentsatz für die Aktie ein!");
  240.                 Aktie[akt[playerid]][prozentsatz] = strval(inputtext);
  241.                 return SendClientMessageF(playerid,Orange,"Du hast den Prozentsatz der Aktie auf %.2f gesetzt.",strval(inputtext));
  242.             }
  243.         }
  244.         case dCAktienName:
  245.         {
  246.             if(response)
  247.             {
  248.                 if(!strlen(inputtext))return ShowPlayerDialog(playerid,dCAktienName,DIALOG_STYLE_INPUT,"Aktie erstellen - Aktienname","Bitte gebe einen Namen für die Aktie ein.","Weiter","Abbrechen");
  249.                 format(EA[playerid][aname],16,"%s",inputtext);
  250.                 return ShowPlayerDialog(playerid,dCAktienKosten,DIALOG_STYLE_INPUT,"Aktie erstellen - Kosten","Bitte gebe den Preis für die Aktie ein.","Weiter","Abbrechen");
  251.             }
  252.         }
  253.         case dCAktienKosten:
  254.         {
  255.             if(response)
  256.             {
  257.                 if(!strval(inputtext))return ShowPlayerDialog(playerid,dCAktienKosten,DIALOG_STYLE_INPUT,"Aktie erstellen - Kosten","Bitte gebe den Preis für die Aktie ein.","Weiter","Abbrechen");
  258.                 EA[playerid][kosten] = strval(inputtext);
  259.                 return ShowPlayerDialog(playerid,dCAktienProzentsatz,DIALOG_STYLE_INPUT,"Aktie erstellen - Prozentsatz","Bitte gebe den Prozentsatz für die Aktie ein.","Weiter","Abbrechen");
  260.             }
  261.         }
  262.         case dCAktienProzentsatz:
  263.         {
  264.             if(response)
  265.             {
  266.                 if(!strval(inputtext))return ShowPlayerDialog(playerid,dCAktienProzentsatz,DIALOG_STYLE_INPUT,"Aktie erstellen - Prozentsatz","Bitte gebe den Prozentsatz für die Aktie ein.","Weiter","Abbrechen");
  267.                 EA[playerid][prozentsatz] = strval(inputtext);
  268.                 SendClientMessage(playerid,Blau,"Du hast die Aktie erfolgreich erstellt.");
  269.                 for(; i<MAX_AKTIEN; i++)
  270.                 {
  271.                     if(Aktie[i][erstellt] == 1)continue;
  272.                     format(Aktie[i][aname],16,"%s",EA[playerid][aname]);
  273.                     Aktie[i][kosten] = EA[playerid][kosten];
  274.                     Aktie[i][prozentsatz] = EA[playerid][prozentsatz];
  275.                     Aktie[i][erstellt] = 1;
  276.                     SaveAktien();
  277.                     break;
  278.                 }
  279.                 //return SaveAktien();
  280.                 //Aktie[akt[playerid]][erstellt] = 1;
  281.                 //return SaveAktien(),LoadAktien();
  282.             }
  283.         }
  284.     }
  285.     return 0;
  286. }
  287.  
  288. stock SaveAktien()
  289. {
  290.     new i,ad[64],str[64]; format(ad,64,"/Aktien/Aktien.ini");
  291.     if(!dini_Exists(ad))dini_Create(ad);
  292.     for(i = 0; i<MAX_AKTIEN; i++)
  293.     {
  294.         format(str,64,"Aktie%i",i);
  295.         dini_Set(ad,str,Aktie[i][aname]);
  296.         format(str,64,"Aktie%i_Prozentsatz",i);
  297.         dini_FloatSet(ad,str,Aktie[i][prozentsatz]);
  298.         format(str,64,"Aktie%i_Kosten",i);
  299.         dini_IntSet(ad,str,Aktie[i][kosten]);
  300.         format(str,64,"Aktie%i_Erstellt",i);
  301.         dini_IntSet(ad,str,Aktie[i][erstellt]);
  302.     }
  303.     return 1;
  304. }
  305.  
  306. stock LoadAktien()
  307. {
  308.     new i,ad[64],str[64]; format(ad,64,"/Aktien/Aktien.ini");
  309.     if(!dini_Exists(ad))dini_Create(ad);
  310.     for(i = 0; i<MAX_AKTIEN; i++)
  311.     {
  312.         format(str,64,"Aktie%i",i);
  313.         format(Aktie[i][aname],16,dini_Get(ad,str));
  314.         format(str,64,"Aktie%i_Prozentsatz",i);
  315.         Aktie[i][prozentsatz] = dini_Float(ad,str);
  316.         format(str,64,"Aktie%i_Kosten",i);
  317.         Aktie[i][kosten] = dini_Int(ad,str);
  318.         format(str,64,"Aktie%i_Erstellt",i);
  319.         Aktie[i][erstellt] = dini_Int(ad,str);
  320.     }
  321.     return 1;
  322. }
  323.  
  324. stock LPAktien(playerid)
  325. {
  326.     new pa[64],str[64],i; format(pa,64,"/Aktien/%s.ini",Name(playerid));
  327.     if(!dini_Exists(pa))dini_Create(pa);
  328.     for(i = 0; i<MAX_AKTIEN; i++)
  329.     {
  330.         format(str,64,"Aktie%i",i);
  331.         Spieler[playerid][aid][i] = dini_Int(pa,str);
  332.         format(str,64,"Aktie%i_Menge",i);
  333.         Spieler[playerid][menge][i] = dini_Int(pa,str);
  334.     }
  335.     return 1;
  336. }
  337.  
  338. stock SPAktien(playerid)
  339. {
  340.     new pa[64],str[64],i; format(pa,64,"/Aktien/%s.ini",Name(playerid));
  341.     if(!dini_Exists(pa))dini_Create(pa);
  342.     for(i = 0; i<MAX_AKTIEN; i++)
  343.     {
  344.         format(str,64,"Aktie%i",i);
  345.         dini_IntSet(pa,str,Spieler[playerid][aid][i]);
  346.         format(str,64,"Aktie%i_Menge",i);
  347.         dini_IntSet(pa,str,Spieler[playerid][menge][i]);
  348.     }
  349.     return 1;
  350. }
  351.  
  352.  
  353. stock Name(playerid)
  354. {
  355.    new name[MAX_PLAYERS];
  356.    GetPlayerName(playerid,name,sizeof(name));
  357.    return name;
  358. }
  359.  
  360. public update()
  361. {
  362.     new i = 0;
  363.     for(; i<MAX_AKTIEN; i++)
  364.     {
  365.         if(Aktie[i][erstellt] == 1)
  366.         {
  367.             new div = random(200)+500;
  368.             new rand = random(10)+10;
  369.             new pm = random (30)+1;
  370.             new Float:ergebnis,Float:ergebnis2,Float:ku;
  371.             switch(pm)
  372.             {
  373.                 case 1,5,8,12,15,18,22,24,27,29:
  374.                 {
  375.                     if(Aktie[i][kosten] == 0)Aktie[i][kosten] = 100;
  376.                     //Prozentsatz
  377.                     ergebnis = (div / rand);
  378.                     ku = (ergebnis / 100);
  379.                     ergebnis2 = 1 + ku;
  380.                     if(Aktie[i][prozentsatz] < 0)Aktie[i][prozentsatz] -= ergebnis2;
  381.                     else Aktie[i][prozentsatz] += ergebnis2;
  382.                    
  383.                    
  384.                    
  385.                     //Kosten
  386.                     ku = (Aktie[i][kosten] * (Aktie[i][prozentsatz] / 10000));
  387.                     if(Aktie[i][kosten] <= 0) Aktie[i][kosten] -= floatround(ku);
  388.                     else Aktie[i][kosten] += floatround(ku);
  389.                 }
  390.                 case 2,3,4,9,13,17,20,23,25,28,30:
  391.                 {
  392.                     if(Aktie[i][kosten] == 0)Aktie[i][kosten] = 100;
  393.                     //Prozentsatz
  394.                     ergebnis = (div / rand);
  395.                     ku = (ergebnis / 100);
  396.                     ergebnis2 = 1 - ku;
  397.                     if(Aktie[i][prozentsatz] < 0)Aktie[i][prozentsatz] += ergebnis2;
  398.                     else Aktie[i][prozentsatz] -= ergebnis2;
  399.                    
  400.                    
  401.                    
  402.                     //Kosten
  403.                     ku = (Aktie[i][kosten] * (Aktie[i][prozentsatz] / 10000));
  404.                     if(Aktie[i][kosten] <= 0) Aktie[i][kosten] += floatround(ku);
  405.                     else Aktie[i][kosten] -= floatround(ku);
  406.                    
  407.                 }
  408.             }
  409.             printf("%s / %.2f / %i$",Aktie[i][aname],Aktie[i][prozentsatz],floatround(Aktie[i][kosten]));
  410.         }
  411.     }
  412.     printf("\n\n");
  413.     for(i = 0; i<MAX_PLAYERS; i++)
  414.     {
  415.         if(!IsPlayerConnected(i))continue;
  416.         if(au[i] == 0)continue;
  417.         new string[1024],buffer[1024],a = 0;
  418.         for(; a<MAX_AKTIEN; a++)if(Aktie[a][erstellt] == 1)format(buffer,1024,"%i| %s | %.2f%% | %i$%c",a,Aktie[a][aname],Aktie[a][prozentsatz],Aktie[a][kosten],(a == MAX_AKTIEN) ? '\0' : '\n'),strins(string,buffer,strlen(string),sizeof(string));
  419.         return ShowPlayerDialog(i,dAktien,DIALOG_STYLE_LIST,"Aktien",string,"Auswählen","Abbrechen");
  420.     }
  421.     return 1;
  422. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement