Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <a_samp>
- #include <dini>
- /*README
- Credits: KingClem
- Relase Date: 27.01.2013
- Sprache: Deutsch
- Version: 1.1
- Commands:
- /trinken
- /essen
- /pinkeln
- /schlafen
- Start Werte:
- Essen : 1000 = 100%
- Trinken: 1000 = 100%
- Harndrang: 5000 = 100%
- Schlafen: 10000 = 100%
- Instalation:
- Im Scriptfiles ordner einfach unterordner erstellen Namens: KingClem_Stats
- Rest macht das Script von alleine.
- Erstelle Essenspunkte per /essenpunkt ,RCON erforderlich!
- Changelog:
- 1.0 -> 1.1
- Added /essenspunkt .
- Updated: Script ist nun Dynamisch.
- Updated: /essen ,essen ist nurnoch an essenspunkten möglich.
- Added /schlafen
- Added Energie System
- Überschrift Hinzugefügt
- Textdraw's überarbeitet
- ================================================================
- */
- #define TIMER_INTERVAL 20000 //wie oft sollen die Stats geupdatet werden? (Empfehlung: 20SEK)
- #define MAX_ESSENSPUNKTE 30 //maximale Essenspunkte
- #define HUNGER_SCHADEN 5 //hp menge die man verliert,wenn man verhungert
- #define DURST_SCHADEN 5 //hp menge die man verliert,wenn man verdurstet
- #define HARNDRANG_SCHADEN 5 //hp menge die man verliert,wenn man dringend auf Klo muss
- #define ESSEN_KOSTEN 50 // einmal /essen
- #define TRINKEN_KOSTEN 50 //einmal /trinken
- #define COLOR_RED 0xFF0000FF
- #undef MAX_PLAYERS
- #define MAX_PLAYERS 50 //unbedingt anpassen!!!
- enum Stats{
- Hunger,
- Durst,
- Harndrang,
- Energie
- };new pStats[MAX_PLAYERS][Stats];
- enum Essenspunkt{
- Float:Pos_X,
- Float:Pos_Y,
- Float:Pos_Z
- };new pEssenspunkt[MAX_ESSENSPUNKTE][Essenspunkt];
- new Schlafend[MAX_PLAYERS],Erstellte_Punkte;
- forward Aufwachen(index);
- forward Freeze(index);
- 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];
- stock Einschlafen(CMD,index)
- {
- if(CMD==1)
- {
- SetTimerEx("Aufwachen", 80000, false, "i",index );
- ApplyAnimation(index,"INT_HOUSE","BED_Loop_R",4.1,0,0,0,1,1,1);
- SendClientMessage(index,COLOR_RED,"Du bist in Ohnmacht gefallen.Für 80SEK");
- SendClientMessage(index,COLOR_RED,"Nutze nächstes mal /schlafen ;) ");
- SetTimerEx("Freeze", 1000, false, "i",index );
- }else{
- SetTimerEx("Aufwachen", 60000, false, "i",index );
- ApplyAnimation(index,"INT_HOUSE","BED_Loop_R",4.1,0,0,0,1,1,1);
- SendClientMessage(index,COLOR_RED,"Du bist eingeschlafen.Für 60SEK");
- SetTimerEx("Freeze", 1000, false, "i",index );
- }
- Schlafend[index] = 1;
- return 1;
- }
- public Freeze(index)
- {
- TogglePlayerControllable(index,0);
- return 1;
- }
- public Aufwachen(index)
- {
- TogglePlayerControllable(index,1);
- SendClientMessage(index,COLOR_RED,"Du bist aufgewacht.");
- pStats[index][Energie] = 10000;
- Schlafend[index] = 0;
- return 1;
- }
- forward Stats_Timer();
- public Stats_Timer()
- {
- for(new i; i < MAX_PLAYERS; i++)
- {
- if(!IsPlayerNPC(i)) {//Wenn kein Bot
- //Schäden
- if(pStats[i][Hunger] == 0)//Verhungern
- {
- SendClientMessage(i,COLOR_RED,"Du bist am verhungern,geh schnell etwas essen.(/essen)");//dem user mitteilen
- new Float:hp;
- GetPlayerHealth(i,hp);//Akteullen HP Wert ermitteln
- SetPlayerHealth(i,(hp-HUNGER_SCHADEN));//Schaden abziehen
- }
- if(pStats[i][Durst] == 0)
- {
- SendClientMessage(i,COLOR_RED,"Du bist am verdursten,trink schnell etwas.(/trinken)");
- new Float:hp;
- GetPlayerHealth(i,hp);
- SetPlayerHealth(i,(hp-DURST_SCHADEN));
- }
- if(pStats[i][Harndrang] == 0)
- {
- SendClientMessage(i,COLOR_RED,"Du musst dringen auf Toilette,geh schnell!(/pinkeln)");
- new Float:hp;
- GetPlayerHealth(i,hp);
- SetPlayerHealth(i,(hp-HARNDRANG_SCHADEN));
- }
- if(pStats[i][Energie] == 0)
- {
- if(Schlafend[i]==0)
- Einschlafen(1,i);
- }
- //Statsupdate
- if(pStats[i][Hunger] > 0)//Wenn stats größer als 0
- pStats[i][Hunger]--;//ziehe 1 ab.
- if(pStats[i][Durst] > 0)
- pStats[i][Durst]--;
- if(pStats[i][Harndrang] > 0)
- pStats[i][Harndrang]--;
- if(pStats[i][Energie] > 0)
- pStats[i][Energie]--;
- Force_Update(i);
- }
- }
- return 1;
- }
- stock Force_Update(playerid)
- {
- new P_String1[128],P_String2[128],P_String3[128],P_String4[128];
- new Prozent = floatround(pStats[playerid][Hunger] / 10);
- format(P_String1,sizeof(P_String1),"Hunger: %i%%",Prozent);
- TextDrawSetString(tHunger[playerid],P_String1);
- Prozent = floatround(pStats[playerid][Durst] / 10 );
- format(P_String2,sizeof(P_String2),"Durst: %i%%",Prozent);
- TextDrawSetString(tDurst[playerid],P_String2);
- Prozent = floatround(pStats[playerid][Harndrang] / 50 );
- format(P_String3,sizeof(P_String3),"Harndrang: %i%%",Prozent);
- TextDrawSetString(tHarndrang[playerid],P_String3);
- Prozent = floatround(pStats[playerid][Energie] / 100);
- format(P_String4,sizeof(P_String4),"Energie: %i%%",Prozent);
- TextDrawSetString(tEnergie[playerid],P_String4);
- return 1;
- }
- stock Ist_Am_Essenspunkt(playerid)
- {
- for(new i;i < MAX_ESSENSPUNKTE;i++)
- {
- if(IsPlayerInRangeOfPoint(playerid, 7.0, pEssenspunkt[i][Pos_X],pEssenspunkt[i][Pos_Y],pEssenspunkt[i][Pos_Z]))
- {
- return 1;
- }
- }
- return 0;
- }
- stock GetName(playerid)
- {
- new name[MAX_PLAYER_NAME];
- GetPlayerName(playerid,name,sizeof(name));
- return name;
- }
- public OnFilterScriptInit()
- {
- print("\n--------------------------------------");
- print(" Stats Filterscript - KingClem [1.1]");
- print("--------------------------------------\n");
- SetTimer("Stats_Timer",TIMER_INTERVAL,true);//Timer erstellen
- new Save_Str[40];
- format(Save_Str,sizeof(Save_Str),"%s","KingClem_Stats/config.KC");
- if(fexist(Save_Str))//wenn speicherdatei existiert
- {
- for(new i;i < MAX_ESSENSPUNKTE;i++)
- {
- new Str[30];
- format(Str,sizeof(Str),"Pos_X_%i",i);//String erstellen ,Pos_X_0,Pos_X_1 ,Pos_X_2,usw...
- if(dini_Float(Save_Str,Str) >= 1)//Wenn Pos_X größer oder gleich 1 ist,mache weiter
- {
- pEssenspunkt[i][Pos_X] = dini_Float(Save_Str,Str);//Wert auslesne & eintragen
- format(Str,sizeof(Str),"Pos_Y_%i",i);
- pEssenspunkt[i][Pos_Y] = dini_Float(Save_Str,Str);
- format(Str,sizeof(Str),"Pos_Z_%i",i);
- pEssenspunkt[i][Pos_Z] = dini_Float(Save_Str,Str);
- Erstellte_Punkte++;//Einen Punkt mehr :D
- CreatePickup(1240, 1, pEssenspunkt[i][Pos_X],pEssenspunkt[i][Pos_Y], pEssenspunkt[i][Pos_Z], -1);
- //Herz erstellen
- Create3DTextLabel("[ESSENSPUNKT]\n/essen um zu essen.",0xFFFFFFFF,pEssenspunkt[i][Pos_X],pEssenspunkt[i][Pos_Y], pEssenspunkt[i][Pos_Z],30,0);
- //Text erstellen :D
- print("Essenspunkt erstellt.");
- }
- }
- }else{
- dini_Create(Save_Str);
- for(new index; index <= MAX_ESSENSPUNKTE; index++)
- {
- new Str[30];
- format(Str,sizeof(Str),"Pos_X_%i",index);//String erstellen ,Pos_X_0,Pos_X_1 ,Pos_X_2,usw...
- dini_FloatSet(Save_Str,Str,0);
- format(Str,sizeof(Str),"Pos_Y_%i",index);
- dini_FloatSet(Save_Str,Str,0);
- format(Str,sizeof(Str),"Pos_Z_%i",index);
- dini_FloatSet(Save_Str,Str,0);
- }
- }
- return 1;
- }
- public OnGameModeExit()
- {
- new Save_Str[40];
- format(Save_Str,sizeof(Save_Str),"%s","KingClem_Stats/config.KC");
- if(fexist(Save_Str))//wenn speicherdatei existiert
- {
- for(new i;i <= MAX_ESSENSPUNKTE;i++)//schleife...
- {
- new Str[30];
- format(Str,sizeof(Str),"Pos_X_%i",i);//String erstellen ,Pos_X_0,Pos_X_1 ,Pos_X_2,usw...
- dini_FloatSet(Save_Str,Str,pEssenspunkt[i][Pos_X]);//Und abspeichern :D
- format(Str,sizeof(Str),"Pos_Y_%i",i);
- dini_FloatSet(Save_Str,Str,pEssenspunkt[i][Pos_Y]);
- format(Str,sizeof(Str),"Pos_Z_%i",i);
- dini_FloatSet(Save_Str,Str,pEssenspunkt[i][Pos_Z]);
- }
- }
- return 1;
- }
- public OnFilterScriptExit()
- {
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- new Stats_Str[126];
- format(Stats_Str,sizeof(Stats_Str),"KingClem_Stats/%s_Stats.KC",GetName(playerid));//Speicherpfad erstellen
- if(fexist(Stats_Str))//Wenn speicherdatei existiert
- {
- pStats[playerid][Hunger] = dini_Int(Stats_Str,"Hunger");//Hunger auslesen
- pStats[playerid][Durst] = dini_Int(Stats_Str,"Durst");//Durst auslesen
- pStats[playerid][Harndrang] = dini_Int(Stats_Str,"Harndrang");//Harndrang auslesen
- pStats[playerid][Energie] = dini_Int(Stats_Str,"Energie");//Energie auslesen
- }else{//wenn speicherdatei nicht existiert
- dini_Create(Stats_Str);//Speicher Datei erstellen
- pStats[playerid][Hunger] = 1000;//wert auf 100% stellen
- pStats[playerid][Durst] = 1000;//Wert auf 100% stellen
- pStats[playerid][Harndrang] = 5000;//Wert auf 100% stellen
- pStats[playerid][Energie] = 10000;//Wert auf 100% stellen
- print(Stats_Str);//Pfad in CMD ausgeben
- print("[KingClem_Stats] Datei wurde erstellt.");//In CMD ausgeben ,dsa datei erstellt wurde
- }
- //====TEXTDRAW======
- tBugFix[playerid] = TextDrawCreate(470,170," ");
- tUeberschrift[playerid] = TextDrawCreate(470,170," Stats");
- TextDrawLetterSize(tUeberschrift[playerid],0.4,1.1);//Größe der Buchstaben
- TextDrawFont(tUeberschrift[playerid],1);//Schriftart auswählen
- TextDrawSetShadow(tUeberschrift[playerid],2);//Schatten erstellen?
- TextDrawSetOutline(tUeberschrift[playerid],1);//umrandung
- TextDrawUseBox(tUeberschrift[playerid] , 1);//Box erstellen
- TextDrawBoxColor(tUeberschrift[playerid],0x000000FF);//Box farbe festlegen
- TextDrawShowForPlayer(playerid,tUeberschrift[playerid]);//Text anzeigen
- tHunger[playerid] = TextDrawCreate(470,180,"Hunger: Laden..");
- TextDrawLetterSize(tHunger[playerid],0.4,1.1);
- TextDrawFont(tHunger[playerid],1);
- TextDrawSetShadow(tHunger[playerid],2);
- TextDrawSetOutline(tHunger[playerid],1);
- TextDrawUseBox(tHunger[playerid] , 1);
- TextDrawBoxColor(tHunger[playerid],0x000000FF);
- TextDrawShowForPlayer(playerid,tHunger[playerid]);
- tDurst[playerid] = TextDrawCreate(470,190,"Durst: Laden..");
- TextDrawLetterSize(tDurst[playerid],0.4,1.1);
- TextDrawFont(tDurst[playerid],1);
- TextDrawSetShadow(tDurst[playerid],2);
- TextDrawSetOutline(tDurst[playerid],1);
- TextDrawUseBox(tDurst[playerid] , 1);
- TextDrawBoxColor(tDurst[playerid],0x000000FF);
- TextDrawShowForPlayer(playerid,tDurst[playerid]);
- tHarndrang[playerid] = TextDrawCreate(470,200,"Harndrang: Laden..");
- TextDrawLetterSize(tHarndrang[playerid],0.4,1.1);
- TextDrawFont(tHarndrang[playerid],1);
- TextDrawSetShadow(tHarndrang[playerid],2);
- TextDrawSetOutline(tHarndrang[playerid],1);
- TextDrawUseBox(tHarndrang[playerid], 1);
- TextDrawBoxColor(tHarndrang[playerid],0x000000FF);
- TextDrawShowForPlayer(playerid,tHarndrang[playerid]);
- tEnergie[playerid] = TextDrawCreate(470,210,"Energie: Laden..");
- TextDrawLetterSize(tEnergie[playerid],0.4,1.1);
- TextDrawFont(tEnergie[playerid],1);
- TextDrawSetShadow(tEnergie[playerid],2);
- TextDrawSetOutline(tEnergie[playerid],1);
- TextDrawUseBox(tEnergie[playerid], 1);
- TextDrawBoxColor(tEnergie[playerid],0x000000FF);
- TextDrawShowForPlayer(playerid,tEnergie[playerid]);
- for(new i;i < Erstellte_Punkte; i++)
- {
- SetPlayerMapIcon( playerid, i, pEssenspunkt[i][Pos_X],pEssenspunkt[i][Pos_Y], pEssenspunkt[i][Pos_Z], 10, 0, 0 );
- }//Erstellte Punkte werden geladen & dort werden MapIcon's und Pickups erstellt.
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- new Stats_Str[126];
- format(Stats_Str,sizeof(Stats_Str),"KingClem_Stats/%s_Stats.KC",GetName(playerid));//string für speicherdatei
- if(fexist(Stats_Str))//existiert die Speicher datei?
- {
- dini_IntSet(Stats_Str,"Hunger",pStats[playerid][Hunger]);//abspeichern
- dini_IntSet(Stats_Str,"Durst",pStats[playerid][Durst]);
- dini_IntSet(Stats_Str,"Harndrang",pStats[playerid][Harndrang]);
- dini_IntSet(Stats_Str,"Energie",pStats[playerid][Energie]);
- }
- return 1;
- }
- public OnPlayerCommandText(playerid, cmdtext[])
- {
- if(strcmp("/essen",cmdtext,true)==0)
- {
- if(!Ist_Am_Essenspunkt(playerid)) return SendClientMessage(playerid,COLOR_RED,"Du bist an keinem Essenspunkt.");
- ApplyAnimation(playerid,"FOOD","EAT_Burger",4.1,0,1,1,0,5000);//annimation starten
- GivePlayerMoney(playerid,-(ESSEN_KOSTEN));//kosten für essen
- pStats[playerid][Hunger] = 1000; //keinen hunger mehr
- Force_Update(playerid);//Textdraw's updaten
- return 1;
- }
- if(strcmp("/trinken",cmdtext,true)==0)
- {
- ApplyAnimation(playerid,"VENDING","VEND_Drink_P",4.1,0,1,1,0,3000);
- GivePlayerMoney(playerid,-(TRINKEN_KOSTEN));
- pStats[playerid][Durst] = 1000;
- Force_Update(playerid);
- return 1;
- }
- if(strcmp("/pinkeln",cmdtext,true)==0)
- {
- SetPlayerSpecialAction(playerid,68);
- pStats[playerid][Harndrang] = 5000;
- Force_Update(playerid);
- return 1;
- }
- if(strcmp("/essenspunkt",cmdtext,true)==0)
- {
- if(!IsPlayerAdmin(playerid))return SendClientMessage(playerid,COLOR_RED,"[KC] Du musst als RCON Admin eingeloggt sein!");
- new Float:X,Float:Y,Float:Z;
- GetPlayerPos(playerid,X,Y,Z); //aktuelle Spielerposition ermitteln
- pEssenspunkt[Erstellte_Punkte][Pos_X] = X;//Positionen eintragen
- pEssenspunkt[Erstellte_Punkte][Pos_Y] = Y;
- pEssenspunkt[Erstellte_Punkte][Pos_Z] = Z;
- Erstellte_Punkte++;//Angeben das ein Punkt mehr existiert
- SendClientMessage(playerid,COLOR_RED,"[KC] Essenspunkt erstellt.Nach GMX sichtbar.");//User mitteilung :D
- return 1;
- }
- /* if(strcmp("/test",cmdtext,true)==0)
- {
- Force_Update(playerid);
- return 1;
- }
- */
- if(strcmp("/schlafen",cmdtext,true)==0)
- {
- Einschlafen(0,playerid);
- return 1;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement