funktioniert nicht
Habe es mit 7 und mit 8 getestet beides geht nicht. In der Datenbank habe ich 7 Bizzes (bizid fängt ja bei 1 an nicht bei 0 so wie hier)
ich komme nicht in mein Interior rein selber Fehler index 3 size 3
funktioniert nicht
Habe es mit 7 und mit 8 getestet beides geht nicht. In der Datenbank habe ich 7 Bizzes (bizid fängt ja bei 1 an nicht bei 0 so wie hier)
ich komme nicht in mein Interior rein selber Fehler index 3 size 3
Dann pack da mal überall prints rein und schaue, was genau aufgerufen wird und welchen Wert die wichtigen Variablen haben
if(GetPVarInt(playerid,"InBiz")!=-1)
{
new b=GetPVarInt(playerid,"InBiz");
new bi=bInfo[b][bInterior];
if(IsPlayerInRangeOfPoint(playerid,3.0,BizInts[bi][IX],BizInts[bi][IY],BizInts[bi][IZ]))
{
SetPlayerPos(playerid,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ]);
SetPlayerInterior(playerid,0);
SetPlayerVirtualWorld(playerid,0);
SetPVarInt(playerid,"InBiz",-1);
return 1;
}
}
else
{
for(new b;b<sizeof(bInfo);b++)
{
if(IsPlayerInRangeOfPoint(playerid,5.0,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ]))
{
if(bInfo[b][biztype]==3)return SendClientMessage(playerid,-1,"Diesen BizTyp kannst du nicht betreten!");
new bi=bInfo[b][bInterior];
if(bi==0) return SendClientMessage(playerid,-1,"Das Biz hat kein Interior");
SetPlayerPos(playerid,BizInts[bi][IX],BizInts[bi][IY],BizInts[bi][IZ]);
SetPlayerInterior(playerid,BizInts[bi][Interior]);
SetPlayerVirtualWorld(playerid,BizInts[bi][Welt]);
SetPVarInt(playerid,"InBiz",b);
new string[250];
format(string,sizeof(string),"Binfo Interior: %d | BizInfo Y: %f | BizInfo Interior: %d",bi,BizInts[bi][IY],BizInts[bi][Interior]);
printf(string);
return 1;
}
}
}
}
Alles anzeigen
Ich hab da am Ende ein Print aber soweit kommt der erst garnicht.
Ich hab da am Ende ein Print aber soweit kommt der erst garnicht.
Wenn ich sage..alles voller prints setzen, meine ich sicher nicht nur einen print
Sondern...überall in jede Code ebene.
Also immer vor die { was setzen um eben zu schauen, was gemacht wird.
und der string ist egal, wichtiger wäre sowas wie printf("A: %d",b); und beim Nächsten "B: %d" usw...xD
{
for(new b;b<sizeof(bInfo);b++)
{
printf("A: %d",b);
if(IsPlayerInRangeOfPoint(playerid,5.0,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ]))
{
if(bInfo[b][biztype]==3)return SendClientMessage(playerid,-1,"Diesen BizTyp kannst du nicht betreten!");
new bi=bInfo[b][bInterior];
if(bi==0) return SendClientMessage(playerid,-1,"Das Biz hat kein Interior");
SetPlayerPos(playerid,BizInts[bi][IX],BizInts[bi][IY],BizInts[bi][IZ]);
SetPlayerInterior(playerid,BizInts[bi][Interior]);
SetPlayerVirtualWorld(playerid,BizInts[bi][Welt]);
SetPVarInt(playerid,"InBiz",b);
new string[250];
format(string,sizeof(string),"Binfo Interior: %d | BizInfo Y: %f | BizInfo Interior: %d",bi,BizInts[bi][IY],BizInts[bi][Interior]);
printf(string);
return 1;
}
}
}
Alles anzeigen
Er kommt nicht soweit, nicht mal zum ersten es wird nix geprintet wie immer der selbe Fehler
Er kommt nicht soweit, nicht mal zum ersten es wird nix geprintet wie immer der selbe Fehler
Dann tritt der Fehler früher auf, wenn er da nicht mal rein geht
Das bedeutet...mehr prints und zwar früher haha
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(!IsPlayerInAnyVehicle(playerid) && newkeys ==KEY_SECONDARY_ATTACK)// Enter
{
// Öffentliche Gebäude
if(GetPVarInt(playerid,"InBuilding")!=-1)
{
new e=GetPVarInt(playerid,"InBuilding");
if(IsPlayerInRangeOfPoint(playerid,3.0,Building[e][IX],Building[e][IY],Building[e][IZ]))
{
SetPlayerPos(playerid,Building[e][EX],Building[e][EY],Building[e][EZ]);
SetPlayerInterior(playerid,0);
SetPlayerVirtualWorld(playerid,0);
SetPVarInt(playerid,"InBuilding",-1);
}
}
else
{
for(new e;e<=sizeof Building;e++)
{
if(IsPlayerInRangeOfPoint(playerid,3.0,Building[e][EX],Building[e][EY],Building[e][EZ]))
{
SetPlayerPos(playerid,Building[e][IX],Building[e][IY],Building[e][IZ]);
if(Building[e][Interior]!=0)SetPlayerInterior(playerid,Building[e][Interior]);
if(Building[e][Welt]!=0)SetPlayerVirtualWorld(playerid,Building[e][Welt]);
SetPVarInt(playerid,"InBuilding",e);
}
}
}
// Biz
if(GetPVarInt(playerid,"InBiz")!=-1)
{
new b=GetPVarInt(playerid,"InBiz");
new bi=bInfo[b][bInterior];
if(IsPlayerInRangeOfPoint(playerid,3.0,BizInts[bi][IX],BizInts[bi][IY],BizInts[bi][IZ]))
{
SetPlayerPos(playerid,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ]);
SetPlayerInterior(playerid,0);
SetPlayerVirtualWorld(playerid,0);
SetPVarInt(playerid,"InBiz",-1);
return 1;
}
}
else
{
for(new b;b<sizeof(bInfo);b++)
{
printf("A: %d",b);
if(IsPlayerInRangeOfPoint(playerid,5.0,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ]))
{
if(bInfo[b][biztype]==3)return SendClientMessage(playerid,-1,"Diesen BizTyp kannst du nicht betreten!");
new bi=bInfo[b][bInterior];
if(bi==0) return SendClientMessage(playerid,-1,"Das Biz hat kein Interior");
SetPlayerPos(playerid,BizInts[bi][IX],BizInts[bi][IY],BizInts[bi][IZ]);
SetPlayerInterior(playerid,BizInts[bi][Interior]);
SetPlayerVirtualWorld(playerid,BizInts[bi][Welt]);
SetPVarInt(playerid,"InBiz",b);
new string[250];
format(string,sizeof(string),"Binfo Interior: %d | BizInfo Y: %f | BizInfo Interior: %d",bi,BizInts[bi][IY],BizInts[bi][Interior]);
printf(string);
return 1;
}
}
}
}
return 1;
}
Alles anzeigen
Es kann ja sein das die Öffentlichen Gebäude davon betroffen sind ich poste mal den ganzen Code OnPlayerKeyState vielleicht findest du jetzt was weil weiter davor kann ich ja nicht abfragen
schreib das
for(new e;e<=sizeof Building;e++)
bitte mal so
for(new e;e<sizeof (Building);e++)
for(new e;e<=sizeof Building;e++)
Das ist falsch.
Schreib das mal:
for(new e;e<sizeof Building;e++)
Und setz mal unter Zeile 14 ein return 1; sonst läuft der Code ja weiter
Das was ich dachte was niemals als Fehler sein wird ist es jetzt. Wow genau das zu finden hat mich indirekt 5 Monate jetzt gedauert.
Er sagt mir wenn ich in das angegeben 24/7 gehen will, dass dieser Biztyp kein Interior hat aber er hat ein Interior.
if(bi==0) return SendClientMessage(playerid,-1,"Das Biz hat kein Interior");
Dann lösch diese Zeile.
Vermutlich, ist der 24/7 id 0.
Klappt alles, großes Dankeschön an euch beiden!
Ich will noch ein Exitpostion Pickup und 3dTextlabel genau bei den Interior-Pos XYZ erstellen
Also auf meiner Art wäre das ganze nicht so Kurz Zeilig
stock UpdateBizInfos()
{
new string[228];
for(new b;b<sizeof(bInfo);b++)
{
format(string, sizeof(string), "X",BizType[bInfo[b][biztype]],BizType2[bInfo[b][biztype2]],OpenTime[bInfo[b][bopentime]],bInfo[b][bwaren],bInfo[b][bmaxwaren],bInfo[b][bbesitzer],BizBefehl[bInfo[b][bizbefehl]] );
CreateDynamic3DTextLabel(string,GREEN,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ],20.0);
CreateDynamicPickup(1318,1,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ]); // 24/7 Neulingspawn1559
}
return 1;
}
Alles anzeigen
enum bizinteriors{
Name[35],
Interior,
Welt,
Biztype,
Float:IX,Float:IY,Float:IZ// Exit Position
}
static const BizInts[][bizinteriors]={
{"24/7",17,1,1,/*InteriorPos*/-25.884498,-185.868988,1003.546873},
{"Dummy",0,0,0,0.0,0.0,0.0},
{"Dummy",0,0,0,0.0,0.0,0.0},
{"Dummy",0,0,0,0.0,0.0,0.0},
{"Dummy",0,0,0,0.0,0.0,0.0},
{"Dummy",0,0,0,0.0,0.0,0.0},
{"Dummy",0,0,0,0.0,0.0,0.0}
Alles anzeigen
Müsste das dann unter Bizladen hin?
Müsste das dann unter Bizladen hin?
Ich verstehe die Frage nicht lol.
BizInts ist eine globale Variable und muss ganz noch oben.
Ich meine dann die
Zitat von BrightLeaNIch will noch ein Exitpostion Pickup und 3dTextlabel genau bei den Interior-Pos XYZ erstellen
Also wann die erstellt werden nachdem das Biz geladen wurde.
Und wie soll ich die erstellen also ich würde es manuell so machen indem ich zu jedem Biz manuel die Koordinaten angebe
Also wann die erstellt werden nachdem das Biz geladen wurde.
Nein, das ist ja egal, das Interior selbst existiert ja unabhängig von den Bizzen.
Und wie soll ich die erstellen
Na ganz normal mit einer Schleife:
Zeigt mir ein Error an unter OnGameMode habe ich es.
Aber er erstellt bei jedem Biz jetzt eins
Sagen wir, ich habe 2 24/7 mit dem selben Interior, dann sind da doch doppelt so viele TextLabels und Pickups.
for(new b; b<sizeof(BizInts); b++) //Biz
{
CreateDynamic3DTextLabel,("{FAFAFA}Ausgang\n{888888}Benutzte 'enter'",GREEN,BizInts[b][IX],BizInts[b][IY],BizInts[b][IZ],20.0);
CreateDynamicPickup(1318,1,BizInts[b][IX],BizInts[b][IY],BizInts[b][IZ]); // 24/7 Neulingspawn1559
}
(3.) error 076: syntax error in the expression, or invalid function call
...da ist ein Komma vor der (
CreateDynamic3DTextLabel,
Das Komma muss aus dem Funktionsnamen weg.
Nach 7 Monaten bin ich wieder hier im Beitrag...
Selber Fehler wie damals, ich komme nicht in mein Interior rein. Fehler trat plötzlich auf.
http://prntscr.com/o002ch
Hier werden die Sachen geprintet, um zu schauen woran es genau liegt.
Ich blick bei so viel Code nicht mehr durch, ich versuche seit gestern das Problem zu beheben, da ist es schon seit einigen Wochen, nur hatte ich immer anderes zutun.
Ich habe 9 Geschäfte, so muss ich auch 9 Interiors hinzufügen
enum bizinteriors{
Name[35],
Interior,
Welt,
Biztype,
Float:IX,Float:IY,Float:IZ// Exit Position
}
stock const BizInts[][bizinteriors]={
{"24/7",18,1,1,/*InteriorPos*/-31.0002,-91.6301,1003.5469},
{"dummy",0,0,0,/*InteriorPos*/0.0,0.0,0.0},
{"dummy",0,0,0,/*InteriorPos*/0.0,0.0,0.0},
{"dummy",0,0,0,/*InteriorPos*/0.0,0.0,0.0},
{"dummy",0,0,0,/*InteriorPos*/0.0,0.0,0.0},
{"dummy",0,0,0,/*InteriorPos*/0.0,0.0,0.0},
{"dummy",0,0,0,/*InteriorPos*/0.0,0.0,0.0},
{"dummy",0,0,0,/*InteriorPos*/0.0,0.0,0.0},
{"dummy",0,0,0,/*InteriorPos*/0.0,0.0,0.0}
};
Alles anzeigen
enum buildungs{
Name[35],
Interior,
Welt,
Float:EX,Float:EY,Float:EZ,// Enter Position
EInterior,
EWelt,
Float:IX,Float:IY,Float:IZ,// Exit Position
EBuilding,
IsInteriorClosed
}
stock const Building[][buildungs]={
{"Stadthalle",3,0,/*Eingang*/0,0,0,/*Ausgang*/0,0,0,0,0,-1},
{"Stadthalle",3,0,/*Eingang*/0,0,0,/*Ausgang*/0,0,0,0,0,-1},
{"Stadthalle",3,0,/*Eingang*/0,0,0,/*Ausgang*/0,0,0,0,0,-1},
{"Stadthalle",3,0,/*Eingang*/0,0,0,/*Ausgang*/0,0,0,0,0,-1},
{"Stadthalle",3,0,/*Eingang*/0,0,0,/*Ausgang*/0,0,0,0,0,-1},
{"Stadthalle",3,0,/*Eingang*/0,0,0,/*Ausgang*/0,0,0,0,0,-1}
};
Alles anzeigen
if(!IsPlayerInAnyVehicle(playerid) && (newkeys & KEY_SECONDARY_ATTACK))// Enter
{
// Öffentliche Gebäude
new Float:e_dist = 3.0, Float:i_dist = 3.0, Float:tmp, e_id = -1, i_id = -1;
print("1");
for(new i; i<sizeof(Building); i++)
{
print("2");
tmp = GetPlayerDistanceFromPoint(playerid, Building[i][EX],Building[i][EY],Building[i][EZ]);
if(tmp < e_dist)
{
e_dist = tmp;
e_id = i;
}
tmp = GetPlayerDistanceFromPoint(playerid, Building[i][IX],Building[i][IY],Building[i][IZ]);
if(tmp < i_dist)
{
i_dist = tmp;
i_id = i;
}
}
if(e_dist < i_dist)
{
print("3");
if(Building[e_id][IsInteriorClosed] == 1) return SendClientMessage(playerid, -1, "{bc4343}Die Tür ist verschlossen und kann nicht geöffnet werden.");
SetPlayerPos(playerid,Building[e_id][IX],Building[e_id][IY],Building[e_id][IZ]);
SetPlayerInterior(playerid,Building[e_id][Interior]);
SetPlayerVirtualWorld(playerid,Building[e_id][Welt]);
SetPVarInt(playerid,"InBuilding", e_id);
}
else
{
print("4");
SetPlayerPos(playerid,Building[i_id][EX],Building[i_id][EY],Building[i_id][EZ]);
SetPlayerInterior(playerid,Building[i_id][EInterior]);
SetPlayerVirtualWorld(playerid,Building[i_id][EWelt]);
SetPVarInt(playerid,"InBuilding", Building[i_id][EBuilding]);
}
//Biz
print("5");
printf("PVAR %d"), GetPVarInt(playerid,"InBiz");
if(GetPVarInt(playerid,"InBiz")!=-1)
{
print("6");
new b=GetPVarInt(playerid,"InBiz");
new bi=bInfo[b][bInterior];
if(IsPlayerInRangeOfPoint(playerid,3.0,BizInts[bi][IX],BizInts[bi][IY],BizInts[bi][IZ]))
{
SetPlayerPos(playerid,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ]);
SetPlayerInterior(playerid,0);
SetPlayerVirtualWorld(playerid,0);
SetPVarInt(playerid,"InBiz",-1);
return 1;
}
}
else
{
print("7");
for(new b;b<sizeof(bInfo);b++)
{
if(IsPlayerInRangeOfPoint(playerid,5.0,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ]))
{
if(bInfo[b][biztype] == 7)return 1;
if(bInfo[b][biztype] == 3)return 1;
SetPlayerPos(playerid,BizInts[b][IX],BizInts[b][IY],BizInts[b][IZ]);
SetPlayerInterior(playerid,BizInts[b][Interior]);
SetPlayerVirtualWorld(playerid,BizInts[b][Welt]);
SetPVarInt(playerid,"InBiz",b);
}
}
}
}
return 1;
}
Alles anzeigen
Ich habe ein zweites Problem mit dem Biz, er will mir nicht alle Geschäfte setzen, bei 3 hört der auf :(,
eventuell hängt es zusammmen:
Ich erhalte folgenden Error:
http://prntscr.com/o00h6a
Das ganze liegt an der Funktion: UpdateBizInfos (nehme ich sie raus erhalte ich diesen Fehler nichtmehr)
forward BizLaden();
public BizLaden()
{
new rows;
cache_get_row_count(rows);
if(rows==0) return print("(*)Geschäfte konnten nicht geladen werden.");
for(new bizid = 0; bizid < sizeof(bInfo); bizid++)
{
cache_get_value_name_int(bizid,"ID",bInfo[bizid][db_bid]);
if(bInfo[bizid][db_bid]==0)continue;
cache_get_value_name_int(bizid,"biztype",bInfo[bizid][biztype]);
cache_get_value_name_int(bizid,"waren",bInfo[bizid][bwaren]);
cache_get_value_name(bizid,"besitzer",bInfo[bizid][bbesitzer],24);
cache_get_value_name_int(bizid,"bizkasse",bInfo[bizid][bbizkasse]);
cache_get_value_name_float(bizid,"X",bInfo[bizid][bX]);
cache_get_value_name_float(bizid,"Y",bInfo[bizid][bY]);
cache_get_value_name_float(bizid,"Z",bInfo[bizid][bZ]);
cache_get_value_name_int(bizid,"biztype2",bInfo[bizid][biztype2]);
cache_get_value_name_int(bizid,"opentime",bInfo[bizid][bopentime]);
cache_get_value_name_int(bizid,"maxwaren",bInfo[bizid][bmaxwaren]);
cache_get_value_name_int(bizid,"bizbefehl",bInfo[bizid][bizbefehl]);
cache_get_value_name_int(bizid,"bizcolor",bInfo[bizid][biztextfarbe]);
cache_get_value_name_int(bizid,"bizwarentype",bInfo[bizid][bizwarentype]);
}
UpdateBizInfos();
return 1;
}
Alles anzeigen
stock UpdateBizInfos()
{
new string[500];
for(new b;b<sizeof(bInfo);b++)
{
print("=================");
printf("Bizfarbe: %s", BizTextFarbe[bInfo[b][biztextfarbe]]);
printf("Bizwarentype: %s, %d/%d", BizWarenType[bInfo[b][bizwarentype]],bInfo[b][bwaren],bInfo[b][bmaxwaren]);
printf("XYZ: %f %f %f", bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ]);
print("=================");
format(string, sizeof(string), "%s%s %s\n%sÖffnungszeiten:{FAFAFA}%s\n", BizTextFarbe[bInfo[b][biztextfarbe]],BizType[bInfo[b][biztype]],BizType2[bInfo[b][biztype2]],BizTextFarbe[bInfo[b][biztextfarbe]],OpenTime[bInfo[b][bopentime]]);
format(string, sizeof(string), "%s%s%s: %d/%d\n%sName {FAFAFA}%s\n%s",string,BizTextFarbe[bInfo[b][biztextfarbe]],BizWarenType[b][bizwarentype],bInfo[b][bwaren],bInfo[b][bmaxwaren],BizTextFarbe[bInfo[b][biztextfarbe]],bInfo[b][bbesitzer],BizBefehl[bInfo[b][bizbefehl]]);
CreateDynamic3DTextLabel(string,GREEN,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ],20.0);
CreateDynamicPickup(1318,1,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ]);
}
return 1;
}
Alles anzeigen
Die ersten 3 printet er mir dann nach keine Mehr, heißt er erstellt 3 Textdraws nur
stock const BizType[][25]=
{
"-",
"X", //1
"X", //2
"X", //3
"X", //4
"X", //5
"X", //6
"X", //7
"X" //8
},
BizTextFarbe[][25]=
{
"-",
"{FFFFFF}", //1
"{FAFAFA}" //2
},
BizWarenType[][25]=
{
"X",
"X", //1
"X", //2
"X" //3
},
BizType2[][18]=
{
"",
"X", //1
"X", //2
"X", //3
"X", //4
"X" //5
},
OpenTime[][18]=
{
"",
"X", //1
"X", //2
"X", //3
"X", //4
"X", //5
"X", //6
"X" //7
},
BizBefehl[][35]=
{
"",
"X", //1
"X", //2
"X" //3
};
Alles anzeigen
Das mit der 2 ist richtig, da geht er alle Möglichkeiten durch und sucht dir das nähste Interior.
Da steht doch dann 4, das bedeutet, dass er das aufruft.
Wieso setzt er dich nicht da rein?
...printe dir halt die Koordinaten, ob alles richtig geladen wurde, anscheinend ja nicht so.