Beiträge von FACE

    Guten Tag,
    ich hab die Tage ein altes Script wiedergefunden und werde dieses fix umbauen, sodass sich "Hilfsbedürftige" auf dem Server melden können.
    Es wird mehrere Virtual Worlds für alle Scripting-Teachers geben, in denen diese mit euch kleinere Filterscripts und sonstiges erarbeiten können.
    Somit könnt ihr das auch direkt auf dem Server testen.
    Ihr kommt in das Café, sucht euch einen freien Teacher, könnt mit ihm im TS plappern und in der Virtual World eure Scripts, peu à peu erarbeiten..


    Danke an BlackAce für deine kleine Feedback bzgl. der Map.


    Das Ganze soll hier nun erstmal als kleine Meinungsumfrage gelten, um mögliches Interesse
    an diesem Projekt herauszufinden..


    Also gebt mir mal Feedback, wie ihr die Idee so findet ;)
    Gruß, FACE.

    Ich habe statt den Krankenwagen IDs (wofür man die Schleife benötigt), einfach gefragt, ob das Auto das Modell eines Krankenwagens hat ^^
    Analogon: "Ist das Auto ein Polizeiwagen, dann ...". Es gibt ja feste ModelIDs, die den Typ des Fahrzeuges festlegen.


    Zum Beispiel benötigt bei AddStaticVehicle(modelid,...); genauso bei CreateVehicle(modelid, ...). Das ist immer der erste Wert dabei ;)

    Das array ist falsch aufgebaut, oder ?? ;)

    new Buycars[4][AKInfo] = {
    {604,"Glendale Shit","Stage 25",750,770,-1333,13,180},
    {605,"Sadler Shit","Stage 25",764,-1333,13,180},
    {542,"Clover","Stage 25",1500,758,-1333,13,180},
    {466,"Glendale","Stage 25",1250,752,-1333,13,180}
    };


    Probiers mal so =)


    Ich hätte mir das enum dazu gespart..
    Das Array alleine tuts auch..
    Zugreifen kann man dann auf die Werte wie folgt:

    //Zb für den Autonamen , nehmen wir mal den Glendale
    Buycars[3][2]//der 3. (von 0 aus also der 4.) Beitrag, der 2. Wert ..

    ich finde die lösung mit der schleife blöd ;)


    Sollte doch eigentlich über eine Modelabfrage gehen, oder ??

    if(newstate==PLAYER_STATE_DRIVER)
    {
    if(GetVehicleModel(GetPlayerVehicleID(playerid))==416)//Krankenwagen
    {
    if(GetPVarInt(playerid,"Fraktion")!=2)
    {
    RemovePlayerFromVehicle(playerid);
    SendClientMessage(playerid,ROT,"Du hast keine Schlüssel für dieses Auto.");
    }
    }
    return 1;
    }

    Ich bin ebenfalls gegen erotische Avatare, jedoch liegt die Schwelle für Erotik bei jedem wo anders..
    Der Punkt ist nicht, dass ich mich befremdet fühle, sondern dass ich den User nicht ernst nehmen kann,
    der sich solch einen Avatar gesetzt hat ^^

    Also das ist ja ein wenig lang...
    Kürzen wir das erstmal, nech ? ;)


    Korrektur gibts gleich dazu..


    Oben im Script definieren wir die Skins.
    Ist doch deutlich kürzer ^^

    new skin[20] = {217,6,19,20,21,22,23,24,25,26,29,211,55,56,69,85,90,152};


    Skins werden beim Laden des Gamemodes eingefügt..OnGameModeInit

    public OnGameModeInit()
    {
    for(new i=0;i<sizeof(skin);i++) { AddPlayerClass(skin[i],1765.7042,-1896.7614,13.5632,270.0272,0,0,0,0,0,0); }
    return 0;
    }


    Wenn der Spieler die Skins via Class-Selection durchblättert..

    public OnPlayerRequestClass(playerid, classid)
    {
    SetPlayerPos(playerid,1452.0470,-783.4221,93.4974);
    SetPlayerFacingAngle(playerid,9.9160);
    SetPlayerCameraPos(playerid,1448.8243,-776.7798,94.2226);
    SetPlayerCameraLookAt(playerid,1452.0470,-783.4221,93.4974);
    return 1;
    }


    Wenn er versucht zu spawnen (aus der Class-Selection heraus),
    dann speichern wir den Skin, sonst speichern wir den jedes Mal und überschreiben wieder. Das kostet Performance.

    public OnPlayerRequestSpawn(playerid)
    {
    SetPVarInt(playerid,"Skin",GetPlayerSkin(playerid));
    return 1;
    }



    Nun zu deiner Load Function.. Die Save Function sieht ja augenscheinlich ganz in Ordnung aus..
    Auch das Auslesen beim Loading sieht in Ordnung aus, jedoch ist das mit den Skins mir vieeeel zu lang ;)


    Ersetz also bitte ALLE! Zeilen die sooo aussehen.:
    if(GetPVarInt(playerid,"Skin")==152)
    {
    SetPlayerSkin(playerid,152);
    }


    durch diese eine ;)

    SetPlayerSkin(playerid,GetPVarInt(playerid,"Skin"));

    Jetzt reitet noch alle drauf rum :D
    (Ich mag halt kein sscanf. )


    Anbei noch ein Fehler der mir aufgefallen ist.. (für alle anderen Leser.)

    ...
    else if(SpielerInfo[pID][Wanteds] >= 30) { SetPlayerWantedLevel(pID,3); }
    else if(SpielerInfo[pID][Wanteds] >= 30) { SetPlayerWantedLevel(pID,4); }
    else if(SpielerInfo[pID][Wanteds] >= 30) { SetPlayerWantedLevel(pID,5); }
    else if(SpielerInfo[pID][Wanteds] >= 30) { SetPlayerWantedLevel(pID,6); }
    ..
    //Da soll sich das Programm mal entscheiden, was es nun geben will =)

    Der Threadsteller weiß ja anscheinend nichts von Pawn.
    Jetzt meinst du, er soll das mal eben neu compilen, wenn er nichtmal weiß,
    wo sich der Editor dazu befindet?? :pinch:


    Dieselbe Geschichte ist es mit den Koordinaten für das Tor.


    Wir müssen ihm das schon ein wenig genauer erläutern..
    Also: Einfach und gut strukturiert erklären, sodass er es auch als Anfänger versteht.

    Code
    c - A character.
    	d, i - An integer.
    	h, x - A hex number (e.g. a colour).
    	f - A float.
    	s - A string.
    	z - An optional string.
    	pX - An additional delimiter where X is another character.
    	'' - Encloses a litteral string to locate.
    	u - User, takes a name, part of a name or an id and returns the id if they're connected.


    Letzte Zeile besagt, dass dies auch einen Namen oder einen Teil Namen auslesen kann.
    Ich habe dies nunmal als potentielle Fehlerquelle angesehen.
    (Arbeite im Übrigen auch nicht besonders gerne mit sscanf ^^ )


    Nicht böse gemeint, aber inwiefern bringt jetzt dein Beitrag das Thema weiter??
    Der annähernd gleiche Inhalt wurde bereits weiter oben schon dargebracht..

    Zitat

    Face das ist nicht ganz richtig mit u kannst du die spielerid und den namen als parameter nehmen

    Wir benötigen dafür den Quellcode.
    Im "gamemodes" ordner in deinem Server-Verzeichnis sollte sich eine Datei wiederfinden, die den Namen deines Gamemodes trägt.
    Es gibt dann zwei Dateien, eine hat die Endung .amx, die andere .pwn. Letztere sollte sich mit dem Programm "Pawno" öffnen lassen.
    (Auch das Programm Pawno lässt sich im Serverpaket finden)


    Dort sollte irgendwo stehen, wohin die Gates bewegt werden.
    Wenn du es mit einem Command öffnest, dann wohl unter dem Callback "OnPlayerCommandText(..)".
    Dieses lässt sich finden mithilfe der Suche Funktion (CTRL+F oder zu deutsch STRG+F)

    Ok, ich machs halt eben...

    dcmd_su(playerid,params[])
    {
    if((SpielerInfo[playerid][Fraktion] == 1 || SpielerInfo[playerid][Fraktion] == 2) && PDuty[playerid]==1)
    {


    new pID,wanteds,grund[42],string1[128],strin2[128],spieler[MAX_PLAYER_NAME];
    if(sscanf(params,"dds",pID,wanteds,grund)) return SendClientMessage(playerid,weiß,"Verwendung: /su [playerid] [Wanteds] [Grund]");

    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,weiß,"Dieser Spieler ist nicht online.");
    if(wanteds < 1 || wanteds > 60) return SendClientMessage(playerid,weiß,"Du kannst nur zwischen 1 & 60 Wantedpunkten vergeben.");


    //Bis hierhin sollte erstmal alles reibungslos funktionieren..


    SpielerInfo[pID][Wanteds] += wanteds;
    if(SpielerInfo[pID][Wanteds]<10) { SetPlayerWantedLevel(pID,0); }
    else if(SpielerInfo[pID][Wanteds]<20) { SetPlayerWantedLevel(pID,1); }
    else if(SpielerInfo[pID][Wanteds]<30) { SetPlayerWantedLevel(pID,2); }
    else if(SpielerInfo[pID][Wanteds]<40) { SetPlayerWantedLevel(pID,3); }
    else if(SpielerInfo[pID][Wanteds]<50) { SetPlayerWantedLevel(pID,4); }
    else if(SpielerInfo[pID][Wanteds]<60) { SetPlayerWantedLevel(pID,5); }
    else if(SpielerInfo[pID][Wanteds]>=60) { SetPlayerWantedLevel(pID,6); }


    GetPlayerName(playerid,spieler,sizeof spieler);
    format(string1,sizeof string1,"** Du hast %d Wantedpunkte erhalten.**",wanteds);
    SendClientMessage(pID,hellblau,string1);
    format(string2,sizeof string2,"** Erhalten von: %s, Grund: %s.",spieler,grund);
    SendClientMessage(pID,hellblau,string2);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(!(IsPlayerConnected(i))){ continue;}
    if(SpielerInfo[i][Fraktion] == 1 || SpielerInfo[i][Fraktion] == 2)
    {
    SendClientMessage(i,hellblau,"** !! Es wurden Wantedpunkte vergeben. !! **");
    }
    }



    } else {SendClientMessage(playerid,weiß,"Du bist nicht befugt diesen Befehl auszuführen."); }
    return 1;
    }


    Beachte jedoch, dass mehr als 60 Wanted möglich ist. Es wird nur geprüft, dass nicht mehr als 60 hinzugegeben werden können. Hat der Spieler zum Beispiel
    schon 40 Wanteds und es werden 50 hinzugegeben, klappt das reibungslos und er hat am Ende halt 90..


    (Wie immer rein ausm Kopf hier im Schnell-Antwort Editor geschrieben, also keine Garantie. Soll ja auch kein Vorkauen sein, sondern eine Hilfestellung ;) )

    ich hab ja bereits den quellcode für einen Abfrage command dazu geschrieben..
    Das mit dem Erstellen der Liste beim Connect ist schwachsinn, da sich die Liste bis dato dauerhaft ändern kann..