Beiträge von UncleSub
-
-
Das geht eigentlich mit R7 ganz einfach:
Bei OnPlayerConnect ein Query mit einer x beliebigen Spalte senden (Bsp.: id)
format(string, 128, "SELECT id FROM accounts WHERE Name='%s'", SpielerName(playerid));
mysql_function_query(handle, string, true, "OnCheckAccount", "i", playerid);Dann im neuem Thread (Callback):
forward OnCheckAccount(playerid);
public OnCheckAccount(playerid)
{
new felder, zeilen;
cache_get_data(zeilen, felder);
if(!zeilen)
{
//Account existiert nicht
}
else
{
//Account existiert
}
return 1;
}Mfg,
UncleSub -
Du kannst mit TogglePlayerSpectating bei OnPlayerConnect den Spawn Button verschwinden lassen.
Dann musst du nach dem Einloggen nur noch TogglePlayerSpectating(playerid, 0); machen, dann spawn der Spieler automatisch.Mfg,
UncleSub -
Musst evtl schaun, ob diese Funktion im Script bereits vorhanden ist, falls ja, änder die Farbe, falls nicht dann füg es hinzu. (Farbe nach belieben wählen)
-
Zum ersten:
Du willst ja, dass das Pickup da bleibt und dass andere Spieler auch die Waffe ausrüsten können. Damit jeder Spieler dies aber nur einmal kann, musst du eine globale Variable, oder eine PVar setzen, dass der Spieler die Waffe bereits ausgerüstet hat. Bei OnPlayerDeath musst du diese dann wieder löschen.Bsp.:
//OnPlayerPickupPickup
SetPVarInt(playerid, "mp5gerüstet", 1);
//OnPlayerDeath
DeletePVar(playerid, "mp5gerüstet");Zum zweiten:
Du musst als pickup spawn type 1 nehmen.
Bsp:
CreatePickup(model, 1, Float:X, Float:Y, Float:Z, Virtualworld)Mfg,
UncleSub -
ocmd:cr(playerid,params[])
{
if(!isPlayerAnAdmin(playerid,2000))return SendClientMessage(playerid,ROT,"Du bist nicht Admin Rank 200!");
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
for(new v = 0; v < MAX_VEHICLES; v++)
{
if(!IsPlayerInVehicle(i,v)) SetVehicleToRespawn(v);
}
break;
}
}
return 1;
}Ohne das break und es müsste gehen.
Mfg
-
Hallo Leute,
ihr kennt doch sicher auch das nervige Spawnauswahlsfenster?
Dieses Fenster habe ich damit deaktiviert.
public OnPlayerRequestClass(playerid, classid)
{
SetSpawnInfo(playerid,0,0,1958.3783, 1343.1572, 15.3746,0,0,0,0,0,0,0);
SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
SpawnPlayer(playerid);
return 1;
}Nun ist das aber so wen ich mich einlogge schau ich über Ls und muss mich einloggen.
Ich gebe ein falsches Passwort ein und werde schon 1958.3783, 1343.1572,
15.3746 dahin gesetzt und schaue nicht mehr über Ls aber muss trotzdem
noch mein Passwort eingeben woran liegt das?Mach bei OnPlayerConnect einmal TogglePlayerSpectating(playerid, 1); und wenn er erfolgreich eingeloggt ist machst du dann TogglePlayerSpectating(playerid, 0);
Mfg
-
Ja aber ich will das sie alle nicht Blau odersowas anzeigen auf der minimap sondern in ihrer Frakions farbe @ UncleSub:
Ich bastel dir jetzt ganz bestimmt nicht etwas dazu. Probier doch mal sachen alleine, nur so kann man was lernen.
Denkanstoß:
stock GetFraktColor(fraktid)
{
new color;
switch(fraktid)
{
case 0: color = 0xblabla;
//Alle Fraktionen
}
return color;
}//OnPlayerConnect
SetPlayerColor(playerid, GetFraktColor(/*Fraktionsvariable*/)); -
Sieht für mich erstmal fragwürdig aus mit der Schleife, aber zeig mal erstmal die Stelle wo du den Dialog zeigst.
Mfg
-
Das else ändert auch nichts daran, dass die Schleife durch das return abgebrochen wird. Wenn du es nach Methode 1 machst, darfst du natürlich keine Nachrichten senden, sonst kommt es zu Spam.
So würde ich es machen:
ocmd:takecorpse(playerid,params[])
{
new text[36], id = -1;
if(PlayerInfo[playerid][pJob] != 36)
{
return SendClientMessage(playerid,WHITE,"Du bist kein Bestatter");
}
if(IsPlayerInAnyVehicle(playerid))
{
return SendClientMessage(playerid,WHITE,"Du darfst nicht in einem Fahrzeug sein!");
}
if(sscanf(params,"s",text)) //Ich weiß nicht wie du es haben willst, aber für ID's gibt es ja auch "u", das gibt dir ja die userid aus.
{
return SendClientMessage(playerid,WHITE,"Nutzung: /takecorpse [Name der Leiche]");
}
for(new i; i < MAX_BESTATTER; i++)
{
if(IsPlayerConnected(i))
{
if(!strcmp(text,BestatterInfo[i][Opfer],true))
{
id = i;
break;
}
}
}
if(id == -1)
{
return SendClientMessage(playerid,WHITE,"Falscher Name, bitte schreibe vollständig den Namen!");
}
if(!IsPlayerInRangeOfPoint(playerid,5.0,BestatterInfo[id][Todx],BestatterInfo[id][Tody],BestatterInfo[id][Todz]))
{
return SendClientMessage(playerid,WHITE,"Du bist nicht bei der Leiche");
}
if(BestatterInfo[id][Bestatterid] == playerid)
{
return SendClientMessage(playerid,WHITE,"Dieser Auftrag gehört dir nicht");
}
SendClientMessage(playerid,COLOR_LIGHTBLUE,"** Du hast eine Leiche aufgesammelt!");
SendClientMessage(playerid,COLOR_LIGHTBLUE,"** Gehe nun zum Kofferraum und gebe ein /laycorpse!");
DestroyPickup(TotenKopf[bestattervar[playerid]]);
Delete3DTextLabel(TotenLabeli[bestattervar[playerid]]);
KillTimer(totentimer[BestatterInfo[id][Spielerid]]);
hatleiche[playerid] = 1;
bestatterpoint[playerid] = 1;
return 1;
}Ich weiß aber natürlich nicht, wie du den Befehl genau haben willst. Als Denkanstoß sollte es aber reichen.
-
Das ist kein Befehl.
Such in deinem Gamemode nach SetPlayerColor. Dann kannst du dort als Farbcode eine Farbe deiner Wahl nehmen. (Mit dem Tool kannst du Farben "mischen")Mfg
-
Such mal nach SetPlayerColor. Wenn dies auftaucht einfach die Farbe zu einer nicht "unsichtbaren" Farbe ändern.
BTW:
0xRRGGBBAARR: Roter Farbanteil
GG: Grüner Farbanteil
BB: Blauer Farbanteil
AA: Alpha Wert, bestimmt die Transparenz. 00 wäre komplett transparent und FF gar nicht transparent.Mfg
-
Aber in meinen anderen gehts auch soll ich da dann else schreiben?
Ist ja schön und gut, aber die return's müssen raus. Überleg dir doch einfach mal logisch, was passiert, wenn du den Befehl eingibst. Wenn ein return auftaucht, bricht die Schleife ab, ob du es glaubst oder nicht.
Wie du es machen kannst:
1. Alles "positiv" Scripten. Sprich, du machst, dass er den Code ausführt, wenn die Umstände gegeben sind. (Bsp.: Statt !IsPlayerInRangeOfPoint machst du IsPlayerInRangeOfPoint)
2. In einer Schleife die Id des nächstgelegenen Toten in einer Variable schreiben und danach den Code in der Schleife ausführen.Mfg
-
Nein die return's raus. Damit brichst du die gesamte Schleife ab, wie beim break. Das break kannst du aber drin lassen. Musst den Code umschreiben, dass du alles ohne return's hast, außer du willst, dass die Schleife abbricht.
Mfg
-
Mal ein kleiner Denkanstoß: Klick mich.
Damit lässt du den Spieler wieder zur Class Selection. Dann musst du noch unter OnPlayerRequestClass die Camera setzen, etc.Mfg
-
if(!IsPlayerInRangeOfPoint(playerid,5.0,BestatterInfo[i][Todx],BestatterInfo[i][Tody],BestatterInfo[i][Todz])) return SendClientMessage(playerid,WHITE,"Du bist bei keiner Leiche!");
Kann auch nicht gehen. Wenn du bei diesem Code nicht bei der ersten Person (Id 0) stehst, bricht er die gesamte Schleife ab und gibt dir die Nachricht heraus.
Mfg
-
new Float:pbSpawns[ANZAHL][3] = {
{-997.4324,1085.4733,1342.0649},
{-1026.5931,1044.7457,1342.0952},
{-1079.7046,1040.9398,1344.1752},
{-1115.0260,1072.4110,1342.6558},
{-1132.4392,1034.3738,1345.7334}
};Das nach oben.
Und bei deinem Command musst du das machen:
ocmd:pbenter(playerid, params[])
{
if(IsPlayerInRangeOfPoint(playerid,2.0,1421.74, -1179.36, 25.32))
{
Spieler[playerid][Paintball] = 1;
new rand = random(sizeof(pbSpawns));
SetPlayerPos(playerid, pbSpawns[rand][0], pbSpawns[rand][1], pbSpawns[rand][2]);
SetPlayerInterior(playerid,10);
PayPlayerMoney(playerid,-500);
ResetPlayerWeapons(playerid);
GivePlayerWeapon(playerid,24,150);
GivePlayerWeapon(playerid,27,80);
GivePlayerWeapon(playerid,34,50);
SCM(playerid,BAIGE,"Du befindest Dich in der Paintball Arena. [-500]");
new pID, n1[128], grund[128];
format(n1,sizeof(n1),"%s hat die Paintball Arena betretet.",SpielerName(playerid),SpielerName(pID),grund);
SendClientMessageToAll(GRUEN,n1);
return 1;
}
else
{
SendClientMessage(playerid,BAIGE,"Du bist nicht an der Paintball Arena!");
return 1;
}
} -
Alles klar, also bevor das er durcheinander kommt soll er einfach das Tut von Neosc ansehen.
Ist ganz gut und siehst fuer Neulinge sowie Fortgeschrittene leicht aus.
MfG
Ich würde es nicht nutzen. Hab es mir gerade angeschaut und naja ist jetzt nicht das Gelbe vom Ei. z.B. wird nirgendwo eine Vriable gesetzt, dass der Spieler Onduty ist..
-
Nennt man das nicht ueblicher Weise Onduty ? oder so ??
Du sollst es ja nicht genau so machen. Soll ja nur ein Denkanstoß sein, wie es funktioniert.
-
ocmd:duty
if(!IsPlayerInFraktion == 1) return SendClientMessage(playerid,FARBE,"Du bist kein Staatsdiener"); // ABFRAGE ANPASSEN
if(Duty == 0)
{
SendClientMessage(playerid,Farbe,"Du gehst in den Dienst");
GivePlayerWeapon(playerid,24,200);
GivePlayerWeapon(playerid,27,200);
Duty == 1;
}
if(Duty == 1)
{
SendClientMessage(playerid,Farbe,"Du gehst aus dem Dienst");
RemovePlayerWeapons(playerid);
Duty == 0;
}
return 1;Dafuq, was ist das für ein Befehl? Nur Fehler drin.
Zu deinem Problem:
//Oben
new copduty[MAX_PLAYERS];ocmd:duty(playerid, params[])
{
//Abfragen, ob Spieler in der Fraktion ist.
if(copduty[playerid] == 0)
{
copduty[playerid] = 1;
SendClientMessage(playerid, -1, "Du bist nun Copduty!");
//Waffen geben etc.
}
else if(copduty[playerid] == 1)
{
copduty[playerid] = 0;
SendClientMessage(playerid, -1, "Du bist nun Copoffduty!");
//Waffen wegnehmen etc. Je nach dem was du oben gemacht hast.
}
return 1;
}Mfg,
UncleSub