DCMD Problem und weitere.

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hey,


    Ich habe heute begonnen zu skripten und habe direkt ein Problem, das ich selbst nich lösen kann. Ich habe eine Box erstellt, in der man direkt beim connecten seine Fraktion, für die man kämpfen möchte, auswählen soll. Demanch haben die Fraktionen verschiedene Skins also habe ich folgenden Script geschrieben:




    Dennoch kommen folgende Errors:




    Ich hoffe auf einige nützliche Antworten in den nächsten paar Minuten, Danke.

    4 Mal editiert, zuletzt von GiS ()

  • Das ist logisch...
    Mach das mal so:

    // OnDialogResponse(...)
    if(dialogid == 1)
    {
    if(response)
    {
    if(listitem == 0)
    {
    AddPlayerClass(280,-1971.3087,119.2462,27.6875,359.5656,24,100,29,9999,41,9999);
    AddPlayerClass(281,-1971.3087,119.2462,27.6875,359.5656,24,100,29,9999,41,9999);
    AddPlayerClass(283,-1971.3087,119.2462,27.6875,359.5656,24,100,29,9999,41,9999);
    AddPlayerClass(284,-1971.3087,119.2462,27.6875,359.5656,24,100,29,9999,41,9999);
    AddPlayerClass(285,-1971.3087,119.2462,27.6875,359.5656,24,100,29,9999,41,9999);
    AddPlayerClass(286,-1971.3087,119.2462,27.6875,359.5656,24,100,29,9999,41,9999);
    AddPlayerClass(287,-1971.3087,119.2462,27.6875,359.5656,24,100,29,9999,41,9999);
    AddPlayerClass(288,-1971.3087,119.2462,27.6875,359.5656,24,100,29,9999,41,9999);
    AddPlayerClass(289,-1971.3087,119.2462,27.6875,359.5656,24,100,29,9999,41,9999);
    }
    if(listitem == 1)
    {
    AddPlayerClass(277,-1971.3087,119.2462,27.6875,359.5656,24,100,29,9999,41,9999);
    AddPlayerClass(278,-1971.3087,119.2462,27.6875,359.5656,24,100,29,9999,41,9999);
    AddPlayerClass(279,-1971.3087,119.2462,27.6875,359.5656,24,100,29,9999,41,9999);
    }
    if(listitem == 2)
    {
    AddPlayerClass(105,-1971.3087,119.2462,27.6875,359.5656,24,100,29,9999,41,9999);
    AddPlayerClass(106,-1971.3087,119.2462,27.6875,359.5656,24,100,29,9999,41,9999);
    AddPlayerClass(107,-1971.3087,119.2462,27.6875,359.5656,24,100,29,9999,41,9999);
    }
    if(listitem == 3)
    {
    AddPlayerClass(102,-1971.3087,119.2462,27.6875,359.5656,24,100,29,9999,41,9999);
    AddPlayerClass(103,-1971.3087,119.2462,27.6875,359.5656,24,100,29,9999,41,9999);
    AddPlayerClass(104,-1971.3087,119.2462,27.6875,359.5656,24,100,29,9999,41,9999);
    }
    if(listitem == 4)
    {
    AddPlayerClass(114,-1971.3087,119.2462,27.6875,359.5656,24,100,29,9999,41,9999);
    AddPlayerClass(115,-1971.3087,119.2462,27.6875,359.5656,24,100,29,9999,41,9999);
    AddPlayerClass(116,-1971.3087,119.2462,27.6875,359.5656,24,100,29,9999,41,9999);
    }
    if(listitem == 5)
    {
    AddPlayerClass(108,-1971.3087,119.2462,27.6875,359.5656,24,100,29,9999,41,9999);
    AddPlayerClass(109,-1971.3087,119.2462,27.6875,359.5656,24,100,29,9999,41,9999);
    AddPlayerClass(110,-1971.3087,119.2462,27.6875,359.5656,24,100,29,9999,41,9999);
    }
    }
    }



    und oben aus dem GM löschen

    Moderator der Bereiche: Coding, Vorstellungsrunde und Handelsecke. Über Verwarnungen, falls du zu den Wenigen gehörst, die eine Verwarnung von mir erhalten haben, kannst du jederzeit mit mir reden, sofern der Umgangston stimmt.


    expect us. / unkompetent. Das neue dynamisch. / easy-stripping.net - coming soon! / "9§. the entire website bestands out of english." / Vollprofi in allem, wo gibt und noch mehr; kann auch OOP.
    Kleine Coding-Frage? Schau doch in #dev im IRC vorbei, wir können dir sicher helfen.


    Ich bin für Aufträge im Bereich der Webentwicklung (z.B. User Control Panel) zu haben. Kontaktiere mich diesbezüglich einfach in einer privaten Nachricht mit deinen, möglichst konkreten, Vorstellungen.


    lesen.denken.posten. - [22:54:14] <Goldkiller2> früher gabs immer so coole user da stand in der signatur "lesen.denken.posten."


    Mafia 2 Multiplayer (m2mp.de) - Eine kostenlose Modifikation für Mafia 2, die es, ähnlich wie SAMP, erlaubt über das Internet oder LAN mit bis zu 1000 anderen Spielern zu spielen.

  • Danke, habt mir sehr geholfen, falls ich weitere Fragen habe poste ich hier :)


    EDIT:


    Okey habe ein neues Problem, das wahrscheinlich total einfach zu lösen ist mit nur einem Befehl, doch dieser ist mir bisher nicht bekannt:


    Ich habe nun die Fraktionenauswahl perfekt hinbekommen. Nun habe ich begonnen einen Befehl (/fraktionen) zu erstellen um während des Spiels die Fraktion tauschen zu können. Folgendes habe ich gemacht:



    Dennoch passiert nun nicht viel, sondern es erscheint nur der GameText (ID: 1) auf dem Bildschirm den ich hier schon vorher erstellt habe für die normale Auswahl:



    Wie schaffe ich es nun eine normale Auswahl der Skins wiederzubekommen, nachdem /fraktionen eingegeben habe und in der Box eine Auswahl getroffen habe. Gibt es einen Befehl um zurück in die Skinauswahl zu gelangen?

    Einmal editiert, zuletzt von GiS ()

  • tja, so wie du es dir vorstellst, ist es (leider) nicht möglich.
    Grund: du kannst Klassen nur in OnGameMode/FilterScriptInit hinzufügen und auch nicht die skinauswahl spielerspezifisch gestalten, also sehen alle spieler immer die gleichen skins in der auswahl.

    Keine Scripting-Fragen per PM!

  • tja, so wie du es dir vorstellst, ist es (leider) nicht möglich.
    Grund: du kannst Klassen nur in OnGameMode/FilterScriptInit hinzufügen und auch nicht die skinauswahl spielerspezifisch gestalten, also sehen alle spieler immer die gleichen skins in der auswahl.

    Okey, zwar schade aber ich habe schon eine andere Idee dazu, kann ich aber erst später realisieren, danke.

  • Hey, ich habe mal wieder ein Problem: Ich habe zwar das #define von dcmd oben unter den includes eingefügt doch leider kommen weiterhin 3 Errors:


    PHP
    C:\Dokumente und Einstellungen\GiS\Eigene Dateien\Server\gamemodes\Tester.pwn(98) : error 017: undefined symbol "dcmd_tp"
    C:\Dokumente und Einstellungen\GiS\Eigene Dateien\Server\gamemodes\Tester.pwn(99) : error 017: undefined symbol "dcmd_tp"
    C:\Dokumente und Einstellungen\GiS\Eigene Dateien\Server\gamemodes\Tester.pwn(102) : error 017: undefined symbol "params"
    Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase
    
    
    
    
    3 Errors.



    Könnte sein der Eine ofer Andere erkennt den Code. Ich versuche derzeit einfach Codes in meinen eigenen einzubauen und nachzuvollziehen was dort geschrieben wurde, denn selbst kann ich so etwas noch nicht.


    [b]Eine Idee warum?

    2 Mal editiert, zuletzt von GiS ()

  • Niemand eine Ahnung, was flasch sein könnte? Ist sehr wichtig nun, da ich schon Fraktionen etc. gescriptet habe und so langsam in richtung cmds gehen möchte.

  • Bin mal weg, ich hoffe bis morgen habe ich eine Antwort. Danke im vorraus :thumbup:

  • Es muss
    dcmd(tp, 2, cmdtext);
    heißen weil tp eine Länge von 2 Buchstaben hat. Das ganze muss in den Callback OnPlayerCommandText

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Es kommen weiterhin die gleichen Errors, und danke für den Hinweis, werde es ab sofort befolgen.



    PHP
    C:\Dokumente und Einstellungen\GiS\Eigene Dateien\Server\gamemodes\Tester.pwn(209) : error 017: undefined symbol "dcmd_tp"
    C:\Dokumente und Einstellungen\GiS\Eigene Dateien\Server\gamemodes\Tester.pwn(210) : error 017: undefined symbol "dcmd_tp"
    C:\Dokumente und Einstellungen\GiS\Eigene Dateien\Server\gamemodes\Tester.pwn(213) : error 017: undefined symbol "params"
    Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase
    
    
    
    
    3 Errors.
  • Ich wette wenn dus so versuchst gibts keine Fehler :O
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    dcmd(tp, 2, cmdtext);
    return 0;
    }
    dcmd_tp(playerid, params[])
    {
    new pid, Float: PosX, Float: PosY, Float: PosZ;
    if(sscanf(params, "d", pid))return SendClientMessage(playerid, 0xE87017FF, "Verwendung: /tp [PlayerID]");
    if(pid == INVALID_PLAYER_ID)return SendClientMessage(playerid, 0xE87017FF, "Ungültige PlayerID");
    GetPlayerPos(pid, PosX, PosY, PosZ);
    SetPlayerPos(playerid, PosX, PosY, PosZ);
    SendClientMessage(playerid, 0x00FF00FF, "Du wurdest teleportiert!");
    return 1;
    }


  • Nun kommen zwar keine Errors mehr, aber wenn ich nun die samp-server.exe starte, dann kommt ein Run Time Error, dass die Funktion oder Datei nicht gefunden wurde. Habs dann mal ohne den TeleportScript versucht und hat geklappt. Was ist falsch?

  • Danke so hats funktioniert :)


    Nächste Frage: Ich habe wie im 2ten Beitrag den Code übernommen und es funktioniert auch super. Nun versuchte ich in einem Filterscript extra ein Adminsystem aufzubauen. Dennoch greifen nun die Dialogen ineinander und somit kommt ein Bandialog wenn ich connecte und meine Fraktion auswähle. Hier die betreffenden Ausschnitte aus dem Gamemode:


    PHP
    ShowPlayerDialog(playerid, fraktionen, DIALOG_STYLE_LIST, "Fraktion wählen", "Polizei\nGrove Street\nBallas\nLos Aztecas\nLos Santos Vagos", "Auswählen", "Abbrechen");




    UND IM FILTERSCRIPT:


    PHP
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    	if (strcmp("/apanel", cmdtext, true) == 0)
    	{
    		ShowPlayerDialog(playerid, adminpanel, DIALOG_STYLE_LIST, "Admin Panel", "Bannen\nKicken\nAnnouncement\nTeleportieren", "Bestätigen", "Abbrechen");
    		return 1;
    	}
    	return 0;
    }


  • zu solchen "überschneidungen" kommt es, wenn du mehrere dialoge mit derselben ID belegst
    du solltest also jedem dialog seine eigene ID zuordnen.


    Habe ich aber gemacht: Im Filterscript:


    PHP
    #define adminpanel 1
    #define baninputbox 2
    #define kickinputbox 3
    #define announceinputbox 4
    #define teleportlist 5
    #define ortauswählen 6
    #define teleinputbox 7


    Im GameMode:


    PHP
    #define fraktionen 1
    #define TEAM_POLIZEI 2
    #define TEAM_GROVE 3
    #define TEAM_BALLAS 4
    #define TEAM_AZTECAS 5
    #define TEAM_VAGOS 6


    Muss ich im Filterscript mit 7 beginnen und dann weitermachen?


    EDIT: Okey passt so, habe nun im Filterscript einfach bei 900 begonnen. Somit kann ich 899 defines im Gamemode machen ohne Übergriffe. Danke.
    EDIT: Kennt ihr eine bessere Lösung?

    2 Mal editiert, zuletzt von GiS ()

  • Nein, du musst dafür sorgen, dass sich die IDs in allen Filterscripts und im Gamemode nicht in die Quere kommen...nutzt nur selfmade-Filterscripts, kannst du ja einfach im Gamemode die IDs 0-1000, im FS1 dann 1001-2000, im FS2 dann 2001-3000 etc verwenden.

  • Neue Frage:


    Warum sitzt der Spieler nie im Auto wenn ich das Auto spawnen lasse trotz PutPlayerInVehicle(...);?



    Der Befehl so wie ich ihn gescripted habe funktioniert einwandfrei bis auf diesen Fehler. Danke.


    EDIT: Ich kann den PutPlayerInVehicle Befehl gerade nicht auf wiki.sa-mp.com vergleichen, da die Seite momentan down ist. Aber nach meinen Kentnissen ist er so richtig. (PutPlayerInVehicle(playerid, ID des Fahrzeugs, Sitzplatz im Auto (0 = Fahrersitz))

    Einmal editiert, zuletzt von GiS ()

  • {
    dcmd(getvehicle, 10, cmdtext);
    return 0;
    }


    dcmd_getvehicle(playerid, params[])
    {
    new vehicleid;
    new color1;
    new color2;
    new Float:X;
    new Float:Y;
    new Float:Z;
    new Float:Angle;


    if(sscanf(params, "dii", vehicleid, color1, color2))
    {
    return SendClientMessage(playerid, COLOR_GREY, "VERWENDUNG: /getvehicle [VehicleID] [Color1] [Color2]");
    }


    if(vehicleid < 400 || vehicleid > 611)
    {
    return SendClientMessage(playerid, COLOR_GREY, "Die angegebene VehicleID existiert nicht (400-611).");
    }

    GetPlayerFacingAngle(playerid, Float:Angle);
    GetPlayerPos(playerid, Float:X, Float:Y, Float:Z);
    new bloodyrockz=CreateVehicle(vehicleid, Float:X, Float:Y, Float:Z, Float:Angle, color1, color2, 500);
    PutPlayerInVehicle(playerid, bloodyrockz, 0);
    return 1;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen