Beiträge von BlackWolf120

    hi,
    mich würde interessieren, wie ich nach einer bestimmten funktion, oder ereigniss die map wechseln kann.
    Muss ich meine maps alle in ein filterscript oder gamemode stecken und nur die spawnpoints neu festlegen??
    oder die gamemode oder das filterscript wechseln?
    Wie macht ihr das? ?(


    Danke schon mal im Voraus.

    hi,
    i habe versucht ein rank system einzubauen, das je nachdem wie viele kills ein player hat einen bestimmten rank vergibt und man diesen jederzeit mit dem befehl /ranki nachschauen kann.
    Also wenn ich jetzt 20 kills habe, dann wird mir angezeigt, dass ich nun einen neuen rank erreicht haben, soweit sogut.
    Jedoch ändert sich der rank, wenn ich diesen mit dem befehl /ranki überprüfen möchte nicht.
    Es steht immer nur rank: Newbie und ranknumer: 0 da .
    Ich weis wirklich nicht mehr weiter, für mich sieht alles richtig aus. :D
    Ich hoffe, dass mir einer von euch helfen kann.



    new pRank[MAX_PLAYERS];


    //bei OnPlayerDeath


    new string[256];


    if(kills[killerid] == 20)
    {
    GetPlayerName(killerid, string, sizeof(string) );
    format(string, sizeof(string), "%s has been promoted to Baby Killer and now has %d kills!!", string, kills[killerid] );
    SendClientMessageToAll(0x993300AA, string);
    pRank[playerid] = 1;
    }
    else if(kills[killerid] == 100)
    {
    GetPlayerName(killerid, string, sizeof(string) );
    format(string, sizeof(string), "%s has been promoted to Shooter and now has %d kills!!", string, kills[killerid]);
    SendClientMessageToAll(0x993300AA, string);
    pRank[playerid] = 2;
    }


    //bei OnPlayerCommandText


    if (strcmp("/ranki", cmdtext, true) == 0)
    {
    if(IsPlayerConnected(playerid))
    { SendClientMessage(playerid, 0xFFFF00AA, "///////////////////////////////////////////////////");
    new rankid = pRank[playerid];
    new pName[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pName, sizeof(pName));
    new rank[20];
    if(pRank[playerid] == 0) { rank = "Newbie"; }
    else if(pRank[playerid] == 1) { rank = "Baby Killer"; }
    else if(pRank[playerid] == 2) { rank = "Shooter"; }


    new s[50];
    format(s,sizeof(s), "Your Rank: %s | Rank number: %d",rank,rankid);
    SendClientMessage(playerid, 0xFFFF00AA,s);
    SendClientMessage(playerid, 0xFFFF00AA, "///////////////////////////////////////////////////");


    }
    return 1;
    }




    hi,
    ich habe einen countdown, der startet, soblad man einen bestimmten checkpoint betritt.
    Soblad man den cp verläst wird dieser abgebrochen (killtimer).
    Wenn ich den cp jedoch erneut betrete , startet der countdown ab der Zeit runterzu zählen, bei der er das letzte mal untertbrochen wurde.
    Wie kann ich es hinkriegen, dass er countdown wieder von vorne beginnt??



    forward counterzone(playerid);
    new countdownzone = 15;
    new CDONZone;



    //bei entercheckpoint:
    CDONZone = SetTimer("counterzone",990,0);


    //bei leavecheckpoint:
    KillTimer(CDONZone);


    public counterzone(playerid)
    {


    if(countdownzone > 0)
    {
    CDONZone = SetTimer("counterzone",990,0);
    new string[128];
    format(string,sizeof(string),"~g~%d",countdownzone);
    GameTextForAll(string,990,5);


    countdownzone --;
    }
    else
    {


    countdownzone = 0;
    }
    return 1;
    }



    Wäre super, wenn mir jemand helfen könnte.


    Gruß...

    hi,
    ich muss unbeding noch etwas wissen:


    kann man die funktion auch ohne timer verwenden, also dass sobald ein spieler an einem bestimmten Punkt steht, er sofort irgendwohin teleportiert wird?



    SetTimer("Check", 3000, 1);


    forward Check();


    public Check()
    {
    for(new i = 0; i < MAX_PLAYERS; i++)


    {
    if(IsPlayerInRangeOfPoint(i, 2, 694.9675,-499.9765,16.3359))
    {
    SetPlayerInterior(i, 6);
    SetPlayerPos(i, 316.5011,-169.1293,999.5938);
    SendClientMessage(i,0xFF9900AA, "Go to the Info sign to buy weapons.");
    GameTextForPlayer(i, "~g~Welcome to Ammunation", 3000, 5);
    }
    }

    mfg.


    //edit frage geändert.

    hi,


    wie kann ich z.b nach 20 sec nachdem das spiel angefangen hat autom. einen checkpoint erstellen lassen?
    ich habs mit nem timer unter onmodeinit versucht, hat aber nicht geklappt, wäre super, wenn mir jemand ein beispiel posten könnte.


    mfg.



    //edit frage geändert.

    hi,
    vielen dank mal wieder :)
    Wie kann ich eigentlich eine neue Runde automatisch starten lassen, nachdem die erste fertiggespielt ist?
    Also wie kann ich es einstellen, das eine neue Runde beginnt, nach einer bestimmten Aktion oder Abkauf einer bestimmten Zeit?


    mfg.


    //edit Frage geändert.

    Hi,
    wäre super, wenn mir jemand sagen könnte, wie ich diesen Error beheben kann.


    error 029: invalid expression, assumed zero



    public OnPlayerLeaveCheckpoint(playerid)
    {


    if (gettime() - 15 >= time[playerid])
    bomb = CreatePickup(1252, 3, 2555.2290,-1296.4255,1031.4219);
    SendClientMessage(playerid, 0x7CFC00AA, "Bomb has been created!! Start the countdown fast!! ( +2000$ )");
    DisablePlayerCheckpoint(playerid);
    GivePlayerMoney(playerid,2000);


    new name[ 24 ], string[ 64 ];
    GetPlayerName( playerid, name, 24 );
    format( string, sizeof(string), "~y~%s has created the Bomb!", name );
    GameTextForAll( string, 5000, 5 );

    else SendClientMessage(playerid, 0x7CFC00AA, "You stayed in the checkpoint for less than 15 seconds!"); //Error bezieht sich auf diese Zeile
    GetPlayerName( playerid, name, 24 );
    format( string, sizeof(string), "~y~%s has attempted to create a bomb!!", name );
    GameTextForAll( string, 5000, 5 );


    return 1;
    }

    hallo,


    kann mir vllt. jemand erklären, wie ich es hinkriege, dass wenn es 2 Teams
    gibt, sich die Teamkollegen gegenseitig nicht töten können?


    Ich habe schon soo viel ausprobiert und nichts funktioniert.
    Ich möchte nachher auch bestimmte Funktionen den Teams zuteilen, also wäre es super, wenn mir jemand das mit der gTeams Funktion erklären könnte.


    Bitte helft mir, bin schon total am verzweifeln ;(


    //edit code eingefügt.
    //edit frage geändert.

    hi,


    ich habe den CP mit einem Timer versehen und der CP verschwindet auch erst nach 20 sec. Wie kann ich aber erreichen, dass bei einem 2. CP, der durch den ersten erstellt wird etwas anderes passiert als beim ersten?
    Im Moment wird nämlich beim 1. und 2. CP die gleiche Textnachricht angezeigt, wie kann ich die beiden CP's also voneinader unterscheiden?
    mgf


    //Frage geändert.

    hi, danke für die Antwort.
    also wie gesagt, die Kills/Deaths werden nur angezeigt und bis jetzt nicht gespeichert, der code dafür ist oben.
    Das System, dass ich bis jetzt habe sieht so aus und gespeichert werden Geld und Score.



    #include <dini>
    #define DIALOG_LOGIN 3
    #define DIALOG_REG 4
    enum spieler_daten
    {
    eingeloggt
    }


    Bei onplayerconnect:
    new Spieler[MAX_PLAYERS][spieler_daten];


    new pname[MAX_PLAYERS],accFormat[128];
    GetPlayerName(playerid,pname,sizeof pname);
    format(accFormat,sizeof accFormat,"%s.datei",pname);
    if(fexist(accFormat))
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Please login!","Next","Cancel");
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_REG,1,"Register","Please register!","Next","Cancel");
    }


    Bei onplayerdisconnect:
    new pname[MAX_PLAYERS],accFormat[128];
    GetPlayerName(playerid,pname,sizeof pname);
    format(accFormat,sizeof accFormat,"%s.datei",pname);
    if(fexist(accFormat) && Spieler[playerid][eingeloggt])
    {


    dini_IntSet(accFormat,"Geld",GetPlayerMoney(playerid));
    dini_IntSet(accFormat,"Score",GetPlayerScore(playerid));
    }
    Spieler[playerid][eingeloggt] = 0;


    Bei onplayerspawn:
    new pname[MAX_PLAYERS],accFormat[128];
    GetPlayerName(playerid,pname,sizeof pname);
    format(accFormat,sizeof accFormat,"%s.datei",pname);


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {


    new pname[MAX_PLAYERS],accFormat[128];
    GetPlayerName(playerid,pname,sizeof pname);
    format(accFormat,sizeof accFormat,"%s.datei",pname);
    if(response)
    {
    switch(dialogid) // dialogid auswählen
    {
    case DIALOG_LOGIN: // ID Login
    {
    if(!strlen(inputtext))
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Please login!","Next","Cancel");
    return SendClientMessage(playerid,0xFFFFFFFF,"No password entered!");
    }
    if(strcmp(inputtext,dini_Get(accFormat,"Passwort")) == 0) // Passwort Direkt aus der Datei Laden
    {

    GivePlayerMoney(playerid,dini_Int(accFormat,"Geld"));
    SetPlayerScore(playerid,dini_Int(accFormat,"Score"));

    Spieler[playerid][eingeloggt] = 1; // Spieler ist nun erfolgreich eingeloggt
    SendClientMessage(playerid,0xFFFFFFFF,"You has been loged in successfully.");
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Please login!","Next","Cancel");
    SendClientMessage(playerid,0xFFFFFFFF,"The password you entered is invalid!");
    }
    }
    case DIALOG_REG: // ID Registrieren
    {
    if(!strlen(inputtext)) // Text darf nicht = Null sein Null im Sinne von nichts
    {
    ShowPlayerDialog(playerid,DIALOG_REG,1,"Register","Please register!","Next","Cancel");
    return SendClientMessage(playerid,0xFFFFFFFF,"The password is too short!");
    }
    dini_Create(accFormat);
    dini_Set(accFormat,"Passwort",inputtext);
    Spieler[playerid][eingeloggt] = 1;
    SendClientMessage(playerid,0xFFFFFFFF,"Account has been created successfully, you're loged in now.");
    }
    }
    }
    else
    {
    switch(dialogid)
    {
    case DIALOG_LOGIN:ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Please login!","Next","Cancel");
    case DIALOG_REG:ShowPlayerDialog(playerid,DIALOG_REG,1,"Register","Please register!","Next","Cancel");
    }
    }



    Jo, das wars im ganzen, wäre super, wenn du mir helfen könntest.
    danke schon mal.


    //edit: ja in einer Datei soll es dann gespeichert wewrden, genau wie das geld und die Score .

    hi,


    wie kann ich diese Kills und Deaths speichern. Also angezeigt werden sie schon, nur gespeichert eben noch nicht.


    new tode[MAX_PLAYERS], kills[MAX_PLAYERS];


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(strcmp(cmdtext,"/stats",true)==0) {
    new s[50];
    format(s,sizeof(s),"Kills: %d | Deaths: %d | Ratio: ",kills[playerid],tode[playerid]);
    SendClientMessage(playerid,0xFFFF00AA,s);
    }
    return 1;


    public OnPlayerDeath(playerid, killerid, reason)
    {
    tode[playerid]++;
    if(killerid!=INVALID_PLAYER_ID) {
    kills[killerid]++; }
    }
    return 1;


    Wie kann ich die Ratio berechnen?
    Und ist es möglich auch die gesamt Zeit anzuzeigen? (Also die Zeit, die ein Spieler schin imsgesamt mit dem Server verbunden war).
    Und wie kann ich mir auch noch die Score anzeigen lassen?


    Wäre als Noob froh über Hilfe.
    Habe die sufu schon benutzt, aber das klappt entweder nicht oder ich schnalls nich. :whistling:



    //edit Frage geändert.

    hi, danke schon mal für die Antwort.


    1. z.B wurde kurz zuvor eine Minugun an alle Player im Server verteilt und alle anderen Waffen wurden resettet, quasi eine Sudden Death Mode.
    Ich möchte, dass der Spieler, der nach der Sudden Death Mode, also der Minigunvergabe an alle Player, nicht mehr spawnen kann und warten muss, bis die Runde zu ende ist. So das er nach seinem Tod vllt. den einzelnen Spieler, die noch im Spiel sind zuschauen kann. (Ist wahrscheinlich hamma kompliziert. :D zum scripten)



    SetTimerEx("DeathMatchMode",900000,1,"d",playerid);


    public DeathMatchMode(playerid)
    {
    ResetPlayerWeapons(playerid);


    new r = random(sizeof ValidWeaponsDeathmatch);
    GivePlayerWeapon(playerid, ValidWeaponsDeathmatch[r][0], ValidWeaponsDeathmatch[r][1]);
    SendClientMessage(playerid,0x660000AA, "Sudden Death Mode!! Kill or be killed!!!!");
    new name[ 24 ], string[ 64 ];
    format( string, sizeof(string), "~l~!!!! ~r~Sudden Death Mode ~l~!!!!", name );
    GameTextForAll( string, 8000, 5 );


    return 1;
    }

    2. ja der Timer ist definiert:

    forward Bombspawn(playerid);


    public OnPlayerEnterCheckpoint(playerid)
    {
    if (IsPlayerInCheckpoint(playerid))
    {

    SetTimer("Bombspawn",15000,1);//ich muss 15 sec im CP warten, bis eine Bombe gespawnt wird, dannach läuft der Timer jedoch weiter auch wenn ich nicht im CP bin , deshalb muss ein kill her.

    }


    public Bombspawn(playerid)
    {
    bomb = CreatePickup(1252, 3, 2555.2290,-1296.4255,1031.4219);


    DisablePlayerCheckpoint(playerid);
    SendClientMessage(playerid,0x7CFC00AA, "Bomb has been created!! Start the countdown fast!! ( +2000$ ).");
    GivePlayerMoney(playerid,2000);


    new name[ 24 ], string[ 64 ];
    GetPlayerName( playerid, name, 24 );
    format( string, sizeof(string), "~y~%s has created the Bomb!", name );
    GameTextForAll( string, 5000, 5 );


    return 1;
    }


    Und der Timer soll abgebrochen werden, wenn man den CP während dem Countdown verlässt.
    Eine Countdownanzeige wäre auch super( 15,14,13 usw)



    3. Also vorstellen tue ich mir das so: Alles Player werden gefreezed und fangen an eine Animation auszuführen, dabei noch eine GTA sound id einfügen.
    Dannach erscheint ein Fenster mit der Rangliste, 1.Playername, 15 kills 10deaths 2.Playername, 10kills 10deaths usw.
    Dannach würde dann die Map wechseln, zu einer bei der es andere Spawnpoints und andere created Objekte gibt.
    Ich habe z.b keine vorstellung, wie ich es machen soll, damit die Map nach der Runde endet. Z.B Mapwechsel nach einer Rundenzeit von 15min.


    4. Wäre SUPER, wenn du mir das mit den Checkpoint noch genauer erklären könntests.



    public OnPlayerSpawn(playerid)
    {
    SetPlayerCheckpoint(playerid, 681.3374,-463.3429,22.5705, 2.0);



    return 1;
    }


    public OnPlayerEnterCheckpoint(playerid)
    {
    if (IsPlayerInCheckpoint(playerid))
    {

    SetTimer("Bombspawn",15000,false);

    }


    return 1;
    }



    public Bombspawn(playerid)
    {
    bomb = CreatePickup(1252, 3, 2555.2290,-1296.4255,1031.4219);


    DisablePlayerCheckpoint(playerid);
    SendClientMessage(playerid,0x7CFC00AA, "Bomb has been created!! Start the countdown fast!! ( +2000$ ).");
    GivePlayerMoney(playerid,2000);
    //SetPlayerCheckpoint(playerid, 2555.2290,-1296.4255,1031.4219, 2.0);


    new name[ 24 ], string[ 64 ];
    GetPlayerName( playerid, name, 24 );
    format( string, sizeof(string), "~y~%s has created the Bomb!", name );
    GameTextForAll( string, 5000, 5 );


    return 1;
    }



    Nachdem ich mit dem CP im obigem Code die Bombe erstellt habe, kommt woanders ein anderer CP zum Vorschein.
    Wenn man den dann betritt, möchte ich nicht, dass diese Aktion nochmal ausgeführt wird.



    Wäre superfroh, wenn du mir wenigstens 1 Frage beantworten könntest oder wenigsten Codeschnipseö posten könntest.


    //edit ergänzung

    hi,
    ein paar Fragen:


    1. Wie lautet der Befehl, dass ein Spieler nach einer bestimmten Zeit oder Tat nicht mehr spawnen kann?


    2. Wie kann ich meinen Timer Killn?
    Bei KillTimer(timerid); kommt ein Error:
    error 076: syntax error in the expression, or invalid function call


    3. Wie kann ich eine Runde beenden? z.B ein Spieler geht in einen Checkpoint und die Runde endet.


    4. Wie kann ich Checkpoints untereinander unterscheiden? Z.B. im ersten CP bekommt man 2000$, dann erscheint der nächste CP und wenn man den betritt, bekommt man 5000$. Jetzt passiert bei allen CP's die gleiche Aktion, dass soll aber nicht so sein.


    Wäre super wenn jemand vllt. nur eine Antwort auf eine Frage hat und diese posten könnte, man muss schließlich nicht alles wissen. :D


    mfg.


    //edit Frage geändert.

    @[Bob]Systemfehler


    mhh, deine Möglichkeit funktioniert irgendwie net.


    ich habs mal so eingefügt:

    SetPlayerTeamFromClass(playerid, classid)
    {
    if (classid == 0)


    {
    gTeam[playerid] = TEAM_Police;
    }
    else
    {
    gTeam[playerid] = TEAM_Terrorists;
    }


    }


    Wenn ich das so drin hab, können sich 2 Spieler mit der classid 0 gegenseitig nicht töten, alle anderen ids jedoch schon, was ja so verständlich ist.
    Wenn ich es also so einfüge müsste es doch eigentlich klappen, tut es aber nicht:



    SetPlayerTeamFromClass(playerid, classid)
    {
    if (classid == 0)


    {
    gTeam[playerid] = TEAM_Police;
    }
    else
    {
    gTeam[playerid] = TEAM_Terrorists;
    }
    if (classid == 1)


    {
    gTeam[playerid] = TEAM_Police;
    }
    else
    {
    gTeam[playerid] = TEAM_Terrorists;
    }
    if (classid == 2)


    {
    gTeam[playerid] = TEAM_Police;
    }
    else
    {
    gTeam[playerid] = TEAM_Terrorists; //usw.
    }


    }


    Was mache ich falsch?


    //edit


    Ich habe weiter oben im Script noch sowas drin, kann es vllt. die Ursache sein, dass der Teamkill trotz definierter Teams möglich ist?

    public OnPlayerRequestClass(playerid, classid)
    {
    SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746); //wozu ist das eig. gut? den Classselectionsort ist doch in der Gamemode festgelegt?
    SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);


    if(classid == 0)
    {
    gTeam[playerid] = Police;
    GameTextForPlayer(playerid,"~b~Police",500,5);
    SetPlayerColor(playerid,0x33CCFFAA);}

    if(classid == 1)
    {
    gTeam[playerid] = Police;
    GameTextForPlayer(playerid,"~b~Police",500,5);
    SetPlayerColor(playerid,0x33CCFFAA);}
    //usw.

    Die Seite kenne ich schon allzu gut ;)


    Also:
    Ich gehe in einen roten Checkpoint, dadurch wird ein Pickup erstellt.



    public OnPlayerEnterCheckpoint(playerid)
    {


    CreatePickup(1252, 5, 679.2563,-483.7646,16.1875); //Hier wird das Pickup erstellt, aber das weist du sicher besser als ich ;)
    DisablePlayerCheckpoint(playerid);
    SendClientMessage(playerid,0x7CFC00AA, "Bomb has been created! Get it fast!.");
    GivePlayerMoney(playerid,2000);
    GameTextForPlayer(playerid,"~g~+ 2000",3000,1);


    new name[ 24 ], string[ 64 ];
    GetPlayerName( playerid, name, 24 );
    format( string, sizeof(string), "~y~%s has created the Bomb!", name );
    GameTextForAll( string, 5000, 5 );



    return 1;
    }

    Jetzt verschwindet der CP und das Pickup, in diesem Fall eine Bombe wird an einem bestimmtem Ort erstellt.
    Soweit so gut. Aber jedesmal, wenn der Spieler, der diese Bombe auf diese Weise erstellt hat (in den CP gehen) stirbt, ist der CP und auch die Bombe (also das Pickup) wieder an der selben Stelle automatisch erstellt worden. Das soll so jedoch nicht sein, sondern: Das Pickup(also die Bombe) soll erst wieder erstellt werden, wenn jemand wieder in den CP geht. Das erstellte Pickup soll so erstellt werden, dass es vom Spieler aufgenommen werden kann. (z.B pickuptype 2 ist aufnehmbar)


    Hoffe das war jetzt kein Fachchinesisch :D