in den Scriptfiles gibt es noch eine .txt Datei in der alle Projekte aufgelistet sind; diese Öffnen und die betreffenden Zeilen rauslöschen
Das ist tatsächlich die .lst Datei, von der ich geredet habe. Danke dir!
in den Scriptfiles gibt es noch eine .txt Datei in der alle Projekte aufgelistet sind; diese Öffnen und die betreffenden Zeilen rauslöschen
Das ist tatsächlich die .lst Datei, von der ich geredet habe. Danke dir!
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.
Ich wäre euch auch dankbar, wenn ihr Vorschläge für weitere Items hättet, die in Mülltonnen zu finden wären.
Danke schonmal fürs Vorbeischauen!
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.
Wie ich es gemeint hab, brauch ich wohl nicht erklären. Gute Include!
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.
Hm, ich meine, dass dieses AllowPlayerTeleport irgendwas mit YSI zu tun hat. Ich kann mich aber auch irren.
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.
Hast du dich an diesem Tutorial schon mal versucht?
Ich würd dir auch empfehlen Whirlpool statt udb_hash zu verwenden.
Kleiner Nachtrag:
INI_ParseFile(PATH(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
Du darfst UserPath und PATH nicht verwechseln.
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.
Also, zuallererst soll man mit "INI_SetTag" keine Leerzeichen benutzen. Schreib also "Player_Saved_Data" oder sowas in der Art.
Zeig mal bitte dein "UserPath(playerid)".
Das IST die Timer.inc. Die Timer Funktion ist da ab Zeile 9 unter "Callbacks".
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
Danke dir, Jeffry, eine Frage hätte ich allerdings noch.
Wieso setzt du "dist" auf 999999999.0?
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?