hab extra nochmal nachgeschaut
Es ist die Pflasterstraße in Rodeo in Los-Santos.
Beiträge von FACE
-
-
Etwas Ähnliches wäre vielleicht in Los-Santos zu finden.
Es gibt in Rodeo diese kleine Straße, welche ebenfalls gepflastert ist. -
Nein
Du kannst die Funktion umdefinieren, bzw. redefinieren, aber das ist vollkommen sinnfrei =)
Lass die lieber so, damit kann dann auch noch jeder umgehen, wenn du mal probleme haben solltest. -
könnte er durchaus
-
Naja, SetPlayerPos setzt sich aus 4 Komponenten zusammen: playerid, X,Y,Z.
playerid haben wir ja gegeben, also lesen wir X,Y,Z aus.
Du hattest gleich 5 Sachen mit reingepackt, das kann ja garnicht funktionieren -
SetPlayerPos(playerid,DM1Spawns[DM1Spawn][0],DM1Spawns[DM1Spawn][1],DM1Spawns[DM1Spawn][2],DM1Spawns[DM1Spawn][3],DM1Spawns[DM1Spawn][4]);
Woher kommt denn auch die vierte Koordinate ??
Wenn du die DrehRichtung des Spieler mit einfließen lassen möchtest (Angle/Rotation), dann muss du die erstens oben im Array mit angeben und zweitens mit einer zweiten Funktion den Spieler drehen:new Float:DM1Spawns[5][4] =
{
{-2126.9319,342.7235,67.1692,0.0},//Spawn1
{-2124.2603,374.1755,67.1692,0.0},//Spawn2
{-2082.9463,367.9211,67.1692,0.0},//Spawn3
{-2028.3717,341.5887,67.1692,0.0},//Spawn4
{-2027.4733,373.9023,67.1692,0.0}//spawn5
//Setze für 0.0 die Rotations-Koordinate ein.
};if(DM1[playerid]==1)
{
new DM1Spawn;
DM1Spawn = random(sizeof(DM1Spawns));
SetPlayerPos(playerid,DM1Spawns[DM1Spawn][0],DM1Spawns[DM1Spawn][1],DM1Spawns[DM1Spawn][2]);
SetPlayerFacingAngle(playerid, DM1Spawns[DM1Spawn][3]);
}Nebenbei hast du versucht sogar ganze 5 Koordinaten reinzupacken. (0,1,2 ,3,4)
-
Bitte?
Frag mal die Hunderten Leute, denen er das Leben gerettet hat, die sehen das wohl ein wenig anders.
(Anbei sollte bemerkt sein, dass das kein gehaltloser Actionfilm ist.) -
Was hälst du denn von Oskar Schindler,dem damaligen Chef der "Deutschen Emaillefabrik".
Gibts auch einen guten Film zu: Schindlers Liste.
Selbst NS-Parteimitglied, rettete Schindler vielen Juden das leben, was sein eigenen kompletten Ruin bedeutete. -
Ähm jep...habs nur eben ausm Kopf geschrieben
Fehler kommen vor -
machs doch etwas kompakter bitte
Außerdem ist der Chat glaube 100 Zeilen langfor(new i=0; i<100; i++){SendClientMessage(playerid, 0xFFFFFF,"");}
für alle spieler sähe es dann so aus:
for(new i=0; i<100; i++){SendClientMessageForAll(0xFFFFFF,"");}
-
Sind nur Einrück-Fehler.
Schieb mal alles Links schön bündig an den Rand.
Manchmal sind Leerzeichen oder Tabs da. -
Guter Einwand, lässt sich aber in der GetPlayerMoney -Abfrage auch anders beheben.
if(GetPlayerMoney(playerid)<betrag){return SendClientMessage(playerid, Weiß, "Soviel Geld hast du nicht!");} -
Wird wohl auf diese Art und Weise ein starkes Stück kürzer
-
new gTAXI;
public OnGameModeInit()
{
gTAXI = AddStaticVehicle(420, -2482.4937, 2242.3936, 4.6225, 179.3656, 6, 1); // Taxi
return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if (newstate == PLAYER_STATE_DRIVER && oldstate == PLAYER_STATE_ONFOOT)
{
if (GetPlayerVehicleID(playerid) == gTAXI)
{
AddVehicleComponent(gTAXI, 1010); // Nitro
SendClientMessage(playerid, 0xFFFFFFAA, "Nitro added to the Taxi.");
}
}
return 1;
}Entnommen aus dem Sa-mp Wiki.
http://wiki.sa-mp.com/wiki/AddVehicleComponent -
Ja, hast Recht. Hab in der Eile mal das Zeichen verdreht
-
Klar, du brauchst dann halt den Integer "Points" nichtmehr, weil du einfach ein Random setzen würdest.
Sähe dann insgesamt so aus:
public OnPlayerEnterCheckpoint(playerid)
{
new vehicleid = GetPlayerVehicleID(playerid);
for(new i=0; i<11; i++)
if(vehicleid == trash[i])
SendClientMessage(playerid,Orange,"Müll abgeholt. Gehalt pro Checkpoint '25$'");
DisablePlayerCheckpoint(playerid);
TogglePlayerControllable(playerid, 0);//Timer setzen. In der Timer Funktion wird dann der neue CP gesetzt.
SendClientMessage(playerid,Weiß,"Müll wird abgeholt...");
GivePlayerMoney(playerid,25);
SetTimerEx("Wiederfahren", 1000*3, 0, "i", playerid);
return 1;public Wiederfahren(playerid)
{
TogglePlayerControllable(playerid,1);//Spieler entfreezen
new rand=random(sizeof(CheckPointsMüll));
SetPlayerCheckpoint(playerid,CheckPointsMüll[rand][0],CheckPointsMüll[rand][1],CheckPointsMüll[rand][2],3);
return 1;
} -
Mit einer simplen if-Abfrage, ob das Spieler Geld größer als null ist:
ocmd:pay(playerid,params[])
{
if(GetPlayerMoney(playerid)>=0){return SendClientMessage(playerid, Weiß, "Du hast kein Geld was du versenden könntest!");}
new pID,betrag;
new Float:X, Float:Y, Float:Z;
if(sscanf(params,"ui",pID,betrag)) return SendClientMessage(playerid,Weiß,"Benutze /pay ID Betrag");
GetPlayerPos(playerid,X,Y,Z);
if(IsPlayerInRangeOfPoint(pID,5,X , Y, Z))
{
GivePlayerMoney(playerid,-betrag);
GivePlayerMoney(pID, betrag);
}
return 1;
} -
array.
Ich helf dir mal ein wenig:new Points[MAX_PLAYERS];
Hier die Definition des Arrays:
new CheckPointsMüll[/*Hier die Anzahl der Checkpoints rein, der erste liegt auf Platz 0*/][3] = {
{192.5336,-1774.9198,4.3294},
{208.3698,-1774.6583,4.3892} // Beim Letzten kommt "KEIN" Komma hin!};
Dann folgt die Abfrage:
public OnPlayerEnterCheckpoint(playerid)
{
new vehicleid = GetPlayerVehicleID(playerid);
for(new i=0; i<11; i++)
if(vehicleid == trash[i])
SendClientMessage(playerid,Orange,"Müll abgeholt. Gehalt pro Checkpoint '25$'");
DisablePlayerCheckpoint(playerid);
if(Points[playerid]<sizeof(CheckPointsMüll)){Points[playerid]++;}else{Points[playerid]=0;}//Wir setzen die Variable neu, prüfen nebenbei, ob er schon alle CPs durch hat.
TogglePlayerControllable(playerid, 0);//Timer setzen. In der Timer Funktion wird dann der neue CP gesetzt.
SendClientMessage(playerid,Weiß,"Müll wird abgeholt...");
GivePlayerMoney(playerid,25);
SetTimerEx("Wiederfahren", 1000*3, 0, "i", playerid);
return 1;
}Jetzt nurnoch die Timer Funktion:
(vorher bitte forwarden!)
public Wiederfahren(playerid)
{
TogglePlayerControllable(playerid,1);//Spieler entfreezen
SetPlayerCheckpoint(playerid,CheckPointsMüll[Points[playerid]][0],CheckPointsMüll[Points[playerid]][1],CheckPointsMüll[Points[playerid]][2],3);
return 1;
}Sollte in etwa passen
-
Bau einfach ein Array mit den Checkpoint Koordinaten und erhöhe jedesmal den Wert von "Points[playerid]" um +1 und lese die nächsten Daten aus dem Array aus
Damit brauchst du auch den Text und das übrige Gerammel nur ein einziges Mal =) -
public OnPlayerRequestClass(playerid,classid)
{
if(classid == 3 && !IsPlayerAdmin(playerid))
{
SendClientMessage(playerid,COLOR_GREEN,"This skin is only for admins!");
return 0;
}
return 1;
}http://wiki.sa-mp.com/wiki/OnPlayerRequestClass
Returning 0 in this callback will prevent the player from spawning. The player can be forced to spawn when SpawnPlayer is used however the player will re-enter class selection the next time they die.
Setze halt einfach für classid die zu sperrende Klasse ein
Und ändere natürlich die Parameter. Hier geht es momentan um einen Admin-Skin (wie auch ersichtlich).