Alles anzeigenHey,
hab die 2. Variante genommen also das mit den Kein Schlüssel.
Da kommt der Error :
C:\Users\Safa\Desktop\Server\gamemodes\gamemode.pwn(13264) : error 017: undefined symbol "IsATrashmaster"
Hast du das drinne?
Alles anzeigenHey,
hab die 2. Variante genommen also das mit den Kein Schlüssel.
Da kommt der Error :
C:\Users\Safa\Desktop\Server\gamemodes\gamemode.pwn(13264) : error 017: undefined symbol "IsATrashmaster"
Hast du das drinne?
versuch mal folgendes, habe den code von oben etwas überarbeitet...
Das hier musst du unter OnPlayerStateChange einfügen & das bei EnterVehicle entfernen...
if(newstate == PLAYER_STATE_DRIVER)
{
new carid = GetPlayerVehicleID(playerid);
if(IsATrashmaster(carid))
{
if(pInfo[playerid][job] != 6)
{
RemovePlayerFromVehicle(playerid);
SendClientMessage(playerid, GRAU, "Du darfst dieses Fahrzeug nicht fahren.");
}
else SendClientMessage(playerid, GELB, "Um eine Runde zu starten, nutze /garbage (Partner).");
}
}
Alles anzeigen
forward IsATrashmaster(carid);
public IsATrashmaster(carid)
{
new realcarid;
realcarid = GetVehicleModel(carid);
if(realcarid == 408)
{
return 1;
}
return 0;
}
Alles anzeigen
Falls du das so machen möchtest, dass man einsteigen kann aber den Motor nicht starten kann solltest du dies folgendermaßen machen:
new bool: MotorAktiv[MAX_PLAYERS];
Unter OnPlayerEnterVehicle folgendes einfügen:
if(IsATrashmaster(vehicleid))
{
if(pInfo[playerid][job] == 6) { }
else MotorAktiv[playerid] == true;
}
Unter OnPlayerExitVehicle:
Und den Motor start befehl ändern:
ocmd:motor(playerid,params[])
{
if(GetPlayerState(playerid)!= PLAYER_STATE_DRIVER)return SendClientMessage(playerid,GRAU,"Du musst der Fahrer eines Fahrzeuges sein.");
if(IsABike(GetPlayerVehicleID(playerid)))return SendClientMessage(playerid,GRAU,"Dieses Fahrzeug hat keinen Motor.");
//Motor an/aus
new vid=GetPlayerVehicleID(playerid),
tmp_engine,
tmp_lights,
tmp_alarm,
tmp_doors,
tmp_bonnet,
tmp_boot,
tmp_objective;
for(new i=0; i<GetMaxPlayers(); i++)
{
if(!PlayerOnline(i))continue;
if(vid==PlayerCar[i][slot1] || vid==PlayerCar[i][slot2] || vid==PlayerCar[i][slot3])
{
if(i==playerid)goto next;
else{SendClientMessage(playerid,GRAU,"Du besitzt keine Schlüssel für dieses Fahrzeug.");return 1;}
}
}
next:
GetVehicleParamsEx(vid , tmp_engine,tmp_lights,tmp_alarm,tmp_doors,tmp_bonnet,tmp_boot,tmp_objective);
if(tmp_engine==1)
{
if(MotorAktiv[playerid] == true) return SendClientMessage(playerid, -1, "Du besitzt keinen Schlüssel!");
new basic_floats;
new ptext[128];
format(ptext,sizeof(ptext),"* %s schaltet den Motor aus.",PlayerName(playerid));
SendClientMessage(playerid,0x00ADD1FF,"Du stellst den Motor ab.");
for(new i=0;i<GetMaxPlayers();i++)
{
GetPlayerPos(playerid,x,y,z);
if(IsPlayerInRangeOfPoint(i,12.0,x,y,z))
{
if(i!=playerid)
{
SendClientMessage(i,COLOR_ACTION,ptext);
}
}
}
tmp_engine = 0;
}
else
{
if(vTank[vid]>1)
{
new ptext[128];
new basic_floats;
format(ptext,sizeof(ptext),"* %s betätigt die Zündung. Der Motor springt an.",PlayerName(playerid));
SendClientMessage(playerid,0x00ADD1FF,"Du betätigst die Zündung.");
for(new i=0;i<GetMaxPlayers();i++)
{
GetPlayerPos(playerid,y,y,z);
if(IsPlayerInRangeOfPoint(i,12.0,x,y,z))
{
if(i!=playerid)
{
SendClientMessage(i,COLOR_ACTION,ptext);
}
}
}
KillTimer(TankTimer[GetPlayerVehicleID(playerid)]);
TankTimer[GetPlayerVehicleID(playerid)]=SetTimerEx("VehicleTankUpdate",3*60000,true,"i",GetPlayerVehicleID(playerid));
tmp_engine = 1;
}
else
{
if(vTank[vid]==5000) return 1;
tmp_engine=0;
GameTextForPlayer(playerid,"~g~Der Tank ist leer!",5000,3);
}
}
SetVehicleParamsEx(vid , tmp_engine,tmp_lights,tmp_alarm,tmp_doors,tmp_bonnet,tmp_boot,tmp_objective);
return 1;
}
Alles anzeigen
Ich hoffe ich konnte dir weiterhelfen
poste bitte deinen Motor start befehl, dann können wir das ergänzen
Schau dir mal diesen Callback für Textdraws an:
TextdrawSetString
PlayerTextDrawSetString
in diesem Fall solltest du beim Update folgendes machen:
forward UpdateDraw(playerid);
public UpdateDraw(playerid)
{
new string[56], string2[56];
format(string,sizeof string,"Wantedlevel: %i",sInfo[playerid][wanted]);
format(string2,sizeof string2,"Payday %i/60",sInfo[playerid][payday]);
TextDrawSetString(Wanted, string);
TextDrawSetString(paytime string);
return 1;
}
ändere außerdem das noch:
SetTimerEx("UpdateDraw",30000, false, "i", playerid);
Hey, ich hab eine Frage undzwar versuche ich Warnlichter an den Towtruck zu setzen.
Code:
light1[GetPlayerVehicleID(playerid)] = CreateObject(19154,-0.0089111328, 0.273193359, 1.4037838, 0.0, 0.0, 96.0);
light2[GetPlayerVehicleID(playerid)] = CreateObject(19154,-0.0089111328, 0.273193359, 1.4037838, 0.0, 0.0, 96.0);
light3[GetPlayerVehicleID(playerid)] = CreateObject(19154,-0.0089111328, 0.273193359, 1.4037838, 0.0, 0.0, 96.0);
light4[GetPlayerVehicleID(playerid)] = CreateObject(19154,-0.0089111328, 0.273193359, 1.4037838, 0.0, 0.0, 96.0);
light5[GetPlayerVehicleID(playerid)] = CreateObject(19154,-0.0089111328, 0.273193359, 1.4037838, 0.0, 0.0, 96.0);
AttachObjectToVehicle(light1[GetPlayerVehicleID(playerid)], GetPlayerVehicleID(playerid), -0.0089111328, -0.5, 1.55, 0.0, 0.0, 0.0);
AttachObjectToVehicle(light2[GetPlayerVehicleID(playerid)], GetPlayerVehicleID(playerid), -0.5, -0.5, 1.55, 0.0, 0.0, 0.0);
AttachObjectToVehicle(light3[GetPlayerVehicleID(playerid)], GetPlayerVehicleID(playerid), 0.5, -0.5, 1.55, 0.0, 0.0, 0.0);
AttachObjectToVehicle(light4[GetPlayerVehicleID(playerid)], GetPlayerVehicleID(playerid), -0.5, 2.75, 0.6, 0.0, 0.0, 0.0);
AttachObjectToVehicle(light5[GetPlayerVehicleID(playerid)], GetPlayerVehicleID(playerid), 0.5, 2.75, 0.6, 0.0, 0.0, 0.0);
Sobald ich den Befehl eingegeben habe, wir ausgeschrieben das ich die Warnlichter angebracht habe, jedoch passiert nichts...
Habe alles neu gesetzt aber es blinkt nicht bzw wird nicht an das Fahrzeug atteched...
Habe ich einen Denkfehler gemacht?
Also ich Verwende
sscanf(_money, "p<.>dd", dollars, cents);
ah okey, würde das ebenfalls beim IP split gehen?
wie würde das denn mit Float funktionieren?
könnte mir jemand einen kleinen Beispielcode zeigen?
//Edit:
mit welcher Variante könnte ich IP's splitten?
Variante 1:
stock IPSplit(playerid)
{
new PlayerIP[16], SplitIp[4][3];
GetPlayerIp(playerid, PlayerIP, sizeof(PlayerIP));
split(SplitIp, PlayerIP, '.');
return // ???
}
Variante 2:
Hallo Breadfish-Community,
ich möchte das Geld splitten lassen, da ich nicht im 10-er Bereich abziehen möchte,
sprich nicht 10€ sondern 9,95$ z.B. oder nicht 150$ sondern 149,50$
Die dazugehörige Funktion heißt "split" das weiß ich, nur ich habe mit der split-Funktion noch nichts gescriptet gehabt...
Wie könnte ich mit folgender split Funktion einen stock scripten?
Function split(const strsrc[], strdest[][], delimiter)
{
new i, li;
new aNum;
new len;
while(i <= strlen(strsrc)){
if(strsrc[i]==delimiter || i==strlen(strsrc)){
len = strmid(strdest[aNum], strsrc, li, i, 128);
strdest[aNum][len] = 0;
li = i+1;
aNum++;
}
i++;
}
return 1;
}
Alles anzeigen
Und wenn ich ein 16 stellige Zahlen, welche mit einem "." getrennt sind splitten?
Ich möchte nämlich eine angabenfenster haben, welches prüft ob die anfangs 10 Zahlen stimmen...
Vielen Dank im Vorraus
hey,
es werden beim folgenden Code die Accounts in der Datenbank immer verdoppelt.
Sprich wenn sich ein neuer Spieler registriert wird sein Account in der Datenbank doppelt gespeichert... und kann sich so nicht mehr anmelden...
Code:
Function OnPlayerRegister(playerid, password[])
{
if(IsPlayerConnected(playerid))
{
new name[MAX_PLAYER_NAME],query[128],passwort[50],string[100], year, month, day;
getdate(year, month, day);
GetPlayerName(playerid,name,sizeof(name));
mysql_escape_string(password,passwort,dbhandle);
format(query, sizeof(query), "INSERT INTO accounts (Name, Passwort, Registrierungsdatum) VALUES ('%s',MD5('%s'),'%d.%d.%d')",name, passwort, day, month, year);
mysql_function_query(dbhandle,query,false,"","");
ShowPlayerDialog // Dialog für das Login wird angezeigt
}
return 1;
}
Alles anzeigen
Habe den Query geprintet und es wir mir nur einmal angezeigt, in der Datenbank jedoch ist der Account Doppelt
Was habe ich denn da falsch gemacht? Ich vermute es ist wieder ein Denkfehler oder so...
//Edit:
Ist es möglich 2 Primary Keys zu vergeben, denn einen Primary Key verwende ich für die Spalte ID.
Wenn ich 2 Primary Keys hätte ebenfalls beim Namen, dann würde doch nur eines der neu registrierten Accounts da stehe nund nicht doppelt... Aber ich verstehe nicht warum 2 Accounts gleiche Accounts gespeichert werden...
//Edit2:
Fehler behoben, lag darin das ich die selben querys in dem Function verwendet hatte und beim 2. falsche Datenbank eingetragen habe^^
Erledigt
Hallo,
ich hab ne Frage undzwar ist es möglich die Lebensanzeige eines Spielers zu "entfernen" oder ähnliches?
Sprich wenn mir gegenüber ein Spieler ist sehe ich ja sein Namen und seine Lebensanzeige...
Gibts dafür einen Callback, suche nämlich schon sehr lange danach...
Kann mir jemand weiterhelfen?
Vielen Dank im vorraus
Function LoadWaffen()
{
new num_fields, num_rows;
cache_get_data(num_rows, num_fields, dbhandle);
if(num_rows > 0)
{
for(new i = 0; i < num_rows; i++)
{
FraktionInfo[i][Info_Waffe1_1] = cache_get_field_content_int(i,"Waffe1_1",dbhandle);
FraktionInfo[i][Info_Slot1_1] = cache_get_field_content_int(i,"Slot1_1",dbhandle);
FraktionInfo[i][Info_Waffe2_1] = cache_get_field_content_int(i,"Waffe2_1",dbhandle);
FraktionInfo[i][Info_Slot2_1] = cache_get_field_content_int(i,"wSlot2_1",dbhandle);
FraktionInfo[i][Info_Waffe3_1] = cache_get_field_content_int(i,"Waffe3_1",dbhandle);
FraktionInfo[i][Info_Slot3_1] = cache_get_field_content_int(i,"Slot3_1",dbhandle);
printf("Slot3: %i", FraktionInfo[i][Info_Slot3_1]);
}
}
return 1;
}
Alles anzeigen
So lade ich die Waffen....
Ich habe aber mal die continues entfernt und teste es dann mal so...
Aber ich habe nichts überschrieben wegen den Ammo's....
Okay also gebe mal über ein print die Variablen aus
Stimmt, siehste daran hab ich grad nicht gedacht
Folgendes habe ich geprintet bekommen:
[15:46:46] Slot3: 50 // Das hier zeigt an was gerade aus der Datenbank geladen wurde für die Waffen-Slot ID (in dem Fall für die Schrotflinte)
[15:47:26] Waffe: 3 | Ammo: 2 // ab hier zeigt er mir was ich für Waffen bekommen habe wenn ich den Befehl eingebe
[15:47:26] Waffe: 25 | Ammo: 0 // Warum ist hier eine '0' wenn oben '50' Ammo geladen wurde? Ich checks irgendwie gerade nicht :o
[15:47:26] Waffe: 34 | Ammo: 50
( Hab mal paar Kommentare hinzugefügt )
Ich verstehe nicht warum beim ausführen des Befehls Ammo '0' steht aber beim laden 50?
for(new i = 0; i < sizeof(FraktionInfo); i++)
{
if(IsPlayerInFrac(playerid, GetPlayerFaction(playerid)) == FraktionInfo[i][Info_Fraktion])
{
if(PlayerInfo[playerid][pRank] >= FraktionInfo[i][Info_Rang1])
{
if(!strlen(FraktionInfo[i][Info_Waffe1_1])) continue;
else GivePlayerWeapon(playerid, FraktionInfo[i][Info_Waffe1_1], FraktionInfo[i][Info_Slot1_1]);
if(!strlen(FraktionInfo[i][Info_Waffe2_1])) continue;
else GivePlayerWeapon(playerid, FraktionInfo[i][Info_Waffe2_1], FraktionInfo[i][Info_Slot2_1]);
if(!strlen(FraktionInfo[i][Info_Waffe3_1])) continue;
else GivePlayerWeapon(playerid, FraktionInfo[i][Info_Waffe3_1], FraktionInfo[i][Info_Slot3_1]);
}
else SendClientMessage(playerid, COLOR_WHITE, "Dein Rang ist zu {FF8484}niedrieg{FFFFFF}!"); break;
}
}
Alles anzeigen
So gebe ich ihm die Waffe aus der Datenbank wird alles erfolgreich geladen.
Hier ein Screenshot von meiner Datenbank:
Screenshot (247).png
Schlagstock bekommt der Spieler ^^.
Ammoanzahl des Scharfschützengewähres stimmt ebenfalls, nur für die Schrotflinte nicht
Ah okey, ja dann weiß ich bescheid wegen dem Inventarsystem
Bin aufjedenfall gespannt wann denn das neue SA:MP Update verfügbar ist
Zurück zu den Slot-ID's.
Habe nun per Befehl dem Spieler einen Scharfschützengewähr ( 50 Ammo ) und eine Schrotflinte( 50 Ammo ) dem Spieler gegeben.
Er bekommt alle beide Waffen in die Hand obwohl es die beiden Slot-ID's sind aber die Schrotflinte hat nur 1 Ammo ...
Ähm kann man dies umgehen oder kommt das daher wegen der Slot-ID?
Eine Waffe mit 0 Schuss kann nicht gehalten werden, außer man löst es mit SetPlayerAttachedObject, was allerdings ziemlich umständlich wäre.
Ah okey, vielen Dank für die Information
Gut dann geht das nicht was ich vorhatte :3
Pro Slot kann eine Waffe aufgenommen werden.
Stimmt, da war ja was mit Slot-ID's
Gut vielen Dank für deine schnelle Antwort!
Frage hätte ich undzwar nehmen wir an ich möchte ein Scharfschützengewähr und eine Country Rifle haben,
beide besitzen die Slot-ID 6, würde das bedeuten das ich dann nur eine der Waffen hätte?
Guten Abend Breadfish-Community,
ich hätte Fragen bezüglich der Waffen...
Wie viel Waffen kann ein Spieler tragen?
Gibt es hier einen Limit?
Wenn ich mich nicht irre kann man bis zu 5 Waffen haben, stimmt das?
Und die andere Frage lautet, kann man festsetzen das wenn die Waffe kein Ammo mehr hat das die Waffe trotzdem in der Hand bleibt und nicht einfach verschwindet?
Ist das überhaupt möglich?
Hoffe mir kann jemand weiterhelfen
Vielen Dank im Vorraus.
ändere mal SetPlayerToPos zu SetPlayerPos
Und wegen SetPlayerCameraPos schau dir mal hier den Wiki eintrag an:
[wiki]https://wiki.sa-mp.com/wiki/SetPlayerCameraPos[/wiki]
Eventuell hast du was falsches Kopiert...