Beiträge von SarahCool565

    6/10


    Ich habe keine Fahrräder gesehen, und das nur so hinschreiben find ich bisschen doof muss ich ehrlich sagen.
    Das flackern ist selbst mir aufgefallen. Also bitte einfach die Bugs beheben.
    Die Musik hat mir im Youtube Video nicht gefallen aber darum geht es auch nicht.
    Die anderen Nutzer gaben dir 7/10 was ich mir nich erklären kann. Ich habe kein einziges Fahrrad gesehen nur diese Schrift unten links und wenn man etwas vorstellen möchte (was Mapping angeht) sollte man (meine Meinung nach) es auch fertig haben. Die Helme haben gut dahin gepasst, und diese "Sitzmöglichkeit" finde ich auch ganz nett nur das es in San Andreas schwierig wird sich hinzusetzen. (Ohne Befehle wie /groundsit oder so)

    Wenn du eine Skin Auswahl machen willst hilft das hier:


    SetPlayerPos(playerid,x,y,z); - hier musst deine Daten eintragen


    SetPlayerCameraPos(playerid,x,y,z); - hier musst du bzw die Kamera vor dem Spieler stehen


    SetPlayerCameraLookAt(x,y,z); - und hier die Daten von SetPlayerPos wieder einsetzen


    Hat bei mir so funktioniert.

    Es kann auch nicht gehen, wenn du einen Webspace von Square7 benutzt.
    Du benutzt die IP vom localhost, in dem Fall müsste das Script also auf dem Server vom Webspace liegen, dass ist nicht möglich.


    Ich empfehle dir mit XAMPP zu arbeiten oder dir direkt einen richtigen Server zu holen.


    Ist es denn bei XAMPP so das die Datenbank weiterläuft auch wenn man nicht eingeloggt ist?

    Dieses MySQL Problem gab es schon mal.
    Nur ich habe ein etwas wie soll ich sagen "dümmeres" Problem.


    Ich probiere schon seit einer Stunde mein Script auf MySQL Basis zu bringen, aber es geht nicht ganz. Bei dem Connect gibt es schon einige Probleme.


    Erstmal hier der Code (MrMonat Vorlage - ich habe nicht das Script mir gedownloaded wohl gemerkt):

    #define db_host "127.0.0.1"
    #define db_user "root"
    #define db_pass ""
    #define db_db "enjoyyourlife"


    Fehlermeldung:

    Zitat

    [13:25:49] [ERROR] CMySQLConnection::Connect - (error #1049) Unknown database 'enjoyyourlife'


    Es gibt aber eine Datenbank die enjoyyourlife heißt. (Square7.ch)
    Wenn ich bei "user" root sowie enjoyyourlife Eintrage, geht es nicht.


    Bild:

    SarahCool565:


    Ich denke das dies nichts besonderes ist und das sie eher Scripter mit MySQL erfahrung nehmen (wenn du welche besitzt beachte diesen abschnitt nicht)


    Ich besitze keine MySQL Erfahrung. Zumindest keine große. Ich habe früher mal eine MySQL Datenbank eröffnet für SA:MP zusammen mit meinem Freund. Aber dann verging mir die Lust und ich ließ es. Ich bin sehr gerne bereit dieses Script auch auf MySQL Basis zu schreiben. Ich möchte ebenso kein 0815 Reallife Script, wo man jede Standard Sache drin hat. Ich möchte ein Selfmade Script mit vielen neueren Funktionen.
    z.B. das man ein Betrieb hat und Arbeiter einstellen kann die man dann bezahlen muss. Das Script soll einzigartig sein, und ich kann schon verstehen das ich eventuell nicht angenommen werde. Ist für mich kein Problem. Dann Scripte ich eben ganz alleine, an meinem derzeitigen Script weiter.

    Ich bin auch für Reallife.
    Nur ich finde dann sollte man das Wort besser klären.
    Für mich ist Reallife nicht diese Score Funktion InGame. In Reallife bekommst du pro Monat Geld (in SA:MP ist es pro Stunde) aber du wirst nie Level Up in Reallife.
    Daher bin ich gerne bereit zu Scripten. Ich habe rund 1 Jahr Erfahrung mit Pawno, ich kann längst nicht alles aber bin bereit es mir anzueignen. Mein derzeitiges Script hat ~1,4k Zeilen in 4 Tagen geschafft.
    - 1 Fraktion (LSPD - Autos, und Spawnpunkt, Ingame-Color-Name festgelegt)
    - 1 Beruf (Busfahrer - 1 Strecke)
    - Login System (nicht auf MySQL Basis)
    - Stadthalle Dialog erstellt (Personalausweis anfordern und Beruf auswählen (Busfahrer geht schon und man kann den Beruf schon verwenden))
    - BSN-Shop
    in der Txt werden folgende Daten gespeichert:
    - Adminlevel
    - Level
    - Fraktion
    - Geld
    - Beruf


    Man hat diese Befehle:
    /kill /killme /telspawn /bsnshop(teleport) /gmx(Serverneustart) /heal /ban /makeadmin /kick /makeleader(Fraktion) /givemoney /tellspd (teleport - lspd)
    /makeberuf (um jemanden in den Beruf zu tun - leicht verbuggt)
    /binichadmin /quitjob /stats
    und für den Busfahrerberuf: /startlinie1


    Wohlgemerkt ich Scripte alleine und auch nicht 24/7


    Worauf ich stolz bin, ich hatte eine Pause von gut 4-5 Monaten und hab innerhalb 4 Tagen mir wieder vieles angeeignet. Nicht alles, aber vieles.
    Eigene Stocks (kleinere Befehle) kann ich selber erstellen wie z.B. "IstSpielerInBeruf"


    Ich würde mich bereitstellen zum Scripten.

    Was hast du gemacht? ^^
    sSpieler hast du doch bereits definiert, da kann eins von weg.
    Dann kannst du das so löschen.


    Also wie soll ich das jetzt machen?



    new Spieler[playerid][BusLinie];

    klappt nicht wegen "playerid."


    Ich könnte höchstens

    new bSpieler[MAX_PLAYERS][BusLinie];

    probieren aber ob das klappen würde ist fraglich.


    Also gehen tut es auch nicht.
    Da sagt er mir: "array index out of bounds (variable "bSpieler")"

    sSpieler funktioniert nicht.


    Zitat

    error 017: undefined symbol "playerid"
    error 021: symbol already defined: "sSpieler"


    Kann man da nicht einfach anstatt sSpieler z.B. SSpieler machen?


    Gut. Also wenn ich SSpieler nehme kommt der "already" Error nicht mehr.
    Aber eben "undefined symbol "playerid""


    Du sollst das ja auch in deinem Enum deklarieren, und nicht immer lokal.
    Falls du nicht weißt, wie, dann schicke uns mal dein Enum her (das Enum von sSpieler).


    Also mein Enum heißt "SpielerDaten"
    enum SpielerDaten{
    Adminlevel,
    Level,
    Fraktion,
    Team,
    sLogin,
    Geld,
    Beruf
    };


    new sSpieler[MAX_PLAYERS][SpielerDaten];


    Wenn ich anstatt sSpieler SpielerDaten einsetze dann funktioniert das nicht. Spieler funktioniert ebenfalls nicht.

    In sSpieler[playerid][BusLinie] würde dann das ausgewählte Listitem stehen. Sprich sSpieler[playerid][BusLinie] ist 0, wenn du die erste Linie ausgewählt hast und 1 wenn du die zweite Linie ausgewählt hast.
    machen, wenn das verständlicher ist.


    Danke das du dir die Zeit in Anspruch genommen hast.
    Immer gute Antworten parat.
    Ich werde jetzt erstmal die Linie 1 fertig machen und schauen obs klappt.
    Danke schön.


    So ich habe es jetzt probiert. Reintheoretisch funktioniert es nur.. 1. man muss linie 2 anstatt 1 auswählen und 2.
    wenn ich es bei "EnterCheckpoint" blabla tue dann weiß er nicht was Listitem ist und wenn ich es unter den "DialogResponse"
    tue dann dann kann ich nur den 1. Checkpoint abfahren und danach geht es nicht mehr weiter.


    Ganzer Code: (OnDialogResponse)

    if(dialogid == LINIE)
    {
    if(response == 0)
    {
    return 1;
    }
    else
    {
    new BusLinie;
    sSpieler[playerid][BusLinie] = listitem;
    if(sSpieler[playerid][Beruf] == 1)
    {
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 431)
    {
    DisablePlayerCheckpoint(playerid);
    if(sSpieler[playerid][BusLinie] == 1)
    {
    SendClientMessage(playerid,gelb,"Nächste Haltestelle: Stadthalle");
    SetPlayerCheckpoint(playerid,1456.0122,-1735.9861,13.0879,5.0);
    GivePlayerMoney(playerid,300);
    }
    else if(sSpieler[playerid][BusLinie] == 2)
    {
    SendClientMessage(playerid,gelb,"Nächste Haltestelle: Los Santos Police Department (LSPD)");
    SetPlayerCheckpoint(playerid,1533.0491,-1690.4596,13.0872,5.0);
    GivePlayerMoney(playerid,300);
    }
    }
    }
    }
    }


    Das geht so nicht. Das sBeruf muss in einem enum stehen, sonst läuft das auf Fehler raus.


    Achso sag das doch gleich das, dass in Enum gemeinte gemeint war.
    Das heißt "Beruf"
    Ok habs jetzt umgeändert. Nur irgendwie zeigt der mir jetzt ein Fehler an mit "Spieler"


    Mein Stock heißt ja

    stock IstSpielerInBeruf(playerid,berufsid)
    {
    if(sSpieler[playerid][Beruf] == berufsid) return 1;
    return 0;
    }


    Und dieses "if..." heißt:

    if(sSpieler[playerid][Beruf] == 1)


    Ok gut, diesesn Fehler habe ich jetzt behoben.


    Nur noch hier ein Fehler:

    new Linie;
    listitem 0 == Linie;


    da kommt: "error 001: expected token: ";", but found "-integer value-""


    Das ganze Dialog heißt:

    if(dialogid == LINIE)
    {
    if(response == 0)
    {
    return 1;
    }
    if(listitem == 0)
    {
    new Linie;
    listitem 0 == Linie;
    }
    }


    Und auftreten soll der Fehler in der Zeile:

    listitem 0 == Linie;


    Gegebenenfalls musst du noch, wenn du mehrere Checkpoints hast, die Nummer des Checkpoints innerhalb der Linie setzen und abfragen.


    PS: Unterlasse bitte diese Vollzitate mit Code, das macht keinen Sinn.


    Ah okay. Danke. Bisschen kompliziert aber musste den Code nochmal bisschen anpassen ich konnte diesen "IstSpielerInBeruf" nicht benutzen also nahm ich dafür oben den Beruf den ich definiert habe:

    #define sBeruf "Busfahrer"


    Also heißt dieser Code so:

    if(Spieler[playerid][sBeruf] == 1)
    {
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 431)
    {
    //muss ich noch umändern
    }
    }


    Okay. Also muss ich Linie noch definieren dann müsste es gehen.


    Okay danke. Und wie macht man das, das diese Route erst abgerufen wird wenn der Spieler auf Linie1 drückt?



    if(Spieler[playerid][sBeruf] == 1)
    {
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 431)
    {
    DisablePlayerCheckpoint(playerid);
    SendClientMessage(playerid,gelb,"Nächste Haltestelle: Stadthalle");
    SetPlayerCheckPoint(playerid,1456.0122,-1735.9861,13.0879,5.0);
    GivePlayerMoney(playerid,300);
    DisablePlayerCheckpoint(playerid);
    SendClientMessage(playerid,gelb,"Nächste Haltestelle: Los Santos Police Department (LSPD)");
    SetPlayerCheckPoint(playerid,1533.0491,-1690.4596,13.0872.50,5.0);
    GivePlayermoney(playerid,300);
    DisablePlayerCheckpoint(playerid);
    }
    }

    Würde das so reintheoretisch gehen?

    In diesem Beitrag möchte ich einige Commands zur "Verfügung" stellen. Für Neulinge oder auch für euch falls ihr einen vergessen habt.
    Befehle werden sein:
    /heal [ID]
    /kill [ID]
    /ban [ID]
    /givemoney [ID]


    Als erstes brauchen wir einen Stock "IstSpielerAdmin" um abzufragen ob der Spieler Admin ist. Denn solche Befehle wie /heal, /kill usw. sollte kein normaler User können (bis auf /givemoney aber das habe ich noch unter Admin-Rechte stehen)


    Der Stock sollte so aussehen:

    stock IstSpielerAdmin(playerid,level) //mit "level" bestimmen wir welchen Adminrang der Nutzer haben soll um dies benutzen zu können
    {
    if(sSpieler[playerid][Adminlevel] >= level) return 1; // Wenn vom Spieler das Adminlevel genausogroß ist wie level (oben erklärt) dann soll was passieren
    return 0;
    }


    Gut. Haben wir das schonmal geschafft. Nun kommen wir zu dem Befehl /heal
    Den Befehl habe ich mit dcmd geschrieben.



    #define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1


    Einfach nach den Includes schreiben und dann könnt ihr schon mit dcmd arbeiten.


    Zuerst gehen wir zu "OnPlayerCommandText" und schreiben nach den { }

    dcmd(heal,4,cmdtext); //die 4 steht für die Anzahl der Buchstaben in dem Wort (h-e-a-l) also 4


    Jetzt können wir wirklich unseren Befehl schreiben.


    Wir gehen dazu unter die letzte geschweifte Klammer von den OnPlayerCommandText und schreiben:

    dcmd_heal(playerid,params[]) //die Parameter werden später noch festgelegt
    {
    new i;
    if(strlen(params))
    {
    i=strval(params); //der Parameter wird festgelegt
    if(IsPlayerConnected(i)) //wenn der Spieler eingeloggt ist (i - steht für den Spieler den wir heilen wollen)
    {
    if(sSpieler[playerid][Adminlevel]>=2) //der Spieler der heilen möchte den Adminrang 2 hat
    {
    SetPlayerHealth(i,100); //soll der von dem angegebenen Spieler das Leben auf 100 machen
    SendClientMessage(i,gelb,"Du wurdest geheilt."); //Diese Message wird an die ID wiedergegeben
    SendClientMessage(playerid,gelb,"Du hast jemanden geheilt."); //Diese Message wird dir wiedergegeben
    }
    else //sollte aber der Adminrang 0 oder 1 sein
    {
    SendClientMessage(playerid,rot,"Du bist kein Admin! Oder dein Adminlevel ist zu niedrig!"); //wird die Message dir ausgegeben
    }
    }
    }
    return 1;
    }


    Die Kommentare sollten euch alles erklären.
    Kommen wir nun zu /kill dazu müssen wir unter "OnPlayerCommandText" nach der ersten geschweiften Klammer (da wo unser heal steht) dies schreiben:

    dcmd(kill,4,cmdtext); //die 4 steht wieder für die Anzahl der Buchstaben (k-i-l-l)


    Nun fügt ihr unter den OnPlayerCommandText und UNTER dem Befehl "dcmd_heal" dies ein:

    dcmd_kill(playerid,params[]) //die Parameter werden später noch festgelegt
    {
    new i;
    if(strlen(params))
    {
    i=strval(params); //wir legen gerade den Parameter fest
    if(IsPlayerConnected(i)) //wenn der angegebene Spieler eingeloggt ist
    {
    if(sSpieler[playerid][Adminlevel]>=3) //und der User der ihn töten möchte den Adminrang 3 hat
    {
    SetPlayerHealth(i,0); //soll er das leben auf 0 setzen (also töten)
    SendClientMessage(i,rot,"Du wurdest getötet."); //diese Nachricht wird an dem Spieler der getötet wurde ausgegeben
    SendClientMessage(playerid,gelb,"Du hast jemanden getötet."); //diese Nachricht wird an dir ausgegeben
    }
    else //wenn er aber Adminrang 0,1 oder 2 ist
    {
    SendClientMessage(playerid,rot,"Du bist kein Admin! Oder dein Adminlevel ist zu niedrig!"); //soll diese Message ausgegeben werden
    }
    }
    }
    return 1;
    }


    Nun kommen wir zu /ban. Dies tun wir ebenfalls mit dcmd. Wir gehen wieder unter "OnPlayerCommandText" und schreiben unter "kill" und "heal"

    dcmd(ban,3,cmdtext); // die 3 steht für die Anzahl der Buchstaben (b-a-n)


    Nun geht ihr unter die letzte geschweifte Klammer von OnPlayerCommandText und dort sehen wir die anderen dcmd Befehle.
    Nun sucht ihr einen freien Platz unter den dcmd kill und schreibt dies:

    dcmd_ban(playerid,params[]) //der Parameter wird später noch festgelegt
    {
    new i;
    if(strlen(params))
    {
    i=strval(params); //hier wird der Parameter festgelegt
    if(IsPlayerConnected(i)) //wenn der angegebene Spieler den wir bannen wollen eingeloggt ist
    {
    if(sSpieler[playerid][Adminlevel]>=5) //und der Spieler der ihn bannen möchte den Adminrang 5 hat
    {
    SendClientMessage(i,gelb,"Du wurdest gebannt."); //Diese Message wird an die ID wiedergegebe
    SendClientMessage(playerid,gelb,"Du hast jemanden gebannt."); //Diese Message wird dir wiedergegeben
    Ban(i); //soll er diesen Spieler bannen
    // macht nicht zuerst Ban(i) ansonsten bekommt er die Nachricht nicht mehr!!
    }
    else //sollte dies nicht funktionieren
    {
    SendClientMessage(playerid,rot,"Du bist kein Admin! Oder dein Adminlevel ist zu niedrig!"); //wird diese Message ausgegeben
    }
    }
    else
    {
    SendClientMessage(playerid,rot,"Der angegebene Spieler konnte nicht gefunden werden."); //ist der Spieler nicht eingeloggt kommt diese Message
    }
    }
    return 1;
    }


    Als letztes kommen wir zu /givemoney. /givemoney ist auch ein dcmd Befehl.
    Ihr geht wieder zu OnPlayerCommandText und schreibt unter dcmdban dies:

    dcmd(givemoney,9,cmdtext); //die 9 steht für die Anzahl der Buchstaben in dem Wort (g-i-v-e-m-o-n-e-y)


    Danach geht ihr zu den anderen dcmd Befehlen und schreibt unter den letzten (also ban) das hier:

    dcmd_givemoney(playerid, params[])
    {
    if(IstSpielerAdmin(playerid,3)) //wenn der Spieler den Adminrang 3 hat
    {
    new
    giveplayerid, //hier legen wir Strings fest (berichtigt mich wenn ich was falsches sage)
    amount;
    if (sscanf(params, "ud", giveplayerid, amount)) SendClientMessage(playerid, 0xFF0000AA, "Benutzung: /givemoney [ID] [SUMME]"); //wenn bei SSCANF die parameter "u" und "d" vorkommen (u steht für den Spieler und d für einen Integer)
    else if (giveplayerid == INVALID_PLAYER_ID) SendClientMessage(playerid, 0xFF0000AA, "Spieler nicht gefunden"); //sollte die PlayerID nicht vorhanden sein dann kommt die Message
    else if (amount == GetPlayerMoney(playerid)) SendClientMessage(playerid, 0xFF0000AA, "Geld konnte nicht übertragen werden.");
    else
    {
    GivePlayerMoney(giveplayerid, amount); //dann soll das Geld übertragen werden
    //GivePlayerMoney(playerid, 0 - amount); - ausgeklammert lassen sonst funktioniert der Befehl nicht mehr!
    SendClientMessage(playerid, gelb, "Geld gesendet!"); //an uns
    SendClientMessage(giveplayerid, gelb, "Geld erhalten!"); //an den angegebenen Spieler
    }
    }
    return 1;
    }


    Bei /givemoney habe ich mir Hilfe von SA:MP Wikipedia geholt da ich den Befehl selber gesucht habe und dauernd nur "Geld konnte nicht übertragen werden." Befehl bekam. (Wurde von mir auf Deutsch frei übersetzt)
    Also einfach GivePlayerMoney(playerid, 0 - amount); weg lassen!


    Die Befehle habe ich natürlich selber geschrieben (außer /givemoney)
    dann habe ich noch Befehle wie /makeberuf (einen Spieler in den Beruf tun - war mir vor 1 Tag noch nötig)
    und weitere Befehle wie /stats , /quitjob, /binichadmin, /tellspd (teleport-lspd), /gmx (Serverneustart), usw.

    Hallo. Ich bin schon am verzweifeln.
    Ich möchte Checkpoints setzen, und diese entfernen lassen SOBALD dieser erreicht wurde.
    Unter "OnPlayerEnterCheckpoint" Würde ich es nicht so gerne machen, da ich z.B. für die Stadthalle unter "Berufe" dann "Busfahrer" auch ein Checkpoint erstellen lasse.


    Könnte man es aber so machen man schreibt unter "OnPlayerEnterCheckPoint" z.B.

    Code
    if(IsPlayerInVehicle(playerid,431))
    {
     	SetPlayerCheckPoint();
     	GivePlayerMoney(playerid,300);
    }


    Weil ich schon oben drüber stehen hab

    Code
    DisablePlayerCheckpoint(playerid);


    Ich hatte alles unter "OnDialogResponse" da ich ein Dialog schrieb wo man nehmen konnte "Linie 1" oder "Linie 2" und da hab ich halt alles unter Linie 1 geschrieben.