Beiträge von Crank93
-
-
bei den befehlen mit strcmp, was verwendest du als rückgabewert bei OnPlayerCommandText?
-
was meinst du mit "sie gehen nicht?" kommt ne meldung "SERVER: Unknown Command" oder passiert garnichts?
-
ich glaub das könte dir weiterhelfen:
stock GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance) { //Credits to Y_Less
new
vid=GetPlayerVehicleID(playerid),
Float:a;
if (vid) {
GetVehiclePos(vid,x,y,a);
GetVehicleZAngle(vid, a);
}
else {
GetPlayerPos(playerid, x, y, a);
GetPlayerFacingAngle(playerid, a);
}
x += (distance * floatsin(-a, degrees));
y += (distance * floatcos(-a, degrees));
}damit bekomste den punkt, der sich genau um den wert "distance" vorm gesicht (oder fahrzeug) des spielers befindet. (funktion ist nicht von mir ).
-
gib einfach mal im startmenü im suchfeld "savedpositions" ein.
-
so, auf ein neues
#define MAX_VEHICLES_PER_PLAYER (1) //beliebig editieren...//oben
new spawned_vehicles[MAX_PLAYERS];
new vehID[MAX_PLAYERS][MAX_VEHICLES_PER_PLAYER];//OnDialogResponse
if(dialogid==deineID)
{
if(spawned_vehicles[playerid]==MAX_VEHICLES_PER_PLAYER)
{
DestroyVehicle(vehID[playerid][spawned_vehicles[playerid]-1]);
vehID[playerid][spawned_vehicles[playerid]-1]=CreateVehicle(...deine_daten);}
else
{
spawned_vehicles[playerid]++;
vehID[playerid][spawned_vehicles[playerid]-1]=CreateVehicle(...deine_daten);
}
} -
naja, hier mal ein paar grundlagen:
ich würde zuerst eine liste mit allen spielerdaten (enum), die du brauchst, erstellen, z.B:
enum e_player_info
{
pPassword[32],
pMoney,
pScore,
pAdmin //usw, halt alles, was du speichern (und laden) willst...
};dann brauchst du ne globale variable, in der genug platz für jeden spieler ist.
new g_PlayerInfo[MAX_PLAYERS][e_player_info]; //so, nun können hier die obigen daten für jeden spieler gespeichert werden.
wenn jetzt der spieler den server betritt, werden seine daten aus seiner .ini file geladen:
//OnPlayerConnect
new pname[MAX_PLAYER_NAME], pfile[100];
GetPlayerName(playerid, pname, sizeof(pname)); //name in pname gespeichert
format(file, sizeof(file), "Userfiles\%s.ini", pname); //evtl. Pfad ändern
//so, jetzt die daten aus der datei in das array:
g_PlayerInfo[playerid][pPassword]=dini_Get(file, "Password");
g_PlayerInfo[playerid][pMoney]=dini_Get(file, "Money");
//usw...so, wenn der spieler den server verlässt, sollen die daten gespeichert werden:
//OnPlayerDisconnect
new pname[MAX_PLAYER_NAME], pfile[100];
GetPlayerName(playerid, pname, sizeof(pname)); //name in pname gespeichert
format(file, sizeof(file), "Userfiles\%s.ini", pname); //evtl. Pfad ändern
dini_IntSet(file, "Money", GetPlayerMoney(playerid));
dini_IntSet(file, "Score", GetPlayerScore(playerid));
//usw... -
wie werden die daten gespeichert? (dini, standart-dateifunktionen, mysql...?)
-
#define MAX_VEHICLES_PER_PLAYER (1) //beliebig editieren...//oben
enum e_veh_info
{
spawned_vehicles,
vehID[MAX_VEHICLES_PER_PLAYER]
};
new veh_info[MAX_PLAYERS][e_veh_info];//OnDialogResponse
if(dialogid==hierdeindialog)
{
if(veh_info[playerid][spawned_vehicles]==MAX_VEHICLES_PER_PLAYER)
{
DestroyVehicle(veh_info[playerid][vehID[spawned_vehicles-1]]);
veh_info[playerid][vehID[spawned_vehicles-1]]=CreateVehicle(...deine_daten);
}
else
{
veh_info[playerid][spawned_vehicles]++;
veh_info[playerid][vehID[spawned_vehicles-1]]=CreateVehicle(...deine_daten);
}
}so, das sollte jetzt funktionieren, du kannst mit dem define die maximale anzahl an fahrzeugen bestimmen, die ein spieler spawnen kann.
wählt der spieler dann im dialog ein fahrzeug aus, wird überprüft, ob er es überhaupt noch spawnen darf. wenn ja, wird das fahrzeug erstellt, wenn nein, wird das zuletzt erstellte fahrzeug zerstört und das neue dann erstellt. -
#define MAX_VEHICLES_PER_PLAYER (1) //beliebig editieren...//oben
enum e_veh_info
{
spawned_vehicles,
vehID[MAX_VEHICLES_PER_PLAYER]
};
new veh_info[MAX_PLAYERS][e_veh_info];//OnDialogResponse
if(dialogid==hierdeindialog)
{
if(veh_info[playerid][spawned_vehicles]==MAX_VEHICLES_PER_PLAYER])
{
DestroyVehicle(veh_info[playerid][vehID[random(MAX_VEHICLES_PER_PLAYER]]-1);
veh_info[playerid][vehID[spawned_vehicles]]=CreateVehicle(...deine_daten);
}
else
{
veh_info[playerid][vehID[spawned_vehicles]]=CreateVehicle(...deine_daten);
veh_info[playerid][spawned_vehicles]++;
}
} -
dini_FloatSet(Spielerdatei,"posx",Spieler[playerid][posx]);
dini_FloatSet(Spielerdatei,"posy",Spieler[playerid][posy]);
dini_FloatSet(Spielerdatei,"posz",Spieler[playerid][posz]); -
für dein erstes fs gute arbeit, find ich.
-
und...noch errors?
-
ahja, danke
-
if(strcmp("/sanfierro", cmdtext, true, 10) == 0)
{
if(Spieler[playerid][adminlevel] >= 1)
{
if(!IsPlayerInAnyVehicle(playerid))
{
SetPlayerPos(playerid,-1981.2587,137.4339,27.6875);
SetPlayerFacingAngle(playerid,92.3396);
}
else
{
new vehid=GetPlayerVehicleID(playerid);
SetVehiclePos(vehid,-1981.2587,137.4339,27.6875);
SetVehicleZAngleAngle(vehid,92.3396);
PutPlayerInVehicle(playerid, vehid, 0);
}
return 1;
} -
blöde frage:
wenn es "drawdistance" als parameter gibt, wozu braucht man dan überhaupt noch streamer? -
ob RC5 oder R2 ist egal, sollte so oder so funktionieren.
-
-
update mal auf die neueste sa:mp version.
und es muss heißen: GetPlayerVehicleID. -
falsch?
komischerweise bekommt er seine errors und warnings nur bei den PVar-Funktionen und beim OnVehicleDamageStatusUpdate-Callback.beides wurde mit 0.3a R5 eingeführt.
da ist mein vorschlag doch naheliegend, oder?