Beiträge von Simon

    dann mach es mal ohne den ganzen holding kram und probiere es dann.


    mit holding habe ich es noch nie gemacht deswegen kenne ich mich da nicht aus. einfach alles mit holding weg.
    also:


    if(newkeys & KEY_UP || newkeys & KEY_DOWN || newkeys & KEY_LEFT || newkeys & KEY_RIGHT)


    zur not benutzt diese seite Hier

    probiers mal so:



    #define HOLDING(%0) \ ((newkeys & (%0)) == (%0))



    if(newkeys & KEY_UP || newkeys & KEY_DOWN || newkeys & KEY_LEFT || newkeys & KEY_RIGHT || HOLDING(KEY_UP) || HOLDING(KEY_DOWN) || HOLDING(KEY_RIGHT) || HOLDING(KEY_LEFT))

    #define HOLDING(%0) \ ((newkeys & (%0)) == (%0))


    und dann müsste es auch so aussehen:


    if(newkeys & KEY_UP || newkeys & KEY_DOWN || newkeys & KEY_LEFT || newkeys & KEY_RIGHT || HOLDING( KEY_UP) || HOLDING( KEY_DOWN) || HOLDING( KEY_RIGHT) ||HOLDING( KEY_LEFT))


    glaube ich, ich habe es vorher noch nie so gemacht.

    if(newkeys & KEY_UP || newkeys & KEY_DOWN || newkeys & KEY_LEFT || newkeys & KEY_RIGHT || HOLDING( KEY_UP | KEY_DOWN | KEY_RIGHT | KEY_LEFT))


    ich glaube so muss es, wobei ich mir nicht sicher bin ob man das HOLDING braucht und wenn mans braucht obs so richtig ist, aufjedenfall stehts so bei wiki.

    das mit velocity klappt nicht :D damit wird nur dein fahrzeug gestoppt, du kannst aber danach weiter fahren.
    sobald du in dein auto steigst, wird der schaden des wagens abgefragt. wenn der unter 300 ist, wirste gefreezed und es kommt die meldung.


    du müsstes nun nen anderen command machen um auszusteigen, oder du machst es mit velocity. dann musst du bei OnPlayerKeyStateChange abfragen ob er im die tasten "w", "s", "d", "a" drückt, ob er im auto sitzt und ob der schaden unter 300 ist. wenn das alles zutrifft wieder die selbe funktion wie schon oben genannt mit velocity machen. so wird jedesmal wenn er losfahren will und der schaden unter 300 ist das auto gestoppt.


    //edit: hier ich habe es mal für dich gemacht:


    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if(newkeys == KEY_UP || newkeys == KEY_DOWN || newkeys == KEY_LEFT || newkeys == KEY_RIGHT)
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    new vehicleid = GetPlayerVehicleID(playerid), Float:vhp, Float:vx, Float:vy, Float:vz;
    if(GetVehiclehealth(vehicleid, vhp) <= 300)
    {
    SetVehicleVelocity(vehicleid,vx*0,vy*0,vz*0);
    }
    }
    }
    return 1;
    }

    ist ja auch kein wunder -.-


    du benutzt das public OnPlayerUpdate. ich denke mal das wird jede sekunde oder alle paar sekunden aufgerufen und immer dann passiert das.
    außerdem haste da 2 unnötige abfrage sowie etwas was ich nicht so ganz verstehe. du fragst 2mal den status des wagens ab und dann fragste noch ob er in einem auto sitzt und wenn er NICHT in einem auto sitzt, return 1. das kapiere ich nicht. warum wird wenn er nicht in einem auto sitzt der vorgang fprtgesetzt?


    das wird häftg laggen wenn du das so unter dem public auch noch hast.


    hier die richtige variante:


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER)
    {
    new vehicleid = GetPlayerVehicleID(playerid), Float:vhp;
    if(GetVehicleHealth(vehicleid, vhp) <= 300)
    {
    TogglePlayerControllable(playerid,0);
    SendClientMessage(playerid,0xFF0000FF,"Das Fahrzeug hat einen Motorschaden!");
    }
    }
    return 1;
    }


    //edit: habe gerade gelesen das du dein auto freezen willst, das geht wenn überhaupt nur mit VeloCity glaube ich, damit kenne ich mich aber nicht aus.
    man kann den spieler aus dem auto werfen.


    mit velocity wäre es dann so wenn ich mich nicht irre:


    new Float:vx, Float:vy, Float:vz;
    SetVehicleVelocity(vehicleid, vx*0, vy*0, vz*0);


    das machste einfach an stelle von TogglePlayerControllable(playerid,0);

    ich verstehe das mit dem files alles iwie net :D:D bin wohl zu blöd dafür :D


    vllt könnte mir das ja mal einer machen oder mir ein bsp zeigen, so lerne ich am besten.


    wieso sollte ich abfragen ob gskasse = 2000000 in dem file steht


    die datei soll einfach nur die fraktionskasse speichern und wiedergeben.


    das problem dabei ist der anfang, man muss ja zu anfang irgentwie die gskasse definieren. deswegen habe ich sie auf 2000000 getan ($2Millionen).
    nun soll sobald der gamemode gestartet wurde überprüft werden ob gskasse schon drinne steht, wenn nicht soll der aktuelle wert von gskasse, also 2 Millionen, in die datei geschrieben werden. wenn nicht, soll aus der datei gelesen werden und gskasse soll dann diesen ausgelesenen wert übernehmen.


    sobald nun der leader der fraktion z.B. 10k aus der kasse herausnimmt, werdern von der gskasse 10k abgezogen und dann soll der aktuelle wert von gskasse in die datei geschrieben werden.


    da man ein script immer wieder etwas verbessern kann, wird es auch wenn der sevrer richtig online ist einige updates geben. dazu muss man den gamemode stoppen und sobald man ihn startet werden alle fraktionskassen wieder auf 2 Millionen gesetzt. das soll ja eben nicht so sein, die frakkasse soll ja trotz gm restart gleich bleiben.


    ich hoffe ihr versteht wie und warum ich das gerne so möchte und es wäre sehr nett wenn mir das einer machen könnte, ein beispiel würde auch reichen.


    mfg
    Simon

    soeine abfrage würde ich gerne wissen, denn ich kenne mich da überhaupt net aus. ich werde die nächste zeit öfter mit files arbeiten müssen, vllt könnte mir da einer etwas mehr erklären oder mir einen link zu einem tutorial schicken.


    //edit: habe es mal probiert und folgendes gemacht:


    new File:frakkasse1 = fopen("gskasse.txt",io_readwrite);
    new str[1],str2[10];
    format(str,sizeof(str),"");
    format(str2,sizeof(str2),"%d", gskasse);
    if(fread(frakkasse1,Inhalt) == strval(str))
    {
    fwrite(frakkasse1,strval(str2)); //error
    }
    fread(frakkasse1,Inhalt);
    gskasse = strval(Inhalt);
    fclose(frakkasse1);


    das kam dabei raus:


    C:\Users\Simon Siggelkow\Desktop\Server 3b\gamemodes\RL.pwn(651) : error 035: argument type mismatch (argument 2)
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.

    das würde auch gehen.


    weiß aber nicht wie dann SetTimerEx heißen soll. "ii",playerid,killerid ?


    ich denke schon und dann ein forward:forward NAME(playerid, killerid);


    und ein public:
    public NAME(playerid,killerid)
    {
    return 1;
    }

    du machst 2 forwards oben im script:
    forward Krankenhaus(playerid);
    forward Knast(playerid);


    du machst 2 settimerex unter OnPlayerDeath:


    OnPlayerDeath(...)
    {
    SetTimerEx("Krankenhaus",60000,0,"i",playerid);
    SetTimerEx("Knast",60000,0,"i",killerid);


    nun musst zu 2 publics machen, die treten ein sobald die zeit von 60000 milisekunden = 1min abgelaufen ist.


    public Krankenhaus(playerid)
    {
    //was passieren soll also das der vllt spawnt oder das eine nachricht ersheint
    return 1;
    }


    public Knast(playerid)
    {
    //das selbe wie beim public Krankenhaus, du muss nun scripten was passieren soll
    return 1;
    }

    dazu müsste ich ja abfragen ob es schon ein file gibt, denn gskasse = 2000000 und wenn ich das dann unter OnGameModeInit reinschreibe, wird die kasse ja bei jedem restart auf 2000000 gesetzt. die kasse soll von anfang an auf 2000000 sein und dann immer das aktuelle in der datei speichern und sobald der server gestartet wird soll es wieder ausgelesen werden und gskasse soll den ausgelesenen wert bekommen.

    Guten Tag.


    Ich wollte eine Kasse für die Fraktionen machen. nun soll der stand der kasse in einer datei gespeichert und wiedergegeben werden.
    die datei wird erstellt, doch nichts wird in dieser datei reingeschrieben.
    hier mein scriptausschnitt:


    new gskasse = 2000000,
    Inhalt[10];


    public OnGameModeInit()
    {
    new File:frakkasse1 = fopen("gskasse.txt",io_readwrite); // Nummer.txt wird geöffnet. Wen sie nicht existiert wird sie erstellt und dan geöffnet.
    fread(frakkasse1,Inhalt); // Inhalt von Nummer.txt wird an variable Inhalt übergeben.
    gskasse = strval(Inhalt); // String Inhalt wird in ein Integer umgewandelt und Handynumemr übergeben.
    fclose(frakkasse1);
    return 1;
    }


    public OnDialogResponse(...)
    {
    if(dialogid == DIALOG_FRAKKA)
    {
    if(response)
    {
    if(listitem == 0)
    {
    new str[256];
    format(str,sizeof(str),"Kasse: %d", gskasse);
    ShowPlayerDialog(playerid,DIALOG_FRAKKA_ÜBERSICHT,DIALOG_STYLE_MSGBOX,"Übersicht",str,"Okay","Zurück");
    }
    }
    }
    if(dialogid == DIALOG_FRAKKA_ÜBERSICHT)
    {
    ShowPlayerDialog(playerid,DIALOG_FRAKKA,DIALOG_STYLE_LIST,"Grove Street Family","Übersicht","Okay","Abbrechen");
    }
    return 1;
    }


    wäre sehr nett wenn mir da einer helfen könnte, das ist das 1. mal das ich so ne datei erstelle..

    Guten Tag


    Ich habe 2 gleiche Interiors mit 2 unterschiedlichen virtualen welten.
    Nun wollte ich in den einem interior Objecte reinscriptet. nur ist da das problem das diese objecte in jeder virtualen welt angezeigt also somit in beiden interiors.
    giebt es eine möglichkeit objecte einer virtualen welt anzupassen?

    dann schickt ma die scriptausschnitte die was mit dem bot zu tun haben.


    Zitat

    Ich habe das gleiche Problem.


    Wenn ich keine Bots habe, ist im BSN diese eine Burger Frau, die vom Game aus da ist, auch im SinglePlayer.
    Aber wenn ich meinen Bot rein mache, ist die Frau nicht mehr da,
    sondern der Bot ist die Frau, und hat auch den Skin von der Frau.
    Wenn ich den Bot nach LS porte, ist im BSN keine Frau mehr xD


    PS: Habe GF Edit.

    dann mach unter OnGameModeInit einfach
    DisableInteriorEnterExits();

    also einiges klappt einiges nicht. ich habs nun erstmal testweise so gemacht:


    const maxskills = 9;
    new wanndskill[maxskills][2] =
    {
    {2,50},
    {3,100},
    {4,200},
    {5,400},
    {6,600},
    {7,800},
    {8,1000},
    {9,1250},
    {10,1500}
    };


    dcmd_accept(playerid,params[])
    {
    new s[256];
    if(sscanf(params, "s", s))
    {
    return SendClientMessage(playerid,0xFF0000FF,"Benutzung: /accept [SACHE]");
    }
    else
    {
    if(!strcmp(s,"drugs",true))
    {
    new str1[125],str2[125],name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    Spieler[playerid][Drogen] = Spieler[playerid][Drogen]+danzahl[playerid];
    GivePlayerMoney(playerid,-dpreis[playerid]);
    format(str1,sizeof(str1),"Du erhälts %dg Drogen für $%d!", danzahl[playerid], dpreis[playerid]);
    SendClientMessage(playerid,0x00DD00FF,str1);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(dID[i] == playerid)
    {
    Spieler[i][Drogen] = Spieler[i][Drogen]-danzahl[playerid];
    GivePlayerMoney(i,dpreis[playerid]);
    format(str2,sizeof(str2),"%s erhält %dg Drogen, du erhälts $%d!",name, danzahl[playerid], dpreis[playerid]);
    SendClientMessage(i,0x00DD00FF,str2);
    danzahl[playerid] = 0;
    dpreis[playerid] = 0;
    dID[i] = -1;
    Spieler[i][Dskillpunkte] = Spieler[i][Dskillpunkte]+5;
    for(new j = 0;j<maxskills;j++)
    {
    if(Spieler[i][Dskillpunkte] >= wanndskill[j][1])
    {
    Spieler[i][Drogenskill] = wanndskill[j][0];
    Spieler[i][Dskillpunkte] = 0;
    }
    }
    Update(i);
    }
    }
    Update(playerid);
    }
    }
    return 1;
    }


    wenn man skill 1 ist und 50 skillpunkte hat, kommt man skill 2 und hat wieder 0 punkte. wenn man nun wieder 50exp. hat und skill 2 ist, wird der skill nicht erhöht aber die skillpunkte wieder auf 0 gesetzt.

    Guten Tag


    Ich habe ein Drogensystem gescriptet, welches 100% klappt. Nun fehlt nur noch das Skillsystem dafür. Ich brauche so ein Skillsystem auch für andere Jobs, deswegen wollte ich mal fragen wie das geht. also Skill 10 sollte das höchste sein. man sollte beim verkaufen von Drogen immer ein paar Skillpunkte bekommen, was ich selber hinbekomme. Es soll von skill zu skill schwerer werden, damit meine ich zum bespiel, das man mit Skill 1 50exp. braucht um skill 2 zu werden. mit skill 2 jedoch 100 um 3 zu werden. und mit skill 3 dann 150 oder 200.. .


    das bekomme ich aber net wirklich hin, und bitte um eure hilfe.


    enum Sinfo
    {
    Drogenskill,
    Dskillpunkte
    }
    new Spieler[MAX_PLAYERS][Sinfo];


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_REGIS)
    {
    if(response == 1)
    {
    new Spielerdatei[64],str[256];
    new SpielerName[MAX_PLAYER_NAME];
    Spieler[playerid][Drogenskill] = 1;
    Spieler[playerid][Dskillpunkte] = 0;
    GetPlayerName(playerid,SpielerName,sizeof(SpielerName));
    format(Spielerdatei,sizeof(Spielerdatei),"/User/%s.ini",SpielerName);
    dini_IntSet(Spielerdatei,"Drogenskill",Spieler[playerid][Drogenskill]);
    dini_IntSet(Spielerdatei,"Dskillpunkte",Spieler[playerid][Dskillpunkte]);
    Anmelden(playerid);
    }
    else
    {
    SendClientMessage(playerid,0xFF0000FF,"Du musst dich schon registrieren um hier zu Spielen!");
    Kick(playerid);
    }
    }
    return 1;
    }


    public Anmelden(playerid)
    {
    new Spielerdatei[256];
    new SpielerName[MAX_PLAYER_NAME];
    GetPlayerName(playerid,SpielerName,sizeof(SpielerName));
    format(Spielerdatei,sizeof(Spielerdatei),"/User/%s.ini",SpielerName);
    Spieler[playerid][Drogenskill] = dini_Int(Spielerdatei,"Drogenskill");
    Spieler[playerid][Dskillpunkte] = dini_Int(Spielerdatei,"Dskillpunkte");
    return 1;
    }


    public Update(playerid)
    {
    new Spielerdatei[256];
    new SpielerName[MAX_PLAYER_NAME];
    GetPlayerName(playerid,SpielerName,sizeof(SpielerName));
    format(Spielerdatei,sizeof(Spielerdatei),"/User/%s.ini",SpielerName);
    dini_IntSet(Spielerdatei,"Drogenskill",Spieler[playerid][Drogenskill]);
    dini_IntSet(Spielerdatei,"Dskillpunkte",Spieler[playerid][Dskillpunkte]);
    return 1;
    }


    public OnPlayerDisconnect(playerid, reason)
    {
    Update(playerid);
    return 1;
    }