Beiträge von Piranha

    SetTimer("HausInfoUp", UpdateConfig, 1);
    Hier das noch (zusätzlich zu der anderen Änderung) in folgendes umändern:
    SetTimerEx("HausInfoUp",UpdateConfig,1,"i",playerid);
    Damit wird die Variable 'playerid' als Parameter an 'HausInfoUp' weitergegeben.
    Sollte nun hoffentlich funktionieren. ;)

    Ich vermute mal, dass es an folgender Zeile liegt:
    if(IsPlayerInRangeOfPoint(playerid,4,HausInfo[haus][haus_x],HausInfo[haus][haus_y],HausInfo[haus][haus_z]))
    in folgendes umändern:
    if(IsPlayerInRangeOfPoint(playerid,4.0,HausInfo[haus][haus_x],HausInfo[haus][haus_y],HausInfo[haus][haus_z]))
    Erklärung: Der zweite Parameter von IsPlayerInRangeOfPoint muss ein 'Float' sein. Also eine Zahl mit Nachkommastellen.
    Vermutlich sollte dies das Problem beheben.

    if(IsPlayerInRangeOfPoint(playerid,10,-1361.42871094,858.04595947,46.76197433))
    {
    if(WantedLevel[playerid] == 0)
    {
    MoveObject(maut[2],-1361.42871094,858.04595947,46.76197433-5,4);
    SetTimer("GateClose", 6000, 0);
    MoveObject(maut[3],-1361.81604004,857.76989746,46.76197433-5,4);
    SetTimer("GateClose", 6000, 0);
    GivePlayerMoney(playerid, -750);
    BizzInfo[0][bTill] += 750; // Beispiel für das Business mit der ID 0 (Beispiel für die sog. 'sBiz': "SBizzInfo[0][sbTill] += 750;")
    SendClientMessage(playerid,weiß,"Die Maut ist für 6 Sekunden geöffnet.");
    return 1;
    }
    return SendClientMessage(playerid,rot,"Wanteds dürfen nicht durch die Maut !");
    }
    So sollte es im GF klappen.

    ocmd:spawnplayer(playerid, params[])
    {
    new pID, AdminName[MAX_PLAYER_NAME], SpielerName[MAX_PLAYER_NAME], string[128];
    GetPlayerName(playerid, AdminName, sizeof(AdminName));
    GetPlayerName(pID, SpielerName, sizeof(SpielerName)); // pID beträgt zu dem Zeitpunkt noch 0 und dadurch wird der Spieler-Name von der ID 0 abgefragt
    if(SpielerInfo[playerid][pAdmin] < 2){
    return SendClientMessage(playerid, COLOR_RED,"Du bist kein Admin!");}
    if(sscanf(params,"u",pID)){ // Erst hier nimmt pID den Wert der eingegebenen ID an; sprich die Abfrage des Namens muss NACH dieser Zeile hier erfolgen
    return SendClientMessage(playerid, COLOR_RED,"[Benutzung:] /spawnplayer [ID]");}
    SpawnPlayer(pID);
    format(string, sizeof(string),"[AdmCmd:] Der Admin %s hat den Spieler %s gespawnt.", AdminName, SpielerName);
    SendClientMessageToAll(COLOR_RED,string);
    return 1;
    }


    Zum zweiten Fehler:
    Schon mal probiert den Spieler vor dem Spawnen aus dem Auto zu entfernen, nach dem Spawnen die Position vom Spieler abzufragen und dann das Auto an die Position setzen und anschließend wieder den Spieler ins Auto zu setzen ?
    Ist vielleicht nicht die eleganteste Lösung. Mehr fällt mir aber nicht wirklich ein. :P

    ocmd:buybiz(playerid, params[])
    {
    for(new i=0;i>500;i++) // das würde bedeuten, dass er die Variable 'i' erstellt und die Variable 'i' größer als 500 sein müsste, damit die Schleife durchlaufen wird [...]
    {
    if(!IsPlayerInRangeOfPoint(playerid, 5.0, BizInfo[i][Xkoord],BizInfo[i][Ykoord],BizInfo[i][Zkoord]))
    { // Er müsste theoretisch in der nähe von jedem Business sein, da die Bedingung sonst stimmt und die folgende Anweisung aufgerufen wird:
    return SendClientMessage(playerid, COLOR_LIGHTGREY,"Es befindet sich kein Business in der Nähe."); // Zudem würde return hier bewirken, dass wenn der Spieler sich nicht in der nähe von Business mit der ID 0 befindet, nicht abgefragt wird, ob er sich möglicherweiße in der nähe von Business 1 befindet
    }
    else
    {
    new name[20];
    GetPlayerName(playerid, name, 20);
    if(strcmp(BizInfo[i][bOwner],name,true)) return SendClientMessage(playerid,COLOR_LIGHTGREY,"Du kannst dein Biz nicht noch einmal kaufen!"); // strcmp gibt den Wert 0 zurück, wenn die verglichenen Strings gleich sind, daher muss hier abgefragt werden ob strcmp(...) 0 ist
    if(strcmp(BizInfo[i][bOwner],"NoOne",false)) return SendClientMessage(playerid, COLOR_LIGHTGREY, "Dieses Business besitzt bereits jemand."); // Hier dasselbe
    if(GetPlayerMoney(playerid) < BizInfo[i][bPreis]) return SendClientMessage(playerid, COLOR_LIGHTGREY, "Du hast nicht genügend Geld dabei.");
    GivePlayerMoney(playerid, -BizInfo[i][bPreis]);
    BizInfo[i][bOwner] = GetPlayerName(playerid, name, 20);
    SaveBizzes(i);
    }
    }
    return 1;
    }


    So.. dann versuchen wir das doch mal umzuändern:
    ocmd:buybiz(playerid, params[])
    {
    for(new i=0;i<500;i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 5.0, BizInfo[i][Xkoord],BizInfo[i][Ykoord],BizInfo[i][Zkoord]))
    {
    new name[20];
    GetPlayerName(playerid, name, 20);
    if(strcmp(BizInfo[i][bOwner],name,true) == 0) return SendClientMessage(playerid,COLOR_LIGHTGREY,"Du kannst dein Biz nicht noch einmal kaufen!");
    if(strcmp(BizInfo[i][bOwner],"NoOne",false) == 0) return SendClientMessage(playerid, COLOR_LIGHTGREY, "Dieses Business besitzt bereits jemand.");
    if(GetPlayerMoney(playerid) < BizInfo[i][bPreis]) return SendClientMessage(playerid, COLOR_LIGHTGREY, "Du hast nicht genügend Geld dabei.");
    GivePlayerMoney(playerid, -BizInfo[i][bPreis]);
    BizInfo[i][bOwner] = GetPlayerName(playerid, name, 20);
    SaveBizzes(i);
    return 1; // Wenn er in der nähe eines Businesses war, wird die Funktion frühzeitig beendet und gibt den Wert 1 zurück
    }
    }
    return SendClientMessage(playerid, COLOR_LIGHTGREY,"Es befindet sich kein Business in der Nähe."); // Dies kann also nun nur noch erreicht werden, wenn er sich nicht in der nähe irgendeines Businesses befand
    }


    Die selben Fehler sind auch bei dem Befehl bizmenu, daher hoffe ich, dass du die Erklärungen einigermaßen verstanden hast und nachvollziehen kannst, um dir den anderen Befehl noch selbst umzuschreiben. ;)

    Der Fehler liegt beim Befehl '/f':
    ocmd:f(playerid,params[])
    {
    new text[128],rangid[64];
    new rID,pID; // Hier erstellst du die Variable rID (und pID), beim Erstellen nimmt die Variable automatisch den Wert 0 an
    if(sscanf(params,"%s",text))return SendClientMessage(playerid,ROT,"/f [TEXT]");
    switch(rID) // Da der Wert der Variablen rID bisher 0 beträgt trifft immer Fall 0 ein
    {
    case 0:{rangid="Knecht";}
    case 1:{rangid="Dealer";}
    case 2:{rangid="Unterboss";}
    case 3:{rangid="Boss";}
    }
    format(text,sizeof(text),"%s %s: %s",rangid,Spielername(playerid),text);
    SetPVarInt(pID,"Rang",rID); // kann rausgenommen werden, da du durch '/f' ja nicht den Rang setzen willst, sondern durch '/rang'
    for(new i=0; i {
    if(IsPlayerConnected(i))
    {
    if(isPlayerInFrakt(i,GetPVarInt(playerid,"Fraktion")))
    {
    SendClientMessage(i,TURKIS,text);
    }


    }


    }
    return 1;
    }


    Korrigiert würde der Befehl '/f' also so aussehen:
    ocmd:f(playerid,params[])
    {
    new text[128],rangid[64];
    if(sscanf(params,"s",text))return SendClientMessage(playerid,ROT,"/f [TEXT]");
    switch(GetPVarInt(playerid,"Rang"))
    {
    case 0:{rangid="Knecht";}
    case 1:{rangid="Dealer";}
    case 2:{rangid="Unterboss";}
    case 3:{rangid="Boss";}
    }
    format(text,sizeof(text),"%s %s: %s",rangid,Spielername(playerid),text);
    for(new i=0; i {
    if(IsPlayerConnected(i))
    {
    if(isPlayerInFrakt(i,GetPVarInt(playerid,"Fraktion")))
    {
    SendClientMessage(i,TURKIS,text);
    }


    }


    }
    return 1;
    }


    // Edit: Fehler ausgebessert

    Ein paar Zeilen vor dieser und nach dieser Abfrage wären interessant, da der Code anscheinend nicht erreicht werden kann (sprich die Funktion wird in jedem Fall schon vorher beendet).
    Bsp, wann der Error auftreten würde:
    if(IsPlayerConnected(playerid)) { return 1; }
    else { return 1; }
    if(GetPlayerVehicleID(playerid) != GetPlayerVehicleID(pID)){return SendClientMessage(playerid, COLOR_RED,"Diese Person ist nicht in deinem Fahrzeug!");} // Diese Zeile kann nicht erreicht werden

    Zum Problem mit dem Geld:
    Nach fraktname hat sich anscheinend eine Klammer eingeschlichen und damit 'format' geschlossen, sodass 'GetPlayerMoney(playerid);' als einzelne Funktion außerhalb von 'format' angesehen wurde. Zudem war nach 'GetPlayerMoney' eine Klammer zu wenig, um auch 'format' wieder zu schließen.


    So sind die Klammern wieder richtig:
    if(strcmp(cmdtext,"/stats",true)==0)
    {
    new string[128];
    new fraktname[64];
    switch(GetPVarInt(playerid,"Fraktion"))
    {
    case 0:{fraktname="Zivilist";}
    case 1:{fraktname="Polizei";}
    case 2:{fraktname="FBI";}
    case 3:{fraktname="Bundeswehr";}
    case 4:{fraktname="Rettungsdienst";}
    case 5:{fraktname="Feuerwehr";}
    case 6:{fraktname="Ordnungsamt";}
    case 7:{fraktname="Praesident";}
    case 8:{fraktname="Yakuza";}
    case 9:{fraktname="LCN";}
    case 10:{fraktname="Soldiers";}
    case 11:{fraktname="Triaden";}
    case 12:{fraktname="Grovestreet";}
    case 13:{fraktname="LaHonda";}
    case 14:{fraktname="Vagos";}
    case 15:{fraktname="LaFee";}
    case 16:{fraktname="SF Rifa";}
    case 17:{fraktname="San News";}
    case 18:{fraktname="Hitman";}
    case 19:{fraktname="Terror";}


    }
    //1 reihe
    format(string,sizeof(string),"[Name: %s] [Level: %i] [Adminlevel: %i] [Fraktion: %s] [Geld: %d]",SpielerName(playerid),GetPlayerScore(playerid),GetPVarInt(playerid,"Adminlevel"),fraktname,GetPlayerMoney(playerid)); // In der Zeile war der Fehler, weshalb 'Geld: 0' angezeigt wurde
    SendClientMessage(playerid,Farbe_Hellblau,string);
    //2 reihe
    return 1;
    }

    Stichwort OnPlayerStateChange und SetPlayerArmedWeapon.


    Beispiel von wiki.sa-mp.com (umgeändert):
    // SMG driveby by [03]Garsino (for SA:MP 0.3c)
    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
    {
    new Weap[2];
    GetPlayerWeaponData(playerid, 4, Weap[0], Weap[1]); // Herausfinden, welche SMG der Spieler besitzt
    if(Weap[1] != 0) SetPlayerArmedWeapon(playerid, Weap[0]); // Spieler bekommt die SMG in die Hand
    else SetPlayerArmedWeapon(playerid, 0); // Spieler wird 'zur Faust gezwungen', falls er keine SMG besitzt
    }
    return 1;
    }
    So wäre es wie vor Version 0.3c.

    Zitat

    dini_Set(Wantedlistdatei,"WPS", GetPVarInt(pID, "Wanteds"));


    'Wanteds' ist, nehme ich mal an, eine Zahl, daher muss 'dini_Set' (nur für Strings(Zeichenketten) gedacht) in 'dini_IntSet' geändert werden.


    Zum zweiten Error:
    Ich nehme an, dass sich die else-Anweisung eigentlich auf folgende Zeile beziehen sollte:
    if(isPlayerInFrakt(playerid,1)||isPlayerInFrakt(playerid,2)||isPlayerInFrakt(playerid,3))


    Wenn ja, dann ist sie nur an die falsche Stelle geraten, weil so, wie der Code jetzt ist, bezieht sich die else-Anweisung auf die Abfrage mit den 'maximal 60 Wps'.


    So funktioniert es hoffentlich:
    ocmd:givewanted(playerid,params[])
    {
    new pID, Wantedlistdatei[64];
    if(IsPlayerConnected(pID)) {
    if(isPlayerInFrakt(playerid,1)||isPlayerInFrakt(playerid,2)||isPlayerInFrakt(playerid,3)) {
    new wps, string[128], string2[64];
    if(sscanf(params,"uis",pID,wps,string2))return SendClientMessage(playerid,COLOR_BLAU,"Benutze: /givewanted [Spieler/ID] [WantedAnzahl] [Grund]");
    //if(isPlayerInFrakt(pID, 10)) return SendClientMessage(playerid, COLOR_GRAU, "Du kannst keine Mitglieder aus deiner Mafia auf die Liste setzen!!");
    if(GetPVarInt(pID, "Wanteds") + wps >= 61)return SendClientMessage(playerid, COLOR_GRAU, "Du kannst nur maximal 60 Wps vergeben!");
    {
    SetPVarInt(pID, "Wanteds", GetPVarInt(pID, "Wanteds") + wps);
    format(string,sizeof(string),"Beamter %s hat dir %i Wantedpunkt(e) gegeben. Grund: %s",SpielerName(playerid),wps,string2);
    SendClientMessage(pID,COLOR_RED,string);
    format(string,sizeof(string),"Du hast %s %i Wantedpunkt(e) gegeben. Grund: %s",SpielerName(pID),wps,string2);
    SendClientMessage(pID,COLOR_HELLBLAU,string);


    format(string,sizeof(string),"%s hat %s auf die Blackliste gesetzt. Grund: %s",SpielerName(playerid),SpielerName(pID),string2);
    for(new i; i<MAX_PLAYERS; i++) {
    if(isPlayerInFrakt(i, GetPVarInt(playerid, "Fraktion"))) {
    SendClientMessage(i, COLOR_GELB, string);
    }
    }
    for(new i; i<MAX_PLAYERS; i++) {
    format(Wantedlistdatei, 64, "/Wantedlist/Wanted_Liste[%d].txt", i);
    if(!fexist(Wantedlistdatei)) {
    dini_Create(Wantedlistdatei);
    dini_Set(Wantedlistdatei,"Name", SpielerName(pID));
    dini_SetInt(Wantedlistdatei,"WPS", GetPVarInt(pID, "Wanteds"));
    SetPVarInt(pID, "wl1", 1);
    }
    }
    }
    }
    else {
    SendClientMessage(playerid, COLOR_GRAU,"Du hast keine Berechtigung diesen Befehl auszuführen!");
    }
    return 1;
    }
    return 1;
    }

    Ups.. kleiner Denkfehler meinerseits drinnen. ^^
    for(new i = 0; i < MAX_TANKPOINTS; i++)
    {
    if(IsPlayerInRangeOfPoint(playerid,15.0,Tankstellen[i][0],Tankstellen[i][1],Tankstellen[i][2]))
    {
    // Hier die Aktionen einfügen, was passieren soll, wenn man an einer Tankstelle ist
    break; // Schleife wird abgebrochen
    }
    if(i >= MAX_TANKPOINTS) return SendClientMessage(playerid, COLOR_RED,"Du bist an keiner Tankstelle!"); // Wird nur aufgerufen, wenn i bereits den Wert der letzten Tankstelle angenommen hat und die Schleife vorher nicht abgebrochen wurde
    }
    Wäre eine Möglichkeit, die nun hoffentlich gehen sollte.


    for(new i = 0; i < sizeof(Tankstellen); i++)
    {
    if(!IsPlayerInRangeOfPoint(playerid,15.0,Tankstellen[i][0],Tankstellen[i][1],Tankstellen[i][2])) { return SendClientMessage(playerid, COLOR_RED,"Du bist an keiner Tankstelle!");}
    }


    Wenn du das so übernimmst, dürfte es eigentlich funktionieren.
    Bei dir hatte nämlich noch die Z-Koordinate gefehlt (IsPlayerInRangeOfPoint).

    if(!IsPlayerInRangeOfPoint(playerid,15.0,Tankstellen[2][0],Tankstellen[2][1])){ return SendClientMessage(playerid, COLOR_RED,"Du bist an keiner Tankstelle!");}
    Wenn du willst, dass er prüft, ob der Spieler sich an irgendeiner der (in diesem Fall an einer der zwei) Tankstellen befindet, kannst du das ganz einfach mit einer for-Schleife lösen:
    for(new i = 0; i < sizeof(Tankstellen); i++)
    {
    if(!IsPlayerInRangeOfPoint(playerid,15.0,Tankstellen[i][0],Tankstellen[i][1],Tankstellen[i][2])){ return SendClientMessage(playerid, COLOR_RED,"Du bist an keiner Tankstelle!");}
    }
    Die Z-Koordinate bei der Abfrage hat ebenfalls gefehlt.


    Zur zweiten Frage:
    Hier wurde bereits eine mögliche Lösung vorgestellt.


    Bei ShowPlayerDialog kannst du den zweiten Button übrigens ausblenden, wenn du ihn nicht brauchst, indem du einfach eine leere Zeichenkette einsetzt:
    ShowPlayerDialog(playerid, admins, DIALOG_STYLE_MSGBOX,".:: Admins Online: ::.",string, "Close","");
    Der wird InGame dann nicht mehr angezeigt.

    if(GetPVarInt(playerid,"apwset") == 1))
    {
    if(!strcmp(dini_Get(GetPlayerFilename(playerid), "apasswort"),str,false))//zeile
    {
    SetPVarInt(playerid,"Admin",dini_Int(GetPlayerFilename(playerid), "admin"));
    SetPVarInt(playerid,"AdminLogged",1);
    }
    }


    1. dini_Int zu dini_Get geändert, da ich annehme, dass "apasswort" ein String ist
    2. Um die Strings zu vergleichen die Funktion 'strcmp' verwendet

    Benutzt du Windows 7 ?
    Falls ja, dann stell sicher, dass Service Pack 1 installiert ist. Hatte das Problem selbst mal und durch die Installation vom Service Pack 1 hatte es sich gelöst. ;)

    @Mazzim:
    Dennoch kann man wenigstens so fair sein und den Map-Ersteller erwähnen anstatt den "Ruhm" für die Map zu bekommen, welche man nicht mal selbst gemappt hat.


    Wie gesagt: von der Idee her gut, jedoch ist die Umsetzung bisher eher schlecht (Waffen, und nur wenige Aktionen) - was aber wohl auch noch daran liegt, dass es erst vor kurzer Zeit angefangen wurde.