Beiträge von Jeffry

    Nee, nicht das SaveVehicles ändern, die Funktion die ich dir gegeben habe ist "SaveVehicle" (ohne s am Ende). Damit das Fahrzeug gespeichert wird, wenn es /opark't wird.



    Das kannst du auch hiermit abfragen, wie beim /opark, versuche dich mal daran.
    new i = GetFrakVehicleIdx(GetPlayerVehicleID(playerid));
    if(i == -1) return SendClientMessage(playerid, hinweis1, "Du bist nicht in einem abschleppbaren Auto!");


    Ansonsten, wenn du hängst, poste einfach wieder den Code, so weit wie du bist. ;)

    Dann kannst du es so machen:
    ocmd:opark(playerid, params[])
    {
    new preis, grund[34];
    if(sscanf(params,"is",preis,grund))return SendClientMessage(playerid, Color_Green,"Benutzung: /opark [Preis][Grund]");
    if(SpielerInfo[playerid][pTeam] != 5) return SendClientMessage(playerid, hinweis1,"Du bist kein Mitglied des ADAC's!");
    if(isinADAC[playerid] != 1) return SendClientMessage(playerid, hinweis1, "Du bist nicht in der ADAC Zone!");
    else if(preis < 0 || preis > 1000) return SendClientMessage(playerid, hinweis1,"Du kannst das Bußgeld nicht weniger als 0 und mehr als 1000 kosten lassen!");
    {
    new i = GetFrakVehicleIdx(GetPlayerVehicleID(playerid));
    if(i == -1) return SendClientMessage(playerid, hinweis1, "Du bist nicht in einem abschleppbaren Auto!");
    format(VehInfo[i][Grund], 32, grund);
    VehInfo[i][Preis] = preis;
    VehInfo[i][Abgeschleppt] = 1;
    SaveVehicle(i);
    //Hier soll ja dann einfach nur der Preis und den Grund für das jeweilige Auto gespeichert werden
    //abgeschleppt auf 1
    }
    return 1;
    }


    stock GetFrakVehicleIdx(vehicleid)
    {
    for(new i=0; i<sizeof(VehInfo); i++)
    {
    if(VehInfo[i][veh_ID] == vehicleid)
    {
    return i;
    }
    }
    return -1;
    }


    stock SaveVehicle(i)
    {
    if(i < 0 || i >= sizeof(VehInfo)) return 1;
    new string[5];
    format(string, sizeof string, "%d", i);
    mysql_SetInt("Auto", "ModellID", VehInfo[i][ModellID], "ID", string);
    mysql_SetInt("Auto", "Fraktion", VehInfo[i][Fraktion], "ID", string);
    mysql_SetFloat("Auto", "PosX", VehInfo[i][PosX], "ID", string);
    mysql_SetFloat("Auto", "PosY", VehInfo[i][PosY], "ID", string);
    mysql_SetFloat("Auto", "PosZ", VehInfo[i][PosZ], "ID", string);
    mysql_SetFloat("Auto", "PosR", VehInfo[i][PosR], "ID", string);
    mysql_SetInt("Auto", "Abgeschleppt", VehInfo[i][Abgeschleppt], "ID", string);
    mysql_SetInt("Auto", "inADAC", VehInfo[i][inADAC], "ID", string);
    mysql_SetInt("Auto", "Preis", VehInfo[i][Preis], "ID", string);
    mysql_SetString("Auto", "Grund", VehInfo[i][Grund], "ID", string);
    mysql_SetFloat("Auto", "NewX", VehInfo[i][NewX], "ID", string);
    mysql_SetFloat("Auto", "NewY", VehInfo[i][NewY], "ID", string);
    mysql_SetFloat("Auto", "NewZ", VehInfo[i][NewZ], "ID", string);
    mysql_SetFloat("Auto", "NewR", VehInfo[i][NewR], "ID", string);
    mysql_SetInt("Auto", "Farbe1", VehInfo[i][Farbe1], "ID", string);
    mysql_SetInt("Auto", "Farbe2", VehInfo[i][Farbe2], "ID", string);
    return 1;
    }

    Ich sehe hier immer nur Technik oder Essen. 8|
    Schaut mal:



    Quelle: ebay.de - Siehe Link


    http://www.ebay.de/itm/2er-Kuh…in_77&hash=item5b0c0c8098


    Hat nicht mal 48 Stunden gebraucht bis es da war. Das alte am Kühlschrank ist abgebrochen, nach 18 Jahren darf das passieren, spricht für den Kühlschrank. Nur interessant, dass kein Laden, auch nicht die Wohnhäuser, die Küchen verkaufen, sowas nicht da haben (5 Läden abgefahren). Türe geht wieder.



    ...ich merke grade, irgendwie hat auch das mit Essen zu tun. :hm:


    EDIT:
    H4rd_B4se (click:( Oh mist, stimmt. Knallhart beide Klischees erfüllt. Ich könnte ja sagen das war Absicht ... :D

    Erstelle mal die Befehle so weit wie du kommst. An der Stelle an der du hängst postest du wieder hier, und erklärst Schritt für Schritt was in dem Befehl, wenn ihn der Spieler eingibt, passieren soll.
    Aber die Grundstruktur des Befehls kannst du ja schon machen, und dann eben so weit wie du kommst.

    Was meinst du? Klar kannst du mehrere Objekte an einer Stelle haben, aber in deinem sichtbaren Umkreis dürfen nicht mehr als 1000 Objekte sein (bzw. im sichtbaren Umkreis von allen Spielern zusammen), bzw. insgesamt nur 1000 Objekte ohne Streamer.

    Nein, das was IPrototypeI dir das gesagt hat ist nicht gut. Das wird nicht zuverlässig unter allen Bedingungen funktionieren.


    new vehid = GetPlayerVehicleID(playerid);
    new idx = -1;
    for(new i=0; i<sizeof(VehInfo); i++)
    {
    if(VehInfo[i][veh_ID] == vehid)
    {
    idx = i;
    break;
    }
    }
    if(idx == -1)
    {
    SendClientMessage(playerid, hinweis1, "Du bist kein Polizist!");
    return RemovePlayerFromVehicle(playerid);
    }
    new frakid = VehInfo[idx][Fraktion]
    if(frakid != 1) //Fraktion 1 == Polizei
    {
    SendClientMessage(playerid, hinweis1, "Du bist kein Polizist!");
    return RemovePlayerFromVehicle(playerid);
    }


    Und ganz wichtig:
    VehInfo[i][veh_ID] = CreateVehicle(VehInfo[i][ModellID],VehInfo[i][PosX],VehInfo[i][PosY],VehInfo[i][PosZ],VehInfo[i][PosR],VehInfo[i][Farbe1],VehInfo[i][Farbe2],-1);//20



    Oder so: (wahrscheinlich leichter für dich)
    Unten im Gamemode (einmalig):
    stock IsPlayerInAllowedFrakVeh(playerid, frak)
    {
    new vehid = GetPlayerVehicleID(playerid);
    new idx = -1;
    for(new i=0; i<sizeof(VehInfo); i++)
    {
    if(VehInfo[i][veh_ID] == vehid)
    {
    idx = i;
    break;
    }
    }
    if(idx == -1) return 0;
    if(VehInfo[idx][Fraktion] != frak) return 0;
    return 1;
    }


    Bei der Abfrage:
    if(IsPlayerInAllowedFrakVeh(playerid, 1) //Fraktion 1 == Polizei
    {
    SendClientMessage(playerid, hinweis1, "Du bist kein Polizist!");
    return RemovePlayerFromVehicle(playerid);
    }



    In beiden Fällen musst du aber VehInfo[i][veh_ID] vor CreateVehicle schreiben, und auch veh_ID in das enum mit aufnehmen.

    ICy.:
    Nur weil mir schon ein paar mal aufgefallen ist, dass du immer 144 schreibst. Stimmt zwar, aber du verschenkst ein Zeichen. SendClientMessage kann 144 Zeichen anzeigen, das entspricht einem Array von 145, da das EOS Zeichen noch dazu kommt, sprich, SendClientMessage zeigt theoretisch 145 Zeichen an, aber das EOS Zeichen sieht man ja nicht, daher 144 sichtbare + 1 unsichtbares.


    Die "text"-Variable ist hier auch unnötig. ;)
    ocmd:ra(playerid,params[])
    {
    new string[145];
    if(!IsPlayerAdmin(playerid))return SendClientMessage(playerid,COLOR_RED,"Du bist kein Admin und hast nicht das Recht den Admin Report Chat zu nutzen!");
    if(GetPVarInt(playerid,"LiveChat") != 1)return SendClientMessage(playerid,COLOR_RED,"Du bist in keinem Live Chat!");
    if(sscanf(params,"s",string))return SendClientMessage(playerid,COLOR_RED,"Syntax{FFFFFF}: /ra [Report-Text]");
    format(string,sizeof string,"[LIVECHAT]: %s: %s",Name(playerid),string);
    SendClientMessage(GetPVarInt(playerid,"RPartner"),orange,string);
    SendClientMessage(playerid,orange,string);
    return 1;
    }


    Falls GamerKing44: das sscanf Plugin verwendet muss es so aussehen:
    if(sscanf(params,"s[145]",string))return SendClientMessage(playerid,COLOR_RED,"Syntax{FFFFFF}: /ra [Report-Text]");

    "floatin" gibt es nicht.


    Für alle deine Polygone:
    CMD:fish(playerid, params[])
    {
    new Float:pPos[4];
    GetPlayerPos(playerid, pPos[0], pPos[1], pPos[2]);
    GetPlayerFacingAngle(playerid, pPos[3]);


    pPos[0] += (3.0 * floatsin(-pPos[3], degrees));
    pPos[1] += (3.0 * floatcos(-pPos[3], degrees));


    for(new i=0; i<sizeof(River); i++)
    {
    if(IsPointInDynamicArea(River[i], pPos[0], pPos[1], pPos[2]))
    {
    //Code...
    return 1;
    }
    }
    return SendClientMessage(playerid, -1, "Kein Anglergebiet in der Nähe.");
    }



    Manyula: Ja, da hast du Recht. Kommt davon wenn man einfach nur kopiert (ich). :D

    Frage 1:
    Probiere es einfach mal aus. Das ist zu viel um das so zu überblicken.


    Frage 2:
    Arbeite da mit den Werten -1.
    Bei OnPlayerConnect, ganz als erstes:
    DiscPickup[playerid] = -1;
    DiscText[playerid] = Text3D:-1;


    //OnPlayerDisconnect
    if(DiscPickup[playerid] != -1) DestroyPickup(DiscPickup[playerid]), DiscPickup[playerid] = -1;
    if(DiscText[playerid] != Text3D:-1) Delete3DTextLabel(DiscText[playerid]), DiscText[playerid] = Text3D:-1;
    GetPlayerPos(playerid,pos[0],pos[1],pos[2]),GetPlayerVirtualWorld(playerid);
    DiscPickup[playerid] = CreatePickup(1314,1,pos[0],pos[1],pos[2],vw);
    format(string,sizeof(string),"Spieler %s hat den Server verlassen\n(%s)",getPlayerName(playerid),grund);
    DiscText[playerid] = Create3DTextLabel(string,ROT,pos[0],pos[1],pos[2],15,vw,1);
    SetTimerEx("DestroyPickups",30000,false,"i",playerid);
    return 1;
    }


    public DestroyPickups(playerid)
    {
    DestroyPickup(DiscPickup[playerid]), DiscPickup[playerid] = -1;
    Delete3DTextLabel(DiscText[playerid]), DiscText[playerid] = Text3D:-1;
    return 1;
    }

    So sollte es passen:
    ocmd:chouse(playerid,params[])
    {
    new str[120],name[MAX_PLAYER_NAME],inter,preis,level,Float:x,Float:y,Float:z;
    if(IsPlayerConnected(playerid))
    if(IsPlayerAdminLevel(playerid, 3))
    {
    if(sscanf(params,"ddd",inter,preis,level))return SendClientMessage(playerid,Gelb,"Befehl: /chouse [Interior] [Preis] [Level]");
    GetPlayerName(playerid,name,sizeof(name));
    GetPlayerPos(playerid,x,y,z);
    for(new i; i < MAX_HOUSES; i++)
    {
    if(HausInfo[i][Hposx] != 0.0 || HausInfo[i][Hposy] != 0.0 || HausInfo[i][Hposz] != 0.0) continue;
    HausInfo[i][Hposx] = x;
    HausInfo[i][Hposy] = y;
    HausInfo[i][Hposz] = z;
    HausInfo[i][Preis] = preis;
    HausInfo[i][Level] = level;
    HausInfo[i][Interior] = inter;
    HausInfo[i][Pickup] = CreatePickup(1273,1,x,y,z,0);
    format(str,sizeof(str),"Preis: %d$\nLevel: %d\n/buyhouse um es zu kaufen",HausInfo[i][Preis],HausInfo[i][Level]);
    HausInfo[i][Label] = Create3DTextLabel(str,Orange,HausInfo[i][Hposx],HausInfo[i][Hposy],HausInfo[i][Hposz],10.0,0,0);
    break;
    }
    format(str,sizeof(str),"[Admin]: %s hat ein Haus erstellt.",name);
    for(new player; player < MAX_PLAYERS; player++)
    {
    if(IsPlayerAdminLevel(player, 2))
    {
    SendClientMessage(player,Gelb,str);
    }
    }
    }
    return 1;
    }



    ocmd:dhouse(playerid,params[])
    {
    new str[120],name[MAX_PLAYER_NAME], bool:deleted;
    if(IsPlayerConnected(playerid))
    if(IsPlayerAdminLevel(playerid, 3))
    {
    GetPlayerName(playerid,name,sizeof(name));
    for(new i; i < MAX_HOUSES; i++)
    {
    if(IsPlayerInRangeOfPoint(playerid,3.0,HausInfo[i][Hposx],HausInfo[i][Hposy],HausInfo[i][Hposz]))
    {
    HausInfo[i][Hposx] = 0;
    HausInfo[i][Hposy] = 0;
    HausInfo[i][Hposz] = 0;
    HausInfo[i][Preis] = 0;
    HausInfo[i][Level] = 0;
    HausInfo[i][Interior] = 0;
    Delete3DTextLabel(HausInfo[i][Label]);
    DestroyPickup(HausInfo[i][Pickup]);
    deleted = true;
    break;
    }
    }
    if(!deleted) return SendClientMessage(playerid,Grau,"Du bist nicht in der Nähe eine Hauses.");
    for(new player; player < MAX_PLAYERS; player++)
    {
    format(str,sizeof(str),"[Admin]: %s hat ein Haus gelöscht.",name);
    if(IsPlayerAdminLevel(player, 2))
    {
    SendClientMessage(player,Gelb,str);
    }
    }
    }
    return 1;
    }

    Ändere das:
    SpielerInfo[playerid][pGeschlecht] = 1;
    SavePlayer(playerid);
    pSkinAuswahl[playerid] = 1;
    SpawnPlayer(playerid);
    ForceClassSelection(playerid);


    zu:
    SpielerInfo[playerid][pGeschlecht] = 1;
    SavePlayer(playerid);
    pSkinAuswahl[playerid] = 1;
    ClearPlayerChat(playerid,20);
    SendClientMessage(playerid,COLOR_WHITE,"Wähle nun deinen gewünschten Skin aus.");
    SendClientMessage(playerid,COLOR_WHITE,"Mit der {FF6400}Shift Taste {FAFAFA}kommst du zum nächsten Skin. Mit der {FF6400}Enter Taste {FAFAFA}bestätigst du den Skin.");
    SetPlayerPos(playerid,154.0020,-1938.8119,3.7734);
    SetPlayerFacingAngle(playerid,359.9730);
    SetPlayerCameraPos(playerid,153.9503,-1928.0458,3.7696);
    SetPlayerCameraLookAt(playerid,154.0020,-1938.8119,3.7734);
    TogglePlayerSpectating(playerid, true);
    SetPlayerSkin(playerid,2);


    Den Code-Teil bei OnPlayerRequestClass kannst du weg machen (auskommentieren erst mal).


    Geht es dann?
    (Gegebenenfalls musst du den Spieler noch in eine andere virtuelle Welt setzen.)

    Die Schleife musst du bei LoadVehicles ändern.
    Zu:
    for(new i=0; i < sizeof(FrakAutos); i++)


    Dann sollten auch deine Tore etc wieder da sein.


    Zitat

    //Hier der code von dem CreateVehicle in OnGameModeInit


    Den kannst du weg machen, du hast die Fahrzeuge ja hoffentlich alle in das neue Array (enum) übernommen. Wenn nicht, mach das noch. Am Ende sollen ja alle Fahrzeuge in der Datenbank stehen, oder? Sprich, es soll kein CreateVehicle unter OnGameModeInit mehr stehen, außer das bei LoadVehicles.

    Ok, dann liegt es schonmal nicht an einem Anti Cheat oder so.
    Setze den Timer von deinen Waffen, mit dem du sie lädst mal auf 30 Sekunden, bleiben sie dann? (Achte auch darauf, ob es in etwas 30 Sekunden sind, nachdem du sie bekommst).




    EDIT:
    shoxinat0r: Alles klar, super! :good:

    Sorry, hatte nicht gesehen, dass du geantwortet hast.
    Teste doch bitte mal den Befehl hier:
    if(!strcmp(cmdtext, "/test", true)) GivePlayerWeapon(playerid,24,999), return 1;


    Bekommst du die Waffe, wenn du /test eingibst? Oder geht sie auch gleich wieder weg?




    PS: Hättest mich auch per PN erinnern können/dürfen. ;)