Beiträge von Jeffry

    public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid, bodypart)
    {
    if(issuerid != INVALID_PLAYER_ID)
    {
    if(weaponid==23)
    {
    if(IsPlayerACop(issuerid))
    {
    Tazer(playerid);
    }
    }
    }
    return 1;
    }


    So rum dann, ja.



    Nein, das heißt, dass der Spieler sich nicht selbst Schaden zugefügt hat (hingefallen oder so).

    ocmd:hcreate(playerid,params[])
    {
    if(!IsPlayerAnAdmin(playerid))return SendClientMessage(playerid,Rot,"Error: {FFFFFF}You are not allowed to use this Command.");
    if(!IsPlayerAdminRank(playerid,4))return SendClientMessage(playerid,Rot,"Error: {FFFFFF}You are not allowed to use this Command.");
    new inter,price;
    if(sscanf(params,"ii",inter,price))return SendClientMessage(playerid,Rot,"Error: {FFFFFF}Use /hcreate [Interior ID] [BuyPrice]"),
    SendClientMessage(playerid,Grau,"[Types]: 1: Apartment, 2: House, 3: Villa");
    if(!InteriorInfo[inter][int_ID])return SendClientMessage(playerid,Rot,"Error: {FFFFFF}This isn't a Valid Interior. Use /validint to see what Interiors are Valid.");
    for(new i=0;i<MAX_HOUSES;i++)
    {
    if(strlen(HouseInfo[i][h_owner]))continue;
    {
    new query[512];
    new Float:pos[3];
    GetPlayerPos(playerid,pos[0],pos[1],pos[2]);
    HouseInfo[i][h_enterX] = pos[0];
    HouseInfo[i][h_enterY] = pos[1];
    HouseInfo[i][h_enterZ] = pos[2];
    HouseInfo[i][h_exitX] = InteriorInfo[i][int_exitX];
    HouseInfo[i][h_exitY] = InteriorInfo[i][int_exitY];
    HouseInfo[i][h_exitZ] = InteriorInfo[i][int_exitZ];
    HouseInfo[i][h_int] = inter;
    format(HouseInfo[i][h_owner], 24, "Niemand");
    format(query,sizeof(query),"INSERT INTO Houses (id,Owner,EnterPosX,EnterPosY,EnterPosZ,ExitPosX,ExitPosY,ExitPosZ,Interior) VALUES ('%i','%s','%f','%f','%f','%f','%f','%f','%i')",
    i,HouseInfo[i][h_owner],HouseInfo[i][h_enterX],HouseInfo[i][h_enterY],HouseInfo[i][h_enterZ],HouseInfo[i][h_exitX],HouseInfo[i][h_exitY],HouseInfo[i][h_exitZ],HouseInfo[i][h_int]);
    mysql_pquery(Handle,query);
    HouseInfo[i][h_vw] = cache_get_field_content_int(i,"VirtualWorld");
    HouseInfo[i][h_buyprice] = price;
    HouseInfo[i][h_rentprice] = 100;
    HouseInfo[i][h_bought] = 0;
    HouseInfo[i][h_rentable] = 0;
    HouseInfo[i][h_locked] = 1;
    HouseInfo[i][h_money] = 0;
    HouseInfo[i][h_type] = InteriorInfo[i][int_type];
    format(query,sizeof(query),"UPDATE Houses SET BuyPrice='%i',RentPrice='%i',Bought='%i',`Locked`='%i',Money='%i',`Type`='%i',RentAble='%i' WHERE id='%i'",
    HouseInfo[i][h_buyprice],HouseInfo[i][h_rentprice],HouseInfo[i][h_bought],HouseInfo[i][h_locked],HouseInfo[i][h_money],HouseInfo[i][h_type],HouseInfo[i][h_rentable],i);
    if(HouseInfo[i][h_type] == 0)
    {
    new str[128];
    format(str,sizeof(str),"This Apartment has NO Owner, you can buy it.\nPrice: %i$",HouseInfo[i][h_buyprice]);
    Create3DTextLabel(str,Weiß,HouseInfo[i][h_enterX],HouseInfo[i][h_enterY],HouseInfo[i][h_enterZ],10,0,0);
    CreatePickup(1274,0,HouseInfo[i][h_enterX],HouseInfo[i][h_enterY],HouseInfo[i][h_enterZ],0);
    }
    else if(HouseInfo[i][h_type] == 1)
    {
    new str[128];
    format(str,sizeof(str),"This House has NO Owner, you can buy it.\nPrice: %i$",HouseInfo[i][h_buyprice]);
    Create3DTextLabel(str,Weiß,HouseInfo[i][h_enterX],HouseInfo[i][h_enterY],HouseInfo[i][h_enterZ],10,0,0);
    CreatePickup(1274,0,HouseInfo[i][h_enterX],HouseInfo[i][h_enterY],HouseInfo[i][h_enterZ],0);
    }
    else if(HouseInfo[i][h_type] == 2)
    {
    new str[128];
    format(str,sizeof(str),"This Villa has NO Owner, you can buy it.\nPrice: %i$",HouseInfo[i][h_buyprice]);
    Create3DTextLabel(str,Weiß,HouseInfo[i][h_enterX],HouseInfo[i][h_enterY],HouseInfo[i][h_enterZ],10,0,0);
    CreatePickup(1274,0,HouseInfo[i][h_enterX],HouseInfo[i][h_enterY],HouseInfo[i][h_enterZ],0);
    }
    return 1;
    }
    }
    return 1;
    }


    Dann sollte es passen.

    Dann bist du nicht in der Nähe des Hauses.


    if(IsPlayerInRangeOfPoint(playerid, 3.0, hInfo[i][PosY],hInfo[i][PosX],hInfo[i][PosZ]))
    zu:
    printf("Haus Pos: %f / %f / %f", hInfo[i][PosY],hInfo[i][PosX],hInfo[i][PosZ]);
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    printf("Spieler Pos: %f / %f / %f", x, y, z);
    if(IsPlayerInRangeOfPoint(playerid, 3.0, hInfo[i][PosY],hInfo[i][PosX],hInfo[i][PosZ]))
    Was wird geprintet?



    Nein, mit:
    DestroyPickup(hInfo[i][pick_ID]);
    Zum Beispiel. Natürlich musst du es auch so erstellen.

    ocmd:deletehouse(playerid, params[])
    {
    if(SpielerInfo[playerid][pAdmin] < 5) return SendClientMessage(playerid, error, "Du bist kein Admin!");
    for(new i=0; i<MAX_HOUSE; i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 3.0, hInfo[i][PosY],hInfo[i][PosX],hInfo[i][PosZ]))
    {
    format(hInfo[i][Besitzer], 34, "");
    hInfo[i][PosX] = 0;
    hInfo[i][PosY] = 0;
    hInfo[i][PosZ] = 0;
    hInfo[i][IntX] = 0;
    hInfo[i][IntY] = 0;
    hInfo[i][IntZ] = 0;
    hInfo[i][IntID] = 0;
    hInfo[i][VID] = 0;
    hInfo[i][Level] = 0;
    hInfo[i][Kaufpreis] = 0;
    hInfo[i][Mietpreis] = 0;
    hInfo[i][Gekauft] = 0;
    hInfo[i][Lock] = 0;

    //Hier noch das Pickup etc löschen.

    new query[128];
    format(query, sizeof(query), "DELETE FROM House WHERE ID = '%d'", i);
    mysql_tquery(handle, query);
    return SendClientMessage(playerid, erfolg, "Haus wurde erfolgreich gelöscht.");
    }
    }
    return SendClientMessage(playerid, error, "Du bist nicht in der Nähe eines Hauses!");;
    }

    mysql_tquery(handle, "SELECT * FROM Hausdaten ORDER BY ID ASC", "LoadHouse_Data");
    zu:
    mysql_tquery(handle, "SELECT * FROM House ORDER BY ID ASC", "LoadHouse_Data");


    Ja, das wäre sinnvoller, da du sonst für nicht existierende Häuser auch ein Pickup erstellst.

    cache_get_field_content(0, "Besitzer", hInfo[i][Besitzer],handle,34);
    zu:
    cache_get_field_content(i, "Besitzer", hInfo[i][Besitzer],handle,34);


    Was sagt der MySQL Log wenn du den Server startest?


    Pickups können keine erstellt werden, da du in dem Code keine Pickups erstellen lässt.

    Befehl:

    Spoiler anzeigen
    ocmd:createhouse(playerid, params[])
    {
    new Inte, V, hLv, hPreis,text [128];
    if(sscanf(params,"dddd",Inte, V, hLv, hPreis))return SendClientMessage(playerid,info,"/Createhouse [IntID] [Virtuelle Welt] [Level] [Preis]");
    if(SpielerInfo[playerid][pAdmin] < 5) return SendClientMessage(playerid, error, "Du bist kein Admin!");
    for(new i=0; i<MAX_HOUSE; i++)
    {
    if(strlen(hInfo[i][Besitzer])) continue; //Wenn das Haus existiert, gehe weiter.
    new Float:Pos[3];
    GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
    hInfo[i][PosX] = Pos[0];
    hInfo[i][PosY] = Pos[1];
    hInfo[i][PosZ] = Pos[2];
    hInfo[i][IntID] = Inte;
    hInfo[i][VID] = V;
    hInfo[i][Level] = hLv;
    hInfo[i][Kaufpreis] = hPreis;
    hInfo[i][Mietpreis] = 0;
    hInfo[i][Gekauft] = 0;
    hInfo[i][Lock] = 0;
    switch(Inte)
    {
    case 5:
    {
    hInfo[i][IntX] =1267.663208;
    hInfo[i][IntY] =-781.323242;
    hInfo[i][IntZ] =1091.906250;
    }
    /*case 1:
    {
    hInfo[i][IntX] = ;
    hInfo[i][IntY] = ;
    hInfo[i][IntZ] = ;
    }*/
    }
    format(hInfo[i][Besitzer], 34, "Besitzer: Niemand");
    new query[1024];
    format(query, sizeof(query), "INSERT INTO House (ID, Besitzer, Level, PosX, PosY, PosZ, IntX,IntY,IntZ, IntID, VID, `Locked`, Mietpreis, Kaufpreis, Gekauft) VALUES ('%d','%s', '%d', '%f', '%f', '%f', '%f', '%f', '%f', '%d', '%d', '%d', '%d', '%d', '%d')",
    i, hInfo[i][Besitzer], hInfo[i][Level], hInfo[i][PosX], hInfo[i][PosY], hInfo[i][PosZ], hInfo[i][IntX], hInfo[i][IntY], hInfo[i][IntZ], hInfo[i][IntID], hInfo[i][VID], hInfo[i][Lock], hInfo[i][Mietpreis], hInfo[i][Kaufpreis], hInfo[i][Gekauft], i);
    mysql_tquery(handle, query);
    CreatePickup(1273,1,Pos[0],Pos[1],Pos[2],0);
    format(text, sizeof(text), "Besitzer: Niemand\nPreis: %d\nLevel: %d",hInfo[i][Kaufpreis],hInfo[i][Level]);
    Create3DTextLabel(text,0x0FFF00FF,Pos[0],Pos[1],Pos[2],20.0,0,1);
    return SendClientMessage(playerid, 0x00FF00FF, "Haus wurde erfolgreich gespeichert.");
    }
    return SendClientMessage(playerid, error, "Es können keine weiteren Häuser erstellt werden.");
    }


    Und beim Speichern:
    new query[256];
    zu:
    new query[512];

    Deine Einrückung hat nicht gepasst.
    Schreibe es so:
    if (strcmp("/motor", cmd, true, 10) == 0)
    {
    if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return 1;
    new Vehicle = GetPlayerVehicleID(playerid), engine,lights,alarm,doors,bonnet,boot,objective;
    GetVehicleParamsEx(Vehicle, engine, lights, alarm, doors, bonnet, boot, objective);

    GetVehicleParamsEx(Vehicle,engine,lights,alarm,doors,bonnet,boot,objective);
    if(Vehicle != INVALID_VEHICLE_ID)
    {
    if (IsPlayerInVehicle(playerid,Carlist[playerid][Carid]))
    {
    if(engine == VEHICLE_PARAMS_ON)
    {
    SetVehicleParamsEx(Vehicle,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    GameTextForPlayer(playerid, "~n~~n~~n~~n~~n~~n~~W~Motor ~r~aus!", 2000, 5);
    }
    else
    {
    SetVehicleParamsEx(Vehicle,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
    GameTextForPlayer(playerid, "~n~~n~~n~~n~~n~~n~~W~Motor ~g~an!", 2000, 5);
    }
    return 1;
    }


    if(IsACopCar(Vehicle) && (pDaten[playerid][Team] == 5))
    {
    if(engine == VEHICLE_PARAMS_ON)
    {
    SetVehicleParamsEx(Vehicle,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    GameTextForPlayer(playerid, "~n~~n~~n~~n~~n~~n~~W~Motor ~r~aus!", 2000, 5);
    }
    else
    {
    SetVehicleParamsEx(Vehicle,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
    GameTextForPlayer(playerid, "~n~~n~~n~~n~~n~~n~~W~Motor ~g~an!", 2000, 5);
    }
    return 1;
    }

    return SendClientMessage(playerid, 0xFF0000FF, "Sie besitzen keinen Schlüssel für dieses Fahrzeug !");
    }
    return 1;
    }

    Das muss so aussehen:
    case 5: hInfo[i][IntX] = 1267.663208, hInfo[i][IntY] = -781.323242, hInfo[i][IntZ] = 1091.906250;


    Wie sieht dein /createhouse Befehl aus?



    EDIT: Ja, oder so wie du es jetzt nach deinem Edit gemacht hast, das ist auch richtig.

    Hast du einen Teleport Befehl? Teleportiere dich mal zu dem NPC.
    Sprich: SetPlayerPos zu GetPlayerPos vom NPC, SetPlayerInterior zu GetPlayerInterior vom NPC und SetPlayerVirtualWorld zu GetPlayerVirtualWorld vom NPC.


    Siehst du ihn dann wieder? Wenn ja, lass dir die Werte mal ausgeben.

    Ich nehme an, die Textdraws haben immer denselben Inhalt, für jeden Spieler.
    Daher wäre es sinnvoller, die Textdraws unter OnGameModeInit zu erstellen und bei den Timer nur anzuzeigen, bzw zu verstecken.

    Davon solltest du dich nicht abhalten lassen. Die neue Version ist sehr verständlich und einfach aufgebaut, ich bin mir ziemlich sicher, dass du das Prinzip verstehst, wenn du dir das Tutorial anschaust. Es ist natürlich deine Entscheidung, aber ich würde dir wirklich empfehlen die neuste Version zu verwenden, du wirst die Performance Unterschiede merken, wenn du mal mehrere Spieler auf dem Server hast, bzw. mit vielen Daten arbeitest.
    Selbst wenn du einen Tag in das Verstehen des neuen Plugins investierst, das lohnt sich, wirklich.


    Du kannst dir das in etwas so vorstellen, wie wenn du sagst "Ich kann nur mit Windows XP umgehen.". Es ist einfach veraltet und sollte nicht mehr verwendet werden.