[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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 ein Problem bei meinem Clansystem.
    Und zwar möchte ich das mir ein Dialog angezeigt wird indem ich meinen Clantag eingeben kann
    Vorher habe ich allerdings einen Dialog wo ich den namen eintragen muss


    Weshalb ich abfrage ob es den Namen bereits gibt
    Es gibt ihn nicht aber mir wird der Dialog nicht gezeigt


    case DIALOG_CLAN_N:
    {
    new i = cErstellen[playerid];
    print("1");
    if(response == 0)
    {
    print("2");
    for(new c; c != _:Clan_Info; ++c)ClanInfo[i][Clan_Info:c]= 0;
    cErstellen[playerid] = 0;
    SendClientMessage(playerid,WEISS,"Du hast die Clangründung abgebrochen.");
    return 1;
    }
    else
    {
    print("3");
    if(strlen(inputtext) < 4 || strlen(inputtext) > 20)return ShowPlayerDialog(playerid,DIALOG_CLAN_N,DIALOG_STYLE_INPUT,""#SERVERFARBE""#SERVERTAG"{FFFFFF}: Clan [Name]","Wie möchtest du deinen Clan nennen?\nGebe bitte deinen gewünschten Clan Namen ein: \n\nDer Name muss zwischen 4 und 20 Buchstaben haben.","Weiter","Abbrechen");
    print("4");
    if(IsNumeric(inputtext))return ShowPlayerDialog(playerid,DIALOG_CLAN_N,DIALOG_STYLE_INPUT,""#SERVERFARBE""#SERVERTAG"{FFFFFF}: Clan [Name]","Wie möchtest du deinen Clan nennen?\nGebe bitte deinen gewünschten Clan Namen ein: \n\nDer Name darf keine Zahlen beinhalten","Weiter","Abbrechen");
    print("5");
    for(new c=1; i<MAX_CLANS;c++)
    {
    print("6");
    if(ClanInfo[code=c][cErstellt] != 0 && cErstellen[playerid] != i)//continue;
    {
    print("7");
    if(strcmp(ClanInfo[code=c][cName],inputtext,true) == 0)
    {
    print("8");
    return ShowPlayerDialog(playerid,DIALOG_CLAN_N,DIALOG_STYLE_INPUT,""#SERVERFARBE""#SERVERTAG"{FFFFFF}: Clan [Name]","Wie möchtest du deinen Clan nennen?\nDen Clan Namen gibt es bereits bitte wähle einen anderen.\n \nGebe bitte deinen gewünschten Clan Namen ein:","Weiter","Abbrechen");
    }
    }
    print("9");
    }
    print("10");
    format(ClanInfo[i][cName],35,"%s",inputtext);
    ShowPlayerDialog(playerid,DIALOG_CLAN_T,DIALOG_STYLE_INPUT,""#SERVERFARBE""#SERVERTAG"{FFFFFF}: Clan [Tag]","Was soll dein Clan-Tag sein?\n Gebe bitte deinen gewünschtes Clan-Tag ein:","Gründen","Abbrechen");
    return 1;
    }
    }


    In den ServerLogs stehen die Zahlen 34569
    Die 6 u. 9 stehen 50 mal drinnen da es 50 Clan's geben kann

  • Beitrag von Corvus ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Dann ändere
    format(string2,sizeof(string2),"~r~Tank:%s %0.1f ", Tank, Gas[VID]);
    zu:
    format(string2,sizeof(string2),"~r~Tank:%s %0.1f ", Tank, Gas[VID]);
    printf("string2: %s", string2);
    printf("VID: %d, playerid: %d", VID, playerid);


    Was wird geprintet?

  • Ja, jetzt hast du den print nur bei deinem OnPlayerStateChange eingefügt.
    Du hast auch noch einen Timer, bei dem der Tankwert aktualisiert wird. Suche mal nach "~r~Tank:" (ohne die Anführungszeichen), dann siehst du wo das überall verwendet wird. Da muss es noch einen Timer geben, der den Wert aktualisiert, denn die Berechnung ist korrekt.

  • Hier:
    if(TakingLesson[i] == 2)
    {
    if(value > 75)
    {
    SendClientMessage(i,COLOR_LIGHTRED,"Du Fährst zu schnell, Fahr langsamer sonst fällst du durch die Prüfung");
    }
    if(value >= 100)
    {
    SendClientMessage(i,COLOR_KNALLROT,"Du hast die Prüfung nicht bestanden.");
    RemovePlayerFromVehicle(i);
    SetVehicleToRespawn(GetPlayerVehicleID(i));
    SetPlayerPos(i,1215.3406,-1821.1357,13.5950);
    CP[i] = 0;
    DisablePlayerCheckpoint(i);
    TakingLesson[i] = 0;
    }
    }
    if(IsABoat(VID) || IsAFahrrad(VID))
    {
    format(string2,sizeof(string2),"~r~KM/H:~g~ %d",value);
    format(string,sizeof(string),"~r~%s",VehNames[GetVehicleModel(VID)-400]);
    TextDrawSetString(Tacho2[i], string);
    TextDrawSetString(Tacho4[i],string2);
    }
    else if(IsAPlane(VID))
    {
    new Float:cx,Float:cy,Float:cz;
    GetVehiclePos(VID,cx, cy, cz);
    format(string, sizeof(string), "%f",cz);
    format(string2,sizeof(string2),"~r~KM/H:~g~ %d",value);
    format(string,sizeof(string),"~r~%s",VehNames[GetVehicleModel(VID)-400]);
    TextDrawSetString(Tacho2[i], string);
    TextDrawSetString(Tacho4[i],string2);
    }
    else
    {
    new Speed[20];
    new Float:leben;
    if(value >= 0 && value <= 75){Speed = "~g~";}
    if(value > 75){Speed = "~r~";}
    new Tank[20];
    if(Gas[VID] > 10 && Gas[VID] <= 20){Tank = "~y~";}
    if(Gas[VID] <= 10){Tank = "~r~";}
    if(Gas[VID] > 20){Tank = "~g~";}
    VehSpeed[VID] = value;
    GetVehicleHealth(VID,leben);
    format(string,sizeof(string),"~r~%s",VehNames[GetVehicleModel(VID)-400]);
    format(string1,sizeof(string1),"~r~KM/H:~g~ %d",value);
    format(string2,sizeof(string2),"~r~Tank:~g~ %s %d", Tank, Gas[VID]);
    format(string4,sizeof(string4),"~r~Zustand:~g~ %.1f",leben/10);
    TextDrawSetString(Tacho2[i], string);
    TextDrawSetString(Tacho3[i], string);
    TextDrawSetString(Tacho4[i],string1);
    TextDrawSetString(Tacho5[i],string4);
    TextDrawSetString(Tacho6[i],string2);
    }

    • Offizieller Beitrag

    Hi zusammen,
    sicherlich eine ziemlich dumme Frage, aber warum wird der Spieler nicht aus dem Fahrzeug gekickt, wenn er den rechten Dialogbutton drückt?


    case DIALOG_FAUTOHAUS:
    {
    if(response)
    {
    new id=GetPVarInt(playerid,"buyCarID");
    new fid=GetPVarInt(playerid,"Fraktion");
    new pr=GetPVarInt(playerid,"buyCarPreis");
    printf("1");
    if(GetPVarInt(playerid,"Money") < pr)
    {
    SCM(playerid,COLOR_GREY,"Du hast nicht genügend Geld.");
    RemovePlayerFromVehicle(playerid);
    printf("2");
    }
    else
    {
    printf("3");
    WithdrawPlayerMoney(playerid,pr);
    AddFrakCar(1708.1882,1286.8730,10.5252,359.1886,fid,id,FraktionsInfo[fid][f_Farbe],FraktionsInfo[fid][f_Farbe]);
    RemovePlayerFromVehicle(playerid);
    SCM(playerid,COLOR_YELLOW,"Du hast dieses Fahrzeug für deine Fraktion gekauft.");
    printf("4");
    }
    }
    else
    {
    RemovePlayerFromVehicle(playerid);
    }
    }


    Eine zweite Frage hätte ich auch noch:
    Ich überprüfe unter OnPlayerStateChange wenn ein Spieler ein Fahrzeug als Spieler betritt, ob er dieses Fahrzeug fahren darf (Job, Fraktion etc.). Wenn er es aber nicht darf, soll er rausgeworfen werden. Steigt der Spieler aber ein und fährt weiter, passiert nichts und er kann das Fahrzeug ohne Probleme fahren, bis er langsamer wird und/oder steht.


    Dazu auch nochmal den Code (Beispiel):
    if(IsAMedicCar(GetPlayerVehicleID(playerid)))
    {
    if(GetPVarInt(playerid,"Fraktion") != 2)
    {
    RemovePlayerFromVehicle(playerid);
    SCM(playerid,COLOR_GREY,"Du bist kein Sanitäter.");
    }
    }

  • Zu deine 2 Frage, probier es mal so.
    for(new i=0; i<sizeof(IsAMedicCar); i++)
    {
    if(GetPlayerVehicleID(playerid) == IsAMedicCar[i])
    {
    if(GetPVarInt(playerid,"Fraktion") != 2)
    {
    RemovePlayerFromVehicle(playerid);
    SCM(playerid,COLOR_GREY,"Du bist kein Sanitäter.");
    }
    }
    return 1;
    }

  • if(dialogid == DIALOG_COLOR)
    {
    if(response)
    {
    switch(listitem)
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    GivePlayerMoney(playerid,-2500);
    GameTextForPlayer(playerid,"~r~KOSTEN: ~w~$2500",2500,3);
    case 0:
    {
    SendClientMessage(playerid,COLOR_GREEN,"» Du hast dein Fahrzeug erfolgreich umgefärbt.");
    ChangeVehicleColor(vehicleid,3,3);
    return 1;
    }
    case 1:
    {
    SendClientMessage(playerid,COLOR_GREEN,"» Du hast dein Fahrzeug erfolgreich umgefärbt.");
    ChangeVehicleColor(vehicleid,86,86);
    return 1;
    }
    case 2:
    {
    SendClientMessage(playerid,COLOR_GREEN,"» Du hast dein Fahrzeug erfolgreich umgefärbt.");
    ChangeVehicleColor(vehicleid,106,106);
    return 1;
    }
    case 3:
    {
    SendClientMessage(playerid,COLOR_GREEN,"» Du hast dein Fahrzeug erfolgreich umgefärbt.");
    ChangeVehicleColor(vehicleid,172,172);
    return 1;
    }
    case 4:
    {
    SendClientMessage(playerid,COLOR_GREEN,"» Du hast dein Fahrzeug erfolgreich umgefärbt.");
    ChangeVehicleColor(vehicleid,6,6);
    return 1;
    }
    case 5:
    {
    SendClientMessage(playerid,COLOR_GREEN,"» Du hast dein Fahrzeug erfolgreich umgefärbt.");
    ChangeVehicleColor(vehicleid,13,13);
    return 1;
    }
    case 6:
    {
    SendClientMessage(playerid,COLOR_GREEN,"» Du hast dein Fahrzeug erfolgreich umgefärbt.");
    ChangeVehicleColor(vehicleid,0,0);
    return 1;
    }
    case 7:
    {
    SendClientMessage(playerid,COLOR_GREEN,"» Du hast dein Fahrzeug erfolgreich umgefärbt.");
    ChangeVehicleColor(vehicleid,1,1);
    return 1;
    }
    }
    }
    }


    Aufgrund diesem PAWN-Code spackt mein Compiler ab. Weiß jemand warum? Habe bereits einiges rumprobiert...

  • if(dialogid == DIALOG_COLOR)
    {
    if(!response) return 1;
    new vehicleid = GetPlayerVehicleID(playerid);
    GivePlayerMoney(playerid,-2500);
    GameTextForPlayer(playerid,"~r~KOSTEN: ~w~$2500",2500,3);
    switch(listitem)
    {
    case 0: ChangeVehicleColor(vehicleid,3,3);
    case 1: ChangeVehicleColor(vehicleid,86,86);
    case 2: ChangeVehicleColor(vehicleid,106,106);
    case 3: ChangeVehicleColor(vehicleid,172,172);
    case 4: ChangeVehicleColor(vehicleid,6,6);
    case 5: ChangeVehicleColor(vehicleid,13,13);
    case 6: ChangeVehicleColor(vehicleid,0,0);
    case 7: ChangeVehicleColor(vehicleid,1,1);
    }
    return SendClientMessage(playerid,COLOR_GREEN,"» Du hast dein Fahrzeug erfolgreich umgefärbt.");
    }


    Zwischen switch und case gehört nur switch und case ^^.
    Zudem ist diese Methode deutlich übersichtlicher :).


    L.G. :thumbup:

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