Ist es eig möglich türen so aufgehen zu lassen wie bei einer Waschanlage also die alten noch so wie die Aral immer hatte
zb so
quelle
https://www.focus.de/auto/ratg…he-achten_id_4659816.html
Ist es eig möglich türen so aufgehen zu lassen wie bei einer Waschanlage also die alten noch so wie die Aral immer hatte
zb so
quelle
https://www.focus.de/auto/ratg…he-achten_id_4659816.html
Soweit alles korrekt richtig.
So das ist der Log beim laden:
[22:16:01] [INFO] query "SELECT * FROM `server_biz`" successfully executed within 3.379 milliseconds
[22:16:01] [DEBUG] CResultSet::Create(connection=0x6c87618, query_str='SELECT * FROM `server_biz`')
[22:16:01] [DEBUG] created new resultset '0x6cd6ea0'
[22:16:01] [DEBUG] fetched MySQL result '0x27130d8'
[22:16:01] [DEBUG] allocated 588 bytes for PAWN result
[22:16:01] [DEBUG] CConnection::Execute(query=0x6cc55a8, this=0x6ef7020, connection=0x6c87618)
[22:16:01] [DEBUG] CQuery::Execute(this=0x6cc55a8, connection=0x6c87618)
[22:16:01] [DEBUG] mysql_tquery(1, "SELECT * FROM `server_biz`", "LoadBizes", "")
[22:16:01] [DEBUG] CCallback::Create(amx=0x4a93070, name='LoadBizes', format='', params=0x6a9fc88, param_offset=5)
[22:16:01] [DEBUG] CCallback::Create - callback index for 'LoadBizes': 118
[22:16:01] [DEBUG] CQuery::Execute(this=0x27157a8, connection=0x6c90800)
[22:16:01] [INFO] Callback 'LoadBizes' set up for delayed execution.
[22:16:01] [DEBUG] created delayed callback with 0 parameter
[22:16:01] [DEBUG] CHandle::Execute(this=0x6c37c40, type=1, query=0x6cc4470)
[22:16:01] [DEBUG] CHandle::Execute - return value: true
[22:16:01] [DEBUG] mysql_tquery: return value: '1'
//E:
Der Befehl zum kaufen. eigentlich funktioniert der weil ID 2 und ID 3 kann ich damit ja auch kaufen. Seltsam hatte sowas noch nie.
ocmd:buybiz(playerid)
{
new string[128];
for(new i=1;i<MAX_BIZ;i++)
{
if(Biz[i][bCreated] == 1)
{
if(IsPlayerInRangeOfPoint(playerid, 2.0, Biz[i][bEnterX], Biz[i][bEnterY], Biz[i][bEnterZ]))
{
if(PlayerInfo[playerid][pPersonalausweis] == 0)return SendClientMessage(playerid, COLOR_GREY, "Du besitzt keinen Personalausweis.");
if(strcmp(Biz[i][bBesitzer], GetName(playerid), false) == 0)return SendClientMessage(playerid, COLOR_GREY, "Dieses Geschäft gehört bereits dir.");
if(strcmp(Biz[i][bBesitzer], "-", false))return SendClientMessage(playerid, COLOR_GREY, "Dieses Geschäft ist bereits verkauft.");
new count = CountPlayerBizes(playerid);
if(count > 0)return SendClientMessage(playerid, COLOR_GREY, "Du besitzt bereits ein Geschäft.");
if((GetPlayerMoneys(playerid) - Biz[i][bPreis]) < 0)return SendClientMessage(playerid, COLOR_GREY, ERROR_MONEY);
format(string, sizeof(string), "Herzlichen Glückwunsch zu deinem neuen Geschäft. (-$%d)", Biz[i][bPreis]);
SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
GivePlayerMoneys(playerid, -Biz[i][bPreis]);
DestroyPickup(Biz[i][bPickup]);
Biz[i][bPickup] = CreatePickup(BIZ_OWNER_PICKUP, 1, Biz[i][bEnterX], Biz[i][bEnterY], Biz[i][bEnterZ], -1);
strmid(Biz[i][bBesitzer], GetName(playerid), 0, strlen(GetName(playerid)), 24);
Biz[i][bOwned] = 1;
UpdateBizLabel(i, Biz[i][bOwned]);
SaveBiz(i);
PlayerUpdate(playerid);
return 1;
}
}
}
return 1;
}
Alles anzeigen
Ist es eig möglich türen so aufgehen zu lassen wie bei einer Waschanlage also die alten noch so wie die Aral immer hatte
Ja, mit [wiki]MoveObject[/wiki] kannst du auch Türen so rotieren lassen, google da einfach mal nach
Soweit alles korrekt richtig.
Sorry, bin schon etwas angetrunken xD
Meinte das Laden sieht korrekt aus, eventuell ist der Fehler beim kaufen, da du das ja nicht kannst
Eben, aber da ja alles korrekt geladen wird, liegt es ja eventuell an dem Befehl vom Kaufen?
Oder wo vermutest du den Fehler?
ich vermute eher beim kaufen weil laden funktioniert ja.
Befehl zum kaufen:
ocmd:buybiz(playerid)
{
new string[128];
for(new i=1;i<MAX_BIZ;i++)
{
if(Biz[i][bCreated] == 1)
{
if(IsPlayerInRangeOfPoint(playerid, 2.0, Biz[i][bEnterX], Biz[i][bEnterY], Biz[i][bEnterZ]))
{
if(PlayerInfo[playerid][pPersonalausweis] == 0)return SendClientMessage(playerid, COLOR_GREY, "Du besitzt keinen Personalausweis.");
if(strcmp(Biz[i][bBesitzer], GetName(playerid), false) == 0)return SendClientMessage(playerid, COLOR_GREY, "Dieses Geschäft gehört bereits dir.");
if(strcmp(Biz[i][bBesitzer], "-", false))return SendClientMessage(playerid, COLOR_GREY, "Dieses Geschäft ist bereits verkauft.");
new count = CountPlayerBizes(playerid);
if(count > 0)return SendClientMessage(playerid, COLOR_GREY, "Du besitzt bereits ein Geschäft.");
if((GetPlayerMoneys(playerid) - Biz[i][bPreis]) < 0)return SendClientMessage(playerid, COLOR_GREY, ERROR_MONEY);
format(string, sizeof(string), "Herzlichen Glückwunsch zu deinem neuen Geschäft. (-$%d)", Biz[i][bPreis]);
SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
GivePlayerMoneys(playerid, -Biz[i][bPreis]);
DestroyPickup(Biz[i][bPickup]);
Biz[i][bPickup] = CreatePickup(BIZ_OWNER_PICKUP, 1, Biz[i][bEnterX], Biz[i][bEnterY], Biz[i][bEnterZ], -1);
strmid(Biz[i][bBesitzer], GetName(playerid), 0, strlen(GetName(playerid)), 24);
Biz[i][bOwned] = 1;
UpdateBizLabel(i, Biz[i][bOwned]);
SaveBiz(i);
PlayerUpdate(playerid);
return 1;
}
}
}
return 1;
}
Alles anzeigen
An was anderem kanns ja nicht liegen weil man es ja kaufen muss.
Ja, mit [wiki]MoveObject[/wiki] kannst du auch Türen so rotieren lassen, google da einfach mal nach
Sorry, bin schon etwas angetrunken xDMeinte das Laden sieht korrekt aus, eventuell ist der Fehler beim kaufen, da du das ja nicht kannst
Ja ist mir schon kla CreateObject wird ja nix passieren ;D
nur ich muss die ja 2 mal moven einmal hinfahren lassen und dann muss die sich noch drehen und das gleich mit 4 türen da komme ich nicht mehr mit
nur ich muss die ja 2 mal moven einmal hinfahren lassen und dann muss die sich noch drehen und das gleich mit 4 türen da komme ich nicht mehr mit
Also zunächst muss ich gestehen, dass ich keine Ahnung hab, wie sich genau die Türen verhalten sollen in deiner Vorstellung.
Meinst du, dass die sich abknicken oder sollen die nur einfach auf und zu gehen?
Ansonsten, mach dir ein Filterskript, erstell dir mal eine Tür und spiel mit den Rotationen rum, so immer in 90° schritten.
Dann weißt du, wie du sie moven musst und wie das so alles aussieht
Und kannst das filterscript ja ingame immer neu laden und somit direkt dein Ergebnis sehen, brauchst nicht immer den Server neustarten o.ä.
Alles anzeigenAlso zunächst muss ich gestehen, dass ich keine Ahnung hab, wie sich genau die Türen verhalten sollen in deiner Vorstellung.
Meinst du, dass die sich abknicken oder sollen die nur einfach auf und zu gehen?
Ansonsten, mach dir ein Filterskript, erstell dir mal eine Tür und spiel mit den Rotationen rum, so immer in 90° schritten.
Dann weißt du, wie du sie moven musst und wie das so alles aussieht
Und kannst das filterscript ja ingame immer neu laden und somit direkt dein Ergebnis sehen, brauchst nicht immer den Server neustarten o.ä.
Okay dann bau ich da ma was mehr als in der Wildnis fahren kann ja nicht passieren
Habe ebenso das Problem mit Speichern:
stock SaveBiz(i)
{
new mainQuery[1537], secondQuery[256];
if(Biz[i][bCreated] != 0 && i != 0)
{
mysql_format(handle, secondQuery, sizeof(secondQuery), "UPDATE `server_biz` SET `EnterX`='%f', `EnterY`='%f', `EnterZ`='%f', `Owned`='%d', `Type`='%d', ",
Biz[i][bEnterX], Biz[i][bEnterY], Biz[i][bEnterZ], Biz[i][bOwned], Biz[i][bType]);
strcat(mainQuery, secondQuery);
mysql_format(handle, secondQuery, sizeof(secondQuery), "%s`Interior`='%d', `Level`='%d', `Preis`='%d', `Besitzer`='%s', `Teilhaber`='%s', `Kasse`='%d', ", secondQuery,
Biz[i][bInterior], Biz[i][bLevel], Biz[i][bPreis], Biz[i][bBesitzer], Biz[i][bTeilhaber], Biz[i][bKasse]);
strcat(mainQuery, secondQuery);
mysql_format(handle, secondQuery, sizeof(secondQuery), "%s`ExitX`='%f', `ExitY`='%f', `ExitZ`='%f', ", secondQuery,
Biz[i][bExitX], Biz[i][bExitY], Biz[i][bExitZ]);
strcat(mainQuery, secondQuery);
mysql_format(handle, secondQuery, sizeof(secondQuery), "%s`Beschreibung`='%s', `Lock`='%d', `Eintritt`='%d', `Produkte`='%d', `MaxProdukte`='%d', `ProdPreis`='%d' WHERE `id`='%d'", secondQuery,
Biz[i][bBeschreibung], Biz[i][bLock], Biz[i][bdbID], Biz[i][bEintritt], Biz[i][bProdukte], Biz[i][bMaxProdukte], Biz[i][bProdPreis]);
strcat(mainQuery, secondQuery);
mysql_pquery(handle, secondQuery, "", "");
printf(secondQuery);
strdel(mainQuery, 0, sizeof(mainQuery));
strdel(secondQuery, 0, sizeof(secondQuery));
printf("[SAVE] Biz %d gespeichert.", i);
}
return 1;
}
Alles anzeigen
Laut log ist alles korrekt .
Habe das mit secondquery eingehalt wie es Jeffry gesagt hat.
Er greift ja auch nicht mehr zu seid dem ich das umgestellt habe das kaufen funktioniert jetz.
Hey,
ich habe das Problem das mein Fraktionsname nicht ausgelesen wird. Alles andere irgendwie schon, das heißt die Pickups werden erstellt und die Base wird auch richtig angezeigt.
public Load_Fraktion(i)
{
new rows, string[256];
cache_get_row_count(rows);
for(i=0; i<rows; i++)
{
cache_get_value_name_int(i, "fid", fInfo[i][fID]);
cache_get_value_name(i, "fname", fInfo[i][fName]);
cache_get_value_name_int(i, "ftyp", fInfo[i][fTyp]);
cache_get_value_name_int(i, "fkasse", fInfo[i][fKasse]);
cache_get_value_name_float(i, "fspawn_x", fInfo[i][fSpawn_X]);
cache_get_value_name_float(i, "fspawn_y", fInfo[i][fSpawn_Y]);
cache_get_value_name_float(i, "fspawn_z", fInfo[i][fSpawn_Z]);
cache_get_value_name_float(i, "fspawn_r", fInfo[i][fSpawn_R]);
cache_get_value_name_float(i, "ficon_x", fInfo[i][fIcon_X]);
cache_get_value_name_float(i, "ficon_y", fInfo[i][fIcon_Y]);
cache_get_value_name_float(i, "ficon_z", fInfo[i][fIcon_Z]);
cache_get_value_name_int(i, "member", fInfo[i][fMember]);
cache_get_value_name_int(i, "base", fInfo[i][fBase]);
DestroyPickup(fInfo[i][Pickup]);
Delete3DTextLabel(fInfo[i][Text]);
printf("Fraktion %i geladen", i);
printf("NAME: %i", fInfo[i][fBase]);
if(fInfo[i][fBase] == 1){
format(string,sizeof(string), "%s\nHQ: geöffnet", fInfo[i][fName]);
fInfo[i][Text] = Create3DTextLabel(string, -1, fInfo[i][fIcon_X], fInfo[i][fIcon_Y], fInfo[i][fIcon_Z], 40.0, 0, 1);
}else if(fInfo[i][fBase] == 0){
format(string, sizeof(string), "%s\nHQ: geschlossen", fInfo[i][fName]);
fInfo[i][Text] = Create3DTextLabel(string, -1, fInfo[i][fIcon_X], fInfo[i][fIcon_Y], fInfo[i][fIcon_Z], 40.0, 0, 1);
}
fInfo[i][Pickup] = CreatePickup(1272, 1, fInfo[i][fIcon_X], fInfo[i][fIcon_Y], fInfo[i][fIcon_X]);
}
}
cache_get_value_name(i, "fname", fInfo[i][fName]);
zu:
cache_get_value_name(i, "fname", fInfo[i][fName], 32);
32 = die maximale Länge, die "fName" hat.
Warum wird das textdraw nicht aktualisiert?
for(new i=0; i<MAX_PLAYERS; i++)
{
new string[128];
format(string, sizeof(string), "Speed: %d KM/H", getPlayerSpeed(i));
PlayerTextDrawSetString(i, Tacho9[i], string);
}
stock getPlayerSpeed(playerid)
{
new Float:x, Float:y, Float:z, Float:rtn;
if(IsPlayerInAnyVehicle(playerid))
{
GetVehicleVelocity(GetPlayerVehicleID(playerid), x, y, z);
return 1;
} else {
GetPlayerVelocity(playerid, x, y, z);
}
rtn = floatsqroot(x*x + y*y + z*z);
return floatround(rtn * 100 * 1.61);
}
@Kaliber
Hab mir das gestern ein bisschen abgeschaut. Kriege es selber aber leider nicht hin.
Vielleicht kannst du ja mal rüber gucken.
forward OnBussinessCheck(playerid);
public OnBussinessCheck(playerid)
{
new rows, string[512] = "Name\tTyp\tKasse\tBesitzer", ints[5], tmp[32];
cache_get_row_count(rows);
for(new i; i < rows; i++)
{
cache_get_value_name_int(i, "bid", ints[0]);
cache_get_value(i, 1, tmp);
cache_get_value_name_int(i, "b_typ", ints[1]);
cache_get_value_name_int(i, "b_kasse", ints[2]);
cache_get_value_name(i, "b_owner", ints[3]);
cache_get_value_name_int(i, "b_owned", ints[4]);
format(string, sizeof(string), "%s\nID: %i | %s\t%s\t%i$\t%s",
string,ints[0],tmp,(ints[1]==0)?("Tankstelle"):("Ammunation"):("Paintball"):("Fahrzeuglackiererei"), ints[2], (ints[4]==0)?("Niemand"):(ints[3]));
}
ShowPlayerDialog(playerid, DIALOG_FRAKTIONSLIST, DIALOG_STYLE_TABLIST_HEADERS, "existierende Bussiness", string, "Ok","");
return 1;
}
3 Dinge zu dem Code:
Im Spoiler ist die optimierte Version
stock getPlayerSpeed(playerid)
{
new Float:x, Float:y, Float:z;
if(IsPlayerInAnyVehicle(playerid)) GetVehicleVelocity(GetPlayerVehicleID(playerid), x, y, z);
else GetPlayerVelocity(playerid, x, y, z);
return floatround(floatmul(VectorSize(x,y,z), 161.0));
}
//Nutzung dann so:
for(new i,string[128]; i<MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue;
format(string, sizeof(string), "Speed: %d KM/H", getPlayerSpeed(i));
PlayerTextDrawSetString(i, Tacho9[i], string);
}
Alles anzeigen
Warum werden bei diesen Code meine Login Boxen mit Angezeigt ?
new Text:Register[19];
new Text:Login[2];
new PlayerText:Registername[MAX_PLAYERS],
PlayerText:Registerpw[MAX_PLAYERS],
PlayerText:Registertag[MAX_PLAYERS],
PlayerText:Registermonat[MAX_PLAYERS],
PlayerText:Registerjahr[MAX_PLAYERS],
PlayerText:Registerpfeill[MAX_PLAYERS],
PlayerText:Registerpfeilr[MAX_PLAYERS],
PlayerText:Registerpfeill2[MAX_PLAYERS],
PlayerText:Registerpfeilr2[MAX_PLAYERS],
PlayerText:Registergeschlecht[MAX_PLAYERS],
PlayerText:Registerb[MAX_PLAYERS],
PlayerText:Registerskin[MAX_PLAYERS],
PlayerText:Registeremail[MAX_PLAYERS],
PlayerText:Loginname[MAX_PLAYERS],
PlayerText:Loginskin[MAX_PLAYERS],
PlayerText:Loginb[MAX_PLAYERS];
Alles anzeigen
if(rows == 0)
{
for(new i = 0; i < sizeof(Register); i++)
{
TextDrawShowForPlayer(playerid, Register[i]);
}
PlayerTextDrawSetString(playerid, Registername[playerid], pInfo[playerid][pName]);
PlayerTextDrawShow(playerid, Registername[playerid]);
PlayerTextDrawSetSelectable(playerid, Registerpw[playerid], 1);
PlayerTextDrawShow(playerid, Registerpw[playerid]);
PlayerTextDrawSetSelectable(playerid, Registertag[playerid], 1);
PlayerTextDrawShow(playerid, Registertag[playerid]);
PlayerTextDrawSetSelectable(playerid, Registermonat[playerid], 1);
PlayerTextDrawShow(playerid, Registermonat[playerid]);
PlayerTextDrawSetSelectable(playerid, Registerjahr[playerid], 1);
PlayerTextDrawShow(playerid, Registerjahr[playerid]);
PlayerTextDrawShow(playerid, Registerpfeill[playerid]);
PlayerTextDrawShow(playerid, Registerpfeilr[playerid]);
PlayerTextDrawSetSelectable(playerid, Registergeschlecht[playerid], 1);
PlayerTextDrawShow(playerid, Registergeschlecht[playerid]);
//PlayerTextDrawSetSelectable(playerid, Registeremail[playerid], 1);
//PlayerTextDrawShow(playerid, Registeremail[playerid]);
PlayerTextDrawSetSelectable(playerid, Registerb[playerid], 1);
PlayerTextDrawShow(playerid, Registerb[playerid]);
PlayerTextDrawShow(playerid, Registerskin[playerid]);
SelectTextDraw(playerid, 0xFF0000FF);
Regstep[playerid] = 1;
SendClientMessage(playerid, -1, "Herzlich Willkommen, Gebe hier zunächst deine Daten ein.");
SendClientMessage(playerid, -1, "Soblad du damit fertig bist kannst du dein Skin auswählen.");
return 1;
}
Alles anzeigen