name(killerid)),Kicks(killerid);
Zu
name(killerid),Kicks(killerid) );
Klammer falsch gesetzt.
name(killerid)),Kicks(killerid);
Zu
name(killerid),Kicks(killerid) );
Klammer falsch gesetzt.
Auf Anfrage in PN:
Wenn ich dich richtig verstanden habe, dann meinst du es so?
stock Tutorial(playerid)
{
ClearChatForPlayer(playerid);
TFreeze(playerid);
TStadthalle(playerid);
SetTimerEx("TBank",7500,false,"i",playerid);
SetTimerEx("THospital",15000,false,"i",playerid);
SetTimerEx("TVinewood",22500,false,"i",playerid);
SetTimerEx("TAngelsteg",30000,false,"i",playerid);
ClearChatForPlayer(playerid);
SpawnPlayerEx(playerid);
return 1;
}
Alternativ könntest du auch bei jedem public den nächsten Timer für 7500ms starten, das bleibt dir überlassen.
Also ich weiß jetzt nicht, ob ich das falsch verstanden habe, aber er möchte doch, dass es geht, wenn man AUCH ein Admin ist, nicht UND.
Wenn er NICHT in Fraktion 6 ist UND NICHT Admin ist, dann kann er den Befehl NICHT verwenden.
Das ist das Selbe wie: Wenn er in Fraktion 6 ist ODER Admin ist, dann kann er den Befehl verwenden.
Somit passt das.
Poste den gesamten dazugehörigen Code so wie er jetzt ist.
Post Nr. 11 hast du wohl übersehen: 5 Arrays in ein System ?
Ich hatte es im Spiel, die Eier waren da. (Ok, das klingt merkwürdig )
if(!isPlayerInFrak(playerid,6)||!isAdmin(playerid,1))
zu:
if(!isPlayerInFrak(playerid,6) && !isAdmin(playerid,1))
Ich bin davon ausgegangen, dass du das RandomTexture-enum übernimmst, aber gut:
enum tDATA {
index,
modelid,
txdname[30],
texturename[30],
};
new RandomTexture[][tDATA ] =
{
{0, 8839, "vgsecarshow", "lightred2_32"},
{0, 8839, "vgsecarshow", "lightblue2_32"}
};
new rand;
rand = random(sizeof(RandomTexture));
for(new i=0; i<sizeof(Textur1); i++) SetObjectMaterial(CreateObject(Textur1[i][id],Textur1[i][x],Textur1[i][y],Textur1[i][z],0.0, 0.0, 0.0), RandomTexture[rand][index],RandomTexture[rand][modelid],RandomTexture[rand][txdname],RandomTexture[rand][texturename]);
rand = random(sizeof(RandomTexture));
for(new i=0; i<sizeof(Textur2); i++) SetObjectMaterial(CreateObject(Textur2[i][id],Textur2[i][x],Textur2[i][y],Textur2[i][z],0.0, 0.0, 0.0), RandomTexture[rand][index],RandomTexture[rand][modelid],RandomTexture[rand][txdname],RandomTexture[rand][texturename], 0);
Ich hab dir hinten mal einmal die 0 gelassen, ich weiß ja nicht wie du es mit der Farbe haben willst.
Zu deinem Edit:
Es fehlt natürlich die XYZ-Drehung (die 3x 0.0 in CreateObject). Das musst du zusätzlich noch in das Textur1(-5) Array einbauen, und in das enum.
Ich nehme einfach mal deinen Anfang und führe ihn fort, bei 5 Arrays ist das relativ egal, Hauptsache du verstehst das Prinzip und es tut.
enum texturEnum {
id,
Float:x,
Float:y,
Float:z
}
new Textur1[][texturEnum] ={
{ 19343, 146.07700, 1864.98975, 720.62543 },
{ 19343, 149.28700, 1857.98975, 720.62543 }
//22 weitere
};
new Textur2[][texturEnum] ={
{ 19343, 146.07700, 1864.98975, 720.62543 },
{ 19343, 149.28700, 1857.98975, 720.62543 }
//22 weitere
};
new rand;
//Textur1
rand = random(sizeof(RandomTexture));
for(new i=0; i<sizeof(Textur1); i++) SetObjectMaterial(CreateObject(Textur1[i][id],Textur1[i][x],Textur1[i][y],Textur1[i][z],0.0, 0.0, 0.0), RandomTexture[rand][0],RandomTexture[rand][1],RandomTexture[rand][2],RandomTexture[rand][3], 0);
//Textur2
rand = random(sizeof(RandomTexture));
for(new i=0; i<sizeof(Textur2); i++) SetObjectMaterial(CreateObject(Textur2[i][id],Textur2[i][x],Textur2[i][y],Textur2[i][z],0.0, 0.0, 0.0), RandomTexture[rand][0],RandomTexture[rand][1],RandomTexture[rand][2],RandomTexture[rand][3], 0);
//etc
mann kann auch das Fahrzeug ausstreamen via SetVehicleVirtualWorld
und danach wieder einstreamen
Macht hier aber nicht wirklich Sinn, da das Auto ja am Respawn steht.
Man könnte es auch so machen, das ist in dem Fall noch etwas besser:
SetVehicleNumberPlate((vehicle[playerid] = CreateVehicle(vID,X,Y,Z,ROTA,-1,-1,0)), "Admincar");
Dann spart man sich das einstreamen.
Mir ist kein Editor bekannt, mit dem man Labels an Autos setzen kann, das wirst du manuell testen müssen, oder du schreibst dir einen Editor, so habe ich es seinerzeit mit einem Textdraw Editor gemacht.
Oder vielleicht gibt es irgendwo in den Tiefen des englischen Forums einen Editor, spontan habe ich aber keinen gefunden.
Zudem: Belege ID 0 immer mit einem Bot, Frei von Fraktionen usw.
Wieso sollte man das tun? O.o
Das ist absoluter Quatsch, du kannst natürlich jede ID frei nutzen, es muss keine ID durch einen Bot blockiert werden.
Füge vor
if(!IsPlayerConnected(pID))
Diesen Debug ein:
printf("pID:%d, con:%d, params:%s", playerid, IsPlayerConnected(pID), params);
Was wird geprintet wenn du den Befehl eingibst?
Und was genau gibst du ein?
Nach SetVehicleNumberPlate:
SetVehicleToRespawn(vehicle[playerid]);
Dann dürfte es funktionieren.
if(!IsPlayerNameOnline(Name))
zu:
if(IsPlayerNameOnline(Name) != INVALID_PLAYER_ID)
Ja.
Ebenso mit MoveObject (oder MoveDynamicObject wenn du den Streamer verwendest).
Wird der Anhänger erstellt?
Bist du in einem Auto?
EDIT:
MrPawn: Bei mir geht es auch nicht, auch nicht mit einem Timer. Weiß ich leider nicht an was das liegt, sorry. Vielleicht meldet sich jemand bei dem das funktioniert, würde mich auch interessieren. Ich habe die Funktion noch nie benutzt.
@#Reverse: Poste doch mal den Code mit dem du die "IsPlayerNameOnline"-Funktion aufrufst. Es liegt wahrscheinlich an dem Code, und nicht an der Funktion, da ich diese selbst getestet habe.
Lass es mal so laufen und poste dann den Server Log, wenn der Dialog nicht angezeigt wird:
Dies nennt sich Debugging.
public OnPlayerConnect(playerid)
{
printf("OnPlayerConnect started for ID: %d", playerid);
new query[128];
RemoveObjects(playerid);
PrisonText0[playerid] = TextDrawCreate(35.000000, 312.000000, "Du bist derzeit fuer noch");
TextDrawBackgroundColor(PrisonText0[playerid], 255);
TextDrawFont(PrisonText0[playerid], 1);
TextDrawLetterSize(PrisonText0[playerid], 0.400000, 1.000000);
TextDrawColor(PrisonText0[playerid], -16776961);
TextDrawSetOutline(PrisonText0[playerid], 0);
TextDrawSetProportional(PrisonText0[playerid], 1);
TextDrawSetShadow(PrisonText0[playerid], 1);
printf("OPC 1 for ID: %d", playerid);
PrisonText1[playerid] = TextDrawCreate(205.000000, 312.000000, "/ Minuten");
TextDrawBackgroundColor(PrisonText1[playerid], 255);
TextDrawFont(PrisonText1[playerid], 1);
TextDrawLetterSize(PrisonText1[playerid], 0.400000, 1.000000);
TextDrawColor(PrisonText1[playerid], -16776961);
TextDrawSetOutline(PrisonText1[playerid], 0);
TextDrawSetProportional(PrisonText1[playerid], 1);
TextDrawSetShadow(PrisonText1[playerid], 1);
PrisonText2[playerid] = TextDrawCreate(292.000000, 313.000000, "im Prison wegen");
TextDrawBackgroundColor(PrisonText2[playerid], 255);
TextDrawFont(PrisonText2[playerid], 1);
TextDrawLetterSize(PrisonText2[playerid], 0.400000, 1.000000);
TextDrawColor(PrisonText2[playerid], -16776961);
TextDrawSetOutline(PrisonText2[playerid], 0);
TextDrawSetProportional(PrisonText2[playerid], 1);
TextDrawSetShadow(PrisonText2[playerid], 1);
PrisonText3[playerid] = TextDrawCreate(407.000000, 313.000000, "/");
TextDrawBackgroundColor(PrisonText3[playerid], 255);
TextDrawFont(PrisonText3[playerid], 1);
TextDrawLetterSize(PrisonText3[playerid], 0.400000, 1.000000);
TextDrawColor(PrisonText3[playerid], -16776961);
TextDrawSetOutline(PrisonText3[playerid], 0);
TextDrawSetProportional(PrisonText3[playerid], 1);
TextDrawSetShadow(PrisonText3[playerid], 1);
PrisonText4[playerid] = TextDrawCreate(35.000000, 300.000000, "Ausfuehrender Admin:");
TextDrawBackgroundColor(PrisonText4[playerid], 255);
TextDrawFont(PrisonText4[playerid], 1);
TextDrawLetterSize(PrisonText4[playerid], 0.400000, 1.000000);
TextDrawColor(PrisonText4[playerid], -16776961);
TextDrawSetOutline(PrisonText4[playerid], 0);
TextDrawSetProportional(PrisonText4[playerid], 1);
TextDrawSetShadow(PrisonText4[playerid], 1);
printf("OPC 2 for ID: %d", playerid);
PrisonText5[playerid] = TextDrawCreate(185.000000, 300.000000, "/");
TextDrawBackgroundColor(PrisonText5[playerid], 255);
TextDrawFont(PrisonText5[playerid], 1);
TextDrawLetterSize(PrisonText5[playerid], 0.400000, 1.000000);
TextDrawColor(PrisonText5[playerid], -16776961);
TextDrawSetOutline(PrisonText5[playerid], 0);
TextDrawSetProportional(PrisonText5[playerid], 1);
TextDrawSetShadow(PrisonText5[playerid], 1);
//Loads
CreatePlayer3DTextLabel(playerid,"AUSGANG\nDrücke Enter",0xFFFF00FF,2797.1492,2608.1030,10.8258,40.0);
CreatePlayer3DTextLabel(playerid,"AUSGANG\nDrücke Enter",0xFFFF00FF,63.1364,-74.9860,1001.5078,40.0);
CreatePlayer3DTextLabel(playerid,"AUSGANG\nDrücke Enter",0xFFFF00FF,372.2674,-133.0091,1001.4922,40.0);
CreatePlayer3DTextLabel(playerid,"AUSGANG\nDrücke Enter",0xFFFF00FF,8174,-24.6694,1000.6797,40.0);
CreatePlayer3DTextLabel(playerid,"AUSGANG\nDrücke Enter",0xFFFF00FF,-25.3030,-141.1886,1003.5469,40.0);
CreatePlayer3DTextLabel(playerid,"AUSGANG\nDrücke Enter",0xFFFF00FF,-1390.0854,2639.5400,-50.7298,40.0);
CreatePlayer3DTextLabel(playerid,"AUSGANG\nDrücke Enter",0xFFFF00FF,365.0975,-11.5068,1001.8516,40.0);
CreatePlayer3DTextLabel(playerid,"AUSGANG\nDrücke Enter",0xFFFF00FF,161.1964,-96.8135,1001.8047,40.0);
CreatePlayer3DTextLabel(playerid,"AUSGANG\nDrücke Enter",0xFFFF00FF,460.5405,-88.7847,999.5547,40.0);
CreatePlayer3DTextLabel(playerid,"AUSGANG\nDrücke Enter",0xFFFF00FF,316.7251,-170.2839,999.5938,40.0);
CreatePlayer3DTextLabel(playerid,"AUSGANG\nDrücke Enter",0xFFFF00FF,227.2160,-7.8342,1002.2109,40.0);
CreatePlayer3DTextLabel(playerid,"AUSGANG\nDrücke Enter",0xFFFF00FF,94.1271,1781.8829,-23.7572,40.0);
CreatePlayer3DTextLabel(playerid,"AUSGANG\nDrücke Enter",0xFFFF00FF,2541.9011,-1303.9241,1025.0703,40.0);
CreatePlayer3DTextLabel(playerid,"AUSGANG\nDrücke Enter",0xFFFF00FF,286.2747,-41.4266,1001.5156,40.0);
CreatePlayer3DTextLabel(playerid,"AUSGANG\nDrücke Enter",0xFFFF00FF,501.5469,-67.8607,998.7578,40.0);
CreatePlayer3DTextLabel(playerid,"AUSGANG\nDrücke Enter",0xFFFF00FF,-25.9632,-187.8988,1003.5469,40.0);
printf("OPC 3 for ID: %d", playerid);
//ls mall
RemoveBuildingForPlayer(playerid, 1283, 1073.1328, -1395.1094, 15.7813, 0.25);
RemoveBuildingForPlayer(playerid, 1297, 1082.1250, -1390.1172, 15.6406, 0.25);
RemoveBuildingForPlayer(playerid, 1297, 1112.6172, -1389.8672, 15.6719, 0.25);
RemoveBuildingForPlayer(playerid, 1283, 1190.3047, -1389.8047, 15.5000, 0.25);
RemoveBuildingForPlayer(playerid, 1297, 1190.7734, -1383.2734, 15.9453, 0.25);
RemoveBuildingForPlayer(playerid, 1297, 1190.7734, -1350.4141, 15.9453, 0.25);
RemoveBuildingForPlayer(playerid, 1297, 1210.8047, -1367.3828, 15.7734, 0.25);
RemoveBuildingForPlayer(playerid, 1283, 1216.5625, -1394.7109, 15.5469, 0.25);
RemoveBuildingForPlayer(playerid, 1297, 1190.7734, -1320.8594, 15.9453, 0.25);
RemoveBuildingForPlayer(playerid, 1297, 1210.8047, -1337.8359, 15.7734, 0.25);
RemoveBuildingForPlayer(playerid, 1297, 1190.7734, -1299.7422, 15.9453, 0.25);
RemoveBuildingForPlayer(playerid, 1283, 1194.7969, -1290.8516, 15.7109, 0.25);
RemoveBuildingForPlayer(playerid, 1297, 1210.8047, -1304.9688, 15.7734, 0.25);
//Farm
RemoveBuildingForPlayer(playerid, 13052, -69.0469, 86.8359, 2.1094, 0.25);
RemoveBuildingForPlayer(playerid, 3376, -96.0859, 3.1953, 6.6953, 0.25);
RemoveBuildingForPlayer(playerid, 3276, -93.2266, -59.8906, 2.9297, 0.25);
RemoveBuildingForPlayer(playerid, 3276, -108.0781, -58.5391, 2.8828, 0.25);
RemoveBuildingForPlayer(playerid, 3276, -115.4141, -49.9844, 2.8828, 0.25);
RemoveBuildingForPlayer(playerid, 12917, -99.9922, -40.3047, 1.9531, 0.25);
RemoveBuildingForPlayer(playerid, 3276, -118.2891, -39.9219, 2.8828, 0.25);
RemoveBuildingForPlayer(playerid, 3276, -118.2891, -39.9219, 2.8828, 0.25);
RemoveBuildingForPlayer(playerid, 3276, -77.4609, -21.3203, 2.8906, 0.25);
RemoveBuildingForPlayer(playerid, 3276, -115.6484, -28.9688, 2.8828, 0.25);
RemoveBuildingForPlayer(playerid, 3276, -115.6484, -28.9688, 2.8828, 0.25);
RemoveBuildingForPlayer(playerid, 3276, -67.6719, 2.0469, 2.8906, 0.25);
RemoveBuildingForPlayer(playerid, 3374, -50.0156, 3.1797, 3.4766, 0.25);
RemoveBuildingForPlayer(playerid, 3375, -96.0859, 3.1953, 6.6953, 0.25);
RemoveBuildingForPlayer(playerid, 12914, -75.1797, 12.1719, 3.7188, 0.25);
RemoveBuildingForPlayer(playerid, 12918, -72.0391, 18.4453, 1.9531, 0.25);
RemoveBuildingForPlayer(playerid, 3276, -94.5234, 31.6172, 2.8828, 0.25);
RemoveBuildingForPlayer(playerid, 3276, -90.5313, 42.1484, 2.8828, 0.25);
RemoveBuildingForPlayer(playerid, 3276, -81.8984, 56.8516, 2.8828, 0.25);
RemoveBuildingForPlayer(playerid, 3276, -71.8359, 58.8750, 2.8828, 0.25);
RemoveBuildingForPlayer(playerid, 3374, -92.8672, 58.3438, 3.5703, 0.25);
RemoveBuildingForPlayer(playerid, 3374, -91.9453, 47.8125, 3.5703, 0.25);
RemoveBuildingForPlayer(playerid, 12915, -69.0469, 86.8359, 2.1094, 0.25);
RemoveBuildingForPlayer(playerid, 3374, -41.2500, 98.4141, 3.4609, 0.25);
RemoveBuildingForPlayer(playerid, 3374, -36.0156, 96.1875, 3.5703, 0.25);
printf("OPC 4 for ID: %d", playerid);
SetPlayerColor(playerid, 0xDCDCDCFF);
format(SpielerInfo[playerid][pName], 32, "%s", GetName(playerid));
format(query,sizeof(query),"SELECT `id` FROM `accounts` WHERE `name`='%s'",GetName(playerid));
mysql_query(query);
mysql_store_result();
TogglePlayerSpectating(playerid, 1);
printf("OPC 5 for ID: %d", playerid);
new account;
if(mysql_num_rows()!=0)
{
account = 1;
}
else {
account = 0;
}
mysql_free_result();
printf("OPC 6 for ID: %d", playerid);
if(account == 1 && SpielerInfo[playerid][pLogged] == 0)
{
printf("OPC 7 for ID: %d", playerid);
new string[880];
PlayerPlaySound(playerid, 1069, 0.0, 0.0, 0.0);
PlayAudioStreamForPlayer(playerid, "http://www.ngl-roleplay.de/musik/loginmusik.mp3");
printf("OPC 8 for ID: %d", playerid);
format(string, sizeof(string), "Willkommen auf %s\n\nHier musst du dein Passwort eingeben.\n\n\n\nVergiss dein Passwort nicht, \nund achte darauf das keiner dein Passwort kennt.", SERVERNAME);
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "{0087FF}Login", string, "Einloggen", "Abbrechen");
}
else if(account == 0 && SpielerInfo[playerid][pLogged] == 0)
{
printf("OPC 9 for ID: %d", playerid);
PlayerPlaySound(playerid, 1069, 0.0, 0.0, 0.0);
PlayAudioStreamForPlayer(playerid, "http://www.ngl-roleplay.de/musik/loginmusik.mp3");
printf("OPC 10 for ID: %d", playerid);
ShowPlayerDialog(playerid, DIALOG_REG, DIALOG_STYLE_PASSWORD, "Registration", "Du benötigst einen Account, um auf diesem Server zu spielen! \n\n Bitte suche dir ein neues Passwort aus!", "Registrieren", "Abbrechen");
}
printf("OPC 11 for ID: %d", playerid);
timer[playerid] = SetTimerEx("Speedometer",1000, 1,"i",playerid);
printf("OPC ended for ID: %d", playerid);
return 1;
}
Na also, ist doch klar dann.
if(PlayerInfo[playerid][pMember] > 0) fraktion = PlayerInfo[playerid][pMember] - 1;
if(PlayerInfo[playerid][pLeader] > 0) fraktion = PlayerInfo[playerid][pLeader] - 1;
Zu
if(PlayerInfo[playerid][pMember] > 0) fraktion = PlayerInfo[playerid][pMember];
if(PlayerInfo[playerid][pLeader] > 0) fraktion = PlayerInfo[playerid][pLeader];