Beiträge von Jameso

    Problem mit dem Mauszeiger auf den Textdraws hat sich geklärt. es lag an der X coordinate von der Box im zentrierten Textmodus. Diese sind unsichtbar und sieht man nicht.


    C
    public OnPlayerClickTextDraw(playerid, Text:clickedid)
    {
    	if(clickedid == INVALID_TEXT_DRAW)
    	{
    		PlayerTextDrawHide(playerid, X);
    		CancelSelectTextDraw(playerid);
    		return 1;
    }
        return 0;
    }

    Ich kriege ein Tagmismatch in der if Abfrage Zeile.

    Ja es sind 3-4 übereinander aber da ist schon ein Abstand so ist es ja nicht. Jap richtig verstanden. Oben geht es aber dann bei den folgenden nicht. Es liegt daran, dass die Clickarea irgendwie nach unten sehr lang ist (?)


    Box entfernt, selbes Problem. Dazu habe ich noch eine Frage:
    Wenn ich mit ESC aus dem SelectTextDraw Modus gehe, wie kriege ich es hin, dass die Textdraws mit verschwinden? Ich habe nichts dazu gefunden

    Ich habe noch keine Funktion, ich habe den Spieler nur in den Modus gesetzt SelectTextDraw(playerid, 0x00FF00FF);
    Dort, passiert das was ich im Beitrag davor erklärt haben, wenn ich mit der Maus drüber gehe anklicken würde genauso sein.

    Hmm, ich hab ein Problem, weiß einer woran das liegt und wie ich den Fehler beheben kann?


    Ich lasse mir 3 ClickableTextdraws untereinander anzeigen .
    Gehe ich mit dem Mauszeiger auf die erste Option wird nur das erste markiert (richtig so)


    Option 1
    Option 2
    Option 3


    Gehe ich mit dem Mauszeiger auf die letze Option werden alle 3 markiert


    Option 1
    Option 2
    Option 3


    Was kann ich tun?




    C
    GetPlayerFacingAngle(playerid,angle);
    	    TogglePlayerControllable(playerid, 0);
    	    SetPlayerFacingAngle(playerid,angle);

    Irgendwie freezed er den Spieler genauso wie am Anfang indem er die View wieder nach vorne setzt.

    Ich benutze klickable Textdraws, wie versetzte ich den Spieler in dem Modus, dass man sein Mauszeiger sieht und er die anklicken kann?


    Dazu, kann man TogglePlayerControllable(playerid, 0); ausbesseren, passiert das, wird die view vom Spieler nach vorne gesetzt, ich will aber das er die jetzige view freezed

    Mal was neues in SA:MP!
    Mich interessiert, ob das ganze in der SA:MP Version 0.3.7-R3 kreiert worden ist.
    Bis zu der Sekunde 0:06 gefiel mir alles gut. Es wirkt sehr unprofessionell, dass dieses Dialog angezeigt wird.


    Mein Tipp!
    Es gibt Klickable Textdraws, man kann das so gestalten, dass man sein Passwort einfach sofort in diesem Textdraw eingeben kann. Ich habe dies schon mal gesehen und es ist Möglich.
    Drückt man auf Anmelden und es wurde kein Passwort zu dem Benutzernamen eingegeben, wird man freundlich darauf hingewiesen das Passwort im Passwort-Feld einzugeben.


    Da ich seit 2015 Designer bin, kann ich zum Design sagen, dass es sehr gelungen ist. Ich finde man könnte noch verschiedene Farben einbauen und das ganze wird beim Login in einem Random ausgewählt (heißt: Jetzt ist es blau vielleicht noch das Bild in anderen Farben). Die Fonts gefallen mir persönlich nicht bzw. Die Domain die scheinbar in kursiv geschrieben ist.


    Im Ganzen, sehr schön♥

    Hey,
    Ich hoffe hier sind einige unterwegs die sich mit VServern auskennen. Vielleicht ist ein VServer auch nicht das Richtige?


    Vorab weiß ich nicht, ob Windows oder Linux Server einen Unterschied haben? Windows Server sind teurer habe ich gesehen.


    Ich habe Strato.de entdeckt und finde die Server nicht schlecht (25€ im Monat)

    • 16 CPU vCores
    • 32 GB RAM garantiert
    • 1 TB SSD
    • Anbindung bis zu 1.000 MBit/s
    • Traffic Unlimited


    Ich möchte auf diesen VServer folgende Sachen laufen lassen.

    • SA:MP Server
    • Datenbank
    • Forum
    • Control Panel


    Kann ich auf diesen VServer alles drauf laufen lassen? Oder sind die VServer nur für Gameserver und nicht Webserver etc.

    C
    stock GetDoorPos(playerid)
    {
    	if(IsPlayerInRangeOfPoint(playerid,2.0,/*...*/)) return 0;
    	if(IsPlayerInRangeOfPoint(playerid,2.0,/*...*/)) return 1;
    	if(IsPlayerInRangeOfPoint(playerid,2.0,/*...*/)) return 1;
    	return -1;
    }

    Wie geht das denn anders @Jeffry. Irgendwie versteh ich die returns nicht. So hat es funktioniert bei den ersten beiden, trage ich in Zeile 4. return 0; ein habe ich das Problem an einer anderen Tür



    Zitat von Jeffry

    Warum bekommst du sonst Errors? Der Spieler kann ja eigentlich nur im Umkreis einer Tür sein.

    http://prntscr.com/ne6avq, ich will halt dazu noch abfrage ob er halt in der Nähe von einer dieser Türen ist, wenn nicht soll halt eine SendClientMessage kommen die sagt, dass er nicht in der Nähe von einer Tür ist. Ich würde halt richtig Stumpf alle Koordinaten in ein Array packen, es ist halt nicht der Sinnvollste Weg, deswegen frage ich :D

    Irgendwie sagt er mich, dass die Tür bereits geöffnet ist, aber nur bei Case 2. Heißt er sagt mir nur, dass die Tür auf ist und es passiert nichts.


    Kann ich irgendwie abfragen, ob der Spieler in der Range von allen GetDoorPos is, damit ich eine return message mit einbauen kann, ansonsten kriege ich Errors, wenn ich nicht in der nähe die Sachen abfrage.


    C
    stock GetDoorPos(playerid)
    {
    	if(IsPlayerInRangeOfPoint(playerid,2.0,/*...*/)) return 0;
    	if(IsPlayerInRangeOfPoint(playerid,2.0,/*...*/)) return 1;
    	if(IsPlayerInRangeOfPoint(playerid,2.0,/*...*/)) return 1;
    	return -1;
    }


    Code
    new i = GetDoorPos(playerid);
    	if(DoorOpen[i] == 1)
    	{
            SendClientMessage(playerid,-1,"tür ist bereits auf");
    	}
    C
    else
    	{
    		if(i == -1) return 1;
    		switch(i)
    		{

    Hey,
    So öffne ich eine Tür

    C
    new i = GetDoorPos(playerid);
    if(i == -1) return 1;



    Code
    stock GetDoorPos(playerid)
    {
    	if(IsPlayerInRangeOfPoint(playerid,2.0,/*...*/)) return 0;
    	if(IsPlayerInRangeOfPoint(playerid,2.0,/*...*/)) return 1;
    	if(IsPlayerInRangeOfPoint(playerid,2.0,/*...*/)) return 1;
    	return -1;
    }
    C
    case 0:
    			{
    			    new Float:x,Float:y,Float:z;
    			    GetDynamicObjectPos(Door[i],x,y,z);
    			    MoveDynamicObject(Door[i], x-1.6816,y,z,1);
    				DoorOpen[i] = 1;
    			}


    Das funktioniert ja. ich habe immer eine Tür und kriege sie auf.
    Jetzt ist das Problem, dass ich zwei Türen öffnen muss (doppeltür)



    C
    case 2: //doppeltür
    			{
    			    new Float:x,Float:y,Float:z;
    			    GetDynamicObjectPos(Door[2],x,y,z);
    				MoveDynamicObject(Door[2], x+1,092,y,z,1);
    			    GetDynamicObjectPos(Door[3],x,y,z);
    				MoveDynamicObject(Door[3], x-1,092,y,z,1);
    				DoorOpen[i] = 1;
    			}

    http://prntscr.com/ne52ug


    Das ganze passiert nur, wenn ich bei Case 2 nicht i sondern die richtigen Zahlen von der Tür eintrage.



    Ist nur eine kleiner Fehler wahrscheinlich den ich nicht finde... :D

    Hi,
    Ich habe hier Türen, beim öffnen frage ich ab, ob diese Tür bereits offen ist (Zeile 11.)
    Dafür habe ich eine globale Variable erstellt, jetzt habe ich mehrere Türen.


    Es wäre ja nicht schlau, wenn ich in Zeile 16. erneut eine Globale Variable erstelle wie z.b IsDoor2Opened


    C
    if(Building[i_id][IsInteriorClosed] == 1) return SendClientMessage(playerid, 0xFF0000FF, "[Error] Dieses Interior ist gesperrt.");

    Ich hab die Abfrage verändert, ich brauch die Abfrage aber beim Eingang und nicht Ausgang vom Interior (heißt vor dem else teil). Dazu brauch jedes eigene Building, was schließbar ist einen eigenen return Text, wie mache ich das?


    Könnte ich zuerst abfragen ob IsInteriorClosed > als 0 ist und dann abfragen ob es 1, 2 , 3 , 4 ist jede Zahl hat dann sein eigen return Text und sein eigenes Building?


    Wenn ich die Zeile vor Zeile 3. schreibe, erscheint ein Error in der Konsole


    Code
    [15:30:40] [debug] #0 00029f4c in public OnPlayerKeyStateChange (0, 144, 128) from /*X*/.amx
    [15:30:41] [debug] Run time error 4: "Array index out of bounds"
    [15:30:41] [debug]  Attempted to read/write array element at negative index -1



    Mir ist gerade auch noch unklar wie ich in einem anderen Code das richtige Interior schließe bzw. öffne.


    hier möchte ich das Building Nummer 3 schließen.
    würde Building[3][IsInteriorClosed] = 1; ausreichen?

    C
    case 0:
    			{
                                   Building[3][IsInteriorClosed] = 1
    			}

    Ich versteh es nicht. Ich will, dass man das TextLabel nicht durch Objekte sehen kann, heißt Testlos = 0

    C
    CreateDynamic3DTextLabel("X", YELLOW,x,y,z, 6.0);

    füge ich hiernach 0, 0 , 0 ein sehe ich das TextLabel nicht einmal



    CreateDynamic3DTextLabel(const text[], color, Float:x, Float:y, Float:z, Float:drawdistance, attachedplayer = INVALID_PLAYER_ID, attachedvehicle = INVALID_VEHICLE_ID, testlos = 0, worldid = -1, interiorid = -1, playerid = -1, Float:distance = 100.0); 

    C
    {"X",0,0,/*Eingang*/X, Y, Z,/*Ausgang*/0,0,X, Y, Z,-1},
    {"Y",1,0,/*Eingang*/X, Y, Z,/*Ausgang*/0,0,X, Y, Z,0}

    Ich will, dass ein Eingang mit einem Befehl Ein- und Ausschaltbar ist. Ist nichts schweres, aber ich weiß nicht wie ich hier abfrage, ob der Wert IsAllowedToEnter = 1 ist bei Gebäude Y