Eine einfache Version ist im Server-Paket dabei.
Zitat/filterscripts/adminspec.pwn
Ansonsten findest du unter dem Schlagwort "Spectate" bestimmt was.
Eine einfache Version ist im Server-Paket dabei.
Zitat/filterscripts/adminspec.pwn
Ansonsten findest du unter dem Schlagwort "Spectate" bestimmt was.
Dann gibt es nur 2 Mäglichkeiten.
1. Du lernst mappen
2. Du lernst die Suche zu nutzen.Denn du bist sicherlich nicht der erste,der einen Weihnachtsbaum sucht.
Ich hab vor kurzem dazu eine Funktion gefunden, weiss leider nicht mehr von wem diese ist:
stock CreateChristmasTree(Float:X, Float:Y, Float:Z)
{
CreateDynamicObjectEX(3472,X+0.28564453,Y+0.23718262,Z+27.00000000,0.00000000,0.00000000,230.48021);
CreateDynamicObjectEX(664,X+0.20312500,Y+0.01171875,Z+-3.00000000,0.00000000,0.00000000,0.00000000);
CreateDynamicObjectEX(3472,X+0.45312500,Y+0.51562500,Z+4.00000000,0.00000000,0.00000000,69.7851562);
CreateDynamicObjectEX(3472,X+0.65136719,Y+1.84570312,Z+17.00000000,0.00000000,0.00000000,41.863403);
CreateDynamicObjectEX(7666,X+0.34130859,Y+0.16845703,Z+45.00000000,0.00000000,0.00000000,298.12524);
CreateDynamicObjectEX(7666,X+0.34082031,Y+0.16796875,Z+45.00000000,0.00000000,0.00000000,27.850342);
CreateDynamicObjectEX(3472,X+0.45312500,Y+0.51562500,Z+12.00000000,0.00000000,0.00000000,350.02441);
CreateDynamicObjectEX(3472,X+0.45312500,Y+0.51562500,Z+7.00000000,0.00000000,0.00000000,30.0805664);
CreateDynamicObjectEX(3472,X+0.45312500,Y+0.51562500,Z+22.00000000,0.00000000,0.00000000,230.47119);
CreateDynamicObjectEX(1262,X+0.15039062,Y+0.57128906,Z+29.45285416,0.00000000,0.00000000,162.90527);
}
Geht nicht in SA:MP. Da kannst nichts machen.
Hab den Code oben nochmal abgeändert.
Ist ja auch logisch,dass du niemals ein Wanted über Level1 bekommst.
Denn die ganze Struktur bei dir ist sehr unvorteilhaft.
Du fragst zuerst ab ober das Wanted über / gleich 0 ist.Falls ja,beendest du am ende die Funktion.
Dann fragst du ab ob das Wanted über / gleich 1 ist.Das wird aber nie abgefragt. Denn wenn der Wanted
Level lediglich 0 oder größer ist,beendest du mit return 1; bereits. Dadurch ist es völlig egal
was danach folgt.
Ist das Level zum Beispiel 5. Dann wird es bereits den Block aufrufen für Level 0.( Es ist zwar nicht möglich da
du überall return 1; hast, es würde aber dann auch den Block für Level 1 - 4 aufrufen [ Wenn du dort kein return 1; hättest ] )
Du hättest es wenn dann überhaupt rückwärts aufbauen müssen.
Zuerst fragen ob Level6,dann 5,4,3 usw.
Ich hab dir das aber mal neu strukturiert.
public OnPlayerDeath(playerid, killerid, reason)
{
new
name[MAX_PLAYER_NAME];
GetPlayerName(killerid, name, sizeof(name));
Delete3DTextLabel(label[playerid]);
TextDrawHideForPlayer(playerid,Textdraw0);
TextDrawHideForPlayer(playerid,Textdraw1);
SetPlayerWantedLevel(playerid, 0);
if(killerid != INVALID_PLAYER_ID) {
{
new
level,
string[128];
Wanted[killerid]++;
if(Wanted[killerid] > 6) {
level = 6;
}
else {
level = Wanted[killerid];
}
GivePlayerMoney(killerid, ( level * 1000 ) );
format(string, sizeof(string), "Player: %s have now %i $.",name, GetPlayerMoney(killerid));
SendClientMessageToAll(COLOR_YELLOW, string);
SetPlayerScore(killerid, GetPlayerScore(killerid) + 1);
SetPlayerWantedLevel(killerid, level);
// return 1; sicher,dass du danach nicht noch etwas machen willst?
}
return 1;
}
//Edit: Blubb geändert.Benutzt es lieber so.
Für die WorldBounds würde Ich immer folgendes nutzen.
#define INFINITY (Float:0x7F800000)
SetPlayerWorldBounds(playerid,INFINITY,-INFINITY,INFINITY,-INFINITY);
Ich glaube aber eher,dass die Position deines Spielers falsch gesetzt wird.Du nutzt ja die neue Version von SA:MP, möglich dass einige Plugins nicht 100%-ig funktionieren ( MYSQL ) . Hat es denn bei SA:MP 0.3b fehlerfrei funktioniert? Das solltest du vielleicht mal ausprobieren.
//Edit:
Gib am besten mal die Position auf die du den Spieler setzten willst vorher aus.
printf("X -> %.2f",X);
printf("Y -> %.2f",Y);
printf("Z -> %.2f",Z);
Jo, nur ist es einerseits der falsche Bereich und andererseits sowieso nur Spam-Werbung für dich.Der Threadtitel reicht da schon völlig aus um den Thread zu schließen.
Du hast ja nicht mal geschrieben ob es für PC,Konsole oder Handheld ist.Daher empfehle ich dir ganz klar Tetris
Alter ... was ?
Ich versteh eure Lösung nicht.Wie kommt ihr auf die Lösung,DMA & Julian xD?
Goldü hat recht. :<
//Edit;
Damit unterm Post nun auch 1x editiert steht.
Hab Ich falsch gerechnet, oder DMA & Julian ?
Nun weiß ich nicht, wie ich die Grundlinie, und die anderen Geraden herausbekommen soll.
Die Winkel habe ich mit Hilfe von "Benutzer: Steam" schon herausgefunden.
Hmpf, überlesen.
Kannst ja trotzdem mal die Winkel posten.
ZitatAlles anzeigenalpha = 50°
beta = ???
gamma = 2 * alpha
delta = 2 * beta
gamma = 2 * 50° = 100°
360° - 100° - 50° = delta + beta
210° = delta + beta
210° = 3*beta
70° = beta
delta = 2 * 70° = 140°
alpha = 50°
beta = 70°
gamma = 100°
delta = 140°
Der Innenwinkel von einem Viereck ( 2D ) ist immer 360°.
Mit dem Tipp sollte es möglich sein :p
Hups.Überlesen dass es ZCMD ist.
COMMAND:a(playerid,params[])
{
new string[128],playername[20];
if(isnull(params))return SendClientMessage(playerid,ROT,"Verwendung: /a [text]");
{
if(SpielerInfo[playerid][Adminlevel]>=1)
{
GetPlayerName(playerid,playername,sizeof(playername));
format(string,sizeof(string),"%s Adminlevel %i: %s.",playername,SpielerInfo[playerid][Adminlevel],params);
for(new i;i<MAX_PLAYERS;i++)
{
if(SpielerInfo[i][Adminlevel]>=1)
{
SendClientMessage(i,GELB,string);
}
}
}
else return SendClientMessage(playerid, GRAU, "Du hast nicht das benötigte Adminlevel.");
}
return 1;
}
Man brauch isnull() für diese Methode.Du müsstest in der ZCMD Include eigentlich die isnull() Funktion haben.
http://forum.sa-mp.de/wbb/san-…/35274-pawn-einstieg-2-0/
http://wiki.sa-mp.com/wiki/Scripting_Basics
http://forum.sa-mp.de/wbb/san-…player/board39-tutorials/
BUeber(playerid,giveid,10000);
Würde 10000 von playerid abziehen und giveid geben. giveid ist dabei ein Integer.
Aber Ich muss mich wieder wiederholen.Du kannst die Grundlagen nicht.
stock BUeber(playerid, takeid, money) {
SpielerInfo[takeid][BEuro]+=money;
SpielerInfo[playerid][BEuro]-=money;
return 1;
}
playerid,takeid und money sind in der Funktion lokale Variablen.Sie existieren außerhalb nicht.
Ich glaube auch eher,dass es eine Ausrede von kye ist.Kann mir gut vorstellen dass er es eben nicht coden kann, dass alles automatisch abgewickelt wird.
ZitatEs war einfach angekündigt, dass die Serverbesitzer den Spielern neue Models anbieten kann,
wie das gehen wird, wurde nie richtig erklärt.
Kann er ja auch.Das hat ja BloodyEric im Post jetzt auch geschrieben,wie es funktionieren soll .Jedem ist es dann aber selbst überlassen, ob er die Datein installiert oder nicht.
Schau dir endlich die Grundlagen an.
Wieso kommt als erstes in deinem Befehl der Loop? Macht doch gar keinen Sinn.Es ist auch schwierig dir zu helfen wenn du nicht die Grundlagen beherrscht.
COMMAND:a(playerid,params[])
{
new
string[128],
playername[MAX_PLAYER_NAME];
//if(sscanf(params,"s",text)) return SendClientMessage(playerid,ROT,"Verwendung: /a [text]");
if(!params[0]) return SendClientMessage(playerid,ROT,"Verwendung: /a [text]");
// Die Abfrage ob der Spieler Admin ist müsste hier hin
//
//
GetPlayerName(playerid,playername,sizeof(playername));
//format(string,sizeof(string),"%s Adminlevel %i: %s.",playername,SpielerInfo[playerid][Adminlevel],text);
format(string,sizeof(string),"%s Adminlevel %i: %s.",playername,SpielerInfo[playerid][Adminlevel],params);
for(new i;i<MAX_PLAYERS;i++)
{
if(SpielerInfo[i][Adminlevel] >= 1)
{
SendClientMessage(i,GELB,string);
}
}
return 1;
}
Mods funzen schon,
aber es ist für Serverbetreiber nicht möglich (wie so großartig angekündigt),
den Nutzern automatisch Models anbieten zu können-.--
Quatsch.Das war nie angekündigt.Es wurde von Anfang gesagt, dass es nicht automatisch ablaufen wird.
Denn Kye ist der Meinung,so könnte man schädliche Software über den Client an den Mann bringen.
Gran Turismo 5 , aber schon am Dienstag
Ne,eher so.
public OnPlayerDeath(playerid, killerid, reason)
{
GivePlayerMoney(playerid, -5000);
if(killerid == INVALID_PLAYER_ID) {
SendClientMessage(playerid, COLOR_BLUE, "Du hast Selbstmord begangen!");
}
else {
new
pName[MAX_PLAYER_NAME],
string[15 + MAX_PLAYER_NAME 9 + 1];
GivePlayerMoney(killerid, 5000);
GetPlayerName(killerid, pName, sizeof(pName) );
format(string,sizeof(string),"Du wurdest von %s getötet!",pName);
SendClientMessage(playerid, COLOR_RED, string);
GetPlayerName(playerid, pName, sizeof(pName) );
format(string,sizeof(string),"Du hast %s getötet !",pName);
SendClientMessage(killerid, COLOR_BLUE, string);
}
return 1;
}
pName & string braucht man nicht zu erstellen,falls Selbstmord begannen wurde ( killerid == INVALID_PLAYER_ID ).
Hab ich auch noch nie erlebt, dass die playerid Gleichzeitig die killerid ist.
Du brauchst auch kein Array von pName bzw string.
Da die Nachrichten sowieso Nacheinander versendet werden, brauch Ich dafür keine zwei Strings.Ich nutze einfach einen.
GivePlayerMoney für die killerid ist auch ein unnötiger Aufruf, falls der Spieler Selbstmord begannen hat.
Das Gleiche gilt auch für GetPlayerName.
Man könnte natürlich noch auf pName verzichten, halte Ich aber für überflüssig.
Konnte ziemlich viel verbessern, meinst du nicht :p ?
format(string,sizeof(string),"Du wurdest von %d getötet!",killername);Meinst wohl %s.
Und was ist,wenn der Spieler Selbstmord begannen hat und die killerid deshalb INVALID_PLAYER_ID ist ?