Beiträge von Pablo Borsellino

    Die Variable alter, die du unter OnDialogResponse erstellen lässt wird nirgends gesetzt - und ist somit gleich Null. Damit es nicht zu Fehlern kommt, müsstest du diese Variable direkt bei der Erstellung setzen:
    new alter=strval(inputtext);
    oder nach der Erstellung der Variable:
    new alter;
    alter=strval(inputtext)


    Dazu kommt, wie bereits erwähnt wurde musst du bei der Enumerator 'Spieler' Variablen Setzung von 'Alter' die Funktion strval (String to Value, Text zu Zahl) verwenden.
    Spieler[playerid][Alter]=strval(inputtext);


    Um abzufragen, ob die Eingabe eine Zahl ist - empfehle ich dazu die Funktion IsNumeric:
    stock IsNumeric(const Text[])
    {
    new Laenge=strlen(Text);
    if(Laenge==0)return false;
    for(new X=0;X<Laenge;X++)
    {
    if((Text[X]>'9'||Text[X]<'0'&& Text[X]!='-'&& Text[X]!='+')||(Text[X]=='-'&& X!=0)||(Text[X]=='+'&& X!=0))
    return false;
    }
    if(Laenge==1&&(Text[0]=='-'||Text[0]=='+'))return false;
    return true;
    }


    Alles in einem zusammengefasst inkl. der Funktion IsNumeric, die du in dein Script außerhalb einer Funktion/eines Public's einfügen müsstest.
    if(dialogid==DIALOG_ALTER)
    {
    new alter=strval(inputtext);
    if(response==0)return SendClientMessage(playerid,COLOR_WHITE,"Du hast den Vorgang abgebrochen.");
    if(response==1)
    {
    if(strlen(inputtext)<1||strlen(inputtext)>3||!IsNumeric(strval(inputtext)))return SendClientMessage(playerid,COLOR_WHITE,"Du hast keine gültige Zahl eingegeben!");
    if(alter < 10)return SendClientMessage(playerid,COLOR_WHITE,"Unter 10 Jahren kriegst du leider keinen Personalausweis.");
    if(alter > 100)return SendClientMessage(playerid,COLOR_WHITE,"Kein Mensch der über 100 Jahre ist, spielt noch am Computer.");
    if(!strval(inputtext))return SendClientMessage(playerid,COLOR_WHITE,"Du hast kein Alter angegeben - Vorgang abgebrochen.");
    else
    {
    Spieler[playerid][Alter]=strval(inputtext);
    ShowPlayerDialog(playerid,DIALOG_SEX,DIALOG_STYLE_LIST,"Geschlecht auswählen","Männlich\nWeiblich","Auswählen","Abbrechen");
    }
    }
    }

    Ohne den Code (Script Ausschnitt), kann dir hier kaum jemand helfen. Wenn du lieber Fernwartung via TeamViewer o.ä. möchtest - solltest du dies erwähnen. Niemand kann dein Problem lösen, wenn er nicht mal einsehen kann - wo das Problem/der Fehler steckt. Bitte denk nächstes mal daran, den benötigten Code mit zu posten, damit es zu keiner erhöten Wartezeit deiner sowie unserer Seite gibt. Betreffende Zeilen: Jede Zeile in der strget vorkommt und alle Fehlermeldungen.


    Die formatierung deines Beitrages geht meistens, wenn du nicht den Quellcode Editor benutzt in den Eimer. Desshalb verwende bitte immer bei posten von mehrzeiligen Code Ausschnitten den Quellcode Editor, anstatt dem WYSIWYG Editor (What you see, is what you get > Was du siehst, ist was du bekommst). Um es dir grafisch darzulegen, wie dein Post im WYSIWYG Editor und Quellcode Editor aussieht - habe ich folgende Grafik erstellt: » Klick mich «. Dies ist nur ein Hinweis, ich hoffe nächstes mal erinnerst du dich beim posten daran.

    26 Errors kann (muss nicht) auch Klammerfehler bedeuten. Im Script müssen außerhalb von Texten ("") genausoviele geöffnete '{' wie geschlossene '}' Klammern sein - sonst ergibt es ein Klammerfehler, bei großen Scripts schwer findbar. Und zeig uns mal die ganzen Fehler sowie die dazugehörigen Zeilen & umliegende Zeilen (+/-5).


    So wäre es richtig (deins ist auch richtig), nur dieses ist ressourcensparender da die Funktion IsPlayerInRangeOfPoint schneller ist als PlayerToPoint (Außer wenn du das dazugehörige Plugin benutzt).
    IsPlayerInRangeOfPoint(playerid,3,-1676.0973,432.2663,7.1797))
    {
    SetPlayerPos(playerid,6.091179,-29.271898,1003.54943);
    SetPlayerFacingAngle(playerid,0.00);
    SetPlayerInterior(playerid,10);
    PlayerInfo[playerid][pInt] = 10;
    SetPlayerVirtualWorld(playerid,8);
    }

    Hat sich der NPC (Non Player Charackter » Bot) auf den Servern bewegt? Wenn nicht, kann es auch ein Objekt sein - habe das Objekt mal in nem Map Editor gesehen. Und sonst, kann es nicht sein, das es keinen Slot benötigt hat. Um einen NPC in das Fast Food Restaurand zu stellen - müsstest du wie gewohnt die Funktion ConnectNPC(..); benutzen. Aufnehmen im Restaurant wo er stehen soll, am besten 10 Sekunden einfach still stehen lassen (Aufnahme möglich z.B. mit dem im Sa:Mp Pack enthaltenen Filterscript npc-record(.pwn/.amx mit dem Befehl: /ofrecord). Und in das Script einbinden, hier ist ein schickes Tutorial dafür: » Klick mich «.

    Zitat

    OnDialogResponse:
    Returning 0 in this callback will pass the dialog to another script in case no matching code were found in your gamemode's callback.


    Du musst in dem Gamemode und in jedem Filterscript return 0; nach OnDialogResponse setzen, die vor diesem Code geladen werden. Da ich nicht weiß, ob dein Code im FS, INC o. GM ist - rate ich einfach mal dazu.

    Ohne den Code (Script Ausschnitt), kann dir hier kaum jemand helfen. Wenn du lieber Fernwartung via TeamViewer o.ä. möchtest - solltest du dies erwähnen. Niemand kann dein Problem lösen, wenn er nicht mal einsehen kann - wo das Problem/der Fehler steckt. Bitte denk nächstes mal daran, den benötigten Code mit zu posten, damit es zu keiner erhöten Wartezeit deiner sowie unserer Seite gibt. Betreffende Zeilen: Auto erstellung, Auto entfernung und Abschleppung


    Natürlich ist das machbar, du erstellst ein paar Koordinaten auf dem Gelände - auf dem die Fahrzeuge stehen sollen falls sie abgeschleppt werden. Dann brauchst du für jedes Fahrzeug ein Boolean z.B. new bool:FahrzeugAbgeschleppt[MAX_VEHICLES];. Sobald das Fahrzeug abgeschleppt wird o. vom Abschlepper am gewünschten Gelände abgegeben wird den Boolean auf true setzen via: FahrzeugAbgeschleppt[GetPlayerVehicleID(playerid)]=true;. Nun beim Respawn o. der Fahrzeugerstellung (sobald der Fahrzeugbesitzer auf dem Server verbindet), die Fahrzeugposition via SetVehiclePos(..); auf die vorgegebenen Gelände Koordinaten setzen. Der Boolean müsste gespeichert werden, in der selben Datei wie die Fahrezuge der Spieler - und beim verbinden auf dem Server geladen & gesetzt werden. Die Koordinaten erhälst du Ingame mit dem Befehl /save - am besten dazu in einem Fahrzeug sitzen. Diese Koordinaten werden dann in der Datei savedpositions(.txt) im Verzeichnis: Eigene Datein/GTA San Andreas User Files/SAMP/ _ gespeichert. Dann musst du die Koordinaten nurnoch in das Script einfügen z.B. so:


    new Float:Koordinaten[7][4] = {
    //Posistion X, Position Y, Position Z, Rotation
    {1336.3441162109,1454.2668457031,3.7203111648565,180.0},
    {1382.7337646484,1524.2719726563,11.841999053955,180.0},
    {1448.2946777344,1547.9388427734,14.955635070801,270.0},
    {1396.1519775391,1497.8288574219,10.870428085327,165.0},
    {1405.8444824219,1554.9821777344,9.8125054645645,90.0},
    {1379.8033447266,1485.7749023438,10.563171386719,9.0},
    {1333.8299560547,1493.5162353516,11.120424270636,0.0}
    }


    Aufrufbar per z.B.:
    SetVehiclePos(Fahrzeug,Koordinaten[0][0],Koordinaten[0][1],Koordinaten[0][2]);
    SetVehicleZAngle(Fahrzeug,Koordinaten[0][3]);

    Ohne den Code (Script Ausschnitt), kann dir hier kaum jemand helfen. Wenn du lieber Fernwartung via TeamViewer o.ä. möchtest - solltest du dies erwähnen. Niemand kann dein Problem lösen, wenn er nicht mal einsehen kann - wo das Problem/der Fehler steckt. Bitte denk nächstes mal daran, den benötigten Code mit zu posten, damit es zu keiner erhöten Wartezeit deiner sowie unserer Seite gibt. Betreffende Zeilen: 14214, 14216, 48026 und umliegende!

    Debug einfach mal deinen Code, um ermitteln zu können bis wohin der Code kommt & ob der Code überhaupt wie erwünscht aufgerufen wird. Debuggen kann man auf mehrere Arten - ich empfehle es via Konsolenausgabe (print & printf). Falls du nicht weißt, wie du etwas Debuggen kannst - hier kommt ein kleines, einfaches Beispiel: » Beispiel «. Falls du dies immer noch nicht verstanden hast, und ein besseres Beispiel o. genauere Erklärung möchtest - sende mir eine Nachricht mit dem Betreff: 'Debugerklärung'.


    Dein Code mit Inspizierung via Konsolenausgabe:
    pubic SyncTime()
    {
    print("[DEBUG] SyncTime() - 1");
    new string[128];
    new tmphour;
    new tmpminute;
    new tmpsecond;
    gettime(tmphour, tmpminute, tmpsecond);
    print("[DEBUG] SyncTime() - 2");
    if ((tmphour > ghour) || (tmphour == 0 && ghour == 23))
    {
    print("[DEBUG] SyncTime() - 3");
    format(string, sizeof(string), "SERVER: Es ist jetzt %d:00 Uhr",tmphour);
    BroadCast(COLOR_WHITE,string);
    ghour = tmphour;
    print("[DEBUG] SyncTime() - 4");
    PayDay();
    print("[DEBUG] SyncTime() - 5");
    if (realtime)
    {
    print("[DEBUG] SyncTime() - 6");
    SetWorldTime(tmphour+1);
    }
    print("[DEBUG] SyncTime() - 7");
    format(string, sizeof(string), "~y~Lotto Zeit! ~n~~w~Waehle deine Nummer mit ~n~~p~/lotto 1-80 ~g~($100) ~n~~r~Preis: ~g~$%d", Jackpot);
    if(TD3D == 1)
    {
    print("[DEBUG] SyncTime() - 8");
    KillTimer(HideTD4Timer);
    TextDrawHideForAll(TD3);
    TextDrawSetString(TD3, string);
    TextDrawShowForAll(TD3);
    HideTD4Timer = SetTimer("HideTD4", 8500, false);
    }
    else
    {
    print("[DEBUG] SyncTime() - 9");
    TextDrawSetString(TD3, string);
    TextDrawShowForAll(TD3);
    TD3D = 1;
    HideTD4Timer = SetTimer("HideTD4", 8500, false);
    }
    print("[DEBUG] SyncTime() - 10");
    SetTimer("StartLotto",20000,false);
    }
    }

    Die formatierung deines Beitrages geht meistens, wenn du nicht den Quellcode Editor benutzt in den Eimer. Desshalb verwende bitte immer bei posten von mehrzeiligen Code Ausschnitten den Quellcode Editor, anstatt dem WYSIWYG Editor (What you see, is what you get > Was du siehst, ist was du bekommst). Um es dir grafisch darzulegen, wie dein Post im WYSIWYG Editor und Quellcode Editor aussieht - habe ich folgende Grafik erstellt: » Klick mich «. Dies ist nur ein Hinweis, ich hoffe nächstes mal erinnerst du dich beim posten daran.


    Nachdem du dies erledigt hat, kann ich dir gerne weiter helfen. Ich habe dieses Thema abboniert, somit musst du mir keine Benachrichtigung (ICQ; PN o.ä.) zukommen lassen, da ich automatische eine Benachrichtigung erhalten, sobald du o. jemd. anders in diesem Thema antwortet.

    Wenn man die Schüsse sehen soll, musst du Objekte sobald STRG gedrückt wird von der Spitze des Abfeuernden Objektes in die Richtung bewegen - in der die Fahrzeugfront schaut. Dies ist noch recht Simple, nun müsstest du überprüfen ob ein Spieler/Fahrzeug getroffen wird von diesen Schüssen, entweder machst du einen Timer 100Ms o. mehr und fragst ab ob ein Spieler in der nähe des Kugelobjektes ist & nicht der abfeuernde ist o. du lässt direkt beim Schuss abfragen via Funktion ob ein Spieler vor dem anderen Spieler ist & gleiche höhe. Wenn ich Zeit hätte, würde ich dir das gerne erstellen - kann aber zurzeit nicht viel machen am PC.