Wozu der delay?
Und wenn, dann SetTimerEx verwenden mit der playerid als Parameter, so würde das nur bei ID 0 funktionieren.
Dann hast du anscheinend schon AddPlayerClass in deinem Skript, dann kannst du dir das SetSpawnInfo natürlich schenken
Wozu der delay?
Und wenn, dann SetTimerEx verwenden mit der playerid als Parameter, so würde das nur bei ID 0 funktionieren.
Dann hast du anscheinend schon AddPlayerClass in deinem Skript, dann kannst du dir das SetSpawnInfo natürlich schenken
Moin, hab das nun geändert, aber jetzt zeigt er mir wenn ich auf English geh es auf Deutsch an und andersrum?
stock GetPlayerLanguage(playerid)
{
return pLanguage[playerid];
}
switch(GetPlayerLanguage(playerid))
{
case ENG:
{
Textdraw23[playerid] = CreatePlayerTextDraw(playerid, 224.333312, 183.348114, "german");
}
case GER:
{
Textdraw23[playerid] = CreatePlayerTextDraw(playerid, 224.333312, 183.348114, "deutsch");
}
}
MfG
Nur noch zur Optimierung, so einfache Funktionen kannst du als Makro schreiben, das ist performanter und einfacher:
#define GetPlayerLanguage(%0) pLanguage[%0]
Das sieht richtig aus, die Frage ist jetzt nur, wie du das gesetzt hast
pLanguage[playerid] = ENG;
Ich vermute mal, dass in deinem enum GER vor ENG steht
bzw steht GER ganz oben im enum und hat daher die ID 0.
Du setzt also die Sprache für den Spieler erst nachdem du ihm schon einen Dialog anzeigst
Ich vermute da liegt der Fehler
Achso und wie in einem anderen Post schon erwähnt, switch ist eigentlich nur sinnvoll, wenn du mehr als 2 Sprachen hast, bei 2 kannste das auch so machen:
Textdraw23[playerid] = CreatePlayerTextDraw(playerid, 224.333312, 183.348114, ((GetPlayerLanguage(playerid) == GER)?("deutsch"):("german")));
Gebe zu, bisschen umständlich, kannst es dir ja theoretisch in einem Makro kürzen:
#define L(%0,%1,%2) ((GetPlayerLanguage(%0)==GER)?(%1):(%2))
Nutzung:
Textdraw23[playerid] = CreatePlayerTextDraw(playerid, 224.333312, 183.348114, L(playerid,"deutsch","german"));
Somit sparst du dir viel ein
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOG_TAXIFARE)
{
if(response)
{
if(IsNumeric(inputtext))
{
if(strval(inputtext) >= 1 && strval(inputtext) <= 200)
{
new string[128];
new vehicleid = GetPlayerVehicleID(playerid);
for(new i = 0; i < sizeof(pTaxi); i++)
{
if(pTaxi[i][taxiVehicleID] != vehicleid)
continue;
pTaxi[i][taxiFare] = strval(inputtext);
SendClientMessage(playerid, COLOR_LIGHTBLUE,"Du bist nun im Dienst als Taxifahrer");
pTaxi[i][taxiUsed] = true;
pTaxi[i][taxiPlayer] = playerid;
pInfo[playerid][pJobDuty] = true;
SetPlayerColor(playerid, COLOR_YELLOW);
format(string,sizeof(string),"{D7DF01}Taxi Company\n\nFahrer: %s\nKosten: %d$",SpielerName(playerid), pTaxi[i][taxiFare]);
Update3DTextLabelText(taxi[i], COLOR_WHITE,string);
pTaxi[i][taxiTimer] = SetTimerEx("Taxameter", 1000 * 30, true, "i", pTaxi[i][taxiVehicleID]);
}
}
else
{
RemovePlayerFromVehicle(playerid);
}
}
}
}
return 1;
}
Alles anzeigen
Hallo,
Habe das Problem wen ich einfach nur 0 eingebe wird er aus den Fahrzeug geworfen...
Er soll rausgeworfen werden wen er auf aussteigen klickt.
Sollte der User 0 eingeben sollte der Dialog wieder angezeigt werden.
Danke im Vorraus!
Das else musst du anders setzen und zwar so, dass es mit dem if von dem response harmoniert
Und da wo du das else jetzt hast schreib darein, dass dem Spieler wieder der Dialog angezeigt werden soll
Das else musst du anders setzen und zwar so, dass es mit dem if von dem response harmoniert
Und da wo du das else jetzt hast schreib darein, dass dem Spieler wieder der Dialog angezeigt werden soll
Das else musst du anders setzen und zwar so, dass es mit dem if von dem response harmoniert
Und da wo du das else jetzt hast schreib darein, dass dem Spieler wieder der Dialog angezeigt werden soll
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOG_TAXIFARE)
{
if(response)
{
if(IsNumeric(inputtext))
{
if(strval(inputtext) >= 1 && strval(inputtext) <= 200)
{
new string[128];
new vehicleid = GetPlayerVehicleID(playerid);
for(new i = 0; i < sizeof(pTaxi); i++)
{
if(pTaxi[i][taxiVehicleID] != vehicleid)
continue;
pTaxi[i][taxiFare] = strval(inputtext);
SendClientMessage(playerid, COLOR_LIGHTBLUE,"Du bist nun im Dienst als Taxifahrer");
pTaxi[i][taxiUsed] = true;
pTaxi[i][taxiPlayer] = playerid;
pInfo[playerid][pJobDuty] = true;
SetPlayerColor(playerid, COLOR_YELLOW);
format(string,sizeof(string),"{D7DF01}Taxi Company\n\nFahrer: %s\nKosten: %d$",SpielerName(playerid), pTaxi[i][taxiFare]);
Update3DTextLabelText(taxi[i], COLOR_WHITE,string);
pTaxi[i][taxiTimer] = SetTimerEx("Taxameter", 1000 * 30, true, "i", pTaxi[i][taxiVehicleID]);
}
}
else
{
ShowPlayerDialog(playerid, DIALOG_TAXIFARE, DIALOG_STYLE_INPUT, "Taxi Company", "Du kannst nun den Preis festlegen, den die Fahrgäste jede 10 Sekunden bezahlen.\nDerPreis muss mindestens 1$ und maximal 200$ sein.", "Weiter", "Aussteigen");
}
}
}
}
return 1;
}
Alles anzeigen
Habe das so...
Wo muss ich es einfügen wen er auf Aussteigen klickt das er raus geworfen wird?
Wo muss ich es einfügen wen er auf Aussteigen klickt das er raus geworfen wird?
Habe ich doch geschrieben gehabt
So harmonisiert das else mit dem if(response)
In der Include von dem Streamer steht es aber so drin:
CreateDynamicActor(modelid, Float:x, Float:y, Float:z, Float:r, invulnerable = 1, Float:health = 100.0, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = STREAMER_ACTOR_SD, STREAMER_TAG_AREA areaid = STREAMER_TAG_AREA -1, priority = 0);
MfG.
Okay gut, ich hab keine Ahnung, welche Include du verwendest, eventuell mal posten? bzw Link?
Ganz Normal den Streamer.
Auch auf die neuste Version schon.
Link: https://github.com/samp-incogn…-streamer-plugin/releases
MfG.
Hab ich noch nicht mit gearbeitet, weiß nicht wie der das Aktualisiert und ob es da Zeiten gibt und wie ausgereift das ist.
Aufjedenfall muss, sobald du das Interior betrittst der Actor neu gestreamt werden.
Du solltest das aber anders machen.
Die Actor nicht Interior spezifisch spawnen lassen, sondern VirtualWorld spezifisch.
Das liegt eigentlich in ihrer Natur
Du meinst also das ich die Actor noch eine ID zuweißen soll, passt!
So, anstatt die Interior ID zu ändern, setze ich die Actor zB in die Virtuelle Welt 30, und wenn ich das Interior Betrete Neu Spawnen lasse, jetzt ist nur meine Frage, wie soll ich den Actor neu Streamen?
MfG.
wie soll ich den Actor neu Streamen?
Eigentlich sollte das der Streamer automatisch regeln xD
Probiers einfach mal aus, wenn es nicht geht..eventuell online mal einen anderen streamer verwenden für die Actors, da gibts spezielle
@Kaliber
Bin gerade bissel am Verzweifeln.
Hab es mit Normalen Actor Funktion Probiert, via IDs und Virtuelle Welt, Spieler in die Virtuelle Welt gesetzt beim Betreten des Interiorers, Actor wird immer noch nicht Erscheint.
// Enum:
enum ActorDaten{
aID,
aName[256],
aSkin,
Float:aPosX,
Float:aPosY,
Float:aPosZ,
Float:aPosA,
aHealth,
aInvulnerable
}
new ActorInfo[][ActorDaten] = {
{0, ""#FARBE_ORANGE"Akira:"#FARBE_WEISS"\nEgal was du brauchst vom Bürgerbüro\nich besorge es dir!\n\n"#FARBE_ORANGE"'N' zum Interagieren.", 186, -2159.4829, 639.6165, 1057.5861, 36.5559, 100, 1} // -> Bürger Büro Actor
};
// Erstellen / Laden:
for(new i = 0; i < sizeof(ActorInfo[]); i++)
{
CreateActor(ActorInfo[i][aSkin], ActorInfo[i][aPosX], ActorInfo[i][aPosY], ActorInfo[i][aPosZ], ActorInfo[i][aPosA]);
SetActorVirtualWorld(ActorInfo[i][aID], 30);
//CreateDynamicActor(ActorInfo[i][aSkin], ActorInfo[i][aPosX], ActorInfo[i][aPosY], ActorInfo[i][aPosZ], ActorInfo[i][aPosA], ActorInfo[i][aInvulnerable], ActorInfo[i][aHealth], 30);
//CreateDynamic3DTextLabel(ActorInfo[i][aName], -1, ActorInfo[i][aPosX], ActorInfo[i][aPosY], ActorInfo[i][aPosZ], 15.0);
}
Hast du noch irgendeine Lösung parat?
Änderst du auch den Interior vom Spieler?
Wenn ja, probier einfach mal folgendes und setze im Callback [wiki]OnPlayerInteriorChange[/wiki] die Position von deinem Actor neu
Wenn du ihn dann immer noch nicht sehen solltest, dann porte dich mal zu ihm, ob er wirklich erstellt wird xD
@Kaliber
Hoffe du meinst es so.
public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid){ for(new i = 0; i < sizeof(ActorInfo[]); i++) { SetActorPos(ActorInfo[i][aID], ActorInfo[i][aPosX], ActorInfo[i][aPosY], ActorInfo[i][aPosZ]); } return 1;}
Wie soll ich denn so ein "Befehl" machen um mich zu ihn zu Teleportieren?
Einfach die Kordinanten aus dem Enum nehmen?
MfG.
// Edit:
Hab da gerade noch was gefunden, hab mal mein "OnGameModeInit" Geprintet, Naja, Ergebnis ist nicht sehr toll!
Der Print kommt nur bis "Mysql Log".
public OnGameModeInit()
{
// [- GameMode Funktionen -]
SetGameModeText("DE: Reallife");
DisableInteriorEnterExits();
// [- MySQL -]
Handle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DATA);
mysql_log(ALL);
print("MySQL Log");
// [- Pickup Erstellen -]
for(new i = 0; i < sizeof(IntInfo[]); i++)
{
CreateDynamicPickup(1318, 0, IntInfo[i][iEingangX], IntInfo[i][iEingangY], IntInfo[i][iEingangZ]);
CreateDynamic3DTextLabel(IntInfo[i][iTitel], -1, IntInfo[i][iEingangX], IntInfo[i][iEingangY], IntInfo[i][iEingangZ], 15.0);
}
print("Pickup");
// [- Actor Erstellen -]
for(new i = 0; i < sizeof(ActorInfo[]); i++)
{
CreateActor(ActorInfo[i][aSkin], ActorInfo[i][aPosX], ActorInfo[i][aPosY], ActorInfo[i][aPosZ], ActorInfo[i][aPosA]);
SetActorVirtualWorld(ActorInfo[i][aID], 30);
//CreateDynamicActor(ActorInfo[i][aSkin], ActorInfo[i][aPosX], ActorInfo[i][aPosY], ActorInfo[i][aPosZ], ActorInfo[i][aPosA], ActorInfo[i][aInvulnerable], ActorInfo[i][aHealth], 30);
CreateDynamic3DTextLabel(ActorInfo[i][aName], -1, ActorInfo[i][aPosX], ActorInfo[i][aPosY], ActorInfo[i][aPosZ], 15.0);
}
print("Actor Erstellt");
return 1;
}
MfG.
Hey,
nicht direkt eine Scriptingfrage, aber hat schon was Bugfix zutun.
Kann mir einer sagen, warum die Objekte buggen?
Das obere ist aus dem Mapeditor, das untere dann im Spiel.
Danke schonmal!