Wenn du AddStaticPickup(1239,1,217.5414,78.1651,1005.0391); verwendest, brauchst du kein waffenscheinsybol=CreatePickup(1239,1,217.5414,78.1651,1005.0391);
Das ist unnötig.
new waffenscheinsybol = CreatePickup(1239, 1, 217.5414, 78.1651, 1005.0391);
Wenn du AddStaticPickup(1239,1,217.5414,78.1651,1005.0391); verwendest, brauchst du kein waffenscheinsybol=CreatePickup(1239,1,217.5414,78.1651,1005.0391);
Das ist unnötig.
new waffenscheinsybol = CreatePickup(1239, 1, 217.5414, 78.1651, 1005.0391);
Arbeitest du mit sscanf?
Hast du das included?
Dann wäre das nämlich viel einfacherer
Sag mir mal bei diesem Code, was passiert wenn du /uninvite eingibst.
if(strcmp(cmd, "/uninvite", true) == 0)
{
if(IsPlayerConnected(playerid))
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
return SendClientMessage(playerid, COLOR_GRAD1, "FEHLER: /uninvite [playerid] [Grund]");
new grund;
giveplayerid = ReturnUser(tmp);
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
return SendClientMessage(playerid, COLOR_GRAD1, "FEHLER: /uninvite [playerid] [Grund]");
grund = strval(tmp);
new para1;
para1 = ReturnUser(tmp);
if(SpielerInfo[playerid][sLeader] >= 1)
{
if(IsPlayerConnected(para1))
{
if(para1 != INVALID_PLAYER_ID)
{
if (SpielerInfo[para1][sMember] > 0)
{
if(SpielerInfo[playerid][sLeader] == SpielerInfo[para1][sMember])
{
GetPlayerName(para1, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
printf("AdmCmd: %s hat %s rausgeschmissen.", sendername, giveplayer);
format(string, sizeof(string), "LeaderCmd: %s hat dich aus deiner Fraktion geworfen. Grund: %s", sendername, grund);
SendClientMessage(para1, COLOR_LIGHTBLUE, string);
SendClientMessage(para1, COLOR_LIGHTBLUE, "* Nun bist du wieder Zivilist.");
gTeam[para1] = 3;
SpielerInfo[para1][pTeam] = 3;
SpielerInfo[para1][sMember] = 0;
SpielerInfo[para1][pRank] = 0;
SpielerInfo[para1][pChar] = 0;
new rand = random(sizeof(CIV));
SetSpawnInfo(para1, gTeam[para1], CIV[rand],0.0,0.0,0.0,0,0,0,0,0,0,0);
SpielerInfo[para1][pModel] = CIV[rand];
MedicBill[para1] = 0;
SpawnPlayer(para1);
format(string, sizeof(string), " Du hast %s mit Grund: %s aus seiner Fraktion geworfen.", giveplayer, grund);
SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
}
else
{
SendClientMessage(playerid, COLOR_GRAD1, " Der Spieler ist nicht in deiner Fraktion!");
}
}
else
{
SendClientMessage(playerid, COLOR_GRAD1, " Der Spieler ist bereits ein Mitglied einer Fraktion!");
}
}
else
{
SendClientMessage(playerid, COLOR_GRAD1, " Der Spieler ist unbekannt!");
}
}
else
{
SendClientMessage(playerid, COLOR_GRAD1, " Der Spieler ist nicht connected!");
}
}
else
{
SendClientMessage(playerid, COLOR_GRAD1, " Du bist kein Leader!");
}
}
return 1;
}
Versuche auch /uninvite SpielerID
Sorry.
Hatte ich überlesen.
if(!strcmp(cmd, "/zoneeinnehmen", true))
{
new pgang = GetPlayerFrac(playerid),
pzone = GetPlayerCurrentZone(playerid),
Counter = 0;
if(!IsPlayerInAnyGang(playerid))
return SendClientMessage(playerid, COLOR_RED, "Du bist in keiner Gang, die Gangzonen einnehmen darf!");
if(pzone == -1)
return SendClientMessage(playerid, COLOR_RED, "Du bist in keiner einnehmbaren Gangzone!");
if(Zonen[pzone][Angreifer] != -1)
return SendClientMessage(playerid, COLOR_RED, "Die Gangzone wird bereits angegriffen!");
if(Zonen[pzone][CurrentOwner] == pgang)
return SendClientMessage(playerid, COLOR_RED, "Diese Gangzone gehört bereits deine Gang!");
if(GangZonesFight[pzone] >= gettime())
return SendClientMessage(playerid, COLOR_RED, "Diese Gangzone wurde in den letzten 2 Stunden bereits angegriffen!");
for(new x, x < MAX_PLAYERS; x++)
if(GetPlayerFrac(x) == Zonen[pzone][CurrentOwner])
Counter++;
if(Counter < 1)
return SendClientMessage(playerid, COLOR_RED, "Mindestens ein Gegner muss online sein!");
Zonen[pzone][Angreifer] = pgang;
Zonen[pzone][AngriffsTimer] = SetTimerEx("OnAttackSuccess", 320000, 0, "d", pzone);
GangZonesFight[pzone] = gettime() + (60 * 60 * 2);
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) && !IsPlayerNPC(i))
{
if(GetPlayerFrac(i) == Zonen[pzone][CurrentOwner])
{
SendClientMessage(i,COLOR_YELLOW,"-------------------------------------------------------------------------------------------------");
SendClientMessage(i,COLOR_YELLOW," Eine Gangzone wird angegriffen. Begib dich schnell zur Zone und benutze /zoneverteidigen!");
SendClientMessage(i,COLOR_YELLOW,"-------------------------------------------------------------------------------------------------");
}
if(GetPlayerFrac(i) == Zonen[pzone][Angreifer])
{
SendClientMessage(i,COLOR_YELLOW,"-------------------------------------------------------------------------------------------------");
SendClientMessage(i,COLOR_YELLOW," Deine Gang nimmt gerade eine Gangzone ein. Helf ihnen dabei die Verteidiger auszuschalten!");
SendClientMessage(i,COLOR_YELLOW,"-------------------------------------------------------------------------------------------------");
}
}
}
SaveZones();
UpdateZones();
return 1;
}
ApplyAnimation(xxx);
TogglePlayerControllable(playerid,false);
umdrehen?
Erst TogglePlayerControllable(playerid,false);
Danach die Animation Applyn
Oder was meinst du?
Ganz am Anfang des Scriptes fügst du folgendes ein:
new GangZonesFight[99];
Also nicht Zeile 1, sondern eben dann Zeile 20 oder 30
if(!strcmp(cmd, "/zoneeinnehmen", true))
{
new pgang = GetPlayerFrac(playerid),
pzone = GetPlayerCurrentZone(playerid);
if(!IsPlayerInAnyGang(playerid))
return SendClientMessage(playerid, COLOR_RED, "Du bist in keiner Gang, die Gangzonen einnehmen darf!");
if(pzone == -1)
return SendClientMessage(playerid, COLOR_RED, "Du bist in keiner einnehmbaren Gangzone!");
if(Zonen[pzone][Angreifer] != -1)
return SendClientMessage(playerid, COLOR_RED, "Die Gangzone wird bereits angegriffen!");
if(Zonen[pzone][CurrentOwner] == pgang)
return SendClientMessage(playerid, COLOR_RED, "Diese Gangzone gehört bereits deine Gang!");
if(GangZonesFight[pzone] >= gettime())
return SendClientMessage(playerid, COLOR_RED, "Diese Gangzone wurde in den letzten 2 Stunden bereits angegriffen!");
Zonen[pzone][Angreifer] = pgang;
Zonen[pzone][AngriffsTimer] = SetTimerEx("OnAttackSuccess", 320000, 0, "d", pzone);
GangZonesFight[pzone] = gettime() + (60 * 60 * 2);
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) && !IsPlayerNPC(i))
{
if(GetPlayerFrac(i) == Zonen[pzone][CurrentOwner])
{
SendClientMessage(i,COLOR_YELLOW,"-------------------------------------------------------------------------------------------------");
SendClientMessage(i,COLOR_YELLOW," Eine Gangzone wird angegriffen. Begib dich schnell zur Zone und benutze /zoneverteidigen!");
SendClientMessage(i,COLOR_YELLOW,"-------------------------------------------------------------------------------------------------");
}
if(GetPlayerFrac(i) == Zonen[pzone][Angreifer])
{
SendClientMessage(i,COLOR_YELLOW,"-------------------------------------------------------------------------------------------------");
SendClientMessage(i,COLOR_YELLOW," Deine Gang nimmt gerade eine Gangzone ein. Helf ihnen dabei die Verteidiger auszuschalten!");
SendClientMessage(i,COLOR_YELLOW,"-------------------------------------------------------------------------------------------------");
}
}
}
SaveZones();
UpdateZones();
return 1;
}
Was geht denn nicht?
Was gibst du ein?
Was bekommst du für eine Meldung?
Also Nummer 1 machst du so.
Die Funktion oben da musste eben einfügen, wie du deine Newbie Roller definierst.
Bei Nummer 2 kann ich nur sagen:
Mach ne Teamabfrage rein und lass die einfach für Teamler immer offen.
Ist doch besser!?
stock isNewbieRoller(vehicleid)
{
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (!strcmp(cmdtext, "/zu", true) || !strcmp(cmdtext, "/lock", true))
{
if(IsPlayerInAnyVehicle(playerid))
{
new Status = GetPlayerState(playerid),
vehicleid = GetPlayerVehicleID(playerid);
if(isNewbieRoller(vehicleid))
return SendClientMessage(playerid, COLOR_GREY, "Du kannst keinen Newbie Roller abschließen!");
if(Status != PLAYER_STATE_DRIVER)
return SendClientMessage(playerid, COLOR_GREY, "Nur der Fahrer kann abschliessen!");
for(new i = 0; i < MAX_PLAYERS; i++)
if(i != playerid)
SetVehicleParamsForPlayer(vehicleid, i, 0, 1);
new Float:Pos[3];
SendClientMessage(playerid, COLOR_GREEN, "Fahrzeug abgeschlossen");
GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
PlayerPlaySound(playerid, 1056, Pos[0], Pos[1], Pos[2]);
}
else
SendClientMessage(playerid, COLOR_RED, "Du kannst nur in einem Auto ein Fahrzeug abschliessen!");
return 1;
}
if (!strcmp(cmdtext, "/auf", true) || !strcmp(cmdtext, "/unlock", true))
{
if(IsPlayerInAnyVehicle(playerid))
{
new Status = GetPlayerState(playerid),
vehicleid = GetPlayerVehicleID(playerid);
if(isNewbieRoller(vehicleid))
return SendClientMessage(playerid, COLOR_GREY, "Du kannst keinen Newbie Roller abschließen!");
if(Status != PLAYER_STATE_DRIVER)
return SendClientMessage(playerid,COLOR_RED,"Nur der Fahrer hat den Schluessel zum aufschliessen!");
for(new i = 0; i < MAX_PLAYERS; i++)
SetVehicleParamsForPlayer(vehicleid,i, 0, 0);
SendClientMessage(playerid, COLOR_GREEN, "Fahrzeug aufgeschlossen");
new Float:Pos[3];
GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
PlayerPlaySound(playerid, 1057, Pos[0], Pos[1], Pos[2]);
}
else
SendClientMessage(playerid, COLOR_GREY, "Du bist in keinem Fahrzeug!");
return 1;
}
//} // Ende des OnPlayerCommandText()
Wie?
Wenn du mir nichts geben willst, dann nehm das, was ich dir oben geschrieben habe.
Ich "will" nix von dir
du machst dir arrays für die maps.
Maps[3][100];
Dann hast du 3 Maps.
die definierst du so:
Maps[0][0] = CreateObject(...);
Maps[0][1] = CreateObject(...);
Maps[0][2] = CreateObject(...);
Das wäre Map 1.
Für Map 2 ersetzt du Maps[0] durch Maps[1];
Für das wechseln machst du dann die Löschung der einen Objekte.
for(new x; x < 100; x++)
{
DestroyObject(Maps[0][x]);
}
mit filterscripts das zu machen is doof.
Dann mach du lieber deine 3 Maps und schick mir das Script, dann bau ich dir das ein
Haste mehr von als wenn du für jedes ein Filterscript lädst.
Wenn du es trotzdem machen willst, machst du beim Filterscript einfach oben ein Array:
new Map[100];
Dann bei OnFilterscriptInit:
Map[0] = CreateObject(...);
Map[1] = CreateObject(...);
Map[2] = CreateObject(...);
bis 99, ggf. die 100 anpassen
Bei OnFilterscriptExit machst du dann:
for(new x; sizeof Map; x++)
{
DestroyObject(Map[x]);
}
Und schon haste deine Filterscripte.
Fehler war, dass keine einzige AddPlayerClass eingebaut war/ist.
AddPlayerClass(0,0,0,0,0,0,0,0,0,0,0); // :) [Fix] By Bubelbub
das wurde jetzt bei OnGameModeInit eingefügt.
Und schon gehts.
Ja wenn keine Filtersripts o.ä. ´benötigt werden dann kannste mir/uns das gerne mal schicken.
Dann schmeißen wir unsere localen Sevrer an und checken das.
Lösung 1:
Zeile 351
//forward split(const strsrc[],strdest[][],delimiter);
Zeile 2261
// nicht verändert
public split(const strsrc[],strdest[][],delimiter)
{
new aNum, len, i, li;
while(i <= strlen(strsrc))
{
if(strsrc[i] == delimiter || i == strlen(strsrc))
{
len = strmid(strdest[aNum],strsrc,li,i,128);
strdest[aNum][len] = false;
li = i+1;
aNum++;
}
i++;
}
return 1;
}
Lösung 2:
Zeile 351
forward split(const strsrc[],strdest[][],delimiter); // nicht verändert
Zeile 2261
/*public split(const strsrc[],strdest[][],delimiter)
{
new aNum, len, i, li;
while(i <= strlen(strsrc))
{
if(strsrc[i] == delimiter || i == strlen(strsrc))
{
len = strmid(strdest[aNum],strsrc,li,i,128);
strdest[aNum][len] = false;
li = i+1;
aNum++;
}
i++;
}
return 1;
}*/
Lösung 3:
Zeile 351
//forward split(const strsrc[],strdest[][],delimiter);
Zeile 2261
/*public split(const strsrc[],strdest[][],delimiter)
{
new aNum, len, i, li;
while(i <= strlen(strsrc))
{
if(strsrc[i] == delimiter || i == strlen(strsrc))
{
len = strmid(strdest[aNum],strsrc,li,i,128);
strdest[aNum][len] = false;
li = i+1;
aNum++;
}
i++;
}
return 1;
}*/
new MyCarArray[MAX_VEHICLES];
OnPlayerText(playerid, text[])
{
if(!strcmp(text, "spawnmyvehicle"))
{
new Car,
Float:Pos[4];
GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
GetPlayerFacingAngle(playerid, Pos[3]);
Car = CreateVehicle(411, Pos[0], Pos[1], Pos[2], Pos[3], 0, 0, -1);
MyCarArray[Car] = 1;
PutPlayerInVehicle(playerid, Car, 0);
return 1;
}
return 0;
}
OnVehicleDeath(vehicleid, killerid)
{
if(MyCarArray[vehicleid] == 1)
{
DestroyVehicle(vehicleid);
MyCarArray[vehicleid] = 0;
return 1;
}
}
1.) Fahrzeug wird erstellt
2.) Fahrzeug wird beim Verschrotten gelöscht
ich brauch mal deine Zeilen:
17
4303
4307
4508
13362
da kommen jetz neue fehler :O
hast du teamviewer oder so?
dann kann ich dir das ganze mal fixen.
die mtheode mit den zeilen kann man bei so vielen fehlern knicken.
Dann schick mal bitte den Fehlerlog, nachdem du folgendes bearbeitet hast.
fdduty = CreatePickup(1275,23,1359.8162,-1661.1141,13.5651); //Fire Department Pickup
Spieler[playerid][pFD] = false;
if(gMenu[playerid] == 1)
return 1;
ShowMenuForPlayer(bar, playerid);
gMenu[playerid] = 1;
return 1;
}
if(pickupid == fdduty)
{
if(Spieler[playerid][pDuty] == 0 && Spieler[playerid][pFD] > 0)
{
format(string,sizeof(string),"%s beginnt den Dienst als Feuerwehrmann beim SA-FD", ThePlayer);
SendClientMessageToAll(COLOR_YELLOW, string);
SetPlayerColor(playerid, COLOR_WHITE);
SetPlayerSkin(playerid, 277);
Spieler[playerid][pDuty] = 4;
}
else if(Spieler[playerid][pDuty] == 4 && Spieler[playerid][pFD] > 0)
{
format(string,sizeof(string),"%s beendet den Dienst als Feuerwehrmann beim SA-FD", ThePlayer);
SendClientMessageToAll(COLOR_YELLOW, string);
SetPlayerColor(playerid, COLOR_GREY);
SetPlayerSkin(playerid, Spieler[playerid][pSkin]);
Spieler[playerid][pDuty] = 0;
}
return 1;
}
return 0;
}
public OnPlayerSelectedMenuRow(playerid, row)
{
new Float:A_XYZA;
if(!dini_Isset("cars.cfg", INFO)) { return 1; }
A_XYZA = dini_Float("cars.cfg", INFO);
Vehicle[v][vZ] = A_XYZA;
format(INFO, sizeof(INFO), "A[%d]",v);
if(!dini_Isset("cars.cfg", INFO)) { return 1; }
A_XYZA = dini_Float("cars.cfg", INFO);
Vehicle[v][vA] = A_XYZA;
Och menno.
public GetStreamerObjectPos(stream_id,&Float:x,&Float:y,&Float:z)
{
if(stream_id > MAX_STREAM || stream_id < 0)return 0;
if(!bfxobject[stream_id][exist])return 0;
new foundno = 0;
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i) || IsPlayerNPC(i))continue;
if(ERSTELLT[i][stream_id])
{
GetPlayerObjectPos(i,OBJ_ID[i][stream_id],x,y,z);
foundno = 1;
break;
}
}
/*x = bfxobject[stream_id][ox];
y = bfxobject[stream_id][oy];
z = bfxobject[stream_id][oz];*/
return 1;
}
Wenn das auch nicht geht empfehle ich dir auf den Streamer V4 umzusteigen:
http://pastebin.com/mBqnTUgi
/aeinstellen 1 TEAM 3
Mit meinem Script Teil versuch mal folgendes:
/aeinstellen 1 3 TEAM
Gegenleistungen? oder ähnliches
Ja aber da haben wir es doch!
Alle Bedingungen müssen FALSCH sein.
Also NICHT WAHR.
Das bedeutet die ersten beiden sind nicht wahr.
Die Dritte aber!
Das bedeutet hier, wo die Position ausgegeben werden soll, hört er auf.
if(!foundno)
{
x = bfxobject[stream_id][ox];
y = bfxobject[stream_id][oy];
z = bfxobject[stream_id][oz];
}
Das bedeutet es stimmt hiermit etwas nicht:
new foundno = 0;
for(new i = 0;i<MAX_PLAYERS;i++)
{
if(!IsPlayerConnected(i) || IsPlayerNPC(i))continue;
if(ERSTELLT[i][stream_id])
{
GetPlayerObjectPos(i,OBJ_ID[i][stream_id],x,y,z);
foundno = 1;
break;
}
}
Probiere mal bitte folgendes Script aus.
public GetStreamerObjectPos(stream_id,&Float:x,&Float:y,&Float:z)
{
if(stream_id > MAX_STREAM || stream_id < 0)return 0;
if(!bfxobject[stream_id][exist])return 0;
new foundno = 0;
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i) || IsPlayerNPC(i))continue;
if(ERSTELLT[i][stream_id])
{
GetPlayerObjectPos(i,OBJ_ID[i][stream_id],x,y,z);
foundno = 1;
break;
}
}
x = bfxobject[stream_id][ox];
y = bfxobject[stream_id][oy];
z = bfxobject[stream_id][oz];
return 1;
}