Das sind zu wenig Informationen.
Du musst mysql_log auf LOG_ALL stellen, das printet zur Zeit nur die Errors.
Versuche es aber vorerst mal so:
db_handle = mysql_connect(mysql_host,mysql_user,mysql_data,mysql_pass);
Das sind zu wenig Informationen.
Du musst mysql_log auf LOG_ALL stellen, das printet zur Zeit nur die Errors.
Versuche es aber vorerst mal so:
db_handle = mysql_connect(mysql_host,mysql_user,mysql_data,mysql_pass);
if(strcmp(cmd,"/rac",true) == 0)
{
if(sDatei[playerid][pAdmin] >= 4)
{
for(new v=0; v<MAX_VEHICLES; v++)
{
if(!IsPlayerInVehicle(playerid,v))
{
SetVehicleToRespawn(v);
}
}
SetTimer("SetAllFrakVehiclesAngle",1000,false);
}
else SendClientMessage(playerid,COLOR_GRAU," Fehler: Du bist kein Admin!");
return 1;
}
forward SetAllFrakVehiclesAngle();
public SetAllFrakVehiclesAngle()
{
for(new i = 0; i < sizeof(LSPDcar); i++)
{
if(LSPDcar[i])
{
new bool:inside;
for(new p=0; p<MAX_PLAYERS; p++) if(IsPlayerInVehicle(p, LSPDcar[i])) inside = true;
if(!inside) SetVehicleZAngle(LSPDcar[i],Fraktautos[i][1][fposa]);
}
}
return 1;
}
Schreibe es mal so.
Nimm den "root" Benutzer ohne Passwort.
#define MYSQL_HOST "localhost"
#define MYSQL_USER "root"
#define MYSQL_PASS ""
#define MYSQL_DATA "DATENBANKNAME"
Das ist in 99% aller Fälle standardmäßig so eingestellt.
Dein user "samp" wird nicht die richtigen Berechtigungen haben, das ist auf localhost (dein Rechner) so eingestellt, standardmäßig zumindest.
Deshalb benutze, wie ich oben geschrieben habe, den root - User ohne Passwort, der hat ALLE Berechtigungen. Dem kannst du später auch, je nach Client, ein Passwort geben.
Falls das nicht klappt, poste bitte den Log der gespeichert wird, wenn du die Verbindung aufbaust.
Hmm, das sieht nicht gerade funktionsfähig aus.
Poste bitte mal den Code mit dem du deine Fraktionsfahrzeuge erstellst und speicherst, dann mache ich dir das später kurz.
Dann poste doch mal den Code.
mal angenommen, ich würde nen Timer benutzen.. wie erstell ich den am besten? ich versuchs grad mit 750 Milliseconds, aber es kommt glaube kein effekt.
wiegesagt, es geht ja um die ZAngle.
Kannst es ja mal noch höher setzen, dann neben das Auto laufen und warten bis der Timer aufgerufen wird (lass dir eine Nachricht ausgeben).
Falls es nicht klappt, steige mal ein und teste dann ob es geht.
=> Wenn ja: Dann kannst das mit dem Timer vergessen, da die Funktion dann nicht aufgerufen werden kann, wenn kein Spieler im Auto war, nach dem Respawn.
Ich würde dir trotzdem raten, es einfach mit den paar Funktionen zu machen, und auf SetVehicleToRespawn zu verzichten, gibt weniger Fehler und schont die CPU.
Da kürzlich in einem Thread angesprochen, hier einen für alle User funktionsfähigen "Mixer".
stock MixString(string[]) //©Jeffry
{
new mixed[256], len = strlen(string), rand;
for(new i=0; i<len; i++)
{
rand = random(len-i);
mixed[i] = string[rand];
strdel(string, rand, rand+1);
}
return mixed;
}
Beispiel zur Nutzung:
ZitatSpoiler anzeigen [13/10/2014 19:33:22] hlaobizfyptqjdkgnrxvcmmesu
[13/10/2014 19:33:22] cugdfkjpanmhrzeoivmtsxbyql
[13/10/2014 19:33:22] drftmqoixklhzsbuanjmgyecpv
[13/10/2014 19:33:22] gfkusdpryaneojbmqzmiclhxtv
[13/10/2014 19:33:22] ckpyidtnvfrahejzmlgxmqbsou
Keywords: MixString, StringMix, Mixer, durcheinander, mischen, mix, random, zufällige Reihenfolge, Buchstabensalat.
So habe ich dir den Code aber nicht gegeben. ![]()
forward CheckGas();
public CheckGas()
{
for(new i=0; i<MAX_PLAYERS; i++)
{
if(IsPlayerNPC(i)) continue;
new veh = GetPlayerVehicleID(i), string[32];
if(veh)
{
new Float:ST[4];
GetVehicleVelocity(veh,ST[0],ST[1],ST[2]);
ST[3] = floatsqroot(floatpower(floatabs(ST[0]), 2.0) + floatpower(floatabs(ST[1]), 2.0) + floatpower(floatabs(ST[2]), 2.0)) / 1000.0;
Kilometer[veh] += ST[3];
format(string, sizeof string, "Kilometer: %d Km", floatround(Kilometer[veh]));
TextDrawSetString(Tacho7[i],string);
}
}
new engine,lights,alarm,doors,bonnet,boot,objective;
for(new i=0; i<MAX_VEHICLES; i++)
{
GetVehicleParamsEx(veh,engine,lights,alarm,doors,bonnet,boot,objective);
if(engine)
{
if(!MotorSystemMotor[veh]) continue;
Gas[i]--;
if(Gas[veh] <= 0)
{
new engine,lights,alarm,doors,bonnet,boot,objective;
GetVehicleParamsEx(veh,engine,lights,alarm,doors,bonnet,boot,objective);
SetVehicleParamsEx(veh,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
MotorSystemMotor[veh] = false;
for(new p=0; p<MAX_PLAYERS; p++) if(GetPlayerVehicleID(p) == veh) SendClientMessage(p, COLOR_YELLOW, "Boardcomputer: Tank leer, der Motor ist abgestorben.");
}
}
}
return 1;
}
Hast du bei OnGameModeInit das hier hingesetzt:
SetTimer("CheckGas", 1000, 1);
Wenn ja, poste dein CheckGas, wie es jetzt ist.
Ich hoffe, dort hast du das Tacho7 nicht entfernt.
Das Zeug hier:
Fahrzeug[VID][Meter]
Du berechnest die Strecke doch jetzt in "Kilometer[veh]".
Entferne einfach alles was mit "Tacho7" in "SekundenTimer6" zu tun hat. Du hast ja den neuen Timer von mir.
Aktueller Code (falls noch nicht gesehen: Tacho Kilometer Stand Problem)
Hier zeigt er mir error 017: undefined symbol "dialogid" an, da "dialogid" in UpdateUtemInDialog ja nicht definiert ist.
COMMAND:dm1(playerid, params[])
{
new Random = random(sizeof(RandomSpawnsDM1)),
pName[MAX_PLAYER_NAME],
stringDE[128],
stringEN[128];
GetPlayerName(playerid, pName, sizeof(pName));
format(stringDE, sizeof(stringDE), "»DEATHMATCH« {%06x}%s "#C_DM_E"hat das DM1 betreten! [/DM1]", GetPlayerColor(playerid) >>> 8, pName);
format(stringEN, sizeof(stringEN), "»DEATHMATCH« {%06x}%s "#C_DM_E"has joined DM1! [/DM1]", GetPlayerColor(playerid) >>> 8, pName);
AddToDM(playerid, stringDE, stringEN, RandomSpawnsDM1[Random][0], RandomSpawnsDM1[Random][1], RandomSpawnsDM1[Random][2], RandomSpawnsDM1[Random][3], DESERT_EAGLE, 5000, SHOTGUN, 5000, SNIPER_RIFLE, 5000, 0, 0, 1, 0);
DM1_Counter++;
new olditem[128],
newitem[128];
format(olditem, sizeof(olditem), GetItemFromDialog(U_DIALOG_DM_DE, 0)); //DM ID 1 = Listitem 0
format(newitem, sizeof(newitem), "[%d] DM1 [Sniper, Desert Eagle, Shotgun]", DM1_Counter);
UpdateItemInDialog(U_DIALOG_DM_DE, olditem, newitem);
format(olditem, sizeof(olditem), GetItemFromDialog(U_DIALOG_DM_EN, 0));
format(newitem, sizeof(newitem), "[%d] DM1 [Sniper, Desert Eagle, Shotgun]", DM1_Counter);
UpdateItemInDialog(U_DIALOG_DM_EN, olditem, newitem);
return 1;
}
Du musst das alte Zeug mit der [Meter] Variable natürlich weg machen, das überschreibt dir ja den neuen Code.
format(string3,sizeof(string3),"~r~KM:~g~ %i.%i",Fahrzeug[VID][Meter]/1000,Fahrzeug[VID][Meter]00);
Nimm den Tacho7 komplett aus dem anderen Timer raus.
Schau dir nochmal meinen Code oben an, ich habe dort nochmal etwas geändert, während du mich zitiert hast.
Was machst du, wenn ein Spieler nicht in einem Auto sitzt und der Motor an ist?
Heutige Autos gehen im Stand ja eigentlich aus, selbst an der Ampel.
Dann eben so:
forward CheckGas();
public CheckGas()
{
for(new i=0; i<MAX_PLAYERS; i++)
{
if(IsPlayerNPC(i)) continue;
new veh = GetPlayerVehicleID(i), string[32];
if(veh)
{
new Float:ST[4];
GetVehicleVelocity(veh,ST[0],ST[1],ST[2]);
ST[3] = floatsqroot(floatpower(floatabs(ST[0]), 2.0) + floatpower(floatabs(ST[1]), 2.0) + floatpower(floatabs(ST[2]), 2.0)) / 1000.0;
Kilometer[veh] += ST[3];
format(string, sizeof string, "Kilometer: %d Km", floatround(Kilometer[veh]));
TextDrawSetString(Tacho7[playerid],string);
}
}
new engine,lights,alarm,doors,bonnet,boot,objective;
for(new i=0; i<MAX_VEHICLES; i++)
{
GetVehicleParamsEx(veh,engine,lights,alarm,doors,bonnet,boot,objective);
if(engine)
{
if(!MotorSystemMotor[veh]) continue;
Gas[i]--;
if(Gas[veh] <= 0)
{
new engine,lights,alarm,doors,bonnet,boot,objective;
GetVehicleParamsEx(veh,engine,lights,alarm,doors,bonnet,boot,objective);
SetVehicleParamsEx(veh,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
MotorSystemMotor[veh] = false;
for(new p=0; p<MAX_PLAYERS; p++) if(GetPlayerVehicleID(p) == veh) SendClientMessage(p, COLOR_YELLOW, "Boardcomputer: Tank leer, der Motor ist abgestorben.");
}
}
}
return 1;
}
Corvus:
Ich habe den Code getestet, der funktioniert.
Hast du Kilometer als Integer definiert? Poste mal alles von dem Code.
enum vehEnum {
id,
besitzer,
erlaubnis[10]
};
new Fahrzeuge[100][vehEnum];
OnPlayerEnterVehicle:
new allowed;
for(new v=0; v<100; v++)
{
if(vehicleid == Fahrzeuge[v][id])
{
for(new i=0; i<10; i++)
{
if(Fahrzeuge[v][erlaubnis][i] == SpielerInfo[playerid][DB_ID])
{
//darf einsteigen.
allowed = 1;
}
}
}
}
if(!allowed)
{
//Spieler darf nicht einsteigen!!
}
Was macht ihr da eigentlich??
Eine Schleife durch alle Fahrzeuge ist doch total sinnlos.
new Float:Kilometer[MAX_VEHICLES];
OnGameModeInit:
SetTimer("CheckGas", 1000, 1);
forward CheckGas();
public CheckGas()
{
for(new i=0; i<MAX_PLAYERS; i++)
{
if(IsPlayerNPC(i)) continue;
new veh = GetPlayerVehicleID(i), string[32];
if(veh)
{
if(!MotorSystemMotor[veh]) continue;
if(Gas[veh] <= 0)
{
new engine,lights,alarm,doors,bonnet,boot,objective;
GetVehicleParamsEx(veh,engine,lights,alarm,doors,bonnet,boot,objective);
SetVehicleParamsEx(veh,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
MotorSystemMotor[veh] = false;
continue;
}
new Float:ST[4];
GetVehicleVelocity(veh,ST[0],ST[1],ST[2]);
ST[3] = floatsqroot(floatpower(floatabs(ST[0]), 2.0) + floatpower(floatabs(ST[1]), 2.0) + floatpower(floatabs(ST[2]), 2.0)) / 1000.0;
Kilometer[veh] += ST[3];
//if(IsAPlane(veh) || IsABoat(veh) || IsAFahrrad(veh)) Gas[veh] += 2; //Das hier macht keinen Sinn!! Der Tank wird immer mehr dadurch.
Gas[veh]--; // TANK
format(string, sizeof string, "Kilometer: %d Km", floatround(Kilometer[veh]));
TextDrawSetString(Tacho7[playerid],string);
if(Gas[veh] <= 0) SendClientMessage(i, COLOR_YELLOW, "Boardcomputer: Tank leer, der Motor ist abgestorben.");
}
}
return 1;
}
Es gibt dutzende Tutorials dazu. Hier ein Beispiel:
[ SCRIPTING ] Mysql - Ressourcenschonendes Login/Register System + Automatic Table|| R5 BlueG
if(adminduty[playerid] == 1)
Außer du setzt es auf 0 wenn er aduty ist, aber das macht ja keinen Sinn.
PutPlayerInVehicle(person, playerVehicle, 3);
zu:
if(GetVehicleModelSeats(GetVehicleModel(playerVehicle)) == 2)
{
PutPlayerInVehicle(person, playerVehicle, 1);
}
else
{
PutPlayerInVehicle(person, playerVehicle, 3);
}
Du brauchst dafür dieses Include:
http://forum.sa-mp.com/showthread.php?t=486060
So wie du if Abfrage oben ist, kannst du ja auch abfangen, ob das Fahrzeug nur einen Sitzplatz hat, und dann eine Nachricht ausgeben, dass man mit diesem Fahrzeug keinen Spieler grabben kann.
if(PlayerCuffed[giveplayerid] != 1)
{
SendClientMessage(playerid, COLOR_GREY, "Der Spieler muss getazert sein!");
return 1;
}
zu:
if(PlayerCuffed[giveplayerid] != 1 && (GetPlayerState(giveplayerid) != PLAYER_STATE_PASSENGER || GetPlayerVehicleID(playerid) != GetPlayerVehicleID(giveplayerid)))
{
SendClientMessage(playerid, COLOR_GREY, "Der Spieler muss getazert sein, oder in deinem Fahrzeug sitzen!");
return 1;
}
Dieser Teil muss in den Befehl mit dem der Spieler in das DM beitritt. Du hast doch sicher einen Befehl der irgendwie so aussieht:
/dm [id]
Die id die du dann eingibst wäre die, die in den switch muss. Ansonsten poste mal den Befehl mit dem du einem DM beitrittst.