Du solltest erstmal deine ganzen Fehler in deinem Code beheben. Eine solche Zone kannst du mit SetPlayerCheckpoint machen. Da mir gerade ein wenig langweilig war, hab ich mal die offensichtlichen Fehler verbessert und dir "Die Zone" eingebaut:
http://pastebin.com/m71593f12
Beiträge von Mann im Mond
-
-
Ein Array löst das Problem
new
CreatedCar[MAX_PLAYERS];
Dann enstprechend in deinem Befehl
CreatedCar[playerid] = CreateVehicle(...);
Damit kann man dann auch einfach überprüfen, ob der Spieler ein Auto gepsawnt hat
if(CreatedCar[playerid] > 0)
{
// Er hat bereits eins gespawnt
}
Dann entprechend natürlich
DestroyCar(CreatedCar[playerid]);
CreatedCar[playerid] = 0; // keines gespawnt
Und den Timer musst du dann natürlich mit SetTimerEx und nicht mehr mit SetTimer machen, da du ja die playerid mit übertragen musst...
Eine Schleife benötigst du nicht, außer du willst alle gespawntenCars auf einmal löschen. -
der error kommt auch wenn ein plugin nicht geladen werden konnte
aber dies ist nicht bei dir der Fall
Falsch da kommt Error 19 -
Ja wenn du bereis Sachen abspeicherst in deinem Script speicher grad die pAdmin auch mit...
-
Naja mach am besten einen Array draus, in dem du gleich alle gTeams abspeicherst:
//Oben
#define MAX_TEAMS 20
#define MAX_MEMBERS 20new
gTeamFull[MAX_TEAMS];// Bei deiner ClassSelection
if(gTeamFull[TEAM_WIEAUCHIMMER] > MAX_MEMBERS)
{
// Was passiert wenns voll ist?
}
gTeamFull[TEAM_WIEAUCHIMMER]++;
gTeam[playerid] = TEAM_WIEAUCHIMMER; -
Du musst einen Array für alle Spieler erstellen. Irgendwas mit
// Ganz oben
new pAdmin[MAX_PLAYERS];// OnPlayerConnect
pAdmin[playerid] = 0;// bei deinem /makeadmin Befehl oder wie auch immer
pAdmin[playerid] = ADMINLVL;
Dann kannst du bei deinen Adminbefehlen dies überprüfen ob er ein entsprechender Admin ist.
if(pAdmin[playerid] > MINADMINLEVEL)Da dann dein Admin nicht gespeichert wird, musst du natürlich noch die ganzen Daten (dazu gehört auch pAdmin) in einer. ini speichern oder in einer SQL Datenbank, je nachdem was du bevorzugst. Wenn dus selber nicht weisst wies geht, findest du was unter "Login Register System" oder so ähnlich...
-
Schwer zu sagen, ich sehe weder deine Datenbank noch was von deinem Laden der Variablen im Scipt/Speichern im Script
-
Ich hab mich oben verschrieben, versuchs nochmal (habs editiert). Du musst natürlich tut1 auch in tut1 umwandeln, nicht tut2 in tut1
-
Oh entschuldigung hab ich überlesen. Dachte er wollte nur ein Objekt erstellen.
-
Schreiben musst dus selber, ich kann dir allerdings einige Anregungen geben.
Tazern:
Um den Spieler zu freezen, benutze
TogglePlayerControllable(playerid, 0); zum unfreezen wieder
TogglePlayerControllable(playerid,1);.
Damit du die Nachricht "ist bereits getazert" senden kannst, musst du beim freezen/unfreezen eine Variable setzen wie z.B.
pTazed[playerid] = 1; beim freezen und pTazed[playerid] = 0; beim Unfreezen. Bei deinem /tazer Command kannst du dann die Variable des Spielern, der getazert wird abfragen, sollte die auf 1 stehen, dann sende die Nachricht.
Damit der Spieler wieder unfreezt wird nach einer gewissen Zeit musst du einen Timer benutzen, welche den Spieler wieder laufen lässt (unfreeze).Bombenlegen:
Ja das ist noch einfacher, einfach bei deinem /plant Befehl einen Timer setzen auf 60 Sekunden welcher dann einfach CreateExplosion auslöst. Um dabei die Position nach 60 Sekunden wieder herauszufinden, kannst du bei /plant einfach CreateObject benutzen (ein Bombenobjekt gibt es sicherlich) und dann in deinem Callback, der nach 60s ausgeführt wird (da wo auch dein CreateExplosion drin ist) einfach GetObjectPos und die CreateExplosion dann da ausführen wo das Objekt lag. Ach ja DestroyObject nicht vergessen am Ende. -
OnGameModeInit()
{
// Hier deine Objekte
CreateObject(980, -2059.239746, -81.311386, 37.093704, 0.0000, 0.0000, 0.0000);
CreateObject(980, -2047.269897, -81.230782, 36.937454, 0.0000, 0.0000, 0.0000);
//dein anderer Code
} -
Wenn euer Script die gleichen Variablen (die in der Datenbank gespeichert werden sollen) wie Moderntopia benutzt, könnt ihr es theoretisch kopieren. Da ich das allerdings beweifle müsst ihr die Variablen natürlich umändern ensprechend zu euren und ggf. auch die Reihenfolge, je nachdem wie ihr es anstellt. Das sowohl im Script beim Laden der Variablen (ich schätze mal bei /login) und natürlich beim Abspreichern der Variablen und nicht zu vergessen in der Tabelle eurer Datenbank.
-
Ändere
SetTimer("tut1",2000,false);
in
SetTimerEx("tut1",2000,false,"i",playerid); -
AddStaticVehicleEx oder AddStaticVehicle in OnGameModeInit
-
zu 4.:
Indem du die Positionen des Autos in .ini s schreibst oder in eine Datenbank und diese Positionen dann wieder OnGameModeInit ausliest. Entweder du schreibst dir ein "Carsystem" selbst oder du suchst hier im Forum nach einem (Stichwort: "Carsystem") -
Ehm ja was willst du damit erreichen? Mit deinem Code sendest du eine Nachricht an alle... Schaus nochmal durch, da du zuerst GetPlayerPos(i,...) verwendest und dann kontrollierst ob der Spieler an SEINER Position steht. Wo sollte er sonst stehen?
-
public Defuse() // Das wird aufgerufen vom Timer
{
for(new i = 0; i < GetMaxPlayers(); i++)
{
if(IsPlayerConnected(i))
{
if(gTeam[i] == TEAM_GROVE)
{
SendClientMessage(i,FARBE,"Text");
}
}
}
}Da du den Text nur an die Mitglieder von Grove sendest benötigst du keine playerid. Wenn du die Defuse(playerid) aufrufen willst, dann musst du auch mit
SetTimerEx arbeiten und nicht mit SetTimer -
Wenn dus so machen willst wie Black Fox es vorgeschlagen hat mit PlayerToPoint benötigst du eine Schleife:
new
Float:pX,
Float:pY,
Float:pZ;
GetPlayerPos(playerid, pX, pY, pZ);
for(new i = 0; i < GetMaxPlayers(); i++)
{
if(IsPlayerConnected(i))
{
if(PlayerToPoint(10.0,i,pX,pY,pZ)) // Hier natürlich dein Radius
{
SendClientMessage(i,FARBE,"Text");
}
}
} -
Das kannst du z.B. mit dem MTA Map Editor machen, welcher im MTA Download Packet mitgeliefert wird. Einfach dann bei der Installation von MTA den Map Editor ankreuzen. Danach MTA starten und du kannst im Menü den Map Editor starten
-
Dann benutze printf bzw. Print in deinem Befehlen (wie. z.B. /givemoney).
Bsp:
new
sendername[MAX_PLAYER_NAME];
GetPlayerName(playerid, sendername, sizeof(sendername));
printf("Admin %s benutzt den Befehl /givemoney", sendername);
Natürlich kannst du noch weitere Parameter außer dem Namen anhängen, wie z.B. das Geld bzw den Empfänger usw.