Beiträge von Campbell

    Benutz doch einfach IsPlayerNPC() um zu schauen ob es ein NPC ist oder nicht. Das noch schnell in die if-Anfrage setzen und es sollte erledigt sein.

    Falls du möchtest, dass nicht nur das Leben repariert wird, sondern auch das Aussehen des Wagens, dann schau dir mal RepairVehicle an. Ebenfalls schaue nach, ob das Leben gesetz wird mit dem Befehl /dl, der standartmäßig in SA:MP vorhanden ist. Geh sicher, dass du auch in einem Auto sitzt!


    if(dialogid == Heal) // DialogID abfragen.
    {
    if(response) // Wenn sich der Spieler dazu entscheidet 'Ja' zu drücken.
    {
    // Testen ob etwas eingeben wurde und ob es einem verbundenen Spieler zutrifft.
    if(strlen(inputtext) > 0 && strval(inputtext) != INVALID_PLAYER_ID)
    {
    SetPlayerHealth(strval(inputtext), 100);
    }
    else SendClientMessage(playerid, Farbe, "Du hast keine korrekte PlayerID angegeben.");
    // 'Farbe' mit einer deiner Farben ersetzen.
    }
    }

    Die Funktion strcmp, wie schon die ersten drei Buchstaben aussagen, vergleicht zwei Variablen vom Typ 'String'. Daher solltest du wie folgt vorgehen:


    if(dini_Get(Playerdatei,"Eingeloggt") == 0)
    {
    // ...
    }
    Falls du trotzdem Wissen möchtest wie es möglich wäre, siehe hier:



    new str[2], val[2];
    valstr(val, "0");
    valstr(str, dini_Get(Playerdatei,"Eingeloggt"));
    if(strcmp(val, str, true))
    {
    // valstr() formt einen Integer in einen String um, wodurch es möglich wird strcmp zu verwenden.
    }


    Einen Integer aus einem eingegeben Namen zu machen ist nun wirklich eine schlechte Idee. Folgenden stock könntest du verwenden, um GetPlayerID() zu verwenden:



    stock GetPlayerID(const Name[])
    {
    for(new i; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    new pName[MAX_PLAYER_NAME];
    GetPlayerName(i, pName, sizeof(pName));
    if(strcmp(Name, pName, true)==0)
    {
    return i;
    }
    }
    }
    return -1;
    }

    Also weiß nun einer ob man Bots so scripten kann, dass sie einen angreifen


    Man kann alles decoden. Die Frage ist in welcher Zeit man es schafft^^


    Das widerrum ist auch nicht korrekt. Man sollte sich erkundigen, bevor man etwas behauptet. Dennoch kann man auch leichtsinnig oder sehr scharf gegen Eindringlinge vorgehen. MD5 erstellt einen total veralteten und sehr leicht zu decodenden Hash (Siehe: http://www.md5decrypter.com/). Man kann aber mit vielen Mitteln selbst Passwörter weiter verschlüsseln, um selbst vor sog. Rainbow Tables sich zu schützen, die die Form des Hashs erkennen und ihn versuchen zu decoden. Das geht bei MD5 natürlich total schnell und daher ist derzeit ein Verfahren der SHA-Familie oder ein Verfahren wie Whirlpool durchaus sinnvoller.

    Du scheinst also jemanden nach Spielernamen heilen zu wollen. Daher musst du die PlayerID des Spielers herausfinden, da SetPlayerHealth die ID und nicht den Namen verwendet.



    stock HealerID(key[])
    {
    new playerid = GetPlayerID(key);
    if(playerid == -1) return 0;
    SetPlayerHealth(playerid, 100);
    return 1;
    }

    Hast du auch die Befehle übernommen, da du nicht die Variablen neu deklarieren darfst, sonst ist der Wert wieder NULL.


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(GetVehicleModel(vehicleid) == 448 || GetVehicleModel(vehicleid) == 461 || GetVehicleModel(vehicleid) == 462 || GetVehicleModel(vehicleid) == 463 || GetVehicleModel(vehicleid) == 468 || GetVehicleModel(vehicleid) == 471 || GetVehicleModel(vehicleid) == 521 ||
    GetVehicleModel(vehicleid) == 522 || GetVehicleModel(vehicleid) == 523 || GetVehicleModel(vehicleid) == 581 || GetVehicleModel(vehicleid) == 586)
    {
    if(newstate == PLAYER_STATE_DRIVER && PlayerInfo[playerid][BikeL] != 1)
    {
    RemovePlayerFromVehicle(playerid);
    SendClientMessage(playerid, Rot, "Du hast keinen Motorradschein");
    }
    }


    if(GetVehicleModel(vehicleid) == 400 || GetVehicleModel(vehicleid) == 401 || GetVehicleModel(vehicleid) == 402 || GetVehicleModel(vehicleid) == 404 || GetVehicleModel(vehicleid) == 405 ||
    GetVehicleModel(vehicleid) == 409 || GetVehicleModel(vehicleid) == 410 || GetVehicleModel(vehicleid) == 411 || GetVehicleModel(vehicleid) == 412 || GetVehicleModel(vehicleid) == 413 ||
    GetVehicleModel(vehicleid) == 414 || GetVehicleModel(vehicleid) == 415 || GetVehicleModel(vehicleid) == 416 || GetVehicleModel(vehicleid) == 418 || GetVehicleModel(vehicleid) == 419 ||
    GetVehicleModel(vehicleid) == 420 || GetVehicleModel(vehicleid) == 421 || GetVehicleModel(vehicleid) == 422 || GetVehicleModel(vehicleid) == 423 || GetVehicleModel(vehicleid) == 424 ||
    GetVehicleModel(vehicleid) == 426 || GetVehicleModel(vehicleid) == 496 || GetVehicleModel(vehicleid) == 541 ||
    GetVehicleModel(vehicleid) == 427 || GetVehicleModel(vehicleid) == 428 || GetVehicleModel(vehicleid) == 429 || GetVehicleModel(vehicleid) == 434 || GetVehicleModel(vehicleid) == 436 ||
    GetVehicleModel(vehicleid) == 438 || GetVehicleModel(vehicleid) == 439 || GetVehicleModel(vehicleid) == 440 || GetVehicleModel(vehicleid) == 442 || GetVehicleModel(vehicleid) == 445 ||
    GetVehicleModel(vehicleid) == 451 || GetVehicleModel(vehicleid) == 458 || GetVehicleModel(vehicleid) == 459 || GetVehicleModel(vehicleid) == 466 || GetVehicleModel(vehicleid) == 467 ||
    GetVehicleModel(vehicleid) == 470 || GetVehicleModel(vehicleid) == 474 || GetVehicleModel(vehicleid) == 475 || GetVehicleModel(vehicleid) == 477 || GetVehicleModel(vehicleid) == 478 ||
    GetVehicleModel(vehicleid) == 479 || GetVehicleModel(vehicleid) == 480 || GetVehicleModel(vehicleid) == 482 || GetVehicleModel(vehicleid) == 483 || GetVehicleModel(vehicleid) == 489 ||
    GetVehicleModel(vehicleid) == 490 || GetVehicleModel(vehicleid) == 491 || GetVehicleModel(vehicleid) == 492 || GetVehicleModel(vehicleid) == 494 || GetVehicleModel(vehicleid) == 495 ||
    GetVehicleModel(vehicleid) == 498 || GetVehicleModel(vehicleid) == 499 || GetVehicleModel(vehicleid) == 500 || GetVehicleModel(vehicleid) == 502 || GetVehicleModel(vehicleid) == 503 ||
    GetVehicleModel(vehicleid) == 504 || GetVehicleModel(vehicleid) == 505 || GetVehicleModel(vehicleid) == 506 || GetVehicleModel(vehicleid) == 507 || GetVehicleModel(vehicleid) == 508 ||
    GetVehicleModel(vehicleid) == 516 || GetVehicleModel(vehicleid) == 517 || GetVehicleModel(vehicleid) == 518 || GetVehicleModel(vehicleid) == 525 || GetVehicleModel(vehicleid) == 526 ||
    GetVehicleModel(vehicleid) == 527 || GetVehicleModel(vehicleid) == 528 || GetVehicleModel(vehicleid) == 529 || GetVehicleModel(vehicleid) == 531 || GetVehicleModel(vehicleid) == 532 ||
    GetVehicleModel(vehicleid) == 533 || GetVehicleModel(vehicleid) == 534 || GetVehicleModel(vehicleid) == 535 || GetVehicleModel(vehicleid) == 536 || GetVehicleModel(vehicleid) == 540 ||
    GetVehicleModel(vehicleid) == 542 || GetVehicleModel(vehicleid) == 543 || GetVehicleModel(vehicleid) == 545 || GetVehicleModel(vehicleid) == 546 || GetVehicleModel(vehicleid) == 547 ||
    GetVehicleModel(vehicleid) == 549 || GetVehicleModel(vehicleid) == 550 || GetVehicleModel(vehicleid) == 551 || GetVehicleModel(vehicleid) == 552 || GetVehicleModel(vehicleid) == 554 ||
    GetVehicleModel(vehicleid) == 555 || GetVehicleModel(vehicleid) == 558 || GetVehicleModel(vehicleid) == 560 || GetVehicleModel(vehicleid) == 561 || GetVehicleModel(vehicleid) == 562 ||
    GetVehicleModel(vehicleid) == 565 || GetVehicleModel(vehicleid) == 566 || GetVehicleModel(vehicleid) == 567 || GetVehicleModel(vehicleid) == 568 || GetVehicleModel(vehicleid) == 573 ||
    GetVehicleModel(vehicleid) == 575 || GetVehicleModel(vehicleid) == 576 || GetVehicleModel(vehicleid) == 579 || GetVehicleModel(vehicleid) == 580 || GetVehicleModel(vehicleid) == 496 ||
    GetVehicleModel(vehicleid) == 582 || GetVehicleModel(vehicleid) == 585 || GetVehicleModel(vehicleid) == 587 || GetVehicleModel(vehicleid) == 588 || GetVehicleModel(vehicleid) == 589 ||
    GetVehicleModel(vehicleid) == 596 || GetVehicleModel(vehicleid) == 597 || GetVehicleModel(vehicleid) == 598 || GetVehicleModel(vehicleid) == 599 || GetVehicleModel(vehicleid) == 600 ||
    GetVehicleModel(vehicleid) == 601 || GetVehicleModel(vehicleid) == 602 || GetVehicleModel(vehicleid) == 603 || GetVehicleModel(vehicleid) == 604 || GetVehicleModel(vehicleid) == 605 ||
    GetVehicleModel(vehicleid) == 609)
    {
    if(newstate == PLAYER_STATE_DRIVER && PlayerInfo[playerid][CarL] != 1)
    {
    RemovePlayerFromVehicle(playerid);
    SendClientMessage(playerid, Rot, "Du hast keinen Fühererschein");
    }
    }
    if(GetVehicleModel(vehicleid) == 417 || GetVehicleModel(vehicleid) == 425 ||
    GetVehicleModel(vehicleid) == 447 || GetVehicleModel(vehicleid) == 460 ||
    GetVehicleModel(vehicleid) == 469 || GetVehicleModel(vehicleid) == 476 ||
    GetVehicleModel(vehicleid) == 487 || GetVehicleModel(vehicleid) == 488 ||
    GetVehicleModel(vehicleid) == 497 || GetVehicleModel(vehicleid) == 511 ||
    GetVehicleModel(vehicleid) == 512 || GetVehicleModel(vehicleid) == 513 ||
    GetVehicleModel(vehicleid) == 519 || GetVehicleModel(vehicleid) == 520 ||
    GetVehicleModel(vehicleid) == 548 || GetVehicleModel(vehicleid) == 553 ||
    GetVehicleModel(vehicleid) == 563 || GetVehicleModel(vehicleid) == 577 ||
    GetVehicleModel(vehicleid) == 592 || GetVehicleModel(vehicleid) == 593)
    {
    if(newstate == PLAYER_STATE_DRIVER && PlayerInfo[playerid][FlyL] != 1)
    {
    RemovePlayerFromVehicle(playerid);
    SendClientMessage(playerid, Rot, "Du hast keinen Flugschein");
    }
    }


    new carid = GetPlayerVehicleID(playerid);
    if(newstate == PLAYER_STATE_DRIVER)
    {
    Speedo(playerid,1);
    if(IsANewbie(carid))
    {
    if(PlayerInfo[playerid][Level] > 3) SendClientMessage(playerid,Rot,"Dieses Fahrzeug darfst du nur bis Level 3 Fahren"), RemovePlayerFromVehicle(playerid);
    }


    if(IsAAirportCar(carid))
    {
    if(PlayerInfo[playerid][Level] < 3) SendClientMessage(playerid,Rot,"Dieses Fahrzeug darfst du erst ab Level 3 Benutzen"), RemovePlayerFromVehicle(playerid);
    }
    if(IsALSPDCar(carid))
    {
    if(PlayerInfo[playerid][Beruf] != 1) SendClientMessage(playerid,Rot,"Dieses Fahrzeug darfst du nicht Benutzen"), RemovePlayerFromVehicle(playerid);
    }
    if(IsAFBICar(carid))
    {
    if(PlayerInfo[playerid][Beruf] != 2) SendClientMessage(playerid,Rot,"Dieses Fahrzeug darfst du nicht Benutzen"), RemovePlayerFromVehicle(playerid);
    }
    if(IsAArmiCar(carid))
    {
    if(PlayerInfo[playerid][Beruf] != 3) SendClientMessage(playerid,Rot,"Dieses Fahrzeug darfst du nicht Benutzen"), RemovePlayerFromVehicle(playerid);
    }
    if(IsAMedicCar(carid))
    {
    if(PlayerInfo[playerid][Beruf] != 4) SendClientMessage(playerid,Rot,"Dieses Fahrzeug darfst du nicht Benutzen"), RemovePlayerFromVehicle(playerid);
    }
    if(IsAFahrschulCar(carid))
    {
    if(PlayerInfo[playerid][Beruf] != 5) SendClientMessage(playerid,Rot,"Dieses Fahrzeug darfst du nicht Benutzen"), RemovePlayerFromVehicle(playerid);
    }
    /*if(IsATaxiCar(carid))
    {
    if(PlayerInfo[playerid][Beruf] != 6) SendClientMessage(playerid,Rot,"Dieses Fahrzeug darfst du nicht Benutzen"), RemovePlayerFromVehicle(playerid);
    }*/
    if(IsAPresidentCar(carid))
    {
    if(PlayerInfo[playerid][Beruf] != 7) SendClientMessage(playerid,Rot,"Dieses Fahrzeug darfst du nicht Benutzen"), RemovePlayerFromVehicle(playerid);
    }
    if(IsANewsCar(carid))
    {
    if(PlayerInfo[playerid][Beruf] != 8) SendClientMessage(playerid,Rot,"Dieses Fahrzeug darfst du nicht Benutzen"), RemovePlayerFromVehicle(playerid);
    }
    if(IsAGrooveCar(carid))
    {
    if(PlayerInfo[playerid][Beruf] != 9) SendClientMessage(playerid,Rot,"Dieses Fahrzeug darfst du nicht Benutzen"), RemovePlayerFromVehicle(playerid);
    }
    if(IsALCNCar(carid))
    {
    if(PlayerInfo[playerid][Beruf] != 10) SendClientMessage(playerid,Rot,"Dieses Fahrzeug darfst du nicht Benutzen"), RemovePlayerFromVehicle(playerid);
    }
    if(IsABallasCar(carid))
    {
    if(PlayerInfo[playerid][Beruf] != 11) SendClientMessage(playerid,Rot,"Dieses Fahrzeug darfst du nicht Benutzen"), RemovePlayerFromVehicle(playerid);
    }
    if(IsABikerCar(carid))
    {
    if(PlayerInfo[playerid][Beruf] != 12) SendClientMessage(playerid,Rot,"Dieses Fahrzeug darfst du nicht Benutzen"), RemovePlayerFromVehicle(playerid);
    }
    if(IsAVagosCar(carid))
    {
    if(PlayerInfo[playerid][Beruf] != 13) SendClientMessage(playerid,Rot,"Dieses Fahrzeug darfst du nicht Benutzen"), RemovePlayerFromVehicle(playerid);
    }
    if(IsAYakuzaCar(carid))
    {
    if(PlayerInfo[playerid][Beruf] != 14) SendClientMessage(playerid,Rot,"Dieses Fahrzeug darfst du nicht Benutzen"), RemovePlayerFromVehicle(playerid);
    }
    if(IsARifaCar(carid))
    {
    if(PlayerInfo[playerid][Beruf] != 15) SendClientMessage(playerid,Rot,"Dieses Fahrzeug darfst du nicht Benutzen"), RemovePlayerFromVehicle(playerid);
    }
    if(IsATerrorCar(carid))
    {
    if(PlayerInfo[playerid][Beruf] != 16) SendClientMessage(playerid,Rot,"Dieses Fahrzeug darfst du nicht Benutzen"), RemovePlayerFromVehicle(playerid);
    }


    }


    if(newstate == PLAYER_STATE_ONFOOT)
    {
    Speedo(playerid,0);
    }
    return 1;
    }

    Schau dir auch mal else und elseif an, du machst hier sehr viele sehr unnötige Abfragen.

    bei mir funzt das garnicht


    Was bedeutet 'funtzt das garnicht'? Wirst du nach Blueberry Farm teleportiert oder bleibst du einfach stehen? Falls du stehen bleibst, ist alles korrekt, wie ich bereits oben beschrieben habe. Was genau willst du denn erreichen?

    Das sollte eigentlich nicht passierent, wenn du unten die Klammer nicht vergessen hast. Du holst dir einfach deine Koordinaten und setzt sie erneut. Wenn du nicht schon in Blueberryfarm bist sollte einfach garnichts passieren, außer dir die Nachricht ausgegeben werden. Benutzt du nur den Befehl /goto im Spiel?

    Wo hast Du den Schwachsinn her?


    Nun gut, was daran ist denn genau ein Schwachsinn, eine Begründung wäre nett.



    Also weiß nun einer ob man Bots so scripten kann, dass sie einen angreifen


    Es ist möglich, dass Bots an bestimmten Positionen Schlag-Animationen ausführen. Was ebenfalls evt. möglich wäre, ist die Position des Bots erneut und erneut zu setzen, aber dass ein Bot wirklich zuschlägt wird nach dem was ich weiß nicht möglich sein. Man könnte ja Leben abziehen, wenn der Bot in der Nähe ist und die Schlag-Animation ausführt.

    Du kombinierst Bedingungen innerhalb einer if-Schleife und erstellst nicht zwei if-Anfragen:



    public OnPlayerDeath(playerid, killerid, reason)
    {
    if(PlayerDeathTime[playerid] == 0)
    {
    SetDeathSpawn(playerid);
    PlayerDeathTime[playerid] = 1;
    return 1;
    }
    else
    {
    SetPlayerPos(playerid, 0,0,0);//Koordianten von Friedhof einfügen :P
    return 1;
    }


    if(IsPlayerConnected(killerid) && killerid != playerid)
    {
    SendClientMessage(killerid,Rot, "Du hast ein Verbrechen begangen! (Mord) Reporter: Anonym");
    PlayerInfo[killerid][Verbrechen] += 1;
    }


    PlayerInfo[playerid][InSkinChange]=false;
    return 1;
    }


    Anderst als bei stocks musst du publics immer forwarden, d.h. forward() benutzen. Ebenfalls musst du deinen Variablen Werte zuweisen, da sonst nichts passieren kann.



    /* Variablen initialisieren. */


    Float:x_max = 0;
    Float:x_min = 0;
    Float:y_max = 0;
    Float:y_min = 0;


    forward SetDeathSpawn(playerid);
    public SetDeathSpawn(playerid)
    {
    if(PlayerDeathTime[playerid] == 1)
    {
    SetPlayerWorldBounds(playerid, x_max, x_min, y_max, y_min);
    SetPlayerPos(playerid, 0,0,0);
    SendClientMessage(playerid, Rot,"Du bsit für 2Minuten auf dem Friedhof");
    SetPlayerSkin(playerid, 162);
    SetTimerEx("SetPlayerSpawn",120000 ,0,"i",playerid);
    SetTimerEx("PlayerDeathReset",110000 ,0,"i",playerid);
    }
    }


    forward PlayerDeathReset(playerid);
    public PlayerDeathReset(playerid)
    {
    if(PlayerDeathTime[playerid] == 1)
    {
    PlayerDeathTime[playerid] = 0;
    SetPlayerWorldBounds(playerid, x_max, x_min, y_max, y_min)
    }
    }

    Du speicherst evt. alles ab ohne vorher alles geladen zu haben. Ohne Quellcode wird es trotzdem schwer bleiben dir zu helfen. Schaue eben nach, dass du die Daten eines Spielers nur speicherst, wenn er auch eingeloggt ist bzw. die Daten geladen sind.

    Du musst eben aufpassen, dass du die Objekt vor den Autos erstellst sonst stehen die Autos einfach in der Luft und das Resultat ist, dass sie runterfallen. Um zu verhindern, dass du runterfällst, währendessen die Objekte geladen sind benutze einfach TogglePlayerControllable und setzte dich einfach wieder auf 'unfrozen', sobald die Objekte geladen sind.

    Es steht ja eins zu eins da, du musst CAR_AMOUNT oben im Script noch folgendermaßen definieren: (Zahl nach deinen Wünschen anpassen)


    #define CAR_AMOUNT 200