Beiträge von IPrototypeI




    Dazu kann die for-schleife so ausssehen


    for(new i, i != MAX_GARAGEN; ++i){
    if(!IsPlayerInRangeOfPoint(playerid,2.0,Garagen[i][xx],Garagen[i][yy],Garagen[i][zz]) && !Garagen[i][Gcreated] && !Garagen[i][Buy])continue;
    Garagen[i][Buy]= 1:
    Garagen[i][Owner]= playerid:
    return SendClientMessage(playerid,-1,"Du hast die Garage gekauft");
    }

    Martin.1994


    Dein System könnte so aussehen in etwa



    #include <a_samp>
    #include <sscanf2>
    #include <pcmd>


    new Float:DeadPoint[MAX_PLAYERS][3],
    DeadPeople[MAX_PLAYERS] ={-1,...},
    ReanimatedPlayer[MAX_PLAYERS]={-1,...},
    Medic[MAX_PLAYERS];


    CMD->medic(playerid,params[]){
    extract params -> new player:pID;else return SendClientMessage(playerid,-1,"Benutze: /medic [playerid]");
    Medic[pID] = 1;
    return 1;
    }
    CMD->accept(playerid,params[]){
    extract params -> new player:pID;else return SendClientMessage(playerid,-1,"Benutze: /accept [playerid]");
    new i;
    for(; i != MAX_PLAYERS; ++i){
    if(DeadPeople[i] == pID){
    SetPlayerCheckpoint(playerid,DeadPoint[i][0],DeadPoint[i][1],DeadPoint[i][2],1.0);
    ReanimatedPlayer[playerid] = i;
    return SendClientMessage(playerid,-1,"Du kannst ihn nun reanimieren");
    }
    }
    SendClientMessage(playerid,-1,"Dieser Spieler ist nicht Tod");
    return 1;
    }
    public OnPlayerDeath(playerid, killerid, reason)
    {
    GetPlayerPos(playerid,DeadPoint[playerid][0],DeadPoint[playerid][1],DeadPoint[playerid][2]);
    DeadPeople[playerid] = playerid;
    new i,str[30];
    format(str,30,"Der Spieler mit der id %d ist verreckt!",playerid);
    CreatePickup(1254, 1, DeadPoint[playerid][0],DeadPoint[playerid][1],DeadPoint[playerid][2], 0);
    for(; i < MAX_PLAYERS; ++i)if(Medic[i])SendClientMessage(i,-1,str);
    return 1;
    }
    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    if(ReanimatedPlayer[playerid] != -1){
    new i;
    for(; i < MAX_PLAYERS; ++i){
    if(IsPlayerInRangeOfPoint(playerid,2.0,DeadPoint[i][0],DeadPoint[i][1],DeadPoint[i][2]) && ReanimatedPlayer[playerid] == DeadPeople[i]){
    DisablePlayerCheckpoint(playerid);
    SetPlayerPos(ReanimatedPlayer[playerid],DeadPoint[i][0],DeadPoint[i][1],DeadPoint[i][2]);
    DestroyPickup(pickupid);
    DeadPeople[i] = -1;
    ReanimatedPlayer[playerid] = -1;
    DeadPoint[i][0] = 0.0;
    DeadPoint[i][1] = 0.0;
    DeadPoint[i][2] = 0.0;
    return SendClientMessage(playerid,-1,"Du hast den Spieler reanimiert");
    }
    }
    }
    return 1;
    }

    Hört sich vielleicht jetzt ein bischen blöd an aber wie kann ich jetzt machen das ich wenn ich zb /garage buy eingebe.
    Das dann nur 1ne garage gekauft wird? Hab da jetzt irgendwie ein Denkfehler ?(

    Aufgrund deiner zweiten Aussage ich weiß ja nicht wie du das ganze aufgebaut hast jedoch solltest du die schleife dann abbrechen lassen
    mit break; oder einem return 1; sollte die bedingung erfüllt sein


    Hier bitte


    if (strcmp("/garagen", cmdtext, true, 10) == 0){
    new string[30];
    for(new i = 0; i <MAX_GARAGEN; i++){
    if(Garagen[i][Gcreated] && !Garagen[i][Buy]){
    format(string,30,"Garage %d ist frei",i);
    SendClientMessage(playerid,-1,string);
    }
    }
    return 1;
    }

    Danke endlich funzt es habe es jetzt so


    format(query,sizeof(query),"INSERT INTO account (Name,Passwort,Regdatum) VALUES ('%s','%s',NOW())",name,passwort);


    Sind diese zeichen ` nötig bei mir geht es auch ohne


    Nicht zwingend diese Zeichen werden Backticks genannt und sind dazu da das die tabellennamen oder spaltennamen nicht als SQL-Funktionen erkannt werden. Also somit erfüllen sie den selben Zweck wie die einfachen Anführungszeichen um statische, nicht-numerische und nicht-primitive Werte zu maskieren.


    Das Semikolon ist nicht zwingend gehört aber zu einem sauberen Codingstil und signalisiert MySQL das hier das Query zu Ende ist

    mach dei einfachen Anführungszeichen bei dem NOW() weg da NOW eine SQL-Funktuion ist benötigst du das nicht sonst wird das ganze auch nicht als derartiges erkannt. Zu dem fehlt dir auch eine Klammer.


    SQL
    "INSERT INTO `account `(`Name`,`Passwort`,`Regdatum`) VALUES ('%s','%s',NOW());"

    #include <a_samp>
    new Float:Pos[MAX_PLAYERS][3];
    #define COLOR_ORANGE 0xFF9900AA


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(strcmp(cmdtext,"/sp",true)==0)
    {
    GetPlayerPos(playerid,Pos[playerid][0],Pos[playerid][1],Pos[playerid][2]); // error 035: argument type mismatch (argument 2)
    SendClientMessage(playerid,COLOR_ORANGE,"Your position was saved successfully!");
    return 1;
    }
    else if(strcmp(cmdtext,"/lp",true)==0)
    {
    SetPlayerPos(playerid,Pos[playerid][0],Pos[playerid][1],Pos[playerid][2]); // error 035: argument type mismatch (argument 2)
    SendClientMessage(playerid,COLOR_ORANGE,"Your position was loaded successfully!");
    return 1;
    }
    return 0;
    }


    Hier bitte


    Dein Problem ist es das du zum einen dem ganzen kein Datentyp zuweißt beim initalisieren und wenn du es schon als array deklarierst solltest
    du es auch dementsprechend so nutzen.


    Danke dir, bei so vielen Klammern komm ich manchmal durcheinander


    Also wegen der Klammer die musst du hinten ergänzen
    strcat(query,"CREATE TABLE IF NOT EXISTS accounts (id int(11) NOT NULL AUTO_INCREMENT, Name varchar(24) NOT NULL, Passwort varchar(40) NOT NULL, Adminlevel int(2) NOT NULL, Skin int(3) NOT NULL, Level int(2) NOT NULL, Geld int(11) NOT NULL, Konto int(1) NOT NULL, Kontostand int(11) NOT NULL,");
    strcat(query,"Personalausweis int(1) NOT NULL, Arbeitserlaubnis int(1) NOT NULL, Fraktkionssperre int(1) NOT NULL, Fraktion int(2) NOT NULL, Fraktionsrang int(1) NOT NULL, Leader int(1) NOT NULL, Pin int(11) NOT NULL, Kontonummer int(11) NOT NULL, Ganja int(6) NOT NULL, C4 int(6) NOT NULL, LSD int(6) NOT NULL,");
    strcat(query,"Warns int(1) NOT NULL, Job int(3) NOT NULL, Arbeitslosengeld int(1) NOT NULL, NvR-Points int(3) NOT NULL, PRIMARY KEY (id))");
    mysql_function_query(dbhandle,query,false,"","");


    PRIMARY KEY (id))

    Du hast am ende ein klammer vergessen ")" zu dem solltest du das callback
    OnQueryError hinzufügen


    public OnQueryError(errorid, error[], callback[], query[], connectionHandle) {
    printf("Errorid %d",errorid);
    print(error);
    print(callback);
    print(query);
    return 1;
    }


    Hatte ich auch am Ende vor ;)


    Danke für eure Hilfe.


    Das ganze geht schon so wie du es machen willst nur benutzt du den Falschen MYSQL- Befehl


    SQL
    SELECT `mutetime`, `tban` FROM `badwords` WHERE INSTR('%e', `word`) != 0 LIMIT 0,1;


    //edit LIMIT 1 reicht auch
    LIMIT 0,1 bedeutet ab Zeile 0 nur 1 Ergeniss daher kann man das ganze auch von der zeile 2 oder x anfangen lassen und x werte auslesen lassen hier Beispiel ab 2 und wieder nur 1 Wert.
    LIMIT 2,1

    Dagegen kannst du nix machen jedoch wird nach OnPlayerDeath OnPlayerSpawn aufgerufen daher wäre es besser den spieler entweder danach zurück zu porten und zu freezen oder ihn ab einer bestimmten hp-anzahl dann zu freezen in dem du ein eigenes Healsystem machst und jeden in das Team 1 setzt da dadurch kannst du den verursachten schaden blocken und auch die Damage was eine Waffe verursacht einstellen.

    Habe es gemacht. Aber leider kommt immer noch der gleiche Error.


    Dir ist schon bewusst das , das Plugin an sich die .so oder .dll nix damit zu tun hat das ganze muss in den plugins ordner dein Problem ist es das er die include von dem Plugin nicht findet stell sicher das es sich im pawno ordner unter includes befindet.


    Jedoch weiß ich nicht welches Plugin verwendet wird bei dem von strickenkid heißt die include mysql und bei dem von BlueG a_mysql
    es kann jedoch auch sein das die include einfach umbenannt worden ist also schau einfach die includes durch.


    Ja das geht wenn du die Anführungszeichen escapest mit \


    new string[128];
    format(string,128," Deine Virtuelle Welt wurde auf "%d" gesetzt!",welt);
    SendClientMessage(playerid,-1,string);

    Ja das ist möglich:


    CountPlayerInMode(string[],len = sizeof(string)){


    Zur Verwendung
    new string[40];
    CountPlayerInMode(string);
    SendClientMessage(playerid,-1,string);


    oder
    new string[40];
    CountPlayerInMode(string,40);
    SendClientMessage(playerid,-1,string);



    Die Länge des strings habe ich einfach mal als optionaler parameter gemacht
    len = sizeof(string) durch das zuweißen eines wertes wird der parameter immer optional.


    Bei strings die man formatieren lässt in der Funktion wird den inhalt enthalten das gilt nicht für variabeln.
    um dort einen wert zurück zu geben muss man ein & Zeichen anhängen.


    Kernpunkt deiner Frage ist die schleife



    new i, count[2];
    for(; i != MAX_PLAYERS; ++i){
    switch(PlayerInfo[i][pMode]){
    case 1: ++count[0];
    case 2: ++count[1];
    }
    }


    Dort möchtest du doch die Anzahl der Leute haben die in dem jeweiligen Mode spielen daher musst du zwei variabel hochzählen lassen was wir hier tun. Da ich mal davon ausgehe das du auch aufgrund des spawns abfrägst in welchem Modus er ist und das dem spieler zuordnest beim auswählen.
    Daher musst du den auch Abfragen das kannst du so machen via switch +case oder mit eine if-abfrage je nachdem was vllt von vorteil ist,
    ist das du danach schaust das du 3 Werte benutzt 0, 1, 2 wobei 0 der Default(Standart-) Wert ist, vielleicht machst du das auch nicht dann solltest du noch abprüfen ob der spieler online ist am besten noch eingeloggt oder nicht.
    Das ganze kann auch so aussehen


    for(; i != MAX_PLAYERS; ++i){
    if(!IsPlayerConected(i))continue;
    !PlayerInfo[i][pMode] && ++count[0] || ++count[1];
    }


    letztendlich wird das ganze in den string gepackt und du kannst es verwenden.

    du setzt doch bestimmt eine spielervariabel und die frägst du ab, zu dem benötigst du noch zwei variabeln um das zu zählen.
    Beispiel:

    CountPlayerInMode(string[],len = sizeof(string)){
    new i, count[2];
    for(; i != MAX_PLAYERS; ++i){
    switch(PlayerInfo[i][pMode]){
    case 1: ++count[0];
    case 2: ++count[1];
    }
    }
    format(string,len ,"Cops'n Robbers: %d Spieler | Freeroam: %d Spieler",count[0],count[1]);
    return 1;
    }

    Kann dem nicht ganz folgen..

    Ganz einfach die Abfrage wird nicht funktionieren wenn du vor dem Funktion aufruf von LoadCars Fahrzeuge erstellst.


    Was ist damit gemeint ?



    public OnGameModeInit() {
    CreateVehicle(560,0.0,0.0,0.0,0.0,1,1,-1);
    LoadCars();
    ...


    wenn du in das Auto, in den Sultan einsteigst gelten die Daten des Index 0 deines Arrays obwohl der nix mit den Fraktionsautos zu tun hat.
    Das wird wahrscheinlich dein Problem sein.