Paar mehr Infos wären nicht schlecht.
Wie ist SpielerInfo deklariert oben in deinem GM?
Wie sieht der Code rund um diese Zeile aus?
Beiträge von Woozie
-
-
SetPlayerCheckpoint zeigt er nur einen an. bei SetPlayerMapIcon kannst du z.B. 5 Ziele gleichzeitig anzeigen lassen und der Spieler, der den Job ausführt, kann sich die Route selber planen
Aber mach du mal. Ich drück dir die Daumen bei deinem Include. -
SetPlayerMapIcon(playerid, 0, Float:x, Float:y, Float:z, 0,0xFF0000FF, MAPICON_GLOBAL_CHECKPOINT);
Per Timer X, Y, Z Koordinate des Spielers abfragen. Befindet der sich bei X, Y, Z (vom Checkpoint), dann hat er den Checkpoint berührt. Sehe da kein Problem. Außer die Größe des CP's halt
Und, nehm anstelle des SA-MP SetPlayerMapIcon einfach einen Streamer für...
-
Dir ist klar dass SetPlayerCheckpoint != SetPlayerMapIcon ist...Aber es gibt so ein MapIcon das man setzten kann, ja...könnte man so machen, halte ich jedoch für weniger sinnvoll
mfg.
Dann mach das doch in deiner Include, daß SetPlayerMapIcon (Marker plus Checkpoint) so abläuft, daß es für den Scripter, der deine INC nutzt, wie ein normaler Checkpoint ausschaut ^^. Machbar ist das, hab das selbst so
-
Dir ist aber klar, daß man z.B. mit SetMapIcon mehrere CP's anzeigen lassen kann? Oder per Streamer (Incognitos z.B.), kann man mehrere definieren, der die dann nach Distanz anzeigt?
Edit:
ZitatSetJobSpawn(jobid,Float:x,Float:y,Float:z,Float:a,interior,world); //Setzt den Spawn für den Job (er wird auch direkt dahin gesetzt)
Ich meinte mit SetJobSpawn eigentlich der Spawn nach dem Tot. Also wenn OnPlayerDeath abgefragt wird. Aber egal...
PS.:
Finde sowas gut, daß es Leute gibt, die anderen mit solchen INC's helfen -
welche Größe?
-
new RandomItems[3][] =
{
{"Waffe 1"},
{"Waffe 2"},
{"Waffe 3"}
};
dcmd_test(playerid,params[])
{
return SendClientMessage(playerid, hellblau, RandomItems[random(sizeof(RandomItems))]);
} -
Kategoresieren deswegen, damit man schnelleren und leichteren Zugriff auf den Job hat (als Scripter).
In der Jobbox könnten Infos wie z.B. nächste(r) Zielort(e), Name des Jobs, Wieviele Items (z.B. Pakete) hat man noch usw. usw.SetPlayerJobCheckpoint:
für das streamen der Checkpoints nötig. Kann ja sein, das jemand Checkpoints während des Jobs auch für andere Dinge verwendet, wie z.B. Fastfood Stände... -
probiers so mal, habs aber nicht getestet
new RandomItems[3][] =
{
{"Waffe 1"},
{"Waffe 2"},
{"Waffe 3"}
};dcmd_test(playerid,params[])
{
new stringtest[128]; return SendClientMessage(playerid, hellblau, RandomItems[rand(sizeof(RandomItems))]);
} -
Nenne mal Beispiele
@Rest danke für die Kommentare
mfg.
Das mach ich doch gern ^^:
SetJobTyp(jobid, typid); // <-- jobid ist klar, typid siehe weiter unten
SetPlayerJobCheckpoint(playerid, jobid, x, y, z); // <-- per Streaming Checkpoints inkl. Marker anzeigen lassen, wie im Singleplayermodi (arbeite derzeit daran)
ToggleJobBox(playerid, jobid); // <-- Eine per Textdraw dargestellte Informationsbox anzeigen lassen oder nicht!
SetPlayerJobSpawn(playerid, x, y, z, a, interior, world); // <-- wo soll der Spieler spawnen nach seinem Ableben?aus CreateJobCar(...) würde ich dann lieber CreateJobVehicle(...) machen!
TypID:
JOB_TYPE_CP // <-- 0815 Checkpoints abfahren
JOB_TYPE_FD // <-- Feuerlöschen
JOB_TYPE_PD // <-- jagen, verhaften, einbuchten, kontrollieren
JOB_TYPE_TAXI // <-- Spielerbetreuung (Kunde!), NPC's zu ihrem Ziel fahren
JOB_TYPE_TOW // <-- Mechanikerdienste wie Reparatur von Fahrzeugen, Lackierungen, Tuning usw.
JOB_TYPE_CP_DELIVERY // <-- Lieferungen an bestimmte Punkte, gekennzeichnet durch Checkpoints (inkl. Objekt tragen usw. wie ein richtiger Paketdienst z.B.)
JOB_TYPE_CP_COURIER // <-- Lieferungen an bestimmte Punkte (z.B. Paperboy, der Zeitungen an CP markierten Punkte ausliefert, allerdings wirft er die Zeitung in den CP)
JOB_TYPE_MISSION // <-- Missionen wie im Singleplayer (Anm.: daran arbeite ich gerade)Das sollte erstmal reichen, will nicht mein gesamtes Pulver hier verschiessen
-
Gefällt mir gut. Simple, aber noch stark ausbaufähig. Du hast mich jedenfalls auf eine Idee für mein neues Script gebracht.
Nein, ich werde deine INC nicht nutzen oder Codeteile davon, keine Sorge. Die Grundidee gefällt mir aber recht gut. -
Nein, deine installierten Programme sind dann auch lauffähig. Es geht doch nur darum, daß du ein neues Profil hast. An deinem Win7Prof ändert sich ja nix.
-
Welche Windows Version hast du überhaupt?
Unter Vista/7 einfach Systemsteuerung -> Benutzerkonten -> Neues Benutzerkonto erstellen
Unter XP ähnlich... -
erstell mal ein neues Profil und versuchs dort mal. Möglich das du dein Profil geschrottet hast
-
ich würde das folgendermaßen machen.
Bei deinem CMD /dm einfach noch SetSpawnInfo(playerid, ....) und eine Variable, daß das Script weiss, da du in der DM Arena bist. Z.B. playerAreanDM[playerid] = 1;
Bei OnPlayerDeath einfach Abfragen, ob der Spieler in der DM Arena ist (siehe Variable als Beispiel) und dort einfach ein return 1; machen.Ich code das mal
public OnPlayerCommand(playerid, cmdtext[])
{
if (!strcmp(cmdtext, "/dm", true) {playerArena[playerid] = 1; SetPlayerPos(...); SetSpawnInfo(...); return 1;}
return 0;
}public OnPlayerDeath(playerid, killerid, reason)
{
if (playerArena[playerid]) return 1;/* dein restlicher Code für diesen Callback */
return 1;
}Wo ich nur (...) gemacht habe, musst du natürlich den Code vervollständigen
-
//-----------------------------------
// oben in deinem GM definieren
//-----------------------------------
#define NPC_BEAMTER 1
new npcID[MAX_PLAYERS];public OnPlayerConnect(playerid)
{
if(IsPlayerNPC(playerid))
{
new botname[MAX_PLAYER_NAME];
GetPlayerName(playerid, botname, sizeof(botname));
if(!strcmp(botname, "Beamter", true))
{
gPlayerLogged[playerid] = 1;
//-----------------------------------
// Anmerkung: um die Verwaltung der NPC's zu vereinfachen würde ich deren playerid in eine Variable speichern
// Beispiel:
npcID[playerid] = NPC_BEAMTER;
//-----------------------------------
SetSpawnInfo(playerid, TEAM, 281, X, Y, Z, WEAPON1, W_AMMU1, WEAPON2, W_AMMU2, WEAPON3, W_AMMU3); // <-- bitte grossgeschriebenes anpassen
SpawnPlayer(playerid);
print("NPC Beamter ist gespawnt.");
}
return 1;
}
return 1;
}public OnPlayerSpawn(playerid)
{
if (IsPlayerNPC(playerid)
{
if (npcID[playerid] == NPC_BEAMTER) SetPlayerColor(playerid, TEAM_HIT_COLOR);
return 1;
}
return 1;
}Du kannst dies natürlich auch mit PlayerVars machen:
//-----------------------------------
// oben in deinem GM definieren
//-----------------------------------
#define NPC_BEAMTER 1public OnPlayerConnect(playerid)
{
SetPVarInt(playerid, "npcID", 0);
if(IsPlayerNPC(playerid))
{
new botname[MAX_PLAYER_NAME];
GetPlayerName(playerid, botname, sizeof(botname));
if(!strcmp(botname, "Beamter", true))
{
gPlayerLogged[playerid] = 1;
//-----------------------------------
// Anmerkung: um die Verwaltung der NPC's zu vereinfachen würde ich deren playerid in eine Variable speichern
// Beispiel:
SetPVarInt(playerid, "npcID", NPC_BEAMTER);
//-----------------------------------
SetSpawnInfo(playerid, TEAM, 281, X, Y, Z, WEAPON1, W_AMMU1, WEAPON2, W_AMMU2, WEAPON3, W_AMMU3); // <-- bitte grossgeschriebenes anpassen
SpawnPlayer(playerid);
print("NPC Beamter ist gespawnt.");
}
return 1;
}
return 1;
}public OnPlayerSpawn(playerid)
{
if (IsPlayerNPC(playerid)
{
if (GetPVarInt(playerid, "npcID") == NPC_BEAMTER) SetPlayerColor(playerid, TEAM_HIT_COLOR);
return 1;
}
return 1;
} -
-
Was steht denn in der Log oder im Serverfenster beim Starten deinens Gamemodes? Verbindet sich der NPC überhaupt mit dem Server?In welchem Codeabschnitt bei OnGameModeInit() hast du denn ConnectNPC stehen? Wir bräuchten da schon mehr. Poste doch mal deinen Callback bitte.... ansonsten prüft mit print("OK"); einfach, bis zu welchem Codeabschnitt er kommt. So mach ich das auch
-
Ohne das Thema zu pushe, aber dann kann es ja von einem Moderator geschlossen werden oder?
Darkii.[1337]
Kein Problem, wir sitzen alle im gleichen Boot -
Hier, ich habe alles einmal geloggt, und die Koordinaten von allen ausgeben lassen:CodeHeal Pickup: ID: 1 | HPposx: -1600.310058 | HPposy: 673.547973 | HPposz: -1600.310058 Armor Pickup: ID: 1 | ARposx: -1598.520019 | ARposy: 673.344970 | ARposz: -1598.520019 Duty Pickup: ID: 1 | Dposx: 0.000000 | Dposy: 0.000000 | Dposz: -1596.619995 Heal Pickup: ID: 2 | HPposx: -1334.939941 | HPposy: 495.709014 | HPposz: -1334.939941 Armor Pickup: ID: 2 | ARposx: -1342.979980 | ARposy: 500.394989 | ARposz: -1342.979980 Duty Pickup: ID: 2 | Dposx: -1346.819946 | Dposy: 500.402008 | Dposz: -1346.819946 Heal Pickup: ID: 3 | HPposx: 0.000000 | HPposy: 0.000000 | HPposz: 0.000000 Armor Pickup: ID: 3 | ARposx: 0.000000 | ARposy: 0.000000 | ARposz: 0.000000 Duty Pickup: ID: 3 | Dposx: 0.000000 | Dposy: 0.000000 | Dposz: 0.000000
Also einmal vom Heal, Armor und Duty Pickup. (Heal Pickup=HPpos Koordinaten, Armor Pickup=ARpos Koordinaten, Duty Pickup=Dpos Koordinaten)
Dafor die jeweilige ID
Es wundert mich irgendwie... warum geht es nichtWenn deine Ausgabe so stimmt, dann sind deine X und Z Koordinaten die gleichen. Prüf das mal bitte