Advertisement
Guest User

Aktiensystem by ErikSon

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