Muss ich dann das Textdraw bei OnPlayerStateChange auch noch formatieren ?
Und was wird bei OnPlayerUpdate gemacht? wird da automatisch jede Sekunde oder sowas das Callback neu ausgeführt?
Beiträge von IceWave
-
-
Hallo, und zwar habe ich ein Problem, mir wird nur 0km/h angezeigt
getPlayerSpeed(playerid)
{
new Float:x,Float:y,Float:z, Float:rtn;
if(IsPlayerInAnyVehicle(playerid))
{
GetVehicleVelocity(GetPlayerVehicleID(playerid),x,y,z);
}
else
{
GetPlayerVelocity(playerid,x,y,z);
}
rtn = floatsqroot(x*x + y*y + z*z);
return floatround(rtn * 100 * 1.61);
}Unter OnPlayerStateChange
if(newstate==PLAYER_STATE_DRIVER)
new string[128];
format(string,sizeof(string),"%i km/h",getPlayerSpeed(playerid));
Textdraw2[playerid] = CreatePlayerTextDraw(playerid, 370.625000, 168.583389, string);
PlayerTextDrawLetterSize(playerid, Textdraw2[playerid], 0.449999, 1.600000);
PlayerTextDrawAlignment(playerid, Textdraw2[playerid], 1);
PlayerTextDrawColor(playerid, Textdraw2[playerid], -1);
PlayerTextDrawSetShadow(playerid, Textdraw2[playerid], 0);
PlayerTextDrawSetOutline(playerid, Textdraw2[playerid], 1);
PlayerTextDrawBackgroundColor(playerid, Textdraw2[playerid], 51);
PlayerTextDrawFont(playerid, Textdraw2[playerid], 1);
PlayerTextDrawSetProportional(playerid, Textdraw2[playerid], 1);
PlayerTextDrawShow(playerid,PlayerText:Textdraw2[playerid]);Ist jetzt mein erstes Tacho, drum nicht wundern^^
-
ok, beim tacho zum Beispiel muss ich es aber bei OnPlayerStateChange machen oder?
Bei IsPlayerInVehicle würde es ja auch dem Beifahrer dann angezeigt werden -
Hi, ich habe in einem Tutorial gesehen, dass das Textdraw wenn man in einem Auto sitzt angezeigt wurde.
Ich würde dass jetzt einfach bei OnPlayerStateChange machen.Er hat das mit einer Schleife gemacht und überprüft IsPlayerInVehicle.
Bei meiner Variante muss ich natürlich bei OnPlayerExitVehicle die Textdraws hiden.
Und auch wenn man sich z.b. aus dem Auto rausportet würde bei meiner Variante der Textdraw noch angezeigt werden.Jetzt stell ich mir die Frage ob das nicht irgendwann zu Laggs führt?
Da werden ja dann durchgehend die Spieler (i) durchgegangen und abgefragt ob sie in einem Auto sitzen. -
Hat sich erledigt, habs gefunden. Danke
Noch was:
weißt du zufällig mit was für nem Plugin MrMonat arbeitet?Habe erst vor ca. 1-2 Monaten Mysql angefangen, deshalb kenne ich mich nicht so aus
-
ne beim Haussystem verwende ich momentan noch einen String
enum hausenum
{
Float:h_x,
Float:h_y,
Float:h_z,
Float:h_ix,
Float:h_iy,
Float:h_iz,
h_interior,
h_besitzer[MAX_PLAYER_NAME],
h_preis,
h_id,
h_pickup,
Text3D:h_text
}Müsste doch eigentlich funktionieren oder nicht?
Bitte um Hilfe..! -
Wieso sollte besitzer ein Integer sein???
Würde zwar mit der ID auch gehen, werde es auch wsl so machen,
aber ich möchte ja wissen wieso es mit dem Namen nicht geht. -
Funktioniert leider nicht, aber darin dass in h_besitzer der Name gespeichert wird liegt ja anscheinend nicht das Problem, weil die Textlabels werden ja mit dem Namen erstellt..
-
Hi, und zwar habe ich jetzt auf einmal das Problem, dass der Besitzer nicht in die Datenbank geschrieben wird.
Und zwar wenn ich das Haus kaufe. Das Textlabel wird erstellt mit dem Besitzernamen.
ocmd:hauskaufen(playerid,params[])
{
if(hatPlayerHaus(playerid))return SendClientMessage(playerid,ROT,"Du hast bereits ein Haus!");
for(new i=0; i<sizeof(hInfo); i++)
{
if(!hInfo[i][h_id])continue;
if(!IsPlayerInRangeOfPoint(playerid,2,hInfo[i][h_x],hInfo[i][h_y],hInfo[i][h_z]))continue;
if(!strlen(hInfo[i][h_besitzer]))
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
if(GetPlayerMoney(playerid)<hInfo[i][h_preis])return SendClientMessage(playerid,ROT,"Du hast nicht genügend Geld!");
GivePlayerMoney(playerid,-hInfo[i][h_preis]);
strmid(hInfo[i][h_besitzer],name,0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
updateHaus(i);
saveHaus(i);
return 1;
}
return SendClientMessage(playerid,ROT,"Das Haus steht nicht zum Verkauf!");
}
return 1;
}Das passiert unter updateHaus, wo hInfo[i][h_besitzer] abgefragt wird. das selbe mach ich beim speichern in die DB, funktioniert aber nicht.
saveHaus(id)
{
new query[128];
format(query,sizeof(query),"UPDATE house SET besitzer='%s', h_preis='%i' WHERE id='%i'",hInfo[id][h_besitzer],hInfo[id][h_preis],hInfo[id][h_id]);
mysql_function_query(dbverbindung, query, false,"","");
return 1;
}Typ des Feldes besitzer ist varchar max. Länge ist auf 35
-
achja wie d*** habs wieder nicht gesehen:D
Habs jetzt einfach zu !=0 gemacht.Danke, hat mir sehr geholfen!!!
-
Kann aber eigentlich auch nicht funktionieren,
die Vehicleid ist ja immer anders.. -
Danke für deine Hilfe!
Aber ich mach das ja vorallem zur Übung gerade, drum fände ich es gut, wenn mir vll jemand erklären könnte, was bei mir falsch ist..
-
Ja, aber die Schleife wird ja dann nicht abgebrochen.
-
ja aber wenn jetzt z.b. nur Haus 1,2,3 erstellt sind, dann sind ja die anderen alle nicht erstellt.
Würde ja bedeuten er Haus 1 2 3 = erstellt(1) Haus 4,5,6,..... erstellt = 0 Somit würde er einfach alle erstellen
-
sowie das jetzt gemacht ist von dir würde er ja komplett i durchlaufen und für jedes i ein Haus erstellen?
-
Sollte aber doch eigentlich auch mit h_id gehen?
Und h_id ist ja nicht gleich i ? Habe ja in der Datenbank nur "ID" die automatisch hochgezählt wird.
-
getFreeHouseID()
{
for(new i=0; i<sizeof(hInfo); i++)
{
if(hInfo[i][h_id]==0)return i;
}
return 0;
}public OnHausCreate(id)
{
hInfo[id][h_id]=cache_insert_id();
return 1;
} -
ocmd:createhaus(playerid,params[])
{
new preis,interior,Float:ixc,Float:iyc,Float:izc;
if(!IsPlayerAnAdmin(playerid,3))return SendClientMessage(playerid, ROT, "Du bist kein Admin oder dein Rang ist zu niedrig!");
if(sscanf(params,"iifff",preis,interior,ixc,iyc,izc))return SendClientMessage(playerid,ROT,"Befehl: /createhaus [PREIS][INTERIOR][INT-X][INT-Y][INT-Z]");
new Float:xc, Float: yc, Float:zc;
GetPlayerPos(playerid,xc,yc,zc);
new id=getFreeHouseID();
hInfo[id][h_x]=xc;
hInfo[id][h_y]=yc;
hInfo[id][h_z]=zc;
hInfo[id][h_ix]=Float:ixc;
hInfo[id][h_iy]=Float:iyc;
hInfo[id][h_iz]=Float:izc;
hInfo[id][h_interior]=interior;
hInfo[id][h_preis]=preis;
strmid(hInfo[id][h_besitzer],"",0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
updateHaus(id);
new query[256];
format(query,sizeof(query),"INSERT INTO house (h_x,h_y,h_z,h_ix,h_iy,h_iz,h_interior,preis) VALUES ('%f','%f','%f','%f','%f','%f','%i','%i')",xc,yc,zc,hInfo[id][h_ix],hInfo[id][h_iy],hInfo[id][h_iz],hInfo[id][h_interior],hInfo[id][h_preis]);
mysql_function_query(dbverbindung,query,true,"OnHausCreate","i",id);
return 1;
} -
hatte mich bei preis verschrieben.
Habe aber noch ein 2 Problem.und zwar kann ich nur das 1 erstellte Haus betreten, bzw bekomme eine Meldung wenn das Haus keinem gehört.
Bei den danach erstellten ist es wie wenn sie nicht da wären.ocmd:enter(playerid,params[])
{
for(new i=0; i<sizeof(bInfo); i++)
{
if(!IsPlayerInRangeOfPoint(playerid,2,bInfo[i][b_x],bInfo[i][b_y],bInfo[i][b_z]))continue;
SetPlayerPos(playerid,bInfo[i][b_ix],bInfo[i][b_iy],bInfo[i][b_iz]);
SetPlayerInterior(playerid,bInfo[i][b_interior]);
SetPlayerVirtualWorld(playerid,i);
return 1;
}
for(new i=0; i<sizeof(hInfo); i++)
{
if(!IsPlayerInRangeOfPoint(playerid,2,hInfo[i][h_x],hInfo[i][h_y],hInfo[i][h_z]))continue;
if(!hInfo[i][h_id])continue;
if(GetPlayerVirtualWorld(playerid)!=i)continue;
if(!strlen(hInfo[i][h_besitzer]))return SendClientMessage(playerid,ROT,"Dieses Haus gehört keinem!");
SetPlayerPos(playerid,hInfo[i][h_ix],hInfo[i][h_iy],hInfo[i][h_iz]);
SetPlayerInterior(playerid,hInfo[i][h_interior]);
SetPlayerVirtualWorld(playerid,i);
return 1;
}
return 1;
} -
immer noch das gleiche Problem^^