tlInfo[][TextLabelPos]
zu
tlInfo[1][TextLabelPos]
tlInfo[][TextLabelPos]
zu
tlInfo[1][TextLabelPos]
@[LnD]JustMe.77 https://wiki.sa-mp.com/wiki/SetCameraBehindPlayer
SetCameraBehindPlayer(playerid);
Das kommt ins Script und jeder User muss sich die Dateien da runterladen damit das funktioniert. Anders geht's nicht weil es Server-Side nicht möglich ist, außer du machst lagcompmode auf 1.
mh. gibt auch keine andere möglichkeit um herauszufinden, wo ein spieler hin schießt?
bzw. ob er auf ein objekt schießt`?
@Kaliber
Wie erstelle ich dann meinen Dialog?
new str[1000],gesstr[1000];
new id = GetGruppe(Spieler[playerid][Gruppe]);
str[0] = '\0';
for(new j = 0; j < sizeof GruppenWaffen; j++)
{
new str2[80];
format(str2,sizeof(str2),"%s\t$%d",GruppenWaffen[j][WaName],GruppenWaffen[j][WPreis]);
format(str,sizeof(str),"%s%s\n",str,str2);
format(gesstr,sizeof(gesstr),"Waffe\tPreis\n\%s",str);
}
return ShowPlayerDialog(playerid,DIALOG_W_FREISCHALTEN,DIALOG_STYLE_TABLIST_HEADERS,""SERVERNAME" | Waffen freischalten",gesstr,"Freischalten","Zurück");
Alles anzeigen
Hatte es vorher so
Um das möglich zu machen während lagcompmode auf 0 ist, musst du den beiliegenden Code bei der GitHub Beschreibung verwenden.
da sind aber einige dateien. wahrscheinlich ein plugin zum compilen oder so..
oder brauche ich das nicht, sondern nur den code:
// OnPlayerWeaponShot will be called in lagcompmode OFF servers.
public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
// it will be 0 in lagcompmode off servers
// and 1 with lag comp mode on servers.
// returning 0 always will prevent skin shoot in lagcompmode off servers.
return GetServerVarAsInt("lagcompmode");
// This will make skin shoot shots account to nothing.
}
oder gibt es andere möglichkeiten "OnPlayerWeaponShot" oder ähnliche Wege um schüsse abzufragen, bzw. deren richtung und so, MIT lagshot.
Ja
wie kann ich das nutzen? Muss man das irgendwie compilen ?
Elemente in dem Array
41
//Dummheit gelöscht.
aber klappt nicht: error 052: multi-dimensional arrays must be fully initialized
Der Tank wird als 0% angezeigt und öffentlich fahrzeuge gehen einfach wieder aus und private auch alle 3 sek
probiers so:
forward BenzinVerbrauch(tmpcar);
public BenzinVerbrauch(tmpcar)
{
new string[128], driverid = WhoIsDriver(tmpcar);
GetVehicleParamsEx(tmpcar, engine, lights, alarm, doors, bonnet, boot, objective);
if(engine == 1 && cInfo[tmpcar][ci_tank] == 0)
{
SetVehicleParamsEx(tmpcar, false, false, alarm, doors, bonnet, boot, objective);
Motor[tmpcar] = false;
Licht[tmpcar] = false;
SendClientMessage(driverid,Rot,"**Der Tank deines Fahrzeugs ist leer.");
format(string, sizeof(string), "Tank: %.1f%", cInfo[tmpcar][ci_tank]);
PlayerTextDrawSetString(driverid, Textdraw8[driverid], string);
return 1;
}
cInfo[tmpcar][ci_tank] -= 0.1;
format(string, sizeof(string), "Tank: %.1f%", cInfo[tmpcar][ci_tank]);
PlayerTextDrawSetString(driverid, Textdraw8[driverid], string);
return 1;
}
Alles anzeigen
Die 35 steht für die Anzahl der Elemente in dem Array
multi-dimensional arrays must be fully initialized
passt nicht
Wollte es halt nicht umständlich machen und für jede Gruppe jede Waffe einzeln speichern, ob freigeschaltet oder nicht..
Man sieht ja: Einfacher..
new GruppenWaffen[GWaffen][MAX_GRUPPEN][7] = {
Hatte ich auch schon probiert:
Initialization data exceeds declared size
Bei der 2. möglichkeit wird also der String im Textdraw nur aktualisiert wenn der Tank auf NULL ist. Will ja aktuelle zalhen haben
Das solltest du ersetzen ,
Möglichkeit 2:
forward BenzinVerbrauch(tmpcar);
public BenzinVerbrauch(tmpcar)
{
new string[128], driverid = WhoIsDriver(tmpcar);
if(cInfo[tmpcar][ci_tank] == 0)
{
GetVehicleParamsEx(tmpcar, engine, lights, alarm, doors, bonnet, boot, objective);
SetVehicleParamsEx(tmpcar, false, false, alarm, doors, bonnet, boot, objective);
Motor[tmpcar] = false;
Licht[tmpcar] = false;
SendClientMessage(driverid,Rot,"**Der Tank deines Fahrzeugs ist leer.");
format(string, sizeof(string), "Tank: %.1f%", cInfo[tmpcar][ci_tank]);
PlayerTextDrawSetString(driverid, Textdraw8[driverid], string);
return 1;
}
cInfo[tmpcar][ci_tank] -= 0.1;
format(string, sizeof(string), "Tank: %.1f%", cInfo[tmpcar][ci_tank]);
PlayerTextDrawSetString(driverid, Textdraw8[driverid], string);
return 1;
}
Alles anzeigen
Würde gerne einen Waffenfreischalt-Dialog machen:
enum GWaffen // GruppenWaffen Info
{
WaName[30],
wid,
WPreis,
WMunition,
MatsVerbrauch,
bool:wFrei
};
new GruppenWaffen[7][GWaffen][MAX_GRUPPEN] = {
//{"Schutzweste", -1, 200, 100, 1},
{"Desert Eagle", 24, 12200, 100, 6, false},
{"Schrotflinte", 25, 60350, 50, 3, false},
{"MP5", 29, 20040, 500, 10, false},
{"Sniper Rifle", 34, 50040, 50, 25, false},
{"AK47", 30, 350440, 500, 17, false},
{"M4", 31, 45500, 250, 22, false},
{"Rifle", 33, 10400, 40, 5, false}
};
Alles anzeigen
hatte so geklappt:
new str[1000],gesstr[1000];
new id = GetGruppe(Spieler[playerid][Gruppe]);
str[0] = '\0';
for(new j = 0; j < sizeof GruppenWaffen; j++)
{
new str2[80];
format(str2,sizeof(str2),"%s\t$%d",GruppenWaffen[j][WaName],GruppenWaffen[j][WPreis]);
format(str,sizeof(str),"%s%s\n",str,str2);
format(gesstr,sizeof(gesstr),"Waffe\tPreis\n\%s",str);
}
return ShowPlayerDialog(playerid,DIALOG_W_FREISCHALTEN,DIALOG_STYLE_TABLIST_HEADERS,""SERVERNAME" | Waffen freischalten",gesstr,"Freischalten","Zurück");
Alles anzeigen
Will halt jede Waffe pro Gruppe einzeln aktivieren oder deaktivieren, bzw das laden lassen etc.
habe aber folgenden Fehler:
error 052: multi-dimensional arrays must be fully initialized
hab schon nachgeguckt woran es liegen kann, nichts derartiges gefunden.
das mit der verzögerung liegt am timer.
dein tanktextdraw wird nicht aktualisiert, wenn der tank leer ist.
entweder du machst :
if(cInfo[tmpcar][ci_tank] == 0)
{
GetVehicleParamsEx(tmpcar, engine, lights, alarm, doors, bonnet, boot, objective);
SetVehicleParamsEx(tmpcar, false, false, alarm, doors, bonnet, boot, objective);
Motor[tmpcar] = false;
Licht[tmpcar] = false;
SendClientMessage(driverid,Rot,"**Der Tank deines Fahrzeugs ist leer.");
}
oder:
if(cInfo[tmpcar][ci_tank] == 0)
{
GetVehicleParamsEx(tmpcar, engine, lights, alarm, doors, bonnet, boot, objective);
SetVehicleParamsEx(tmpcar, false, false, alarm, doors, bonnet, boot, objective);
Motor[tmpcar] = false;
Licht[tmpcar] = false;
SendClientMessage(driverid,Rot,"**Der Tank deines Fahrzeugs ist leer.");
format(string, sizeof(string), "Tank: %.1f%", cInfo[tmpcar][ci_tank]);
PlayerTextDrawSetString(driverid, Textdraw8[driverid], string);
return 1;
}
Alles anzeigen
Habs über einen Timer gemacht.
funktioniert jetzt, danke dir.
Loadgruppen ist oben im Startpost,
Das Laden der Ammus:
for(new i = 0; i < sizeof Ammus; i++)
{
mysql_real_escape_string(Ammus[i][AmName], Ammus[i][AmName], dbhandle, 50);
format(Query, sizeof(Query), "SELECT * FROM `Ammus` WHERE `AmName` = '%s'", Ammus[i][AmName]);
mysql_query(dbhandle, Query);
mysql_store_result();
if(mysql_num_rows() == 0)
{
format(Query, sizeof(Query), "INSERT INTO `Ammus` (`AmName`) VALUES ('%s')", Ammus[i][AmName]);
mysql_query(dbhandle, Query);
}
else while(mysql_fetch_row(Query)) sscanf(Query, "p<|>{is[50]}ddd", Ammus[i][Erpresser], Ammus[i][Kasse], Ammus[i][Mats]);
mysql_free_result();
new dstr[200],bstr[30],tresentext[80];
CreateDynamicPickup(1239,1,Ammus[i][pick1x],Ammus[i][pick1y],Ammus[i][pick1z],-1);
CreateDynamicMapIcon(Ammus[i][pick1x],Ammus[i][pick1y],Ammus[i][pick1z], 6, 0, -1, -1, -1, 250.0);
if(Ammus[i][Erpresser] < 1) format(bstr,sizeof(bstr),"Keiner");
else if(GetGruppe(Ammus[i][Erpresser]) != -1) format(bstr,sizeof(bstr),"%s", Gruppen[GetGruppe(Ammus[i][Erpresser])][gName]);
else format(bstr,sizeof(bstr),"Keiner");
printf("Ammu: %d, Epresser: %d, bstr: %s", i, Ammus[i][Erpresser], bstr);
format(dstr,sizeof(dstr),"%s\nErpresser: %s",Ammus[i][AmName],bstr);
Ammutext[i] = CreateDynamic3DTextLabel(dstr,0xBBBBBBFF,Ammus[i][pick1x],Ammus[i][pick1y],Ammus[i][pick1z]+0.75,20.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1,0,0,-1,20.0);
format(tresentext,sizeof(tresentext),"%s\nDrücke 'F' um dir Waffen zu kaufen.",Ammus[i][AmName]);
AmmuTresenText[i] = CreateDynamic3DTextLabel(tresentext,0xBBBBBBFF,Ammus[i][pickupx],Ammus[i][pickupy],Ammus[i][pickupz],20.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1,Ammus[i][virt],Ammus[i][inter],-1,20.0);
}
Alles anzeigen
Die Ammus werden nach den Gruppen geladen.
[22:06:00] Ammu: 0, Epresser: 0, bstr: Keiner
[22:06:00] Ammu: 1, Epresser: 1, bstr: Keiner
d.h. bei erpresser keiner angezeigt
Ich kann die Funktion GetGruppe ja nicht in ongamemodeinit nutzen, ansonten lädt er mein ganzes zeug nicht.
Wie mache ich das ansonsten?
wie kann ich das nutzen? Muss man das irgendwie compilen ?