Beiträge von Kaliber

    Schreib das mal so:


    ocmd:stats(playerid)
    {
    new string[128],name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,MAX_PLAYER_NAME);
    format(string,sizeof string,"= Stats von %s =",name);
    SendClientMessage(playerid,COLOR_WHITE,string);
    format(string,sizeof string,"Kills: %d",GetPVarInt(playerid,"Kills"));
    SendClientMessage(playerid,COLOR_WHITE,string);
    format(string,sizeof string,"Aminlevel: %d",GetPVarInt(playerid,"Adminlevel"));
    SendClientMessage(playerid,COLOR_WHITE,string);
    SendClientMessage(playerid,COLOR_WHITE,"================");
    return 1;
    }


    mfg. :thumbup:

    Dann fange sie ab, ich glaube das sind alle gültigen Zeichen...könnt sie ja editieren, wenn ihr mehr wisst:


    ocmd:umbenennen(playerid, params[]) return (IsValidName(params)) ? SetPlayerName(playerid,params) : SendClientMessage(playerid,-1,"In dem Namen sind ungültige Zeichen enthalten!");


    stock IsValidName(const tmp[]) {
    for(new i,l=strlen(tmp); i<l; i++) {
    switch(tmp[i]) {
    case '0'..'9','a'..'z','A'..'Z','@','[',']','_','.','$','-','=','(',')': continue;
    default: return 0;
    }
    }
    return 1;
    }


    mfg. :thumbup:

    "insufficient stack size" als Fehlermeldung bekommen.


    Bestimmt nicht durch solche Includes, sondern viel eher durch lokale Variablen, die einen Array von > 5012 haben xD


    Im Grunde ist es Verschwendung von Speicherplatz. Da kann ich mir lieber YSF schnappen und das direkt aus der Servermemory laden lassen oder man geht das ganze geschickt an, wie Tion und ich mit der Datenbank oder man nutzt die core Funktion property.


    Neiin YSF nutzt zum Glück keinen Speicherplatz :D Bläht die .amx nur auf über 20MB auf...


    property Funktion ist langsam...aber klar kann man nutzen und ok...das mit der Datenbank ist natürlich noch eine Alternative... :D

    Bei mir erstellt er nur 1 Explosion nach 50 Sekunden, dann kommt nichts mehr. Ist da was Falsch? Oder wie mache ich dass, das sich der Timer immer wiederholt?


    50 Sekunden? :huh:


    //z.B. unter OnPlayerSpawn
    SetTimerEx("explode",1000,0,"i",playerid);


    forward explode(playerid);
    public explode(playerid)
    {
    if(!IsPlayerConnected(playerid)) return 0;
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    CreateExplosion(x+random(75)+25, y+random(75)+25, z, 12, 10.0); //würde den Spieler zum explodieren bringen xD
    return SetTimerEx("explode",1000,0,"i",playerid);
    }


    Dann erstellt er jede Sekunde eine Explosion :)

    Schreib es so:


    CMD:motor(playerid)
    {
    if(!IsLoggedIn(playerid))return 1;
    new string[128];
    if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, COLOR_GREY, "** Du befindest dich in keinem Fahrzeug.");
    new vehicleid = GetPlayerVehicleID(playerid);
    if(pRefillVehicle[playerid] == 1)return SendClientMessage(playerid, COLOR_GREY, "** Du kannst den Motor nicht anschalten während du das Fahrzeug tankst!");
    if(IsAFahrrad(GetVehicleModel(vehicleid)))return SendClientMessage(playerid, COLOR_GREY, "** Dieses Fahrrad hat keinen Motor!");
    if(Vehicle[vehicleid][vehFuel] <= 0.0)return SendClientMessage(playerid, COLOR_GREY, "** Das Fahrzeug hat kein Benzin mehr!");
    if(!(IsAFraktionsVeh(vehicleid) == INVALID_VEHICLE_ID))
    {
    if(IsValidVehicle(vehicleid))
    {
    new fV = IsAFraktionsVeh(vehicleid);
    if(Spieler[playerid][pFraktion] == fVehicle[fV][vehFraktion])
    {
    if(Vehicle[fVehicle[fV][vehID]][vehMotor] == false)
    {
    Vehicle[fVehicle[fV][vehID]][vehMotor] = true;
    GetVehicleParamsEx(fVehicle[fV][vehID], engine, lights, alarm, doors, bonnet, boot, objective);
    SetVehicleParamsEx(fVehicle[fV][vehID], VEHICLE_PARAMS_ON, lights, alarm, doors, bonnet, boot, objective);
    format(string, sizeof(string), "%s startet den Motor seines Fahrzeuges", GetName(playerid));
    SetPlayerChatBubble(playerid, string, COLOR_PURPLE, 25.0, 7500);
    Vehicle[fVehicle[fV][vehID]][VehicleTimer] = SetTimerEx("OnVehicleTimer", 1136, 1, "i", fVehicle[fV][vehID]);
    return 1;
    }
    else if(Vehicle[fVehicle[fV][vehID]][vehMotor] == true)
    {
    Vehicle[fVehicle[fV][vehID]][vehMotor] = false;
    GetVehicleParamsEx(fVehicle[fV][vehID], engine, lights, alarm, doors, bonnet, boot, objective);
    SetVehicleParamsEx(fVehicle[fV][vehID], VEHICLE_PARAMS_OFF, lights, alarm, doors, bonnet, boot, objective);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,"Du stellst den Motor ab.");
    KillTimer(Vehicle[fVehicle[fV][vehID]][VehicleTimer]);
    return 1;
    }
    }
    return SendClientMessage(playerid, COLOR_GREY, "** Du besitzt keine Schlüssel für dieses Fahrzeug.");
    }
    }
    for(new slot,i=playerid; slot<MAX_PLAYER_VEHICLES; slot++)
    {
    if(vehicleid != PrivateVehicle[i][slot][vehID]) continue;
    GetVehicleParamsEx(PrivateVehicle[i][slot][vehID], engine, lights, alarm, doors, bonnet, boot, objective);
    if(Vehicle[PrivateVehicle[i][slot][vehID]][vehMotor] == false)
    {
    Vehicle[PrivateVehicle[i][slot][vehID]][vehMotor] = true;
    SetVehicleParamsEx(PrivateVehicle[i][slot][vehID], VEHICLE_PARAMS_ON, lights, alarm, doors, bonnet, boot, objective);
    format(string, sizeof(string), "%s startet den Motor seines Fahrzeuges", GetName(playerid));
    SetPlayerChatBubble(playerid, string, COLOR_PURPLE, 25.0, 7500);
    Vehicle[PrivateVehicle[i][slot][vehID]][VehicleTimer] = SetTimerEx("OnVehicleTimer", 1136, 1, "i", PrivateVehicle[i][slot][vehID]);
    return 1;
    }
    Vehicle[PrivateVehicle[i][slot][vehID]][vehMotor] = false;
    SetVehicleParamsEx(PrivateVehicle[i][slot][vehID], VEHICLE_PARAMS_OFF, lights, alarm, doors, bonnet, boot, objective);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,"Du stellst den Motor ab.");
    KillTimer(Vehicle[PrivateVehicle[i][slot][vehID]][VehicleTimer]);
    return 1;
    }
    if(vehicleid == Spieler[playerid][pBusID])
    {
    if(Vehicle[Spieler[playerid][pBusID]][vehMotor] == false)
    {
    Vehicle[Spieler[playerid][pBusID]][vehMotor] = true;
    GetVehicleParamsEx(Spieler[playerid][pBusID], engine, lights, alarm, doors, bonnet, boot, objective);
    SetVehicleParamsEx(Spieler[playerid][pBusID], VEHICLE_PARAMS_ON, lights, alarm, doors, bonnet, boot, objective);
    format(string, sizeof(string), "%s startet den Motor seines Fahrzeuges", GetName(playerid));
    SetPlayerChatBubble(playerid, string, COLOR_PURPLE, 25.0, 7500);
    Vehicle[Spieler[playerid][pBusID]][VehicleTimer] = SetTimerEx("OnVehicleTimer", 1136, 1, "i", Spieler[playerid][pBusID]);
    return 1;
    }
    else if(Vehicle[Spieler[playerid][pBusID]][vehMotor] == true)
    {
    Vehicle[Spieler[playerid][pBusID]][vehMotor] = false;
    GetVehicleParamsEx(Spieler[playerid][pBusID], engine, lights, alarm, doors, bonnet, boot, objective);
    SetVehicleParamsEx(Spieler[playerid][pBusID], VEHICLE_PARAMS_OFF, lights, alarm, doors, bonnet, boot, objective);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,"Du stellst den Motor ab.");
    KillTimer(Vehicle[Spieler[playerid][pBusID]][VehicleTimer]);
    return 1;
    }
    }
    if(vehicleid == Spieler[playerid][pBike])
    {
    if(Vehicle[Spieler[playerid][pBike]][vehMotor] == false)
    {
    Vehicle[Spieler[playerid][pBike]][vehMotor] = true;
    GetVehicleParamsEx(Spieler[playerid][pBike], engine, lights, alarm, doors, bonnet, boot, objective);
    SetVehicleParamsEx(Spieler[playerid][pBike], VEHICLE_PARAMS_ON, lights, alarm, doors, bonnet, boot, objective);
    format(string, sizeof(string), "%s startet den Motor seines Fahrzeuges", GetName(playerid));
    SetPlayerChatBubble(playerid, string, COLOR_PURPLE, 25.0, 7500);
    Vehicle[Spieler[playerid][pBike]][VehicleTimer] = SetTimerEx("OnVehicleTimer", 1136, 1, "i", Spieler[playerid][pBike]);
    return 1;
    }
    else if(Vehicle[Spieler[playerid][pBike]][vehMotor] == true)
    {
    Vehicle[Spieler[playerid][pBike]][vehMotor] = false;
    GetVehicleParamsEx(Spieler[playerid][pBike], engine, lights, alarm, doors, bonnet, boot, objective);
    SetVehicleParamsEx(Spieler[playerid][pBike], VEHICLE_PARAMS_OFF, lights, alarm, doors, bonnet, boot, objective);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,"Du stellst den Motor ab.");
    KillTimer(Vehicle[Spieler[playerid][pBike]][VehicleTimer]);
    return 1;
    }
    }
    if(vehicleid == Spieler[playerid][pFSVehicle])
    {
    if(IsValidVehicle(Spieler[playerid][pFSVehicle])){
    if(Vehicle[Spieler[playerid][pFSVehicle]][vehMotor] == false)
    {
    Vehicle[Spieler[playerid][pFSVehicle]][vehMotor] = true;
    GetVehicleParamsEx(Spieler[playerid][pFSVehicle], engine, lights, alarm, doors, bonnet, boot, objective);
    SetVehicleParamsEx(Spieler[playerid][pFSVehicle], VEHICLE_PARAMS_ON, lights, alarm, doors, bonnet, boot, objective);
    format(string, sizeof(string), "%s startet den Motor seines Fahrzeuges", GetName(playerid));
    SetPlayerChatBubble(playerid, string, COLOR_PURPLE, 25.0, 7500);
    Vehicle[Spieler[playerid][pFSVehicle]][VehicleTimer] = SetTimerEx("OnVehicleTimer", 1136, 1, "i", Spieler[playerid][pFSVehicle]);
    return 1;
    }
    else if(Vehicle[Spieler[playerid][pFSVehicle]][vehMotor] == true)
    {
    Vehicle[Spieler[playerid][pFSVehicle]][vehMotor] = false;
    GetVehicleParamsEx(Spieler[playerid][pFSVehicle], engine, lights, alarm, doors, bonnet, boot, objective);
    SetVehicleParamsEx(Spieler[playerid][pFSVehicle], VEHICLE_PARAMS_OFF, lights, alarm, doors, bonnet, boot, objective);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,"Du stellst den Motor ab.");
    KillTimer(Spieler[playerid][pFSVehicle]);
    return 1;
    }
    }
    }
    return SendClientMessage(playerid, COLOR_GREY, "** Du besitzt keine Schlüssel für dieses Fahrzeug.");
    }

    Ist der return falsch gesetzt?


    Ja...schon, das macht so keinen Sinn..schreib das mal so:


    for(new slot,i=playerid; slot<MAX_PLAYER_VEHICLES; slot++)
    {
    if(vehicleid != PrivateVehicle[i][slot][vehID]) continue;
    GetVehicleParamsEx(PrivateVehicle[i][slot][vehID], engine, lights, alarm, doors, bonnet, boot, objective);
    if(Vehicle[PrivateVehicle[i][slot][vehID]][vehMotor] == false)
    {
    Vehicle[PrivateVehicle[i][slot][vehID]][vehMotor] = true;
    SetVehicleParamsEx(PrivateVehicle[i][slot][vehID], VEHICLE_PARAMS_ON, lights, alarm, doors, bonnet, boot, objective);
    format(string, sizeof(string), "%s startet den Motor seines Fahrzeuges", GetName(playerid));
    SetPlayerChatBubble(playerid, string, COLOR_PURPLE, 25.0, 7500);
    Vehicle[PrivateVehicle[i][slot][vehID]][VehicleTimer] = SetTimerEx("OnVehicleTimer", 1136, 1, "i", PrivateVehicle[i][slot][vehID]);
    return 1;
    }
    Vehicle[PrivateVehicle[i][slot][vehID]][vehMotor] = false;
    SetVehicleParamsEx(PrivateVehicle[i][slot][vehID], VEHICLE_PARAMS_OFF, lights, alarm, doors, bonnet, boot, objective);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,"Du stellst den Motor ab.");
    KillTimer(Vehicle[PrivateVehicle[i][slot][vehID]][VehicleTimer]);
    return 1;
    }
    return SendClientMessage(playerid, COLOR_GREY, "** Du besitzt keine Schlüssel für dieses Fahrzeug.");


    Schreibe es mal so ;)


    mfg. :thumbup:

    Also das ein Paar Explosionen automatisch Hochgehen, ohne das der Spieler betroffen ist


    Dann mach einfach sowas:


    //z.B. unter OnPlayerSpawn
    SetTimerEx("explode",1000,0,"i",playerid);


    forward explode(playerid);
    public explode(playerid) {
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    return CreateExplosion(x+random(75)+25, y+random(75)+25, z, 12, 10.0); //würde den Spieler zum explodieren bringen xD
    }


    Dann finde zufällig um den Spieler herum Explosionen statt ;)

    arum geht das Tor bitte nicht auf?


    Achte auf die returns!


    Schreib es so:


    CMD:auf(playerid)
    {
    if(IsPlayerInRangeOfPoint(playerid, 10.0, 244.11, 72.45, 1002.00))
    {
    if(Spieler[playerid][pFraktion] != 1)return SendClientMessage(playerid,-1,"Sie dürfen das Tor nicht öffnen!");
    MoveDynamicObject(LSPDObj[1], 247.5598, 72.4479, 1002.0016, 3);
    SetTimer("LSPDTor2",5000,0);
    printf("Tor 2-2");
    }
    return 1;
    }


    mfg. :thumbup:

    Guten Morgen euch allen.


    Mir war mal langweilig und mir ist aufgefallen, dass die Funktion TextDrawGetText nicht existiert, also habe ich sie mal kurz implementiert.


    Funktionen:


    native TextDrawGetText(Text:id);
    native PlayerTextDrawGetText(PlayerText:id);


    Beispiel:
    Obwohl eigentlich der Name schon sagt was diese Funktion macht, hier nochmal ein Beispiel:


    new Text:x = TextDrawCreate(50.0,666.0,"Hallo");
    printf("Im TextDraw mit der ID %d steht: %s",_:x,TextDrawGetText(x));
    /*
    Output:
    Im TextDraw mit der ID 0 steht: Hallo
    */


    Im Filterscript nutzbar?
    Ja, auch im Filterscript ist die Include nutzbar, aber bitte gebt das an:


    #define FILTERSCRIPT
    #include <text>


    Download:
    Source-Code: Pastebin
    Direkter-Download: MediaFire


    Ich nutze über 512 TextDraws oder Texte länger als 128

    Um den Speicherbedarf der Include so klein wie möglich zu halten, hatte ich es auf diese zwei Maße reduziert.

    Ich nutze über 512 TextDraws oder Texte länger als 128
    Allerdings könnt ihr diese auch erhöhen:

    Ich nutze über 512 TextDraws oder Texte länger als 128
    #define MAX_TEXT_DRAWS (1024)
    #define MAX_TEXT (256)
    #include <text>
    Jetzt könntet ihr zum Beispiel 1024 TextDraws mit jeweils 256 Zeichen Text verenden ;)


    Schlusswort:
    Hoffe ein paar Leute können es gebrauchen :D
    Habe alle Funktionen getestet gehabt und keine Fehler sind aufgetreten, falls ihr aber was findet, gebt mir bescheid ;)
    Freue mich natürlich über jede Art von Kommentar.


    mfg. :thumbup:

    Kann man per Timer Explosionen erstellen mit einem eigenen Public?


    Natürlich :)


    //z.B. unter OnPlayerSpawn
    SetTimerEx("explode",1000,0,"i",playerid);


    forward explode(playerid);
    public explode(playerid) {
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    return CreateExplosion(x, y, z, 12, 10.0); //würde den Spieler zum explodieren bringen xD
    }


    mfg. :thumbup:

    Nun, wenn du AddPlayerClass nutzt, dann returnt das eine Klasse.


    #define TEAM_COP 0
    #define TEAM_BALLAS 1
    #define TEAM_GROVE 2
    #define MAX_TEAMS 3


    new team[MAX_TEAMS];


    //Unter OnGameModeInit
    team[TEAM_COP] = AddPlayerClass(280,...);
    AddPlayerClass(281,...);
    AddPlayerClass(282,...);
    AddPlayerClass(283,...);
    AddPlayerClass(284,...);
    team[TEAM_BALLAS] = AddPlayerClass(102,...);
    AddPlayerClass(103,...);
    AddPlayerClass(104,...);
    team[TEAM_GROVE] = AddPlayerClass(105,...);
    AddPlayerClass(106,...);
    AddPlayerClass(107,...);


    public OnPlayerRequestClass(playerid,classid)
    {
    if(classid < team[TEAM_BALLAS])
    {
    TextDrawShowForPlayer(playerid, team_cop); //Hier zum beispiel wäre er Cop
    }
    else if(classid < team[TEAM_GROVE])
    {
    TextDrawShowForPlayer(playerid, team_Ballas); //Hier zum beispiel wäre er Ballas
    }
    else
    {
    TextDrawShowForPlayer(playerid, team_Grove); //Hier zum beispiel wäre er Grove
    }
    return 1;
    }


    Hoffe das hilft dir ein wenig ^^


    mfg. :thumbup: