Da muss noch eine hin. Entweder davor oder danach, das spielt im Endeffekt keine wirkliche Rolle.
Beiträge von Jeffry
-
-
Ganz unten, nach dem return 1 fehlt noch eine Klammer zu.
} -
Variante 1, da du keine andauernde CPU Last durch X Timer hast, sondern nur einen Timer. Die Variable wird ohnehin für jeden Spieler irgendwann hochgesetzt, nur hast du so nur einen Timer.
-
Oder?
Korrekt. -
4+random(8)
-
Du hattest keine Abfrage in der Schleife, ob der Blitzer bereits existiert.
Versuche es so:
ocmd:blitzer(playerid,params[])
{
new str[128],name[MAX_PLAYER_NAME],geschw,strafe,Float:x,Float:y,Float:z,Float:a,Datei[64];
if(IsPlayerConnected(playerid))
if(GetPVarInt(playerid,"loggedin") == 0)return SendClientMessage(playerid,Grau,"Bitte logge dich zuerst ein.");
if(IsPlayerFraktRang(playerid, 7, 1))
{
if(sscanf(params,"dd",geschw,strafe))return SendClientMessage(playerid,Grau,"Benutze: /blitzer [Geschw.] [Strafe/Kmh]");
if(IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid,Grau,"Du darfst nicht in einem Fahrzeug sitzen.");
if(IsPlayerInRangeOfPoint(playerid,60.0,Blitzer[i][xpos],Blitzer[i][ypos],Blitzer[i][zpos]))return SendClientMessage(playerid,Grau,"In der Nähe steht bereits ein Blitzer.");
if(geschw < 40 || geschw > 160)return SendClientMessage(playerid,Grau,"Die Geschwindigkeit darf min. 40Km/h und max. 160Km/h betragen.");
if(strafe < 2 || strafe > 20)return SendClientMessage(playerid,Grau,"Die Geldstrafe pro Km/h muss zwischen 2$ und 20$ liegen.");
for(new i; i < MAX_BLITZER; i++)
{
if(Blitzer[i][Strafe] != 0) continue;
format(Datei,sizeof(Datei),"/Blitzer/%d.txt",i);
dini_Create(Datei);
GetPlayerPos(playerid,x,y,z);
GetPlayerName(playerid,name,sizeof(name));
GetPlayerFacingAngle(playerid,a);
Blitzer[i][xpos] = x;
Blitzer[i][ypos] = y;
Blitzer[i][zpos] = z;
Blitzer[i][apos] = a;
Blitzer[i][Geschw] = geschw;
Blitzer[i][Radius] = 30;
Blitzer[i][Strafe] = strafe;
Blitzer[i][ID] = i;
CreateObject(18880,x+1.0,y+1.0,z-2.0,0.0,0.0,a,400);
SendClientMessage(playerid,Grün,"Du hast erfolgreich einen Blitzer aufgestellt.");
format(str,sizeof(str),"%s hat einen Blitzer erstellt. (%.2f,%.2f,%.2f)",name,x,y,z);
printf("%s",str);
SaveBlitzer();
return 1;
}
}
return 1;
} -
So sieht es auf jeden Fall besser aus.
Versuche es dann so:
public Sekunde()
{
for(new i=0; i<sizeof vInfo; i++)
{
new engine,lights,alarm,doors,bonnet,boot,objective;
GetVehicleParamsEx(vInfo[i][v_id_x],engine,lights,alarm,doors,bonnet,boot,objective);
if(engine!=1)continue;
printf("Auto %i Tank %i",vInfo[i][v_id_x],vInfo[i][v_tank]);
print("Motor ist an!");
vInfo[i][v_tank]=vInfo[i][v_tank]-VEHICLE_TANK_ABZUG;
printf("0.2L wurden abgezogen Jetzt: %f",vInfo[i][v_tank]);
for(new pi=0; pi<MAX_PLAYERS; pi++)
{
if(GetPlayerVehicleID(pi) != vInfo[i][v_id_x] || GetPlayerState(playerid) != PLAYER_STATE_DRIVER)continue;
print("Spieler gefunden!");
new string[164];
if(vInfo[i][v_tank]<=0)
{
engine=0;
SetVehicleParamsEx(vInfo[i][v_id_x],engine,lights,alarm,doors,bonnet,boot,objective);
SendClientMessage(pi,rot," Der Tank ist Leer!");
break;
}
if(GetVehicleModel(vInfo[i][v_id_x])==462)
{
vInfo[i][v_tank]=100.0;
format(string,sizeof string,"Tank: %iL",floatround(vInfo[i][v_tank]));
PlayerTextDrawSetString(pi,Tacho_Fuel[pi],string);
break;
}
if(vInfo[i][v_vehicleid]==462)
{
vInfo[i][v_tank]=100.0;
format(string,sizeof string,"Tank: %iL",floatround(vInfo[i][v_tank]));
PlayerTextDrawSetString(pi,Tacho_Fuel[pi],string);
break;
}
if(GetPlayerVehicleSeat(pi)==0)
{
print("fahrer gefunden");
format(string,sizeof string,"Tank: %iL",floatround(vInfo[i][v_tank]));
PlayerTextDrawSetString(pi,Tacho_Fuel[pi],string);
print("Anzeige aktualisiert!");
if(vInfo[i][v_tank]<=0)
{
SendClientMessage(pi,rot,"Dein Tank ist leer!");
engine=0;
SetVehicleParamsEx(vInfo[i][v_id_x],engine,lights,alarm,doors,bonnet,boot,objective);
}
}
}
}
return 1;
} -
Gegenfrage:
Hat es einen bestimmten Grund, warum du ein extra Array für den Tank machst?Meiner Meinung nach wäre es wesentlich sinnvoller den Tank so zu nutzen:
vInfo[i][v_tank]
Ohne ein extra Array. Das würde einen Haufen Arbeit sparen. -
Spoiler anzeigen if(strcmp(cmd, "/arrest", true) == 0)
{
if(IsPlayerConnected(playerid))
{
if(gTeam[playerid] == 2 || IsACop(playerid) || PlayerInfo[playerid][pMember] == 12 || PlayerInfo[playerid][pLeader] == 12 || PlayerInfo[playerid][pMember] == 2 || PlayerInfo[playerid][pLeader] == 2 || PlayerInfo[playerid][pMember] == 3 || PlayerInfo[playerid][pLeader] == 3)
{
if(OnDuty[playerid] != 1 && PlayerInfo[playerid][pMember] == 1)
{
SendClientMessage(playerid, COLOR_GREY, " Du bist nicht im Dienst!");
return 1;
}
if(IsPlayerInRangeOfPoint(playerid,6.0,-1589.8398,715.9842,-5.2422) || IsPlayerInRangeOfPoint(playerid,3.0,215.6246,113.8847,999.0156) || IsPlayerInRangeOfPoint(playerid,3.0,1564.6660,-1694.4382,5.8906))
{
// Jail spot
new suspect = GetClosestPlayer(playerid);
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /arrest (ID / Name)");
return 1;
}
if(IsACop(suspect))
{
SendClientMessage(playerid, COLOR_GRAD2, " Du kannst keinen Beamten einsperren!");
return 1;
}
if(IsPlayerConnected(suspect))
{
if(GetDistanceBetweenPlayers(playerid,suspect) < 5)
{
GetPlayerName(suspect, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
if(WantedLevel[suspect] < 1)
{
SendClientMessage(playerid, COLOR_GREY, " Der Spieler ist nicht gesucht!");
return 1;
}
GivePlayerMoney(suspect,-WantedLevel[suspect]*750);
GivePlayerMoney(playerid,WantedLevel[suspect]*750);
PlayerInfo[playerid][pGehalt] += WantedLevel[suspect]*2000;
ResetPlayerWeapons(suspect);
if(PlayerInfo[playerid][pMember]==1||PlayerInfo[playerid][pLeader]==1)
{
format(string, sizeof(string), "INFO: Officer %s hat den Verbrecher %s eingesperrt", SpielerName(playerid), SpielerName(suspect));
OOCNews(COLOR_RED, string);
}
else if(PlayerInfo[playerid][pMember]==2||PlayerInfo[playerid][pLeader]==2)
{
format(string, sizeof(string), "INFO: Agent %s hat den Verbrecher %s eingesperrt", SpielerName(playerid), SpielerName(suspect));
OOCNews(COLOR_RED, string);
}
else if(PlayerInfo[playerid][pMember]==3||PlayerInfo[playerid][pLeader]==3)
{
format(string, sizeof(string), "INFO: Soldat %s hat den Verbrecher %s eingesperrt", SpielerName(playerid), SpielerName(suspect));
OOCNews(COLOR_RED, string);
}
else if(PlayerInfo[playerid][pMember]==22||PlayerInfo[playerid][pLeader]==22)
{
format(string, sizeof(string), "INFO: SWAT Agent %s hat den Verbrecher %s eingesperrt", SpielerName(playerid), SpielerName(suspect));
OOCNews(COLOR_RED, string);
}
if(PlayerInfo[playerid][pMember]==FBI_MEMBER) //====== FBI_MEMBER mit der Member ID von FBI ersetzen, oder wie auch immer du abfragst, ob der Spieler FBI ist.
{
//Hier die Positionen für die Zelle(n) in SF eintragen, gleich wie unten bei den LSPDZellen.
}
else
{
if(LSPDZellen == 0)//zelle1
{
SetPlayerInterior(playerid, 0);
UnFreezePlayer(playerid);
PlayerCuffed[playerid] = 0;
SetPlayerPos(playerid,227.3844,111.5490,999);
LSPDZellen += 1;
}
if(LSPDZellen == 1)//zelle2
{
SetPlayerInterior(playerid, 0);
UnFreezePlayer(playerid);
PlayerCuffed[playerid] = 0;
SetPlayerPos(playerid,223.5090,111.4179,999);
LSPDZellen += 1;
}
if(LSPDZellen == 2)//zelle3
{
SetPlayerInterior(playerid, 0);
UnFreezePlayer(playerid);
PlayerCuffed[playerid] = 0;
SetPlayerPos(playerid,219.5361,111.3571,999);
LSPDZellen += 1;
}
if(LSPDZellen == 3)//Zelle4
{
SetPlayerInterior(playerid, 0);
UnFreezePlayer(playerid);
PlayerCuffed[playerid] = 0;
SetPlayerPos(playerid,215.5814,111.1412,999);
LSPDZellen += 1;
}
}
PlayerInfo[suspect][pJailTime] = WantedLevel[suspect] * 240;
new spr[100];
format(spr,sizeof(spr),"Du wurdest für %d Minuten und einer Geldstrafe von %d$ eingesperrt",WantedLevel[suspect] * 4,WantedLevel[suspect] * 2000);
SendClientMessage(playerid,COLOR_LIGHTBLUE,spr);
PlayerInfo[suspect][pJailed] = 1;
PlayerInfo[suspect][pArrested] += 1;
SetPlayerInterior(suspect, 6);
SetPlayerFree(suspect,playerid, "Verhaftet");
WantedPoints[suspect] = 0;
WantedLevel[suspect] = 0;
SetPlayerWantedLevel(suspect,0);
}
//distance
}
}
else
{
SendClientMessage(playerid, COLOR_GREY, " Niemand zum Verhaften in deiner Nähe.");
return 1;
}
}
else
{
SendClientMessage(playerid, COLOR_GREY, " Du bist kein Beamter !");
return 1;
}
}
//not connected
return 1;
}
Beachte Zeile 62 und 64.
-
Du bist da mit dem Index und der vehicle ID durcheinander gekommen.
Außerdem sind die Tank-Schleifen immer bis ans Ende gelaufen.Versuche es so:
SaveCars()
{
for(new i=0; i<sizeof(vInfo); i++)
{
if(vInfo[i][v_id_x]==0)continue;
new string[64];
format(string,sizeof string,"/autos/car %i.txt",vInfo[i][v_db_id]);
new color1,color2;
for(new io=0; io<sizeof VEHICLE_TANK; io++)
{
if(VEHICLE_TANK[io][td_vehicle_id] != vInfo[i][v_id_x]) continue;
dini_FloatSet(string,"Tank",VEHICLE_TANK[io][td_tank]);
break;
}
GetVehicleColor(vInfo[i][v_id_x], color1,color2);
vInfo[i][v_color_1]=color1;
vInfo[i][v_color_2]=color2;
vInfo[i][v_spoiler]=GetVehicleComponentInSlot(vInfo[i][v_id_x],0);
vInfo[i][v_hood]=GetVehicleComponentInSlot(vInfo[i][v_id_x],1);
vInfo[i][v_roof]=GetVehicleComponentInSlot(vInfo[i][v_id_x],2);
vInfo[i][v_sideskirt]=GetVehicleComponentInSlot(vInfo[i][v_id_x],3);
vInfo[i][v_lamps]=GetVehicleComponentInSlot(vInfo[i][v_id_x],4);
vInfo[i][v_nitro]=GetVehicleComponentInSlot(vInfo[i][v_id_x],5);
vInfo[i][v_exhaust]=GetVehicleComponentInSlot(vInfo[i][v_id_x],6);
vInfo[i][v_wheels]=GetVehicleComponentInSlot(vInfo[i][v_id_x],7);
vInfo[i][v_stereo]=GetVehicleComponentInSlot(vInfo[i][v_id_x],8);
vInfo[i][v_hydraulics]=GetVehicleComponentInSlot(vInfo[i][v_id_x],9);
vInfo[i][v_front_bumper]=GetVehicleComponentInSlot(vInfo[i][v_id_x],10);
vInfo[i][v_rear_bumper]=GetVehicleComponentInSlot(vInfo[i][v_id_x],11);
vInfo[i][v_vent_left]=GetVehicleComponentInSlot(vInfo[i][v_id_x],12);
vInfo[i][v_vent_right]=GetVehicleComponentInSlot(vInfo[i][v_id_x],13);
ChangeVehiclePaintjob(vInfo[i][v_id_x],vInfo[i][v_paintjob]);
dini_IntSet(string,"Color_1",vInfo[i][v_color_1]);
dini_IntSet(string,"Color_2",vInfo[i][v_color_2]);
dini_IntSet(string,"v_spoiler",vInfo[i][v_spoiler]);
dini_IntSet(string,"v_hood",vInfo[i][v_hood]);
dini_IntSet(string,"v_roof",vInfo[i][v_roof]);
dini_IntSet(string,"v_sideskirt",vInfo[i][v_sideskirt]);
dini_IntSet(string,"v_lamps",vInfo[i][v_lamps]);
dini_IntSet(string,"v_nitro",vInfo[i][v_nitro]);
dini_IntSet(string,"v_exhaust",vInfo[i][v_exhaust]);
dini_IntSet(string,"v_wheels",vInfo[i][v_wheels]);
dini_IntSet(string,"v_stereo",vInfo[i][v_stereo]);
dini_IntSet(string,"v_hydraulics",vInfo[i][v_hydraulics]);
dini_IntSet(string,"v_front_bumper",vInfo[i][v_front_bumper]);
dini_IntSet(string,"v_rear_bumper",vInfo[i][v_rear_bumper]);
dini_IntSet(string,"v_vent_left",vInfo[i][v_vent_left]);
dini_IntSet(string,"v_vent_right",vInfo[i][v_vent_right]);
dini_IntSet(string,"v_paintjob",vInfo[i][v_paintjob]);
}
return 1;
}public Sekunde()
{
for(new i=0; i<sizeof vInfo; i++)
{
new engine,lights,alarm,doors,bonnet,boot,objective;
GetVehicleParamsEx(i,engine,lights,alarm,doors,bonnet,boot,objective);
if(engine==0)continue;
new tID;
for(new ipp=0; ipp<sizeof VEHICLE_TANK; ipp++)
{
if(VEHICLE_TANK[ipp][td_vehicle_id] != vInfo[i][v_id_x]) continue;
tID=ipp;
break;
}
printf("Auto %i Tank %i",i,VEHICLE_TANK[tID][td_tank]);
print("Motor ist an!");
VEHICLE_TANK[tID][td_tank]=VEHICLE_TANK[tID][td_tank]-VEHICLE_TANK_ABZUG;
printf("0.2L wurden abgezogen Jetzt: %f",VEHICLE_TANK[tID][td_tank]);
for(new pi=0; pi<MAX_PLAYERS; pi++)
{
if(!IsPlayerInAnyVehicle(pi))continue;
print("Spieler gefunden!");
if(GetPlayerVehicleID(pi)==VEHICLE_TANK[tID][td_vehicle_id])
{
if(VEHICLE_TANK[tID][td_tank]<=0)
{
engine=0;
SetVehicleParamsEx(i,engine,lights,alarm,doors,bonnet,boot,objective);
SendClientMessage(pi,rot," Der Tank ist Leer!");
break;
}
}
if(GetVehicleModel(i)==462)
{
VEHICLE_TANK[tID][td_tank]=100.0;
new string[164];
format(string,sizeof string,"Tank: %iL",floatround(VEHICLE_TANK[tID][td_tank]));
PlayerTextDrawSetString(pi,Tacho_Fuel[pi],string);
break;
}
if(vInfo[i][v_vehicleid]==462)
{
VEHICLE_TANK[tID][td_tank]=100.0;
new string[164];
format(string,sizeof string,"Tank: %iL",floatround(VEHICLE_TANK[tID][td_tank]));
PlayerTextDrawSetString(pi,Tacho_Fuel[pi],string);
break;
}
new string[164];
if(GetPlayerVehicleSeat(pi)==0)
{
print("fahrer gefunden");
format(string,sizeof string,"Tank: %iL",floatround(VEHICLE_TANK[tID][td_tank]));
PlayerTextDrawSetString(pi,Tacho_Fuel[pi],string);
print("Anzeige aktualisiert!");
if(VEHICLE_TANK[tID][td_tank]<=0)
{
SendClientMessage(pi,rot,"Dein Tank ist leer!");
engine=0;
SetVehicleParamsEx(i,engine,lights,alarm,doors,bonnet,boot,objective);
}
}
}
}
return 1;
} -
Poste den Code bitte richtig.
Der Pawn BB Code - Die richtige AnwendungNutze den Reiter Quellcode über der Schriftart anstatt dem Editor.
-
Nein. Zeile 61 - 92 in obigem Code damit ersetzen und den Abschnitt nach
if(PlayerInfo[playerid][pMember]==FBI_MEMBER)
natürlich mit den neuen SF Positionen ausfüllen. -
Was meinst du?
-
Was steht so im Server Log?
//Timer Funktion
forward DownstateTimer(playerid);
public DownstateTimer(playerid)
{
printf("Timer aufgerufen: %d | %d | %d", playerid, Downstate_Counter[playerid], Downstate_Timer[playerid]);
Downstate_Counter[playerid]++;
if(Downstate_Counter[playerid] == 4)
{
printf("4");
Downstate_Counter[playerid] = 0;
new Float:a;
GetPlayerArmour(playerid, a);
printf("a: %f", a);
if(0.0 < a < 100.0)
{
SetPlayerArmour(playerid, a - 1.0);
}
if(a == 100.0)
{
printf("a == 100.0");
KillTimer(Downstate_Timer[playerid]);
Downstate_Timer[playerid] = -1;
Condition[playerid] = CONDITION_ALIVE;
Downstate_Counter[playerid] = 0;
ClearAnimations(playerid);
SetPlayerHealth(playerid, 30);
SetPlayerArmour(playerid, 0);
//TO DO: Hide all textdraws from the downstate
}
if(a <= 0.0)
{
printf("a <= 0.0");
KillTimer(Downstate_Timer[playerid]);
Downstate_Timer[playerid] = -1;
Condition[playerid] = CONDITION_DEAD;
Downstate_Counter[playerid] = 0;
ApplyAnimation(playerid, "CRACK", "crckdeth1", 4.1, false, true, true, true, 24*60000, true);
//TO DO: Offer Respawn Hotkey
PlayerTextDrawHide(playerid, TD_Downstate[playerid][0]); //Downstate
PlayerTextDrawHide(playerid, TD_Downstate[playerid][1]); //WeaponCoverBox
PlayerTextDrawHide(playerid, TD_Downstate[playerid][2]); //Infobox
PlayerTextDrawHide(playerid, TD_Downstate[playerid][3]); //HealthCoverBox
PlayerTextDrawHide(playerid, TD_Downstate[playerid][4]); //Indicator arrow
PlayerTextDrawHide(playerid, TD_Downstate[playerid][5]); //Stop the bleeding
PlayerTextDrawHide(playerid, TD_Downstate[playerid][6]); //Cry for help
PlayerTextDrawHide(playerid, TD_Downstate[playerid][7]); //Last strength
PlayerTextDrawHide(playerid, TD_Downstate[playerid][8]); //Medicine
PlayerTextDrawHide(playerid, TD_Downstate[playerid][9]); //Up and down arrow of main circle
PlayerTextDrawHide(playerid, TD_Downstate[playerid][10]); //Left and right arrow of main circle
PlayerTextDrawHide(playerid, TD_Downstate[playerid][11]); //Medicine drop down menu
PlayerTextDrawHide(playerid, TD_Downstate[playerid][12]); //Close box info
//TO DO: Hide downstate action textdraws and infobox (when respawned, hide all downstate textdraws)
}
}
printf("Fertig.");
return 1;
} -
Nein, hier, so:
if(PlayerInfo[playerid][pMember]==FBI_MEMBER)
{
}
else
{
if(LSPDZellen == 0)//zelle1
{
SetPlayerInterior(playerid, 0);
UnFreezePlayer(playerid);
PlayerCuffed[playerid] = 0;
SetPlayerPos(playerid,227.3844,111.5490,999);
LSPDZellen += 1;
}
if(LSPDZellen == 1)//zelle2
{
SetPlayerInterior(playerid, 0);
UnFreezePlayer(playerid);
PlayerCuffed[playerid] = 0;
SetPlayerPos(playerid,223.5090,111.4179,999);
LSPDZellen += 1;
}
if(LSPDZellen == 2)//zelle3
{
SetPlayerInterior(playerid, 0);
UnFreezePlayer(playerid);
PlayerCuffed[playerid] = 0;
SetPlayerPos(playerid,219.5361,111.3571,999);
LSPDZellen += 1;
}
if(LSPDZellen == 3)//Zelle4
{
SetPlayerInterior(playerid, 0);
UnFreezePlayer(playerid);
PlayerCuffed[playerid] = 0;
SetPlayerPos(playerid,215.5814,111.1412,999);
LSPDZellen += 1;
}
} -
Machs mal so:
new Downstate_Timer[MAX_PLAYERS] = {-1,...};//Unter OnPlayerSpawn
if(Downstate_Timer[playerid] != -1) KillTimer(Downstate_Timer[playerid]);
Downstate_Timer[playerid] = SetTimerEx("DownstateTimer", 250, true, "i", playerid);Im Timer:
KillTimer(Downstate_Timer[playerid]);
Downstate_Timer[playerid] = -1; -
Aktualisiere dein Crashdetect Plugin.
http://forum.sa-mp.com/showthread.php?t=262796 -
Kommt das nur einmal oder ganz oft?
-
Bist du möglicherweise mal gespawnt, bevor der Timer gekillt wurde bzw. werden sollte?
-
Du fragst ab ob playerid ein FBI'ler ist, wenn ja, dann SetPlayerPos von suspect nach SF, ansonsten (else) nach LS.