Beiträge von Manyula

    Hallo!


    Ich würde gerne mal wissen, wie man in iPleomax's Textdraw Editor Projekte ordentlich löscht... Ingame finde ich keinen Button, der einer Löschfunktion gleicht. Wenn ich die .itd Datei im scriptfiles-Ordner lösche, wird das Projekt ingame trotzdem noch aufgelistet und crasht beim Versuch sie zu öffnen das Spiel. Lösche ich die gesamte .lst Datei, dann werden die bisher bestehenden Projekte auch nicht erkannt.

    Du solltest dir nochmal anschauen, was das Include alles macht...


    Habs mir nur flüchtig angeschaut, hab nicht daran gedacht, dass du nach der Zeit einen neuen Dialog mit dem Button anzeigen lässt. :whistling:
    Wie ich es gemeint hab, brauch ich wohl nicht erklären. Gute Include! :D

    Könnte man das nicht auch mit einem Timestamp lösen? Beim Öffnen des Dialogs den timestamp speichern, und bei response bzw. !response einfach den Vergleich machen. Find ich persönlich eine schönere Variante.

    Hallo,


    ich versuche gerade folgendes: Wenn man einen CMD eingibt, und ein toter Spieler (if(IsPlayerDead[playerid] == true) in einem Umkreis von 1.0m ist (GetClosestPlayer), soll der Spieler sich zum toten Spieler drehen (SetPlayerFacingAngleToPlayer).
    Zunächst einmal zu den Funktionen: Sind die fehlerfrei?



    stock GetClosestPlayer(playerid, Float:range)
    {
    new ID = -1,
    Float:distance = 999999.0;
    Float:px,
    Float:py,
    Float:pz;
    GetPlayerPos(playerid, px, py, pz);


    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(i != playerid)
    {
    new Float:tempdistance,
    Float:tx,
    Float:ty,
    Float:tz;
    GetPlayerPos(i, tx, ty, tz);
    tempdistance = GetDistanceBetweenPlayers(playerid, i);
    if(tempdistance < distance && tempdistance <= range && tempdistance != -1)
    {
    distance = tempdistance;
    ID = i;
    }
    }
    }
    }
    return ID;
    }


    stock SetPlayerFacingAngleToPlayer(playerid, targetid)
    {
    new Float:p[3], t[3];
    GetPlayerPos(playerid, p[0], p[1], p[2]);
    GetPlayerPos(targetid, t[0], t[1], t[2]);
    new Float:a = 180.0-atan2(p[0]-t[0], p[1]-t[1]);
    SetPlayerFacingAngle(playerid, a);
    }


    Ich hab mir am Ende dann gedacht, dass so etwas ca. dabei rauskommt...
    if(IsPlayerDead[playerid])
    {
    new closestID = GetClosestPlayer(playerid, 1.0);
    SetPlayerFacingAngleToPlayer(playerid, closestID);
    }

    Folgender Code bewirkt folgendes:
    Der Spieler stirbt und respawnt danach sofort, indem er die Sterbeanimation überspringt, via SetPlayerHealth(playerid, FLOAT_INFINITY);.
    Wenn der Spieler stirbt, wird ein Timer gestartet, der dem Spieler einen 500ms color fade anzeigen soll. Dann liegt der Spieler da, und kann mittels eines CMD respawnen.
    Nun klappt das Faden aber nicht. Ich habe mich an diesem Tutorial orientiert, aber es klappt nicht.


    new PlayerText:DeathFadeTD[MAX_PLAYERS];


    DeathFadeTD[playerid] = CreatePlayerTextDraw(playerid, -20.000000, 0.000000, "_");
    PlayerTextDrawUseBox(playerid, DeathFadeTD[playerid], 1);
    PlayerTextDrawBoxColor(playerid, DeathFadeTD[playerid], 0xFF0000C8);
    PlayerTextDrawAlignment(playerid, DeathFadeTD[playerid], 0);
    PlayerTextDrawBackgroundColor(playerid, DeathFadeTD[playerid], 0xFF0000C8);
    PlayerTextDrawFont(playerid, DeathFadeTD[playerid], 3);
    PlayerTextDrawLetterSize(playerid, DeathFadeTD[playerid], 1.000000, 52.200000);
    PlayerTextDrawColor(playerid, DeathFadeTD[playerid], 0xFF0000C8);


    new DeathFadeCount[MAX_PLAYERS] = 0;


    forward DeathFader(playerid);
    public DeathFader(playerid)
    {
    DeathFadeCount[playerid]++;
    switch(DeathFadeCount[playerid])
    {
    case 1: PlayerTextDrawBoxColor(playerid, DeathFadeTD[playerid], 0xFF0000BE);
    case 2: PlayerTextDrawBoxColor(playerid, DeathFadeTD[playerid], 0xFF0000B4);
    case 3: PlayerTextDrawBoxColor(playerid, DeathFadeTD[playerid], 0xFF0000AA);
    case 4: PlayerTextDrawBoxColor(playerid, DeathFadeTD[playerid], 0xFF0000A0);
    case 5: PlayerTextDrawBoxColor(playerid, DeathFadeTD[playerid], 0xFF000096);
    case 6: PlayerTextDrawBoxColor(playerid, DeathFadeTD[playerid], 0xFF00008C);
    case 7: PlayerTextDrawBoxColor(playerid, DeathFadeTD[playerid], 0xFF000082);
    case 8: PlayerTextDrawBoxColor(playerid, DeathFadeTD[playerid], 0xFF000078);
    case 9: PlayerTextDrawBoxColor(playerid, DeathFadeTD[playerid], 0xFF00006E);
    case 10: PlayerTextDrawBoxColor(playerid, DeathFadeTD[playerid], 0xFF000064);
    case 11: PlayerTextDrawBoxColor(playerid, DeathFadeTD[playerid], 0xFF00005A);
    case 12: PlayerTextDrawBoxColor(playerid, DeathFadeTD[playerid], 0xFF000050);
    case 13: PlayerTextDrawBoxColor(playerid, DeathFadeTD[playerid], 0xFF000046);
    case 14: PlayerTextDrawBoxColor(playerid, DeathFadeTD[playerid], 0xFF00003C);
    case 15: PlayerTextDrawBoxColor(playerid, DeathFadeTD[playerid], 0xFF000032);
    case 16: PlayerTextDrawBoxColor(playerid, DeathFadeTD[playerid], 0xFF000028);
    case 17: PlayerTextDrawBoxColor(playerid, DeathFadeTD[playerid], 0xFF00001E);
    case 18: PlayerTextDrawBoxColor(playerid, DeathFadeTD[playerid], 0xFF000014);
    case 19: PlayerTextDrawBoxColor(playerid, DeathFadeTD[playerid], 0xFF00000A);
    case 20:
    {
    PlayerTextDrawHide(playerid, DeathFadeTD[playerid]);
    KillTimer(DeathFaderTimer[playerid]);
    }
    }
    return 1;
    }


    public OnPlayerDeath(playerid, killerid, reason)
    {
    if(GetPlayerVirtualWorld(playerid) == 0)
    {
    SetPlayerHealth(playerid, FLOAT_INFINITY);
    PlayerTextDrawShow(playerid, DeathFadeTD[playerid]);
    DeathFaderTimer[playerid] = SetTimerEx("DeathFader", 500/20, true, "i", playerid);
    ClearAnimations(playerid);
    GetPlayerPos(playerid, pDeathLoc[playerid][0], pDeathLoc[playerid][1], pDeathLoc[playerid][2]);
    GetPlayerFacingAngle(playerid, pDeathLoc[playerid][3]);
    }
    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    SetPlayerPos(playerid, pDeathLoc[playerid][0], pDeathLoc[playerid][1], pDeathLoc[playerid][2]);
    SetPlayerFacingAngle(playerid, pDeathLoc[playerid][3]);
    SetCameraBehindPlayer(playerid);
    TogglePlayerControllable(playerid, 0);
    ApplyAnimation(playerid, "PED", "KO_shot_front", 4.1, 0, 1, 1, 1, 1);
    return 1;
    }

    Das mit der Variable ist mir gerade auch aufgefallen.


    Ich hab das jetzt mal in einer globale MAX_PLAYERS Variable abgespeichert. Trotzdem fadet die Farbe nicht aus, sondern bleibt im Anfangsszustand.

    public OnPlayerConnect(playerid)
    {
    if(fexist(UserPath(playerid)))
    {
    INI_ParseFile(UserPath(playerid), "LoadUser_%s");
    new pname[MAX_PLAYER_NAME],
    string[39 + MAX_PLAYER_NAME];
    GetPlayerName(playerid, pname, sizeof(pname));
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,"Login Menu","{FF0000}Type your password below to login.","Login","Kick");
    }
    else ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT,"Register Menu","Type your password below to register a new account.","Register","Kick");


    new connect_name[MAX_PLAYER_NAME],
    str[64];
    GetPlayerName(playerid, connect_name, sizeof(connect_name));
    format(str, sizeof(str), "%s has Joined the server.", connect_name);
    SendClientMessageToAll(0xFF8000FF, str);
    return 1;
    }


    Hast du ein solches define?
    #define UserPath "Users/%s.ini"

    Ich hab "state" nun mal zu "i" geändert.


    Timer.inc(61) : error 028: invalid subscript (not an array or too many subscripts): "DeathFader"
    Timer.inc(61) : warning 215: expression has no effect
    Timer.inc(61) : error 001: expected token: ";", but found "]"
    Timer.inc(61) : error 029: invalid expression, assumed zero
    Timer.inc(61) : fatal error 107: too many error messages on one line


    ____________________________________________________________________________________


    GELÖST!


    Hatte die falsche Bezeichnung beim killen vom Timer eingegeben.

    Hallo!


    Ich versuche einen kleinen Screen Fader zu scripten, wenn ein Spieler stirbt, habe aber ein paar kleinere Problemchen.
    Die Errors stehen ganz unten.


    Erstellung der Textdraws
    new PlayerText:DeathFadeTD[MAX_PLAYERS];


    DeathFadeTD[playerid] = CreatePlayerTextDraw(playerid, -7.000000, 0.000000, "samaps:map");
    PlayerTextDrawLetterSize(playerid, DeathFadeTD[playerid], 0.500000, 1.000000);
    PlayerTextDrawColor(playerid, DeathFadeTD[playerid], 0xFF0000C8);
    PlayerTextDrawSetOutline(playerid, DeathFadeTD[playerid], 0);
    PlayerTextDrawSetProportional(playerid, DeathFadeTD[playerid], 1);
    PlayerTextDrawSetShadow(playerid, DeathFadeTD[playerid], 1);
    PlayerTextDrawUseBox(playerid, DeathFadeTD[playerid], 1);
    PlayerTextDrawBoxColor(playerid, DeathFadeTD[playerid], 0xFF0000C8);
    PlayerTextDrawTextSize(playerid, DeathFadeTD[playerid], 650.000000, 450.000000);


    Callbacks
    new DeathFadeTimer[MAX_PLAYERS];


    public OnPlayerDeath(playerid, killerid, reason)
    {
    TextDrawShowForPlayer(playerid, DeathFade[playerid]);
    DeathFaderTimer[playerid] = SetTimerEx("DeathFader", 500/20, true, "i", playerid);
    }


    forward DeathFader(playerid);
    public DeathFader(playerid)
    {
    new state; //Zeile 35
    state++; //Zeile 36
    switch(state) //Zeile 37
    {
    case 1: PlayerTextDrawColor(playerid, DeathFadeTD[playerid], 0xFF0000BE);
    case 2: PlayerTextDrawColor(playerid, DeathFadeTD[playerid], 0xFF0000B4);
    case 3: PlayerTextDrawColor(playerid, DeathFadeTD[playerid], 0xFF0000AA);
    case 4: PlayerTextDrawColor(playerid, DeathFadeTD[playerid], 0xFF0000A0);
    case 5: PlayerTextDrawColor(playerid, DeathFadeTD[playerid], 0xFF000096);
    case 6: PlayerTextDrawColor(playerid, DeathFadeTD[playerid], 0xFF00008C);
    case 7: PlayerTextDrawColor(playerid, DeathFadeTD[playerid], 0xFF000082);
    case 8: PlayerTextDrawColor(playerid, DeathFadeTD[playerid], 0xFF000078);
    case 9: PlayerTextDrawColor(playerid, DeathFadeTD[playerid], 0xFF00006E);
    case 10: PlayerTextDrawColor(playerid, DeathFadeTD[playerid], 0xFF000064);
    case 11: PlayerTextDrawColor(playerid, DeathFadeTD[playerid], 0xFF00005A);
    case 12: PlayerTextDrawColor(playerid, DeathFadeTD[playerid], 0xFF000050);
    case 13: PlayerTextDrawColor(playerid, DeathFadeTD[playerid], 0xFF000046);
    case 14: PlayerTextDrawColor(playerid, DeathFadeTD[playerid], 0xFF00003C);
    case 15: PlayerTextDrawColor(playerid, DeathFadeTD[playerid], 0xFF000032);
    case 16: PlayerTextDrawColor(playerid, DeathFadeTD[playerid], 0xFF000028);
    case 17: PlayerTextDrawColor(playerid, DeathFadeTD[playerid], 0xFF00001E);
    case 18: PlayerTextDrawColor(playerid, DeathFadeTD[playerid], 0xFF000014);
    case 19: PlayerTextDrawColor(playerid, DeathFadeTD[playerid], 0xFF00000A);
    case 20:
    {
    PlayerTextDrawShow(playerid, DeathFadeTD[playerid]);
    KillTimer(DeathFader[playerid]);
    }
    }
    return 1;
    }


    Errors
    Timer.inc(35) : error 001: expected token: "-identifier-", but found "state"
    Timer.inc(36) : error 001: expected token: "-identifier-", but found "++"
    Timer.inc(36) : error 029: invalid expression, assumed zero
    Timer.inc(36 -- 37) : error 022: must be lvalue (non-constant)
    Timer.inc(36 -- 37) : fatal error 107: too many error messages on one line

    Ich find das alles ziemlich verwirrend... Ich hab das hier jetzt.
    enum hSpawn
    {
    Float:Distance,
    hIndex
    }


    new dist[MAX_PLAYERS][4][hSpawn];


    new Float:Hospitals[][] =
    {
    {1177.0387, -1323.8035, 14.0510, EAST},
    {-2655.6882, 636.9452, 14.4531, SOUTH},
    {1607.2102, 1818.1615, 10.820, NORTH}
    };


    public OnPlayerDeath(playerid, killerid, reason)
    {
    dist[playerid][0][Distance] = GetPlayerDistanceFromPoint(playerid, Hospitals[0][0], Hospitals[0][1], Hospitals[0][2]);
    dist[playerid][0][hIndex] = 0;
    dist[playerid][1][Distance] = GetPlayerDistanceFromPoint(playerid, Hospitals[1][0], Hospitals[1][1], Hospitals[1][2]);
    dist[playerid][1][hIndex] = 1;
    dist[playerid][2][Distance] = GetPlayerDistanceFromPoint(playerid, Hospitals[2][0], Hospitals[2][1], Hospitals[2][2]);
    dist[playerid][2][hIndex] = 2;


    SortDeepArray(dist[playerid], Distance, SORT_ASC);
    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    SetPlayerPos(playerid, dist[playerid][0], dist[playerid][1], dist[playerid][2]);
    SetPlayerFacingAngle(playerid, dist[playerid][3]);
    return 1;
    }


    ...und bekomme folgende Errors.
    error 017: undefined symbol "SA_4"
    warning 215: expression has no effect
    error 001: expected token: ";", but found "sizeof"
    error 001: expected token: "]", but found "-identifier-"
    fatal error 107: too many error messages on one line
    Die Errormeldungen sehen für mich eher danach aus, dass etwas in der Include nicht stimmt...

    Mein Problem liegt jetzt ja nicht an einem fehlenden Algorithmus, sondern daran, wie ich von der Distanzberechnung wieder auf die richtigen Koordinaten im Array verweise.
    "dist" speichert ja die Distanz zu jedem Punkt und wird dann praktisch aufsteigend sortiert. Wie kann ich zurückverfolgen welche Distanz zu welchen Koordinaten gehören?