Advertisement
KingClem

Stats System KingClem

Jan 29th, 2013
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 13.38 KB | None | 0 0
  1. #include <a_samp>
  2. #include <dini>
  3.  
  4. /*README
  5. Credits: KingClem
  6. Relase Date: 27.01.2013
  7. Sprache: Deutsch
  8. Version: 1.1
  9.  
  10. Commands:
  11. /trinken
  12. /essen
  13. /pinkeln
  14. /schlafen
  15.  
  16.  
  17. Start Werte:
  18. Essen : 1000 = 100%
  19. Trinken: 1000 = 100%
  20. Harndrang: 5000 = 100%
  21. Schlafen: 10000 = 100%
  22.  
  23.  
  24. Instalation:
  25. Im Scriptfiles ordner einfach unterordner erstellen Namens: KingClem_Stats
  26. Rest macht das Script von alleine.
  27. Erstelle Essenspunkte per /essenpunkt ,RCON erforderlich!
  28.  
  29.  
  30. Changelog:
  31. 1.0 -> 1.1
  32. Added /essenspunkt .
  33. Updated: Script ist nun Dynamisch.
  34. Updated: /essen ,essen ist nurnoch an essenspunkten möglich.
  35. Added /schlafen
  36. Added Energie System
  37. Überschrift Hinzugefügt
  38. Textdraw's überarbeitet
  39. ================================================================
  40.  
  41. */
  42.  
  43. #define TIMER_INTERVAL 20000 //wie oft sollen die Stats geupdatet werden? (Empfehlung: 20SEK)
  44. #define MAX_ESSENSPUNKTE 30 //maximale Essenspunkte
  45.  
  46.  
  47. #define HUNGER_SCHADEN 5 //hp menge die man verliert,wenn man verhungert
  48. #define DURST_SCHADEN 5 //hp menge die man verliert,wenn man verdurstet
  49. #define HARNDRANG_SCHADEN 5 //hp menge die man verliert,wenn man dringend auf Klo muss
  50.  
  51. #define ESSEN_KOSTEN 50 // einmal /essen
  52. #define TRINKEN_KOSTEN 50 //einmal /trinken
  53.  
  54. #define COLOR_RED 0xFF0000FF
  55.  
  56. #undef MAX_PLAYERS
  57. #define MAX_PLAYERS 50 //unbedingt anpassen!!!
  58.  
  59.  
  60. enum Stats{
  61. Hunger,
  62. Durst,
  63. Harndrang,
  64. Energie
  65. };new pStats[MAX_PLAYERS][Stats];
  66.  
  67. enum Essenspunkt{
  68. Float:Pos_X,
  69. Float:Pos_Y,
  70. Float:Pos_Z
  71. };new pEssenspunkt[MAX_ESSENSPUNKTE][Essenspunkt];
  72. new Schlafend[MAX_PLAYERS],Erstellte_Punkte;
  73.  
  74.  
  75. forward Aufwachen(index);
  76. forward Freeze(index);
  77.  
  78.  
  79. new Text:tBugFix[MAX_PLAYERS],Text:tUeberschrift[MAX_PLAYERS],Text:tHunger[MAX_PLAYERS],Text:tDurst[MAX_PLAYERS], Text:tHarndrang[MAX_PLAYERS],Text:tEnergie[MAX_PLAYERS];
  80. stock Einschlafen(CMD,index)
  81. {
  82.     if(CMD==1)
  83.     {
  84.          SetTimerEx("Aufwachen", 80000, false, "i",index );
  85.          ApplyAnimation(index,"INT_HOUSE","BED_Loop_R",4.1,0,0,0,1,1,1);
  86.          SendClientMessage(index,COLOR_RED,"Du bist in Ohnmacht gefallen.Für 80SEK");
  87.          SendClientMessage(index,COLOR_RED,"Nutze nächstes mal /schlafen ;) ");
  88.          SetTimerEx("Freeze", 1000, false, "i",index );
  89.     }else{
  90.          SetTimerEx("Aufwachen", 60000, false, "i",index );
  91.          ApplyAnimation(index,"INT_HOUSE","BED_Loop_R",4.1,0,0,0,1,1,1);
  92.          SendClientMessage(index,COLOR_RED,"Du bist eingeschlafen.Für 60SEK");
  93.          SetTimerEx("Freeze", 1000, false, "i",index );
  94.     }
  95.     Schlafend[index] = 1;
  96.    
  97.     return 1;
  98. }
  99.  
  100. public Freeze(index)
  101. {
  102. TogglePlayerControllable(index,0);
  103. return 1;
  104. }
  105. public Aufwachen(index)
  106. {
  107. TogglePlayerControllable(index,1);
  108. SendClientMessage(index,COLOR_RED,"Du bist aufgewacht.");
  109. pStats[index][Energie] = 10000;
  110. Schlafend[index] = 0;
  111.  
  112. return 1;
  113. }
  114.  
  115.  
  116. forward Stats_Timer();
  117.  
  118. public Stats_Timer()
  119. {
  120.     for(new i; i < MAX_PLAYERS; i++)
  121.     {
  122.     if(!IsPlayerNPC(i)) {//Wenn kein Bot
  123.     //Schäden
  124.     if(pStats[i][Hunger] == 0)//Verhungern
  125.     {
  126.     SendClientMessage(i,COLOR_RED,"Du bist am verhungern,geh schnell etwas essen.(/essen)");//dem user mitteilen
  127.     new Float:hp;
  128.     GetPlayerHealth(i,hp);//Akteullen HP Wert ermitteln
  129.     SetPlayerHealth(i,(hp-HUNGER_SCHADEN));//Schaden abziehen
  130.     }
  131.     if(pStats[i][Durst] == 0)
  132.     {
  133.     SendClientMessage(i,COLOR_RED,"Du bist am verdursten,trink schnell etwas.(/trinken)");
  134.     new Float:hp;
  135.     GetPlayerHealth(i,hp);
  136.     SetPlayerHealth(i,(hp-DURST_SCHADEN));
  137.     }
  138.     if(pStats[i][Harndrang] == 0)
  139.     {
  140.     SendClientMessage(i,COLOR_RED,"Du musst dringen auf Toilette,geh schnell!(/pinkeln)");
  141.     new Float:hp;
  142.     GetPlayerHealth(i,hp);
  143.     SetPlayerHealth(i,(hp-HARNDRANG_SCHADEN));
  144.     }
  145.     if(pStats[i][Energie] == 0)
  146.     {
  147.     if(Schlafend[i]==0)
  148.     Einschlafen(1,i);
  149.     }
  150.    
  151.     //Statsupdate
  152.  
  153.     if(pStats[i][Hunger] > 0)//Wenn stats größer als 0
  154.     pStats[i][Hunger]--;//ziehe 1 ab.
  155.     if(pStats[i][Durst] > 0)
  156.     pStats[i][Durst]--;
  157.     if(pStats[i][Harndrang] > 0)
  158.     pStats[i][Harndrang]--;
  159.     if(pStats[i][Energie] > 0)
  160.     pStats[i][Energie]--;
  161.    
  162.     Force_Update(i);
  163.  
  164.     }
  165. }
  166.     return 1;
  167. }
  168. stock Force_Update(playerid)
  169. {
  170.     new P_String1[128],P_String2[128],P_String3[128],P_String4[128];
  171.    
  172.     new Prozent = floatround(pStats[playerid][Hunger] / 10);
  173.     format(P_String1,sizeof(P_String1),"Hunger:     %i%%",Prozent);
  174.     TextDrawSetString(tHunger[playerid],P_String1);
  175.  
  176.     Prozent = floatround(pStats[playerid][Durst] / 10 );
  177.     format(P_String2,sizeof(P_String2),"Durst:       %i%%",Prozent);
  178.     TextDrawSetString(tDurst[playerid],P_String2);
  179.  
  180.     Prozent = floatround(pStats[playerid][Harndrang] / 50 );
  181.     format(P_String3,sizeof(P_String3),"Harndrang:  %i%%",Prozent);
  182.     TextDrawSetString(tHarndrang[playerid],P_String3);
  183.    
  184.     Prozent = floatround(pStats[playerid][Energie] / 100);
  185.     format(P_String4,sizeof(P_String4),"Energie:     %i%%",Prozent);
  186.     TextDrawSetString(tEnergie[playerid],P_String4);
  187.     return 1;
  188. }
  189.  
  190. stock Ist_Am_Essenspunkt(playerid)
  191. {
  192.     for(new i;i < MAX_ESSENSPUNKTE;i++)
  193.     {
  194.         if(IsPlayerInRangeOfPoint(playerid, 7.0, pEssenspunkt[i][Pos_X],pEssenspunkt[i][Pos_Y],pEssenspunkt[i][Pos_Z]))
  195.         {
  196.             return 1;
  197.         }
  198.     }
  199.     return 0;
  200. }
  201. stock GetName(playerid)
  202. {
  203.     new name[MAX_PLAYER_NAME];
  204.     GetPlayerName(playerid,name,sizeof(name));
  205.     return name;
  206. }
  207. public OnFilterScriptInit()
  208. {
  209.     print("\n--------------------------------------");
  210.     print(" Stats Filterscript - KingClem [1.1]");
  211.     print("--------------------------------------\n");
  212.     SetTimer("Stats_Timer",TIMER_INTERVAL,true);//Timer erstellen
  213.     new Save_Str[40];
  214.     format(Save_Str,sizeof(Save_Str),"%s","KingClem_Stats/config.KC");
  215.     if(fexist(Save_Str))//wenn speicherdatei existiert
  216.     {
  217.         for(new i;i < MAX_ESSENSPUNKTE;i++)
  218.         {
  219.         new Str[30];
  220.         format(Str,sizeof(Str),"Pos_X_%i",i);//String erstellen ,Pos_X_0,Pos_X_1 ,Pos_X_2,usw...
  221.         if(dini_Float(Save_Str,Str) >= 1)//Wenn Pos_X größer oder gleich 1 ist,mache weiter
  222.         {
  223.         pEssenspunkt[i][Pos_X] = dini_Float(Save_Str,Str);//Wert auslesne & eintragen
  224.         format(Str,sizeof(Str),"Pos_Y_%i",i);
  225.         pEssenspunkt[i][Pos_Y] = dini_Float(Save_Str,Str);
  226.         format(Str,sizeof(Str),"Pos_Z_%i",i);
  227.         pEssenspunkt[i][Pos_Z] = dini_Float(Save_Str,Str);
  228.         Erstellte_Punkte++;//Einen Punkt mehr :D
  229.         CreatePickup(1240, 1, pEssenspunkt[i][Pos_X],pEssenspunkt[i][Pos_Y], pEssenspunkt[i][Pos_Z], -1);
  230.         //Herz erstellen
  231.         Create3DTextLabel("[ESSENSPUNKT]\n/essen um zu essen.",0xFFFFFFFF,pEssenspunkt[i][Pos_X],pEssenspunkt[i][Pos_Y], pEssenspunkt[i][Pos_Z],30,0);
  232.         //Text erstellen :D
  233.         print("Essenspunkt erstellt.");
  234.         }
  235.  
  236.  
  237.        
  238.         }
  239.     }else{
  240.     dini_Create(Save_Str);
  241.     for(new index; index <= MAX_ESSENSPUNKTE; index++)
  242.         {
  243.         new Str[30];
  244.         format(Str,sizeof(Str),"Pos_X_%i",index);//String erstellen ,Pos_X_0,Pos_X_1 ,Pos_X_2,usw...
  245.         dini_FloatSet(Save_Str,Str,0);
  246.         format(Str,sizeof(Str),"Pos_Y_%i",index);
  247.         dini_FloatSet(Save_Str,Str,0);
  248.         format(Str,sizeof(Str),"Pos_Z_%i",index);
  249.         dini_FloatSet(Save_Str,Str,0);
  250.         }
  251.    
  252.     }
  253.  
  254.  
  255.    
  256.     return 1;
  257. }
  258. public OnGameModeExit()
  259. {
  260.     new Save_Str[40];
  261.     format(Save_Str,sizeof(Save_Str),"%s","KingClem_Stats/config.KC");
  262.     if(fexist(Save_Str))//wenn speicherdatei existiert
  263.     {
  264.         for(new i;i <= MAX_ESSENSPUNKTE;i++)//schleife...
  265.         {
  266.         new Str[30];
  267.         format(Str,sizeof(Str),"Pos_X_%i",i);//String erstellen ,Pos_X_0,Pos_X_1 ,Pos_X_2,usw...
  268.         dini_FloatSet(Save_Str,Str,pEssenspunkt[i][Pos_X]);//Und abspeichern :D
  269.         format(Str,sizeof(Str),"Pos_Y_%i",i);
  270.         dini_FloatSet(Save_Str,Str,pEssenspunkt[i][Pos_Y]);
  271.         format(Str,sizeof(Str),"Pos_Z_%i",i);
  272.         dini_FloatSet(Save_Str,Str,pEssenspunkt[i][Pos_Z]);
  273.         }
  274.     }
  275.  
  276.  
  277.     return 1;
  278.  
  279. }
  280. public OnFilterScriptExit()
  281. {
  282.  
  283.     return 1;
  284. }
  285.  
  286.  
  287.  
  288. public OnPlayerConnect(playerid)
  289. {
  290.     new Stats_Str[126];
  291.     format(Stats_Str,sizeof(Stats_Str),"KingClem_Stats/%s_Stats.KC",GetName(playerid));//Speicherpfad erstellen
  292.     if(fexist(Stats_Str))//Wenn speicherdatei existiert
  293.     {
  294.     pStats[playerid][Hunger] = dini_Int(Stats_Str,"Hunger");//Hunger auslesen
  295.     pStats[playerid][Durst] = dini_Int(Stats_Str,"Durst");//Durst auslesen
  296.     pStats[playerid][Harndrang] = dini_Int(Stats_Str,"Harndrang");//Harndrang auslesen
  297.     pStats[playerid][Energie] = dini_Int(Stats_Str,"Energie");//Energie auslesen
  298.     }else{//wenn speicherdatei nicht existiert
  299.     dini_Create(Stats_Str);//Speicher Datei erstellen
  300.     pStats[playerid][Hunger] = 1000;//wert auf 100% stellen
  301.     pStats[playerid][Durst] = 1000;//Wert auf 100% stellen
  302.     pStats[playerid][Harndrang] = 5000;//Wert auf 100% stellen
  303.     pStats[playerid][Energie] = 10000;//Wert auf 100% stellen
  304.     print(Stats_Str);//Pfad in CMD ausgeben
  305.     print("[KingClem_Stats] Datei wurde erstellt.");//In CMD ausgeben ,dsa datei erstellt wurde
  306.     }
  307.    
  308.     //====TEXTDRAW======
  309.     tBugFix[playerid] = TextDrawCreate(470,170,"  ");
  310.     tUeberschrift[playerid] = TextDrawCreate(470,170,"                          Stats");
  311.     TextDrawLetterSize(tUeberschrift[playerid],0.4,1.1);//Größe der Buchstaben
  312.     TextDrawFont(tUeberschrift[playerid],1);//Schriftart auswählen
  313.     TextDrawSetShadow(tUeberschrift[playerid],2);//Schatten erstellen?
  314.     TextDrawSetOutline(tUeberschrift[playerid],1);//umrandung
  315.     TextDrawUseBox(tUeberschrift[playerid] , 1);//Box erstellen
  316.     TextDrawBoxColor(tUeberschrift[playerid],0x000000FF);//Box farbe festlegen
  317.     TextDrawShowForPlayer(playerid,tUeberschrift[playerid]);//Text anzeigen
  318.    
  319.    
  320.    
  321.     tHunger[playerid] = TextDrawCreate(470,180,"Hunger:     Laden..");
  322.     TextDrawLetterSize(tHunger[playerid],0.4,1.1);
  323.     TextDrawFont(tHunger[playerid],1);
  324.     TextDrawSetShadow(tHunger[playerid],2);
  325.     TextDrawSetOutline(tHunger[playerid],1);
  326.     TextDrawUseBox(tHunger[playerid] , 1);
  327.     TextDrawBoxColor(tHunger[playerid],0x000000FF);
  328.     TextDrawShowForPlayer(playerid,tHunger[playerid]);
  329.  
  330.    
  331.     tDurst[playerid] = TextDrawCreate(470,190,"Durst:       Laden..");
  332.     TextDrawLetterSize(tDurst[playerid],0.4,1.1);
  333.     TextDrawFont(tDurst[playerid],1);            
  334.     TextDrawSetShadow(tDurst[playerid],2);
  335.     TextDrawSetOutline(tDurst[playerid],1);
  336.     TextDrawUseBox(tDurst[playerid] , 1);
  337.     TextDrawBoxColor(tDurst[playerid],0x000000FF);
  338.  
  339.     TextDrawShowForPlayer(playerid,tDurst[playerid]);
  340.    
  341.     tHarndrang[playerid] = TextDrawCreate(470,200,"Harndrang: Laden..");
  342.     TextDrawLetterSize(tHarndrang[playerid],0.4,1.1);
  343.     TextDrawFont(tHarndrang[playerid],1);          
  344.     TextDrawSetShadow(tHarndrang[playerid],2);
  345.     TextDrawSetOutline(tHarndrang[playerid],1);
  346.     TextDrawUseBox(tHarndrang[playerid], 1);
  347.     TextDrawBoxColor(tHarndrang[playerid],0x000000FF);
  348.     TextDrawShowForPlayer(playerid,tHarndrang[playerid]);
  349.    
  350.     tEnergie[playerid] = TextDrawCreate(470,210,"Energie:      Laden..");
  351.     TextDrawLetterSize(tEnergie[playerid],0.4,1.1);
  352.     TextDrawFont(tEnergie[playerid],1);
  353.     TextDrawSetShadow(tEnergie[playerid],2);
  354.     TextDrawSetOutline(tEnergie[playerid],1);
  355.     TextDrawUseBox(tEnergie[playerid], 1);
  356.     TextDrawBoxColor(tEnergie[playerid],0x000000FF);
  357.     TextDrawShowForPlayer(playerid,tEnergie[playerid]);
  358.  
  359.    
  360.    
  361.     for(new i;i < Erstellte_Punkte; i++)
  362.     {
  363.         SetPlayerMapIcon( playerid, i, pEssenspunkt[i][Pos_X],pEssenspunkt[i][Pos_Y], pEssenspunkt[i][Pos_Z], 10, 0, 0 );
  364.          
  365.     }//Erstellte Punkte werden geladen & dort werden MapIcon's und Pickups erstellt.
  366.     return 1;
  367. }
  368.  
  369.  
  370. public OnPlayerDisconnect(playerid, reason)
  371. {
  372.     new Stats_Str[126];
  373.     format(Stats_Str,sizeof(Stats_Str),"KingClem_Stats/%s_Stats.KC",GetName(playerid));//string für speicherdatei
  374.     if(fexist(Stats_Str))//existiert die Speicher datei?
  375.     {
  376.     dini_IntSet(Stats_Str,"Hunger",pStats[playerid][Hunger]);//abspeichern
  377.     dini_IntSet(Stats_Str,"Durst",pStats[playerid][Durst]);
  378.     dini_IntSet(Stats_Str,"Harndrang",pStats[playerid][Harndrang]);
  379.     dini_IntSet(Stats_Str,"Energie",pStats[playerid][Energie]);
  380.     }
  381.    
  382.    
  383.     return 1;
  384. }
  385.  
  386. public OnPlayerCommandText(playerid, cmdtext[])
  387. {
  388.     if(strcmp("/essen",cmdtext,true)==0)
  389.     {
  390.     if(!Ist_Am_Essenspunkt(playerid)) return SendClientMessage(playerid,COLOR_RED,"Du bist an keinem Essenspunkt.");
  391.     ApplyAnimation(playerid,"FOOD","EAT_Burger",4.1,0,1,1,0,5000);//annimation starten
  392.     GivePlayerMoney(playerid,-(ESSEN_KOSTEN));//kosten für essen
  393.     pStats[playerid][Hunger] = 1000; //keinen hunger mehr
  394.     Force_Update(playerid);//Textdraw's updaten
  395.     return 1;
  396.     }
  397.     if(strcmp("/trinken",cmdtext,true)==0)
  398.     {
  399.     ApplyAnimation(playerid,"VENDING","VEND_Drink_P",4.1,0,1,1,0,3000);
  400.     GivePlayerMoney(playerid,-(TRINKEN_KOSTEN));
  401.     pStats[playerid][Durst] = 1000;
  402.     Force_Update(playerid);
  403.     return 1;
  404.     }
  405.     if(strcmp("/pinkeln",cmdtext,true)==0)
  406.     {
  407.     SetPlayerSpecialAction(playerid,68);
  408.     pStats[playerid][Harndrang] = 5000;
  409.     Force_Update(playerid);
  410.     return 1;
  411.     }
  412.     if(strcmp("/essenspunkt",cmdtext,true)==0)
  413.     {
  414.     if(!IsPlayerAdmin(playerid))return SendClientMessage(playerid,COLOR_RED,"[KC] Du musst als RCON Admin eingeloggt sein!");
  415.     new Float:X,Float:Y,Float:Z;
  416.     GetPlayerPos(playerid,X,Y,Z); //aktuelle Spielerposition ermitteln
  417.     pEssenspunkt[Erstellte_Punkte][Pos_X] = X;//Positionen eintragen
  418.     pEssenspunkt[Erstellte_Punkte][Pos_Y] = Y;
  419.     pEssenspunkt[Erstellte_Punkte][Pos_Z] = Z;
  420.     Erstellte_Punkte++;//Angeben das ein Punkt mehr existiert
  421.     SendClientMessage(playerid,COLOR_RED,"[KC] Essenspunkt erstellt.Nach GMX sichtbar.");//User mitteilung :D
  422.     return 1;
  423.     }
  424. /*  if(strcmp("/test",cmdtext,true)==0)
  425.     {
  426.     Force_Update(playerid);
  427.     return 1;
  428.     }
  429. */
  430.     if(strcmp("/schlafen",cmdtext,true)==0)
  431.     {
  432.     Einschlafen(0,playerid);
  433.     return 1;
  434.     }
  435.    
  436.    
  437.     return 0;
  438. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement