Beiträge von IPrototypeI


    Also wenn du schon was hier postest dann doch bitte was produktives


    Der unnötigstes Fehler welchen man machen kann


    stock SpielerName(playerid)
    {
    new GetName[MAX_PLAYER_NAME];
    GetPlayerName(playerid,GetName,sizeof(GetName));//hier wird der name herrausgefunden und dan in SpielerName gepackt
    return GetName;
    }


    warum jedes mal den namen auslesen , wenn man das ganze auch als array speichern kann die meisten gf haben sogar dafür eine
    accountvariabel


    dazu kann man auch noch ein Makro benutzen. sollte dies nicht der Fall sein macht auch nix dann erstellt man ein
    3DArray und ließt für den Spieler den Namen aus


    #define PlayerName(%0) pName[%0]
    new pName[MAX_PLAYERS][MAX_PLAYER_NAME];

    strdel(pName[playerid],0,MAX_PLAYER_NAME);
    GetPlayerName(playerid,pName[playerid],MAX_PLAYER_NAME);


    und das nächste wäre dies
    new heal[MAX_PLAYERS]; 
    warum benutzt du nicht einfach ein boolean dies spart memory oder ein char array


    Nächster Punkt


    new pID, string[128],string2[128];//2 strings die brauchen wir für den format
    format(string,sizeof(string),"Sie wurden erfolgreich von %s geheilt",SpielerName(pID));//hier wird string1 formatiert
    SendClientMessage(playerid,Türkis,string);//dort string 1 abgestendet
    format(string2,sizeof(string2),"Du hast erfolgreich %s für 150$ geheilt",SpielerName(playerid));//hier string2 formatiert


    zwei unnötige große strings 64 reichen da völlig aus und einer allein auch.


    und noch was bei if-statements wo was returnt wird lässt man die Klammern weg


    Die Lösung werde ich dir nicht posten dennoch eine hilfe stellun geben
    die Grundform des errors 35 ist diese


    error 035: argument type mismatch (argument x)


    x steht für eine unbekannte Zahl . Nun warum unbekannt naja es kommt auf deine Funktion an wo der Fehler ist ^^.
    Beispiel:


    SetPlayerPos(playerid,10.0,"Fehler",10.0);
    SetPlayerPos(playerid,"Fehler",10.0,10.0);
    wenn du sowas kompilen würdest würdest du genau den selben error bekommen


    Einmal
    error 035: argument type mismatch (argument 3)
    error 035: argument type mismatch (argument 2)


    Nun hier ist wieder eine Zahl für die unbekannte vorhanden einmal die 3 und die 2. Nun sollte man dazu noch wissen wo der zusammenhang zwischen diesem argument besteht.
    Mit dem argument ist der parameter der funktion gemeint und da beim 2, 3 und 4 argument eine Float rein kommt , wo hier bei 2 und 3 ein string ist gibt es Error
    nämlich das das 2 argument oder das 3 argument Falsch ist


    SetPlayerPos(playerid,10.0,"Fehler",10.0);
    argument 0 = playerid
    argument 1 = 10.0
    argument 2 = "Fehler"
    argument 3 = 10.0


    => error 035: argument type mismatch (argument 2) da argument 2 eine FLoat sein müsste

    Du machst das ziemlich kompliziert ^^
    es reicht ein array


    new NextPositon[MAX_PLAYERS char];


    ocmd:arbeiten(playerid,params[])
    {
    NextPositon{playerid} = random(sizeof(aufladepunkte));
    Randomaufladen = SetPlayerCheckpoint(playerid,aufladepunkte[NextPositon{playerid}][0],aufladepunkte[NextPositon{playerid}][1],aufladepunkte[NextPositon{playerid}][2], 15.0);
    return 1;
    }


    ocmd:blabla(playerid,params[])
    {
    if(!IsPlayerInRangeOfPoint(playerid,15.0,aufladepunkte[NextPositon{playerid}][0],aufladepunkte[NextPositon{playerid}][1],aufladepunkte[NextPositon{playerid}][2]))return SendClientMessage(playerid,-1,"Du bist nicht an dem jeweiligen Punkt");
    }


    //edit


    Bei dir solltest du schon den deklarierten Variabeln ihren Typ zuweisen daher
    new Float:xau[MAX_PLAYERS];
    new Float:yau[MAX_PLAYERS];
    newFloat: zau[MAX_PLAYERS];


    und bitte niemals in dem Fall addieren sondern gleich setzen

    also sauber skripten ist nicht so deine staerke und von professionalitaet kann auch hier nicht die rede sein.
    Am besten loescht du das und schreibst es nochmal neu[hide][/hide]

    Normal benutzt man das plugin dazu ist schneller und umfangreicher an möglichkeiten


    http://forum.sa-mp.com/showthread.php?t=120356


    dennoch kannst du dies auch außen vor lassen


    ocmd:test3(playerid,params[])
    {
    new string[15];
    if(sscanf(params,"s",string)) return SendClientMessage(playerid,Rot,"Benutzung: /test [an/aus]");
    if(!strcmp(string, "an", true)){

    }else if(!strcmp(string, "aus", true)){

    }
    return 1;
    }

    Danke Geht! :love:


    Dennoch solltest du daran denken dein code dementsprechend ein zu ordnen


    new bool: maske[MAX_PLAYERS],
    OldName[MAX_PLAYERS][MAX_PLAYER_NAME];


    CMD:uc(playerid, params[])
    {
    new NewName[MAX_PLAYER_NAME];
    if(sscanf(params, "s[20]", NewName))return SendClientMessage(playerid, 0x000000FF, "Benutzen: /uc [Deckname]");
    if(maske[playerid] == false){
    switch(SetPlayerName(playerid, NewName))
    {
    case -1:return SendClientMessage(playerid, 0xFF0000FF, "AdmCmd: Dein Deckname konnte nicht gesetzt werden. Jemand anderes verwendet den Namen");
    case 0: return SendClientMessage(playerid, 0xFF0000FF, "AdmCmd: Du nennst dich bereits so");
    case 1: SendClientMessage(playerid, HBLAU, "AdmCmd: Du hast deine Maske aufgezogen (/uc um sie abzuziehen)");
    }
    maske[playerid] = true;
    GetPlayerName(playerid, OldName[playerid],MAX_PLAYER_NAME);
    }else{
    SetPlayerName(playerid, OldName[playerid]);
    maske[playerid] = false;
    SendClientMessage(playerid,HBLAU,"AdmCmd: Du hast deine Tarnung nun wieder abgenommen");
    }
    return 1;
    }


    du setzt schon davor die variabel auf true obwohl der spiele rnichtmal einen string dahinter verwendet hat. Zu dem sollte etwas nicht passen muss er nochmal den command eingeben damit
    er zurück kommt um den command neu einzugeben mit name

    Mhm kA,
    Schon im wiki gschaut ?
    Wenn nicht probiers doch einfach mal aus.


    Das kann man auch nicht genau sagen ^^ wie es schon Sry4pwn erwähnt hat dies musst du austesten jedoch sollte es locker gehen da die PVars dynamisch ihr Speicher zugewissen wird.
    Das ist halt dort der Vorteil das diese bei string sich von allein mal mehr und mal weniger memory zusichert


    http://wiki.sa-mp.com/wiki/Per-player_variable_system


    //edit hab noch was interessantes dazu gefunden


    http://forum.sa-mp.com/showthread.php?t=268499

    SetTimer("NDMZoneCheck",2000,1);


    Mich wundert es gerade das dein gamemode beim kompilen nicht rum meckert


    SetTimer("NDMZoneCheck",2000,1);


    und



    public NDMZoneCheck(playerid)
    {
    for (new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerInArea(i,135.8763,-6681.1318,2135.6960,-3563.6587))
    {
    SetPlayerArmedWeapon(playerid,0);
    new vehicleid = GetPlayerVehicleID(playerid);
    switch(GetVehicleModel(vehicleid))
    {
    case 425, 432, 476, 520:
    {
    SetVehicleHealth(vehicleid,0);
    }
    }
    TextDrawShowForPlayer(i,NODM);
    }
    else
    {
    TextDrawHideForPlayer(i,NODM);
    }
    }
    return 1;
    }
    daraus lässt sich schließen das es zu dem sehr seltsam ist wie du dies verwendest dieser parameter playerid kommt dort nicht hin, wenn du mit einem Globalen Timer arbeitest
    wenn du es für jeden aufrufen willst musst du schon mit der for-schleife arbeiten( was du auch im kleinen Sinne macht) mich wundert es gerade überhaupt das dem spieler bei dir die waffen weggenommen werden
    da du so gesehen nur der spielerid 0 diese zurück setzt.

    Kannst du mal bitte die vwerndung von NDMZoneCheck(playerid) posten
    du hast dies ja bestimmt in einem Timer drinne und aufgrund von der verwendung der schleife und der spielerid an sich ist dies mir nicht so wirklich schlüssig was du genau bezwecken möchtest mit
    der schleife.


    public NDMZoneCheck(){
    for (new i = 0; i < MAX_PLAYERS; i++){
    if(IsPlayerInArea(i,135.8763,-6681.1318,2135.6960,-3563.6587)){
    SetPlayerArmedWeapon(i,0);
    new veh = GetPlayerVehicleID(i);
    switch(GetVehicleModel(veh)){
    case 425, 432, 476, 520:SetVehicleHealth(veh,0);
    }
    TextDrawShowForPlayer(i,NODM);
    }else TextDrawHideForPlayer(i,NODM);


    }
    return 1;
    }


    //edit


    ist auch überhaupt solch eine große no-dm zone gewollt if(IsPlayerInArea(i,135.8763,-6681.1318,2135.6960,-3563.6587)){
    da diese Fläche schon gigantisch ist



    stock getINI(playerid,pfad)
    {
    new string[40];
    if(pfad == 0)format(string,40,"Accounts/%s.ini",Spielername(playerid));
    else if(pfad == 1)format(string,40,"Privatfahrzeuge/%s.ini",Spielername(playerid));
    return string;
    }


    hier bitte sollte so gehen er will halt nun einen string zurück haben bei deiner Funktion besser gesagt in der weiter verwendung INI_Open

    dies geht mit strcmp
    solltest du das plugin verwenden
    so reichen 3 Zeichen,
    wenn nicht dann setzt dies auch 10 - 20 sollte dann in dem fall vor stringüberladungen schützen
    ocmd:test3(playerid,params[])
    {
    new string[3];
    if(sscanf(params,"s[3]",string)) return SendClientMessage(playerid,Rot,"Benutzung: /test [an/aus]");
    if(!strcmp(string, "an", true)){

    }else if(!strcmp(string, "aus", true)){

    }
    return 1;
    }


    !strcmp ist daher möglich da die rückgabe , wenn die strings richtig sind 0 ist und dies bedeutet !strcmp alles außer 1 und 1 ist bei strcmp falsch.
    Daher geht dies

    Guten Tag Liebe Leser und Leserinnen,
    heute möchte ich euch meine Map verkaufen für rund 10 € Verhandlungsbasis.


    Was wird euch geboten ?
    - Ihr bekommt natürlich die Mapdatei , besser gesagt die ganze .pwn
    - Dazu noch 4 Tage "Support"
    - Kostenlose anpassung auf Wunsch
    - Fehler an der Map werden auch nach 4 Tagen noch beseitigt sollte dies der Fall sein.
    - Auf wunsch auch eine MTA Mapdatei
    - Die Map kann auch verschoben werden an eine beliebige position unabhängig von der Rotation.
    - Das klein Skript kann noch zusätzlich verlangt werden um die Map zu verschieben.


    Bezahlung:
    - PSC


    Interesse geweckt ?
    - Du kannst mich natürlich hier im Forum erreichen per PN.
    - Skype dann auch nur auf Anfrage.


    Weiteres:
    - Bei Interesse ist es möglich auch die Map zu besichtigen dazu auch per Pn melden.


    Screens:


    Waffenkammer


    Außenansicht


    Innenansicht



    Louge


    Pool


    Bücherdepot des Hauses


    Toilette


    Schlafzimmer 1


    Fitnessraum


    Sauna


    Schlafzimmer 2




    ______

    Unverbindlicher Hinweis: Die Sicherheit einer Transaktion kann am besten durch die Einschaltung eines Mittelsmannes gewährleistet werden. Weitere Informationen dazu gibt es hier.


    Edits:

    Spoiler anzeigen

    expander hinzugefügt

    mach es per strcat
    damit kannst du die 7 formats zusammenpacken und dann per 1 Query speichern lassen


    nichtmal strcat brauchst du :D es reicht auch ein großer string mit \ kann man einen zeilebruch bezwecken.


    @ Pille eine andere möglichkeit die accounts zu updaten hast du leider nicht ^^ als in ihrgend einer Form mit UPDATE zu arbeiten


    als kleiner tipp benutzt doch mysql_format und den platzhalter %e dann werden die strings automatisch escaped.
    Aber nun gut es ist auch teilweise auch besser mehrere kleine querys abzusenden als ein sehr großes
    zu dem wenn du willst kannst du auch einen anderen syntax dazu verwenden
    UPDATE `Accounts` SET (PERSONALNUMMER, NAME, ...) = (6002, 'Max', ...)

    Kann man die map kaufen ?


    wollte ich eigentlich machen , wenn ich natürlich den innenraum fertig gemappt habe und eine gescheite Außenfassade gefunden hab :D



    So nun ist die Inneneinrichtung fertig und auch eine passende Außenfassade gefunden.


    Neue Außenansicht


    Innenansicht



    Louge


    Pool


    Bücherdepot des Hauses


    Toilette


    Schlafzimmer 1


    Fitnessraum


    Sauna


    Schlafzimmer 2


    Diese Map wird demnächst angeboten für kleines Geld zwischen 5 - 10 € tendiere jedoch selbst eher zu 5+/- auf dem Marktplatz dies umfasst rund 800 Objekte jedoch mit kleinen Tricks beim Streamer plugin problemlos streambar siehe screens.


    Nein ich möchte nicht mit dir streiten und auch nun die diskussionen beenden mit dem Satz , das es jeder so machen sollte wie er es für richtig hält
    und die anderen Punkt außen vor lässt.


    Zu dem ^^ mach ich mir das ganz einfach ich ersetze
    CreateObject(18766
    mit
    SetObjectMaterial(CreateObject(18766


    und


    ;


    mit


    , 0, 5709, "melrose17_lawn", "brwall_128", 0);


    jedoch habe ich bei mir auch die objekte untereinander meist . Ordnung ist das halbe leben ^^

    IPrototypeI
    wie ich schon in deiner map gesagt habe, finde ich diese variante mehr als umständlich. klar wenn man nur ein und die selbe textur hat, ist es schon okay. aber was ist wenn man mehrere verwenden will= dann muss man ja ewig immer alles definieren. da finde ich die variante mit der schleife noch am einfachsten.


    In meiner map ^^ ah ok aber bitte nenn mir vorteile an der variante mit der schleife.


    Ist das wirklich umständlicher ?
    Kleines Beispiel:


    new textob[10];


    textob[0] = CreateObject(19378,1359.1500, -1766.9200, 12.4800,0.0000, 90.0000, 90.0000);
    textob[1] = CreateObject(19378,1359.1500, -1766.9200, 12.4800,0.0000, 90.0000, 90.0000);
    textob[2] = CreateObject(19378,1359.1500, -1766.9200, 12.4800,0.0000, 90.0000, 90.0000);
    textob[3] = CreateObject(19378,1359.1500, -1766.9200, 12.4800,0.0000, 90.0000, 90.0000);
    textob[4] = CreateObject(19378,1359.1500, -1766.9200, 12.4800,0.0000, 90.0000, 90.0000);
    textob[5] = CreateObject(19378,1359.1500, -1766.9200, 12.4800,0.0000, 90.0000, 90.0000);
    textob[6] = CreateObject(19378,1359.1500, -1766.9200, 12.4800,0.0000, 90.0000, 90.0000);
    textob[7] = CreateObject(19378,1359.1500, -1766.9200, 12.4800,0.0000, 90.0000, 90.0000);
    textob[8] = CreateObject(19378,1359.1500, -1766.9200, 12.4800,0.0000, 90.0000, 90.0000);
    textob[9] = CreateObject(19378,1359.1500, -1766.9200, 12.4800,0.0000, 90.0000, 90.0000);


    for(new i; i < sizeof(textob); ++i)SetObjectMaterial(textob[i],0,9515,"bigboxtemp1","poshground_sfw",0);


    oder meine lieblingsvariante



    SetObjectMaterial(CreateObject(19378,1359.1500, -1766.9200, 12.4800,0.0000, 90.0000, 90.0000),0,9515,"bigboxtemp1","poshground_sfw",0);
    SetObjectMaterial(CreateObject(19378,1359.1500, -1766.9200, 12.4800,0.0000, 90.0000, 90.0000),0,9515,"bigboxtemp1","poshground_sfw",0);
    SetObjectMaterial(CreateObject(19378,1359.1500, -1766.9200, 12.4800,0.0000, 90.0000, 90.0000),0,9515,"bigboxtemp1","poshground_sfw",0);
    SetObjectMaterial(CreateObject(19378,1359.1500, -1766.9200, 12.4800,0.0000, 90.0000, 90.0000),0,9515,"bigboxtemp1","poshground_sfw",0);
    SetObjectMaterial(CreateObject(19378,1359.1500, -1766.9200, 12.4800,0.0000, 90.0000, 90.0000),0,9515,"bigboxtemp1","poshground_sfw",0);
    SetObjectMaterial(CreateObject(19378,1359.1500, -1766.9200, 12.4800,0.0000, 90.0000, 90.0000),0,9515,"bigboxtemp1","poshground_sfw",0);
    SetObjectMaterial(CreateObject(19378,1359.1500, -1766.9200, 12.4800,0.0000, 90.0000, 90.0000),0,9515,"bigboxtemp1","poshground_sfw",0);
    SetObjectMaterial(CreateObject(19378,1359.1500, -1766.9200, 12.4800,0.0000, 90.0000, 90.0000),0,9515,"bigboxtemp1","poshground_sfw",0);
    SetObjectMaterial(CreateObject(19378,1359.1500, -1766.9200, 12.4800,0.0000, 90.0000, 90.0000),0,9515,"bigboxtemp1","poshground_sfw",0);
    SetObjectMaterial(CreateObject(19378,1359.1500, -1766.9200, 12.4800,0.0000, 90.0000, 90.0000),0,9515,"bigboxtemp1","poshground_sfw",0);


    jetzt mit den defines weg gelassen also wenn du willst können wir ja gern eine kleine challenges machen wer schneller ist bei 1000 Objekten ^^
    also ich seh bei mir keine umständlichkeit sondern nur Zeitersparniss und einen geringeren Ram verbrauch.
    Klar ist jetzt für die ungewohnt jedoch wird das Material des Objektes auch nicht schneller ersetzt es dauert eher noch länger ^^