[SAMMELTHREAD] Kleine Scripting Fragen
- Rafelder
- Unerledigt
-
-
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:
Code
Alles anzeigenocmd: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; }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 anzeigen
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.ä.
Okay dann bau ich da ma was
mehr als in der Wildnis fahren kann ja nicht passieren 
-
Habe ebenso das Problem mit Speichern:
Code
Alles anzeigenstock 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; }
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. -
-
Beitrag von Dr. Frauenarzt ()
Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Fehler gefunden (). -
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:
- Das liegt an dem return 1; in der Funktion getPlayerSpeed. Das bedeutet in deinem TextDraw müsstest du immer eine 1 sehen, wenn du im Auto bist
Also einfach das löschen. - Du könntest die Funktion noch optimierten, indem du anstatt floatsqroot einfach [wiki]VectorSize[/wiki] nutzt, diese wurde dafür extra entwickelt
- In einer Schleife solltest du keine Variablen deklarieren, da das immer viel Zeit braucht.
Im Spoiler ist die optimierte Version
C
Alles anzeigenstock 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); } - Das liegt an dem return 1; in der Funktion getPlayerSpeed. Das bedeutet in deinem TextDraw müsstest du immer eine 1 sehen, wenn du im Auto bist
-
Warum werden bei diesen Code meine Login Boxen mit Angezeigt ?
Code
Alles anzeigennew 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];Code
Alles anzeigenif(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; } -
Beitrag von Dr. Frauenarzt ()
Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: FEHLER GEFUNDEN (). -
Hallo, ich verstehe da jetzt nicht was daran falsch ist.
Mir wird folgende Fehlermeldung ausgespuckt:s.p(324) : error 010: invalid function or declaration
s.p(326) : error 010: invalid function or declaration
s.p(329) : error 010: invalid function or declaration
s.p(331) : error 021: symbol already defined: "SendMessageToAdmins"
s.p(333) : error 010: invalid function or declaration
s.p(388) : warning 203: symbol is never used: "achat"
s.p(388) : warning 203: symbol is never used: "msg"Code:
Code
Alles anzeigenocmd@3:a,achat,adminchat(playerid,params[]) { if(PlayerInfo[playerid][pAdmin]>=1) { new achat[128],msg[128]; if(sscanf(params,"s",achat))return SendClientMessage(playerid,COLOR_RED,"[INFO] Nutze /a[chat] [Text]"); format(msg,sizeof(msg),"%s %s: %s",Adminrang(playerid),PlayerInfo[playerid][pName],achat); SendMessageToAdmins(COLOR_ADMIN,msg); } else{ SendClientMessage(playerid,COLOR_RED,"Du bist kein Admin!"); } } -
Nutzt du die aktuelle ocmd Include?
ocmd 2.1.1 [ Update 3.11.2013 ]Aktualisiere diese gegebenenfalls.
-
Falls du die neuste ocmd Include hast, und du das sscanf Plugin nutzt, versuch es mal bitte so:
ocmd@3:a,achat,adminchat(playerid,params[])
{
if(PlayerInfo[playerid][pAdmin]>=1)
{
new achat[128],msg[128];
if(sscanf(params,"s[128]",achat))return SendClientMessage(playerid,COLOR_RED,"[INFO] Nutze /a[chat] [Text]");
format(msg,sizeof(msg),"%s %s: %s",Adminrang(playerid),PlayerInfo[playerid][pName],achat);
SendMessageToAdmins(COLOR_ADMIN,msg);
}
else{
SendClientMessage(playerid,COLOR_RED,"Du bist kein Admin!");
}
}Dazu schaut es aus, als wenn du schon die Funktion "symbol already defined: "SendMessageToAdmins"" irgendwo hast, und, ist der stock über den Befehl oder unter den Befehl ?
Hatte tatsächlich schon einmal das Problem, als der Stock unter dem Befehl war, das mir der Compiler auch Fehler ausgespuckt hat.


