Kleine Info vorweg dies ist mein 1 Tutorial.
Was brauchen wir:
1. Enum
2. news
3. erstellen der Objecte
4.Timer
5. Befehl
6. Dialog
1.enum
Als aller erstes erstellen wir ein enum.
enum muellEnum{
}
Nun befüllen wir den/das Enum mit:
Pfand Dies bewirkt das wir diese Anzahl an Pfandflaschen finden.
Float:m_x Dies sind die Koordinaten des Objectes und wird für den Befehl verwendet
Float:m_y Dies sind die Koordinaten des Objectes und wird für den Befehl verwendet
Float:m_z Dies sind die Koordinaten des Objectes und wird für den Befehl verwendet
Float:m_rx Dies sind die Rotations Koordinaten des Objectes
Float:m_ry Dies sind die Rotations Koordinaten des Objectes
Float:m_rz Dies sind die Rotations Koordinaten des Objectes
enum muellEnum{
pfand,
Float:m_x,
Float:m_y,
Float:m_z,
Float:m_rx,
Float:m_ry,
Float:m_rz
}
So nun haben wir schon mal das enum aber um es zu benutzen brauchen wir noch ein new.
2.news
So das muell steht für das wir es einfach muell genannt haben ihr könnt es auch anders nennen z.b flaschen.
muellEnum steht dafür das das Script weiß von welchen enum wir das gerade abziehen/benutzen.
new muell[][muellEnum] = {
};
jetzt fehlen natürlich noch die Informationen.
new muell[][muellEnum] = {
{ 2,-2271.85278, -116.37270, 34.94200, 0.00000, 0.00000, 0.00000},
{ 2,-2278.18530, -116.31293, 34.94200, 0.00000, 0.00000, 0.00000},
{ 2,-2285.54272, -116.49574, 34.94200, 0.00000, 0.00000, 0.00000}
};
Die 2 steht für die anfangs Pfandflaschen in der Mülltonne mann kann auch die Mülltonnen mit unterschiedlichen Pfandflaschen spawnen/startenlassen
Danach kommen die Koordinaten eures Objectes hier habe ich nur 3 neben einander erstellt.
Am besten erstellt ihr die Mülltonnen mit einen Editor.
Dies sollte kein Problem sein.
Nun erstellen wir noch ein new
new Flaschen[MAX_PLAYERS];
Dies brauchen wir um unsere Pfandflaschen die wir schon gesammelt haben abzufragen.
Ihr könnt die Pfandflaschen die ihr schon gesammelt habt abspeichern lassen aber das mache ich nicht in diesem Tutorial mit rein.
So der Grundbaustein ist schon gesetzt.
3.Erstellen der Mülltonnen
Dazu gehen wir unter OnGameModeInit.
Nun was brauchen wir wir brauchen eine Schleife die die Mülltonnen abfragt die wir oben alle zu stehen haben.
Das geht so.
for(new i=0; i<sizeof(muell); i++)
{
}
Dafür steht muell für unser new was wir oben erstellt haben.
Nun müssen wir das Object noch erstellen lassen.
Die 1337 steht für die ID des Objectes hier ist es die blaue Mülltonne.
muell[m_x],muell[m_y],muell[m_z] Stehen für die Koordinaten des Objectes.
muell[m_rx],muell[m_ry],muell[m_rz] Stehen für die Rotation des Objectes
CreateDynamicObject(1337,muell[i][m_x],muell[i][m_y],muell[i][m_z],muell[i][m_rx],muell[i][m_ry],muell[i][m_rz]);//man kann auch CreateObject benutzen
Dann sollte es so aussehen
for(new i=0; i<sizeof(muell); i++)
{
CreateDynamicObject(1337,muell[i][m_x],muell[i][m_y],muell[i][m_z],muell[i][m_rx],muell[i][m_ry],muell[i][m_rz]);//man kann auch CreateObject benutzen
}
So nun lassen wir die Objecte schon erstellen.
4.Timer
Wir brauchen einen Timer damit die Mülltonne ja Pfandflaschen dazu bekommen.
Dafür brauchen wir ein forward das wir einfach oben im Script erstellen.
forward Pfanddazu();
Den Timer lassen wir am besten auch unter OnGameModeInit starten lassen.
Das Pfanddazu ist einfach der Name des aufgerufenen Publics das wir noch erstellen werden.
Die 30000 steht dafür das der Timer/Public nach 30 Sekunden abgerufen wird.
Das False steht dafür das er nur ein mal Läuft.Warum seht ihr noch.Ihr könnt ihn auch Natürlich auf true setzen.
SetTimer("Pfanddazu", 30000, false);
So was soll passieren wen der Timer/Public abgerufen wird nun ja wir brauchen wieder eine schleife.
public Pfanddazu()
{
for(new i=0; i<sizeof(muell); i++)
{
}
return 1;
}
So was soll dann passieren?
wir setzen den pfand den wir oben beim enum zu stehen haben +1 oder +eure zahl die ihr wollt das bedeutet das in der Mülltonne nun 1 Pfandflasche dazu kommt.
public Pfanddazu()
{
for(new i=0; i<sizeof(muell); i++)
{
muell[i][pfand]+=1;
}
return 1;
}
Da wir aber oben den timer mit False gestzt haben machen wir nun das Noch.
Wir setzen den Timer Random damit es nicht immer einheitlich ist wie Pfand dazu kommt.
Das machen wir so.
new randomsekunden[]=
{
30,
60,
90,
180,
240,
300
};
Die zahlen stehen für die Sekunden zeit z.b 30 das bedeutet das der Timer/Public in 30 Sekunden abgerufen wird bei 60 in 60 Sekunden.
Wann Pfandflaschen dazu kommen sollen ist euch überlassen.Einfach nur die zahlen ändern.
Damit es aber auch gerandomt wird brauchen wir noch das hier.
new randomtime = random(sizeof(randomsekunden));
Die randomsekunden stehen für das new was wir gerade gemacht haben mit den random zahlen.
Schön und Gut was ist aber mit dem Timer??
Der Timer ist ganz einfach den setzt ihr unter dem random.
SetTimer("Pfanddazu", 1000*randomsekunden[randomtime], false);
So das randomsekunden[randomtime] ist einfach eine zahl von allen zahlen die wir eingetragen haben rausgesucht also gerandomt.
Die 1000* steht dafür dass wir schon 1 Sekunde haben und das mal der random zahl. Da ja der Timer in Millisekunden geht.
So sollte es dann zum Schluss aussehen.
public Pfanddazu()
{
for(new i=0; i<sizeof(muell); i++)
{
muell[i][pfand]+=1;
}
new randomsekunden[]=
{
30,
60,
90,
180,
240,
300
};
new randomtime = random(sizeof(randomsekunden));
SetTimer("Pfanddazu", 1000*randomsekunden[randomtime], false);
return 1;
}
5.Befehl
Nun zum befehl den befehl erstelle ich mit einem ocmd den nennen wir mal pfandsuchen.
als erstes brauchen wir wieder eine schleife das Heist.
ocmd:pfandsuchen(playerid,params[])
{
for(new i=0; i<sizeof(muell); i++)
{
}
}
So nun müssen wir abfragen ob der Spieler in Reichweite ist das geht so.
if(IsPlayerInRangeOfPoint(playerid,3,muell[i][m_x], muell[i][m_y], muell[i][m_z]))
Dann müssen wir abfragen ob noch Pfandflaschen in der Mülltonne sind.
if(muell[i][pfand]>=1)
Ihr könnt die 1 auch verändern je nach dem mann erst Pfandflaschen finden soll z.b erst nach 5 soll man welche finden.
Falls Pfandflaschen drinne sin lassen wir unsere Flaschen[] die wir oben definiert haben + die Pfandflaschen die in der mülltonne sind setzen.
Flaschen[playerid]+=muell[i][pfand];
Wir können auch noch eine Nachicht schicken lassen das wir welche gefunden haben z.b so
new string[150];
format(string,sizeof(string), "~w~Du hast ~g~%i ~w~Pfandflschen gefunden", muell[i][pfand]);
GameTextForPlayer(playerid, string, 3000, 4);
Dann Müssen wir die Pfandflaschen der Mülltonne wieder auf 0 setzten das geht so.
muell[i][pfand]=0;
Das wärs auch schohn
Hier seht ihr wie ich es gemacht habe.
ocmd:pfandsuchen(playerid,params[])
{
for(new i=0; i<sizeof(muell); i++)
{
if(IsPlayerInRangeOfPoint(playerid,3,muell[i][m_x], muell[i][m_y], muell[i][m_z]))
{
if(muell[i][pfand]>=1)//kann man verändern z.b da man erst ab 5 flaschen diese findet
{
Flaschen[playerid]+=muell[i][pfand];
new string[150];
format(string,sizeof(string), "~w~Du hast ~g~%i ~w~Pfandflschen gefunden", muell[i][pfand]);
GameTextForPlayer(playerid, string, 3000, 4);
muell[i][pfand]=0;
// mann kann noch eine Animation hinzufügen
return 1;
}
else
{
SendClientMessage(playerid,rot,"Die Mülltonne ist leer");// müsst ihr selber anpassen
return 1;
}
}
}
return SendClientMessage(playerid,rot,"Du bist bei keiner Mülltonne");//falls alle i durch sind kommt dass man an keiner mülltonne ist
}
6.Dialog
Jetzt brauchen wir noch einen Ort wo mann die Pfandflaschen verkaufen kann. Dies kann mann mit befehl oder Dialog machen ich mache es hier mit Dialog.
Aber dafor müssen wir noch den Dialog definieren.
#define DIALOG_LADEN 0
Die Zahl müsst ihr anpassen.
Nun müsst ihr ihn noch anzeigen lassen wo müsst ihr selber wissen.
ShowPlayerDialog(playerid,DIALOG_LADEN,DIALOG_STYLE_LIST,"24/7 Laden","Pfandflaschen verkaufen","Auswählen","Abbrechen");
Nun gehen wir unter OnDialogResponse
und erstellen ihn.
was müssen wir alles abfragen wir müssen abfragen welcher dialog??
if(dialogid==DIALOG_LADEN)
ob er überhaupt Flaschen dabei hat das machen wir mit
if(Flaschen[playerid]>=1)
wenn er welche dabei hat rechnen wir nun seine Flaschen die er dabei hat mal irgend eine zahl die ihr wollt ich nehme mal 5.
new pfandgeld=Flaschen[playerid]*5;//preis kann angepass werden das *25 steht für mal 25 also anzahl deiner pfanflschen mal 25
Nun geben wir ihn das geld und setzen seine Flaschen wieder auf 0.Euren System anpasse.
sInfo[playerid][geld]+=pfandgeld;
Flaschen[playerid]=0;
Nun kann man noch eine Message senden lassen das ist euch aber überlassen.
So sieht es bei mir aus
if(dialogid==DIALOG_LADEN)
{
if(response)
{
if(listitem==0)//bei pfand
{
if(Flaschen[playerid]>=1)
{
new string[180];
new pfandgeld=Flaschen[playerid]*5;//preis kann angepass werden das *25 steht für mal 25 also anzahl deiner pfanflschen mal 25
sInfo[playerid][geld]+=pfandgeld;
format(string, sizeof(string), "-------------Kassenbong---------------");
SendClientMessage(playerid,weiss,string);
format(string, sizeof(string), "{FAFAFA}Du hast %d Flaschen für %d{00BB00}$ {FAFAFA}verkauft",Flaschen[playerid],pfandgeld);
SendClientMessage(playerid,weiss,string);
Flaschen[playerid]=0;
}
else
{
SendClientMessage(playerid,rot,"Du hast keine Pfandflaschen");
}
}
else
{
SendClientMessage(playerid,weiss,"Beären sie uns bald wieder");
}
}
}
Ich hoffe ich konnte euch Helfem