[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
  • Code
    if((newstate == PLAYER_STATE_DRIVER) || (newstate == PLAYER_STATE_PASSENGER))
    	{
    	    new vid = GetPlayerVehicleID(playerid);
    		new string[128], modelid = GetVehicleModel(GetPlayerVehicleID(playerid)), idx = modelid-400;
    		format(string, sizeof(string), "%d", //?);
      		PlayerTextDrawSetString(playerid, textdraw[9][playerid], string);
    	}

    Wie mache ich das, dass ich die Vehicle health anzeige?
    Ich weiß ich muss wahrscheinlich noch ein Timer mit einbauen,


    Also wenn ich eine Wand ramme soll das Fahrzeug schon im Textdraw Punkte verlieren

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Will das es nur 1000 anzeigt nicht 1000.00 da meine Batterie Anzeige schon Prozent hat kommt das ganze durcheinander.
    Ich lasse es lieber so.


    Dazu noch der Timer zum updaten wie soll ich den einstellen 4000?
    also eine grobe Zahl einfach weiß nicht was Ressourcen spart, Timer zieht ja ordentlich oder?

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Timer zieht ja ordentlich oder?

    Naja, das kommt darauf an, wie der Code in deinem Timer ist.


    Grundsätzlich solltest du dich aber eher danach richten, wie es gut aussieht, also probier doch einfach mal rum ^^

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Hey, vielleicht ist das etwas, was dich interessieren könnte: https://wiki.sa-mp.com/wiki/DoorStates

    Und wie verwende ich dieses um zb abzufragen ob das Auto keine türen mehr hat ?


    Ich habe es jetzt so aber geht tut es nicht

    ocmd:vlock(playerid, params[])
    {
    new vehicleid,Float:aux, Float:auy, Float:auz;
    new panels, doors, lights, tires;
    GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
    if(GetDoorState(doors, DOOR_HOOD, IS_OPENED | IS_DAMAGED))
    {
    SendClientMessage(playerid, -1, "The hood of your vehicle is both opened and damaged!");
    }
    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
    vehicleid = GetPlayerVehicleID(playerid);
    }
    else
    {
    vehicleid = GetClosestVehicle(playerid);
    if(!PlayerToVehicle(playerid, vehicleid, 5.0)) vehicleid = 0;
    }
    if(!vehicleid) return SendClientMessage(playerid, COLOR_RED, "Du bist bei kein deiner Fahrzeuge");
    new id = GetVehicleID(vehicleid);
    if(!IsValidVehicle(id)) return SendClientMessage(playerid, COLOR_RED, "Du hast die Schlüssl nicht für dieses Fahrzeug");
    if(GetPlayerVehicleAccess(playerid, id) < 2)
    return SendClientMessage(playerid, COLOR_RED, "Du hast die Schlüssl nicht für dieses Fahrzeug");
    new engine, lights, alarm, doors, bonnet, boot, objective;
    GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
    if(doors == 1)
    {



    doors = 0;
    VehicleLock[id] = 0;
    GameTextForPlayer(playerid, "~g~Car Aufgeschlossen", 3000, 6);
    GetPlayerPos(playerid, aux, auy, auz);
    PlayerPlaySound(playerid,1145, aux, auy, auz+5);
    TextDrawSetString(SpeedoTuren[playerid],"Tueren ~g~Aufgeschlossen");
    }
    else
    {
    doors = 1;
    VehicleLock[id] = 1;
    GameTextForPlayer(playerid, "~r~Car Abgeschlossen", 3000, 6);
    GetPlayerPos(playerid, aux, auy, auz);
    PlayerPlaySound(playerid,1145, aux, auy, auz+5);
    TextDrawSetString(SpeedoTuren[playerid],"Tueren ~r~Abegschlossen");
    }
    SetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
    SaveVehicle(id);
    return true;
    }

  • Also die samp wiki erklärt das alles sehr gut.


    Kaliber hat es doch da geschrieben.

    schon aber da sind zb fehler drin ein , fehlt und das was ich wollte geht woll nicht ich will ja nur abfragen ob er keine tür mehr hat damit zb vlock nicht mehr geht aber das hat es wohl nicht

  • @Hog Du weißt der Variable vehicleid keinen Wert zu bzw. machst dies ein paar Zeilen drunter deswegen wird es nicht funktionieren da dein Fahrzeug sehr wahrscheinlich nicht die Vehicle ID 0 hat. Also erst vehicleid holen und dann sollte es funktionieren.

  • Beitrag von Jexian ()

    Dieser Beitrag wurde von Eddy aus folgendem Grund gelöscht: Spam ().
  • Irgendwas stimmt mit meinem Bannsystem nicht.
    Sobald ich jemanden banne, kann diese Person auch wenn sie entbannt ist den Server nicht betreten.
    Sobald man connecten will kommt sofort "Server closed the connection." und es passiert nichtsmehr.
    Im Log steht auch nur: "[12:20:59] [connection] incoming connection: **.**.**.**:***** id: 0" (IP zensiert)
    Nach einem Restart funktioniert es wieder, und man sieht dann auch die Banninfo.
    Es ist auch egal mit welchem Accountnamen man sich einloggt, sogar wenn die IP nicht gebannt wurde, kommt man nichtmehr auf den Server.


    Banbefehl:

    CMD:ban(playerid, params[])
    {
    if(pInfo[playerid][pAdmin] < 2) return SendCmdMessage(playerid);


    new targetid, Reason[128];
    if(sscanf(params, "us[128]", targetid, Reason)) return SendUsageMessage(playerid,"/ban [ID/Name] [Grund]");

    if(!IsPlayerConnected(targetid)) return SendErrorMessage(playerid,"Der gewählte Spieler ist nicht auf dem Server.");
    if(strlen(Reason) > 128) return SendErrorMessage(playerid,"Der gewählte Grund ist zu lang.");

    printf("[warning] %s bannt %s mit dem Grund %s",GetName(playerid),GetName(targetid),Reason);
    BanWithReasonNoIP(playerid, targetid, Reason);



    return 1;
    }

    BanWithReasonNoIP:

    BanWithReasonNoIP(playerid = INVALID_PLAYER_ID, targetid, reason[])
    {
    if(playerid == INVALID_PLAYER_ID) return 1;
    new Query[256], string[145], day, month, year, second, minute, hour, datestring[24], timestring[24];
    getdate(day, month, year);
    gettime(hour, minute, second);
    format(datestring, sizeof(datestring), "%02d.%02d.%d", year, month, day);
    format(timestring, sizeof(timestring), "%02d:%02d:%02d", hour, minute, second);



    mysql_format(handle,Query, sizeof(Query), "INSERT INTO `banned` (`NAME`, `IP`, `REASON`, `ADMIN`, `DATE`, `TIME`, `STAMP`, `DBID`) VALUES ('%e', 'N/A', '%e', '%e', '%e', '%e','0','%d')", DB_Escape(GetName(targetid)), DB_Escape(reason), DB_Escape(GetName(playerid)), DB_Escape(datestring), DB_Escape(timestring),pInfo[targetid][pDbID]);
    mysql_pquery(handle,Query);
    format(string, sizeof(string), "BAN: %s hat %s permanent gebannt. [Grund: %s]", GetName(playerid), GetName(targetid), reason);
    SendBan(string);
    format(string, sizeof(string), "%s bannt %s [Grund: %s]",GetName(playerid),GetName(targetid),reason);
    Log(string,"ban");
    BanCounter++;
    TogglePlayerControllable(targetid,0);
    SetTimerEx("KickTimer", 100, true, "i", targetid);
    return 1;
    }


    Ich seh einfach den Fehler nicht...

  • Mal kurze Anmerkungen:

    if(strlen(Reason) > 128)

    Das ist unmöglich..wenn Reason nur 128 Cells hat, können da nicht plötzlich mehr rein ^^



    DB_Escape

    Das musst du nicht nutzen, das ist doppel gemoppel, %e macht das schon.


    Du hast viele Funktionen noch, die wir nicht sehen und kennen, wie z.B. SendBan...


    Aber ich vermute mal, es tritt ein Fehler auf, hast du mal crashdetect geladen? :)

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Heyho ich habe ein kleines Problem mit meinem Biz System...


    Code
    stock getBizID(){
    	for(new i = 0; i < sizeof(bInfo); i++){
         	if(bInfo[i][biz_id] == 0) continue;
         	printf("Biz: %s(%i) wurde Geladen | X: %f | Y: %f | Z: %f", bInfo[i][biz_name], bInfo[i][biz_id], bInfo[i][biz_x], bInfo[i][biz_y], bInfo[i][biz_z]);
    	    return bInfo[i][biz_id];
    	}
    	return -1;
    }



    Code
    public OnLoadTanke(){
    	new rows;
    	cache_get_row_count(rows);
    	for(new i = 0; i < sizeof(rows); i++){
    		printf("%i", getBizID());
    	}
    	return 1;
    }

    Als Ausgabe erhalte ich:



    Code
    [14:40:53] -1

    Es sind allerdings 2 Bizzen im bInfo array drinne...


    habt ihr eine idee?

  • Die Funktion ist schon relativ alt und hatte anfangs SQLite genutzt wegen dem DB_Escape...
    SendBan schickt nur eine Chatnachricht ab, mehr nicht.


    Aber Nein, es treten keine Fehler auf. Sobald man connectet kommt wie gesagt nur die "Incoming connection:" Nachricht und das wars. Crashdetect ist auch drauf.
    Nach einem Restart des Servers funktioniert ja auch auf einmal alles.

  • sizeof(rows)

    ...das ist kein String, sondern ein int. Musst hier nur rows verwenden.



    Nachricht und das wars

    Wie sollen wir dir jetzt helfen? :D


    Musst halt mal alles printen..unter OnPlayerConnect usw...


    Irgendwo bleibt er hängen, wahrscheinlich bei deiner Abfrage, ob der Spieler gebannt ist oder nicht und dann wird er wieder gekickt..

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • @LeonMrBonnie
    Das kann auch an SA:MP liegen, kannte das Problem schon immer wenn ich irgendwo entbannt wurde
    das man mir gesagt hat ich soll mein Router neu starten sonst kam da halt immer diese Meldung das man gebannt ist.

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • das man mir gesagt hat ich soll mein Router neu starten sonst kam da halt immer diese Meldung das man gebannt ist.

    Nein, dann hatten die die Funktion [wiki]Ban[/wiki] verwendet. Diese sorgt dafür, dass deine IP gebannt wird und durch einen Router restart, bekommst du eine andere IP.


    Hier verwendet er aber nur Kick und prüft ob der Account gebannt ist.

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

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